summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyril Lavier <cyril.lavier@davromaniak.eu>2012-01-25 22:17:12 +0100
committerCyril Lavier <cyril.lavier@davromaniak.eu>2012-01-25 22:17:12 +0100
commitb0ae81faef08506b4830362ace009baabcc627d8 (patch)
tree57377947ba9b28b0b34b81718d892984b6d20b57
parent44c8fe77bf52709f70324e15a1c5c543c5b59a6d (diff)
Imported Upstream version 3.2
-rw-r--r--AUTHORS15
-rw-r--r--INSTALL243
-rw-r--r--Mercurial-Access13
-rw-r--r--acinclude.m4135
-rw-r--r--aclocal.m42756
-rw-r--r--buildsys.mk.in313
-rw-r--r--[-rwxr-xr-x]config.guess344
-rw-r--r--config.h.in117
-rw-r--r--[-rwxr-xr-x]config.rpath253
-rw-r--r--[-rwxr-xr-x]config.sub181
-rwxr-xr-xconfigure9519
-rw-r--r--[-rwxr-xr-x]configure.ac1154
-rw-r--r--extra.mk.in400
-rwxr-xr-xinstall-sh517
-rw-r--r--m4/arts.m4131
-rw-r--r--m4/buildsys.m4141
-rw-r--r--m4/codeset.m423
-rw-r--r--m4/gettext.m4415
-rw-r--r--m4/glibc21.m432
-rw-r--r--m4/iconv.m4103
-rw-r--r--m4/intdiv0.m472
-rw-r--r--m4/inttypes-pri.m432
-rw-r--r--m4/inttypes.m427
-rw-r--r--m4/inttypes_h.m428
-rw-r--r--m4/isc-posix.m426
-rw-r--r--m4/jack.m434
-rw-r--r--m4/lcmessage.m432
-rw-r--r--m4/lib-ld.m4110
-rw-r--r--m4/lib-link.m4551
-rw-r--r--m4/lib-prefix.m4155
-rw-r--r--m4/libFLAC.m4106
-rw-r--r--m4/libmad.m4116
-rw-r--r--m4/lirc.m4363
-rw-r--r--m4/nls.m449
-rw-r--r--m4/pkg.m4150
-rw-r--r--m4/po.m4197
-rw-r--r--m4/progtest.m491
-rw-r--r--m4/sdl.m470
-rw-r--r--m4/sid.m42
-rw-r--r--m4/stdint_h.m428
-rw-r--r--m4/uintmax_t.m432
-rw-r--r--m4/ulonglong.m423
-rwxr-xr-xmkinstalldirs111
-rw-r--r--po/Makefile12
-rw-r--r--po/POTFILES.in49
-rw-r--r--po/audacious-plugins.pot4001
-rw-r--r--po/ca.po5738
-rw-r--r--po/cs.po6887
-rw-r--r--po/cy.po4254
-rw-r--r--po/de.po5280
-rw-r--r--po/es.po5732
-rw-r--r--po/es_AR.po3666
-rw-r--r--po/es_MX.po3673
-rw-r--r--po/et.po4278
-rw-r--r--po/eu.po5722
-rw-r--r--po/fr.po5383
-rw-r--r--po/hu.po4631
-rw-r--r--po/it.po3663
-rw-r--r--po/ja.po5693
-rw-r--r--po/lt.po3659
-rw-r--r--po/lv.po5903
-rw-r--r--po/pl.po5115
-rw-r--r--po/ro.po4712
-rw-r--r--po/ru.po7942
-rw-r--r--po/sk.po5225
-rw-r--r--po/sr.po3654
-rw-r--r--po/tr.po5490
-rw-r--r--po/uk.po3659
-rw-r--r--po/vi.po3423
-rw-r--r--po/zh_CN.po5852
-rw-r--r--po/zh_TW.po3517
-rw-r--r--src/CoreAudio/Makefile19
-rw-r--r--src/CoreAudio/about.c44
-rw-r--r--src/CoreAudio/audio.c678
-rw-r--r--src/CoreAudio/configure.c279
-rw-r--r--src/CoreAudio/convert.c286
-rw-r--r--src/CoreAudio/coreaudio.c47
-rw-r--r--src/CoreAudio/coreaudio.h106
-rw-r--r--src/CoreAudio/dbaudiolib.h231
-rw-r--r--src/CoreAudio/dbconvert.c524
-rw-r--r--src/CoreAudio/init.c57
-rw-r--r--src/CoreAudio/mixer.c81
-rw-r--r--src/OSS/Makefile4
-rw-r--r--src/OSS/OSS.c67
-rw-r--r--src/OSS/OSS.h7
-rw-r--r--src/OSS/audio.c16
-rw-r--r--src/OSS/configure.c119
-rw-r--r--src/aac/Makefile7
-rw-r--r--src/aac/aac_utils.c158
-rw-r--r--src/aac/itunes-cover.c88
-rw-r--r--src/aac/libmp4.c847
-rw-r--r--src/aac/mp4_utils.c17
-rw-r--r--src/aac/mp4ff/mp4atom.c11
-rw-r--r--src/aac/mp4ff/mp4ff_int_types.h6
-rw-r--r--src/aac/tagging.h11
-rw-r--r--src/aac/tagging_mp4.c44
-rw-r--r--src/adplug/Makefile4
-rw-r--r--src/adplug/adplug-xmms.cc766
-rw-r--r--src/adplug/adplug-xmms.h39
-rw-r--r--src/adplug/core/a2m.cxx12
-rw-r--r--src/adplug/core/a2m.h2
-rw-r--r--src/adplug/core/adl.cxx2
-rw-r--r--src/adplug/core/adplug.cxx8
-rw-r--r--src/adplug/core/adtrack.cxx8
-rw-r--r--src/adplug/core/binio_virtual.h98
-rw-r--r--src/adplug/core/cff.cxx5
-rw-r--r--src/adplug/core/d00.cxx8
-rw-r--r--src/adplug/core/debug.h2
-rw-r--r--src/adplug/core/dmo.cxx8
-rw-r--r--src/adplug/core/fmopl.c31
-rw-r--r--src/adplug/core/hsc.cxx11
-rw-r--r--src/adplug/core/hsp.cxx8
-rw-r--r--src/adplug/core/imf.cxx10
-rw-r--r--src/adplug/core/jbm.cxx16
-rw-r--r--src/adplug/core/ksm.cxx9
-rw-r--r--src/adplug/core/lds.cxx8
-rw-r--r--src/adplug/core/mid.cxx10
-rw-r--r--src/adplug/core/mkj.cxx2
-rw-r--r--src/adplug/core/rix.cxx2
-rw-r--r--src/adplug/core/rol.cxx2
-rw-r--r--src/adplug/core/sa2.cxx2
-rw-r--r--src/adplug/plugin.c30
-rw-r--r--src/alarm/Makefile4
-rw-r--r--src/alarm/alarm.c520
-rw-r--r--src/alarm/alarm.h13
-rw-r--r--src/alarm/callbacks.h4
-rw-r--r--src/alarm/interface.c1030
-rw-r--r--src/alarm/interface.h3
-rw-r--r--src/alarm/support.h7
-rw-r--r--src/albumart/Makefile12
-rw-r--r--src/albumart/albumart.c122
-rw-r--r--src/alsa/Makefile6
-rw-r--r--[-rwxr-xr-x]src/alsa/alsa.c97
-rw-r--r--src/alsa/alsa.h8
-rw-r--r--src/alsa/config.c119
-rw-r--r--src/alsa/plugin.c18
-rw-r--r--src/amidi-plug/Makefile6
-rw-r--r--src/amidi-plug/amidi-plug.c131
-rw-r--r--src/amidi-plug/amidi-plug.h27
-rw-r--r--src/amidi-plug/backend-alsa/Makefile2
-rw-r--r--src/amidi-plug/backend-alsa/b-alsa.c2
-rw-r--r--src/amidi-plug/backend-fluidsynth/Makefile2
-rw-r--r--src/amidi-plug/i_backend.h2
-rw-r--r--src/amidi-plug/i_configure-alsa.c24
-rw-r--r--src/amidi-plug/i_configure-ap.c60
-rw-r--r--src/amidi-plug/i_configure-fluidsynth.c96
-rw-r--r--src/amidi-plug/i_configure.c20
-rw-r--r--src/aosd/Makefile2
-rw-r--r--src/aosd/aosd.c16
-rw-r--r--src/aosd/aosd.h11
-rw-r--r--src/aosd/aosd_cfg.c187
-rw-r--r--src/aosd/aosd_trigger.c23
-rw-r--r--src/aosd/aosd_ui.c47
-rw-r--r--src/aosd/aosd_ui.c.old159
-rw-r--r--src/asx/Makefile11
-rw-r--r--src/asx/asx.c99
-rw-r--r--src/asx/util.c243
-rw-r--r--src/asx/util.h (renamed from src/gtkui/util.h)19
-rw-r--r--src/audpl/Makefile10
-rw-r--r--src/audpl/audpl.c225
-rw-r--r--src/bluetooth/Makefile18
-rw-r--r--src/bluetooth/agent.c1029
-rw-r--r--src/bluetooth/agent.h37
-rw-r--r--src/bluetooth/auth-agent-glue.h223
-rw-r--r--src/bluetooth/bluetooth.c404
-rw-r--r--src/bluetooth/bluetooth.h52
-rw-r--r--src/bluetooth/dbus-glue.h813
-rw-r--r--src/bluetooth/gui.c314
-rw-r--r--src/bluetooth/gui.h27
-rw-r--r--src/bluetooth/marshal.list2
-rw-r--r--src/bluetooth/passkey-agent-glue.h264
-rw-r--r--src/bluetooth/scan_gui.c167
-rw-r--r--src/bluetooth/scan_gui.h30
-rw-r--r--src/blur_scope/Makefile4
-rw-r--r--src/blur_scope/blur_scope.c290
-rw-r--r--src/blur_scope/blur_scope.h34
-rw-r--r--src/blur_scope/config.c79
-rw-r--r--src/bs2b/Makefile5
-rw-r--r--src/bs2b/plugin.c170
-rw-r--r--src/cairo-spectrum/Makefile12
-rw-r--r--src/cairo-spectrum/cairo-spectrum.c293
-rw-r--r--src/cd-menu-items/Makefile4
-rw-r--r--src/cd-menu-items/cd-menu-items.c62
-rw-r--r--src/cdaudio-ng/Makefile4
-rw-r--r--src/cdaudio-ng/cdaudio-ng.c681
-rw-r--r--src/cdaudio-ng/cdaudio-ng.h5
-rw-r--r--src/cdaudio-ng/configure.c14
-rw-r--r--src/cdaudio-ng/configure.h2
-rw-r--r--src/compressor/compressor.c44
-rw-r--r--src/compressor/compressor.h4
-rw-r--r--src/compressor/plugin.c88
-rw-r--r--src/console/Audacious_Driver.cxx128
-rw-r--r--src/console/Ay_Apu.cxx10
-rw-r--r--src/console/Ay_Apu.h2
-rw-r--r--src/console/Ay_Cpu.cxx16
-rw-r--r--src/console/Ay_Cpu.h2
-rw-r--r--src/console/Ay_Emu.cxx21
-rw-r--r--src/console/Ay_Emu.h2
-rw-r--r--src/console/Blip_Buffer.cxx42
-rw-r--r--src/console/Blip_Buffer.h15
-rw-r--r--src/console/Classic_Emu.cxx12
-rw-r--r--src/console/Classic_Emu.h2
-rw-r--r--src/console/Data_Reader.cxx2
-rw-r--r--src/console/Data_Reader.h2
-rw-r--r--src/console/Dual_Resampler.cxx2
-rw-r--r--src/console/Dual_Resampler.h2
-rw-r--r--src/console/Effects_Buffer.cxx10
-rw-r--r--src/console/Effects_Buffer.h2
-rw-r--r--src/console/Fir_Resampler.cxx2
-rw-r--r--src/console/Fir_Resampler.h2
-rw-r--r--src/console/Gb_Apu.cxx2
-rw-r--r--src/console/Gb_Cpu.cxx2
-rw-r--r--src/console/Gb_Cpu.h2
-rw-r--r--src/console/Gb_Oscs.h2
-rw-r--r--src/console/Gbs_Emu.cxx17
-rw-r--r--src/console/Gbs_Emu.h2
-rw-r--r--src/console/Gme_File.cxx4
-rw-r--r--src/console/Gme_File.h34
-rw-r--r--src/console/Gym_Emu.cxx7
-rw-r--r--src/console/Gym_Emu.h2
-rw-r--r--src/console/Hes_Apu.cxx6
-rw-r--r--src/console/Hes_Apu.h1
-rw-r--r--src/console/Hes_Cpu.cxx22
-rw-r--r--src/console/Hes_Cpu.h2
-rw-r--r--src/console/Hes_Emu.cxx20
-rw-r--r--src/console/Hes_Emu.h2
-rw-r--r--src/console/Kss_Cpu.cxx16
-rw-r--r--src/console/Kss_Cpu.h2
-rw-r--r--src/console/Kss_Emu.cxx24
-rw-r--r--src/console/Kss_Emu.h2
-rw-r--r--src/console/Kss_Scc_Apu.cxx2
-rw-r--r--src/console/Kss_Scc_Apu.h2
-rw-r--r--src/console/M3u_Playlist.cxx6
-rw-r--r--src/console/M3u_Playlist.h2
-rw-r--r--src/console/Makefile5
-rw-r--r--src/console/Multi_Buffer.cxx2
-rw-r--r--src/console/Multi_Buffer.h10
-rw-r--r--src/console/Music_Emu.cxx7
-rw-r--r--src/console/Music_Emu.h15
-rw-r--r--src/console/Nes_Apu.cxx2
-rw-r--r--src/console/Nes_Cpu.cxx8
-rw-r--r--src/console/Nes_Cpu.h2
-rw-r--r--src/console/Nes_Fme7_Apu.cxx12
-rw-r--r--src/console/Nes_Fme7_Apu.h12
-rw-r--r--src/console/Nsf_Emu.cxx10
-rw-r--r--src/console/Nsf_Emu.h2
-rw-r--r--src/console/Nsfe_Emu.cxx8
-rw-r--r--src/console/Nsfe_Emu.h2
-rw-r--r--src/console/Sap_Apu.cxx6
-rw-r--r--src/console/Sap_Apu.h2
-rw-r--r--src/console/Sap_Cpu.cxx8
-rw-r--r--src/console/Sap_Cpu.h2
-rw-r--r--src/console/Sap_Emu.cxx70
-rw-r--r--src/console/Sap_Emu.h2
-rw-r--r--src/console/Sms_Oscs.h1
-rw-r--r--src/console/Snes_Spc.cxx2
-rw-r--r--src/console/Snes_Spc.h35
-rw-r--r--src/console/Spc_Cpu.cxx15
-rw-r--r--src/console/Spc_Cpu.h8
-rw-r--r--src/console/Spc_Dsp.cxx15
-rw-r--r--src/console/Spc_Dsp.h12
-rw-r--r--src/console/Spc_Emu.cxx43
-rw-r--r--src/console/Spc_Emu.h7
-rw-r--r--src/console/Spc_Filter.cxx83
-rw-r--r--src/console/Spc_Filter.h53
-rw-r--r--src/console/Vfs_File.cxx53
-rw-r--r--src/console/Vfs_File.h11
-rw-r--r--src/console/Vgm_Emu.cxx16
-rw-r--r--src/console/Vgm_Emu.h2
-rw-r--r--src/console/Vgm_Emu_Impl.cxx4
-rw-r--r--src/console/Vgm_Emu_Impl.h2
-rw-r--r--src/console/Ym2612_Emu.cxx2
-rw-r--r--src/console/Ym2612_Emu.h2
-rw-r--r--src/console/blargg_common.h43
-rw-r--r--src/console/blargg_endian.h114
-rw-r--r--src/console/blargg_source.h44
-rw-r--r--src/console/configure.c69
-rw-r--r--src/console/gb_cpu_io.h10
-rw-r--r--src/console/gme.cxx232
-rw-r--r--src/console/gme.h124
-rw-r--r--src/console/gme_types.h21
-rw-r--r--src/console/hes_cpu_io.h2
-rw-r--r--src/console/nes_cpu_io.h2
-rw-r--r--src/console/plugin.c27
-rw-r--r--src/console/sap_cpu_io.h2
-rw-r--r--src/crossfade/crossfade.c5
-rw-r--r--src/crossfade/crossfade.h2
-rw-r--r--src/crossfade/plugin.c87
-rw-r--r--src/crystalizer/Makefile4
-rw-r--r--src/crystalizer/crystalizer.c88
-rw-r--r--src/cue/Makefile4
-rw-r--r--src/cue/cue.c114
-rw-r--r--src/daap/Makefile22
-rw-r--r--src/daap/daap.c497
-rw-r--r--src/daap/xmms2-daap/Makefile26
-rw-r--r--src/daap/xmms2-daap/cc_handlers.c892
-rw-r--r--src/daap/xmms2-daap/cc_handlers.h174
-rw-r--r--src/daap/xmms2-daap/daap_cmd.c291
-rw-r--r--src/daap/xmms2-daap/daap_cmd.h112
-rw-r--r--src/daap/xmms2-daap/daap_conn.c331
-rw-r--r--src/daap/xmms2-daap/daap_conn.h65
-rw-r--r--src/daap/xmms2-daap/daap_md5.c497
-rw-r--r--src/daap/xmms2-daap/daap_md5.h37
-rw-r--r--src/daap/xmms2-daap/daap_mdns_avahi.c268
-rw-r--r--src/daap/xmms2-daap/daap_mdns_browse.h37
-rw-r--r--src/daap/xmms2-daap/daap_mdns_dnssd.c419
-rw-r--r--src/daap/xmms2-daap/daap_mdns_dummy.c36
-rw-r--r--src/daap/xmms2-daap/daap_util.c79
-rw-r--r--src/daap/xmms2-daap/daap_util.h25
-rw-r--r--src/daap/xmms2-daap/daap_xform.c449
-rw-r--r--src/daap/xmms2-daap/wscript36
-rw-r--r--src/dockalbumart/Makefile12
-rw-r--r--src/dockalbumart/audacious_player.xpm176
-rw-r--r--src/dockalbumart/dockalbumart.c163
-rw-r--r--src/echo_plugin/Makefile4
-rw-r--r--src/echo_plugin/echo.c38
-rw-r--r--src/echo_plugin/gui.c63
-rw-r--r--src/evdev-plug/Makefile15
-rw-r--r--src/evdev-plug/ed.c283
-rw-r--r--src/evdev-plug/ed.h42
-rw-r--r--src/evdev-plug/ed_actions.h62
-rw-r--r--src/evdev-plug/ed_bindings_store.c137
-rw-r--r--src/evdev-plug/ed_bindings_store.h37
-rw-r--r--src/evdev-plug/ed_common.h38
-rw-r--r--src/evdev-plug/ed_internals.c1023
-rw-r--r--src/evdev-plug/ed_internals.h66
-rw-r--r--src/evdev-plug/ed_types.h62
-rw-r--r--src/evdev-plug/ed_ui.c1541
-rw-r--r--src/evdev-plug/ed_ui.h31
-rw-r--r--src/ffaudio/Makefile5
-rw-r--r--src/ffaudio/ffaudio-audvfs.c96
-rw-r--r--src/ffaudio/ffaudio-core.c585
-rw-r--r--src/ffaudio/ffaudio-io.c (renamed from src/mpg123/id3skip.c)51
-rw-r--r--src/ffaudio/ffaudio-stdinc.h13
-rw-r--r--src/filewriter/Makefile2
-rw-r--r--src/filewriter/filewriter.c231
-rw-r--r--src/filewriter/filewriter.h3
-rw-r--r--src/filewriter/flac.c61
-rw-r--r--src/filewriter/mp3.c644
-rw-r--r--src/filewriter/vorbis.c67
-rw-r--r--src/flacng/AUTHORS28
-rw-r--r--src/flacng/Makefile10
-rw-r--r--src/flacng/README109
-rw-r--r--src/flacng/flac_compat.h3
-rw-r--r--src/flacng/flac_compat112.c50
-rw-r--r--src/flacng/flac_compat112.h52
-rw-r--r--src/flacng/flac_compat113.h7
-rw-r--r--src/flacng/flac_compat114.h7
-rw-r--r--src/flacng/flacng.h52
-rw-r--r--src/flacng/metadata.c451
-rw-r--r--src/flacng/plugin.c384
-rw-r--r--src/flacng/seekable_stream_callbacks.c116
-rw-r--r--src/flacng/seekable_stream_callbacks.h33
-rw-r--r--src/flacng/tools.c234
-rw-r--r--src/flacng/tools.h34
-rw-r--r--src/flacng/version.h6
-rw-r--r--src/gio/Makefile2
-rw-r--r--src/gio/gio.c198
-rw-r--r--src/gnomeshortcuts/Makefile2
-rw-r--r--src/gnomeshortcuts/gnomeshortcuts.c20
-rw-r--r--src/gntui/Makefile16
-rw-r--r--src/gntui/README17
-rw-r--r--src/gntui/fileselector.c109
-rw-r--r--src/gntui/fileselector.h27
-rw-r--r--src/gntui/gntui.c317
-rw-r--r--src/gtkui/Makefile20
-rw-r--r--src/gtkui/actions-mainwin.h79
-rw-r--r--src/gtkui/actions-playlist.h67
-rw-r--r--src/gtkui/actions.c774
-rw-r--r--src/gtkui/columns.c365
-rw-r--r--src/gtkui/gtkui.h40
-rw-r--r--src/gtkui/gtkui_cfg.c158
-rw-r--r--src/gtkui/gtkui_cfg.h60
-rw-r--r--src/gtkui/layout.c580
-rw-r--r--src/gtkui/layout.h36
-rw-r--r--src/gtkui/menus.c340
-rw-r--r--src/gtkui/playlist_util.c360
-rw-r--r--src/gtkui/playlist_util.h44
-rw-r--r--src/gtkui/ui/player.ui103
-rw-r--r--src/gtkui/ui_gtk.c1098
-rw-r--r--src/gtkui/ui_gtk.h37
-rw-r--r--src/gtkui/ui_infoarea.c442
-rw-r--r--src/gtkui/ui_manager.c382
-rw-r--r--src/gtkui/ui_manager.h43
-rw-r--r--src/gtkui/ui_playlist_model.c700
-rw-r--r--src/gtkui/ui_playlist_model.h86
-rw-r--r--src/gtkui/ui_playlist_notebook.c459
-rw-r--r--src/gtkui/ui_playlist_notebook.h10
-rw-r--r--src/gtkui/ui_playlist_widget.c710
-rw-r--r--src/gtkui/ui_playlist_widget.h50
-rw-r--r--src/gtkui/ui_statusbar.c87
-rw-r--r--src/gtkui/util.c62
-rw-r--r--src/hotkey/Makefile2
-rw-r--r--src/hotkey/gui.c13
-rw-r--r--src/hotkey/plugin.c74
-rw-r--r--src/hotkey/plugin.h7
-rw-r--r--src/jack/Makefile6
-rw-r--r--src/jack/bio2jack.c71
-rw-r--r--src/jack/bio2jack.h3
-rw-r--r--src/jack/configure.c13
-rw-r--r--src/jack/jack.c94
-rw-r--r--src/kanashi/Makefile25
-rw-r--r--src/kanashi/beatdetect.c49
-rw-r--r--src/kanashi/cfg.c135
-rw-r--r--src/kanashi/cmaps.c70
-rw-r--r--src/kanashi/drawing.c60
-rw-r--r--src/kanashi/drawing.h28
-rw-r--r--src/kanashi/examples/Makefile5
-rw-r--r--src/kanashi/examples/nenolod_-_kanashi_default.js28
-rw-r--r--src/kanashi/freq.c60
-rw-r--r--src/kanashi/general.c220
-rw-r--r--src/kanashi/jsglue.c238
-rw-r--r--src/kanashi/jsglue.h42
-rw-r--r--src/kanashi/kanashi.c301
-rw-r--r--src/kanashi/kanashi.h85
-rw-r--r--src/kanashi/kanashi_utils.h46
-rw-r--r--src/kanashi/misc.c129
-rw-r--r--src/kanashi/plugin.c309
-rw-r--r--src/kanashi/wave.c291
-rw-r--r--src/kanashi/xform.c773
-rw-r--r--src/ladspa/Makefile9
-rw-r--r--src/ladspa/effect.c262
-rw-r--r--src/ladspa/ladspa.c1115
-rw-r--r--src/ladspa/ladspa.h40
-rw-r--r--src/ladspa/loaded-list.c135
-rw-r--r--src/ladspa/plugin-list.c77
-rw-r--r--src/ladspa/plugin.c677
-rw-r--r--src/ladspa/plugin.h95
-rw-r--r--src/lirc/Makefile16
-rw-r--r--src/lirc/about.c143
-rw-r--r--src/lirc/callbacks.c33
-rw-r--r--src/lirc/common.h23
-rw-r--r--src/lirc/interface.c109
-rw-r--r--src/lirc/lirc.c367
-rw-r--r--src/lirc/lirc.h34
-rw-r--r--src/lirc/lirc_cfg.c51
-rw-r--r--src/lirc/lirc_image.h96
-rw-r--r--src/lirc/lirc_mini.xpm69
-rw-r--r--src/lyricwiki/Makefile2
-rw-r--r--src/lyricwiki/lyricwiki.c182
-rw-r--r--src/m3u/Makefile2
-rw-r--r--src/m3u/m3u.c126
-rw-r--r--src/metronom/Makefile4
-rw-r--r--src/metronom/metronom.c77
-rw-r--r--src/mixer/Makefile12
-rw-r--r--src/mixer/mixer.c146
-rw-r--r--src/mixer/mixer.h27
-rw-r--r--src/mixer/plugin.c134
-rw-r--r--src/mms/Makefile2
-rw-r--r--src/mms/mms.c260
-rw-r--r--src/modplug/Makefile49
-rwxr-xr-xsrc/modplug/fastmix.cxx1853
-rw-r--r--src/modplug/gui/callbacks.cxx162
-rw-r--r--src/modplug/gui/callbacks.h24
-rw-r--r--src/modplug/gui/interface.cxx1009
-rw-r--r--src/modplug/gui/interface.h6
-rw-r--r--src/modplug/gui/main.cxx326
-rw-r--r--src/modplug/gui/main.h12
-rw-r--r--src/modplug/gui/modplug.glade2048
-rw-r--r--src/modplug/gui/modplug.gladep16
-rw-r--r--src/modplug/gui/support.cxx144
-rw-r--r--src/modplug/gui/support.h69
-rwxr-xr-xsrc/modplug/it_defs.h135
-rwxr-xr-xsrc/modplug/load_669.cxx195
-rwxr-xr-xsrc/modplug/load_amf.cxx422
-rwxr-xr-xsrc/modplug/load_ams.cxx631
-rwxr-xr-xsrc/modplug/load_dbm.cxx370
-rwxr-xr-xsrc/modplug/load_dmf.cxx607
-rwxr-xr-xsrc/modplug/load_dsm.cxx237
-rwxr-xr-xsrc/modplug/load_far.cxx271
-rwxr-xr-xsrc/modplug/load_it.cxx980
-rwxr-xr-xsrc/modplug/load_mdl.cxx538
-rwxr-xr-xsrc/modplug/load_med.cxx919
-rwxr-xr-xsrc/modplug/load_mod.cxx358
-rwxr-xr-xsrc/modplug/load_mt2.cxx637
-rwxr-xr-xsrc/modplug/load_mtm.cxx165
-rwxr-xr-xsrc/modplug/load_okt.cxx198
-rwxr-xr-xsrc/modplug/load_psm.cxx884
-rwxr-xr-xsrc/modplug/load_ptm.cxx208
-rwxr-xr-xsrc/modplug/load_s3m.cxx406
-rwxr-xr-xsrc/modplug/load_stm.cxx187
-rwxr-xr-xsrc/modplug/load_ult.cxx223
-rwxr-xr-xsrc/modplug/load_umx.cxx53
-rwxr-xr-xsrc/modplug/load_wav.cxx248
-rwxr-xr-xsrc/modplug/load_xm.cxx529
-rw-r--r--src/modplug/midi.h185
-rwxr-xr-xsrc/modplug/mmcmp.cxx406
-rw-r--r--src/modplug/modplugbmp.cxx250
-rw-r--r--src/modplug/modplugbmp.h6
-rw-r--r--src/modplug/plugin.cxx38
-rw-r--r--src/modplug/plugin_main.c28
-rwxr-xr-xsrc/modplug/snd_dsp.cxx491
-rw-r--r--src/modplug/snd_eq.cxx228
-rwxr-xr-xsrc/modplug/snd_flt.cxx130
-rwxr-xr-xsrc/modplug/snd_fx.cxx2614
-rwxr-xr-xsrc/modplug/sndfile.cxx1690
-rwxr-xr-xsrc/modplug/sndfile.h1042
-rwxr-xr-xsrc/modplug/sndmix.cxx1246
-rw-r--r--src/modplug/stdafx.h94
-rwxr-xr-xsrc/modplug/tables.cxx373
-rw-r--r--src/mpg123/Makefile28
-rw-r--r--src/mpg123/libmpg123/AUTHORS145
-rw-r--r--src/mpg123/libmpg123/COPYING773
-rw-r--r--src/mpg123/libmpg123/README228
-rw-r--r--src/mpg123/libmpg123/aligncheck.h45
-rw-r--r--src/mpg123/libmpg123/compat.c150
-rw-r--r--src/mpg123/libmpg123/compat.h177
-rw-r--r--src/mpg123/libmpg123/config.h27
-rw-r--r--src/mpg123/libmpg123/dct64.c174
-rw-r--r--src/mpg123/libmpg123/debug.h171
-rw-r--r--src/mpg123/libmpg123/decode.h262
-rw-r--r--src/mpg123/libmpg123/equalizer.c17
-rw-r--r--src/mpg123/libmpg123/feature.c106
-rw-r--r--src/mpg123/libmpg123/format.c395
-rw-r--r--src/mpg123/libmpg123/frame.c988
-rw-r--r--src/mpg123/libmpg123/frame.h401
-rw-r--r--src/mpg123/libmpg123/getbits.h100
-rw-r--r--src/mpg123/libmpg123/getcpuflags.h49
-rw-r--r--src/mpg123/libmpg123/huffman.h340
-rw-r--r--src/mpg123/libmpg123/icy.c32
-rw-r--r--src/mpg123/libmpg123/icy.h35
-rw-r--r--src/mpg123/libmpg123/icy2utf8.c438
-rw-r--r--src/mpg123/libmpg123/icy2utf8.h10
-rw-r--r--src/mpg123/libmpg123/id3.c991
-rw-r--r--src/mpg123/libmpg123/id3.h31
-rw-r--r--src/mpg123/libmpg123/index.c134
-rw-r--r--src/mpg123/libmpg123/index.h59
-rw-r--r--src/mpg123/libmpg123/l12_integer_tables.h278
-rw-r--r--src/mpg123/libmpg123/l2tables.h164
-rw-r--r--src/mpg123/libmpg123/l3_integer_tables.h1002
-rw-r--r--src/mpg123/libmpg123/layer1.c155
-rw-r--r--src/mpg123/libmpg123/layer2.c371
-rw-r--r--src/mpg123/libmpg123/layer3.c2058
-rw-r--r--src/mpg123/libmpg123/libmpg123.c1673
-rw-r--r--src/mpg123/libmpg123/mpg123.h944
-rw-r--r--src/mpg123/libmpg123/mpg123lib_intern.h333
-rw-r--r--src/mpg123/libmpg123/optimize.c920
-rw-r--r--src/mpg123/libmpg123/optimize.h211
-rw-r--r--src/mpg123/libmpg123/parse.c1152
-rw-r--r--src/mpg123/libmpg123/parse.h25
-rw-r--r--src/mpg123/libmpg123/reader.h117
-rw-r--r--src/mpg123/libmpg123/readers.c1113
-rw-r--r--src/mpg123/libmpg123/sample.h132
-rw-r--r--src/mpg123/libmpg123/stringbuf.c131
-rw-r--r--src/mpg123/libmpg123/synth.c634
-rw-r--r--src/mpg123/libmpg123/synth.h196
-rw-r--r--src/mpg123/libmpg123/synth_mono.h64
-rw-r--r--src/mpg123/libmpg123/synths.h52
-rw-r--r--src/mpg123/libmpg123/tabinit.c285
-rw-r--r--src/mpg123/libmpg123/true.h14
-rw-r--r--src/mpg123/mpg123.c439
-rw-r--r--src/mpris2/Makefile12
-rwxr-xr-xsrc/mpris2/codegen3
-rw-r--r--src/mpris2/mpris2-player.xml18
-rw-r--r--src/mpris2/mpris2.xml11
-rw-r--r--src/mpris2/object-core.c1806
-rw-r--r--src/mpris2/object-core.h221
-rw-r--r--src/mpris2/object-player.c2650
-rw-r--r--src/mpris2/object-player.h332
-rw-r--r--src/mpris2/plugin.c315
-rw-r--r--src/mtp_up/Makefile2
-rw-r--r--src/mtp_up/mtp.c156
-rw-r--r--src/neon/Makefile2
-rw-r--r--src/neon/cert_verification.c18
-rw-r--r--src/neon/neon.c314
-rw-r--r--src/notify/libnotify-aosd.c18
-rw-r--r--src/notify/libnotify-aosd.h2
-rw-r--r--src/notify/libnotify-aosd_event.c166
-rw-r--r--src/notify/libnotify-aosd_event.h2
-rw-r--r--src/null/Makefile4
-rw-r--r--src/null/null.c298
-rw-r--r--src/oss4/Makefile4
-rw-r--r--src/oss4/configure.c149
-rw-r--r--src/oss4/oss.c308
-rw-r--r--src/oss4/oss.h105
-rw-r--r--src/oss4/plugin.c63
-rw-r--r--src/oss4/utils.c106
-rw-r--r--src/paranormal/Makefile33
-rw-r--r--src/paranormal/TODO13
-rw-r--r--src/paranormal/actuators.c196
-rw-r--r--src/paranormal/actuators.h118
-rw-r--r--src/paranormal/beatdetect.c49
-rw-r--r--src/paranormal/builtins.c121
-rw-r--r--src/paranormal/cfg.c653
-rw-r--r--src/paranormal/cmaps.c202
-rw-r--r--src/paranormal/containers.c267
-rw-r--r--src/paranormal/containers.h27
-rw-r--r--src/paranormal/drawing.c62
-rw-r--r--src/paranormal/drawing.h28
-rw-r--r--src/paranormal/freq.c81
-rw-r--r--src/paranormal/general.c410
-rw-r--r--src/paranormal/libcalc/calc.h30
-rw-r--r--src/paranormal/libcalc/dict.c128
-rw-r--r--src/paranormal/libcalc/dict.h46
-rw-r--r--src/paranormal/libcalc/execute.c121
-rw-r--r--src/paranormal/libcalc/execute.h46
-rw-r--r--src/paranormal/libcalc/function.c111
-rw-r--r--src/paranormal/libcalc/function.h32
-rw-r--r--src/paranormal/libcalc/parser.c1896
-rw-r--r--src/paranormal/libcalc/parser.h42
-rw-r--r--src/paranormal/libcalc/parser.yacc309
-rw-r--r--src/paranormal/libcalc/storage.c79
-rw-r--r--src/paranormal/libcalc/storage.h42
-rw-r--r--src/paranormal/misc.c145
-rw-r--r--src/paranormal/paranormal.c243
-rw-r--r--src/paranormal/paranormal.h77
-rw-r--r--src/paranormal/plugin.c479
-rw-r--r--src/paranormal/pn_utils.h34
-rw-r--r--src/paranormal/presets.c278
-rw-r--r--src/paranormal/presets.h30
-rw-r--r--src/paranormal/presets/Makefile38
-rw-r--r--src/paranormal/presets/aerdan_-_bloody_vortex.pnv33
-rw-r--r--src/paranormal/presets/aerdan_-_cloudscape.pnv28
-rw-r--r--src/paranormal/presets/aerdan_-_cloudscape2.pnv38
-rw-r--r--src/paranormal/presets/aerdan_-_dancing_snow.pnv40
-rw-r--r--src/paranormal/presets/aerdan_-_portal_to_hell.pnv35
-rw-r--r--src/paranormal/presets/aerdan_-_stonervision.pnv76
-rw-r--r--src/paranormal/presets/aerdan_-_telestatic.pnv30
-rw-r--r--src/paranormal/presets/nazca_-_smoke_on_the_water.pnv37
-rw-r--r--src/paranormal/presets/nenolod_-_3d_wave.pnv22
-rw-r--r--src/paranormal/presets/nenolod_-_aquamarine_dream.pnv36
-rw-r--r--src/paranormal/presets/nenolod_-_beatscope.pnv71
-rw-r--r--src/paranormal/presets/nenolod_-_branchscope.pnv114
-rw-r--r--src/paranormal/presets/nenolod_-_bumblebees.pnv27
-rw-r--r--src/paranormal/presets/nenolod_-_cubism.pnv54
-rw-r--r--src/paranormal/presets/nenolod_-_flying_into_pastels.pnv38
-rw-r--r--src/paranormal/presets/nenolod_-_interlaced.pnv55
-rw-r--r--src/paranormal/presets/nenolod_-_kaliedoscope.pnv28
-rw-r--r--src/paranormal/presets/nenolod_-_phosphor_flame.pnv28
-rw-r--r--src/paranormal/presets/nenolod_-_psuedo_starfield.pnv22
-rw-r--r--src/paranormal/presets/nenolod_-_purple_flower.pnv18
-rw-r--r--src/paranormal/presets/nenolod_-_quakingscope.pnv37
-rw-r--r--src/paranormal/presets/nenolod_-_quasar.pnv36
-rw-r--r--src/paranormal/presets/nenolod_-_retroscope.pnv23
-rw-r--r--src/paranormal/presets/nenolod_-_rush.pnv51
-rw-r--r--src/paranormal/presets/nenolod_-_scopefun.pnv26
-rw-r--r--src/paranormal/presets/nenolod_-_simple_yet_pretty.pnv29
-rw-r--r--src/paranormal/presets/nenolod_-_smoke.pnv33
-rw-r--r--src/paranormal/presets/nenolod_-_swarm.pnv923
-rw-r--r--src/paranormal/presets/nenolod_-_technicolour_nightmare.pnv72
-rw-r--r--src/paranormal/presets/nenolod_-_transform_fun.pnv24
-rw-r--r--src/paranormal/presets/nenolod_-_trapped.pnv27
-rw-r--r--src/paranormal/presets/nenolod_-_tunnel_vision.pnv30
-rw-r--r--src/paranormal/presets/nenolod_-_value_replace_fun.pnv31
-rw-r--r--src/paranormal/presets/nenolod_-_worms.pnv920
-rw-r--r--src/paranormal/presets/ticpu_-_colored_beat-o-scope.pnv86
-rw-r--r--src/paranormal/wave.c545
-rw-r--r--src/paranormal/xform.c774
-rw-r--r--src/pls/Makefile2
-rw-r--r--src/pls/pls.c79
-rw-r--r--src/pls/util.c58
-rw-r--r--src/pls/util.h5
-rw-r--r--src/projectm-1.0/Makefile15
-rwxr-xr-xsrc/projectm-1.0/gtk_projectm_impl.cxx336
-rw-r--r--src/projectm-1.0/gtk_projectm_impl.h27
-rw-r--r--src/projectm-1.0/main.c49
-rw-r--r--src/projectm/Makefile13
-rw-r--r--src/projectm/main.c457
-rwxr-xr-xsrc/projectm/sdltoprojectM.h148
-rw-r--r--src/projectm/video_init.c198
-rw-r--r--src/projectm/video_init.h5
-rw-r--r--src/pulse_audio/Makefile4
-rw-r--r--src/pulse_audio/pulse_audio.c134
-rw-r--r--src/resample/plugin.c118
-rw-r--r--src/resample/resample.c19
-rw-r--r--src/resample/resample.h9
-rw-r--r--src/roaraudio/KNOWN-ISSUES6
-rw-r--r--src/roaraudio/Makefile12
-rw-r--r--src/roaraudio/all.h103
-rw-r--r--src/roaraudio/roar.c446
-rw-r--r--src/rocklight/Makefile15
-rw-r--r--src/rocklight/b43led.c41
-rw-r--r--src/rocklight/rocklight.c150
-rw-r--r--src/rocklight/rocklight.h31
-rw-r--r--src/rocklight/sysled.c40
-rw-r--r--src/rocklight/thinklight.c55
-rw-r--r--src/scrobbler/Makefile4
-rw-r--r--src/scrobbler/configure.c88
-rw-r--r--src/scrobbler/plugin.c109
-rw-r--r--src/scrobbler/scrobbler.c112
-rw-r--r--src/scrobbler/scrobbler.h2
-rw-r--r--src/sdlout/Makefile13
-rw-r--r--src/sdlout/plugin.c94
-rw-r--r--src/sdlout/sdlout.c344
-rw-r--r--src/sdlout/sdlout.h44
-rw-r--r--src/search-tool/Makefile12
-rw-r--r--src/search-tool/search-tool.c706
-rw-r--r--src/sid/Makefile9
-rw-r--r--src/sid/xmms-sid.c200
-rw-r--r--src/sid/xmms-sid.glade4177
-rw-r--r--src/sid/xmms-sid.gladep20
-rw-r--r--src/sid/xmms-sid.h7
-rw-r--r--src/sid/xs_about.c226
-rw-r--r--src/sid/xs_config.c1427
-rw-r--r--src/sid/xs_config.h23
-rw-r--r--src/sid/xs_curve.c712
-rw-r--r--src/sid/xs_curve.h4
-rw-r--r--src/sid/xs_fileinfo.c206
-rw-r--r--src/sid/xs_fileinfo.h18
-rw-r--r--src/sid/xs_genui.c10
-rw-r--r--src/sid/xs_genui.h194
-rw-r--r--src/sid/xs_glade.c144
-rw-r--r--src/sid/xs_glade.h69
-rw-r--r--src/sid/xs_init.c29
-rw-r--r--src/sid/xs_interface.c2151
-rw-r--r--src/sid/xs_interface.h12
-rw-r--r--src/sid/xs_length.h11
-rw-r--r--src/sid/xs_md5.c231
-rw-r--r--src/sid/xs_md5.h34
-rw-r--r--src/sid/xs_player.h3
-rw-r--r--src/sid/xs_sidplay1.cc24
-rw-r--r--src/sid/xs_sidplay1.h2
-rw-r--r--src/sid/xs_sidplay2.cc2
-rw-r--r--src/sid/xs_sidplay2.h2
-rw-r--r--src/sid/xs_support.c1
-rw-r--r--src/skins/Makefile111
-rw-r--r--src/skins/Skins/Classic/skin.hints2
-rw-r--r--src/skins/Skins/Classic1.3/skin.hints2
-rw-r--r--src/skins/Skins/Default/eq_ex.pngbin2405 -> 2198 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Arrows/arrow-down.pngbin163 -> 163 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Arrows/arrow-insens.pngbin190 -> 190 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Arrows/arrow-left.pngbin165 -> 165 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Arrows/arrow-right.pngbin170 -> 170 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Arrows/arrow-up.pngbin188 -> 188 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Buttons/button-insensitive.pngbin237 -> 237 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Buttons/button-normal.pngbin237 -> 237 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Buttons/button-prelight.pngbin611 -> 611 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/check1.pngbin147 -> 147 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/check2.pngbin214 -> 214 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/check3.pngbin180 -> 180 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/check4.pngbin300 -> 300 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/check5.pngbin150 -> 150 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/check6.pngbin226 -> 226 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/option1.pngbin249 -> 249 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/option2.pngbin278 -> 278 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/option3.pngbin333 -> 333 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/option4.pngbin330 -> 330 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/option5.pngbin246 -> 246 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Check-Radio/option6.pngbin273 -> 273 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-end.pngbin131 -> 131 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-start.pngbin131 -> 131 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame.pngbin152 -> 152 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Handles/handle-h.pngbin141 -> 141 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Handles/handle-v.pngbin137 -> 137 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Lines/line-h.pngbin142 -> 142 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Lines/line-v.pngbin142 -> 142 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-insens.pngbin182 -> 182 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-prelight.pngbin428 -> 428 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-pressed.pngbin129 -> 129 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header.pngbin165 -> 165 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menu.pngbin222 -> 222 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item-active.pngbin661 -> 661 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item.pngbin260 -> 260 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar.pngbin196 -> 196 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Others/null.pngbin332 -> 332 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Others/ruler.pngbin131 -> 131 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Panel/panel-bg.pngbin156 -> 156 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/ProgressBar/progressbar-horiz.pngbin212 -> 212 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/ProgressBar/trough-progressbar-horiz.pngbin139 -> 139 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Range/slider-horiz-prelight.pngbin429 -> 429 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Range/slider-horiz.pngbin246 -> 246 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Range/slider-vert-prelight.pngbin420 -> 420 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Range/slider-vert.pngbin190 -> 190 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Range/trough-horizontal.pngbin168 -> 168 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Range/trough-vertical.pngbin188 -> 188 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz-pre.pngbin172 -> 172 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz.pngbin155 -> 155 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert-pre.pngbin162 -> 162 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert.pngbin145 -> 145 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-horiz.pngbin182 -> 182 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-vert.pngbin200 -> 200 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down-prelight.pngbin450 -> 450 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down.pngbin228 -> 228 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left-prelight.pngbin469 -> 469 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left.pngbin242 -> 242 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right-prelight.pngbin462 -> 462 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right.pngbin246 -> 246 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up-prelight.pngbin474 -> 474 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up.pngbin236 -> 236 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-horiz.pngbin342 -> 342 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-vert.pngbin325 -> 325 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Shadows/shadow-in.pngbin151 -> 151 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Shadows/shadow-out.pngbin151 -> 151 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Shadows/text-.pngbin136 -> 136 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Shadows/text-entry.pngbin136 -> 136 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Spin/spin-down-disable.pngbin226 -> 226 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Spin/spin-down-prelight.pngbin334 -> 334 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Spin/spin-down.pngbin231 -> 231 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Spin/spin-up-disable.pngbin232 -> 232 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Spin/spin-up-prelight.pngbin353 -> 353 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Spin/spin-up.pngbin224 -> 224 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/notebook.pngbin155 -> 155 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom-active.pngbin235 -> 235 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom.pngbin222 -> 222 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-left-active.pngbin240 -> 240 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-left.pngbin216 -> 216 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-right-active.pngbin236 -> 236 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-right.pngbin221 -> 221 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-top-active.pngbin230 -> 230 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Tabs/tab-top.pngbin240 -> 240 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/Toolbar/toolbar.pngbin134 -> 134 bytes
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/gtkrc0
-rw-r--r--[-rwxr-xr-x]src/skins/Skins/Default/gtk-2.0/panel.rc0
-rw-r--r--src/skins/Skins/Default/pledit.pngbin15784 -> 15074 bytes
-rw-r--r--src/skins/Skins/Default/skin.hints2
-rw-r--r--src/skins/Skins/Default/titlebar.pngbin5136 -> 4702 bytes
-rw-r--r--src/skins/Skins/Default/viscolor.txt16
-rw-r--r--src/skins/Skins/Ivory/skin.hints2
-rw-r--r--src/skins/Skins/Osmosis/skin.hints2
-rw-r--r--src/skins/Skins/Refugee/skin.hints3
-rw-r--r--src/skins/Skins/TinyPlayer/skin.hints2
-rw-r--r--src/skins/actions-equalizer.h9
-rw-r--r--src/skins/actions-mainwin.h26
-rw-r--r--src/skins/actions-playlist.h13
-rw-r--r--src/skins/debug.h44
-rw-r--r--src/skins/dnd.c34
-rw-r--r--src/skins/dnd.h36
-rw-r--r--src/skins/drag-handle.c105
-rw-r--r--src/skins/drag-handle.h30
-rw-r--r--src/skins/draw-compat.h75
-rw-r--r--src/skins/pixbuf_effects.c88
-rw-r--r--src/skins/plugin.c187
-rw-r--r--src/skins/plugin.h18
-rw-r--r--src/skins/skins_cfg.c657
-rw-r--r--src/skins/skins_cfg.h36
-rw-r--r--src/skins/surface.c69
-rw-r--r--src/skins/surface.h34
-rw-r--r--src/skins/ui/carbon-menubar.ui122
-rw-r--r--src/skins/ui/mainwin.ui10
-rw-r--r--src/skins/ui/playlist.ui182
-rw-r--r--src/skins/ui_dock.c605
-rw-r--r--src/skins/ui_dock.h54
-rw-r--r--src/skins/ui_equalizer.c786
-rw-r--r--src/skins/ui_equalizer.h33
-rw-r--r--src/skins/ui_hints.c7
-rw-r--r--src/skins/ui_hints.h7
-rw-r--r--src/skins/ui_main.c2033
-rw-r--r--src/skins/ui_main.h98
-rw-r--r--src/skins/ui_main_evlisteners.c369
-rw-r--r--src/skins/ui_main_evlisteners.h7
-rw-r--r--src/skins/ui_manager.c162
-rw-r--r--src/skins/ui_manager.h43
-rw-r--r--src/skins/ui_playlist.c1013
-rw-r--r--src/skins/ui_playlist.h47
-rw-r--r--src/skins/ui_playlist_evlisteners.c42
-rw-r--r--src/skins/ui_playlist_evlisteners.h27
-rw-r--r--src/skins/ui_skin.c1663
-rw-r--r--src/skins/ui_skin.h231
-rw-r--r--src/skins/ui_skinned_button.c632
-rw-r--r--src/skins/ui_skinned_button.h61
-rw-r--r--src/skins/ui_skinned_equalizer_graph.c259
-rw-r--r--src/skins/ui_skinned_equalizer_graph.h38
-rw-r--r--src/skins/ui_skinned_equalizer_slider.c494
-rw-r--r--src/skins/ui_skinned_equalizer_slider.h39
-rw-r--r--src/skins/ui_skinned_horizontal_slider.c528
-rw-r--r--src/skins/ui_skinned_horizontal_slider.h52
-rw-r--r--src/skins/ui_skinned_menurow.c407
-rw-r--r--src/skins/ui_skinned_menurow.h50
-rw-r--r--src/skins/ui_skinned_monostereo.c183
-rw-r--r--src/skins/ui_skinned_monostereo.h38
-rw-r--r--src/skins/ui_skinned_number.c271
-rw-r--r--src/skins/ui_skinned_number.h39
-rw-r--r--src/skins/ui_skinned_playlist.c1257
-rw-r--r--src/skins/ui_skinned_playlist.h57
-rw-r--r--src/skins/ui_skinned_playlist_slider.c331
-rw-r--r--src/skins/ui_skinned_playlist_slider.h39
-rw-r--r--src/skins/ui_skinned_playstatus.c213
-rw-r--r--src/skins/ui_skinned_playstatus.h38
-rw-r--r--src/skins/ui_skinned_textbox.c1092
-rw-r--r--src/skins/ui_skinned_textbox.h50
-rw-r--r--src/skins/ui_skinned_window.c379
-rw-r--r--src/skins/ui_skinned_window.h79
-rw-r--r--src/skins/ui_skinselector.c154
-rw-r--r--src/skins/ui_skinselector.h20
-rw-r--r--src/skins/ui_svis.c622
-rw-r--r--src/skins/ui_svis.h63
-rw-r--r--src/skins/ui_vis.c640
-rw-r--r--src/skins/ui_vis.h58
-rw-r--r--src/skins/util.c205
-rw-r--r--src/skins/util.h18
-rw-r--r--src/smb/Makefile2
-rw-r--r--src/smb/smb.c123
-rw-r--r--src/sndfile/Makefile4
-rw-r--r--src/sndfile/plugin.c211
-rw-r--r--src/sndstretch/Makefile4
-rw-r--r--src/sndstretch/sndstretch.c158
-rw-r--r--src/sndstretch/sndstretch_xmms.c192
-rw-r--r--src/song_change/Makefile4
-rw-r--r--src/song_change/formatter.c2
-rw-r--r--src/song_change/song_change.c643
-rw-r--r--src/spectrum/Makefile12
-rw-r--r--src/spectrum/logo.xpm123
-rw-r--r--src/spectrum/spectrum.c222
-rw-r--r--src/statusicon/Makefile2
-rw-r--r--src/statusicon/config.c42
-rw-r--r--src/statusicon/statusicon.c91
-rw-r--r--src/statusicon/statusicon.h8
-rw-r--r--src/stereo_plugin/Makefile4
-rw-r--r--src/stereo_plugin/stereo.c93
-rw-r--r--src/streambrowser/Makefile26
-rw-r--r--src/streambrowser/bookmarks.c177
-rw-r--r--src/streambrowser/bookmarks.h52
-rw-r--r--src/streambrowser/gui/streambrowser_win.c649
-rw-r--r--src/streambrowser/gui/streambrowser_win.h23
-rw-r--r--src/streambrowser/images/bookmarks.pngbin652 -> 0 bytes
-rw-r--r--src/streambrowser/images/shoutcast.pngbin843 -> 0 bytes
-rw-r--r--src/streambrowser/images/streambrowser-16x16.pngbin796 -> 0 bytes
-rw-r--r--src/streambrowser/images/streambrowser-64x64.pngbin4768 -> 0 bytes
-rw-r--r--src/streambrowser/images/streambrowser.svg251
-rw-r--r--src/streambrowser/images/xiph.pngbin802 -> 0 bytes
-rw-r--r--src/streambrowser/shoutcast.c290
-rw-r--r--src/streambrowser/shoutcast.h40
-rw-r--r--src/streambrowser/streambrowser.c758
-rw-r--r--src/streambrowser/streambrowser.h47
-rw-r--r--src/streambrowser/streamdir.c187
-rw-r--r--src/streambrowser/streamdir.h77
-rw-r--r--src/streambrowser/xiph.c304
-rw-r--r--src/streambrowser/xiph.h38
-rw-r--r--src/sun/Makefile17
-rw-r--r--src/sun/about.c35
-rw-r--r--src/sun/audio.c506
-rw-r--r--src/sun/audioio.h326
-rw-r--r--src/sun/configure.c575
-rw-r--r--src/sun/convert.c348
-rw-r--r--src/sun/mixer.c126
-rw-r--r--src/sun/mixer.h25
-rw-r--r--src/sun/resample.h110
-rw-r--r--src/sun/sun.c131
-rw-r--r--src/sun/sun.h161
-rw-r--r--src/tonegen/Makefile2
-rw-r--r--src/tonegen/tonegen.c71
-rw-r--r--src/unix-io/Makefile4
-rw-r--r--src/unix-io/gtk.c61
-rw-r--r--src/unix-io/unix-io.c121
-rw-r--r--src/voice_removal/Makefile4
-rw-r--r--src/voice_removal/voice_removal.c13
-rw-r--r--src/vorbis/Makefile7
-rw-r--r--src/vorbis/configure.c75
-rw-r--r--src/vorbis/vcedit.c6
-rw-r--r--src/vorbis/vcedit.h4
-rw-r--r--src/vorbis/vcupdate.c70
-rw-r--r--src/vorbis/vorbis.c249
-rw-r--r--src/vorbis/vorbis.h18
-rw-r--r--src/vtx/Makefile4
-rw-r--r--src/vtx/ay8912.c19
-rw-r--r--src/vtx/vtx.c397
-rw-r--r--src/vtx/vtx.h2
-rw-r--r--src/vtx/vtxfile.c9
-rw-r--r--src/wavpack/Makefile2
-rw-r--r--src/wavpack/wavpack.c113
-rw-r--r--src/xsf/Makefile4
-rw-r--r--[-rwxr-xr-x]src/xsf/ao.h4
-rw-r--r--src/xsf/corlett.c3
-rw-r--r--src/xsf/desmume/SPU.c4
-rw-r--r--src/xsf/desmume/cp15.h3
-rw-r--r--src/xsf/plugin.c268
-rw-r--r--src/xsf/tagget.h4
-rw-r--r--src/xspf/Makefile2
-rw-r--r--src/xspf/xspf.c374
959 files changed, 103771 insertions, 185993 deletions
diff --git a/AUTHORS b/AUTHORS
index 4ddaeec..b8270d2 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,19 +1,20 @@
-Audacious (C) GPL 2005-2008
+Audacious (C) GPL 2005-2009
Authors listed alphabetically, by last name:
--------------------------------------------
George Averill <nhjm449@gmail.com>
+Kieran Clancy <clancy.kieran+audacious@gmail.com>
Michael Färber <0102@gmx.at>
Matti Hämäläinen <ccr@tnsp.org>
Giacomo Lozito <james@develia.org>
-William Pitcock <nenolod@nenolod.net>
+Tomasz Moń <desowin@gmail.com>
+William Pitcock <nenolod@sacredspiral.co.uk>
Derek Pomery <nemo@m8y.org>
Mohammed Sameer <msameer@foolab.org>
Jonathan Schleifer <js-audacious@webkeks.org>
-Andrew O. Shadoura <bugzilla@tut.by>
-Aaron Sheldon <asheldon at uiuc.edu>
Stephen Sokolow <deitarion@gmail.com>
+Ben Tucker <ben@tucker.org>
Tony Vroon <chainsaw@gentoo.org>
Yoshiki Yazawa <yaz@cc.or.rim.jp>
@@ -21,7 +22,7 @@ Translators
-----------
Dutch - Tony Vroon
-Hungarian - Laszlo Dvornik
+Hungarian - Dvornik László
German - Michael Hanselmann
Matthias Debus
Greek - Kouzinopoulos Haris
@@ -29,6 +30,8 @@ Greek - Kouzinopoulos Haris
Stathis Kamperis
Italian - Diego Petteno
Japanese - Dai
+Finnish - Pauli Virtanen
+ Matti Hämäläinen
-
@@ -89,7 +92,7 @@ Greek - Kouzinopoulos Haris <haris@mpa.gr>
Finnish - Pauli Virtanen <pauli.virtanen@hut.fi>
French - David Le Brun <david@dyn-ns.net>
Hindi - Dhananjaya Sharma <dysxhi@yahoo.co.in>
-Hungarian - Laszlo Dvornik <dvornik@gnome.hu>
+Hungarian - Dvornik László <dvornik@gnome.hu>
Italian - Alessio D'Ascanio <otaku@fastwebnet.it>
Japanese - Takeshi Aihana <aihana@gnome.gr.jp>
Korean - DongCheon Park <dcpark@kaist.ac.kr>
diff --git a/INSTALL b/INSTALL
index 23e5f25..7d1c323 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,16 +1,25 @@
Installation Instructions
*************************
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
Basic Installation
==================
-These are generic installation instructions.
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
@@ -23,9 +32,9 @@ debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
+the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
-cache files.)
+cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
@@ -35,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
-The simplest way to compile this package is:
+ The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
+ `./configure' to configure the package for your system.
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
- the package.
+ the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
@@ -67,45 +83,69 @@ The simplest way to compile this package is:
all sorts of other programs in order to regenerate files that came
with the distribution.
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
Compilers and Options
=====================
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about. Run `./configure --help' for
-details on some of the pertinent environment variables.
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
-You can compile the package for more than one kind of computer at the
+ You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
+own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
Installation Names
==================
-By default, `make install' installs the package's commands under
+ By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
@@ -116,16 +156,47 @@ Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
+ Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
@@ -137,14 +208,53 @@ find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
Specifying the System Type
==========================
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
@@ -152,7 +262,8 @@ type, such as `sun4', or a canonical name which has the form:
where SYSTEM can have one of these forms:
- OS KERNEL-OS
+ OS
+ KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
@@ -170,9 +281,9 @@ eventually be run) with `--host=TYPE'.
Sharing Defaults
================
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
@@ -181,7 +292,7 @@ A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
-Variables not defined in a site shell script can be set in the
+ Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
@@ -190,21 +301,29 @@ them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script). Here is a another example:
+overridden in the site shell script).
- /bin/bash ./configure CONFIG_SHELL=/bin/bash
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
-`configure' recognizes the following options to control how it operates.
+ `configure' recognizes the following options to control how it
+operates.
`--help'
`-h'
- Print a summary of the options to `configure', and exit.
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
`--version'
`-V'
@@ -231,6 +350,16 @@ configuration-related scripts to be executed by `/bin/bash'.
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
diff --git a/Mercurial-Access b/Mercurial-Access
deleted file mode 100644
index 6ef6fc4..0000000
--- a/Mercurial-Access
+++ /dev/null
@@ -1,13 +0,0 @@
-The atheme.org mercurial repository is available for anonymous read-only
-access.
-
-To retrieve the audacious-plugins development branch from hg.atheme.org, do:
- $ hg clone http://hg.atheme.org/audacious-plugins/ audacious-plugins-devel
-
-To retrieve the audacious-plugins stable branch from hg.atheme.org, do:
- $ hg clone http://hg.atheme.org/release/audacious-plugins-$VERSION/
-
- Where $VERSION is the stable major version, for example the latest
- fixes and updates to 1.5-series of plugins would be in:
-
- $ hg clone http://hg.atheme.org/release/audacious-plugins-1.5/
diff --git a/acinclude.m4 b/acinclude.m4
index 9210de1..6f6f293 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,16 +1,3 @@
-
-dnl ** ADD_PKG_REQUIRES([requirement])
-dnl ** Adds a dependency to package's pkg-config file.
-AC_DEFUN([ADD_PC_REQUIRES], [
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="$1"
- else
- PC_REQUIRES="$PC_REQUIRES, $1"
- fi
- AC_SUBST([PC_REQUIRES])
-])
-
-
dnl ** AUD_CHECK_MODULE([define name], [module], [version required],
dnl ** [informational name], [additional error message])
dnl **
@@ -21,7 +8,6 @@ dnl **
dnl ** AUD_CHECK_MODULE([GLIB], [gtk+-2.0], [>= 2.8.0], [Gtk+2], [See http://www.gtk.org/])
AC_DEFUN([AUD_CHECK_MODULE], [
PKG_CHECK_MODULES([$1], [$2 $3], [
- ADD_PC_REQUIRES([$2 $3])
],[
PKG_CHECK_EXISTS([$2], [
cv_pkg_version=`$PKG_CONFIG --modversion "$2" 2>/dev/null`
@@ -142,6 +128,23 @@ define([aud_get_plugin_dirs_defined],[1])dnl
])dnl
+dnl Add $1 to CFLAGS and CXXFLAGS if supported
+dnl ------------------------------------------
+
+AC_DEFUN([AUD_CHECK_CFLAGS],[
+ AC_MSG_CHECKING([whether the C/C++ compiler supports $1])
+ OLDCFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $1 -Werror"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[return 0;])],[
+ AC_MSG_RESULT(yes)
+ CFLAGS="$OLDCFLAGS $1"
+ CXXFLAGS="$CXXFLAGS $1"
+ ],[
+ AC_MSG_RESULT(no)
+ CFLAGS="$OLDCFLAGS"
+ ])
+])
+
dnl **
dnl ** Common checks
@@ -150,20 +153,34 @@ AC_DEFUN([AUD_COMMON_PROGS], [
dnl Check for C and C++ compilers
dnl =============================
-AUD_CHECK_GNU_MAKE
-AC_PROG_CC
-AC_PROG_CXX
-AM_PROG_AS
-AC_ISC_POSIX
-AC_C_BIGENDIAN
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AM_PROG_AS])
+AC_REQUIRE([AC_C_BIGENDIAN])
+AC_REQUIRE([AC_SYS_LARGEFILE])
if test "x$GCC" = "xyes"; then
- CFLAGS="$CFLAGS -Wall -pipe"
- CXXFLAGS="$CXXFLAGS -pipe -Wall"
+ CFLAGS="$CFLAGS -std=gnu99 -Wall -pipe"
+ CXXFLAGS="$CXXFLAGS -Wall -pipe"
+ AUD_CHECK_CFLAGS(-Wtype-limits)
fi
+dnl Enable "-Wl,-z,defs" only on Linux
+dnl ==============================
+AC_MSG_CHECKING([for Linux])
+case "$target" in
+ *linux*)
+ AC_MSG_RESULT([yes])
+ LDFLAGS="$LDFLAGS -Wl,-z,defs"
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+esac
+
dnl Checks for various programs
dnl ===========================
+AUD_CHECK_GNU_MAKE
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PATH_PROG([RM], [rm])
@@ -172,78 +189,14 @@ AC_PATH_PROG([CP], [cp])
AC_PATH_PROG([AR], [ar])
AC_PATH_PROG([TR], [tr])
AC_PATH_PROG([RANLIB], [ranlib])
-
+AC_PATH_PROG([WINDRES], [windres])
dnl Check for Gtk+/GLib and pals
dnl ============================
-AUD_CHECK_MODULE([GLIB], [glib-2.0], [>= 2.12.0], [Glib2])
-AUD_CHECK_MODULE([GTHREAD], [gthread-2.0], [>= 2.12.0], [gthread-2.0])
-AUD_CHECK_MODULE([GTK], [gtk+-2.0], [>= 2.8.0], [Gtk+2])
-AUD_CHECK_MODULE([PANGO], [pango], [>= 1.8.0], [Pango])
-AUD_CHECK_MODULE([CAIRO], [cairo], [>= 1.2.4], [Cairo])
-
-
-dnl Check for libmowgli
-dnl ===================
-AUD_CHECK_MODULE([MOWGLI], [libmowgli], [>= 0.4.0], [libmowgli],
- [http://www.atheme.org/projects/mowgli.shtml])
-
-
-dnl Check for libmcs
-dnl ================
-AUD_CHECK_MODULE([LIBMCS], [libmcs], [>= 0.7], [libmcs],
- [http://www.atheme.org/projects/mcs.shtml])
-
-
-dnl SSE2 support
-dnl ============
-AUD_ARG_ENABLE([sse2], [yes], [SSE2 support],
-[
- AC_MSG_CHECKING([SSE2 support])
- aud_my_save_CFLAGS="$CFLAGS"
- CFLAGS="-msse2"
- AC_TRY_RUN([
-#include <emmintrin.h>
-int main()
-{
- _mm_setzero_pd();
- asm volatile("xorpd %xmm0,%xmm0\n\t");
- return 0;
-}
- ],[
- AC_MSG_RESULT([yes])
- AC_DEFINE([HAVE_SSE2], 1, [Define to 1 if your system has SSE2 support])
- SIMD_CFLAGS="-msse2"
- ],[
- AC_MSG_RESULT([no])
- enable_sse2="no"
- ])
- AC_SUBST([SIMD_CFLAGS])
- CFLAGS="$aud_my_save_CFLAGS"
-])
-
-dnl AltiVec support
-dnl ===============
-AUD_ARG_ENABLE([altivec], [yes], [AltiVec support],
-[
- AC_CHECK_HEADERS([altivec.h],
- [
- AC_DEFINE([HAVE_ALTIVEC], 1, [Define to 1 if your system has AltiVec.])
- AC_DEFINE([HAVE_ALTIVEC_H], 1, [Define to 1 if your system has an altivec.h file.])
- AC_DEFINE([ARCH_POWERPC], 1, [Define to 1 if your system is a PowerPC.])
- case $target in
- *-apple-*)
- SIMD_CFLAGS="-mpim-altivec"
- ;;
- *)
- SIMD_CFLAGS="-maltivec"
- ;;
- esac
- AC_SUBST([SIMD_CFLAGS])
- ],[
- enable_altivec="no"
- ])
-])
+AUD_CHECK_MODULE([GLIB], [glib-2.0], [>= 2.16], [Glib2])
+AUD_CHECK_MODULE([GTHREAD], [gthread-2.0], [>= 2.16], [GThread])
+AUD_CHECK_MODULE([PANGO], [pango], [>= 1.20], [Pango])
+AUD_CHECK_MODULE([CAIRO], [cairo], [>= 1.6], [Cairo])
])
diff --git a/aclocal.m4 b/aclocal.m4
index d0eb8d8..a148d4c 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.2 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
# This file 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.
@@ -11,6 +12,2688 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
+# gettext.m4 serial 63 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+# iconv.m4 serial 11 (gettext-0.18.1)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+])
+
+# intlmacosx.m4 serial 3 (gettext-0.18)
+dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in MacOS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+ [CFPreferencesCopyAppValue(NULL, NULL)],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in MacOS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
+ [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_TRY_LINK([$3], [$4],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
+
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
+
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# po.m4 serial 17 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[ ]*VARIABLE[ ]*=/{
+ # Seen the first line of the variable definition.
+ s/^[ ]*VARIABLE[ ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
+
+# progtest.m4 serial 6 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
+
+# Configure paths for SDL
+# Sam Lantinga 9/21/99
+# stolen from Manish Singh
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
+dnl
+AC_DEFUN([AM_PATH_SDL],
+[dnl
+dnl Get the cflags and libraries from the sdl-config script
+dnl
+AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
+ sdl_prefix="$withval", sdl_prefix="")
+AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
+ sdl_exec_prefix="$withval", sdl_exec_prefix="")
+AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
+ , enable_sdltest=yes)
+
+ if test x$sdl_exec_prefix != x ; then
+ sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_config_args="$sdl_config_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+ as_save_PATH="$PATH"
+ if test "x$prefix" != xNONE; then
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ fi
+ AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
+ PATH="$as_save_PATH"
+ min_sdl_version=ifelse([$1], ,0.11.0,$1)
+ AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs`
+
+ sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+dnl
+dnl Now check if the installed SDL is sufficiently new. (Also sanity
+dnl checks the results of sdl-config to some extent
+dnl
+ rm -f conf.sdltest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+], [ return 0; ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(SDL_CFLAGS)
+ AC_SUBST(SDL_LIBS)
+ rm -f conf.sdltest
+])
+
# Figure out how to run the assembler. -*- Autoconf -*-
# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@@ -69,14 +2752,14 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
#
# This file 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.
-# serial 10
+# serial 12
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
@@ -116,6 +2799,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
+ rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
@@ -180,7 +2864,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
break
fi
;;
- msvisualcpp | msvcmsys)
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
# This compiler won't grok `-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
@@ -245,10 +2929,13 @@ AC_DEFUN([AM_DEP_TRACK],
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
+ am__nodep='_no'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
@@ -404,15 +3091,45 @@ AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
+#
+# This file 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.
+
+# serial 1
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
#
# This file 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.
-# serial 4
+# serial 5
# _AM_MANGLE_OPTION(NAME)
# -----------------------
@@ -420,13 +3137,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -437,13 +3154,13 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
#
# This file 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.
-# serial 2
+# serial 3
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
@@ -452,24 +3169,11 @@ AC_DEFUN([_AM_IF_OPTION],
AC_DEFUN([_AM_SUBST_NOTMAKE])
# AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
m4_include([m4/buildsys.m4])
-m4_include([m4/gettext.m4])
-m4_include([m4/iconv.m4])
-m4_include([m4/isc-posix.m4])
-m4_include([m4/jack.m4])
-m4_include([m4/lib-ld.m4])
-m4_include([m4/lib-link.m4])
-m4_include([m4/lib-prefix.m4])
-m4_include([m4/libFLAC.m4])
-m4_include([m4/nls.m4])
-m4_include([m4/pkg.m4])
-m4_include([m4/po.m4])
-m4_include([m4/progtest.m4])
-m4_include([m4/sdl.m4])
m4_include([m4/sid.m4])
m4_include([m4/sidplay.m4])
m4_include([acinclude.m4])
diff --git a/buildsys.mk.in b/buildsys.mk.in
index 4af81d0..b00ae75 100644
--- a/buildsys.mk.in
+++ b/buildsys.mk.in
@@ -1,5 +1,6 @@
#
-# Copyright (c) 2007 - 2009, Jonathan Schleifer <js@webkeks.org>
+# Copyright (c) 2007, 2008, 2009, 2010, 2011
+# Jonathan Schleifer <js@webkeks.org>
#
# https://webkeks.org/hg/buildsys/
#
@@ -48,12 +49,10 @@ PYTHON_FLAGS = @PYTHON_FLAGS@
PROG_IMPLIB_NEEDED = @PROG_IMPLIB_NEEDED@
PROG_IMPLIB_LDFLAGS = @PROG_IMPLIB_LDFLAGS@
PROG_SUFFIX = @EXEEXT@
-LIB_CPPFLAGS = @LIB_CPPFLAGS@
LIB_CFLAGS = @LIB_CFLAGS@
LIB_LDFLAGS = @LIB_LDFLAGS@
LIB_PREFIX = @LIB_PREFIX@
LIB_SUFFIX = @LIB_SUFFIX@
-PLUGIN_CPPFLAGS = @PLUGIN_CPPFLAGS@
PLUGIN_CFLAGS = @PLUGIN_CFLAGS@
PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
PLUGIN_SUFFIX = @PLUGIN_SUFFIX@
@@ -65,6 +64,10 @@ MKDIR_P = mkdir -p
INSTALL = @INSTALL@
SHELL = @SHELL@
MSGFMT = @MSGFMT@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAR = @JAR@
+WINDRES = @WINDRES@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
@@ -84,23 +87,28 @@ OBJS2 = ${OBJS1:.cc=.o}
OBJS3 = ${OBJS2:.cxx=.o}
OBJS4 = ${OBJS3:.d=.o}
OBJS5 = ${OBJS4:.erl=.beam}
-OBJS6 = ${OBJS5:.m=.o}
-OBJS7 = ${OBJS6:.mm=.o}
-OBJS8 = ${OBJS7:.py=.pyc}
-OBJS9 = ${OBJS8:.xpm=.o}
-OBJS += ${OBJS9:.S=.o}
+OBJS6 = ${OBJS5:.java=.class}
+OBJS7 = ${OBJS6:.m=.o}
+OBJS8 = ${OBJS7:.mm=.o}
+OBJS9 = ${OBJS8:.py=.pyc}
+OBJS10 = ${OBJS9:.rc=.o}
+OBJS11 = ${OBJS10:.S=.o}
+OBJS += ${OBJS11:.xpm=.o}
+
+LIB_OBJS = ${OBJS:.o=.lib.o}
+PLUGIN_OBJS = ${OBJS:.o=.plugin.o}
MO_FILES = ${LOCALES:.po=.mo}
.SILENT:
.SUFFIXES:
-.SUFFIXES: .beam .c .cc .cxx .d .dep .erl .mo .m .mm .o .po .py .pyc .xpm .S
-.PHONY: all subdirs pre-depend depend install install-extra uninstall uninstall-extra clean distclean
+.SUFFIXES: .beam .c .c.dep .cc .cc.dep .class .cxx .cxx.dep .d .erl .lib.o .java .mo .m .m.dep .mm .mm.dep .o .plugin.o .po .py .pyc .rc .S .S.dep .xpm
+.PHONY: all subdirs pre-depend depend install install-extra uninstall uninstall-extra clean distclean locales
all:
- for i in subdirs depend ${STATIC_LIB} ${STATIC_LIB_NOINST} ${LIB} ${LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} locales; do \
- ${MAKE} ${MFLAGS} $$i || exit 1; \
- done
+ ${MAKE} ${MFLAGS} subdirs
+ ${MAKE} ${MFLAGS} depend
+ ${MAKE} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${LIB} ${LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} ${JARFILE} locales
subdirs:
for i in ${SUBDIRS}; do \
@@ -115,33 +123,13 @@ depend: pre-depend ${SRCS}
test -f .deps || regen=1; \
for i in ${SRCS}; do \
case $$i in \
- *.c) \
- test $$i -nt .deps && regen=1; \
- deps="$$deps $${i%.c}.dep"; \
- ;; \
- *.cc) \
- test $$i -nt .deps && regen=1; \
- deps="$$deps $${i%.cc}.dep"; \
- ;; \
- *.cxx) \
+ *.c | *.cc | *.cxx | *.m | *.mm | *.S) \
test $$i -nt .deps && regen=1; \
- deps="$$deps $${i%.cxx}.dep"; \
- ;; \
- *.m) \
- test $$i -nt .deps && regen=1; \
- deps="$$deps $${i%.m}.dep"; \
- ;; \
- *.mm) \
- test $$i -nt .deps && regen=1; \
- deps="$$deps $${i%.mm}.dep"; \
- ;; \
- *.S) \
- test $$i -nt .deps && regen=1; \
- deps="$$deps $${i%.S}.dep"; \
+ deps="$$deps $$i.dep"; \
;; \
esac; \
done; \
- if test x"$$regen" = x"1" -a x"$$deps" != "x"; then \
+ if test x"$$regen" = x"1" -a x"$$deps" != x""; then \
${DEPEND_STATUS}; \
if ${MAKE} ${MFLAGS} $$deps && cat $$deps >.deps; then \
rm -f $$deps; \
@@ -153,11 +141,10 @@ depend: pre-depend ${SRCS}
fi; \
fi
-.c.dep .cc.dep .cxx.dep .m.dep .mm.dep .S.dep:
- ${CPP} ${CPPFLAGS} -M $< >$@ || (rm -f $@; exit 1)
-
-.d.dep:
-.xpm.dep:
+.c.c.dep .cc.cc.dep .cxx.cxx.dep .m.m.dep .mm.mm.dep .S.S.dep:
+ ${CPP} ${CPPFLAGS} -M $< | \
+ sed 's/^\([^\.]*\)\.o:/\1.o \1.lib.o \1.plugin.o:/' >$@ || \
+ { rm -f $@; false; }
pre-depend:
@@ -169,24 +156,33 @@ ${PROG} ${PROG_NOINST}: ${EXT_DEPS} ${OBJS}
${LINK_FAILED}; \
fi
-${LIB} ${LIB_NOINST}: ${EXT_DEPS} ${OBJS}
- case $@ in \
- *.a) \
- ${MAKE} ${MFLAGS} STATIC_LIB=${LIB} LIB= $@ || exit 1 \
- ;; \
- *) \
- ${LINK_STATUS}; \
- if ${LD} -o $@ ${OBJS} ${LIB_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
- ${LINK_OK}; \
- else \
- ${LINK_FAILED}; \
- fi \
- ;; \
- esac
+${JARFILE}: ${EXT_DEPS} ${JAR_MANIFEST} ${OBJS}
+ ${LINK_STATUS}
+ if test x"${JAR_MANIFEST}" != x""; then \
+ if ${JAR} cfm ${JARFILE} ${JAR_MANIFEST} ${OBJS}; then \
+ ${LINK_OK}; \
+ else \
+ ${LINK_FAILED}; \
+ fi \
+ else \
+ if ${JAR} cf ${JARFILE} ${OBJS}; then \
+ ${LINK_OK}; \
+ else \
+ ${LINK_FAILED}; \
+ fi \
+ fi
+
+${LIB} ${LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS}
+ ${LINK_STATUS}; \
+ if ${LD} -o $@ ${LIB_OBJS} ${LIB_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
+ ${LINK_OK}; \
+ else \
+ ${LINK_FAILED}; \
+ fi \
-${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${OBJS}
+${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${PLUGIN_OBJS}
${LINK_STATUS}
- if ${LD} -o $@ ${OBJS} ${PLUGIN_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
+ if ${LD} -o $@ ${PLUGIN_OBJS} ${PLUGIN_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
${LINK_OK}; \
else \
${LINK_FAILED}; \
@@ -194,7 +190,44 @@ ${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${OBJS}
${STATIC_LIB} ${STATIC_LIB_NOINST}: ${EXT_DEPS} ${OBJS}
${LINK_STATUS}
- if ${AR} cr $@ ${OBJS} && ${RANLIB} $@; then \
+ rm -f $@
+ objs=""; \
+ ars=""; \
+ for i in ${OBJS}; do \
+ case $$i in \
+ *.a) \
+ ars="$$ars $$i" \
+ ;; \
+ *.o) \
+ objs="$$objs $$i" \
+ ;; \
+ esac \
+ done; \
+ for i in $$ars; do \
+ dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
+ rm -fr $$dir; \
+ mkdir -p $$dir; \
+ cd $$dir; \
+ ar x ../$$i; \
+ for j in *.o; do \
+ objs="$$objs $$dir/$$j"; \
+ done; \
+ cd ..; \
+ done; \
+ if ${AR} cr $@ $$objs && ${RANLIB} $@; then \
+ ${LINK_OK}; \
+ else \
+ ${LINK_FAILED}; \
+ rm -f $@; \
+ fi; \
+ for i in $$ars; do \
+ dir=".$$(echo $$i | sed 's/\//_/g').objs"; \
+ rm -fr $$dir; \
+ done
+
+${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS}
+ ${LINK_STATUS}
+ if ${AR} cr $@ ${LIB_OBJS} && ${RANLIB} $@; then \
${LINK_OK}; \
else \
${LINK_FAILED}; \
@@ -210,6 +243,20 @@ locales: ${MO_FILES}
else \
${COMPILE_FAILED}; \
fi
+.c.lib.o:
+ ${COMPILE_LIB_STATUS}
+ if ${CC} ${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_LIB_OK}; \
+ else \
+ ${COMPILE_LIB_FAILED}; \
+ fi
+.c.plugin.o:
+ ${COMPILE_PLUGIN_STATUS}
+ if ${CC} ${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_PLUGIN_OK}; \
+ else \
+ ${COMPILE_PLUGIN_FAILED}; \
+ fi
.cc.o .cxx.o:
${COMPILE_STATUS}
@@ -218,6 +265,20 @@ locales: ${MO_FILES}
else \
${COMPILE_FAILED}; \
fi
+.cc.lib.o .cxx.lib.o:
+ ${COMPILE_LIB_STATUS}
+ if ${CXX} ${LIB_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_LIB_OK}; \
+ else \
+ ${COMPILE_LIB_FAILED}; \
+ fi
+.cc.plugin.o .cxx.plugin.o:
+ ${COMPILE_PLUGIN_STATUS}
+ if ${CXX} ${PLUGIN_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_PLUGIN_OK}; \
+ else \
+ ${COMPILE_PLUGIN_FAILED}; \
+ fi
.d.o:
${COMPILE_STATUS}
@@ -243,6 +304,14 @@ locales: ${MO_FILES}
${COMPILE_FAILED}; \
fi
+.java.class:
+ ${COMPILE_STATUS}
+ if ${JAVAC} ${JAVACFLAGS} $<; then \
+ ${COMPILE_OK}; \
+ else \
+ ${COMPILE_FAILED}; \
+ fi
+
.m.o:
${COMPILE_STATUS}
if ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
@@ -250,6 +319,20 @@ locales: ${MO_FILES}
else \
${COMPILE_FAILED}; \
fi
+.m.lib.o:
+ ${COMPILE_LIB_STATUS}
+ if ${OBJC} ${LIB_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_LIB_OK}; \
+ else \
+ ${COMPILE_LIB_FAILED}; \
+ fi
+.m.plugin.o:
+ ${COMPILE_PLUGIN_STATUS}
+ if ${OBJC} ${PLUGIN_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_PLUGIN_OK}; \
+ else \
+ ${COMPILE_PLUGIN_FAILED}; \
+ fi
.mm.o:
${COMPILE_STATUS}
@@ -258,6 +341,20 @@ locales: ${MO_FILES}
else \
${COMPILE_FAILED}; \
fi
+.mm.lib.o:
+ ${COMPILE_LIB_STATUS}
+ if ${OBJCXX} ${LIB_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_LIB_OK}; \
+ else \
+ ${COMPILE_LIB_FAILED}; \
+ fi
+.mm.plugin.o:
+ ${COMPILE_PLUGIN_STATUS}
+ if ${OBJCXX} ${PLUGIN_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_PLUGIN_OK}; \
+ else \
+ ${COMPILE_PLUGIN_FAILED}; \
+ fi
.po.mo:
${COMPILE_STATUS}
@@ -275,9 +372,9 @@ locales: ${MO_FILES}
${COMPILE_FAILED}; \
fi
-.xpm.o:
+.rc.o .rc.lib.o .rc.plugin.o:
${COMPILE_STATUS}
- if ${CC} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+ if ${WINDRES} -J rc -O coff -o $@ $<; then \
${COMPILE_OK}; \
else \
${COMPILE_FAILED}; \
@@ -290,8 +387,44 @@ locales: ${MO_FILES}
else \
${COMPILE_FAILED}; \
fi
+.S.lib.o:
+ ${COMPILE_LIB_STATUS}
+ if ${AS} ${LIB_CFLAGS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_LIB_OK}; \
+ else \
+ ${COMPILE_LIB_FAILED}; \
+ fi
+.S.plugin.o:
+ ${COMPILE_PLUGIN_STATUS}
+ if ${AS} ${PLUGIN_CFLAGS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+ ${COMPILE_PLUGIN_OK}; \
+ else \
+ ${COMPILE_PLUGIN_FAILED}; \
+ fi
+
+.xpm.o:
+ ${COMPILE_STATUS}
+ if ${CC} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+ ${COMPILE_OK}; \
+ else \
+ ${COMPILE_FAILED}; \
+ fi
+.xpm.lib.o:
+ ${COMPILE_LIB_STATUS}
+ if ${CC} ${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+ ${COMPILE_LIB_OK}; \
+ else \
+ ${COMPILE_LIB_FAILED}; \
+ fi
+.xpm.plugin.o:
+ ${COMPILE_PLUGIN_STATUS}
+ if ${CC} ${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+ ${COMPILE_PLUGIN_OK}; \
+ else \
+ ${COMPILE_PLUGIN_FAILED}; \
+ fi
-install: ${LIB} ${STATIC_LIB} ${PLUGIN} ${PROG} install-extra
+install: ${LIB} ${STATIC_LIB} ${STATIC_PIC_LIB} ${PLUGIN} ${PROG} install-extra
for i in ${SUBDIRS}; do \
${DIR_ENTER}; \
${MAKE} ${MFLAGS} install || exit 1; \
@@ -300,14 +433,14 @@ install: ${LIB} ${STATIC_LIB} ${PLUGIN} ${PROG} install-extra
for i in ${LIB}; do \
${INSTALL_STATUS}; \
- if ${MKDIR_P} ${DESTDIR}${libdir} && ${INSTALL_LIB}; then \
+ if ${MKDIR_P} ${DESTDIR}${libdir} ${INSTALL_LIB}; then \
${INSTALL_OK}; \
else \
${INSTALL_FAILED}; \
fi \
done
- for i in ${STATIC_LIB}; do \
+ for i in ${STATIC_LIB} ${STATIC_PIC_LIB}; do \
${INSTALL_STATUS}; \
if ${MKDIR_P} ${DESTDIR}${libdir} && ${INSTALL} -m 644 $$i ${DESTDIR}${libdir}/$$i; then \
${INSTALL_OK}; \
@@ -362,7 +495,6 @@ install: ${LIB} ${STATIC_LIB} ${PLUGIN} ${PROG} install-extra
fi \
done \
fi
-
for i in ${MAN}; do \
${INSTALL_STATUS}; \
if ${MKDIR_P} ${DESTDIR}${mandir}/${mansubdir} && ${INSTALL} -m 644 $$i ${DESTDIR}${mandir}/${mansubdir}/$$i; then \
@@ -383,7 +515,7 @@ uninstall: uninstall-extra
for i in ${LIB}; do \
if test -f ${DESTDIR}${libdir}/$$i; then \
- if ${UNINSTALL_LIB}; then \
+ if : ${UNINSTALL_LIB}; then \
${DELETE_OK}; \
else \
${DELETE_FAILED}; \
@@ -391,7 +523,7 @@ uninstall: uninstall-extra
fi; \
done
- for i in ${STATIC_LIB}; do \
+ for i in ${STATIC_LIB} ${STATIC_PIC_LIB}; do \
if test -f ${DESTDIR}${libdir}/$$i; then \
if rm -f ${DESTDIR}${libdir}/$$i; then \
${DELETE_OK}; \
@@ -419,8 +551,10 @@ uninstall: uninstall-extra
else \
${DELETE_FAILED}; \
fi \
- fi \
+ fi; \
+ rmdir "$$(dirname ${DESTDIR}${datadir}/${PACKAGE}/$$i)" >/dev/null 2>&1 || true; \
done
+ -rmdir ${DESTDIR}${datadir}/${PACKAGE} >/dev/null 2>&1
for i in ${PROG}; do \
if test -f ${DESTDIR}${bindir}/$$i; then \
@@ -472,7 +606,7 @@ clean:
${DIR_LEAVE}; \
done
- for i in ${DEPS} ${OBJS} ${PROG} ${PROG_NOINST} ${LIB} ${LIB_NOINST} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${CLEAN_LIB} ${MO_FILES} ${CLEAN}; do \
+ for i in ${DEPS} ${OBJS} ${LIB_OBJS} ${PLUGIN_OBJS} ${PROG} ${PROG_NOINST} ${LIB} ${LIB_NOINST} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${CLEAN_LIB} ${MO_FILES} ${CLEAN}; do \
if test -f $$i -o -d $$i; then \
if rm -fr $$i; then \
${DELETE_OK}; \
@@ -489,7 +623,7 @@ distclean: clean
${DIR_LEAVE}; \
done
- for i in ${DISTCLEAN} *~; do \
+ for i in ${DISTCLEAN} .deps *~; do \
if test -f $$i -o -d $$i; then \
if rm -fr $$i; then \
${DELETE_OK}; \
@@ -499,24 +633,27 @@ distclean: clean
fi \
done
- # ./configure creates .deps files even in folders not listed in SUBDIRS.
- rm -f `find . -name .deps ! -path ./.hg\*`
-
-DIR_ENTER = printf "\033[K\033[0;36mEntering directory \033[1;36m$$i\033[0;36m.\033[0m\n"; cd $$i || exit 1
-DIR_LEAVE = printf "\033[K\033[0;36mLeaving directory \033[1;36m$$i\033[0;36m.\033[0m\n"; cd .. || exit 1
-DEPEND_STATUS = printf "\033[K\033[0;33mGenerating dependencies...\033[0m\r"
-DEPEND_OK = printf "\033[K\033[0;32mSuccessfully generated dependencies.\033[0m\n"
-DEPEND_FAILED = printf "\033[K\033[0;31mFailed to generate dependencies!\033[0m\n"; exit 1
-COMPILE_STATUS = printf "\033[K\033[0;33mCompiling \033[1;33m$<\033[0;33m...\033[0m\r"
-COMPILE_OK = printf "\033[K\033[0;32mSuccessfully compiled \033[1;32m$<\033[0;32m.\033[0m\n"
-COMPILE_FAILED = printf "\033[K\033[0;31mFailed to compile \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1
-LINK_STATUS = printf "\033[K\033[0;33mLinking \033[1;33m$@\033[0;33m...\033[0m\r"
-LINK_OK = printf "\033[K\033[0;32mSuccessfully linked \033[1;32m$@\033[0;32m.\033[0m\n"
-LINK_FAILED = printf "\033[K\033[0;31mFailed to link \033[1;31m$@\033[0;31m!\033[0m\n"; exit 1
-INSTALL_STATUS = printf "\033[K\033[0;33mInstalling \033[1;33m$$i\033[0;33m...\033[0m\r"
-INSTALL_OK = printf "\033[K\033[0;32mSuccessfully installed \033[1;32m$$i\033[0;32m.\033[0m\n"
-INSTALL_FAILED = printf "\033[K\033[0;31mFailed to install \033[1;31m$$i\033[0;31m!\033[0m\n"; exit 1
-DELETE_OK = printf "\033[K\033[0;34mDeleted \033[1;34m$$i\033[0;34m.\033[0m\n"
-DELETE_FAILED = printf "\033[K\033[0;31mFailed to delete \033[1;31m$$i\033[0;31m!\033[0m\n"; exit 1
+DIR_ENTER = printf "@TERM_EL@@TERM_SETAF6@Entering directory @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF6@.@TERM_SGR0@\n"; cd $$i || exit 1
+DIR_LEAVE = printf "@TERM_EL@@TERM_SETAF6@Leaving directory @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF6@.@TERM_SGR0@\n"; cd .. || exit 1
+DEPEND_STATUS = printf "@TERM_EL@@TERM_SETAF3@Generating dependencies...@TERM_SGR0@\r"
+DEPEND_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully generated dependencies.@TERM_SGR0@\n"
+DEPEND_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to generate dependencies!@TERM_SGR0@\n"; exit 1
+COMPILE_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r"
+COMPILE_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n"
+COMPILE_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit 1
+COMPILE_LIB_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF3@ (lib)...@TERM_SGR0@\r"
+COMPILE_LIB_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF2@ (lib).@TERM_SGR0@\n"
+COMPILE_LIB_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF1@ (lib)!@TERM_SGR0@\n"; exit 1
+COMPILE_PLUGIN_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF3@ (plugin)...@TERM_SGR0@\r"
+COMPILE_PLUGIN_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF2@ (plugin).@TERM_SGR0@\n"
+COMPILE_PLUGIN_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF1@ (plugin)!@TERM_SGR0@\n"; exit 1
+LINK_STATUS = printf "@TERM_EL@@TERM_SETAF3@Linking @TERM_BOLD@$@@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r"
+LINK_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully linked @TERM_BOLD@$@@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n"
+LINK_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to link @TERM_BOLD@$@@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit 1
+INSTALL_STATUS = printf "@TERM_EL@@TERM_SETAF3@Installing @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r"
+INSTALL_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully installed @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n"
+INSTALL_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to install @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit 1
+DELETE_OK = printf "@TERM_EL@@TERM_SETAF4@Deleted @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF4@.@TERM_SGR0@\n"
+DELETE_FAILED = printf "@TERM_EL@@TERM_SETAF1@Failed to delete @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit 1
include .deps
diff --git a/config.guess b/config.guess
index af7f02d..dc84c68 100755..100644
--- a/config.guess
+++ b/config.guess
@@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
-# Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
-timestamp='2006-07-02'
+timestamp='2009-11-20'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -27,16 +27,16 @@ timestamp='2006-07-02'
# the same distribution terms that you use for the rest of that program.
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
#
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1.
#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
me=`echo "$0" | sed -e 's,.*/,,'`
@@ -56,8 +56,8 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -139,23 +139,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-if [ "${UNAME_SYSTEM}" = "Linux" ] ; then
- eval $set_cc_for_build
- cat << EOF > $dummy.c
- #include <features.h>
- #ifdef __UCLIBC__
- # ifdef __UCLIBC_CONFIG_VERSION__
- LIBC=uclibc __UCLIBC_CONFIG_VERSION__
- # else
- LIBC=uclibc
- # endif
- #else
- LIBC=gnu
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'`
-fi
-
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -178,6 +161,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
@@ -186,7 +170,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
+ | grep -q __ELF__
then
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
# Return netbsd for either. FIX?
@@ -340,14 +324,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
case `/usr/bin/uname -p` in
sparc) echo sparc-icl-nx7; exit ;;
esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
@@ -548,7 +551,7 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit ;;
- *:AIX:*:[45])
+ *:AIX:*:[456])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
@@ -656,7 +659,7 @@ EOF
# => hppa64-hp-hpux11.23
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
- grep __LP64__ >/dev/null
+ grep -q __LP64__
then
HP_ARCH="hppa2.0w"
else
@@ -797,7 +800,7 @@ EOF
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit ;;
- i*:MINGW*:*)
+ *:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
i*:windows32*:*)
@@ -807,15 +810,24 @@ EOF
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
- x86:Interix*:[3456]*)
- echo i586-pc-interix${UNAME_RELEASE}
- exit ;;
- EM64T:Interix*:[3456]*)
- echo x86_64-unknown-interix${UNAME_RELEASE}
- exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -845,193 +857,125 @@ EOF
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
exit ;;
avr32*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
cris:Linux:*:*)
- echo cris-axis-linux-${LIBC}
+ echo cris-axis-linux-gnu
exit ;;
crisv32:Linux:*:*)
- echo crisv32-axis-linux-${LIBC}
+ echo crisv32-axis-linux-gnu
exit ;;
frv:Linux:*:*)
- echo frv-unknown-linux-${LIBC}
+ echo frv-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
exit ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
- mips:Linux:*:*)
+ mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#undef CPU
- #undef mips
- #undef mipsel
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
+ CPU=${UNAME_MACHINE}el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
+ CPU=${UNAME_MACHINE}
#else
CPU=
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
- ;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^CPU/{
- s: ::g
- p
- }'`"
- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
or32:Linux:*:*)
- echo or32-unknown-linux-${LIBC}
+ echo or32-unknown-linux-gnu
exit ;;
- ppc:Linux:*:*)
- echo powerpc-unknown-linux-${LIBC}
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
exit ;;
- ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-${LIBC}
- exit ;;
- alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
- EV5) UNAME_MACHINE=alphaev5 ;;
- EV56) UNAME_MACHINE=alphaev56 ;;
- PCA56) UNAME_MACHINE=alphapca56 ;;
- PCA57) UNAME_MACHINE=alphapca56 ;;
- EV6) UNAME_MACHINE=alphaev6 ;;
- EV67) UNAME_MACHINE=alphaev67 ;;
- EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
- if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
- PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
- *) echo hppa-unknown-linux-${LIBC} ;;
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
esac
exit ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-${LIBC}
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
vax:Linux:*:*)
- echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ echo ${UNAME_MACHINE}-dec-linux-gnu
exit ;;
x86_64:Linux:*:*)
- echo x86_64-unknown-linux-${LIBC}
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- # Set LC_ALL=C to ensure ld outputs messages in English.
- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
- | sed -ne '/supported targets:/!d
- s/[ ][ ]*/ /g
- s/.*supported targets: *//
- s/ .*//
- p'`
- case "$ld_supported_targets" in
- elf32-i386)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}"
- ;;
- a.out-i386-linux)
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout"
- exit ;;
- coff-i386)
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff"
- exit ;;
- "")
- # Either a pre-BFD a.out linker (linux-gnuoldld) or
- # one that does not give us useful --help.
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld"
- exit ;;
- esac
- # This should get integrated into the C code below, but now we hack
- if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi
- # Determine whether the default compiler is a.out or elf
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #ifdef __ELF__
- # ifdef __GLIBC__
- # if __GLIBC__ >= 2
- LIBC=gnu
- # else
- LIBC=gnulibc1
- # endif
- # else
- LIBC=gnulibc1
- # endif
- #else
- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
- LIBC=gnu
- #else
- LIBC=gnuaout
- #endif
- #endif
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
- /^LIBC/{
- s: ::g
- p
- }'`"
- test x"${LIBC}" != x && {
- echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
- exit
- }
- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
- ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
@@ -1060,7 +1004,7 @@ EOF
i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable
exit ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit ;;
i*86:*DOS:*:*)
@@ -1104,8 +1048,11 @@ EOF
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
@@ -1143,6 +1090,16 @@ EOF
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit ;;
@@ -1155,7 +1112,7 @@ EOF
rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
exit ;;
SM[BE]S:UNIX_SV:*:*)
@@ -1218,6 +1175,9 @@ EOF
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit ;;
@@ -1227,6 +1187,15 @@ EOF
SX-6:SUPER-UX:*:*)
echo sx6-nec-superux${UNAME_RELEASE}
exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit ;;
@@ -1236,6 +1205,16 @@ EOF
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
unknown) UNAME_PROCESSOR=powerpc ;;
esac
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1317,6 +1296,9 @@ EOF
i*86:rdos:*:*)
echo ${UNAME_MACHINE}-pc-rdos
exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1477,9 +1459,9 @@ This script, last modified $timestamp, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
and
- http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
If the version you run ($0) is already up to date, please
send the following data and any information you think might be
diff --git a/config.h.in b/config.h.in
index 8805025..a0fbdbb 100644
--- a/config.h.in
+++ b/config.h.in
@@ -3,21 +3,6 @@
/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD
-/* Define to 1 if your system is a PowerPC. */
-#undef ARCH_POWERPC
-
-/* Config dir to use */
-#undef BMP_RCPATH
-
-/* Path to OSS DSP, really just a data pipe, default is /dev/dsp. */
-#undef DEV_DSP
-
-/* Path to OSS mixer, default is /dev/mixer. */
-#undef DEV_MIXER
-
-/* Define to disable per user plugin directory */
-#undef DISABLE_USER_PLUGIN_DIR
-
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
@@ -31,33 +16,23 @@
/* Define if Vorbis output part should be built */
#undef FILEWRITER_VORBIS
-/* Define to 1 if your system has AltiVec. */
-#undef HAVE_ALTIVEC
-
-/* Define to 1 if your system has an altivec.h file. */
-#undef HAVE_ALTIVEC_H
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
-/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
-#undef HAVE_CARBON_CARBON_H
-
-/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */
-#undef HAVE_CORESERVICES_CORESERVICES_H
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
/* Define if the GNU dcgettext() function is already present or preinstalled.
*/
#undef HAVE_DCGETTEXT
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the <fnmatch.h> header file. */
-#undef HAVE_FNMATCH_H
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
-/* Define to 1 if you have the <fts.h> header file. */
-#undef HAVE_FTS_H
-
-/* Define to 1 if you have the `getmntinfo' function. */
-#undef HAVE_GETMNTINFO
+/* Define to 1 if you have the `fsync' function. */
+#undef HAVE_FSYNC
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
@@ -65,26 +40,14 @@
/* Define if you have HardSID for libSIDPlay 2 */
#undef HAVE_HARDSID_BUILDER
-/* Define if you have the iconv() function. */
+/* Define if you have the iconv() function and it works. */
#undef HAVE_ICONV
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
-/* indidaces if libmtp 0.3.0 is installed */
-#undef HAVE_LIBMTP_030
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the <linux/joystick.h> header file. */
-#undef HAVE_LINUX_JOYSTICK_H
-
-/* Define to 1 if you have the `lrintf' function. */
-#undef HAVE_LRINTF
-
-/* Define to 1 if you have the <machine/soundcard.h> header file. */
-#undef HAVE_MACHINE_SOUNDCARD_H
+/* Define to 1 if you have the <libsmbclient.h> header file. */
+#undef HAVE_LIBSMBCLIENT_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
@@ -92,24 +55,12 @@
/* Define to 1 if you have the `mkdtemp' function. */
#undef HAVE_MKDTEMP
-/* Define if you have the FreeBSD newpcm driver */
-#undef HAVE_NEWPCM
-
/* Whether we have ne_set_connect_timeout */
#undef HAVE_NE_SET_CONNECT_TIMEOUT
-/* Define if the OSS output plugin should be built */
-#undef HAVE_OSS
-
-/* Define if the OSS4 output plugin should be built */
-#undef HAVE_OSS4
-
/* Define if you have reSID for libSIDPlay 2 */
#undef HAVE_RESID_BUILDER
-/* Set to 1 if you have libsamplerate. */
-#undef HAVE_SAMPLERATE
-
/* Define if you have and want to use libSIDPlay1 */
#undef HAVE_SIDPLAY1
@@ -123,18 +74,9 @@
*/
#undef HAVE_SIDPLAY2_DISTORTION
-/* Define if you have snd_device_name_hint */
-#undef HAVE_SND_DEVICE_NAME_HINT
-
/* Define to 1 if you have the <soundcard.h> header file. */
#undef HAVE_SOUNDCARD_H
-/* Define to 1 if your system has SSE2 */
-#undef HAVE_SSE2
-
-/* Define to 1 if you have the `statvfs' function. */
-#undef HAVE_STATVFS
-
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
@@ -147,15 +89,6 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
-/* Whether we have strnlen */
-#undef HAVE_STRNLEN
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
/* Define to 1 if you have the <sys/soundcard.h> header file. */
#undef HAVE_SYS_SOUNDCARD_H
@@ -165,15 +98,18 @@
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
/* X Composite extension available */
#undef HAVE_XCOMPOSITE
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
/* Name of package */
#undef PACKAGE
@@ -198,15 +134,6 @@
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
-/* Define to symbol prefix, if any */
-#undef SYMBOL_PREFIX
-
-/* Define if character set detection enabled */
-#undef USE_CHARDET
-
-/* Define if D-Bus support enabled */
-#undef USE_DBUS
-
/* Define if building with IPv6 support */
#undef USE_IPV6
@@ -224,3 +151,9 @@
# undef WORDS_BIGENDIAN
# endif
#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
diff --git a/config.rpath b/config.rpath
index 3f1bef3..17298f2 100755..100644
--- a/config.rpath
+++ b/config.rpath
@@ -2,7 +2,7 @@
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
-# Copyright 1996-2005 Free Software Foundation, Inc.
+# Copyright 1996-2010 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
@@ -25,7 +25,7 @@
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
-# All known linkers require a `.a' archive for static linking (except M$VC,
+# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
shrext=.so
@@ -35,9 +35,19 @@ host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-cc_basename=`echo "$CC" | sed -e 's%^.*/%%'`
+# Code taken from libtool.m4's _LT_CC_BASENAME.
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
@@ -48,13 +58,13 @@ else
wl='-Wl,'
;;
darwin*)
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
wl='-Wl,'
;;
esac
;;
- mingw* | pw32* | os2*)
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
@@ -64,9 +74,15 @@ else
;;
newsos6)
;;
- linux*)
+ linux* | k*bsd*-gnu)
case $cc_basename in
- icc* | ecc*)
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
wl='-Wl,'
;;
pgcc | pgf77 | pgf90)
@@ -78,12 +94,19 @@ else
como)
wl='-lopt='
;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
esac
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
- sco3.2v5*)
+ rdos*)
;;
solaris*)
wl='-Wl,'
@@ -91,11 +114,14 @@ else
sunos4*)
wl='-Qoption ld '
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.2uw2* | sysv4.3*)
wl='-Wl,'
;;
sysv4*MP*)
;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
unicos*)
wl='-Wl,'
;;
@@ -104,7 +130,7 @@ else
esac
fi
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
@@ -112,7 +138,7 @@ hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
@@ -120,6 +146,10 @@ case "$host_os" in
with_gnu_ld=no
fi
;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
openbsd*)
with_gnu_ld=no
;;
@@ -127,8 +157,14 @@ esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
case "$host_os" in
- aix3* | aix4* | aix5*)
+ aix[3-9]*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
@@ -152,7 +188,7 @@ if test "$with_gnu_ld" = yes; then
ld_shlibs=no
fi
;;
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
@@ -162,9 +198,20 @@ if test "$with_gnu_ld" = yes; then
ld_shlibs=no
fi
;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
netbsd*)
;;
- solaris* | sysv5*)
+ solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
@@ -173,16 +220,23 @@ if test "$with_gnu_ld" = yes; then
ld_shlibs=no
fi
;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
sunos4*)
hardcode_direct=yes
;;
- linux*)
- if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
- :
- else
- ld_shlibs=no
- fi
- ;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
@@ -191,10 +245,8 @@ if test "$with_gnu_ld" = yes; then
fi
;;
esac
- if test "$ld_shlibs" = yes; then
- # Unlike libtool, we use -rpath here, not --rpath, since the documented
- # option of GNU ld is called -rpath, not --rpath.
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
fi
else
case "$host_os" in
@@ -208,7 +260,7 @@ else
hardcode_direct=unsupported
fi
;;
- aix4* | aix5*)
+ aix[4-9]*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
@@ -218,13 +270,14 @@ else
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
+ ;;
esac
fi
hardcode_direct=yes
@@ -236,7 +289,7 @@ else
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
- hardcode_direct=yes
+ :
else
# We have old collect2
hardcode_direct=unsupported
@@ -244,6 +297,7 @@ else
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
+ ;;
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
@@ -278,7 +332,7 @@ else
;;
bsdi[45]*)
;;
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
@@ -291,7 +345,7 @@ else
if test "$GCC" = yes ; then
:
else
- case "$cc_basename" in
+ case $cc_basename in
xlc*)
;;
*)
@@ -314,7 +368,7 @@ else
hardcode_direct=yes
hardcode_minus_L=yes
;;
- freebsd* | kfreebsd*-gnu | dragonfly*)
+ freebsd* | dragonfly*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
@@ -326,24 +380,25 @@ else
# but as the default location of the library.
hardcode_minus_L=yes
;;
- hpux10* | hpux11*)
+ hpux10*)
if test "$with_gnu_ld" = no; then
- case "$host_cpu" in
- hppa*64*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=no
- ;;
- ia64*)
- hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
hardcode_direct=no
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
;;
*)
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
@@ -366,18 +421,22 @@ else
hardcode_libdir_separator=:
;;
openbsd*)
- hardcode_direct=yes
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
else
- case "$host_os" in
- openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
+ ld_shlibs=no
fi
;;
os2*)
@@ -397,8 +456,6 @@ else
fi
hardcode_libdir_separator=:
;;
- sco3.2v5*)
- ;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
@@ -427,14 +484,11 @@ else
ld_shlibs=yes
fi
;;
- sysv4.2uw2*)
- hardcode_direct=yes
- hardcode_minus_L=no
- ;;
- sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
;;
- sysv5*)
- hardcode_libdir_flag_spec=
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
@@ -446,37 +500,55 @@ else
fi
# Check dynamic linker characteristics
-# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
libname_spec='lib$name'
case "$host_os" in
aix3*)
+ library_names_spec='$libname.a'
;;
- aix4* | aix5*)
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
;;
amigaos*)
+ library_names_spec='$libname.a'
;;
beos*)
+ library_names_spec='$libname$shrext'
;;
bsdi[45]*)
+ library_names_spec='$libname$shrext'
;;
- cygwin* | mingw* | pw32*)
+ cygwin* | mingw* | pw32* | cegcc*)
shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
;;
darwin* | rhapsody*)
shrext=.dylib
+ library_names_spec='$libname$shrext'
;;
dgux*)
+ library_names_spec='$libname$shrext'
;;
freebsd1*)
;;
- kfreebsd*-gnu)
- ;;
- freebsd*)
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
;;
gnu*)
+ library_names_spec='$libname$shrext'
;;
hpux9* | hpux10* | hpux11*)
- case "$host_cpu" in
+ case $host_cpu in
ia64*)
shrext=.so
;;
@@ -487,8 +559,13 @@ case "$host_os" in
shrext=.sl
;;
esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
;;
irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
@@ -505,41 +582,59 @@ case "$host_os" in
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
- linux*)
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
;;
knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
;;
netbsd*)
+ library_names_spec='$libname$shrext'
;;
newsos6)
+ library_names_spec='$libname$shrext'
;;
nto-qnx*)
+ library_names_spec='$libname$shrext'
;;
openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
;;
os2*)
libname_spec='$name'
shrext=.dll
+ library_names_spec='$libname.a'
;;
osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
;;
- sco3.2v5*)
+ rdos*)
;;
solaris*)
+ library_names_spec='$libname$shrext'
;;
sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
;;
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
;;
sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
;;
uts4*)
+ library_names_spec='$libname$shrext'
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
@@ -553,6 +648,12 @@ libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
diff --git a/config.sub b/config.sub
index ae0b3dd..2a55a50 100755..100644
--- a/config.sub
+++ b/config.sub
@@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
-# Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# Free Software Foundation, Inc.
-timestamp='2006-07-02'
+timestamp='2009-11-20'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -32,13 +32,16 @@ timestamp='2006-07-02'
# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
@@ -72,8 +75,8 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -122,6 +125,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -148,10 +152,13 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray)
+ -apple | -axis | -knuth | -cray | -microblaze)
os=
basic_machine=$1
;;
+ -bluegene*)
+ os=-cnk
+ ;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
@@ -244,18 +251,21 @@ case $basic_machine in
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| bfin \
| c4x | clipper \
- | d10v | d30v | dlx | dsp16xx | dvp \
- | fr30 | frv \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
+ | lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | mcore \
+ | maxq | mb | microblaze | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
- | mips64vr | mips64vrel \
+ | mips64octeon | mips64octeonel \
| mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
@@ -268,6 +278,7 @@ case $basic_machine in
| mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
+ | moxie \
| mt \
| msp430 \
| nios | nios2 \
@@ -276,19 +287,22 @@ case $basic_machine in
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
| pyramid \
- | sh | sh[1234] | sh[24]a | sh[24]a*eb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
| spu | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
+ | ubicom32 \
| v850 | v850e \
| we32k \
- | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
- | z8k)
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
basic_machine=$basic_machine-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12)
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
# Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
os=-none
@@ -323,19 +337,22 @@ case $basic_machine in
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
+ | lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
+ | mips64octeon-* | mips64octeonel-* \
| mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
@@ -356,21 +373,26 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
| pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]a*eb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
| tahoe-* | thumb-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
| tron-* \
+ | ubicom32-* \
| v850-* | v850e-* | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
- | xstormy16-* | xtensa-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
| ymp-* \
- | z8k-*)
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -434,6 +456,10 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-bsd
;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -442,10 +468,26 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
c90)
basic_machine=c90-cray
os=-unicos
;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -474,8 +516,8 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
- cr16c)
- basic_machine=cr16c-unknown
+ cr16)
+ basic_machine=cr16-unknown
os=-elf
;;
crds | unos)
@@ -513,6 +555,10 @@ case $basic_machine in
basic_machine=m88k-motorola
os=-sysv3
;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
djgpp)
basic_machine=i586-pc
os=-msdosdjgpp
@@ -667,6 +713,14 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
m88k-omron*)
basic_machine=m88k-omron
;;
@@ -678,10 +732,17 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
mingw32)
basic_machine=i386-pc
os=-mingw32
;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
miniframe)
basic_machine=m68000-convergent
;;
@@ -689,24 +750,6 @@ case $basic_machine in
basic_machine=m68k-atari
os=-mint
;;
- mipsEE* | ee | ps2)
- basic_machine=mips64r5900el-scei
- case $os in
- -linux*)
- ;;
- *)
- os=-elf
- ;;
- esac
- ;;
- iop)
- basic_machine=mipsel-scei
- os=-irx
- ;;
- dvp)
- basic_machine=dvp-scei
- os=-elf
- ;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
@@ -826,6 +869,14 @@ case $basic_machine in
basic_machine=i860-intel
os=-osf
;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
pbd)
basic_machine=sparc-tti
;;
@@ -927,6 +978,10 @@ case $basic_machine in
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
sei)
basic_machine=mips-sei
os=-seiux
@@ -938,6 +993,9 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
sh64)
basic_machine=sh64-unknown
;;
@@ -1027,6 +1085,10 @@ case $basic_machine in
basic_machine=tic6x-unknown
os=-coff
;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
tx39)
basic_machine=mipstx39-unknown
;;
@@ -1102,6 +1164,10 @@ case $basic_machine in
basic_machine=z8k-unknown
os=-sim
;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
none)
basic_machine=none-none
os=-none
@@ -1140,7 +1206,7 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
- sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
@@ -1190,6 +1256,9 @@ case $os in
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
@@ -1210,10 +1279,11 @@ case $os in
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
+ | -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
@@ -1222,7 +1292,7 @@ case $os in
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
@@ -1232,7 +1302,7 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -irx*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1362,6 +1432,9 @@ case $os in
-zvmoe)
os=-zvmoe
;;
+ -dicos*)
+ os=-dicos
+ ;;
-none)
;;
*)
@@ -1384,6 +1457,9 @@ else
# system, and we'll never get to this point.
case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
spu-*)
os=-elf
;;
@@ -1424,6 +1500,9 @@ case $basic_machine in
m68*-cisco)
os=-aout
;;
+ mep-*)
+ os=-elf
+ ;;
mips*-cisco)
os=-elf
;;
@@ -1553,7 +1632,7 @@ case $basic_machine in
-sunos*)
vendor=sun
;;
- -aix*)
+ -cnk*|-aix*)
vendor=ibm
;;
-beos*)
diff --git a/configure b/configure
index 442b384..18f5c5a 100755
--- a/configure
+++ b/configure
@@ -1,8 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for audacious-plugins 2.4.4.
-#
-# Report bugs to <bugs+audacious-plugins@atheme.org>.
+# Generated by GNU Autoconf 2.68 for audacious-plugins 3.2.
#
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -12,6 +10,8 @@
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
+#
+# (C) 2005-2012 Audacious Team
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
@@ -238,8 +238,7 @@ fi
$as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and
-$0: bugs+audacious-plugins@atheme.org about your system,
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
@@ -560,9 +559,9 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='audacious-plugins'
PACKAGE_TARNAME='audacious-plugins'
-PACKAGE_VERSION='2.4.4'
-PACKAGE_STRING='audacious-plugins 2.4.4'
-PACKAGE_BUGREPORT='bugs+audacious-plugins@atheme.org'
+PACKAGE_VERSION='3.2'
+PACKAGE_STRING='audacious-plugins 3.2'
+PACKAGE_BUGREPORT=''
PACKAGE_URL=''
# Factoring default headers for most tests.
@@ -601,6 +600,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
+gt_needs=
ac_subst_vars='LTLIBOBJS
LIBOBJS
GCC42_CFLAGS
@@ -611,8 +611,6 @@ OUTPUT_PLUGINS
INPUT_PLUGINS
GENERAL_PLUGINS
EFFECT_PLUGINS
-beepdir
-BEEP_DEFINES
pluginsubs
TRANSPORT_PLUGIN_DIR
CONTAINER_PLUGIN_DIR
@@ -622,36 +620,18 @@ EFFECT_PLUGIN_DIR
OUTPUT_PLUGIN_DIR
INPUT_PLUGIN_DIR
plugindir
-HAVE_SUN_FALSE
-HAVE_SUN_TRUE
-HAVE_SOLARIS_FALSE
-HAVE_SOLARIS_TRUE
-USE_X86ASM_FALSE
-USE_X86ASM_TRUE
-ARCH_X86_FALSE
-ARCH_X86_TRUE
-ARCH_DEFINES
+GLIB214_LIBS
+GLIB214_CFLAGS
BS2B_LIBS
BS2B_CFLAGS
FILEWRITER_LIBS
FILEWRITER_CFLAGS
FLAC_LIBS
FLAC_CFLAGS
-GTKGLEXT_LIBS
-GTKGLEXT_CFLAGS
-LIBPROJECTM1_LIBS
-LIBPROJECTM1_CFLAGS
-LIBPROJECTM_LIBS
-LIBPROJECTM_CFLAGS
CUE_LIBS
CUE_CFLAGS
XML_LIBS
XML_CFLAGS
-SDL_LIBS
-SDL_CFLAGS
-SDL_CONFIG
-BLUEZ_LIBS
-BLUEZ_CFLAGS
MTP_LIBS
MTP_CFLAGS
MMS_LIBS
@@ -660,10 +640,6 @@ NEON_LIBS
NEON_CFLAGS
CURL_LIBS
CURL_CFLAGS
-HAVE_LINUX_JOYSTICK_FALSE
-HAVE_LINUX_JOYSTICK_TRUE
-HAVE_CDROM_FALSE
-HAVE_CDROM_TRUE
CDDB_LIBS
CDDB_CFLAGS
CDIO_LIBS
@@ -674,9 +650,11 @@ GMODULE_LIBS
GMODULE_CFLAGS
FLUIDSYNTH_LIBS
FLUIDSYNTH_CFLAGS
+SDL_LIBS
+SDL_CFLAGS
+SDL_CONFIG
ALSA_LIBS
ALSA_CFLAGS
-OSS_LIBS
OSS_CFLAGS
CXXCPP
BUILDERS_LIBS
@@ -692,8 +670,8 @@ JACK_LIBS
JACK_CFLAGS
FFMPEG_LIBS
FFMPEG_CFLAGS
-NEED_AVCORE_LIBS
-NEED_AVCORE_CFLAGS
+MODPLUG_LIBS
+MODPLUG_CFLAGS
SNDFILE_LIBS
SNDFILE_CFLAGS
FAAD_LIBS
@@ -706,6 +684,8 @@ OGG_VORBIS_LIBS
OGG_VORBIS_CFLAGS
BINIO_LIBS
BINIO_CFLAGS
+GIO_UNIX_LIBS
+GIO_UNIX_CFLAGS
NOTIFY_LIBS
NOTIFY_CFLAGS
XCOMPOSITE_LIBS
@@ -714,68 +694,81 @@ XRENDER_LIBS
XRENDER_CFLAGS
PANGOCAIRO_LIBS
PANGOCAIRO_CFLAGS
-CAIRO_LIBS
-CAIRO_CFLAGS
+GTK216_LIBS
+GTK216_CFLAGS
+DBUS_LIBS
+DBUS_CFLAGS
GDKX11_LIBS
GDKX11_CFLAGS
-DCT64
-SIMD_CFLAGS
-LIBROAR_LIBS
-LIBROAR_CFLAGS
+MPG123_LIBS
+MPG123_CFLAGS
PULSE_LIBS
PULSE_CFLAGS
-PROG_IMPLIB_LDFLAGS
-PROG_IMPLIB_NEEDED
-CLEAN_LIB
-UNINSTALL_LIB
-INSTALL_LIB
-PLUGIN_SUFFIX
-PLUGIN_LDFLAGS
-PLUGIN_CFLAGS
-PLUGIN_CPPFLAGS
-LDFLAGS_RPATH
-LIB_SUFFIX
-LIB_PREFIX
-LIB_LDFLAGS
-LIB_CFLAGS
-LIB_CPPFLAGS
-USE_CHARDET
-USE_CHARDET_FALSE
-USE_CHARDET_TRUE
USE_IPV6
USE_IPV6_FALSE
USE_IPV6_TRUE
-MOWGLI_LIBS
-MOWGLI_CFLAGS
-DBUS_LIBS
-DBUS_CFLAGS
-PANGO_LIBS
-PANGO_CFLAGS
+PTHREAD_CFLAGS
+PTHREAD_LIBS
GIO_LIBS
GIO_CFLAGS
GTK_LIBS
GTK_CFLAGS
-GLIB_LIBS
-GLIB_CFLAGS
-PC_REQUIRES
AUDACIOUS_LIBS
AUDACIOUS_CFLAGS
-PKG_CONFIG
POSUB
LTLIBINTL
LIBINTL
INTLLIBS
LTLIBICONV
LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
MSGMERGE
+XGETTEXT_015
XGETTEXT
+GMSGFMT_015
+MSGFMT_015
GMSGFMT
MSGFMT
+GETTEXT_MACRO_VERSION
USE_NLS
-MKINSTALLDIRS
+mkdir_p
+MKDIR_P
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
+CLEAN_LIB
+UNINSTALL_LIB
+INSTALL_LIB
+PLUGIN_SUFFIX
+PLUGIN_LDFLAGS
+PLUGIN_CFLAGS
+LDFLAGS_RPATH
+LIB_SUFFIX
+LIB_PREFIX
+LIB_LDFLAGS
+LIB_CFLAGS
+TERM_SETAF6
+TERM_SETAF4
+TERM_SETAF3
+TERM_SETAF2
+TERM_SETAF1
+TERM_BOLD
+TERM_SGR0
+TERM_EL
+TPUT
+CAIRO_LIBS
+CAIRO_CFLAGS
+PANGO_LIBS
+PANGO_CFLAGS
+GTHREAD_LIBS
+GTHREAD_CFLAGS
+GLIB_LIBS
+GLIB_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+WINDRES
RANLIB
TR
AR
@@ -784,9 +777,14 @@ MV
RM
SET_MAKE
LN_S
+MAKE
+EGREP
+GREP
+CPP
am__fastdepCCAS_FALSE
am__fastdepCCAS_TRUE
CCASDEPMODE
+am__nodep
AMDEPBACKSLASH
AMDEP_FALSE
AMDEP_TRUE
@@ -796,9 +794,6 @@ DEPDIR
am__leading_dot
CCASFLAGS
CCAS
-EGREP
-GREP
-CPP
ac_ct_CXX
CXXFLAGS
CXX
@@ -809,8 +804,6 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
-VERSION
-PACKAGE
target_os
target_vendor
target_cpu
@@ -823,6 +816,8 @@ build_os
build_vendor
build_cpu
build
+VERSION
+PACKAGE
target_alias
host_alias
build_alias
@@ -865,42 +860,31 @@ ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_dependency_tracking
+enable_largefile
enable_nls
with_gnu_ld
enable_rpath
with_libiconv_prefix
with_libintl_prefix
-with_dev_dsp
-with_dev_mixer
+enable_gtk3
enable_gio
-enable_dbus
enable_ipv6
-enable_chardet
+enable_console
+enable_xsf
enable_pulse
-enable_roar
-enable_coreaudio
-enable_dockalbumart
-enable_altivec
-enable_sse2
enable_psf
-enable_usf
enable_mp3
-enable_rocklight
-enable_lirc
-enable_evdevplug
enable_hotkey
enable_gnomeshortcuts
+enable_songchange
enable_statusicon
enable_aosd
enable_aosd_xcomp
enable_notify
+enable_mpris2
enable_adplug
enable_vorbis
enable_flacng
-with_libFLAC
-with_libFLAC_libraries
-with_libFLAC_includes
-enable_libFLACtest
enable_wavpack
enable_aac
enable_sndfile
@@ -920,28 +904,28 @@ with_builders_lib
enable_oss
enable_oss4
enable_alsa
+enable_sdlout
+with_sdl_prefix
+with_sdl_exec_prefix
+enable_sdltest
enable_amidiplug
enable_amidiplug_alsa
enable_amidiplug_flsyn
enable_cdaudio
-enable_streambrowser
enable_scrobbler
enable_neon
enable_mms
+enable_smb
enable_mtp_up
-enable_bluetooth
-enable_paranormal
-with_sdl_prefix
-with_sdl_exec_prefix
enable_cue
-enable_projectm
-enable_projectm_1_0
enable_filewriter
enable_filewriter_mp3
enable_filewriter_vorbis
enable_filewriter_flac
enable_bs2b
enable_resample
+enable_gtkui
+enable_skins
enable_lyricwiki
'
ac_precious_vars='build_alias
@@ -955,32 +939,36 @@ CPPFLAGS
CXX
CXXFLAGS
CCC
-CPP
CCAS
CCASFLAGS
+CPP
PKG_CONFIG
-AUDACIOUS_CFLAGS
-AUDACIOUS_LIBS
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
GLIB_CFLAGS
GLIB_LIBS
+GTHREAD_CFLAGS
+GTHREAD_LIBS
+PANGO_CFLAGS
+PANGO_LIBS
+CAIRO_CFLAGS
+CAIRO_LIBS
+AUDACIOUS_CFLAGS
+AUDACIOUS_LIBS
GTK_CFLAGS
GTK_LIBS
GIO_CFLAGS
GIO_LIBS
-PANGO_CFLAGS
-PANGO_LIBS
-DBUS_CFLAGS
-DBUS_LIBS
-MOWGLI_CFLAGS
-MOWGLI_LIBS
PULSE_CFLAGS
PULSE_LIBS
-LIBROAR_CFLAGS
-LIBROAR_LIBS
+MPG123_CFLAGS
+MPG123_LIBS
GDKX11_CFLAGS
GDKX11_LIBS
-CAIRO_CFLAGS
-CAIRO_LIBS
+DBUS_CFLAGS
+DBUS_LIBS
+GTK216_CFLAGS
+GTK216_LIBS
PANGOCAIRO_CFLAGS
PANGOCAIRO_LIBS
XRENDER_CFLAGS
@@ -989,16 +977,20 @@ XCOMPOSITE_CFLAGS
XCOMPOSITE_LIBS
NOTIFY_CFLAGS
NOTIFY_LIBS
+GIO_UNIX_CFLAGS
+GIO_UNIX_LIBS
BINIO_CFLAGS
BINIO_LIBS
OGG_VORBIS_CFLAGS
OGG_VORBIS_LIBS
+LIBFLAC_CFLAGS
+LIBFLAC_LIBS
WAVPACK_CFLAGS
WAVPACK_LIBS
SNDFILE_CFLAGS
SNDFILE_LIBS
-NEED_AVCORE_CFLAGS
-NEED_AVCORE_LIBS
+MODPLUG_CFLAGS
+MODPLUG_LIBS
FFMPEG_CFLAGS
FFMPEG_LIBS
JACK_CFLAGS
@@ -1024,22 +1016,16 @@ MMS_CFLAGS
MMS_LIBS
MTP_CFLAGS
MTP_LIBS
-BLUEZ_CFLAGS
-BLUEZ_LIBS
XML_CFLAGS
XML_LIBS
CUE_CFLAGS
CUE_LIBS
-LIBPROJECTM_CFLAGS
-LIBPROJECTM_LIBS
-LIBPROJECTM1_CFLAGS
-LIBPROJECTM1_LIBS
-GTKGLEXT_CFLAGS
-GTKGLEXT_LIBS
FLAC_CFLAGS
FLAC_LIBS
BS2B_CFLAGS
-BS2B_LIBS'
+BS2B_LIBS
+GLIB214_CFLAGS
+GLIB214_LIBS'
# Initialize some variables set by options.
@@ -1582,7 +1568,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures audacious-plugins 2.4.4 to adapt to many kinds of systems.
+\`configure' configures audacious-plugins 3.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1649,7 +1635,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of audacious-plugins 2.4.4:";;
+ short | recursive ) echo "Configuration of audacious-plugins 3.2:";;
esac
cat <<\_ACEOF
@@ -1659,64 +1645,58 @@ Optional Features:
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
+ --disable-largefile omit support for large files
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
- --disable-gio disable GIO support (default=enabled if GIO present)
- --disable-dbus disable DBus support (default=enabled)
+ --disable-gtk3 Use GTK2 even if GTK3 is present
+ --enable-gio enable GIO support (default=disabled)
--enable-ipv6 enable IPv6 support (default=no)
- --enable-chardet enable character set detection support (default=no)
+ --disable-console disable game music decoder (console)
+ --disable-xsf disable Nintendo DS audio decoder (xsf)
--disable-pulse disable PulseAudio output plugin (default=enabled)
- --disable-roar disable PulseAudio output plugin (default=enabled)
- --disable-coreaudio disable CoreAudio output plugin (default=enabled)
- --disable-dockalbumart disable MacOS dock albumart plugin (default=guess)
- --disable-altivec disable AltiVec support. (default=enabled)
- --disable-sse2 disable SSE2 support. (default=enabled)
- --disable-psf disable PlayStation (psf/psf2) audio decoder
- --enable-usf enable the USF input plugin (default=disabled)
- --disable-mp3 disable mp3 plugin. (default=enabled)
- --disable-rocklight disable Rocklight vis plugin (default=enabled)
- --disable-lirc disable LIRC plugin (default=enabled)
- --disable-evdevplug disable Linux evdev plugin (default=enabled)
+ --disable-psf disable PlayStation (psf/psf2) audio decoder
+ --disable-mp3 disable MP3 plugin (default=enabled)
--disable-hotkey disable global hotkey plugin (default=enabled)
--disable-gnomeshortcuts disable gnome shortcuts (default=enabled)
+ --disable-songchange disable song change plugin
--disable-statusicon disable X11 Status Icon plugin (default=enabled)
--disable-aosd disable Audacious OSD plugin (default=enabled)
--disable-aosd-xcomp disable Audacious OSD X Composite Support (default=enabled)
--disable-notify disable notify plugin (default=enabled)
+ --disable-mpris2 disable MPRIS 2 support (default=enabled)
--disable-adplug disable AdPlug plugin (default=enabled)
--disable-vorbis disable Ogg Vorbis input plugin (default=enabled)
--disable-flacng disable flac input plugin (default=enabled)
- --disable-libFLACtest do not try to compile and run a test libFLAC program
--disable-wavpack disable WavPack input plugin (default=enabled)
--disable-aac disable aac plugin (default=enabled)
--disable-sndfile disable sndfile extensions. default=enabled
--disable-modplug disable ModPlug plugin (default=enabled)
--disable-ffaudio disable ffaudio plugin (default=enabled)
- --disable-jack disable jack output plugin (default=enabled)
+ --disable-jack disable JACK output plugin (default=enabled)
--disable-sid disable SID input plugin (default=enabled)
- --disable-oss disable the OSS output plugin (default=enabled)
- --enable-oss4 enable the OSS4 output plugin (default=disabled)
- --disable-alsa disable ALSA input plugin (default=enabled)
+ --enable-oss enable OSS3 output plugin
+ --disable-oss4 disable OSS4 output plugin
+ --disable-alsa disable ALSA output plugin
+ --disable-sdlout disable SDL output plugin
+ --disable-sdltest Do not try to compile and run a test SDL program
--disable-amidiplug disable amidi-plug input plugin (default=check)
--disable-amidiplug-alsa disable amidi-plug ALSA backend (default=enabled)
--disable-amidiplug-flsyn disable amidi-plug FluidSynth backend (default=enabled)
--disable-cdaudio disable cdaudio-ng input plugin (default=enabled)
- --disable-streambrowser disable streambrowser general plugin (default=enabled)
- --enable-scrobbler enable Scrobbler plugin (default=enabled)
+ --disable-scrobbler disable Scrobbler plugin (default=enabled)
--disable-neon disable neon HTTP support (default=enabled)
--disable-mms disable mms support. (default=enabled)
+ --enable-smb enable SMB transport (default=disabled)
--disable-mtp_up disable mtp upload support. (default=enabled)
- --disable-bluetooth disable bluetooth audio support. (default=enabled)
- --disable-paranormal disable paranormal vis plugin. (default=enabled)
--disable-cue disable cue support. (default=enabled)
- --disable-projectm disable projectM vis plugin. (default=enabled)
- --disable-projectm-1.0 disable projectM 1.0+ vis plugin. (default=enabled)
--disable-filewriter disable FileWriter output plugin (default=enabled)
--disable-filewriter_mp3 disable FileWriter MP3 output part (default=enabled)
--disable-filewriter_vorbis disable FileWriter Vorbis output part (default=enabled)
--disable-filewriter_flac disable FileWriter FLAC output part (default=enabled)
--disable-bs2b disable BS2B effect plugin (default=enabled)
--disable-resample disable resample effect plugin (default=enabled)
+ --disable-gtkui disable GTK interface (gtkui)
+ --disable-skins disable Winamp Classic interface (skins)
--disable-lyricwiki disable LyricWiki plugin (default=enabled)
Optional Packages:
@@ -1727,11 +1707,6 @@ Optional Packages:
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
--without-libintl-prefix don't search for libintl in includedir and libdir
- --with-dev-dsp=path Path to OSS DSP data pipe, default is /dev/dsp.
- --with-dev-mixer=path Path to OSS sound mixer, default is /dev/mixer.
- --with-libFLAC=PFX Prefix where libFLAC is installed (optional)
- --with-libFLAC-libraries=DIR Directory where libFLAC library is installed (optional)
- --with-libFLAC-includes=DIR Directory where libFLAC header files are installed (optional)
--with-sidplay1=PREFIX Enable libSIDPlay1 with install-PREFIX
--with-sidplay1-inc=DIR Where the libSIDPlay1 headers are located
--with-sidplay1-lib=DIR Where the libSIDPlay1 library is installed
@@ -1754,41 +1729,48 @@ Some influential environment variables:
you have headers in a nonstandard directory <include dir>
CXX C++ compiler command
CXXFLAGS C++ compiler flags
- CPP C preprocessor
CCAS assembler compiler command (defaults to CC)
CCASFLAGS assembler compiler flags (defaults to CFLAGS)
+ CPP C preprocessor
PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
+ GLIB_LIBS linker flags for GLIB, overriding pkg-config
+ GTHREAD_CFLAGS
+ C compiler flags for GTHREAD, overriding pkg-config
+ GTHREAD_LIBS
+ linker flags for GTHREAD, overriding pkg-config
+ PANGO_CFLAGS
+ C compiler flags for PANGO, overriding pkg-config
+ PANGO_LIBS linker flags for PANGO, overriding pkg-config
+ CAIRO_CFLAGS
+ C compiler flags for CAIRO, overriding pkg-config
+ CAIRO_LIBS linker flags for CAIRO, overriding pkg-config
AUDACIOUS_CFLAGS
C compiler flags for AUDACIOUS, overriding pkg-config
AUDACIOUS_LIBS
linker flags for AUDACIOUS, overriding pkg-config
- GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
- GLIB_LIBS linker flags for GLIB, overriding pkg-config
GTK_CFLAGS C compiler flags for GTK, overriding pkg-config
GTK_LIBS linker flags for GTK, overriding pkg-config
GIO_CFLAGS C compiler flags for GIO, overriding pkg-config
GIO_LIBS linker flags for GIO, overriding pkg-config
- PANGO_CFLAGS
- C compiler flags for PANGO, overriding pkg-config
- PANGO_LIBS linker flags for PANGO, overriding pkg-config
- DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
- DBUS_LIBS linker flags for DBUS, overriding pkg-config
- MOWGLI_CFLAGS
- C compiler flags for MOWGLI, overriding pkg-config
- MOWGLI_LIBS linker flags for MOWGLI, overriding pkg-config
PULSE_CFLAGS
C compiler flags for PULSE, overriding pkg-config
PULSE_LIBS linker flags for PULSE, overriding pkg-config
- LIBROAR_CFLAGS
- C compiler flags for LIBROAR, overriding pkg-config
- LIBROAR_LIBS
- linker flags for LIBROAR, overriding pkg-config
+ MPG123_CFLAGS
+ C compiler flags for MPG123, overriding pkg-config
+ MPG123_LIBS linker flags for MPG123, overriding pkg-config
GDKX11_CFLAGS
C compiler flags for GDKX11, overriding pkg-config
GDKX11_LIBS linker flags for GDKX11, overriding pkg-config
- CAIRO_CFLAGS
- C compiler flags for CAIRO, overriding pkg-config
- CAIRO_LIBS linker flags for CAIRO, overriding pkg-config
+ DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
+ DBUS_LIBS linker flags for DBUS, overriding pkg-config
+ GTK216_CFLAGS
+ C compiler flags for GTK216, overriding pkg-config
+ GTK216_LIBS linker flags for GTK216, overriding pkg-config
PANGOCAIRO_CFLAGS
C compiler flags for PANGOCAIRO, overriding pkg-config
PANGOCAIRO_LIBS
@@ -1804,6 +1786,10 @@ Some influential environment variables:
NOTIFY_CFLAGS
C compiler flags for NOTIFY, overriding pkg-config
NOTIFY_LIBS linker flags for NOTIFY, overriding pkg-config
+ GIO_UNIX_CFLAGS
+ C compiler flags for GIO_UNIX, overriding pkg-config
+ GIO_UNIX_LIBS
+ linker flags for GIO_UNIX, overriding pkg-config
BINIO_CFLAGS
C compiler flags for BINIO, overriding pkg-config
BINIO_LIBS linker flags for BINIO, overriding pkg-config
@@ -1811,6 +1797,10 @@ Some influential environment variables:
C compiler flags for OGG_VORBIS, overriding pkg-config
OGG_VORBIS_LIBS
linker flags for OGG_VORBIS, overriding pkg-config
+ LIBFLAC_CFLAGS
+ C compiler flags for LIBFLAC, overriding pkg-config
+ LIBFLAC_LIBS
+ linker flags for LIBFLAC, overriding pkg-config
WAVPACK_CFLAGS
C compiler flags for WAVPACK, overriding pkg-config
WAVPACK_LIBS
@@ -1819,10 +1809,10 @@ Some influential environment variables:
C compiler flags for SNDFILE, overriding pkg-config
SNDFILE_LIBS
linker flags for SNDFILE, overriding pkg-config
- NEED_AVCORE_CFLAGS
- C compiler flags for NEED_AVCORE, overriding pkg-config
- NEED_AVCORE_LIBS
- linker flags for NEED_AVCORE, overriding pkg-config
+ MODPLUG_CFLAGS
+ C compiler flags for MODPLUG, overriding pkg-config
+ MODPLUG_LIBS
+ linker flags for MODPLUG, overriding pkg-config
FFMPEG_CFLAGS
C compiler flags for FFMPEG, overriding pkg-config
FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config
@@ -1855,34 +1845,23 @@ Some influential environment variables:
MMS_LIBS linker flags for MMS, overriding pkg-config
MTP_CFLAGS C compiler flags for MTP, overriding pkg-config
MTP_LIBS linker flags for MTP, overriding pkg-config
- BLUEZ_CFLAGS
- C compiler flags for BLUEZ, overriding pkg-config
- BLUEZ_LIBS linker flags for BLUEZ, overriding pkg-config
XML_CFLAGS C compiler flags for XML, overriding pkg-config
XML_LIBS linker flags for XML, overriding pkg-config
CUE_CFLAGS C compiler flags for CUE, overriding pkg-config
CUE_LIBS linker flags for CUE, overriding pkg-config
- LIBPROJECTM_CFLAGS
- C compiler flags for LIBPROJECTM, overriding pkg-config
- LIBPROJECTM_LIBS
- linker flags for LIBPROJECTM, overriding pkg-config
- LIBPROJECTM1_CFLAGS
- C compiler flags for LIBPROJECTM1, overriding pkg-config
- LIBPROJECTM1_LIBS
- linker flags for LIBPROJECTM1, overriding pkg-config
- GTKGLEXT_CFLAGS
- C compiler flags for GTKGLEXT, overriding pkg-config
- GTKGLEXT_LIBS
- linker flags for GTKGLEXT, overriding pkg-config
FLAC_CFLAGS C compiler flags for FLAC, overriding pkg-config
FLAC_LIBS linker flags for FLAC, overriding pkg-config
BS2B_CFLAGS C compiler flags for BS2B, overriding pkg-config
BS2B_LIBS linker flags for BS2B, overriding pkg-config
+ GLIB214_CFLAGS
+ C compiler flags for GLIB214, overriding pkg-config
+ GLIB214_LIBS
+ linker flags for GLIB214, overriding pkg-config
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
-Report bugs to <bugs+audacious-plugins@atheme.org>.
+Report bugs to the package provider.
_ACEOF
ac_status=$?
fi
@@ -1945,12 +1924,14 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-audacious-plugins configure 2.4.4
+audacious-plugins configure 3.2
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
+
+(C) 2005-2012 Audacious Team
_ACEOF
exit
fi
@@ -2035,52 +2016,6 @@ fi
} # ac_fn_cxx_try_compile
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
# ac_fn_c_try_run LINENO
# ----------------------
# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
@@ -2191,6 +2126,52 @@ $as_echo "$ac_res" >&6; }
} # ac_fn_c_check_header_compile
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
# ac_fn_c_check_func LINENO FUNC VAR
# ----------------------------------
# Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -2328,10 +2309,6 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------------------------ ##
-## Report this to bugs+audacious-plugins@atheme.org ##
-## ------------------------------------------------ ##"
- ) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -2481,7 +2458,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by audacious-plugins $as_me 2.4.4, which was
+It was created by audacious-plugins $as_me 3.2, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2761,6 +2738,7 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
+gt_needs="$gt_needs "
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2831,6 +2809,21 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+PACKAGE=audacious-plugins
+
+VERSION=3.2
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
if test -f "$ac_dir/install-sh"; then
@@ -2973,31 +2966,6 @@ test -n "$target_alias" &&
ac_config_headers="$ac_config_headers config.h"
-if test -d "/usr/X11R6/include"; then
- CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
-fi
-
-if test "x$prefix" != "xNONE" ; then
- CPPFLAGS="$CPPFLAGS -I${includedir}"
-fi
-
-PACKAGE=audacious-plugins
-
-VERSION=2.4.4
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4045,46 +4013,208 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+DEPDIR="${am__leading_dot}deps"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror in -lcposix" >&5
-$as_echo_n "checking for strerror in -lcposix... " >&6; }
-if ${ac_cv_lib_cposix_strerror+:} false; then :
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
-int
-main ()
-{
-return strerror ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_cposix_strerror=yes
+ am_cv_CCAS_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CCAS_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
else
- ac_cv_lib_cposix_strerror=no
+ am_cv_CCAS_dependencies_compiler_type=none
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cposix_strerror" >&5
-$as_echo "$ac_cv_lib_cposix_strerror" >&6; }
-if test "x$ac_cv_lib_cposix_strerror" = xyes; then :
- LIBS="$LIBS -lcposix"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+ am__fastdepCCAS_TRUE=
+ am__fastdepCCAS_FALSE='#'
+else
+ am__fastdepCCAS_TRUE='#'
+ am__fastdepCCAS_FALSE=
fi
@@ -4710,38 +4840,233 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
esac
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+ enableval=$enable_largefile;
+fi
-if test "x$GCC" = "xyes"; then
- CFLAGS="$CFLAGS -pipe -Wall"
- CXXFLAGS="$CXXFLAGS -pipe -Wall"
+if test "$enable_largefile" != no; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
-CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
-GCC42_CFLAGS="-fgnu89-inline"
-for ac_prog in ${ac_tool_prefix}gcc ${ac_tool_prefix}cc
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+ fi
+fi
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_prog"
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -4749,248 +5074,173 @@ done
done
IFS=$as_save_IFS
+ ;;
+esac
fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
- test -n "$CC" && break
-done
-
-if test -z "$CC"; then
- ac_verc_fail=yes
-else
- # Found it, now check the version.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $CC" >&5
-$as_echo_n "checking version of $CC... " >&6; }
- ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
- case $ac_prog_version in
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 4.[2-9]* )
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
-$as_echo "$ac_prog_version" >&6; }
fi
-if test $ac_verc_fail = yes; then
- GCC42_CFLAGS=""
-fi
-
-
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
- am__include=include
- am__quote=
- _am_result=GNU
;;
esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- case `$am_make -s -f confmf 2> /dev/null` in #(
- *the\ am__doit\ target*)
- am__include=.include
- am__quote="\""
- _am_result=BSD
- ;;
- esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
- enableval=$enable_dependency_tracking;
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
fi
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
fi
- if test "x$enable_dependency_tracking" != xno; then
- AMDEP_TRUE=
- AMDEP_FALSE='#'
-else
- AMDEP_TRUE='#'
- AMDEP_FALSE=
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
fi
-# By default we simply use the C compiler to build assembly code.
-test "${CCAS+set}" = set || CCAS=$CC
-test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
-depcc="$CCAS" am_compiler_list=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
- am_cv_CCAS_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
- fi
- am__universal=false
+if test "x$GCC" = "xyes"; then
+ CFLAGS="$CFLAGS -std=gnu99 -Wall -pipe"
+ CXXFLAGS="$CXXFLAGS -Wall -pipe"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C/C++ compiler supports -Wtype-limits" >&5
+$as_echo_n "checking whether the C/C++ compiler supports -Wtype-limits... " >&6; }
+ OLDCFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wtype-limits -Werror"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this. Also, some Intel
- # versions had trouble with output in subdirs
- am__obj=sub/conftest.${OBJEXT-o}
- am__minus_obj="-o $am__obj"
- case $depmode in
- gcc)
- # This depmode causes a compiler race in universal mode.
- test "$am__universal" = false || continue
- ;;
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
- # not run yet. These depmodes are late enough in the game, and
- # so weak that their functioning should not be impacted.
- am__obj=conftest.${OBJEXT-o}
- am__minus_obj=
- ;;
- none) break ;;
- esac
- if depmode=$depmode \
- source=sub/conftest.c object=$am__obj \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_CCAS_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$OLDCFLAGS -Wtype-limits"
+ CXXFLAGS="$CXXFLAGS -Wtype-limits"
- cd ..
- rm -rf conftest.dir
else
- am_cv_CCAS_dependencies_compiler_type=none
-fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLDCFLAGS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
-CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
- am__fastdepCCAS_TRUE=
- am__fastdepCCAS_FALSE='#'
-else
- am__fastdepCCAS_TRUE='#'
- am__fastdepCCAS_FALSE=
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Linux" >&5
+$as_echo_n "checking for Linux... " >&6; }
+case "$target" in
+ *linux*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ LDFLAGS="$LDFLAGS -Wl,-z,defs"
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5
+$as_echo_n "checking for GNU make... " >&6; }
+if ${_cv_gnu_make_command+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ _cv_gnu_make_command=""
+ for a in "$MAKE" make gmake gnumake; do
+ test "x$a" = "x" && continue
+ if ( sh -c "$a --version" 2>/dev/null | grep "GNU Make" >/dev/null ) ; then
+ _cv_gnu_make_command="$a"
+ break
+ fi
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_gnu_make_command" >&5
+$as_echo "$_cv_gnu_make_command" >&6; }
+ if test "x$_cv_gnu_make_command" != "x" ; then
+ MAKE="$_cv_gnu_make_command"
+ else
+ as_fn_error $? "** GNU make not found. If it is installed, try setting MAKE environment variable. **" "$LINENO" 5
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
$as_echo_n "checking whether ln -s works... " >&6; }
@@ -5034,7 +5284,6 @@ $as_echo "no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
-
# Extract the first word of "rm", so it can be a program name with args.
set dummy rm; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -5275,6 +5524,734 @@ $as_echo "no" >&6; }
fi
+# Extract the first word of "windres", so it can be a program name with args.
+set dummy windres; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_WINDRES+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $WINDRES in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_WINDRES="$WINDRES" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_WINDRES="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+WINDRES=$ac_cv_path_WINDRES
+if test -n "$WINDRES"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
+$as_echo "$WINDRES" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
+$as_echo_n "checking for GLIB... " >&6; }
+
+if test -n "$GLIB_CFLAGS"; then
+ pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.16" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIB_LIBS"; then
+ pkg_cv_GLIB_LIBS="$GLIB_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.16" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.16" 2>&1`
+ else
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.16" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIB_PKG_ERRORS" >&5
+
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "glib-2.0" 2>/dev/null`
+ as_fn_error $? "
+Glib2 version $cv_pkg_version was found, but glib-2.0 >= 2.16 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find Glib2! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "glib-2.0" 2>/dev/null`
+ as_fn_error $? "
+Glib2 version $cv_pkg_version was found, but glib-2.0 >= 2.16 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find Glib2! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+else
+ GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
+ GLIB_LIBS=$pkg_cv_GLIB_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTHREAD" >&5
+$as_echo_n "checking for GTHREAD... " >&6; }
+
+if test -n "$GTHREAD_CFLAGS"; then
+ pkg_cv_GTHREAD_CFLAGS="$GTHREAD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0 >= 2.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gthread-2.0 >= 2.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTHREAD_CFLAGS=`$PKG_CONFIG --cflags "gthread-2.0 >= 2.16" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GTHREAD_LIBS"; then
+ pkg_cv_GTHREAD_LIBS="$GTHREAD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0 >= 2.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gthread-2.0 >= 2.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTHREAD_LIBS=`$PKG_CONFIG --libs "gthread-2.0 >= 2.16" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTHREAD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gthread-2.0 >= 2.16" 2>&1`
+ else
+ GTHREAD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gthread-2.0 >= 2.16" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTHREAD_PKG_ERRORS" >&5
+
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gthread-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "gthread-2.0" 2>/dev/null`
+ as_fn_error $? "
+GThread version $cv_pkg_version was found, but gthread-2.0 >= 2.16 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find GThread! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gthread-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gthread-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "gthread-2.0" 2>/dev/null`
+ as_fn_error $? "
+GThread version $cv_pkg_version was found, but gthread-2.0 >= 2.16 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find GThread! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+else
+ GTHREAD_CFLAGS=$pkg_cv_GTHREAD_CFLAGS
+ GTHREAD_LIBS=$pkg_cv_GTHREAD_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGO" >&5
+$as_echo_n "checking for PANGO... " >&6; }
+
+if test -n "$PANGO_CFLAGS"; then
+ pkg_cv_PANGO_CFLAGS="$PANGO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango >= 1.20\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "pango >= 1.20") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PANGO_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.20" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PANGO_LIBS"; then
+ pkg_cv_PANGO_LIBS="$PANGO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango >= 1.20\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "pango >= 1.20") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PANGO_LIBS=`$PKG_CONFIG --libs "pango >= 1.20" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ PANGO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pango >= 1.20" 2>&1`
+ else
+ PANGO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pango >= 1.20" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$PANGO_PKG_ERRORS" >&5
+
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "pango") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "pango" 2>/dev/null`
+ as_fn_error $? "
+Pango version $cv_pkg_version was found, but pango >= 1.20 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find Pango! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "pango") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "pango" 2>/dev/null`
+ as_fn_error $? "
+Pango version $cv_pkg_version was found, but pango >= 1.20 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find Pango! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+else
+ PANGO_CFLAGS=$pkg_cv_PANGO_CFLAGS
+ PANGO_LIBS=$pkg_cv_PANGO_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5
+$as_echo_n "checking for CAIRO... " >&6; }
+
+if test -n "$CAIRO_CFLAGS"; then
+ pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "cairo >= 1.6") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.6" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CAIRO_LIBS"; then
+ pkg_cv_CAIRO_LIBS="$CAIRO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "cairo >= 1.6") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.6" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= 1.6" 2>&1`
+ else
+ CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= 1.6" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$CAIRO_PKG_ERRORS" >&5
+
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "cairo") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "cairo" 2>/dev/null`
+ as_fn_error $? "
+Cairo version $cv_pkg_version was found, but cairo >= 1.6 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find Cairo! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "cairo") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+
+ cv_pkg_version=`$PKG_CONFIG --modversion "cairo" 2>/dev/null`
+ as_fn_error $? "
+Cairo version $cv_pkg_version was found, but cairo >= 1.6 is required.
+" "$LINENO" 5
+
+else
+
+ as_fn_error $? "
+Cannot find Cairo! If you are using binary packages based system, check that you
+have the corresponding -dev/devel packages installed.
+" "$LINENO" 5
+
+fi
+
+else
+ CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS
+ CAIRO_LIBS=$pkg_cv_CAIRO_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+fi
+
+
+
+
+
+ # Extract the first word of "tput", so it can be a program name with args.
+set dummy tput; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_TPUT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TPUT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TPUT="$TPUT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TPUT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TPUT=$ac_cv_path_TPUT
+if test -n "$TPUT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TPUT" >&5
+$as_echo "$TPUT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ if test x"$TPUT" != x""; then :
+
+ if x=$($TPUT el 2>/dev/null); then
+ TERM_EL="$x"
+
+ else
+ TERM_EL="$($TPUT ce 2>/dev/null)"
+
+ fi
+
+ if x=$($TPUT sgr0 2>/dev/null); then
+ TERM_SGR0="$x"
+
+ else
+ TERM_SGR0="$($TPUT me 2>/dev/null)"
+
+ fi
+
+ if x=$($TPUT bold 2>/dev/null); then
+ TERM_BOLD="$x"
+
+ else
+ TERM_BOLD="$($TPUT md 2>/dev/null)"
+
+ fi
+
+ if x=$($TPUT setaf 1 2>/dev/null); then
+ TERM_SETAF1="$x"
+
+ TERM_SETAF2="$($TPUT setaf 2 2>/dev/null)"
+
+ TERM_SETAF3="$($TPUT setaf 3 2>/dev/null)"
+
+ TERM_SETAF4="$($TPUT setaf 4 2>/dev/null)"
+
+ TERM_SETAF6="$($TPUT setaf 6 2>/dev/null)"
+
+ else
+ TERM_SETAF1="$($TPUT AF 1 2>/dev/null)"
+
+ TERM_SETAF2="$($TPUT AF 2 2>/dev/null)"
+
+ TERM_SETAF3="$($TPUT AF 3 2>/dev/null)"
+
+ TERM_SETAF4="$($TPUT AF 4 2>/dev/null)"
+
+ TERM_SETAF6="$($TPUT AF 6 2>/dev/null)"
+
+ fi
+
+else
+
+ TERM_EL='\033\133K'
+
+ TERM_SGR0='\033\133m'
+
+ TERM_BOLD='\033\1331m'
+
+ TERM_SETAF1='\033\13331m'
+
+ TERM_SETAF2='\033\13332m'
+
+ TERM_SETAF3='\033\13333m'
+
+ TERM_SETAF4='\033\13334m'
+
+ TERM_SETAF6='\033\13336m'
+
+
+fi
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library system" >&5
+$as_echo_n "checking for shared library system... " >&6; }
+ case "$host_os" in
+ darwin*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Darwin" >&5
+$as_echo "Darwin" >&6; }
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR}'
+ LIB_PREFIX='lib'
+ LIB_SUFFIX='.dylib'
+ LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
+ PLUGIN_SUFFIX='.impl'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
+ CLEAN_LIB=''
+ ;;
+ solaris*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris" >&5
+$as_echo "Solaris" >&6; }
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-shared -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}'
+ LIB_PREFIX='lib'
+ LIB_SUFFIX='.so'
+ LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-shared'
+ PLUGIN_SUFFIX='.so'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}'
+ CLEAN_LIB=''
+ ;;
+ openbsd* | mirbsd*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenBSD" >&5
+$as_echo "OpenBSD" >&6; }
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-shared'
+ LIB_PREFIX='lib'
+ LIB_SUFFIX='.so.${LIB_MAJOR}.${LIB_MINOR}'
+ LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-shared'
+ PLUGIN_SUFFIX='.so'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i'
+ CLEAN_LIB=''
+ ;;
+ cygwin* | mingw*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Win32" >&5
+$as_echo "Win32" >&6; }
+ LIB_CFLAGS=''
+ LIB_LDFLAGS='-shared -Wl,--out-implib,${LIB}.a'
+ LIB_PREFIX='lib'
+ LIB_SUFFIX='.dll'
+ LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
+ PLUGIN_CFLAGS=''
+ PLUGIN_LDFLAGS='-shared'
+ PLUGIN_SUFFIX='.dll'
+ INSTALL_LIB='&& ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a'
+ CLEAN_LIB='${LIB}.a'
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: GNU" >&5
+$as_echo "GNU" >&6; }
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-shared -Wl,-soname=${LIB}.${LIB_MAJOR}'
+ LIB_PREFIX='lib'
+ LIB_SUFFIX='.so'
+ LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-shared'
+ PLUGIN_SUFFIX='.so'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0'
+ CLEAN_LIB=''
+ ;;
+ esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in fcntl fsync mkdtemp
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -5369,18 +6346,53 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
- MKINSTALLDIRS=
- if test -n "$ac_aux_dir"; then
- case "$ac_aux_dir" in
- /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
- *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
- esac
- fi
- if test -z "$MKINSTALLDIRS"; then
- MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
@@ -5398,6 +6410,9 @@ $as_echo "$USE_NLS" >&6; }
+ GETTEXT_MACRO_VERSION=0.18
+
+
# Prepare PATH_SEPARATOR.
@@ -5446,7 +6461,8 @@ else
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
(if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
break 2
@@ -5510,6 +6526,17 @@ fi
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
# Prepare PATH_SEPARATOR.
# The user is always right.
@@ -5557,7 +6584,8 @@ else
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
(if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
break 2
@@ -5581,6 +6609,12 @@ fi
rm -f messages.po
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
# Prepare PATH_SEPARATOR.
# The user is always right.
@@ -5628,7 +6662,8 @@ else
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
break 2
fi
@@ -5650,31 +6685,13 @@ $as_echo "no" >&6; }
fi
- if test "$GMSGFMT" != ":"; then
- if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
- (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
-$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; }
- GMSGFMT=":"
- fi
- fi
+ test -n "$localedir" || localedir='${datadir}/locale'
- if test "$XGETTEXT" != ":"; then
- if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5
-$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; }
- XGETTEXT=":"
- fi
- rm -f messages.po
- fi
- ac_config_commands="$ac_config_commands default-1"
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
@@ -5733,7 +6750,7 @@ $as_echo_n "checking for ld used by GCC... " >&6; }
# Canonicalize the path of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -5765,11 +6782,12 @@ else
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
- if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
fi
done
IFS="$ac_save_ifs"
@@ -5793,11 +6811,12 @@ if ${acl_cv_prog_gnu_ld+:} false; then :
$as_echo_n "(cached) " >&6
else
# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- acl_cv_prog_gnu_ld=yes
-else
- acl_cv_prog_gnu_ld=no
-fi
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
$as_echo "$acl_cv_prog_gnu_ld" >&6; }
@@ -5805,6 +6824,7 @@ with_gnu_ld=$acl_cv_prog_gnu_ld
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
$as_echo_n "checking for shared library run path origin... " >&6; }
if ${acl_cv_rpath+:} false; then :
@@ -5821,12 +6841,14 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
$as_echo "$acl_cv_rpath" >&6; }
wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
# Check whether --enable-rpath was given.
if test "${enable_rpath+set}" = set; then :
enableval=$enable_rpath; :
@@ -5837,6 +6859,74 @@ fi
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
+if ${gl_cv_solaris_64bit+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _LP64
+sixtyfour bits
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+ gl_cv_solaris_64bit=yes
+else
+ gl_cv_solaris_64bit=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+
+
+
+
+
@@ -5876,7 +6966,11 @@ if test "${with_libiconv_prefix+set}" = set; then :
else
additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
fi
fi
@@ -5885,6 +6979,8 @@ fi
LIBICONV=
LTLIBICONV=
INCICONV=
+ LIBICONV_PREFIX=
+ HAVE_LIBICONV=
rpathdirs=
ltrpathdirs=
names_already_handled=
@@ -5918,22 +7014,52 @@ fi
found_la=
found_so=
found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIBICONV; do
@@ -5949,21 +7075,44 @@ fi
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
;;
esac
if test "X$found_dir" != "X"; then
@@ -5974,7 +7123,9 @@ fi
if test "X$found_dir" != "X"; then
LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
else
haveit=
@@ -5987,10 +7138,10 @@ fi
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
- if test "$hardcode_direct" = yes; then
+ if test "$acl_hardcode_direct" = yes; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
haveit=
for x in $rpathdirs; do
@@ -6022,7 +7173,7 @@ fi
if test -z "$haveit"; then
LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
fi
- if test "$hardcode_minus_L" != no; then
+ if test "$acl_hardcode_minus_L" != no; then
LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
else
LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
@@ -6039,8 +7190,18 @@ fi
fi
additional_includedir=
case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
additional_includedir="$basedir/include"
;;
esac
@@ -6050,7 +7211,7 @@ fi
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -6089,12 +7250,14 @@ fi
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- if test "X$additional_libdir" != "X/usr/lib"; then
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -6191,21 +7354,21 @@ fi
done
done
if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
alldirs=
for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
done
acl_save_libdir="$libdir"
libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
else
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
done
@@ -6234,17 +7397,93 @@ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
- # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then :
- enableval=$enable_nls; USE_NLS=$enableval
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- USE_NLS=yes
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+ gt_cv_func_CFPreferencesCopyAppValue=no
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
@@ -6253,45 +7492,67 @@ $as_echo "$USE_NLS" >&6; }
LTLIBINTL=
POSUB=
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
if test "$USE_NLS" = "yes"; then
gt_use_preinstalled_gnugettext=no
-
-
-
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
$as_echo_n "checking for GNU gettext in libc... " >&6; }
-if ${gt_cv_func_gnugettext1_libc+:} false; then :
+if eval \${$gt_func_gnugettext_libc+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <libintl.h>
+$gt_revision_test_code
extern int _nl_msg_cat_cntr;
extern int *_nl_domain_bindings;
int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- gt_cv_func_gnugettext1_libc=yes
+ eval "$gt_func_gnugettext_libc=yes"
else
- gt_cv_func_gnugettext1_libc=no
+ eval "$gt_func_gnugettext_libc=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc" >&5
-$as_echo "$gt_cv_func_gnugettext1_libc" >&6; }
+eval ac_res=\$$gt_func_gnugettext_libc
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
- if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
@@ -6379,6 +7640,123 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
$as_echo "$am_cv_func_iconv" >&6; }
if test "$am_cv_func_iconv" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if ${am_cv_func_iconv_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ if test "$cross_compiling" = yes; then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ am_cv_func_iconv_works=yes
+else
+ am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
$as_echo "#define HAVE_ICONV 1" >>confdefs.h
@@ -6399,6 +7777,11 @@ $as_echo "$LIBICONV" >&6; }
+
+
+
+
+
use_additional=yes
acl_save_prefix="$prefix"
@@ -6434,7 +7817,11 @@ if test "${with_libintl_prefix+set}" = set; then :
else
additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
fi
fi
@@ -6443,6 +7830,8 @@ fi
LIBINTL=
LTLIBINTL=
INCINTL=
+ LIBINTL_PREFIX=
+ HAVE_LIBINTL=
rpathdirs=
ltrpathdirs=
names_already_handled=
@@ -6476,22 +7865,52 @@ fi
found_la=
found_so=
found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIBINTL; do
@@ -6507,21 +7926,44 @@ fi
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
fi
fi
fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
;;
esac
if test "X$found_dir" != "X"; then
@@ -6532,7 +7974,9 @@ fi
if test "X$found_dir" != "X"; then
LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
else
haveit=
@@ -6545,10 +7989,10 @@ fi
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
- if test "$hardcode_direct" = yes; then
+ if test "$acl_hardcode_direct" = yes; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
haveit=
for x in $rpathdirs; do
@@ -6580,7 +8024,7 @@ fi
if test -z "$haveit"; then
LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
fi
- if test "$hardcode_minus_L" != no; then
+ if test "$acl_hardcode_minus_L" != no; then
LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
else
LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
@@ -6597,8 +8041,18 @@ fi
fi
additional_includedir=
case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
additional_includedir="$basedir/include"
;;
esac
@@ -6608,7 +8062,7 @@ fi
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -6647,12 +8101,14 @@ fi
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- if test "X$additional_libdir" != "X/usr/lib"; then
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
if test -n "$GCC"; then
case $host_os in
- linux*) haveit=yes;;
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
@@ -6749,21 +8205,21 @@ fi
done
done
if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
alldirs=
for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
done
acl_save_libdir="$libdir"
libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
else
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
done
@@ -6775,9 +8231,14 @@ fi
done
fi
+
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
$as_echo_n "checking for GNU gettext in libintl... " >&6; }
-if ${gt_cv_func_gnugettext1_libintl+:} false; then :
+if eval \${$gt_func_gnugettext_libintl+:} false; then :
$as_echo_n "(cached) " >&6
else
gt_save_CPPFLAGS="$CPPFLAGS"
@@ -6787,44 +8248,46 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <libintl.h>
+$gt_revision_test_code
extern int _nl_msg_cat_cntr;
extern
#ifdef __cplusplus
"C"
#endif
-const char *_nl_expand_alias ();
+const char *_nl_expand_alias (const char *);
int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- gt_cv_func_gnugettext1_libintl=yes
+ eval "$gt_func_gnugettext_libintl=yes"
else
- gt_cv_func_gnugettext1_libintl=no
+ eval "$gt_func_gnugettext_libintl=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
LIBS="$LIBS $LIBICONV"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <libintl.h>
+$gt_revision_test_code
extern int _nl_msg_cat_cntr;
extern
#ifdef __cplusplus
"C"
#endif
-const char *_nl_expand_alias ();
+const char *_nl_expand_alias (const char *);
int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
;
return 0;
}
@@ -6832,7 +8295,7 @@ _ACEOF
if ac_fn_c_try_link "$LINENO"; then :
LIBINTL="$LIBINTL $LIBICONV"
LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- gt_cv_func_gnugettext1_libintl=yes
+ eval "$gt_func_gnugettext_libintl=yes"
fi
rm -f core conftest.err conftest.$ac_objext \
@@ -6841,12 +8304,13 @@ rm -f core conftest.err conftest.$ac_objext \
CPPFLAGS="$gt_save_CPPFLAGS"
LIBS="$gt_save_LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl" >&5
-$as_echo "$gt_cv_func_gnugettext1_libintl" >&6; }
+eval ac_res=\$$gt_func_gnugettext_libintl
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
fi
- if test "$gt_cv_func_gnugettext1_libc" = "yes" \
- || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
&& test "$PACKAGE" != gettext-runtime \
&& test "$PACKAGE" != gettext-tools; }; then
gt_use_preinstalled_gnugettext=yes
@@ -6858,6 +8322,14 @@ $as_echo "$gt_cv_func_gnugettext1_libintl" >&6; }
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
if test "$gt_use_preinstalled_gnugettext" = "yes" \
|| test "$nls_cv_use_gnu_gettext" = "yes"; then
@@ -6876,7 +8348,7 @@ $as_echo "$USE_NLS" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
$as_echo_n "checking where the gettext function comes from... " >&6; }
if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
gt_source="external libintl"
else
gt_source="libc"
@@ -6891,7 +8363,7 @@ $as_echo "$gt_source" >&6; }
if test "$USE_NLS" = "yes"; then
if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
$as_echo_n "checking how to link with libintl... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
@@ -6941,411 +8413,337 @@ $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+if test "$MSGFMT" = ":" ; then
+ as_fn_error $? "msgfmt was not found; have you installed gettext?" "$LINENO" 5
+fi
-ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen"
-if test "x$ac_cv_func_strnlen" = xyes; then :
-$as_echo "#define HAVE_STRNLEN 1" >>confdefs.h
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AUDACIOUS" >&5
+$as_echo_n "checking for AUDACIOUS... " >&6; }
+
+if test -n "$AUDACIOUS_CFLAGS"; then
+ pkg_cv_AUDACIOUS_CFLAGS="$AUDACIOUS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 3.2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "audacious >= 3.2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_AUDACIOUS_CFLAGS=`$PKG_CONFIG --cflags "audacious >= 3.2" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$AUDACIOUS_LIBS"; then
+ pkg_cv_AUDACIOUS_LIBS="$AUDACIOUS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 3.2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "audacious >= 3.2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_AUDACIOUS_LIBS=`$PKG_CONFIG --libs "audacious >= 3.2" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-# Check whether --with-dev-dsp was given.
-if test "${with_dev_dsp+set}" = set; then :
- withval=$with_dev_dsp; dev_dsp=$withval
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- dev_dsp=/dev/dsp
-
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "audacious >= 3.2" 2>&1`
+ else
+ AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "audacious >= 3.2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$AUDACIOUS_PKG_ERRORS" >&5
+ as_fn_error $? "Cannot find Audacious 3.2; have you installed Audacious yet?" "$LINENO" 5
-cat >>confdefs.h <<_ACEOF
-#define DEV_DSP "$dev_dsp"
-_ACEOF
-
-
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Cannot find Audacious 3.2; have you installed Audacious yet?" "$LINENO" 5
-# Check whether --with-dev-mixer was given.
-if test "${with_dev_mixer+set}" = set; then :
- withval=$with_dev_mixer; dev_mixer=$withval
else
- dev_mixer=/dev/mixer
+ AUDACIOUS_CFLAGS=$pkg_cv_AUDACIOUS_CFLAGS
+ AUDACIOUS_LIBS=$pkg_cv_AUDACIOUS_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
fi
-
-cat >>confdefs.h <<_ACEOF
-#define DEV_MIXER "$dev_mixer"
-_ACEOF
-
+CPPFLAGS="$CPPFLAGS $AUDACIOUS_CFLAGS"
+LIBS="$LIBS $AUDACIOUS_LIBS"
-INPUT_PLUGINS="tonegen console xsf metronom vtx"
+INPUT_PLUGINS="tonegen metronom vtx"
OUTPUT_PLUGINS="null"
-EFFECT_PLUGINS="compressor crossfade crystalizer ladspa sndstretch stereo_plugin voice_removal echo_plugin"
-GENERAL_PLUGINS="song_change alarm skins gtkui"
-VISUALIZATION_PLUGINS="blur_scope spectrum"
-CONTAINER_PLUGINS="m3u pls"
+EFFECT_PLUGINS="compressor crossfade crystalizer ladspa mixer sndstretch stereo_plugin voice_removal echo_plugin"
+GENERAL_PLUGINS="alarm albumart search-tool"
+VISUALIZATION_PLUGINS="blur_scope cairo-spectrum"
+CONTAINER_PLUGINS="audpl m3u pls asx"
TRANSPORT_PLUGINS="unix-io"
-
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
+# Check whether --enable-gtk3 was given.
+if test "${enable_gtk3+set}" = set; then :
+ enableval=$enable_gtk3; use_gtk3=$enableval
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ use_gtk3=yes
fi
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
- ac_pt_PKG_CONFIG=$PKG_CONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_pt_PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
+if test $use_gtk3 = yes ; then
- ;;
-esac
-fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
+$as_echo_n "checking for GTK... " >&6; }
- if test "x$ac_pt_PKG_CONFIG" = x; then
- PKG_CONFIG=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- PKG_CONFIG=$ac_pt_PKG_CONFIG
- fi
+if test -n "$GTK_CFLAGS"; then
+ pkg_cv_GTK_CFLAGS="$GTK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.0.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.0.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.0.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
-
+ pkg_failed=yes
fi
-if test "x$PKG_CONFIG" != "x"; then
- _pkg_min_version=0.9.0
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
- else
- _pkg_short_errors_supported=no
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- PKG_CONFIG=""
- fi
-
+ else
+ pkg_failed=untried
fi
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AUDACIOUS" >&5
-$as_echo_n "checking for AUDACIOUS... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"audacious >= 2.4\""; } >&5
- ($PKG_CONFIG --exists --print-errors "audacious >= 2.4") 2>&5
+if test -n "$GTK_LIBS"; then
+ pkg_cv_GTK_LIBS="$GTK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.0.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.0.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${AUDACIOUS_CFLAGS}" != "x"; then
- pkg_cv_AUDACIOUS_CFLAGS="${AUDACIOUS_CFLAGS}"
- else
- pkg_cv_AUDACIOUS_CFLAGS=`$PKG_CONFIG --cflags "audacious >= 2.4" 2>/dev/null`
- fi
- if test "x${AUDACIOUS_LIBS}" != "x"; then
- pkg_cv_AUDACIOUS_LIBS="${AUDACIOUS_LIBS}"
- else
- pkg_cv_AUDACIOUS_LIBS=`$PKG_CONFIG --libs "audacious >= 2.4" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.0.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "audacious >= 2.4" 2>&1`
- else
- AUDACIOUS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "audacious >= 2.4" 2>&1`
- fi
- echo "$AUDACIOUS_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "Cannot find Audacious 2.4 or later, have you installed audacious yet?" "$LINENO" 5
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find Audacious 2.4 or later, have you installed audacious yet?" "$LINENO" 5
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- AUDACIOUS_CFLAGS="$pkg_cv_AUDACIOUS_CFLAGS"
- AUDACIOUS_LIBS="$pkg_cv_AUDACIOUS_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="audacious >= 2.4"
- else
- PC_REQUIRES="$PC_REQUIRES, audacious >= 2.4"
- fi
-
-
+ _pkg_short_errors_supported=no
fi
-
-CFLAGS="$CFLAGS $AUDACIOUS_CFLAGS"
-CPPFLAGS="$CPPFLAGS $AUDACIOUS_CPPFLAGS"
-LIBS="$LIBS $AUDACIOUS_LIBS"
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
-$as_echo_n "checking for GLIB... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.12.0 gthread-2.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.12.0 gthread-2.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${GLIB_CFLAGS}" != "x"; then
- pkg_cv_GLIB_CFLAGS="${GLIB_CFLAGS}"
- else
- pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.12.0 gthread-2.0" 2>/dev/null`
- fi
- if test "x${GLIB_LIBS}" != "x"; then
- pkg_cv_GLIB_LIBS="${GLIB_LIBS}"
+ if test $_pkg_short_errors_supported = yes; then
+ GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.0.0" 2>&1`
else
- pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.12.0 gthread-2.0" 2>/dev/null`
+ GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.0.0" 2>&1`
fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
-fi
-
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTK_PKG_ERRORS" >&5
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.12.0 gthread-2.0" 2>&1`
- else
- GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.12.0 gthread-2.0" 2>&1`
- fi
- echo "$GLIB_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ use_gtk3=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error $? "Cannot find Glib2 >= 2.12.0" "$LINENO" 5
-
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find Glib2 >= 2.12.0" "$LINENO" 5
-
+ use_gtk3=no
else
- GLIB_CFLAGS="$pkg_cv_GLIB_CFLAGS"
- GLIB_LIBS="$pkg_cv_GLIB_LIBS"
+ GTK_CFLAGS=$pkg_cv_GTK_CFLAGS
+ GTK_LIBS=$pkg_cv_GTK_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
-
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="glib-2.0 >= 2.12.0"
- else
- PC_REQUIRES="$PC_REQUIRES, glib-2.0 >= 2.12.0"
- fi
-
-
+ use_gtk3=yes
fi
+fi
+
+if test $use_gtk3 = no ; then
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
$as_echo_n "checking for GTK... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.8.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.8.0") 2>&5
+
+if test -n "$GTK_CFLAGS"; then
+ pkg_cv_GTK_CFLAGS="$GTK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.12.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.12.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${GTK_CFLAGS}" != "x"; then
- pkg_cv_GTK_CFLAGS="${GTK_CFLAGS}"
- else
- pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.8.0" 2>/dev/null`
- fi
- if test "x${GTK_LIBS}" != "x"; then
- pkg_cv_GTK_LIBS="${GTK_LIBS}"
- else
- pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.8.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.12.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GTK_LIBS"; then
+ pkg_cv_GTK_LIBS="$GTK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.12.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.12.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.12.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-2.0 >= 2.8.0" 2>&1`
- else
- GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.8.0" 2>&1`
- fi
- echo "$GTK_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error $? "Cannot find Gtk+2 >= 2.8.0" "$LINENO" 5
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find Gtk+2 >= 2.8.0" "$LINENO" 5
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.12.0" 2>&1`
+ else
+ GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.12.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTK_PKG_ERRORS" >&5
+ as_fn_error $? "Cannot find GTK headers. Aborting ..." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Cannot find GTK headers. Aborting ..." "$LINENO" 5
else
- GTK_CFLAGS="$pkg_cv_GTK_CFLAGS"
- GTK_LIBS="$pkg_cv_GTK_LIBS"
+ GTK_CFLAGS=$pkg_cv_GTK_CFLAGS
+ GTK_LIBS=$pkg_cv_GTK_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
+ use_gtk3=no
+fi
+fi
+
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="gtk+-2.0 >= 2.8.0"
- else
- PC_REQUIRES="$PC_REQUIRES, gtk+-2.0 >= 2.8.0"
- fi
-fi
# Check whether --enable-gio was given.
if test "${enable_gio+set}" = set; then :
enableval=$enable_gio; enable_gio=$enableval
else
- enable_gio=yes
+ enable_gio=no
fi
if test "x$enable_gio" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO" >&5
$as_echo_n "checking for GIO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.0\""; } >&5
+
+if test -n "$GIO_CFLAGS"; then
+ pkg_cv_GIO_CFLAGS="$GIO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.0\""; } >&5
($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${GIO_CFLAGS}" != "x"; then
- pkg_cv_GIO_CFLAGS="${GIO_CFLAGS}"
- else
- pkg_cv_GIO_CFLAGS=`$PKG_CONFIG --cflags "gio-2.0 >= 2.0" 2>/dev/null`
- fi
- if test "x${GIO_LIBS}" != "x"; then
- pkg_cv_GIO_LIBS="${GIO_LIBS}"
- else
- pkg_cv_GIO_LIBS=`$PKG_CONFIG --libs "gio-2.0 >= 2.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GIO_CFLAGS=`$PKG_CONFIG --cflags "gio-2.0 >= 2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test -n "$GIO_LIBS"; then
+ pkg_cv_GIO_LIBS="$GIO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0 >= 2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gio-2.0 >= 2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GIO_LIBS=`$PKG_CONFIG --libs "gio-2.0 >= 2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gio-2.0 >= 2.0" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gio-2.0 >= 2.0" 2>&1`
else
- GIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gio-2.0 >= 2.0" 2>&1`
+ GIO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gio-2.0 >= 2.0" 2>&1`
fi
- echo "$GIO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$GIO_PKG_ERRORS" >&5
+
+ enable_gio=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- enable_gio=no
-elif test "x$pkg_failed" = "xuntried"; then
enable_gio=no
else
- GIO_CFLAGS="$pkg_cv_GIO_CFLAGS"
- GIO_LIBS="$pkg_cv_GIO_LIBS"
+ GIO_CFLAGS=$pkg_cv_GIO_CFLAGS
+ GIO_LIBS=$pkg_cv_GIO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
-
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="gio-2.0 >= 2.0"
- else
- PC_REQUIRES="$PC_REQUIRES, gio-2.0 >= 2.0"
- fi
-
-
+ enable_gio=yes
fi
fi
@@ -7353,188 +8751,138 @@ if test "x$enable_gio" = "xyes"; then
TRANSPORT_PLUGINS="$TRANSPORT_PLUGINS gio"
fi
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGO" >&5
-$as_echo_n "checking for PANGO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango >= 1.8.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "pango >= 1.8.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${PANGO_CFLAGS}" != "x"; then
- pkg_cv_PANGO_CFLAGS="${PANGO_CFLAGS}"
- else
- pkg_cv_PANGO_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.8.0" 2>/dev/null`
- fi
- if test "x${PANGO_LIBS}" != "x"; then
- pkg_cv_PANGO_LIBS="${PANGO_LIBS}"
- else
- pkg_cv_PANGO_LIBS=`$PKG_CONFIG --libs "pango >= 1.8.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
-fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- PANGO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pango >= 1.8.0" 2>&1`
- else
- PANGO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pango >= 1.8.0" 2>&1`
- fi
- echo "$PANGO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "Cannot find Pango >= 1.8.0" "$LINENO" 5
-
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find Pango >= 1.8.0" "$LINENO" 5
+### ---------------------------------------------------------------------------
+PTHREAD_LIBS=
+PTHREAD_CFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
+if ${ac_cv_lib_pthread_pthread_create+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- PANGO_CFLAGS="$pkg_cv_PANGO_CFLAGS"
- PANGO_LIBS="$pkg_cv_PANGO_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="pango >= 1.8.0"
- else
- PC_REQUIRES="$PC_REQUIRES, pango >= 1.8.0"
- fi
-
-
-fi
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-# Check whether --enable-dbus was given.
-if test "${enable_dbus+set}" = set; then :
- enableval=$enable_dbus; enable_dbus=$enableval
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_create ();
+int
+main ()
+{
+return pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthread_pthread_create=yes
else
- enable_dbus=yes
+ ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then :
+ PTHREAD_LIBS="-lpthread"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthreads" >&5
+$as_echo_n "checking for pthread_create in -lpthreads... " >&6; }
+if ${ac_cv_lib_pthreads_pthread_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthreads $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-if test "x$enable_dbus" = "xyes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
-$as_echo_n "checking for DBUS... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.60 dbus-glib-1 >= 0.60\""; } >&5
- ($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${DBUS_CFLAGS}" != "x"; then
- pkg_cv_DBUS_CFLAGS="${DBUS_CFLAGS}"
- else
- pkg_cv_DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>/dev/null`
- fi
- if test "x${DBUS_LIBS}" != "x"; then
- pkg_cv_DBUS_LIBS="${DBUS_LIBS}"
- else
- pkg_cv_DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_create ();
+int
+main ()
+{
+return pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthreads_pthread_create=yes
else
- pkg_failed="untried"
+ ac_cv_lib_pthreads_pthread_create=no
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>&1`
- else
- DBUS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>&1`
- fi
- echo "$DBUS_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "Cannot find dbus-glib >= 0.60" "$LINENO" 5
- ]
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find dbus-glib >= 0.60" "$LINENO" 5
- ]
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthreads_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthreads_pthread_create" = xyes; then :
+ PTHREAD_LIBS="-lpthreads"
else
- DBUS_CFLAGS="$pkg_cv_DBUS_CFLAGS"
- DBUS_LIBS="$pkg_cv_DBUS_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="dbus-1 >= 0.60 dbus-glib-1 >= 0.60"
- else
- PC_REQUIRES="$PC_REQUIRES, dbus-1 >= 0.60 dbus-glib-1 >= 0.60"
- fi
-
-
-
-$as_echo "#define USE_DBUS 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthreadGC2" >&5
+$as_echo_n "checking for pthread_create in -lpthreadGC2... " >&6; }
+if ${ac_cv_lib_pthreadGC2_pthread_create+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthreadGC2 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_create ();
+int
+main ()
+{
+return pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pthreadGC2_pthread_create=yes
+else
+ ac_cv_lib_pthreadGC2_pthread_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreadGC2_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthreadGC2_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthreadGC2_pthread_create" = xyes; then :
+ PTHREAD_LIBS="-lpthreadGC2"
fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MOWGLI" >&5
-$as_echo_n "checking for MOWGLI... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmowgli >= 0.4.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libmowgli >= 0.4.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${MOWGLI_CFLAGS}" != "x"; then
- pkg_cv_MOWGLI_CFLAGS="${MOWGLI_CFLAGS}"
- else
- pkg_cv_MOWGLI_CFLAGS=`$PKG_CONFIG --cflags "libmowgli >= 0.4.0" 2>/dev/null`
- fi
- if test "x${MOWGLI_LIBS}" != "x"; then
- pkg_cv_MOWGLI_LIBS="${MOWGLI_LIBS}"
- else
- pkg_cv_MOWGLI_LIBS=`$PKG_CONFIG --libs "libmowgli >= 0.4.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- MOWGLI_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libmowgli >= 0.4.0" 2>&1`
- else
- MOWGLI_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libmowgli >= 0.4.0" 2>&1`
- fi
- echo "$MOWGLI_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "Cannot find libmowgli >= 0.4.0, try http://www.atheme.org/projects/mowgli.shtml" "$LINENO" 5
+fi
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find libmowgli >= 0.4.0, try http://www.atheme.org/projects/mowgli.shtml" "$LINENO" 5
-else
- MOWGLI_CFLAGS="$pkg_cv_MOWGLI_CFLAGS"
- MOWGLI_LIBS="$pkg_cv_MOWGLI_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- if test "x$PC_REQUIRES" = "x"; then
- PC_REQUIRES="libmowgli >= 0.4.0"
- else
- PC_REQUIRES="$PC_REQUIRES, libmowgli >= 0.4.0"
- fi
-fi
-
# Check whether --enable-ipv6 was given.
if test "${enable_ipv6+set}" = set; then :
enableval=$enable_ipv6; enable_ipv6=$enableval
@@ -7557,172 +8905,51 @@ fi
-# Check whether --enable-chardet was given.
-if test "${enable_chardet+set}" = set; then :
- enableval=$enable_chardet; enable_chardet=$enableval
+
+# Check whether --enable-console was given.
+if test "${enable_console+set}" = set; then :
+ enableval=$enable_console; enable_console=$enableval
else
- enable_chardet=no
+ enable_console="yes"
fi
-if test "x$enable_chardet" = "xyes"; then
-
-$as_echo "#define USE_CHARDET 1" >>confdefs.h
-fi
- if test "x$enable_chardet" = "xyes"; then
- USE_CHARDET_TRUE=
- USE_CHARDET_FALSE='#'
+if test $enable_console = yes ; then
+ for ac_header in zlib.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
+ enable_console=yes
else
- USE_CHARDET_TRUE='#'
- USE_CHARDET_FALSE=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find zlib.h; disabling game music decoder (console)" >&5
+$as_echo "$as_me: WARNING: Cannot find zlib.h; disabling game music decoder (console)" >&2;}
+ enable_console=no
fi
+done
+fi
+if test $enable_console = yes ; then
+ INPUT_PLUGINS="$INPUT_PLUGINS console"
+fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library system" >&5
-$as_echo_n "checking for shared library system... " >&6; }
- case "$host_os" in
- darwin*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Darwin" >&5
-$as_echo "Darwin" >&6; }
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-dynamiclib -flat_namespace'
- LIB_PREFIX='lib'
- LIB_SUFFIX='.dylib'
- LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-bundle -flat_namespace -undefined suppress'
- PLUGIN_SUFFIX='.impl'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
- CLEAN_LIB=''
- ;;
- solaris*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris" >&5
-$as_echo "Solaris" >&6; }
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}'
- LIB_PREFIX='lib'
- LIB_SUFFIX='.so'
- LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-shared -fPIC'
- PLUGIN_SUFFIX='.so'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}'
- CLEAN_LIB=''
- ;;
- openbsd* | mirbsd*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenBSD" >&5
-$as_echo "OpenBSD" >&6; }
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-shared -fPIC'
- LIB_PREFIX='lib'
- LIB_SUFFIX='.so.${LIB_MAJOR}.${LIB_MINOR}'
- LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-shared -fPIC'
- PLUGIN_SUFFIX='.so'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i'
- CLEAN_LIB=''
- ;;
- cygwin* | mingw*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: Win32" >&5
-$as_echo "Win32" >&6; }
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS=''
- LIB_LDFLAGS='-shared -Wl,--out-implib,${LIB}.a'
- LIB_PREFIX='lib'
- LIB_SUFFIX='.dll'
- LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS=''
- PLUGIN_CFLAGS=''
- PLUGIN_LDFLAGS='-shared'
- PLUGIN_SUFFIX='.dll'
- INSTALL_LIB='${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a'
- UNINSTALL_LIB='rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a'
- CLEAN_LIB='${LIB}.a'
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: GNU" >&5
-$as_echo "GNU" >&6; }
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}'
- LIB_PREFIX='lib'
- LIB_SUFFIX='.so'
- LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-shared -fPIC'
- PLUGIN_SUFFIX='.so'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0'
- CLEAN_LIB=''
- ;;
- esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need an implib" >&5
-$as_echo_n "checking whether we need an implib... " >&6; }
- case "$host_os" in
- cygwin* | mingw*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- PROG_IMPLIB_NEEDED='yes'
- PROG_IMPLIB_LDFLAGS='-Wl,-export-all-symbols,--out-implib,lib${PROG}.a'
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- PROG_IMPLIB_NEEDED='no'
- PROG_IMPLIB_LDFLAGS=''
- ;;
- esac
-
-
+# Check whether --enable-xsf was given.
+if test "${enable_xsf+set}" = set; then :
+ enableval=$enable_xsf; enable_xsf=$enableval
+else
+ enable_xsf="yes"
+fi
-test "x$PROG_IMPLIB_NEEDED" = "xyes" && LIBS="$LIBS -L\${libdir} -laudacious.exe"
+if test $enable_xsf = yes ; then
+ INPUT_PLUGINS="$INPUT_PLUGINS xsf"
+fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running Apple-GCC" >&5
-$as_echo_n "checking if you are running Apple-GCC... " >&6; }
-case "$target" in
- *-apple-*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, sorry you poor bastard" >&5
-$as_echo "yes, sorry you poor bastard" >&6; }
- LDFLAGS="$LDFLAGS -Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices"
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ;;
-esac
# Check whether --enable-pulse was given.
@@ -7735,120 +8962,79 @@ fi
if test "x$enable_pulse" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PULSE" >&5
$as_echo_n "checking for PULSE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.5\""; } >&5
+
+if test -n "$PULSE_CFLAGS"; then
+ pkg_cv_PULSE_CFLAGS="$PULSE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.5\""; } >&5
($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.5") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${PULSE_CFLAGS}" != "x"; then
- pkg_cv_PULSE_CFLAGS="${PULSE_CFLAGS}"
- else
- pkg_cv_PULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.5" 2>/dev/null`
- fi
- if test "x${PULSE_LIBS}" != "x"; then
- pkg_cv_PULSE_LIBS="${PULSE_LIBS}"
- else
- pkg_cv_PULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.5" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_PULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.5" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- PULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libpulse >= 0.9.5" 2>&1`
- else
- PULSE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libpulse >= 0.9.5" 2>&1`
- fi
- echo "$PULSE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_pulse=no
-
-elif test "x$pkg_failed" = "xuntried"; then
- have_pulse=no
-
-else
- PULSE_CFLAGS="$pkg_cv_PULSE_CFLAGS"
- PULSE_LIBS="$pkg_cv_PULSE_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_pulse=yes
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS pulse_audio"
+ else
+ pkg_failed=untried
fi
+if test -n "$PULSE_LIBS"; then
+ pkg_cv_PULSE_LIBS="$PULSE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.5\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.5") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.5" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** pulseaudio output plugin disabled per user request ***" >&5
-$as_echo "*** pulseaudio output plugin disabled per user request ***" >&6; }
- have_pulse=no
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-# Check whether --enable-roar was given.
-if test "${enable_roar+set}" = set; then :
- enableval=$enable_roar; enable_roar=$enableval
-else
- enable_roar="yes"
-
-fi
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-if test "x$enable_roar" = "xyes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBROAR" >&5
-$as_echo_n "checking for LIBROAR... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libroar\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libroar") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${LIBROAR_CFLAGS}" != "x"; then
- pkg_cv_LIBROAR_CFLAGS="${LIBROAR_CFLAGS}"
- else
- pkg_cv_LIBROAR_CFLAGS=`$PKG_CONFIG --cflags "libroar" 2>/dev/null`
- fi
- if test "x${LIBROAR_LIBS}" != "x"; then
- pkg_cv_LIBROAR_LIBS="${LIBROAR_LIBS}"
- else
- pkg_cv_LIBROAR_LIBS=`$PKG_CONFIG --libs "libroar" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- pkg_failed="untried"
+ _pkg_short_errors_supported=no
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- LIBROAR_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libroar" 2>&1`
+ if test $_pkg_short_errors_supported = yes; then
+ PULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpulse >= 0.9.5" 2>&1`
else
- LIBROAR_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libroar" 2>&1`
+ PULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpulse >= 0.9.5" 2>&1`
fi
- echo "$LIBROAR_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_roar=no
+ # Put the nasty error message in config.log where it belongs
+ echo "$PULSE_PKG_ERRORS" >&5
-elif test "x$pkg_failed" = "xuntried"; then
- have_roar=no
+ have_pulse=no
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_pulse=no
else
- LIBROAR_CFLAGS="$pkg_cv_LIBROAR_CFLAGS"
- LIBROAR_LIBS="$pkg_cv_LIBROAR_LIBS"
+ PULSE_CFLAGS=$pkg_cv_PULSE_CFLAGS
+ PULSE_LIBS=$pkg_cv_PULSE_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- have_roar=yes
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS roaraudio"
+ have_pulse=yes
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS pulse_audio"
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** pulseaudio output plugin disabled per user request ***" >&5
@@ -7857,401 +9043,264 @@ $as_echo "*** pulseaudio output plugin disabled per user request ***" >&6; }
fi
-# Check whether --enable-coreaudio was given.
-if test "${enable_coreaudio+set}" = set; then :
- enableval=$enable_coreaudio; enable_coreaudio=$enableval
-else
- enable_coreaudio="yes"
-
-fi
-
-
-if test "x$enable_coreaudio" = "xyes"; then
- for ac_header in CoreServices/CoreServices.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "CoreServices/CoreServices.h" "ac_cv_header_CoreServices_CoreServices_h" "$ac_includes_default"
-if test "x$ac_cv_header_CoreServices_CoreServices_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_CORESERVICES_CORESERVICES_H 1
-_ACEOF
- have_coreaudio=yes
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS CoreAudio"
+# Check whether --enable-psf was given.
+if test "${enable_psf+set}" = set; then :
+ enableval=$enable_psf; enable_psf=$enableval
else
- have_coreaudio=no
+ enable_psf=yes
fi
-done
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** CoreAudio output plugin disabled per user request ***" >&5
-$as_echo "*** CoreAudio output plugin disabled per user request ***" >&6; }
- have_coreaudio=no
+if test "$enable_psf" = "yes"; then
+ INPUT_PLUGINS="$INPUT_PLUGINS psf"
fi
-# Check whether --enable-dockalbumart was given.
-if test "${enable_dockalbumart+set}" = set; then :
- enableval=$enable_dockalbumart; enable_dockalbumart=$enableval
+# Check whether --enable-mp3 was given.
+if test "${enable_mp3+set}" = set; then :
+ enableval=$enable_mp3; enable_mp3=$enableval
else
- enable_dockalbumart="yes"
-
+ enable_mp3=yes
fi
-if test "x$enable_dockalbumart" = "xyes"; then
- for ac_header in Carbon/Carbon.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "Carbon/Carbon.h" "ac_cv_header_Carbon_Carbon_h" "$ac_includes_default"
-if test "x$ac_cv_header_Carbon_Carbon_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_CARBON_CARBON_H 1
-_ACEOF
- have_dockalbumart=yes
- GENERAL_PLUGINS="$GENERAL_PLUGINS dockalbumart"
-else
- have_dockalbumart=no
-fi
-
-done
+if test $enable_mp3 = yes ; then
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MPG123" >&5
+$as_echo_n "checking for MPG123... " >&6; }
+
+if test -n "$MPG123_CFLAGS"; then
+ pkg_cv_MPG123_CFLAGS="$MPG123_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpg123 >= 1.12\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmpg123 >= 1.12") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MPG123_CFLAGS=`$PKG_CONFIG --cflags "libmpg123 >= 1.12" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** DockAlbumArt plugin disabled per user request ***" >&5
-$as_echo "*** DockAlbumArt plugin disabled per user request ***" >&6; }
- have_dockalbumart=no
+ pkg_failed=yes
fi
-
-
-# Check whether --enable-altivec was given.
-if test "${enable_altivec+set}" = set; then :
- enableval=$enable_altivec; enable_altivec=$enableval
-else
- enable_altivec=yes
-
+ else
+ pkg_failed=untried
fi
-
-if test "x$enable_altivec" = "xyes"; then
- for ac_header in altivec.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "altivec.h" "ac_cv_header_altivec_h" "$ac_includes_default"
-if test "x$ac_cv_header_altivec_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_ALTIVEC_H 1
-_ACEOF
-
-$as_echo "#define HAVE_ALTIVEC 1" >>confdefs.h
-
-
-$as_echo "#define HAVE_ALTIVEC_H 1" >>confdefs.h
-
-
-$as_echo "#define ARCH_POWERPC 1" >>confdefs.h
-
- DCT64=dct64_altivec.c
- SIMD_CFLAGS=-maltivec
-
+if test -n "$MPG123_LIBS"; then
+ pkg_cv_MPG123_LIBS="$MPG123_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpg123 >= 1.12\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmpg123 >= 1.12") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MPG123_LIBS=`$PKG_CONFIG --libs "libmpg123 >= 1.12" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- DCT64=dct64.c
-
-fi
-
-done
-
+ pkg_failed=yes
fi
-
-
-
-# Check whether --enable-sse2 was given.
-if test "${enable_sse2+set}" = set; then :
- enableval=$enable_sse2; enable_sse2=$enableval
-else
- enable_sse2=yes
-
+ else
+ pkg_failed=untried
fi
-if test "x$enable_sse2" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking SSE2" >&5
-$as_echo_n "checking SSE2... " >&6; }
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS="-msse2"
- if test "$cross_compiling" = yes; then :
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run test program while cross compiling
-See \`config.log' for more details" "$LINENO" 5; }
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- #include <emmintrin.h>
- int main()
- {
- _mm_setzero_pd();
- asm volatile("xorpd %xmm0,%xmm0\n\t");
- return 0;
- }
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE2 yes" >&5
-$as_echo "SSE2 yes" >&6; }
-$as_echo "#define HAVE_SSE2 1" >>confdefs.h
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
- SIMD_CFLAGS=-msse2
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE2 no" >&5
-$as_echo "SSE2 no" >&6; }
+ _pkg_short_errors_supported=no
fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-
-CFLAGS="$ac_save_CFLAGS"
-
-
+ if test $_pkg_short_errors_supported = yes; then
+ MPG123_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmpg123 >= 1.12" 2>&1`
+ else
+ MPG123_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmpg123 >= 1.12" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$MPG123_PKG_ERRORS" >&5
-# Check whether --enable-psf was given.
-if test "${enable_psf+set}" = set; then :
- enableval=$enable_psf; enable_psf=$enableval
+ enable_mp3=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ enable_mp3=no
else
- enable_psf=yes
+ MPG123_CFLAGS=$pkg_cv_MPG123_CFLAGS
+ MPG123_LIBS=$pkg_cv_MPG123_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ enable_mp3=yes
fi
-
-if test "$enable_psf" = "yes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS psf"
+ if test $enable_mp3 = yes ; then
+ INPUT_PLUGINS="$INPUT_PLUGINS mpg123"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** libmpg123 not found; MP3 plugin disabled" >&5
+$as_echo "*** libmpg123 not found; MP3 plugin disabled" >&6; }
+ fi
fi
-
-# Check whether --enable-usf was given.
-if test "${enable_usf+set}" = set; then :
- enableval=$enable_usf; enable_usf=$enableval
+# Check whether --enable-hotkey was given.
+if test "${enable_hotkey+set}" = set; then :
+ enableval=$enable_hotkey; enable_hotkey=$enableval
else
- enable_usf=no
+ enable_hotkey="yes"
fi
-if test "x$enable_usf" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if your platform is supported for the USF plugin" >&5
-$as_echo_n "checking if your platform is supported for the USF plugin... " >&6; }
- case "$target" in
- x86_64-*-linux-gnu)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, AMD64 Linux" >&5
-$as_echo "yes, AMD64 Linux" >&6; }
- enable_usf=yes
- ;;
- i*86-*-linux-gnu)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, X86 Linux" >&5
-$as_echo "yes, X86 Linux" >&6; }
- enable_usf=yes
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- enable_usf=no
- ;;
- esac
-
- if test "x$enable_usf" = "xyes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS usf"
- fi
-fi
+if test "x$enable_hotkey" = "xyes"; then
+ if test $use_gtk3 = yes ; then
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDKX11" >&5
+$as_echo_n "checking for GDKX11... " >&6; }
-# Check whether --enable-mp3 was given.
-if test "${enable_mp3+set}" = set; then :
- enableval=$enable_mp3; enable_mp3=$enableval
+if test -n "$GDKX11_CFLAGS"; then
+ pkg_cv_GDKX11_CFLAGS="$GDKX11_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-x11-3.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gdk-x11-3.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GDKX11_CFLAGS=`$PKG_CONFIG --cflags "gdk-x11-3.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- enable_mp3=yes
-
+ pkg_failed=yes
fi
-
-
-if test "x$enable_mp3" = "xyes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS mpg123"
+ else
+ pkg_failed=untried
fi
-
-
-# Check whether --enable-rocklight was given.
-if test "${enable_rocklight+set}" = set; then :
- enableval=$enable_rocklight; enable_rocklight="$enableval"
+if test -n "$GDKX11_LIBS"; then
+ pkg_cv_GDKX11_LIBS="$GDKX11_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-x11-3.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gdk-x11-3.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GDKX11_LIBS=`$PKG_CONFIG --libs "gdk-x11-3.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- enable_rocklight="yes"
-
+ pkg_failed=yes
fi
-
-
-if test "x$enable_rocklight" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS rocklight"
+ else
+ pkg_failed=untried
fi
-# Check whether --enable-lirc was given.
-if test "${enable_lirc+set}" = set; then :
- enableval=$enable_lirc; enable_lirc=$enableval
-else
- enable_lirc="yes"
-
-fi
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-if test "x$enable_lirc" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lirc_init in -llirc_client" >&5
-$as_echo_n "checking for lirc_init in -llirc_client... " >&6; }
-if ${ac_cv_lib_lirc_client_lirc_init+:} false; then :
- $as_echo_n "(cached) " >&6
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-llirc_client $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char lirc_init ();
-int
-main ()
-{
-return lirc_init ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_lirc_client_lirc_init=yes
-else
- ac_cv_lib_lirc_client_lirc_init=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lirc_client_lirc_init" >&5
-$as_echo "$ac_cv_lib_lirc_client_lirc_init" >&6; }
-if test "x$ac_cv_lib_lirc_client_lirc_init" = xyes; then :
- have_lirc=yes
-else
- have_lirc=no
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ GDKX11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gdk-x11-3.0" 2>&1`
+ else
+ GDKX11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gdk-x11-3.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GDKX11_PKG_ERRORS" >&5
+ have_hotkey="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_hotkey="no"
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** LIRC plugin disabled per user request ***" >&5
-$as_echo "*** LIRC plugin disabled per user request ***" >&6; }
- have_lirc="no"
+ GDKX11_CFLAGS=$pkg_cv_GDKX11_CFLAGS
+ GDKX11_LIBS=$pkg_cv_GDKX11_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_hotkey="yes"
fi
+ else
-if test "x$have_lirc" = "xyes"; then
- ac_fn_c_check_header_mongrel "$LINENO" "lirc/lirc_client.h" "ac_cv_header_lirc_lirc_client_h" "$ac_includes_default"
-if test "x$ac_cv_header_lirc_lirc_client_h" = xyes; then :
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDKX11" >&5
+$as_echo_n "checking for GDKX11... " >&6; }
+if test -n "$GDKX11_CFLAGS"; then
+ pkg_cv_GDKX11_CFLAGS="$GDKX11_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-x11-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gdk-x11-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GDKX11_CFLAGS=`$PKG_CONFIG --cflags "gdk-x11-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- have_lirc=no
+ pkg_failed=yes
fi
-
-
+ else
+ pkg_failed=untried
fi
-
-if test "x$have_lirc" = "xyes"; then
- GENERAL_PLUGINS="$GENERAL_PLUGINS lirc"
-fi
-
-
-# Check whether --enable-evdevplug was given.
-if test "${enable_evdevplug+set}" = set; then :
- enableval=$enable_evdevplug; enable_evdevplug=$enableval
-else
- enable_evdevplug="yes"
-
-fi
-
-
-if test "x$enable_evdevplug" = "xyes"; then
- case "$target" in
- *-*-linux*)
- have_evdevplug="yes"
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** Linux evdev plugin disabled (host does not run linux) ***" >&5
-$as_echo "*** Linux evdev plugin disabled (host does not run linux) ***" >&6; }
- have_evdevplug="no"
- ;;
- esac
+if test -n "$GDKX11_LIBS"; then
+ pkg_cv_GDKX11_LIBS="$GDKX11_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-x11-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gdk-x11-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GDKX11_LIBS=`$PKG_CONFIG --libs "gdk-x11-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** Linux evdev plugin disabled per user request ***" >&5
-$as_echo "*** Linux evdev plugin disabled per user request ***" >&6; }
- have_evdevplug="no"
+ pkg_failed=yes
fi
-
-if test "x$have_evdevplug" = "xyes"; then
- GENERAL_PLUGINS="$GENERAL_PLUGINS evdev-plug"
+ else
+ pkg_failed=untried
fi
-# Check whether --enable-hotkey was given.
-if test "${enable_hotkey+set}" = set; then :
- enableval=$enable_hotkey; enable_hotkey=$enableval
-else
- enable_hotkey="yes"
-
-fi
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-if test "x$enable_hotkey" = "xyes"; then
- have_hotkey="yes"
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDKX11" >&5
-$as_echo_n "checking for GDKX11... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-x11-2.0 >= 2.6.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gdk-x11-2.0 >= 2.6.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${GDKX11_CFLAGS}" != "x"; then
- pkg_cv_GDKX11_CFLAGS="${GDKX11_CFLAGS}"
- else
- pkg_cv_GDKX11_CFLAGS=`$PKG_CONFIG --cflags "gdk-x11-2.0 >= 2.6.0" 2>/dev/null`
- fi
- if test "x${GDKX11_LIBS}" != "x"; then
- pkg_cv_GDKX11_LIBS="${GDKX11_LIBS}"
- else
- pkg_cv_GDKX11_LIBS=`$PKG_CONFIG --libs "gdk-x11-2.0 >= 2.6.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- pkg_failed="untried"
+ _pkg_short_errors_supported=no
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GDKX11_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gdk-x11-2.0 >= 2.6.0" 2>&1`
+ if test $_pkg_short_errors_supported = yes; then
+ GDKX11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gdk-x11-2.0" 2>&1`
else
- GDKX11_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gdk-x11-2.0 >= 2.6.0" 2>&1`
+ GDKX11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gdk-x11-2.0" 2>&1`
fi
- echo "$GDKX11_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$GDKX11_PKG_ERRORS" >&5
+
+ have_hotkey="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_hotkey="no"
-elif test "x$pkg_failed" = "xuntried"; then
have_hotkey="no"
else
- GDKX11_CFLAGS="$pkg_cv_GDKX11_CFLAGS"
- GDKX11_LIBS="$pkg_cv_GDKX11_LIBS"
+ GDKX11_CFLAGS=$pkg_cv_GDKX11_CFLAGS
+ GDKX11_LIBS=$pkg_cv_GDKX11_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+ have_hotkey="yes"
fi
+ fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X11 Global Hotkey plugin disabled per user request ***" >&5
$as_echo "*** X11 Global Hotkey plugin disabled per user request ***" >&6; }
@@ -8274,51 +9323,80 @@ fi
if test "x$enable_gnomeshortcuts" = "xyes"; then
have_gnomeshortcuts="yes"
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
$as_echo_n "checking for DBUS... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.60 dbus-glib-1 >= 0.60\""; } >&5
+
+if test -n "$DBUS_CFLAGS"; then
+ pkg_cv_DBUS_CFLAGS="$DBUS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.60 dbus-glib-1 >= 0.60\""; } >&5
($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${DBUS_CFLAGS}" != "x"; then
- pkg_cv_DBUS_CFLAGS="${DBUS_CFLAGS}"
- else
- pkg_cv_DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>/dev/null`
- fi
- if test "x${DBUS_LIBS}" != "x"; then
- pkg_cv_DBUS_LIBS="${DBUS_LIBS}"
- else
- pkg_cv_DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_DBUS_CFLAGS=`$PKG_CONFIG --cflags "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$DBUS_LIBS"; then
+ pkg_cv_DBUS_LIBS="$DBUS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dbus-1 >= 0.60 dbus-glib-1 >= 0.60\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_DBUS_LIBS=`$PKG_CONFIG --libs "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>&1`
else
- DBUS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>&1`
+ DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "dbus-1 >= 0.60 dbus-glib-1 >= 0.60" 2>&1`
fi
- echo "$DBUS_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$DBUS_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find dbus-glib >= 0.60; disabling Gnome shortcuts plugin." >&5
+$as_echo "$as_me: WARNING: Cannot find dbus-glib >= 0.60; disabling Gnome shortcuts plugin." >&2;}
+ have_gnomeshortcuts=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error $? "Cannot find dbus-glib >= 0.60 for gnomeshortcuts plugin" "$LINENO" 5
-elif test "x$pkg_failed" = "xuntried"; then
- as_fn_error $? "Cannot find dbus-glib >= 0.60 for gnomeshortcuts plugin" "$LINENO" 5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find dbus-glib >= 0.60; disabling Gnome shortcuts plugin." >&5
+$as_echo "$as_me: WARNING: Cannot find dbus-glib >= 0.60; disabling Gnome shortcuts plugin." >&2;}
+ have_gnomeshortcuts=no
else
- DBUS_CFLAGS="$pkg_cv_DBUS_CFLAGS"
- DBUS_LIBS="$pkg_cv_DBUS_LIBS"
+ DBUS_CFLAGS=$pkg_cv_DBUS_CFLAGS
+ DBUS_LIBS=$pkg_cv_DBUS_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+ have_gnomeshortcuts=yes
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** Gnome Shortcuts Plugin disabled per user request ***" >&5
@@ -8331,66 +9409,123 @@ if test "x$have_gnomeshortcuts" = "xyes"; then
fi
+# Check whether --enable-songchange was given.
+if test "${enable_songchange+set}" = set; then :
+ enableval=$enable_songchange; enable_songchange=$enableval
+else
+ enable_songchange="yes"
+fi
+
+
+if test $enable_songchange = yes ; then
+ for ac_header in sys/wait.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_wait_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_WAIT_H 1
+_ACEOF
+ enable_songchange=yes
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find sys/wait.h; disabling song change plugin" >&5
+$as_echo "$as_me: WARNING: Cannot find sys/wait.h; disabling song change plugin" >&2;}
+ enable_songchange=no
+fi
+
+done
+
+fi
+
+if test $enable_songchange = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS song_change"
+fi
+
+
# Check whether --enable-statusicon was given.
if test "${enable_statusicon+set}" = set; then :
- enableval=$enable_statusicon; enable_statusicon=$enableval
+ enableval=$enable_statusicon; have_statusicon=$enableval
else
- enable_statusicon="yes"
-
+ have_statusicon="yes"
fi
-if test "x$enable_statusicon" = "xyes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
-$as_echo_n "checking for GTK... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.16.0\""; } >&5
+if test $have_statusicon = yes ; then
+ if test $use_gtk3 != yes ; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK216" >&5
+$as_echo_n "checking for GTK216... " >&6; }
+
+if test -n "$GTK216_CFLAGS"; then
+ pkg_cv_GTK216_CFLAGS="$GTK216_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.16.0\""; } >&5
($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.16.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${GTK_CFLAGS}" != "x"; then
- pkg_cv_GTK_CFLAGS="${GTK_CFLAGS}"
- else
- pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.16.0" 2>/dev/null`
- fi
- if test "x${GTK_LIBS}" != "x"; then
- pkg_cv_GTK_LIBS="${GTK_LIBS}"
- else
- pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.16.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GTK216_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.16.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test -n "$GTK216_LIBS"; then
+ pkg_cv_GTK216_LIBS="$GTK216_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.16.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.16.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTK216_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.16.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-2.0 >= 2.16.0" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTK216_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.16.0" 2>&1`
else
- GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.16.0" 2>&1`
+ GTK216_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.16.0" 2>&1`
fi
- echo "$GTK_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTK216_PKG_ERRORS" >&5
+
+ have_statusicon=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_statusicon=no
-elif test "x$pkg_failed" = "xuntried"; then
have_statusicon=no
else
- GTK_CFLAGS="$pkg_cv_GTK_CFLAGS"
- GTK_LIBS="$pkg_cv_GTK_LIBS"
+ GTK216_CFLAGS=$pkg_cv_GTK216_CFLAGS
+ GTK216_LIBS=$pkg_cv_GTK216_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_statusicon=yes
fi
+ fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X11 Status Icon plugin disabled per user request ***" >&5
$as_echo "*** X11 Status Icon plugin disabled per user request ***" >&6; }
- have_statusicon="no"
fi
if test "x$have_statusicon" = "xyes"; then
@@ -8418,264 +9553,389 @@ fi
if test "x$enable_aosd" = "xguess"; then
have_aosd="yes"
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGO" >&5
$as_echo_n "checking for PANGO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango >= 1.14.7\""; } >&5
+
+if test -n "$PANGO_CFLAGS"; then
+ pkg_cv_PANGO_CFLAGS="$PANGO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango >= 1.14.7\""; } >&5
($PKG_CONFIG --exists --print-errors "pango >= 1.14.7") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${PANGO_CFLAGS}" != "x"; then
- pkg_cv_PANGO_CFLAGS="${PANGO_CFLAGS}"
- else
- pkg_cv_PANGO_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.14.7" 2>/dev/null`
- fi
- if test "x${PANGO_LIBS}" != "x"; then
- pkg_cv_PANGO_LIBS="${PANGO_LIBS}"
- else
- pkg_cv_PANGO_LIBS=`$PKG_CONFIG --libs "pango >= 1.14.7" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_PANGO_CFLAGS=`$PKG_CONFIG --cflags "pango >= 1.14.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test -n "$PANGO_LIBS"; then
+ pkg_cv_PANGO_LIBS="$PANGO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pango >= 1.14.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "pango >= 1.14.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PANGO_LIBS=`$PKG_CONFIG --libs "pango >= 1.14.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- PANGO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pango >= 1.14.7" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ PANGO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pango >= 1.14.7" 2>&1`
else
- PANGO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pango >= 1.14.7" 2>&1`
+ PANGO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pango >= 1.14.7" 2>&1`
fi
- echo "$PANGO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_aosd="no"
+ # Put the nasty error message in config.log where it belongs
+ echo "$PANGO_PKG_ERRORS" >&5
+
+ have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** pango >= 1.14.7 is required for Audacious OSD plugin ***" >&5
$as_echo "*** pango >= 1.14.7 is required for Audacious OSD plugin ***" >&6; }
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** pango >= 1.14.7 is required for Audacious OSD plugin ***" >&5
$as_echo "*** pango >= 1.14.7 is required for Audacious OSD plugin ***" >&6; }
else
- PANGO_CFLAGS="$pkg_cv_PANGO_CFLAGS"
- PANGO_LIBS="$pkg_cv_PANGO_LIBS"
+ PANGO_CFLAGS=$pkg_cv_PANGO_CFLAGS
+ PANGO_LIBS=$pkg_cv_PANGO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5
$as_echo_n "checking for CAIRO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.4\""; } >&5
+
+if test -n "$CAIRO_CFLAGS"; then
+ pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.4\""; } >&5
($PKG_CONFIG --exists --print-errors "cairo >= 1.2.4") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${CAIRO_CFLAGS}" != "x"; then
- pkg_cv_CAIRO_CFLAGS="${CAIRO_CFLAGS}"
- else
- pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.2.4" 2>/dev/null`
- fi
- if test "x${CAIRO_LIBS}" != "x"; then
- pkg_cv_CAIRO_LIBS="${CAIRO_LIBS}"
- else
- pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.2.4" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.2.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CAIRO_LIBS"; then
+ pkg_cv_CAIRO_LIBS="$CAIRO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "cairo >= 1.2.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.2.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cairo >= 1.2.4" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= 1.2.4" 2>&1`
else
- CAIRO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cairo >= 1.2.4" 2>&1`
+ CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= 1.2.4" 2>&1`
fi
- echo "$CAIRO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_aosd="no"
+ # Put the nasty error message in config.log where it belongs
+ echo "$CAIRO_PKG_ERRORS" >&5
+
+ have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** cairo >= 1.2.4 is required for Audacious OSD plugin ***" >&5
$as_echo "*** cairo >= 1.2.4 is required for Audacious OSD plugin ***" >&6; }
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** cairo >= 1.2.4 is required for Audacious OSD plugin ***" >&5
$as_echo "*** cairo >= 1.2.4 is required for Audacious OSD plugin ***" >&6; }
else
- CAIRO_CFLAGS="$pkg_cv_CAIRO_CFLAGS"
- CAIRO_LIBS="$pkg_cv_CAIRO_LIBS"
+ CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS
+ CAIRO_LIBS=$pkg_cv_CAIRO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PANGOCAIRO" >&5
$as_echo_n "checking for PANGOCAIRO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangocairo >= 1.14.7\""; } >&5
+
+if test -n "$PANGOCAIRO_CFLAGS"; then
+ pkg_cv_PANGOCAIRO_CFLAGS="$PANGOCAIRO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangocairo >= 1.14.7\""; } >&5
($PKG_CONFIG --exists --print-errors "pangocairo >= 1.14.7") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${PANGOCAIRO_CFLAGS}" != "x"; then
- pkg_cv_PANGOCAIRO_CFLAGS="${PANGOCAIRO_CFLAGS}"
- else
- pkg_cv_PANGOCAIRO_CFLAGS=`$PKG_CONFIG --cflags "pangocairo >= 1.14.7" 2>/dev/null`
- fi
- if test "x${PANGOCAIRO_LIBS}" != "x"; then
- pkg_cv_PANGOCAIRO_LIBS="${PANGOCAIRO_LIBS}"
- else
- pkg_cv_PANGOCAIRO_LIBS=`$PKG_CONFIG --libs "pangocairo >= 1.14.7" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_PANGOCAIRO_CFLAGS=`$PKG_CONFIG --cflags "pangocairo >= 1.14.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$PANGOCAIRO_LIBS"; then
+ pkg_cv_PANGOCAIRO_LIBS="$PANGOCAIRO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangocairo >= 1.14.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "pangocairo >= 1.14.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_PANGOCAIRO_LIBS=`$PKG_CONFIG --libs "pangocairo >= 1.14.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- PANGOCAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "pangocairo >= 1.14.7" 2>&1`
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ PANGOCAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangocairo >= 1.14.7" 2>&1`
else
- PANGOCAIRO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "pangocairo >= 1.14.7" 2>&1`
+ PANGOCAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangocairo >= 1.14.7" 2>&1`
fi
- echo "$PANGOCAIRO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_aosd="no"
+ # Put the nasty error message in config.log where it belongs
+ echo "$PANGOCAIRO_PKG_ERRORS" >&5
+
+ have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** pangocairo >= 1.14.7 is required for Audacious OSD plugin ***" >&5
$as_echo "*** pangocairo >= 1.14.7 is required for Audacious OSD plugin ***" >&6; }
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** pangocairo >= 1.14.7 is required for Audacious OSD plugin ***" >&5
$as_echo "*** pangocairo >= 1.14.7 is required for Audacious OSD plugin ***" >&6; }
else
- PANGOCAIRO_CFLAGS="$pkg_cv_PANGOCAIRO_CFLAGS"
- PANGOCAIRO_LIBS="$pkg_cv_PANGOCAIRO_LIBS"
+ PANGOCAIRO_CFLAGS=$pkg_cv_PANGOCAIRO_CFLAGS
+ PANGOCAIRO_LIBS=$pkg_cv_PANGOCAIRO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRENDER" >&5
$as_echo_n "checking for XRENDER... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xrender\""; } >&5
+
+if test -n "$XRENDER_CFLAGS"; then
+ pkg_cv_XRENDER_CFLAGS="$XRENDER_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xrender\""; } >&5
($PKG_CONFIG --exists --print-errors "xrender") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${XRENDER_CFLAGS}" != "x"; then
- pkg_cv_XRENDER_CFLAGS="${XRENDER_CFLAGS}"
- else
- pkg_cv_XRENDER_CFLAGS=`$PKG_CONFIG --cflags "xrender" 2>/dev/null`
- fi
- if test "x${XRENDER_LIBS}" != "x"; then
- pkg_cv_XRENDER_LIBS="${XRENDER_LIBS}"
- else
- pkg_cv_XRENDER_LIBS=`$PKG_CONFIG --libs "xrender" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_XRENDER_CFLAGS=`$PKG_CONFIG --cflags "xrender" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$XRENDER_LIBS"; then
+ pkg_cv_XRENDER_LIBS="$XRENDER_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xrender\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "xrender") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_XRENDER_LIBS=`$PKG_CONFIG --libs "xrender" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- XRENDER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xrender" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ XRENDER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xrender" 2>&1`
else
- XRENDER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xrender" 2>&1`
+ XRENDER_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xrender" 2>&1`
fi
- echo "$XRENDER_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_aosd="no"
+ # Put the nasty error message in config.log where it belongs
+ echo "$XRENDER_PKG_ERRORS" >&5
+
+ have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X Render extension is required for Audacious OSD plugin ***" >&5
$as_echo "*** X Render extension is required for Audacious OSD plugin ***" >&6; }
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_aosd="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X Render extension is required for Audacious OSD plugin ***" >&5
$as_echo "*** X Render extension is required for Audacious OSD plugin ***" >&6; }
else
- XRENDER_CFLAGS="$pkg_cv_XRENDER_CFLAGS"
- XRENDER_LIBS="$pkg_cv_XRENDER_LIBS"
+ XRENDER_CFLAGS=$pkg_cv_XRENDER_CFLAGS
+ XRENDER_LIBS=$pkg_cv_XRENDER_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
if test "x$enable_aosd_xcomp" = "xyes"; then
have_aosd_xcomp="yes"
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCOMPOSITE" >&5
$as_echo_n "checking for XCOMPOSITE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite\""; } >&5
+
+if test -n "$XCOMPOSITE_CFLAGS"; then
+ pkg_cv_XCOMPOSITE_CFLAGS="$XCOMPOSITE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite\""; } >&5
($PKG_CONFIG --exists --print-errors "xcomposite") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${XCOMPOSITE_CFLAGS}" != "x"; then
- pkg_cv_XCOMPOSITE_CFLAGS="${XCOMPOSITE_CFLAGS}"
- else
- pkg_cv_XCOMPOSITE_CFLAGS=`$PKG_CONFIG --cflags "xcomposite" 2>/dev/null`
- fi
- if test "x${XCOMPOSITE_LIBS}" != "x"; then
- pkg_cv_XCOMPOSITE_LIBS="${XCOMPOSITE_LIBS}"
- else
- pkg_cv_XCOMPOSITE_LIBS=`$PKG_CONFIG --libs "xcomposite" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_XCOMPOSITE_CFLAGS=`$PKG_CONFIG --cflags "xcomposite" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$XCOMPOSITE_LIBS"; then
+ pkg_cv_XCOMPOSITE_LIBS="$XCOMPOSITE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "xcomposite") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_XCOMPOSITE_LIBS=`$PKG_CONFIG --libs "xcomposite" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xcomposite" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xcomposite" 2>&1`
else
- XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xcomposite" 2>&1`
+ XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xcomposite" 2>&1`
fi
- echo "$XCOMPOSITE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_aosd_xcomp="no"
+ # Put the nasty error message in config.log where it belongs
+ echo "$XCOMPOSITE_PKG_ERRORS" >&5
+
+ have_aosd_xcomp="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&5
$as_echo "*** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&6; }
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_aosd_xcomp="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&5
$as_echo "*** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&6; }
else
- XCOMPOSITE_CFLAGS="$pkg_cv_XCOMPOSITE_CFLAGS"
- XCOMPOSITE_LIBS="$pkg_cv_XCOMPOSITE_LIBS"
+ XCOMPOSITE_CFLAGS=$pkg_cv_XCOMPOSITE_CFLAGS
+ XCOMPOSITE_LIBS=$pkg_cv_XCOMPOSITE_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -8694,54 +9954,79 @@ $as_echo "*** Audacious OSD plugin has been forcefully enabled ***" >&6; }
have_aosd="yes"
if test "x$enable_aosd_xcomp" = "xyes"; then
have_aosd_xcomp="yes"
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCOMPOSITE" >&5
$as_echo_n "checking for XCOMPOSITE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite\""; } >&5
+
+if test -n "$XCOMPOSITE_CFLAGS"; then
+ pkg_cv_XCOMPOSITE_CFLAGS="$XCOMPOSITE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite\""; } >&5
($PKG_CONFIG --exists --print-errors "xcomposite") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${XCOMPOSITE_CFLAGS}" != "x"; then
- pkg_cv_XCOMPOSITE_CFLAGS="${XCOMPOSITE_CFLAGS}"
- else
- pkg_cv_XCOMPOSITE_CFLAGS=`$PKG_CONFIG --cflags "xcomposite" 2>/dev/null`
- fi
- if test "x${XCOMPOSITE_LIBS}" != "x"; then
- pkg_cv_XCOMPOSITE_LIBS="${XCOMPOSITE_LIBS}"
- else
- pkg_cv_XCOMPOSITE_LIBS=`$PKG_CONFIG --libs "xcomposite" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_XCOMPOSITE_CFLAGS=`$PKG_CONFIG --cflags "xcomposite" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test -n "$XCOMPOSITE_LIBS"; then
+ pkg_cv_XCOMPOSITE_LIBS="$XCOMPOSITE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "xcomposite") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_XCOMPOSITE_LIBS=`$PKG_CONFIG --libs "xcomposite" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xcomposite" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "xcomposite" 2>&1`
else
- XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xcomposite" 2>&1`
+ XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "xcomposite" 2>&1`
fi
- echo "$XCOMPOSITE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_aosd_xcomp="no"
+ # Put the nasty error message in config.log where it belongs
+ echo "$XCOMPOSITE_PKG_ERRORS" >&5
+
+ have_aosd_xcomp="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&5
$as_echo "*** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&6; }
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_aosd_xcomp="no"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&5
$as_echo "*** X Composite extension not found, composite support for Audacious OSD will not be compiled ***" >&6; }
else
- XCOMPOSITE_CFLAGS="$pkg_cv_XCOMPOSITE_CFLAGS"
- XCOMPOSITE_LIBS="$pkg_cv_XCOMPOSITE_LIBS"
+ XCOMPOSITE_CFLAGS=$pkg_cv_XCOMPOSITE_CFLAGS
+ XCOMPOSITE_LIBS=$pkg_cv_XCOMPOSITE_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -8775,48 +10060,73 @@ fi
if test "x$enable_notify" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NOTIFY" >&5
$as_echo_n "checking for NOTIFY... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5
+
+if test -n "$NOTIFY_CFLAGS"; then
+ pkg_cv_NOTIFY_CFLAGS="$NOTIFY_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5
($PKG_CONFIG --exists --print-errors "libnotify") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${NOTIFY_CFLAGS}" != "x"; then
- pkg_cv_NOTIFY_CFLAGS="${NOTIFY_CFLAGS}"
- else
- pkg_cv_NOTIFY_CFLAGS=`$PKG_CONFIG --cflags "libnotify" 2>/dev/null`
- fi
- if test "x${NOTIFY_LIBS}" != "x"; then
- pkg_cv_NOTIFY_LIBS="${NOTIFY_LIBS}"
- else
- pkg_cv_NOTIFY_LIBS=`$PKG_CONFIG --libs "libnotify" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_NOTIFY_CFLAGS=`$PKG_CONFIG --cflags "libnotify" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NOTIFY_LIBS"; then
+ pkg_cv_NOTIFY_LIBS="$NOTIFY_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NOTIFY_LIBS=`$PKG_CONFIG --libs "libnotify" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- NOTIFY_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libnotify" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NOTIFY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify" 2>&1`
else
- NOTIFY_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libnotify" 2>&1`
+ NOTIFY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify" 2>&1`
fi
- echo "$NOTIFY_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$NOTIFY_PKG_ERRORS" >&5
+
+ have_notify="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_notify="no"
-elif test "x$pkg_failed" = "xuntried"; then
have_notify="no"
else
- NOTIFY_CFLAGS="$pkg_cv_NOTIFY_CFLAGS"
- NOTIFY_LIBS="$pkg_cv_NOTIFY_LIBS"
+ NOTIFY_CFLAGS=$pkg_cv_NOTIFY_CFLAGS
+ NOTIFY_LIBS=$pkg_cv_NOTIFY_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_notify="yes"
@@ -8830,6 +10140,94 @@ if test "x$have_notify" = "xyes"; then
fi
+# Check whether --enable-mpris2 was given.
+if test "${enable_mpris2+set}" = set; then :
+ enableval=$enable_mpris2; enable_mpris2=$enableval
+else
+ enable_mpris2=yes
+fi
+
+
+if test $enable_mpris2 = yes ; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO_UNIX" >&5
+$as_echo_n "checking for GIO_UNIX... " >&6; }
+
+if test -n "$GIO_UNIX_CFLAGS"; then
+ pkg_cv_GIO_UNIX_CFLAGS="$GIO_UNIX_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GIO_UNIX_CFLAGS=`$PKG_CONFIG --cflags "gio-unix-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GIO_UNIX_LIBS"; then
+ pkg_cv_GIO_UNIX_LIBS="$GIO_UNIX_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-unix-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GIO_UNIX_LIBS=`$PKG_CONFIG --libs "gio-unix-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GIO_UNIX_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gio-unix-2.0 >= 2.30" 2>&1`
+ else
+ GIO_UNIX_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gio-unix-2.0 >= 2.30" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GIO_UNIX_PKG_ERRORS" >&5
+
+ enable_mpris2=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ enable_mpris2=no
+else
+ GIO_UNIX_CFLAGS=$pkg_cv_GIO_UNIX_CFLAGS
+ GIO_UNIX_LIBS=$pkg_cv_GIO_UNIX_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ enable_mpris2=yes
+fi
+fi
+
+if test $enable_mpris2 = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS mpris2"
+
+
+fi
+
# Check whether --enable-adplug was given.
if test "${enable_adplug+set}" = set; then :
@@ -8842,51 +10240,76 @@ fi
if test "x$enable_adplug" = "xyes"; then
have_adplug="yes"
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BINIO" >&5
$as_echo_n "checking for BINIO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbinio >= 1.4\""; } >&5
+
+if test -n "$BINIO_CFLAGS"; then
+ pkg_cv_BINIO_CFLAGS="$BINIO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbinio >= 1.4\""; } >&5
($PKG_CONFIG --exists --print-errors "libbinio >= 1.4") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${BINIO_CFLAGS}" != "x"; then
- pkg_cv_BINIO_CFLAGS="${BINIO_CFLAGS}"
- else
- pkg_cv_BINIO_CFLAGS=`$PKG_CONFIG --cflags "libbinio >= 1.4" 2>/dev/null`
- fi
- if test "x${BINIO_LIBS}" != "x"; then
- pkg_cv_BINIO_LIBS="${BINIO_LIBS}"
- else
- pkg_cv_BINIO_LIBS=`$PKG_CONFIG --libs "libbinio >= 1.4" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_BINIO_CFLAGS=`$PKG_CONFIG --cflags "libbinio >= 1.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$BINIO_LIBS"; then
+ pkg_cv_BINIO_LIBS="$BINIO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbinio >= 1.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libbinio >= 1.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_BINIO_LIBS=`$PKG_CONFIG --libs "libbinio >= 1.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- BINIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libbinio >= 1.4" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ BINIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libbinio >= 1.4" 2>&1`
else
- BINIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libbinio >= 1.4" 2>&1`
+ BINIO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libbinio >= 1.4" 2>&1`
fi
- echo "$BINIO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$BINIO_PKG_ERRORS" >&5
+
+ have_adplug=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_adplug=no
-elif test "x$pkg_failed" = "xuntried"; then
have_adplug=no
else
- BINIO_CFLAGS="$pkg_cv_BINIO_CFLAGS"
- BINIO_LIBS="$pkg_cv_BINIO_LIBS"
+ BINIO_CFLAGS=$pkg_cv_BINIO_CFLAGS
+ BINIO_LIBS=$pkg_cv_BINIO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** AdPlug plugin disabled per user request ***" >&5
@@ -8910,54 +10333,79 @@ fi
if test "x$enable_vorbis" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OGG_VORBIS" >&5
$as_echo_n "checking for OGG_VORBIS... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1\""; } >&5
+
+if test -n "$OGG_VORBIS_CFLAGS"; then
+ pkg_cv_OGG_VORBIS_CFLAGS="$OGG_VORBIS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1\""; } >&5
($PKG_CONFIG --exists --print-errors "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${OGG_VORBIS_CFLAGS}" != "x"; then
- pkg_cv_OGG_VORBIS_CFLAGS="${OGG_VORBIS_CFLAGS}"
- else
- pkg_cv_OGG_VORBIS_CFLAGS=`$PKG_CONFIG --cflags "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>/dev/null`
- fi
- if test "x${OGG_VORBIS_LIBS}" != "x"; then
- pkg_cv_OGG_VORBIS_LIBS="${OGG_VORBIS_LIBS}"
- else
- pkg_cv_OGG_VORBIS_LIBS=`$PKG_CONFIG --libs "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_OGG_VORBIS_CFLAGS=`$PKG_CONFIG --cflags "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$OGG_VORBIS_LIBS"; then
+ pkg_cv_OGG_VORBIS_LIBS="$OGG_VORBIS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_OGG_VORBIS_LIBS=`$PKG_CONFIG --libs "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>&1`
else
- OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>&1`
+ OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ogg >= 1.0 vorbis >= 1.1 vorbisfile >= 1.1" 2>&1`
fi
- echo "$OGG_VORBIS_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libogg/libvorbis, Ogg Vorbis support will not be built ***" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$OGG_VORBIS_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libogg/libvorbis, Ogg Vorbis support will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libogg/libvorbis, Ogg Vorbis support will not be built ***" >&2;}
have_oggvorbis=no
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libogg/libvorbis, Ogg Vorbis support will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libogg/libvorbis, Ogg Vorbis support will not be built ***" >&2;}
have_oggvorbis=no
else
- OGG_VORBIS_CFLAGS="$pkg_cv_OGG_VORBIS_CFLAGS"
- OGG_VORBIS_LIBS="$pkg_cv_OGG_VORBIS_LIBS"
+ OGG_VORBIS_CFLAGS=$pkg_cv_OGG_VORBIS_CFLAGS
+ OGG_VORBIS_LIBS=$pkg_cv_OGG_VORBIS_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_oggvorbis=yes
@@ -8984,160 +10432,82 @@ fi
if test "x$enable_flacng" = "xyes"; then
-# Check whether --with-libFLAC was given.
-if test "${with_libFLAC+set}" = set; then :
- withval=$with_libFLAC; libFLAC_prefix="$withval"
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBFLAC" >&5
+$as_echo_n "checking for LIBFLAC... " >&6; }
+
+if test -n "$LIBFLAC_CFLAGS"; then
+ pkg_cv_LIBFLAC_CFLAGS="$LIBFLAC_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flac >= 1.2.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "flac >= 1.2.1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBFLAC_CFLAGS=`$PKG_CONFIG --cflags "flac >= 1.2.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- libFLAC_prefix=""
+ pkg_failed=yes
fi
-
-
-# Check whether --with-libFLAC-libraries was given.
-if test "${with_libFLAC_libraries+set}" = set; then :
- withval=$with_libFLAC_libraries; libFLAC_libraries="$withval"
-else
- libFLAC_libraries=""
+ else
+ pkg_failed=untried
fi
-
-
-# Check whether --with-libFLAC-includes was given.
-if test "${with_libFLAC_includes+set}" = set; then :
- withval=$with_libFLAC_includes; libFLAC_includes="$withval"
+if test -n "$LIBFLAC_LIBS"; then
+ pkg_cv_LIBFLAC_LIBS="$LIBFLAC_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flac >= 1.2.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "flac >= 1.2.1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBFLAC_LIBS=`$PKG_CONFIG --libs "flac >= 1.2.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- libFLAC_includes=""
+ pkg_failed=yes
fi
-
-# Check whether --enable-libFLACtest was given.
-if test "${enable_libFLACtest+set}" = set; then :
- enableval=$enable_libFLACtest;
-else
- enable_libFLACtest=yes
+ else
+ pkg_failed=untried
fi
- if test "x$libFLAC_libraries" != "x" ; then
- LIBFLAC_LIBS="-L$libFLAC_libraries"
- elif test "x$libFLAC_prefix" != "x" ; then
- LIBFLAC_LIBS="-L$libFLAC_prefix/lib"
- elif test "x$prefix" != "xNONE" ; then
- LIBFLAC_LIBS="-L$libdir"
- fi
-
- LIBFLAC_LIBS="$LIBFLAC_LIBS -lFLAC -lm"
-
- if test "x$libFLAC_includes" != "x" ; then
- LIBFLAC_CFLAGS="-I$libFLAC_includes"
- elif test "x$libFLAC_prefix" != "x" ; then
- LIBFLAC_CFLAGS="-I$libFLAC_prefix/include"
- elif test "x$prefix" != "xNONE"; then
- LIBFLAC_CFLAGS="-I$prefix/include"
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libFLAC >= 1.1.2" >&5
-$as_echo_n "checking for libFLAC >= 1.1.2... " >&6; }
- no_libFLAC=""
-
- if test "x$enable_libFLACtest" = "xyes" ; then
- ac_save_CFLAGS="$CFLAGS"
- ac_save_CXXFLAGS="$CXXFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $LIBFLAC_CFLAGS"
- CXXFLAGS="$CXXFLAGS $LIBFLAC_CFLAGS"
- LIBS="$LIBS $LIBFLAC_LIBS"
- rm -f conf.libFLACtest
- if test "$cross_compiling" = yes; then :
- echo $ac_n "cross compiling; assumed OK... $ac_c"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <FLAC/all.h>
-
-int main ()
-{
-FLAC__format_vorbiscomment_entry_name_is_legal("foo");
- system("touch conf.libFLACtest");
- return 0;
-}
-
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- no_libFLAC=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBFLAC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "flac >= 1.2.1" 2>&1`
+ else
+ LIBFLAC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "flac >= 1.2.1" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBFLAC_PKG_ERRORS" >&5
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libFLAC 1.2.1+, FLAC support will not be built ***" >&5
+$as_echo "$as_me: WARNING: *** Cannot find libFLAC 1.2.1+, FLAC support will not be built ***" >&2;}
+ have_flacng=no
- if test "x$no_libFLAC" = "x" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_flacng=yes
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- if test -f conf.libFLACtest ; then
- :
- else
- echo "*** Could not run libFLAC test program, checking why..."
- CFLAGS="$CFLAGS $LIBFLAC_CFLAGS"
- LIBS="$LIBS $LIBFLAC_LIBS"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <stdio.h>
-#include <FLAC/format.h>
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libFLAC 1.2.1+, FLAC support will not be built ***" >&5
+$as_echo "$as_me: WARNING: *** Cannot find libFLAC 1.2.1+, FLAC support will not be built ***" >&2;}
+ have_flacng=no
-int
-main ()
-{
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- echo "*** The test program compiled, but did not run. This usually means"
- echo "*** that the run-time linker is not finding libFLAC or finding the wrong"
- echo "*** version of libFLAC. If it is not finding libFLAC, you'll need to set your"
- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
- echo "*** is required on your system"
- echo "***"
- echo "*** If you have an old version installed, it is best to remove it, although"
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
else
- echo "*** The test program failed to compile or link. See the file config.log for the"
- echo "*** exact error that occured. This usually means libFLAC was incorrectly installed"
- echo "*** or that you have moved libFLAC since it was installed. In the latter case, you"
- echo "*** may want to edit the libFLAC-config script: $LIBFLAC_CONFIG"
+ LIBFLAC_CFLAGS=$pkg_cv_LIBFLAC_CFLAGS
+ LIBFLAC_LIBS=$pkg_cv_LIBFLAC_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_flacng=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- LIBFLAC_CFLAGS=""
- LIBFLAC_LIBS=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libFLAC, FLACng will not be built ***" >&5
-$as_echo "$as_me: WARNING: *** Cannot find libFLAC, FLACng will not be built ***" >&2;}
- have_flacng=no
-
- fi
-
-
- rm -f conf.libFLACtest
-
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: *** FLACng plugin disabled per user request ***" >&5
$as_echo "*** FLACng plugin disabled per user request ***" >&6; }
@@ -9159,54 +10529,79 @@ fi
if test "x$enable_wavpack" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for WAVPACK" >&5
$as_echo_n "checking for WAVPACK... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wavpack >= 4.31\""; } >&5
+
+if test -n "$WAVPACK_CFLAGS"; then
+ pkg_cv_WAVPACK_CFLAGS="$WAVPACK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wavpack >= 4.31\""; } >&5
($PKG_CONFIG --exists --print-errors "wavpack >= 4.31") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${WAVPACK_CFLAGS}" != "x"; then
- pkg_cv_WAVPACK_CFLAGS="${WAVPACK_CFLAGS}"
- else
- pkg_cv_WAVPACK_CFLAGS=`$PKG_CONFIG --cflags "wavpack >= 4.31" 2>/dev/null`
- fi
- if test "x${WAVPACK_LIBS}" != "x"; then
- pkg_cv_WAVPACK_LIBS="${WAVPACK_LIBS}"
- else
- pkg_cv_WAVPACK_LIBS=`$PKG_CONFIG --libs "wavpack >= 4.31" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_WAVPACK_CFLAGS=`$PKG_CONFIG --cflags "wavpack >= 4.31" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$WAVPACK_LIBS"; then
+ pkg_cv_WAVPACK_LIBS="$WAVPACK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wavpack >= 4.31\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "wavpack >= 4.31") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_WAVPACK_LIBS=`$PKG_CONFIG --libs "wavpack >= 4.31" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- WAVPACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wavpack >= 4.31" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ WAVPACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "wavpack >= 4.31" 2>&1`
else
- WAVPACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wavpack >= 4.31" 2>&1`
+ WAVPACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "wavpack >= 4.31" 2>&1`
fi
- echo "$WAVPACK_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find WavPack 4.31+, WavPack support will not be built ***" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$WAVPACK_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find WavPack 4.31+, WavPack support will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find WavPack 4.31+, WavPack support will not be built ***" >&2;}
have_wavpack=no
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find WavPack 4.31+, WavPack support will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find WavPack 4.31+, WavPack support will not be built ***" >&2;}
have_wavpack=no
else
- WAVPACK_CFLAGS="$pkg_cv_WAVPACK_CFLAGS"
- WAVPACK_LIBS="$pkg_cv_WAVPACK_LIBS"
+ WAVPACK_CFLAGS=$pkg_cv_WAVPACK_CFLAGS
+ WAVPACK_LIBS=$pkg_cv_WAVPACK_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_wavpack=yes
@@ -9326,50 +10721,75 @@ fi
if test "x$enable_sndfile" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5
$as_echo_n "checking for SNDFILE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 0.19\""; } >&5
+
+if test -n "$SNDFILE_CFLAGS"; then
+ pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 0.19\""; } >&5
($PKG_CONFIG --exists --print-errors "sndfile >= 0.19") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${SNDFILE_CFLAGS}" != "x"; then
- pkg_cv_SNDFILE_CFLAGS="${SNDFILE_CFLAGS}"
- else
- pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 0.19" 2>/dev/null`
- fi
- if test "x${SNDFILE_LIBS}" != "x"; then
- pkg_cv_SNDFILE_LIBS="${SNDFILE_LIBS}"
- else
- pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 0.19" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 0.19" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SNDFILE_LIBS"; then
+ pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 0.19\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "sndfile >= 0.19") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 0.19" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile >= 0.19" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile >= 0.19" 2>&1`
else
- SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile >= 0.19" 2>&1`
+ SNDFILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile >= 0.19" 2>&1`
fi
- echo "$SNDFILE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- enable_sndfile=no
+ # Put the nasty error message in config.log where it belongs
+ echo "$SNDFILE_PKG_ERRORS" >&5
-elif test "x$pkg_failed" = "xuntried"; then
+ enable_sndfile=no
+
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
enable_sndfile=no
else
- SNDFILE_CFLAGS="$pkg_cv_SNDFILE_CFLAGS"
- SNDFILE_LIBS="$pkg_cv_SNDFILE_LIBS"
+ SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS
+ SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
enable_sndfile=yes
@@ -9394,307 +10814,478 @@ else
fi
-if test "x$enable_modplug" = "xyes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS modplug"
- have_modplug="yes"
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** ModPlug plugin disabled per user request ***" >&5
-$as_echo "*** ModPlug plugin disabled per user request ***" >&6; }
- have_modplug="no"
-fi
-
+if test $enable_modplug = yes ; then
-have_ffaudio="no"
-# Check whether --enable-ffaudio was given.
-if test "${enable_ffaudio+set}" = set; then :
- enableval=$enable_ffaudio; enable_ffaudio=$enableval
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MODPLUG" >&5
+$as_echo_n "checking for MODPLUG... " >&6; }
+
+if test -n "$MODPLUG_CFLAGS"; then
+ pkg_cv_MODPLUG_CFLAGS="$MODPLUG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmodplug\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmodplug") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MODPLUG_CFLAGS=`$PKG_CONFIG --cflags "libmodplug" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- enable_ffaudio="yes"
-
+ pkg_failed=yes
fi
-
-
-
-if test $enable_ffaudio = yes ; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NEED_AVCORE" >&5
-$as_echo_n "checking for NEED_AVCORE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 52.94.3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libavcodec >= 52.94.3") 2>&5
+ else
+ pkg_failed=untried
+fi
+if test -n "$MODPLUG_LIBS"; then
+ pkg_cv_MODPLUG_LIBS="$MODPLUG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmodplug\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmodplug") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${NEED_AVCORE_CFLAGS}" != "x"; then
- pkg_cv_NEED_AVCORE_CFLAGS="${NEED_AVCORE_CFLAGS}"
- else
- pkg_cv_NEED_AVCORE_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 52.94.3" 2>/dev/null`
- fi
- if test "x${NEED_AVCORE_LIBS}" != "x"; then
- pkg_cv_NEED_AVCORE_LIBS="${NEED_AVCORE_LIBS}"
- else
- pkg_cv_NEED_AVCORE_LIBS=`$PKG_CONFIG --libs "libavcodec >= 52.94.3" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_MODPLUG_LIBS=`$PKG_CONFIG --libs "libmodplug" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- NEED_AVCORE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libavcodec >= 52.94.3" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ MODPLUG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmodplug" 2>&1`
else
- NEED_AVCORE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libavcodec >= 52.94.3" 2>&1`
+ MODPLUG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmodplug" 2>&1`
fi
- echo "$NEED_AVCORE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$MODPLUG_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libmodplug; modplug plugin disabled ***" >&5
+$as_echo "$as_me: WARNING: *** Cannot find libmodplug; modplug plugin disabled ***" >&2;}
+ have_modplug=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_new_ffmpeg=no
-elif test "x$pkg_failed" = "xuntried"; then
- have_new_ffmpeg=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libmodplug; modplug plugin disabled ***" >&5
+$as_echo "$as_me: WARNING: *** Cannot find libmodplug; modplug plugin disabled ***" >&2;}
+ have_modplug=no
else
- NEED_AVCORE_CFLAGS="$pkg_cv_NEED_AVCORE_CFLAGS"
- NEED_AVCORE_LIBS="$pkg_cv_NEED_AVCORE_LIBS"
+ MODPLUG_CFLAGS=$pkg_cv_MODPLUG_CFLAGS
+ MODPLUG_LIBS=$pkg_cv_MODPLUG_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- have_new_ffmpeg=yes
+ INPUT_PLUGINS="$INPUT_PLUGINS modplug"
+ have_modplug=yes
+fi
+fi
+
+
+have_ffaudio="no"
+# Check whether --enable-ffaudio was given.
+if test "${enable_ffaudio+set}" = set; then :
+ enableval=$enable_ffaudio; enable_ffaudio=$enableval
+else
+ enable_ffaudio="yes"
+
fi
- if test $have_new_ffmpeg = yes ; then
- pkg_failed=no
+
+if test $enable_ffaudio = yes ; then
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5
$as_echo_n "checking for FFMPEG... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0") 2>&5
+
+if test -n "$FFMPEG_CFLAGS"; then
+ pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${FFMPEG_CFLAGS}" != "x"; then
- pkg_cv_FFMPEG_CFLAGS="${FFMPEG_CFLAGS}"
- else
- pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>/dev/null`
- fi
- if test "x${FFMPEG_LIBS}" != "x"; then
- pkg_cv_FFMPEG_LIBS="${FFMPEG_LIBS}"
- else
- pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>&1`
- else
- FFMPEG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>&1`
- fi
- echo "$FFMPEG_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_ffaudio=no
-elif test "x$pkg_failed" = "xuntried"; then
- have_ffaudio=no
-else
- FFMPEG_CFLAGS="$pkg_cv_FFMPEG_CFLAGS"
- FFMPEG_LIBS="$pkg_cv_FFMPEG_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_ffaudio=yes
+ else
+ pkg_failed=untried
fi
- else
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5
-$as_echo_n "checking for FFMPEG... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0") 2>&5
+if test -n "$FFMPEG_LIBS"; then
+ pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${FFMPEG_CFLAGS}" != "x"; then
- pkg_cv_FFMPEG_CFLAGS="${FFMPEG_CFLAGS}"
- else
- pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>/dev/null`
- fi
- if test "x${FFMPEG_LIBS}" != "x"; then
- pkg_cv_FFMPEG_LIBS="${FFMPEG_LIBS}"
- else
- pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0" 2>&1`
else
- FFMPEG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0" 2>&1`
+ FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0" 2>&1`
fi
- echo "$FFMPEG_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$FFMPEG_PKG_ERRORS" >&5
+
+ have_ffaudio=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_ffaudio=no
-elif test "x$pkg_failed" = "xuntried"; then
have_ffaudio=no
else
- FFMPEG_CFLAGS="$pkg_cv_FFMPEG_CFLAGS"
- FFMPEG_LIBS="$pkg_cv_FFMPEG_LIBS"
+ FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS
+ FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_ffaudio=yes
fi
- fi
fi
if test "x$have_ffaudio" = "xyes"; then
INPUT_PLUGINS="$INPUT_PLUGINS ffaudio"
fi
+
# Check whether --enable-jack was given.
if test "${enable_jack+set}" = set; then :
enableval=$enable_jack; enable_jack=$enableval
else
- enable_jack="yes"
+ enable_jack=yes
fi
-if test "x$enable_jack" = "xyes"; then
- pkg_failed=no
+if test $enable_jack = yes ; then
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5
$as_echo_n "checking for JACK... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.100.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "jack >= 0.100.0") 2>&5
+
+if test -n "$JACK_CFLAGS"; then
+ pkg_cv_JACK_CFLAGS="$JACK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 1.9.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "jack >= 1.9.7") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${JACK_CFLAGS}" != "x"; then
- pkg_cv_JACK_CFLAGS="${JACK_CFLAGS}"
- else
- pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.100.0" 2>/dev/null`
- fi
- if test "x${JACK_LIBS}" != "x"; then
- pkg_cv_JACK_LIBS="${JACK_LIBS}"
+ pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 1.9.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$JACK_LIBS"; then
+ pkg_cv_JACK_LIBS="$JACK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 1.9.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "jack >= 1.9.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 1.9.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack >= 1.9.7" 2>&1`
else
- pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.100.0" 2>/dev/null`
+ JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack >= 1.9.7" 2>&1`
fi
- else
- pkg_failed="yes"
- fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$JACK_PKG_ERRORS" >&5
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5
+$as_echo_n "checking for JACK... " >&6; }
+
+if test -n "$JACK_CFLAGS"; then
+ pkg_cv_JACK_CFLAGS="$JACK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.120.1 jack < 1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "jack >= 0.120.1 jack < 1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.120.1 jack < 1.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$JACK_LIBS"; then
+ pkg_cv_JACK_LIBS="$JACK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.120.1 jack < 1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "jack >= 0.120.1 jack < 1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.120.1 jack < 1.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "jack >= 0.100.0" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack >= 0.120.1 jack < 1.0" 2>&1`
else
- JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.100.0" 2>&1`
+ JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack >= 0.120.1 jack < 1.0" 2>&1`
fi
- echo "$JACK_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$JACK_PKG_ERRORS" >&5
+
+ enable_jack=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_jack=no
-elif test "x$pkg_failed" = "xuntried"; then
- have_jack=no
+ enable_jack=no
else
- JACK_CFLAGS="$pkg_cv_JACK_CFLAGS"
- JACK_LIBS="$pkg_cv_JACK_LIBS"
+ JACK_CFLAGS=$pkg_cv_JACK_CFLAGS
+ JACK_LIBS=$pkg_cv_JACK_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- have_jack=yes
+ enable_jack=$enable_jack
fi
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5
-$as_echo_n "checking for SAMPLERATE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate >= 0.0.15\""; } >&5
- ($PKG_CONFIG --exists --print-errors "samplerate >= 0.0.15") 2>&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5
+$as_echo_n "checking for JACK... " >&6; }
+
+if test -n "$JACK_CFLAGS"; then
+ pkg_cv_JACK_CFLAGS="$JACK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.120.1 jack < 1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "jack >= 0.120.1 jack < 1.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${SAMPLERATE_CFLAGS}" != "x"; then
- pkg_cv_SAMPLERATE_CFLAGS="${SAMPLERATE_CFLAGS}"
- else
- pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate >= 0.0.15" 2>/dev/null`
- fi
- if test "x${SAMPLERATE_LIBS}" != "x"; then
- pkg_cv_SAMPLERATE_LIBS="${SAMPLERATE_LIBS}"
- else
- pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate >= 0.0.15" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.120.1 jack < 1.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$JACK_LIBS"; then
+ pkg_cv_JACK_LIBS="$JACK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.120.1 jack < 1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "jack >= 0.120.1 jack < 1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.120.1 jack < 1.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "samplerate >= 0.0.15" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack >= 0.120.1 jack < 1.0" 2>&1`
else
- SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "samplerate >= 0.0.15" 2>&1`
+ JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack >= 0.120.1 jack < 1.0" 2>&1`
fi
- echo "$SAMPLERATE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$JACK_PKG_ERRORS" >&5
+
+ enable_jack=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- ac_cv_samplerate=0
-elif test "x$pkg_failed" = "xuntried"; then
- ac_cv_samplerate=0
+ enable_jack=no
else
- SAMPLERATE_CFLAGS="$pkg_cv_SAMPLERATE_CFLAGS"
- SAMPLERATE_LIBS="$pkg_cv_SAMPLERATE_LIBS"
+ JACK_CFLAGS=$pkg_cv_JACK_CFLAGS
+ JACK_LIBS=$pkg_cv_JACK_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- ac_cv_samplerate=1
+ enable_jack=$enable_jack
fi
+else
+ JACK_CFLAGS=$pkg_cv_JACK_CFLAGS
+ JACK_LIBS=$pkg_cv_JACK_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ enable_jack=$enable_jack
+fi
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SAMPLERATE ${ac_cv_samplerate}
-_ACEOF
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5
+$as_echo_n "checking for SAMPLERATE... " >&6; }
-if test "x${ac_cv_samplerate}" = "x0"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find libsamplerate, necessary for jack output plugin." >&5
-$as_echo "$as_me: WARNING: Could not find libsamplerate, necessary for jack output plugin." >&2;}
- have_jack=no
+if test -n "$SAMPLERATE_CFLAGS"; then
+ pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "samplerate") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SAMPLERATE_LIBS"; then
+ pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "samplerate") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$have_jack" = "xno"; then
- have_jack=no
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- have_jack=yes
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "samplerate" 2>&1`
+ else
+ SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "samplerate" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SAMPLERATE_PKG_ERRORS" >&5
-
+ enable_jack=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ enable_jack=no
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** jack plugin disabled per user request ***" >&5
-$as_echo "*** jack plugin disabled per user request ***" >&6; }
- have_jack=no
+ SAMPLERATE_CFLAGS=$pkg_cv_SAMPLERATE_CFLAGS
+ SAMPLERATE_LIBS=$pkg_cv_SAMPLERATE_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ enable_jack=$enable_jack
fi
-if test "x$have_jack" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS jack"
+ if test $enable_jack = yes ; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS jack"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** JACK or libsamplerate not found; JACK output plugin disabled" >&5
+$as_echo "*** JACK or libsamplerate not found; JACK output plugin disabled" >&6; }
+ fi
fi
# Check whether --enable-sid was given.
@@ -10828,7 +12419,7 @@ $as_echo "$xs_builders_works" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for HardSID builder module" >&5
$as_echo_n "checking for HardSID builder module... " >&6; }
-# xs_try_library ( builders:$BUILDERS_CFLAGS:$BUILDERS_LDFLAGS:hardsid-builder:sidplay/builders/hardsid.h:HardSID *sid; )
+# xs_try_library ( builders:$BUILDERS_CFLAGS:$BUILDERS_LDFLAGS:hardsid-builder:sidplay/builders/hardsid.h:HardSIDBuilder *sid; )
xs_cxxflags_save="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS $BUILDERS_CFLAGS"
@@ -10843,7 +12434,7 @@ $as_echo_n "checking for HardSID builder module... " >&6; }
int
main ()
{
-HardSID *sid;
+HardSIDBuilder *sid;
;
return 0;
@@ -11000,369 +12591,461 @@ fi
# Check whether --enable-oss was given.
if test "${enable_oss+set}" = set; then :
- enableval=$enable_oss; enable_oss=$enableval
+ enableval=$enable_oss; enable_oss="$enableval"
else
- enable_oss=yes
+ enable_oss="no"
fi
-have_oss=no
-if test "x$enable_oss" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSS include dir" >&5
-$as_echo_n "checking for OSS include dir... " >&6; }
- OSS_CFLAGS=""
- if test -f "/etc/oss.conf" ; then
- for i in `cat /etc/oss.conf`; do
- t=`echo $i | sed -e 's/OSSLIBDIR=//'`
- if test "x$i" != "x$t" ; then
- if test -f "$t/include/sys/soundcard.h" -o -f "$i/include/soundcard.h" ; then
- OSS_CFLAGS="-I$t/include"
- fi
- fi
- done
- fi
- if test -n "$OSS_CFLAGS" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OSS_CFLAGS" >&5
-$as_echo "$OSS_CFLAGS" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- fi
- CFLAGS_save=$CFLAGS
- CFLAGS="$CFLAGS $OSS_CFLAGS"
- for ac_header in soundcard.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "soundcard.h" "ac_cv_header_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_soundcard_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SOUNDCARD_H 1
-_ACEOF
+# Check whether --enable-oss4 was given.
+if test "${enable_oss4+set}" = set; then :
+ enableval=$enable_oss4; enable_oss4="$enableval"
+else
+ enable_oss4="yes"
fi
-done
- for ac_header in sys/soundcard.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_soundcard_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_SOUNDCARD_H 1
-_ACEOF
+have_oss="no"
+have_oss4="no"
+OSS_CFLAGS=""
-fi
+if test "$enable_oss" = "yes" || test "$enable_oss4" = "yes" ; then
+ if test -f "/etc/oss.conf"; then
+ . "/etc/oss.conf"
+ OSS_CFLAGS="-I$OSSLIBDIR/include"
+ fi
-done
+ OLD_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $OSS_CFLAGS"
- for ac_header in machine/soundcard.h
+ for ac_header in sys/soundcard.h soundcard.h
do :
- ac_fn_c_check_header_mongrel "$LINENO" "machine/soundcard.h" "ac_cv_header_machine_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_machine_soundcard_h" = xyes; then :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_MACHINE_SOUNDCARD_H 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
-
+ have_oss="yes"
+else
+ have_oss="$have_oss"
fi
done
- CFLAGS=$CFLAGS_save
- if test "x${ac_cv_header_soundcard_h}" = "xyes" || test "x${ac_cv_header_sys_soundcard_h}" = "xyes" || test "x${ac_cv_header_machine_soundcard_h}" = "xyes"; then
- have_oss=yes
- fi
+ if test "$enable_oss4" = "yes" && test "$have_oss" = "yes" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSS4" >&5
+$as_echo_n "checking for OSS4... " >&6; }
- if test "x${have_oss}" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -lossaudio" >&5
-$as_echo_n "checking whether we need -lossaudio... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
- #include <sys/ioctl.h>
- #ifdef HAVE_SYS_SOUNDCARD_H
- #include <sys/soundcard.h>
- #else
- #include <soundcard.h>
- #endif
-
-int
-main ()
-{
-
- int fd, value;
- ioctl(fd, SOUND_MIXER_READ_VOLUME, &value);
-
- ;
- return 0;
-}
+#ifdef HAVE_SYS_SOUNDCARD_H
+ #include <sys/soundcard.h>
+ #else
+ #include <soundcard.h>
+ #endif
+ #if OSS_VERSION >= 0x40000 || SOUND_VERSION >= 0x40000
+ yes
+ #endif
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ have_oss4="yes"
else
+ have_oss4="no"
+fi
+rm -f conftest*
- OSS_LIBS="-lossaudio"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_oss4" >&5
+$as_echo "$have_oss4" >&6; }
+ fi
+
+ CPPFLAGS="$OLD_CPPFLAGS"
fi
-if test "x$have_oss" = "xyes"; then
-$as_echo "#define HAVE_OSS 1" >>confdefs.h
-else
- have_oss=no
+if test "$enable_oss" = "yes" && test "$have_oss" = "no" ; then
+ enable_oss="no"
fi
-if test "x$have_oss" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS OSS"
+if test "$enable_oss" = "yes"; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS OSS"
fi
+if test "$enable_oss4" = "yes" && test "$have_oss4" = "no" ; then
+ enable_oss4="no"
+fi
+if test "$enable_oss4" = "yes"; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS oss4"
+fi
-
-# Check whether --enable-oss4 was given.
-if test "${enable_oss4+set}" = set; then :
- enableval=$enable_oss4; enable_oss4=$enableval
+# Check whether --enable-alsa was given.
+if test "${enable_alsa+set}" = set; then :
+ enableval=$enable_alsa; enable_alsa=$enableval
else
- enable_oss4=no
+ enable_alsa=yes
fi
-have_oss4=no
-if test "x$enable_oss4" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSS4 include dir" >&5
-$as_echo_n "checking for OSS4 include dir... " >&6; }
- OSS4_CFLAGS=""
- if test -f "/etc/oss.conf" ; then
- for i in `cat /etc/oss.conf`; do
- t=`echo $i | sed -e 's/OSSLIBDIR=//'`
- if test "x$i" != "x$t" ; then
- if test -f "$t/include/sys/soundcard.h" -o -f "$i/include/soundcard.h" ; then
- OSS4_CFLAGS="-I$t/include"
- fi
- fi
- done
- fi
- if test -n "$OSS4_CFLAGS" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OSS4_CFLAGS" >&5
-$as_echo "$OSS4_CFLAGS" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
- fi
- CFLAGS_save=$CFLAGS
- CFLAGS="$CFLAGS $OSS4_CFLAGS"
- for ac_header in soundcard.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "soundcard.h" "ac_cv_header_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_soundcard_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SOUNDCARD_H 1
-_ACEOF
+if test "x$enable_alsa" = "xyes"; then
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5
+$as_echo_n "checking for ALSA... " >&6; }
+
+if test -n "$ALSA_CFLAGS"; then
+ pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "alsa >= 1.0.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa >= 1.0.16" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$ALSA_LIBS"; then
+ pkg_cv_ALSA_LIBS="$ALSA_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0.16\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "alsa >= 1.0.16") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa >= 1.0.16" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-done
- for ac_header in sys/soundcard.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_soundcard_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_SOUNDCARD_H 1
-_ACEOF
-fi
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-done
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "alsa >= 1.0.16" 2>&1`
+ else
+ ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "alsa >= 1.0.16" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$ALSA_PKG_ERRORS" >&5
- for ac_header in machine/soundcard.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "machine/soundcard.h" "ac_cv_header_machine_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_machine_soundcard_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_MACHINE_SOUNDCARD_H 1
-_ACEOF
+ have_alsa=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ have_alsa=no
+else
+ ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS
+ ALSA_LIBS=$pkg_cv_ALSA_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_alsa=yes
+fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** ALSA output plugin disabled per user request ***" >&5
+$as_echo "*** ALSA output plugin disabled per user request ***" >&6; }
+ have_alsa=no
+fi
+if test "x$have_alsa" = "xyes"; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS alsa"
fi
-done
- CFLAGS=$CFLAGS_save
+# Check whether --enable-sdlout was given.
+if test "${enable_sdlout+set}" = set; then :
+ enableval=$enable_sdlout; enable_sdlout=$enableval
+else
+ enable_sdlout=yes
+fi
- if test "x${ac_cv_header_soundcard_h}" = "xyes" || test "x${ac_cv_header_sys_soundcard_h}" = "xyes" || test "x${ac_cv_header_machine_soundcard_h}" = "xyes"; then
- have_oss4=yes
- fi
- if test "x${have_oss4}" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -lossaudio" >&5
-$as_echo_n "checking whether we need -lossaudio... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+if test $enable_sdlout = yes ; then
- #include <sys/ioctl.h>
- #ifdef HAVE_SYS_SOUNDCARD_H
- #include <sys/soundcard.h>
- #else
- #include <soundcard.h>
- #endif
+# Check whether --with-sdl-prefix was given.
+if test "${with_sdl_prefix+set}" = set; then :
+ withval=$with_sdl_prefix; sdl_prefix="$withval"
+else
+ sdl_prefix=""
+fi
-int
-main ()
-{
- int fd, value;
- ioctl(fd, SOUND_MIXER_READ_VOLUME, &value);
+# Check whether --with-sdl-exec-prefix was given.
+if test "${with_sdl_exec_prefix+set}" = set; then :
+ withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval"
+else
+ sdl_exec_prefix=""
+fi
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+# Check whether --enable-sdltest was given.
+if test "${enable_sdltest+set}" = set; then :
+ enableval=$enable_sdltest;
else
+ enable_sdltest=yes
+fi
- OSS_LIBS="-lossaudio"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ if test x$sdl_exec_prefix != x ; then
+ sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
+ fi
+ fi
+ if test x$sdl_prefix != x ; then
+ sdl_config_args="$sdl_config_args --prefix=$sdl_prefix"
+ if test x${SDL_CONFIG+set} != xset ; then
+ SDL_CONFIG=$sdl_prefix/bin/sdl-config
+ fi
+ fi
+
+ as_save_PATH="$PATH"
+ if test "x$prefix" != xNONE; then
+ PATH="$prefix/bin:$prefix/usr/bin:$PATH"
+ fi
+ # Extract the first word of "sdl-config", so it can be a program name with args.
+set dummy sdl-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_SDL_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $SDL_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no"
+ ;;
+esac
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
+SDL_CONFIG=$ac_cv_path_SDL_CONFIG
+if test -n "$SDL_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5
+$as_echo "$SDL_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-if test "x$have_oss4" = "xyes"; then
-$as_echo "#define HAVE_OSS4 1" >>confdefs.h
+ PATH="$as_save_PATH"
+ min_sdl_version=1.2.5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5
+$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; }
+ no_sdl=""
+ if test "$SDL_CONFIG" = "no" ; then
+ no_sdl=yes
+ else
+ SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags`
+ SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs`
+ sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+ sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+ sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
+ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+ if test "x$enable_sdltest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ rm -f conf.sdltest
+ if test "$cross_compiling" = yes; then :
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
else
- have_oss4=no
-fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-if test "x$have_oss4" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS oss4"
-fi
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "SDL.h"
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+ if (str)
+ {
+ new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+ return new_str;
+}
-# Check whether --enable-alsa was given.
-if test "${enable_alsa+set}" = set; then :
- enableval=$enable_alsa; enable_alsa=$enableval
-else
- enable_alsa=yes
+int main (int argc, char *argv[])
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ /* This hangs on some systems (?)
+ system ("touch conf.sdltest");
+ */
+ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_sdl_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_sdl_version");
+ exit(1);
+ }
+
+ if (($sdl_major_version > major) ||
+ (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
+ (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
+ printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
+ printf("*** to point to the correct copy of sdl-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
-fi
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
-if test "x$enable_alsa" = "xyes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5
-$as_echo_n "checking for ALSA... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "alsa >= 1.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${ALSA_CFLAGS}" != "x"; then
- pkg_cv_ALSA_CFLAGS="${ALSA_CFLAGS}"
- else
- pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa >= 1.0" 2>/dev/null`
- fi
- if test "x${ALSA_LIBS}" != "x"; then
- pkg_cv_ALSA_LIBS="${ALSA_LIBS}"
- else
- pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa >= 1.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
else
- pkg_failed="untried"
+ no_sdl=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "alsa >= 1.0" 2>&1`
- else
- ALSA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "alsa >= 1.0" 2>&1`
- fi
- echo "$ALSA_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_alsa=no
-elif test "x$pkg_failed" = "xuntried"; then
- have_alsa=no
-else
- ALSA_CFLAGS="$pkg_cv_ALSA_CFLAGS"
- ALSA_LIBS="$pkg_cv_ALSA_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_sdl" = x ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- have_alsa=yes
-fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for snd_device_name_hint in -lasound" >&5
-$as_echo_n "checking for snd_device_name_hint in -lasound... " >&6; }
-if ${ac_cv_lib_asound_snd_device_name_hint+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lasound $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ enable_sdlout=yes
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ if test "$SDL_CONFIG" = "no" ; then
+ echo "*** The sdl-config script installed by SDL could not be found"
+ echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the SDL_CONFIG environment variable to the"
+ echo "*** full path to sdl-config."
+ else
+ if test -f conf.sdltest ; then
+ :
+ else
+ echo "*** Could not run SDL test program, checking why..."
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char snd_device_name_hint ();
+#include <stdio.h>
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{ return 0; }
+#undef main
+#define main K_and_R_C_main
+
int
main ()
{
-return snd_device_name_hint ();
+ return 0;
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_asound_snd_device_name_hint=yes
+ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding SDL or finding the wrong"
+ echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
else
- ac_cv_lib_asound_snd_device_name_hint=no
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means SDL was incorrectly installed"
+ echo "*** or that you have moved SDL since it was installed. In the latter case, you"
+ echo "*** may want to edit the sdl-config script: $SDL_CONFIG"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_snd_device_name_hint" >&5
-$as_echo "$ac_cv_lib_asound_snd_device_name_hint" >&6; }
-if test "x$ac_cv_lib_asound_snd_device_name_hint" = xyes; then :
+ CFLAGS="$ac_save_CFLAGS"
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ SDL_CFLAGS=""
+ SDL_LIBS=""
+ enable_sdlout=no
+ fi
-$as_echo "#define HAVE_SND_DEVICE_NAME_HINT 1" >>confdefs.h
-fi
+ rm -f conf.sdltest
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** ALSA output plugin disabled per user request ***" >&5
-$as_echo "*** ALSA output plugin disabled per user request ***" >&6; }
- have_alsa=no
fi
-if test "x$have_alsa" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS alsa"
+if test $enable_sdlout = yes ; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"
fi
@@ -11444,48 +13127,73 @@ if test "x$enable_amidiplug" = "xcheck"; then
if test "x$alsalib_midi" = "xyes"; then
enable_amidiplug=yes
else
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLUIDSYNTH" >&5
$as_echo_n "checking for FLUIDSYNTH... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth >= 1.0.6\""; } >&5
+
+if test -n "$FLUIDSYNTH_CFLAGS"; then
+ pkg_cv_FLUIDSYNTH_CFLAGS="$FLUIDSYNTH_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth >= 1.0.6\""; } >&5
($PKG_CONFIG --exists --print-errors "fluidsynth >= 1.0.6") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${FLUIDSYNTH_CFLAGS}" != "x"; then
- pkg_cv_FLUIDSYNTH_CFLAGS="${FLUIDSYNTH_CFLAGS}"
- else
- pkg_cv_FLUIDSYNTH_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth >= 1.0.6" 2>/dev/null`
- fi
- if test "x${FLUIDSYNTH_LIBS}" != "x"; then
- pkg_cv_FLUIDSYNTH_LIBS="${FLUIDSYNTH_LIBS}"
- else
- pkg_cv_FLUIDSYNTH_LIBS=`$PKG_CONFIG --libs "fluidsynth >= 1.0.6" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_FLUIDSYNTH_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth >= 1.0.6" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test -n "$FLUIDSYNTH_LIBS"; then
+ pkg_cv_FLUIDSYNTH_LIBS="$FLUIDSYNTH_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth >= 1.0.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "fluidsynth >= 1.0.6") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FLUIDSYNTH_LIBS=`$PKG_CONFIG --libs "fluidsynth >= 1.0.6" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fluidsynth >= 1.0.6" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fluidsynth >= 1.0.6" 2>&1`
else
- FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fluidsynth >= 1.0.6" 2>&1`
+ FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fluidsynth >= 1.0.6" 2>&1`
fi
- echo "$FLUIDSYNTH_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$FLUIDSYNTH_PKG_ERRORS" >&5
+
+ fluidsynth_available=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- fluidsynth_available=no
-elif test "x$pkg_failed" = "xuntried"; then
fluidsynth_available=no
else
- FLUIDSYNTH_CFLAGS="$pkg_cv_FLUIDSYNTH_CFLAGS"
- FLUIDSYNTH_LIBS="$pkg_cv_FLUIDSYNTH_LIBS"
+ FLUIDSYNTH_CFLAGS=$pkg_cv_FLUIDSYNTH_CFLAGS
+ FLUIDSYNTH_LIBS=$pkg_cv_FLUIDSYNTH_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
fluidsynth_available=yes
@@ -11494,48 +13202,73 @@ fi
enable_amidiplug=yes
else
enable_amidiplug=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Neither ALSA or FluidSynth software synth (>= 1.0.6) have been found, so amidi-plug won't be compiled unless you explicitly request it with --enable-amidiplug ***" >&5
-$as_echo "$as_me: WARNING: *** Neither ALSA or FluidSynth software synth (>= 1.0.6) have been found, so amidi-plug won't be compiled unless you explicitly request it with --enable-amidiplug ***" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"*** Neither ALSA or FluidSynth software synth (>= 1.0.6) have been found, so amidi-plug won't be compiled unless you explicitly request it with --enable-amidiplug ***\"" >&5
+$as_echo "$as_me: WARNING: \"*** Neither ALSA or FluidSynth software synth (>= 1.0.6) have been found, so amidi-plug won't be compiled unless you explicitly request it with --enable-amidiplug ***\"" >&2;}
fi
fi
fi
if test "x$enable_amidiplug" = "xyes"; then
INPUT_PLUGINS="$INPUT_PLUGINS amidi-plug"
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
$as_echo_n "checking for GLIB... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.6.0\""; } >&5
+
+if test -n "$GLIB_CFLAGS"; then
+ pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.6.0\""; } >&5
($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.6.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${GLIB_CFLAGS}" != "x"; then
- pkg_cv_GLIB_CFLAGS="${GLIB_CFLAGS}"
- else
- pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.6.0" 2>/dev/null`
- fi
- if test "x${GLIB_LIBS}" != "x"; then
- pkg_cv_GLIB_LIBS="${GLIB_LIBS}"
- else
- pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.6.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.6.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIB_LIBS"; then
+ pkg_cv_GLIB_LIBS="$GLIB_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.6.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.6.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.6.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.6.0" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.6.0" 2>&1`
else
- GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.6.0" 2>&1`
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.6.0" 2>&1`
fi
- echo "$GLIB_PKG_ERRORS" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIB_PKG_ERRORS" >&5
+
as_fn_error $? "Package requirements (glib-2.0 >= 2.6.0) were not met:
$GLIB_PKG_ERRORS
@@ -11545,9 +13278,10 @@ installed software in a non-standard prefix.
Alternatively, you may set the environment variables GLIB_CFLAGS
and GLIB_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test "x$pkg_failed" = "xuntried"; then
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
@@ -11561,46 +13295,71 @@ See the pkg-config man page for more details.
To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See \`config.log' for more details" "$LINENO" 5; }
else
- GLIB_CFLAGS="$pkg_cv_GLIB_CFLAGS"
- GLIB_LIBS="$pkg_cv_GLIB_LIBS"
+ GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
+ GLIB_LIBS=$pkg_cv_GLIB_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GMODULE" >&5
$as_echo_n "checking for GMODULE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 >= 2.6.0\""; } >&5
+
+if test -n "$GMODULE_CFLAGS"; then
+ pkg_cv_GMODULE_CFLAGS="$GMODULE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 >= 2.6.0\""; } >&5
($PKG_CONFIG --exists --print-errors "gmodule-2.0 >= 2.6.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${GMODULE_CFLAGS}" != "x"; then
- pkg_cv_GMODULE_CFLAGS="${GMODULE_CFLAGS}"
- else
- pkg_cv_GMODULE_CFLAGS=`$PKG_CONFIG --cflags "gmodule-2.0 >= 2.6.0" 2>/dev/null`
- fi
- if test "x${GMODULE_LIBS}" != "x"; then
- pkg_cv_GMODULE_LIBS="${GMODULE_LIBS}"
- else
- pkg_cv_GMODULE_LIBS=`$PKG_CONFIG --libs "gmodule-2.0 >= 2.6.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GMODULE_CFLAGS=`$PKG_CONFIG --cflags "gmodule-2.0 >= 2.6.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GMODULE_LIBS"; then
+ pkg_cv_GMODULE_LIBS="$GMODULE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 >= 2.6.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-2.0 >= 2.6.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_LIBS=`$PKG_CONFIG --libs "gmodule-2.0 >= 2.6.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GMODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gmodule-2.0 >= 2.6.0" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gmodule-2.0 >= 2.6.0" 2>&1`
else
- GMODULE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gmodule-2.0 >= 2.6.0" 2>&1`
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gmodule-2.0 >= 2.6.0" 2>&1`
fi
- echo "$GMODULE_PKG_ERRORS" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$GMODULE_PKG_ERRORS" >&5
+
as_fn_error $? "Package requirements (gmodule-2.0 >= 2.6.0) were not met:
$GMODULE_PKG_ERRORS
@@ -11610,9 +13369,10 @@ installed software in a non-standard prefix.
Alternatively, you may set the environment variables GMODULE_CFLAGS
and GMODULE_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test "x$pkg_failed" = "xuntried"; then
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
@@ -11626,11 +13386,11 @@ See the pkg-config man page for more details.
To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See \`config.log' for more details" "$LINENO" 5; }
else
- GMODULE_CFLAGS="$pkg_cv_GMODULE_CFLAGS"
- GMODULE_LIBS="$pkg_cv_GMODULE_LIBS"
+ GMODULE_CFLAGS=$pkg_cv_GMODULE_CFLAGS
+ GMODULE_LIBS=$pkg_cv_GMODULE_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
AMIDIPLUG_BACKEND_DIR=amidi-plug
@@ -11649,48 +13409,73 @@ fi
fi
if test "x$enable_amidiplug_fluidsynth" = "xauto" -o "x$enable_amidiplug_fluidsynth" = "xyes"; then
if test "x$fluidsynth_available" != "xyes" -a "x$fluidsynth_available" != "xno"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLUIDSYNTH" >&5
$as_echo_n "checking for FLUIDSYNTH... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth >= 1.0.6\""; } >&5
+
+if test -n "$FLUIDSYNTH_CFLAGS"; then
+ pkg_cv_FLUIDSYNTH_CFLAGS="$FLUIDSYNTH_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth >= 1.0.6\""; } >&5
($PKG_CONFIG --exists --print-errors "fluidsynth >= 1.0.6") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${FLUIDSYNTH_CFLAGS}" != "x"; then
- pkg_cv_FLUIDSYNTH_CFLAGS="${FLUIDSYNTH_CFLAGS}"
- else
- pkg_cv_FLUIDSYNTH_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth >= 1.0.6" 2>/dev/null`
- fi
- if test "x${FLUIDSYNTH_LIBS}" != "x"; then
- pkg_cv_FLUIDSYNTH_LIBS="${FLUIDSYNTH_LIBS}"
- else
- pkg_cv_FLUIDSYNTH_LIBS=`$PKG_CONFIG --libs "fluidsynth >= 1.0.6" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_FLUIDSYNTH_CFLAGS=`$PKG_CONFIG --cflags "fluidsynth >= 1.0.6" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$FLUIDSYNTH_LIBS"; then
+ pkg_cv_FLUIDSYNTH_LIBS="$FLUIDSYNTH_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fluidsynth >= 1.0.6\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "fluidsynth >= 1.0.6") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FLUIDSYNTH_LIBS=`$PKG_CONFIG --libs "fluidsynth >= 1.0.6" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fluidsynth >= 1.0.6" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fluidsynth >= 1.0.6" 2>&1`
else
- FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fluidsynth >= 1.0.6" 2>&1`
+ FLUIDSYNTH_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fluidsynth >= 1.0.6" 2>&1`
fi
- echo "$FLUIDSYNTH_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$FLUIDSYNTH_PKG_ERRORS" >&5
+
+ fluidsynth_available=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- fluidsynth_available=no
-elif test "x$pkg_failed" = "xuntried"; then
fluidsynth_available=no
else
- FLUIDSYNTH_CFLAGS="$pkg_cv_FLUIDSYNTH_CFLAGS"
- FLUIDSYNTH_LIBS="$pkg_cv_FLUIDSYNTH_LIBS"
+ FLUIDSYNTH_CFLAGS=$pkg_cv_FLUIDSYNTH_CFLAGS
+ FLUIDSYNTH_LIBS=$pkg_cv_FLUIDSYNTH_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
fluidsynth_available=yes
@@ -11712,167 +13497,6 @@ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FreeBSD newpcm driver" >&5
-$as_echo_n "checking for FreeBSD newpcm driver... " >&6; }
-if ${beep_cv_newpcm_driver+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -r "/dev/sndstat"; then
- grep 'newpcm' /dev/sndstat 2>/dev/null 1>/dev/null
- if test "x$?" = "x0"; then
- beep_cv_newpcm_driver="yes"
- else
- beep_cv_newpcm_driver="no"
- fi
- else
- beep_cv_newpcm_driver="no"
- fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $beep_cv_newpcm_driver" >&5
-$as_echo "$beep_cv_newpcm_driver" >&6; }
-
-if test "x$beep_cv_newpcm_driver" = "xyes"; then
-
-$as_echo "#define HAVE_NEWPCM 1" >>confdefs.h
-
-fi
-
-
-for ac_header in linux/joystick.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "linux/joystick.h" "ac_cv_header_linux_joystick_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_joystick_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LINUX_JOYSTICK_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in unistd.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_UNISTD_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in fcntl.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
-if test "x$ac_cv_header_fcntl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FCNTL_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in sys/ioctl.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_ioctl_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_SYS_IOCTL_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in fnmatch.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "fnmatch.h" "ac_cv_header_fnmatch_h" "$ac_includes_default"
-if test "x$ac_cv_header_fnmatch_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FNMATCH_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in limits.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
-if test "x$ac_cv_header_limits_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIMITS_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in wchar.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default"
-if test "x$ac_cv_header_wchar_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_WCHAR_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_header in fts.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "fts.h" "ac_cv_header_fts_h" "$ac_includes_default"
-if test "x$ac_cv_header_fts_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FTS_H 1
-_ACEOF
-
-fi
-
-done
-
-
-ac_fn_c_check_decl "$LINENO" "lrintf" "ac_cv_have_decl_lrintf" "
-#define _ISOC9X_SOURCE
-#include <math.h>
-
-"
-if test "x$ac_cv_have_decl_lrintf" = xyes; then :
- $as_echo "#define HAVE_LRINTF 1" >>confdefs.h
-
-else
- for ac_func in lrintf
-do :
- ac_fn_c_check_func "$LINENO" "lrintf" "ac_cv_func_lrintf"
-if test "x$ac_cv_func_lrintf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LRINTF 1
-_ACEOF
-
-fi
-done
-
-fi
-
-for ac_func in mkdtemp getmntinfo statvfs strtoul
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
# Check whether --enable-cdaudio was given.
if test "${enable_cdaudio+set}" = set; then :
enableval=$enable_cdaudio; enable_cdaudio_ng=$enableval
@@ -11883,109 +13507,159 @@ fi
if test "$enable_cdaudio_ng" = "yes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CDIO" >&5
$as_echo_n "checking for CDIO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcdio >= 0.70\""; } >&5
+
+if test -n "$CDIO_CFLAGS"; then
+ pkg_cv_CDIO_CFLAGS="$CDIO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcdio >= 0.70\""; } >&5
($PKG_CONFIG --exists --print-errors "libcdio >= 0.70") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${CDIO_CFLAGS}" != "x"; then
- pkg_cv_CDIO_CFLAGS="${CDIO_CFLAGS}"
- else
- pkg_cv_CDIO_CFLAGS=`$PKG_CONFIG --cflags "libcdio >= 0.70" 2>/dev/null`
- fi
- if test "x${CDIO_LIBS}" != "x"; then
- pkg_cv_CDIO_LIBS="${CDIO_LIBS}"
- else
- pkg_cv_CDIO_LIBS=`$PKG_CONFIG --libs "libcdio >= 0.70" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CDIO_CFLAGS=`$PKG_CONFIG --cflags "libcdio >= 0.70" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CDIO_LIBS"; then
+ pkg_cv_CDIO_LIBS="$CDIO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcdio >= 0.70\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcdio >= 0.70") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CDIO_LIBS=`$PKG_CONFIG --libs "libcdio >= 0.70" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- CDIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libcdio >= 0.70" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CDIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcdio >= 0.70" 2>&1`
else
- CDIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libcdio >= 0.70" 2>&1`
+ CDIO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcdio >= 0.70" 2>&1`
fi
- echo "$CDIO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcdio 0.70 or newer, cdaudio-ng will not be built ***" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$CDIO_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcdio 0.70 or newer, cdaudio-ng will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libcdio 0.70 or newer, cdaudio-ng will not be built ***" >&2;}
enable_cdaudio_ng=no
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcdio 0.70 or newer, cdaudio-ng will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libcdio 0.70 or newer, cdaudio-ng will not be built ***" >&2;}
enable_cdaudio_ng=no
else
- CDIO_CFLAGS="$pkg_cv_CDIO_CFLAGS"
- CDIO_LIBS="$pkg_cv_CDIO_LIBS"
+ CDIO_CFLAGS=$pkg_cv_CDIO_CFLAGS
+ CDIO_LIBS=$pkg_cv_CDIO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- :
+
fi
fi
if test "$enable_cdaudio_ng" = "yes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CDIO" >&5
$as_echo_n "checking for CDIO... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcdio_cdda >= 0.70\""; } >&5
+
+if test -n "$CDIO_CFLAGS"; then
+ pkg_cv_CDIO_CFLAGS="$CDIO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcdio_cdda >= 0.70\""; } >&5
($PKG_CONFIG --exists --print-errors "libcdio_cdda >= 0.70") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${CDIO_CFLAGS}" != "x"; then
- pkg_cv_CDIO_CFLAGS="${CDIO_CFLAGS}"
- else
- pkg_cv_CDIO_CFLAGS=`$PKG_CONFIG --cflags "libcdio_cdda >= 0.70" 2>/dev/null`
- fi
- if test "x${CDIO_LIBS}" != "x"; then
- pkg_cv_CDIO_LIBS="${CDIO_LIBS}"
- else
- pkg_cv_CDIO_LIBS=`$PKG_CONFIG --libs "libcdio_cdda >= 0.70" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CDIO_CFLAGS=`$PKG_CONFIG --cflags "libcdio_cdda >= 0.70" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
+if test -n "$CDIO_LIBS"; then
+ pkg_cv_CDIO_LIBS="$CDIO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcdio_cdda >= 0.70\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcdio_cdda >= 0.70") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CDIO_LIBS=`$PKG_CONFIG --libs "libcdio_cdda >= 0.70" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- CDIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libcdio_cdda >= 0.70" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CDIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcdio_cdda >= 0.70" 2>&1`
else
- CDIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libcdio_cdda >= 0.70" 2>&1`
+ CDIO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcdio_cdda >= 0.70" 2>&1`
fi
- echo "$CDIO_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcdio_cdda 0.70 or newer, cdaudio-ng will not be built ***" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$CDIO_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcdio_cdda 0.70 or newer, cdaudio-ng will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libcdio_cdda 0.70 or newer, cdaudio-ng will not be built ***" >&2;}
enable_cdaudio_ng=no
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcdio_cdda 0.70 or newer, cdaudio-ng will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libcdio_cdda 0.70 or newer, cdaudio-ng will not be built ***" >&2;}
enable_cdaudio_ng=no
else
- CDIO_CFLAGS="$pkg_cv_CDIO_CFLAGS"
- CDIO_LIBS="$pkg_cv_CDIO_LIBS"
+ CDIO_CFLAGS=$pkg_cv_CDIO_CFLAGS
+ CDIO_LIBS=$pkg_cv_CDIO_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
CDIO_LIBS=`pkg-config --libs libcdio_cdda`
@@ -11996,54 +13670,79 @@ fi
fi
if test "$enable_cdaudio_ng" = "yes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CDDB" >&5
$as_echo_n "checking for CDDB... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcddb >= 1.2.1\""; } >&5
+
+if test -n "$CDDB_CFLAGS"; then
+ pkg_cv_CDDB_CFLAGS="$CDDB_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcddb >= 1.2.1\""; } >&5
($PKG_CONFIG --exists --print-errors "libcddb >= 1.2.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${CDDB_CFLAGS}" != "x"; then
- pkg_cv_CDDB_CFLAGS="${CDDB_CFLAGS}"
- else
- pkg_cv_CDDB_CFLAGS=`$PKG_CONFIG --cflags "libcddb >= 1.2.1" 2>/dev/null`
- fi
- if test "x${CDDB_LIBS}" != "x"; then
- pkg_cv_CDDB_LIBS="${CDDB_LIBS}"
- else
- pkg_cv_CDDB_LIBS=`$PKG_CONFIG --libs "libcddb >= 1.2.1" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CDDB_CFLAGS=`$PKG_CONFIG --cflags "libcddb >= 1.2.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CDDB_LIBS"; then
+ pkg_cv_CDDB_LIBS="$CDDB_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcddb >= 1.2.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcddb >= 1.2.1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CDDB_LIBS=`$PKG_CONFIG --libs "libcddb >= 1.2.1" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- CDDB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libcddb >= 1.2.1" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CDDB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcddb >= 1.2.1" 2>&1`
else
- CDDB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libcddb >= 1.2.1" 2>&1`
+ CDDB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcddb >= 1.2.1" 2>&1`
fi
- echo "$CDDB_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcddb 1.2.1 or newer, cdaudio-ng will not be built ***" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$CDDB_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcddb 1.2.1 or newer, cdaudio-ng will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libcddb 1.2.1 or newer, cdaudio-ng will not be built ***" >&2;}
enable_cdaudio_ng=no
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Cannot find libcddb 1.2.1 or newer, cdaudio-ng will not be built ***" >&5
$as_echo "$as_me: WARNING: *** Cannot find libcddb 1.2.1 or newer, cdaudio-ng will not be built ***" >&2;}
enable_cdaudio_ng=no
else
- CDDB_CFLAGS="$pkg_cv_CDDB_CFLAGS"
- CDDB_LIBS="$pkg_cv_CDDB_LIBS"
+ CDDB_CFLAGS=$pkg_cv_CDDB_CFLAGS
+ CDDB_LIBS=$pkg_cv_CDDB_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
INPUT_PLUGINS="$INPUT_PLUGINS cdaudio-ng"
@@ -12055,102 +13754,6 @@ $as_echo "yes" >&6; }
fi
fi
-# Check whether --enable-streambrowser was given.
-if test "${enable_streambrowser+set}" = set; then :
- enableval=$enable_streambrowser; enable_streambrowser=$enableval
-else
- enable_streambrowser=yes
-
-fi
-
-
-if test "$enable_streambrowser" = "yes"; then
- GENERAL_PLUGINS="$GENERAL_PLUGINS streambrowser"
-fi
-
- if test "${ac_cv_header_linux_cdrom_h}" = "yes" || test "${ac_cv_header_sys_cdio_h}" = "yes"; then
- HAVE_CDROM_TRUE=
- HAVE_CDROM_FALSE='#'
-else
- HAVE_CDROM_TRUE='#'
- HAVE_CDROM_FALSE=
-fi
-
- if test "${ac_cv_header_linux_joystick_h}" = "yes"; then
- HAVE_LINUX_JOYSTICK_TRUE=
- HAVE_LINUX_JOYSTICK_FALSE='#'
-else
- HAVE_LINUX_JOYSTICK_TRUE='#'
- HAVE_LINUX_JOYSTICK_FALSE=
-fi
-
-
-CPPFLAGS="$CPPFLAGS $AUDACIOUS_CFLAGS $DBUS_CFLAGS"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __ELF__ is defined" >&5
-$as_echo_n "checking if __ELF__ is defined... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __ELF__
- yes
- #endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "yes" >/dev/null 2>&1; then :
- is_elf=yes
-else
- is_elf=no
-
-fi
-rm -f conftest*
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${is_elf}" >&5
-$as_echo "${is_elf}" >&6; }
-
-
-have_solaris=no
-have_sun=no
-ARCH_DEFINES=""
-case "$host" in
- *-*-openbsd* | *-*-netbsd* | *-*-mirbsd*)
- have_sun=yes
- if test "${is_elf}" = "no"
- then
-
-$as_echo "#define SYMBOL_PREFIX \"_\"" >>confdefs.h
-
- fi
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS sun"
- ;;
- *-*-darwin*)
-
-$as_echo "#define SYMBOL_PREFIX \"_\"" >>confdefs.h
-
- ;;
- *-hpux-*)
- ARCH_DEFINES="-DHPUX"
- ;;
- *-*-solaris* | *-*-sunos*)
- have_solaris=yes
- ;;
-esac
-
-arch_type=other
-x86_asm=no
-case "$host" in
- i386-*-* | i486-*-* | i586-*-* | i686-*-* | i86pc-*-*)
- arch_type=ix86
- case "$host" in
- *-*-netbsd* | *-*openbsd* | *-*-mirbsd*)
- ;;
- *)
- ARCH_DEFINES="-DI386_ASSEM"
- x86_asm=yes
- ;;
- esac
- ;;
-esac
# Check whether --enable-scrobbler was given.
@@ -12162,48 +13765,73 @@ fi
if test "x$have_scrobbler" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CURL" >&5
$as_echo_n "checking for CURL... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.9.7\""; } >&5
+
+if test -n "$CURL_CFLAGS"; then
+ pkg_cv_CURL_CFLAGS="$CURL_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.9.7\""; } >&5
($PKG_CONFIG --exists --print-errors "libcurl >= 7.9.7") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${CURL_CFLAGS}" != "x"; then
- pkg_cv_CURL_CFLAGS="${CURL_CFLAGS}"
- else
- pkg_cv_CURL_CFLAGS=`$PKG_CONFIG --cflags "libcurl >= 7.9.7" 2>/dev/null`
- fi
- if test "x${CURL_LIBS}" != "x"; then
- pkg_cv_CURL_LIBS="${CURL_LIBS}"
- else
- pkg_cv_CURL_LIBS=`$PKG_CONFIG --libs "libcurl >= 7.9.7" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CURL_CFLAGS=`$PKG_CONFIG --cflags "libcurl >= 7.9.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CURL_LIBS"; then
+ pkg_cv_CURL_LIBS="$CURL_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.9.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcurl >= 7.9.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CURL_LIBS=`$PKG_CONFIG --libs "libcurl >= 7.9.7" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- CURL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libcurl >= 7.9.7" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CURL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl >= 7.9.7" 2>&1`
else
- CURL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libcurl >= 7.9.7" 2>&1`
+ CURL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl >= 7.9.7" 2>&1`
fi
- echo "$CURL_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$CURL_PKG_ERRORS" >&5
+
+ have_scrobbler="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_scrobbler="no"
-elif test "x$pkg_failed" = "xuntried"; then
have_scrobbler="no"
else
- CURL_CFLAGS="$pkg_cv_CURL_CFLAGS"
- CURL_LIBS="$pkg_cv_CURL_LIBS"
+ CURL_CFLAGS=$pkg_cv_CURL_CFLAGS
+ CURL_LIBS=$pkg_cv_CURL_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_scrobbler="$have_scrobbler"
@@ -12226,48 +13854,73 @@ fi
if test "x$have_neon" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NEON" >&5
$as_echo_n "checking for NEON... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"neon >= 0.26\""; } >&5
+
+if test -n "$NEON_CFLAGS"; then
+ pkg_cv_NEON_CFLAGS="$NEON_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"neon >= 0.26\""; } >&5
($PKG_CONFIG --exists --print-errors "neon >= 0.26") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${NEON_CFLAGS}" != "x"; then
- pkg_cv_NEON_CFLAGS="${NEON_CFLAGS}"
- else
- pkg_cv_NEON_CFLAGS=`$PKG_CONFIG --cflags "neon >= 0.26" 2>/dev/null`
- fi
- if test "x${NEON_LIBS}" != "x"; then
- pkg_cv_NEON_LIBS="${NEON_LIBS}"
- else
- pkg_cv_NEON_LIBS=`$PKG_CONFIG --libs "neon >= 0.26" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_NEON_CFLAGS=`$PKG_CONFIG --cflags "neon >= 0.26" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NEON_LIBS"; then
+ pkg_cv_NEON_LIBS="$NEON_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"neon >= 0.26\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "neon >= 0.26") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NEON_LIBS=`$PKG_CONFIG --libs "neon >= 0.26" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- NEON_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "neon >= 0.26" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NEON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "neon >= 0.26" 2>&1`
else
- NEON_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "neon >= 0.26" 2>&1`
+ NEON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "neon >= 0.26" 2>&1`
fi
- echo "$NEON_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$NEON_PKG_ERRORS" >&5
+
+ have_neon="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_neon="no"
-elif test "x$pkg_failed" = "xuntried"; then
have_neon="no"
else
- NEON_CFLAGS="$pkg_cv_NEON_CFLAGS"
- NEON_LIBS="$pkg_cv_NEON_LIBS"
+ NEON_CFLAGS=$pkg_cv_NEON_CFLAGS
+ NEON_LIBS=$pkg_cv_NEON_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
TRANSPORT_PLUGINS="$TRANSPORT_PLUGINS neon"
@@ -12321,7 +13974,6 @@ fi
-
# Check whether --enable-mms was given.
if test "${enable_mms+set}" = set; then :
enableval=$enable_mms; have_mms=$enableval
@@ -12332,48 +13984,73 @@ fi
if test "x$have_mms" = "xyes"; then
have_mms=yes
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MMS" >&5
$as_echo_n "checking for MMS... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmms >= 0.3\""; } >&5
+
+if test -n "$MMS_CFLAGS"; then
+ pkg_cv_MMS_CFLAGS="$MMS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmms >= 0.3\""; } >&5
($PKG_CONFIG --exists --print-errors "libmms >= 0.3") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${MMS_CFLAGS}" != "x"; then
- pkg_cv_MMS_CFLAGS="${MMS_CFLAGS}"
- else
- pkg_cv_MMS_CFLAGS=`$PKG_CONFIG --cflags "libmms >= 0.3" 2>/dev/null`
- fi
- if test "x${MMS_LIBS}" != "x"; then
- pkg_cv_MMS_LIBS="${MMS_LIBS}"
- else
- pkg_cv_MMS_LIBS=`$PKG_CONFIG --libs "libmms >= 0.3" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_MMS_CFLAGS=`$PKG_CONFIG --cflags "libmms >= 0.3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$MMS_LIBS"; then
+ pkg_cv_MMS_LIBS="$MMS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmms >= 0.3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmms >= 0.3") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_MMS_LIBS=`$PKG_CONFIG --libs "libmms >= 0.3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- MMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libmms >= 0.3" 2>&1`
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ MMS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmms >= 0.3" 2>&1`
else
- MMS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libmms >= 0.3" 2>&1`
+ MMS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmms >= 0.3" 2>&1`
fi
- echo "$MMS_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$MMS_PKG_ERRORS" >&5
+
+ have_mms="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_mms="no"
-elif test "x$pkg_failed" = "xuntried"; then
have_mms="no"
else
- MMS_CFLAGS="$pkg_cv_MMS_CFLAGS"
- MMS_LIBS="$pkg_cv_MMS_LIBS"
+ MMS_CFLAGS=$pkg_cv_MMS_CFLAGS
+ MMS_LIBS=$pkg_cv_MMS_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
TRANSPORT_PLUGINS="$TRANSPORT_PLUGINS mms"
@@ -12385,6 +14062,38 @@ $as_echo "*** mms plugin disabled by request ***" >&6; }
fi
+# Check whether --enable-smb was given.
+if test "${enable_smb+set}" = set; then :
+ enableval=$enable_smb; enable_smb="$enableval"
+else
+ enable_smb="no"
+fi
+
+
+if test $enable_smb = yes ; then
+ for ac_header in libsmbclient.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "libsmbclient.h" "ac_cv_header_libsmbclient_h" "$ac_includes_default"
+if test "x$ac_cv_header_libsmbclient_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSMBCLIENT_H 1
+_ACEOF
+ enable_smb=yes
+else
+ enable_smb=no
+fi
+
+done
+
+
+ if test $enable_smb = yes ; then
+ TRANSPORT_PLUGINS="$TRANSPORT_PLUGINS smb"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** libsmbclient not found; SMB client disabled" >&5
+$as_echo "*** libsmbclient not found; SMB client disabled" >&6; }
+ fi
+fi
+
# Check whether --enable-mtp_up was given.
if test "${enable_mtp_up+set}" = set; then :
@@ -12396,325 +14105,155 @@ fi
if test "x$have_mtp_up" = "xyes"; then
have_mtp_up=yes
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MTP" >&5
$as_echo_n "checking for MTP... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmtp >= 0.1.3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libmtp >= 0.1.3") 2>&5
+
+if test -n "$MTP_CFLAGS"; then
+ pkg_cv_MTP_CFLAGS="$MTP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmtp >= 0.3.5\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmtp >= 0.3.5") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${MTP_CFLAGS}" != "x"; then
- pkg_cv_MTP_CFLAGS="${MTP_CFLAGS}"
- else
- pkg_cv_MTP_CFLAGS=`$PKG_CONFIG --cflags "libmtp >= 0.1.3" 2>/dev/null`
- fi
- if test "x${MTP_LIBS}" != "x"; then
- pkg_cv_MTP_LIBS="${MTP_LIBS}"
- else
- pkg_cv_MTP_LIBS=`$PKG_CONFIG --libs "libmtp >= 0.1.3" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_MTP_CFLAGS=`$PKG_CONFIG --cflags "libmtp >= 0.3.5" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- MTP_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libmtp >= 0.1.3" 2>&1`
- else
- MTP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libmtp >= 0.1.3" 2>&1`
- fi
- echo "$MTP_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_mtp_up="no"
-elif test "x$pkg_failed" = "xuntried"; then
- have_mtp_up="no"
-else
- MTP_CFLAGS="$pkg_cv_MTP_CFLAGS"
- MTP_LIBS="$pkg_cv_MTP_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- GENERAL_PLUGINS="$GENERAL_PLUGINS mtp_up"
+ else
+ pkg_failed=untried
fi
- MTP_LIBS=`pkg-config --libs libmtp`
- MTP_CFLAGS=`pkg-config --cflags libmtp`
- if test "x$PKG_CONFIG" != "x" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmtp >= 0.3.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libmtp >= 0.3.0") 2>&5
+if test -n "$MTP_LIBS"; then
+ pkg_cv_MTP_LIBS="$MTP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmtp >= 0.3.5\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmtp >= 0.3.5") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- libmtp_030_pkg=yes
+ pkg_cv_MTP_LIBS=`$PKG_CONFIG --libs "libmtp >= 0.3.5" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- libmtp_030_pkg=no
+ pkg_failed=yes
fi
- if test x"$libmtp_030_pkg" = "xyes" ; then
-
-$as_echo "#define HAVE_LIBMTP_030 1" >>confdefs.h
-
- fi
-else
- have_mtp_up=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** mtp upload plugin disabled by request ***" >&5
-$as_echo "*** mtp upload plugin disabled by request ***" >&6; }
+ else
+ pkg_failed=untried
fi
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
-# Check whether --enable-bluetooth was given.
-if test "${enable_bluetooth+set}" = set; then :
- enableval=$enable_bluetooth; have_bluetooth=$enableval
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- have_bluetooth=yes
+ _pkg_short_errors_supported=no
fi
-
-
-have_bluetooth=no
-if test "x$have_bluetooth" = "xyes" -a "x$have_alsa" = "xyes"; then
- have_bluetooth=yes
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLUEZ" >&5
-$as_echo_n "checking for BLUEZ... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"bluez >= 2.22\""; } >&5
- ($PKG_CONFIG --exists --print-errors "bluez >= 2.22") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${BLUEZ_CFLAGS}" != "x"; then
- pkg_cv_BLUEZ_CFLAGS="${BLUEZ_CFLAGS}"
- else
- pkg_cv_BLUEZ_CFLAGS=`$PKG_CONFIG --cflags "bluez >= 2.22" 2>/dev/null`
- fi
- if test "x${BLUEZ_LIBS}" != "x"; then
- pkg_cv_BLUEZ_LIBS="${BLUEZ_LIBS}"
+ if test $_pkg_short_errors_supported = yes; then
+ MTP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmtp >= 0.3.5" 2>&1`
else
- pkg_cv_BLUEZ_LIBS=`$PKG_CONFIG --libs "bluez >= 2.22" 2>/dev/null`
+ MTP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmtp >= 0.3.5" 2>&1`
fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
-fi
-
+ # Put the nasty error message in config.log where it belongs
+ echo "$MTP_PKG_ERRORS" >&5
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- BLUEZ_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "bluez >= 2.22" 2>&1`
- else
- BLUEZ_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "bluez >= 2.22" 2>&1`
- fi
- echo "$BLUEZ_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ have_mtp_up="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_bluetooth="no"
-elif test "x$pkg_failed" = "xuntried"; then
- have_bluetooth="no"
+ have_mtp_up="no"
else
- BLUEZ_CFLAGS="$pkg_cv_BLUEZ_CFLAGS"
- BLUEZ_LIBS="$pkg_cv_BLUEZ_LIBS"
+ MTP_CFLAGS=$pkg_cv_MTP_CFLAGS
+ MTP_LIBS=$pkg_cv_MTP_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- GENERAL_PLUGINS="$GENERAL_PLUGINS bluetooth"
+ GENERAL_PLUGINS="$GENERAL_PLUGINS mtp_up"
fi
- BLUEZ_LIBS=`pkg-config --libs bluez`
- BLUEZ_CFLAGS=`pkg-config --cflags bluez`
+ MTP_LIBS=`pkg-config --libs libmtp`
+ MTP_CFLAGS=`pkg-config --cflags libmtp`
else
- have_bluetooth=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** bluetooth audio support plugin disabled by request ***" >&5
-$as_echo "*** bluetooth audio support plugin disabled by request ***" >&6; }
+ have_mtp_up=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** mtp upload plugin disabled by request ***" >&5
+$as_echo "*** mtp upload plugin disabled by request ***" >&6; }
fi
-# Check whether --enable-paranormal was given.
-if test "${enable_paranormal+set}" = set; then :
- enableval=$enable_paranormal; have_paranormal=$enableval
-else
- have_paranormal=yes
-fi
-
-if test "x$have_paranormal" = "xyes"; then
- have_paranormal=yes
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML" >&5
+$as_echo_n "checking for XML... " >&6; }
-# Check whether --with-sdl-prefix was given.
-if test "${with_sdl_prefix+set}" = set; then :
- withval=$with_sdl_prefix; sdl_prefix="$withval"
+if test -n "$XML_CFLAGS"; then
+ pkg_cv_XML_CFLAGS="$XML_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_XML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- sdl_prefix=""
+ pkg_failed=yes
fi
-
-
-# Check whether --with-sdl-exec-prefix was given.
-if test "${with_sdl_exec_prefix+set}" = set; then :
- withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval"
-else
- sdl_exec_prefix=""
+ else
+ pkg_failed=untried
fi
-
-
- if test x$sdl_exec_prefix != x ; then
- sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
- fi
- fi
- if test x$sdl_prefix != x ; then
- sdl_args="$sdl_args --prefix=$sdl_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_prefix/bin/sdl-config
- fi
- fi
-
-
- PATH="$prefix/bin:$prefix/usr/bin:$PATH"
- # Extract the first word of "sdl-config", so it can be a program name with args.
-set dummy sdl-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SDL_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
+if test -n "$XML_LIBS"; then
+ pkg_cv_XML_LIBS="$XML_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_XML_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- case $SDL_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no"
- ;;
-esac
+ pkg_failed=yes
fi
-SDL_CONFIG=$ac_cv_path_SDL_CONFIG
-if test -n "$SDL_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5
-$as_echo "$SDL_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ else
+ pkg_failed=untried
fi
- min_sdl_version=1.2.5
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5
-$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; }
- no_sdl=""
- if test "$SDL_CONFIG" = "no" ; then
- no_sdl=yes
- else
- SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
- SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
- sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
- sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
- sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
- sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
- sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
- sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
- fi
- if test "x$no_sdl" = x ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- :
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- if test "$SDL_CONFIG" = "no" ; then
- echo "*** The sdl-config script installed by SDL could not be found"
- echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the SDL_CONFIG environment variable to the"
- echo "*** full path to sdl-config."
- fi
- SDL_CFLAGS=""
- SDL_LIBS=""
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** SDL is not installed. Paranormal will not be built. ***" >&5
-$as_echo "$as_me: WARNING: *** SDL is not installed. Paranormal will not be built. ***" >&2;}
- have_paranormal="no"
-
- fi
-
-
- rm -f conf.sdltest
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- have_paranormal=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** paranormal plugin disabled by request ***" >&5
-$as_echo "*** paranormal plugin disabled by request ***" >&6; }
-fi
-
-if test "x$have_paranormal" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS paranormal"
+ _pkg_short_errors_supported=no
fi
-
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML" >&5
-$as_echo_n "checking for XML... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${XML_CFLAGS}" != "x"; then
- pkg_cv_XML_CFLAGS="${XML_CFLAGS}"
- else
- pkg_cv_XML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null`
- fi
- if test "x${XML_LIBS}" != "x"; then
- pkg_cv_XML_LIBS="${XML_LIBS}"
+ if test $_pkg_short_errors_supported = yes; then
+ XML_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1`
else
- pkg_cv_XML_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null`
+ XML_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1`
fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
-fi
-
+ # Put the nasty error message in config.log where it belongs
+ echo "$XML_PKG_ERRORS" >&5
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- XML_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libxml-2.0" 2>&1`
- else
- XML_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxml-2.0" 2>&1`
- fi
- echo "$XML_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ have_xml=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_xml=no
-elif test "x$pkg_failed" = "xuntried"; then
have_xml=no
else
- XML_CFLAGS="$pkg_cv_XML_CFLAGS"
- XML_LIBS="$pkg_cv_XML_LIBS"
+ XML_CFLAGS=$pkg_cv_XML_CFLAGS
+ XML_LIBS=$pkg_cv_XML_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_xml=yes
@@ -12738,369 +14277,81 @@ fi
if test "x$have_cue" = "xyes"; then
have_cue=yes
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CUE" >&5
$as_echo_n "checking for CUE... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcue\""; } >&5
+
+if test -n "$CUE_CFLAGS"; then
+ pkg_cv_CUE_CFLAGS="$CUE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcue\""; } >&5
($PKG_CONFIG --exists --print-errors "libcue") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${CUE_CFLAGS}" != "x"; then
- pkg_cv_CUE_CFLAGS="${CUE_CFLAGS}"
- else
- pkg_cv_CUE_CFLAGS=`$PKG_CONFIG --cflags "libcue" 2>/dev/null`
- fi
- if test "x${CUE_LIBS}" != "x"; then
- pkg_cv_CUE_LIBS="${CUE_LIBS}"
- else
- pkg_cv_CUE_LIBS=`$PKG_CONFIG --libs "libcue" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CUE_CFLAGS=`$PKG_CONFIG --cflags "libcue" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- CUE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libcue" 2>&1`
- else
- CUE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libcue" 2>&1`
- fi
- echo "$CUE_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_cue="no"
-elif test "x$pkg_failed" = "xuntried"; then
- have_cue="no"
-else
- CUE_CFLAGS="$pkg_cv_CUE_CFLAGS"
- CUE_LIBS="$pkg_cv_CUE_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- CONTAINER_PLUGINS="$CONTAINER_PLUGINS cue"
+ else
+ pkg_failed=untried
fi
-else
- have_cue=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** cue plugin disabled by request ***" >&5
-$as_echo "*** cue plugin disabled by request ***" >&6; }
-fi
-
-
-# Check whether --enable-projectm was given.
-if test "${enable_projectm+set}" = set; then :
- enableval=$enable_projectm; have_projectm=$enableval
-else
- have_projectm=yes
-fi
-
-
-if test "x$have_projectm" = "xyes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPROJECTM" >&5
-$as_echo_n "checking for LIBPROJECTM... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libprojectM < 1.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libprojectM < 1.0") 2>&5
+if test -n "$CUE_LIBS"; then
+ pkg_cv_CUE_LIBS="$CUE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcue\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libcue") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${LIBPROJECTM_CFLAGS}" != "x"; then
- pkg_cv_LIBPROJECTM_CFLAGS="${LIBPROJECTM_CFLAGS}"
- else
- pkg_cv_LIBPROJECTM_CFLAGS=`$PKG_CONFIG --cflags "libprojectM < 1.0" 2>/dev/null`
- fi
- if test "x${LIBPROJECTM_LIBS}" != "x"; then
- pkg_cv_LIBPROJECTM_LIBS="${LIBPROJECTM_LIBS}"
- else
- pkg_cv_LIBPROJECTM_LIBS=`$PKG_CONFIG --libs "libprojectM < 1.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_CUE_LIBS=`$PKG_CONFIG --libs "libcue" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
-fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- LIBPROJECTM_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libprojectM < 1.0" 2>&1`
- else
- LIBPROJECTM_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libprojectM < 1.0" 2>&1`
- fi
- echo "$LIBPROJECTM_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_projectm="no"
-elif test "x$pkg_failed" = "xuntried"; then
- have_projectm="no"
-else
- LIBPROJECTM_CFLAGS="$pkg_cv_LIBPROJECTM_CFLAGS"
- LIBPROJECTM_LIBS="$pkg_cv_LIBPROJECTM_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_projectm="yes"
-fi
-
-# Check whether --with-sdl-prefix was given.
-if test "${with_sdl_prefix+set}" = set; then :
- withval=$with_sdl_prefix; sdl_prefix="$withval"
-else
- sdl_prefix=""
-fi
-
-
-# Check whether --with-sdl-exec-prefix was given.
-if test "${with_sdl_exec_prefix+set}" = set; then :
- withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval"
-else
- sdl_exec_prefix=""
-fi
-
-
- if test x$sdl_exec_prefix != x ; then
- sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
- fi
- fi
- if test x$sdl_prefix != x ; then
- sdl_args="$sdl_args --prefix=$sdl_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_prefix/bin/sdl-config
- fi
- fi
-
-
- PATH="$prefix/bin:$prefix/usr/bin:$PATH"
- # Extract the first word of "sdl-config", so it can be a program name with args.
-set dummy sdl-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SDL_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $SDL_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no"
- ;;
-esac
+ pkg_failed=yes
fi
-SDL_CONFIG=$ac_cv_path_SDL_CONFIG
-if test -n "$SDL_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5
-$as_echo "$SDL_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ else
+ pkg_failed=untried
fi
- min_sdl_version=1.2.5
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5
-$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; }
- no_sdl=""
- if test "$SDL_CONFIG" = "no" ; then
- no_sdl=yes
- else
- SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
- SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
- sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
- sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
- sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
- sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
- sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
- sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
- fi
- if test "x$no_sdl" = x ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- :
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- if test "$SDL_CONFIG" = "no" ; then
- echo "*** The sdl-config script installed by SDL could not be found"
- echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the SDL_CONFIG environment variable to the"
- echo "*** full path to sdl-config."
- fi
- SDL_CFLAGS=""
- SDL_LIBS=""
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** SDL is not installed. projectM will not be built. ***" >&5
-$as_echo "$as_me: WARNING: *** SDL is not installed. projectM will not be built. ***" >&2;}
- have_projectm="no"
-
- fi
-
-
- rm -f conf.sdltest
-
- if test "x$libprjM" = "xno"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** libprojectM not found.
- libprojectM is needed to build this package.
- You can download libprojectM at http://projectm.sf.net/" >&5
-$as_echo "$as_me: WARNING: *** libprojectM not found.
- libprojectM is needed to build this package.
- You can download libprojectM at http://projectm.sf.net/" >&2;}
- fi
- LIBPROJECTM_datadir=`pkg-config --variable=pkgdatadir libprojectM`;
- LIBPROJECTM_sysconfdir=`pkg-config --variable=sysconfdir libprojectM`;
- LIBPROJECTM_CFLAGS="$LIBPROJECTM_CFLAGS -DPROJECTM_DATADIR=\\\"$LIBPROJECTM_datadir\\\" -DPROJECTM_SYSCONFDIR=\\\"$LIBPROJECTM_sysconfdir\\\"";
-fi
-
-
-
-if test "x$have_projectm" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS projectm"
-fi
-
-# Check whether --enable-projectm-1.0 was given.
-if test "${enable_projectm_1_0+set}" = set; then :
- enableval=$enable_projectm_1_0; have_projectm1=$enableval
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- have_projectm1=yes
+ _pkg_short_errors_supported=no
fi
-
-
-if test "$have_projectm1" = "yes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPROJECTM1" >&5
-$as_echo_n "checking for LIBPROJECTM1... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libprojectM >= 1.1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libprojectM >= 1.1") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${LIBPROJECTM1_CFLAGS}" != "x"; then
- pkg_cv_LIBPROJECTM1_CFLAGS="${LIBPROJECTM1_CFLAGS}"
- else
- pkg_cv_LIBPROJECTM1_CFLAGS=`$PKG_CONFIG --cflags "libprojectM >= 1.1" 2>/dev/null`
- fi
- if test "x${LIBPROJECTM1_LIBS}" != "x"; then
- pkg_cv_LIBPROJECTM1_LIBS="${LIBPROJECTM1_LIBS}"
+ if test $_pkg_short_errors_supported = yes; then
+ CUE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcue" 2>&1`
else
- pkg_cv_LIBPROJECTM1_LIBS=`$PKG_CONFIG --libs "libprojectM >= 1.1" 2>/dev/null`
+ CUE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcue" 2>&1`
fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
-fi
-
+ # Put the nasty error message in config.log where it belongs
+ echo "$CUE_PKG_ERRORS" >&5
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- LIBPROJECTM1_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libprojectM >= 1.1" 2>&1`
- else
- LIBPROJECTM1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libprojectM >= 1.1" 2>&1`
- fi
- echo "$LIBPROJECTM1_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ have_cue="no"
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_projectm1="no"
-elif test "x$pkg_failed" = "xuntried"; then
- have_projectm1="no"
+ have_cue="no"
else
- LIBPROJECTM1_CFLAGS="$pkg_cv_LIBPROJECTM1_CFLAGS"
- LIBPROJECTM1_LIBS="$pkg_cv_LIBPROJECTM1_LIBS"
+ CUE_CFLAGS=$pkg_cv_CUE_CFLAGS
+ CUE_LIBS=$pkg_cv_CUE_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- have_projectm1="yes"
-fi
+ CONTAINER_PLUGINS="$CONTAINER_PLUGINS cue"
fi
-
-if test "$have_projectm1" = "yes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKGLEXT" >&5
-$as_echo_n "checking for GTKGLEXT... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkglext-1.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gtkglext-1.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test "x${GTKGLEXT_CFLAGS}" != "x"; then
- pkg_cv_GTKGLEXT_CFLAGS="${GTKGLEXT_CFLAGS}"
- else
- pkg_cv_GTKGLEXT_CFLAGS=`$PKG_CONFIG --cflags "gtkglext-1.0" 2>/dev/null`
- fi
- if test "x${GTKGLEXT_LIBS}" != "x"; then
- pkg_cv_GTKGLEXT_LIBS="${GTKGLEXT_LIBS}"
- else
- pkg_cv_GTKGLEXT_LIBS=`$PKG_CONFIG --libs "gtkglext-1.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
else
- pkg_failed="untried"
-fi
-
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GTKGLEXT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtkglext-1.0" 2>&1`
- else
- GTKGLEXT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtkglext-1.0" 2>&1`
- fi
- echo "$GTKGLEXT_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_projectm1="no"
-elif test "x$pkg_failed" = "xuntried"; then
- have_projectm1="no"
-else
- GTKGLEXT_CFLAGS="$pkg_cv_GTKGLEXT_CFLAGS"
- GTKGLEXT_LIBS="$pkg_cv_GTKGLEXT_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_projectm1="yes"
-fi
-fi
-
-if test "$have_projectm1" = "yes"; then
- LIBPROJECTM1_datadir=`pkg-config --variable=pkgdatadir libprojectM`;
- LIBPROJECTM1_sysconfdir=`pkg-config --variable=sysconfdir libprojectM`;
- LIBPROJECTM1_prefix=`pkg-config --variable=prefix libprojectM`;
- LIBPROJECTM1_CFLAGS="$LIBPROJECTM1_CFLAGS -DPROJECTM_DATADIR=\\\"$LIBPROJECTM1_datadir\\\" -DPROJECTM_SYSCONFDIR=\\\"$LIBPROJECTM1_sysconfdir\\\" -DPROJECTM_PREFIX=\\\"$LIBPROJECTM1_prefix\\\"";
-fi
-
-
-
-
-
-
-if test "x$have_projectm1" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS projectm-1.0"
+ have_cue=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** cue plugin disabled by request ***" >&5
+$as_echo "*** cue plugin disabled by request ***" >&6; }
fi
@@ -13191,48 +14442,73 @@ fi
if test "x$enable_filewriter_vorbis" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OGG_VORBIS" >&5
$as_echo_n "checking for OGG_VORBIS... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0\""; } >&5
+
+if test -n "$OGG_VORBIS_CFLAGS"; then
+ pkg_cv_OGG_VORBIS_CFLAGS="$OGG_VORBIS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0\""; } >&5
($PKG_CONFIG --exists --print-errors "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${OGG_VORBIS_CFLAGS}" != "x"; then
- pkg_cv_OGG_VORBIS_CFLAGS="${OGG_VORBIS_CFLAGS}"
- else
- pkg_cv_OGG_VORBIS_CFLAGS=`$PKG_CONFIG --cflags "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>/dev/null`
- fi
- if test "x${OGG_VORBIS_LIBS}" != "x"; then
- pkg_cv_OGG_VORBIS_LIBS="${OGG_VORBIS_LIBS}"
- else
- pkg_cv_OGG_VORBIS_LIBS=`$PKG_CONFIG --libs "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_OGG_VORBIS_CFLAGS=`$PKG_CONFIG --cflags "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$OGG_VORBIS_LIBS"; then
+ pkg_cv_OGG_VORBIS_LIBS="$OGG_VORBIS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_OGG_VORBIS_LIBS=`$PKG_CONFIG --libs "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>&1`
else
- OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>&1`
+ OGG_VORBIS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ogg >= 1.0 vorbis >= 1.0 vorbisfile >= 1.0" 2>&1`
fi
- echo "$OGG_VORBIS_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$OGG_VORBIS_PKG_ERRORS" >&5
+
+ have_vorbisenc=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_vorbisenc=no
-elif test "x$pkg_failed" = "xuntried"; then
have_vorbisenc=no
else
- OGG_VORBIS_CFLAGS="$pkg_cv_OGG_VORBIS_CFLAGS"
- OGG_VORBIS_LIBS="$pkg_cv_OGG_VORBIS_LIBS"
+ OGG_VORBIS_CFLAGS=$pkg_cv_OGG_VORBIS_CFLAGS
+ OGG_VORBIS_LIBS=$pkg_cv_OGG_VORBIS_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_vorbisenc=yes
@@ -13257,50 +14533,75 @@ fi
if test "x$enable_filewriter_flac" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLAC" >&5
$as_echo_n "checking for FLAC... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flac >= 1.1.3\""; } >&5
+
+if test -n "$FLAC_CFLAGS"; then
+ pkg_cv_FLAC_CFLAGS="$FLAC_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flac >= 1.1.3\""; } >&5
($PKG_CONFIG --exists --print-errors "flac >= 1.1.3") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${FLAC_CFLAGS}" != "x"; then
- pkg_cv_FLAC_CFLAGS="${FLAC_CFLAGS}"
- else
- pkg_cv_FLAC_CFLAGS=`$PKG_CONFIG --cflags "flac >= 1.1.3" 2>/dev/null`
- fi
- if test "x${FLAC_LIBS}" != "x"; then
- pkg_cv_FLAC_LIBS="${FLAC_LIBS}"
- else
- pkg_cv_FLAC_LIBS=`$PKG_CONFIG --libs "flac >= 1.1.3" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_FLAC_CFLAGS=`$PKG_CONFIG --cflags "flac >= 1.1.3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$FLAC_LIBS"; then
+ pkg_cv_FLAC_LIBS="$FLAC_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flac >= 1.1.3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "flac >= 1.1.3") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FLAC_LIBS=`$PKG_CONFIG --libs "flac >= 1.1.3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- FLAC_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "flac >= 1.1.3" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FLAC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "flac >= 1.1.3" 2>&1`
else
- FLAC_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "flac >= 1.1.3" 2>&1`
+ FLAC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "flac >= 1.1.3" 2>&1`
fi
- echo "$FLAC_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- have_writer_flac=no
+ # Put the nasty error message in config.log where it belongs
+ echo "$FLAC_PKG_ERRORS" >&5
+
+ have_writer_flac=no
-elif test "x$pkg_failed" = "xuntried"; then
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
have_writer_flac=no
else
- FLAC_CFLAGS="$pkg_cv_FLAC_CFLAGS"
- FLAC_LIBS="$pkg_cv_FLAC_LIBS"
+ FLAC_CFLAGS=$pkg_cv_FLAC_CFLAGS
+ FLAC_LIBS=$pkg_cv_FLAC_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_writer_flac=yes
@@ -13334,48 +14635,73 @@ fi
if test "x$enable_bs2b" = "xyes"; then
- pkg_failed=no
+
+pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BS2B" >&5
$as_echo_n "checking for BS2B... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbs2b >= 3.0.0\""; } >&5
+
+if test -n "$BS2B_CFLAGS"; then
+ pkg_cv_BS2B_CFLAGS="$BS2B_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbs2b >= 3.0.0\""; } >&5
($PKG_CONFIG --exists --print-errors "libbs2b >= 3.0.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${BS2B_CFLAGS}" != "x"; then
- pkg_cv_BS2B_CFLAGS="${BS2B_CFLAGS}"
- else
- pkg_cv_BS2B_CFLAGS=`$PKG_CONFIG --cflags "libbs2b >= 3.0.0" 2>/dev/null`
- fi
- if test "x${BS2B_LIBS}" != "x"; then
- pkg_cv_BS2B_LIBS="${BS2B_LIBS}"
- else
- pkg_cv_BS2B_LIBS=`$PKG_CONFIG --libs "libbs2b >= 3.0.0" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_BS2B_CFLAGS=`$PKG_CONFIG --cflags "libbs2b >= 3.0.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$BS2B_LIBS"; then
+ pkg_cv_BS2B_LIBS="$BS2B_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libbs2b >= 3.0.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libbs2b >= 3.0.0") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_BS2B_LIBS=`$PKG_CONFIG --libs "libbs2b >= 3.0.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- BS2B_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libbs2b >= 3.0.0" 2>&1`
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ BS2B_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libbs2b >= 3.0.0" 2>&1`
else
- BS2B_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libbs2b >= 3.0.0" 2>&1`
+ BS2B_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libbs2b >= 3.0.0" 2>&1`
fi
- echo "$BS2B_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$BS2B_PKG_ERRORS" >&5
+
+ have_bs2b=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- have_bs2b=no
-elif test "x$pkg_failed" = "xuntried"; then
have_bs2b=no
else
- BS2B_CFLAGS="$pkg_cv_BS2B_CFLAGS"
- BS2B_LIBS="$pkg_cv_BS2B_LIBS"
+ BS2B_CFLAGS=$pkg_cv_BS2B_CFLAGS
+ BS2B_LIBS=$pkg_cv_BS2B_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_bs2b=yes
@@ -13402,48 +14728,77 @@ fi
if test "x$enable_resample" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for src_process in -lsamplerate" >&5
-$as_echo_n "checking for src_process in -lsamplerate... " >&6; }
-if ${ac_cv_lib_samplerate_src_process+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsamplerate $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char src_process ();
-int
-main ()
-{
-return src_process ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_samplerate_src_process=yes
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SAMPLERATE" >&5
+$as_echo_n "checking for SAMPLERATE... " >&6; }
+
+if test -n "$SAMPLERATE_CFLAGS"; then
+ pkg_cv_SAMPLERATE_CFLAGS="$SAMPLERATE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "samplerate") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SAMPLERATE_CFLAGS=`$PKG_CONFIG --cflags "samplerate" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- ac_cv_lib_samplerate_src_process=no
+ pkg_failed=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ else
+ pkg_failed=untried
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_samplerate_src_process" >&5
-$as_echo "$ac_cv_lib_samplerate_src_process" >&6; }
-if test "x$ac_cv_lib_samplerate_src_process" = xyes; then :
- enable_resample=yes
+if test -n "$SAMPLERATE_LIBS"; then
+ pkg_cv_SAMPLERATE_LIBS="$SAMPLERATE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"samplerate\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "samplerate") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SAMPLERATE_LIBS=`$PKG_CONFIG --libs "samplerate" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- enable_resample=no
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
+
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "samplerate" 2>&1`
+ else
+ SAMPLERATE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "samplerate" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SAMPLERATE_PKG_ERRORS" >&5
+
+ enable_resample=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ enable_resample=no
+else
+ SAMPLERATE_CFLAGS=$pkg_cv_SAMPLERATE_CFLAGS
+ SAMPLERATE_LIBS=$pkg_cv_SAMPLERATE_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ enable_resample=yes
+fi
fi
if test "x$enable_resample" = "xyes"; then
@@ -13451,6 +14806,32 @@ if test "x$enable_resample" = "xyes"; then
fi
+# Check whether --enable-gtkui was given.
+if test "${enable_gtkui+set}" = set; then :
+ enableval=$enable_gtkui; enable_gtkui=$enableval
+else
+ enable_gtkui="yes"
+fi
+
+
+if test $enable_gtkui = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS gtkui"
+fi
+
+
+# Check whether --enable-skins was given.
+if test "${enable_skins+set}" = set; then :
+ enableval=$enable_skins; enable_skins=$enableval
+else
+ enable_skins="yes"
+fi
+
+
+if test $enable_skins = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS skins"
+fi
+
+
# Check whether --enable-lyricwiki was given.
if test "${enable_lyricwiki+set}" = set; then :
enableval=$enable_lyricwiki; enable_lyricwiki=$enableval
@@ -13460,48 +14841,73 @@ fi
if test "x$enable_lyricwiki" = "xyes"; then
- pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
-$as_echo_n "checking for GLIB... " >&6; }
-if test "x$PKG_CONFIG" != "x"; then
- if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.14\""; } >&5
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB214" >&5
+$as_echo_n "checking for GLIB214... " >&6; }
+
+if test -n "$GLIB214_CFLAGS"; then
+ pkg_cv_GLIB214_CFLAGS="$GLIB214_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.14\""; } >&5
($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.14") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- if test "x${GLIB_CFLAGS}" != "x"; then
- pkg_cv_GLIB_CFLAGS="${GLIB_CFLAGS}"
- else
- pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.14" 2>/dev/null`
- fi
- if test "x${GLIB_LIBS}" != "x"; then
- pkg_cv_GLIB_LIBS="${GLIB_LIBS}"
- else
- pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.14" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
+ pkg_cv_GLIB214_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.14" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIB214_LIBS"; then
+ pkg_cv_GLIB214_LIBS="$GLIB214_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.14\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.14") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB214_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.14" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
else
- pkg_failed="untried"
+ pkg_failed=yes
fi
+ else
+ pkg_failed=untried
+fi
+
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glib-2.0 >= 2.14" 2>&1`
+if test $pkg_failed = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIB214_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.14" 2>&1`
else
- GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= 2.14" 2>&1`
+ GLIB214_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.14" 2>&1`
fi
- echo "$GLIB_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIB214_PKG_ERRORS" >&5
+
+ enable_lyricwiki=no
+elif test $pkg_failed = untried; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- enable_lyricwiki=no
-elif test "x$pkg_failed" = "xuntried"; then
enable_lyricwiki=no
else
- GLIB_CFLAGS="$pkg_cv_GLIB_CFLAGS"
- GLIB_LIBS="$pkg_cv_GLIB_LIBS"
+ GLIB214_CFLAGS=$pkg_cv_GLIB214_CFLAGS
+ GLIB214_LIBS=$pkg_cv_GLIB214_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
enable_lyricwiki=yes
@@ -13513,41 +14919,6 @@ if test "x$enable_lyricwiki" = "xyes"; then
fi
-
-
- if test "x$arch_type" = "xix86"; then
- ARCH_X86_TRUE=
- ARCH_X86_FALSE='#'
-else
- ARCH_X86_TRUE='#'
- ARCH_X86_FALSE=
-fi
-
- if test "x$x86_asm" = xyes; then
- USE_X86ASM_TRUE=
- USE_X86ASM_FALSE='#'
-else
- USE_X86ASM_TRUE='#'
- USE_X86ASM_FALSE=
-fi
-
- if test "x$have_solaris" = xyes; then
- HAVE_SOLARIS_TRUE=
- HAVE_SOLARIS_FALSE='#'
-else
- HAVE_SOLARIS_TRUE='#'
- HAVE_SOLARIS_FALSE=
-fi
-
- if test "x$have_sun" = xyes; then
- HAVE_SUN_TRUE=
- HAVE_SUN_FALSE='#'
-else
- HAVE_SUN_TRUE='#'
- HAVE_SUN_FALSE=
-fi
-
-
plugindir=`pkg-config audacious --variable=plugin_dir`
@@ -13580,24 +14951,6 @@ fi
localedir="$datadir/locale"
-BEEP_DEFINES="$CFLAGS -DDATA_DIR=\\\"$datadir/audacious\\\" -DPLUGIN_DIR=\\\"$plugindir\\\" -DPLUGINSUBS=$pluginsubs -DLOCALEDIR=\\\"$localedir\\\""
-CFLAGS="$CFLAGS $EXTRA_CFLAGS"
-
-if test "x$enable_user_plugin_dir" = "xno"; then
-
-$as_echo "#define DISABLE_USER_PLUGIN_DIR /**/" >>confdefs.h
-
-fi
-
-
-$as_echo "#define BMP_RCPATH \".audacious\"" >>confdefs.h
-
-
-
-
-
-
-
@@ -13611,7 +14964,7 @@ ac_config_files="$ac_config_files buildsys.mk extra.mk"
- ${as_echo:="echo"} "${as_me:="configure"}: touching .deps files"
+ ${as_echo:="echo"} ${as_me:="configure"}": touching .deps files"
for i in $(find . -name Makefile); do
DEPSFILE="$(dirname $i)/.deps"
test -f "$DEPSFILE" && rm "$DEPSFILE"
@@ -13727,7 +15080,6 @@ LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
-
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
as_fn_error $? "conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -13736,38 +15088,11 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+
if test -z "${USE_IPV6_TRUE}" && test -z "${USE_IPV6_FALSE}"; then
as_fn_error $? "conditional \"USE_IPV6\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${USE_CHARDET_TRUE}" && test -z "${USE_CHARDET_FALSE}"; then
- as_fn_error $? "conditional \"USE_CHARDET\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_CDROM_TRUE}" && test -z "${HAVE_CDROM_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_CDROM\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_LINUX_JOYSTICK_TRUE}" && test -z "${HAVE_LINUX_JOYSTICK_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_LINUX_JOYSTICK\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${ARCH_X86_TRUE}" && test -z "${ARCH_X86_FALSE}"; then
- as_fn_error $? "conditional \"ARCH_X86\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${USE_X86ASM_TRUE}" && test -z "${USE_X86ASM_FALSE}"; then
- as_fn_error $? "conditional \"USE_X86ASM\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_SOLARIS_TRUE}" && test -z "${HAVE_SOLARIS_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_SOLARIS\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${HAVE_SUN_TRUE}" && test -z "${HAVE_SUN_FALSE}"; then
- as_fn_error $? "conditional \"HAVE_SUN\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -14177,7 +15502,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by audacious-plugins $as_me 2.4.4, which was
+This file was extended by audacious-plugins $as_me 3.2, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14237,13 +15562,13 @@ $config_headers
Configuration commands:
$config_commands
-Report bugs to <bugs+audacious-plugins@atheme.org>."
+Report bugs to the package provider."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-audacious-plugins config.status 2.4.4
+audacious-plugins config.status 3.2
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
@@ -14254,6 +15579,7 @@ gives unlimited permission to copy, distribute and modify it."
ac_pwd='$ac_pwd'
srcdir='$srcdir'
INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
test -n "\$AWK" || AWK=awk
_ACEOF
@@ -14362,8 +15688,8 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
- # from automake.
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
# Capture the value of LINGUAS because we need it to compute CATALOGS.
LINGUAS="${LINGUAS-%UNSET%}"
@@ -14379,7 +15705,7 @@ do
case $ac_config_target in
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
"buildsys.mk") CONFIG_FILES="$CONFIG_FILES buildsys.mk" ;;
"extra.mk") CONFIG_FILES="$CONFIG_FILES extra.mk" ;;
@@ -14830,6 +16156,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
*) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -14884,6 +16215,7 @@ s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
@@ -15032,7 +16364,7 @@ $as_echo X"$file" |
done
}
;;
- "default-1":C)
+ "po-directories":C)
for ac_file in $CONFIG_FILES; do
# Support "outfile[:infile[:infile...]]"
case "$ac_file" in
@@ -15052,12 +16384,15 @@ $as_echo X"$file" |
/*) top_srcdir="$ac_given_srcdir" ;;
*) top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
rm -f "$ac_dir/POTFILES"
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
# on $ac_dir but don't depend on user-specified configuration
# parameters.
if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
@@ -15065,27 +16400,36 @@ $as_echo X"$file" |
if test -n "$OBSOLETE_ALL_LINGUAS"; then
test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
fi
- ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
else
# The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
case "$ac_given_srcdir" in
.) srcdirpre= ;;
*) srcdirpre='$(srcdir)/' ;;
esac
POFILES=
- GMOFILES=
UPDATEPOFILES=
DUMMYPOFILES=
+ GMOFILES=
for lang in $ALL_LINGUAS; do
POFILES="$POFILES $srcdirpre$lang.po"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
done
# CATALOGS depends on both $ac_dir and the user's LINGUAS
# environment variable.
@@ -15120,7 +16464,7 @@ $as_echo X"$file" |
done
fi
test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
if test -f "$f"; then
case "$f" in
@@ -15179,19 +16523,17 @@ echo " Install path: ${audacious_plugin_root}"
echo
echo " Output Plugins"
echo " --------------"
-echo " Open Sound System (oss): $have_oss"
-echo " Open Sound System v4 (oss4): $have_oss4"
+echo " Open Sound System (oss4): $enable_oss4"
echo " Advanced Linux Sound Arch. (alsa): $have_alsa"
echo " PulseAudio (pulse): $have_pulse"
-echo " RoarAudio (roaraudio): $have_roar"
-echo " Jack Audio Connection Kit (jack): $have_jack"
-echo " BSD/SUN audio output (sun): $have_sun"
-echo " Mac OS X sound support (CoreAudio): $have_coreaudio"
+echo " Jack Audio Connection Kit (jack): $enable_jack"
+echo " Simple DirectMedia Layer (sdlout): $enable_sdlout"
echo " FileWriter: $enable_filewriter"
echo " -> FileWriter MP3 output part: $have_lame"
echo " -> FileWriter Vorbis output part: $have_vorbisenc"
echo " -> FileWriter FLAC output part: $have_writer_flac"
echo " Null Audio output (null): yes"
+echo " Open Sound System v3 (deprecated): $enable_oss"
echo
echo " Input Plugins"
echo " -------------"
@@ -15211,64 +16553,65 @@ echo " Commodore 64 audio (SID): $have_sidplay $xs_have_sidplay2_
echo " -> libSIDPlay1 support: $xs_have_sidplay1"
echo " -> libSIDPlay2 support: $xs_have_sidplay2"
echo " -> distortion patched libSIDPlay2: $xs_have_distortion"
-echo " Game music (spc, nsf & gbs): yes"
+echo " Game music (spc, nsf & gbs): $enable_console"
echo " PlayStation (psf/psf2) audio: $enable_psf"
-echo " Nintendo 64 audio (usf): $enable_usf"
-echo " Nintendo DS audio (xsf): yes experimental"
+echo " Nintendo DS audio (xsf): $enable_xsf"
echo " AdLib synthesizer (adplug): $have_adplug"
-echo " Apple Lossless Audio Codec (alac): $have_ffaudio"
echo " WavPack 4.31+ (wavpack): $have_wavpack"
echo " Metronom: yes"
echo
echo " General"
echo " -------"
echo " Alarm: yes"
-echo " Song Change: yes"
+echo " Album Art: yes"
+echo " MPRIS 2 Server: $enable_mpris2"
+echo " Search Tool: yes"
+echo " Song Change: $enable_songchange"
echo " Status Icon: $have_statusicon"
echo " Audacious OSD: $have_aosd"
echo " -> X Composite support: $have_aosd_xcomp"
echo " libnotify OSD: $have_notify"
-echo " Control via event device (evdev-plug): $have_evdevplug"
echo " Global Hotkey Plugin: $have_hotkey"
echo " Gnome Shortcuts Plugin: $have_gnomeshortcuts"
-echo " LIRC: $have_lirc"
echo " AudioScrobbler Client: $have_scrobbler"
echo " Upload to MTP device: $have_mtp_up"
-echo " Bluetooth audio support: $have_bluetooth"
-echo " MacOS Dock Album Art plugin: $have_dockalbumart"
-echo " Streambrowser: $enable_streambrowser"
echo " LyricWiki viewer: $enable_lyricwiki"
echo
echo " Effect"
echo " ------"
+echo " Channel Mixer: yes"
+echo " Crystalizer: yes"
echo " Dynamic Range Compressor: yes"
-echo " LADSPA effects host (ladspa): yes"
-echo " Voice Removal: yes"
-echo " Extra Stereo: yes"
echo " Echo/Surround: yes"
+echo " Extra Stereo: yes"
+echo " LADSPA Host: yes"
echo " SndStretch: yes"
-echo " Crystalizer: yes"
+echo " Voice Removal: yes"
echo " Bauer stereophonic-to-binaural (bs2b): $have_bs2b"
echo " Sample Rate Converter (resample): $enable_resample"
echo
echo " Visualization"
echo " -------------"
echo " Blur Scope: yes"
-echo " Spectrum Analyzer: yes"
-echo " Paranormal Visualization Library: $have_paranormal"
-echo " projectM 0.x (GL milkdrop): $have_projectm"
-echo " projectM 1.x (GL milkdrop): $have_projectm1"
+echo " Cairo Spectrum Analyzer: yes"
echo
echo " Transport"
echo " ---------"
-echo " gio transport: $enable_gio"
echo " neon-based http/https: $have_neon"
echo " libmms-based mms: $have_mms"
+echo " GIO transport (experimental): $enable_gio"
+echo " SMB transport (experimental): $enable_smb"
echo
echo " Container"
echo " ---------"
+echo " Audacious playlist format (audpl): yes"
echo " Winamp PLS playlist format (pls): yes"
echo " M3U playlist format (m3u): yes"
echo " XML Sharable Playlist Format (xspf): yes"
echo " CUE playlist format (cue): $have_cue"
echo
+echo " Interfaces"
+echo " ----------"
+echo " GTK (gtkui): $enable_gtkui"
+echo " Winamp Classic (skins): $enable_skins"
+echo
diff --git a/configure.ac b/configure.ac
index ce48e31..5d97678 100755..100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,191 +1,109 @@
-dnl Process this file with autoconf to produce a configure script.
+dnl ***
+dnl *** Process this file with autoconf to produce a configure script.
+dnl ***
-AC_INIT([audacious-plugins], [2.4.4], [bugs+audacious-plugins@atheme.org])
+dnl Initialize
+dnl ==========
AC_PREREQ([2.59])
+AC_INIT([audacious-plugins], [3.2])
+AC_COPYRIGHT([(C) 2005-2012 Audacious Team])
-AC_CANONICAL_HOST
-AC_CANONICAL_TARGET
-AC_CONFIG_HEADERS([config.h])
-
-dnl XXX kludge for FreeBSD
-if test -d "/usr/X11R6/include"; then
- CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include"
-fi
-
-dnl append audacious header path to CPPFLAGS when --prefix is specified.
-if test "x$prefix" != "xNONE" ; then
- CPPFLAGS="$CPPFLAGS -I${includedir}"
-fi
-
-dnl OMK bootstrap
AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])
AC_SUBST([VERSION], [AC_PACKAGE_VERSION])
+AC_DEFINE_UNQUOTED([PACKAGE], "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED([VERSION], "$VERSION", [Version number of package])
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])
-
-dnl Check for C compiler
-
-AC_PROG_CC
-AC_PROG_CXX
-AC_ISC_POSIX
-AC_C_BIGENDIAN
-
-if test "x$GCC" = "xyes"; then
- CFLAGS="$CFLAGS -pipe -Wall"
- CXXFLAGS="$CXXFLAGS -pipe -Wall"
-fi
-
-dnl Chainsaw says this is broken.
-dnl LDFLAGS="$LDFLAGS -z defs"
-
-dnl Large file support
-dnl ==================
-CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
-
-dnl Locate a program and check that its version is acceptable.
-dnl AC_PROG_CHECK_VER(var, namelist, version-switch,
-dnl [version-extract-regexp], version-glob [, do-if-fail])
-AC_DEFUN([AC_CHECK_PROG_VER],
-[AC_CHECK_PROGS([$1], [$2])
-if test -z "[$]$1"; then
- ac_verc_fail=yes
-else
- # Found it, now check the version.
- AC_MSG_CHECKING([version of [$]$1])
-changequote(<<,>>)dnl
- ac_prog_version=`<<$>>$1 $3 2>&1 ifelse(<<$4>>,,,
- <<| sed -n 's/^.*patsubst(<<$4>>,/,\/).*$/\1/p'>>)`
- case $ac_prog_version in
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- <<$5>>)
-changequote([,])dnl
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-
- esac
- AC_MSG_RESULT([$ac_prog_version])
-fi
-ifelse([$6],,,
-[if test $ac_verc_fail = yes; then
- $6
-fi])
-])
-
-GCC42_CFLAGS="-fgnu89-inline"
-AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v,
- [version \([egcygnustpi-]*[0-9.]*\)], [4.[2-9]* ],
- GCC42_CFLAGS="")
-
-dnl Check for assembler
-
-AM_PROG_AS
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+AC_CONFIG_HEADERS([config.h])
-dnl Checks for various programs
+AUD_COMMON_PROGS
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
+BUILDSYS_INIT
+BUILDSYS_SHARED_LIB
-AC_PATH_PROG(RM, rm)
-AC_PATH_PROG(MV, mv)
-AC_PATH_PROG(CP, cp)
-AC_PATH_PROG(AR, ar)
-AC_PATH_PROG(TR, tr)
-AC_PATH_PROG(RANLIB, ranlib)
+dnl Headers and functions
+dnl =====================
+AC_CHECK_FUNCS([fcntl fsync mkdtemp])
-dnl Gettext -nenolod
+dnl gettext
+dnl =======
AM_GNU_GETTEXT([external])
+if test "$MSGFMT" = ":" ; then
+ AC_MSG_ERROR([msgfmt was not found; have you installed gettext?])
+fi
-AC_CHECK_FUNC(strnlen, [AC_DEFINE(HAVE_STRNLEN, 1, [Whether we have strnlen])],)
-
-dnl Path settings
+dnl Check for Audacious
+dnl ===================
-AC_ARG_WITH(dev-dsp,
- [ --with-dev-dsp=path Path to OSS DSP data pipe, default is /dev/dsp.],
- [dev_dsp=$withval],
- [dev_dsp=/dev/dsp]
-)
-AC_DEFINE_UNQUOTED(DEV_DSP, "$dev_dsp",
- [Path to OSS DSP, really just a data pipe, default is /dev/dsp.]
+PKG_CHECK_MODULES(AUDACIOUS, [audacious >= 3.2],
+ [],
+ [AC_MSG_ERROR([Cannot find Audacious 3.2; have you installed Audacious yet?])]
)
-AC_ARG_WITH(dev-mixer,
- [ --with-dev-mixer=path Path to OSS sound mixer, default is /dev/mixer.],
- [dev_mixer=$withval],
- [dev_mixer=/dev/mixer]
-)
-AC_DEFINE_UNQUOTED(DEV_MIXER, "$dev_mixer",
- [Path to OSS mixer, default is /dev/mixer.]
-)
+CPPFLAGS="$CPPFLAGS $AUDACIOUS_CFLAGS"
+LIBS="$LIBS $AUDACIOUS_LIBS"
-dnl These plugins are always built.
+dnl Default Set of Plugins
+dnl ======================
-INPUT_PLUGINS="tonegen console xsf metronom vtx"
+INPUT_PLUGINS="tonegen metronom vtx"
OUTPUT_PLUGINS="null"
-EFFECT_PLUGINS="compressor crossfade crystalizer ladspa sndstretch stereo_plugin voice_removal echo_plugin"
-GENERAL_PLUGINS="song_change alarm skins gtkui"
-VISUALIZATION_PLUGINS="blur_scope spectrum"
-CONTAINER_PLUGINS="m3u pls"
+EFFECT_PLUGINS="compressor crossfade crystalizer ladspa mixer sndstretch stereo_plugin voice_removal echo_plugin"
+GENERAL_PLUGINS="alarm albumart search-tool"
+VISUALIZATION_PLUGINS="blur_scope cairo-spectrum"
+CONTAINER_PLUGINS="audpl m3u pls asx"
TRANSPORT_PLUGINS="unix-io"
-dnl Check for Audacious
+dnl Check for GTK+
+dnl ==============
-PKG_CHECK_MODULES(AUDACIOUS, [audacious >= 2.4],
- [ADD_PC_REQUIRES([audacious >= 2.4])],
- [AC_MSG_ERROR([Cannot find Audacious 2.4 or later, have you installed audacious yet?])]
-)
+AC_ARG_ENABLE([gtk3],
+ [AS_HELP_STRING([--disable-gtk3], [Use GTK2 even if GTK3 is present])],
+ [use_gtk3=$enableval], [use_gtk3=yes])
-CFLAGS="$CFLAGS $AUDACIOUS_CFLAGS"
-CPPFLAGS="$CPPFLAGS $AUDACIOUS_CPPFLAGS"
-LIBS="$LIBS $AUDACIOUS_LIBS"
+if test $use_gtk3 = yes ; then
+ PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.0.0], [use_gtk3=yes], [use_gtk3=no])
+fi
-dnl Check for GTK/GLib/GThread/Pango/DBus
+if test $use_gtk3 = no ; then
+ PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.12.0], [use_gtk3=no],
+ AC_MSG_ERROR([Cannot find GTK headers. Aborting ...]))
+fi
-PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.12.0 gthread-2.0],
- [ADD_PC_REQUIRES([glib-2.0 >= 2.12.0])],
- [AC_MSG_ERROR([Cannot find Glib2 >= 2.12.0])]
-)
+AC_SUBST([GTK_LIBS])
+AC_SUBST([GTK_CFLAGS])
-PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.8.0],
- [ADD_PC_REQUIRES([gtk+-2.0 >= 2.8.0])],
- [AC_MSG_ERROR([Cannot find Gtk+2 >= 2.8.0])]
-)
+dnl Check for GIO
+dnl =============
-AC_ARG_ENABLE(gio, [ --disable-gio disable GIO support (default=enabled if GIO present)],
- enable_gio=$enableval, enable_gio=yes)
+AC_ARG_ENABLE(gio,
+ AS_HELP_STRING([--enable-gio], [enable GIO support (default=disabled)]),
+ enable_gio=$enableval, enable_gio=no)
if test "x$enable_gio" = "xyes"; then
- PKG_CHECK_MODULES(GIO, [gio-2.0 >= 2.0], [ADD_PC_REQUIRES([gio-2.0 >= 2.0])], [enable_gio=no])
+ PKG_CHECK_MODULES(GIO, [gio-2.0 >= 2.0], [enable_gio=yes], [enable_gio=no])
fi
if test "x$enable_gio" = "xyes"; then
TRANSPORT_PLUGINS="$TRANSPORT_PLUGINS gio"
fi
-PKG_CHECK_MODULES(PANGO, [pango >= 1.8.0],
- [ADD_PC_REQUIRES([pango >= 1.8.0])],
- [AC_MSG_ERROR([Cannot find Pango >= 1.8.0])]
-)
-
-AC_ARG_ENABLE(dbus,
- [ --disable-dbus disable DBus support (default=enabled)],
- enable_dbus=$enableval, enable_dbus=yes)
-if test "x$enable_dbus" = "xyes"; then
- PKG_CHECK_MODULES(DBUS, [dbus-1 >= 0.60 dbus-glib-1 >= 0.60],
- [ADD_PC_REQUIRES([dbus-1 >= 0.60 dbus-glib-1 >= 0.60])
- AC_DEFINE(USE_DBUS, 1, [Define if D-Bus support enabled])],
- [AC_MSG_ERROR([Cannot find dbus-glib >= 0.60])]
- ])
-fi
-
-
-dnl Check for libmowgli.
+### ---------------------------------------------------------------------------
+dnl Pthread support
+dnl ===============
+PTHREAD_LIBS=
+PTHREAD_CFLAGS=
-PKG_CHECK_MODULES(MOWGLI, [libmowgli >= 0.4.0],
- [ADD_PC_REQUIRES([libmowgli >= 0.4.0])],
- [AC_MSG_ERROR([Cannot find libmowgli >= 0.4.0, try http://www.atheme.org/projects/mowgli.shtml])]
+AC_CHECK_LIB(pthread, pthread_create, PTHREAD_LIBS="-lpthread",
+ [AC_CHECK_LIB(pthreads, pthread_create, PTHREAD_LIBS="-lpthreads",
+ [AC_CHECK_LIB(pthreadGC2, pthread_create, PTHREAD_LIBS="-lpthreadGC2")]
+ )]
)
+AC_SUBST([PTHREAD_LIBS])
+AC_SUBST([PTHREAD_CFLAGS])
+
dnl IPv6 support
dnl ========================
AC_ARG_ENABLE(ipv6,
@@ -197,36 +115,37 @@ fi
AM_CONDITIONAL(USE_IPV6,test "x$enable_ipv6" = "xyes")
AC_SUBST(USE_IPV6)
-dnl chardet support
-dnl ========================
-AC_ARG_ENABLE(chardet,
- [ --enable-chardet enable character set detection support (default=no)],
- enable_chardet=$enableval, enable_chardet=no)
-if test "x$enable_chardet" = "xyes"; then
- AC_DEFINE(USE_CHARDET, 1, [Define if character set detection enabled] )
+dnl Console
+dnl =======
+
+AC_ARG_ENABLE(console,
+ [ --disable-console disable game music decoder (console)],
+ [enable_console=$enableval], [enable_console="yes"])
+
+if test $enable_console = yes ; then
+ AC_CHECK_HEADERS([zlib.h], [enable_console=yes],
+ [AC_MSG_WARN([Cannot find zlib.h; disabling game music decoder (console)])
+ enable_console=no])
fi
-AM_CONDITIONAL(USE_CHARDET,test "x$enable_chardet" = "xyes")
-AC_SUBST(USE_CHARDET)
-dnl plugin stuff
-dnl ========================
+if test $enable_console = yes ; then
+ INPUT_PLUGINS="$INPUT_PLUGINS console"
+fi
-BUILDSYS_SHARED_LIB
-BUILDSYS_PROG_IMPLIB
-test "x$PROG_IMPLIB_NEEDED" = "xyes" && LIBS="$LIBS -L\${libdir} -laudacious.exe"
-
-AC_MSG_CHECKING([if you are running Apple-GCC])
-case "$target" in
- *-apple-*)
- AC_MSG_RESULT([yes, sorry you poor bastard])
- LDFLAGS="$LDFLAGS -Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices"
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
-esac
-
-dnl *** PulseAudio
+dnl XSF
+dnl =======
+
+AC_ARG_ENABLE(xsf,
+ [ --disable-xsf disable Nintendo DS audio decoder (xsf)],
+ [enable_xsf=$enableval], [enable_xsf="yes"])
+
+if test $enable_xsf = yes ; then
+ INPUT_PLUGINS="$INPUT_PLUGINS xsf"
+fi
+
+
+dnl PulseAudio
+dnl ==========
AC_ARG_ENABLE( pulse,
[ --disable-pulse disable PulseAudio output plugin (default=enabled)],
@@ -245,116 +164,11 @@ else
have_pulse=no
fi
-dnl *** RoarAudio
-
-AC_ARG_ENABLE(roar,
- [ --disable-roar disable PulseAudio output plugin (default=enabled)],
- [enable_roar=$enableval],
- [enable_roar="yes"]
-)
-
-if test "x$enable_roar" = "xyes"; then
- PKG_CHECK_MODULES(LIBROAR, [libroar],
- [have_roar=yes
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS roaraudio"],
- [have_roar=no]
- )
-else
- AC_MSG_RESULT([*** pulseaudio output plugin disabled per user request ***])
- have_pulse=no
-fi
-
-dnl *** CoreAudio
-
-AC_ARG_ENABLE(coreaudio,
- [ --disable-coreaudio disable CoreAudio output plugin (default=enabled)],
- [enable_coreaudio=$enableval],
- [enable_coreaudio="yes"]
-)
-
-if test "x$enable_coreaudio" = "xyes"; then
- AC_CHECK_HEADERS([CoreServices/CoreServices.h],
- [have_coreaudio=yes
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS CoreAudio"],
- [have_coreaudio=no])
-else
- AC_MSG_RESULT([*** CoreAudio output plugin disabled per user request ***])
- have_coreaudio=no
-fi
-
-dnl *** Dock Album Art (MacOS)
-
-AC_ARG_ENABLE(dockalbumart,
- [ --disable-dockalbumart disable MacOS dock albumart plugin (default=guess)],
- [enable_dockalbumart=$enableval],
- [enable_dockalbumart="yes"]
-)
-
-if test "x$enable_dockalbumart" = "xyes"; then
- AC_CHECK_HEADERS([Carbon/Carbon.h],
- [have_dockalbumart=yes
- GENERAL_PLUGINS="$GENERAL_PLUGINS dockalbumart"],
- [have_dockalbumart=no])
-else
- AC_MSG_RESULT([*** DockAlbumArt plugin disabled per user request ***])
- have_dockalbumart=no
-fi
-
-dnl *** AltiVec
-
-AC_ARG_ENABLE(altivec,
- [ --disable-altivec disable AltiVec support. (default=enabled) ],
- [enable_altivec=$enableval],
- [enable_altivec=yes]
-)
-if test "x$enable_altivec" = "xyes"; then
- AC_CHECK_HEADERS(altivec.h,
- [AC_DEFINE(HAVE_ALTIVEC, 1, [Define to 1 if your system has AltiVec.])
- AC_DEFINE(HAVE_ALTIVEC_H, 1, [Define to 1 if your system has an altivec.h file.])
- AC_DEFINE(ARCH_POWERPC, 1, [Define to 1 if your system is a PowerPC.])
- DCT64=dct64_altivec.c
- SIMD_CFLAGS=-maltivec
- AC_SUBST(SIMD_CFLAGS)],
- [DCT64=dct64.c]
- )
-fi
-AC_SUBST(DCT64)
-
-dnl *** SSE2
-
-AC_ARG_ENABLE(sse2,
- [ --disable-sse2 disable SSE2 support. (default=enabled) ],
- [enable_sse2=$enableval],
- [enable_sse2=yes]
-)
-if test "x$enable_sse2" = "xyes"; then
- AC_MSG_CHECKING(SSE2)
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS="-msse2"
- AC_TRY_RUN([
- #include <emmintrin.h>
- int main()
- {
- _mm_setzero_pd();
- asm volatile("xorpd %xmm0,%xmm0\n\t");
- return 0;
- }
- ],
- [AC_MSG_RESULT(SSE2 yes)
- AC_DEFINE(HAVE_SSE2, 1, [Define to 1 if your system has SSE2])
- SIMD_CFLAGS=-msse2],
- [AC_MSG_RESULT(SSE2 no)],
- )
-fi
-AC_SUBST(SIMD_CFLAGS)
-CFLAGS="$ac_save_CFLAGS"
-
-
dnl PSF
dnl ===
AC_ARG_ENABLE(psf,
- [ --disable-psf disable PlayStation (psf/psf2) audio decoder],
+ [ --disable-psf disable PlayStation (psf/psf2) audio decoder],
[enable_psf=$enableval],
[enable_psf=yes])
@@ -362,109 +176,21 @@ if test "$enable_psf" = "yes"; then
INPUT_PLUGINS="$INPUT_PLUGINS psf"
fi
-
-dnl *** USF
-
-AC_ARG_ENABLE(usf,
- [ --enable-usf enable the USF input plugin (default=disabled)],
- [enable_usf=$enableval],
- [enable_usf=no]
-)
-
-if test "x$enable_usf" = "xyes"; then
- AC_MSG_CHECKING([if your platform is supported for the USF plugin])
- case "$target" in
- x86_64-*-linux-gnu)
- AC_MSG_RESULT([yes, AMD64 Linux])
- enable_usf=yes
- ;;
- i*86-*-linux-gnu)
- AC_MSG_RESULT([yes, X86 Linux])
- enable_usf=yes
- ;;
- *)
- AC_MSG_RESULT([no])
- enable_usf=no
- ;;
- esac
-
- if test "x$enable_usf" = "xyes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS usf"
- fi
-fi
-
dnl *** MP3
AC_ARG_ENABLE(mp3,
- [ --disable-mp3 disable mp3 plugin. (default=enabled) ],
- [enable_mp3=$enableval],
- [enable_mp3=yes]
-)
-
-if test "x$enable_mp3" = "xyes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS mpg123"
-fi
-
-dnl *** Rocklight
-
-AC_ARG_ENABLE(rocklight,
- AS_HELP_STRING([--disable-rocklight], [disable Rocklight vis plugin (default=enabled)]),
- [enable_rocklight="$enableval"],
- [enable_rocklight="yes"]
-)
-
-if test "x$enable_rocklight" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS rocklight"
-fi
-
-dnl *** LIRC client libraries
+ AS_HELP_STRING([--disable-mp3], [disable MP3 plugin (default=enabled)]),
+ [enable_mp3=$enableval], [enable_mp3=yes])
-AC_ARG_ENABLE(lirc,
- [ --disable-lirc disable LIRC plugin (default=enabled)],
- [enable_lirc=$enableval],
- [enable_lirc="yes"]
-)
-
-if test "x$enable_lirc" = "xyes"; then
- AC_CHECK_LIB([lirc_client],[lirc_init],[have_lirc=yes],[have_lirc=no])
-else
- AC_MSG_RESULT([*** LIRC plugin disabled per user request ***])
- have_lirc="no"
-fi
-
-if test "x$have_lirc" = "xyes"; then
- AC_CHECK_HEADER(lirc/lirc_client.h,[],[have_lirc=no])
-fi
-
-if test "x$have_lirc" = "xyes"; then
- GENERAL_PLUGINS="$GENERAL_PLUGINS lirc"
-fi
+if test $enable_mp3 = yes ; then
+ PKG_CHECK_MODULES(MPG123, [libmpg123 >= 1.12],
+ [enable_mp3=yes], [enable_mp3=no])
-dnl *** EvDev-Plug general plugin (only built on Linux)
-
-AC_ARG_ENABLE(evdevplug,
- [ --disable-evdevplug disable Linux evdev plugin (default=enabled)],
- [enable_evdevplug=$enableval],
- [enable_evdevplug="yes"]
-)
-
-if test "x$enable_evdevplug" = "xyes"; then
- case "$target" in
- *-*-linux*)
- have_evdevplug="yes"
- ;;
- *)
- AC_MSG_RESULT([*** Linux evdev plugin disabled (host does not run linux) ***])
- have_evdevplug="no"
- ;;
- esac
-else
- AC_MSG_RESULT([*** Linux evdev plugin disabled per user request ***])
- have_evdevplug="no"
-fi
-
-if test "x$have_evdevplug" = "xyes"; then
- GENERAL_PLUGINS="$GENERAL_PLUGINS evdev-plug"
+ if test $enable_mp3 = yes ; then
+ INPUT_PLUGINS="$INPUT_PLUGINS mpg123"
+ else
+ AC_MSG_RESULT([*** libmpg123 not found; MP3 plugin disabled])
+ fi
fi
dnl *** Global Hotkey general plugin (only built on X11)
@@ -476,8 +202,11 @@ AC_ARG_ENABLE(hotkey,
)
if test "x$enable_hotkey" = "xyes"; then
- have_hotkey="yes"
- PKG_CHECK_MODULES(GDKX11,[gdk-x11-2.0 >= 2.6.0],,[have_hotkey="no"])
+ if test $use_gtk3 = yes ; then
+ PKG_CHECK_MODULES(GDKX11, [gdk-x11-3.0], [have_hotkey="yes"], [have_hotkey="no"])
+ else
+ PKG_CHECK_MODULES(GDKX11, [gdk-x11-2.0], [have_hotkey="yes"], [have_hotkey="no"])
+ fi
else
AC_MSG_RESULT([*** X11 Global Hotkey plugin disabled per user request ***])
have_hotkey="no"
@@ -497,8 +226,10 @@ AC_ARG_ENABLE(gnomeshortcuts,
if test "x$enable_gnomeshortcuts" = "xyes"; then
have_gnomeshortcuts="yes"
- PKG_CHECK_MODULES(DBUS, [dbus-1 >= 0.60 dbus-glib-1 >= 0.60],,
- [AC_MSG_ERROR([Cannot find dbus-glib >= 0.60 for gnomeshortcuts plugin])])
+ PKG_CHECK_MODULES(DBUS, [dbus-1 >= 0.60 dbus-glib-1 >= 0.60],
+ [have_gnomeshortcuts=yes],
+ [AC_MSG_WARN([Cannot find dbus-glib >= 0.60; disabling Gnome shortcuts plugin.])
+ have_gnomeshortcuts=no])
else
AC_MSG_RESULT([*** Gnome Shortcuts Plugin disabled per user request ***])
have_gnomeshortcuts="no"
@@ -508,20 +239,37 @@ if test "x$have_gnomeshortcuts" = "xyes"; then
GENERAL_PLUGINS="$GENERAL_PLUGINS gnomeshortcuts"
fi
-dnl *** Status Icon plugin (for X11 only)
+dnl Song Change
+dnl ===========
+
+AC_ARG_ENABLE(songchange,
+ [ --disable-songchange disable song change plugin],
+ [enable_songchange=$enableval], [enable_songchange="yes"])
+
+if test $enable_songchange = yes ; then
+ AC_CHECK_HEADERS([sys/wait.h], [enable_songchange=yes],
+ [AC_MSG_WARN([Cannot find sys/wait.h; disabling song change plugin])
+ enable_songchange=no])
+fi
+
+if test $enable_songchange = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS song_change"
+fi
+
+dnl Status Icon
+dnl ===========
AC_ARG_ENABLE(statusicon,
- [ --disable-statusicon disable X11 Status Icon plugin (default=enabled)],
- [enable_statusicon=$enableval],
- [enable_statusicon="yes"]
-)
+ [ --disable-statusicon disable X11 Status Icon plugin (default=enabled)],
+ [have_statusicon=$enableval], [have_statusicon="yes"])
-if test "x$enable_statusicon" = "xyes"; then
- PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.16.0], [have_statusicon=yes],
- [have_statusicon=no])
+if test $have_statusicon = yes ; then
+ if test $use_gtk3 != yes ; then
+ PKG_CHECK_MODULES(GTK216, [gtk+-2.0 >= 2.16.0], [have_statusicon=yes],
+ [have_statusicon=no])
+ fi
else
AC_MSG_RESULT([*** X11 Status Icon plugin disabled per user request ***])
- have_statusicon="no"
fi
if test "x$have_statusicon" = "xyes"; then
@@ -614,6 +362,23 @@ if test "x$have_notify" = "xyes"; then
GENERAL_PLUGINS="$GENERAL_PLUGINS notify"
fi
+dnl MPRIS 2 (requires GDBus)
+dnl ========================
+
+AC_ARG_ENABLE(mpris2,
+ AS_HELP_STRING([--disable-mpris2], [disable MPRIS 2 support (default=enabled)]),
+ [enable_mpris2=$enableval], [enable_mpris2=yes])
+
+if test $enable_mpris2 = yes ; then
+ PKG_CHECK_MODULES([GIO_UNIX], [gio-unix-2.0 >= 2.30],
+ [enable_mpris2=yes], [enable_mpris2=no])
+fi
+
+if test $enable_mpris2 = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS mpris2"
+ AC_SUBST(GIO_UNIX_CFLAGS)
+ AC_SUBST(GIO_UNIX_LIBS)
+fi
dnl *** AdPlug requirement (libbinio)
@@ -659,7 +424,7 @@ if test "x$have_oggvorbis" = "xyes"; then
INPUT_PLUGINS="$INPUT_PLUGINS vorbis"
fi
-dnl *** FLACng (in progress replacement to XMMS-flac port)
+dnl *** FLACng
AC_ARG_ENABLE(flacng,
[ --disable-flacng disable flac input plugin (default=enabled)],
@@ -668,8 +433,9 @@ AC_ARG_ENABLE(flacng,
)
if test "x$enable_flacng" = "xyes"; then
- AM_PATH_LIBFLAC([have_flacng=yes],
- [AC_MSG_WARN([*** Cannot find libFLAC, FLACng will not be built ***])
+ PKG_CHECK_MODULES(LIBFLAC, [flac >= 1.2.1],
+ [have_flacng=yes],
+ [AC_MSG_WARN([*** Cannot find libFLAC 1.2.1+, FLAC support will not be built ***])
have_flacng=no]
)
else
@@ -764,12 +530,12 @@ AC_ARG_ENABLE(modplug,
[enable_modplug="yes"]
)
-if test "x$enable_modplug" = "xyes"; then
- INPUT_PLUGINS="$INPUT_PLUGINS modplug"
- have_modplug="yes"
-else
- AC_MSG_RESULT([*** ModPlug plugin disabled per user request ***])
- have_modplug="no"
+if test $enable_modplug = yes ; then
+ PKG_CHECK_MODULES(MODPLUG, libmodplug,
+ [INPUT_PLUGINS="$INPUT_PLUGINS modplug"
+ have_modplug=yes],
+ [AC_MSG_WARN([*** Cannot find libmodplug; modplug plugin disabled ***])
+ have_modplug=no])
fi
dnl *** FFaudio
@@ -781,22 +547,10 @@ AC_ARG_ENABLE(ffaudio,
[enable_ffaudio="yes"]
)
-dnl In 2010, some libavcodec functions were moved into a new library called
-dnl libavcore, making our checks here a bit complex.
-
if test $enable_ffaudio = yes ; then
- PKG_CHECK_MODULES([NEED_AVCORE], [libavcodec >= 52.94.3],
- [have_new_ffmpeg=yes], [have_new_ffmpeg=no])
-
- if test $have_new_ffmpeg = yes ; then
- PKG_CHECK_MODULES([FFMPEG],
- [libavcodec >= 52.20.0 libavcore >= 0.12.0 libavformat >= 52.31.0 libavutil >= 49.15.0],
- [have_ffaudio=yes], [have_ffaudio=no])
- else
- PKG_CHECK_MODULES([FFMPEG],
- [libavcodec >= 52.20.0 libavformat >= 52.31.0 libavutil >= 49.15.0],
- [have_ffaudio=yes], [have_ffaudio=no])
- fi
+ PKG_CHECK_MODULES([FFMPEG],
+ [libavcodec >= 53.40.0 libavformat >= 53.5.0 libavutil >= 50.42.0],
+ [have_ffaudio=yes], [have_ffaudio=no])
fi
if test "x$have_ffaudio" = "xyes"; then
@@ -804,19 +558,26 @@ if test "x$have_ffaudio" = "xyes"; then
fi
dnl *** jack output plugin
-AC_ARG_ENABLE( jack,
-[ --disable-jack disable jack output plugin (default=enabled)], [enable_jack=$enableval],
- [enable_jack="yes"])
-if test "x$enable_jack" = "xyes"; then
- AM_PATH_JACK(have_jack=yes, have_jack=no)
-else
- AC_MSG_RESULT([*** jack plugin disabled per user request ***])
- have_jack=no
-fi
+AC_ARG_ENABLE(jack,
+ AS_HELP_STRING([--disable-jack], [disable JACK output plugin (default=enabled)]),
+ [enable_jack=$enableval], [enable_jack=yes])
+
+if test $enable_jack = yes ; then
+ PKG_CHECK_MODULES(JACK, [jack >= 1.9.7],
+ [enable_jack=$enable_jack], [
+ PKG_CHECK_MODULES(JACK, [jack >= 0.120.1 jack < 1.0],
+ [enable_jack=$enable_jack], [enable_jack=no])
+ ])
+
+ PKG_CHECK_MODULES([SAMPLERATE], [samplerate],
+ [enable_jack=$enable_jack], [enable_jack=no])
-if test "x$have_jack" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS jack"
+ if test $enable_jack = yes ; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS jack"
+ else
+ AC_MSG_RESULT([*** JACK or libsamplerate not found; JACK output plugin disabled])
+ fi
fi
dnl *** sid
@@ -835,157 +596,86 @@ if test "x$have_sidplay" = "xyes"; then
INPUT_PLUGINS="$INPUT_PLUGINS sid"
fi
-dnl *** OSS output
+dnl OSS output
+dnl ==========
AC_ARG_ENABLE(oss,
- [ --disable-oss disable the OSS output plugin (default=enabled)],
- [enable_oss=$enableval],
- [enable_oss=yes]
+ [ --enable-oss enable OSS3 output plugin],
+ [enable_oss="$enableval"],
+ [enable_oss="no"]
)
-have_oss=no
-if test "x$enable_oss" = "xyes"; then
- AC_MSG_CHECKING(for OSS include dir)
- OSS_CFLAGS=""
- if test -f "/etc/oss.conf" ; then
- for i in `cat /etc/oss.conf`; do
- t=`echo $i | sed -e 's/OSSLIBDIR=//'`
- if test "x$i" != "x$t" ; then
- if test -f "$t/include/sys/soundcard.h" -o -f "$i/include/soundcard.h" ; then
- OSS_CFLAGS="-I$t/include"
- fi
- fi
- done
- fi
- if test -n "$OSS_CFLAGS" ; then
- AC_MSG_RESULT([$OSS_CFLAGS])
- else
- AC_MSG_RESULT([not found])
- fi
- CFLAGS_save=$CFLAGS
- CFLAGS="$CFLAGS $OSS_CFLAGS"
- AC_CHECK_HEADERS(soundcard.h)
- AC_CHECK_HEADERS(sys/soundcard.h)
- AC_CHECK_HEADERS(machine/soundcard.h)
- CFLAGS=$CFLAGS_save
-
- if test "x${ac_cv_header_soundcard_h}" = "xyes" || test "x${ac_cv_header_sys_soundcard_h}" = "xyes" || test "x${ac_cv_header_machine_soundcard_h}" = "xyes"; then
- have_oss=yes
- fi
+AC_ARG_ENABLE(oss4,
+ [ --disable-oss4 disable OSS4 output plugin],
+ [enable_oss4="$enableval"],
+ [enable_oss4="yes"]
+)
- if test "x${have_oss}" = "xyes"; then
- AC_MSG_CHECKING(whether we need -lossaudio)
- AC_TRY_LINK([
- #include <sys/ioctl.h>
- #ifdef HAVE_SYS_SOUNDCARD_H
- #include <sys/soundcard.h>
- #else
- #include <soundcard.h>
- #endif
- ], [
- int fd, value;
- ioctl(fd, SOUND_MIXER_READ_VOLUME, &value);
- ], AC_MSG_RESULT(no), [
- OSS_LIBS="-lossaudio"
- AC_MSG_RESULT(yes)
- ])
- fi
-fi
+have_oss="no"
+have_oss4="no"
+OSS_CFLAGS=""
-if test "x$have_oss" = "xyes"; then
- AC_DEFINE(HAVE_OSS, 1, [Define if the OSS output plugin should be built])
-else
- have_oss=no
-fi
+if test "$enable_oss" = "yes" || test "$enable_oss4" = "yes" ; then
+ if test -f "/etc/oss.conf"; then
+ . "/etc/oss.conf"
+ OSS_CFLAGS="-I$OSSLIBDIR/include"
+ fi
-if test "x$have_oss" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS OSS"
-fi
-AC_SUBST(OSS_CFLAGS)
-AC_SUBST(OSS_LIBS)
+ OLD_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $OSS_CFLAGS"
+ AC_CHECK_HEADERS([sys/soundcard.h soundcard.h],
+ [have_oss="yes"], [have_oss="$have_oss"])
-dnl *** OSS4 output
+ if test "$enable_oss4" = "yes" && test "$have_oss" = "yes" ; then
+ AC_MSG_CHECKING(for OSS4)
-AC_ARG_ENABLE(oss4,
- [ --enable-oss4 enable the OSS4 output plugin (default=disabled)],
- [enable_oss4=$enableval],
- [enable_oss4=no]
-)
+ AC_EGREP_CPP(yes,
+ [#ifdef HAVE_SYS_SOUNDCARD_H
+ #include <sys/soundcard.h>
+ #else
+ #include <soundcard.h>
+ #endif
+ #if OSS_VERSION >= 0x40000 || SOUND_VERSION >= 0x40000
+ yes
+ #endif],
+ [have_oss4="yes"],
+ [have_oss4="no"])
-have_oss4=no
-if test "x$enable_oss4" = "xyes"; then
- AC_MSG_CHECKING(for OSS4 include dir)
- OSS4_CFLAGS=""
- if test -f "/etc/oss.conf" ; then
- for i in `cat /etc/oss.conf`; do
- t=`echo $i | sed -e 's/OSSLIBDIR=//'`
- if test "x$i" != "x$t" ; then
- if test -f "$t/include/sys/soundcard.h" -o -f "$i/include/soundcard.h" ; then
- OSS4_CFLAGS="-I$t/include"
- fi
- fi
- done
- fi
- if test -n "$OSS4_CFLAGS" ; then
- AC_MSG_RESULT([$OSS4_CFLAGS])
- else
- AC_MSG_RESULT([not found])
- fi
- CFLAGS_save=$CFLAGS
- CFLAGS="$CFLAGS $OSS4_CFLAGS"
- AC_CHECK_HEADERS(soundcard.h)
- AC_CHECK_HEADERS(sys/soundcard.h)
- AC_CHECK_HEADERS(machine/soundcard.h)
- CFLAGS=$CFLAGS_save
-
- if test "x${ac_cv_header_soundcard_h}" = "xyes" || test "x${ac_cv_header_sys_soundcard_h}" = "xyes" || test "x${ac_cv_header_machine_soundcard_h}" = "xyes"; then
- have_oss4=yes
+ AC_MSG_RESULT([$have_oss4])
fi
- if test "x${have_oss4}" = "xyes"; then
- AC_MSG_CHECKING(whether we need -lossaudio)
- AC_TRY_LINK([
- #include <sys/ioctl.h>
- #ifdef HAVE_SYS_SOUNDCARD_H
- #include <sys/soundcard.h>
- #else
- #include <soundcard.h>
- #endif
- ], [
- int fd, value;
- ioctl(fd, SOUND_MIXER_READ_VOLUME, &value);
- ], AC_MSG_RESULT(no), [
- OSS_LIBS="-lossaudio"
- AC_MSG_RESULT(yes)
- ])
- fi
+ CPPFLAGS="$OLD_CPPFLAGS"
fi
-if test "x$have_oss4" = "xyes"; then
- AC_DEFINE(HAVE_OSS4, 1, [Define if the OSS4 output plugin should be built])
-else
- have_oss4=no
+AC_SUBST(OSS_CFLAGS)
+
+if test "$enable_oss" = "yes" && test "$have_oss" = "no" ; then
+ enable_oss="no"
+fi
+
+if test "$enable_oss" = "yes"; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS OSS"
fi
-if test "x$have_oss4" = "xyes"; then
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS oss4"
+if test "$enable_oss4" = "yes" && test "$have_oss4" = "no" ; then
+ enable_oss4="no"
fi
-AC_SUBST(OSS_LIBS)
+if test "$enable_oss4" = "yes"; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS oss4"
+fi
dnl *** ALSA output plugin
AC_ARG_ENABLE(alsa,
- [ --disable-alsa disable ALSA input plugin (default=enabled)],
+ [ --disable-alsa disable ALSA output plugin],
[enable_alsa=$enableval],
[enable_alsa=yes]
)
if test "x$enable_alsa" = "xyes"; then
- PKG_CHECK_MODULES([ALSA], [alsa >= 1.0], [have_alsa=yes], [have_alsa=no])
- AC_CHECK_LIB([asound], [snd_device_name_hint],
- AC_DEFINE(HAVE_SND_DEVICE_NAME_HINT, 1, Define if you have snd_device_name_hint))
+ PKG_CHECK_MODULES([ALSA], [alsa >= 1.0.16], [have_alsa=yes], [have_alsa=no])
else
AC_MSG_RESULT([*** ALSA output plugin disabled per user request ***])
have_alsa=no
@@ -995,6 +685,21 @@ if test "x$have_alsa" = "xyes"; then
OUTPUT_PLUGINS="$OUTPUT_PLUGINS alsa"
fi
+dnl SDL Output
+dnl ==========
+
+AC_ARG_ENABLE(sdlout,
+ [ --disable-sdlout disable SDL output plugin],
+ [enable_sdlout=$enableval], [enable_sdlout=yes])
+
+if test $enable_sdlout = yes ; then
+ AM_PATH_SDL(1.2.5, [enable_sdlout=yes], [enable_sdlout=no])
+fi
+
+if test $enable_sdlout = yes ; then
+ OUTPUT_PLUGINS="$OUTPUT_PLUGINS sdlout"
+fi
+
dnl *** amidi-plug (note: to avoid checking twice ALSA, this should appear somewhere after the alsa output plugin check)
@@ -1045,7 +750,7 @@ if test "x$enable_amidiplug" = "xcheck"; then
enable_amidiplug=yes
else
enable_amidiplug=no
- AC_MSG_WARN([*** Neither ALSA or FluidSynth software synth (>= 1.0.6) have been found, so amidi-plug won't be compiled unless you explicitly request it with --enable-amidiplug ***])
+ AC_MSG_WARN(["*** Neither ALSA or FluidSynth software synth (>= 1.0.6) have been found, so amidi-plug won't be compiled unless you explicitly request it with --enable-amidiplug ***"])
fi
fi
fi
@@ -1089,43 +794,8 @@ if test "x$enable_amidiplug" = "xyes"; then
AC_SUBST(AMIDIPLUG_BACKENDS)
fi
-dnl FreeBSD newpcm driver detection
-
-AC_CACHE_CHECK(for FreeBSD newpcm driver, beep_cv_newpcm_driver,
- if test -r "/dev/sndstat"; then
- grep 'newpcm' /dev/sndstat 2>/dev/null 1>/dev/null
- if test "x$?" = "x0"; then
- beep_cv_newpcm_driver="yes"
- else
- beep_cv_newpcm_driver="no"
- fi
- else
- beep_cv_newpcm_driver="no"
- fi
-)
-
-if test "x$beep_cv_newpcm_driver" = "xyes"; then
- AC_DEFINE(HAVE_NEWPCM, 1, [Define if you have the FreeBSD newpcm driver])
-fi
-
-
-AC_CHECK_HEADERS(linux/joystick.h)
-AC_CHECK_HEADERS(unistd.h)
-AC_CHECK_HEADERS(fcntl.h)
-AC_CHECK_HEADERS(sys/ioctl.h)
-AC_CHECK_HEADERS(fnmatch.h)
-AC_CHECK_HEADERS(limits.h)
-AC_CHECK_HEADERS(wchar.h)
-AC_CHECK_HEADERS(fts.h)
-
-AC_CHECK_DECL([lrintf],[AC_DEFINE(HAVE_LRINTF,1)],[AC_CHECK_FUNCS([lrintf])],[
-#define _ISOC9X_SOURCE
-#include <math.h>
-], [AC_CHECK_FUNCS([lrintf])])
-AC_CHECK_FUNCS([mkdtemp getmntinfo statvfs strtoul])
-
-
-dnl CD-Audio New Generation
+dnl Audio CD
+dnl ========
AC_ARG_ENABLE(cdaudio,
[ --disable-cdaudio disable cdaudio-ng input plugin (default=enabled) ],
@@ -1165,76 +835,11 @@ if test "$enable_cdaudio_ng" = "yes"; then
)
fi
-AC_ARG_ENABLE(streambrowser,
- [ --disable-streambrowser disable streambrowser general plugin (default=enabled) ],
- [enable_streambrowser=$enableval],
- [enable_streambrowser=yes]
-)
-
-if test "$enable_streambrowser" = "yes"; then
- GENERAL_PLUGINS="$GENERAL_PLUGINS streambrowser"
-fi
-
-AM_CONDITIONAL(HAVE_CDROM, test "${ac_cv_header_linux_cdrom_h}" = "yes" || test "${ac_cv_header_sys_cdio_h}" = "yes")
-AM_CONDITIONAL(HAVE_LINUX_JOYSTICK,test "${ac_cv_header_linux_joystick_h}" = "yes")
-
-CPPFLAGS="$CPPFLAGS $AUDACIOUS_CFLAGS $DBUS_CFLAGS"
-
-AC_MSG_CHECKING(if __ELF__ is defined)
-AC_EGREP_CPP(yes,
- [#ifdef __ELF__
- yes
- #endif
- ],
- [is_elf=yes],
- [is_elf=no]
-)
-AC_MSG_RESULT([${is_elf}])
-
-
-have_solaris=no
-have_sun=no
-ARCH_DEFINES=""
-case "$host" in
- *-*-openbsd* | *-*-netbsd* | *-*-mirbsd*)
- have_sun=yes
- if test "${is_elf}" = "no"
- then
- AC_DEFINE(SYMBOL_PREFIX, "_", [Define to symbol prefix, if any])
- fi
- OUTPUT_PLUGINS="$OUTPUT_PLUGINS sun"
- ;;
- *-*-darwin*)
- AC_DEFINE(SYMBOL_PREFIX, "_", [Define to symbol prefix, if any])
- ;;
- *-hpux-*)
- ARCH_DEFINES="-DHPUX"
- ;;
- *-*-solaris* | *-*-sunos*)
- have_solaris=yes
- ;;
-esac
-
-arch_type=other
-x86_asm=no
-case "$host" in
- i386-*-* | i486-*-* | i586-*-* | i686-*-* | i86pc-*-*)
- arch_type=ix86
- case "$host" in
- *-*-netbsd* | *-*openbsd* | *-*-mirbsd*)
- ;;
- *)
- ARCH_DEFINES="-DI386_ASSEM"
- x86_asm=yes
- ;;
- esac
- ;;
-esac
dnl *** scrobbler ***
AC_ARG_ENABLE(scrobbler,
- [ --enable-scrobbler enable Scrobbler plugin (default=enabled)],
+ [ --disable-scrobbler disable Scrobbler plugin (default=enabled)],
[have_scrobbler=$enableval], [have_scrobbler="yes"])
if test "x$have_scrobbler" = "xyes"; then
@@ -1264,8 +869,8 @@ fi
AC_SUBST([NEON_LIBS])
AC_SUBST([NEON_CFLAGS])
-
-dnl *** MMS
+dnl MMS
+dnl ===
AC_ARG_ENABLE(mms,
[ --disable-mms disable mms support. (default=enabled)],
@@ -1280,6 +885,22 @@ else
AC_MSG_RESULT([*** mms plugin disabled by request ***])
fi
+dnl SMB
+dnl ===
+
+AC_ARG_ENABLE(smb,
+ AS_HELP_STRING([--enable-smb], [enable SMB transport (default=disabled)]),
+ [enable_smb="$enableval"], [enable_smb="no"])
+
+if test $enable_smb = yes ; then
+ AC_CHECK_HEADERS([libsmbclient.h], [enable_smb=yes], [enable_smb=no])
+
+ if test $enable_smb = yes ; then
+ TRANSPORT_PLUGINS="$TRANSPORT_PLUGINS smb"
+ else
+ AC_MSG_RESULT([*** libsmbclient not found; SMB client disabled])
+ fi
+fi
dnl *** MTP Upload
@@ -1290,14 +911,9 @@ AC_ARG_ENABLE(mtp_up,
if test "x$have_mtp_up" = "xyes"; then
have_mtp_up=yes
- PKG_CHECK_MODULES(MTP, [libmtp >= 0.1.3], [GENERAL_PLUGINS="$GENERAL_PLUGINS mtp_up" ], [have_mtp_up="no"])
+ PKG_CHECK_MODULES(MTP, [libmtp >= 0.3.5], [GENERAL_PLUGINS="$GENERAL_PLUGINS mtp_up" ], [have_mtp_up="no"])
MTP_LIBS=`pkg-config --libs libmtp`
MTP_CFLAGS=`pkg-config --cflags libmtp`
- dnl Check for libmtp 0.3.0+
- PKG_CHECK_EXISTS(libmtp >= 0.3.0, libmtp_030_pkg=yes, libmtp_030_pkg=no)
- if test x"$libmtp_030_pkg" = "xyes" ; then
- AC_DEFINE([HAVE_LIBMTP_030], 1, [indidaces if libmtp 0.3.0 is installed])
- fi
else
have_mtp_up=no
AC_MSG_RESULT([*** mtp upload plugin disabled by request ***])
@@ -1305,51 +921,6 @@ fi
AC_SUBST(MTP_LIBS)
AC_SUBST(MTP_CFLAGS)
-dnl *** Bluetooth audio support
-
-AC_ARG_ENABLE(bluetooth,
-[ --disable-bluetooth disable bluetooth audio support. (default=enabled)],
-[have_bluetooth=$enableval],
-[have_bluetooth=yes])
-
-dnl This has been broken by the output plugin on-demand work
-have_bluetooth=no
-if test "x$have_bluetooth" = "xyes" -a "x$have_alsa" = "xyes"; then
- have_bluetooth=yes
- PKG_CHECK_MODULES(BLUEZ, [bluez >= 2.22],
- [GENERAL_PLUGINS="$GENERAL_PLUGINS bluetooth" ], [have_bluetooth="no"])
- BLUEZ_LIBS=`pkg-config --libs bluez`
- BLUEZ_CFLAGS=`pkg-config --cflags bluez`
-else
- have_bluetooth=no
- AC_MSG_RESULT([*** bluetooth audio support plugin disabled by request ***])
-fi
-AC_SUBST(BLUEZ_LIBS)
-AC_SUBST(BLUEZ_CFLAGS)
-
-dnl *** libparanormal checks
-
-AC_ARG_ENABLE(paranormal,
-[ --disable-paranormal disable paranormal vis plugin. (default=enabled)],
-[have_paranormal=$enableval],
-[have_paranormal=yes])
-
-if test "x$have_paranormal" = "xyes"; then
- have_paranormal=yes
- AM_PATH_SDL(1.2.5, , [
- AC_MSG_WARN([*** SDL is not installed. Paranormal will not be built. ***])
- have_paranormal="no"
- ])
-else
- have_paranormal=no
- AC_MSG_RESULT([*** paranormal plugin disabled by request ***])
-fi
-
-if test "x$have_paranormal" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS paranormal"
-fi
-
-
dnl XSPF
dnl ----
@@ -1378,67 +949,8 @@ else
AC_MSG_RESULT([*** cue plugin disabled by request ***])
fi
-dnl *** projectM (GL Milkdrop port)
-
-AC_ARG_ENABLE(projectm,
-[ --disable-projectm disable projectM vis plugin. (default=enabled)],
-[have_projectm=$enableval],
-[have_projectm=yes])
-
-if test "x$have_projectm" = "xyes"; then
- PKG_CHECK_MODULES(LIBPROJECTM, libprojectM < 1.0, [have_projectm="yes"], [have_projectm="no"])
- AM_PATH_SDL(1.2.5, , [
- AC_MSG_WARN([*** SDL is not installed. projectM will not be built. ***])
- have_projectm="no"
- ])
- if test "x$libprjM" = "xno"; then
- AC_MSG_WARN([*** libprojectM not found.
- libprojectM is needed to build this package.
- You can download libprojectM at http://projectm.sf.net/])
- fi
- LIBPROJECTM_datadir=`pkg-config --variable=pkgdatadir libprojectM`;
- LIBPROJECTM_sysconfdir=`pkg-config --variable=sysconfdir libprojectM`;
- LIBPROJECTM_CFLAGS="$LIBPROJECTM_CFLAGS -DPROJECTM_DATADIR=\\\"$LIBPROJECTM_datadir\\\" -DPROJECTM_SYSCONFDIR=\\\"$LIBPROJECTM_sysconfdir\\\"";
-fi
-AC_SUBST(LIBPROJECTM_LIBS)
-AC_SUBST(LIBPROJECTM_CFLAGS)
-
-if test "x$have_projectm" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS projectm"
-fi
-
-dnl *** projectM (GL Milkdrop port)
-
-AC_ARG_ENABLE(projectm-1.0,
-[ --disable-projectm-1.0 disable projectM 1.0+ vis plugin. (default=enabled)],
-[have_projectm1=$enableval],
-[have_projectm1=yes])
-
-if test "$have_projectm1" = "yes"; then
- PKG_CHECK_MODULES(LIBPROJECTM1, [libprojectM >= 1.1], [have_projectm1="yes"], [have_projectm1="no"])
-fi
-
-if test "$have_projectm1" = "yes"; then
- PKG_CHECK_MODULES(GTKGLEXT, [gtkglext-1.0], [have_projectm1="yes"], [have_projectm1="no"])
-fi
-
-if test "$have_projectm1" = "yes"; then
- LIBPROJECTM1_datadir=`pkg-config --variable=pkgdatadir libprojectM`;
- LIBPROJECTM1_sysconfdir=`pkg-config --variable=sysconfdir libprojectM`;
- LIBPROJECTM1_prefix=`pkg-config --variable=prefix libprojectM`;
- LIBPROJECTM1_CFLAGS="$LIBPROJECTM1_CFLAGS -DPROJECTM_DATADIR=\\\"$LIBPROJECTM1_datadir\\\" -DPROJECTM_SYSCONFDIR=\\\"$LIBPROJECTM1_sysconfdir\\\" -DPROJECTM_PREFIX=\\\"$LIBPROJECTM1_prefix\\\"";
-fi
-
-AC_SUBST(LIBPROJECTM1_LIBS)
-AC_SUBST(LIBPROJECTM1_CFLAGS)
-AC_SUBST(GTKGLEXT_LIBS)
-AC_SUBST(GTKGLEXT_CFLAGS)
-
-if test "x$have_projectm1" = "xyes"; then
- VISUALIZATION_PLUGINS="$VISUALIZATION_PLUGINS projectm-1.0"
-fi
-
-dnl *** FileWriter
+dnl FileWriter
+dnl ==========
AC_ARG_ENABLE(filewriter,
[ --disable-filewriter disable FileWriter output plugin (default=enabled) ],
@@ -1534,14 +1046,36 @@ AC_ARG_ENABLE(resample,
)
if test "x$enable_resample" = "xyes"; then
- AC_CHECK_LIB([samplerate], [src_process], [enable_resample=yes],
- [enable_resample=no])
+ PKG_CHECK_MODULES([SAMPLERATE], [samplerate],
+ [enable_resample=yes], [enable_resample=no])
fi
if test "x$enable_resample" = "xyes"; then
EFFECT_PLUGINS="$EFFECT_PLUGINS resample"
fi
+dnl GTK Interface
+dnl =============
+
+AC_ARG_ENABLE(gtkui,
+ [ --disable-gtkui disable GTK interface (gtkui)],
+ [enable_gtkui=$enableval], [enable_gtkui="yes"])
+
+if test $enable_gtkui = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS gtkui"
+fi
+
+dnl Winamp Classic Interface
+dnl =============
+
+AC_ARG_ENABLE(skins,
+ [ --disable-skins disable Winamp Classic interface (skins)],
+ [enable_skins=$enableval], [enable_skins="yes"])
+
+if test $enable_skins = yes ; then
+ GENERAL_PLUGINS="$GENERAL_PLUGINS skins"
+fi
+
dnl LyricWiki
dnl =========
@@ -1550,7 +1084,8 @@ AC_ARG_ENABLE(lyricwiki,
[enable_lyricwiki=$enableval], [enable_lyricwiki=yes])
if test "x$enable_lyricwiki" = "xyes"; then
- PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.14], [enable_lyricwiki=yes], [enable_lyricwiki=no])
+ PKG_CHECK_MODULES(GLIB214, [glib-2.0 >= 2.14], [enable_lyricwiki=yes],
+ [enable_lyricwiki=no])
fi
if test "x$enable_lyricwiki" = "xyes"; then
@@ -1559,14 +1094,6 @@ fi
dnl *** End of all plugin checks ***
-AC_SUBST(ARCH_DEFINES)
-
-dnl XXX delete ASAP -nenolod
-AM_CONDITIONAL(ARCH_X86, test "x$arch_type" = "xix86")
-AM_CONDITIONAL(USE_X86ASM, test "x$x86_asm" = xyes)
-AM_CONDITIONAL(HAVE_SOLARIS, test "x$have_solaris" = xyes)
-AM_CONDITIONAL(HAVE_SUN, test "x$have_sun" = xyes)
-
plugindir=`pkg-config audacious --variable=plugin_dir`
AC_SUBST(plugindir)
@@ -1601,20 +1128,6 @@ fi
localedir="$datadir/locale"
AC_SUBST(localedir)
-BEEP_DEFINES="$CFLAGS -DDATA_DIR=\\\"$datadir/audacious\\\" -DPLUGIN_DIR=\\\"$plugindir\\\" -DPLUGINSUBS=$pluginsubs -DLOCALEDIR=\\\"$localedir\\\""
-CFLAGS="$CFLAGS $EXTRA_CFLAGS"
-
-if test "x$enable_user_plugin_dir" = "xno"; then
- AC_DEFINE(DISABLE_USER_PLUGIN_DIR,, [Define to disable per user plugin directory])
-fi
-
-AC_DEFINE(BMP_RCPATH, ".audacious", [Config dir to use])
-
-AC_SUBST(BEEP_DEFINES)
-
-AC_SUBST(beepdir)
-AC_SUBST(plugindir)
-
AC_SUBST(EFFECT_PLUGINS)
AC_SUBST(GENERAL_PLUGINS)
AC_SUBST(INPUT_PLUGINS)
@@ -1639,19 +1152,17 @@ echo " Install path: ${audacious_plugin_root}"
echo
echo " Output Plugins"
echo " --------------"
-echo " Open Sound System (oss): $have_oss"
-echo " Open Sound System v4 (oss4): $have_oss4"
+echo " Open Sound System (oss4): $enable_oss4"
echo " Advanced Linux Sound Arch. (alsa): $have_alsa"
echo " PulseAudio (pulse): $have_pulse"
-echo " RoarAudio (roaraudio): $have_roar"
-echo " Jack Audio Connection Kit (jack): $have_jack"
-echo " BSD/SUN audio output (sun): $have_sun"
-echo " Mac OS X sound support (CoreAudio): $have_coreaudio"
+echo " Jack Audio Connection Kit (jack): $enable_jack"
+echo " Simple DirectMedia Layer (sdlout): $enable_sdlout"
echo " FileWriter: $enable_filewriter"
echo " -> FileWriter MP3 output part: $have_lame"
echo " -> FileWriter Vorbis output part: $have_vorbisenc"
echo " -> FileWriter FLAC output part: $have_writer_flac"
echo " Null Audio output (null): yes"
+echo " Open Sound System v3 (deprecated): $enable_oss"
echo
echo " Input Plugins"
echo " -------------"
@@ -1671,64 +1182,65 @@ echo " Commodore 64 audio (SID): $have_sidplay $xs_have_sidplay2_
echo " -> libSIDPlay1 support: $xs_have_sidplay1"
echo " -> libSIDPlay2 support: $xs_have_sidplay2"
echo " -> distortion patched libSIDPlay2: $xs_have_distortion"
-echo " Game music (spc, nsf & gbs): yes"
+echo " Game music (spc, nsf & gbs): $enable_console"
echo " PlayStation (psf/psf2) audio: $enable_psf"
-echo " Nintendo 64 audio (usf): $enable_usf"
-echo " Nintendo DS audio (xsf): yes [experimental]"
+echo " Nintendo DS audio (xsf): $enable_xsf"
echo " AdLib synthesizer (adplug): $have_adplug"
-echo " Apple Lossless Audio Codec (alac): $have_ffaudio"
echo " WavPack 4.31+ (wavpack): $have_wavpack"
echo " Metronom: yes"
echo
echo " General"
echo " -------"
echo " Alarm: yes"
-echo " Song Change: yes"
+echo " Album Art: yes"
+echo " MPRIS 2 Server: $enable_mpris2"
+echo " Search Tool: yes"
+echo " Song Change: $enable_songchange"
echo " Status Icon: $have_statusicon"
echo " Audacious OSD: $have_aosd"
echo " -> X Composite support: $have_aosd_xcomp"
echo " libnotify OSD: $have_notify"
-echo " Control via event device (evdev-plug): $have_evdevplug"
echo " Global Hotkey Plugin: $have_hotkey"
echo " Gnome Shortcuts Plugin: $have_gnomeshortcuts"
-echo " LIRC: $have_lirc"
echo " AudioScrobbler Client: $have_scrobbler"
echo " Upload to MTP device: $have_mtp_up"
-echo " Bluetooth audio support: $have_bluetooth"
-echo " MacOS Dock Album Art plugin: $have_dockalbumart"
-echo " Streambrowser: $enable_streambrowser"
echo " LyricWiki viewer: $enable_lyricwiki"
echo
echo " Effect"
echo " ------"
+echo " Channel Mixer: yes"
+echo " Crystalizer: yes"
echo " Dynamic Range Compressor: yes"
-echo " LADSPA effects host (ladspa): yes"
-echo " Voice Removal: yes"
-echo " Extra Stereo: yes"
echo " Echo/Surround: yes"
+echo " Extra Stereo: yes"
+echo " LADSPA Host: yes"
echo " SndStretch: yes"
-echo " Crystalizer: yes"
+echo " Voice Removal: yes"
echo " Bauer stereophonic-to-binaural (bs2b): $have_bs2b"
echo " Sample Rate Converter (resample): $enable_resample"
echo
echo " Visualization"
echo " -------------"
echo " Blur Scope: yes"
-echo " Spectrum Analyzer: yes"
-echo " Paranormal Visualization Library: $have_paranormal"
-echo " projectM 0.x (GL milkdrop): $have_projectm"
-echo " projectM 1.x (GL milkdrop): $have_projectm1"
+echo " Cairo Spectrum Analyzer: yes"
echo
echo " Transport"
echo " ---------"
-echo " gio transport: $enable_gio"
echo " neon-based http/https: $have_neon"
echo " libmms-based mms: $have_mms"
+echo " GIO transport (experimental): $enable_gio"
+echo " SMB transport (experimental): $enable_smb"
echo
echo " Container"
echo " ---------"
+echo " Audacious playlist format (audpl): yes"
echo " Winamp PLS playlist format (pls): yes"
echo " M3U playlist format (m3u): yes"
echo " XML Sharable Playlist Format (xspf): yes"
echo " CUE playlist format (cue): $have_cue"
echo
+echo " Interfaces"
+echo " ----------"
+echo " GTK (gtkui): $enable_gtkui"
+echo " Winamp Classic (skins): $enable_skins"
+echo
diff --git a/extra.mk.in b/extra.mk.in
index 6c8e619..c5bae0e 100644
--- a/extra.mk.in
+++ b/extra.mk.in
@@ -1,82 +1,29 @@
-@SET_MAKE@
+USE_NLS ?= @USE_NLS@
+VERSION ?= @VERSION@
+
+# overrides setting in buildsys.mk
+plugindir = @plugindir@
+
+CONTAINER_PLUGIN_DIR ?= @CONTAINER_PLUGIN_DIR@
+CONTAINER_PLUGINS ?= @CONTAINER_PLUGINS@
+EFFECT_PLUGINS ?= @EFFECT_PLUGINS@
+EFFECT_PLUGIN_DIR ?= @EFFECT_PLUGIN_DIR@
+GENERAL_PLUGINS ?= @GENERAL_PLUGINS@
+GENERAL_PLUGIN_DIR ?= @GENERAL_PLUGIN_DIR@
+INPUT_PLUGINS ?= @INPUT_PLUGINS@
+INPUT_PLUGIN_DIR ?= @INPUT_PLUGIN_DIR@
+OUTPUT_PLUGINS ?= @OUTPUT_PLUGINS@
+OUTPUT_PLUGIN_DIR ?= @OUTPUT_PLUGIN_DIR@
+TRANSPORT_PLUGIN_DIR ?= @TRANSPORT_PLUGIN_DIR@
+TRANSPORT_PLUGINS ?= @TRANSPORT_PLUGINS@
+VISUALIZATION_PLUGINS ?= @VISUALIZATION_PLUGINS@
+VISUALIZATION_PLUGIN_DIR ?= @VISUALIZATION_PLUGIN_DIR@
-srcdir ?= @srcdir@
-top_srcdir ?= @top_srcdir@
-VPATH ?= @srcdir@
-pkgdatadir ?= $(datadir)/@PACKAGE@
-pkglibdir ?= $(libdir)/@PACKAGE@
-pkgincludedir ?= $(includedir)/@PACKAGE@
-top_builddir ?= .
-am__cd ?= CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL ?= @INSTALL@
-install_sh_DATA ?= $(install_sh) -c -m 644
-install_sh_PROGRAM ?= $(install_sh) -c
-install_sh_SCRIPT ?= $(install_sh) -c
-INSTALL_HEADER ?= $(INSTALL_DATA)
-transform ?= $(program_transform_name)
-NORMAL_INSTALL ?= :
-PRE_INSTALL ?= :
-POST_INSTALL ?= :
-NORMAL_UNINSTALL ?= :
-PRE_UNINSTALL ?= :
-POST_UNINSTALL ?= :
-build_triplet ?= @build@
-host_triplet ?= @host@
-target_triplet ?= @target@
-subdir ?= .
-ACLOCAL_M4 ?= $(top_srcdir)/aclocal.m4
-CONFIG_HEADER ?= config.h
-CONFIG_CLEAN_FILES ?= audacious.1 audacious.spec audacious.pc \
- intl/Makefile
-SOURCES =
-DIST_SOURCES =
-man1dir ?= $(mandir)/man1
-am__installdirs ?= "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgconfigdir)"
-NROFF ?= nroff
-MANS ?= $(man_MANS)
-am__vpath_adj_setup ?= srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj ?= case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir ?= `echo $$p | sed -e 's|^.*/||'`;
-pkgconfigDATA_INSTALL ?= $(INSTALL_DATA)
-DATA ?= $(pkgconfig_DATA)
-ETAGS ?= etags
-CTAGS ?= ctags
-DIST_SUBDIRS ?= $(SUBDIRS)
-DISTFILES ?= $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir ?= $(PACKAGE)-$(VERSION)
-top_distdir ?= $(distdir)
-am__remove_distdir ?= \
- { test ! -d $(distdir) \
- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
- && rm -fr $(distdir); }; }
-DIST_ARCHIVES ?= $(distdir).tar.gz
-GZIP_ENV ?= --best
-distuninstallcheck_listfiles ?= find . -type f -print
-distcleancheck_listfiles ?= find . -type f -print
-ACLOCAL ?= @ACLOCAL@
-ALLOCA ?= @ALLOCA@
-ALSA_CFLAGS ?= @ALSA_CFLAGS@
-ALSA_LIBS ?= @ALSA_LIBS@
-AMDEP_FALSE ?= @AMDEP_FALSE@
-AMDEP_TRUE ?= @AMDEP_TRUE@
AMIDIPLUG_BACKEND_DIR ?= @AMIDIPLUG_BACKEND_DIR@
AMIDIPLUG_BACKENDS ?= @AMIDIPLUG_BACKENDS@
-AMTAR ?= @AMTAR@
-AR ?= @AR@
-ARCH_DEFINES ?= @ARCH_DEFINES@
-ARCH_X86_FALSE ?= @ARCH_X86_FALSE@
-ARCH_X86_TRUE ?= @ARCH_X86_TRUE@
-ARTSC_CFLAGS ?= @ARTSC_CFLAGS@
-ARTSC_LIBS ?= @ARTSC_LIBS@
-AUTOCONF ?= @AUTOCONF@
-AUTOHEADER ?= @AUTOHEADER@
-AUTOMAKE ?= @AUTOMAKE@
-AWK ?= @AWK@
-BEEP_DEFINES ?= @BEEP_DEFINES@
-BEEP_PATH ?= @BEEP_PATH@
+
+ALSA_CFLAGS ?= @ALSA_CFLAGS@
+ALSA_LIBS ?= @ALSA_LIBS@
BINIO_CFLAGS ?= @BINIO_CFLAGS@
BINIO_LIBS ?= @BINIO_LIBS@
BS2B_CFLAGS ?= @BS2B_CFLAGS@
@@ -84,315 +31,80 @@ BS2B_LIBS ?= @BS2B_LIBS@
BUILDERS_CFLAGS ?= @BUILDERS_CFLAGS@
BUILDERS_LDFLAGS ?= @BUILDERS_LDFLAGS@
BUILDERS_LIBS ?= @BUILDERS_LIBS@
-BUILD_INCLUDED_LIBINTL ?= @BUILD_INCLUDED_LIBINTL@
CAIRO_CFLAGS ?= @CAIRO_CFLAGS@
CAIRO_LIBS ?= @CAIRO_LIBS@
-CATOBJEXT ?= @CATOBJEXT@
-CCAS ?= @CCAS@
-CCASFLAGS ?= @CCASFLAGS@
-CCDEPMODE ?= @CCDEPMODE@
-CXXCPP ?= @CXXCPP@
-CXXDEPMODE ?= @CXXDEPMODE@
-CYGPATH_W ?= @CYGPATH_W@
-DATADIRNAME ?= @DATADIRNAME@
+CDIO_LIBS ?= @CDIO_LIBS@
+CDIO_CFLAGS ?= @CDIO_CFLAGS@
+CDDB_LIBS ?= @CDDB_LIBS@
+CDDB_CFLAGS ?= @CDDB_CFLAGS@
+CUE_CFLAGS ?= @CUE_CFLAGS@
+CUE_LIBS ?= @CUE_LIBS@
+CURL_CFLAGS ?= @CURL_CFLAGS@
+CURL_LIBS ?= @CURL_LIBS@
DBUS_CFLAGS ?= @DBUS_CFLAGS@
DBUS_LIBS ?= @DBUS_LIBS@
-DCT64 ?= @DCT64@
-DEFS ?= @DEFS@
-DEPDIR ?= @DEPDIR@
-ECHO ?= @ECHO@
-ECHO_C ?= @ECHO_C@
-ECHO_N ?= @ECHO_N@
-ECHO_T ?= @ECHO_T@
-EFFECT_PLUGINS ?= @EFFECT_PLUGINS@
-EFFECT_PLUGIN_DIR ?= @EFFECT_PLUGIN_DIR@
-EGREP ?= @EGREP@
-ENABLE_AAC_FALSE ?= @ENABLE_AAC_FALSE@
-ENABLE_AAC_TRUE ?= @ENABLE_AAC_TRUE@
-ENABLE_AMIDIPLUG_FALSE ?= @ENABLE_AMIDIPLUG_FALSE@
-ENABLE_AMIDIPLUG_TRUE ?= @ENABLE_AMIDIPLUG_TRUE@
-ENABLE_CROSSFADE_FALSE ?= @ENABLE_CROSSFADE_FALSE@
-ENABLE_CROSSFADE_TRUE ?= @ENABLE_CROSSFADE_TRUE@
-ENABLE_MPG123_FALSE ?= @ENABLE_MPG123_FALSE@
-ENABLE_MPG123_TRUE ?= @ENABLE_MPG123_TRUE@
-ENABLE_MUSEPACK_FALSE ?= @ENABLE_MUSEPACK_FALSE@
-ENABLE_MUSEPACK_TRUE ?= @ENABLE_MUSEPACK_TRUE@
-ENABLE_TIMIDITY_FALSE ?= @ENABLE_TIMIDITY_FALSE@
-ENABLE_TIMIDITY_TRUE ?= @ENABLE_TIMIDITY_TRUE@
-ENABLE_WMA_FALSE ?= @ENABLE_WMA_FALSE@
-ENABLE_WMA_TRUE ?= @ENABLE_WMA_TRUE@
-ESD_CFLAGS ?= @ESD_CFLAGS@
-ESD_LIBS ?= @ESD_LIBS@
-EXEEXT ?= @EXEEXT@
FAAD_CFLAGS ?= @FAAD_CFLAGS@
FAAD_LIBS ?= @FAAD_LIBS@
+FFMPEG_CFLAGS ?= @FFMPEG_CFLAGS@
+FFMPEG_LIBS ?= @FFMPEG_LIBS@
+FILEWRITER_CFLAGS ?= @FILEWRITER_CFLAGS@
+FILEWRITER_LIBS ?= @FILEWRITER_LIBS@
FLUIDSYNTH_CFLAGS ?= @FLUIDSYNTH_CFLAGS@
FLUIDSYNTH_LIBS ?= @FLUIDSYNTH_LIBS@
-GCONF_CFLAGS ?= @GCONF_CFLAGS@
-GCONF_LIBS ?= @GCONF_LIBS@
GDKX11_CFLAGS ?= @GDKX11_CFLAGS@
GDKX11_LIBS ?= @GDKX11_LIBS@
-GENCAT ?= @GENCAT@
-GENERAL_PLUGINS ?= @GENERAL_PLUGINS@
-GENERAL_PLUGIN_DIR ?= @GENERAL_PLUGIN_DIR@
-GLIBC21 ?= @GLIBC21@
+GIO_UNIX_CFLAGS ?= @GIO_UNIX_CFLAGS@
+GIO_UNIX_LIBS ?= @GIO_UNIX_LIBS@
GLIB_CFLAGS ?= @GLIB_CFLAGS@
GLIB_LIBS ?= @GLIB_LIBS@
-GIO_LIBS ?= @GIO_LIBS@
GMODULE_CFLAGS ?= @GMODULE_CFLAGS@
GMODULE_LIBS ?= @GMODULE_LIBS@
-GMSGFMT ?= @GMSGFMT@
-GNOMEVFS_CFLAGS ?= @GNOMEVFS_CFLAGS@
-GNOMEVFS_LIBS ?= @GNOMEVFS_LIBS@
GTK_CFLAGS ?= @GTK_CFLAGS@
GTK_LIBS ?= @GTK_LIBS@
-HARDSID_LIBS ?= @HARDSID_LIBS@
-HAVE_ADPLUG_FALSE ?= @HAVE_ADPLUG_FALSE@
-HAVE_ADPLUG_TRUE ?= @HAVE_ADPLUG_TRUE@
-HAVE_ALSA_FALSE ?= @HAVE_ALSA_FALSE@
-HAVE_ALSA_TRUE ?= @HAVE_ALSA_TRUE@
-HAVE_CDROM_FALSE ?= @HAVE_CDROM_FALSE@
-HAVE_CDROM_TRUE ?= @HAVE_CDROM_TRUE@
-HAVE_ESD_FALSE ?= @HAVE_ESD_FALSE@
-HAVE_ESD_TRUE ?= @HAVE_ESD_TRUE@
-HAVE_FLAC_FALSE ?= @HAVE_FLAC_FALSE@
-HAVE_FLAC_TRUE ?= @HAVE_FLAC_TRUE@
-HAVE_GCONF_FALSE ?= @HAVE_GCONF_FALSE@
-HAVE_GCONF_TRUE ?= @HAVE_GCONF_TRUE@
-HAVE_GNOME_VFS_FALSE ?= @HAVE_GNOME_VFS_FALSE@
-HAVE_GNOME_VFS_TRUE ?= @HAVE_GNOME_VFS_TRUE@
-HAVE_JACK_FALSE ?= @HAVE_JACK_FALSE@
-HAVE_JACK_TRUE ?= @HAVE_JACK_TRUE@
-HAVE_NULL_TRUE ?= @HAVE_NULL_TRUE@
-HAVE_LIBSAMPLERATE_FALSE ?= @HAVE_LIBSAMPLERATE_FALSE@
-HAVE_LIBSAMPLERATE_TRUE ?= @HAVE_LIBSAMPLERATE_TRUE@
-HAVE_LIBSNDFILE_FALSE ?= @HAVE_LIBSNDFILE_FALSE@
-HAVE_LIBSNDFILE_TRUE ?= @HAVE_LIBSNDFILE_TRUE@
-HAVE_LIBVISUAL_FALSE ?= @HAVE_LIBVISUAL_FALSE@
-HAVE_LIBVISUAL_TRUE ?= @HAVE_LIBVISUAL_TRUE@
-HAVE_LINUX_JOYSTICK_FALSE ?= @HAVE_LINUX_JOYSTICK_FALSE@
-HAVE_LINUX_JOYSTICK_TRUE ?= @HAVE_LINUX_JOYSTICK_TRUE@
-HAVE_LIRC_FALSE ?= @HAVE_LIRC_FALSE@
-HAVE_LIRC_TRUE ?= @HAVE_LIRC_TRUE@
-HAVE_MODPLUG_FALSE ?= @HAVE_MODPLUG_FALSE@
-HAVE_MODPLUG_TRUE ?= @HAVE_MODPLUG_TRUE@
-HAVE_OGGVORBIS_FALSE ?= @HAVE_OGGVORBIS_FALSE@
-HAVE_OGGVORBIS_TRUE ?= @HAVE_OGGVORBIS_TRUE@
-HAVE_OSS_FALSE ?= @HAVE_OSS_FALSE@
-HAVE_OSS_TRUE ?= @HAVE_OSS_TRUE@
-HAVE_SIDPLAY_FALSE ?= @HAVE_SIDPLAY_FALSE@
-HAVE_SIDPLAY_TRUE ?= @HAVE_SIDPLAY_TRUE@
-HAVE_SOLARIS_FALSE ?= @HAVE_SOLARIS_FALSE@
-HAVE_SOLARIS_TRUE ?= @HAVE_SOLARIS_TRUE@
-HAVE_SUN_FALSE ?= @HAVE_SUN_FALSE@
-HAVE_SUN_TRUE ?= @HAVE_SUN_TRUE@
-INPUT_PLUGINS ?= @INPUT_PLUGINS@
-INPUT_PLUGIN_DIR ?= @INPUT_PLUGIN_DIR@
-INSTALL_DATA ?= @INSTALL_DATA@
-INSTALL_PROGRAM ?= @INSTALL_PROGRAM@
-INSTALL_SCRIPT ?= @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM ?= @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT ?= @INSTOBJEXT@
-INTLBISON ?= @INTLBISON@
-INTLLIBS ?= @INTLLIBS@
-INTLOBJS ?= @INTLOBJS@
-INTL_LIBTOOL_SUFFIX_PREFIX ?= @INTL_LIBTOOL_SUFFIX_PREFIX@
JACK_CFLAGS ?= @JACK_CFLAGS@
JACK_LIBS ?= @JACK_LIBS@
-LDFLAGS ?= @LDFLAGS@
-LEDCODE ?= @LEDCODE@
-LIBBEEP_MAJOR_VERSION ?= @LIBBEEP_MAJOR_VERSION@
-LIBBEEP_MICRO_VERSION ?= @LIBBEEP_MICRO_VERSION@
-LIBBEEP_MINOR_VERSION ?= @LIBBEEP_MINOR_VERSION@
-FLAC_CFLAGS ?= @FLAC_CFLAGS@
-FLAC_LIBS ?= @FLAC_LIBS@
-LIBGLADE_CFLAGS ?= @LIBGLADE_CFLAGS@
-LIBGLADE_LIBS ?= @LIBGLADE_LIBS@
-LIBNMS_CFLAGS ?= @LIBNMS_CFLAGS@
-LIBNMS_LIBS ?= @LIBNMS_LIBS@
-LIBNMS_SRC ?= @LIBNMS_SRC@
-LIBICONV ?= @LIBICONV@
-LIBINTL ?= @LIBINTL@
-LIBOBJS ?= @LIBOBJS@
-LIBS ?= @LIBS@
-LIBTOOL ?= @LIBTOOL@
-LIBVISUAL_CFLAGS ?= @LIBVISUAL_CFLAGS@
-LIBVISUAL_LIBS ?= @LIBVISUAL_LIBS@
-LN_S ?= @LN_S@
-LTLIBICONV ?= @LTLIBICONV@
-LTLIBINTL ?= @LTLIBINTL@
-LTLIBOBJS ?= @LTLIBOBJS@
-MAKEINFO ?= @MAKEINFO@
-MKINSTALLDIRS ?= @MKINSTALLDIRS@
-MSGFMT ?= @MSGFMT@
-MSGMERGE ?= @MSGMERGE@
+LIBFLAC_LIBS ?= @LIBFLAC_LIBS@
+LIBFLAC_CFLAGS ?= @LIBFLAC_CFLAGS@
+LIBROAR_CFLAGS ?= @LIBROAR_CFLAGS@
+LIBROAR_LIBS ?= @LIBROAR_LIBS@
+MMS_CFLAGS ?= @MMS_CFLAGS@
+MMS_LIBS ?= @MMS_LIBS@
+MODPLUG_CFLAGS ?= @MODPLUG_CFLAGS@
+MODPLUG_LIBS ?= @MODPLUG_LIBS@
+MPG123_CFLAGS ?= @MPG123_CFLAGS@
+MPG123_LIBS ?= @MPG123_LIBS@
MTP_CFLAGS ?= @MTP_CFLAGS@
MTP_LIBS ?= @MTP_LIBS@
+NEON_CFLAGS ?= @NEON_CFLAGS@
+NEON_LIBS ?= @NEON_LIBS@
NOTIFY_CFLAGS ?= @NOTIFY_CFLAGS@
NOTIFY_LIBS ?= @NOTIFY_LIBS@
-OBJEXT ?= @OBJEXT@
OGG_VORBIS_CFLAGS ?= @OGG_VORBIS_CFLAGS@
OGG_VORBIS_LIBS ?= @OGG_VORBIS_LIBS@
-OSS_LIBS ?= @OSS_LIBS@
-OUTPUT_PLUGINS ?= @OUTPUT_PLUGINS@
-OUTPUT_PLUGIN_DIR ?= @OUTPUT_PLUGIN_DIR@
-PACKAGE ?= @PACKAGE@
-PACKAGE_BUGREPORT ?= @PACKAGE_BUGREPORT@
-PACKAGE_NAME ?= @PACKAGE_NAME@
-PACKAGE_STRING ?= @PACKAGE_STRING@
-PACKAGE_TARNAME ?= @PACKAGE_TARNAME@
-PACKAGE_VERSION ?= @PACKAGE_VERSION@
+OPENAL_CFLAGS ?= @OPENAL_CFLAGS@
+OPENAL_LIBS ?= @OPENAL_LIBS@
+OSS_CFLAGS ?= @OSS_CFLAGS@
PANGO_CFLAGS ?= @PANGO_CFLAGS@
PANGO_LIBS ?= @PANGO_LIBS@
PANGOCAIRO_CFLAGS ?= @PANGOCAIRO_CFLAGS@
PANGOCAIRO_LIBS ?= @PANGOCAIRO_LIBS@
-PATH_SEPARATOR ?= @PATH_SEPARATOR@
-PC_REQUIRES ?= @PC_REQUIRES@
-PKG_CONFIG ?= @PKG_CONFIG@
-PLUGIN_LDFLAGS ?= @PLUGIN_LDFLAGS@
-POSUB ?= @POSUB@
-RANLIB ?= @RANLIB@
-RESID_LIBS ?= @RESID_LIBS@
+PTHREAD_CFLAGS ?= @PTHREAD_CFLAGS@
+PTHREAD_LIBS ?= @PTHREAD_LIBS@
SAMPLERATE_CFLAGS ?= @SAMPLERATE_CFLAGS@
SAMPLERATE_LIBS ?= @SAMPLERATE_LIBS@
SDL_CFLAGS ?= @SDL_CFLAGS@
-SDL_CONFIG ?= @SDL_CONFIG@
SDL_LIBS ?= @SDL_LIBS@
-SET_MAKE ?= @SET_MAKE@
-SHELL ?= @SHELL@
-SHOUT_CFLAGS ?= @SHOUT_CFLAGS@
-SHOUT_LIBS ?= @SHOUT_LIBS@
SIDPLAY1_CFLAGS ?= @SIDPLAY1_CFLAGS@
SIDPLAY1_LIBS ?= @SIDPLAY1_LIBS@
SIDPLAY2_CFLAGS ?= @SIDPLAY2_CFLAGS@
SIDPLAY2_LIBS ?= @SIDPLAY2_LIBS@
SNDFILE_CFLAGS ?= @SNDFILE_CFLAGS@
SNDFILE_LIBS ?= @SNDFILE_LIBS@
-STRIP ?= @STRIP@
-TAGLIB_CFLAGS ?= @TAGLIB_CFLAGS@
-TAGLIB_CONFIG ?= @TAGLIB_CONFIG@
-TAGLIB_LIBS ?= @TAGLIB_LIBS@
-TR ?= @TR@
-USE_INCLUDED_LIBINTL ?= @USE_INCLUDED_LIBINTL@
-USE_NLS ?= @USE_NLS@
-USE_X86ASM_FALSE ?= @USE_X86ASM_FALSE@
-USE_X86ASM_TRUE ?= @USE_X86ASM_TRUE@
-VERSION ?= @VERSION@
-VISUALIZATION_PLUGINS ?= @VISUALIZATION_PLUGINS@
-VISUALIZATION_PLUGIN_DIR ?= @VISUALIZATION_PLUGIN_DIR@
-XGETTEXT ?= @XGETTEXT@
-ac_ct_AR ?= @ac_ct_AR@
-ac_ct_CC ?= @ac_ct_CC@
-ac_ct_CXX ?= @ac_ct_CXX@
-ac_ct_RANLIB ?= @ac_ct_RANLIB@
-ac_ct_STRIP ?= @ac_ct_STRIP@
-am__fastdepCC_FALSE ?= @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE ?= @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE ?= @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE ?= @am__fastdepCXX_TRUE@
-am__include ?= @am__include@
-am__leading_dot ?= @am__leading_dot@
-am__quote ?= @am__quote@
-am__tar ?= @am__tar@
-am__untar ?= @am__untar@
-beepdir ?= @beepdir@
-bindir ?= @bindir@
-build ?= @build@
-build_alias ?= @build_alias@
-build_cpu ?= @build_cpu@
-build_os ?= @build_os@
-build_vendor ?= @build_vendor@
-datadir ?= @datadir@
-datarootdir ?= @datarootdir@
-exec_prefix ?= @exec_prefix@
-host ?= @host@
-host_alias ?= @host_alias@
-host_cpu ?= @host_cpu@
-host_os ?= @host_os@
-host_vendor ?= @host_vendor@
-includedir ?= @includedir@
-infodir ?= @infodir@
-install_sh ?= @install_sh@
-libdir ?= @libdir@
-libexecdir ?= @libexecdir@
-localedir ?= @localedir@
-localstatedir ?= @localstatedir@
-mandir ?= @mandir@
-mkdir_p ?= @mkdir_p@
-oldincludedir ?= @oldincludedir@
-pluginsubs ?= @pluginsubs@
-prefix ?= @prefix@
-program_transform_name ?= @program_transform_name@
-sbindir ?= @sbindir@
-sharedstatedir ?= @sharedstatedir@
-sysconfdir ?= @sysconfdir@
-target ?= @target@
-target_alias ?= @target_alias@
-target_cpu ?= @target_cpu@
-target_os ?= @target_os@
-target_vendor ?= @target_vendor@
-WAV_SNDFILE ?= @WAV_SNDFILE@
-VFS_BACKEND ?= @VFS_BACKEND@
-CONFIGDB_BACKEND ?= @CONFIGDB_BACKEND@
-CURL_CFLAGS ?= @CURL_CFLAGS@
-CURL_LIBS ?= @CURL_LIBS@
-NEON_CFLAGS ?= @NEON_CFLAGS@
-NEON_LIBS ?= @NEON_LIBS@
-CHARDET_LIBS ?= @CHARDET_LIBS@
-SUBDIR_GUESS ?= @SUBDIR_GUESS@
-LIBNOTIFY_CFLAGS ?= @LIBNOTIFY_CFLAGS@
-LIBNOTIFY_LIBS ?= @LIBNOTIFY_LIBS@
-XML_CFLAGS ?= @XML_CFLAGS@
-XML_LIBS ?= @XML_LIBS@
-CONTAINER_PLUGIN_DIR ?= @CONTAINER_PLUGIN_DIR@
-CONTAINER_PLUGINS ?= @CONTAINER_PLUGINS@
-SHARED_SUFFIX ?= @SHARED_SUFFIX@
-PICFLAGS ?= @PICFLAGS@
-PICLDFLAGS ?= @PICLDFLAGS@
-LIBLDFLAGS ?= @LIBLDFLAGS@
WAVPACK_CFLAGS ?= @WAVPACK_CFLAGS@
WAVPACK_LIBS ?= @WAVPACK_LIBS@
XCOMPOSITE_CFLAGS ?= @XCOMPOSITE_CFLAGS@
XCOMPOSITE_LIBS ?= @XCOMPOSITE_LIBS@
+XML_CFLAGS ?= @XML_CFLAGS@
+XML_LIBS ?= @XML_LIBS@
XRENDER_CFLAGS ?= @XRENDER_CFLAGS@
XRENDER_LIBS ?= @XRENDER_LIBS@
-XXF86VM_CFLAGS ?= @XXF86VM_CFLAGS@
-XXF86VM_LIBS ?= @XXF86VM_LIBS@
-LIBPROJECTM_CFLAGS ?= @LIBPROJECTM_CFLAGS@
-LIBPROJECTM_LIBS ?= @LIBPROJECTM_LIBS@
-LIBPROJECTM1_CFLAGS ?= @LIBPROJECTM1_CFLAGS@
-LIBPROJECTM1_LIBS ?= @LIBPROJECTM1_LIBS@
-MMS_CFLAGS ?= @MMS_CFLAGS@
-MMS_LIBS ?= @MMS_LIBS@
-MPG123_CFLAGS ?= @MPG123_CFLAGS@
-MPG123_LIBS ?= @MPG123_LIBS@
-IMLIB2_CFLAGS ?= @IMLIB2_CFLAGS@
-IMLIB2_LIBS ?= @IMLIB2_LIBS@
-SIMD_CFLAGS ?= @SIMD_CFLAGS@
-FILEWRITER_CFLAGS ?= @FILEWRITER_CFLAGS@
-FILEWRITER_LIBS ?= @FILEWRITER_LIBS@
-GCC42_CFLAGS ?= @GCC42_CFLAGS@
-CDIO_LIBS ?= @CDIO_LIBS@
-CDIO_CFLAGS ?= @CDIO_CFLAGS@
-CDDB_LIBS ?= @CDDB_LIBS@
-CDDB_CFLAGS ?= @CDDB_CFLAGS@
-TRANSPORT_PLUGIN_DIR ?= @TRANSPORT_PLUGIN_DIR@
-TRANSPORT_PLUGINS ?= @TRANSPORT_PLUGINS@
-LIBFLAC_LIBS ?= @LIBFLAC_LIBS@
-LIBFLAC_CFLAGS ?= @LIBFLAC_CFLAGS@
-MOWGLI_CFLAGS ?= @MOWGLI_CFLAGS@
-MOWGLI_LIBS ?= @MOWGLI_LIBS@
-pluginlibdir = @plugindir@
-plugindir = ${pluginlibdir}
-GTKGLEXT_CFLAGS ?= @GTKGLEXT_CFLAGS@
-GTKGLEXT_LIBS ?= @GTKGLEXT_LIBS@
-TR = @TR@
-PLUGIN_DEFNAME := `echo ${subst ${PLUGIN_SUFFIX},,${PLUGIN}} | LC_ALL=C tr '[:lower:]' '[:upper:]' | tr '-' '_'`
-PLUGIN_CPPFLAGS += -D${PLUGIN_DEFNAME}_CFGID="\"${subst ${PLUGIN_SUFFIX},,${PLUGIN}}\""
-FFMPEG_CFLAGS ?= @FFMPEG_CFLAGS@
-FFMPEG_LIBS ?= @FFMPEG_LIBS@
-CUE_CFLAGS ?= @CUE_CFLAGS@
-CUE_LIBS ?= @CUE_LIBS@
-DEBUG ?= @DEBUG@
-LIBROAR_CFLAGS ?= @LIBROAR_CFLAGS@
-LIBROAR_LIBS ?= @LIBROAR_LIBS@
diff --git a/install-sh b/install-sh
index 4d4a951..6781b98 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2005-05-14.22
+scriptversion=2009-04-28.21; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -39,38 +39,68 @@ scriptversion=2005-05-14.22
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
-# put in absolute paths if you don't have them in your path; or use env. vars.
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
-chmodcmd="$chmodprog 0755"
-chowncmd=
chgrpcmd=
-stripcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
rmcmd="$rmprog -f"
-mvcmd="$mvprog"
+stripcmd=
+
src=
dst=
dir_arg=
-dstarg=
+dst_arg=
+
+copy_on_change=false
no_target_directory=
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
@@ -80,81 +110,86 @@ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
--c (ignored)
--d create directories instead of installing files.
--g GROUP $chgrpprog installed files to GROUP.
--m MODE $chmodprog installed files to MODE.
--o USER $chownprog installed files to USER.
--s $stripprog installed files.
--t DIRECTORY install into DIRECTORY.
--T report an error if DSTFILE is a directory.
---help display this help and exit.
---version display version info and exit.
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
"
-while test -n "$1"; do
+while test $# -ne 0; do
case $1 in
- -c) shift
- continue;;
+ -c) ;;
+
+ -C) copy_on_change=true;;
- -d) dir_arg=true
- shift
- continue;;
+ -d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
+ shift;;
--help) echo "$usage"; exit $?;;
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
-o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
+ shift;;
- -s) stripcmd=$stripprog
- shift
- continue;;
+ -s) stripcmd=$stripprog;;
- -t) dstarg=$2
- shift
- shift
- continue;;
+ -t) dst_arg=$2
+ shift;;
- -T) no_target_directory=true
- shift
- continue;;
+ -T) no_target_directory=true;;
--version) echo "$0 $scriptversion"; exit $?;;
- *) # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- test -n "$dir_arg$dstarg" && break
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dstarg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dstarg"
- shift # fnord
- fi
- shift # arg
- dstarg=$arg
- done
+ --) shift
break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
esac
+ shift
done
-if test -z "$1"; then
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ done
+fi
+
+if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
@@ -164,24 +199,47 @@ if test -z "$1"; then
exit 0
fi
+if test -z "$dir_arg"; then
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
for src
do
# Protect names starting with `-'.
case $src in
- -*) src=./$src ;;
+ -*) src=./$src;;
esac
if test -n "$dir_arg"; then
dst=$src
- src=
-
- if test -d "$dst"; then
- mkdircmd=:
- chmodcmd=
- else
- mkdircmd=$mkdirprog
- fi
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
else
+
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
@@ -190,71 +248,199 @@ do
exit 1
fi
- if test -z "$dstarg"; then
+ if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
- dst=$dstarg
+ dst=$dst_arg
# Protect names starting with `-'.
case $dst in
- -*) dst=./$dst ;;
+ -*) dst=./$dst;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
- echo "$0: $dstarg: Is a directory" >&2
+ echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
- dst=$dst/`basename "$src"`
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
fi
fi
- # This sed command emulates the dirname command.
- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
- # Make sure that the destination directory exists.
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
- # Skip lots of stat calls in the usual case.
- if test ! -d "$dstdir"; then
- defaultIFS='
- '
- IFS="${IFS-$defaultIFS}"
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
- oIFS=$IFS
- # Some sh's can't handle IFS=/ for some reason.
- IFS='%'
- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
- shift
- IFS=$oIFS
+ case $dstdir in
+ /*) prefix='/';;
+ -*) prefix='./';;
+ *) prefix='';;
+ esac
- pathcomp=
+ eval "$initialize_posix_glob"
- while test $# -ne 0 ; do
- pathcomp=$pathcomp$1
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
shift
- if test ! -d "$pathcomp"; then
- $mkdirprog "$pathcomp"
- # mkdir can fail with a `File exist' error in case several
- # install-sh are creating the directory concurrently. This
- # is OK.
- test -d "$pathcomp" || exit
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
fi
- pathcomp=$pathcomp/
- done
+ fi
fi
if test -n "$dir_arg"; then
- $doit $mkdircmd "$dst" \
- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
- dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
@@ -262,10 +448,9 @@ do
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
- trap '(exit $?); exit' 1 2 13 15
# Copy the file name to the temp name.
- $doit $cpprog "$src" "$dsttmp" &&
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
@@ -273,51 +458,63 @@ do
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
- # Now rename the file to the real destination.
- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
- || {
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
-
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- if test -f "$dstdir/$dstfile"; then
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
- || {
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit 1
- }
- else
- :
- fi
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
- }
- }
- fi || { (exit 1); exit 1; }
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
done
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
- (exit 0); exit 0
-}
-
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
# End:
diff --git a/m4/arts.m4 b/m4/arts.m4
deleted file mode 100644
index 77269f3..0000000
--- a/m4/arts.m4
+++ /dev/null
@@ -1,131 +0,0 @@
-# CFLAGS and library paths for aRts
-# written 15 December 1999 by Ben Gertzfield <che@debian.org>
-# hacked for artsc by Haavard Kvaalen <havardk@xmms.org>
-
-dnl Usage:
-dnl AM_PATH_ARTSC([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
-dnl
-dnl Example:
-dnl AM_PATH_ARTSC(0.9.5, , AC_MSG_ERROR([*** ARTSC >= 0.9.5 not installed - please install first ***]))
-dnl
-dnl Defines ARTSC_CFLAGS, ARTSC_LIBS and ARTSC_VERSION.
-dnl
-
-dnl ARTSC_TEST_VERSION(AVAILABLE-VERSION, NEEDED-VERSION [, ACTION-IF-OKAY [, ACTION-IF-NOT-OKAY]])
-AC_DEFUN([ARTSC_TEST_VERSION], [
-
-# Determine which version number is greater. Prints 2 to stdout if
-# the second number is greater, 1 if the first number is greater,
-# 0 if the numbers are equal.
-
-# Written 15 December 1999 by Ben Gertzfield <che@debian.org>
-# Revised 15 December 1999 by Jim Monty <monty@primenet.com>
-
- AC_PROG_AWK
- artsc_got_version=[` $AWK ' \
-BEGIN { \
- print vercmp(ARGV[1], ARGV[2]); \
-} \
- \
-function vercmp(ver1, ver2, ver1arr, ver2arr, \
- ver1len, ver2len, \
- ver1int, ver2int, len, i, p) { \
- \
- ver1len = split(ver1, ver1arr, /\./); \
- ver2len = split(ver2, ver2arr, /\./); \
- \
- len = ver1len > ver2len ? ver1len : ver2len; \
- \
- for (i = 1; i <= len; i++) { \
- p = 1000 ^ (len - i); \
- ver1int += ver1arr[i] * p; \
- ver2int += ver2arr[i] * p; \
- } \
- \
- if (ver1int < ver2int) \
- return 2; \
- else if (ver1int > ver2int) \
- return 1; \
- else \
- return 0; \
-}' $1 $2`]
-
- if test $artsc_got_version -eq 2; then # failure
- ifelse([$4], , :, $4)
- else # success!
- ifelse([$3], , :, $3)
- fi
-])
-
-AC_DEFUN([AM_PATH_ARTSC],
-[
-AC_ARG_WITH(artsc-prefix,[ --with-artsc-prefix=PFX Prefix where aRts is installed (optional)],
- artsc_config_prefix="$withval", artsc_config_prefix="")
-AC_ARG_WITH(artsc-exec-prefix,[ --with-artsc-exec-prefix=PFX Exec prefix where aRts is installed (optional)],
- artsc_config_exec_prefix="$withval", artsc_config_exec_prefix="")
-
-if test x$artsc_config_exec_prefix != x; then
- artsc_config_args="$artsc_config_args --exec-prefix=$artsc_config_exec_prefix"
- if test x${ARTSC_CONFIG+set} != xset; then
- ARTSC_CONFIG=$artsc_config_exec_prefix/bin/artsc-config
- fi
-fi
-
-if test x$artsc_config_prefix != x; then
- artsc_config_args="$artsc_config_args --prefix=$artsc_config_prefix"
- if test x${ARTSC_CONFIG+set} != xset; then
- ARTSC_CONFIG=$artsc_config_prefix/bin/artsc-config
- fi
-fi
-
-AC_PATH_PROG(ARTSC_CONFIG, artsc-config, no)
-min_artsc_version=ifelse([$1], ,0.9.5.1, $1)
-
-if test "$ARTSC_CONFIG" = "no"; then
- no_artsc=yes
-else
- ARTSC_CFLAGS=`$ARTSC_CONFIG $artsc_config_args --cflags`
- ARTSC_LIBS=`$ARTSC_CONFIG $artsc_config_args --libs`
- ARTSC_VERSION=`$ARTSC_CONFIG $artsc_config_args --version`
-
- ARTSC_TEST_VERSION($ARTSC_VERSION, $min_artsc_version, ,no_artsc=version)
-fi
-
-AC_MSG_CHECKING(for artsc - version >= $min_artsc_version)
-
-if test "x$no_artsc" = x; then
- AC_MSG_RESULT(yes)
- AC_SUBST(ARTSC_CFLAGS)
- AC_SUBST(ARTSC_LIBS)
- AC_SUBST(ARTSC_VERSION)
- ifelse([$2], , :, [$2])
-else
- AC_MSG_RESULT(no)
-
- if test "$ARTSC_CONFIG" = "no" ; then
- echo "*** The artsc-config script installed by aRts could not be found."
- echo "*** If aRts was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the ARTSC_CONFIG environment variable to the"
- echo "*** full path to artsc-config."
- else
- if test "$no_artsc" = "version"; then
- echo "*** An old version of aRts, $ARTSC_VERSION, was found."
- echo "*** You need a version of aRts newer than $min_artsc_version."
- echo "*** The latest version of aRts is available from"
- echo "*** http://www.arts-project.org/"
- echo "***"
-
- echo "*** If you have already installed a sufficiently new version, this error"
- echo "*** probably means that the wrong copy of the artsc-config shell script is"
- echo "*** being found. The easiest way to fix this is to remove the old version"
- echo "*** of aRts, but you can also set the ARTSC_CONFIG environment to point to the"
- echo "*** correct copy of artsc-config. (In this case, you will have to"
- echo "*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf"
- echo "*** so that the correct libraries are found at run-time)"
- fi
- fi
- ARTSC_CFLAGS=""
- ARTSC_LIBS=""
- ifelse([$3], , :, [$3])
-fi
-])
diff --git a/m4/buildsys.m4 b/m4/buildsys.m4
index bb5a955..a742bb8 100644
--- a/m4/buildsys.m4
+++ b/m4/buildsys.m4
@@ -20,13 +20,51 @@ dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
dnl POSSIBILITY OF SUCH DAMAGE.
dnl
-AC_DEFUN([BUILDSYS_LIB], [
- AC_ARG_ENABLE(shared,
- AS_HELP_STRING([--disable-shared], [don't build shared libraries]))
+AC_DEFUN([BUILDSYS_INIT], [
+ AC_PATH_PROG(TPUT, tput)
- AS_IF([test x"$enable_shared" = x"no"],
- [BUILDSYS_STATIC_LIB_ONLY],
- [BUILDSYS_SHARED_LIB])
+ AS_IF([test x"$TPUT" != x""], [
+ if x=$($TPUT el 2>/dev/null); then
+ AC_SUBST(TERM_EL, "$x")
+ else
+ AC_SUBST(TERM_EL, "$($TPUT ce 2>/dev/null)")
+ fi
+
+ if x=$($TPUT sgr0 2>/dev/null); then
+ AC_SUBST(TERM_SGR0, "$x")
+ else
+ AC_SUBST(TERM_SGR0, "$($TPUT me 2>/dev/null)")
+ fi
+
+ if x=$($TPUT bold 2>/dev/null); then
+ AC_SUBST(TERM_BOLD, "$x")
+ else
+ AC_SUBST(TERM_BOLD, "$($TPUT md 2>/dev/null)")
+ fi
+
+ if x=$($TPUT setaf 1 2>/dev/null); then
+ AC_SUBST(TERM_SETAF1, "$x")
+ AC_SUBST(TERM_SETAF2, "$($TPUT setaf 2 2>/dev/null)")
+ AC_SUBST(TERM_SETAF3, "$($TPUT setaf 3 2>/dev/null)")
+ AC_SUBST(TERM_SETAF4, "$($TPUT setaf 4 2>/dev/null)")
+ AC_SUBST(TERM_SETAF6, "$($TPUT setaf 6 2>/dev/null)")
+ else
+ AC_SUBST(TERM_SETAF1, "$($TPUT AF 1 2>/dev/null)")
+ AC_SUBST(TERM_SETAF2, "$($TPUT AF 2 2>/dev/null)")
+ AC_SUBST(TERM_SETAF3, "$($TPUT AF 3 2>/dev/null)")
+ AC_SUBST(TERM_SETAF4, "$($TPUT AF 4 2>/dev/null)")
+ AC_SUBST(TERM_SETAF6, "$($TPUT AF 6 2>/dev/null)")
+ fi
+ ], [
+ AC_SUBST(TERM_EL, '\033\133K')
+ AC_SUBST(TERM_SGR0, '\033\133m')
+ AC_SUBST(TERM_BOLD, '\033\1331m')
+ AC_SUBST(TERM_SETAF1, '\033\13331m')
+ AC_SUBST(TERM_SETAF2, '\033\13332m')
+ AC_SUBST(TERM_SETAF3, '\033\13333m')
+ AC_SUBST(TERM_SETAF4, '\033\13334m')
+ AC_SUBST(TERM_SETAF6, '\033\13336m')
+ ])
])
AC_DEFUN([BUILDSYS_PROG_IMPLIB], [
@@ -55,93 +93,81 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
case "$host_os" in
darwin*)
AC_MSG_RESULT(Darwin)
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-dynamiclib -flat_namespace'
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR}'
LIB_PREFIX='lib'
LIB_SUFFIX='.dylib'
LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-bundle -flat_namespace -undefined suppress'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
PLUGIN_SUFFIX='.impl'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
CLEAN_LIB=''
;;
solaris*)
AC_MSG_RESULT(Solaris)
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}'
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-shared -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}'
LIB_PREFIX='lib'
LIB_SUFFIX='.so'
LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-shared -fPIC'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-shared'
PLUGIN_SUFFIX='.so'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}'
CLEAN_LIB=''
;;
openbsd* | mirbsd*)
AC_MSG_RESULT(OpenBSD)
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-shared -fPIC'
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-shared'
LIB_PREFIX='lib'
LIB_SUFFIX='.so.${LIB_MAJOR}.${LIB_MINOR}'
LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-shared -fPIC'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-shared'
PLUGIN_SUFFIX='.so'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i'
CLEAN_LIB=''
;;
cygwin* | mingw*)
AC_MSG_RESULT(Win32)
- LIB_CPPFLAGS='-DPIC'
LIB_CFLAGS=''
LIB_LDFLAGS='-shared -Wl,--out-implib,${LIB}.a'
LIB_PREFIX='lib'
LIB_SUFFIX='.dll'
LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS=''
PLUGIN_CFLAGS=''
PLUGIN_LDFLAGS='-shared'
PLUGIN_SUFFIX='.dll'
- INSTALL_LIB='${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a'
- UNINSTALL_LIB='rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a'
+ INSTALL_LIB='&& ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a'
CLEAN_LIB='${LIB}.a'
;;
*)
AC_MSG_RESULT(GNU)
- LIB_CPPFLAGS='-DPIC'
- LIB_CFLAGS='-fPIC'
- LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}'
+ LIB_CFLAGS='-fPIC -DPIC'
+ LIB_LDFLAGS='-shared -Wl,-soname=${LIB}.${LIB_MAJOR}'
LIB_PREFIX='lib'
LIB_SUFFIX='.so'
LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
- PLUGIN_CPPFLAGS='-DPIC'
- PLUGIN_CFLAGS='-fPIC'
- PLUGIN_LDFLAGS='-shared -fPIC'
+ PLUGIN_CFLAGS='-fPIC -DPIC'
+ PLUGIN_LDFLAGS='-shared'
PLUGIN_SUFFIX='.so'
- INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0'
+ INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i'
+ UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0'
CLEAN_LIB=''
;;
esac
- AC_SUBST(LIB_CPPFLAGS)
AC_SUBST(LIB_CFLAGS)
AC_SUBST(LIB_LDFLAGS)
AC_SUBST(LIB_PREFIX)
AC_SUBST(LIB_SUFFIX)
AC_SUBST(LDFLAGS_RPATH)
- AC_SUBST(PLUGIN_CPPFLAGS)
AC_SUBST(PLUGIN_CFLAGS)
AC_SUBST(PLUGIN_LDFLAGS)
AC_SUBST(PLUGIN_SUFFIX)
@@ -150,33 +176,8 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
AC_SUBST(CLEAN_LIB)
])
-AC_DEFUN([BUILDSYS_STATIC_LIB_ONLY], [
- AC_REQUIRE([AC_PROG_RANLIB])
- AC_PATH_TOOL(AR, ar)
-
- LIB_CPPFLAGS=''
- LIB_CFLAGS=''
- LIB_LDFLAGS=''
- LIB_PREFIX='lib'
- LIB_SUFFIX='.a'
- LDFLAGS_RPATH=''
- INSTALL_LIB='${INSTALL} -m 644 $$i ${DESTDIR}${libdir}/$$i'
- UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i'
- CLEAN_LIB=''
-
- AC_SUBST(LIB_CPPFLAGS)
- AC_SUBST(LIB_CFLAGS)
- AC_SUBST(LIB_LDFLAGS)
- AC_SUBST(LIB_PREFIX)
- AC_SUBST(LIB_SUFFIX)
- AC_SUBST(LDFLAGS_RPATH)
- AC_SUBST(INSTALL_LIB)
- AC_SUBST(UNINSTALL_LIB)
- AC_SUBST(CLEAN_LIB)
-])
-
AC_DEFUN([BUILDSYS_TOUCH_DEPS], [
- ${as_echo:="echo"} "${as_me:="configure"}: touching .deps files"
+ ${as_echo:="echo"} ${as_me:="configure"}": touching .deps files"
for i in $(find . -name Makefile); do
DEPSFILE="$(dirname $i)/.deps"
test -f "$DEPSFILE" && rm "$DEPSFILE"
diff --git a/m4/codeset.m4 b/m4/codeset.m4
deleted file mode 100644
index 59535eb..0000000
--- a/m4/codeset.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-# codeset.m4 serial AM1 (gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
- AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
- [AC_TRY_LINK([#include <langinfo.h>],
- [char* cs = nl_langinfo(CODESET);],
- am_cv_langinfo_codeset=yes,
- am_cv_langinfo_codeset=no)
- ])
- if test $am_cv_langinfo_codeset = yes; then
- AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
- [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
- fi
-])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
deleted file mode 100644
index 16070b4..0000000
--- a/m4/gettext.m4
+++ /dev/null
@@ -1,415 +0,0 @@
-# gettext.m4 serial 20 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-dnl Macro to add for using GNU gettext.
-
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl default (if it is not specified or empty) is 'no-libtool'.
-dnl INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl depending on --{enable,disable}-{shared,static} and on the presence of
-dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl $(top_builddir)/intl/libintl.a will be created.
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl implementations (in libc or libintl) without the ngettext() function
-dnl will be ignored. If NEEDSYMBOL is specified and is
-dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries. If empty,
-dnl the value `$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl and used.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl Catalog format: none
-dnl Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
-[
- dnl Argument checking.
- ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
- [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
- ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
- [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
- define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
- define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
-
- AC_REQUIRE([AM_PO_SUBDIRS])dnl
- ifelse(gt_included_intl, yes, [
- AC_REQUIRE([AM_INTL_SUBDIR])dnl
- ])
-
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- dnl Ideally we would do this search only after the
- dnl if test "$USE_NLS" = "yes"; then
- dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
- dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
- dnl the configure script would need to contain the same shell code
- dnl again, outside any 'if'. There are two solutions:
- dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
- dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
- dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
- dnl documented, we avoid it.
- ifelse(gt_included_intl, yes, , [
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
- ])
-
- dnl Set USE_NLS.
- AM_NLS
-
- ifelse(gt_included_intl, yes, [
- BUILD_INCLUDED_LIBINTL=no
- USE_INCLUDED_LIBINTL=no
- ])
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
- ifelse(gt_included_intl, yes, [
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH(included-gettext,
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- ])
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If GNU gettext is available we use this. Else we have
- dnl to fall back to GNU NLS library.
-
- dnl Add a version number to the cache macros.
- define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
- define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
- define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
-
- AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
- [AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
- gt_cv_func_gnugettext_libc=yes,
- gt_cv_func_gnugettext_libc=no)])
-
- if test "$gt_cv_func_gnugettext_libc" != "yes"; then
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- ifelse(gt_included_intl, yes, , [
- AM_ICONV_LINK
- ])
- dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
- dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
- dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
- dnl even if libiconv doesn't exist.
- AC_LIB_LINKFLAGS_BODY([intl])
- AC_CACHE_CHECK([for GNU gettext in libintl],
- gt_cv_func_gnugettext_libintl,
- [gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- dnl Now see whether libintl exists and does not depend on libiconv.
- AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias ();],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
- gt_cv_func_gnugettext_libintl=yes,
- gt_cv_func_gnugettext_libintl=no)
- dnl Now see whether libintl exists and depends on libiconv.
- if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <libintl.h>
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias ();],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
- [LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- gt_cv_func_gnugettext_libintl=yes
- ])
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"])
- fi
-
- dnl If an already present or preinstalled GNU gettext() is found,
- dnl use it. But if this macro is used in GNU gettext, and GNU
- dnl gettext is already preinstalled in libintl, we update this
- dnl libintl. (Cf. the install rule in intl/Makefile.in.)
- if test "$gt_cv_func_gnugettext_libc" = "yes" \
- || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- dnl Reset the values set by searching for libintl.
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
- ifelse(gt_included_intl, yes, [
- if test "$gt_use_preinstalled_gnugettext" != "yes"; then
- dnl GNU gettext is not found in the C library.
- dnl Fall back on included GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- BUILD_INCLUDED_LIBINTL=yes
- USE_INCLUDED_LIBINTL=yes
- LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
- LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
- LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions to use GNU gettext tools.
- CATOBJEXT=.gmo
- fi
- ])
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- AC_DEFINE(ENABLE_NLS, 1,
- [Define to 1 if translation of program messages to the user's native language
- is requested.])
- else
- USE_NLS=no
- fi
- fi
-
- AC_MSG_CHECKING([whether to use NLS])
- AC_MSG_RESULT([$USE_NLS])
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([where the gettext function comes from])
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- AC_MSG_RESULT([$gt_source])
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
- AC_MSG_CHECKING([how to link with libintl])
- AC_MSG_RESULT([$LIBINTL])
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
- fi
-
- dnl For backward compatibility. Some packages may be using this.
- AC_DEFINE(HAVE_GETTEXT, 1,
- [Define if the GNU gettext() function is already present or preinstalled.])
- AC_DEFINE(HAVE_DCGETTEXT, 1,
- [Define if the GNU dcgettext() function is already present or preinstalled.])
- fi
-
- dnl We need to process the po/ directory.
- POSUB=po
- fi
-
- ifelse(gt_included_intl, yes, [
- dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
- dnl to 'yes' because some of the testsuite requires it.
- if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
- BUILD_INCLUDED_LIBINTL=yes
- fi
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(BUILD_INCLUDED_LIBINTL)
- AC_SUBST(USE_INCLUDED_LIBINTL)
- AC_SUBST(CATOBJEXT)
-
- dnl For backward compatibility. Some configure.ins may be using this.
- nls_cv_header_intl=
- nls_cv_header_libgt=
-
- dnl For backward compatibility. Some Makefiles may be using this.
- DATADIRNAME=share
- AC_SUBST(DATADIRNAME)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INSTOBJEXT=.mo
- AC_SUBST(INSTOBJEXT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- GENCAT=gencat
- AC_SUBST(GENCAT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- if test "$USE_INCLUDED_LIBINTL" = yes; then
- INTLOBJS="\$(GETTOBJS)"
- fi
- AC_SUBST(INTLOBJS)
-
- dnl Enable libtool support if the surrounding package wishes it.
- INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
- AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
- ])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLLIBS="$LIBINTL"
- AC_SUBST(INTLLIBS)
-
- dnl Make all documented variables known to autoconf.
- AC_SUBST(LIBINTL)
- AC_SUBST(LTLIBINTL)
- AC_SUBST(POSUB)
-])
-
-
-dnl Checks for all prerequisites of the intl subdirectory,
-dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-AC_DEFUN([AM_INTL_SUBDIR],
-[
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_MKINSTALLDIRS])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_ISC_POSIX])dnl
- AC_REQUIRE([AC_HEADER_STDC])dnl
- AC_REQUIRE([AC_C_CONST])dnl
- AC_REQUIRE([AC_C_INLINE])dnl
- AC_REQUIRE([AC_TYPE_OFF_T])dnl
- AC_REQUIRE([AC_TYPE_SIZE_T])dnl
- AC_REQUIRE([AC_FUNC_ALLOCA])dnl
- AC_REQUIRE([AC_FUNC_MMAP])dnl
- AC_REQUIRE([jm_GLIBC21])dnl
- AC_REQUIRE([gt_INTDIV0])dnl
- AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
- AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
- AC_REQUIRE([gt_INTTYPES_PRI])dnl
-
- AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
-stdlib.h string.h unistd.h sys/param.h])
- AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
-geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
-strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \
-__fsetlocking])
-
- AM_ICONV
- AM_LANGINFO_CODESET
- if test $ac_cv_header_locale_h = yes; then
- AM_LC_MESSAGES
- fi
-
- dnl intl/plural.c is generated from intl/plural.y. It requires bison,
- dnl because plural.y uses bison specific features. It requires at least
- dnl bison-1.26 because earlier versions generate a plural.c that doesn't
- dnl compile.
- dnl bison is only needed for the maintainer (who touches plural.y). But in
- dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
- dnl the rule in general Makefile. Now, some people carelessly touch the
- dnl files or have a broken "make" program, hence the plural.c rule will
- dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
- dnl present or too old.
- AC_CHECK_PROGS([INTLBISON], [bison])
- if test -z "$INTLBISON"; then
- ac_verc_fail=yes
- else
- dnl Found it, now check the version.
- AC_MSG_CHECKING([version of bison])
-changequote(<<,>>)dnl
- ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
- case $ac_prog_version in
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-changequote([,])dnl
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
- esac
- AC_MSG_RESULT([$ac_prog_version])
- fi
- if test $ac_verc_fail = yes; then
- INTLBISON=:
- fi
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
deleted file mode 100644
index 9c9f3db..0000000
--- a/m4/glibc21.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# Test for the GNU C Library, version 2.1 or newer.
-# From Bruno Haible.
-
-AC_DEFUN([jm_GLIBC21],
- [
- AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
- ac_cv_gnu_library_2_1,
- [AC_EGREP_CPP([Lucky GNU user],
- [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
- Lucky GNU user
- #endif
-#endif
- ],
- ac_cv_gnu_library_2_1=yes,
- ac_cv_gnu_library_2_1=no)
- ]
- )
- AC_SUBST(GLIBC21)
- GLIBC21="$ac_cv_gnu_library_2_1"
- ]
-)
diff --git a/m4/iconv.m4 b/m4/iconv.m4
deleted file mode 100644
index c5f3579..0000000
--- a/m4/iconv.m4
+++ /dev/null
@@ -1,103 +0,0 @@
-# iconv.m4 serial AM4 (gettext-0.11.3)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-[
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([iconv])
-])
-
-AC_DEFUN([AM_ICONV_LINK],
-[
- dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
- dnl those with the standalone portable GNU libiconv installed).
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-
- dnl Add $INCICONV to CPPFLAGS before performing the following checks,
- dnl because if the user has installed libiconv and not disabled its use
- dnl via --without-libiconv-prefix, he wants to use it. The first
- dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
- am_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-
- AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_func_iconv=yes)
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_lib_iconv=yes
- am_cv_func_iconv=yes)
- LIBS="$am_save_LIBS"
- fi
- ])
- if test "$am_cv_func_iconv" = yes; then
- AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
- fi
- if test "$am_cv_lib_iconv" = yes; then
- AC_MSG_CHECKING([how to link with libiconv])
- AC_MSG_RESULT([$LIBICONV])
- else
- dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
- dnl either.
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
- AC_SUBST(LIBICONV)
- AC_SUBST(LTLIBICONV)
-])
-
-AC_DEFUN([AM_ICONV],
-[
- AM_ICONV_LINK
- if test "$am_cv_func_iconv" = yes; then
- AC_MSG_CHECKING([for iconv declaration])
- AC_CACHE_VAL(am_cv_proto_iconv, [
- AC_TRY_COMPILE([
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
- am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- AC_MSG_RESULT([$]{ac_t:-
- }[$]am_cv_proto_iconv)
- AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
- [Define as const if the declaration of iconv() needs const.])
- fi
-])
diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
deleted file mode 100644
index 55dddcf..0000000
--- a/m4/intdiv0.m4
+++ /dev/null
@@ -1,72 +0,0 @@
-# intdiv0.m4 serial 1 (gettext-0.11.3)
-dnl Copyright (C) 2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gt_INTDIV0],
-[
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
-
- AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
- gt_cv_int_divbyzero_sigfpe,
- [
- AC_TRY_RUN([
-#include <stdlib.h>
-#include <signal.h>
-
-static void
-#ifdef __cplusplus
-sigfpe_handler (int sig)
-#else
-sigfpe_handler (sig) int sig;
-#endif
-{
- /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
- exit (sig != SIGFPE);
-}
-
-int x = 1;
-int y = 0;
-int z;
-int nan;
-
-int main ()
-{
- signal (SIGFPE, sigfpe_handler);
-/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
-#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
- signal (SIGTRAP, sigfpe_handler);
-#endif
-/* Linux/SPARC yields signal SIGILL. */
-#if defined (__sparc__) && defined (__linux__)
- signal (SIGILL, sigfpe_handler);
-#endif
-
- z = x / y;
- nan = y / y;
- exit (1);
-}
-], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
- [
- # Guess based on the CPU.
- case "$host_cpu" in
- alpha* | i[34567]86 | m68k | s390*)
- gt_cv_int_divbyzero_sigfpe="guessing yes";;
- *)
- gt_cv_int_divbyzero_sigfpe="guessing no";;
- esac
- ])
- ])
- case "$gt_cv_int_divbyzero_sigfpe" in
- *yes) value=1;;
- *) value=0;;
- esac
- AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
- [Define if integer division by zero raises signal SIGFPE.])
-])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
deleted file mode 100644
index fd007c3..0000000
--- a/m4/inttypes-pri.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# inttypes-pri.m4 serial 1 (gettext-0.11.4)
-dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-# macros to non-string values. This is the case on AIX 4.3.3.
-
-AC_DEFUN([gt_INTTYPES_PRI],
-[
- AC_REQUIRE([gt_HEADER_INTTYPES_H])
- if test $gt_cv_header_inttypes_h = yes; then
- AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
- gt_cv_inttypes_pri_broken,
- [
- AC_TRY_COMPILE([#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
- ])
- fi
- if test "$gt_cv_inttypes_pri_broken" = yes; then
- AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
- [Define if <inttypes.h> exists and defines unusable PRI* macros.])
- fi
-])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
deleted file mode 100644
index ab370ff..0000000
--- a/m4/inttypes.m4
+++ /dev/null
@@ -1,27 +0,0 @@
-# inttypes.m4 serial 1 (gettext-0.11.4)
-dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
-# <sys/types.h>.
-
-AC_DEFUN([gt_HEADER_INTTYPES_H],
-[
- AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
- [
- AC_TRY_COMPILE(
- [#include <sys/types.h>
-#include <inttypes.h>],
- [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
- ])
- if test $gt_cv_header_inttypes_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
- [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
- fi
-])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
deleted file mode 100644
index f342eba..0000000
--- a/m4/inttypes_h.m4
+++ /dev/null
@@ -1,28 +0,0 @@
-# inttypes_h.m4 serial 5 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
-[
- AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
- [AC_TRY_COMPILE(
- [#include <sys/types.h>
-#include <inttypes.h>],
- [uintmax_t i = (uintmax_t) -1;],
- jm_ac_cv_header_inttypes_h=yes,
- jm_ac_cv_header_inttypes_h=no)])
- if test $jm_ac_cv_header_inttypes_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
- [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
- and declares uintmax_t. ])
- fi
-])
diff --git a/m4/isc-posix.m4 b/m4/isc-posix.m4
deleted file mode 100644
index 1319dd1..0000000
--- a/m4/isc-posix.m4
+++ /dev/null
@@ -1,26 +0,0 @@
-# isc-posix.m4 serial 2 (gettext-0.11.2)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
-
-# This test replaces the one in autoconf.
-# Currently this macro should have the same name as the autoconf macro
-# because gettext's gettext.m4 (distributed in the automake package)
-# still uses it. Otherwise, the use in gettext.m4 makes autoheader
-# give these diagnostics:
-# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
-# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
-
-undefine([AC_ISC_POSIX])
-
-AC_DEFUN([AC_ISC_POSIX],
- [
- dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
- AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
- ]
-)
diff --git a/m4/jack.m4 b/m4/jack.m4
deleted file mode 100644
index f049747..0000000
--- a/m4/jack.m4
+++ /dev/null
@@ -1,34 +0,0 @@
-# Configure paths for JACK
-
-dnl AM_PATH_JACK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
-dnl Test for JACK, and define JACK_CFLAGS and JACK_LIBS
-dnl
-AC_DEFUN([AM_PATH_JACK],
-[dnl
-dnl *** Check for JACK libraries
-dnl
-PKG_CHECK_MODULES([JACK], [jack >= 0.100.0], [have_jack=yes], [have_jack=no])
-
-dnl *** Check for libsamplerate necessary for bio2jack
-PKG_CHECK_MODULES([SAMPLERATE], [samplerate >= 0.0.15],
- [ac_cv_samplerate=1], [ac_cv_samplerate=0])
-
-AC_DEFINE_UNQUOTED([HAVE_SAMPLERATE], ${ac_cv_samplerate},
- [Set to 1 if you have libsamplerate.])
-
-dnl *** Make sure libsamplerate is found, we can't compile without it
-if test "x${ac_cv_samplerate}" = "x0"; then
- AC_MSG_WARN([Could not find libsamplerate, necessary for jack output plugin.])
- have_jack=no
-fi
-
-dnl AC_SUBST(SAMPLERATE_CFLAGS)
-dnl AC_SUBST(SAMPLERATE_LIBS)
-
-if test "x$have_jack" = "xno"; then
- ifelse([$2], , :, [$2])
-else
- ifelse([$1], , :, [$1])
-fi
-
-])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
deleted file mode 100644
index ffd4008..0000000
--- a/m4/lcmessage.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# lcmessage.m4 serial 3 (gettext-0.11.3)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
-
-# Check whether LC_MESSAGES is available in <locale.h>.
-
-AC_DEFUN([AM_LC_MESSAGES],
-[
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your <locale.h> file defines LC_MESSAGES.])
- fi
-])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
deleted file mode 100644
index 11d0ce7..0000000
--- a/m4/lib-ld.m4
+++ /dev/null
@@ -1,110 +0,0 @@
-# lib-ld.m4 serial 2 (gettext-0.12)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- acl_cv_prog_gnu_ld=yes
-else
- acl_cv_prog_gnu_ld=no
-fi])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
deleted file mode 100644
index eeb200d..0000000
--- a/m4/lib-link.m4
+++ /dev/null
@@ -1,551 +0,0 @@
-# lib-link.m4 serial 4 (gettext-0.12)
-dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- if test $use_additional = yes; then
- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
- found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
- done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
deleted file mode 100644
index c719bc8..0000000
--- a/m4/lib-prefix.m4
+++ /dev/null
@@ -1,155 +0,0 @@
-# lib-prefix.m4 serial 2 (gettext-0.12)
-dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
diff --git a/m4/libFLAC.m4 b/m4/libFLAC.m4
deleted file mode 100644
index f951411..0000000
--- a/m4/libFLAC.m4
+++ /dev/null
@@ -1,106 +0,0 @@
-# For audacious by MSameer
-# Configure paths for libFLAC
-# "Inspired" by ogg.m4
-
-dnl AM_PATH_LIBFLAC([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Test for libFLAC, and define LIBFLAC_CFLAGS and LIBFLAC_LIBS
-dnl
-AC_DEFUN([AM_PATH_LIBFLAC],
-[dnl
-dnl Get the cflags and libraries
-dnl
-AC_ARG_WITH(libFLAC,[ --with-libFLAC=PFX Prefix where libFLAC is installed (optional)], libFLAC_prefix="$withval", libFLAC_prefix="")
-AC_ARG_WITH(libFLAC-libraries,[ --with-libFLAC-libraries=DIR Directory where libFLAC library is installed (optional)], libFLAC_libraries="$withval", libFLAC_libraries="")
-AC_ARG_WITH(libFLAC-includes,[ --with-libFLAC-includes=DIR Directory where libFLAC header files are installed (optional)], libFLAC_includes="$withval", libFLAC_includes="")
-AC_ARG_ENABLE(libFLACtest, [ --disable-libFLACtest do not try to compile and run a test libFLAC program],, enable_libFLACtest=yes)
-
- if test "x$libFLAC_libraries" != "x" ; then
- LIBFLAC_LIBS="-L$libFLAC_libraries"
- elif test "x$libFLAC_prefix" != "x" ; then
- LIBFLAC_LIBS="-L$libFLAC_prefix/lib"
- elif test "x$prefix" != "xNONE" ; then
- LIBFLAC_LIBS="-L$libdir"
- fi
-
- LIBFLAC_LIBS="$LIBFLAC_LIBS -lFLAC -lm"
-
- if test "x$libFLAC_includes" != "x" ; then
- LIBFLAC_CFLAGS="-I$libFLAC_includes"
- elif test "x$libFLAC_prefix" != "x" ; then
- LIBFLAC_CFLAGS="-I$libFLAC_prefix/include"
- elif test "x$prefix" != "xNONE"; then
- LIBFLAC_CFLAGS="-I$prefix/include"
- fi
-
- AC_MSG_CHECKING(for libFLAC >= 1.1.2)
- no_libFLAC=""
-
-
- if test "x$enable_libFLACtest" = "xyes" ; then
- ac_save_CFLAGS="$CFLAGS"
- ac_save_CXXFLAGS="$CXXFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $LIBFLAC_CFLAGS"
- CXXFLAGS="$CXXFLAGS $LIBFLAC_CFLAGS"
- LIBS="$LIBS $LIBFLAC_LIBS"
-dnl
-dnl Now check if the installed libFLAC is sufficiently new.
-dnl
- rm -f conf.libFLACtest
- AC_TRY_RUN([
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <FLAC/all.h>
-
-int main ()
-{
-FLAC__format_vorbiscomment_entry_name_is_legal("foo");
- system("touch conf.libFLACtest");
- return 0;
-}
-
-],, no_libFLAC=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
-
- if test "x$no_libFLAC" = "x" ; then
- AC_MSG_RESULT(yes)
- ifelse([$1], , :, [$1])
- else
- AC_MSG_RESULT(no)
- if test -f conf.libFLACtest ; then
- :
- else
- echo "*** Could not run libFLAC test program, checking why..."
- CFLAGS="$CFLAGS $LIBFLAC_CFLAGS"
- LIBS="$LIBS $LIBFLAC_LIBS"
- AC_TRY_LINK([
-#include <stdio.h>
-#include <FLAC/format.h>
-], [ return 0; ],
- [ echo "*** The test program compiled, but did not run. This usually means"
- echo "*** that the run-time linker is not finding libFLAC or finding the wrong"
- echo "*** version of libFLAC. If it is not finding libFLAC, you'll need to set your"
- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
- echo "*** is required on your system"
- echo "***"
- echo "*** If you have an old version installed, it is best to remove it, although"
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
- [ echo "*** The test program failed to compile or link. See the file config.log for the"
- echo "*** exact error that occured. This usually means libFLAC was incorrectly installed"
- echo "*** or that you have moved libFLAC since it was installed. In the latter case, you"
- echo "*** may want to edit the libFLAC-config script: $LIBFLAC_CONFIG" ])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- LIBFLAC_CFLAGS=""
- LIBFLAC_LIBS=""
- ifelse([$2], , :, [$2])
- fi
- AC_SUBST(LIBFLAC_CFLAGS)
- AC_SUBST(LIBFLAC_LIBS)
- rm -f conf.libFLACtest
-])
diff --git a/m4/libmad.m4 b/m4/libmad.m4
deleted file mode 100644
index 30ef3dc..0000000
--- a/m4/libmad.m4
+++ /dev/null
@@ -1,116 +0,0 @@
-dnl Configure paths for libmad
-dnl derived from libFLAC.m4
-
-dnl AM_PATH_LIBMAD([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
-dnl Test for libmad, and define MAD_CFLAGS and MAD_LIBS
-dnl
-AC_DEFUN([AM_PATH_LIBMAD],
-[dnl
-dnl Get the cflags and libraries
-dnl
-AC_ARG_WITH([libmad],
-[AS_HELP_STRING([--with-libmad=PFX], [Prefix where libmad is installed])],
-[libmad_prefix="$withval"], [libmad_prefix=""])
-
-AC_ARG_WITH([libmad-libraries],
-[AS_HELP_STRING([--with-libmad-libraries=DIR], [Directory where libmad library is installed])],
-[libmad_libraries="$withval"], [libmad_libraries=""])
-
-AC_ARG_WITH([libmad-includes],
-[AS_HELP_STRING([--with-libmad-includes=DIR], [Directory where libmad header files are installed])],
-[libmad_includes="$withval"], [libmad_includes=""])
-
-AC_ARG_ENABLE([libmadtest],
-[AS_HELP_STRING([--disable-libmadtest], [Do not try to compile and run a test libmad program])],,
-[enable_libmadtest="yes"])
-
- if test "x$libmad_libraries" != "x" ; then
- MAD_LIBS="-L$libmad_libraries"
- elif test "x$libmad_prefix" != "x" ; then
- MAD_LIBS="-L$libmad_prefix/lib"
- elif test "x$prefix" != "xNONE" ; then
- MAD_LIBS="-L$libdir"
- fi
-
- MAD_LIBS="$MAD_LIBS -lmad -lm"
-
- if test "x$libmad_includes" != "x" ; then
- MAD_CFLAGS="-I$libmad_includes"
- elif test "x$libmad_prefix" != "x" ; then
- MAD_CFLAGS="-I$libmad_prefix/include"
- elif test "x$prefix" != "xNONE"; then
- MAD_CFLAGS="-I$prefix/include"
- fi
-
- no_libmad=""
-
-
- if test "x$enable_libmadtest" = "xyes" ; then
- ac_save_CFLAGS="$CFLAGS"
- ac_save_CXXFLAGS="$CXXFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $MAD_CFLAGS"
- CXXFLAGS="$CXXFLAGS $MAD_CFLAGS"
- LIBS="$LIBS $MAD_LIBS"
-dnl
-dnl Now check if the installed libmad is sufficiently new.
-dnl
- AC_MSG_CHECKING([for libmad])
- rm -f conf.libmadtest
- AC_TRY_RUN([
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <mad.h>
-
-int main ()
-{
- mad_timer_t t;
- mad_timer_add(&t, t);
- system("touch conf.libmadtest");
- return 0;
-}
-
-],, [no_libmad="yes"],[echo $ac_n "cross compiling; assumed OK... $ac_c"])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
-
- if test "x$no_libmad" = "x" ; then
- AC_MSG_RESULT([yes])
- ifelse([$1], , :, [$1])
- else
- AC_MSG_RESULT([no])
- if test -f conf.libmadtest ; then
- :
- else
- echo "*** Could not run libmad test program, checking why..."
- CFLAGS="$CFLAGS $MAD_CFLAGS"
- LIBS="$LIBS $MAD_LIBS"
- AC_TRY_LINK([
-#include <stdio.h>
-], [ return 0; ],
- [ echo "*** The test program compiled, but did not run. This usually means"
- echo "*** that the run-time linker is not finding libmad or finding the wrong"
- echo "*** version of libmad. If it is not finding libmad, you'll need to set your"
- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
- echo "*** is required on your system"
- echo "***"
- echo "*** If you have an old version installed, it is best to remove it, although"
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
- [ echo "*** The test program failed to compile or link. See the file config.log for the"
- echo "*** exact error that occured. This usually means libmad was incorrectly installed"
- echo "*** or that you have moved libmad since it was installed. In the latter case, you"
- echo "*** may want to edit the libmad-config script: $LIBMAD_CONFIG" ])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- MAD_CFLAGS=""
- MAD_LIBS=""
- ifelse([$2], , :, [$2])
- fi
- AC_SUBST([MAD_CFLAGS])
- AC_SUBST([MAD_LIBS])
- rm -f conf.libmadtest
-])
diff --git a/m4/lirc.m4 b/m4/lirc.m4
deleted file mode 100644
index 98f6c20..0000000
--- a/m4/lirc.m4
+++ /dev/null
@@ -1,363 +0,0 @@
-## lirc.m4 (Macros for autoconf)
-##
-## (C) 1999 Christoph Bartelmus (lirc@bartelmus.de)
-##
-
-#######################################################################
-##
-## Check for LIRC
-##
-#######################################################################
-
-dnl AC_PATH_LIRC([MINIMUM-VERSION])
-dnl Check for LIRC and define LIRCD
-dnl
-AC_DEFUN([AC_PATH_LIRC],
-[
- min_lirc_version=ifelse([$1], ,0.5.5,$1)
- AC_MSG_CHECKING(for LIRC>=$min_lirc_version)
-
- AC_CACHE_VAL(ac_cv_have_lirc,[
- no_lirc=no
- lirc_version=none
- lirc_cross_compiling=no
-
- if test ! -S /dev/lircd; then
- LIRCD=/dev/null
- no_lirc=yes
- else
- LIRCD=/dev/lircd
-
- rm -f conf.lirc
- ac_save_cflags="${CFLAGS}"
- CFLAGS="$CFLAGS -DLIRCD=\"$LIRCD\""
- AC_TRY_RUN(
-[
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-#include <errno.h>
-#include <signal.h>
-#include <limits.h>
-
-#define PACKET_SIZE 256
-/* three seconds */
-#define TIMEOUT 3
-
-int timeout=0;
-
-void sigalrm(int sig)
-{
- timeout=1;
-}
-
-const char *read_string(int fd)
-{
- static char buffer[PACKET_SIZE+1]="";
- char *end;
- static int ptr=0;
- ssize_t ret;
-
- if(ptr>0)
- {
- memmove(buffer,buffer+ptr,strlen(buffer+ptr)+1);
- ptr=strlen(buffer);
- end=strchr(buffer,'\n');
- }
- else
- {
- end=NULL;
- }
- alarm(TIMEOUT);
- while(end==NULL)
- {
- if(PACKET_SIZE<=ptr)
- {
- ptr=0;
- return(NULL);
- }
- ret=read(fd,buffer+ptr,PACKET_SIZE-ptr);
-
- if(ret<=0 || timeout)
- {
- if(!timeout)
- {
- alarm(0);
- }
- ptr=0;
- return(NULL);
- }
- buffer[ptr+ret]=0;
- ptr=strlen(buffer);
- end=strchr(buffer,'\n');
- }
- alarm(0);timeout=0;
-
- end[0]=0;
- ptr=strlen(buffer)+1;
- return(buffer);
-}
-
-enum packet_state
-{
- P_BEGIN,
- P_MESSAGE,
- P_STATUS,
- P_DATA,
- P_N,
- P_DATA_N,
- P_END
-};
-
-char *get_version(int fd,const char *packet)
-{
- int done,todo;
- const char *string,*data;
- char *endptr;
- enum packet_state state;
- int status,n;
- unsigned long data_n;
- unsigned int major,minor,micro;
- static char version[100];
-
- todo=strlen(packet);
- data=packet;
- while(todo>0)
- {
- done=write(fd,(void *) data,todo);
- if(done<0)
- {
- return(NULL);
- }
- data+=done;
- todo-=done;
- }
-
- /* get response */
- status=0;
- state=P_BEGIN;
- n=0;
- while(1)
- {
- string=read_string(fd);
- if(string==NULL) return(NULL);
- switch(state)
- {
- case P_BEGIN:
- if(strcasecmp(string,"BEGIN")!=0)
- {
- continue;
- }
- state=P_MESSAGE;
- break;
- case P_MESSAGE:
- if(strncasecmp(string,packet,strlen(string))!=0 ||
- strlen(string)+1!=strlen(packet))
- {
- state=P_BEGIN;
- continue;
- }
- state=P_STATUS;
- break;
- case P_STATUS:
- if(strcasecmp(string,"SUCCESS")==0)
- {
- status=0;
- }
- else if(strcasecmp(string,"END")==0)
- {
- status=0;
- return(NULL);
- }
- else if(strcasecmp(string,"ERROR")==0)
- {
- status=-1;
- }
- else
- {
- goto bad_packet;
- }
- state=P_DATA;
- break;
- case P_DATA:
- if(strcasecmp(string,"END")==0)
- {
- return(NULL);
- }
- else if(strcasecmp(string,"DATA")==0)
- {
- state=P_N;
- break;
- }
- goto bad_packet;
- case P_N:
- errno=0;
- data_n=strtoul(string,&endptr,0);
- if(!*string || *endptr)
- {
- goto bad_packet;
- }
- if(data_n==0)
- {
- state=P_END;
- }
- else
- {
- state=P_DATA_N;
- }
- break;
- case P_DATA_N:
- if(data_n==1 && status==0)
- {
- if(sscanf(string,"%u.%u.%u",
- &major,&minor,&micro)==3)
- {
- sprintf(version,"%u.%u.%u",
- major,minor,micro);
- }
- else
- {
- goto bad_packet;
- }
- }
- n++;
- if(n==data_n) state=P_END;
- break;
- case P_END:
- if(strcasecmp(string,"END")==0)
- {
- return(version);
- }
- goto bad_packet;
- break;
- }
- }
- bad_packet:
- return(NULL);
-}
-
-int main(int argc,char **argv)
-{
- char *version,*min_version;
- unsigned int major,minor,micro,min_major,min_minor,min_micro;
- struct sockaddr_un addr;
- FILE *result;
- int fd;
- struct sigaction act;
-
- result=fopen("conf.lirc","w");
- if(result==NULL) exit(EXIT_FAILURE);
-
- act.sa_handler=sigalrm;
- sigemptyset(&act.sa_mask);
- act.sa_flags=0; /* we need EINTR */
- sigaction(SIGALRM,&act,NULL);
-
- addr.sun_family=AF_UNIX;
- strcpy(addr.sun_path,LIRCD);
- fd=socket(AF_UNIX,SOCK_STREAM,0);
- if(fd==-1)
- {
- fprintf(result,"unknown");
- fclose(result);
- close(fd);
- exit(EXIT_FAILURE);
- };
- if(connect(fd,(struct sockaddr *)&addr,sizeof(addr))==-1)
- {
- fprintf(result,"unknown");
- fclose(result);
- close(fd);
- exit(EXIT_FAILURE);
- };
-
- version=get_version(fd,"VERSION\n");
- if(version==NULL)
- {
- fprintf(result,"<0.5.5");
- fclose(result);
- close(fd);
- exit(EXIT_FAILURE);
- }
- fprintf(result,"%s",version);
- fclose(result);
- close(fd);
-
- /* HP/UX 9 (%@#!) writes to sscanf strings */
-
- min_version=strdup("$min_lirc_version");
- if(min_version==NULL) exit(EXIT_FAILURE);
-
- if(sscanf(version,"%u.%u.%u",&major,&minor,&micro)!=3 ||
- sscanf(min_version,"%u.%u.%u",&min_major,&min_minor,&min_micro)!=3)
- {
- exit(EXIT_FAILURE);
- }
- if(major<min_major ||
- (major==min_major && minor<min_minor) ||
- (major==min_major && minor==min_minor && micro<min_micro))
- {
- exit(EXIT_FAILURE);
- }
-
- exit(EXIT_SUCCESS);
-}
-],
- if test -f conf.lirc; then
- lirc_version=`cat conf.lirc`
-
-## lirc_major_version=`cat lirc.conf | \
-## sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-## lirc_minor_version=`cat lirc.conf | \
-## sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-## lirc_micro_version=`cat lirc.conf | \
-## sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- else
- no_lirc=yes
- fi,
- no_lirc=yes
- if test -f conf.lirc; then
- lirc_version=`cat conf.lirc`
- else
- lirc_version=none
- fi
- ,lirc_cross_compiling=yes
- )
-## AC_TRY_RUN()
- rm -f conf.lirc
- CFLAGS="$ac_save_CFLAGS"
- fi
- ac_cv_have_lirc="no_lirc=${no_lirc} lirc_version=\"${lirc_version}\" \
- lirc_cross_compiling=${lirc_cross_compiling} \
- LIRCD=${LIRCD}"
- ])
-## AC_CACHE_VAL
-
- eval "$ac_cv_have_lirc"
-
- if test x${no_lirc} = xyes; then
- if test x${lirc_version} = xunknown; then
- AC_MSG_RESULT([missing (lircd not running ?)])
- elif test x${lirc_version} != xnone; then
- AC_MSG_RESULT([missing (found lirc-${lirc_version})])
- else
- AC_MSG_RESULT(missing)
- fi
- else
- if test x${lirc_cross_compiling} = xyes; then
- AC_MSG_RESULT(found)
- else
- AC_MSG_RESULT([found lirc-${lirc_version}])
- fi
- fi
-
- AC_DEFINE_UNQUOTED(LIRCD,"${LIRCD}")
-]
-)
diff --git a/m4/nls.m4 b/m4/nls.m4
deleted file mode 100644
index 36bc493..0000000
--- a/m4/nls.m4
+++ /dev/null
@@ -1,49 +0,0 @@
-# nls.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_DEFUN([AM_NLS],
-[
- AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE(nls,
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT($USE_NLS)
- AC_SUBST(USE_NLS)
-])
-
-AC_DEFUN([AM_MKINSTALLDIRS],
-[
- dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
- dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
- dnl Try to locate it.
- MKINSTALLDIRS=
- if test -n "$ac_aux_dir"; then
- case "$ac_aux_dir" in
- /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
- *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
- esac
- fi
- if test -z "$MKINSTALLDIRS"; then
- MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
- fi
- AC_SUBST(MKINSTALLDIRS)
-])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
deleted file mode 100644
index e8246ad..0000000
--- a/m4/pkg.m4
+++ /dev/null
@@ -1,150 +0,0 @@
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-#
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test "x$PKG_CONFIG" != "x"; then
- _pkg_min_version=m4_default([$1], [0.9.0])
- AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version ; then
- AC_MSG_RESULT([yes])
- if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
- else
- _pkg_short_errors_supported=no
- fi
- else
- AC_MSG_RESULT([no])
- PKG_CONFIG=""
- fi
-
-fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists. Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-#
-# Similar to PKG_CHECK_MODULES, make sure that the first instance of
-# this or PKG_CHECK_MODULES is called, or make sure to call
-# PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test "x$PKG_CONFIG" != "x" && \
- AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
- m4_ifval([$2], [$2], [:])
-m4_ifvaln([$3], [else
- $3])dnl
-fi])
-
-# _PKG_CONFIG([VARIABLE], [MODULES])
-# ---------------------------------------------
-m4_define([_PKG_CONFIG],
-[if test "x$PKG_CONFIG" != "x"; then
- if AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$2"]); then
- if test "x${$1[]_CFLAGS}" != "x"; then
- pkg_cv_[]$1[]_CFLAGS="${$1[]_CFLAGS}"
- else
- pkg_cv_[]$1[]_CFLAGS=`$PKG_CONFIG --cflags "$2" 2>/dev/null`
- fi
- if test "x${$1[]_LIBS}" != "x"; then
- pkg_cv_[]$1[]_LIBS="${$1_LIBS}"
- else
- pkg_cv_[]$1[]_LIBS=`$PKG_CONFIG --libs "$2" 2>/dev/null`
- fi
- else
- pkg_failed="yes"
- fi
-else
- pkg_failed="untried"
-fi[]dnl
-])# _PKG_CONFIG
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-pkg_failed=no
-AC_MSG_CHECKING([for $1])
-_PKG_CONFIG([$1], [$2])
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test "x$pkg_failed" = "xyes"; then
- if test "x$_pkg_short_errors_supported" = "xyes"; then
- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2" 2>&1`
- else
- $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2" 2>&1`
- fi
- dnl Put the nasty error message in config.log where it belongs
- echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
- ifelse([$4], , [AC_MSG_ERROR(dnl
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT
-])],
- [AC_MSG_RESULT([no])
- $4])
-elif test "x$pkg_failed" = "xuntried"; then
- ifelse([$4], , [AC_MSG_FAILURE(dnl
-[The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
- [$4])
-else
- $1[]_CFLAGS="$pkg_cv_[]$1[]_CFLAGS"
- $1[]_LIBS="$pkg_cv_[]$1[]_LIBS"
- AC_MSG_RESULT([yes])
- ifelse([$3], , :, [$3])
-fi[]dnl
-])# PKG_CHECK_MODULES
diff --git a/m4/po.m4 b/m4/po.m4
deleted file mode 100644
index 861e3de..0000000
--- a/m4/po.m4
+++ /dev/null
@@ -1,197 +0,0 @@
-# po.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-dnl Checks for all prerequisites of the po subdirectory.
-AC_DEFUN([AM_PO_SUBDIRS],
-[
- AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_MKINSTALLDIRS])dnl
- AC_REQUIRE([AM_NLS])dnl
-
- dnl Perform the following tests also if --disable-nls has been given,
- dnl because they are needed for "make dist" to work.
-
- dnl Search for GNU msgfmt in the PATH.
- dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
- dnl The second test excludes FreeBSD msgfmt.
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
- (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-
- dnl Search for GNU xgettext 0.12 or newer in the PATH.
- dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
- dnl The second test excludes FreeBSD xgettext.
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
-
- dnl Search for GNU msgmerge 0.11 or newer in the PATH.
- AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
- [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
-
- dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
- dnl Test whether we really found GNU msgfmt.
- if test "$GMSGFMT" != ":"; then
- dnl If it is no GNU msgfmt we define it as : so that the
- dnl Makefiles still can work.
- if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
- (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
- AC_MSG_RESULT(
- [found $GMSGFMT program is not GNU msgfmt; ignore it])
- GMSGFMT=":"
- fi
- fi
-
- dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
- dnl Test whether we really found GNU xgettext.
- if test "$XGETTEXT" != ":"; then
- dnl If it is no GNU xgettext we define it as : so that the
- dnl Makefiles still can work.
- if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- AC_MSG_RESULT(
- [found xgettext program is not GNU xgettext; ignore it])
- XGETTEXT=":"
- fi
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
- fi
-
- AC_OUTPUT_COMMANDS([
- for ac_file in $CONFIG_FILES; do
- # Support "outfile[:infile[:infile...]]"
- case "$ac_file" in
- *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- esac
- # PO directories have a Makefile.in generated from Makefile.in.in.
- case "$ac_file" in */Makefile.in)
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
- if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
- rm -f "$ac_dir/POTFILES"
- test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
- cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
- POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
- # on $ac_dir but don't depend on user-specified configuration
- # parameters.
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # The set of available languages was given in configure.in.
- eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
- fi
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- GMOFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- done
- fi
- test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
- for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
- if test -f "$f"; then
- case "$f" in
- *.orig | *.bak | *~) ;;
- *) cat "$f" >> "$ac_dir/Makefile" ;;
- esac
- fi
- done
- fi
- ;;
- esac
- done],
- [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
- # from automake.
- eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
- # Capture the value of LINGUAS because we need it to compute CATALOGS.
- LINGUAS="${LINGUAS-%UNSET%}"
- ])
-])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
deleted file mode 100644
index 8fe527c..0000000
--- a/m4/progtest.m4
+++ /dev/null
@@ -1,91 +0,0 @@
-# progtest.m4 serial 3 (gettext-0.12)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
-
-# Search path for a program which passes the given test.
-
-dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-[
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
-[case "[$]$1" in
- [[\\/]]* | ?:[[\\/]]*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
- AC_MSG_RESULT([$]$1)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
diff --git a/m4/sdl.m4 b/m4/sdl.m4
deleted file mode 100644
index 0c981db..0000000
--- a/m4/sdl.m4
+++ /dev/null
@@ -1,70 +0,0 @@
-# Configure paths for SDL
-# Sam Lantinga 9/21/99
-# stolen from Manish Singh
-# stolen back from Frank Belew
-# stolen from Manish Singh
-# Shamelessly stolen from Owen Taylor
-
-dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
-dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
-dnl
-AC_DEFUN([AM_PATH_SDL],
-[dnl
-dnl Get the cflags and libraries from the sdl-config script
-dnl
-AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
- sdl_prefix="$withval", sdl_prefix="")
-AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
- sdl_exec_prefix="$withval", sdl_exec_prefix="")
-
- if test x$sdl_exec_prefix != x ; then
- sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
- fi
- fi
- if test x$sdl_prefix != x ; then
- sdl_args="$sdl_args --prefix=$sdl_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_prefix/bin/sdl-config
- fi
- fi
-
- AC_REQUIRE([AC_CANONICAL_TARGET])
- PATH="$prefix/bin:$prefix/usr/bin:$PATH"
- AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
- min_sdl_version=ifelse([$1], ,0.11.0,$1)
- AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
- no_sdl=""
- if test "$SDL_CONFIG" = "no" ; then
- no_sdl=yes
- else
- SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
- SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
-
- sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- fi
- if test "x$no_sdl" = x ; then
- AC_MSG_RESULT(yes)
- ifelse([$2], , :, [$2])
- else
- AC_MSG_RESULT(no)
- if test "$SDL_CONFIG" = "no" ; then
- echo "*** The sdl-config script installed by SDL could not be found"
- echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the SDL_CONFIG environment variable to the"
- echo "*** full path to sdl-config."
- fi
- SDL_CFLAGS=""
- SDL_LIBS=""
- ifelse([$3], , :, [$3])
- fi
- AC_SUBST(SDL_CFLAGS)
- AC_SUBST(SDL_LIBS)
- rm -f conf.sdltest
-])
diff --git a/m4/sid.m4 b/m4/sid.m4
index b722e9a..10d6631 100644
--- a/m4/sid.m4
+++ b/m4/sid.m4
@@ -14,7 +14,7 @@ if test "x$xs_have_sidplay2" = "xyes"; then
XS_BUILDERS_CHECK
xs_builders_available="no"
XS_BUILDERS_FIND([reSID], [resid-builder], [resid.h], [ReSIDBuilder])
- XS_BUILDERS_FIND([HardSID], [hardsid-builder], [hardsid.h], [HardSID])
+ XS_BUILDERS_FIND([HardSID], [hardsid-builder], [hardsid.h], [HardSIDBuilder])
if test "x$xs_builders_available" = "xno"; then
AC_MSG_WARN([No builder modules were found in the sidbuilders directory!]);
xs_have_sidplay2=no
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
deleted file mode 100644
index 32ba7ae..0000000
--- a/m4/stdint_h.m4
+++ /dev/null
@@ -1,28 +0,0 @@
-# stdint_h.m4 serial 3 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
-# doesn't clash with <sys/types.h>, and declares uintmax_t.
-
-AC_DEFUN([jm_AC_HEADER_STDINT_H],
-[
- AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
- [AC_TRY_COMPILE(
- [#include <sys/types.h>
-#include <stdint.h>],
- [uintmax_t i = (uintmax_t) -1;],
- jm_ac_cv_header_stdint_h=yes,
- jm_ac_cv_header_stdint_h=no)])
- if test $jm_ac_cv_header_stdint_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
- [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
- and declares uintmax_t. ])
- fi
-])
diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
deleted file mode 100644
index b5f28d4..0000000
--- a/m4/uintmax_t.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-# uintmax_t.m4 serial 7 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-AC_PREREQ(2.13)
-
-# Define uintmax_t to 'unsigned long' or 'unsigned long long'
-# if it is not already defined in <stdint.h> or <inttypes.h>.
-
-AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
-[
- AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
- AC_REQUIRE([jm_AC_HEADER_STDINT_H])
- if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
- AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
- test $ac_cv_type_unsigned_long_long = yes \
- && ac_type='unsigned long long' \
- || ac_type='unsigned long'
- AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
- [Define to unsigned long or unsigned long long
- if <stdint.h> and <inttypes.h> don't define.])
- else
- AC_DEFINE(HAVE_UINTMAX_T, 1,
- [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
- fi
-])
diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4
deleted file mode 100644
index c375e47..0000000
--- a/m4/ulonglong.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40)
-dnl Copyright (C) 1999-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
-[
- AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
- [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
- [unsigned long long ullmax = (unsigned long long) -1;
- return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
- ac_cv_type_unsigned_long_long=yes,
- ac_cv_type_unsigned_long_long=no)])
- if test $ac_cv_type_unsigned_long_long = yes; then
- AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
- [Define if you have the unsigned long long type.])
- fi
-])
diff --git a/mkinstalldirs b/mkinstalldirs
deleted file mode 100755
index d2d5f21..0000000
--- a/mkinstalldirs
+++ /dev/null
@@ -1,111 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-errstatus=0
-dirmode=""
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case $1 in
- -h | --help | --h*) # -h for help
- echo "$usage" 1>&2
- exit 0
- ;;
- -m) # -m PERM arg
- shift
- test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
- dirmode=$1
- shift
- ;;
- --) # stop option processing
- shift
- break
- ;;
- -*) # unknown option
- echo "$usage" 1>&2
- exit 1
- ;;
- *) # first non-opt arg
- break
- ;;
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
- 0) exit 0 ;;
-esac
-
-case $dirmode in
- '')
- if mkdir -p -- . 2>/dev/null; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- fi
- ;;
- *)
- if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- fi
- ;;
-esac
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case $pathcomp in
- -*) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
- lasterr=""
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# End:
-# mkinstalldirs ends here
diff --git a/po/Makefile b/po/Makefile
index 4f28ceb..631082a 100644
--- a/po/Makefile
+++ b/po/Makefile
@@ -12,18 +12,26 @@ LOCALES = ca.po \
cy.po \
de.po \
es.po \
+ es_AR.po \
+ es_MX.po \
et.po \
eu.po \
fr.po \
hu.po \
+ it.po \
ja.po \
lv.po \
+ lt.po \
pl.po \
ro.po \
ru.po \
sk.po \
+ sr.po \
tr.po \
- zh_CN.po
+ uk.po \
+ vi.po \
+ zh_CN.po \
+ zh_TW.po
include ../extra.mk
include ../buildsys.mk
@@ -34,7 +42,7 @@ update-pot:
@echo Updating $(POTTEMPLATE) ...
xgettext --default-domain=$(PACKAGE) --language=C \
--keyword=_ --keyword=N_ --from-code="utf-8" \
- --msgid-bugs-address="http://jira.atheme.org/" \
+ --msgid-bugs-address="http://redmine.audacious-media-player.org/" \
--directory=.. --files-from=POTFILES.in -o $(POTTEMPLATE)
update-po: update-pot
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d7344bc..aa69c21 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,6 @@
# Please don't update this file manually - use ./update-potfiles.sh instead!
src/aac/libmp4.c
-src/adplug/adplug-xmms.cc
+src/alarm/alarm.c
src/alarm/interface.c
src/alsa/config.c
src/alsa/plugin.c
@@ -17,11 +17,8 @@ src/amidi-plug/i_utils.c
src/aosd/aosd_style.c
src/aosd/aosd_trigger.c
src/aosd/aosd_ui.c
-src/bluetooth/agent.c
-src/bluetooth/bluetooth.c
-src/bluetooth/gui.c
-src/bluetooth/scan_gui.c
src/blur_scope/config.c
+src/bs2b/plugin.c
src/cdaudio-ng/cdaudio-ng.c
src/cdaudio-ng/configure.c
src/cd-menu-items/cd-menu-items.c
@@ -53,43 +50,35 @@ src/console/Sap_Emu.cxx
src/console/Spc_Cpu.cxx
src/console/Spc_Dsp.cxx
src/console/Spc_Emu.cxx
-src/console/Vfs_File.cxx
src/console/Vgm_Emu.cxx
src/console/Ym2612_Emu.cxx
src/crossfade/plugin.c
src/crystalizer/crystalizer.c
src/echo_plugin/gui.c
-src/evdev-plug/ed.c
-src/evdev-plug/ed_internals.c
-src/evdev-plug/ed_ui.c
src/ffaudio/ffaudio-core.c
src/filewriter/filewriter.c
src/filewriter/mp3.c
src/filewriter/vorbis.c
src/flacng/plugin.c
src/gnomeshortcuts/gnomeshortcuts.c
-src/gntui/fileselector.c
-src/gntui/gntui.c
-src/gtkui/actions.c
+src/gtkui/columns.c
+src/gtkui/layout.c
+src/gtkui/menus.c
src/gtkui/ui_gtk.c
-src/gtkui/ui_manager.c
+src/gtkui/ui_playlist_notebook.c
+src/gtkui/ui_playlist_widget.c
src/gtkui/ui_statusbar.c
src/hotkey/gui.c
src/jack/bio2jack.c
src/jack/configure.c
src/jack/jack.c
-src/ladspa/ladspa.c
-src/lirc/about.c
-src/lirc/interface.c
-src/lirc/lirc.c
+src/ladspa/plugin.c
src/lyricwiki/lyricwiki.c
src/metronom/metronom.c
-src/modplug/gui/interface.cxx
-src/modplug/gui/main.cxx
-src/modplug/gui/modplug.glade
-src/modplug/gui/support.cxx
+src/mixer/plugin.c
src/mpg123/mpg123.c
src/mtp_up/mtp.c
+src/notify/libnotify-aosd_event.c
src/null/null.c
src/oss4/configure.c
src/oss4/plugin.c
@@ -101,35 +90,23 @@ src/resample/plugin.c
src/scrobbler/configure.c
src/scrobbler/plugin.c
src/scrobbler/scrobbler.c
-src/sid/xmms-sid.glade
-src/sid/xs_about.c
-src/sid/xs_config.c
-src/sid/xs_fileinfo.c
-src/sid/xs_glade.c
-src/sid/xs_interface.c
+src/sdlout/plugin.c
+src/search-tool/search-tool.c
src/skins/plugin.c
src/skins/skins_cfg.c
src/skins/ui_equalizer.c
src/skins/ui_main.c
src/skins/ui_manager.c
src/skins/ui_playlist.c
-src/skins/ui_skinned_equalizer_slider.c
src/skins/ui_skinselector.c
src/skins/util.c
src/sndfile/plugin.c
src/sndstretch/sndstretch_xmms.c
src/song_change/song_change.c
-src/spectrum/spectrum.c
src/statusicon/statusicon.c
src/stereo_plugin/stereo.c
-src/streambrowser/gui/streambrowser_win.c
-src/streambrowser/streambrowser.c
-src/sun/about.c
-src/sun/configure.c
src/tonegen/tonegen.c
-src/usf/recompiler_cpu.c
-src/usf/rsp_recompiler_cpu.c
-src/vorbis/configure.c
+src/unix-io/gtk.c
src/vorbis/vorbis.c
src/vtx/about.c
src/wavpack/wavpack.c
diff --git a/po/audacious-plugins.pot b/po/audacious-plugins.pot
index f250fee..0005f52 100644
--- a/po/audacious-plugins.pot
+++ b/po/audacious-plugins.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 18:09-0400\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,8 +16,9 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -25,421 +26,172 @@ msgid ""
"Copyright (c) 2005-2006 Audacious team"
msgstr ""
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr ""
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
msgstr ""
-#: src/adplug/adplug-xmms.cc:157
+#: src/alarm/alarm.c:313
msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr ""
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr ""
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr ""
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr ""
-
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
msgstr ""
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
msgstr ""
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr ""
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr ""
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr ""
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr ""
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr ""
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
msgstr ""
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr ""
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
msgstr ""
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
msgstr ""
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
msgstr ""
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
msgstr ""
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
msgstr ""
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
msgstr ""
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr ""
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr ""
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr ""
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr ""
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr ""
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr ""
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr ""
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr ""
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr ""
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr ""
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
msgstr ""
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr ""
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr ""
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr ""
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr ""
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
msgstr ""
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr ""
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr ""
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
msgstr ""
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
msgstr ""
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
msgstr ""
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr ""
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
msgstr ""
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
msgstr ""
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr ""
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
msgstr ""
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -494,24 +246,29 @@ msgid ""
" toggle button if you want it to be shown.\n"
msgstr ""
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr ""
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr ""
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
msgstr ""
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr ""
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr ""
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr ""
@@ -523,7 +280,7 @@ msgstr ""
msgid "PCM device:"
msgstr ""
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr ""
@@ -535,15 +292,15 @@ msgstr ""
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr ""
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr ""
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -565,11 +322,11 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -579,367 +336,205 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr ""
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr ""
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -959,8 +554,7 @@ msgid ""
"backend</span>"
msgstr ""
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr ""
@@ -1063,241 +657,239 @@ msgstr ""
msgid "None"
msgstr ""
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr ""
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
msgstr ""
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr ""
-#: src/aosd/aosd_trigger.c:83
+#: src/aosd/aosd_trigger.c:84
msgid ""
"Triggers OSD when, during playback, the song title changes but the filename "
"is the same. This is mostly useful to display title changes in internet "
"streams."
msgstr ""
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr ""
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
msgstr ""
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr ""
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
msgstr ""
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
msgstr ""
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
msgstr ""
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr ""
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
msgstr ""
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
msgstr ""
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr ""
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr ""
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr ""
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr ""
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr ""
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr ""
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr ""
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr ""
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr ""
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr ""
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr ""
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr ""
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr ""
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr ""
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr ""
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr ""
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr ""
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr ""
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr ""
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr ""
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr ""
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr ""
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr ""
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr ""
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
"manager otherwise the OSD won't work properly"
msgstr ""
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr ""
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr ""
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr ""
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr ""
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr ""
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr ""
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr ""
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr ""
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr ""
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr ""
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr ""
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr ""
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr ""
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
msgstr ""
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1310,138 +902,35 @@ msgid ""
"\n"
msgstr ""
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr ""
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr ""
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr ""
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr ""
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr ""
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr ""
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
msgstr ""
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
msgstr ""
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
msgstr ""
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
msgstr ""
-#: src/blur_scope/config.c:73
-msgid "Blur Scope: Color selection"
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
msgstr ""
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
-msgid "Options:"
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
msgstr ""
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr ""
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1456,121 +945,150 @@ msgid ""
"Copyright 2009 John Lindgren"
msgstr ""
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr ""
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr ""
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr ""
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr ""
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr ""
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr ""
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr ""
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr ""
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr ""
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr ""
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr ""
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr ""
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr ""
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr ""
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr ""
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr ""
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
msgstr ""
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr ""
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr ""
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr ""
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr ""
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr ""
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr ""
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr ""
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr ""
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr ""
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr ""
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr ""
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr ""
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr ""
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr ""
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1588,28 +1106,28 @@ msgid ""
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr ""
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr ""
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr ""
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1617,20 +1135,20 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr ""
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr ""
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr ""
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1638,591 +1156,235 @@ msgid ""
"Surround echo by Carl van Schaik 1999"
msgstr ""
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr ""
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr ""
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr ""
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr ""
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr ""
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr ""
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr ""
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr ""
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr ""
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr ""
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr ""
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr ""
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr ""
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr ""
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr ""
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr ""
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr ""
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:725
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:739
msgid "About FFaudio Plugin"
msgstr ""
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr ""
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
msgstr ""
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
msgstr ""
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr ""
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
msgstr ""
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
msgstr ""
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
msgstr ""
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
msgstr ""
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
msgstr ""
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
msgstr ""
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
msgstr ""
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
msgstr ""
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
msgstr ""
-#: src/filewriter/filewriter.c:588
-msgid "Prepend track number to filename"
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
msgstr ""
-#: src/filewriter/mp3.c:710
-msgid "MP3 Configuration"
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
msgstr ""
-#: src/filewriter/mp3.c:737
-msgid "Algorithm Quality:"
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
msgstr ""
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
msgstr ""
-#: src/filewriter/mp3.c:767
-msgid "Output Samplerate:"
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
msgstr ""
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
msgstr ""
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr ""
+
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr ""
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
msgstr ""
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr ""
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr ""
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
msgstr ""
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr ""
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr ""
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
msgstr ""
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr ""
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
msgstr ""
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
msgstr ""
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
msgstr ""
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
msgstr ""
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
msgstr ""
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr ""
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr ""
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
msgstr ""
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
msgstr ""
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr ""
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
msgstr ""
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
msgstr ""
@@ -2234,11 +1396,11 @@ msgstr ""
msgid "Quality level (0 - 10):"
msgstr ""
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
msgstr ""
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2248,15 +1410,11 @@ msgid ""
"http://www.skytale.net/projects/bmp-flac2/"
msgstr ""
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr ""
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr ""
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2265,469 +1423,444 @@ msgid ""
"\n"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
-msgid "Open Files"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
-msgid "Add Files"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
msgstr ""
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
msgstr ""
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
+#: src/gtkui/columns.c:37
+msgid "Year"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
msgstr ""
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
+#: src/gtkui/columns.c:37
+msgid "Track"
msgstr ""
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
msgstr ""
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
+#: src/gtkui/columns.c:38
+msgid "Length"
msgstr ""
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
+#: src/gtkui/columns.c:38
+msgid "File path"
msgstr ""
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
+#: src/gtkui/columns.c:38
+msgid "File name"
msgstr ""
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
msgstr ""
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
msgstr ""
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
msgstr ""
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr ""
-
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
+#: src/gtkui/columns.c:292
+msgid "Available:"
msgstr ""
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
msgstr ""
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
msgstr ""
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
msgstr ""
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
msgstr ""
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
msgstr ""
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
+#: src/gtkui/layout.c:123
+msgid "Undock"
msgstr ""
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
msgstr ""
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
msgstr ""
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
msgstr ""
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
msgstr ""
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
msgstr ""
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
msgstr ""
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
msgstr ""
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
msgstr ""
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
+#: src/gtkui/menus.c:141
+msgid "_Play"
msgstr ""
-#: src/gtkui/ui_manager.c:92
-msgid "Import Playlist ..."
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
msgstr ""
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
+#: src/gtkui/menus.c:143
+msgid "_Stop"
msgstr ""
-#: src/gtkui/ui_manager.c:95
-msgid "Export Playlist ..."
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
msgstr ""
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
+#: src/gtkui/menus.c:145
+msgid "_Next"
msgstr ""
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
msgstr ""
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
msgstr ""
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
msgstr ""
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
msgstr ""
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
msgstr ""
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
msgstr ""
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
msgstr ""
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
msgstr ""
-#: src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
+#: src/gtkui/menus.c:158
+msgid "By _Title"
msgstr ""
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
msgstr ""
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
msgstr ""
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
msgstr ""
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
msgstr ""
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
msgstr ""
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
msgstr ""
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
msgstr ""
-#: src/gtkui/ui_manager.c:131
-msgid "Sort"
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
msgstr ""
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
msgstr ""
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
+#: src/gtkui/menus.c:172
+msgid "_Sort"
msgstr ""
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
msgstr ""
-#: src/gtkui/ui_manager.c:140
-msgid "By File Path"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
msgstr ""
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
msgstr ""
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
msgstr ""
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
msgstr ""
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
msgstr ""
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
msgstr ""
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
msgstr ""
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
msgstr ""
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
+#: src/gtkui/menus.c:192
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
msgstr ""
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
msgstr ""
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
+#: src/gtkui/menus.c:204
+msgid "_File"
msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
+#: src/gtkui/menus.c:205
+msgid "_Playback"
msgstr ""
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
msgstr ""
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
msgstr ""
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
+#: src/gtkui/menus.c:208
+msgid "_Output"
msgstr ""
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
+#: src/gtkui/menus.c:209
+msgid "_View"
msgstr ""
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
msgstr ""
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
+#: src/gtkui/menus.c:217
+msgid "_Copy"
msgstr ""
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
msgstr ""
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
+#: src/gtkui/menus.c:219
+msgid "Select _All"
msgstr ""
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
msgstr ""
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
msgstr ""
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
msgstr ""
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
msgstr ""
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
msgstr ""
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr ""
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr ""
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:109
#, c-format
-msgid "%d channels"
-msgstr ""
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] ""
+msgstr[1] ""
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr ""
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr ""
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr ""
-#: src/hotkey/gui.c:74
-msgid "Next Track"
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
msgstr ""
#: src/hotkey/gui.c:75
-msgid "Forward 5 Seconds"
+msgid "Next Track"
msgstr ""
#: src/hotkey/gui.c:76
-msgid "Rewind 5 Seconds"
+msgid "Forward 5 Seconds"
msgstr ""
#: src/hotkey/gui.c:77
-msgid "Mute"
+msgid "Rewind 5 Seconds"
msgstr ""
#: src/hotkey/gui.c:78
-msgid "Volume Up"
+msgid "Mute"
msgstr ""
#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr ""
+
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr ""
-#: src/hotkey/gui.c:81
-msgid "Toggle Player Windows"
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
msgstr ""
#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr ""
+
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr ""
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr ""
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr ""
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr ""
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -2735,37 +1868,37 @@ msgid ""
"Do you want to continue?"
msgstr ""
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr ""
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr ""
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr ""
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr ""
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr ""
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr ""
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr ""
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2781,31 +1914,31 @@ msgid ""
"\n"
msgstr ""
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr ""
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr ""
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr ""
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr ""
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
msgstr ""
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr ""
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2816,133 +1949,73 @@ msgid ""
"Giacomo Lozito from develia.org"
msgstr ""
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
msgstr ""
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr ""
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
msgstr ""
-#: src/ladspa/ladspa.c:952
-msgid "UID"
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
msgstr ""
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
msgstr ""
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
msgstr ""
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
msgstr ""
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
msgstr ""
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
+#: src/ladspa/plugin.c:626
+msgid "Enable"
msgstr ""
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
msgstr ""
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
+#: src/ladspa/plugin.c:647
+msgid "Settings"
msgstr ""
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
-msgstr ""
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr ""
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr ""
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr ""
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
+"Looking for lyrics..."
msgstr ""
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr ""
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr ""
-
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:304
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr ""
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr ""
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr ""
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
-#: src/lyricwiki/lyricwiki.c:337
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
msgstr ""
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -2951,443 +2024,208 @@ msgid ""
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
msgstr ""
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr ""
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
msgstr ""
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
msgstr ""
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
msgstr ""
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
msgstr ""
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
msgstr ""
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr ""
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
msgstr ""
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
msgstr ""
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
msgstr ""
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
msgstr ""
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
msgstr ""
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr ""
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr ""
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr ""
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr ""
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
msgstr ""
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
msgstr ""
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
msgstr ""
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr ""
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
msgstr ""
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
-msgid "About OSS4 Plugin"
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
msgstr ""
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
msgstr ""
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
msgstr ""
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr ""
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr ""
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr ""
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr ""
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr ""
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr ""
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr ""
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr ""
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr ""
-#: src/OSS/OSS.c:40
-msgid "About OSS Driver"
-msgstr ""
-
#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
+msgid "About OSS Driver"
msgstr ""
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
msgstr ""
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
msgstr ""
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
msgstr ""
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr ""
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr ""
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr ""
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
msgstr ""
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
msgstr ""
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
msgstr ""
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
@@ -3395,1240 +2233,876 @@ msgid ""
"com>\n"
msgstr ""
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr ""
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr ""
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr ""
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr ""
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
msgstr ""
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
msgstr ""
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
msgstr ""
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
msgstr ""
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
msgstr ""
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
msgstr ""
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
msgstr ""
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr ""
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr ""
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr ""
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr ""
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr ""
-
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr ""
-
-#: src/sid/xs_interface.c:449
+#: src/search-tool/search-tool.c:645
msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
msgstr ""
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
msgstr ""
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr ""
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr ""
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr ""
-
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr ""
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr ""
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr ""
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr ""
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr ""
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr ""
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr ""
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr ""
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr ""
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr ""
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr ""
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr ""
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
msgstr ""
-#: src/sid/xs_interface.c:629
+#: src/skins/plugin.c:168
msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
msgstr ""
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
msgstr ""
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
msgstr ""
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
msgstr ""
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
msgstr ""
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
msgstr ""
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
msgstr ""
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
msgstr ""
-#: src/sid/xs_interface.c:726
-msgid "FS"
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
msgstr ""
-#: src/sid/xs_interface.c:743
-msgid "FM"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
msgstr ""
-#: src/sid/xs_interface.c:760
-msgid "FT"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
msgstr ""
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-#: src/sid/xs_interface.c:817
-msgid "Export"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
msgstr ""
-#: src/sid/xs_interface.c:825
-msgid "Use"
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
msgstr ""
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
msgstr ""
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
msgstr ""
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
msgstr ""
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
msgstr ""
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
msgstr ""
-#: src/sid/xs_interface.c:874
-msgid "Filters"
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
msgstr ""
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
msgstr ""
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
msgstr ""
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
msgstr ""
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
msgstr ""
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
msgstr ""
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
msgstr ""
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
msgstr ""
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
msgstr ""
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
msgstr ""
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
+#: src/skins/ui_main.c:444
+msgid "kbps"
msgstr ""
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
+#: src/skins/ui_main.c:452
+msgid "kHz"
msgstr ""
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
+#: src/skins/ui_main.c:459
+msgid "surround"
msgstr ""
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr ""
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
msgstr ""
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
msgstr ""
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
msgstr ""
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
msgstr ""
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
msgstr ""
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
msgstr ""
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
msgstr ""
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
msgstr ""
-#: src/sid/xs_interface.c:1103
-msgid "Title"
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
msgstr ""
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
msgstr ""
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
msgstr ""
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
msgstr ""
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
msgstr ""
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
msgstr ""
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
msgstr ""
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
msgstr ""
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
msgstr ""
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
msgstr ""
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
msgstr ""
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
msgstr ""
-#: src/sid/xs_interface.c:1262
-msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
msgstr ""
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
msgstr ""
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
msgstr ""
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
msgstr ""
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
msgstr ""
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
msgstr ""
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
msgstr ""
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
msgstr ""
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
+#: src/skins/ui_manager.c:116
+msgid "Scope"
msgstr ""
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
msgstr ""
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
+#: src/skins/ui_manager.c:118
+msgid "Off"
msgstr ""
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
msgstr ""
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
msgstr ""
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
msgstr ""
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
+#: src/skins/ui_manager.c:128
+msgid "Lines"
msgstr ""
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
+#: src/skins/ui_manager.c:129
+msgid "Bars"
msgstr ""
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
msgstr ""
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
msgstr ""
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
msgstr ""
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
+#: src/skins/ui_manager.c:141
+msgid "Ice"
msgstr ""
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
msgstr ""
-#: src/sid/xs_interface.c:2129
-msgid "No"
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
msgstr ""
-#: src/skins/plugin.c:179
-msgid "About Skinned GUI"
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
msgstr ""
-#: src/skins/plugin.c:180
-msgid ""
-"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
-"\n"
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
msgstr ""
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
msgstr ""
-#: src/skins/skins_cfg.c:316
-msgid "_Player:"
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
msgstr ""
-#: src/skins/skins_cfg.c:316
-msgid "Select main player window font:"
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
msgstr ""
-#: src/skins/skins_cfg.c:317
-msgid "_Playlist:"
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
msgstr ""
-#: src/skins/skins_cfg.c:317
-msgid "Select playlist font:"
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
msgstr ""
-#: src/skins/skins_cfg.c:321
-msgid "<b>_Fonts</b>"
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
msgstr ""
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
msgstr ""
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
msgstr ""
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
msgstr ""
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
msgstr ""
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
msgstr ""
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
msgstr ""
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
msgstr ""
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
msgstr ""
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
msgstr ""
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:424
-msgid "Green"
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
msgstr ""
-#: src/skins/skins_cfg.c:431
-msgid "Red"
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
msgstr ""
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
msgstr ""
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
msgstr ""
-#: src/skins/ui_equalizer.c:463
-msgid "Audacious Equalizer"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
msgstr ""
-#: src/skins/ui_equalizer.c:991
-msgid "Presets"
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
msgstr ""
-#: src/skins/ui_main.c:593
-msgid "kbps"
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
msgstr ""
-#: src/skins/ui_main.c:601
-msgid "kHz"
+#: src/skins/ui_manager.c:237
+msgid "View"
msgstr ""
-#: src/skins/ui_main.c:608
-msgid "surround"
+#: src/skins/ui_manager.c:238
+msgid "Interface"
msgstr ""
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
msgstr ""
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
msgstr ""
-#: src/skins/ui_main.c:985
-msgid "Ignore"
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
msgstr ""
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
msgstr ""
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
msgstr ""
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
msgstr ""
-#: src/skins/ui_main.c:1050
-#, c-format
+#: src/skins/ui_manager.c:254
msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr ""
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr ""
-
-#: src/skins/ui_main.c:1299
-#, c-format
-msgid "Volume: %d%%"
-msgstr ""
-
-#: src/skins/ui_main.c:1322
-#, c-format
-msgid "Balance: %d%% left"
-msgstr ""
-
-#: src/skins/ui_main.c:1324
-msgid "Balance: center"
-msgstr ""
-
-#: src/skins/ui_main.c:1326
-#, c-format
-msgid "Balance: %d%% right"
-msgstr ""
-
-#: src/skins/ui_main.c:1618
-msgid "Options Menu"
-msgstr ""
-
-#: src/skins/ui_main.c:1622
-msgid "Disable 'Always On Top'"
-msgstr ""
-
-#: src/skins/ui_main.c:1624
-msgid "Enable 'Always On Top'"
-msgstr ""
-
-#: src/skins/ui_main.c:1627
-msgid "File Info Box"
-msgstr ""
-
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr ""
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr ""
-
-#: src/skins/ui_main.c:1636
-msgid "Visualization Menu"
-msgstr ""
-
-#: src/skins/ui_main.c:2348
-msgid "Single mode."
-msgstr ""
-
-#: src/skins/ui_main.c:2350
-msgid "Playlist mode."
-msgstr ""
-
-#: src/skins/ui_main.c:2374
-msgid "Stopping after song."
-msgstr ""
-
-#: src/skins/ui_main.c:2376
-msgid "Not stopping after song."
-msgstr ""
-
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
-msgid "Autoscroll Songname"
-msgstr ""
-
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
-msgid "Peaks"
-msgstr ""
-
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
-msgid "Show Player"
-msgstr ""
-
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
-msgid "Show Playlist Editor"
-msgstr ""
-
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
-msgid "Show Equalizer"
-msgstr ""
-
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
-msgid "Always on Top"
-msgstr ""
-
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
-msgid "Put on All Workspaces"
-msgstr ""
-
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
-msgid "Roll up Player"
-msgstr ""
-
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
-msgid "Roll up Playlist Editor"
-msgstr ""
-
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
-msgid "Roll up Equalizer"
-msgstr ""
-
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr ""
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr ""
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
msgstr ""
-#: src/skins/ui_manager.c:104
-msgid "Analyzer"
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
msgstr ""
-#: src/skins/ui_manager.c:105
-msgid "Scope"
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
msgstr ""
-#: src/skins/ui_manager.c:106
-msgid "Voiceprint"
+#: src/skins/ui_manager.c:261
+msgid "Select All"
msgstr ""
-#: src/skins/ui_manager.c:107
-msgid "Off"
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
msgstr ""
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
-msgid "Normal"
+#: src/skins/ui_manager.c:265
+msgid "Select None"
msgstr ""
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
-msgid "Fire"
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
msgstr ""
-#: src/skins/ui_manager.c:113
-msgid "Vertical Lines"
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
msgstr ""
-#: src/skins/ui_manager.c:117
-msgid "Lines"
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:118
-msgid "Bars"
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
msgstr ""
-#: src/skins/ui_manager.c:122
-msgid "Dot Scope"
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
msgstr ""
-#: src/skins/ui_manager.c:123
-msgid "Line Scope"
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
msgstr ""
-#: src/skins/ui_manager.c:124
-msgid "Solid Scope"
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:130
-msgid "Ice"
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
msgstr ""
-#: src/skins/ui_manager.c:135
-msgid "Smooth"
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
msgstr ""
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
-msgid "Slowest"
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
msgstr ""
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
-msgid "Slow"
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
msgstr ""
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
-msgid "Medium"
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
-msgid "Fast"
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
msgstr ""
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
-msgid "Fastest"
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
-#: src/skins/ui_manager.c:155
-msgid "Time Elapsed"
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
msgstr ""
-#: src/skins/ui_manager.c:156
-msgid "Time Remaining"
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:185
-msgid "Visualization"
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
msgstr ""
-#: src/skins/ui_manager.c:186
-msgid "Visualization Mode"
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:187
-msgid "Analyzer Mode"
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
msgstr ""
-#: src/skins/ui_manager.c:188
-msgid "Scope Mode"
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
msgstr ""
-#: src/skins/ui_manager.c:189
-msgid "Voiceprint Mode"
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
msgstr ""
-#: src/skins/ui_manager.c:190
-msgid "WindowShade VU Mode"
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
msgstr ""
-#: src/skins/ui_manager.c:191
-msgid "Analyzer Falloff"
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
msgstr ""
-#: src/skins/ui_manager.c:192
-msgid "Peaks Falloff"
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
msgstr ""
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
-msgid "Select Next Playlist"
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
msgstr ""
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
-msgid "Select Previous Playlist"
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
msgstr ""
-#: src/skins/ui_manager.c:222
-msgid "Refresh List"
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
msgstr ""
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
msgstr ""
-#: src/skins/ui_manager.c:236
-msgid "Add Internet Address..."
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
msgstr ""
-#: src/skins/ui_manager.c:240
-msgid "Add Files..."
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
msgstr ""
-#: src/skins/ui_manager.c:246
-msgid "Search and Select"
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
msgstr ""
-#: src/skins/ui_manager.c:247
-msgid ""
-"Searches the playlist and selects playlist entries based on specific "
-"criteria."
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
msgstr ""
-#: src/skins/ui_manager.c:250
-msgid "Invert Selection"
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
msgstr ""
-#: src/skins/ui_manager.c:251
-msgid "Inverts the selected and unselected entries."
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
msgstr ""
-#: src/skins/ui_manager.c:268
-msgid "Clear Queue"
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
msgstr ""
-#: src/skins/ui_manager.c:269
-msgid "Clears the queue associated with this playlist."
+#: src/skins/ui_manager.c:381
+msgid "File"
msgstr ""
-#: src/skins/ui_manager.c:272
-msgid "Remove Unavailable Files"
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
msgstr ""
-#: src/skins/ui_manager.c:273
-msgid "Removes unavailable files from the playlist."
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
msgstr ""
-#: src/skins/ui_manager.c:276
-msgid "Remove Duplicates"
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
msgstr ""
-#: src/skins/ui_manager.c:279
-msgid "Removes duplicate entries from the playlist by title."
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
msgstr ""
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
-msgid "By Filename"
+#: src/skins/ui_manager.c:395
+msgid "Play File"
msgstr ""
-#: src/skins/ui_manager.c:283
-msgid "Removes duplicate entries from the playlist by filename."
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
msgstr ""
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
-msgid "By Path + Filename"
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
msgstr ""
-#: src/skins/ui_manager.c:287
-msgid "Removes duplicate entries from the playlist by their full path."
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
msgstr ""
-#: src/skins/ui_manager.c:300
-msgid "Reverse List"
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
msgstr ""
-#: src/skins/ui_manager.c:301
-msgid "Reverses the playlist."
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
msgstr ""
-#: src/skins/ui_manager.c:304
-msgid "Sort List"
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
msgstr ""
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
-msgid "Sorts the list by title."
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
msgstr ""
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
-msgid "Sorts the list by album."
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
msgstr ""
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
-msgid "Sorts the list by artist."
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
msgstr ""
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
-msgid "Sorts the list by filename."
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
msgstr ""
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
-msgid "Sorts the list by full pathname."
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
msgstr ""
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
-msgid "By Date"
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
msgstr ""
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
-msgid "Sorts the list by modification time."
+#: src/skins/ui_manager.c:425
+msgid "Copy"
msgstr ""
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
-msgid "Sorts the list by track number."
+#: src/skins/ui_manager.c:427
+msgid "Cut"
msgstr ""
-#: src/skins/ui_manager.c:334
-msgid "Sort Selected"
+#: src/skins/ui_manager.c:429
+msgid "Paste"
msgstr ""
-#: src/skins/ui_manager.c:373
-msgid "Plugin Services"
+#: src/skins/ui_manager.c:436
+msgid "Load"
msgstr ""
-#: src/skins/ui_manager.c:384
-msgid "Play File"
+#: src/skins/ui_manager.c:437
+msgid "Import"
msgstr ""
-#: src/skins/ui_manager.c:387
-msgid "Play Location"
+#: src/skins/ui_manager.c:438
+msgid "Save"
msgstr ""
-#: src/skins/ui_manager.c:428
-msgid "Load"
+#: src/skins/ui_manager.c:439
+msgid "Delete"
msgstr ""
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
msgid "Preset"
msgstr ""
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr ""
-
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
msgstr ""
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr ""
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
msgstr ""
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr ""
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
msgstr ""
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
msgstr ""
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
msgstr ""
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr ""
-
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
msgstr ""
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr ""
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
msgstr ""
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr ""
-
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
msgstr ""
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr ""
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:256
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -4636,182 +3110,111 @@ msgid ""
"for."
msgstr ""
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr ""
+
+#: src/skins/ui_playlist.c:271
msgid "Album: "
msgstr ""
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
msgstr ""
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
msgstr ""
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
msgstr ""
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr ""
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr ""
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr ""
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr ""
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr ""
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr ""
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
msgstr ""
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr ""
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
msgstr ""
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
msgstr ""
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
msgstr ""
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:455
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -4824,32 +3227,31 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:488
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
msgstr ""
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
msgstr ""
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr ""
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr ""
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -4860,135 +3262,70 @@ msgid ""
"the system tray area of the window manager.\n"
msgstr ""
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr ""
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr ""
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr ""
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr ""
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
msgstr ""
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr ""
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr ""
-#: src/stereo_plugin/stereo.c:40
-msgid ""
-"Extra Stereo Plugin\n"
-"\n"
-"By Johan Levin 1999."
-msgstr ""
-
-#: src/stereo_plugin/stereo.c:64
-msgid "About Extra Stereo Plugin"
-msgstr ""
-
-#: src/stereo_plugin/stereo.c:100
-msgid "Configure Extra Stereo"
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
msgstr ""
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
msgstr ""
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
msgstr ""
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
msgstr ""
-#: src/sun/about.c:31
+#: src/stereo_plugin/stereo.c:45
msgid ""
-"XMMS BSD Sun Driver\n"
+"Extra Stereo Plugin\n"
"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr ""
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr ""
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
+"By Johan Levin 1999."
msgstr ""
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
msgstr ""
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
msgstr ""
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
msgstr ""
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -4997,36 +3334,24 @@ msgid ""
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
msgstr ""
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr ""
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr ""
-
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr ""
-
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
msgstr ""
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
msgstr ""
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5061,12 +3386,12 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr ""
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
diff --git a/po/ca.po b/po/ca.po
index b6f6132..56acfc2 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins 1.5.1\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2009-04-11 16:07+0200\n"
"Last-Translator: Ernest Adrogué <eadrogue@gmx.net>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, fuzzy, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -26,618 +26,55 @@ msgstr ""
"Descodificador FAAD2 AAC/HE-AAC/HE-AACv2/DRM (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 Equip de l'Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "Quant al connector per a àudio MPEG"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Quant al connector "
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Aquest connector s'ha publicat sota els termes i condicions de la\n"
-"llicència GNU LGPL. Vegeu http://www.gnu.org/licenses/lgpl.html per a\n"
-"més detalls.\n"
-"\n"
-"Aquest connector fa ús de la llibreria AdPlug, el copyright (C) de la qual\n"
-"pertany a Simon Peter, et al.\n"
-"\n"
-"Versió de la llibreria AdPlug enllaçada: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Configuració"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "D'acord"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Cancel·la"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "General"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Qualitat de so"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Resolució"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 bits"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 bits"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Canals"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Estèreo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Activar l'estèreo no és recomanable, si no ho heu de fer. Això no afegirà "
-"cap efecte estèreo al so -l'OPL2 és mono- però consumeix més CPU!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Freqüència"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Reproducció"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Detecta el final de la pista"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Si està activat, l'XMMS detectarà el final de la pista, pararà i passarà a "
-"la següent. Si no està activat, l'XMMS pot no detectar que la pista s'ha "
-"acabat i seguir reproduint-la un cop i un altre."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formats"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Selecció de formats"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Format"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Extensió"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Els tipus de fitxers seleccionats seran reconeguts i reproduïts per aquest "
-"connector. Els tipus no seleccionats seran ignorats, i podran ser reproduïts "
-"per altres connectors."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Informació del fitxer"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Nom del fitxer"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Títol: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Tipus de fitxer: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Sub-pistes: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instruments: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Ordres: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Pautes: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Cançó"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Nom de l'instrument"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Missatge de la cançó"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Selecció de sub-pistes"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Ordre: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Pauta: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Fila: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Velocitat: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Temporitzador: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "Quant a l'alarma XMMS"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "Alarma XMMS"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"Un connector XMMS que es pot fer servir\n"
-"per a començar a reproduir a una certa hora.\n"
-"\n"
-"Envieu totes les queixes a:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Tanca"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "Alarma"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "Això és l'avís per despertar-se."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "D'acord"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Seleccioneu una llista de reproducció"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Ho sentim"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Atenció"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Per raons de seguretat, el temps \"tranquil\" ha de durar almenys 65 segons "
-"més que el temps de fosa, i ha de durar més de 10 segons. Això bàsicament "
-"significa que hi ha un \"bug\" en el codi i que fins que no trobi la manera "
-"de resoldre'l sortirà aquest missatge :)\n"
-"\n"
-"Els paràmetres de fosa NO s'han desat\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Vaja"
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "Paràmetres de l'alarma"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "Hora"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "hores"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "h"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr "minuts"
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "Para al cap de:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "Alarma (per defecte) a les:"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "Trieu els dies que ha de saltar l'alarma"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "Per defecte"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "Dia"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "Dimarts"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "Dimecres"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "Dijous"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "Divendres"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "Dissabte"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "Diumenge"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "Dilluns"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "Dies"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "Fosa"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-msgid "seconds"
-msgstr "segons"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-msgid "Volume"
-msgstr "Volum"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr "Actual"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "posa al volum de sortida actual"
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr "Comença a"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "Final"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "Ordre Addicional"
-
-#: src/alarm/interface.c:1253
-msgid "enable"
-msgstr "activa"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr "Llista de reproducció (opcional)"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "Vés a..."
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr "Recordatori"
-
-#: src/alarm/interface.c:1312
-msgid "Use reminder"
-msgstr "Activa els recordatoris"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-msgid "Options"
-msgstr "Opcions"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "Què signifiquen aquestes opcions?"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-"\n"
-"Temps\n"
-" Alarma a les: \n"
-" Hora en que salta l'alarma.\n"
-"\n"
-" Para al cap de: \n"
-" Para l'alarma quan hagi passat aquesta estona.\n"
-" (si no heu tancat el diàleg de despertada)\n"
-"\n"
-"\n"
-"Dies\n"
-" Dia:\n"
-" Els dies de la setmana en que s'activa l'alarma.\n"
-"\n"
-" Hora:\n"
-" L'hora en que salta l'alarma cada dia, o bé marqueu\n"
-" la casella per a fer servir l'hora per defecte.\n"
-"\n"
-"\n"
-"Volum\n"
-" Fosa: \n"
-" Augmenta el volum fins el nivell especificat durant el \n"
-" temps indicat.\n"
-"\n"
-" Comença a: \n"
-" Comença amb aquest volum.\n"
-"\n"
-" Final: \n"
-" El nivell de volum final. Si el temps de fosa\n"
-" és 0, es començarà a reproduir a aquest nivell\n"
-" des del principi.\n"
-"\n"
-"\n"
-"Opcions:\n"
-" Ordre addicional:\n"
-" Executa aquesta ordre quan salta l'alarma.\n"
-"\n"
-" Llista de reproducció: \n"
-" Carrega aquesta llista de reproducció (ha\n"
-" de tenir extensió .m3u). Si no introduïu cap\n"
-" llista, es faran servir les cançons que hi\n"
-" hagin a la llista en aquest moment.\n"
-" També és possible introduir un URL d'un flux\n"
-" mp3/ogg, però carregar llistes de reproducció\n"
-" des d'URLS de moment no està suportat.\n"
-"\n"
-" Recordatori:\n"
-" Mostra un recordatori quan salta l'alarma,\n"
-" escriviu el recordatori en el camp de text i\n"
-" marqueu la casella si voleu que es mostri.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "Ajuda"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr "El vostre recordatori d'avui és.."
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr "Gràcies"
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "Dispositiu PCM per defecte (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "Dispositiu PCM per defecte (%s)"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "Connector d'Icona d'Estat - Preferències"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "Dispositiu de mescla:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Dispositiu de mescla:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "Dispositiu de mescla:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "Quant al connector de sortida JACK 0.17"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
#, fuzzy
msgid "ALSA error"
msgstr "Error"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -669,11 +106,11 @@ msgstr ""
"maquinari en qüestió.\n"
"Fons escrit per Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "Fons FluidSynth"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -689,86 +126,43 @@ msgstr ""
"reproductor i és processat pel connector de sortida que trieu.\n"
"Fons escrit per Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "CONFIGURACIÓ DEL FONS ALSA"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Nom del client"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Nom del port"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "Ports ALSA de sortida"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Targeta de so: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Control del volum:"
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Paràmetres del mesclador"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Seleccioneu els ports ALSA de sortida *\n"
-"Els esdeveniments MIDI seran enviats a els ports seleccionats. Per exemple, "
-"si la vostra targeta de so té un sintetitzador integrat i voleu que "
-"reprodueixi MIDI, probablement voldreu seleccionar els ports de la taula "
-"d'ones del sintetitzador."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Seleccioneu la targeta de so *\n"
-"El fons ALSA envia la sortida directament a través d'ALSA, no fa servir cap "
-"altre connector d'efectes o de sortida del reproductor. Durant la "
-"reproducció, la maneta del volum tindrà efecte sobre el control que "
-"seleccioneu aquí. Si esteu utilitzant ports de la taula d'ones d'un "
-"sintetitzador, probablement voldreu seleccionar el control \"Synth\"."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Seleccioneu el control de volum *\n"
-"El fons ALSA envia la sortida directament a través d'ALSA, no fa servir cap "
-"altre connector d'efectes o de sortida del reproductor. Durant la "
-"reproducció, la maneta del volum tindrà efecte sobre el control que "
-"seleccioneu aquí. Si esteu utilitzant ports de la taula d'ones d'un "
-"sintetitzador, probablement voldreu seleccionar el control \"Synth\"."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "Fons ALSA no carregat o no disponible"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -776,154 +170,51 @@ msgstr ""
"<span size=\"smaller\">Fons\n"
"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "Connector AMIDI-Plug - Informació de l'aplicació de fons"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "PREFERÈNCIES DEL CONNECTOR AMIDI-PLUG"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Selecció de l'aplicació de fons"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Aplicacions de fons disponibles"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Paràmetres de la reproducció"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Transposició: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Desplaçament de la percussió: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Paràmetres avançats"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "pre-calcula la durada dels fitxers MIDI a la llista de reproducció"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "extreu els comentaris del fitxer MIDI (si n'hi ha)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "extreu la lletra del fitxer MIDI (si n'hi ha)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Selecció de l'aplicació de fons *\n"
-"El connector AMIDI-Plug funciona amb aplicacions de fons, d'una manera "
-"modular; aquí hauríeu de seleccionar un fons; és a dir, la manera com els "
-"esdeveniments MIDI han de ser tractats i reproduïts.\n"
-"Si teniu maquinari de síntesi a la targeta de so, i ALSA el suporta, voldreu "
-"fer servir el fons ALSA. També es pot fer servir amb qualsevol cosa que "
-"tingui una interfície amb el seqüenciador ALSA, incloent programari de "
-"síntesi o dispositius externs.\n"
-"Si voleu fer servir programari de síntesi i/o voleu que el so generat sigui "
-"processat pels connectors d'efectes i de sortida del reproductor, voldreu "
-"fer servir el fons FluidSynth.\n"
-"Premeu el botó d'informació per a llegir informació específica de cada fons."
-
-#: src/amidi-plug/i_configure-ap.c:331
-#, fuzzy
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* Funció de transposició *\n"
-"Aquesta opció permet reproduir el fitxer MIDI transposat a una clau "
-"diferent, tot desplaçant totes les notes el nombre desitjat de semitons "
-"(exceptuant aquelles en el canal MIDI 10, reservat per a percussió). Resulta "
-"útil especialment per a cantar o acompanyar amb un altre instrument."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Funció de desplaçament de la percussió *\n"
-"Aquesta opció permet desplaçar les notes del canal MIDI 10 (el canal "
-"estàndard de percussió) el nombre desitjat de semitons. El resultat és un "
-"conjunt diferent d'instruments usats en la reproducció MIDI, de manera que "
-"si voleu millorar (o reduir, o alterar) la percussió, proveu de jugar amb "
-"aquest valor."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* Pre-càlcul de la durada MIDI *\n"
-"Si aquesta opció està activada, el connector AMIDI-Plug calcularà la durada "
-"del fitxer MIDI tan aviat com el reproductor ho requereixi, en lloc de fer-"
-"ho només quan es reprodueix el fitxer. Per exemple, la durada d'un fitxer "
-"MIDI es calcularà just després de ser afegit a la llista de reproducció. "
-"Desactiveu aquesta opció si voleu que les llistes de reproducció es "
-"carreguin més ràpidament (quan s'afegeixen molts fitxers MIDI), activeu-la "
-"per a mostrar més informació immediatament en carregar fitxers."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* Extracció de comentaris de fitxers MIDI *\n"
-"Alguns fitxers MIDI contenen comentaris (autor, copyright, comentaris sobre "
-"instruments, etc.). Si aquesta opció està activada, el connector AMIDI-Plug "
-"extraurà i mostrarà els comentaris (si n'hi ha cap) en el diàleg "
-"d'informació del fitxer."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* Extracció de lletres de fitxer MIDI *\n"
-"Alguns fitxers MIDI contenen les lletres de les cançons. Si aquesta opció "
-"està activada, el connector AMIDI-Plug extraurà i mostrarà les lletres de "
-"les cançons (si n'hi ha cap) en el diàleg d'informació del fitxer."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -931,235 +222,113 @@ msgstr ""
"<span size=\"smaller\">Connector\n"
"AMIDI</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "Connector AMIDI-Plug - Seleccioneu un fitxer"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "Connector AMIDI-Plug - Configuració"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "Connector AMIDI-Plug - Seleccioneu un fitxer SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "CONFIGURACIÓ DEL FONS FLUIDSYNTH"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "Paràmetres SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Nom del fitxer"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Mida (octets)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "Carrega les SF en arrencar el reproductor"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "Carrega les SF abans de reproduir fitxers MIDI"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Paràmetres del sintetitzador"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "guany"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "per defecte"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "valor:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "polifonia"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "reverberació"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "sí"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "no"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "cor"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "freqüència de mostra"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "personalitzat"
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* Selecció de fitxers SoundFont *\n"
-"Per a reproduir fitxers MIDI amb el FluidSynth, heu d'especificar almenys un "
-"fitxer SoundFont vàlid (useu camins absoluts). L'ordre de càrrega és de dalt "
-"(primer) a baix (últim)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Carrega la SoundFont en arrencar el reproductor *\n"
-"Depenent de la velocitat del vostre sistema, la càrrega de SoundFonts pot "
-"trigar uns quants segons. Aquesta tasca s'ha de fer un sol cop (la SoundFont "
-"quedarà carregada fins que es canvii per una altra, o el fons sigui "
-"descarregat), i es pot for quan arrenca el reproductor, o abans de reproduir "
-"el primer fitxer MIDI (aquesta última és l'opció més recomanable si no useu "
-"el reproductor per escoltar només fitxers MIDI)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Carrega la SoundFont abans de reproduir fitxers MIDI *\n"
-"Depenent de la velocitat del vostre sistema, la càrrega de SoundFonts pot "
-"trigar uns quants segons. Aquesta tasca s'ha de fer un sol cop (la SoundFont "
-"quedarà carregada fins que es canvii per una altra, o el fons sigui "
-"descarregat), i es pot for quan arrenca el reproductor, o abans de reproduir "
-"el primer fitxer MIDI (aquesta última és l'opció més recomanable si no useu "
-"el reproductor per escoltar només fitxers MIDI)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* Guany del sintetitzador *\n"
-"De la documentació del FluidSynth: el guany s'aplica a la sortida final o "
-"màster del sintetitzador; per defecte és un valor baix, per a evitar la "
-"saturació de la sortida quan es reprodueixen fitxers MIDI arbitraris."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* Polifonia *\n"
-"De la documentació del FluidSynth: la polifonia defineix quantes veus poden "
-"ser reproduïdes en paral·lel; el nombre de veus no és necessàriament "
-"equivalent al nombre de notes que sonen de forma simultània; quan una nota "
-"sona en un canal MIDI específic, el perfil del canal pot crear diverses "
-"veus, per exemple, una per al canal de so esquerre i una altra per al canal "
-"dret; el nombre de veus que s'activen depèn del nombre de zones "
-"d'instruments que s'activen, depenent de la velocitat i la clau de la nota "
-"reproduïda."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Reverberació del sintetitzador *\n"
-"De la documentació del FluidSynth: aquesta opció activa el mòdul d'efecte de "
-"reverberació; tingueu en compte que la quantitat de senyal que s'envia al "
-"mòdul de reverberació depèn del generador \"reverb send\" definit a la "
-"SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Cor del sintetitzador *\n"
-"De la documentació de FluidSynth: aquesta opció activa el mòdul d'efecte de "
-"cor; tingueu en compte que quan el mòdul de cor està actiu, la quantitat de "
-"senyal enviada al mòdul de cor depèn del generador \"chorus send\" definit a "
-"la SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-#, fuzzy
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Freqüència de mostra del sintetitzador *\n"
-"Freqüència de mostra de l'àudio que genera el sintetitzador. També podeu "
-"especificar un valor pertanyent a l'interval 22050Hz-96000Hz.\n"
-"NOTA: els buffers per defecte estan configurats per a 44100Hz; si canvieu la "
-"freqüència de mostra potser haureu de canviar també els buffers per a "
-"obtenir una qualitat de so bona."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "Fons FluidSynth no carregat o no disponible"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1183,8 +352,7 @@ msgstr ""
"<span size=\"smaller\">Fons\n"
"Timidity</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Nom:"
@@ -1357,119 +525,119 @@ msgstr "Pausa Off"
msgid "Triggers OSD when playback is unpaused."
msgstr "Activa l'OSD quan la reproducció deixa d'estar en pausa."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "Posició"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "Desplaçament relatiu X:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "Desplaçament relatiu Y:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "Amplada màxima de l'OSD:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "Opcions multi-monitor"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "Mostra l'OSD en:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "tots els monitors"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "el monitor %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "Durada (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "Visible:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "Fosa entrant:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "Fosa sortint:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "Foses"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "Fosa %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "Ombra"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "Internacionalització"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Desactiva la conversió del text a UTF-8 (a l'aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "Seleccioneu un fitxer de decoració"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "Estil de representació"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Colors"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "Color %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "Decoració personalitzada"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "Fitxer de decoració:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr "Explora"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Habilita activador"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Esdeveniment"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "S'ha detectat un gestor Composite"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1479,73 +647,73 @@ msgstr ""
"tret que sapigueu que ja n'està funcionant un, activeu un gestor Composite o "
"l'OSD no funcionarà correctament"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "La transparència simulada no requereix un gestor Composite"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Transparència"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Transparència simulada"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Transparència real (requereix l'ext. X composite)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "L'extensió Composite no està carregada"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "L'extensió Composite no està disponible"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>OSD de l'Audacious</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - Configuració"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Prova"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Posició"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "Animació"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Text"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Decoració"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "Llançador"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr "Misc"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Quant a l'OSD de l'Audacious"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1553,7 +721,7 @@ msgstr ""
"\n"
"Audacious OSD "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1575,133 +743,6 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-#, fuzzy
-msgid "Available Headsets"
-msgstr "Aplicacions de fons disponibles"
-
-#: src/bluetooth/gui.c:224
-#, fuzzy
-msgid "Current Headset"
-msgstr "Actual"
-
-#: src/bluetooth/gui.c:227
-#, fuzzy
-msgid "_Refresh"
-msgstr "Velocitat de refresc"
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "Connexió"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "Tanca"
-
-#: src/bluetooth/gui.c:274
-#, fuzzy
-msgid "Class"
-msgstr "Clàssica"
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "Adreça del dispositiu"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-#, fuzzy
-msgid "Rescan"
-msgstr "Rellegeix el CD"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Reprodueix"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Oscil·loscopi difús: Selecció de color"
@@ -1710,12 +751,12 @@ msgstr "Oscil·loscopi difús: Selecció de color"
msgid "Options:"
msgstr "Opcions:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "Quant al connector d'àudio FLAC"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
#, fuzzy
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
@@ -1741,128 +782,163 @@ msgstr ""
"\n"
"Això va ser un projecte del Google Summer of Code de 2007."
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+#, fuzzy
+msgid "Audio CD"
+msgstr "Àudio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Configuració del connector Audio CD"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Extracció d'àudio digital"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Informació dels títols"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
#, fuzzy
msgid "Disc speed:"
msgstr "Velocitat del rellotge:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Usa CD-Text si està disponible"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Usa CDDB si està disponible"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Servidor: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Camí: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Usa HTTP en lloc de CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Ignora el dispositiu per defecte:"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "D'acord"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "Reprodueix"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Afegeix CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "Quant al connector d'estèreo extra"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
#, fuzzy
msgid "Dynamic Range Compressor Preferences"
msgstr "Preferències per a l'AudioCompress"
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "Canvia el volum"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Intensitat de l'efecte:"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
#, fuzzy
msgid "Game Console Music Decoder"
msgstr "Descodificador de música de consoles"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "General"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Reproducció"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "Baixos:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr "segons"
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "Aguts:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr "Durada per defecte:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr "Remostratge"
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr "Activa el remostratge d'àudio"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr "Taxa de remostratge:"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr "Ignora la durada indicada a les etiquetes SPC"
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr "Incrementa la reverberació"
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1889,31 +965,31 @@ msgstr ""
"Implemetació en l'Audacious per: William Pitcock <nenolod@nenolod.net>,\n"
"Shay Green <gblargg@gmail.com>"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "Quant al connector Scrobbler"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
#, fuzzy
msgid "Crossfade Preferences"
msgstr "Preferències"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "Crossover"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1921,20 +997,24 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
msgid "Configure Crystalizer"
msgstr "Configuració del Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr "Intensitat de l'efecte:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "Aplica"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1946,413 +1026,52 @@ msgstr ""
"\n"
"Eco envolvent per Carl van Schaik, 1999."
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Quant al connector d'eco"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "Configuració de l'eco"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "Retard: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr "Retorn: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "Volum: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Reproducció->Reprodueix"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Reproducció->Para"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Reproducció->Pausa"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Reproducció->Anterior"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Reproducció->Següent"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Reproducció->Expulsa"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Llista de reproducció->Repeteix"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Llista de reproducció->Barreja"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Volum->Amunt_5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Volum->Avall_5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Volum->Amunt_10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Volum->Avall_10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Volum->Silenciat"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Finestra->Principal"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Finestra->Llista de reproducció"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Finestra->Equalitzador"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Finestra->SaltaAlFitxer"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: no s'ha pogut obrir el fitxer de dispositiu %s, s'omet "
-"aquest dispositiu; comproveu que el fitxer existeix i que teniu permís de "
-"lectura\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: no s'ha pogut crear un canal e/s pel fitxer de "
-"dispositiu %s, s'omet aquest dispositiu\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: no s'ha pogut obrir /proc/bus/input/devices, no "
-"funcionarà la detecció automàtica de dispositius.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: no s'ha pogut obrir un canal e/s per a /proc/bus/input/"
-"devices, la detecció automàtica de dispositius no funcionarà.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: s'ha produït un error en llegir /proc/bus/input/"
-"devices, la detecció automàtica de dispositius no funcionarà.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: el dispositiu %s no s'ha trobat a /dev/input, s'omet.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: no s'ha pogut carregar el fitxer de configuració %s, "
-"s'utilitzaran els paràmetres per defecte.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: informació incompleta en el fitxer de config per al "
-"dispositiu \"%s\", s'omet.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: configuració, no s'ha pogut obtenir el valor is_active "
-"pel dispositiu \"%s\", s'omet.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: no s'ha pogut accedir al directori local %s, no es "
-"desaran les preferències.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: configuració, no s'ha pogut obtenir el valor filename "
-"per al dispositiu \"%s\", s'omet.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: configuració, no s'ha pogut el valor get phys per al "
-"dispositiu \"%s\", s'omet.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: configuració, no s'ha pogut obtenir el valor is_custom "
-"per al dispositiu \"%s\", s'omet.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: configuració, valor inesperat per al dispositiu \"%s\", "
-"s'omet.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "Detecta el final de la pista"
-
-#: src/evdev-plug/ed_ui.c:217
-#, fuzzy
-msgid "Custom"
-msgstr "personalitzat"
-
-#: src/evdev-plug/ed_ui.c:223
-#, fuzzy
-msgid "Not Detected"
-msgstr "Ordena els seleccionats"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Informació"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"No es pot obrir la finestra de vincles per a un dispositiu no detectat.\n"
-"Assegureu-vos que el dispositiu està ben endollat."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Error"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"No es pot obrir el dispositiu seleccionat.\n"
-"Comproveu que teniu permís de lectura per a aquest dispositiu."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Afegiu un dispositiu personalitzat"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug intenta detectar i actualitzar informació sobre dispositius\n"
-"d'esdeveniments disponibles al sistema de manera automàtica.\n"
-"De totes maneres, si l'auto-detecció no funciona en el vostre sistema, o bé\n"
-"teniu dispositius d'esdeveniments en ubicacions no-estàndard (actualment\n"
-"només es busquen a /dev/input/), potser voldreu afegir un dispositiu\n"
-"personalitzat, especificant explícitament el nom i el fitxer del dispositiu."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Nom del dispositiu:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Fitxer del dispositiu:"
-
-#: src/evdev-plug/ed_ui.c:404
-#, fuzzy
-msgid "(custom)"
-msgstr "personalitzat"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Si us plau, especifiqueu un nom i un fitxer.\n"
-"El fitxer s'ha d'especificar amb un camí absolut."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-"Voleu eliminar la configuració existent per al dispositiu seleccionat?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Voleu eliminar el dispositiu seleccionat?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - Configuració"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Actiu"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Estat"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Nom del dispositiu"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Fitxer del dispositiu"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Adreça del dispositiu"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Vincles"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Premeu una tecla del dispositiu per a vincular-la;\n"
-"si no premeu cap tecla en 5 segons, aquesta finestra\n"
-"es tancarà sense fer cap canvi."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Aquest esdeveniment d'entrada ja està assignat.\n"
-"\n"
-"No és possible assignar múltiples accions al mateix esdeveniment d'entrada "
-"(és possible assignar la mateixa acció a múltiples esdeveniments, però)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Configuració dels vincles"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Nom: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Nom del fitxer: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Adreça física: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "Quant al connector EvDev-Plug"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"control remot del reproductor via dispositius d'esdeveniments\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"escrit per Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "Quant al connector d'àudio FLAC"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
msgid "About FileWriter-Plugin"
msgstr "Quant al connector FileWriter"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2389,250 +1108,208 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
msgid "File Writer Configuration"
msgstr "Configuració de l'escriptura al disc"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
msgid "Output file format:"
msgstr "Format del fitxer de sortida:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "Configuració"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "Desa al directori original"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "Desa a un altre directori"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "Directori de sortida:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Trieu un directori"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr "Agafa el nom del fitxer de:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr "etiquetes del fitxer originals"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr "nom del fitxer original"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "Deixa l'extensió del fitxer"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Si està activat, l'extensió del nom de fitxer original no s'esborrarà abans "
-"d'afegir una nova extensió al final."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr "Precedeix el nom del fitxer pel nombre de pista"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "Estèreo conjunt"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Estèreo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:724
msgid "MP3 Configuration"
msgstr "Configuració d'MP3"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr "Qualitat de l'algoritme:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"millor/més lent:0;\n"
-"pitjor/més ràpid:9;\n"
-"recomanat:2;\n"
-"per defecte:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
msgid "Output Samplerate:"
msgstr "Freqüència de mostra de sortida:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Auto"
-
#: src/filewriter/mp3.c:800
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr "Flux de bits / Ràtio de compressió:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "Flux de bits (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr "Ràtio de compressió:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
msgid "Audio Mode:"
msgstr "Mode d'àudio:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Estèreo conjunt"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr "Misc:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr "Força el compliment estricte de l'estàndard ISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
msgid "Error protection"
msgstr "Protecció d'errors"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Afegeix una suma de verificació de 16 bits a cada marc"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr "Qualitat"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr "Activa VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr "Tipus:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Flux de bits variable"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Flux de bits mitjà"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
msgid "VBR Options:"
msgstr "Opcions VBR:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "Flux de bits mínim (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "Flux de bits màxim (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr "Compliment estricte el flux de bit mínim"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Per a reproductors que no suporten MP3 amb flux de bits baixos (reproductor "
-"DVD/MP3 Apex AD600-A)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
msgid "ABR Options:"
msgstr "Opcions ABR:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr "Flux de bits mitjà (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr "Nivell de qualitat VBR:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"el més alt:0;\n"
-"el més baix:9;\n"
-"per defecte:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr "Omet escriure la capçalera VBR Xing"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr "Paràmetres dels marcs:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr "Marca com a copyright"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr "Marca com a original"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr "Etiquetes ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr "Força l'afegit d'etiquetes ID3 versió 2"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr "Només etiquetes v1"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr "Només etiquetes v2"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr "Etiquetes"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Configuració del codificador Vorbis"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "Nivell de qualitat (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "Connector d'àudio FLAC "
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "Quant al connector d'àudio FLAC"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2648,15 +1325,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "Quant al connector d'àudio FLAC"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Quant al connector de tecles ràpides de Gnome"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2670,494 +1343,506 @@ msgstr ""
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "Afegeix fitxers..."
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "No es pot saltar al temps quan no s'està reproduint cap pista.\n"
-
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "Salta al temps"
-
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "minuts:segons"
-
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Durada de la pista:"
-
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Error quan s'escrivia la llista de reproducció \"%s\": %s"
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "Número de pista:"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s ja existeix. Voleu continuar?"
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "Títol"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Export Playlist"
-msgstr "Carrega una llista de reproducció"
+msgid "Artist"
+msgstr "Artista:"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Import Playlist"
-msgstr "Carrega una llista de reproducció"
-
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
-
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
-
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
-
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "Para quan s'acabi la cançó"
-
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Repeteix"
-
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Barreja"
+msgid "Year"
+msgstr "Any:"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Discontinua la reproducció programada"
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Album"
+msgstr "Àlbum:"
-#: src/gtkui/ui_manager.c:47
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Show playlists"
-msgstr "Mostra l'editor de llistes"
+msgid "Track"
+msgstr "Pista:"
-#: src/gtkui/ui_manager.c:48
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Show/hide playlists"
-msgstr "Desa una llista de reproducció"
+msgid "Queue position"
+msgstr "Posició"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Length"
+msgstr "Durada (ms):"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File path"
+msgstr "Per nom de fitxer"
-#: src/gtkui/ui_manager.c:53
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Show main menu"
-msgstr "Mostra la finestra principal"
+msgid "File name"
+msgstr "Nom del fitxer"
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Custom title"
+msgstr "Decoració personalitzada"
-#: src/gtkui/ui_manager.c:56
+#: src/gtkui/columns.c:39
#, fuzzy
-msgid "Show statusbar"
-msgstr "Estat"
+msgid "Bitrate"
+msgstr "Para al cap de:"
-#: src/gtkui/ui_manager.c:57
+#: src/gtkui/columns.c:286
#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Desa una llista de reproducció"
+msgid "Choose Columns"
+msgstr "Mostra el reproductor"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pausa"
+#: src/gtkui/columns.c:300
+#, fuzzy
+msgid "Available:"
+msgstr "variable"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Para"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
+msgstr ""
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Anterior"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr ""
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Següent"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr ""
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Llistes"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr ""
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Llista de reproducció nova"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr ""
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Esborra la llista"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr ""
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Carrega una llista de reproducció"
+msgid "Disable"
+msgstr "variable"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Afegeix una llista de reproducció a la llista seleccionada"
+#: src/gtkui/menus.c:132
+#, fuzzy
+msgid "_Open Files ..."
+msgstr "Afegeix fitxers..."
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:133
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Carrega una llista de reproducció"
+msgid "Open _URL ..."
+msgstr "Afegeix fitxers..."
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Desa les llistes de reproducció seleccionades."
+#: src/gtkui/menus.c:134
+#, fuzzy
+msgid "_Add File ..."
+msgstr "Afegeix fitxers..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Save All Playlists"
-msgstr "Desa una llista de reproducció"
+msgid "Add U_RL ..."
+msgstr "Afegeix fitxers..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
+#: src/gtkui/menus.c:137
+#, fuzzy
+msgid "A_bout ..."
+msgstr "Quant al connector "
-#: src/gtkui/ui_manager.c:103
+#: src/gtkui/menus.c:138
#, fuzzy
-msgid "Refresh"
-msgstr "Velocitat de refresc"
+msgid "_Preferences ..."
+msgstr "Preferències"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Refresca les meta-dades associades a cada element de la llista."
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
+msgid "_Quit"
+msgstr "_Surt"
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Playlist Manager"
-msgstr "Gestor de llistes"
+msgid "_Play"
+msgstr "Reprodueix"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Obre el gestor de llistes de reproducció."
+#: src/gtkui/menus.c:143
+#, fuzzy
+msgid "Paus_e"
+msgstr "Pausa"
-#: src/gtkui/ui_manager.c:111
+#: src/gtkui/menus.c:144
#, fuzzy
-msgid "Add URL ..."
-msgstr "Afegeix fitxers..."
+msgid "_Stop"
+msgstr "Para"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Afegeix una pista remota a la llista de reproducció."
+#: src/gtkui/menus.c:145
+#, fuzzy
+msgid "Pre_vious"
+msgstr "Anterior"
-#: src/gtkui/ui_manager.c:115
+#: src/gtkui/menus.c:146
#, fuzzy
-msgid "Add Files ..."
-msgstr "Afegeix fitxers..."
+msgid "_Next"
+msgstr "Següent"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Afegeix fitxers a la llista de reproducció."
+#: src/gtkui/menus.c:148
+#, fuzzy
+msgid "_Repeat"
+msgstr "Repeteix"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Treu tots els elements"
+#: src/gtkui/menus.c:149
+#, fuzzy
+msgid "S_huffle"
+msgstr "Barreja"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Treu tots els elements de la llista de reproducció."
+#: src/gtkui/menus.c:150
+#, fuzzy
+msgid "N_o Playlist Advance"
+msgstr "Discontinua la reproducció programada"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Treu els no seleccionats"
+#: src/gtkui/menus.c:151
+#, fuzzy
+msgid "Stop _After This Song"
+msgstr "Para quan s'acabi la cançó"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Treu els elements no seleccionats de la llista de reproducció."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Treu els seleccionats"
+#: src/gtkui/menus.c:154
+#, fuzzy
+msgid "Jump to _Time ..."
+msgstr "Salta al temps"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Treu els elements seleccionats de la llista de reproducció."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:131
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "Sort"
-msgstr "Port"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "Pel número de pista"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
+#: src/gtkui/menus.c:159
+#, fuzzy
+msgid "By _Title"
msgstr "Per títol"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
+#: src/gtkui/menus.c:160
+#, fuzzy
+msgid "By _Artist"
msgstr "Per l'artista"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "Àlbum:"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
+#, fuzzy
+msgid "By Release _Date"
+msgstr "Per la data"
+
+#: src/gtkui/menus.c:163
#, fuzzy
-msgid "By File Path"
+msgid "By _File Path"
msgstr "Per nom de fitxer"
-#: src/gtkui/ui_manager.c:142
+#: src/gtkui/menus.c:164
#, fuzzy
-msgid "Reverse Order"
-msgstr "Inverteix la llista"
+msgid "By _Custom Title"
+msgstr "Decoració personalitzada"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr ""
+#: src/gtkui/menus.c:166
+#, fuzzy
+msgid "R_everse Order"
+msgstr "Inverteix la llista"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efectes"
+#: src/gtkui/menus.c:167
+#, fuzzy
+msgid "_Random Order"
+msgstr "_Aleatori"
-#: src/gtkui/ui_manager.c:151
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
#, fuzzy
-msgid "Equalizer"
-msgstr "Mostra l'equalitzador"
+msgid "_Refresh"
+msgstr "Velocitat de refresc"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Finestres"
+#: src/gtkui/menus.c:172
+#, fuzzy
+msgid "_Sort"
+msgstr "Port"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Fitxer"
+#: src/gtkui/menus.c:175
+#, fuzzy
+msgid "_Close"
+msgstr "Tanca"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "Components"
-msgstr "Comentari:"
+msgid "_Import ..."
+msgstr "Importa"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Mostra detalls de la pista"
+#: src/gtkui/menus.c:178
+#, fuzzy
+msgid "_Export ..."
+msgstr "Exporta"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Mostra detalls de la pista"
+#: src/gtkui/menus.c:180
+#, fuzzy
+msgid "_Playlist Manager ..."
+msgstr "Gestor de llistes"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Quant a l'Audacious"
+#: src/gtkui/menus.c:183
+#, fuzzy
+msgid "Volume _Up"
+msgstr "Puja el volum"
-#: src/gtkui/ui_manager.c:178
+#: src/gtkui/menus.c:184
#, fuzzy
-msgid "Open Files ..."
-msgstr "Afegeix fitxers..."
+msgid "Volume _Down"
+msgstr "Baixa el volum"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "Carrega i reprodueix un fitxer"
+#: src/gtkui/menus.c:186
+#, fuzzy
+msgid "_Equalizer"
+msgstr "Mostra l'equalitzador"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:188
+#, fuzzy
+msgid "E_ffects"
+msgstr "Efectes"
+
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Reprodueix un mitjà des de la ubicació seleccionada"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Serveis de connectors"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Preferències"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "Estat"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Obre la finestra de preferències"
+#: src/gtkui/menus.c:197
+#, fuzzy
+msgid "Show Column _Headers"
+msgstr "Mostra el reproductor"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "_Surt"
+#: src/gtkui/menus.c:198
+#, fuzzy
+msgid "Choose _Columns ..."
+msgstr "Mostra el reproductor"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Tanca l'Audacious"
+#: src/gtkui/menus.c:199
+#, fuzzy
+msgid "Scrol_l on Song Change"
+msgstr "Missatge de la cançó"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "Estableix A-B"
+#: src/gtkui/menus.c:202
+#, fuzzy
+msgid "_File"
+msgstr "Fitxer"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Esborra A-B"
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "Reproducció"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "Salta a l'inici de la llista"
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "Llistes"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Salta al fitxer"
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "Dispositius"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Posa o treu de la cua"
+#: src/gtkui/menus.c:206
+#, fuzzy
+msgid "_Output"
+msgstr "Connector de sortida nul"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Posa o lleva un element de la cua."
+#: src/gtkui/menus.c:207
+#, fuzzy
+msgid "_View"
+msgstr "Finestres"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "De culte"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
+msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr ""
+
+#: src/gtkui/menus.c:216
#, fuzzy
-msgid "Paste"
+msgid "_Paste"
msgstr "Al màxim"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
+#: src/gtkui/menus.c:217
+#, fuzzy
+msgid "Select _All"
msgstr "Selecciona tots els elements"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Selecciona tots els elements de la llista de reproducció."
+#: src/gtkui/menus.c:222
+#, fuzzy
+msgid "_Rename"
+msgstr "Nom del fitxer"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Selecciona no res"
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
+msgstr ""
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Deselecciona tots els elements de la llista de reproducció."
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
+msgstr "Error"
+
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
msgid "stereo"
msgstr "estèreo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Canals"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "Canals"
+msgstr[1] "Canals"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Pista anterior"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Reprodueix"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Pausa/Represa"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Para"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Següent pista"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Endavant 5 segons"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Enrere 5 segons"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Silencia"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Puja el volum"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Baixa el volum"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+msgid "Jump to File"
+msgstr "Salta al fitxer"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Commuta les finestres"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "Activa l'OSD (sobre-impressió)"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+#, fuzzy
+msgid "Toggle Repeat"
+msgstr "Repeteix"
+
+#: src/hotkey/gui.c:85
+#, fuzzy
+msgid "Toggle Shuffle"
+msgstr "Barreja"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(cap)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3169,15 +1854,15 @@ msgstr ""
"\n"
"Voleu continuar?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Vinculació dels botons del ratolí"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Configuració del connector de tecles ràpides globals"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3185,23 +1870,23 @@ msgstr ""
"Premeu una combinació de tecles dins del camp de text.\n"
"També podeu vincular botons del ratolí."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Tecles ràpides:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Acció:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Vinculació de tecles:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "Quant al connector de tecles ràpides globals"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3254,7 +1939,7 @@ msgstr "Mode de connexió:"
msgid "Enable debug printing"
msgstr "Activa els missatges de depuració"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3272,134 +1957,20 @@ msgstr ""
"Portat a l'Audacious per\n"
"Giacomo Lozito de develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "Quant al connector de sortida JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Aquest connector LADSPA no té controls d'usuari"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Nom"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Connectors instal·lats"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Connectors actius"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Afegeix"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Elimina"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "Catàleg de connectors LADSPA"
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "Quant al connector LIRC de l'Audacious"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "Connector per a LIRC"
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
-"\n"
-"Un simple connector que permet controlar\n"
-"l'Audacious amb el dimoni de control remot LIRC.\n"
-"\n"
-"Adapatat per a l'Audacious per Tony Vroon <chainsaw@gentoo.org>\n"
-"a partir del connector LIRC de l'XMMS de:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"Podeu trobar informació sobre el LIRC a:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "Paràmetres del connector LIRC"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Reconnecta amb el servidor LIRC"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Temps d'espera abans d'intentar reconnectar (segons): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Reconnexió"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Connexió"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: no s'ha pogut inicialitzar el suport per a LIRC\n"
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: no s'ha pogut llegir el firxer de configuració de LIRC\n"
-"%s: si us plau, llegiu la documentació de LIRC, per a saber\n"
-"%s: com crear un fitxer de configuració adequat\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: tractant de reconnectar...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: ordre desconeguda \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: desconnectat del LIRC\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: s'intentarà reconnectar cada %d segons...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3408,11 +1979,11 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "Quant al connector Metronom"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3426,269 +1997,48 @@ msgstr ""
"p.e. tact://77 per a fer 77 tocs per minut\n"
"o tact://60*3/4 per fer 70 tocs per minut en 3/4."
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Generador de compassos: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Generador de compassos: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "Configuració del connector ModPlug"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bits"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bits"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Mono (remescla)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "Més proper (molt ràpid)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Lineal (ràpid)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Spline (bona qualitat)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-tap Fir (qualitat extremament alta)"
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Freqüència de mostra"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Activa"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Profunditat"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Retard"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Reverberació"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Quantitat"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Amplitud"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Amplificació de baixos"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr "So envolvent"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Nota: Posar el preamplificador\n"
-"massa alt pot escapçar el senyal\n"
-"(sorollets emprenyadors)!\""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Preamplificació"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Usa el nom del fitxer com a títol"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Informació de la llista de reproducció ràpida"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Reducció de soroll"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Reprodueix MODs d'Amiga"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Al final, torna a començar"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Al final, no torna a començar"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "cop(s)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Torna a començar sempre"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Iteracions"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "Informació MOD"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Fitxer:\n"
-"Títol:\n"
-"Tipus:\n"
-"Durada:\n"
-"Velocitat:\n"
-"Tempo:\n"
-"Mostres:\n"
-"Instruments:\n"
-"Patrons:\n"
-"Canals:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Mostres"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Instruments"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Missatge"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Connector d'entrada Modplug per a l'Audacious, ver"
-
-#: src/modplug/gui/main.cxx:52
-#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Motor de so del Modplug escrit per Olivier Lapicque.\n"
-"Interfície XMMS per al Modplug per Kenton Varda.\n"
-"(c)2000 Olivier Lapicque i Kenton Varda.\n"
-"Actualitzacions i manteniment per Konstanty Bialkowski.\n"
-"Portat al BMP per Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Quant al connector Modplug"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "No s'ha trobat el fitxer de mapa-de-bits: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Puja les pistes seleccionades"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:298
msgid "Upload in progress..."
msgstr "Pujada en curs..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "Gestor de dispositius MTP"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
+msgstr ""
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
+#: src/mtp_up/mtp.c:311
+#, fuzzy
+msgid "Disconnect MTP Device"
msgstr "Desconnecta el dispositiu"
-#: src/null/null.c:63
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Stopped"
+msgstr "Para"
+
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Audacious is not playing."
+msgstr "Audacious - avís de visibilitat"
+
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Connector de sortida nul"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3696,15 +2046,15 @@ msgstr ""
" per Christian Birchinger <joker@netswarm.net>\n"
" basat el connector XMMS de Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Quant a la sortida nul·la"
-#: src/null/null.c:93
+#: src/null/null.c:94
msgid "Null output preferences"
msgstr "Preferències de la sortida nul·la"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr "Funciona en temps real"
@@ -3718,11 +2068,11 @@ msgstr "Dispositiu PCM per defecte (%s)"
msgid "OSS4 Output Plugin Preferences"
msgstr "Connector d'Icona d'Estat - Preferències"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "Dispositiu d'àudio:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "Usa un dispositiu alternatiu:"
@@ -3735,12 +2085,12 @@ msgstr "Recorda el volum VMIX entre sessions"
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "Quant al connector ESounD"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3784,40 +2134,45 @@ msgstr ""
msgid "OSS4 error"
msgstr "Error"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "Per defecte (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "Per defecte"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "Configuració del driver OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "Dispositius"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "Buffers:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "Pre-buffer (percentatge):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "Buffers"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "Paràmetres del mesclador:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr "El volum canvia el màster, no el PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "Mesclador"
@@ -3861,11 +2216,11 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Quant al connector de sortida PulseAudio"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
msgid ""
"Audacious PulseAudio Output Plugin\n"
"\n"
@@ -3901,54 +2256,54 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "Quant al connector d'icona d'estat"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
#, fuzzy
msgid "Change password"
msgstr "Canvia la cançó"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>Serveis</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "Nom d'usuari:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "Contrasenya:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
#, fuzzy
msgid "Scrobbler URL:"
msgstr "Error de Scrobbler"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
#, fuzzy
msgid "Scrobbler"
msgstr "Error de Scrobbler"
@@ -3969,16 +2324,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Quant al connector Scrobbler"
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "Quant al connector de sortida JACK 0.17"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "Error"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "Quant a %s"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "Tanca"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "Error"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "D'acord"
+
#: src/sid/xs_fileinfo.c:151
msgid "General info"
msgstr "Informació general"
@@ -3988,6 +2361,11 @@ msgstr "Informació general"
msgid "Tune #%i: "
msgstr "Melodia #%i: "
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "No s'ha trobat el fitxer de mapa-de-bits: %s"
+
#: src/sid/xs_interface.c:234
msgid "Audacious-SID configuration"
msgstr "Configuració del connector Audacious-SID"
@@ -4303,15 +2681,15 @@ msgstr "Exporta"
msgid "Use"
msgstr "Usa"
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
msgid "Save"
msgstr "Desa"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
msgid "Import"
msgstr "Importa"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
msgid "Delete"
msgstr "Elimina"
@@ -4344,6 +2722,11 @@ msgstr ""
msgid "Playtime:"
msgstr "Durada:"
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+msgid "seconds"
+msgstr "segons"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr "Durada mínima de reproducció"
@@ -4453,10 +2836,6 @@ msgstr ""
msgid "Song title format:"
msgstr "Format del títol:"
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Títol"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr "Afegeix les sub-melodies a la llista de reproducció"
@@ -4610,11 +2989,11 @@ msgstr "Sí"
msgid "No"
msgstr "No"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "Quant a la interfície d'usuari gràfica"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4622,475 +3001,462 @@ msgstr ""
"Copyright (c) 2008, per Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "_Player:"
msgstr "_Reproductor:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr "Trieu la fosa de la finestra principal:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "_Playlist:"
msgstr "_Llista de reproducció:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "Select playlist font:"
msgstr "Trieu la fosa de la llista de reproducció:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
msgid "<b>_Fonts</b>"
msgstr "<b>_Foses</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Usa foses mapa de bits, si n'hi ha de disponibles"
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr ""
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
msgstr ""
-"Usa foses tipus mapa de bits, si n'hi ha de disponibles. Les fonts de mapa "
-"de bits no suporten cadenes Unicode."
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Miscel·lània</b>"
+#: src/skins/skins_cfg.c:346
+msgid "<b>_Skin</b>"
+msgstr "<b>_Decoració</b>"
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Mostra separadors a la llista de reproducció"
+#: src/skins/skins_cfg.c:393
+#, fuzzy
+msgid "Interface Preferences"
+msgstr "Preferències"
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Mostra la decoració del gestor de finestres"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamplificació"
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-"Això permet al gestor de finestres mostrar la decoració de les finestres."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Usa desplaçament de text bidireccional"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
msgstr ""
-"Si està seleccionat, la informació del fitxer a la finestra principal es "
-"desplaçarà endavant i enrere. Si no està seleccionat, el text es desplaçarà "
-"en una sola direcció."
-
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Deshabilita els temes GTK en línia"
-
-#: src/skins/skins_cfg.c:333
-#, fuzzy
-msgid "Random skin on play"
-msgstr "Reordena la llista de forma aleatòria."
-
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Permet carregar decoracions incompletes"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-"Si està seleccionat, l'Audacious no refusarà carregar decoracions "
-"defectuoses. Useu-ho només si la vostra decoració favorita no funciona"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Ajustament del color"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "22050 Hz "
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"L'Audacious us permet alterar el balanç de colors de la decoració de la IG. "
-"Els controls de sota us permetran fer això."
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Blau"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "1 kHz"
+msgstr "11 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Verd"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Roig"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Decoració</b>"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "8 kHz"
+msgstr "48 kHz"
-#: src/skins/skins_cfg.c:574
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "Color adjustment ..."
-msgstr "Ajustament del color"
+msgid "16 kHz"
+msgstr "48 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
msgid "Audacious Equalizer"
msgstr "Equalitzador de l'Audacious"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr "Perfils"
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
#, fuzzy
msgid "surround"
msgstr "So envolvent"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - avís de visibilitat"
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Mostra la finestra principal"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignora"
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"L'Audacious ha arrencat amb totes les finestres ocultes.\n"
-"Potser voldreu mostrar la finestra del reproductor per a controlar "
-"l'Audacious; en cas contrari, l'haureu de controlar remotament via l'audtool "
-"o connectors (com ara el connector statusicon)."
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Ignora sempre, mostra/oculta es controla remotament"
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious- avís de motor GTK defectuós"
-
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Esteu utilitzant un motor GTK defectuós</b></big>\n"
-"\n"
-"L'Audacious ha detectat que esteu utilitzant un motor GTK defectuós.\n"
-"\n"
-"El motor de temes que esteu usant, <i>%s</i>, és incompatible amb algunes "
-"funcions que usen moltes decoracions actuals. Les funcions en qüestió s'han "
-"deshabilitat per a aquesta sessió.\n"
-"\n"
-"Si voleu utilitzar aquestes funcions, considereu canviar el motor GTK actual."
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "No mostrar més aquest avís"
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
+#: src/skins/ui_main.c:807
+#, fuzzy, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr "Anar a: %d:%-2.2d/%d:%-2.2d (%d%%)"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Volum: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Balanç: %d%% esquerra"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Balanç: centrat"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Balanç: %d%% dreta"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Menú d'opcions"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Desactiva 'Sempre per sobre'"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "Activa 'Sempre per sobre'"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Informació del fitxer"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Desactiva l'escalat de la IUG"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Activa l'escalat de la IUG"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Menú de visualització"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "Llistes"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
#, fuzzy
msgid "Stopping after song."
msgstr "Para quan s'acabi la cançó"
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Belluga el títol"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Para quan s'acabi la cançó"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Pics"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Repeteix"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Barreja"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Discontinua la reproducció programada"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Mostra el reproductor"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Mostra l'editor de llistes"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Mostra l'equalitzador"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Sempre per sobre"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "A tots els espais de treball"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Enrotlla el reproductor"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Enrotlla l'editor de llistes"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Enrotlla l'equalitzador"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Escala"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Dobla la mida"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Moviment fàcil"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analitzador"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Oscil·loscopi"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Empremta de veu"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Apagat"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normal"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Foc"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Línies verticals"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Línies"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Barres"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Oscil·loscopi de punts"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Oscil·loscopi de línies"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Oscil·loscopi sòlid"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Gel"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Suau"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Mínim"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Lent"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Mitjà"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Ràpid"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Al màxim"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Temps transcorregut"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Temps que queda"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pausa"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Següent"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Visualització"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Mode de visualització"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Mode de l'analitzador"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Mode de l'oscil·loscopi"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Mode de l'empremta de veu"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Mode del WindowShade VU"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Caiguda de l'analitzador"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Caiguda dels pics"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Llistes"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Llista de reproducció nova"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Selecciona la llista següent"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Selecciona la llista anterior"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Esborra la llista"
+
#: src/skins/ui_manager.c:222
+#, fuzzy
+msgid "Import Playlist"
+msgstr "Carrega una llista de reproducció"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Afegeix una llista de reproducció a la llista seleccionada"
+
+#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "Carrega una llista de reproducció"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Desa les llistes de reproducció seleccionades."
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "Desa una llista de reproducció"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
msgid "Refresh List"
msgstr "Refresca la llista"
-#: src/skins/ui_manager.c:226
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Refresca les meta-dades associades a cada element de la llista."
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr "Gestor de llistes"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr "Obre el gestor de llistes de reproducció."
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr "Finestres"
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+#, fuzzy
+msgid "Interface Preferences ..."
+msgstr "Preferències"
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr "Afegeix una adreça d'Internet..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr "Afegeix una pista remota a la llista de reproducció."
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr "Afegeix fitxers..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr "Afegeix fitxers a la llista de reproducció."
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr "Cerca i selecciona"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
@@ -5098,219 +3464,367 @@ msgstr ""
"Cerca a la llista de reproducció i selecciona elements basant-se en criteris "
"específics."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
msgid "Invert Selection"
msgstr "Inverteix la selecció"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr "Inverteix els elements seleccionats i no seleccionats."
+#: src/skins/ui_manager.c:267
+msgid "Select All"
+msgstr "Selecciona tots els elements"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr "Selecciona tots els elements de la llista de reproducció."
+
+#: src/skins/ui_manager.c:271
+msgid "Select None"
+msgstr "Selecciona no res"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr "Deselecciona tots els elements de la llista de reproducció."
+
+#: src/skins/ui_manager.c:277
+msgid "Remove All"
+msgstr "Treu tots els elements"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr "Treu tots els elements de la llista de reproducció."
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr "Neteja la cua"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr "Neteja la cua associada a aquesta llista de reproducció. "
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr "Treu els fitxers no disponibles"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr "Treu els fitxers no disponibles de la llista de reproducció."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr "Treu els duplicats"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+msgid "By Title"
+msgstr "Per títol"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr "Treu els elements duplicats de la llista de reproducció per títol."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
msgid "By Filename"
msgstr "Per nom de fitxer"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
"Treu els elements duplicats de la llista de reproducció per nom de fitxer."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
msgid "By Path + Filename"
msgstr "Per ubicació i nom de fitxer"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
"Treu els elements duplicats de la llista de reproducció per l'ubicació "
"completa."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr "Treu els no seleccionats"
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr "Treu els elements no seleccionats de la llista de reproducció."
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr "Treu els seleccionats"
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr "Treu els elements seleccionats de la llista de reproducció."
+
+#: src/skins/ui_manager.c:313
+msgid "Randomize List"
+msgstr "Barreja la llista"
+
+#: src/skins/ui_manager.c:314
+msgid "Randomizes the playlist."
+msgstr "Reordena la llista de forma aleatòria."
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr "Inverteix la llista"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr "Inverteix l'ordre de la llista."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
msgid "Sort List"
msgstr "Ordena la llista"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr "Ordena la llista pel títol."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "Àlbum:"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
#, fuzzy
msgid "Sorts the list by album."
msgstr "Ordena la llista pel títol."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+msgid "By Artist"
+msgstr "Per l'artista"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr "Ordena la llista per l'artista."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr "Ordena la llista pel nom de fitxer."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr "Ordena la llista per la ubicació completa."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
msgid "By Date"
msgstr "Per la data"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr "Ordena la llista per la data de modificació."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+msgid "By Track Number"
+msgstr "Pel número de pista"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr "Ordena la llista pel número de pista."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
msgid "Sort Selected"
msgstr "Ordena els seleccionats"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+msgid "File"
+msgstr "Fitxer"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr "Serveis de connectors"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+msgid "View Track Details"
+msgstr "Mostra detalls de la pista"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr "Mostra detalls de la pista"
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+msgid "About Audacious"
+msgstr "Quant a l'Audacious"
+
+#: src/skins/ui_manager.c:401
msgid "Play File"
msgstr "Reprodueix fitxer"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+msgid "Load and play a file"
+msgstr "Carrega i reprodueix un fitxer"
+
+#: src/skins/ui_manager.c:404
msgid "Play Location"
msgstr "Reprodueix una font remota"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+msgid "Play media from the selected location"
+msgstr "Reprodueix un mitjà des de la ubicació seleccionada"
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr "Serveis de connectors"
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr "Preferències"
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr "Obre la finestra de preferències"
+
+#: src/skins/ui_manager.c:413
+msgid "Quit Audacious"
+msgstr "Tanca l'Audacious"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr "Estableix A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr "Esborra A-B"
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr "Salta a l'inici de la llista"
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+msgid "Jump to Time"
+msgstr "Salta al temps"
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr "Posa o treu de la cua"
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Posa o lleva un element de la cua."
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "De culte"
+
+#: src/skins/ui_manager.c:438
+#, fuzzy
+msgid "Paste"
+msgstr "Al màxim"
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr "Carrega"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
msgid "Preset"
msgstr "Perfil"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr "Carrega un perfil"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr "Perfil automàtics"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr "Carrega un perfil automàtic"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
msgid "Load default preset into equalizer"
msgstr "Carrega el perfil per defecte a l'equalitzador"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
msgid "Zero"
msgstr "Zero"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr "Posa els valors de l'equalitzador a zero"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr "Des d'un fitxer"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
msgid "Load preset from file"
msgstr "Carrega el perfil des d'un fitxer"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr "D'un fitxer EQF del WinAMP"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr "Carrega el perfil des d'un fitxer EQF del WinAMP"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr "Perfils del WinAMP"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr "Importa perfils del WinAMP"
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr "Desa el perfil"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr "Desa com a perfil automàtic"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
msgid "Save default preset"
msgstr "Desa com a perfil per defecte"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
msgid "To file"
msgstr "En un fitxer"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr "Desa el perfil en un fitxer"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr "En un fitxer EQF del WinAMP"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr "Desa els valors en un fitxer EQF del WinAMP"
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
msgid "Delete preset"
msgstr "Esborra el perfil"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr "Esborra el perfil automàtic"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr "Cerca elements en la llista de reproducció activa"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5322,120 +3836,61 @@ msgstr ""
"insensibles a la capitalització. Si no sabeu com funcionen les expressions "
"regulars, podeu escriure literalment el text que busqueu."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Títol: "
+
+#: src/skins/ui_playlist.c:267
msgid "Album: "
msgstr "Àlbum:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
msgid "Artist: "
msgstr "Artista: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
msgid "Filename: "
msgstr "Nom del fitxer: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr "Neteja la selecció anterior abans de cercar"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr "Posa o treu de la cua automàticament els elements trobats"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr "Crea una llista de reproducció nova amb els elements trobats"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Desa com a llista de reproducció estàtica"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Usa camins relatius"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Carrega una llista de reproducció"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Desa una llista de reproducció"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr "Editor de llistes de l'Audacious"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Decoració del Winamp 2.x arxivada"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Decoració del Winamp 2.x no arxivada"
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "No s'ha pogut crear el directori (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
msgid "About sndfile plugin"
msgstr "Quant al connector sndfile"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5476,56 +3931,64 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "Quant a SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
msgid "Volume corr."
msgstr "Correcció de volum"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr "Encavalcament curt"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
msgid "Speed"
msgstr "Velocitat"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr "To"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr "Escala"
+
+#: src/sndstretch/sndstretch_xmms.c:363
+msgid "Options"
+msgstr "Opcions"
+
+#: src/sndstretch/sndstretch_xmms.c:382
msgid "SndStretch - Configuration"
msgstr "SndStretch - Configuració"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr "Ordre a executar quan l'Audacious comença una nova cançó."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr "Ordre:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr "Ordre a executar cap al final de la cançó."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
"Ordre a executar quan l'Audacious arriba al final de la llista de "
"reproducció."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Ordre a executar quan canvia el títol d'una cançó (en fluxos de xarxa)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
#, fuzzy
msgid ""
"You can use the following format strings which\n"
@@ -5539,7 +4002,10 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Podeu utilitzar les següents cadenes de format\n"
"que se substituiran abans de cridar l'ordre (no\n"
@@ -5554,7 +4020,7 @@ msgstr ""
"%%t: Posició a la llista de reproducció (%%02d)\n"
"%%p: Reproducció en curs (1 o 0)"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5563,24 +4029,20 @@ msgstr ""
"entre\n"
"cometes. Altrament seria un risc per a la seguretat.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr "Ordres"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "Missatge de la cançó"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Analitzador d'espectre"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "Quant al connector d'icona d'estat"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
#, fuzzy
msgid ""
"Status Icon Plugin\n"
@@ -5596,35 +4058,48 @@ msgstr ""
"Aquest connector proporciona una icona d'estat, que\n"
"es col·loca a l'àrea de la safata del gestor de finestres.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "Connector d'Icona d'Estat - Preferències"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "Clic amb el botó dret"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "Menú de reproducció #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "Menú de reproducció #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "Roda del ratolí"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "Canvia el volum"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "Canvia la cançó"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+#, fuzzy
+msgid "Other settings"
+msgstr "Paràmetres del mesclador"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr ""
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:41
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5634,122 +4109,19 @@ msgstr ""
"\n"
"Per Johan Levin, 1999."
-#: src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:65
msgid "About Extra Stereo Plugin"
msgstr "Quant al connector d'estèreo extra"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:102
msgid "Configure Extra Stereo"
msgstr "Configuració de l'estèreo extra"
-#: src/streambrowser/gui/streambrowser_win.c:62
-#, fuzzy
-msgid "Search:"
-msgstr "Any:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-#, fuzzy
-msgid "Stream browser"
-msgstr "Explora..."
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-#, fuzzy
-msgid "Stream name"
-msgstr "Nom de l'instrument"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-#, fuzzy
-msgid "Now playing"
-msgstr "Llista de reproducció nova"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-#, fuzzy
-msgid "Remove Bookmark"
-msgstr "Esborra l'etiqueta"
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "Quant al driver OSS"
-
-#: src/streambrowser/streambrowser.c:332
-#, fuzzy
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright (c) 2007, per Calin Crisan <ccrisan@gmail.com> i l'Equip "
-"Audacious.\n"
-"\n"
-"Moltes gràcies als desenvolupadors de la libcdio <http://www.gnu.org/"
-"software/libcdio/>\n"
-"\ti als desenvolupadors de la libcddb <http://libcddb.sourceforge.net/>.\n"
-"\n"
-"També gràcies al meu mentor Tony Vroon pels seus consells.\n"
-"\n"
-"Això va ser un projecte del Google Summer of Code de 2007."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-#, fuzzy
-msgid "Streambrowser"
-msgstr "Explora..."
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Quant al driver Sun"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"Driver BSD Sun per a l'XMMS\n"
-"\n"
-"Copyright (C) 2001 CubeSoft Communications, Inc.\n"
-"Mantenidor: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Dispositiu de control d'àudio:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Mida del buffer (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Dispositiu de control del volum:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "L'XMMS usa el mesclador exclusivament."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Configuració del driver Sun"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "Quant al connector generador de tons"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5764,15 +4136,20 @@ msgstr ""
"e.g. tone://2000;2005 per a generar un to de 2000 Hz i un to\n"
"de 2005 Hz."
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "Generador de tons:"
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "Quant al connector ESounD"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "Ignora els títols genèrics"
@@ -5786,15 +4163,15 @@ msgstr "Format del títol:"
msgid "Ogg Vorbis Tags"
msgstr "Etiquetes Ogg Vorbis:"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Configuració del connector d'àudio Ogg Vorbis"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Quant al connector d'àudio Ogg Vorbis"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5852,12 +4229,12 @@ msgstr ""
"\n"
"Implementat a l'Audacious per Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Connector descodificador Wavpack %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5869,6 +4246,1617 @@ msgstr ""
"Alguns trossos del codi són de Miles Egan\n"
"Visiteu la plana web de Wavpack a http://www.wavpack.com/\n"
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Usa foses mapa de bits, si n'hi ha de disponibles"
+
+#~ msgid ""
+#~ "Use bitmap fonts if they are available. Bitmap fonts do not support "
+#~ "Unicode strings."
+#~ msgstr ""
+#~ "Usa foses tipus mapa de bits, si n'hi ha de disponibles. Les fonts de "
+#~ "mapa de bits no suporten cadenes Unicode."
+
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>_Miscel·lània</b>"
+
+#~ msgid "Use two-way text scroller"
+#~ msgstr "Usa desplaçament de text bidireccional"
+
+#~ msgid "About "
+#~ msgstr "Quant al connector "
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Aquest connector s'ha publicat sota els termes i condicions de la\n"
+#~ "llicència GNU LGPL. Vegeu http://www.gnu.org/licenses/lgpl.html per a\n"
+#~ "més detalls.\n"
+#~ "\n"
+#~ "Aquest connector fa ús de la llibreria AdPlug, el copyright (C) de la "
+#~ "qual\n"
+#~ "pertany a Simon Peter, et al.\n"
+#~ "\n"
+#~ "Versió de la llibreria AdPlug enllaçada: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: Configuració"
+
+#~ msgid "Sound quality"
+#~ msgstr "Qualitat de so"
+
+#~ msgid "Resolution"
+#~ msgstr "Resolució"
+
+#~ msgid "8bit"
+#~ msgstr "8 bits"
+
+#~ msgid "16bit"
+#~ msgstr "16 bits"
+
+#~ msgid "Channels"
+#~ msgstr "Canals"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "Activar l'estèreo no és recomanable, si no ho heu de fer. Això no afegirà "
+#~ "cap efecte estèreo al so -l'OPL2 és mono- però consumeix més CPU!"
+
+#~ msgid "Frequency"
+#~ msgstr "Freqüència"
+
+#~ msgid "Detect songend"
+#~ msgstr "Detecta el final de la pista"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "Si està activat, l'XMMS detectarà el final de la pista, pararà i passarà "
+#~ "a la següent. Si no està activat, l'XMMS pot no detectar que la pista "
+#~ "s'ha acabat i seguir reproduint-la un cop i un altre."
+
+#~ msgid "Formats"
+#~ msgstr "Formats"
+
+#~ msgid "Format selection"
+#~ msgstr "Selecció de formats"
+
+#~ msgid "Format"
+#~ msgstr "Format"
+
+#~ msgid "Extension"
+#~ msgstr "Extensió"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "Els tipus de fitxers seleccionats seran reconeguts i reproduïts per "
+#~ "aquest connector. Els tipus no seleccionats seran ignorats, i podran ser "
+#~ "reproduïts per altres connectors."
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: Informació del fitxer"
+
+#~ msgid "Author: "
+#~ msgstr "Autor: "
+
+#~ msgid "File Type: "
+#~ msgstr "Tipus de fitxer: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "Sub-pistes: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Instruments: "
+
+#~ msgid "Orders: "
+#~ msgstr "Ordres: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Pautes: "
+
+#~ msgid "Song"
+#~ msgstr "Cançó"
+
+#~ msgid "Instrument name"
+#~ msgstr "Nom de l'instrument"
+
+#~ msgid "Song message"
+#~ msgstr "Missatge de la cançó"
+
+#~ msgid "Subsong selection"
+#~ msgstr "Selecció de sub-pistes"
+
+#~ msgid "Order: "
+#~ msgstr "Ordre: "
+
+#~ msgid "Pattern: "
+#~ msgstr "Pauta: "
+
+#~ msgid "Row: "
+#~ msgstr "Fila: "
+
+#~ msgid "Speed: "
+#~ msgstr "Velocitat: "
+
+#~ msgid "Timer: "
+#~ msgstr "Temporitzador: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "Quant a l'alarma XMMS"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "Alarma XMMS"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "Un connector XMMS que es pot fer servir\n"
+#~ "per a començar a reproduir a una certa hora.\n"
+#~ "\n"
+#~ "Envieu totes les queixes a:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "Alarma"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "Això és l'avís per despertar-se."
+
+#~ msgid "Select Playlist"
+#~ msgstr "Seleccioneu una llista de reproducció"
+
+#~ msgid "Sorry"
+#~ msgstr "Ho sentim"
+
+#~ msgid "Warning"
+#~ msgstr "Atenció"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "Per raons de seguretat, el temps \"tranquil\" ha de durar almenys 65 "
+#~ "segons més que el temps de fosa, i ha de durar més de 10 segons. Això "
+#~ "bàsicament significa que hi ha un \"bug\" en el codi i que fins que no "
+#~ "trobi la manera de resoldre'l sortirà aquest missatge :)\n"
+#~ "\n"
+#~ "Els paràmetres de fosa NO s'han desat\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+
+#~ msgid "Oh Well"
+#~ msgstr "Vaja"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "Paràmetres de l'alarma"
+
+#~ msgid "Time"
+#~ msgstr "Hora"
+
+#~ msgid "hours"
+#~ msgstr "hores"
+
+#~ msgid "h"
+#~ msgstr "h"
+
+#~ msgid "minutes"
+#~ msgstr "minuts"
+
+#~ msgid "Quiet after:"
+#~ msgstr "Para al cap de:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "Alarma (per defecte) a les:"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "Trieu els dies que ha de saltar l'alarma"
+
+#~ msgid "Day"
+#~ msgstr "Dia"
+
+#~ msgid "Tuesday"
+#~ msgstr "Dimarts"
+
+#~ msgid "Wednesday"
+#~ msgstr "Dimecres"
+
+#~ msgid "Thursday"
+#~ msgstr "Dijous"
+
+#~ msgid "Friday"
+#~ msgstr "Divendres"
+
+#~ msgid "Saturday"
+#~ msgstr "Dissabte"
+
+#~ msgid "Sunday"
+#~ msgstr "Diumenge"
+
+#~ msgid "Monday"
+#~ msgstr "Dilluns"
+
+#~ msgid "Days"
+#~ msgstr "Dies"
+
+#~ msgid "Fading"
+#~ msgstr "Fosa"
+
+#~ msgid "Volume"
+#~ msgstr "Volum"
+
+#~ msgid "Current"
+#~ msgstr "Actual"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "posa al volum de sortida actual"
+
+#~ msgid "Start at"
+#~ msgstr "Comença a"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "Final"
+
+#~ msgid "Additional Command"
+#~ msgstr "Ordre Addicional"
+
+#~ msgid "enable"
+#~ msgstr "activa"
+
+#~ msgid "Playlist (optional)"
+#~ msgstr "Llista de reproducció (opcional)"
+
+#~ msgid "Browse..."
+#~ msgstr "Vés a..."
+
+#~ msgid "Reminder"
+#~ msgstr "Recordatori"
+
+#~ msgid "Use reminder"
+#~ msgstr "Activa els recordatoris"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "Què signifiquen aquestes opcions?"
+
+#~ msgid ""
+#~ "\n"
+#~ "Time\n"
+#~ " Alarm at: \n"
+#~ " The time for the alarm to come on.\n"
+#~ "\n"
+#~ " Quiet After: \n"
+#~ " Stop alarm after this amount of time.\n"
+#~ " (if the wakeup dialog is not closed)\n"
+#~ "\n"
+#~ "\n"
+#~ "Days\n"
+#~ " Day:\n"
+#~ " Select the days for the alarm to activate.\n"
+#~ "\n"
+#~ " Time:\n"
+#~ " Choose the time for the alarm on each day,\n"
+#~ " or select the toggle button to use the default\n"
+#~ " time.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volume\n"
+#~ " Fading: \n"
+#~ " Fade the volume up to the chosen volume \n"
+#~ " for this amount of time.\n"
+#~ "\n"
+#~ " Start at: \n"
+#~ " Start fading from this volume.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " The volume to stop fading at. If the fading\n"
+#~ " time is 0 then set volume to this and start\n"
+#~ " playing.\n"
+#~ "\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " Additional Command:\n"
+#~ " Run this command at the alarm time.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Temps\n"
+#~ " Alarma a les: \n"
+#~ " Hora en que salta l'alarma.\n"
+#~ "\n"
+#~ " Para al cap de: \n"
+#~ " Para l'alarma quan hagi passat aquesta estona.\n"
+#~ " (si no heu tancat el diàleg de despertada)\n"
+#~ "\n"
+#~ "\n"
+#~ "Dies\n"
+#~ " Dia:\n"
+#~ " Els dies de la setmana en que s'activa l'alarma.\n"
+#~ "\n"
+#~ " Hora:\n"
+#~ " L'hora en que salta l'alarma cada dia, o bé marqueu\n"
+#~ " la casella per a fer servir l'hora per defecte.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volum\n"
+#~ " Fosa: \n"
+#~ " Augmenta el volum fins el nivell especificat durant el \n"
+#~ " temps indicat.\n"
+#~ "\n"
+#~ " Comença a: \n"
+#~ " Comença amb aquest volum.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " El nivell de volum final. Si el temps de fosa\n"
+#~ " és 0, es començarà a reproduir a aquest nivell\n"
+#~ " des del principi.\n"
+#~ "\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ " Ordre addicional:\n"
+#~ " Executa aquesta ordre quan salta l'alarma.\n"
+#~ "\n"
+#~ " Llista de reproducció: \n"
+#~ " Carrega aquesta llista de reproducció (ha\n"
+#~ " de tenir extensió .m3u). Si no introduïu cap\n"
+#~ " llista, es faran servir les cançons que hi\n"
+#~ " hagin a la llista en aquest moment.\n"
+#~ " També és possible introduir un URL d'un flux\n"
+#~ " mp3/ogg, però carregar llistes de reproducció\n"
+#~ " des d'URLS de moment no està suportat.\n"
+#~ "\n"
+#~ " Recordatori:\n"
+#~ " Mostra un recordatori quan salta l'alarma,\n"
+#~ " escriviu el recordatori en el camp de text i\n"
+#~ " marqueu la casella si voleu que es mostri.\n"
+
+#~ msgid "Your reminder for today is.."
+#~ msgstr "El vostre recordatori d'avui és.."
+
+#~ msgid "Thankyou"
+#~ msgstr "Gràcies"
+
+#, fuzzy
+#~ msgid "Available Headsets"
+#~ msgstr "Aplicacions de fons disponibles"
+
+#, fuzzy
+#~ msgid "Current Headset"
+#~ msgstr "Actual"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Connexió"
+
+#, fuzzy
+#~ msgid "Class"
+#~ msgstr "Clàssica"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "Adreça del dispositiu"
+
+#, fuzzy
+#~ msgid "Rescan"
+#~ msgstr "Rellegeix el CD"
+
+#~ msgid "Playback->Play"
+#~ msgstr "Reproducció->Reprodueix"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "Reproducció->Para"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "Reproducció->Pausa"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "Reproducció->Anterior"
+
+#~ msgid "Playback->Next"
+#~ msgstr "Reproducció->Següent"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "Reproducció->Expulsa"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "Llista de reproducció->Repeteix"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "Llista de reproducció->Barreja"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "Volum->Amunt_5"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "Volum->Avall_5"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "Volum->Amunt_10"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "Volum->Avall_10"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "Volum->Silenciat"
+
+#~ msgid "Window->Main"
+#~ msgstr "Finestra->Principal"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "Finestra->Llista de reproducció"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "Finestra->Equalitzador"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "Finestra->SaltaAlFitxer"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: no s'ha pogut obrir el fitxer de dispositiu %s, "
+#~ "s'omet aquest dispositiu; comproveu que el fitxer existeix i que teniu "
+#~ "permís de lectura\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr ""
+#~ "event-device-plugin: no s'ha pogut crear un canal e/s pel fitxer de "
+#~ "dispositiu %s, s'omet aquest dispositiu\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: no s'ha pogut obrir /proc/bus/input/devices, no "
+#~ "funcionarà la detecció automàtica de dispositius.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: no s'ha pogut obrir un canal e/s per a /proc/bus/"
+#~ "input/devices, la detecció automàtica de dispositius no funcionarà.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: s'ha produït un error en llegir /proc/bus/input/"
+#~ "devices, la detecció automàtica de dispositius no funcionarà.\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: el dispositiu %s no s'ha trobat a /dev/input, "
+#~ "s'omet.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr ""
+#~ "event-device-plugin: no s'ha pogut carregar el fitxer de configuració %s, "
+#~ "s'utilitzaran els paràmetres per defecte.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: informació incompleta en el fitxer de config per al "
+#~ "dispositiu \"%s\", s'omet.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: configuració, no s'ha pogut obtenir el valor "
+#~ "is_active pel dispositiu \"%s\", s'omet.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr ""
+#~ "event-device-plugin: no s'ha pogut accedir al directori local %s, no es "
+#~ "desaran les preferències.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: configuració, no s'ha pogut obtenir el valor "
+#~ "filename per al dispositiu \"%s\", s'omet.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: configuració, no s'ha pogut el valor get phys per al "
+#~ "dispositiu \"%s\", s'omet.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: configuració, no s'ha pogut obtenir el valor "
+#~ "is_custom per al dispositiu \"%s\", s'omet.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: configuració, valor inesperat per al dispositiu \"%s"
+#~ "\", s'omet.\n"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "Detecta el final de la pista"
+
+#, fuzzy
+#~ msgid "Custom"
+#~ msgstr "personalitzat"
+
+#, fuzzy
+#~ msgid "Not Detected"
+#~ msgstr "Ordena els seleccionats"
+
+#~ msgid "Information"
+#~ msgstr "Informació"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "No es pot obrir la finestra de vincles per a un dispositiu no detectat.\n"
+#~ "Assegureu-vos que el dispositiu està ben endollat."
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "No es pot obrir el dispositiu seleccionat.\n"
+#~ "Comproveu que teniu permís de lectura per a aquest dispositiu."
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug - Afegiu un dispositiu personalitzat"
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "EvDev-Plug intenta detectar i actualitzar informació sobre dispositius\n"
+#~ "d'esdeveniments disponibles al sistema de manera automàtica.\n"
+#~ "De totes maneres, si l'auto-detecció no funciona en el vostre sistema, o "
+#~ "bé\n"
+#~ "teniu dispositius d'esdeveniments en ubicacions no-estàndard (actualment\n"
+#~ "només es busquen a /dev/input/), potser voldreu afegir un dispositiu\n"
+#~ "personalitzat, especificant explícitament el nom i el fitxer del "
+#~ "dispositiu."
+
+#~ msgid "Device name:"
+#~ msgstr "Nom del dispositiu:"
+
+#~ msgid "Device file:"
+#~ msgstr "Fitxer del dispositiu:"
+
+#, fuzzy
+#~ msgid "(custom)"
+#~ msgstr "personalitzat"
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "Si us plau, especifiqueu un nom i un fitxer.\n"
+#~ "El fitxer s'ha d'especificar amb un camí absolut."
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr ""
+#~ "Voleu eliminar la configuració existent per al dispositiu seleccionat?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "Voleu eliminar el dispositiu seleccionat?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug - Configuració"
+
+#~ msgid "Active"
+#~ msgstr "Actiu"
+
+#~ msgid "Status"
+#~ msgstr "Estat"
+
+#~ msgid "Device Name"
+#~ msgstr "Nom del dispositiu"
+
+#~ msgid "Device File"
+#~ msgstr "Fitxer del dispositiu"
+
+#~ msgid "Device Address"
+#~ msgstr "Adreça del dispositiu"
+
+#~ msgid "_Bindings"
+#~ msgstr "_Vincles"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "Premeu una tecla del dispositiu per a vincular-la;\n"
+#~ "si no premeu cap tecla en 5 segons, aquesta finestra\n"
+#~ "es tancarà sense fer cap canvi."
+
+#~ msgid ""
+#~ "This input event has been already assigned.\n"
+#~ "\n"
+#~ "It's not possible to assign multiple actions to the same input event "
+#~ "(although it's possible to assign the same action to multiple events)."
+#~ msgstr ""
+#~ "Aquest esdeveniment d'entrada ja està assignat.\n"
+#~ "\n"
+#~ "No és possible assignar múltiples accions al mateix esdeveniment "
+#~ "d'entrada (és possible assignar la mateixa acció a múltiples "
+#~ "esdeveniments, però)."
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug - Configuració dels vincles"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Nom: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Nom del fitxer: </b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>Adreça física: </b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "Quant al connector EvDev-Plug"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "control remot del reproductor via dispositius d'esdeveniments\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "escrit per Giacomo Lozito\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "Aquest connector LADSPA no té controls d'usuari"
+
+#~ msgid "Name"
+#~ msgstr "Nom"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Installed plugins"
+#~ msgstr "Connectors instal·lats"
+
+#~ msgid "Running plugins"
+#~ msgstr "Connectors actius"
+
+#~ msgid "Add"
+#~ msgstr "Afegeix"
+
+#~ msgid "Remove"
+#~ msgstr "Elimina"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "Catàleg de connectors LADSPA"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "Quant al connector LIRC de l'Audacious"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "Connector per a LIRC"
+
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "Un simple connector que permet controlar\n"
+#~ "l'Audacious amb el dimoni de control remot LIRC.\n"
+#~ "\n"
+#~ "Adapatat per a l'Audacious per Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "a partir del connector LIRC de l'XMMS de:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "Podeu trobar informació sobre el LIRC a:\n"
+#~ "http://lirc.org"
+
+#~ msgid "LIRC plugin settings"
+#~ msgstr "Paràmetres del connector LIRC"
+
+#~ msgid "Reconnect to LIRC server"
+#~ msgstr "Reconnecta amb el servidor LIRC"
+
+#~ msgid "Timeout before reconnecting (seconds): "
+#~ msgstr "Temps d'espera abans d'intentar reconnectar (segons): "
+
+#~ msgid "Reconnect"
+#~ msgstr "Reconnexió"
+
+#~ msgid "Connection"
+#~ msgstr "Connexió"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: no s'ha pogut inicialitzar el suport per a LIRC\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: no s'ha pogut llegir el firxer de configuració de LIRC\n"
+#~ "%s: si us plau, llegiu la documentació de LIRC, per a saber\n"
+#~ "%s: com crear un fitxer de configuració adequat\n"
+
+#~ msgid "%s: trying to reconnect...\n"
+#~ msgstr "%s: tractant de reconnectar...\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: ordre desconeguda \"%s\"\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: desconnectat del LIRC\n"
+
+#~ msgid "%s: will try reconnect every %d seconds...\n"
+#~ msgstr "%s: s'intentarà reconnectar cada %d segons...\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "Configuració del connector ModPlug"
+
+#~ msgid "16 bit"
+#~ msgstr "16 bits"
+
+#~ msgid "8 bit"
+#~ msgstr "8 bits"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "Mono (remescla)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "Més proper (molt ràpid)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "Lineal (ràpid)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "Spline (bona qualitat)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "8-tap Fir (qualitat extremament alta)"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "48 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Freqüència de mostra"
+
+#~ msgid "Enable"
+#~ msgstr "Activa"
+
+#~ msgid "Depth"
+#~ msgstr "Profunditat"
+
+#~ msgid "Delay"
+#~ msgstr "Retard"
+
+#~ msgid "Reverb"
+#~ msgstr "Reverberació"
+
+#~ msgid "Amount"
+#~ msgstr "Quantitat"
+
+#~ msgid "Range"
+#~ msgstr "Amplitud"
+
+#~ msgid "Bass Boost"
+#~ msgstr "Amplificació de baixos"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr ""
+#~ "Nota: Posar el preamplificador\n"
+#~ "massa alt pot escapçar el senyal\n"
+#~ "(sorollets emprenyadors)!\""
+
+#~ msgid "Effects"
+#~ msgstr "Efectes"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "Usa el nom del fitxer com a títol"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "Informació de la llista de reproducció ràpida"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "Reducció de soroll"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Reprodueix MODs d'Amiga"
+
+#~ msgid "Don't loop"
+#~ msgstr "Al final, torna a començar"
+
+#~ msgid "Loop"
+#~ msgstr "Al final, no torna a començar"
+
+#~ msgid "time(s)"
+#~ msgstr "cop(s)"
+
+#~ msgid "Loop forever"
+#~ msgstr "Torna a començar sempre"
+
+#~ msgid "Looping"
+#~ msgstr "Iteracions"
+
+#~ msgid "MOD Info"
+#~ msgstr "Informació MOD"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "Fitxer:\n"
+#~ "Títol:\n"
+#~ "Tipus:\n"
+#~ "Durada:\n"
+#~ "Velocitat:\n"
+#~ "Tempo:\n"
+#~ "Mostres:\n"
+#~ "Instruments:\n"
+#~ "Patrons:\n"
+#~ "Canals:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "Mostres"
+
+#~ msgid "Instruments"
+#~ msgstr "Instruments"
+
+#~ msgid "Message"
+#~ msgstr "Missatge"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Connector d'entrada Modplug per a l'Audacious, ver"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Motor de so del Modplug escrit per Olivier Lapicque.\n"
+#~ "Interfície XMMS per al Modplug per Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque i Kenton Varda.\n"
+#~ "Actualitzacions i manteniment per Konstanty Bialkowski.\n"
+#~ "Portat al BMP per Theofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "Quant al connector Modplug"
+
+#~ msgid "Show separators in playlist"
+#~ msgstr "Mostra separadors a la llista de reproducció"
+
+#~ msgid "Show window manager decoration"
+#~ msgstr "Mostra la decoració del gestor de finestres"
+
+#~ msgid "This enables the window manager to show decorations for windows."
+#~ msgstr ""
+#~ "Això permet al gestor de finestres mostrar la decoració de les finestres."
+
+#~ msgid ""
+#~ "If selected, the file information text in the main window will scroll "
+#~ "back and forth. If not selected, the text will only scroll in one "
+#~ "direction."
+#~ msgstr ""
+#~ "Si està seleccionat, la informació del fitxer a la finestra principal es "
+#~ "desplaçarà endavant i enrere. Si no està seleccionat, el text es "
+#~ "desplaçarà en una sola direcció."
+
+#~ msgid "Disable inline gtk theme"
+#~ msgstr "Deshabilita els temes GTK en línia"
+
+#, fuzzy
+#~ msgid "Random skin on play"
+#~ msgstr "Reordena la llista de forma aleatòria."
+
+#~ msgid "Allow loading incomplete skins"
+#~ msgstr "Permet carregar decoracions incompletes"
+
+#~ msgid ""
+#~ "If selected, audacious won't refuse loading broken skins. Use only if "
+#~ "your favourite skin doesn't work"
+#~ msgstr ""
+#~ "Si està seleccionat, l'Audacious no refusarà carregar decoracions "
+#~ "defectuoses. Useu-ho només si la vostra decoració favorita no funciona"
+
+#~ msgid "Color Adjustment"
+#~ msgstr "Ajustament del color"
+
+#~ msgid ""
+#~ "Audacious allows you to alter the color balance of the skinned UI. The "
+#~ "sliders below will allow you to do this."
+#~ msgstr ""
+#~ "L'Audacious us permet alterar el balanç de colors de la decoració de la "
+#~ "IG. Els controls de sota us permetran fer això."
+
+#~ msgid "Blue"
+#~ msgstr "Blau"
+
+#~ msgid "Green"
+#~ msgstr "Verd"
+
+#~ msgid "Red"
+#~ msgstr "Roig"
+
+#, fuzzy
+#~ msgid "Color adjustment ..."
+#~ msgstr "Ajustament del color"
+
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "Desactiva l'escalat de la IUG"
+
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Activa l'escalat de la IUG"
+
+#~ msgid "DoubleSize"
+#~ msgstr "Dobla la mida"
+
+#~ msgid "Easy Move"
+#~ msgstr "Moviment fàcil"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "Analitzador d'espectre"
+
+#, fuzzy
+#~ msgid "Search:"
+#~ msgstr "Any:"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "Nom de l'instrument"
+
+#, fuzzy
+#~ msgid "Now playing"
+#~ msgstr "Llista de reproducció nova"
+
+#, fuzzy
+#~ msgid "Remove Bookmark"
+#~ msgstr "Esborra l'etiqueta"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "Quant al driver OSS"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "This is a simple stream browser that includes the most popular streaming "
+#~ "directories.\n"
+#~ "Many thanks to the Streamtuner developers <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tand of course to the whole Audacious community.\n"
+#~ "\n"
+#~ "Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+#~ "\n"
+#~ "This was a Google Summer of Code 2008 project."
+#~ msgstr ""
+#~ "Copyright (c) 2007, per Calin Crisan <ccrisan@gmail.com> i l'Equip "
+#~ "Audacious.\n"
+#~ "\n"
+#~ "Moltes gràcies als desenvolupadors de la libcdio <http://www.gnu.org/"
+#~ "software/libcdio/>\n"
+#~ "\ti als desenvolupadors de la libcddb <http://libcddb.sourceforge.net/>.\n"
+#~ "\n"
+#~ "També gràcies al meu mentor Tony Vroon pels seus consells.\n"
+#~ "\n"
+#~ "Això va ser un projecte del Google Summer of Code de 2007."
+
+#~ msgid "Can't jump to time when no track is being played.\n"
+#~ msgstr "No es pot saltar al temps quan no s'està reproduint cap pista.\n"
+
+#~ msgid "minutes:seconds"
+#~ msgstr "minuts:segons"
+
+#~ msgid "Track length:"
+#~ msgstr "Durada de la pista:"
+
+#~ msgid "Error writing playlist \"%s\": %s"
+#~ msgstr "Error quan s'escrivia la llista de reproducció \"%s\": %s"
+
+#~ msgid "%s already exist. Continue?"
+#~ msgstr "%s ja existeix. Voleu continuar?"
+
+#, fuzzy
+#~ msgid "Show main menu"
+#~ msgstr "Mostra la finestra principal"
+
+#, fuzzy
+#~ msgid "Show/hide statusbar"
+#~ msgstr "Desa una llista de reproducció"
+
+#, fuzzy
+#~ msgid "Import Playlist ..."
+#~ msgstr "Carrega una llista de reproducció"
+
+#, fuzzy
+#~ msgid "Export Playlist ..."
+#~ msgstr "Carrega una llista de reproducció"
+
+#, fuzzy
+#~ msgid "Refresh"
+#~ msgstr "Velocitat de refresc"
+
+#, fuzzy
+#~ msgid "Refresh Selected"
+#~ msgstr "Treu els seleccionats"
+
+#, fuzzy
+#~ msgid "Refreshes metadata associated with selected entries."
+#~ msgstr "Refresca les meta-dades associades a cada element de la llista."
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "Reordena la llista de forma aleatòria."
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "Per títol"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "Comentari:"
+
+#~ msgid "Upload selected track(s)"
+#~ msgstr "Puja les pistes seleccionades"
+
+#~ msgid "MTP device handler"
+#~ msgstr "Gestor de dispositius MTP"
+
+#~ msgid "Show main player window"
+#~ msgstr "Mostra la finestra principal"
+
+#~ msgid "Ignore"
+#~ msgstr "Ignora"
+
+#~ msgid ""
+#~ "Audacious has been started with all of its windows hidden.\n"
+#~ "You may want to show the player window again to control Audacious; "
+#~ "otherwise, you'll have to control it remotely via audtool or enabled "
+#~ "plugins (such as the statusicon plugin)."
+#~ msgstr ""
+#~ "L'Audacious ha arrencat amb totes les finestres ocultes.\n"
+#~ "Potser voldreu mostrar la finestra del reproductor per a controlar "
+#~ "l'Audacious; en cas contrari, l'haureu de controlar remotament via "
+#~ "l'audtool o connectors (com ara el connector statusicon)."
+
+#~ msgid "Always ignore, show/hide is controlled remotely"
+#~ msgstr "Ignora sempre, mostra/oculta es controla remotament"
+
+#~ msgid "Audacious - broken GTK engine usage warning"
+#~ msgstr "Audacious- avís de motor GTK defectuós"
+
+#~ msgid ""
+#~ "<big><b>Broken GTK engine in use</b></big>\n"
+#~ "\n"
+#~ "Audacious has detected that you are using a broken GTK engine.\n"
+#~ "\n"
+#~ "The theme engine you are using, <i>%s</i>, is incompatible with some of "
+#~ "the features used by modern skins. The incompatible features have been "
+#~ "disabled for this session.\n"
+#~ "\n"
+#~ "To use these features, please consider using a different GTK theme engine."
+#~ msgstr ""
+#~ "<big><b>Esteu utilitzant un motor GTK defectuós</b></big>\n"
+#~ "\n"
+#~ "L'Audacious ha detectat que esteu utilitzant un motor GTK defectuós.\n"
+#~ "\n"
+#~ "El motor de temes que esteu usant, <i>%s</i>, és incompatible amb algunes "
+#~ "funcions que usen moltes decoracions actuals. Les funcions en qüestió "
+#~ "s'han deshabilitat per a aquesta sessió.\n"
+#~ "\n"
+#~ "Si voleu utilitzar aquestes funcions, considereu canviar el motor GTK "
+#~ "actual."
+
+#~ msgid "Do not display this warning again"
+#~ msgstr "No mostrar més aquest avís"
+
+#~ msgid "Save as Static Playlist"
+#~ msgstr "Desa com a llista de reproducció estàtica"
+
+#~ msgid "Use Relative Path"
+#~ msgstr "Usa camins relatius"
+
+#~ msgid "Load Playlist"
+#~ msgstr "Carrega una llista de reproducció"
+
+#~ msgid "Save Playlist"
+#~ msgstr "Desa una llista de reproducció"
+
+#~ msgid ""
+#~ "* Select ALSA output ports *\n"
+#~ "MIDI events will be sent to the ports selected here. In example, if your "
+#~ "audio card provides a hardware synth and you want to play MIDI with it, "
+#~ "you'll probably want to select the wavetable synthesizer ports."
+#~ msgstr ""
+#~ "* Seleccioneu els ports ALSA de sortida *\n"
+#~ "Els esdeveniments MIDI seran enviats a els ports seleccionats. Per "
+#~ "exemple, si la vostra targeta de so té un sintetitzador integrat i voleu "
+#~ "que reprodueixi MIDI, probablement voldreu seleccionar els ports de la "
+#~ "taula d'ones del sintetitzador."
+
+#~ msgid ""
+#~ "* Select ALSA mixer card *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volumeslider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Seleccioneu la targeta de so *\n"
+#~ "El fons ALSA envia la sortida directament a través d'ALSA, no fa servir "
+#~ "cap altre connector d'efectes o de sortida del reproductor. Durant la "
+#~ "reproducció, la maneta del volum tindrà efecte sobre el control que "
+#~ "seleccioneu aquí. Si esteu utilitzant ports de la taula d'ones d'un "
+#~ "sintetitzador, probablement voldreu seleccionar el control \"Synth\"."
+
+#~ msgid ""
+#~ "* Select ALSA mixer control *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volume slider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Seleccioneu el control de volum *\n"
+#~ "El fons ALSA envia la sortida directament a través d'ALSA, no fa servir "
+#~ "cap altre connector d'efectes o de sortida del reproductor. Durant la "
+#~ "reproducció, la maneta del volum tindrà efecte sobre el control que "
+#~ "seleccioneu aquí. Si esteu utilitzant ports de la taula d'ones d'un "
+#~ "sintetitzador, probablement voldreu seleccionar el control \"Synth\"."
+
+#~ msgid ""
+#~ "* Backend selection *\n"
+#~ "AMIDI-Plug works with backends, in a modular fashion; here you should "
+#~ "select your backend; that is, the way MIDI events are going to be handled "
+#~ "and played.\n"
+#~ "If you have a hardware synthesizer on your audio card, and ALSA supports "
+#~ "it, you'll want to use the ALSA backend. It can also be used with "
+#~ "anything that provides an interface to the ALSA sequencer, including "
+#~ "software synths or external devices.\n"
+#~ "If you want to rely on a software synthesizer and/or want to pipe audio "
+#~ "into effect and output plugins of the player you'll want to use the good "
+#~ "FluidSynth backend.\n"
+#~ "Press the info button to read specific information about each backend."
+#~ msgstr ""
+#~ "* Selecció de l'aplicació de fons *\n"
+#~ "El connector AMIDI-Plug funciona amb aplicacions de fons, d'una manera "
+#~ "modular; aquí hauríeu de seleccionar un fons; és a dir, la manera com els "
+#~ "esdeveniments MIDI han de ser tractats i reproduïts.\n"
+#~ "Si teniu maquinari de síntesi a la targeta de so, i ALSA el suporta, "
+#~ "voldreu fer servir el fons ALSA. També es pot fer servir amb qualsevol "
+#~ "cosa que tingui una interfície amb el seqüenciador ALSA, incloent "
+#~ "programari de síntesi o dispositius externs.\n"
+#~ "Si voleu fer servir programari de síntesi i/o voleu que el so generat "
+#~ "sigui processat pels connectors d'efectes i de sortida del reproductor, "
+#~ "voldreu fer servir el fons FluidSynth.\n"
+#~ "Premeu el botó d'informació per a llegir informació específica de cada "
+#~ "fons."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Transpose function *\n"
+#~ "This option allows you to play the midi file transposed in a different "
+#~ "key, by shifting of the desired number of semitones all its notes "
+#~ "(excepting those on midi channel 10, reserved for percussions). "
+#~ "Especially useful if you wish to sing or play along with another "
+#~ "instrument."
+#~ msgstr ""
+#~ "* Funció de transposició *\n"
+#~ "Aquesta opció permet reproduir el fitxer MIDI transposat a una clau "
+#~ "diferent, tot desplaçant totes les notes el nombre desitjat de semitons "
+#~ "(exceptuant aquelles en el canal MIDI 10, reservat per a percussió). "
+#~ "Resulta útil especialment per a cantar o acompanyar amb un altre "
+#~ "instrument."
+
+#~ msgid ""
+#~ "* Drumshift function *\n"
+#~ "This option allows you to shift notes on midi channel 10 (the standard "
+#~ "percussions channel) of the desired number of semitones. This results in "
+#~ "different drumset and percussions being used during midi playback, so if "
+#~ "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
+#~ "with this value."
+#~ msgstr ""
+#~ "* Funció de desplaçament de la percussió *\n"
+#~ "Aquesta opció permet desplaçar les notes del canal MIDI 10 (el canal "
+#~ "estàndard de percussió) el nombre desitjat de semitons. El resultat és un "
+#~ "conjunt diferent d'instruments usats en la reproducció MIDI, de manera "
+#~ "que si voleu millorar (o reduir, o alterar) la percussió, proveu de jugar "
+#~ "amb aquest valor."
+
+#~ msgid ""
+#~ "* Pre-calculate MIDI length *\n"
+#~ "If this option is enabled, AMIDI-Plug will calculate the MIDI file length "
+#~ "as soon as the player requests it, instead of doing that only when the "
+#~ "MIDI file is being played. In example, MIDI length will be calculated "
+#~ "straight after adding MIDI files in a playlist. Disable this option if "
+#~ "you want faster playlist loading (when a lot of MIDI files are added), "
+#~ "enable it to display more information in the playlist straight after "
+#~ "loading."
+#~ msgstr ""
+#~ "* Pre-càlcul de la durada MIDI *\n"
+#~ "Si aquesta opció està activada, el connector AMIDI-Plug calcularà la "
+#~ "durada del fitxer MIDI tan aviat com el reproductor ho requereixi, en "
+#~ "lloc de fer-ho només quan es reprodueix el fitxer. Per exemple, la durada "
+#~ "d'un fitxer MIDI es calcularà just després de ser afegit a la llista de "
+#~ "reproducció. Desactiveu aquesta opció si voleu que les llistes de "
+#~ "reproducció es carreguin més ràpidament (quan s'afegeixen molts fitxers "
+#~ "MIDI), activeu-la per a mostrar més informació immediatament en carregar "
+#~ "fitxers."
+
+#~ msgid ""
+#~ "* Extract comments from MIDI files *\n"
+#~ "Some MIDI files contain text comments (author, copyright, instrument "
+#~ "notes, etc.). If this option is enabled, AMIDI-Plug will extract and "
+#~ "display comments (if available) in the file information dialog."
+#~ msgstr ""
+#~ "* Extracció de comentaris de fitxers MIDI *\n"
+#~ "Alguns fitxers MIDI contenen comentaris (autor, copyright, comentaris "
+#~ "sobre instruments, etc.). Si aquesta opció està activada, el connector "
+#~ "AMIDI-Plug extraurà i mostrarà els comentaris (si n'hi ha cap) en el "
+#~ "diàleg d'informació del fitxer."
+
+#~ msgid ""
+#~ "* Extract lyrics from MIDI files *\n"
+#~ "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-"
+#~ "Plug will extract and display song lyrics (if available) in the file "
+#~ "information dialog."
+#~ msgstr ""
+#~ "* Extracció de lletres de fitxer MIDI *\n"
+#~ "Alguns fitxers MIDI contenen les lletres de les cançons. Si aquesta opció "
+#~ "està activada, el connector AMIDI-Plug extraurà i mostrarà les lletres de "
+#~ "les cançons (si n'hi ha cap) en el diàleg d'informació del fitxer."
+
+#~ msgid ""
+#~ "* Select SoundFont files *\n"
+#~ "In order to play MIDI with FluidSynth, you need to specify at least one "
+#~ "valid SoundFont file here (use absolute paths). The loading order is from "
+#~ "the top (first) to the bottom (last)."
+#~ msgstr ""
+#~ "* Selecció de fitxers SoundFont *\n"
+#~ "Per a reproduir fitxers MIDI amb el FluidSynth, heu d'especificar almenys "
+#~ "un fitxer SoundFont vàlid (useu camins absoluts). L'ordre de càrrega és "
+#~ "de dalt (primer) a baix (últim)."
+
+#~ msgid ""
+#~ "* Load SoundFont on player start *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Carrega la SoundFont en arrencar el reproductor *\n"
+#~ "Depenent de la velocitat del vostre sistema, la càrrega de SoundFonts pot "
+#~ "trigar uns quants segons. Aquesta tasca s'ha de fer un sol cop (la "
+#~ "SoundFont quedarà carregada fins que es canvii per una altra, o el fons "
+#~ "sigui descarregat), i es pot for quan arrenca el reproductor, o abans de "
+#~ "reproduir el primer fitxer MIDI (aquesta última és l'opció més "
+#~ "recomanable si no useu el reproductor per escoltar només fitxers MIDI)."
+
+#~ msgid ""
+#~ "* Load SoundFont on first midifile play *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Carrega la SoundFont abans de reproduir fitxers MIDI *\n"
+#~ "Depenent de la velocitat del vostre sistema, la càrrega de SoundFonts pot "
+#~ "trigar uns quants segons. Aquesta tasca s'ha de fer un sol cop (la "
+#~ "SoundFont quedarà carregada fins que es canvii per una altra, o el fons "
+#~ "sigui descarregat), i es pot for quan arrenca el reproductor, o abans de "
+#~ "reproduir el primer fitxer MIDI (aquesta última és l'opció més "
+#~ "recomanable si no useu el reproductor per escoltar només fitxers MIDI)."
+
+#~ msgid ""
+#~ "* Synthesizer gain *\n"
+#~ "From FluidSynth docs: the gain is applied to the final or master output "
+#~ "of the synthesizer; it is set to a low value by default to avoid the "
+#~ "saturation of the output when random MIDI files are played."
+#~ msgstr ""
+#~ "* Guany del sintetitzador *\n"
+#~ "De la documentació del FluidSynth: el guany s'aplica a la sortida final o "
+#~ "màster del sintetitzador; per defecte és un valor baix, per a evitar la "
+#~ "saturació de la sortida quan es reprodueixen fitxers MIDI arbitraris."
+
+#~ msgid ""
+#~ "* Synthesizer polyphony *\n"
+#~ "From FluidSynth docs: the polyphony defines how many voices can be played "
+#~ "in parallel; the number of voices is not necessarily equivalent to the "
+#~ "number of notes played simultaneously; indeed, when a note is struck on a "
+#~ "specific MIDI channel, the preset on that channel may create several "
+#~ "voices, for example, one for the left audio channel and one for the right "
+#~ "audio channels; the number of voices activated depends on the number of "
+#~ "instrument zones that fall in the correspond to the velocity and key of "
+#~ "the played note."
+#~ msgstr ""
+#~ "* Polifonia *\n"
+#~ "De la documentació del FluidSynth: la polifonia defineix quantes veus "
+#~ "poden ser reproduïdes en paral·lel; el nombre de veus no és "
+#~ "necessàriament equivalent al nombre de notes que sonen de forma "
+#~ "simultània; quan una nota sona en un canal MIDI específic, el perfil del "
+#~ "canal pot crear diverses veus, per exemple, una per al canal de so "
+#~ "esquerre i una altra per al canal dret; el nombre de veus que s'activen "
+#~ "depèn del nombre de zones d'instruments que s'activen, depenent de la "
+#~ "velocitat i la clau de la nota reproduïda."
+
+#~ msgid ""
+#~ "* Synthesizer reverb *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
+#~ "activated; note that when the reverb module is active, the amount of "
+#~ "signal sent to the reverb module depends on the \"reverb send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Reverberació del sintetitzador *\n"
+#~ "De la documentació del FluidSynth: aquesta opció activa el mòdul d'efecte "
+#~ "de reverberació; tingueu en compte que la quantitat de senyal que s'envia "
+#~ "al mòdul de reverberació depèn del generador \"reverb send\" definit a la "
+#~ "SoundFont."
+
+#~ msgid ""
+#~ "* Synthesizer chorus *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
+#~ "activated; note that when the chorus module is active, the amount of "
+#~ "signal sent to the chorus module depends on the \"chorus send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Cor del sintetitzador *\n"
+#~ "De la documentació de FluidSynth: aquesta opció activa el mòdul d'efecte "
+#~ "de cor; tingueu en compte que quan el mòdul de cor està actiu, la "
+#~ "quantitat de senyal enviada al mòdul de cor depèn del generador \"chorus "
+#~ "send\" definit a la SoundFont."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Synthesizer samplerate *\n"
+#~ "The sample rate of the audio generated by the synthesizer. You can also "
+#~ "specify a custom value in the interval 22050Hz-96000Hz."
+#~ msgstr ""
+#~ "* Freqüència de mostra del sintetitzador *\n"
+#~ "Freqüència de mostra de l'àudio que genera el sintetitzador. També podeu "
+#~ "especificar un valor pertanyent a l'interval 22050Hz-96000Hz.\n"
+#~ "NOTA: els buffers per defecte estan configurats per a 44100Hz; si canvieu "
+#~ "la freqüència de mostra potser haureu de canviar també els buffers per a "
+#~ "obtenir una qualitat de so bona."
+
+#~ msgid ""
+#~ "If enabled, the extension from the original filename will not be stripped "
+#~ "before adding the new file extension to the end."
+#~ msgstr ""
+#~ "Si està activat, l'extensió del nom de fitxer original no s'esborrarà "
+#~ "abans d'afegir una nova extensió al final."
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "millor/més lent:0;\n"
+#~ "pitjor/més ràpid:9;\n"
+#~ "recomanat:2;\n"
+#~ "per defecte:5;"
+
+#~ msgid "Adds 16 bit checksum to every frame"
+#~ msgstr "Afegeix una suma de verificació de 16 bits a cada marc"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "Flux de bits variable"
+
+#~ msgid "Average bitrate"
+#~ msgstr "Flux de bits mitjà"
+
+#~ msgid ""
+#~ "For use with players that do not support low bitrate mp3 (Apex AD600-A "
+#~ "DVD/mp3 player)"
+#~ msgstr ""
+#~ "Per a reproductors que no suporten MP3 amb flux de bits baixos "
+#~ "(reproductor DVD/MP3 Apex AD600-A)"
+
+#~ msgid ""
+#~ "highest:0;\n"
+#~ "lowest:9;\n"
+#~ "default:4;"
+#~ msgstr ""
+#~ "el més alt:0;\n"
+#~ "el més baix:9;\n"
+#~ "per defecte:4;"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "Mostra l'editor de llistes"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "Desa una llista de reproducció"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "Quant al driver Sun"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "Driver BSD Sun per a l'XMMS\n"
+#~ "\n"
+#~ "Copyright (C) 2001 CubeSoft Communications, Inc.\n"
+#~ "Mantenidor: <vedge at csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "Dispositiu de control d'àudio:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Mida del buffer (ms):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "Dispositiu de control del volum:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "L'XMMS usa el mesclador exclusivament."
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Configuració del driver Sun"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "Canvia el volum"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Intensitat de l'efecte:"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "Connector d'àudio FLAC "
+
+#, fuzzy
+#~ msgid "Stream browser"
+#~ msgstr "Explora..."
+
+#, fuzzy
+#~ msgid "Streambrowser"
+#~ msgstr "Explora..."
+
#~ msgid "PREAMP"
#~ msgstr "PREAMP"
@@ -6020,12 +6008,6 @@ msgstr ""
#~ "\n"
#~ "Tipus de fitxer desconegut: '%s'.\n"
-#~ msgid "Randomize List"
-#~ msgstr "Barreja la llista"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Reordena la llista de forma aleatòria."
-
#, fuzzy
#~ msgid "ALSA Gapless Output Plugin Preferences"
#~ msgstr "Connector d'Icona d'Estat - Preferències"
@@ -6346,10 +6328,6 @@ msgstr ""
#~ msgstr "Quant al connector "
#, fuzzy
-#~ msgid "Output plugin"
-#~ msgstr "Connector de sortida nul"
-
-#, fuzzy
#~ msgid "Throttle Output"
#~ msgstr "Quant a la sortida aRts"
@@ -6473,10 +6451,6 @@ msgstr ""
#~ "Desa les llistes de reproducció seleccionades a la ubicació per defecte."
#, fuzzy
-#~ msgid "_Rename"
-#~ msgstr "Nom del fitxer"
-
-#, fuzzy
#~ msgid "About Icecast-Plugin"
#~ msgstr "Quant al connector d'eco"
@@ -6747,21 +6721,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "Títol:"
-#~ msgid "Artist:"
-#~ msgstr "Artista:"
-
-#~ msgid "Album:"
-#~ msgstr "Àlbum:"
-
#~ msgid "Comment:"
#~ msgstr "Comentari:"
-#~ msgid "Year:"
-#~ msgstr "Any:"
-
-#~ msgid "Track number:"
-#~ msgstr "Número de pista:"
-
#~ msgid "Genre:"
#~ msgstr "Gènere:"
@@ -7006,9 +6968,6 @@ msgstr ""
#~ msgid "Musepack Tag"
#~ msgstr "Etiqueta Musepack"
-#~ msgid "Track:"
-#~ msgstr "Pista:"
-
#~ msgid "Musepack Info"
#~ msgstr "Informació Musepack"
@@ -7200,9 +7159,6 @@ msgstr ""
#~ msgid "auto-M/S mode"
#~ msgstr "mode auto-M/S"
-#~ msgid "_Random"
-#~ msgstr "_Aleatori"
-
#~ msgid "Show track numbers in playlist"
#~ msgstr "Mostra el número de pista a la llista de reproducció"
@@ -7919,14 +7875,6 @@ msgstr ""
#~ msgstr "Etiquetes Ogg Vorbis:"
#, fuzzy
-#~ msgid "Bit rate:"
-#~ msgstr "Para al cap de:"
-
-#, fuzzy
-#~ msgid "Length:"
-#~ msgstr "Durada (ms):"
-
-#, fuzzy
#~ msgid "File size:"
#~ msgstr "Mida del fitxer: %d octets"
diff --git a/po/cs.po b/po/cs.po
index caf5c38..aafe82c 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -3,7 +3,7 @@
# This file is distributed under the same license as the audacious-plugins
# package.
# Based on audacious-1.2.2.cs.po by Jan Nárovec <finn@sendmail.cz>, 2004.
-# Petr Pisar <petr.pisar@atlas.cz>, 2007, 2008, 2009, 2010.
+# Petr Pisar <petr.pisar@atlas.cz>, 2007, 2008, 2009, 2010, 2011.
#
# clicks (sound) → praskání, praskot 
# crossfade → přechod
@@ -19,18 +19,20 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: audacious-plugins 9cc8503d1935\n"
+"Project-Id-Version: audacious-plugins audacious-plugins-3.1-24-gf8985b0\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: 2010-06-14 22:39+0200\n"
+"POT-Creation-Date: 2011-11-20 21:26+0100\n"
+"PO-Revision-Date: 2011-11-20 21:30+0100\n"
"Last-Translator: Petr Písař <petr.pisar@atlas.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"g41e8449\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -41,454 +43,177 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM dekodér © Nero AG, www.nero.com\n"
"Copyright © 2005–2006 tým Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "O modulu dekodéru MP4 AAC"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "O "
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "O budíku"
-#: src/adplug/adplug-xmms.cc:157
+#: src/alarm/alarm.c:313
msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
+"Modul, kterým lze zaÄít pÅ™ehrávání v urÄitou dobu.\n"
"\n"
-"Copyright © 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Tento modul je uvolněn za podmínek licence GNU LGPL.\n"
-"Pro podrobnosti vizte http://www.gnu.org/licenses/lgpl.html.\n"
-"\n"
-"Tento modul používá knihovnu AdPlug, copyright © Simon Peter aj.\n"
-"Sestaveno s verzí knihovny AdPlug: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Nastavení"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "OK"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Zrušit"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Obecné"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Kvalita zvuku"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Rozlišení"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 bitů"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 bitů"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Kanály"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Nastavení sterea není doporuÄeno, pokud jej opravdu nepotÅ™ebujete. Tato "
-"volba nepřidává do zvuku žádné stereo efekty – OPL2 je prostě mono – ale "
-"spotřebovává více výkonu CPU!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frekvence"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Přehrát"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Rozpoznat konec skladby"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Je-li zapnuto, XMMS pozná konec skladby, zastaví ji a přejde na další ze "
-"seznamu skladeb. Je-li vypnuto, XMMS nebude reagovat na konec skladby a bude "
-"ji opakovat stále dokola."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formáty"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Výběr formátu"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Formát"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Přípona"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Vybrané druhy souborů budou rozpoznány a hrány tímto modulem. Nevybrané "
-"druhy budou ignorovány a přenechány ostatním modulům."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Informace o souboru"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Jméno souboru"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Název: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Velikost souboru: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Podskladby: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Nástroje: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Pořadí: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Vzorky: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Skladba"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Jméno nástroje"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Zpráva skladby"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Výběr podskladby"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Pořadí: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Vzorek: "
+"Původně napsali Adam Feakin a Daniel Stodden."
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Řada: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Rychlost: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "ÄŒasovaÄ: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "O XMMS budíku"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS budík"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"XMMS modul, který může být použit\n"
-"k naÄasovanému zahájení pÅ™ehrávání.\n"
-"\n"
-"Všechny stížnosti zasílejte na:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Zavřít"
-
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
msgstr "Budík"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
msgstr "Toto je váš budící signál."
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "Budiž"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Vybrat seznam skladeb"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Je mi líto"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Varování"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Z bezpeÄnostních důvodů musí být doba „ticha“ alespoň o 65 sekund delší než "
-"doba zesilování, také musí být delší než 10 sekund. Toto v zásadě znamená, "
-"že v kódu je chyba a dokud nezjistím, jak ji opravdu opravit, tato zpráva se "
-"bude zobrazovat :)\n"
-"\n"
-"Vaše nastavení zesilování NEBYLO uloženo.\n"
-"\n"
-"–\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Dobrá"
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
msgstr "Nastavení budíku"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "ÄŒas"
-#: src/alarm/interface.c:445
+# TODO: Pluralize
+#: src/alarm/interface.c:270
msgid "hours"
-msgstr "hodin"
+msgstr "h"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
msgstr "h"
-#: src/alarm/interface.c:536
+# TODO: Pluralize
+#: src/alarm/interface.c:361
msgid "minutes"
-msgstr "minut"
+msgstr "min"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
msgstr "Ticho po:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
msgstr "Budit v (standardní):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
msgstr "Vyberte dny, kdy má budík budit"
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
msgid "Default"
msgstr "Standardní"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Den"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Úterý"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Středa"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "ÄŒtvrtek"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "Pátek"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Sobota"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Neděle"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Pondělí"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Dny"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
msgstr "Zesilování"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+# TODO: Pluralize
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "sekund"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Hlasitost"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "SouÄasná"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "navrátit na souÄasnou hlasitost výstupu"
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
msgstr "ZaÄít na"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr "SkonÄit na"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
msgstr "DodateÄný příkaz"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
msgstr "zapnout"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
msgstr "Seznam skladeb (volitelné)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr "Procházet…"
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
msgstr "Upomínání"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
msgstr "Upomínat"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Nastavení"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
msgstr "Co tyto volby znamenají?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -563,14 +288,14 @@ msgstr ""
"\n"
"Hlasitost\n"
" Zesilování: \n"
-" Zesiluje až na vybranou hodnotu\n"
+" Zesiluje až na urÄenou úroveň\n"
" po vybranou dobu.\n"
"\n"
" ZaÄít na: \n"
-" Zesilovat zaÄne z této hlasitosti.\n"
+" Zesilovat zaÄne na této hlasitosti.\n"
"\n"
" SkonÄit na: \n"
-" Hlasitost na konci zesílení. Je-li doba zesilování 0,\n"
+" Hlasitost na konci zesílení. Je-li doba zesilování 0,\n"
" pak hlasitost bude tato.\n"
"\n"
"\n"
@@ -581,35 +306,40 @@ msgstr ""
" Seznam skladeb: \n"
" NaÄte tento seznam skladeb, z kterého bude hrát\n"
" (musí mít příponu .m3u). Není-li seznam zadán\n"
-" bude použity skladby, které budou v aktuálním\n"
+" budou použity skladby, které budou v aktuálním\n"
" seznamu skladeb.\n"
-" URL MP3/OGG proudu zde také může být zadáno,\n"
+" URL MP3/OGG proudu zde také může být zadáno,\n"
" ale naÄítání seznamu skladeb z URL není\n"
" v souÄasnosti podporováno.\n"
"\n"
" Upomínání:\n"
" Při vypnutí budíku zobrazí vzkaz.\n"
-" Text vzkazu vepiÅ¡te do vstupního pole a zapnÄ›te tlaÄítko,\n"
+" Text vzkazu vepiÅ¡te do vstupního pole a zapnÄ›te pÅ™epínaÄ,\n"
" přejete-li si zobrazovat vzkaz.\n"
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Nápověda"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
msgstr "Váš vzkaz pro dnešek je…"
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "Děkuji"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "Implicitní PCM zařízení"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Implicitní směšovací zařízení"
@@ -621,7 +351,7 @@ msgstr "Nastavení výstupního modulu ALSY"
msgid "PCM device:"
msgstr "Zařízení PCM:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "Zařízení směšovaÄe:"
@@ -633,15 +363,15 @@ msgstr "Prvek směšovaÄe:"
msgid "Work around drain hangup"
msgstr "Obejít zaseknutí při vyprazdňovaní"
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "O výstupním modulu ALSA"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "Chyba ALSY"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:325
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -673,11 +403,11 @@ msgstr ""
"události zaslané hardwarovému syntetizátoru budou hrány přímo jím.\n"
"Backend napsal Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "Becken FluidSynth"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -693,86 +423,43 @@ msgstr ""
"je zpracován vybraným výstupním modulem.\n"
"Backend napsal Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "NASTAVENÃ BACKANDU ALSY"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Jméno klientu"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Jméno portu"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "Výstupní port ALSY"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Zvuková karta: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Ovládání směšovaÄe: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Nastavení směšovaÄe"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Vyberte výstupní port ALSY *\n"
-"MIDI události budou zasílány portům zde vybraným. Na příklad pokud vaše "
-"zvuková karta poskytuje hardwarový syntetizátor a chcete-li jím přehrávat "
-"MIDI, budete pravděpodobně potřebovat vybrat porty tabulkového (wavetable) "
-"syntetizátoru."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Vyberte kartu se směšovaÄem ALSY *\n"
-"Backend ALSY posílá výstup přímo skrz ALSU. Efekty a výstupní moduly "
-"pÅ™ehrávaÄe nebudou použity. BÄ›hem pÅ™ehrávání jezdec ovládající hlasitost "
-"bude pracovat se směšovaÄem, který zde vyberete. Používáte-li porty "
-"tabulkového syntetizátoru, pravděpodobně zde budete chtít vybrat „Ovládání "
-"syntézy“."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Vyberte ovládání směšovaÄe ALSY *\n"
-"Backend ALSY posílá výstup přímo skrz ALSU. Efekty a výstupní moduly "
-"pÅ™ehrávaÄe nebudou použity. BÄ›hem pÅ™ehrávání jezdec ovládající hlasitost "
-"bude pracovat se směšovaÄem, který zde vyberete. Používáte-li porty "
-"tabulkového syntetizátoru, pravděpodobně zde budete chtít vybrat „Ovládání "
-"syntézy“."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "Backend ALSY není nahrán nebo není dostupný"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -780,151 +467,51 @@ msgstr ""
"<span size=\"smaller\">Backend\n"
"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug – podrobnosti o backendu"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "NASTAVENÃ AMIDI-PLUGU"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Výběr backendu"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Dostupné backendy"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Nastavení přehrávání"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Transponovat: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Posun bubnu: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "PokroÄilá nastavení"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "pÅ™edpoÄítat délku MIDI souborů v seznamu skladeb"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "vytáhnout komentáře z MIDI souboru (pokud existují)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "vytáhnout text z MIDI souboru (pokud existuje)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Výběr backendu *\n"
-"AMIDI-Plug pracuje s backendy modulárním způsobem. Zde byste si měli vybrat "
-"svůj backend, tj. způsob, jakým způsobem se bude zacházet s MIDI událostmi a "
-"jak budou hrány.\n"
-"Jestliže na zvukové kartě máte hardwarový syntetizátor a ALSA jej podporuje, "
-"je rozumné použít backend ALSY. Taktéž přijde vhod, máte cokoliv jiného, "
-"vÄetnÄ› softwarových syntetizátorů nebo vnÄ›jších zařízení, co má rozhraní "
-"k sekvenceru ALSY.\n"
-"Pokud se chcete spolehnout na softwarový syntetizátor a/nebo chcete zvuk "
-"protáhnout efektovými a výstupním modulem, dobrou volbou bude backend "
-"FluidSynth.\n"
-"Podrobnosti o jednotlivých backendech získáte pÅ™es tlaÄítko „Podrobnosti“."
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* Funkce transpozice *\n"
-"Tato volba nabízí transpozici přehrávaného MIDI souboru do jiné tóniny "
-"o zadaný poÄet půltónů (kromÄ› tónů 10. stopy, která je vyhrazena pro bicí). "
-"Tato funkce je užiteÄná, chcete-li doprovázet skladbu zpÄ›vem Äi jiným "
-"nástrojem."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Funkce posunu bubnů *\n"
-"Tato volba nabízí posun not na 10. MIDI kanále (standardní kanál pro bicí) "
-"o zadaný poÄet půltónů. Výsledkem je odliÅ¡ná sada bicích nástrojů použitá "
-"bÄ›hem pÅ™ehrávání. Takže chcete-li vylepÅ¡it (ztlumit Äi jinak pozmÄ›nit) zvuk "
-"bicích, pohrejte si s touto hodnotou."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* PÅ™edpoÄítat délku skladby *\n"
-"Pokud je tato funkce zapnuta, AMIDI-Plug vypoÄítá délku MIDI souboru "
-"okamžitÄ›, jak o ni pÅ™ehrávaÄ požádá. Jinak bude délka urÄena až pÅ™i prvním "
-"pÅ™ehrání. Na příklad délka skladby bude vypoÄtena ihned po pÅ™idání MIDI "
-"souboru do seznamu skladeb. Vypněte tuto funkci, požadujete-li rychlejší "
-"nahrávání seznamu skladeb (obzvláště má-li mnoho MIDI souborů), zapněte tuto "
-"funkci, potÅ™ebujete-li vidÄ›t délku skladeb ihned po naÄtení seznamu."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* Vytáhnout komentáře z MIDI souborů *\n"
-"Některé MIDI soubory obsahují textové komentáře (autora, autorská práva, "
-"poznámky k nástrojům apod.). Pokud je tato funkce zapnutá, AMIDI-Plug tyto "
-"komentáře zjistí a zobrazí v dialogu o podrobnostech souboru (pokud "
-"existují)."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* Vytáhnout text z MIDI souborů *\n"
-"Některé MIDI soubory obsahují text písně. Pokud je tato funkce zapnuta, "
-"AMIDI-Plug tento text získá a zobrazí v dialogu o podrobnostech souboru "
-"(pokud existuje)."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -932,230 +519,113 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug – vyberte soubor"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug – nastavení"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug – vyberte soundfontový soubor"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "NASTAVENÃ FLUIDSYNTH BACKENDU"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "Nastavení SoundFontu"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Jméno souboru"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Velikost (v bajtech):"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "SoundFont nahrát pÅ™i spuÅ¡tÄ›ní pÅ™ehrávaÄe"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "SoundFont nahrát při přehrání prvního MIDI souboru"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Nastavení syntetizátoru"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "zesílení"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "použít implicitní"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "hodnota:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "vícehlas"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "dozvuk"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "ano"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "ne"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "sbor"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "vzorkovací kmitoÄet"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "vlastní "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* Výběr SoundFont souborů *\n"
-"Abyste mohli pÅ™ehrávat MIDI pÅ™es FluidSynth, musíte urÄit alespoň jeden "
-"platný soundfontový soubor (použijte absolutní cesty). Pořadí nahrávání je "
-"od shora (první) dolů (poslední)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Nahrát SoundFont pÅ™i spuÅ¡tÄ›ní pÅ™ehrávaÄe *\n"
-"V závislosti na rychlosti vašeho systému nahrávání SoundFontu do FluidSynthu "
-"může trvat i několik sekund. Jedná se jednorázovou záležitost (soundfont "
-"zůstane nahraný, dokud jej nevyměníte nebo nezrušíte backend), která může "
-"být provedena bÄ›hem spouÅ¡tÄ›ní pÅ™ehrávaÄe nebo pÅ™ed zahájením produkce "
-"prvního MIDI souboru (druhá možnost je výhodnější, jestliže neplánujete "
-"poslouchat jen MIDI soubory)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Nahrát SoundFont před prvním MIDI souborem *\n"
-"V závislosti na rychlosti vašeho systému nahrávání SoundFontu do FluidSynthu "
-"může trvat i několik sekund. Jedná se jednorázovou záležitost (soundfont "
-"zůstane nahraný, dokud jej nevyměníte nebo nezrušíte backend), která může "
-"být provedena bÄ›hem spouÅ¡tÄ›ní pÅ™ehrávaÄe nebo pÅ™ed zahájením produkce "
-"prvního MIDI souboru (druhá možnost je výhodnější, jestliže neplánujete "
-"poslouchat jen MIDI soubory)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* Zesílení syntetizátoru *\n"
-"Z dokumentace FluidSynth: zesílení je aplikován na koneÄný nebo hlavní "
-"výstup syntetizátoru. Implicitně je nastaveno na nízkou hodnotu, aby se "
-"zabránilo ořezávání při přehrávání různorodých MIDI souborů."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* Vícehlas syntetizátoru *\n"
-"Z dokumentace FluidSynth: vícehlas urÄuje, kolik hlasů může hrát najednou. "
-"PoÄet hlasů není nezbytnÄ› shodný s poÄtem not hraných souÄasnÄ›. Ve "
-"skuteÄnosti když je nota vyslána na urÄitém MIDI kanálu, pÅ™edvolba na "
-"takovém kanálu může vytvořit více hlasů, na příklad jeden pro levý zvukový "
-"kanál a jeden pro pravý zvukový kanál. PoÄet aktivovaných hlasů závisí na "
-"poÄtu nástrojových zón, které spadají do odpovídající rychlosti a klíÄi "
-"hrané noty."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Dozvuk syntetizátoru *\n"
-"Z dokumentace FluidSynth: je-li nastaveno na „ano“, modul efektu dozvuku je "
-"aktivován. Pamatujte, že při aktivovaném modulu dozvuku je množství signálu "
-"zasílaného tomuto modulu závislé na generátoru „zasílání dozvuku“, který je "
-"definován v SoundFontu."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Sbor syntetizátoru *\n"
-"Z dokumentace FluidSynth: je-li nastaveno na „ano“, modul efektu sboru je "
-"aktivován. Pamatujte, že při aktivovaném modulu sboru je množství signálu "
-"zasílaného tomuto modulu závislé na generátoru „zasílání sboru“, který je "
-"definován v SoundFontu."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Vzorkovací frekvence syntetizátoru *\n"
-"Vzorkovací frekvence zvuku generovaného syntetizátorem. Lze zadat vlastní "
-"hodnotu z intervalu 22050 Hz–96000 Hz."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth backend není nahrán nebo není dostupný"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1179,8 +649,7 @@ msgstr ""
"<span size=\"smaller\">Backend\n"
"TiMidity</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr "Jméno:"
@@ -1356,119 +825,118 @@ msgstr "Obnovení přehrávání"
msgid "Triggers OSD when playback is unpaused."
msgstr "Spustí OSD, když přehrávání obnoveno."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "Umístění"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "Relativní odsazení ve směru osy X:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "Relativní odsazení ve směru osy Y"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "Maximální šířka OSD"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "Nastavení pro více monitorů"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "Zobrazit OSD na:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "všech monitorech"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "monitoru %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "Časování (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "Zobrazení:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "Rozsvícení:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "Pohasnutí:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "Fonty"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "Font %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "Stín"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "Internacionalizace"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Zakázat převod textu do UTF-8 (uvnitř aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "Vyberte soubor se skinem"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "Styl vyobrazení"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Barvy"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "Barvy %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "Vlastní skin:"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "Soubor se skinem:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:672
msgid "Browse"
msgstr "Procházet"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Povolit spouÅ¡tÄ›Ä"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Událost"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "Nalezen kompozitní správce"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1478,73 +946,72 @@ msgstr ""
"Pokud nevíte, že byste jste již nějakého spustili, prosím, aktivujte "
"kompozitního správce, jinak OSD nebude správně fungovat."
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "Při falešné průhlednosti není kompozitní správce potřeba"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Průhlednost"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Falešná průhlednost"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "SkuteÄná průhlednost (vyžaduje kompozitní rozšíření X)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "Kompozitní rozšíření není nahráno"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "Kompozitní rozšíření není dostupné"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>OSD Audacious</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "OSD pro Audacious – nastavení"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Vyzkoušet"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Umístění"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "Animace"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Text"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Výzdoba"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "SpouÅ¡tÄ›Ä"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Různé"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "OSD pro Audacious – o modulu"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1552,7 +1019,7 @@ msgstr ""
"\n"
"OSD pro Audacious "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1574,147 +1041,35 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "Požadavek na spárování „%s“"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "Požadavek na autorizaci %s"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "Vazba s %s vytvořena"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "Vazba s %s odstraněna"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "Zařízení bylo vypnuto"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "Zařízení bylo uÄinÄ›no neobjevitelným"
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "Zařízení bylo uÄinÄ›no pÅ™ipojitelným"
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "Zařízení bylo uÄinÄ›no objevitelným"
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "Zařízení bylo uÄinÄ›no omezenÄ› objevitelným"
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "Zařízení bylo přepnuto do režimu párování"
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "Modul podporující náhlavní sady s bluetooth"
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Podpora náhlavních sad s bluetooth\n"
-"Copyright © 2008 Paula Stanciu <paula.stanciu@gmail.com>\n"
-"Toto byl projekt GSoC 2008 – PodÄ›kování patří mému uÄiteli Tony Vroonovi a "
-"týmu Audacious\n"
-" \n"
-"Aby fungoval AVRCP, potřebuje zavést do jádra modul uinput.\n"
-"TlaÄítka náhlavní sady se tak budou jevit jako normální multimediální\n"
-"klávesy a mohou být nastaveny pomocí Audacious modulu Globální horké\n"
-"klávesy nebo jinými nástroji, které poskytuje váš správce oken.\n"
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Výrobce"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "Dostupné náhlavní sady"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "SouÄasná náhlavní sada"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "_Obnovit"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "_Spojit"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "_Zavřít"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Třída"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Adresa:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Vazba vytvořena!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Žádné zařízení nenalezeno!"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Vyhledává se…"
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Páruje se…"
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Znovu vyhledat"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Hrát"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur scope: výběr barvy"
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Volby:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Nastavení Bauerovy stereofonní-dvojušní transformace"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Úroveň přeslechu:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Ořezová frekvence:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Předvolby:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:241
msgid "About Audio CD Plugin"
msgstr "O zásuvném modulu zvukových CD"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1738,121 +1093,150 @@ msgstr ""
"Toto byl projekt z Google Summer of Code 2007.\n"
"Copyright 2009 John Lindgren"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:550
+msgid "Audio CD"
+msgstr "Zvukové CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:922
+msgid "Drive is empty."
+msgstr "Mechanika je prázdná"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Unsupported disk type."
+msgstr "Nepodporovaný druh disku."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Nastavení modulu pro zvuková CD"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Digitální získání zvuku"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Informace o titulu"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "Rychlost disku:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Pokud možno, použít cd-text"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Pokud možno, použít CDDB"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Server: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Cesta: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Použít HTTP místo CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Přebít výchozí zařízení: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "OK"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "Přehrát CD"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Přidat CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr "O modulu Komprese dynamického rozsahu"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr "Nastavení komprese dynamického rozsahu"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "Cílová hlasitost:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Hlasitost středu:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "Síla efektu:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Rozsah dynamiky:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Dekodér hudby pro herní konzole"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Obecné"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Přehrát"
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "Hloubky:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr "s"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Výšky:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "Implicitní délka skladby:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Převzorkování"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "Povolit převzorkování zvuku"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Převzorkovat na:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr "Ignorovat délku z SPC popisků"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Prodloužit dozvuk"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1876,29 +1260,29 @@ msgstr ""
"Implementace v Audacious: William Pitcock <nenold@dereferenced.org>,\n"
" Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "O modulu Crossfade (přechodu)"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Nastavení modulu Crossfade"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Přesah (v sekundách):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "Chyba přechodu"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
"UplatnÄ›ní použití pÅ™echodu selhalo, protože skladby mají jiný poÄet kanálů."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1911,20 +1295,20 @@ msgstr ""
"Skladby můžete převzorkovat na stejnou frekvenci pomocí efektu Převodníku "
"vzorkovací frekvence."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Nastavit krystalizér"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "Síla efektu:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Použít"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1936,695 +1320,262 @@ msgstr ""
"\n"
"Prostorovou ozvěnu přidal Carl van Schaik, 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "O modulu ozvěny"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Nastavit ozvěnu"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Zpoždění: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "Zpětná vazba: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "Hlasitost: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Přehrát → Hrát"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Přehrát → Zastavit"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Přehrát → Pozastavit"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Přehrát → Předchozí"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Přehrát → Další"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Přehrát → Vysunout"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Seznam skladeb → Opakovat"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Seznam skladeb → Náhodné přehrávání"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Hlasitost → Zvýšit o 5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Hlasitost → Snížit o 5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Hlasitost → Zvýšit o 10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Hlasitost → Snížit o 10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Hlasitost → Ztlumit"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Okno → Hlavní"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Okno → Seznam skladeb"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Okno → Ekvalizér"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Okno → Přejít na soubor"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: nelze otevřít zařízení %s, přeskakuji toto zařízení; "
-"zkontrolujte, že soubor existuje a že máte právo jej Äíst\n"
-
-#: src/evdev-plug/ed_internals.c:103
+#: src/ffaudio/ffaudio-core.c:794
#, c-format
msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: nelze vytvořit io_channel (vstupně-výstupní kanál) pro "
-"zařízení %s, přeskakuji toto zařízení\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: nelze otevřít /proc/bus/input/devices, samoÄinné "
-"vyhledávání událostních zařízení nebude fungovat.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: nelze otevřít io_channel (vstupně-výstupní kanál) pro /"
-"proc/bus/input/devices, samoÄinné vyhledávání událostních zařízení nebude "
-"fungovat.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: doÅ¡lo k chybÄ› pÅ™i Ätení z /proc/bus/input/devices, "
-"samoÄinné vyhledávání událostních zařízení nebude fungovat.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: zařízení %s nebylo nalezeno v /dev/input, přeskakuji.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: nelze naÄíst konfiguraÄní soubor %s, bude použito "
-"implicitní nastavení.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: neúplné informace v konfiguraÄním souboru pro zařízení "
-"„%s“, přeskakuji.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurace: nelze získat hodnotu is_active pro "
-"zařízení „%s“, přeskakuji.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: nelze přistoupit k místnímu adresáři %s, nastavení "
-"nebude uloženo.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurace: nelze získat hodnotu filename pro zařízení "
-"„%s“, přeskakuji.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurace: nelze získat hodnotu phys pro zařízení "
-"„%s“, přeskakuji.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurace: nelze získat hodnotu is_custom pro "
-"zařízení „%s“, přeskakuji.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurace: neoÄekávaná hodnot pro zařízení „%s“, "
-"přeskakuji.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Nalezeno"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "Vlastní"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Nenalezeno"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Podrobnosti"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Nelze otevřít okno s vazbami pro nerozpoznané zařízení.\n"
-"Ujistěte se, že zařízení bylo správně zapojeno."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Chyba"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Nelze otevřít vybrané zařízení.\n"
-"Prosím, zkontrolujte práva k tomuto zařízení."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug  – Přidat vlastní zařízení"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug zkusí sám rozpoznat událostní zařízení připojená do systému\n"
-"a aktualizovat údaje o nich.\n"
-"Pokud vÅ¡ak samoÄinné vyhledání selže nebo máte událostní zařízení\n"
-"v nestandardním adresáři (v souÄasnosti je prohledáván jen /dev/input),\n"
-"můžete pÅ™idat zařízení ruÄnÄ› jako vlastní, pÅ™iÄemž budete muset zadat\n"
-"jeho název a soubor tohoto zařízení."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Název zařízení:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Soubor zařízení:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(vlastní)"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Prosím, zadejte jak název, tak název souboru.\n"
-"Název souboru musí být uveden s absolutní cestou."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "Přejete si odstranit existující nastavení pro vybrané zařízení?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Přejete si odstranit vybrané vlastní zařízení?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug – Nastavení"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktivní"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Stav"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Název zařízení"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Soubor zařízení"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Adresa zařízení"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Vazby"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Pro navázání, prosím, stiskněte klávesu na vašem zařízení;\n"
-"pokud nebude stištěna žádná klávesa do pěti sekund,\n"
-"toto okno bude zavřeno, aniž by se vazba změnila."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Vstupní událost již byla přiřazena.\n"
-"\n"
-"Není možné pÅ™iÅ™adit více akcí stejné vstupní události (aÄkoliv je možné "
-"přiřadit stejnou akci více událostem)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug – Nastavení vazeb"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Název: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Název souboru: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Fyzická adresa: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug – o modulu"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"dálkové ovládání pÅ™ehrávaÄe pomocí událostních zařízení\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"napsal Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
-#, fuzzy, c-format
-msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
"Víceformátový zvuk dekódující modul pro Audacious založený na\n"
"multimediálním systému FFmpeg (http://www.ffmpeg.org/)\n"
"Copyright © 2000–2009 Fabrice Bellard aj.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
-"Podporované formáty: %s\n"
-"\n"
"Modul do Audacious napsali:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:808
msgid "About FFaudio Plugin"
msgstr "O modulu FFaudio"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr "O modulu FileWriter"
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Modul FileWriter\n"
-"\n"
-"Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
-"pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
-"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
-"libovolné novější.\n"
-"\n"
-"Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
-"ZÃRUKY a to ani odvozené záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
-"JAKÃKOLIV ÚČEL. Více informací naleznete v GNU GPL.\n"
-"\n"
-"S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
-"tak nestalo, obraťte se na Free Software Foundation, Inc.,\n"
-"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:455
msgid "File Writer Configuration"
msgstr "Nastavení zápisu do souboru"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:467
msgid "Output file format:"
msgstr "Formát výstupního souboru:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:485
msgid "Configure"
msgstr "Nastavit"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:500
msgid "Save into original directory"
msgstr "Ukládat do původního adresáře"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:505
msgid "Save into custom directory"
msgstr "Ukládat do vlastního adresáře"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:515
msgid "Output file folder:"
msgstr "Složka s výstupními soubory:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:519
msgid "Pick a folder"
msgstr "Vybrat složku"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:538
msgid "Get filename from:"
msgstr "Získat jméno souboru z:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:541
msgid "original file tags"
msgstr "původních znaÄek v souboru"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:547
msgid "original filename"
msgstr "jména původního souboru"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:557
msgid "Don't strip file name extension"
msgstr "Nezkracovat příponu jména souboru"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Je-li zapnuto, přípona ze jména původního souboru nebude před přidáním nové "
-"přípony odstraněna."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:572
msgid "Prepend track number to filename"
msgstr "PÅ™edÅ™adit jménu souboru Äíslo stopy"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:771
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint-stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:712
msgid "MP3 Configuration"
msgstr "Nastavení MP3"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:735
msgid "Algorithm Quality:"
msgstr "Kvalita algoritmu:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"nejlepší/nejpomalejší:0;\n"
-"nejhorší/nejrychlejší:9;\n"
-"doporuÄená:2;\n"
-"výchozí:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:760
msgid "Output Samplerate:"
msgstr "Výstupní vzorkovací kmitoÄet"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Auto"
-
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:788
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:795
msgid "Bitrate / Compression ratio:"
msgstr "Datový tok / Kompresní poměr:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:819
msgid "Bitrate (kbps):"
msgstr "Datový tok (kb/s):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:852
msgid "Compression ratio:"
msgstr "Kompresní poměr:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:876
msgid "Audio Mode:"
msgstr "Zvukový režim:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Joint-Stereo"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:901
msgid "Misc:"
msgstr "Různé:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:912
msgid "Enforce strict ISO complience"
msgstr "Vynutit přísnou shodu s ISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:923
msgid "Error protection"
msgstr "Ochrana před chybami"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Ke každému rámci pÅ™idat 16b kontrolní souÄet"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:935 src/filewriter/vorbis.c:243
msgid "Quality"
msgstr "Kvalita"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:945
msgid "Enable VBR/ABR"
msgstr "Povolit VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:955
msgid "Type:"
msgstr "Druh:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Proměnný datový tok"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Průměrný datový tok"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:988
msgid "VBR Options:"
msgstr "Nastavení VBR:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1004
msgid "Minimum bitrate (kbps):"
msgstr "Nejmenší datový tok (kb/s):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1031
msgid "Maximum bitrate (kbps):"
msgstr "Největší datový tok (kb/s):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1054
msgid "Strictly enforce minimum bitrate"
msgstr "Přísně vynucovat nejmenší datový tok"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Pro použití v pÅ™ehrávaÄích, které nepodporují úzkopásmové MP3 (pÅ™ehrávaÄ "
-"Apex AD600-A DVD/MP3)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1066
msgid "ABR Options:"
msgstr "Nastavení ABR:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1076
msgid "Average bitrate (kbps):"
msgstr "Průměrný datový tok (kb/s):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1104
msgid "VBR quality level:"
msgstr "Úroveň kvality VBR:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"nejvyšší:0;\n"
-"nejnižší:9;\n"
-"výchozí:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1123
msgid "Don't write Xing VBR header"
msgstr "Nezapisovat VBR hlaviÄku Xing"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1137
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1147
msgid "Frame params:"
msgstr "Parametry rámců:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1159
msgid "Mark as copyright"
msgstr "OznaÄit jako podléhající autorskému právu"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1170
msgid "Mark as original"
msgstr "OznaÄit jako původní"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1182
msgid "ID3 params:"
msgstr "Parametry ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1193
msgid "Force addition of version 2 tag"
msgstr "Vynutit přidání popisků verze 2"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1203
msgid "Only add v1 tag"
msgstr "Přidávat jen popisky verze 1"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1210
msgid "Only add v2 tag"
msgstr "Přidávat jen popisky verze 2"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1231
msgid "Tags"
msgstr "Popisky"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:236
msgid "Vorbis Encoder Configuration"
msgstr "Nastavení vorbis kodéru"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:256
msgid "Quality level (0 - 10):"
msgstr "Úroveň kvality (0–10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "Zvukový modul FLAC"
+#: src/flacng/plugin.c:378
+msgid "About FLAC Audio Plugin"
+msgstr "O zvukovém modulu FLAC"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:379
msgid ""
"\n"
"\n"
@@ -2640,15 +1591,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "O zvukovém modulu FLAC"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "O modulu pro zkratky Gnome"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2662,487 +1609,449 @@ msgstr ""
"Copyright © 2007–2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr "Otevřít soubory"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
msgid "Add Files"
msgstr "Přidat soubory"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
msgid "Audacious2"
msgstr "Audacious2"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr "Rozhraní gnt"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "Když nehraje žádná skladba, nelze pÅ™ejít na Äas.\n"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Číslo položky"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "PÅ™ejít na Äas"
+#: src/gtkui/columns.c:36
+msgid "Title"
+msgstr "Název"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "minuty:sekundy"
+#: src/gtkui/columns.c:37
+msgid "Artist"
+msgstr "Umělec"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Délka stopy:"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Rok"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Chyba při zapisování seznamu skladeb „%s“: %s"
+#: src/gtkui/columns.c:37
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s už existuje. PokraÄovat?"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Stopa"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "Exportovat seznam skladeb"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Umístění ve frontě"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "Importovat seznam skladeb"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Délka"
-#: src/gtkui/ui_gtk.c:72
-#, fuzzy
-msgid "GTK Interface"
-msgstr "Rozhraní gnt"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Cesta k souboru"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s – Audacious"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Název souboru"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Vlastní název"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "Zastavit po souÄasné skladbÄ›"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Datový tok"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Opakovat"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Vybrat sloupce"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Náhodné přehrávání"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Dostupné:"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Žádné pokraÄování dle seznamu skladeb"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Vybráno:"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Zobrazit seznamy skladeb"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Umístit vlevo"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Zobrazit/skrýt seznamy skladeb"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Umístit vpravo"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Umístit nahoru"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Umístit dolů"
-#: src/gtkui/ui_manager.c:53
-#, fuzzy
-msgid "Show main menu"
-msgstr "Zobrazit hlavním okno pÅ™ehrávaÄe"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Neumisťovat"
-#: src/gtkui/ui_manager.c:54
-#, fuzzy
-msgid "Show/hide main menu"
-msgstr "Zobrazit/skrýt seznamy skladeb"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:643
+msgid "Disable"
+msgstr "Zakázat"
-#: src/gtkui/ui_manager.c:56
-#, fuzzy
-msgid "Show statusbar"
-msgstr "Stav"
+#: src/gtkui/menus.c:130
+msgid "_Open Files ..."
+msgstr "_Otevřít soubory…"
-#: src/gtkui/ui_manager.c:57
-#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Zobrazit/skrýt seznamy skladeb"
+#: src/gtkui/menus.c:131
+msgid "Open _URL ..."
+msgstr "Otevřít _URL…"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pozastavit"
+#: src/gtkui/menus.c:132
+msgid "_Add File ..."
+msgstr "Přid_at soubor…"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Zastavit"
+#: src/gtkui/menus.c:133
+msgid "Add U_RL ..."
+msgstr "Přidat U_RL…"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Předchozí"
+#: src/gtkui/menus.c:135
+msgid "A_bout ..."
+msgstr "_O programu… "
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Další"
+#: src/gtkui/menus.c:136
+msgid "_Preferences ..."
+msgstr "Nasta_vení…"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Seznam skladeb"
+#: src/gtkui/menus.c:137 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Konec"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Nový seznam skladeb"
+#: src/gtkui/menus.c:140
+msgid "_Play"
+msgstr "_Hrát"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Smazat seznam skladeb"
+#: src/gtkui/menus.c:141
+msgid "Paus_e"
+msgstr "P_ozastavit"
-#: src/gtkui/ui_manager.c:92
-#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Importovat seznam skladeb"
+#: src/gtkui/menus.c:142
+msgid "_Stop"
+msgstr "Za_stavit"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "NaÄte soubor se seznamem skladeb do vybraného seznamu."
+#: src/gtkui/menus.c:143
+msgid "Pre_vious"
+msgstr "Před_chozí"
-#: src/gtkui/ui_manager.c:95
-#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Exportovat seznam skladeb"
+#: src/gtkui/menus.c:144
+msgid "_Next"
+msgstr "_Další"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Uloží vybraný seznam skladeb."
+#: src/gtkui/menus.c:146
+msgid "_Repeat"
+msgstr "_Opakovat"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Uložit všechny seznamy skladeb"
+#: src/gtkui/menus.c:147
+msgid "S_huffle"
+msgstr "Ná_hodné přehrávání"
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-"Uloží všechny seznamy skladeb, které jsou otevřeny. Vezměte na vědomí, že "
-"toto bude rovněž provedeno pÅ™i ukonÄení Audacious."
+#: src/gtkui/menus.c:148
+msgid "N_o Playlist Advance"
+msgstr "Žádné p_okraÄování dle seznamu skladeb"
-#: src/gtkui/ui_manager.c:103
-#, fuzzy
-msgid "Refresh"
-msgstr "_Obnovit"
+#: src/gtkui/menus.c:149
+msgid "Stop _After This Song"
+msgstr "Z_astavuje po skladbÄ›."
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Obnovuje metadata náležící skladbě ze seznamu."
+#: src/gtkui/menus.c:151 src/gtkui/menus.c:209
+msgid "Song _Info ..."
+msgstr "_Informace o skladbě…"
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "Správce seznamů skladeb"
+#: src/gtkui/menus.c:152
+msgid "Jump to _Time ..."
+msgstr "PÅ™ejí_t na Äas…"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Otevře správce seznamu skladeb."
+#: src/gtkui/menus.c:153
+msgid "_Jump to Song ..."
+msgstr "Pře_jít na skladbu…"
-#: src/gtkui/ui_manager.c:111
-#, fuzzy
-msgid "Add URL ..."
-msgstr "Přidat soubory…"
+#: src/gtkui/menus.c:156
+msgid "By Track _Number"
+msgstr "Podle Äísla _stopy"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Do seznamu přidá vzdálenou stopu."
+#: src/gtkui/menus.c:157
+msgid "By _Title"
+msgstr "Podle ná_zvu"
-#: src/gtkui/ui_manager.c:115
-#, fuzzy
-msgid "Add Files ..."
-msgstr "Přidat soubory…"
+#: src/gtkui/menus.c:158
+msgid "By _Artist"
+msgstr "Podle _umělce"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Přidá soubory do seznamu skladeb."
+#: src/gtkui/menus.c:159
+msgid "By A_lbum"
+msgstr "Podle a_lba"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Odebrat všechny"
+#: src/gtkui/menus.c:160
+msgid "By Release _Date"
+msgstr "Podle data vy_dání"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Ze seznamu odstraní všechny skladby."
+#: src/gtkui/menus.c:161
+msgid "By _File Path"
+msgstr "Podle _cesty k souboru"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Odebrat neoznaÄené"
+#: src/gtkui/menus.c:162
+msgid "By _Custom Title"
+msgstr "_Vlastní název"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Odebrat neoznaÄené skladby se seznamu."
+#: src/gtkui/menus.c:164
+msgid "R_everse Order"
+msgstr "_Obrátit pořadí"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Odebrat oznaÄené"
+#: src/gtkui/menus.c:165
+msgid "_Random Order"
+msgstr "Ná_hodné pořadí"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Odebrat oznaÄené skladby ze seznamu."
+#: src/gtkui/menus.c:168 src/gtkui/menus.c:211
+msgid "_Refresh"
+msgstr "_Obnovit"
-#: src/gtkui/ui_manager.c:131
-#, fuzzy
-msgid "Sort"
-msgstr "Port"
+#: src/gtkui/menus.c:170
+msgid "_Sort"
+msgstr "_Seřadit"
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "Podle Äísla stopy"
+#: src/gtkui/menus.c:172
+msgid "_New"
+msgstr "_Nový"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "Podle názvu"
+#: src/gtkui/menus.c:173 src/gtkui/menus.c:222
+msgid "_Close"
+msgstr "_Zavřít"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "Podle umělce"
+#: src/gtkui/menus.c:175
+msgid "_Import ..."
+msgstr "_Importovat…"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "Podle alba"
+#: src/gtkui/menus.c:176
+msgid "_Export ..."
+msgstr "_Exportovat…"
-#: src/gtkui/ui_manager.c:140
-#, fuzzy
-msgid "By File Path"
-msgstr "Cesta k souboru"
+#: src/gtkui/menus.c:178
+msgid "_Playlist Manager ..."
+msgstr "S_právce seznamů skladeb…"
-#: src/gtkui/ui_manager.c:142
-#, fuzzy
-msgid "Reverse Order"
-msgstr "Obrátit vyvážení"
+#: src/gtkui/menus.c:179
+msgid "_Queue Manager ..."
+msgstr "Správce _fronty…"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Výstup"
+#: src/gtkui/menus.c:182
+msgid "Volume _Up"
+msgstr "Ze_sílit"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efekty"
+#: src/gtkui/menus.c:183
+msgid "Volume _Down"
+msgstr "Z_tišit"
-#: src/gtkui/ui_manager.c:151
-#, fuzzy
-msgid "Equalizer"
-msgstr "BMP ekvalizér"
+#: src/gtkui/menus.c:185
+msgid "_Equalizer"
+msgstr "_Ekvalizér"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Zobrazení"
+#: src/gtkui/menus.c:187
+msgid "E_ffects"
+msgstr "E_fekty"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-#, fuzzy
-msgid "Interface"
-msgstr "Rozhraní gnt"
+#: src/gtkui/menus.c:190
+msgid "_Interface"
+msgstr "_Rozhraní"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Soubor"
+#: src/gtkui/menus.c:192
+msgid "Show _Menu Bar"
+msgstr "Zobrazit h_lavní nabídku"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "SouÄásti"
+#: src/gtkui/menus.c:193
+msgid "Show I_nfo Bar"
+msgstr "Zobrazit oblast i_nformací"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Zobrazit informace o skladbÄ›"
+#: src/gtkui/menus.c:194
+msgid "Show _Status Bar"
+msgstr "Zobrazit _stavový panel"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Zobrazit informace o skladbÄ›"
+#: src/gtkui/menus.c:196
+msgid "Show Column _Headers"
+msgstr "Zobrazit zá_hlaví sloupců"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "O Audacious"
+#: src/gtkui/menus.c:197
+msgid "Choose _Columns ..."
+msgstr "Vybrat sloup_ce…"
-#: src/gtkui/ui_manager.c:178
-#, fuzzy
-msgid "Open Files ..."
-msgstr "Otevřít soubory"
+#: src/gtkui/menus.c:198
+msgid "Scrol_l on Song Change"
+msgstr "Odro_lovat na změněnou skladbu"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "NaÄíst a pÅ™ehrát soubor"
+#: src/gtkui/menus.c:201
+msgid "_File"
+msgstr "_Soubor"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr ""
+#: src/gtkui/menus.c:202
+msgid "_Playback"
+msgstr "_Přehrát"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Hrát média z vybraného místa"
+#: src/gtkui/menus.c:203
+msgid "P_laylist"
+msgstr "Seznam sk_ladeb"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Služby modulů"
+#: src/gtkui/menus.c:204 src/gtkui/menus.c:218
+msgid "_Services"
+msgstr "_Služby"
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Nastavení"
+#: src/gtkui/menus.c:205
+msgid "_Output"
+msgstr "_Výstup"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Otevřít okno s nastavením"
+#: src/gtkui/menus.c:206
+msgid "_View"
+msgstr "_Zobrazení"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "_Konec"
+#: src/gtkui/menus.c:210
+msgid "_Queue/Unqueue"
+msgstr "Ode_brat/přidat z/do fronty"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "O Audacious"
+#: src/gtkui/menus.c:213
+msgid "Cu_t"
+msgstr "V_yjmout"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "Nastavit A-B"
+#: src/gtkui/menus.c:214
+msgid "_Copy"
+msgstr "_Kopírovat"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Vyprázdnit A-B"
+#: src/gtkui/menus.c:215
+msgid "_Paste"
+msgstr "V_ložit"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "PÅ™ejít na zaÄátek seznamu skladeb"
+#: src/gtkui/menus.c:216
+msgid "Select _All"
+msgstr "Vybr_at vše"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Přejít na soubor"
+#: src/gtkui/menus.c:221
+msgid "_Rename"
+msgstr "_Přejmenovat"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Přepnout frontu"
-
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Povolí/zakáže položku ve frontě seznamu skladeb."
-
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Kopírovat"
-
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Oříznout"
-
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Vložit"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Rozhraní GTK"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Vybrat vše"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:302
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s – Audacious"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Vybere všechny skladby v seznamu."
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Plnění vyrovnávácí paměti…"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Nevybrat žádné"
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:304 src/skins/ui_main.c:1499
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Žádná skladba v seznamu nebude vybraná."
+#: src/gtkui/ui_gtk.c:211 src/skins/plugin.c:183
+msgid "Error"
+msgstr "Chyba"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:103 src/skins/ui_main.c:459
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:458
msgid "stereo"
msgstr "stereo"
-#: src/gtkui/ui_statusbar.c:97
-#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Kanály"
+#: src/gtkui/ui_statusbar.c:107
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d kanál"
+msgstr[1] "%d kanály"
+msgstr[2] "%d kanálů"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:122
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr ""
+msgid "%d kbps"
+msgstr "%d kb/s"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Předchozí stopa"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Hrát"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Pozastavit/PokraÄovat"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Zastavit"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Další stopa"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "O 5 sekund vpřed"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "O 5 sekund zpět"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Vypnout zvuk"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Zesílit"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Ztišit"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to File"
+msgstr "Přejít na soubor"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "PÅ™epnout okna pÅ™ehrávaÄe"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "Zobrazit OSD (nápis na obrazovce)"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Přepnout opakování"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Přepnout náhodné přehrávání"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(žádné)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3153,15 +2062,15 @@ msgstr ""
"\n"
"Chcete pokraÄovat?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "PÅ™iÅ™azuji tlaÄítka myÅ¡i"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Hlavní nastavení modulu pro horké klávesy"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3169,23 +2078,23 @@ msgstr ""
"Uvnitř textového pole stiskněte kombinaci kláves.\n"
"Navázat lze také tlaÄítka myÅ¡i."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Horké klávesy:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Akce</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Navázání kláves:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "O modulu Global Hotkey"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3214,31 +2123,31 @@ msgstr ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr "Připojit se na všechny dostupné porty jacku"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr "Připojit se pouze na výstupní porty"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr "Na žádné porty se nepřipojovat"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr "Nastavení modulu jack"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
msgstr "Režim připojení:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr "Povolit ladící výpisy"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:422
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3256,148 +2165,83 @@ msgstr ""
"Pro Audacious převedl\n"
"Giacomo Lozito z develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:427
msgid "About JACK Output Plugin 0.17"
msgstr "O výstupním modulu JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Tento LADSPA modul nemá žádné možnosti nastavení uživatelem"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Jméno"
+#: src/ladspa/plugin.c:414
+msgid "About LADSPA Host"
+msgstr "O hostiteli LADSPA"
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
+#: src/ladspa/plugin.c:515
+#, c-format
+msgid "%s Settings"
+msgstr "Nastavení %s"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Nainstalované moduly"
+#: src/ladspa/plugin.c:583
+msgid "LADSPA Host Settings"
+msgstr "Nastavení hostitele LADSPA"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Bežící moduly"
+#: src/ladspa/plugin.c:592
+msgid "Module paths:"
+msgstr "Cesta k modulům:"
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Přidat"
+#: src/ladspa/plugin.c:597
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Cesty se od sebe oddÄ›lují dvojteÄkou.\n"
+"Tyto cesty se prohledávají spolu s LADSPA_PATH.\n"
+"Po té, co přidáte novou cestu, je třeba stisknout Enter, aby se vyhledaly "
+"nové moduly.</small>"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Odebrat"
+#: src/ladspa/plugin.c:613
+msgid "Available plugins:"
+msgstr "Dostupné moduly:"
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "Katalog LADSPA modulů"
+#: src/ladspa/plugin.c:625
+msgid "Enable"
+msgstr "Povolit"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "O modulu LIRC pro Audacious"
+#: src/ladspa/plugin.c:631
+msgid "Enabled plugins:"
+msgstr "Povolené moduly:"
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "Modul LIRC "
+#: src/ladspa/plugin.c:646
+msgid "Settings"
+msgstr "Nastavení"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:269
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"Jednoduchý modul, který vám dovolí ovládat Audacious\n"
-"prostřednictvím démona dálkového ovládání LIRC.\n"
-"\n"
-"Pro Audacious upravil Tony Vroon <chainsaw@gentoo.org>\n"
-"z XMMS LIRC modulu, jehož tvůrci jsou:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"Informace o LIRC lze získat na:\n"
-"http://lirc.org/"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "Nastavení modulu LIRC"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Znovu se připojit k serveru LIRC"
+"Vyhledává se text…"
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Časový limit pro znovupřipojení (sekundy): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Znovu se připojit"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Spojení"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: nelze inicializovat podporu LIRC\n"
-
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:293
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: nelze Äíst z konfiguraÄního souboru LIRC\n"
-"%s: prosím, pÅ™eÄtÄ›te si dokumentaci k LIRC,\n"
-"%s: jak správnÄ› vytvoÅ™it konfiguraÄní soubor\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: pokouším se znovu připojit…\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: neznámý příkaz „%s“\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: odpojeno od LIRC\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: pokus o připojení budu opakovat každých %d sekund…\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"Připoje se k lyrics.wikia.com…"
-#: src/lyricwiki/lyricwiki.c:337
-#, fuzzy
+#: src/lyricwiki/lyricwiki.c:381
msgid ""
"\n"
"No lyrics were found."
-msgstr "Žádné zařízení nenalezeno!"
+msgstr ""
+"\n"
+"Žádné texty nebyly nalezeny."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "O metronomu"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3411,267 +2255,61 @@ msgstr ""
"např. tact://77 hraje 77 úderů za minutu\n"
"nebo tact://60*3/4 hraje v tempu 60 úderu za minutu v 3â„4 taktu"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Generátor taktu: %d dob/min"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Generátor taktu: %d dob/min %dâ„%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "Nastavení ModPlugu"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bitů"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bitů"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Mono (smísit kanály)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "Nejbližší (nejrychlejší)"
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "O směšovaÄi kanálů"
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Lineární (rychlé)"
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Nastavení směšovaÄe kanálů"
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Spline (kvalitní)"
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Výstupní kanály:"
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "FIR filtr osmého řádu (velmi kvalitní)"
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Změny se projeví při přepnutí na další skladbu."
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 kHz "
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Vzorkovací kmitoÄet"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Povolit"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Hloubka"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Zpoždění"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Dozvuk"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Množství"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Rozsah"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Zvýraznění hlubokých tónů"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr "Prostorový zvuk"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Poznámka: Vysoké hodnoty\n"
-"předzesílení mohou vést k ořezu\n"
-"zvuku (obtěžující praskání)!"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Předzesílení"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Použít jméno souboru jako název skladby"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Rychlé informace o seznamu skladeb"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Redukce Å¡umu"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Hrát MODY z Amigy"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Nevracet se ve smyÄce"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Opakovat"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "×"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "NekoneÄná smyÄka"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "SmyÄky"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "Informace o MODU"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Jméno souboru:\n"
-"Název skladby:\n"
-"Typ:\n"
-"Délka:\n"
-"Rychlost:\n"
-"Tempo:\n"
-"Vzorků:\n"
-"Nástrojů:\n"
-"Vzory:\n"
-"Kanálů:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Vzorky"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Nástroje"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Vzkaz"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Vstupní modul pro Audacious Modplug verze "
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Zvukové jádro Modplugu napsal Olivier Lapicque.\n"
-"XMMS rozhraní Modplugu od Kentona Varda.\n"
-"© 2000 Olivier Lapicque a Kenton Varda.\n"
-"Aktualizuje a udržuje Konstanty Bialkowski.\n"
-"Na BMP převedl Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "O modulu Modplug"
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
+msgstr "Nahrává se…"
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Nebylo možné nalézt soubor s pixmapou: %s"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
+msgstr "Nahrát do zařízení MTP"
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Nahrát vybranou stopu(y)"
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
+msgstr "Odpojit zařízení MTP"
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr "Nahrávám…"
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Stopped"
+msgstr "Zastaveno"
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "Deskriptor MTP zařízení"
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Audacious is not playing."
+msgstr "Audacious nyní nehraje."
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "Odpojit zařízení"
-
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
-msgstr "Slepý výstupní modul "
+msgstr "Hluchý výstupní modul "
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3679,123 +2317,88 @@ msgstr ""
" napsal Christian Birchinger <joker@netswaje.net>\n"
"založeno na modulu pro XMMS, jehož autor je Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "O slepém výstupu"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Nastavení slepého výstupu"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr "Běžet v reálném Äase"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
msgstr "1. Implicitní zařízení"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
msgstr "Nastavení výstupního modulu OSS4"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
msgstr "Zvukové zařízení:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr "Použít jiné zařízení:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
msgstr "Mezi relacemi ukládat hlasitost"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
msgstr "Zapnout převody formátu prostřednictvím OSS."
-#: src/oss4/plugin.c:54
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Zabránit virtuálnímu směšování použitím výluÄného režimu."
+
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
msgstr "O modulu OSS4"
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-"Výstupní modul OSS4 pro Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"Rád bych poděkoval lidem na #audacious, zvláště Tony Vroonovi a Johnu "
-"Lindgrenovi a samozřejmě autorům předchozího modulu OSS.\n"
-"\n"
-"Tento program je svobodný software; můžete jej šířit a/nebo měnit\n"
-"v souladu s podmínkami GNU General Public License (GPL) vydané\n"
-"Free Software Foundation a to buÄ ve verzi 3 nebo (dle vaší volby)\n"
-"libovolné novější.\n"
-"\n"
-"Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
-"ZÃRUKY, a to ani odvozené záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
-"URČITà ÚČEL. Více informací najdete v GNU GPL.\n"
-"\n"
-"S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
-"tak nestalo, vizte <http://www.gnu.org/licenses/>.\n"
-
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
msgstr "Chyba OSS4"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "StandardnÄ› (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "Nastavení ovladaÄe OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "Zařízení"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "Vyrovnávání:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr "NaÄíst pÅ™edem (v procentech):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "Vyrovnávání"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "Nastavení mixéru:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "Hlasitost ovládána Master kanálem místo PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "Mixér"
@@ -3803,128 +2406,60 @@ msgstr "Mixér"
msgid "About OSS Driver"
msgstr "O modulu OSS"
-#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"OvladaÄ OSS programu Audacious\n"
-"\n"
-"Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
-"pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
-"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
-"libovolné novější.\n"
-"\n"
-"Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
-"ZÃRUKY a to ani záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
-"JAKÃKOLIV ÚČEL. Více informací najdete v GNU GPL.\n"
-"\n"
-"S tímto programem byste měli obdržet kopii GNU GPL. Pokud se tak\n"
-"nestalo, obraťte se na Free Software Foundation, Inc.,\n"
-"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
-
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:673
msgid "About Audacious PulseAudio Output Plugin"
msgstr "O výstupním modulu PulseAudio pro Audacious"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Výstupní modul PulseAudio pro Audacious\n"
-"\n"
-"Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
-"pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
-"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
-"libovolné novější.\n"
-"\n"
-"Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
-"ZÃRUKY a to ani záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
-"JAKÃKOLIV ÚČEL. Více informací najdete v GNU GPL.\n"
-"\n"
-"S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
-"tak nestalo, obraťte se na Free Software Foundation, Inc.,\n"
-"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
msgstr "O modulu Převodník vzorkovací frekvence"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
msgstr "Nastavení Převodníku vzorkovací frekvence"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
msgstr "Přiřazení frekvencí:"
# FIXME: Rod? Rate mappings?
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr "Všechna ostatní:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "Metoda:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:122 src/scrobbler/configure.c:197
msgid "Change password"
msgstr "Změnit heslo"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:143
msgid "<b>Services</b>"
msgstr "<b>Služby</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:165
msgid "Username:"
msgstr "Přístupové jméno:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:171
msgid "Password:"
msgstr "Heslo:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:179
msgid "Scrobbler URL:"
msgstr "URL Scrobbleru:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:211
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:238
msgid "Scrobbler"
msgstr "Scrobbler"
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
@@ -3935,646 +2470,23 @@ msgstr ""
"\n"
"Původně vytvořil Audun Hove <audun@nlc.no> a Pipian <pipian@pipian.com>\n"
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr "O modulu Scrobbler"
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "O %s"
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr " Chyba"
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "Obecné informace"
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr "Skladba Ä. %i:"
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr "Nastavení Audacious-SID"
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8bitový"
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16bitový"
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr "Rozlišení:"
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr "Automatický posun"
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr "Kanály:"
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr "Vzorkovací kmitoÄet:"
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr "Převzorkovat"
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr "Násobek:"
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr "VÄ›tší Äinitel vyžaduje více výkonu CPU"
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr "Převzorkování:"
-
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Zvuk"
-
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr "Vnutit rychlost"
-
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
-"Je-li zapnuto, bude emulaÄnímu jádru vnucen vybraná rychlost hodin/"
-"frekvence. V opaÄném případÄ› bude rychlost urÄena z pÅ™ehrávaného souboru "
-"samotného."
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50 Hz)"
-
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
-msgstr ""
-"PAL je evropský televizní standard, který používá 50Hz vertikální obnovovací "
-"frekvenci. VÄ›tÅ¡ina SID skladeb byla urÄena pro poÄítaÄe s výstupem PAL."
-
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60 Hz)"
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-"NTSC je televizní standard s 60HZ vertikální obnovovací frekvencí (kromě "
-"jiných rozdílů od PALU). Používá se především ve Spojených státech, "
-"Japonsku, několika dalších zemí."
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr "Rychlost hodin:"
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr "Vnutit model"
-
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-"Je-li zapnuto, emulaÄnímu jádru bude vnucen vybraný modelu SID Äipu. "
-"V opaÄném případÄ› bude modul SIDU urÄen ze souboru (je-li typu PSIDv2NG). "
-"Vybraný model bude také použit, nebude-li jej možno ze souboru urÄit."
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-"MOS/CSG 6581 je starší verze SID Äipu. Od 8580 se odliÅ¡uje tím, že má "
-"plnější filtr (který, kvůli chybě v návrhu, není nikdy stejný mezi dvěma "
-"Äipy) a „trpí chybou“ pÅ™i ladÄ›ní hlasitosti, která umožňuje pÅ™ehrávání "
-"digitálních vzorků."
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr "Model SIDU:"
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr "SIDPlay 1 (rámcová technika)"
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-"K emulaci použije libSIDPlay 1.x. Rychlejší, ale ne tak přesné. Ve většině "
-"případů postaÄuje."
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr "DISPlay 2 (cyklová technika)"
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-"K emulaci použijte libSIDPlay 2.x, který kvůli přesnější emulaci vyžaduje "
-"výkonnější CPU."
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr "VýbÄ›r emulaÄní knihovny"
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr "SkuteÄný C64 (pouze SIDPlay 2)"
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr "Přepínání bank"
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr "Transparentní ROM"
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr "Prostředí PlaySID"
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr "Režim paměti"
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr "Emu#1"
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr "Optimalizující režim (rychlejší, nepřesný)"
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-"Toto nastavení může být použito pro povolení „optimalizující režimu“ "
-"libSIDPlay2, který nezachovává přesnost na cyklus a více se podobá rámcové "
-"technice. Výsledkem je nižší zatížení CPU, ale větší nepřesnost."
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr "Emulace reSID"
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-"reSID je softwarový emulátor Äipu založený na zpÄ›tném inženýrství SID Äipu. "
-"Autorem je Dag Lem. Jedná se pravděpodobně o nejvěrnější softwarovou emulaci "
-"skuteÄného Äipu."
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr "HardSID"
-
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-"HardSID je EISA/PCI karta pro PC kompatibilní poÄítaÄe, která může nést "
-"skuteÄný SID Äip. Software slouží k ovládání HardSIDu a v kombinaci se "
-"softwarovou emulací zbytku C64 pomocí libSIDPlay2 lze dosáhnout „téměř 100%“ "
-"shody se skuteÄným C64. Podrobnosti naleznete na http://www.hardsid.com/"
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr "Nastavení SIDPlay 2:"
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr "Rychlá (nejbližší sousední)"
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-"Nejrychlejší a také nejhůře znějící vzorkovací metoda. Jednoduše vybírá "
-"nejbližší vzorek."
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr "Lineární interpolace"
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-"Používá lineární interpolaci mezi vzorky. Tím dosahuje vyšší kvality zvuku "
-"s menšími ruchy."
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr "Převzorkování (FIR)"
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr "Nastavení převzorkování reSIDu:"
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr "Emu#2"
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr "Emulovat filtry"
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-"Tato volba zapíná emulaci SID filtru. Tento filtr je nepostradatelnou "
-"souÄástí výbavy SIDU, avÅ¡ak jeho pÅ™esná emulace může vyžadovat hodnÄ› výkonu "
-"CPU. Vypnete-li filtr, sklady které jej používají, nebudou vůbec znít "
-"věrohodně."
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr "FS"
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr "FM"
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr "FT"
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr "Resetovat hodnoty"
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr "SIDPlay1"
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr "Exportovat"
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr "Použít"
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr "Uložit"
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr "Importovat"
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr "Smazat"
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr "Křivka filtru:"
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr "SIDPlay2"
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr "Filtry"
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr "Hrát alespoň po urÄenou dobu"
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-"Je-li zapnuto, skladba bude hrána alespoň po zadanou dobu, případně na konec "
-"bude přidáno ticho."
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr "Doba přehrávání:"
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr "Minimální doba přehrávání:"
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr "Přehrávat do maximální požadované doby"
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-"Je-li zapnuto, skladba bude hrána nejvýše po zadanou dobu (tj. maximální "
-"délku přehrávání)."
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr "Jen není-li délka skladby známa"
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-"Je-li zapnuto, maximální doba přehrávání bude uplatněna jen tehdy, nebude-li "
-"délka skladby známa."
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr "Maximální doba přehrávání:"
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr "Použít databázi kompatibilní s XSIDPLAY"
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-"Tato volba zapíná použití databáze délek skladeb kompatibilní "
-"s XSIDPLAY. (Podrobnosti naleznete v dokumentaci k Audacious-SID modulu.)"
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr "Databázový soubor:"
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr "Cesta k databázi a jméno souboru"
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr "Ukázat soubor s databází délek"
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr "Databáze s délkou skladeb:"
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr "Délka skladby"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "O výstupním modulu SDL"
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr "Přepsat původní formátovací řetězec Tuplez"
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Chyba SDL"
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-"Po povolením této volby lze uživatelem urÄit formátovací Å™etÄ›zec Tuplez pro "
-"SID soubory. Tuplez znaÄky modulu SID jsou popsány níže."
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr "Formátovací řetězec Tuplez pro soubory SID"
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-"<u>SIDové položky Tuplez:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t– Výslovný formát souboru\n"
-"<b>sid-model</b>\t\t– 6581 nebo 8580\n"
-"<b>sid-speed</b>\t\t– Časování nebo rychlost: PAL/NTSC atd..\n"
-"\n"
-"<u>Další „zvláštní“ sady položek:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr "Formát názvu skladby:"
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Název"
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr "Do seznamu skladeb přidat podskladby"
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-"Je-li zapnuto, podskladby každého souboru budou přidány do seznamu skladeb. "
-"Je-li vypnuto, bude přidána pouze výchozí podskladba."
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr "Jen skladby se zadanou minimální délkou"
-
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr "Přidat pouze podskladby, jejichž délka je větší nebo rovna zadané."
-
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr "Zacházení s podskladbami:"
-
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr "Používat databázi STIL"
-
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
-"Je-li tato volba povolena (a databáze a HVSC konfigurace níže správně "
-"nastavena), Audacious-SID použije a zobrazí dodateÄné informace z databáze "
-"STIL, je-li hrána skladba z HVSC."
-
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr "Soubor STIL:"
-
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-"Cesta a jméno souboru souboru s databází STIL (STIL.txt). Obvykle se nachází "
-"v podadresáři DOCUMENTS od HVSC."
-
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr "Ukázat na soubor s databází STIL"
-
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr "Cesta k HVSC"
-
-#: src/sid/xs_interface.c:1262
-msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
-msgstr ""
-"Cesta ke kořenovému adresáři vaší High Voltage SID sbírce (HVSC). Na příklad "
-"„/media/C64Music/“."
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr "Ukázat cestu k HSVC"
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr "Databáze SID Tune Information List (STIL):"
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "Jakékoliv změny zamítnout"
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "Přijmout a provést změny"
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Audacious – Informace o souboru SID"
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "Jméno souboru:"
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "Název skladby:"
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "Skladatel:"
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "Autorská práva:"
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "Informace o skladbě:"
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "Autor:"
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "Délka:"
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr "Informace o podskladbách"
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr "Vybrat databázi délek skladeb od HVSC"
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr "Vybrat databázi STIL"
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr "Vybrat cestu k HVSC"
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr "Vybrat soubor se SIDPlay2 filtry pro import"
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr "Vybrat soubor se SIDPlay2 filtry pro export"
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "Potvrdit vybrané akce"
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Ano"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "Ne"
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:165
msgid "About Skinned GUI"
msgstr "O GUI s měnitelným vzhledem"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:166
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4582,685 +2494,804 @@ msgstr ""
"Copyright © 2008, Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Témata rozhraní"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
msgstr "_PÅ™ehrávaÄ:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
msgstr "Font v hlavním oknÄ› pÅ™ehrávaÄe:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
msgstr "_Seznamu skladeb:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
msgstr "Vyberte font pro seznam skladeb:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>_Fonty</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Pokud možno, používat bitmapové fonty"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Použít bitmapové fonty (podporuje pouze ASCII)"
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-"Pokud to bude možné, použijí se bitmapové fonty. Bitmapové fonty nepodporují "
-"unicodové řetězce."
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Převíjet název skladby oběma směry"
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Různé</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Zobrazovat oddÄ›lovaÄe v seznamu skladeb"
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Zobrazovat dekoraci podle správce oken"
-
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr ""
-"Tímto necháte rozhodnutí na správci oken, kdy má zobrazovat dekorace oken."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Pohybovat textem v obou směrech"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Vzhled</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-"Bude-li vybráno, text s informacemi v hlavním okně bude běhat tam a zpět. "
-"Nebude-li vybráno, text se bude pohybovat jen jedním směrem."
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Nastavení rozhraní"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Zakázat vnitřní téma GTK"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Předzesílení"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Při přehrávání zvolit náhodné téma"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Povolit naÄítání neúplných vzhledů"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
-"Je-li vybráno, Audacious neodmítne nahrát rozbitý vzhled. Použijte jen, když "
-"váš oblíbený vzhled nefunguje."
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Přizpůsobení barvy"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz "
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Audacious umožňuje změnit zabarvení měnitelného vzhledu uživatelského "
-"rozhraní pomocí následujících jezdců."
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Modrá"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Zelená"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Červená"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Vzhled</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-#, fuzzy
-msgid "Color adjustment ..."
-msgstr "Přizpůsobení barvy"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Ekvalizér"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:896
msgid "Presets"
msgstr "Předvolby"
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:443
msgid "kbps"
msgstr "kb/s"
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:451
msgid "kHz"
msgstr "kHz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:458
msgid "surround"
msgstr "prostorový zvuk"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious – varování o viditelnosti"
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Zobrazit hlavním okno pÅ™ehrávaÄe"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignorovat"
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Audacious byl spuštěn se všemi svými okny skrytými.\n"
-"Asi budete chtít opÄ›t zobrazit okno pÅ™ehrávaÄe, abyste mohli Audacious "
-"ovládat. V opaÄném případÄ› si budete muset vystaÄit se vzdáleným ovládáním "
-"přes audtool nebo povolený zásuvný modul (např. modul statusicon)."
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Vždy ignorovat, zobrazit/skrýt se ovládá vzdáleně"
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious – varování o rozbitém jádru GTK"
-
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Používá se rozbité jádro GTK</b></big>\n"
-"\n"
-"Audacious zjistil, že používáte GTK s rozbitým jádrem.\n"
-"\n"
-"Jádro pro zpracování témat, které používáte (<i>%s</i>), není sluÄitelné "
-"s některými funkcemi používanými moderními vzhledy. Pro tuto relaci byly "
-"problematické funkce vypnuty.\n"
-" \n"
-"Abyste mohli využít těchto funkcí, zvažte použití jiného tématického jádra "
-"GTK."
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Toto varování již příště nezobrazovat"
-
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:806
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "Přejít na: %d:%-2.2d/%d:%-2.2d (%d %%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Přejít na %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:827
#, c-format
msgid "Volume: %d%%"
msgstr "Hlasitost: %d %%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:850
#, c-format
msgid "Balance: %d%% left"
msgstr "Vyvážení: %d %% vlevo"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:852
msgid "Balance: center"
msgstr "Vyvážení: střed"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:854
#, c-format
msgid "Balance: %d%% right"
msgstr "Vyvážení: %d %% vpravo"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:980
msgid "Options Menu"
msgstr "Nabídka nastavení"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:984
msgid "Disable 'Always On Top'"
msgstr "Vypnout „Vždy na vrchu“"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:986
msgid "Enable 'Always On Top'"
msgstr "Zapnout „Vždy na vrchu“"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:989
msgid "File Info Box"
msgstr "Informace o souboru"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Zakázat „Škálovat GUI“"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Povolit „škálovat GUI“"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:994
msgid "Visualization Menu"
msgstr "Nabídka znázornění"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1648
msgid "Single mode."
msgstr "Režim jedné skladby."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1650
msgid "Playlist mode."
msgstr "Režim seznamu skladeb."
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1672
msgid "Stopping after song."
msgstr "Zastavuje po skladbÄ›."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1674
msgid "Not stopping after song."
msgstr "Po skladbÄ› nezastavuje."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Automatický posun názvu skladby"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Zastavit po souÄasné skladbÄ›"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Vrcholky"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Opakovat"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Náhodné přehrávání"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Žádné pokraÄování dle seznamu skladeb"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Zobrazit pÅ™ehrávaÄ"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Zobrazit editor seznamu skladeb"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Ukázat ekvalizér"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Vždy na vrchu"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Zobrazovat na všech plochách"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Sbalit pÅ™ehrávaÄ"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Sbalit editor seznamu skladeb"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Sbalit ekvalizér"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Natažení"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Dvojitá velikost"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Snadný pohyb"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analyzátor"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Vlnovka"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Otisk"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Žádný"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normální"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Oheň"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Svislé Äáry"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Čáry"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Sloupce"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "TeÄková vlnovka"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Čárová vlnovka"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Plná vlnovka"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Led"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Plynulý"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Nejpomalejší"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Pomalé"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Střední"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Rychlé"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Nejrychlejší"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Dosažený Äas"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Zbývající Äas"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pozastavit"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Předchozí"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Další"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Znázornění"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Typ znázornění"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Režim analyzátoru"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Typ vlnovky"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Typ otisku"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Typ WindowShade VU"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Klesání sloupců"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Klesání vrcholků"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Seznam skladeb"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nový seznam skladeb"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Vybrat následující seznam skladeb"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Vybrat předchozí seznam skladeb"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Smazat seznam skladeb"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Importovat seznam skladeb"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "NaÄte soubor se seznamem skladeb do vybraného seznamu."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Exportovat seznam skladeb"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Uloží vybraný seznam skladeb."
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "Obnovit seznam"
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
-msgstr "Správce seznamů"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Obnovuje metadata náležící skladbě ze seznamu."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Správce seznamů skladeb"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Správce fronty"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Zobrazení"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Rozhraní"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Nastavení rozhraní…"
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "Přidat internetovou adresu…"
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Do seznamu přidá vzdálenou stopu."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Přidat soubory…"
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Přidá soubory do seznamu skladeb."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Hledání a výběr"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
"Prohledá seznam skladeb a vybere skladby ze seznamu podle zadaných omezení."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Invertovat výběr"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "Zamění vybrané a nevybrané položky."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Vybrat vše"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Vybere všechny skladby v seznamu."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Nevybrat žádné"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Žádná skladba v seznamu nebude vybraná."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Odebrat všechny"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Ze seznamu odstraní všechny skladby."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "Vyprázdnit frontu"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "Vyprázdní frontu spojenou s tímto seznamem skladeb."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Odstranit nedostupné soubory"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "Ze seznamu skladeb odstraní nedostupné soubory."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Odebrat duplikáty"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Podle názvu"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "Ze seznamu odstraní skladby na základě jejich názvu."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "Podle jména souboru"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr "Ze seznamu odstraní skladby na základě jména souboru."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "Podle cesty a jména souboru"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "Ze seznamu odstraní skladby na základě celé cesty."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Odebrat neoznaÄené"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Odebrat neoznaÄené skladby se seznamu."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Odebrat oznaÄené"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Odebrat oznaÄené skladby ze seznamu."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Zamíchat pořadí"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Sklady v seznamu seřadí náhodně."
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "OtoÄit seznam"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Obrátí pořadí skladeb v seznamu."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Seřadit seznam"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
msgstr "Seřadí seznam podle názvu."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Podle alba"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
msgstr "Seřadí seznam podle alba."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Podle umělce"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
msgstr "Skladby v seznam seřadí podle jména umělce."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
msgstr "Skladby v seznamu seřadí podle jména souboru"
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Skladby v seznamu seřadí podle celé cesty."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "Podle data"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
msgstr "Skladby v seznamu seÅ™adí podle Äasu poslední zmÄ›ny v obsahu souboru."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Podle Äísla stopy"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
msgstr "Skladby v seznamu seÅ™adí podle Äísla stopy."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "Seřadit vybrané"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Soubor"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Služby modulů"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Zobrazit informace o skladbÄ›"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Zobrazit informace o skladbÄ›"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "O Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "Přehrát soubor"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "NaÄíst a pÅ™ehrát soubor"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "Hrát z adresy"
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Hrát média z vybraného místa"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Služby modulů"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Nastavení"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Otevřít okno s nastavením"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "O Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Nastavit A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Vyprázdnit A-B"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to Playlist Start"
+msgstr "PÅ™ejít na zaÄátek seznamu skladeb"
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Time"
+msgstr "PÅ™ejít na Äas"
+
+#: src/skins/ui_manager.c:424
+msgid "Queue Toggle"
+msgstr "Přepnout frontu"
+
+#: src/skins/ui_manager.c:425
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Povolí/zakáže položku ve frontě seznamu skladeb."
+
#: src/skins/ui_manager.c:428
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: src/skins/ui_manager.c:430
+msgid "Cut"
+msgstr "Oříznout"
+
+#: src/skins/ui_manager.c:432
+msgid "Paste"
+msgstr "Vložit"
+
+#: src/skins/ui_manager.c:439
msgid "Load"
msgstr "NaÄíst"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:440
+msgid "Import"
+msgstr "Importovat"
+
+#: src/skins/ui_manager.c:441
+msgid "Save"
+msgstr "Uložit"
+
+#: src/skins/ui_manager.c:442
+msgid "Delete"
+msgstr "Smazat"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Preset"
msgstr "Předvolby"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:445
msgid "Load preset"
msgstr "NaÄíst pÅ™edvolbu"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:447 src/skins/ui_manager.c:468
+#: src/skins/ui_manager.c:483
msgid "Auto-load preset"
msgstr "Souborová předvolba"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:448
msgid "Load auto-load preset"
msgstr "NaÄíst souborovou pÅ™edvolbu"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:451
msgid "Load default preset into equalizer"
msgstr "NaÄíst standardní pÅ™edvolbu do ekvalizéru"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:453
msgid "Zero"
msgstr "Vynulovat"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:454
msgid "Set equalizer preset levels to zero"
msgstr "Vynulovat předvolby ekvalizéru"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:456
msgid "From file"
msgstr "Ze souboru"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:457
msgid "Load preset from file"
msgstr "NaÄíst pÅ™edvolbu ze souboru"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:459
msgid "From WinAMP EQF file"
msgstr "Ze souboru WinAMP EQF"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:460
msgid "Load preset from WinAMP EQF file"
msgstr "NaÄíst pÅ™edvolbu ze souboru WinAMP EQF"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:462
msgid "WinAMP Presets"
msgstr "Předvolby WinAMPu"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:463
msgid "Import WinAMP presets"
msgstr "Importovat předvolby WinAMPu"
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:466
msgid "Save preset"
msgstr "Uložit předvolbu"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:469
msgid "Save auto-load preset"
msgstr "Uložit souborovou předvolbu"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:472
msgid "Save default preset"
msgstr "Uložit standardní předvolbu"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:474
msgid "To file"
msgstr "Do souboru"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:475
msgid "Save preset to file"
msgstr "Uložit předvolbu do souboru"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:477
msgid "To WinAMP EQF file"
msgstr "Do souboru WinAMP EQF"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:478
msgid "Save preset to WinAMP EQF file"
msgstr "Uložit předvolbu do souboru WinAMP EQF"
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:481
msgid "Delete preset"
msgstr "Smazat předvolbu"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:484
msgid "Delete auto-load preset"
msgstr "Smazat souborovou předvolbu"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr "Vyhledat skladby v souÄasném seznamu skladeb"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5272,210 +3303,115 @@ msgstr ""
"regulárním výrazům nerozumíte, jednoduÅ¡e vložte Äásti textu, které chcete "
"vyhledat."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Název: "
+
+#: src/skins/ui_playlist.c:267
msgid "Album: "
msgstr "Album: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
msgid "Artist: "
msgstr "Umělec: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
msgid "Filename: "
msgstr "Jméno souboru: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr "Před hledáním vymazat předchozí výběr"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr "Shodující se položky automaticky zařadit/vyřadit z fronty"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr "Ze shodujících se položek vytvořit nový seznam skladeb"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Uložit jako statický seznam skladeb"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Použít relativní cestu"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "NaÄíst seznam skladeb"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Uložit seznam skladeb"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr "Zobrazit editor seznamu skladeb"
-#: src/skins/ui_playlist.c:1206
+# FIXME: plural
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d z %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "96 kHz "
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Zabalený skin Winapmu 2.x"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Nezabalený skin Winampu 2.x"
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Adresář („%s“) nebylo možné vytvořit: %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:454
msgid "About sndfile plugin"
msgstr "O modulu sndfile"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-"Pro Audacious upravil Tony Vroon <chainsaw@gentoo.org>\n"
-"z původního modulu xmms_sndfile,\n"
-"copyright © 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
-"pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
-"Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
-"libovolné novější.\n"
-"\n"
-"Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
-"ZÃRUKY a to ani záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
-"JAKÃKOLIV ÚČEL. Více informací najdete v GNU GPL.\n"
-"\n"
-"S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
-"tak nestalo, obraťte se na\n"
-"Free Software Foundation, Inc.,\n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA  02110-1301  USA"
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "O modulu SndStrech"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr "Oprava hlasitosti"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr "Krátké přesahy"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "Rychlost"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "Výška"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Natažení"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "SndStrech – Nastavení"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:447
msgid "Command to run when Audacious starts a new song."
msgstr "Příkaz, který se provede, když Audacious zaÄne novou skladbu."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:449 src/song_change/song_change.c:455
+#: src/song_change/song_change.c:461 src/song_change/song_change.c:467
msgid "Command:"
msgstr "Příkaz:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:453
msgid "Command to run toward the end of a song."
msgstr "Příkaz, který se provede na konci skladby."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:459
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
"Příkaz, který se provede, když Audacious dosáhne konce seznamu skladeb."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:465
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Příkaz, který se provede při změně názvu skladbu (tj. názvy v síťových "
"proudech)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:471
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5488,7 +3424,10 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Můžete používat následující formátovací řetězce, které budou\n"
"pÅ™ed spuÅ¡tÄ›ním příkazu nahrazeny (ne vÅ¡echny jsou užiteÄné\n"
@@ -5501,9 +3440,12 @@ msgstr ""
"%n nebo %s: Název skladby\n"
"%r: Datový tok (v bitech za sekundu)\n"
"%t: Pozice v seznamu skladeb (%02d)\n"
-"%p: Právě se hraje (1, nebo 0)"
+"%p: Právě se hraje (1, nebo 0)\n"
+"%a: Umělec\n"
+"%b: Album\n"
+"%T: Název stopy"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:498
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5511,23 +3453,19 @@ msgstr ""
"<span size='small'>Parametry předávané shellu by měly být uzavřeny do "
"uvozovek. Nerespektování této rady pÅ™edstavuje bezpeÄnostní riziko.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:509
msgid "Commands"
msgstr "Příkazy"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:539
msgid "Song Change"
msgstr "Změna skladby"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Analyzátor spektra"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "O modulu Stavová ikona"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5546,35 +3484,47 @@ msgstr ""
"Tento modul poskytuje stavovou ikonu, která\n"
"je umístěna v systémové oblasti desktopu.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "Modul stavové ikony – Nastavení"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "Nabídka pÅ™i stisku pravého tlaÄítka"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "Drobná nabídka pro pÅ™ehrávání Ä. 1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "Drobná nabídka pro pÅ™ehrávání Ä. 2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "Reakce na rolování myší"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "Změnit hlasitost"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "Změnit hranou skladbu"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+msgid "Other settings"
+msgstr "Ostatní nastavení"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr "Zakázat vyskakovací okno"
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr "Zavřít do oznamovací oblasti (systémové oblasti)"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5588,40 +3538,36 @@ msgstr ""
msgid "About Extra Stereo Plugin"
msgstr "O modulu Extra sterou"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "Nastavit Extra sterou"
-#: src/streambrowser/gui/streambrowser_win.c:62
+#: src/streambrowser/gui/streambrowser_win.c:78
msgid "Search:"
msgstr "Hledat:"
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
+#: src/streambrowser/gui/streambrowser_win.c:97
+#: src/streambrowser/gui/streambrowser_win.c:372
msgid "Add Bookmark"
msgstr "Přidat záložku"
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "ProhlížeÄ proudů"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
+#: src/streambrowser/gui/streambrowser_win.c:324
msgid "Stream name"
msgstr "Název proudu"
-#: src/streambrowser/gui/streambrowser_win.c:326
+#: src/streambrowser/gui/streambrowser_win.c:331
msgid "Now playing"
msgstr "Právě hraje"
-#: src/streambrowser/gui/streambrowser_win.c:367
+#: src/streambrowser/gui/streambrowser_win.c:369
msgid "Remove Bookmark"
msgstr "Odstranit záložku"
-#: src/streambrowser/streambrowser.c:331
+#: src/streambrowser/streambrowser.c:330
msgid "About Stream Browser"
msgstr "O prohlížeÄi proudů"
-#: src/streambrowser/streambrowser.c:332
+#: src/streambrowser/streambrowser.c:331
msgid ""
"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -5648,51 +3594,11 @@ msgstr ""
"\n"
"Toto byl projekt z Google Summer of Code 2008."
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "ProhlížeÄ proudů"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "O ovladaÄi pro Sun"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"BSD ovladaÄ pro Sun programu XMMS\n"
-"\n"
-"Copyright © 2001 CubeSoft Communications, Inc.\n"
-"Správce: <vedge na csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Zařízení ovládání zvuku:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Velikost vyrovnávací paměti (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Zařízení ovládání hlasitosti:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS používá výluÄný přístup k mixéru"
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Nastavení ovladaÄe pro Sun"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "O generátoru tónů"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5706,36 +3612,24 @@ msgstr ""
"Pro jeho aktivaci zadejte URL: tone://frekvence1;frekvence2;frekvence3;...\n"
"např. tone://2000;2005 pro přehrání tónů o frekvenci 2000 a 2005 Hz."
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "Generátor tónů:"
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "Přepsat původní názvy"
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Formát názvu:"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "O modulu vstupu/výstupu ze/do souboru"
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Popisky Ogg Vorbis"
-
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Nastavení modulu Ogg Vorbis Audio"
-
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:572
msgid "About Ogg Vorbis Audio Plugin"
msgstr "O modulu Ogg Vorbis Audio"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:577
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5794,12 +3688,12 @@ msgstr ""
"\n"
"Do Audacious implementoval Pavel Vymetálek <pvymetalek@seznam.cz>."
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Dekódovací modul Wavpack %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5811,6 +3705,2105 @@ msgstr ""
"Části kódu modulu napsal Miles Egan\n"
"Navštivte stránku Wavpacku na http://www.wavpack.com/\n"
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS budík"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "XMMS modul, který může být použit\n"
+#~ "k naÄasovanému zahájení pÅ™ehrávání.\n"
+#~ "\n"
+#~ "Všechny stížnosti zasílejte na:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Close"
+#~ msgstr "Zavřít"
+
+#~ msgid "Sorry"
+#~ msgstr "Je mi líto"
+
+#~ msgid "Warning"
+#~ msgstr "Varování"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "Z bezpeÄnostních důvodů musí být doba „ticha“ alespoň o 65 sekund delší "
+#~ "než doba zesilování, také musí být delší než 10 sekund. Toto v zásadě "
+#~ "znamená, že v kódu je chyba a dokud nezjistím, jak ji opravdu opravit, "
+#~ "tato zpráva se bude zobrazovat :)\n"
+#~ "\n"
+#~ "Vaše nastavení zesilování NEBYLO uloženo.\n"
+#~ "\n"
+#~ "–\n"
+#~ "Adam"
+
+#~ msgid "Oh Well"
+#~ msgstr "Dobrá"
+
+#~ msgid "Daemon Interface (like old headless mode)"
+#~ msgstr "Rozhraní démona (jako starý bezhlavý režim)"
+
+#~ msgid ""
+#~ "FileWriter-Plugin\n"
+#~ "\n"
+#~ "This program is free software; you can redistribute it and/or modify\n"
+#~ "it under the terms of the GNU General Public License as published by\n"
+#~ "the Free Software Foundation; either version 2 of the License, or\n"
+#~ "(at your option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful,\n"
+#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+#~ "GNU General Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License\n"
+#~ "along with this program; if not, write to the Free Software\n"
+#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
+#~ "02110-1301,\n"
+#~ "USA."
+#~ msgstr ""
+#~ "Modul FileWriter\n"
+#~ "\n"
+#~ "Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
+#~ "pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
+#~ "Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
+#~ "libovolné novější.\n"
+#~ "\n"
+#~ "Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
+#~ "ZÃRUKY a to ani odvozené záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
+#~ "JAKÃKOLIV ÚČEL. Více informací naleznete v GNU GPL.\n"
+#~ "\n"
+#~ "S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
+#~ "tak nestalo, obraťte se na Free Software Foundation, Inc.,\n"
+#~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
+
+#~ msgid ""
+#~ "Audacious OSS Driver\n"
+#~ "\n"
+#~ " This program is free software; you can redistribute it and/or modify\n"
+#~ "it under the terms of the GNU General Public License as published by\n"
+#~ "the Free Software Foundation; either version 2 of the License, or\n"
+#~ "(at your option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful,\n"
+#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+#~ "GNU General Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License\n"
+#~ "along with this program; if not, write to the Free Software\n"
+#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
+#~ "02110-1301,\n"
+#~ "USA."
+#~ msgstr ""
+#~ "OvladaÄ OSS programu Audacious\n"
+#~ "\n"
+#~ "Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
+#~ "pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
+#~ "Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
+#~ "libovolné novější.\n"
+#~ "\n"
+#~ "Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
+#~ "ZÃRUKY a to ani záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
+#~ "JAKÃKOLIV ÚČEL. Více informací najdete v GNU GPL.\n"
+#~ "\n"
+#~ "S tímto programem byste měli obdržet kopii GNU GPL. Pokud se tak\n"
+#~ "nestalo, obraťte se na Free Software Foundation, Inc.,\n"
+#~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
+
+#~ msgid ""
+#~ "Audacious PulseAudio Output Plugin\n"
+#~ "\n"
+#~ " This program is free software; you can redistribute it and/or modify\n"
+#~ "it under the terms of the GNU General Public License as published by\n"
+#~ "the Free Software Foundation; either version 2 of the License, or\n"
+#~ "(at your option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful,\n"
+#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+#~ "GNU General Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License\n"
+#~ "along with this program; if not, write to the Free Software\n"
+#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
+#~ "02110-1301,\n"
+#~ "USA."
+#~ msgstr ""
+#~ "Výstupní modul PulseAudio pro Audacious\n"
+#~ "\n"
+#~ "Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
+#~ "pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
+#~ "Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
+#~ "libovolné novější.\n"
+#~ "\n"
+#~ "Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
+#~ "ZÃRUKY a to ani záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
+#~ "JAKÃKOLIV ÚČEL. Více informací najdete v GNU GPL.\n"
+#~ "\n"
+#~ "S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
+#~ "tak nestalo, obraťte se na Free Software Foundation, Inc.,\n"
+#~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
+
+#~ msgid "About %s"
+#~ msgstr "O %s"
+
+#~ msgid " Error"
+#~ msgstr " Chyba"
+
+#~ msgid "General info"
+#~ msgstr "Obecné informace"
+
+#~ msgid "Tune #%i: "
+#~ msgstr "Skladba Ä. %i:"
+
+#~ msgid "Couldn't find pixmap file: %s"
+#~ msgstr "Nebylo možné nalézt soubor s pixmapou: %s"
+
+#~ msgid "Audacious-SID configuration"
+#~ msgstr "Nastavení Audacious-SID"
+
+#~ msgid "8-bit"
+#~ msgstr "8bitový"
+
+#~ msgid "16-bit"
+#~ msgstr "16bitový"
+
+#~ msgid "Resolution:"
+#~ msgstr "Rozlišení:"
+
+#~ msgid "Autopanning"
+#~ msgstr "Automatický posun"
+
+#~ msgid "Channels:"
+#~ msgstr "Kanály:"
+
+#~ msgid "Samplerate:"
+#~ msgstr "Vzorkovací kmitoÄet:"
+
+#~ msgid "Use oversampling"
+#~ msgstr "Převzorkovat"
+
+#~ msgid "Factor:"
+#~ msgstr "Násobek:"
+
+#~ msgid "Large factors require more CPU-power"
+#~ msgstr "VÄ›tší Äinitel vyžaduje více výkonu CPU"
+
+#~ msgid "Oversampling:"
+#~ msgstr "Převzorkování:"
+
+#~ msgid "Audio"
+#~ msgstr "Zvuk"
+
+#~ msgid "Force speed"
+#~ msgstr "Vnutit rychlost"
+
+#~ msgid ""
+#~ "If enabled, this option \"forces\" the emulation engine to use the "
+#~ "selected clock speed/frequency. Otherwise the speed is determined from "
+#~ "played file itself."
+#~ msgstr ""
+#~ "Je-li zapnuto, bude emulaÄnímu jádru vnucen vybraná rychlost hodin/"
+#~ "frekvence. V opaÄném případÄ› bude rychlost urÄena z pÅ™ehrávaného souboru "
+#~ "samotného."
+
+#~ msgid "PAL (50 Hz)"
+#~ msgstr "PAL (50 Hz)"
+
+#~ msgid ""
+#~ "PAL is the european TV standard, which uses 50Hz vertical refresh "
+#~ "frequency. Most of SID-tunes have been made for PAL computers."
+#~ msgstr ""
+#~ "PAL je evropský televizní standard, který používá 50Hz vertikální "
+#~ "obnovovací frekvenci. VÄ›tÅ¡ina SID skladeb byla urÄena pro poÄítaÄe s "
+#~ "výstupem PAL."
+
+#~ msgid "NTSC (60 Hz)"
+#~ msgstr "NTSC (60 Hz)"
+
+#~ msgid ""
+#~ "NTSC is the TV standard with 60Hz vertical refresh rate (and other "
+#~ "features that differ from PAL). It is mainly used in United States, Japan "
+#~ "and certain other countries."
+#~ msgstr ""
+#~ "NTSC je televizní standard s 60HZ vertikální obnovovací frekvencí (kromě "
+#~ "jiných rozdílů od PALU). Používá se především ve Spojených státech, "
+#~ "Japonsku, několika dalších zemí."
+
+#~ msgid "Clock speed:"
+#~ msgstr "Rychlost hodin:"
+
+#~ msgid "Force model"
+#~ msgstr "Vnutit model"
+
+#~ msgid ""
+#~ "If enabled, this option \"forces\" the emulation engine to use the "
+#~ "selected SID-chip model. Otherwise the preferred SID model is determined "
+#~ "from the file (if PSIDv2NG type) or if not available, this setting is "
+#~ "used."
+#~ msgstr ""
+#~ "Je-li zapnuto, emulaÄnímu jádru bude vnucen vybraný modelu SID Äipu. "
+#~ "V opaÄném případÄ› bude modul SIDU urÄen ze souboru (je-li typu PSIDv2NG). "
+#~ "Vybraný model bude také použit, nebude-li jej možno ze souboru urÄit."
+
+#~ msgid "MOS 6581"
+#~ msgstr "MOS 6581"
+
+#~ msgid ""
+#~ "MOS/CSG 6581 is the earlier major version of SID chip. It differs from "
+#~ "8580 in few ways, having much fuller filter (which, due to design error, "
+#~ "is never same between two different SID-chips) and has the \"volume "
+#~ "adjustment bug\", which enables playing of digital samples."
+#~ msgstr ""
+#~ "MOS/CSG 6581 je starší verze SID Äipu. Od 8580 se odliÅ¡uje tím, že má "
+#~ "plnější filtr (který, kvůli chybě v návrhu, není nikdy stejný mezi dvěma "
+#~ "Äipy) a „trpí chybou“ pÅ™i ladÄ›ní hlasitosti, která umožňuje pÅ™ehrávání "
+#~ "digitálních vzorků."
+
+#~ msgid "MOS 8580"
+#~ msgstr "MOS 8580"
+
+#~ msgid "SID model:"
+#~ msgstr "Model SIDU:"
+
+#~ msgid "SIDPlay 1 (frame-based)"
+#~ msgstr "SIDPlay 1 (rámcová technika)"
+
+#~ msgid ""
+#~ "Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
+#~ "cases, though."
+#~ msgstr ""
+#~ "K emulaci použije libSIDPlay 1.x. Rychlejší, ale ne tak přesné. Ve "
+#~ "vÄ›tÅ¡inÄ› případů postaÄuje."
+
+#~ msgid "SIDPlay 2 (cycle-based)"
+#~ msgstr "DISPlay 2 (cyklová technika)"
+
+#~ msgid ""
+#~ "Use libSIDPlay 2.x emulation, which requires powerful CPU due to more "
+#~ "exact emulation."
+#~ msgstr ""
+#~ "K emulaci použijte libSIDPlay 2.x, který kvůli přesnější emulaci vyžaduje "
+#~ "výkonnější CPU."
+
+#~ msgid "Emulation library selection:"
+#~ msgstr "VýbÄ›r emulaÄní knihovny"
+
+#~ msgid "Real C64 (SIDPlay 2 only)"
+#~ msgstr "SkuteÄný C64 (pouze SIDPlay 2)"
+
+#~ msgid "Bank switching"
+#~ msgstr "Přepínání bank"
+
+#~ msgid "Transparent ROM"
+#~ msgstr "Transparentní ROM"
+
+#~ msgid "PlaySID environment"
+#~ msgstr "Prostředí PlaySID"
+
+#~ msgid "Memory mode:"
+#~ msgstr "Režim paměti"
+
+#~ msgid "Emu#1"
+#~ msgstr "Emu#1"
+
+#~ msgid "Optimization mode (faster, inaccurate)"
+#~ msgstr "Optimalizující režim (rychlejší, nepřesný)"
+
+#~ msgid ""
+#~ "This setting can be used to enable libSIDPlay2's \"optimization mode\", "
+#~ "which in downgrades the emulation from cycle-exact to something similar "
+#~ "to frame-exact. The result is lower CPU usage, but worse accuracy."
+#~ msgstr ""
+#~ "Toto nastavení může být použito pro povolení „optimalizující režimu“ "
+#~ "libSIDPlay2, který nezachovává přesnost na cyklus a více se podobá "
+#~ "rámcové technice. Výsledkem je nižší zatížení CPU, ale větší nepřesnost."
+
+#~ msgid "reSID-emulation"
+#~ msgstr "Emulace reSID"
+
+#~ msgid ""
+#~ "reSID is the software SID-chip simulator based on SID reverse-"
+#~ "engineering, created by Dag Lem. It is probably the closest thing to real "
+#~ "SID available as software-only emulation."
+#~ msgstr ""
+#~ "reSID je softwarový emulátor Äipu založený na zpÄ›tném inženýrství SID "
+#~ "Äipu. Autorem je Dag Lem. Jedná se pravdÄ›podobnÄ› o nejvÄ›rnÄ›jší "
+#~ "softwarovou emulaci skuteÄného Äipu."
+
+#~ msgid "HardSID"
+#~ msgstr "HardSID"
+
+#~ msgid ""
+#~ "HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
+#~ "real SID-chip. Software can be used to control the HardSID and combined "
+#~ "with software emulation of rest of C64 via libSIDPlay2 HardSID can be "
+#~ "used to achieve \"near 100%\" similarity to real C64. For more "
+#~ "information, see http://www.hardsid.com/"
+#~ msgstr ""
+#~ "HardSID je EISA/PCI karta pro PC kompatibilní poÄítaÄe, která může nést "
+#~ "skuteÄný SID Äip. Software slouží k ovládání HardSIDu a v kombinaci se "
+#~ "softwarovou emulací zbytku C64 pomocí libSIDPlay2 lze dosáhnout „téměř "
+#~ "100%“ shody se skuteÄným C64. Podrobnosti naleznete na http://www.hardsid."
+#~ "com/"
+
+#~ msgid "SIDPlay 2 options:"
+#~ msgstr "Nastavení SIDPlay 2:"
+
+#~ msgid "Fast (nearest neighbour)"
+#~ msgstr "Rychlá (nejbližší sousední)"
+
+#~ msgid ""
+#~ "Fastest and also worst sounding sampling method, simply picks nearest "
+#~ "neighbouring sample."
+#~ msgstr ""
+#~ "Nejrychlejší a také nejhůře znějící vzorkovací metoda. Jednoduše vybírá "
+#~ "nejbližší vzorek."
+
+#~ msgid "Linear interpolation"
+#~ msgstr "Lineární interpolace"
+
+#~ msgid ""
+#~ "Uses linear interpolation between samples, yielding higher audio quality "
+#~ "with less sampling noise."
+#~ msgstr ""
+#~ "Používá lineární interpolaci mezi vzorky. Tím dosahuje vyšší kvality "
+#~ "zvuku s menšími ruchy."
+
+#~ msgid "Resampling (FIR)"
+#~ msgstr "Převzorkování (FIR)"
+
+#~ msgid "reSID sampling options:"
+#~ msgstr "Nastavení převzorkování reSIDu:"
+
+#~ msgid "Emu#2"
+#~ msgstr "Emu#2"
+
+#~ msgid "Emulate filters"
+#~ msgstr "Emulovat filtry"
+
+#~ msgid ""
+#~ "This option enables emulation of SID filter. The filter is an essential "
+#~ "part of SID's sound capacity, but accurate emulation of it may require "
+#~ "quite much CPU power. However, if filter emulation is disabled, tunes "
+#~ "won't sound authentic at all if they utilize the filter."
+#~ msgstr ""
+#~ "Tato volba zapíná emulaci SID filtru. Tento filtr je nepostradatelnou "
+#~ "souÄástí výbavy SIDU, avÅ¡ak jeho pÅ™esná emulace může vyžadovat hodnÄ› "
+#~ "výkonu CPU. Vypnete-li filtr, sklady které jej používají, nebudou vůbec "
+#~ "znít věrohodně."
+
+#~ msgid "FS"
+#~ msgstr "FS"
+
+#~ msgid "FM"
+#~ msgstr "FM"
+
+#~ msgid "FT"
+#~ msgstr "FT"
+
+#~ msgid "Reset values"
+#~ msgstr "Resetovat hodnoty"
+
+#~ msgid "SIDPlay1"
+#~ msgstr "SIDPlay1"
+
+#~ msgid "Export"
+#~ msgstr "Exportovat"
+
+#~ msgid "Use"
+#~ msgstr "Použít"
+
+#~ msgid "Filter curve:"
+#~ msgstr "Křivka filtru:"
+
+#~ msgid "SIDPlay2"
+#~ msgstr "SIDPlay2"
+
+#~ msgid "Filters"
+#~ msgstr "Filtry"
+
+#~ msgid "Play at least for specified time"
+#~ msgstr "Hrát alespoň po urÄenou dobu"
+
+#~ msgid ""
+#~ "If enabled, the tune is played at least for the specified time, adding "
+#~ "silence to the end if necessary."
+#~ msgstr ""
+#~ "Je-li zapnuto, skladba bude hrána alespoň po zadanou dobu, případně na "
+#~ "konec bude přidáno ticho."
+
+#~ msgid "Playtime:"
+#~ msgstr "Doba přehrávání:"
+
+#~ msgid "Minimum playtime:"
+#~ msgstr "Minimální doba přehrávání:"
+
+#~ msgid "Play for specified time maximum"
+#~ msgstr "Přehrávat do maximální požadované doby"
+
+#~ msgid ""
+#~ "If enabled, tune is played until specified duration is reached (aka "
+#~ "maximum playtime)."
+#~ msgstr ""
+#~ "Je-li zapnuto, skladba bude hrána nejvýše po zadanou dobu (tj. maximální "
+#~ "délku přehrávání)."
+
+#~ msgid "Only when song length is unknown"
+#~ msgstr "Jen není-li délka skladby známa"
+
+#~ msgid ""
+#~ "If enabled, the maximum playtime is applied only if song/tune length is "
+#~ "not known."
+#~ msgstr ""
+#~ "Je-li zapnuto, maximální doba přehrávání bude uplatněna jen tehdy, nebude-"
+#~ "li délka skladby známa."
+
+#~ msgid "Maximum playtime:"
+#~ msgstr "Maximální doba přehrávání:"
+
+#~ msgid "Use XSIDPLAY-compatible database"
+#~ msgstr "Použít databázi kompatibilní s XSIDPLAY"
+
+#~ msgid ""
+#~ "This option enables using of XSIDPLAY compatible song length database. "
+#~ "(Refer to Audacious-SID documentation for more information)"
+#~ msgstr ""
+#~ "Tato volba zapíná použití databáze délek skladeb kompatibilní "
+#~ "s XSIDPLAY. (Podrobnosti naleznete v dokumentaci k Audacious-SID modulu.)"
+
+#~ msgid "DB-file:"
+#~ msgstr "Databázový soubor:"
+
+#~ msgid "Database path and filename"
+#~ msgstr "Cesta k databázi a jméno souboru"
+
+#~ msgid "Browse for song length-database file"
+#~ msgstr "Ukázat soubor s databází délek"
+
+#~ msgid "Song length database:"
+#~ msgstr "Databáze s délkou skladeb:"
+
+#~ msgid "Songlength"
+#~ msgstr "Délka skladby"
+
+#~ msgid "Override generic Tuplez format string"
+#~ msgstr "Přepsat původní formátovací řetězec Tuplez"
+
+#~ msgid ""
+#~ "By enabling this option you can specify a custom Tuplez formatting string "
+#~ "for SID-files. The SID-plugin specific Tuplez tags are described shortly "
+#~ "below."
+#~ msgstr ""
+#~ "Po povolením této volby lze uživatelem urÄit formátovací Å™etÄ›zec Tuplez "
+#~ "pro SID soubory. Tuplez znaÄky modulu SID jsou popsány níže."
+
+#~ msgid "Tuplez format string for SID-files"
+#~ msgstr "Formátovací řetězec Tuplez pro soubory SID"
+
+#~ msgid ""
+#~ "<u>SID-specific Tuplez fields:</u>\n"
+#~ "\n"
+#~ "<b>sid-format</b>\t\t- Specific fileformat\n"
+#~ "<b>sid-model</b>\t\t- 6581 or 8580\n"
+#~ "<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
+#~ "\n"
+#~ "<u>Other \"special\" fields set:</u>\n"
+#~ "\n"
+#~ "<b>subsong-num, subsong-id</b>"
+#~ msgstr ""
+#~ "<u>SIDové položky Tuplez:</u>\n"
+#~ "\n"
+#~ "<b>sid-format</b>\t\t– Výslovný formát souboru\n"
+#~ "<b>sid-model</b>\t\t– 6581 nebo 8580\n"
+#~ "<b>sid-speed</b>\t\t– Časování nebo rychlost: PAL/NTSC atd..\n"
+#~ "\n"
+#~ "<u>Další „zvláštní“ sady položek:</u>\n"
+#~ "\n"
+#~ "<b>subsong-num, subsong-id</b>"
+
+#~ msgid "Song title format:"
+#~ msgstr "Formát názvu skladby:"
+
+#~ msgid "Add sub-tunes to playlist"
+#~ msgstr "Do seznamu skladeb přidat podskladby"
+
+#~ msgid ""
+#~ "If enabled, sub-tunes of each file will be added to playlist. If "
+#~ "disabled, only the default sub-tune will be added."
+#~ msgstr ""
+#~ "Je-li zapnuto, podskladby každého souboru budou přidány do seznamu "
+#~ "skladeb. Je-li vypnuto, bude přidána pouze výchozí podskladba."
+
+#~ msgid "Only tunes with specified minimum duration"
+#~ msgstr "Jen skladby se zadanou minimální délkou"
+
+#~ msgid "Only add sub-tunes that have a duration of at least specified time."
+#~ msgstr "Přidat pouze podskladby, jejichž délka je větší nebo rovna zadané."
+
+#~ msgid "Sub-tune handling:"
+#~ msgstr "Zacházení s podskladbami:"
+
+#~ msgid "Use STIL database"
+#~ msgstr "Používat databázi STIL"
+
+#~ msgid ""
+#~ "If this option is enabled (and the database & HVSC settings below are "
+#~ "correctly set), Audacious-SID will use and display additional information "
+#~ "from STIL database when HVSC SIDs are played."
+#~ msgstr ""
+#~ "Je-li tato volba povolena (a databáze a HVSC konfigurace níže správně "
+#~ "nastavena), Audacious-SID použije a zobrazí dodateÄné informace "
+#~ "z databáze STIL, je-li hrána skladba z HVSC."
+
+#~ msgid "STIL file:"
+#~ msgstr "Soubor STIL:"
+
+#~ msgid ""
+#~ "Path and filename of STIL database file (STIL.txt), usually found from "
+#~ "HVSC's DOCUMENTS-subdirectory."
+#~ msgstr ""
+#~ "Cesta a jméno souboru souboru s databází STIL (STIL.txt). Obvykle se "
+#~ "nachází v podadresáři DOCUMENTS od HVSC."
+
+#~ msgid "Browse for STIL-database file"
+#~ msgstr "Ukázat na soubor s databází STIL"
+
+#~ msgid "HVSC path:"
+#~ msgstr "Cesta k HVSC"
+
+#~ msgid ""
+#~ "Path to base-directory of your High Voltage SID Collection (HVSC), for "
+#~ "example /media/C64Music/"
+#~ msgstr ""
+#~ "Cesta ke kořenovému adresáři vaší High Voltage SID sbírce (HVSC). Na "
+#~ "příklad „/media/C64Music/“."
+
+#~ msgid "Browse for HVSC path"
+#~ msgstr "Ukázat cestu k HSVC"
+
+#~ msgid "SID Tune Information List (STIL) database:"
+#~ msgstr "Databáze SID Tune Information List (STIL):"
+
+#~ msgid "Cancel any changes"
+#~ msgstr "Jakékoliv změny zamítnout"
+
+#~ msgid "Accept and update changes"
+#~ msgstr "Přijmout a provést změny"
+
+#~ msgid "Audacious-SID Fileinfo"
+#~ msgstr "Audacious – Informace o souboru SID"
+
+#~ msgid "Filename:"
+#~ msgstr "Jméno souboru:"
+
+#~ msgid "Songname:"
+#~ msgstr "Název skladby:"
+
+#~ msgid "Composer:"
+#~ msgstr "Skladatel:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Autorská práva:"
+
+#~ msgid "Song Information:"
+#~ msgstr "Informace o skladbě:"
+
+#~ msgid "Author:"
+#~ msgstr "Autor:"
+
+#~ msgid "Duration:"
+#~ msgstr "Délka:"
+
+#~ msgid "Sub-tune Information:"
+#~ msgstr "Informace o podskladbách"
+
+#~ msgid "Select HVSC song length database"
+#~ msgstr "Vybrat databázi délek skladeb od HVSC"
+
+#~ msgid "Select STIL-database"
+#~ msgstr "Vybrat databázi STIL"
+
+#~ msgid "Select HVSC location prefix"
+#~ msgstr "Vybrat cestu k HVSC"
+
+#~ msgid "Select SIDPlay2 filters file for importing"
+#~ msgstr "Vybrat soubor se SIDPlay2 filtry pro import"
+
+#~ msgid "Select SIDPlay2 filters file for exporting"
+#~ msgstr "Vybrat soubor se SIDPlay2 filtry pro export"
+
+#~ msgid "Confirm selected action"
+#~ msgstr "Potvrdit vybrané akce"
+
+#~ msgid "Yes"
+#~ msgstr "Ano"
+
+#~ msgid "No"
+#~ msgstr "Ne"
+
+#~ msgid ""
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the xmms_sndfile plugin which is:\n"
+#~ "Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
+#~ "\n"
+#~ "This program is free software ; you can redistribute it and/or modify \n"
+#~ "it under the terms of the GNU General Public License as published by \n"
+#~ "the Free Software Foundation ; either version 2 of the License, or \n"
+#~ "(at your option) any later version. \n"
+#~ " \n"
+#~ "This program is distributed in the hope that it will be useful, \n"
+#~ "but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
+#~ "See the GNU General Public License for more details. \n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public \n"
+#~ "License along with this program ; if not, write to \n"
+#~ "the Free Software Foundation, Inc., \n"
+#~ "51 Franklin Street, Fifth Floor, \n"
+#~ "Boston, MA 02110-1301 USA"
+#~ msgstr ""
+#~ "Pro Audacious upravil Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "z původního modulu xmms_sndfile,\n"
+#~ "copyright © 2000, 2002 Erik de Castro Lopo\n"
+#~ "\n"
+#~ "Tento program je svobodný software; můžete jej šířit a/nebo měnit,\n"
+#~ "pokud dodržíte podmínky GNU General Public License (GPL) vydané\n"
+#~ "Free Software Foundation a to buÄ ve verzi 2 nebo (dle vaší volby)\n"
+#~ "libovolné novější.\n"
+#~ "\n"
+#~ "Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
+#~ "ZÃRUKY a to ani záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
+#~ "JAKÃKOLIV ÚČEL. Více informací najdete v GNU GPL.\n"
+#~ "\n"
+#~ "S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
+#~ "tak nestalo, obraťte se na\n"
+#~ "Free Software Foundation, Inc.,\n"
+#~ "51 Franklin Street, Fifth Floor, \n"
+#~ "Boston, MA  02110-1301  USA"
+
+#~ msgid ""
+#~ "OSS4 Output Plugin for Audacious\n"
+#~ "Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+#~ "\n"
+#~ "I would like to thank people on #audacious, especially Tony Vroon and "
+#~ "John Lindgren and of course the authors of the previous OSS plugin.\n"
+#~ "\n"
+#~ "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 3 of the License, or (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "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.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>.\n"
+#~ msgstr ""
+#~ "Výstupní modul OSS4 pro Audacious\n"
+#~ "Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+#~ "\n"
+#~ "Rád bych poděkoval lidem na #audacious, zvláště Tony Vroonovi a Johnu "
+#~ "Lindgrenovi a samozřejmě autorům předchozího modulu OSS.\n"
+#~ "\n"
+#~ "Tento program je svobodný software; můžete jej šířit a/nebo měnit\n"
+#~ "v souladu s podmínkami GNU General Public License (GPL) vydané\n"
+#~ "Free Software Foundation a to buÄ ve verzi 3 nebo (dle vaší volby)\n"
+#~ "libovolné novější.\n"
+#~ "\n"
+#~ "Program je šířen v nadÄ›ji, že bude užiteÄný, ale BEZ JAKÉKOLIV\n"
+#~ "ZÃRUKY, a to ani odvozené záruky OBCHODOVATELNOSTI nebo VHODNOSTI PRO\n"
+#~ "URČITà ÚČEL. Více informací najdete v GNU GPL.\n"
+#~ "\n"
+#~ "S tímto programem byste měli obdržet kopii GNU GPL. Pokud se\n"
+#~ "tak nestalo, vizte <http://www.gnu.org/licenses/>.\n"
+
+#~ msgid "Save All Playlists"
+#~ msgstr "Uložit všechny seznamy skladeb"
+
+#~ msgid ""
+#~ "Saves all the playlists that are open. Note that this is done "
+#~ "automatically when Audacious quits."
+#~ msgstr ""
+#~ "Uloží všechny seznamy skladeb, které jsou otevřeny. Vezměte na vědomí, že "
+#~ "toto bude rovněž provedeno pÅ™i ukonÄení Audacious."
+
+#~ msgid "Opens the playlist manager."
+#~ msgstr "Otevře správce seznamu skladeb."
+
+#~ msgid "Override generic titles"
+#~ msgstr "Přepsat původní názvy"
+
+#~ msgid "Title format:"
+#~ msgstr "Formát názvu:"
+
+#~ msgid "Ogg Vorbis Tags"
+#~ msgstr "Popisky Ogg Vorbis"
+
+#~ msgid "Ogg Vorbis Audio Plugin Configuration"
+#~ msgstr "Nastavení modulu Ogg Vorbis Audio"
+
+#~ msgid "About "
+#~ msgstr "O "
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright © 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Tento modul je uvolněn za podmínek licence GNU LGPL.\n"
+#~ "Pro podrobnosti vizte http://www.gnu.org/licenses/lgpl.html.\n"
+#~ "\n"
+#~ "Tento modul používá knihovnu AdPlug, copyright © Simon Peter aj.\n"
+#~ "Sestaveno s verzí knihovny AdPlug: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: Nastavení"
+
+#~ msgid "Sound quality"
+#~ msgstr "Kvalita zvuku"
+
+#~ msgid "Resolution"
+#~ msgstr "Rozlišení"
+
+#~ msgid "8bit"
+#~ msgstr "8 bitů"
+
+#~ msgid "16bit"
+#~ msgstr "16 bitů"
+
+#~ msgid "Channels"
+#~ msgstr "Kanály"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "Nastavení sterea není doporuÄeno, pokud jej opravdu nepotÅ™ebujete. Tato "
+#~ "volba nepřidává do zvuku žádné stereo efekty – OPL2 je prostě mono – ale "
+#~ "spotřebovává více výkonu CPU!"
+
+#~ msgid "Detect songend"
+#~ msgstr "Rozpoznat konec skladby"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "Je-li zapnuto, XMMS pozná konec skladby, zastaví ji a přejde na další ze "
+#~ "seznamu skladeb. Je-li vypnuto, XMMS nebude reagovat na konec skladby a "
+#~ "bude ji opakovat stále dokola."
+
+#~ msgid "Formats"
+#~ msgstr "Formáty"
+
+#~ msgid "Format selection"
+#~ msgstr "Výběr formátu"
+
+#~ msgid "Format"
+#~ msgstr "Formát"
+
+#~ msgid "Extension"
+#~ msgstr "Přípona"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "Vybrané druhy souborů budou rozpoznány a hrány tímto modulem. Nevybrané "
+#~ "druhy budou ignorovány a přenechány ostatním modulům."
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: Informace o souboru"
+
+#~ msgid "Author: "
+#~ msgstr "Autor: "
+
+#~ msgid "File Type: "
+#~ msgstr "Velikost souboru: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "Podskladby: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Nástroje: "
+
+#~ msgid "Orders: "
+#~ msgstr "Pořadí: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Vzorky: "
+
+#~ msgid "Song"
+#~ msgstr "Skladba"
+
+#~ msgid "Instrument name"
+#~ msgstr "Jméno nástroje"
+
+#~ msgid "Song message"
+#~ msgstr "Zpráva skladby"
+
+#~ msgid "Subsong selection"
+#~ msgstr "Výběr podskladby"
+
+#~ msgid "Order: "
+#~ msgstr "Pořadí: "
+
+#~ msgid "Pattern: "
+#~ msgstr "Vzorek: "
+
+#~ msgid "Row: "
+#~ msgstr "Řada: "
+
+#~ msgid "Speed: "
+#~ msgstr "Rychlost: "
+
+#~ msgid "Timer: "
+#~ msgstr "ÄŒasovaÄ: "
+
+#~ msgid "Select Playlist"
+#~ msgstr "Vybrat seznam skladeb"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "navrátit na souÄasnou hlasitost výstupu"
+
+#~ msgid "Pairing request for '%s'"
+#~ msgstr "Požadavek na spárování „%s“"
+
+#~ msgid "Authorization request for %s"
+#~ msgstr "Požadavek na autorizaci %s"
+
+#~ msgid "Created bonding with %s"
+#~ msgstr "Vazba s %s vytvořena"
+
+#~ msgid "Removed bonding with %s"
+#~ msgstr "Vazba s %s odstraněna"
+
+#~ msgid "Device has been switched off"
+#~ msgstr "Zařízení bylo vypnuto"
+
+#~ msgid "Device has been made non-discoverable"
+#~ msgstr "Zařízení bylo uÄinÄ›no neobjevitelným"
+
+#~ msgid "Device has been made connectable"
+#~ msgstr "Zařízení bylo uÄinÄ›no pÅ™ipojitelným"
+
+#~ msgid "Device has been made discoverable"
+#~ msgstr "Zařízení bylo uÄinÄ›no objevitelným"
+
+#~ msgid "Device has been made limited discoverable"
+#~ msgstr "Zařízení bylo uÄinÄ›no omezenÄ› objevitelným"
+
+#~ msgid "Device has been switched into pairing mode"
+#~ msgstr "Zařízení bylo přepnuto do režimu párování"
+
+#~ msgid "Bluetooth headset support plugin"
+#~ msgstr "Modul podporující náhlavní sady s bluetooth"
+
+#~ msgid ""
+#~ "Bluetooth headset support\n"
+#~ "Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
+#~ "This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and "
+#~ "the Audacious team\n"
+#~ " \n"
+#~ "In order to use the AVRCP you need the uinput module loaded into the "
+#~ "kernel\n"
+#~ "The headset keys will be recognized as normal mutimedia keys and \n"
+#~ "can be configured using the Audacious Global Hotkey plugin or ohter "
+#~ "tools \n"
+#~ "provided by your window manager\n"
+#~ msgstr ""
+#~ "Podpora náhlavních sad s bluetooth\n"
+#~ "Copyright © 2008 Paula Stanciu <paula.stanciu@gmail.com>\n"
+#~ "Toto byl projekt GSoC 2008 – PodÄ›kování patří mému uÄiteli Tony Vroonovi "
+#~ "a týmu Audacious\n"
+#~ " \n"
+#~ "Aby fungoval AVRCP, potřebuje zavést do jádra modul uinput.\n"
+#~ "TlaÄítka náhlavní sady se tak budou jevit jako normální multimediální\n"
+#~ "klávesy a mohou být nastaveny pomocí Audacious modulu Globální horké\n"
+#~ "klávesy nebo jinými nástroji, které poskytuje váš správce oken.\n"
+
+#~ msgid "Producer"
+#~ msgstr "Výrobce"
+
+#~ msgid "Available Headsets"
+#~ msgstr "Dostupné náhlavní sady"
+
+#~ msgid "Current Headset"
+#~ msgstr "SouÄasná náhlavní sada"
+
+#~ msgid "_Connect"
+#~ msgstr "_Spojit"
+
+#~ msgid "Class"
+#~ msgstr "Třída"
+
+#~ msgid "Address:"
+#~ msgstr "Adresa:"
+
+#~ msgid "Bonding finish!"
+#~ msgstr "Vazba vytvořena!"
+
+#~ msgid "No devices found!"
+#~ msgstr "Žádné zařízení nenalezeno!"
+
+#~ msgid "Scanning..."
+#~ msgstr "Vyhledává se…"
+
+#~ msgid "Pairing..."
+#~ msgstr "Páruje se…"
+
+#~ msgid "Rescan"
+#~ msgstr "Znovu vyhledat"
+
+#~ msgid "Playback->Play"
+#~ msgstr "Přehrát → Hrát"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "Přehrát → Zastavit"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "Přehrát → Pozastavit"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "Přehrát → Předchozí"
+
+#~ msgid "Playback->Next"
+#~ msgstr "Přehrát → Další"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "Přehrát → Vysunout"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "Seznam skladeb → Opakovat"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "Seznam skladeb → Náhodné přehrávání"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "Hlasitost → Zvýšit o 5"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "Hlasitost → Snížit o 5"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "Hlasitost → Zvýšit o 10"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "Hlasitost → Snížit o 10"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "Hlasitost → Ztlumit"
+
+#~ msgid "Window->Main"
+#~ msgstr "Okno → Hlavní"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "Okno → Seznam skladeb"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "Okno → Ekvalizér"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "Okno → Přejít na soubor"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: nelze otevřít zařízení %s, přeskakuji toto zařízení; "
+#~ "zkontrolujte, že soubor existuje a že máte právo jej Äíst\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr ""
+#~ "event-device-plugin: nelze vytvořit io_channel (vstupně-výstupní kanál) "
+#~ "pro zařízení %s, přeskakuji toto zařízení\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: nelze otevřít /proc/bus/input/devices, samoÄinné "
+#~ "vyhledávání událostních zařízení nebude fungovat.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: nelze otevřít io_channel (vstupně-výstupní kanál) "
+#~ "pro /proc/bus/input/devices, samoÄinné vyhledávání událostních zařízení "
+#~ "nebude fungovat.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: doÅ¡lo k chybÄ› pÅ™i Ätení z /proc/bus/input/devices, "
+#~ "samoÄinné vyhledávání událostních zařízení nebude fungovat.\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: zařízení %s nebylo nalezeno v /dev/input, "
+#~ "přeskakuji.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr ""
+#~ "event-device-plugin: nelze naÄíst konfiguraÄní soubor %s, bude použito "
+#~ "implicitní nastavení.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: neúplné informace v konfiguraÄním souboru pro "
+#~ "zařízení „%s“, přeskakuji.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurace: nelze získat hodnotu is_active pro "
+#~ "zařízení „%s“, přeskakuji.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr ""
+#~ "event-device-plugin: nelze přistoupit k místnímu adresáři %s, nastavení "
+#~ "nebude uloženo.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurace: nelze získat hodnotu filename pro "
+#~ "zařízení „%s“, přeskakuji.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurace: nelze získat hodnotu phys pro zařízení "
+#~ "„%s“, přeskakuji.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurace: nelze získat hodnotu is_custom pro "
+#~ "zařízení „%s“, přeskakuji.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurace: neoÄekávaná hodnot pro zařízení „%s“, "
+#~ "přeskakuji.\n"
+
+#~ msgid "Detected"
+#~ msgstr "Nalezeno"
+
+#~ msgid "Custom"
+#~ msgstr "Vlastní"
+
+#~ msgid "Not Detected"
+#~ msgstr "Nenalezeno"
+
+#~ msgid "Information"
+#~ msgstr "Podrobnosti"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "Nelze otevřít okno s vazbami pro nerozpoznané zařízení.\n"
+#~ "Ujistěte se, že zařízení bylo správně zapojeno."
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "Nelze otevřít vybrané zařízení.\n"
+#~ "Prosím, zkontrolujte práva k tomuto zařízení."
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug  – Přidat vlastní zařízení"
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "EvDev-Plug zkusí sám rozpoznat událostní zařízení připojená do systému\n"
+#~ "a aktualizovat údaje o nich.\n"
+#~ "Pokud vÅ¡ak samoÄinné vyhledání selže nebo máte událostní zařízení\n"
+#~ "v nestandardním adresáři (v souÄasnosti je prohledáván jen /dev/input),\n"
+#~ "můžete pÅ™idat zařízení ruÄnÄ› jako vlastní, pÅ™iÄemž budete muset zadat\n"
+#~ "jeho název a soubor tohoto zařízení."
+
+#~ msgid "Device name:"
+#~ msgstr "Název zařízení:"
+
+#~ msgid "Device file:"
+#~ msgstr "Soubor zařízení:"
+
+#~ msgid "(custom)"
+#~ msgstr "(vlastní)"
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "Prosím, zadejte jak název, tak název souboru.\n"
+#~ "Název souboru musí být uveden s absolutní cestou."
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr "Přejete si odstranit existující nastavení pro vybrané zařízení?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "Přejete si odstranit vybrané vlastní zařízení?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug – Nastavení"
+
+#~ msgid "Active"
+#~ msgstr "Aktivní"
+
+#~ msgid "Status"
+#~ msgstr "Stav"
+
+#~ msgid "Device Name"
+#~ msgstr "Název zařízení"
+
+#~ msgid "Device File"
+#~ msgstr "Soubor zařízení"
+
+#~ msgid "Device Address"
+#~ msgstr "Adresa zařízení"
+
+#~ msgid "_Bindings"
+#~ msgstr "_Vazby"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "Pro navázání, prosím, stiskněte klávesu na vašem zařízení;\n"
+#~ "pokud nebude stištěna žádná klávesa do pěti sekund,\n"
+#~ "toto okno bude zavřeno, aniž by se vazba změnila."
+
+#~ msgid ""
+#~ "This input event has been already assigned.\n"
+#~ "\n"
+#~ "It's not possible to assign multiple actions to the same input event "
+#~ "(although it's possible to assign the same action to multiple events)."
+#~ msgstr ""
+#~ "Vstupní událost již byla přiřazena.\n"
+#~ "\n"
+#~ "Není možné pÅ™iÅ™adit více akcí stejné vstupní události (aÄkoliv je možné "
+#~ "přiřadit stejnou akci více událostem)."
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug – Nastavení vazeb"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Název: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Název souboru: </b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>Fyzická adresa: </b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug – o modulu"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "dálkové ovládání pÅ™ehrávaÄe pomocí událostních zařízení\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "napsal Giacomo Lozito\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "Tento LADSPA modul nemá žádné možnosti nastavení uživatelem"
+
+#~ msgid "Name"
+#~ msgstr "Jméno"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Running plugins"
+#~ msgstr "Bežící moduly"
+
+#~ msgid "Add"
+#~ msgstr "Přidat"
+
+#~ msgid "Remove"
+#~ msgstr "Odebrat"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "Katalog LADSPA modulů"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "O modulu LIRC pro Audacious"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "Modul LIRC "
+
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "Jednoduchý modul, který vám dovolí ovládat Audacious\n"
+#~ "prostřednictvím démona dálkového ovládání LIRC.\n"
+#~ "\n"
+#~ "Pro Audacious upravil Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "z XMMS LIRC modulu, jehož tvůrci jsou:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "Informace o LIRC lze získat na:\n"
+#~ "http://lirc.org/"
+
+#~ msgid "LIRC plugin settings"
+#~ msgstr "Nastavení modulu LIRC"
+
+#~ msgid "Reconnect to LIRC server"
+#~ msgstr "Znovu se připojit k serveru LIRC"
+
+#~ msgid "Timeout before reconnecting (seconds): "
+#~ msgstr "Časový limit pro znovupřipojení (sekundy): "
+
+#~ msgid "Reconnect"
+#~ msgstr "Znovu se připojit"
+
+#~ msgid "Connection"
+#~ msgstr "Spojení"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: nelze inicializovat podporu LIRC\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: nelze Äíst z konfiguraÄního souboru LIRC\n"
+#~ "%s: prosím, pÅ™eÄtÄ›te si dokumentaci k LIRC,\n"
+#~ "%s: jak správnÄ› vytvoÅ™it konfiguraÄní soubor\n"
+
+#~ msgid "%s: trying to reconnect...\n"
+#~ msgstr "%s: pokouším se znovu připojit…\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: neznámý příkaz „%s“\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: odpojeno od LIRC\n"
+
+# FIXME: plural
+#~ msgid "%s: will try reconnect every %d seconds...\n"
+#~ msgstr "%s: pokus o připojení budu opakovat každých %d sekund…\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "Nastavení ModPlugu"
+
+#~ msgid "16 bit"
+#~ msgstr "16 bitů"
+
+#~ msgid "8 bit"
+#~ msgstr "8 bitů"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "Mono (smísit kanály)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "Nejbližší (nejrychlejší)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "Lineární (rychlé)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "Spline (kvalitní)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "FIR filtr osmého řádu (velmi kvalitní)"
+
+#~ msgid "96 kHz"
+#~ msgstr "96 kHz "
+
+#~ msgid "48 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Vzorkovací kmitoÄet"
+
+#~ msgid "Depth"
+#~ msgstr "Hloubka"
+
+#~ msgid "Delay"
+#~ msgstr "Zpoždění"
+
+#~ msgid "Reverb"
+#~ msgstr "Dozvuk"
+
+#~ msgid "Amount"
+#~ msgstr "Množství"
+
+#~ msgid "Range"
+#~ msgstr "Rozsah"
+
+#~ msgid "Bass Boost"
+#~ msgstr "Zvýraznění hlubokých tónů"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr ""
+#~ "Poznámka: Vysoké hodnoty\n"
+#~ "předzesílení mohou vést k ořezu\n"
+#~ "zvuku (obtěžující praskání)!"
+
+#~ msgid "Effects"
+#~ msgstr "Efekty"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "Použít jméno souboru jako název skladby"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "Rychlé informace o seznamu skladeb"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "Redukce Å¡umu"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Hrát MODY z Amigy"
+
+#~ msgid "Don't loop"
+#~ msgstr "Nevracet se ve smyÄce"
+
+#~ msgid "Loop"
+#~ msgstr "Opakovat"
+
+#~ msgid "time(s)"
+#~ msgstr "×"
+
+#~ msgid "Loop forever"
+#~ msgstr "NekoneÄná smyÄka"
+
+#~ msgid "Looping"
+#~ msgstr "SmyÄky"
+
+#~ msgid "MOD Info"
+#~ msgstr "Informace o MODU"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "Jméno souboru:\n"
+#~ "Název skladby:\n"
+#~ "Typ:\n"
+#~ "Délka:\n"
+#~ "Rychlost:\n"
+#~ "Tempo:\n"
+#~ "Vzorků:\n"
+#~ "Nástrojů:\n"
+#~ "Vzory:\n"
+#~ "Kanálů:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "Vzorky"
+
+#~ msgid "Instruments"
+#~ msgstr "Nástroje"
+
+#~ msgid "Message"
+#~ msgstr "Vzkaz"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Vstupní modul pro Audacious Modplug verze "
+
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Zvukové jádro Modplugu napsal Olivier Lapicque.\n"
+#~ "XMMS rozhraní Modplugu od Kentona Varda.\n"
+#~ "© 2000 Olivier Lapicque a Kenton Varda.\n"
+#~ "Aktualizuje a udržuje Konstanty Bialkowski.\n"
+#~ "Na BMP převedl Theofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "O modulu Modplug"
+
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Pokud možno, používat bitmapové fonty"
+
+#~ msgid ""
+#~ "Use bitmap fonts if they are available. Bitmap fonts do not support "
+#~ "Unicode strings."
+#~ msgstr ""
+#~ "Pokud to bude možné, použijí se bitmapové fonty. Bitmapové fonty "
+#~ "nepodporují unicodové řetězce."
+
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>_Různé</b>"
+
+#~ msgid "Show separators in playlist"
+#~ msgstr "Zobrazovat oddÄ›lovaÄe v seznamu skladeb"
+
+#~ msgid "Show window manager decoration"
+#~ msgstr "Zobrazovat dekoraci podle správce oken"
+
+#~ msgid "This enables the window manager to show decorations for windows."
+#~ msgstr ""
+#~ "Tímto necháte rozhodnutí na správci oken, kdy má zobrazovat dekorace oken."
+
+#~ msgid "Use two-way text scroller"
+#~ msgstr "Pohybovat textem v obou směrech"
+
+#~ msgid ""
+#~ "If selected, the file information text in the main window will scroll "
+#~ "back and forth. If not selected, the text will only scroll in one "
+#~ "direction."
+#~ msgstr ""
+#~ "Bude-li vybráno, text s informacemi v hlavním okně bude běhat tam a zpět. "
+#~ "Nebude-li vybráno, text se bude pohybovat jen jedním směrem."
+
+#~ msgid "Disable inline gtk theme"
+#~ msgstr "Zakázat vnitřní téma GTK"
+
+#~ msgid "Random skin on play"
+#~ msgstr "Při přehrávání zvolit náhodné téma"
+
+#~ msgid "Allow loading incomplete skins"
+#~ msgstr "Povolit naÄítání neúplných vzhledů"
+
+#~ msgid ""
+#~ "If selected, audacious won't refuse loading broken skins. Use only if "
+#~ "your favourite skin doesn't work"
+#~ msgstr ""
+#~ "Je-li vybráno, Audacious neodmítne nahrát rozbitý vzhled. Použijte jen, "
+#~ "když váš oblíbený vzhled nefunguje."
+
+#~ msgid "Color Adjustment"
+#~ msgstr "Přizpůsobení barvy"
+
+#~ msgid ""
+#~ "Audacious allows you to alter the color balance of the skinned UI. The "
+#~ "sliders below will allow you to do this."
+#~ msgstr ""
+#~ "Audacious umožňuje změnit zabarvení měnitelného vzhledu uživatelského "
+#~ "rozhraní pomocí následujících jezdců."
+
+#~ msgid "Blue"
+#~ msgstr "Modrá"
+
+#~ msgid "Green"
+#~ msgstr "Zelená"
+
+#~ msgid "Red"
+#~ msgstr "Červená"
+
+#~ msgid "Color adjustment ..."
+#~ msgstr "Přizpůsobení barvy…"
+
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "Zakázat „Škálovat GUI“"
+
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Povolit „škálovat GUI“"
+
+#~ msgid "DoubleSize"
+#~ msgstr "Dvojitá velikost"
+
+#~ msgid "Easy Move"
+#~ msgstr "Snadný pohyb"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "Analyzátor spektra"
+
+#~ msgid "Can't jump to time when no track is being played.\n"
+#~ msgstr "Když nehraje žádná skladba, nelze pÅ™ejít na Äas.\n"
+
+#~ msgid "minutes:seconds"
+#~ msgstr "minuty:sekundy"
+
+#~ msgid "Track length:"
+#~ msgstr "Délka stopy:"
+
+#~ msgid "Error writing playlist \"%s\": %s"
+#~ msgstr "Chyba při zapisování seznamu skladeb „%s“: %s"
+
+#~ msgid "%s already exist. Continue?"
+#~ msgstr "%s už existuje. PokraÄovat?"
+
+#~ msgid "Show/hide infoarea"
+#~ msgstr "Zobrazit/skrýt oblast informací"
+
+#~ msgid "Show main menu"
+#~ msgstr "Zobrazit hlavní nabídku"
+
+#~ msgid "Show/hide main menu"
+#~ msgstr "Zobrazit/skrýt hlavní nabídku"
+
+#~ msgid "Show/hide statusbar"
+#~ msgstr "Zobrazit/skrýt stavový panel"
+
+#~ msgid "Import Playlist ..."
+#~ msgstr "Importovat seznam skladeb…"
+
+#~ msgid "Export Playlist ..."
+#~ msgstr "Exportovat seznam skladeb…"
+
+#~ msgid "Refresh"
+#~ msgstr "Obnovit"
+
+#~ msgid "Refresh Selected"
+#~ msgstr "Obnovit oznaÄené"
+
+#~ msgid "Refreshes metadata associated with selected entries."
+#~ msgstr "Obnovuje metadata náležící vybraným položkám."
+
+#~ msgid "Edit title"
+#~ msgstr "Upravit název"
+
+#~ msgid "Edit the playlist title."
+#~ msgstr "Upravit název seznamu skladeb."
+
+#~ msgid "By Formatted Title"
+#~ msgstr "Podle formátovaného názvu"
+
+#~ msgid "Components"
+#~ msgstr "SouÄásti"
+
+#~ msgid "Upload selected track(s)"
+#~ msgstr "Nahrát vybranou stopu(y)"
+
+#~ msgid "MTP device handler"
+#~ msgstr "Deskriptor MTP zařízení"
+
+#~ msgid "Skinned Interface"
+#~ msgstr "Témata rozhraní"
+
+#~ msgid "Show main player window"
+#~ msgstr "Zobrazit hlavním okno pÅ™ehrávaÄe"
+
+#~ msgid "Ignore"
+#~ msgstr "Ignorovat"
+
+#~ msgid ""
+#~ "Audacious has been started with all of its windows hidden.\n"
+#~ "You may want to show the player window again to control Audacious; "
+#~ "otherwise, you'll have to control it remotely via audtool or enabled "
+#~ "plugins (such as the statusicon plugin)."
+#~ msgstr ""
+#~ "Audacious byl spuštěn se všemi svými okny skrytými.\n"
+#~ "Asi budete chtít opÄ›t zobrazit okno pÅ™ehrávaÄe, abyste mohli Audacious "
+#~ "ovládat. V opaÄném případÄ› si budete muset vystaÄit se vzdáleným "
+#~ "ovládáním přes audtool nebo povolený zásuvný modul (např. modul "
+#~ "statusicon)."
+
+#~ msgid "Always ignore, show/hide is controlled remotely"
+#~ msgstr "Vždy ignorovat, zobrazit/skrýt se ovládá vzdáleně"
+
+#~ msgid "Audacious - broken GTK engine usage warning"
+#~ msgstr "Audacious – varování o rozbitém jádru GTK"
+
+#~ msgid ""
+#~ "<big><b>Broken GTK engine in use</b></big>\n"
+#~ "\n"
+#~ "Audacious has detected that you are using a broken GTK engine.\n"
+#~ "\n"
+#~ "The theme engine you are using, <i>%s</i>, is incompatible with some of "
+#~ "the features used by modern skins. The incompatible features have been "
+#~ "disabled for this session.\n"
+#~ "\n"
+#~ "To use these features, please consider using a different GTK theme engine."
+#~ msgstr ""
+#~ "<big><b>Používá se rozbité jádro GTK</b></big>\n"
+#~ "\n"
+#~ "Audacious zjistil, že používáte GTK s rozbitým jádrem.\n"
+#~ "\n"
+#~ "Jádro pro zpracování témat, které používáte (<i>%s</i>), není sluÄitelné "
+#~ "s některými funkcemi používanými moderními vzhledy. Pro tuto relaci byly "
+#~ "problematické funkce vypnuty.\n"
+#~ " \n"
+#~ "Abyste mohli využít těchto funkcí, zvažte použití jiného tématického "
+#~ "jádra GTK."
+
+#~ msgid "Do not display this warning again"
+#~ msgstr "Toto varování již příště nezobrazovat"
+
+#~ msgid "Save as Static Playlist"
+#~ msgstr "Uložit jako statický seznam skladeb"
+
+#~ msgid "Use Relative Path"
+#~ msgstr "Použít relativní cestu"
+
+#~ msgid "Load Playlist"
+#~ msgstr "NaÄíst seznam skladeb"
+
+#~ msgid "Save Playlist"
+#~ msgstr "Uložit seznam skladeb"
+
+#~ msgid "%s: %d kbps, %d Hz, %s"
+#~ msgstr "%s: %d kb/s, %d Hz, %s"
+
+#~ msgid ""
+#~ "* Select ALSA output ports *\n"
+#~ "MIDI events will be sent to the ports selected here. In example, if your "
+#~ "audio card provides a hardware synth and you want to play MIDI with it, "
+#~ "you'll probably want to select the wavetable synthesizer ports."
+#~ msgstr ""
+#~ "* Vyberte výstupní port ALSY *\n"
+#~ "MIDI události budou zasílány portům zde vybraným. Na příklad pokud vaše "
+#~ "zvuková karta poskytuje hardwarový syntetizátor a chcete-li jím přehrávat "
+#~ "MIDI, budete pravděpodobně potřebovat vybrat porty tabulkového "
+#~ "(wavetable) syntetizátoru."
+
+#~ msgid ""
+#~ "* Select ALSA mixer card *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volumeslider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Vyberte kartu se směšovaÄem ALSY *\n"
+#~ "Backend ALSY posílá výstup přímo skrz ALSU. Efekty a výstupní moduly "
+#~ "pÅ™ehrávaÄe nebudou použity. BÄ›hem pÅ™ehrávání jezdec ovládající hlasitost "
+#~ "bude pracovat se směšovaÄem, který zde vyberete. Používáte-li porty "
+#~ "tabulkového syntetizátoru, pravděpodobně zde budete chtít vybrat "
+#~ "„Ovládání syntézy“."
+
+#~ msgid ""
+#~ "* Select ALSA mixer control *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volume slider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Vyberte ovládání směšovaÄe ALSY *\n"
+#~ "Backend ALSY posílá výstup přímo skrz ALSU. Efekty a výstupní moduly "
+#~ "pÅ™ehrávaÄe nebudou použity. BÄ›hem pÅ™ehrávání jezdec ovládající hlasitost "
+#~ "bude pracovat se směšovaÄem, který zde vyberete. Používáte-li porty "
+#~ "tabulkového syntetizátoru, pravděpodobně zde budete chtít vybrat "
+#~ "„Ovládání syntézy“."
+
+#~ msgid ""
+#~ "* Backend selection *\n"
+#~ "AMIDI-Plug works with backends, in a modular fashion; here you should "
+#~ "select your backend; that is, the way MIDI events are going to be handled "
+#~ "and played.\n"
+#~ "If you have a hardware synthesizer on your audio card, and ALSA supports "
+#~ "it, you'll want to use the ALSA backend. It can also be used with "
+#~ "anything that provides an interface to the ALSA sequencer, including "
+#~ "software synths or external devices.\n"
+#~ "If you want to rely on a software synthesizer and/or want to pipe audio "
+#~ "into effect and output plugins of the player you'll want to use the good "
+#~ "FluidSynth backend.\n"
+#~ "Press the info button to read specific information about each backend."
+#~ msgstr ""
+#~ "* Výběr backendu *\n"
+#~ "AMIDI-Plug pracuje s backendy modulárním způsobem. Zde byste si měli "
+#~ "vybrat svůj backend, tj. způsob, jakým způsobem se bude zacházet s MIDI "
+#~ "událostmi a jak budou hrány.\n"
+#~ "Jestliže na zvukové kartě máte hardwarový syntetizátor a ALSA jej "
+#~ "podporuje, je rozumné použít backend ALSY. Taktéž přijde vhod, máte "
+#~ "cokoliv jiného, vÄetnÄ› softwarových syntetizátorů nebo vnÄ›jších zařízení, "
+#~ "co má rozhraní k sekvenceru ALSY.\n"
+#~ "Pokud se chcete spolehnout na softwarový syntetizátor a/nebo chcete zvuk "
+#~ "protáhnout efektovými a výstupním modulem, dobrou volbou bude backend "
+#~ "FluidSynth.\n"
+#~ "Podrobnosti o jednotlivých backendech získáte pÅ™es tlaÄítko „Podrobnosti“."
+
+#~ msgid ""
+#~ "* Transpose function *\n"
+#~ "This option allows you to play the midi file transposed in a different "
+#~ "key, by shifting of the desired number of semitones all its notes "
+#~ "(excepting those on midi channel 10, reserved for percussions). "
+#~ "Especially useful if you wish to sing or play along with another "
+#~ "instrument."
+#~ msgstr ""
+#~ "* Funkce transpozice *\n"
+#~ "Tato volba nabízí transpozici přehrávaného MIDI souboru do jiné tóniny "
+#~ "o zadaný poÄet půltónů (kromÄ› tónů 10. stopy, která je vyhrazena pro "
+#~ "bicí). Tato funkce je užiteÄná, chcete-li doprovázet skladbu zpÄ›vem Äi "
+#~ "jiným nástrojem."
+
+#~ msgid ""
+#~ "* Drumshift function *\n"
+#~ "This option allows you to shift notes on midi channel 10 (the standard "
+#~ "percussions channel) of the desired number of semitones. This results in "
+#~ "different drumset and percussions being used during midi playback, so if "
+#~ "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
+#~ "with this value."
+#~ msgstr ""
+#~ "* Funkce posunu bubnů *\n"
+#~ "Tato volba nabízí posun not na 10. MIDI kanále (standardní kanál pro "
+#~ "bicí) o zadaný poÄet půltónů. Výsledkem je odliÅ¡ná sada bicích nástrojů "
+#~ "použitá bÄ›hem pÅ™ehrávání. Takže chcete-li vylepÅ¡it (ztlumit Äi jinak "
+#~ "pozměnit) zvuk bicích, pohrejte si s touto hodnotou."
+
+#~ msgid ""
+#~ "* Pre-calculate MIDI length *\n"
+#~ "If this option is enabled, AMIDI-Plug will calculate the MIDI file length "
+#~ "as soon as the player requests it, instead of doing that only when the "
+#~ "MIDI file is being played. In example, MIDI length will be calculated "
+#~ "straight after adding MIDI files in a playlist. Disable this option if "
+#~ "you want faster playlist loading (when a lot of MIDI files are added), "
+#~ "enable it to display more information in the playlist straight after "
+#~ "loading."
+#~ msgstr ""
+#~ "* PÅ™edpoÄítat délku skladby *\n"
+#~ "Pokud je tato funkce zapnuta, AMIDI-Plug vypoÄítá délku MIDI souboru "
+#~ "okamžitÄ›, jak o ni pÅ™ehrávaÄ požádá. Jinak bude délka urÄena až pÅ™i "
+#~ "prvním pÅ™ehrání. Na příklad délka skladby bude vypoÄtena ihned po pÅ™idání "
+#~ "MIDI souboru do seznamu skladeb. Vypněte tuto funkci, požadujete-li "
+#~ "rychlejší nahrávání seznamu skladeb (obzvláště má-li mnoho MIDI souborů), "
+#~ "zapnÄ›te tuto funkci, potÅ™ebujete-li vidÄ›t délku skladeb ihned po naÄtení "
+#~ "seznamu."
+
+#~ msgid ""
+#~ "* Extract comments from MIDI files *\n"
+#~ "Some MIDI files contain text comments (author, copyright, instrument "
+#~ "notes, etc.). If this option is enabled, AMIDI-Plug will extract and "
+#~ "display comments (if available) in the file information dialog."
+#~ msgstr ""
+#~ "* Vytáhnout komentáře z MIDI souborů *\n"
+#~ "Některé MIDI soubory obsahují textové komentáře (autora, autorská práva, "
+#~ "poznámky k nástrojům apod.). Pokud je tato funkce zapnutá, AMIDI-Plug "
+#~ "tyto komentáře zjistí a zobrazí v dialogu o podrobnostech souboru (pokud "
+#~ "existují)."
+
+#~ msgid ""
+#~ "* Extract lyrics from MIDI files *\n"
+#~ "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-"
+#~ "Plug will extract and display song lyrics (if available) in the file "
+#~ "information dialog."
+#~ msgstr ""
+#~ "* Vytáhnout text z MIDI souborů *\n"
+#~ "Některé MIDI soubory obsahují text písně. Pokud je tato funkce zapnuta, "
+#~ "AMIDI-Plug tento text získá a zobrazí v dialogu o podrobnostech souboru "
+#~ "(pokud existuje)."
+
+#~ msgid ""
+#~ "* Select SoundFont files *\n"
+#~ "In order to play MIDI with FluidSynth, you need to specify at least one "
+#~ "valid SoundFont file here (use absolute paths). The loading order is from "
+#~ "the top (first) to the bottom (last)."
+#~ msgstr ""
+#~ "* Výběr SoundFont souborů *\n"
+#~ "Abyste mohli pÅ™ehrávat MIDI pÅ™es FluidSynth, musíte urÄit alespoň jeden "
+#~ "platný soundfontový soubor (použijte absolutní cesty). Pořadí nahrávání "
+#~ "je od shora (první) dolů (poslední)."
+
+#~ msgid ""
+#~ "* Load SoundFont on player start *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Nahrát SoundFont pÅ™i spuÅ¡tÄ›ní pÅ™ehrávaÄe *\n"
+#~ "V závislosti na rychlosti vašeho systému nahrávání SoundFontu do "
+#~ "FluidSynthu může trvat i několik sekund. Jedná se jednorázovou záležitost "
+#~ "(soundfont zůstane nahraný, dokud jej nevyměníte nebo nezrušíte backend), "
+#~ "která může být provedena bÄ›hem spouÅ¡tÄ›ní pÅ™ehrávaÄe nebo pÅ™ed zahájením "
+#~ "produkce prvního MIDI souboru (druhá možnost je výhodnější, jestliže "
+#~ "neplánujete poslouchat jen MIDI soubory)."
+
+#~ msgid ""
+#~ "* Load SoundFont on first midifile play *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Nahrát SoundFont před prvním MIDI souborem *\n"
+#~ "V závislosti na rychlosti vašeho systému nahrávání SoundFontu do "
+#~ "FluidSynthu může trvat i několik sekund. Jedná se jednorázovou záležitost "
+#~ "(soundfont zůstane nahraný, dokud jej nevyměníte nebo nezrušíte backend), "
+#~ "která může být provedena bÄ›hem spouÅ¡tÄ›ní pÅ™ehrávaÄe nebo pÅ™ed zahájením "
+#~ "produkce prvního MIDI souboru (druhá možnost je výhodnější, jestliže "
+#~ "neplánujete poslouchat jen MIDI soubory)."
+
+#~ msgid ""
+#~ "* Synthesizer gain *\n"
+#~ "From FluidSynth docs: the gain is applied to the final or master output "
+#~ "of the synthesizer; it is set to a low value by default to avoid the "
+#~ "saturation of the output when random MIDI files are played."
+#~ msgstr ""
+#~ "* Zesílení syntetizátoru *\n"
+#~ "Z dokumentace FluidSynth: zesílení je aplikován na koneÄný nebo hlavní "
+#~ "výstup syntetizátoru. Implicitně je nastaveno na nízkou hodnotu, aby se "
+#~ "zabránilo ořezávání při přehrávání různorodých MIDI souborů."
+
+#~ msgid ""
+#~ "* Synthesizer polyphony *\n"
+#~ "From FluidSynth docs: the polyphony defines how many voices can be played "
+#~ "in parallel; the number of voices is not necessarily equivalent to the "
+#~ "number of notes played simultaneously; indeed, when a note is struck on a "
+#~ "specific MIDI channel, the preset on that channel may create several "
+#~ "voices, for example, one for the left audio channel and one for the right "
+#~ "audio channels; the number of voices activated depends on the number of "
+#~ "instrument zones that fall in the correspond to the velocity and key of "
+#~ "the played note."
+#~ msgstr ""
+#~ "* Vícehlas syntetizátoru *\n"
+#~ "Z dokumentace FluidSynth: vícehlas urÄuje, kolik hlasů může hrát "
+#~ "najednou. PoÄet hlasů není nezbytnÄ› shodný s poÄtem not hraných souÄasnÄ›. "
+#~ "Ve skuteÄnosti když je nota vyslána na urÄitém MIDI kanálu, pÅ™edvolba na "
+#~ "takovém kanálu může vytvořit více hlasů, na příklad jeden pro levý "
+#~ "zvukový kanál a jeden pro pravý zvukový kanál. PoÄet aktivovaných hlasů "
+#~ "závisí na poÄtu nástrojových zón, které spadají do odpovídající rychlosti "
+#~ "a klíÄi hrané noty."
+
+#~ msgid ""
+#~ "* Synthesizer reverb *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
+#~ "activated; note that when the reverb module is active, the amount of "
+#~ "signal sent to the reverb module depends on the \"reverb send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Dozvuk syntetizátoru *\n"
+#~ "Z dokumentace FluidSynth: je-li nastaveno na „ano“, modul efektu dozvuku "
+#~ "je aktivován. Pamatujte, že při aktivovaném modulu dozvuku je množství "
+#~ "signálu zasílaného tomuto modulu závislé na generátoru „zasílání "
+#~ "dozvuku“, který je definován v SoundFontu."
+
+#~ msgid ""
+#~ "* Synthesizer chorus *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
+#~ "activated; note that when the chorus module is active, the amount of "
+#~ "signal sent to the chorus module depends on the \"chorus send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Sbor syntetizátoru *\n"
+#~ "Z dokumentace FluidSynth: je-li nastaveno na „ano“, modul efektu sboru je "
+#~ "aktivován. Pamatujte, že při aktivovaném modulu sboru je množství signálu "
+#~ "zasílaného tomuto modulu závislé na generátoru „zasílání sboru“, který je "
+#~ "definován v SoundFontu."
+
+#~ msgid ""
+#~ "* Synthesizer samplerate *\n"
+#~ "The sample rate of the audio generated by the synthesizer. You can also "
+#~ "specify a custom value in the interval 22050Hz-96000Hz."
+#~ msgstr ""
+#~ "* Vzorkovací frekvence syntetizátoru *\n"
+#~ "Vzorkovací frekvence zvuku generovaného syntetizátorem. Lze zadat vlastní "
+#~ "hodnotu z intervalu 22050 Hz–96000 Hz."
+
+#~ msgid "Target volume:"
+#~ msgstr "Cílová hlasitost:"
+
+#~ msgid ""
+#~ "If enabled, the extension from the original filename will not be stripped "
+#~ "before adding the new file extension to the end."
+#~ msgstr ""
+#~ "Je-li zapnuto, přípona ze jména původního souboru nebude před přidáním "
+#~ "nové přípony odstraněna."
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "nejlepší/nejpomalejší:0;\n"
+#~ "nejhorší/nejrychlejší:9;\n"
+#~ "doporuÄená:2;\n"
+#~ "výchozí:5;"
+
+#~ msgid "Adds 16 bit checksum to every frame"
+#~ msgstr "Ke každému rámci pÅ™idat 16b kontrolní souÄet"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "Proměnný datový tok"
+
+#~ msgid "Average bitrate"
+#~ msgstr "Průměrný datový tok"
+
+#~ msgid ""
+#~ "For use with players that do not support low bitrate mp3 (Apex AD600-A "
+#~ "DVD/mp3 player)"
+#~ msgstr ""
+#~ "Pro použití v pÅ™ehrávaÄích, které nepodporují úzkopásmové MP3 (pÅ™ehrávaÄ "
+#~ "Apex AD600-A DVD/MP3)"
+
+#~ msgid ""
+#~ "highest:0;\n"
+#~ "lowest:9;\n"
+#~ "default:4;"
+#~ msgstr ""
+#~ "nejvyšší:0;\n"
+#~ "nejnižší:9;\n"
+#~ "výchozí:4;"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "Zvukový modul FLAC"
+
+#~ msgid "Show playlists"
+#~ msgstr "Zobrazit seznamy skladeb"
+
+#~ msgid "Show/hide playlists"
+#~ msgstr "Zobrazit/skrýt seznamy skladeb"
+
+#~ msgid "LyricWiki"
+#~ msgstr "LyricWiki"
+
+#~ msgid "Stream browser"
+#~ msgstr "ProhlížeÄ proudů"
+
+#~ msgid "Streambrowser"
+#~ msgstr "ProhlížeÄ proudů"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "BSD ovladaÄ pro Sun programu XMMS\n"
+#~ "\n"
+#~ "Copyright © 2001 CubeSoft Communications, Inc.\n"
+#~ "Správce: <vedge na csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "Zařízení ovládání zvuku:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Velikost vyrovnávací paměti (ms):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "Zařízení ovládání hlasitosti:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "XMMS používá výluÄný přístup k mixéru"
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Nastavení ovladaÄe pro Sun"
+
+#~ msgid "Queue"
+#~ msgstr "Fronta"
+
+#~ msgid "Effect strength:"
+#~ msgstr "Síla efektu:"
+
#~ msgid "PREAMP"
#~ msgstr "PREAMP"
@@ -5965,12 +5958,6 @@ msgstr ""
#~ "\n"
#~ "Neznámý typ souboru %s.\n"
-#~ msgid "Randomize List"
-#~ msgstr "Zamíchat pořadí"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Sklady v seznamu seřadí náhodně."
-
#~ msgid "Start of playback"
#~ msgstr "ZaÄátek pÅ™ehrávání"
@@ -6895,9 +6882,6 @@ msgstr ""
#~ msgid "Artist:"
#~ msgstr "Umělec:"
-#~ msgid "Album:"
-#~ msgstr "Album:"
-
#~ msgid "Comment:"
#~ msgstr "Komentář:"
@@ -6928,9 +6912,6 @@ msgstr ""
#~ msgid "bits per sample: %d"
#~ msgstr "bitů na vzorek: %d"
-#~ msgid "channels: %d"
-#~ msgstr "kanálů: %d"
-
#~ msgid "length: %d:%.2d"
#~ msgstr "délka: %d:%.2d"
@@ -6988,9 +6969,6 @@ msgstr ""
#~ msgid "Entries"
#~ msgstr "Položky"
-#~ msgid "_Rename"
-#~ msgstr "_Přejmenovat"
-
#~ msgid "VBR"
#~ msgstr "VBR"
@@ -7164,9 +7142,6 @@ msgstr ""
#~ msgid " Target & gain"
#~ msgstr " Cíl a zesílení"
-#~ msgid "Target audio level:"
-#~ msgstr "Cílová hladina hlasitosti:"
-
#~ msgid "Maximum gain:"
#~ msgstr "Maximální zesílení:"
@@ -7461,9 +7436,6 @@ msgstr ""
#~ msgid "Musepack Tag"
#~ msgstr "Popis musepacku"
-#~ msgid "Track:"
-#~ msgstr "Stopa:"
-
#~ msgid "Musepack Info"
#~ msgstr "Informace o musepacku"
@@ -7564,9 +7536,6 @@ msgstr ""
#~ msgid "Eighth (~6 fps)"
#~ msgstr "Osminová (~6 Hz)"
-#~ msgid "Audio Settings"
-#~ msgstr "Nastavení zvuku"
-
#~ msgid "Force reopen audio when audio type changed"
#~ msgstr "Vynutit znovuotevření zvuku, když se typ zvuku změní"
@@ -8407,12 +8376,6 @@ msgstr ""
#~ msgid " Ogg Vorbis Info "
#~ msgstr " Ogg Vorbis Info "
-#~ msgid "Bit rate:"
-#~ msgstr "Datový tok:"
-
-#~ msgid "Length:"
-#~ msgstr "Délka:"
-
#~ msgid "File size:"
#~ msgstr "Velikost souboru:"
@@ -9003,9 +8966,6 @@ msgstr ""
#~ msgid "Add new files to a temporary playlist"
#~ msgstr "PÅ™idat soubory do doÄasného seznamu skladeb"
-#~ msgid "Display the main window"
-#~ msgstr "Zobrazit hlavní okno"
-
#~ msgid "Display all open Audacious windows"
#~ msgstr "Zobrazit všechna okna Audacious"
@@ -9250,24 +9210,15 @@ msgstr ""
#~ msgid "Mouse"
#~ msgstr "Myš"
-#~ msgid "Artist"
-#~ msgstr "Umělec"
-
#~ msgid "Tracknumber"
#~ msgstr "Číslo stopy"
#~ msgid "Genre"
#~ msgstr "Žánr"
-#~ msgid "Filepath"
-#~ msgstr "Cesta k souboru"
-
#~ msgid "Date"
#~ msgstr "Datum"
-#~ msgid "Year"
-#~ msgstr "Rok"
-
#~ msgid "localhost"
#~ msgstr "localhost"
@@ -9298,12 +9249,6 @@ msgstr ""
#~ msgid "Add/Open URL Dialog"
#~ msgstr "Dialog Přidat/otevřít URL"
-#~ msgid "Un_queue"
-#~ msgstr "Ode_brat z fronty"
-
-#~ msgid "_Queue"
-#~ msgstr "_Fronta"
-
#~ msgid "_Filter:"
#~ msgstr "_Filtr:"
@@ -9320,9 +9265,6 @@ msgstr ""
#~ msgid "File extension"
#~ msgstr "Přípona souboru"
-#~ msgid "Track number"
-#~ msgstr "Číslo stopy"
-
#~ msgid "%{n:...%}: Display \"...\" only if element %n is present"
#~ msgstr "%{n:…%}: Zobraz „…“ pouze pokud %n nechybí"
@@ -10307,9 +10249,6 @@ msgstr ""
#~ msgid "Visualization Plugins"
#~ msgstr "VizualizaÄní moduly"
-#~ msgid "Enable/Disable"
-#~ msgstr "Povolit/zakázat"
-
#~ msgid "Fullscreen"
#~ msgstr "Na celou obrazovku"
diff --git a/po/cy.po b/po/cy.po
index 811a959..ad1235b 100644
--- a/po/cy.po
+++ b/po/cy.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins 1.3\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2007-02-12 03:37-0600\n"
"Last-Translator: William Pitcock <nenolod@sacredspiral.co.uk>\n"
"Language-Team: Welsh <i18n+cy@sacredspiral.co.uk>\n"
@@ -16,7 +16,7 @@ msgstr ""
"X-Poedit-Language: Welsh\n"
"X-Poedit-SourceCharset: utf-8\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -24,572 +24,55 @@ msgid ""
"Copyright (c) 2005-2006 Audacious team"
msgstr ""
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "Ynghylch Ategyn Sain MPEG"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Ynghylch"
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Hawlfraint (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Mae'r rhaglen hwn yn rhyddhau â GNU LGPL.\n"
-"Canfod http://www.gnu.org/licenses/lgpl.html am manylion.\n"
-"\n"
-"Mae'r rhaglen defnyddio yn AdPlug llyfrgell, pa ys hawlfraint (C) Simon "
-"Peter, et al.\n"
-"Fersiwn cynnwys AdPlug llyfrgell:"
-
-#: src/adplug/adplug-xmms.cc:234
-#, fuzzy
-msgid "AdPlug :: Configuration"
-msgstr "AMIDI-Plug - ffurfweddu"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Iawn"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Dileu"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Cyffredinol"
-
-#: src/adplug/adplug-xmms.cc:281
-#, fuzzy
-msgid "Sound quality"
-msgstr "Clip Sain"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-#, fuzzy
-msgid "Resolution"
-msgstr "Cydraniad:"
-
-#: src/adplug/adplug-xmms.cc:288
-#, fuzzy
-msgid "8bit"
-msgstr "8 did"
-
-#: src/adplug/adplug-xmms.cc:293
-#, fuzzy
-msgid "16bit"
-msgstr "16 did"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Sianeli:"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Chwarae"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:375
-#, fuzzy
-msgid "Formats"
-msgstr "Fformat:"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:385
-#, fuzzy
-msgid "Format"
-msgstr "Fformat:"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Enw ffeil"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-#, fuzzy
-msgid "Title: "
-msgstr "Teitl:"
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:539
-#, fuzzy
-msgid "File Type: "
-msgstr "Maint ffeil:"
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:541
-#, fuzzy
-msgid "Instruments: "
-msgstr "Offerynnol"
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:551
-#, fuzzy
-msgid "Song"
-msgstr "Swing"
-
-#: src/adplug/adplug-xmms.cc:577
-#, fuzzy
-msgid "Instrument name"
-msgstr "Offerynnol"
-
-#: src/adplug/adplug-xmms.cc:619
-#, fuzzy
-msgid "Song message"
-msgstr "Newid Cân %s"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:711
-#, fuzzy
-msgid "Speed: "
-msgstr "Llais"
-
-#: src/adplug/adplug-xmms.cc:712
-#, fuzzy
-msgid "Timer: "
-msgstr "Teitl:"
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr ""
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr ""
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Cau"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr ""
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr ""
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "Iawn"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr ""
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr ""
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr ""
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr ""
-
-#: src/alarm/interface.c:388
-#, fuzzy
-msgid "Alarm Settings"
-msgstr "Gosodiadau Cymysgu"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-#, fuzzy
-msgid "Time"
-msgstr "Teitl"
-
-#: src/alarm/interface.c:445
-#, fuzzy
-msgid "hours"
-msgstr "Chorus"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr ""
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr ""
-
-#: src/alarm/interface.c:554
-#, fuzzy
-msgid "Quiet after:"
-msgstr "Didradd:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr ""
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr ""
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "Rhagosodedig"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr ""
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr ""
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr ""
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr ""
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr ""
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr ""
-
-#: src/alarm/interface.c:1013
-#, fuzzy
-msgid "Sunday"
-msgstr "Trac Sain"
-
-#: src/alarm/interface.c:1023
-#, fuzzy
-msgid "Monday"
-msgstr "Mono"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr ""
-
-#: src/alarm/interface.c:1050
-#, fuzzy
-msgid "Fading"
-msgstr "cynnydd"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-#, fuzzy
-msgid "seconds"
-msgstr "eiliad"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-#, fuzzy
-msgid "Volume"
-msgstr "Sain:(%)"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr ""
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr ""
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr ""
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-#, fuzzy
-msgid "%"
-msgstr "%d"
-
-#: src/alarm/interface.c:1174
-#, fuzzy
-msgid "Final"
-msgstr "Enw ffeil"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr ""
-
-#: src/alarm/interface.c:1253
-#, fuzzy
-msgid "enable"
-msgstr "Cyffredinol"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr ""
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr ""
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr ""
-
-#: src/alarm/interface.c:1312
-#, fuzzy
-msgid "Use reminder"
-msgstr "User Defined"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-#, fuzzy
-msgid "Options"
-msgstr "Dewisiadau:"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr ""
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr ""
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr ""
-
-#: src/alarm/interface.c:1493
-#, fuzzy
-msgid "Thankyou"
-msgstr "Tango"
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "Dyfais PCM rhagosodedig (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "Dyfais PCM rhagosodedig (%s)"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "Ynghylch Ategyn ESounD"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "Dyfais cymysgu"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Dyfais cymysgu"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "Dyfais cymysgu"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "Ynghylch Ategyn Allbwn JACK 0.17"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
#, fuzzy
msgid "ALSA error"
msgstr "Terror"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -611,11 +94,11 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -625,372 +108,210 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Porth"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Cymysgu rheoli:"
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Gosodiadau cymysgu"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Gosodiadau'r playback"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Gosodiadau uwch"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr ""
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - ffurfweddu"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "Ffurfweddu SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Enw ffeil"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Maint Ffeil (bytes)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
#, fuzzy
msgid "Synthesizer settings"
msgstr "Gosodiadau Cymysgu"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "cynnydd"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "rhagosodedig"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "adlais"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "iawn"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "dim"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "cytgan"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "graddfa samplo"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
#, fuzzy
msgid "22050 Hz "
msgstr "22000 Hz"
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
#, fuzzy
msgid "44100 Hz "
msgstr "44100 Hz"
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
#, fuzzy
msgid "96000 Hz "
msgstr "11000 Hz"
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
#, fuzzy
msgid "Hz "
msgstr "Hz"
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1010,8 +331,7 @@ msgid ""
"backend</span>"
msgstr ""
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Enw:"
@@ -1160,197 +480,197 @@ msgstr ""
msgid "Triggers OSD when playback is unpaused."
msgstr ""
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr ""
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr ""
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr ""
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr ""
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr ""
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr ""
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr ""
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr ""
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr ""
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr ""
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr ""
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr ""
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr ""
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr ""
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr ""
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
#, fuzzy
msgid "Internationalization"
msgstr "Corff:"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr ""
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr ""
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr ""
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Eiliwiau"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, fuzzy, c-format
msgid "Color %i:"
msgstr "Eiliwiau"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr ""
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr ""
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr ""
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Galluogi clicied"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Achlysur"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr ""
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
"manager otherwise the OSD won't work properly"
msgstr ""
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr ""
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr ""
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr ""
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr ""
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - ffurfweddiad"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Prawf"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
#, fuzzy
msgid "Position"
msgstr "Disgrifiad:"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
#, fuzzy
msgid "Animation"
msgstr "Corff:"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Testun"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Addurniad"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
#, fuzzy
msgid "Trigger"
msgstr "Trailer"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
#, fuzzy
msgid "Misc"
msgstr "Disgo"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Audacious OSD - ynghylch"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1358,7 +678,7 @@ msgstr ""
"\n"
"Audacious OSD"
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
#, fuzzy
msgid ""
"\n"
@@ -1381,131 +701,6 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr ""
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr ""
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr ""
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "Lleoliad:"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "Cau"
-
-#: src/bluetooth/gui.c:274
-#, fuzzy
-msgid "Class"
-msgstr "Clasurôl"
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "Dyfeisiau"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-#, fuzzy
-msgid "Rescan"
-msgstr "Cyfongl"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-#, fuzzy
-msgid "Play"
-msgstr "Modd chwarae:"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur Scope: Color selection"
@@ -1514,12 +709,12 @@ msgstr "Blur Scope: Color selection"
msgid "Options:"
msgstr "Dewisiadau:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "Ategynnau Sain FLAC"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1534,135 +729,170 @@ msgid ""
"Copyright 2009 John Lindgren"
msgstr ""
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+#, fuzzy
+msgid "Audio CD"
+msgstr "Dyfais sain:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
#, fuzzy
msgid "CD Audio Plugin Configuration"
msgstr "Ffurfweddiad Chwaraeydd MPEG Sain"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Tynnu awdio digidôl"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
#, fuzzy
msgid "Title information"
msgstr "Fformat y teitl:"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
#, fuzzy
msgid "Disc speed:"
msgstr "Chwarae cyflymedd"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
#, fuzzy
msgid "Use cd-text if available"
msgstr "Stereo (os ar gael)"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
#, fuzzy
msgid "Use CDDB if available"
msgstr "Stereo (os ar gael)"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
#, fuzzy
msgid "Server: "
msgstr "Gwasanaethwr"
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
#, fuzzy
msgid "Path: "
msgstr "Porth:"
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
#, fuzzy
msgid "Port: "
msgstr "Porth:"
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr ""
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr ""
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "Iawn"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Dileu"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "Modd chwarae:"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr ""
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "Ynghylch Ategyn Extra Stereo"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
#, fuzzy
msgid "Dynamic Range Compressor Preferences"
msgstr "AudioCompress "
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "Sain:(%)"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Dwyster yr effaith:"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
#, fuzzy
msgid "Game Console Music Decoder"
msgstr "Chwaraeydd Sbort Modiwl"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "Cyffredinol"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Chwarae"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "Bas"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr "eiliad"
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "Trebl:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr "Hyd cân rhagosodedig:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr "Samplo"
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr "Gallougi sain dyblusampl"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr "Graddfa Samplo"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr "Diystyru hyd am SPC tagiau"
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr ""
-#: src/console/configure.c:272
+#: src/console/configure.c:273
#, fuzzy
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
@@ -1690,31 +920,31 @@ msgstr ""
"Audacious fersiwn at: William Pitcock <nenolod@nenolod.net>, \n"
" Shay Green <gblargg@gmail.com>"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "Ynghylch Ategyn Scrobbler"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
#, fuzzy
msgid "Crossfade Preferences"
msgstr "AudioCompress "
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "Crossover"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1722,21 +952,25 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
#, fuzzy
msgid "Configure Crystalizer"
msgstr "Ffurfweddu Extra Stereo"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr "Dwyster yr effaith:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "Gosod"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1748,376 +982,53 @@ msgstr ""
"\n"
"Surround echo gan Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Ynghylch Ategyn Echo"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "Ffurfweddu Echo"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "Oediad: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr "Adborth: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "Sain:(%)"
-#: src/evdev-plug/ed.c:60
-#, fuzzy
-msgid "Playback->Play"
-msgstr "Chwarae"
-
-#: src/evdev-plug/ed.c:61
-#, fuzzy
-msgid "Playback->Stop"
-msgstr "Chwarae"
-
-#: src/evdev-plug/ed.c:62
-#, fuzzy
-msgid "Playback->Pause"
-msgstr "Chwarae"
-
-#: src/evdev-plug/ed.c:63
-#, fuzzy
-msgid "Playback->Prev"
-msgstr "Chwarae"
-
-#: src/evdev-plug/ed.c:64
-#, fuzzy
-msgid "Playback->Next"
-msgstr "Chwarae"
-
-#: src/evdev-plug/ed.c:65
-#, fuzzy
-msgid "Playback->Eject"
-msgstr "Chwarae"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr ""
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr ""
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr ""
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr ""
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr ""
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr ""
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "Rhagosodedig"
-
-#: src/evdev-plug/ed_ui.c:217
-#, fuzzy
-msgid "Custom"
-msgstr "Ynghylch"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-#, fuzzy
-msgid "Information"
-msgstr "Fformat ID3:"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Gwall"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-#, fuzzy
-msgid "Device name:"
-msgstr "Dyfais:"
-
-#: src/evdev-plug/ed_ui.c:365
-#, fuzzy
-msgid "Device file:"
-msgstr "Dyfais:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-#, fuzzy
-msgid "EvDev-Plug - Configuration"
-msgstr "Ffurfweddiad Chwaraeydd MPEG Sain"
-
-#: src/evdev-plug/ed_ui.c:651
-#, fuzzy
-msgid "Active"
-msgstr "Acid"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Statws"
-
-#: src/evdev-plug/ed_ui.c:664
-#, fuzzy
-msgid "Device Name"
-msgstr "Dyfais"
-
-#: src/evdev-plug/ed_ui.c:668
-#, fuzzy
-msgid "Device File"
-msgstr "Dyfais"
-
-#: src/evdev-plug/ed_ui.c:672
-#, fuzzy
-msgid "Device Address"
-msgstr "Dyfeisiau"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-#, fuzzy
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "Ffurfweddiad Chwaraeydd MPEG Sain"
-
-#: src/evdev-plug/ed_ui.c:1363
-#, fuzzy
-msgid "<b>Name: </b>"
-msgstr "<b>Hatena</b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-#, fuzzy
-msgid "<b>Filename: </b>"
-msgstr "<b>Hatena</b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug - ynghylch"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "Ategynnau Sain FLAC"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
#, fuzzy
msgid "About FileWriter-Plugin"
msgstr "Ynghylch Ategyn Echo"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2154,258 +1065,226 @@ msgstr ""
" MA 02111-1307,\n"
"USA."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
#, fuzzy
msgid "File Writer Configuration"
msgstr "Ffurfweddiad Disk Writer"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
#, fuzzy
msgid "Output file format:"
msgstr "Ffeil cyfeiriadur allbwn:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
#, fuzzy
msgid "Configure"
msgstr "Ffurfweddu Echo"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr ""
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr ""
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "Ffeil cyfeiriadur allbwn:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Dewis cyfeiriadur"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr ""
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr ""
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr ""
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "Cadw enw ffeil estyniad"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr ""
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+#, fuzzy
+msgid "Auto"
+msgstr "Ynghylch"
+
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "Stereo ar y cyd"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:724
#, fuzzy
msgid "MP3 Configuration"
msgstr "Ffurfweddiad TiMidity"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr ""
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
#, fuzzy
msgid "Output Samplerate:"
msgstr "Graddfa samplo:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-#, fuzzy
-msgid "Auto"
-msgstr "Ynghylch"
-
#: src/filewriter/mp3.c:800
#, fuzzy
msgid "(Hz)"
msgstr "Hz"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
#, fuzzy
msgid "Bitrate (kbps):"
msgstr "Didradd:"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
#, fuzzy
msgid "Audio Mode:"
msgstr "Dyfais sain:"
-#: src/filewriter/mp3.c:924
-#, fuzzy
-msgid "Joint-Stereo"
-msgstr "Stereo ar y cyd"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
#, fuzzy
msgid "Misc:"
msgstr "Disgo"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr ""
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
#, fuzzy
msgid "Error protection"
msgstr "Amddiffyn Gwall:"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr ""
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr ""
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr ""
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
#, fuzzy
msgid "VBR Options:"
msgstr "Dewisiadau:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
#, fuzzy
msgid "Minimum bitrate (kbps):"
msgstr "Didradd:"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr ""
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
#, fuzzy
msgid "ABR Options:"
msgstr "Dewisiadau:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr ""
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr ""
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr ""
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr ""
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr ""
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr ""
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
#, fuzzy
msgid "ID3 params:"
msgstr "Tagiau ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr ""
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
#, fuzzy
msgid "Tags"
msgstr "Tango"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
#, fuzzy
msgid "Vorbis Encoder Configuration"
msgstr "Ffurfweddiad Disk Writer"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr ""
-#: src/flacng/plugin.c:457
+#: src/flacng/plugin.c:379
#, fuzzy
-msgid "FLAC Audio Plugin "
+msgid "About FLAC Audio Plugin"
msgstr "Ategynnau Sain FLAC"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2415,17 +1294,12 @@ msgid ""
"http://www.skytale.net/projects/bmp-flac2/"
msgstr ""
-#: src/flacng/plugin.c:464
-#, fuzzy
-msgid "About FLAC Audio Plugin"
-msgstr "Ategynnau Sain FLAC"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
#, fuzzy
msgid "About Gnome Shortcut Plugin"
msgstr "Ynghylch Ategyn ESounD"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2434,511 +1308,500 @@ msgid ""
"\n"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "Ychwaneg gyrrwr"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "%s - Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "Rhif y Trac:"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr ""
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "Teitl"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "minutes:seconds"
-msgstr "eiliad"
+msgid "Artist"
+msgstr "Artist:"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Track length:"
-msgstr "Cynnydd trac:"
-
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr ""
+msgid "Year"
+msgstr "Blwyddyn:"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr ""
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Album"
+msgstr "Albwm:"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Export Playlist"
-msgstr "Modd chwarae:"
+msgid "Track"
+msgstr "Cynnydd trac:"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Import Playlist"
-msgstr "Modd chwarae:"
+msgid "Queue position"
+msgstr "Disgrifiad:"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Length"
+msgstr "Hyd:"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File path"
+msgstr "Enw ffeil"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Audacious"
-msgstr "%s - Audacious"
+msgid "File name"
+msgstr "Enw ffeil"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Custom title"
+msgstr "Ynghylch"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
+#: src/gtkui/columns.c:39
#, fuzzy
-msgid "Repeat"
-msgstr "Beat"
+msgid "Bitrate"
+msgstr "Didradd:"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
+#: src/gtkui/columns.c:286
+msgid "Choose Columns"
msgstr ""
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
+#: src/gtkui/columns.c:300
+msgid "Available:"
msgstr ""
-#: src/gtkui/ui_manager.c:47
-#, fuzzy
-msgid "Show playlists"
-msgstr "Modd chwarae:"
-
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
msgstr ""
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
msgstr ""
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
msgstr ""
-#: src/gtkui/ui_manager.c:53
-#, fuzzy
-msgid "Show main menu"
-msgstr "Dangos ffenestr rhwydwaith"
-
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
msgstr ""
-#: src/gtkui/ui_manager.c:56
-#, fuzzy
-msgid "Show statusbar"
-msgstr "Statws"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr ""
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
+#: src/gtkui/layout.c:123
+msgid "Undock"
msgstr ""
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Pause"
-msgstr "Chwarae"
+msgid "Disable"
+msgstr "Cyffredinol"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
+#: src/gtkui/menus.c:132
#, fuzzy
-msgid "Stop"
-msgstr "Synthpop"
+msgid "_Open Files ..."
+msgstr "Ychwaneg gyrrwr"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-#, fuzzy
-msgid "Previous"
-msgstr "Primus"
+#: src/gtkui/menus.c:133
+msgid "Open _URL ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
+#: src/gtkui/menus.c:134
#, fuzzy
-msgid "Next"
-msgstr "Testun"
+msgid "_Add File ..."
+msgstr "Ychwaneg gyrrwr"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Playlist"
-msgstr "Modd chwarae:"
-
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr ""
+msgid "Add U_RL ..."
+msgstr "Ychwaneg gyrrwr"
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/menus.c:137
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Modd chwarae:"
-
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr ""
+msgid "A_bout ..."
+msgstr "Ynghylch"
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:138
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Modd chwarae:"
+msgid "_Preferences ..."
+msgstr "AudioCompress "
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
+msgid "_Quit"
msgstr ""
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Save All Playlists"
+msgid "_Play"
msgstr "Modd chwarae:"
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:143
#, fuzzy
-msgid "Playlist Manager"
-msgstr "Modd chwarae:"
+msgid "Paus_e"
+msgstr "Chwarae"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr ""
+#: src/gtkui/menus.c:144
+#, fuzzy
+msgid "_Stop"
+msgstr "Synthpop"
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr ""
+#: src/gtkui/menus.c:145
+#, fuzzy
+msgid "Pre_vious"
+msgstr "Primus"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr ""
+#: src/gtkui/menus.c:146
+#, fuzzy
+msgid "_Next"
+msgstr "Testun"
-#: src/gtkui/ui_manager.c:115
+#: src/gtkui/menus.c:148
#, fuzzy
-msgid "Add Files ..."
-msgstr "Ychwaneg gyrrwr"
+msgid "_Repeat"
+msgstr "Beat"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
+#: src/gtkui/menus.c:149
+msgid "S_huffle"
msgstr ""
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
+#: src/gtkui/menus.c:150
#, fuzzy
-msgid "Remove All"
-msgstr "Tynnu gyrrwr"
-
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr ""
+msgid "N_o Playlist Advance"
+msgstr "Modd chwarae:"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
+#: src/gtkui/menus.c:151
+msgid "Stop _After This Song"
msgstr ""
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
msgstr ""
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
+#: src/gtkui/menus.c:154
+msgid "Jump to _Time ..."
msgstr ""
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
msgstr ""
-#: src/gtkui/ui_manager.c:131
-#, fuzzy
-msgid "Sort"
-msgstr "Porth"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "Rhif y Trac:"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
+#: src/gtkui/menus.c:159
#, fuzzy
-msgid "By Title"
+msgid "By _Title"
msgstr "Teitl"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
+#: src/gtkui/menus.c:160
#, fuzzy
-msgid "By Artist"
+msgid "By _Artist"
msgstr "Artist:"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "Albwm:"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
+#, fuzzy
+msgid "By Release _Date"
+msgstr "Dyddiad!"
+
+#: src/gtkui/menus.c:163
#, fuzzy
-msgid "By File Path"
+msgid "By _File Path"
msgstr "Enw ffeil"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr ""
+#: src/gtkui/menus.c:164
+#, fuzzy
+msgid "By _Custom Title"
+msgstr "Ynghylch"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
+#: src/gtkui/menus.c:166
+msgid "R_everse Order"
msgstr ""
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
+#: src/gtkui/menus.c:167
+msgid "_Random Order"
msgstr ""
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
+msgid "_Refresh"
msgstr ""
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr ""
+#: src/gtkui/menus.c:172
+#, fuzzy
+msgid "_Sort"
+msgstr "Porth"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
+#: src/gtkui/menus.c:175
#, fuzzy
-msgid "File"
-msgstr "Enw ffeil"
+msgid "_Close"
+msgstr "Cau"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "Components"
-msgstr "Sylw:"
+msgid "_Import ..."
+msgstr "Porth"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
+#: src/gtkui/menus.c:178
#, fuzzy
-msgid "View Track Details"
-msgstr "defnyddiwch Cynnydd/Brig Trac"
+msgid "_Export ..."
+msgstr "Porth"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr ""
+#: src/gtkui/menus.c:180
+#, fuzzy
+msgid "_Playlist Manager ..."
+msgstr "Modd chwarae:"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
+#: src/gtkui/menus.c:183
#, fuzzy
-msgid "About Audacious"
-msgstr "Ynghylch Audacious Ategyn LIRC"
+msgid "Volume _Up"
+msgstr "Sain:(%)"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr ""
+#: src/gtkui/menus.c:184
+#, fuzzy
+msgid "Volume _Down"
+msgstr "Sain:(%)"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
+#: src/gtkui/menus.c:186
+msgid "_Equalizer"
msgstr ""
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:188
+msgid "E_ffects"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "Statws"
+
+#: src/gtkui/menus.c:197
+msgid "Show Column _Headers"
msgstr ""
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
+#: src/gtkui/menus.c:198
+msgid "Choose _Columns ..."
msgstr ""
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
+#: src/gtkui/menus.c:199
#, fuzzy
-msgid "Quit Audacious"
-msgstr "%s - Audacious"
+msgid "Scrol_l on Song Change"
+msgstr "Newid Cân %s"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr ""
+#: src/gtkui/menus.c:202
+#, fuzzy
+msgid "_File"
+msgstr "Enw ffeil"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "Chwarae"
+
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "Modd chwarae:"
+
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "Dyfeisiau"
+
+#: src/gtkui/menus.c:206
+#, fuzzy
+msgid "_Output"
+msgstr "Ategyn Allbwn OSS"
+
+#: src/gtkui/menus.c:207
+msgid "_View"
msgstr ""
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
msgstr ""
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
+#: src/gtkui/menus.c:215
+msgid "_Copy"
msgstr ""
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
+#: src/gtkui/menus.c:216
+msgid "_Paste"
msgstr ""
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:217
+msgid "Select _All"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
+#: src/gtkui/menus.c:222
#, fuzzy
-msgid "Cut"
-msgstr "Cult"
-
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr ""
+msgid "_Rename"
+msgstr "Enw ffeil"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr ""
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr ""
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
+#, fuzzy
+msgid "Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr ""
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
+msgstr "Gwall"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
#, fuzzy
msgid "mono"
msgstr "Mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
#, fuzzy
msgid "stereo"
msgstr "Stereo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Sianeli:"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "Sianeli:"
+msgstr[1] "Sianeli:"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr ""
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+#, fuzzy
+msgid "Play"
+msgstr "Modd chwarae:"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr ""
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+#, fuzzy
+msgid "Stop"
+msgstr "Synthpop"
+
+#: src/hotkey/gui.c:75
#, fuzzy
msgid "Next Track"
msgstr "Cynnydd trac:"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr ""
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr ""
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
#, fuzzy
msgid "Mute"
msgstr "Dyddiad!"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
#, fuzzy
msgid "Volume Up"
msgstr "Sain:(%)"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
#, fuzzy
msgid "Volume Down"
msgstr "Sain:(%)"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+msgid "Jump to File"
+msgstr ""
+
+#: src/hotkey/gui.c:82
#, fuzzy
msgid "Toggle Player Windows"
msgstr "/Toggle Decorations"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr ""
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+#, fuzzy
+msgid "Toggle Repeat"
+msgstr "Beat"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr ""
+
+#: src/hotkey/gui.c:95
#, fuzzy
msgid "(none)"
msgstr "Dim"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -2946,41 +1809,41 @@ msgid ""
"Do you want to continue?"
msgstr ""
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr ""
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
#, fuzzy
msgid "Global Hotkey Plugin Configuration"
msgstr "Ffurfweddu Ategyn ESD"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr ""
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
#, fuzzy
msgid "Hotkeys:"
msgstr "Gwesteiwr:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
#, fuzzy
msgid "<b>Action:</b>"
msgstr "<b>Hatena</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr ""
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
#, fuzzy
msgid "About Global Hotkey Plugin"
msgstr "Ynghylch Ategyn Scrobbler"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3022,7 +1885,7 @@ msgstr ""
msgid "Enable debug printing"
msgstr "Galluogi ReplayGain"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3040,127 +1903,20 @@ msgstr ""
"Audacious ategyn gan\n"
"Giacomo Lozito o develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "Ynghylch Ategyn Allbwn JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr ""
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-#, fuzzy
-msgid "Name"
-msgstr "Enw:"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr ""
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr ""
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr ""
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr ""
-
-#: src/ladspa/ladspa.c:1055
-#, fuzzy
-msgid "Remove"
-msgstr "Tynnu gyrrwr"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr ""
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "Ynghylch Audacious Ategyn LIRC"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "Ategyn LIRC"
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
-msgstr ""
-
-#: src/lirc/interface.c:37
-#, fuzzy
-msgid "LIRC plugin settings"
-msgstr "Ategyn LIRC"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
+"Looking for lyrics..."
msgstr ""
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr ""
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr ""
-
-#: src/lirc/interface.c:79
-#, fuzzy
-msgid "Connection"
-msgstr "Lleoliad:"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: methu â ymgychwyn LIRC ateg\n"
-
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: methu â darllen LIRC ffurfweddiad ffeil\n"
-"%s: plesio darllen yn dogfennau am LIRC\n"
-"%s: pa at creu y addas ffurfweddiad ffeil\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: gorchymyn anhysbys \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: datgysylltu am LIRC\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr ""
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3169,12 +1925,12 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
#, fuzzy
msgid "About Metronom"
msgstr "Ynghylch"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3183,255 +1939,47 @@ msgid ""
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, fuzzy, c-format
msgid "Tact generator: %d bpm"
msgstr "Cynhyrchydd Tôn:"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr ""
-#: src/modplug/gui/interface.cxx:137
-#, fuzzy
-msgid "ModPlug Configuration"
-msgstr "Ffurfweddiad TiMidity"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 did"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 did"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "44100 Hz"
-
-#: src/modplug/gui/interface.cxx:293
-#, fuzzy
-msgid "48 kHz"
-msgstr "44100 Hz"
-
-#: src/modplug/gui/interface.cxx:300
-#, fuzzy
-msgid "44 kHz"
-msgstr "44100 Hz"
-
-#: src/modplug/gui/interface.cxx:307
-#, fuzzy
-msgid "22 kHz"
-msgstr "22000 Hz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Graddfa Samplo"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-#, fuzzy
-msgid "Enable"
-msgstr "Galluogi clicied"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-#, fuzzy
-msgid "Depth"
-msgstr "Duet"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-#, fuzzy
-msgid "Delay"
-msgstr "Oediad: (ms)"
-
-#: src/modplug/gui/interface.cxx:394
-#, fuzzy
-msgid "Reverb"
-msgstr "adlais"
-
-#: src/modplug/gui/interface.cxx:440
-#, fuzzy
-msgid "Amount"
-msgstr "Ynghylch"
-
-#: src/modplug/gui/interface.cxx:448
-#, fuzzy
-msgid "Range"
-msgstr "Cyfongl"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
#, fuzzy
msgid "Surround"
msgstr "Adlais o amgylch"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-#, fuzzy
-msgid "Preamp"
-msgstr "Dream"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:859
-#, fuzzy
-msgid "MOD Info"
-msgstr "Gwybodaeth am y CD"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:913
-#, fuzzy
-msgid "Samples"
-msgstr "Salsa"
-
-#: src/modplug/gui/interface.cxx:938
-#, fuzzy
-msgid "Instruments"
-msgstr "Offerynnol"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
msgstr ""
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
msgstr ""
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
msgstr ""
-#: src/modplug/gui/main.cxx:55
+#: src/notify/libnotify-aosd_event.c:47
#, fuzzy
-msgid "About Modplug"
-msgstr "Ynghylch Ategyn Echo"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, fuzzy, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Meth agor dyfais ffeil MIDI"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr ""
-
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr ""
-
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
+msgid "Stopped"
+msgstr "Synthpop"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Audacious is not playing."
msgstr ""
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Null ategyn allbwn"
-#: src/null/null.c:64
+#: src/null/null.c:65
#, fuzzy
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
@@ -3440,16 +1988,16 @@ msgstr ""
" am Christian Birchinger <joker@netswarm.net>\n"
" tarddu gan yr XMMS modiwl am Håvard Kvål <harvardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Ynghylch Ategyn Allwyn Null"
-#: src/null/null.c:93
+#: src/null/null.c:94
#, fuzzy
msgid "Null output preferences"
msgstr "Null ategyn allbwn"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr ""
@@ -3463,11 +2011,11 @@ msgstr "Dyfais PCM rhagosodedig (%s)"
msgid "OSS4 Output Plugin Preferences"
msgstr "Ynghylch Ategyn ESounD"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "Dyfais sain:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "Defnyddiwr ddyfais arall:"
@@ -3479,12 +2027,12 @@ msgstr ""
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "Ynghylch Ategyn ESounD"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3528,40 +2076,45 @@ msgstr ""
msgid "OSS4 error"
msgstr "Terror"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "Rhagosodedig (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "Rhagosodedig"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "Ffurfweddu'r Gyrrwr OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "Dyfeisiau"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "Byffyru:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "Cyn fyffer (y cant):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "Byffyru:"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "Gosodiadau Cymysgu"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr "Nid yw'r Prif reolwr sain yn PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "Cymysgwr"
@@ -3605,12 +2158,12 @@ msgstr ""
" MA 02111-1307,\n"
"USA."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
#, fuzzy
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Ategyn Allbwn CoreAudio"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
#, fuzzy
msgid ""
"Audacious PulseAudio Output Plugin\n"
@@ -3647,53 +2200,53 @@ msgstr ""
" MA 02111-1307,\n"
"USA."
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "Ynghylch Ategyn ESounD"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
msgid "Change password"
msgstr ""
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>Gwasanaethau</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "Enw Defnyddiwr:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "Cyfrinair:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
#, fuzzy
msgid "Scrobbler URL:"
msgstr "Ategyn Scrobbler"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
#, fuzzy
msgid "Scrobbler"
msgstr "Ategyn Scrobbler"
@@ -3710,16 +2263,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Ynghylch Ategyn Scrobbler"
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "Ynghylch Ategyn Allbwn JACK 0.17"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "Terror"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "Ynghylch %s"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "Cau"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "Gwall"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "Iawn"
+
#: src/sid/xs_fileinfo.c:151
#, fuzzy
msgid "General info"
@@ -3730,6 +2301,11 @@ msgstr "Cyffredinol"
msgid "Tune #%i: "
msgstr ""
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, fuzzy, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "Meth agor dyfais ffeil MIDI"
+
#: src/sid/xs_interface.c:234
#, fuzzy
msgid "Audacious-SID configuration"
@@ -4018,17 +2594,17 @@ msgstr "Porth"
msgid "Use"
msgstr ""
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
#, fuzzy
msgid "Save"
msgstr "Rave"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
#, fuzzy
msgid "Import"
msgstr "Porth"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
#, fuzzy
msgid "Delete"
msgstr "Rhagosodedig"
@@ -4062,6 +2638,12 @@ msgstr ""
msgid "Playtime:"
msgstr "Modd chwarae:"
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+#, fuzzy
+msgid "seconds"
+msgstr "eiliad"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr ""
@@ -4156,10 +2738,6 @@ msgstr ""
msgid "Song title format:"
msgstr "Fformat y teitl:"
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Teitl"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr ""
@@ -4311,708 +2889,875 @@ msgstr "iawn"
msgid "No"
msgstr "Na"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr ""
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
#, fuzzy
msgid "_Player:"
msgstr "Modd chwarae:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr ""
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "_Playlist:"
msgstr "Modd chwarae:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "Select playlist font:"
msgstr ""
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
#, fuzzy
msgid "<b>_Fonts</b>"
msgstr "<b>Hatena</b>"
-#: src/skins/skins_cfg.c:323
-#, fuzzy
-msgid "Use Bitmap fonts if available"
-msgstr "Stereo (os ar gael)"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-
-#: src/skins/skins_cfg.c:324
-#, fuzzy
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>Gwasanaethau</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
msgstr ""
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr ""
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr ""
+#: src/skins/skins_cfg.c:346
+#, fuzzy
+msgid "<b>_Skin</b>"
+msgstr "<b>Hatena</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
+#: src/skins/skins_cfg.c:393
+#, fuzzy
+msgid "Interface Preferences"
+msgstr "AudioCompress "
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr ""
+#: src/skins/ui_equalizer.c:330
+#, fuzzy
+msgid "Preamp"
+msgstr "Dream"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "22000 Hz"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:417
+#: src/skins/ui_equalizer.c:335
#, fuzzy
-msgid "Blue"
-msgstr "Y Felan"
+msgid "1 kHz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22000 Hz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44100 Hz"
-#: src/skins/skins_cfg.c:569
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "<b>_Skin</b>"
-msgstr "<b>Hatena</b>"
+msgid "8 kHz"
+msgstr "44100 Hz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "16 kHz"
+msgstr "44100 Hz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
msgid "Audacious Equalizer"
msgstr ""
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr ""
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
#, fuzzy
msgid "surround"
msgstr "Adlais o amgylch"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr ""
-
-#: src/skins/ui_main.c:984
-#, fuzzy
-msgid "Show main player window"
-msgstr "Dangos ffenestr rhwydwaith"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr ""
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr ""
-
-#: src/skins/ui_main.c:1050
+#: src/skins/ui_main.c:807
#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr ""
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr ""
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr ""
-
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, fuzzy, c-format
msgid "Volume: %d%%"
msgstr "Sain:(%)"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr ""
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr ""
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr ""
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
#, fuzzy
msgid "Options Menu"
msgstr "Dewisiadau:"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
#, fuzzy
msgid "File Info Box"
msgstr "Gwybodaeth Ffeil - %s"
-#: src/skins/ui_main.c:1631
-#, fuzzy
-msgid "Disable 'GUI Scaling'"
-msgstr "Analluogi tagiau ID3V2"
-
-#: src/skins/ui_main.c:1633
-#, fuzzy
-msgid "Enable 'GUI Scaling'"
-msgstr "Gallougi sain dyblusampl"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr ""
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "Modd chwarae:"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
msgid "Stopping after song."
msgstr ""
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr ""
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr ""
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
#, fuzzy
msgid "Peaks"
msgstr "Pranks"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+#, fuzzy
+msgid "Repeat"
+msgstr "Beat"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr ""
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr ""
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr ""
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr ""
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr ""
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr ""
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr ""
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr ""
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-#, fuzzy
-msgid "Scale"
-msgstr "Rave"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr ""
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr ""
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr ""
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
#, fuzzy
msgid "Scope"
msgstr "Synthpop"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr ""
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr ""
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
#, fuzzy
msgid "Normal"
msgstr "Fformat:"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
#, fuzzy
msgid "Fire"
msgstr "Satire"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr ""
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
#, fuzzy
msgid "Lines"
msgstr "Lladin"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
#, fuzzy
msgid "Bars"
msgstr "Bas"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr ""
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr ""
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr ""
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr ""
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr ""
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
#, fuzzy
msgid "Slowest"
msgstr "Showtunes"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
#, fuzzy
msgid "Slow"
msgstr "Slow Jam"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr ""
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
#, fuzzy
msgid "Fast"
msgstr "Fformat:"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr ""
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr ""
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr ""
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+#, fuzzy
+msgid "Pause"
+msgstr "Chwarae"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+#, fuzzy
+msgid "Previous"
+msgstr "Primus"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+#, fuzzy
+msgid "Next"
+msgstr "Testun"
+
+#: src/skins/ui_manager.c:196
#, fuzzy
msgid "Visualization"
msgstr "Corff:"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr ""
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr ""
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr ""
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr ""
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr ""
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr ""
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr ""
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+#, fuzzy
+msgid "Playlist"
+msgstr "Modd chwarae:"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr ""
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr ""
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr ""
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr ""
+
#: src/skins/ui_manager.c:222
-msgid "Refresh List"
+#, fuzzy
+msgid "Import Playlist"
+msgstr "Modd chwarae:"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
msgstr ""
#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "Modd chwarae:"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "Modd chwarae:"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
+msgid "Refresh List"
+msgstr ""
+
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr ""
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr ""
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr ""
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+#, fuzzy
+msgid "Interface Preferences ..."
+msgstr "AudioCompress "
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr ""
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr ""
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr ""
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
msgid "Invert Selection"
msgstr ""
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr ""
+#: src/skins/ui_manager.c:267
+msgid "Select All"
+msgstr ""
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:271
+msgid "Select None"
+msgstr ""
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:277
+#, fuzzy
+msgid "Remove All"
+msgstr "Tynnu gyrrwr"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr ""
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr ""
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr ""
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
#, fuzzy
msgid "Remove Duplicates"
msgstr "Tynnu gyrrwr"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+#, fuzzy
+msgid "By Title"
+msgstr "Teitl"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr ""
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
#, fuzzy
msgid "By Filename"
msgstr "Enw ffeil"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
#, fuzzy
msgid "By Path + Filename"
msgstr "Enw ffeil"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr ""
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr ""
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:313
+#, fuzzy
+msgid "Randomize List"
+msgstr "Rave"
+
+#: src/skins/ui_manager.c:314
+msgid "Randomizes the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr ""
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr ""
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
#, fuzzy
msgid "Sort List"
msgstr "Artist:"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr ""
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "Albwm:"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
msgid "Sorts the list by album."
msgstr ""
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#, fuzzy
+msgid "By Artist"
+msgstr "Artist:"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr ""
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr ""
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr ""
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
#, fuzzy
msgid "By Date"
msgstr "Dyddiad!"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr ""
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+#, fuzzy
+msgid "By Track Number"
+msgstr "Rhif y Trac:"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr ""
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
msgid "Sort Selected"
msgstr ""
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+#, fuzzy
+msgid "File"
+msgstr "Enw ffeil"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr ""
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr ""
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+#, fuzzy
+msgid "View Track Details"
+msgstr "defnyddiwch Cynnydd/Brig Trac"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr ""
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+#, fuzzy
+msgid "About Audacious"
+msgstr "Ynghylch Audacious Ategyn LIRC"
+
+#: src/skins/ui_manager.c:401
#, fuzzy
msgid "Play File"
msgstr "Modd chwarae:"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+msgid "Load and play a file"
+msgstr ""
+
+#: src/skins/ui_manager.c:404
msgid "Play Location"
msgstr ""
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+msgid "Play media from the selected location"
+msgstr ""
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr ""
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr ""
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr ""
+
+#: src/skins/ui_manager.c:413
+#, fuzzy
+msgid "Quit Audacious"
+msgstr "%s - Audacious"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr ""
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+msgid "Jump to Time"
+msgstr ""
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr ""
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "Cult"
+
+#: src/skins/ui_manager.c:438
+msgid "Paste"
+msgstr ""
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr ""
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
#, fuzzy
msgid "Preset"
msgstr "Porth"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr ""
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
msgid "Load default preset into equalizer"
msgstr ""
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
#, fuzzy
msgid "Zero"
msgstr "Retro"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr ""
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr ""
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
msgid "Load preset from file"
msgstr ""
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr ""
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr ""
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr ""
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
#, fuzzy
msgid "Save default preset"
msgstr "rhagosodedig"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
#, fuzzy
msgid "To file"
msgstr "Teitl:"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
#, fuzzy
msgid "Save preset to file"
msgstr "Cadw'r llif i ddisg"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
#, fuzzy
msgid "Delete preset"
msgstr "Rhagosodedig"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr ""
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr ""
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5020,126 +3765,68 @@ msgid ""
"for."
msgstr ""
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+#, fuzzy
+msgid "Title: "
+msgstr "Teitl:"
+
+#: src/skins/ui_playlist.c:267
#, fuzzy
msgid "Album: "
msgstr "Albwm:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
#, fuzzy
msgid "Artist: "
msgstr "Artist:"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
#, fuzzy
msgid "Filename: "
msgstr "Enw Defnyddiwr:"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr ""
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr ""
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr ""
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44100 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "44100 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "44100 Hz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr ""
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr ""
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, fuzzy, c-format
msgid "Could not create directory (%s): %s\n"
msgstr ""
"Methu gwirio'r cyfeiradur %s\n"
"Gwall: %s"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
#, fuzzy
msgid "About sndfile plugin"
msgstr "Ategyn Sain WAV (sndfile)"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5180,61 +3867,71 @@ msgstr ""
" MA 02111-1307,\n"
"USA."
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
#, fuzzy
msgid "About SndStretch"
msgstr "Ynghylch Gyrrwr OSS"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
#, fuzzy
msgid "Volume corr."
msgstr "Rheolwr sain"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
#, fuzzy
msgid "Speed"
msgstr "Llais"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
#, fuzzy
msgid "Pitch"
msgstr "Llwybr:"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+#, fuzzy
+msgid "Scale"
+msgstr "Rave"
+
+#: src/sndstretch/sndstretch_xmms.c:363
+#, fuzzy
+msgid "Options"
+msgstr "Dewisiadau:"
+
+#: src/sndstretch/sndstretch_xmms.c:382
#, fuzzy
msgid "SndStretch - Configuration"
msgstr "Ffurfweddu'r Gyrrwr Sun"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr "Gorchymyn cragen i'w redeg pan fo Audacious yn newid cân."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr "Gorchymyn:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr ""
"Gorchymyn cragen, i'w redeg pan fo Audacious wedi cyrraedd diwedd chwarae."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
"Gorchymyn cragen.i'w redeg pan fo Audacious wedi cyrraedd diwedd rhestr "
"chwarae."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5247,10 +3944,13 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5258,25 +3958,21 @@ msgstr ""
"<span size='small'>Dylai enw ffeil a thagiau teitl cân fod o fewn dyfynodau "
"dwb (\"). Gall peidio gwneud achosi risg diogelwch.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr "Gorchymyn:"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "Newid Cân %s"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr ""
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
#, fuzzy
msgid "About Status Icon Plugin"
msgstr "Ynghylch Ategyn ESounD"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5287,36 +3983,49 @@ msgid ""
"the system tray area of the window manager.\n"
msgstr ""
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
#, fuzzy
msgid "Status Icon Plugin - Preferences"
msgstr "Ynghylch Ategyn ESounD"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr ""
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr ""
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr ""
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr ""
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr ""
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr ""
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+#, fuzzy
+msgid "Other settings"
+msgstr "Gosodiadau cymysgu"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr ""
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:41
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5326,108 +4035,19 @@ msgstr ""
"\n"
"Gan Johan Levin 1999."
-#: src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:65
msgid "About Extra Stereo Plugin"
msgstr "Ynghylch Ategyn Extra Stereo"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:102
msgid "Configure Extra Stereo"
msgstr "Ffurfweddu Extra Stereo"
-#: src/streambrowser/gui/streambrowser_win.c:62
-#, fuzzy
-msgid "Search:"
-msgstr "Blwyddyn:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-#, fuzzy
-msgid "Stream name"
-msgstr "Offerynnol"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-#, fuzzy
-msgid "Remove Bookmark"
-msgstr "Tynnu gyrrwr"
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "Ynghylch Gyrrwr OSS"
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr ""
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Ynghylch Gyrrwr Sun"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun Driver\n"
-"\n"
-" Hawlfraint (c) 2001 CubeSoft Communications, Inc.\n"
-"Cynhaliwr: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Dyfais rheoli sain:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Maint y byffer (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Dyfais rheoli sain:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr " XMMS yn defnyddio'r cymysgydd yn unig"
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Ffurfweddu'r Gyrrwr Sun"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "Ynghylch Cynhyrchydd Tôn"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5442,15 +4062,20 @@ msgstr ""
"frequency3;...\n"
"e.e. tôn://2000;2005 i chwarae tôn 2000Hz a thôn 2005Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "Cynhyrchydd Tôn:"
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "Ynghylch Ategyn ESounD"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "Diystyru'r teitlau cyffredinol"
@@ -5464,15 +4089,15 @@ msgstr "Fformat y teitl:"
msgid "Ogg Vorbis Tags"
msgstr "Tagiau Ogg Vorbis:"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Ffurfweddiad Ogg Vorbis"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Ynghylch Ategyn Ogg Vorbis"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
#, fuzzy
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
@@ -5522,12 +4147,12 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, fuzzy, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Ategyn Echo %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5536,6 +4161,457 @@ msgid ""
msgstr ""
#, fuzzy
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Stereo (os ar gael)"
+
+#, fuzzy
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>Gwasanaethau</b>"
+
+#~ msgid "About "
+#~ msgstr "Ynghylch"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Hawlfraint (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Mae'r rhaglen hwn yn rhyddhau â GNU LGPL.\n"
+#~ "Canfod http://www.gnu.org/licenses/lgpl.html am manylion.\n"
+#~ "\n"
+#~ "Mae'r rhaglen defnyddio yn AdPlug llyfrgell, pa ys hawlfraint (C) Simon "
+#~ "Peter, et al.\n"
+#~ "Fersiwn cynnwys AdPlug llyfrgell:"
+
+#, fuzzy
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AMIDI-Plug - ffurfweddu"
+
+#, fuzzy
+#~ msgid "Sound quality"
+#~ msgstr "Clip Sain"
+
+#, fuzzy
+#~ msgid "Resolution"
+#~ msgstr "Cydraniad:"
+
+#, fuzzy
+#~ msgid "8bit"
+#~ msgstr "8 did"
+
+#, fuzzy
+#~ msgid "16bit"
+#~ msgstr "16 did"
+
+#~ msgid "Channels"
+#~ msgstr "Sianeli:"
+
+#, fuzzy
+#~ msgid "Formats"
+#~ msgstr "Fformat:"
+
+#, fuzzy
+#~ msgid "Format"
+#~ msgstr "Fformat:"
+
+#, fuzzy
+#~ msgid "File Type: "
+#~ msgstr "Maint ffeil:"
+
+#, fuzzy
+#~ msgid "Instruments: "
+#~ msgstr "Offerynnol"
+
+#, fuzzy
+#~ msgid "Song"
+#~ msgstr "Swing"
+
+#, fuzzy
+#~ msgid "Instrument name"
+#~ msgstr "Offerynnol"
+
+#, fuzzy
+#~ msgid "Song message"
+#~ msgstr "Newid Cân %s"
+
+#, fuzzy
+#~ msgid "Speed: "
+#~ msgstr "Llais"
+
+#, fuzzy
+#~ msgid "Timer: "
+#~ msgstr "Teitl:"
+
+#, fuzzy
+#~ msgid "Alarm Settings"
+#~ msgstr "Gosodiadau Cymysgu"
+
+#, fuzzy
+#~ msgid "Time"
+#~ msgstr "Teitl"
+
+#, fuzzy
+#~ msgid "hours"
+#~ msgstr "Chorus"
+
+#, fuzzy
+#~ msgid "Quiet after:"
+#~ msgstr "Didradd:"
+
+#, fuzzy
+#~ msgid "Sunday"
+#~ msgstr "Trac Sain"
+
+#, fuzzy
+#~ msgid "Monday"
+#~ msgstr "Mono"
+
+#, fuzzy
+#~ msgid "Fading"
+#~ msgstr "cynnydd"
+
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Sain:(%)"
+
+#, fuzzy
+#~ msgid "%"
+#~ msgstr "%d"
+
+#, fuzzy
+#~ msgid "Final"
+#~ msgstr "Enw ffeil"
+
+#, fuzzy
+#~ msgid "enable"
+#~ msgstr "Cyffredinol"
+
+#, fuzzy
+#~ msgid "Use reminder"
+#~ msgstr "User Defined"
+
+#, fuzzy
+#~ msgid "Thankyou"
+#~ msgstr "Tango"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Lleoliad:"
+
+#, fuzzy
+#~ msgid "Class"
+#~ msgstr "Clasurôl"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "Dyfeisiau"
+
+#, fuzzy
+#~ msgid "Rescan"
+#~ msgstr "Cyfongl"
+
+#, fuzzy
+#~ msgid "Playback->Play"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "Playback->Stop"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "Playback->Pause"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "Playback->Prev"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "Playback->Next"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "Playback->Eject"
+#~ msgstr "Chwarae"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "Rhagosodedig"
+
+#, fuzzy
+#~ msgid "Custom"
+#~ msgstr "Ynghylch"
+
+#, fuzzy
+#~ msgid "Information"
+#~ msgstr "Fformat ID3:"
+
+#, fuzzy
+#~ msgid "Device name:"
+#~ msgstr "Dyfais:"
+
+#, fuzzy
+#~ msgid "Device file:"
+#~ msgstr "Dyfais:"
+
+#, fuzzy
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "Ffurfweddiad Chwaraeydd MPEG Sain"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "Acid"
+
+#~ msgid "Status"
+#~ msgstr "Statws"
+
+#, fuzzy
+#~ msgid "Device Name"
+#~ msgstr "Dyfais"
+
+#, fuzzy
+#~ msgid "Device File"
+#~ msgstr "Dyfais"
+
+#, fuzzy
+#~ msgid "Device Address"
+#~ msgstr "Dyfeisiau"
+
+#, fuzzy
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "Ffurfweddiad Chwaraeydd MPEG Sain"
+
+#, fuzzy
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Hatena</b>"
+
+#, fuzzy
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Hatena</b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug - ynghylch"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Enw:"
+
+#, fuzzy
+#~ msgid "Remove"
+#~ msgstr "Tynnu gyrrwr"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "Ynghylch Audacious Ategyn LIRC"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "Ategyn LIRC"
+
+#, fuzzy
+#~ msgid "LIRC plugin settings"
+#~ msgstr "Ategyn LIRC"
+
+#, fuzzy
+#~ msgid "Connection"
+#~ msgstr "Lleoliad:"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: methu â ymgychwyn LIRC ateg\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: methu â darllen LIRC ffurfweddiad ffeil\n"
+#~ "%s: plesio darllen yn dogfennau am LIRC\n"
+#~ "%s: pa at creu y addas ffurfweddiad ffeil\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: gorchymyn anhysbys \"%s\"\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: datgysylltu am LIRC\n"
+
+#, fuzzy
+#~ msgid "ModPlug Configuration"
+#~ msgstr "Ffurfweddiad TiMidity"
+
+#~ msgid "16 bit"
+#~ msgstr "16 did"
+
+#~ msgid "8 bit"
+#~ msgstr "8 did"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "44100 Hz"
+
+#, fuzzy
+#~ msgid "48 kHz"
+#~ msgstr "44100 Hz"
+
+#, fuzzy
+#~ msgid "44 kHz"
+#~ msgstr "44100 Hz"
+
+#, fuzzy
+#~ msgid "22 kHz"
+#~ msgstr "22000 Hz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Graddfa Samplo"
+
+#, fuzzy
+#~ msgid "Enable"
+#~ msgstr "Galluogi clicied"
+
+#, fuzzy
+#~ msgid "Depth"
+#~ msgstr "Duet"
+
+#, fuzzy
+#~ msgid "Delay"
+#~ msgstr "Oediad: (ms)"
+
+#, fuzzy
+#~ msgid "Reverb"
+#~ msgstr "adlais"
+
+#, fuzzy
+#~ msgid "Amount"
+#~ msgstr "Ynghylch"
+
+#, fuzzy
+#~ msgid "Range"
+#~ msgstr "Cyfongl"
+
+#, fuzzy
+#~ msgid "MOD Info"
+#~ msgstr "Gwybodaeth am y CD"
+
+#, fuzzy
+#~ msgid "Samples"
+#~ msgstr "Salsa"
+
+#, fuzzy
+#~ msgid "Instruments"
+#~ msgstr "Offerynnol"
+
+#, fuzzy
+#~ msgid "About Modplug"
+#~ msgstr "Ynghylch Ategyn Echo"
+
+#, fuzzy
+#~ msgid "Blue"
+#~ msgstr "Y Felan"
+
+#, fuzzy
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "Analluogi tagiau ID3V2"
+
+#, fuzzy
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Gallougi sain dyblusampl"
+
+#, fuzzy
+#~ msgid "Search:"
+#~ msgstr "Blwyddyn:"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "Offerynnol"
+
+#, fuzzy
+#~ msgid "Remove Bookmark"
+#~ msgstr "Tynnu gyrrwr"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "Ynghylch Gyrrwr OSS"
+
+#, fuzzy
+#~ msgid "minutes:seconds"
+#~ msgstr "eiliad"
+
+#, fuzzy
+#~ msgid "Track length:"
+#~ msgstr "Cynnydd trac:"
+
+#, fuzzy
+#~ msgid "Show main menu"
+#~ msgstr "Dangos ffenestr rhwydwaith"
+
+#, fuzzy
+#~ msgid "Import Playlist ..."
+#~ msgstr "Modd chwarae:"
+
+#, fuzzy
+#~ msgid "Export Playlist ..."
+#~ msgstr "Modd chwarae:"
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "Teitl"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "Sylw:"
+
+#, fuzzy
+#~ msgid "Show main player window"
+#~ msgstr "Dangos ffenestr rhwydwaith"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "Modd chwarae:"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "Ynghylch Gyrrwr Sun"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ " Hawlfraint (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Cynhaliwr: <vedge at csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "Dyfais rheoli sain:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Maint y byffer (ms):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "Dyfais rheoli sain:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr " XMMS yn defnyddio'r cymysgydd yn unig"
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Ffurfweddu'r Gyrrwr Sun"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Dwyster yr effaith:"
+
+#, fuzzy
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "Ategynnau Sain FLAC"
+
+#, fuzzy
#~ msgid "600HZ"
#~ msgstr "11000 Hz"
@@ -5602,10 +4678,6 @@ msgstr ""
#~ msgstr "Gwasanaethwr"
#, fuzzy
-#~ msgid "Save List"
-#~ msgstr "Rave"
-
-#, fuzzy
#~ msgid "About RoarAudio Plugin"
#~ msgstr "Ategynnau Sain FLAC"
@@ -5766,10 +4838,6 @@ msgstr ""
#~ msgstr "Ynghylch"
#, fuzzy
-#~ msgid "Output plugin"
-#~ msgstr "Ategyn Allbwn OSS"
-
-#, fuzzy
#~ msgid "Throttle Output"
#~ msgstr "Ynghylch Ategyn Allwyn Null"
@@ -5866,10 +4934,6 @@ msgstr ""
#~ msgstr "Rhagosodedig (%s)"
#, fuzzy
-#~ msgid "_Rename"
-#~ msgstr "Enw ffeil"
-
-#, fuzzy
#~ msgid "About Icecast-Plugin"
#~ msgstr "Ynghylch Ategyn Echo"
@@ -6038,21 +5102,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "Teitl:"
-#~ msgid "Artist:"
-#~ msgstr "Artist:"
-
-#~ msgid "Album:"
-#~ msgstr "Albwm:"
-
#~ msgid "Comment:"
#~ msgstr "Sylw:"
-#~ msgid "Year:"
-#~ msgstr "Blwyddyn:"
-
-#~ msgid "Track number:"
-#~ msgstr "Rhif y Trac:"
-
#~ msgid "Genre:"
#~ msgstr "Math:"
@@ -6235,10 +5287,6 @@ msgstr ""
#~ msgstr "defnyddio Cynnydd/Brig Albwm"
#, fuzzy
-#~ msgid "Track:"
-#~ msgstr "Cynnydd trac:"
-
-#, fuzzy
#~ msgid "Streamversion %d"
#~ msgstr "Llifo"
@@ -6852,12 +5900,6 @@ msgstr ""
#~ msgid " Ogg Vorbis Info "
#~ msgstr "Gwybodaeth am Ogg Vorbis"
-#~ msgid "Bit rate:"
-#~ msgstr "Didradd:"
-
-#~ msgid "Length:"
-#~ msgstr "Hyd:"
-
#~ msgid "File size:"
#~ msgstr "Maint ffeil:"
diff --git a/po/de.po b/po/de.po
index 28c6a74..4973654 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,18 +1,19 @@
msgid ""
msgstr ""
"Project-Id-Version: de\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: 2010-08-04 14:51+0100\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-07 23:37+0100\n"
+"PO-Revision-Date: 2012-01-08 00:12+0100\n"
"Last-Translator: Thomas Lange\n"
-"Language-Team: german\n"
-"Language: \n"
+"Language-Team: German\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: German\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -23,448 +24,176 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 Audacious team"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "Ãœber MP4-AAC-Player-Plugin"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Ãœber"
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Ãœber Alarm"
-#: src/adplug/adplug-xmms.cc:157
+#: src/alarm/alarm.c:313
msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Dieses Plugin wurde veröffentlicht unter den Bedingungen und Auflagen der "
-"GNU LGPL.\n"
-"http://www.gnu.org/licenses/lgpl.html für Details.\n"
-"\n"
-"Dieses Plugin benützt die AdPlug-Bibliothek; diese ist Copyright (C) Simon "
-"Peter, et al.\n"
-"Gelinkte AdPlug-Bibliotheks-Version: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Konfiguration"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "OK"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Allgemein"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Sound-Qualität"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Auflösung"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 Bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 Bit"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Kanäle"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Vom Gebrauch von Stereo wird abgeraten, da es dem Klang keine Stereo-Effekte "
-"hinzufügt - OPL2 ist nur Mono - aber mehr Rechenleistung wird benötigt!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frequenz"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Wiedergabe"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Liedende ermitteln"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-"Falls aktiviert, wird XMMS das Ende eines Titels erkennen, ihn stoppen und "
-"in der Wiedergabeliste fortfahren. Falls deaktiviert, erkennt XMMS dies "
-"nicht und spielt einfach weiter."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formate"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Format-Auswahl"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Format"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Erweiterung"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Ausgewählte Dateitypen werden von diesem Plugin erkannt und abgespielt. "
-"Deaktivierte Typen werden ignoriert, dass andere Plugins diese Dateien "
-"abspielen können."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Dateiinformation"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Dateiname"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Titel: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Dateityp: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Untertitel"
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumente: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Titel"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Instrumentenname"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Titel-Meldung"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Untertitel-Auswahl"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Reihenfolge: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Pattern: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Row: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Geschwindigkeit: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Timer: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "Ãœber XMMS-Alarm"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS-Alarm"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"Ein XMMS-Plugin, das verwendet werden kann,\n"
-"um zu einem bestimmten Zeitpunkt die\n"
+"Ein Plugin, das genutzt werden kann, um zu einer bestimmten Zeit die "
"Wiedergabe zu starten.\n"
"\n"
-"Alle Beschwerden senden an:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Schließen"
+"Ursprünglich geschrieben von Adam Feakin und Daniel Stodden."
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
msgstr "Alarm"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
msgstr "Dies ist dein Aufwach-Signal."
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "OK"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Wiedergabeliste wählen"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Entschuldigung"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Warnung"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Jo mei"
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
msgstr "Alarm-Einstellungen"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "Zeit"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
msgstr "Stunden"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
msgstr "Uhr"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
msgstr "Minuten"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
msgstr "Still nach:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
msgstr "Alarm um (standardmäßig):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
msgstr "Tage wählen, an denen der Alarm ausgelöst werden soll"
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr "Standard"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Tag"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Dienstag"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Mittwoch"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Donnerstag"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "Freitag"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Samstag"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Sonntag"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Montag"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Tage"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
msgstr "Ãœbergang"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "Sekunden"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Lautstärke"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "Momentan"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "Zur momentanen Lautstärke zurücksetzen"
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
msgstr "Beginnen bei"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr "Schluss"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
msgstr "Zusätzlicher Befehl"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
msgstr "aktivieren"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
msgstr "Wiedergabeliste (optional)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr "Suchen..."
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
msgstr "Erinnern"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
-msgstr "Erinnerung benützen"
+msgstr "Erinnerung benutzen"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Optionen"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
msgstr "Was bedeuten diese Einstellungen?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -567,24 +296,29 @@ msgstr ""
" Erinnerung:\n"
" Zeige eine Erinnerung an, wenn der Alarm ausgelöst wird.\n"
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Hilfe"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
msgstr "Die Erinnerung für heute lautet.."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "Danke"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "Standard-PCM-Device (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Standard-Mixer-Device (%s)"
@@ -596,7 +330,7 @@ msgstr "ALSA-Ausgabeplugin-Einstellungen"
msgid "PCM device:"
msgstr "PCM-Gerät:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "Mixer-Gerät:"
@@ -608,19 +342,21 @@ msgstr "Mixer-Element:"
msgid "Work around drain hangup"
msgstr "Workaround Drain-Hangup"
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "Ãœber ALSA Output Plugin"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "ALSA Fehler"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
msgstr ""
+"Sie haben keinen einzigen Sequenz-Port für die MIDI-Wiedergabe angegeben. "
+"Dies kann in den MIDI-Plugin-Einstellungen getan werden."
#: src/amidi-plug/backend-alsa/b-alsa.c:35
msgid "ALSA Backend "
@@ -637,12 +373,20 @@ msgid ""
"hardware synth will be directly played.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"Dieses Backend sendet MIDI Events an eine Gruppe von benutzerdefinierten "
+"ALSA Sequenzer-Ports. Das ALSA Sequenzer-Interface ist sehr vielseitig, es "
+"kann Ports sowohl für Hardware-Sequenzer (wie z.B. emu10k1) als auch für "
+"Software-Sequenzer und externe Geräte bereitstellen.\n"
+"Dieses Backend erzeugt kein Audiomaterial, MIDI Events werden direkt von "
+"Geräten/Programmen verarbeitet. Zur Hardware gesendete MIDI Events werden "
+"also z.B. direkt abgespielt.\n"
+"Backend geschrieben von Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FluidSynth-Backend "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -651,70 +395,50 @@ msgid ""
"by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"Diesed Backend erzeugt Audiomaterial durch Senden von MIDI Events an "
+"FluidSynth, ein Echtzeit-Software-Synthesizer basierend auf der SoundFont2 "
+"Spezifikation (www.fluidsynth.org).\n"
+"Erzeugtes Audiomaterial kann via Effektplugins beeinflusst werden und wird "
+"vom ausgewähltem Ausgabeplugin weiterverarbeitet.\n"
+"Backend geschrieben von Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSA-Backend-Konfiguration"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Client-Name"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Portname"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSA-Ausgabe-Ports"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Soundkarte: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Mixersteuerung: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Mixer-Einstellungen"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSA-Backend nicht geladen oder nicht verfügbar"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -722,113 +446,51 @@ msgstr ""
"<span size=\"smaller\">ALSA-\n"
"Backend</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - Backend-Information"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-Plug-Einstellungen"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Backend-Auswahl"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
-msgstr "Verfügbare backends"
+msgstr "Verfügbare Backends"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Wiedergabeeinstellungen"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Transponieren: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
-msgstr ""
+msgstr "Drum-Shift: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Erweiterte Einstellungen"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
-msgstr "Länge von MIDI-Dateien in der Wiedergabeliste ausrechnen"
+msgstr "Länge von MIDI-Dateien in der Wiedergabeliste berechnen"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "Kommentare aus MIDI-Datei extrahieren (falls verfügbar)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "Liedtexte aus MIDI-Dateien extrahieren (falls verfügbar)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -836,196 +498,119 @@ msgstr ""
"<span size=\"smaller\">AMIDI-\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - Datei auswählen"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - Konfiguration"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - SoundFont-Datei wählen"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "Fluidsynth-Backend-Konfiguration"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "SoundFont-Einstellungen"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Dateiname"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
-msgstr "Größe (Byte)"
+msgstr "Größe (Bytes)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "SF beim Player-Start laden"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "SF beim Abspielen der ersten MIDI-Datei laden"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Synthesizer-Einstellungen"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "Verstärkung"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "Standard benutzen"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "Wert:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "Polyphonie"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "Hall"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "Ja"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "Nein"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "Refrain"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "Abtastfrequenz"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "individuell"
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* SoundFont-Dateien auswählen *\n"
-"Um MIDI-Dateien mit FluidSynth abzuspielen, muss hier mindestens eine "
-"gültige SoundFont-Datei angegeben werden (absolute Pfade verwenden). Die "
-"Lade-Reihenfolge ist von der Spitze (erstes) bis zum The loading order is "
-"from the top (first) to the bottom (last)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth-Backend nicht geladen oder nicht verfügbar"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">FluidSynth-\n"
+"Backend</span>"
#: src/amidi-plug/i_configure-timidity.c:39
msgid "TIMIDITY BACKEND CONFIGURATION"
@@ -1040,15 +625,16 @@ msgid ""
"<span size=\"smaller\">TiMidity\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">TiMidity-\n"
+"Backend</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr "Name:"
#: src/amidi-plug/i_fileinfo.c:193
msgid "<span size=\"smaller\"> MIDI Info </span>"
-msgstr ""
+msgstr "<span size=\"smaller\"> MIDI Info </span>"
#: src/amidi-plug/i_fileinfo.c:205
msgid "Format:"
@@ -1056,7 +642,7 @@ msgstr "Format:"
#: src/amidi-plug/i_fileinfo.c:208
msgid "Length (msec):"
-msgstr "Länge (Ms):"
+msgstr "Länge (ms):"
#: src/amidi-plug/i_fileinfo.c:211
msgid "Num of Tracks:"
@@ -1072,15 +658,15 @@ msgstr "BPM:"
#: src/amidi-plug/i_fileinfo.c:223
msgid "BPM (wavg):"
-msgstr ""
+msgstr "BPM (Wavg):"
#: src/amidi-plug/i_fileinfo.c:226
msgid "Time Div:"
-msgstr ""
+msgstr "Zeitmultiplex:"
#: src/amidi-plug/i_fileinfo.c:237
msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
-msgstr ""
+msgstr "<span size=\"smaller\"> MIDI Kommentare und Liedtexte </span>"
#: src/amidi-plug/i_fileinfo.c:288
msgid "* no comments available in this MIDI file *"
@@ -1130,6 +716,27 @@ msgid ""
"for the good help with alpha testing\n"
"\n"
msgstr ""
+"\n"
+"Modularer MIDI Musikspieler\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"geschrieben von Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"Besonderen Dank an ...\n"
+"\n"
+"Clemens Ladisch und Jaroslav Kysela\n"
+"für ihre coolen Programme aplaymidi und amixer; Diese\n"
+"waren neben den alsa-lib Dokus sehr hilfreich, um mehr\n"
+"über die ALSA API zu lernen\n"
+"\n"
+"Alfredo Spadafina\n"
+"für das schöne Midi-Keyboard-Logo\n"
+"\n"
+"Tony Vroon\n"
+"für die gute Hilfe bei Alphatests\n"
+"\n"
#: src/aosd/aosd_style.c:75
msgid "Rectangle"
@@ -1147,19 +754,19 @@ msgstr "Konkaves Rechteck"
msgid "None"
msgstr "Kein"
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr "Wiedergabebeginn"
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
-msgstr "Löst OSD beim Abspielen eines Wiedergabelisteneintrags aus"
+msgstr "Löst OSD beim Abspielen eines Wiedergabelisteneintrags aus."
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr "Titeländerung"
-#: src/aosd/aosd_trigger.c:83
+#: src/aosd/aosd_trigger.c:84
msgid ""
"Triggers OSD when, during playback, the song title changes but the filename "
"is the same. This is mostly useful to display title changes in internet "
@@ -1169,219 +776,217 @@ msgstr ""
"der Dateiname gleich bleibt. Das ist hauptsächlich nützlich, um "
"Titeländerungen bei Internetstreams anzuzeigen."
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr "Lautstärkeänderung"
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
-msgstr "Löst OSD bei Lautstärkeänderung aus"
+msgstr "Löst OSD bei Lautstärkeänderung aus."
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr "Pause An"
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
-msgstr "Löst OSD beim Pausieren der Wiedergabe aus"
+msgstr "Löst OSD beim Pausieren der Wiedergabe aus."
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
msgstr "Pause Aus"
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
-msgstr "Löst OSD beim Fortsetzen der Wiedergabe aus"
+msgstr "Löst OSD beim Fortsetzen der Wiedergabe aus."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr "Platzierung"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
-msgstr "Relative X-Verschiebung"
+msgstr "Relative X-Verschiebung:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
-msgstr "Relative Y-Verschiebung"
+msgstr "Relative Y-Verschiebung:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr "Maximale OSD-Breite:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr "Mehr-Bildschirm-Optionen"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr "OSD anzeigen auf:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr "allen Bildschirmen"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr "Bildschirm %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr "Zeitablauf (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr "Anzeige:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr "Einblenden:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr "Ausblenden:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr "Schriftarten"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr "Schriftart %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr "Schatten"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Internationalisierung"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "UTF-8-Konversion von Text deaktivieren (in Aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr "Skin-Datei auswählen"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr "Render-Stil"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Farben"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Farbe %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr "Eigener Skin"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr "Skin-Datei:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr "Suchen"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr "Auslöser aktivieren"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr "Ereignis"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr "Composite-Manager erkannt"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
"manager otherwise the OSD won't work properly"
msgstr ""
"Composite-Manager nicht erkannt;\n"
-"sofern ein solcher nicht doch aktiv ist, bitte einen solchen aktivieren, "
-"sonst wird der OSD nicht funktionieren"
+"Sofern ein solcher nicht doch aktiv ist, bitte einen solchen aktivieren, "
+"ansonsten wird das OSD nicht funktionieren"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr "Composite-Manager nicht benötigt für vorgetäuschte Transparenz"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr "Transparenz"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr "Pseudo-Transparenz"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Echte Transparenz (benötigt X-Composite-Erweiterung)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr "Composite-Erweiterung nicht geladen"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr "Composite-Erweiterung nicht verfügbar"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious-OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr "Audacious-OSD - Konfiguration"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr "Test"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr "Position"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr "Animation"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr "Text"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr "Dekoration"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr "Auslöser"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Verschiedenes"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr "Ãœber Audacious-OSD"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
@@ -1389,7 +994,7 @@ msgstr ""
"\n"
"Audacious-OSD "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1411,138 +1016,35 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Hersteller"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "Verfügbare Headsets"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "Derzeitiges Headset"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "Aktualisieren"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "Verbinden"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "Schließen"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Klasse"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Adresse:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Einbinden abschließen!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Keine Geräte gefunden!"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Suche..."
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Zusammenführen..."
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Abtasten"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Wiedergeben"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur Scope: Farbauswahl"
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Optionen:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Bauer stereophonic-to-binaural Einstellungen"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Eingabepegel:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Grenzfrequenz:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Voreinstellungen:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr "Ãœber AudioCD-Plugin"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1569,127 +1071,156 @@ msgstr ""
"\n"
"Copyright 2009 John Lindgren"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Laufwerk ist leer."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Nicht unterstützter Disk-Typ."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "CD-Audio-Plugin-Konfiguration"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Digitale Audioextraktion"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Titelinformation"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
-msgstr "Diskgeschwindigkeit"
+msgstr "Diskgeschwindigkeit:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "CD-Text benutzen, falls vorhanden"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "CDDB benutzen, falls vorhanden"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Server: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Pfad:"
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "HTTP anstatt CDDBP benutzen"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
-msgstr "Anderes Device verwenden: "
+msgstr "Anderes Gerät verwenden: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "OK"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "CD wiedergeben"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "CD hinzufügen"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
-msgstr ""
+msgstr "Ãœber Dynamic Range Compression Plugin"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
-msgstr ""
+msgstr "Dynamic Range Compressor Einstellungen"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "Zielvolumen:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Center Lautstärke:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "Effektstärke:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Dynamischer Bereich:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Konsolen-Musik-Dekoder"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Allgemein"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Wiedergabe"
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "Bass:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr "sek"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Höhe:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "Standard-Liedlänge:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Resampling"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "Audio-Resampling aktivieren"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Resampling-Frequenz:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr "Länge von SPC-Tags ignorieren"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Hall verstärken"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
msgstr ""
"Die standardmäßige Liedlänge (in Sekunden) wird für Lieder benutzt, die "
-"keine Längeninformation beinhalten (z.B. Lieder in der Endlosschleife)."
+"keine Längeninformation beinhalten (z.B. Lieder in einer Endlosschleife)."
#: src/console/plugin.c:33
msgid "About the Game Console Music Decoder"
@@ -1707,653 +1238,306 @@ msgstr ""
"Implementierung für Audacious von: William Pitcock <nenolod@nenolod.net>, \n"
" Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "Ãœber Crossfade Plugin"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Crossfade Einstellungen"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Ãœberschneiden (in Sekunden):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "Crossfade Fehler"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
+"Crossfaiding fehlgeschlagen, weil die Lieder eine andere Anzahl an Kanälen "
+"hatten."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
"You can use the Sample Rate Converter effect to resample the songs to the "
"same rate."
msgstr ""
+"Crossfading fehlgeschlagen, weil die Lieder eine andere Sample-Rate hatten.\n"
+"\n"
+"Sie können den Sample-Rate-Converter benutzen, um die Lieder auf die selbe "
+"Bitrate zu resamplen."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Crystalizer konfigurieren"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "Effektstärke:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Ãœbernehmen"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
"\n"
"Surround echo by Carl van Schaik 1999"
msgstr ""
+"Echo Plugin\n"
+"Von Johan Levin 1999.\n"
+"\n"
+"Surround Echo von Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Ãœber Echo-Plugin"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Echo-Plugin konfigurieren"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Verzögerung: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "Rückkopplung: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "Lautstärke: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Wiedergabe->Abspielen"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Wiedergabe->Stopp"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Wiedergabe->Pause"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Wiedergabe->Zurück"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Wiedergabe->Nächstes"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Wiedergabe->Auswerfen"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Wiedergabe->Wiederholen"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Wiedergabe->Zufällige Wiedergabe"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Lautstärke->Um 5 erhöhen"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Lautstärke->Um 5 verringern"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Lautstärke->Um 10 erhöhen"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Lautstärke->Um 10 verringern"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Lautstärke->Lautlos"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Fenster->Hauptfenster"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Fenster->Wiedergabeliste"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Fenster->Equalizer"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Fenster->Zu Titel springen"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Erkannt"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "Individuell"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Nicht erkannt"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Information"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Fehler"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Spezielles Gerät hinzufügen"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Gerätename:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Gerätedatei:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-"Wollen Sie die existierende Konfiguration des ausgewählten Gerätes löschen?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Wollen Sie das ausgewählte Custom-Gerät entfernen?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - Konfiguration"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktiv"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Status"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Gerätename"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Gerätedatei"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Geräteadresse"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Bindungskonfiguration"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Name: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Dateiname: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Phys. Adresse: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "Ãœber EvDev-Plug"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:719
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
+"Multi-Format Audio-Decoding-Plugin für Audacious basierend auf dem\n"
+"FFmpeg Multimedia Framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious Plugin von:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:733
msgid "About FFaudio Plugin"
msgstr "Ãœber FFaudio Plugin"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr "Ãœber FileWriter-Plugin"
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
msgstr "FileWriter-Konfiguration"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
msgstr "Ausgabedatei-Format:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr "Konfigurieren"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
msgstr "In Original-Verzeichnis speichern"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
msgstr "In anderes Verzeichnis speichern"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
msgstr "Ausgabedatei-Verzeichnis:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
msgstr "Verzeichnis wählen"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
msgstr "Dateiname erhalten von:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
msgstr "ursprünglichen Datei-Tags"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
msgstr "ursprünglichen Dateinamen"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
msgstr "Dateiendung nicht entfernen"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Wenn aktiviert, wird die Erweiterung des ursprünglichen Dateinamens nicht "
-"entfernt, bevor die neue Dateierweiterung am Ende angefügt wird."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:578
msgid "Prepend track number to filename"
msgstr "Titelnummer vor Dateinamen anhängen"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Automatisch"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint-Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
msgstr "MP3-Konfiguration"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
msgstr "Algorithmen-Qualität:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"beste/langsamste:0;\n"
-"schlechteste/schnellste:9;\n"
-"empfohlen:2;\n"
-"voreingestellt:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
msgstr "Ausgabe-Abtastfrequenz:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Automatisch"
-
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
msgstr "Bitrate / Kompressionsverhältnis:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
msgstr "Bitrate (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
msgstr "Kompressionsverhältnis:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
msgstr "Audio-Modus:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Joint-Stereo"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr "Verschiedenes:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
msgstr "Strikte ISO-Erfüllung erzwingen"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr "Fehlerschutz"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "16-Bit-Prüfsumme zu jedem Frame hinzufügen"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr "Qualität"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
msgstr "VBR/ABR aktivieren"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr "Typ:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Variable Bitrate"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Durchschnittliche Bitrate"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
msgstr "VBR-Optionen:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
msgstr "Minimale Bitrate (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
msgstr "Maximale Bitrate (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
msgstr "Minimale Bitrate erzwingen"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Zur Benutzung mit Playern, die kein MP3 mit niedriger Bitrate unterstützen "
-"(Apex AD600-A DVD/MP3 player)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
msgstr "ABR-Optionen:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
msgstr "Durchschnittliche Bitrate (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
msgstr "VBR-Qualitätsstufe:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"höchste:0;\n"
-"niedrigste:9;\n"
-"voreingestellt:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
msgstr "Xing-VBR-Header nicht schreiben"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr "Frame-Parameter:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
msgstr "Als Copyright kennzeichnen"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
msgstr "Als Original kennzeichnen"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr "ID3-Parameter:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
msgstr "Hinzufügen von Version-2-Tags erzwingen"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
msgstr "Nur v1-Tag hinzufügen"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
msgstr "Nur v2-Tag hinzufügen"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
msgstr "Tags"
@@ -2365,11 +1549,11 @@ msgstr "Vorbis-Encoder-Konfiguration"
msgid "Quality level (0 - 10):"
msgstr "Qualitätsstufe (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC-Audio-Plugin "
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Ãœber FLAC-Audio-Plugin"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2385,15 +1569,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "Ãœber FLAC-Audio-Plugin"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Ãœber das Gnome-Shortcut-Plugin"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2407,490 +1587,463 @@ msgstr ""
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
-msgid "Open Files"
-msgstr "Dateien öffnen"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Titelnummer"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
-msgid "Add Files"
-msgstr "Dateien hinzufügen"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Titel"
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Künstler"
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr "GNT Interface"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Jahr"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "Kann nicht zu Zeit springen, wenn kein Titel gespielt wird.\n"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "Zu Zeit springen"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Titel"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "Minuten:Sekunden"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Warteschlangen-Position"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Titellänge:"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Länge"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Fehler beim Schreiben der Liste \"%s\": %s"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Dateipfad"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s existiert schon. Trotzdem fortfahren?"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Dateiname"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "Wiedergabeliste exportieren"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Benutzerdefinierter Titel"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "Wiedergabeliste importieren"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Bitrate"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr "GTK Interface"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Spalten auswählen"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Verfügbar:"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Ausgewählt:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "Nach aktuellem Titel stoppen"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Links andocken"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Wiederholen"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Rechts andocken"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Zufällige Wiedergabe"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Oben andocken"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Wiedergabeliste nicht weiterspielen"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Unten andocken"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Wiedergabeliste anzeigen"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Abdocken"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Wiedergabeliste anzeigen/verstecken"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Deaktivieren"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "Infobereich anzeigen"
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Dateien öffnen ..."
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "Infobereich anzeigen/verstecken"
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "_URL öffnen ..."
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "Hauptfenster anzeigen"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "Dateien _hinzufügen ..."
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "Hauptfenster anzeigen/verstecken"
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "U_RL hinzufügen ..."
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr "Statusleiste anzeigen"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "_Info ..."
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
-msgstr "Statusleiste anzeigen/verstecken"
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Einstellungen ..."
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pause"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Beenden"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Stopp"
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Wiedergeben"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Vorheriger"
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "_Pause"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Nächster"
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Stopp"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Wiedergabeliste"
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "_Vorheriger"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Neue Wiedergabeliste"
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Nächster"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Wiedergabeliste löschen"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "Wieder_holen"
-#: src/gtkui/ui_manager.c:92
-msgid "Import Playlist ..."
-msgstr "Wiedergabeliste importieren ..."
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "_Zufällige Wiedergabe"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Lade Wiedergabeliste in ausgewählte Wiedergabeliste"
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "Wiedergabeliste ni_cht weiterspielen"
-#: src/gtkui/ui_manager.c:95
-msgid "Export Playlist ..."
-msgstr "Wiedergabeliste exportieren ..."
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "N_ach Titel stoppen"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Ausgewählte Wiedergabelisten speichern."
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Titel-_Info ..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Alle Wiedergabelisten speichern"
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Zu Z_eitangabe springen ..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-"Alle geöffneten Playlisten speichern. Dies geschieht automatisch beim "
-"Beenden von Audacious."
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Zu _Titel sp_ringen ..."
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr "Aktualisieren"
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Nach Titel_nummer"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Metadaten aktualisieren."
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Nach _Titel"
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "Wiedergabelisten-Manager"
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Nach _Künstler"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Öffne Wiedergabelisten-Manager."
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Nach _Album"
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr "URL hinzufügen ..."
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Nach _Erscheinungsdatum"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Entfernter Titel hinzufügen."
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Nach _Dateipfad"
-#: src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
-msgstr "Dateien hinzufügen ..."
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Nach _benutzerdefiniertem Titel"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Fügt Dateien in Wiedergabeliste ein."
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "V_ertausche Anordnung"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Alle entfernen"
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Zufällige Ano_rdnung"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Entfernt alle Warteschlangeneinträge."
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Aktualisieren"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Nicht ausgewählte entfernen"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Nicht _verfügbare Dateien entfernen"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Entferne nicht ausgewählte Titel."
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Sortieren"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Auswahl entfernen"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Neu"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Ausgewählte Wiedergabelisteneinträge entfernen."
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "S_chließen"
-#: src/gtkui/ui_manager.c:131
-msgid "Sort"
-msgstr "Sortieren"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importieren ..."
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "Nach Titelnummer"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exportieren ..."
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "Nach Titel"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Wiedergabelisten-Manager ..."
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "Nach Künstler"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Warte_schlangen-Manager ..."
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "Nach Album"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "Lautstärke er_höhen"
-#: src/gtkui/ui_manager.c:140
-msgid "By File Path"
-msgstr "Nach Dateipfad"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "Lautstärke _verringern"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr "Vertausche Anordnung"
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Equalizer"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Ausgabe"
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_ffekte"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Effekte"
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interface"
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr ""
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Visualisierungen"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Ansicht"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "_Menüleiste anzeigen"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr "Interface"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "I_nfobereich anzeigen"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Datei"
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "_Statusleiste anzeigen"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "Komponenten"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Spaltenüberschriften _anzeigen"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Zeige Titeldetails"
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Spalten aus_wählen ..."
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Zeige Titeldetails"
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Mit Titelwechsel scrol_len"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Ãœber Audacious"
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Datei"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr "Dateien öffnen ..."
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Wiedergabe"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "Datei laden und abspielen"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "W_iedergabeliste"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr "URL öffnen ..."
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "Di_enste"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Medien aus bestimmter Adresse abspielen"
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Ausgabe"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Plugin-Dienste"
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "An_sicht"
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Einstellungen"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "In/Aus _Warteschlange"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Einstellungen anzeigen"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "Aus_schneiden"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "Beenden"
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Kopieren"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Audacious beenden"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Einfügen"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "A-B setzen"
-
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "A-B leeren"
-
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "Zum Anfang der Liste springen"
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "_Alles auswählen"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Zu Datei springen"
-
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "In/Aus Warteschlange"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Umbenennen"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Eintrag in der Wiedergabenwarteschleife aktivieren/deaktivieren."
-
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Kopieren"
-
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Ausschneiden"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "GTK Interface"
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Einfügen"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Alles auswählen"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Puffern ..."
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Wähle alle Einträge aus."
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Nichts auswählen"
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Fehler"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Alle ausgewählten Einträge abwählen."
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Schließen"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr "Mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr "Stereo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:109
#, c-format
-msgid "%d channels"
-msgstr "%d Kanäle"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d Kanal"
+msgstr[1] "%d Kanäle"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr "%s: %d Kbps, %d Hz, %s"
+msgid "%d kbps"
+msgstr "%d kbps"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Vorheriger Titel"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Wiedergeben"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Pause"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Stopp"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Nächster Titel"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "5 Sek. vorspulen"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "5 Sek. zurückspulen"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Stumm"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Lautstärke erhöhen"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Lautstärke verringern"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Zu Datei springen"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Player anzeigen/verstecken"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "On-Screen-Display anzeigen"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Wiederholen ein-/ausschalten"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Zufällige Wiedergabe ein-/ausschalten"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(keine)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
"\n"
"Do you want to continue?"
msgstr ""
-"Es ist nicht empfohlen die primären Maustasten hierfür zu benutzen.\n"
+"Es wird nicht empfohlen die primären Maustasten hierfür zu benutzen.\n"
"\n"
"Trotzdem fortfahren?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Maustastenkombinationen"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Global-Hotkey-Konfiguration"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -2898,23 +2051,23 @@ msgstr ""
"Bitte eine Tastenkombination innerhalb eines Textfelds drücken.\n"
"Es ist auch möglich, Maustasten zu verwenden."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Tastaturkürzel:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
-msgstr "<b>Aktion: </b>"
+msgstr "<b>Aktion:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Taste festlegen:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "Ãœber das Global-Hotkeys-Plugin"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2943,31 +2096,31 @@ msgstr ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr "Zu allen verfügbaren jack-Ports verbinden"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr "Nur zu Ausgabe-Ports verbinden"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr "Zu keinem Port verbinden"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr "jack-Plugin-Konfiguration"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
-msgstr "Verbindungs-Modus"
+msgstr "Verbindungs-Modus:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr "Debug-Ausgabe aktivieren"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2977,147 +2130,91 @@ msgid ""
"Audacious port by\n"
"Giacomo Lozito from develia.org"
msgstr ""
+"XMMS jack Treiber 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious Portierung durch\n"
+"Giacomo Lozito von develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
msgstr "Ãœber JACK Output Plugin 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Dieses LADSPA-Plugin hat keine Benutzeroberfläche."
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Name"
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Ãœber LADSPA Host"
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "%s Einstellungen"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Installierte Plugins"
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "LADSPA Einstellungen"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Aktive Plugins"
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Modulpfade:"
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Hinzufügen"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Trenne mehrere Pfade mit einem Doppelpunkt.\n"
+"Diese Pfade werden zusätzlich zum LADSPA_PATH durchsucht.\n"
+"Nach dem Hinzufügen neuer Pfade Enter drücken, um neue Plugins zu suchen.</"
+"small>"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Entfernen"
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Verfügbare Plugins:"
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA-Plugin-Liste"
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Aktivieren"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "Ãœber LIRC-Audacious-Plugin"
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Aktive Plugins:"
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRC-Plugin "
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Einstellungen"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"Ein einfaches Plugin, das Audacious mithilfe des\n"
-"LIRC-Daemons kontrollieren lässt\n"
-"\n"
-"Für Audacious angepasst von Tony Vroon <chainsaw@gentoo.org>\n"
-"vom XMMS-LIRC-Plugin von:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Informationen zu LIRC sind verfügbar unter:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "LIRC-Plugin-Einstellungen"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Zu LIRC Server wiederverbinden"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Zeitüberschreitung vor Wiederverbindung (Sekunden): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Wiederverbinden"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Verbindung"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: Konnte LIRC-Unterstützung nicht initialisieren\n"
+"Suche nach Liedtexten..."
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:304
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: Konnte LIRC Konfigurationsdatei nicht lesen\n"
-"%s: Bitte in der Dokumentation von LIRC lesen\n"
-"%s: wie man eine funktionierende erstellt\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: versuche wiederzuverbinden...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: Ungültiger Befehl \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: von LIRC Verbindung trennen\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: versuche jede %d Sekunden wiederzuverbinden...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"Verbinde zu lyrics.wikia.com..."
-#: src/lyricwiki/lyricwiki.c:337
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
-msgstr "\nKeine Liedtexte gefunden."
+msgstr ""
+"\n"
+"Keine Liedtexte gefunden."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
msgstr "Ãœber Metronom"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3131,257 +2228,61 @@ msgstr ""
"z.B. tact://77 zum Spielen von 77 Schlägen pro Minute\n"
"oder tact://60*3/4 zum Spielen von 60 bpm im 3/4-Takt"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Takt-Generator: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Takt-Generator: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug-Konfiguration"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Ãœber Channel-Mixer"
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Mono (downmix)"
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Channel-Mixer-Einstellungen"
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "Am nächsten (schnellstes)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Linear (schnell)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Spline (gute Qualität)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-tap Fir (extrem hohe Qualität)"
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 kHz "
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Abtastfrequenz"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Aktiv"
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Ausgabe-Kanäle:"
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Tiefe"
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Änderungen werden mit dem nächsten Titelwechsel wirksam"
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Verzögerung"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Hall"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Menge"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Bereich"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Bassverstärkung"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
msgstr "Surround"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Bemerkung: Eine zu hohe Vorverstärkung kann\n"
-"Clipping verursachen (störende Geräusche)!"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Vorverstärkung"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Dateinamen als Liedtitel verwenden"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Schnelle Wiedergabeliste-Information"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Geräuschreduktion"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Amiga MOD abspielen"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Nicht loopen"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Loope"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "Mal"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Für immer loopen"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Loopen"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD-Information"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Dateiname:\n"
-"Titel:\n"
-"Typ:\n"
-"Länge:\n"
-"Geschwindigkeit:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instrumente:\n"
-"Patterns:\n"
-"Kanäle:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Samples"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Instrumente"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Meldung"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Modplug-Input-Plugin für Audacious Version"
-
-#: src/modplug/gui/main.cxx:52
-#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Modplug sound engine geschrieben von Olivier Lapicque.\n"
-"XMMS interface für Modplug von Kenton Varda.\n"
-"(c)2000 Olivier Lapicque und Kenton Varda.\n"
-"Updates und Betreunung von Konstanty Bialkowski.\n"
-"Portiert für BMP von Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Ãœber Modplug"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Konnte Pixmap-Datei nicht finden: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Ausgewählte Titel uploaden"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:336
msgid "Upload in progress..."
msgstr "Upload läuft..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "MTP Geräte-Steuerung"
+#: src/mtp_up/mtp.c:348
+msgid "Upload to MTP Device"
+msgstr "Auf MTP Gerät hochladen"
+
+#: src/mtp_up/mtp.c:349
+msgid "Disconnect MTP Device"
+msgstr "MTP Gerät trennen"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Gestoppt"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "Gerät trennen"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious spielt gerade nichts ab."
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Null-Ausgabe-Plugin"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3389,1713 +2290,1152 @@ msgstr ""
" von Christian Birchinger <joker@netswarm.net>\n"
"basierend auf dem XMMS-Plugin von Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Ãœber Null-Ausgabe-Plugin"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Null-Ausgabe-Einstellungen"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr "In Echtzeit ablaufen lassen"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
msgstr "1. Standardgerät"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
msgstr "OSS4-Ausgabeplugin-Einstellungen"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
msgstr "Audiogerät:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr "Alternatives Gerät benutzen:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
msgstr "Lautstärke speichern"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
msgstr "Formatkonvertierung aktivieren"
-#: src/oss4/plugin.c:54
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Exklusiv-Modus aktivieren, um virtuelles Mischen zu verhindern."
+
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
msgstr "Ãœber OSS4-Plugin"
-#: src/oss4/plugin.c:55
-#, fuzzy
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-"An Audacious angepasst von Tony Vroon <chainsaw@gentoo.org>\n"
-"vom xmms_sndfile-Plugin:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
msgstr "OSS4 Fehler"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "Standard (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "OSS-Treiber-Konfiguration"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "Geräte"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "Zwischenspeichern:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
-msgstr "Vorpuffer (Prozent)"
+msgstr "Vorpuffer (Prozent):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "Zwischenspeichern"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "Mixer-Einstellungen:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "Master anstatt PCM regeln"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "Mixer"
-#: src/OSS/OSS.c:40
+#: src/OSS/OSS.c:41
msgid "About OSS Driver"
msgstr "Ãœber OSS-Treiber"
-#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Ãœber Audacious-PulseAudio-Ausgabe-Plugin"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
msgstr "Ãœber Sample-Rate-Konverter-Plugin"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
msgstr "Sample-Rate-Konverter Einstellungen"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
-msgstr ""
+msgstr "Rate-Mappings:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
-msgstr "Alle Anderen"
+msgstr "Alle anderen:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "Methode:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
msgstr "Passwort ändern"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr "<b>Dienste</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr "Benutzername:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr "Passwort:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
msgstr "Scrobbler-URL:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
-msgstr ""
+msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
-msgstr ""
+msgstr "Scrobbler"
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
"com>\n"
msgstr ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Ursprünglich geschrieben von Audun Hove <audun@nlc.no> und Pipian "
+"<pipian@pipian.com>\n"
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr "Ãœber Scrobbler-Plugin"
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "Ãœber %s"
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr " Fehler"
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "Allgemeine Info"
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr ""
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr "Audacious-SID-Konfiguration"
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8 Bit"
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16 Bit"
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr "Auflösung:"
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr ""
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr "Kanäle:"
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr "Abtastfrequenz:"
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr "Oversampling benützen"
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr "Faktor:"
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr "Große Faktoren benötigen mehr Rechenleistung"
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr "Oversampling:"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Ãœber SDL Output Plugin"
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Audio"
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "SDL Fehler"
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr "Geschwindigkeit erzwingen"
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Genre"
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50 Hz)"
-
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
-msgstr ""
-"PAL ist der europäische TV-Standard, welcher 50 Hz als Bildwiederholfrequenz "
-"benutzt. Die meisten der SID-Tuner sind für den PAL-Standard gebaut."
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Sammlung"
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60 Hz)"
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "Wiedergabeliste _erstellen"
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-"NTSC ist ein TV-Standard mit 60 Hz Bildwiederholfrequenz (und anderen "
-"Abweichungen zu PAL). Er wird vor allem in den USA, Japan und einigen "
-"anderen Ländern benutzt."
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr "Taktfrequenz:"
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "Zur Wiedergabeliste _hinzufügen"
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr "Modell erzwingen"
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Durchsuche Sammlung"
-#: src/sid/xs_interface.c:488
+#: src/search-tool/search-tool.c:645
msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
+"Wähle einen Ordner und klicke auf \"Aktualisieren\", \n"
+"um deine Musiksammlung in Audacious zu importieren."
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr "SID-Modell:"
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-"LibSIDPlay 1.x Emulation benutzen, schneller aber ungenauer. Dennoch in "
-"vielen Fällen gut."
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr "SIDPlay 2 (zyklus-basiert)"
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-"libSIDPlay 2.x Emulation benutzen, welche mehr CPU-Leistung für mehr "
-"Genauigkeit benötigt."
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr "Auswahl der Emulations-Bibliothek:"
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr "Echter C64 (nur SIDPlay 2)"
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr ""
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr ""
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr "PlaySID-Umgebung"
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr "Speichermodus:"
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr ""
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr "Optimierungs-Modus (schneller, ungenau)"
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr "reSID-Emulation"
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr "HardSID"
-
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr "SIDPlay 2-Optionen:"
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr "Schnell (am nächsten)"
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr "Lineare Interpolation"
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr "Resampling (FIR)"
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr "reSID-Sampling-Optionen:"
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr ""
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr "Filter emulieren"
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr ""
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr ""
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr ""
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr "Werte zurücksetzen"
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr "SIDPlay1"
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr "Exportieren"
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr "Nutzen"
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr "Speichern"
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr "Importieren"
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr "Löschen"
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr "Filterkurve:"
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr "SIDPlay2"
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr "Filter"
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr "Mindestens für die angegebene Zeit spielen"
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-"Wenn aktiviert, wird das Stück mindestens für die angegebene Zeit "
-"abgespielt, wobei nötigenfalls Stille zum Ende hinzugefügt wird."
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr "Spielzeit:"
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr "Minimale Spielzeit:"
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr "Für bestimmte Maximalzeit spielen"
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-"Falls aktiviert, wird der Titel gespielt bis ein bestimmter Wert erreicht "
-"wird (z.B. Maximale Spielzeit)."
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr "Nur wenn Titellänge unbekannt"
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-"Falls aktiviert, wird die Maximale Spielzeit nur benutzt, wenn Titellänge "
-"unbekannt ist."
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr "Maximale Spielzeit:"
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr "XSIDPLAY-kompatible Datenbank benützen"
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-"Diese Option aktiviert die Nutzung der XSIDPLAY Datenbank (siehe Audacious-"
-"SID-Dokumentation für weitere Informationen)."
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr "DB-Datei:"
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr "Datenbankpfad und -dateiname"
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr "Nach Titellänge-Datei in Datenbank suchen"
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr "Titellänge Datenbank:"
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr "Titellänge"
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr "Allgemeinen Tuplez-Format-String überschreiben"
-
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-"Mit dem Aktivieren dieser Einstellung kann man einen bestimmten Tuplez-"
-"Formatierungs-String für SID-Dateien festlegen. Spezifische Tags sind unten "
-"kurz erklärt."
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr "Tuplez-Formatierungs-String für SID-Dateien"
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr "Titelformat:"
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Titel"
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr "Sub-Tune zu Wiedergabeliste hinzufügen"
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-"Falls aktiviert, werden Sub-Tunes jeder Datei zur Wiedergabeliste "
-"hinzugefügt. Falls deaktiiviert, werden nur die Standard-Sub-Tunes "
-"hinzugefügt."
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr "Nur mit spezifizierter Minimumdauer abstimmen"
-
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr ""
-"Nur Sub-Tunes hinzufügen, die mindestens eine bestimmte Mindestdauer haben."
-
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr "Sub-Tune Umgang:"
-
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr "STIL-Datenbank verwenden"
-
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
-"Falls Option aktiviert (und die Datenback & die HVSC Einstellungen unten "
-"richtig gesetzt sind), wird Audacious-SID zusätzliche Informationen aus der "
-"STIL-Datenbank bei passenden Titeln nutzen und anzeigen."
-
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr "STIL-Datei:"
-
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-"Pfad und Dateiname der STIL-Datenbank-Datei (STIL.txt), üblicherweise im "
-"HVSC-DOCUMENTS-Unterverzeichnis."
-
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr "Nach STIL-Datenbank-Datei suchen"
-
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr "HVSC-Pfad:"
-
-#: src/sid/xs_interface.c:1262
-msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
-msgstr ""
-"Pfad zum Basis-Verzeichnis der High Voltage SID Collection (HVSC), zum "
-"Beispiel /media/C64Music/"
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr "Nach HVSC-Pfad suchen"
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr "SID Tune Information List (STIL)-Datenbank:"
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "Alle Änderungen verwerfen"
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "Änderungen akzeptieren und aktualisieren"
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Audacious-SID-Dateiinformation"
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "Dateiname:"
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "Titel:"
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "Komponist:"
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "Copyright:"
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "Titel-Information:"
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "Autor:"
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "Länge:"
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr "Sub-Tune Information:"
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr "HVSC-Titellängendatenbank auswählen"
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Bitte warten ..."
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr "STIL-Datenbank auswählen"
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Ordner auswählen"
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr "HVSC Ort-Präfix auswählen"
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr "SIDPlay2-Filterdatei für Importieren auswählen"
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr "SIDPlay2-Filterdatei für Exportieren auswählen"
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "Gewählte Aktion bestätigen"
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Ja"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "Nein"
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "Ãœber Skinned GUI"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
+"Copyright (c) 2008, von Tomasz Moń <desowin@gmail.com>\n"
+"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Oberfläche"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
-msgstr "Hauptfenster"
+msgstr "_Hauptfenster:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
msgstr "Hauptfenster-Schrift auswählen:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
-msgstr "Wiedergabeliste"
+msgstr "_Wiedergabeliste:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
-msgstr "Playlist-Schrift auswählen"
+msgstr "Playlist-Schrift auswählen:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>Schriftarten</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Bitmap-Schriften verwenden, falls verfügbar"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Benutze Bitmap-Schriftarten (nur ASCII-Unterstützung)"
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-"Bitmap-Schriften verwenden, falls verfügbar (keine Unicode-Strings "
-"Unterstützung)"
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>Verschiedenes</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Trennstriche in Wiedergabeliste anzeigen"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Titel in beide Richtungen scrollen"
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Fenstermanager-Dekorationen anzeigen"
-
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Dies aktiviert die Anzeige der Fenstermanager-Dekorationen."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Text hin und her scrollen"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-"Wenn ausgewählt, bewegt sich der Text der Dateiinformation abwechselnd von "
-"Links nach Rechts. Ansonsten bewegt er sich nur in eine Richtung."
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Interface-Einstellungen"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Schalte Inline-GTK-Theme aus"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Vorverstärkung"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Zufälliger Skin beim Abspielen"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Erlaube Laden unvollständiger Skins"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
-"Wenn aktiviert, lädt Audacious auch Skins, die nicht vollständig sind. Nur "
-"wenn nötig aktivieren."
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Farbkorrektur"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Farbverläufe der Benutzeroberfläche sind durch die Schieberegler unten "
-"anpassbar:"
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Blau"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Rot"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Grün"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Skin</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr "Farbkorrektur ..."
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Audacious Equalizer"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:887
msgid "Presets"
msgstr "Standard"
-#: src/skins/ui_main.c:593
-msgid "kbps"
-msgstr ""
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Voreinstellungen laden"
-#: src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "kHz"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Voreinstellungen automatisch laden"
-#: src/skins/ui_main.c:608
-msgid "surround"
-msgstr "Surround"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Equalizer-Voreinstellungen laden"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - Visibility-Warnung"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Speichere Voreinstellungen"
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Hauptfenster anzeigen"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Speichere automatische Voreinstellungen"
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignoriere"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Equalizer-Voreinstellungen speichern"
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Audacious wurde mit allen Fenstern versteckt gestartet.\n"
-"Das Hauptfenster zum Steuern von Audacious sollte aktiviert sein, ansonsten "
-"muss Audacious via audtool oder aktivierten Plugins ferngesteuert werden."
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Lösche Voreinstellungen"
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Immer ignorieren, anzeigen/verstecken wird ferngesteuert"
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Lösche automatische Voreinstellungen"
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - Warnung: defekte GTK-Engine"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Diese Warnung nicht mehr anzeigen"
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "Surround"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "Suche nach: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Suche nach %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
-msgstr "Lautstärke: (%d%%)"
+msgstr "Lautstaerke: (%d%%)"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Balance: %d%% links"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Balance: Mitte"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Balance: %d%% rechts"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Optionen"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "'Immer im Vordergrund' aus"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "'Immer im Vordergrund' an"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Dateiinformationen"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "'GUI-Skalierung' aus"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "'GUI-Skalierung' an"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Visualisierungs-Menü"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1653
msgid "Single mode."
-msgstr ""
+msgstr "Single-Modus."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1655
msgid "Playlist mode."
msgstr "Wiedergabelistenmodus"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1677
msgid "Stopping after song."
msgstr "Nach Titel stoppen."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1679
msgid "Not stopping after song."
msgstr "Nicht nach Titel stoppen."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Autoscrollen des Titelnamens"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Nach aktuellem Titel stoppen"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Spitzen"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Wiederholen"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Zufällige Wiedergabe"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Wiedergabeliste nicht weiterspielen"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Hauptfenster anzeigen"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Wiedergabelisten-Editor anzeigen"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Equalizer anzeigen"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Immer im Vordergrund"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Auf allen Arbeitsflächen"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Player aufrollen"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Wiedergabelisten-Editor aufrollen"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Equalizer aufrollen"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Skalierung"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Doppelte Größe"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Leichtes Bewegen"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
-msgstr ""
+msgstr "Analyzer"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
-msgstr ""
+msgstr "Scope"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
-msgstr ""
+msgstr "Voiceprint"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Aus"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normal"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Feuer"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Vertikale Linien"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Linien"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Balken"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Punkte"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Linien"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Beständig"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Eis"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Weich"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Am langsamsten"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Langsam"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Normal"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Schnell"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Am schnellsten"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Verstrichene Zeit"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Verbleibende Zeit"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pause"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Vorheriger"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Nächster"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Visualisierung"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Visualisierungs-Modus"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Analyzer-Modus"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Scope-Modus"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Voiceprint-Modus"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "WindowShadeVU-Modus"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Analyzer-Fallgeschwindigkeit"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Spitzen-Fallgeschwindigkeit"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Wiedergabeliste"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Neue Wiedergabeliste"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Nächste Wiedergabeliste wählen"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Vorherige Wiedergabeliste wählen"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Wiedergabeliste löschen"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Wiedergabeliste importieren"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Lade Wiedergabeliste in ausgewählte Wiedergabeliste."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Wiedergabeliste exportieren"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Ausgewählte Wiedergabelisten speichern."
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "Liste aktualisieren"
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
-msgstr "Listenmanager"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Metadaten aktualisieren."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Wiedergabelisten-Manager"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Warteschlangen-Manager"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Ansicht"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interface"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Interface-Einstellungen ..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "Internetadresse hinzufügen..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Entfernter Titel hinzufügen."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Dateien hinzufügen..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Fügt Dateien in Wiedergabeliste ein."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Suchen und Auswählen"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
-msgstr "Wiedergabeliste auf bestimmte Suchkriterien durchsuchen lassen"
+msgstr "Wiedergabeliste nach bestimmte Suchkriterien durchsuchen lassen"
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Auswahl invertieren"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "Invertiere alle Einträge."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Alle auswählen"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Wähle alle Einträge aus."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Keine auswählen"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Alle ausgewählten Einträge abwählen."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Alle entfernen"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Entfernt alle Warteschlangeneinträge."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "Warteschlange löschen"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "Zugehörige Warteschlange der Wiedergabeliste entfernen."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Nicht verfügbare Dateien entfernen"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "Enfernt alle nicht verfügbaren Dateien aus der Liste."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Duplikate entfernen"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Nach Titel"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "Duplikate nach Titel entfernen."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "Nach Dateinamen"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr "Duplikate nach Dateinamen entfernen."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "Nach Pfad + Dateinamen"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "Duplikate nach vollem Pfad entfernen."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Nicht ausgewählte entfernen"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Entferne nicht ausgewählte Titel."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Auswahl entfernen"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Ausgewählte Wiedergabelisteneinträge entfernen."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Liste zufällig anordnen"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Ordne Liste zufällig an."
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "Liste umkehren"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Wiedergabeliste umkehren."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Liste sortieren"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
-msgstr "Sortiere nach Titel."
+msgstr "Sortiere Liste nach Titel."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Nach Album"
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
-msgstr "Sortiere nach Album."
+msgstr "Sortiere Liste nach Album."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Nach Künstler"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
-msgstr "Sortiere nach Künstler."
+msgstr "Sortiere Liste nach Künstler."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
-msgstr "Sortiere nach Dateiname."
+msgstr "Sortiere Liste nach Dateiname."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Sortiere Liste nach Pfadnamen."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "Nach Datum"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
-msgstr "Sortiert die Liste nach Modifizierungszeitpunkt"
+msgstr "Sortiere Liste nach Modifizierungszeitpunkt."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Nach Titelnummer"
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
-msgstr "Sortiert die Liste nach Titelnummer"
+msgstr "Sortiere Liste nach Titelnummer."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "Ausgewählte Sortieren"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Datei"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Plugin-Dienste"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Zeige Titeldetails"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Zeige Titeldetails"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Ãœber Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "Datei abspielen"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Datei laden und abspielen"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "Internetadresse spielen"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Medien von bestimmter Adresse abspielen"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Plugin-Dienste"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Einstellungen anzeigen"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Audacious beenden"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "A-B setzen"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "A-B leeren"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Zu Zeitangabe springen"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "In/Aus Warteschlange"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Eintrag in der Wiedergabewarteschleife aktivieren/deaktivieren."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Kopieren"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Einfügen"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
msgstr "Laden"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importieren"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Speichern"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Löschen"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
msgid "Preset"
msgstr "Voreinstellung"
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr "Voreinstellungen laden"
-
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
msgstr "Voreinstellungen automatisch laden"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
msgstr "Voreinstellungen laden"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
msgstr "Standardwerte in Equalizer laden"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr "Null"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
msgstr "Equalizer Einstellungen auf Null setzen"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr "Aus Datei"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
msgstr "Standardwerte aus Datei laden"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr "Aus einer WinAMP-EQF-Datei"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
msgstr "Lade Standard aus WinAMP-EQF-Datei"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
msgstr "WinAMP Standard"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
msgstr "Importiere WinAMP Standard"
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr "Speichere"
-
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
msgstr "Speichere"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
msgstr "Standardwerte speichern"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr "in Datei"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
msgstr "Speichere in Datei"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr "in WinAMP-EQF-Datei"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
msgstr "Speichere in WinAMP-EQF-Datei"
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr "Lösche Voreinstellungen"
-
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
msgstr "Lösche Voreinstellungen"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr "Suche Einträge in aktiver Playliste"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:256
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
"expressions work, simply insert a literal portion of what you're searching "
"for."
msgstr ""
+"Wählen Sie Einträge in der Wiedergabeliste durch Ausfüllen eines oder "
+"mehrerer Eingabefelder aus. Diese nutzen reguläre Ausdrücke, unterscheiden "
+"Groß- und Kleinschreibung aber nicht. Falls Sie nicht wissen, wie reguläre "
+"Ausdrücke funktionieren, geben Sie einfach nur einen Teilbegriff für Ihre "
+"Suche ein."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Titel: "
+
+#: src/skins/ui_playlist.c:271
msgid "Album: "
-msgstr "Album:"
+msgstr "Album: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
-msgstr "Künstler:"
+msgstr "Künstler: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
-msgstr "Dateiname:"
+msgstr "Dateiname: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
-msgstr "Vorherige Auswahl vorm Suchen löschen"
+msgstr "Vorherige Auswahl vor dem Suchen löschen"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr "Automatisch zwischen passenden Einträgen wechseln"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr "Erstelle neue Playlist mit passenden Einträgen"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Als statische Wiedergabeliste speichern"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Relativen Pfad verwenden"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Wiedergabenliste laden"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Wiedergabeliste speichern"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr "Audacious Wiedergabelisten-Editor"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d von %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr "250 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr "500 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr "1 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr "2 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr "4 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr "16 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Archivierter Winamp 2.x-Skin"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Nichtarchivierter Winamp 2.x-Skin"
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Konnte Ordner nicht erstellen (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
msgstr "Ãœber das Sndfile-Plugin"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-"An Audacious angepasst von Tony Vroon <chainsaw@gentoo.org>\n"
-"vom xmms_sndfile-Plugin:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "Ãœber SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr "Lautstärkekorrektur"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr "Kurzes Ãœberlappen"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "Geschwindigkeit"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "Tonhöhe"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Skalierung"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "SndStretch - Konfiguration"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
-msgstr "Auszuführender Befehl, wenn Audacious ein neues Lied startet"
+msgstr "Auszuführender Befehl, wenn Audacious ein neues Lied startet."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
msgstr "Befehl:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
-msgstr "Auszuführender Befehl am Ende eines Lieds"
+msgstr "Auszuführender Befehl am Ende eines Lieds."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
-msgstr "Auszuführender Befehl am Ende der Wiedergabeliste"
+msgstr "Auszuführender Befehl am Ende der Wiedergabeliste."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:455
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Auszuführender Befehl, wenn sich der Titel eines Lieds ändert (z.B. bei "
-"Netzwerk-Streams)"
+"Netzwerk-Streams)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5108,23 +3448,29 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Verwendbar sind folgende Zeichenketten, die ersetzt\n"
" werden, bevor ein Befehl aufgerufen wird.\n"
"(es sind jedoch nicht alle nützlich für den Ende-der-Wiedergabeliste-"
"Befehl)\n"
"\n"
-"%%F: Frequenz (in Hertz)\n"
-"%%c: Anzahl der Kanäle\n"
-"%%f: Dateiname (absoluter Pfad)\n"
-"%%l: Länge (in Millisekunden)\n"
-"%%n oder %%s: Titel\n"
-"%%r: Bitrate (in Bits pro Sekunde)\n"
-"%%t: Wiedergabelisten-Position (%%02d)\n"
-"%%p: Ist die Wiedergabe momentan aktiv? (1 oder 0)"
+"%F: Frequenz (in Hertz)\n"
+"%c: Anzahl der Kanäle\n"
+"%f: Dateiname (absoluter Pfad)\n"
+"%l: Länge (in Millisekunden)\n"
+"%n oder %s: Titel\n"
+"%r: Bitrate (in Bits pro Sekunde)\n"
+"%t: Wiedergabelisten-Position (%02d)\n"
+"%p: Wiedergabe momentan aktiv? (1 oder 0)\n"
+"%a: Künstler\n"
+"%b: Album\n"
+"%T: Titelname"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:488
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5132,24 +3478,19 @@ msgstr ""
"<span size='small'>Parameter sollten zwischen Anführungszeichen stehen, ohne "
"besteht ein Sicherheitsrisiko.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
msgstr "Befehle"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
msgstr "Songwechsel"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Analyzer-Spektrum"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr "Ãœber Status-Icon-Plugin"
-#: src/statusicon/statusicon.c:356
-#, fuzzy
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5159,41 +3500,59 @@ msgid ""
"This plugin provides a status icon, placed in\n"
"the system tray area of the window manager.\n"
msgstr ""
+"Status Icon Plugin\n"
"\n"
-"geschrieben von Giacomo Lozito < james@develia.org >\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
"\n"
-"Dieses Plugin stellt ein Status-Icon bereit, im\n"
-"System-Tray des Fenstermanagers.\n"
+"Dieses Plugin stellt ein Status-Icon bereit, welches\n"
+"im System-Tray des Fenstermanagers angezeigt wird.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr "Status-Icon-Plugin - Einstellungen"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr "Rechtsklick-Menü"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Kleines Wiedergabe-Menü #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Kleines Wiedergabe-Menü #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
msgstr "Maus-Scroll-Aktion"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr "Lautstärke ändern"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr "Aktiven Titel ändern"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Andere Einstellungen"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "PopUp-Fenster deaktivieren"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "In den Informationsbereich beenden (System-Tray)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Durch Hochscrollen in Wiedergabeliste fortschreiten"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5207,100 +3566,15 @@ msgstr ""
msgid "About Extra Stereo Plugin"
msgstr "Ãœber das Extra Stereo Plugin"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "Extra Stereo konfigurieren"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr "Suchen:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr "Lesezeichen setzen"
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "Streambrowser"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr "Streamname"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr "Aktueller Song"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr "Lesezeichen entfernen"
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr "Ãœber Streambrowser"
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "Streambrowser"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Ãœber den Sun-Treiber"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Betreuer: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Audio-Kontroll-Gerät:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Puffergröße (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Lautstärke-Kontroll-Gerät:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS benützt den Mixer exklusiv."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun-Treiber-Konfiguration"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
msgstr "Ãœber Ton-Generator"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5311,40 +3585,28 @@ msgstr ""
"Sinuston-Generator von Haavard Kvaalen <havardk@xmms.org>\n"
"Verändert von Daniel J. Peng <danielpeng@bigfoot.com>\n"
"\n"
-"Um ihn zu benützen, eine URL hinzufügen: tone://frequency1;frequency2;"
+"Um ihn zu benutzen, eine URL hinzufügen: tone://frequency1;frequency2;"
"frequency3;...\n"
"z.B. tone://2000;2005 für einen Ton mit 2000Hz und einen mit 2005Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
msgstr "Ton-Generator: "
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "Allgemeine Titel überschreiben"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Ãœber File I/O Plugin"
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Titelformat:"
-
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Ogg-Vorbis-Tags"
-
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Ogg-Vorbis-Audio-Plugin-Konfiguration"
-
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Ãœber Ogg-Vorbis-Audio-Plugin"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5366,7 +3628,7 @@ msgstr ""
"\n"
"Original-Code von\n"
"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
-"Contributions from\n"
+"Beiträge von\n"
"Chris Montgomery <monty@xiph.org>\n"
"Peter Alm <peter@xmms.org>\n"
"Michael Smith <msmith@labyrinth.edu.au>\n"
@@ -5403,12 +3665,12 @@ msgstr ""
"\n"
"Audacious-Implementierung von Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack-Dekoder-Plugin %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5419,535 +3681,3 @@ msgstr ""
"\n"
"Ein Teil des Plugin-Codes war von Miles Egan\n"
"Die Wavpack-Seite befindet sich auf http://www.wavpack.com/\n"
-
-#~ msgid "Audacious standard menu"
-#~ msgstr "Audacious-Standard-Menü"
-
-#~ msgid "Surround echo"
-#~ msgstr "Surround-Echo"
-
-#~ msgid "About ESounD Plugin"
-#~ msgstr "Ãœber das ESounD-Plugin"
-
-#~ msgid "ESD Output Plugin configuration"
-#~ msgstr "ESD-Ausgabe-Plugin-Konfiguration"
-
-#~ msgid "Host:"
-#~ msgstr "Host:"
-
-#~ msgid "Use remote host"
-#~ msgstr "Nutze Remote-Host"
-
-#~ msgid "Volume controls OSS mixer"
-#~ msgstr "Lautstärke steuert OSS-Mixer"
-
-#~ msgid "Port:"
-#~ msgstr "Port:"
-
-#~ msgid "Server"
-#~ msgstr "Server"
-
-#~ msgid "Load List"
-#~ msgstr "Lade Liste"
-
-#~ msgid "Save List"
-#~ msgstr "Liste speichern"
-
-#~ msgid "About RoarAudio Plugin"
-#~ msgstr "Ãœber RoarAudio Plugin"
-
-#~ msgid "RoarAudio Plugin - Configuration"
-#~ msgstr "RoarAudio Plugin - Konfiguration"
-
-#~ msgid "Server Type:"
-#~ msgstr "Servervariante:"
-
-#~ msgid "Host or Path:"
-#~ msgstr "Host oder Pfad:"
-
-#~ msgid "<b>Host:</b>"
-#~ msgstr "<b>Host:</b>"
-
-#~ msgid "Server & Network"
-#~ msgstr "Server & Netzwerk"
-
-#~ msgid "Proxy Address"
-#~ msgstr "Proxyadresse"
-
-#~ msgid "<b>Proxy</b>"
-#~ msgstr "<b>Proxy</b>"
-
-#, fuzzy
-#~ msgid "Player Name:"
-#~ msgstr "Hauptfenster"
-
-#, fuzzy
-#~ msgid "<b>Player</b>"
-#~ msgstr "<b>Name: </b>"
-
-#, fuzzy
-#~ msgid "<b>Current Song</b>"
-#~ msgstr "<b>Aktion: </b>"
-
-#~ msgid "Meta Data"
-#~ msgstr "Meta-Daten"
-
-#~ msgid "Randomize List"
-#~ msgstr "Liste zufällig anordnen"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Ordnet Liste zufällig an."
-
-#~ msgid "Start of playback"
-#~ msgstr "Starte Wiedergabe"
-
-#~ msgid "Automatic songchange"
-#~ msgstr "Automatischer Titelwechsel"
-
-#~ msgid "Manual songchange"
-#~ msgstr "Manueller Titelwechsel"
-
-#~ msgid "Manual stop"
-#~ msgstr "Manueller Stop"
-
-#~ msgid "End of playlist"
-#~ msgstr "Ende der Wiedergabeliste"
-
-#~ msgid "Seeking"
-#~ msgstr "Suchen"
-
-#~ msgid "Reopen output device"
-#~ msgstr "Ausgabegerät erneut öffnen"
-
-#~ msgid "Flush output device"
-#~ msgstr "Ausgabegerät leeren"
-
-#~ msgid "None (gapless/off)"
-#~ msgstr "Nichts (Gapless/aus)"
-
-#~ msgid "Simple crossfade"
-#~ msgstr "Einfaches Ãœberblenden"
-
-#~ msgid "Advanced crossfade"
-#~ msgstr "Erweitertes Ãœberblenden"
-
-#~ msgid "Fadein"
-#~ msgstr "Einblenden:"
-
-#~ msgid "Fadeout"
-#~ msgstr "Ausblenden:"
-
-#~ msgid "Fadeout/Fadein"
-#~ msgstr "Aus/Einblenden:"
-
-#~ msgid "About"
-#~ msgstr "Ãœber"
-
-#~ msgid "Output plugin"
-#~ msgstr "Ausgabe-Plugin"
-
-#~ msgid "Throttle Output"
-#~ msgstr "Ausgabe drosseln"
-
-#~ msgid "Max block size (bytes):"
-#~ msgstr "Maximale Blockgröße (Bytes):"
-
-#~ msgid "Plugin compatibility options"
-#~ msgstr "Plugin Kompatibilitätsoptionen"
-
-#~ msgid ""
-#~ "When modifying the Output Options or the Mixing buffer size, you need to "
-#~ "stop/restart playback for the settings to take effect."
-#~ msgstr ""
-#~ "Nach Modifizieren der Ausgabeeinstellungen oder der Buffergröße muss die "
-#~ "Wiedergabe gestoppt/neugestartet werden."
-
-#~ msgid "Mixing buffer size (ms):"
-#~ msgstr "Puffergröße (ms):"
-
-#~ msgid "auto"
-#~ msgstr "Automatisch"
-
-#~ msgid ""
-#~ "Automatically calculate an optimal buffer size.\n"
-#~ "Default: On"
-#~ msgstr ""
-#~ "Optimale Buffergröße automatisch berechnen.\n"
-#~ "Standard: An"
-
-#~ msgid "Set parameters for:"
-#~ msgstr "Setze Parameter für:"
-
-#~ msgid "Reopen"
-#~ msgstr "Wieder öffnen"
-
-#~ msgid "Length (ms):"
-#~ msgstr "Länge (ms):"
-
-#~ msgid "Start volume (%):"
-#~ msgstr "Anfangslautstärke: (%)"
-
-#~ msgid "Fade in"
-#~ msgstr "Einblenden:"
-
-#~ msgid "End volume (%):"
-#~ msgstr "Endlautstärke: (%)"
-
-#~ msgid "Custom (ms):"
-#~ msgstr "Benutzerdefiniert (ms):"
-
-#~ msgid ""
-#~ "Don't overlap the two songs. The next song will start immediatelly after "
-#~ "the previous has ended."
-#~ msgstr ""
-#~ "Titel nicht überlappen. Der nächste Titel wird sofort gestartet, nachdem "
-#~ "der vorige geendet hat."
-
-#~ msgid " Enable"
-#~ msgstr "Aktivieren"
-
-#~ msgid "Advanced"
-#~ msgstr "Erweiterte Einstellungen"
-
-#~ msgid "Write debug output to <stderr>"
-#~ msgstr "Schreibe Debug-Ausgabe in <stderr>"
-
-#~ msgid "Debug options"
-#~ msgstr "Debug-Optionen"
-
-#~ msgid "Enable volume control"
-#~ msgstr "Lautstärkeregelung aktivieren"
-
-#~ msgid "Volume control options"
-#~ msgstr "Lautstärkeeinstellungen"
-
-#~ msgid "Don't crossfade"
-#~ msgstr "Nicht überblenden"
-
-#~ msgid "successive tracks"
-#~ msgstr "fortlaufende Titel"
-
-#~ msgid "same file"
-#~ msgstr "selbe Datei"
-
-#~ msgid "Enable HTTP buffer underrun workaround"
-#~ msgstr "HTTP Bufferunderrun-Workaround aktivieren"
-
-#~ msgid "Use Quantaudio timing comments"
-#~ msgstr "Quantaudio timing comments nutzen"
-
-#~ msgid "Keep output opened"
-#~ msgstr "Ausgabe offen lassen"
-
-#~ msgid "Advanced options"
-#~ msgstr "Erweiterte Einstellungen"
-
-#~ msgid "New"
-#~ msgstr "Neu"
-
-#~ msgid "Save Default List"
-#~ msgstr "Speichere Standard Liste"
-
-#~ msgid "Saves the selected playlist to the default location."
-#~ msgstr "Speichere ausgewählte Wiedergabeliste."
-
-#~ msgid "Entries"
-#~ msgstr "Einträge"
-
-#~ msgid "_Rename"
-#~ msgstr "Umbenennen"
-
-#~ msgid "About Icecast-Plugin"
-#~ msgstr "Ãœber Icecast-Plugin"
-
-#~ msgid "Error setting hostname: %s\n"
-#~ msgstr "Fehler beim Setzen des Hostnamens: %s\n"
-
-#~ msgid "Error setting protocol: %s\n"
-#~ msgstr "Fehler beim Setzen des Protokolls: %s\n"
-
-#~ msgid "Error setting port: %s\n"
-#~ msgstr "Fehler beim Setzen des Ports: %s\n"
-
-#~ msgid "Error setting password: %s\n"
-#~ msgstr "Fehler beim Setzen des Passworts: %s\n"
-
-#~ msgid "Error setting mount: %s\n"
-#~ msgstr "Fehler beim Setzen des Mounts: %s\n"
-
-#~ msgid "Error setting stream %s: %s\n"
-#~ msgstr "Fehler beim Setzen des Streams %s: %s\n"
-
-#~ msgid "public"
-#~ msgstr "öffentlich"
-
-#~ msgid "private"
-#~ msgstr "privat"
-
-#~ msgid "Error setting stream name: %s\n"
-#~ msgstr "Fehler beim Setzen des Streamnamens: %s\n"
-
-#~ msgid "Error setting stream genre: %s\n"
-#~ msgstr "Fehler beim Setzen des Streamgenres: %s\n"
-
-#~ msgid "Error setting stream URL: %s\n"
-#~ msgstr "Fehler beim Setzen des Stream-URL's: %s\n"
-
-#~ msgid "Error setting stream description: %s\n"
-#~ msgstr "Fehler beim Setzen der Streambeschreibung: %s\n"
-
-#~ msgid "Error setting user: %s\n"
-#~ msgstr "Fehler beim Setzen des Nutzers: %s\n"
-
-#~ msgid "Error connecting to server: %s\n"
-#~ msgstr "Fehler bei der Serververbindung: %s\n"
-
-#~ msgid "Icecast Configuration"
-#~ msgstr "Icecast Konfiguraion"
-
-#~ msgid "Output stream format:"
-#~ msgstr "Ausgabe-Stream-Format"
-
-#~ msgid "Server address:"
-#~ msgstr "Serveradresse:"
-
-#~ msgid "Server hostname or IP address"
-#~ msgstr "Server Hostname oder IP-Adresse"
-
-#~ msgid "Server port number"
-#~ msgstr "Server Portnummer"
-
-#~ msgid "Mount point:"
-#~ msgstr "Einhängepunkt:"
-
-#~ msgid "Mount point for the stream"
-#~ msgstr "Einhängepunkt für die Streams"
-
-#~ msgid ""
-#~ "Icecast source user name for the stream; depends on your server "
-#~ "settings.\n"
-#~ "The default value is \"source\""
-#~ msgstr ""
-#~ "Icecast source Benutzername für den Stream; abhängig von "
-#~ "Servereinstellung.\n"
-#~ "Der Standardwert ist \"source\""
-
-#~ msgid "Icecast source user password"
-#~ msgstr "Icecast source Benutzerpasswort"
-
-#~ msgid "Connection timeout (seconds):"
-#~ msgstr "Zeitüberschreitung (Sekunden):"
-
-#~ msgid ""
-#~ "Amount of time before plugin closes connection to server when no audio "
-#~ "data available"
-#~ msgstr ""
-#~ "Länge der Zeit bevor das Plugin die Verbindung trennt, wenn keine "
-#~ "Audiodateien verfügbar sind"
-
-#~ msgid "Buffer size (bytes):"
-#~ msgstr "Puffergröße (Ms):"
-
-#~ msgid ""
-#~ "Internal buffer size\n"
-#~ "Try to increase this if you are experiencing audio skipping on client side"
-#~ msgstr ""
-#~ "Interne Buffergröße\n"
-#~ "Erhöhen falls man Audio-Springen auf Client-Seite wahrnimmt."
-
-#~ msgid "Flush buffer if "
-#~ msgstr "Puffer leeren wenn "
-
-#~ msgid "Determines when to flush internal buffer to prevent its overflow"
-#~ msgstr ""
-#~ "Entscheiden wann interner Puffer geleert wird um Overflow zu vermeiden"
-
-#~ msgid "percents are filled"
-#~ msgstr "Prozent belegt"
-
-#~ msgid "Stream is public"
-#~ msgstr "Stream ist öffentlich"
-
-#~ msgid ""
-#~ "Setting this asks the server to list the stream in any directories it "
-#~ "knows about"
-#~ msgstr ""
-#~ "Server fragen ob Stream in jedem bekannten Verzeichnis gelistet wird"
-
-#~ msgid "Stream name:"
-#~ msgstr "Stream-Name:"
-
-#~ msgid "The URL of a site about this stream"
-#~ msgstr "URL einer Seite dieses Streams"
-
-#~ msgid "Stream genre:"
-#~ msgstr "Stream-Genre:"
-
-#~ msgid ""
-#~ "The genre (or genres) of the stream. This is usually a keyword list, eg "
-#~ "\"pop rock rap\""
-#~ msgstr ""
-#~ "Genre des Streams. Normalerweise eine Stichwortliste, Bsp. \"Pop Rock Rap"
-#~ "\""
-
-#~ msgid "Stream description:"
-#~ msgstr "Streambeschreibung:"
-
-#~ msgid "Enable fast play-length calculation"
-#~ msgstr "Schnelle Spieldauer-Berechnung aktivieren"
-
-#~ msgid "Parse XING headers"
-#~ msgstr "XING-Header parsen"
-
-#~ msgid "Use SJIS to write ID3 tags (not recommended)"
-#~ msgstr "SJIS zum Schreiben von ID3-Tags benutzen (nicht Empfohlen)"
-
-#~ msgid "Metadata Settings"
-#~ msgstr "Metadaten-Einstellungen:"
-
-#~ msgid "MPEG Audio Plugin Configuration"
-#~ msgstr "MPEG-Audio-Plugin-Konfiguration"
-
-#~ msgid ""
-#~ "Audacious MPEG Audio Plugin\n"
-#~ "\n"
-#~ "Compiled against libMAD version: %d.%d.%d%s\n"
-#~ "\n"
-#~ "Written by:\n"
-#~ " William Pitcock <nenolod@sacredspiral.co.uk>\n"
-#~ " Yoshiki Yazawa <yaz@cc.rim.or.jp>\n"
-#~ "\n"
-#~ "Portions derived from XMMS-MAD by:\n"
-#~ " Sam Clegg\n"
-#~ "\n"
-#~ "ReplayGain support by:\n"
-#~ " Samuel Krempp"
-#~ msgstr ""
-#~ "Audacious MPEG Audio Plugin\n"
-#~ "\n"
-#~ "Kompiliert gegen libMAD Version: %d.%d.%d%s\n"
-#~ "\n"
-#~ "Geschrieben von:\n"
-#~ " William Pitcock <nenolod@sacredspiral.co.uk>\n"
-#~ " Yoshiki Yazawa <yaz@cc.rim.or.jp>\n"
-#~ "\n"
-#~ "Teile abgeleitet von XMMS-MAD durch:\n"
-#~ " Sam Clegg\n"
-#~ "\n"
-#~ "ReplayGain-Unterstützung von:\n"
-#~ " Samuel Krempp"
-
-#~ msgid "About MPEG Audio Plugin"
-#~ msgstr "Ãœber MPEG-Audio-Plugin"
-
-#~ msgid "About OSSv4 Driver"
-#~ msgstr "Ãœber den OSSv4-Treiber"
-
-#~ msgid "VBR"
-#~ msgstr "VBR"
-
-#~ msgid ""
-#~ "Are you sure you want to close %s? If you do, any changes made since the "
-#~ "playlist was exported will be lost."
-#~ msgstr ""
-#~ "Wirklich schließen %s? Alle seit dem letzten Export gemachten "
-#~ "Einstellungen gehen verloren."
-
-#~ msgid "Ape2 Tag"
-#~ msgstr "Ape2-Tag"
-
-#~ msgid "Title:"
-#~ msgstr "Titel:"
-
-#~ msgid "Artist:"
-#~ msgstr "Künstler:"
-
-#~ msgid "Album:"
-#~ msgstr "Album:"
-
-#~ msgid "Comment:"
-#~ msgstr "Kommentar:"
-
-#~ msgid "Year:"
-#~ msgstr "Jahr:"
-
-#~ msgid "Track number:"
-#~ msgstr "Titelnummer:"
-
-#~ msgid "Genre:"
-#~ msgstr "Genre:"
-
-#~ msgid "Remove Tag"
-#~ msgstr "Tag entfernen"
-
-#~ msgid "Wavpack Info:"
-#~ msgstr "Wavpack-Information:"
-
-#~ msgid "version %d"
-#~ msgstr "Version %d"
-
-#~ msgid "average bitrate: %6.1f kbps"
-#~ msgstr "Durchschnittliche Bitrate: %6.1f kbps"
-
-#~ msgid "samplerate: %d Hz"
-#~ msgstr "Abtastfrequenz: %d Hz"
-
-#~ msgid "bits per sample: %d"
-#~ msgstr "Bits pro Sample: %d"
-
-#~ msgid "channels: %d"
-#~ msgstr "Kanäle: %d"
-
-#~ msgid "length: %d:%.2d"
-#~ msgstr "Länge: %d:%.2d"
-
-#~ msgid "file size: %d Bytes"
-#~ msgstr "Dateigröße: %d Byte"
-
-#~ msgid "Title Peak: ?"
-#~ msgstr "Titel-Höchstwert: ?"
-
-#~ msgid "Album Peak: ?"
-#~ msgstr "Album-Höchstwert: ?"
-
-#~ msgid "Title Gain: ?"
-#~ msgstr "Titel-Verstärkung: ?"
-
-#~ msgid "Album Gain: ?"
-#~ msgstr "Album-Verstärkung: ?"
-
-#~ msgid "File Info - %s"
-#~ msgstr "Dateiinformationen - %s"
-
-#~ msgid "Enable Dynamic Bitrate Display"
-#~ msgstr "Dynamische-Bitraten-Anzeige aktivieren"
-
-#~ msgid "General Plugin Settings"
-#~ msgstr "Allgemeine Plugin-Einstellungen:"
-
-#~ msgid "use Track Gain/Peak"
-#~ msgstr "Benutze Titel Gain/Peak"
-
-#~ msgid "use Album Gain/Peak"
-#~ msgstr "Benutze Album Gain/Peak"
-
-#~ msgid "Enable Clipping Prevention"
-#~ msgstr "Clipping-Verhinderung aktivieren"
-
-#~ msgid "Enable ReplayGain"
-#~ msgstr "ReplayGain aktivieren"
-
-#~ msgid "ReplayGain Type"
-#~ msgstr "ReplayGain-Typ"
-
-#~ msgid "ReplayGain Settings"
-#~ msgstr "ReplayGain-Einstellungen"
-
-#~ msgid "Plugin"
-#~ msgstr "Plugin"
-
-#~ msgid "ReplayGain"
-#~ msgstr "ReplayGain"
-
-#~ msgid "Wavpack Configuration"
-#~ msgstr "Wavpack-Konfiguration"
diff --git a/po/es.po b/po/es.po
index 5287262..bddf3dd 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,467 +1,206 @@
-# translation of es.po to
-# Spanish translation for Audacious
-# This file is distributed under the same license as the Audacious package.
-# Cosme Domínguez Díaz <cosme.ddiaz@gmail.com>, 2010
+# Spanish translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
#
-msgid ""
-msgstr ""
-"Project-Id-Version: Audacious\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Cosme Domínguez Díaz <cosme.ddiaz@gmail.com>\n"
-"Language-Team: \n"
-"Language: \n"
+# Translators:
+# Adrián Ramirez Escalante <buried.prophet@gmail.com>, 2012.
+# Cosme Domínguez Díaz <cosme.ddiaz@gmail.com>, 2010.
+# Jorge Andrés <winninglero@gmail.com>, 2011.
+# <xukosky@yahoo.es>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-12 04:29+0000\n"
+"Last-Translator: Adrián Ramirez Escalante <buried.prophet@gmail.com>\n"
+"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Spanish\n"
-"X-Poedit-Country: SPAIN\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 Audacious team"
msgstr ""
-"Usando libfaad2-%s para decodificar.\n"
-"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decodificador (c) Nero AG, www.nero.com\n"
-"Copyright (c) 2005-2006 Audacious team"
+"Utilizando libfaad2-%s para decodificar.\n"
+"Decodificador FAAD2 AAC/HE-AAC/HE-AACv2/DRM (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 El equipo de Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
-msgstr "Acerca del plugin decodificador MP4 AAC"
-
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Acerca de"
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Este plugin está publicado bajo los términos y condiciones de la GNU LGPL.\n"
-"Ver http://www.gnu.org/licenses/lgpl.html para más información.\n"
-"\n"
-"Este plugin usa la librería AdPlug, la cual es copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Configuración"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Ok"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "General"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Calidad de sonido"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Resolución"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16bit"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Canales"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Estereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr "No se recomienda usar el estéreo a menos que lo necesites."
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frecuencia"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Reproducción"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formatos"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Selección de formatos"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Formato"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Extensión"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Información del archivo"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Nombre de archivo"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Título: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor:"
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Tipo de archivo: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumentos: "
+msgstr "Cargar ecualizador predefinido"
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Patrones: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Canción"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Nombre del instrumento"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "Acerca de Alarma XMMS"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "Alarma XMMS"
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Acerca de la alarma"
-#: src/alarm/interface.c:56
+#: src/alarm/alarm.c:313
msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
+"Un complemento que se puede utilizar para empezar la reproducción a una hora concreta.\n"
"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
+"Originalmente escrito por Adam Feakin y Daniel Stodden."
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Cerrar"
-
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
msgstr "Alarma"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
-msgstr ""
+msgstr "Esta es su llamada para despertar."
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
-msgstr "OK"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr ""
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Lo siento"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Advertencia"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
+msgstr "Aceptar"
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr ""
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
-msgstr "Opciones de la alarma"
+msgstr "Ajustes de alarma"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
-msgstr ""
+msgstr "Tiempo"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
msgstr "horas"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
msgstr "h"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
msgstr "minutos"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
-msgstr ""
+msgstr "Silencio tras:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
-msgstr ""
+msgstr "Alarma a (predeterminado):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
-msgstr ""
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+msgstr "Seleccione los días para que salte la alarma"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
-msgstr ""
+msgstr "Predeterminado"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Día"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Martes"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Miércoles"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Jueves"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "Viernes"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Sábado"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Domingo"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Lunes"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Días"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
-msgstr ""
+msgstr "Desvanecimiento"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
-msgstr ""
+msgstr "segundos"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Volumen"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "Actual"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr ""
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
-msgstr ""
+msgstr "Iniciar a"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr "Final"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
-msgstr ""
+msgstr "Comando adicional"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
-msgstr "habilitar"
+msgstr "activar"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
-msgstr ""
+msgstr "Lista de reproducción (opcional)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr "Examinar..."
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
-msgstr ""
+msgstr "Recordatorio"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
-msgstr ""
+msgstr "Utilizar recordatorio"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Opciones"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
-msgstr ""
+msgstr "¿Qué significan estas opciones?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -515,480 +254,379 @@ msgid ""
" type the reminder in the box and turn on the\n"
" toggle button if you want it to be shown.\n"
msgstr ""
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+"\n"
+"Hora\n"
+" Alarma a: \n"
+" La hora a la que saltará la alarma.\n"
+"\n"
+" Silencio tras: \n"
+" Detener la alarma tras esta cantidad de tiempo.\n"
+" (si el diálogo de despertar no se cierra)\n"
+"\n"
+"\n"
+"Días\n"
+" Día:\n"
+" Seleccione los días para que se active la alarma.\n"
+"\n"
+" Hora:\n"
+" Elija la hora para la alarma en cada día,\n"
+" o seleccione el botón para utilizar la hora\n"
+" predeterminada.\n"
+"\n"
+"\n"
+"Volumen\n"
+" Desvanecimiento: \n"
+" Bajar el volumen hasta el nivel elegido \n"
+" durante este periodo de tiempo.\n"
+"\n"
+" Iniciar a: \n"
+" Empezar a desvanecer desde este volumen.\n"
+"\n"
+" Final: \n"
+" El volumen final del desvanecimiento. Si el tiempo\n"
+" de desvanecimiento es 0 se establece este volumen\n"
+" y empieza la reproducción.\n"
+"\n"
+"\n"
+"Opciones:\n"
+" Comando adicional:\n"
+" Ejecutar este comando a la hora de la alarma.\n"
+"\n"
+" Lista de reproducción: \n"
+" Cargar esta lista de producción para reproducir\n"
+" (debe tener una extensión .m3u). Si no se introduce\n"
+" introduce ninguna lista se utilizarán las canciones\n"
+" en la lista actual.\n"
+" También se puede introducir la URL de un flujo\n"
+" mp3/ogg, pero actualmente xmms no puede cargar\n"
+" listas de reproducción desde URLs.\n"
+"\n"
+" Recordatorio:\n"
+" Mostrar un recordatorio cuando se apaga la alarma,\n"
+" escriba el recordatorio en la caja y seleccione el\n"
+" botón si quiere que se muestre.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Ayuda"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
-msgstr ""
+msgstr "Su recordatorio para hoy es..."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
-msgstr ""
+msgstr "Gracias"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
-msgstr ""
+msgstr "Dispositivo PCM predeterminado"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
-msgstr ""
+msgstr "Dispositivo mezclador predeterminado"
#: src/alsa/config.c:438
msgid "ALSA Output Plugin Preferences"
-msgstr ""
+msgstr "Preferencias de complemento de salida ALSA"
#: src/alsa/config.c:445
msgid "PCM device:"
-msgstr ""
+msgstr "Dispositivo PCM:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
-msgstr ""
+msgstr "Dispositivo mezclador:"
#: src/alsa/config.c:449
msgid "Mixer element:"
-msgstr ""
+msgstr "Elemento mezclador:"
#: src/alsa/config.c:452
msgid "Work around drain hangup"
-msgstr ""
+msgstr "Evitar los cuelgues por falta de recursos"
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
-msgstr ""
+msgstr "Acerca del complemento de salida ALSA"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
-msgstr ""
+msgstr "Error de ALSA"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
msgstr ""
+"No tiene seleccionado ningún puerto secuenciador para la reproducción MIDI."
+" Puede hacerlo en la preferencias del complemento MIDI."
#: src/amidi-plug/backend-alsa/b-alsa.c:35
msgid "ALSA Backend "
-msgstr ""
+msgstr "Motor ALSA "
#: src/amidi-plug/backend-alsa/b-alsa.c:37
msgid ""
-"This backend sends MIDI events to a group of user-chosen ALSA sequencer "
-"ports. The ALSA sequencer interface is very versatile, it can provide ports "
-"for audio cards hardware synthesizers (i.e. emu10k1) but also for software "
-"synths, external devices, etc.\n"
-"This backend does not produce audio, MIDI events are handled directly from "
-"devices/programs behind the ALSA ports; in example, MIDI events sent to the "
-"hardware synth will be directly played.\n"
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"Este motor envía eventos MIDI a un grupo de puertos secuenciadores ALSA definidos. El interfaz secuenciador ALSA es muy versátil, puede proporcionar puertos para sintetizadores hardware (p. ej. emu10k1) pero también sintetizadores software, dispositivos externos, etc.\n"
+"Este motor no produce sonido, los eventos MIDI son manejados directamente por los dispositivos/programas tras los puertos ALSA; por ejemplo, los eventos MIDI enviados a un sintetizador hardware serán reproducidos directamente.\n"
+"Motor escrito por Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
-msgstr ""
+msgstr "Motor FluidSynth "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
-"This backend produces audio by sending MIDI events to FluidSynth, a real-"
-"time software synthesizer based on the SoundFont2 specification (www."
-"fluidsynth.org).\n"
-"Produced audio can be manipulated via player effect plugins and is processed "
-"by chosen ouput plugin.\n"
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"Este motor produce sonido al enviar eventos MIDI a FluidSynth, un sintetizador software en tiempo real basado en la especificación SoundFont2 (www.fluidsynth.org).\n"
+"El sonido producido se puede manipular mediante complementos de efectos y es procesado por el complemento de salida elegido.\n"
+"Motor escrito por Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
-msgstr ""
+msgstr "CONFIGURACIÓN DE MOTOR ALSA"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
-msgstr ""
+msgstr "Puerto"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
-msgstr ""
+msgstr "Nombre del cliente"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
-msgstr ""
+msgstr "Nombre del puerto"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
-msgstr ""
+msgstr "Puertos de salida ALSA"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
-msgstr ""
+msgstr "Tarjeta de sonido: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
-msgstr ""
+msgstr "Control mezclador: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
+msgstr "Ajustes del mezclador"
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
-msgstr ""
+msgstr "Motor ALSA no cargado o no disponible"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">motor\n"
+"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
-msgstr ""
+msgstr "Complemento AMIDI - información del motor"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
-msgstr ""
+msgstr "PREFERENCIAS DEL COMPLEMENTO AMIDI"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
-msgstr ""
+msgstr "Selección de motor"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
-msgstr ""
+msgstr "Motores disponibles"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
-msgstr ""
+msgstr "Ajustes de reproducción"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
-msgstr ""
+msgstr "Transponer: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
-msgstr ""
+msgstr "Cambio de batería: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
-msgstr ""
+msgstr "Ajustes avanzados"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
-msgstr ""
+msgstr "calcular la longitud de los archivos MIDI en lista de reproducción"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
-msgstr ""
+msgstr "extraer comentarios desde el archivo MIDI (si está disponible)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
+msgstr "extraer letras desde el archivo MIDI (si está disponible)"
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-msgstr ""
+msgstr "<span size=\"smaller\">Complemento AMIDI</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
-msgstr ""
+msgstr "Complemento AMIDI - seleccione un archivo"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
-msgstr ""
+msgstr "Complemento AMIDI - configuración"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
-msgstr ""
+msgstr "Complemento AMIDI - seleccione un archivo SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
-msgstr ""
+msgstr "CONFIGURACIÓN DE MOTOR FLUIDSYNTH"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
-msgstr ""
+msgstr "Ajustes de SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Nombre del archivo"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Tamaño (bytes)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
-msgstr ""
+msgstr "Cargar SF cuando se inicie el reproductor"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
-msgstr ""
+msgstr "Cargar SF en la primera reproducción de archivo MIDI"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
-msgstr ""
+msgstr "Preferencias del sintetizador"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
-msgstr ""
+msgstr "ganancia"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
-msgstr ""
+msgstr "usar predeterminado"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
-msgstr ""
+msgstr "valor:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
-msgstr ""
+msgstr "polifonía"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
-msgstr ""
+msgstr "reverberación"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "si"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "no"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
-msgstr ""
+msgstr "coro"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
-msgstr ""
+msgstr "frecuencia de muestro"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
-msgstr ""
+msgstr "personalizado "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
-msgstr ""
+msgstr "Motor FluidSynth no cargado o no disponible"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">Motor\n"
+"FluidSynth</span>"
#: src/amidi-plug/i_configure-timidity.c:39
msgid "TIMIDITY BACKEND CONFIGURATION"
-msgstr ""
+msgstr "CONFIGURACIÓN MOTOR TIMIDITY"
#: src/amidi-plug/i_configure-timidity.c:64
msgid "TiMidity Backend not loaded or not available"
-msgstr ""
+msgstr "Motor TiMidity no cargado o no disponible"
#: src/amidi-plug/i_configure-timidity.c:83
msgid ""
"<span size=\"smaller\">TiMidity\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">Motor\n"
+"TiMidity</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr "Nombre:"
#: src/amidi-plug/i_fileinfo.c:193
msgid "<span size=\"smaller\"> MIDI Info </span>"
-msgstr ""
+msgstr "<span size=\"smaller\"> Información MIDI </span>"
#: src/amidi-plug/i_fileinfo.c:205
msgid "Format:"
@@ -996,15 +634,15 @@ msgstr "Formato:"
#: src/amidi-plug/i_fileinfo.c:208
msgid "Length (msec):"
-msgstr ""
+msgstr "Longitud (mseg):"
#: src/amidi-plug/i_fileinfo.c:211
msgid "Num of Tracks:"
-msgstr ""
+msgstr "Número de pistas:"
#: src/amidi-plug/i_fileinfo.c:216
msgid "variable"
-msgstr ""
+msgstr "variable"
#: src/amidi-plug/i_fileinfo.c:217
msgid "BPM:"
@@ -1016,33 +654,35 @@ msgstr "BPM (wavg):"
#: src/amidi-plug/i_fileinfo.c:226
msgid "Time Div:"
-msgstr ""
+msgstr "Div tiempo:"
#: src/amidi-plug/i_fileinfo.c:237
msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
-msgstr ""
+msgstr "<span size=\"smaller\"> Comentarios y letras MIDI </span>"
#: src/amidi-plug/i_fileinfo.c:288
msgid "* no comments available in this MIDI file *"
-msgstr ""
+msgstr "* no hay comentarios disponibles en este archivo MIDI *"
#: src/amidi-plug/i_fileinfo.c:301
msgid "* no lyrics available in this MIDI file *"
-msgstr ""
+msgstr "* no hay letras disponibles en este archivo MIDI *"
#: src/amidi-plug/i_fileinfo.c:349
msgid " (invalid UTF-8)"
-msgstr ""
+msgstr " (UTF-8 no válido)"
#: src/amidi-plug/i_utils.c:43
msgid "AMIDI-Plug - about"
-msgstr ""
+msgstr "Complemento AMIDI - acerca de"
#: src/amidi-plug/i_utils.c:68
msgid ""
"\n"
"AMIDI-Plug "
msgstr ""
+"\n"
+"Complemento AMIDI"
#: src/amidi-plug/i_utils.c:69
msgid ""
@@ -1069,280 +709,282 @@ msgid ""
"\n"
msgstr ""
"\n"
-"modular MIDI music player\n"
+"reproductor de música MIDI modular\n"
"http://www.develia.org/projects.php?p=amidiplug\n"
"\n"
-"written by Giacomo Lozito\n"
+"escrito por Giacomo Lozito\n"
"< james@develia.org >\n"
"\n"
"\n"
-"special thanks to...\n"
+"agradecimientos especiales a...\n"
"\n"
-"Clemens Ladisch and Jaroslav Kysela\n"
-"for their cool programs aplaymidi and amixer; those\n"
-"were really useful, along with alsa-lib docs, in order\n"
-"to learn more about the ALSA API\n"
+"Clemens Ladisch y Jaroslav Kysela\n"
+"por sus geniales programas aplaymidi and amixer; que\n"
+"fueron muy útiles, junto con la documentación de alsa-lib,\n"
+"para aprender más acerca de la programación ALSA.\n"
"\n"
"Alfredo Spadafina\n"
-"for the nice midi keyboard logo\n"
+"por el bonito logo de teclado midi\n"
"\n"
"Tony Vroon\n"
-"for the good help with alpha testing\n"
+"por su buena ayuda con las pruebas\n"
"\n"
#: src/aosd/aosd_style.c:75
msgid "Rectangle"
-msgstr ""
+msgstr "Rectángulo"
#: src/aosd/aosd_style.c:79
msgid "Rounded Rectangle"
-msgstr ""
+msgstr "Rectángulo redondeado"
#: src/aosd/aosd_style.c:83
msgid "Concave Rectangle"
-msgstr ""
+msgstr "Rectángulo cóncavo"
#: src/aosd/aosd_style.c:87
msgid "None"
-msgstr ""
+msgstr "Ninguno"
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
-msgstr ""
+msgstr "Reproducción iniciada"
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
-msgstr ""
+msgstr "Avisa cuando se reproduce un elemento de la lista de reproducción."
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
-msgstr ""
+msgstr "Cambio de título"
-#: src/aosd/aosd_trigger.c:83
+#: src/aosd/aosd_trigger.c:84
msgid ""
"Triggers OSD when, during playback, the song title changes but the filename "
"is the same. This is mostly useful to display title changes in internet "
"streams."
msgstr ""
+"Avisa cuando, durante la reproducción, el título de la canción cambia pero "
+"el nombre de archivo es el mismo. Esto es principalmente útil para mostrar "
+"cambios de título en los flujos de Internet."
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
-msgstr ""
+msgstr "Cambio de volumen"
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
-msgstr ""
+msgstr "Avisa cuando se cambia el volumen."
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
-msgstr ""
+msgstr "Inicio de pausa"
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
-msgstr ""
+msgstr "Avisa cuando la reproducción es pausada."
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
-msgstr ""
+msgstr "Fin de pausa"
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
-msgstr ""
+msgstr "Avisa cuando la reproducción se reanuda."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
-msgstr ""
+msgstr "Colocación"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
-msgstr ""
+msgstr "Desplazamiento X relativo:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
-msgstr ""
+msgstr "Desplazamiento Y relativo:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
-msgstr ""
+msgstr "Ancho máximo:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
-msgstr ""
+msgstr "Opciones multi-monitor"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
-msgstr ""
+msgstr "Mostrar notificaciones utilizando:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
-msgstr ""
+msgstr "todos los monitores"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
-msgstr ""
+msgstr "monitor %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
-msgstr ""
+msgstr "Temporización (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
-msgstr ""
+msgstr "Mostrar:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
-msgstr ""
+msgstr "Desvanecimiento de entrada:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
-msgstr ""
+msgstr "Desvanecimiento de salida:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
-msgstr "Fuentes"
+msgstr "Tipografías"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
-msgstr "Fuente %i:"
+msgstr "Tipografía %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
-msgstr ""
+msgstr "Sombra"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Internacionalización"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
-msgstr ""
+msgstr "Deshabilitar la conversión de texto UTF-8 (en notificaciones)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
-msgstr ""
+msgstr "Seleccione un archivo de temas"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
-msgstr ""
+msgstr "Estilo de renderizado"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Colores"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Color %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
-msgstr ""
+msgstr "Tema personalizado"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
-msgstr ""
+msgstr "Archivo de temas:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
-msgstr ""
+msgstr "Examinar"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
-msgstr ""
+msgstr "Activar disparador"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
-msgstr ""
+msgstr "Evento"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
-msgstr ""
+msgstr "Administrador de composición detectado"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
-"unless you know that you have one running, please activate a composite "
-"manager otherwise the OSD won't work properly"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
msgstr ""
+"Administrador de composición no detectado;\n"
+"a menos que sepa que tiene uno ejecutándose, por favor active un administrador de composición o las notificaciones no funcionarán correctamente"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
-msgstr ""
+msgstr "Administrador de composición no necesario para transparencia falsa"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
-msgstr ""
+msgstr "Transparencia"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
-msgstr ""
+msgstr "Transparencia falsa"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
-msgstr ""
+msgstr "Transparencia real (requiere composición 3D)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
-msgstr ""
+msgstr "Extensión de composición no cargada"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
-msgstr ""
+msgstr "Extensión de composición no disponible"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
-msgstr ""
+msgstr "<span font_desc='%s'>Notificaciones de Audacious</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
-msgstr "Audacious OSD - configuración"
+msgstr "Notificaciones de Audacious - configuración"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
-msgstr ""
+msgstr "Probar"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
-msgstr ""
+msgstr "Posición"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
-msgstr ""
+msgstr "Animación"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
-msgstr ""
+msgstr "Texto"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
-msgstr ""
+msgstr "Decoración"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
-msgstr ""
+msgstr "Disparador"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
-msgstr "Misc"
+msgstr "Varios"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
-msgstr "Audacious OSD - acerca de"
+msgstr "Notificaciones de Audacious - acerca de"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
msgstr ""
"\n"
-"Audacious OSD "
+"Notificaciones de Audacious"
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1359,155 +1001,42 @@ msgstr ""
"escrito por Giacomo Lozito\n"
"< james@develia.org >\n"
"\n"
-"On-Screen-Display is based on Ghosd library\n"
-"escrito por Evan Martin\n"
+"Las notificaciones de Audacious se basan en la biblioteca\n"
+"Ghosd escrita por Evan Martin\n"
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr ""
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr ""
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr ""
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr ""
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr ""
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr ""
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Reproducir"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
-msgstr ""
+msgstr "Alcance de desenfoque: Selección de color"
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Opciones:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Preferencias del filtro Bauer estereofónico a binaural"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Nivel de alimentación:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Cortar frecuencia:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Predefinidos:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
-msgstr ""
+msgstr "Acerca del complemento de CD de música"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
-"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
"\n"
"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
@@ -1518,142 +1047,171 @@ msgid ""
"\n"
"Copyright 2009 John Lindgren"
msgstr ""
-"Copyright (c) 2007, por Calin Crisan <ccrisan@gmail.com> y el Equipo "
-"Audacious.\n"
+"Copyright (c) 2007, por Calin Crisan <ccrisan@gmail.com> y el Equipo Audacious.\n"
"\n"
-"Muchas gracias a los desarrolladores de libcdio <http://www.gnu.org/software/"
-"libcdio/>\n"
+"Muchas gracias a los desarrolladores de libcdio <http://www.gnu.org/software/libcdio/>\n"
"\ty de libcddb <http://libcddb.sourceforge.net/>.\n"
"\n"
-"También gracias a Tony Vroon su tutoría & orientación.\n"
+"También gracias a Tony Vroon su tutoría y orientación.\n"
"\n"
"Este fue un proyecto del Google Summer of Code 2007.\n"
"\n"
"Copyright 2009 John Lindgren"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "CD de música"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "La unidad está vacía."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Tipo de disco no soportado."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
-msgstr ""
+msgstr "Configuración de complemento de CD de música"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
-msgstr ""
+msgstr "Extracción digital de sonido"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
-msgstr ""
+msgstr "Información de título"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
-msgstr ""
+msgstr "Velocidad de Disco:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
-msgstr ""
+msgstr "Usar texto en CD si está disponible"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
-msgstr ""
+msgstr "Usar CDDB si está disponible"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
-msgstr ""
+msgstr "Servidor: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
-msgstr ""
+msgstr "Ruta: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
-msgstr ""
+msgstr "Puerto:"
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
-msgstr ""
+msgstr "Usar HTTP en lugar de CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
-msgstr ""
+msgstr "Sobreescribir el dispositivo predeterminado: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Aceptar"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "Reproducir CD"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Añadir CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
-msgstr ""
+msgstr "Acerca del complemento de compresión de rango dinámico"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
-msgstr ""
+msgstr "Preferencias del compresor de rango dinámico"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr ""
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Centrar volumen:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr ""
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Rango dinámico:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
-msgstr ""
+msgstr "Decodificador musical de videoconsola"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "General"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Reproducción"
+
+#: src/console/configure.c:170
msgid "Bass:"
-msgstr ""
+msgstr "Graves:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
-msgstr ""
+msgstr "segs"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
-msgstr ""
+msgstr "Agudos:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
-msgstr ""
+msgstr "Longitud de canción predeterminada:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
-msgstr ""
+msgstr "Remuestreo"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
-msgstr ""
+msgstr "Activar el remuestreo de sonido"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
-msgstr ""
+msgstr "Tasa de remuestreo:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
-msgstr ""
+msgstr "Ignorar longitud de etiquetas SPC"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
-msgstr ""
+msgstr "Aumentar la reverberación"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
-"The default song length, expressed in seconds, is used for songs that do not "
-"provide length information (i.e. looping tracks)."
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
msgstr ""
+"La longitud de canción predeterminada, expresada en segundos, es usada para "
+"canciones que no preveén información de longitud (es decir pistas cíclicas)."
#: src/console/plugin.c:33
msgid "About the Game Console Music Decoder"
-msgstr ""
+msgstr "Acerca del decodificador de música de videoconsola"
#: src/console/plugin.c:34
msgid ""
@@ -1662,698 +1220,325 @@ msgid ""
"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
-"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
-"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
-"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+"El motor decodificador de música de videoconsola está basado en Game_Music_Emu 0.5.2.\n"
+"Formatos sopotados: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Implementación de Audacious por: William Pitcock <nenolod@dereferenced.org>, \n"
" Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
-msgstr ""
+msgstr "Acerca de la atenuación cruzada"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
-msgstr ""
+msgstr "Preferencias de la atenuación cruzada"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
-msgstr ""
+msgstr "Solapamiento (en segundos):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
-msgstr ""
+msgstr "Error de atenuación cruzada"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
+"La atenuación cruzada falló porque las canciones tienen números diferentes "
+"de canales."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
-"You can use the Sample Rate Converter effect to resample the songs to the "
-"same rate."
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
msgstr ""
+"La tenuación cruzada falló porque las canciones tienen diferentes frecuencias de muestreo.\n"
+"\n"
+"Puede usar el efecto convertidor de frecuencia de muestro para volver a muestrear las canciones a la misma tasa."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
-msgstr ""
+msgstr "Configurar el cristalizador"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
-msgstr ""
+msgstr "Intensidad de efectos:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Aplicar"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
"\n"
"Surround echo by Carl van Schaik 1999"
msgstr ""
-"Echo Plugin\n"
-"By Johan Levin 1999.\n"
+"Complemento de eco\n"
+"por Johan Levin 1999.\n"
"\n"
-"Surround echo by Carl van Schaik 1999"
+"Eco envolvente por Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
-msgstr ""
+msgstr "Acerca del complemento de eco"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
-msgstr ""
+msgstr "Configurar eco"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
-msgstr ""
+msgstr "Retraso: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
-msgstr ""
+msgstr "Retroalimentación: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
-msgstr ""
-
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr ""
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr ""
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr ""
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr ""
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr ""
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr ""
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr ""
+msgstr "Volumen: (%)"
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr ""
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr ""
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr ""
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr ""
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr ""
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
+#: src/ffaudio/ffaudio-core.c:725
#, c-format
msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
-#, fuzzy, c-format
-msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
-msgstr ""
-"Multi-format audio decoding plugin for Audacious based on\n"
-"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
-"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
-"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
"\n"
-"Supported formats: %s\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Complemento de decodificación de sonido multi-formato para Audacious\n"
+"basado en el marco multimedia FFmpeg (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, y otros.\n"
"\n"
-"Audacious plugin by:\n"
+"Complemento de Audacious por:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:739
msgid "About FFaudio Plugin"
-msgstr ""
+msgstr "Acerca del complemento FFaudio"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
-msgstr ""
-
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
+msgstr "Acerca del complemento escritor de archivos"
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
-msgstr ""
+msgstr "Configuración del escritor de archivos"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
-msgstr ""
+msgstr "Formato del archivo de salida:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr "Configurar"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
-msgstr ""
+msgstr "Guardar dentro del directorio original"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
-msgstr ""
+msgstr "Guardar dentro de directorio personalizado"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
-msgstr ""
+msgstr "Carpeta de archivo de salida:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
-msgstr ""
+msgstr "Elija una carpeta"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
-msgstr ""
+msgstr "Obtener nombre de archivo desde:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
-msgstr ""
+msgstr "etiquetas del archivo original"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
-msgstr ""
+msgstr "nombre del archivo original"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
-msgstr ""
-
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
+msgstr "No quitar la extensión del archivo"
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:578
msgid "Prepend track number to filename"
-msgstr ""
+msgstr "Anteponer el número de pista al nombre de archivo"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Estéreo conjunto"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Estereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
-msgstr ""
+msgstr "Configuración MP3"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
-msgstr ""
-
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
+msgstr "Calidad del algoritmo:"
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
-msgstr ""
-
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Auto"
+msgstr "Frecuencia de muestreo de salida:"
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
-msgstr ""
+msgstr "Tasa de bits / Compresión:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
-msgstr ""
+msgstr "Tasa de bits (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
-msgstr ""
+msgstr "Compresión:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
-msgstr ""
-
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr ""
+msgstr "Modo de sonido:"
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
-msgstr ""
+msgstr "Varios:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
-msgstr ""
+msgstr "Cumplir estrictamente la norma ISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
-msgstr ""
+msgstr "Error de protección"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
-msgstr ""
+msgstr "Calidad"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
-msgstr ""
+msgstr "Activar VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
-msgstr ""
-
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr ""
+msgstr "Tipo:"
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
-msgstr ""
+msgstr "Opciones VBR:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
-msgstr ""
+msgstr "Tasa de bits mínima (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
-msgstr ""
+msgstr "Tasa de bits máxima (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
+msgstr "Aplicar estrictamente la tasa de bits mínima"
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
-msgstr ""
+msgstr "Opciones ABR:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
-msgstr ""
+msgstr "Tasa de bits promedio (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
-msgstr ""
+msgstr "Nivel de calidad VBR:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
-msgstr ""
+msgstr "No escribir la cabecera VBR Xing"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
-msgstr ""
+msgstr "Prametros de cuadro:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
-msgstr ""
+msgstr "Marcar como derechos de autor"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
-msgstr ""
+msgstr "Marcar como original"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
-msgstr ""
+msgstr "Parametros ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
-msgstr ""
+msgstr "Forzar adición de etiqueta de la versión 2"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
-msgstr ""
+msgstr "Solo agregar etiqueta v1"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
-msgstr ""
+msgstr "Solo agregar etiqueta v2"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
-msgstr ""
+msgstr "Etiquetas"
#: src/filewriter/vorbis.c:240
msgid "Vorbis Encoder Configuration"
-msgstr ""
+msgstr "Configuración de codificador Vorbis"
#: src/filewriter/vorbis.c:260
msgid "Quality level (0 - 10):"
-msgstr ""
+msgstr "Nivel de calidad (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr ""
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Acerca del complemento de sonido FLAC"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2363,21 +1548,16 @@ msgid ""
"http://www.skytale.net/projects/bmp-flac2/"
msgstr ""
"\n"
-"\n"
-"Original code by\n"
+"Código original por\n"
"Ralf Ertzinger <ralf@skytale.net>\n"
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr ""
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
-msgstr ""
+msgstr "Acerca del complemento de atajos Gnome"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2385,518 +1565,492 @@ msgid ""
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
msgstr ""
-"Gnome Shortcut Plugin\n"
-"Let's you control the player with Gnome's shortcuts.\n"
+"Complemento de atajos Gnome\n"
+"Le permite controlar el reproductor con atajos de Gnome.\n"
"\n"
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
-msgid "Open Files"
-msgstr ""
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Número de entrada"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
-msgid "Add Files"
-msgstr ""
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Título"
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Artista"
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr ""
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Año"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr ""
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Pista"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr ""
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Posición de la cola"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr ""
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Longitud"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr ""
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Ruta del archivo"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s ya existe. ¿Desea continuar?"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Nombre del archivo"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr ""
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Título personalizado"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr ""
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Tasa de bits"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Seleccionar columnas"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Disponible:"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Seleccionado:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr ""
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Acoplar a la izquierda"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr ""
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Acoplar a la derecha"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Acoplar arriba"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Acoplar abajo"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Desacoplar"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr ""
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Deshabilitar"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr ""
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Abrir archivos ..."
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr ""
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Abrir _URL ..."
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr ""
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_Añadir archivos ..."
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr ""
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Añadir U_RL ..."
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr ""
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "A_cerca de ..."
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
-msgstr ""
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Preferencias"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pausar"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Salir"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Detener"
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Reproducir"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Anterior"
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Pa_usar"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Siguiente"
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Detener"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Lista de reproducción"
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "An_terior"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Nueva lista de reproducción"
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "Si_guiente"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Eliminar lista de reproducción"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "R_epetir"
-#: src/gtkui/ui_manager.c:92
-#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Cargar lista de reproducción"
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "_Orden aleatorio"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Cargar lista de reproducción en la lista seleccionada"
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "No avan_zar la lista de reproducción"
-#: src/gtkui/ui_manager.c:95
-#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Cargar lista de reproducción"
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "_Detener tras esta canción"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Guardar la lista de reproducción seleccionada"
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "_Información de la canción ..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Guardar todas las listas de reproducción"
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "_Saltar en el tiempo ..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Saltar a la _canción ..."
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr ""
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Por _número de pista"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr ""
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Por _título"
-#: src/gtkui/ui_manager.c:107
-#, fuzzy
-msgid "Playlist Manager"
-msgstr "Lista de reproducción"
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Por _artista"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr ""
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Por a_lbum"
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr ""
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Por _fecha de estreno"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr ""
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Por _ruta de archivo"
-#: src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
-msgstr ""
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Por título _personalizado"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr ""
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Orden _inverso"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr ""
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Orden alea_torio"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr ""
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "A_ctualizar"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr ""
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Eliminar archivos _no disponibles"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr ""
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Ordenar"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr ""
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nuevo"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr ""
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Cerrar"
-#: src/gtkui/ui_manager.c:131
-#, fuzzy
-msgid "Sort"
-msgstr "Lo siento"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importar ..."
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr ""
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exportar ..."
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "Por título"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Gestor de listas de reproducción ..."
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "Por artista"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Gestor de _colas ..."
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "Por álbum"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "_Subir volumen"
-#: src/gtkui/ui_manager.c:140
-#, fuzzy
-msgid "By File Path"
-msgstr "Por nombre de archivo"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "_Bajar volumen"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr ""
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Ecualizador"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr ""
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_fectos"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr ""
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interfaz"
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr ""
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Visualizaciones"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Ver"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "_Mostrar barra de menú"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr ""
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Mostrar barra de _información"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Archivo"
-
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr ""
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Mostrar barra de _estado"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Acerca de Audacious"
-
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr ""
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Mostrar _cabeceras de columna"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr ""
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "_Seleccionar columnas ..."
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr ""
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "A_vanzar al cambiar de canción"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Servicios de plugins"
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Archivo"
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Preferencias"
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Reproducción"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr ""
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_Lista de reproducción"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "Salir"
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Servicios"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Cerrar Audacious"
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "Sali_da"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr ""
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Ver"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr ""
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Encolar/desencolar"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr ""
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "Cor_tar"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr ""
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Copiar"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr ""
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Pegar"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr ""
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Seleccionar _todo"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Copiar"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Renombrar"
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Cortar"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Interfaz GTK"
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Pegar"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Seleccionar todo"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Gestión de memoria intermedia ..."
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr ""
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr ""
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Error"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr ""
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Cerrar"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr "estéreo"
-#: src/gtkui/ui_statusbar.c:97
-#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Canales"
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d canal"
+msgstr[1] "%d canales"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr ""
+msgid "%d kbps"
+msgstr "%d kbps"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
-msgstr ""
+msgstr "Pista anterior"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Reproducir"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
-msgstr ""
+msgstr "Pausa/continuar"
-#: src/hotkey/gui.c:74
-msgid "Next Track"
-msgstr ""
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Detener"
#: src/hotkey/gui.c:75
-msgid "Forward 5 Seconds"
-msgstr ""
+msgid "Next Track"
+msgstr "Siguiente pista"
#: src/hotkey/gui.c:76
-msgid "Rewind 5 Seconds"
-msgstr ""
+msgid "Forward 5 Seconds"
+msgstr "Avanzar 5 segundos"
#: src/hotkey/gui.c:77
-msgid "Mute"
-msgstr ""
+msgid "Rewind 5 Seconds"
+msgstr "Retroceder 5 segundos"
#: src/hotkey/gui.c:78
-msgid "Volume Up"
-msgstr ""
+msgid "Mute"
+msgstr "Silenciar"
#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Subir volumen"
+
+#: src/hotkey/gui.c:80
msgid "Volume Down"
-msgstr ""
+msgstr "Bajar volumen"
-#: src/hotkey/gui.c:81
-msgid "Toggle Player Windows"
-msgstr ""
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Ir al archivo"
#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Cambiar ventanas del reproductor"
+
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
-msgstr ""
+msgstr "Mostrar notificaciones"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Conmutar el modo repetir"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Conmutar orden aleatorio"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:95
msgid "(none)"
-msgstr ""
+msgstr "(ninguno)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
-"It is not recommended to bind the primary mouse buttons without "
-"modificators.\n"
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
"\n"
"Do you want to continue?"
msgstr ""
+"No se recomienda asociar los botones principales del ratón sin modificadores.\n"
+"\n"
+"¿Quiere continuar?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
-msgstr ""
+msgstr "Asociar botones del ratón"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
-msgstr ""
+msgstr "Configuración de atajos de teclado"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr ""
+"Pulse una combinación de teclas dentro del campo de texto.\n"
+"También puede asociar botones del ratón."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
-msgstr ""
+msgstr "Atajos de teclado:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
-msgstr ""
+msgstr "<b>Acción:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
-msgstr ""
+msgstr "<b>Teclas asociadas:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
-msgstr ""
+msgstr "Acerca del complemento de atajos de teclado"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2911,12 +2065,12 @@ msgid ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
msgstr ""
-"Global Hotkey Plugin\n"
-"Control the player with global key combinations or multimedia keys.\n"
+"Complemento de atajos de teclado\n"
+"Controla el reproductor con combinaciones de teclas o teclas multimedia.\n"
"\n"
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-"Contributers include:\n"
+"Con la participación de:\n"
"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
"\t\t\tBryn Davies <curious@ihug.com.au>\n"
@@ -2924,31 +2078,31 @@ msgstr ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
-msgstr ""
+msgstr "Conectar a todos los puertos jack disponibles"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
-msgstr ""
+msgstr "Conectar solo los puertos de salida"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
-msgstr ""
+msgstr "No conectar puertos"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
-msgstr ""
+msgstr "Configuración del complemento jack"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
-msgstr ""
+msgstr "Modo de conexión:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
-msgstr ""
+msgstr "Activar mensajes de depuración"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2958,152 +2112,90 @@ msgid ""
"Audacious port by\n"
"Giacomo Lozito from develia.org"
msgstr ""
-"XMMS jack Driver 0.17\n"
+"Complemento jack para XMMS 0.17\n"
"\n"
"xmms-jack.sf.net\n"
"Chris Morgan<cmorgan@alum.wpi.edu>\n"
"\n"
-"Audacious port by\n"
-"Giacomo Lozito from develia.org"
+"Portado a Audacious por\n"
+"Giacomo Lozito de develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
-msgstr ""
+msgstr "Acerca del complemento de salida JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr ""
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Acerca del servidor LADSPA"
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr ""
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr ""
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Ajustes %s"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr ""
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Ajustes del servidor LADSPA"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr ""
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Rutas de complementos:"
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
msgstr ""
+"<small>Separe múltiples rutas por dos puntos.\n"
+"Estas rutas se utilizan además de LADSPA_PATH.\n"
+"Tras añadir nuevas rutas, pulse Intro para buscar complementos nuevos.</small>"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr ""
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Complementos disponibles:"
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr ""
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Activar"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr ""
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Complementos activos:"
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr ""
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Ajustes"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr ""
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr ""
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr ""
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr ""
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr ""
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr ""
+"Buscando letras ..."
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:304
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr ""
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr ""
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr ""
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"Conectando a lyrics.wikia.com..."
-#: src/lyricwiki/lyricwiki.c:337
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
msgstr ""
+"\n"
+"No se encontraron letras."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
-msgstr ""
+msgstr "Acerca del metrónomo"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3111,1990 +2203,1225 @@ msgid ""
"e.g. tact://77 to play 77 beats per minute\n"
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"Un generador de tacto por Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
-"To use it, add a URL: tact://beats*num/den\n"
-"e.g. tact://77 to play 77 beats per minute\n"
-"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+"Para utilizarlo, añada una URL: tact://pulsos*num/den\n"
+"p. ej. tact://77 para reproducir 77 pulsos por minuto\n"
+"o tact://60*3/4 para reproducir 60 ppm en 3/4 tactos"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
-msgstr ""
+msgstr "Generador de tacto: %d ppm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
+msgstr "Generador de tacto: %d ppm %d/%d"
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr ""
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Acerca del mezclador de canales"
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr ""
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Ajustes del mezclador de canales"
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr ""
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Canales de salida:"
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Los cambios se aplicarán en el siguiente cambio de canción."
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr ""
+msgstr "Envolvente"
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr ""
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "Carga en progreso..."
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr ""
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Cargar a un dispositivo MTP"
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr ""
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Desconectar dispositivo MTP"
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Detenido"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr ""
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious no está reproduciendo."
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
-msgstr ""
+msgstr "Complemento de salida nula "
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
-" by Christian Birchinger <joker@netswarm.net>\n"
-"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+" por Christian Birchinger <joker@netswarm.net>\n"
+"basado en el complemento de XMMS por Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
-msgstr ""
+msgstr "Acerca del complemento de salida nula"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
-msgstr ""
+msgstr "Preferencias de la salida nula"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
-msgstr ""
+msgstr "Ejecutar en tiempo real"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
-msgstr ""
+msgstr "1. Dispositivo predeterminado"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
-msgstr ""
+msgstr "Preferencias del complemento de salida OSS4"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
-msgstr ""
+msgstr "Dispositivo de sonido:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
-msgstr ""
+msgstr "Utilizar dispositivo alternativo:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
-msgstr ""
+msgstr "Guardar volumen entre sesiones"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
-msgstr ""
+msgstr "Activar conversiones de formato realizadas por el software OSS."
-#: src/oss4/plugin.c:54
-msgid "About OSS4 Plugin"
-msgstr ""
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Activa el modo exclusivo para evitar la mezcla virtual."
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "Acerca del complemento OSS4"
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
-msgstr ""
+msgstr "Error OSS4"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
-msgstr ""
+msgstr "Predeterminado (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
-msgstr ""
+msgstr "Configuración del complemento OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
-msgstr ""
+msgstr "Dispositivos"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
-msgstr ""
+msgstr "Gestión de memoria intermedia:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
-msgstr ""
+msgstr "Información inicial (porcentaje):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
-msgstr ""
+msgstr "Gestión de memoria intermedia"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
-msgstr ""
+msgstr "Ajustes del mezclador:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
-msgstr ""
+msgstr "El volumen controla el maestro no PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
-msgstr ""
-
-#: src/OSS/OSS.c:40
-msgid "About OSS Driver"
-msgstr ""
+msgstr "Mezclador"
#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
+msgid "About OSS Driver"
+msgstr "Acerca del complemento OSS"
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
-msgstr ""
+msgstr "Acerca del complemento de salida PulseAudio"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
-msgstr ""
+msgstr "Acerca del módulo de conversión de frecuencia de muestreo"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
-msgstr ""
+msgstr "Preferencias del conversor de frecuencia de muestreo"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
-msgstr ""
+msgstr "Mapas de frecuencia:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
-msgstr ""
+msgstr "Todos los demás:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
-msgstr ""
+msgstr "Método:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
-msgstr ""
+msgstr "Cambiar la contraseña"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr "<b>Servicios</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr "Nombre de usuario:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr "Contraseña:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
-msgstr ""
+msgstr "URL del Scrobbler:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
-msgstr ""
+msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
-msgstr ""
+msgstr "Scrobbler"
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
-"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
-"com>\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
msgstr ""
-"Audacious AudioScrobbler Plugin\n"
+"Módulo de AudioScrobbler para Audacious\n"
"\n"
-"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
-"com>\n"
+"Creado originalmente por Audun Hove <audun@nlc.no> y Pipian <pipian@pipian.com>\n"
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
-msgstr ""
-
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "Acerca de %s"
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr ""
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr ""
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr ""
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr ""
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8-bit"
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16-bit"
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr ""
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr ""
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr ""
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr ""
+msgstr "Acerca del complemento Scrobbler"
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr ""
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Acerca del complemento de salida SDL"
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr ""
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Error SDL"
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr ""
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Género"
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr ""
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Biblioteca"
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Audio"
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Crear lista de reproducción"
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr ""
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Añadir a la lista de reproducción"
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Buscar biblioteca"
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50 Hz)"
-
-#: src/sid/xs_interface.c:455
+#: src/search-tool/search-tool.c:645
msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
+"Para importar su biblioteca musical en Audacious, seleccione una carpeta y "
+"pulse el botón «actualizar»."
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60 Hz)"
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Espere por favor..."
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr ""
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr ""
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Seleccione un directorio"
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr ""
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr ""
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr ""
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr ""
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr ""
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr ""
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr ""
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr ""
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr ""
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr ""
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr ""
-
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr ""
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr ""
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr ""
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr ""
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr ""
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr "FS"
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr "FM"
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr "FT"
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr ""
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr ""
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr ""
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr ""
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr ""
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr ""
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr ""
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr ""
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr ""
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr ""
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr ""
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr ""
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr ""
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr ""
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr ""
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr ""
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr ""
-
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr ""
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr ""
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr ""
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr ""
-
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr ""
-
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
-
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr ""
-
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1262
-msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
-msgstr ""
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr ""
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr ""
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr ""
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr ""
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr ""
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr ""
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr ""
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr ""
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Si"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "No"
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
-msgstr ""
+msgstr "Acerca del interfaz con soporte de temas"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
-msgstr ""
-"Copyright (c) 2008, por Tomasz Moń <desowin@gmail.com>\n"
-"\n"
-
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
+msgstr "Copyright (c) 2008, por Tomasz Moń <desowin@gmail.com>\n"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
-msgstr ""
+msgstr "_Reproductor:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
-msgstr ""
+msgstr "Seleccione la tipografía para la ventana principal:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
msgstr "Lista de reproducción:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
-msgstr ""
+msgstr "Seleccione la tipografía de la lista de reproducción:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
-msgstr ""
-
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr ""
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr ""
+msgstr "<b>_Tipografías</b>"
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr ""
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr ""
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Usar tipografías de mapa de bits (solo soporta ASCII)"
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr ""
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Desplazar el título de la canción en ambas direcciones"
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr ""
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Tema</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Preferencias del interfaz"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr ""
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamplificador"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr ""
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Ajuste de color"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Audacious te permite alterar el balance de color de la interfaz del "
-"programa. Las barras inferiores te permiten hacer esto."
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Azul"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Verde"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Rojo"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>Piel</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-#, fuzzy
-msgid "Color adjustment ..."
-msgstr "Ajuste de color"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
-msgstr "Ecualizador audacious"
+msgstr "Ecualizador de Audacious"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:887
msgid "Presets"
-msgstr ""
+msgstr "Predefinidos"
-#: src/skins/ui_main.c:593
-msgid "kbps"
-msgstr "kbps"
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Cargar predefinido"
-#: src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "kHz"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Cargar auto-predefinido"
-#: src/skins/ui_main.c:608
-msgid "surround"
-msgstr "surround"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Cargar ecualizador predefinido"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - advertencia de visualización"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Guardar predefinido"
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Mostrar ventana principal del reproductor"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Guardar auto-predefinido"
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignorar"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Guardar ecualizador predefinido"
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Audacious se ha ejecutado con todas sus ventanas ocultas.\n"
-"Quizás quieras mostrar la ventana del reproductor otra vez para controlar "
-"audacious; de otra forma, tendrás el control remoto via audtool o con "
-"algunos plugins (como el plugin statusicon)."
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Borrar predefinido"
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Ignorar siempre"
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Borrar auto-predefinido"
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - advertencia de uso de un motor GTK roto"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Motor GTK roto en uso</b></big>\n"
-"\n"
-"Audacious ha detectado que estas usando un motor GTK roto.\n"
-"\n"
-"El motor de temas que estas usando, <i>%s</i>, es incompatible con algunas "
-"características presentes en pieles modernas. Las características "
-"incompatibles han sido deshabilitadas para esta sesión.\n"
-"\n"
-"Para usar estas características, por favor considera utilizar otro motor de "
-"temas GTK diferente."
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "No mostrar esta advertencia otra vez"
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "envolvente"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr ""
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Ir a la posición %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Volumen: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
-msgstr ""
+msgstr "Balance: %d%% izquierda"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
-msgstr ""
+msgstr "Balance: centrado"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
-msgstr ""
+msgstr "Balance: %d%% derecha"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Menú de opciones"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
-msgstr "Deshabilitar 'Siempre encima'"
+msgstr "Desactivar 'Siempre encima'"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
-msgstr "Habilitar 'Siempre encima'"
+msgstr "Activar 'Siempre encima'"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
-msgstr ""
-
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Deshabilitar 'Escalado de la interfaz'"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Habilitar 'Escalado de la interfaz'"
+msgstr "Caja de información de archivo"
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Menú de visualización"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1653
msgid "Single mode."
-msgstr ""
+msgstr "Modo único."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1655
msgid "Playlist mode."
msgstr "Modo de lista de reproducción."
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1677
msgid "Stopping after song."
-msgstr "Parar después de la canción"
+msgstr "Parar después de la canción."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1679
msgid "Not stopping after song."
-msgstr "No parar después de la canción"
+msgstr "No parar después de la canción."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
-msgstr ""
+msgstr "Desplazar el nombre de la canción"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Parar tras la canción actual"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
-msgstr ""
+msgstr "Picos"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Repetir"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Orden aleatorio"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "No avanzar la lista de reproducción"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
-msgstr ""
+msgstr "Mostrar reproductor"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
-msgstr ""
+msgstr "Mostrar el editor de listas de reproducción"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
-msgstr ""
+msgstr "Mostrar el ecualizador"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Siempre encima"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
-msgstr ""
+msgstr "Poner en todos los espacios de trabajo"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
-msgstr ""
+msgstr "Enrollar el reproductor"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
-msgstr ""
+msgstr "Enrollar el editor de listas de reproducción"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
-msgstr ""
-
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr ""
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr ""
+msgstr "Enrollar el ecualizador"
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr ""
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
-msgstr ""
+msgstr "Analizador"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
-msgstr ""
+msgstr "Campo"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
-msgstr ""
+msgstr "Marca de voz"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
-msgstr "Off"
+msgstr "Apagado"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
-msgstr ""
+msgstr "Normal"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
-msgstr ""
+msgstr "Fuego"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
-msgstr ""
+msgstr "Líneas verticales"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
-msgstr ""
+msgstr "Líneas"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
-msgstr ""
+msgstr "Barras"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
-msgstr ""
+msgstr "Campo de puntos"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
-msgstr ""
+msgstr "Campo de líneas"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
-msgstr ""
+msgstr "Campo sólido"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
-msgstr ""
+msgstr "Hielo"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
-msgstr ""
+msgstr "Suave"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Muy lento"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Lento"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Medio"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Rápido"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Muy rápido"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
-msgstr ""
+msgstr "Tiempo transcurrido"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
-msgstr ""
+msgstr "Tiempo restante"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pausar"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Siguiente"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Visualización"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
-msgstr ""
+msgstr "Modo de visualización"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
-msgstr ""
+msgstr "Modo analizador"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
-msgstr ""
+msgstr "Modo de campo"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
-msgstr ""
+msgstr "Modo marca de voz"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
-msgstr ""
+msgstr "Modo WindowShade VU"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
-msgstr ""
+msgstr "Caída del analizador"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
-msgstr ""
+msgstr "Caída de los picos"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Lista de reproducción"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nueva lista de reproducción"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
-msgstr ""
+msgstr "Lista de reproducción siguiente"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
-msgstr ""
+msgstr "Lista de reproducción anterior"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Eliminar la lista de reproducción"
#: src/skins/ui_manager.c:222
-msgid "Refresh List"
-msgstr ""
+msgid "Import Playlist"
+msgstr "Importar lista de reproducción"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Carga un archivo de listas en la lista de reproducción seleccionada."
#: src/skins/ui_manager.c:226
-msgid "List Manager"
+msgid "Export Playlist"
+msgstr "Exportar lista de reproducción"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Guarda la lista de reproducción seleccionada."
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Actualizar lista"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
msgstr ""
+"Actualiza los metadatos asociados con una entrada de la lista de "
+"reproducción."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Gestor de listas de reproducción"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Gestor de colas"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Ver"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interfaz"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Preferencias del interfaz ..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
-msgstr ""
+msgstr "Añadir dirección de Internet..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Añade una pista remota a la lista de reproducción."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
-msgstr ""
+msgstr "Añadir archivos..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Añadir archivos a la lista de reproducción."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
-msgstr ""
+msgstr "Buscar y seleccionar"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
+"Busca en la lista de reproducción y selecciona las entradas que cumplen un "
+"criterio específico."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
-msgstr ""
+msgstr "Invertir la selección"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
-msgstr ""
+msgstr "Invierte las entradas seleccionadas y no seleccionadas."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Seleccionar todo"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Selecciona todos los elementos de la lista de reproducción."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "No seleccionar nada"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Quita la selección de todos los elementos de la lista."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Eliminar todo"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Elimina todas las entradas de la lista de reproducción."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
-msgstr "Limpiar lista"
+msgstr "Limpiar la cola"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
-msgstr "Limpiar la lista asociada con esta lista de reproducción"
+msgstr "Limpia la cola asociada con esta lista de reproducción."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
-msgstr "Eliminar archivos no disponibles"
+msgstr "Eliminar los archivos no disponibles"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
-msgstr "Eliminar archivos no disponibles de la lista de reproducción"
+msgstr "Elimina los archivos no disponibles de la lista de reproducción."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Eliminar duplicados"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Por título"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
-msgstr ""
+msgstr "Elimina las entradas duplicadas de la lista por título."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "Por nombre de archivo"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
+"Elimina las entradas duplicadas de la lista de reproducción por nombre de "
+"archivo."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "Por ruta y nombre de archivo"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
+"Elimina las entradas duplicadas de la lista de reproducción por su ruta "
+"completa."
-#: src/skins/ui_manager.c:300
-msgid "Reverse List"
-msgstr ""
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Eliminar los no seleccionados"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Elimina las entradas no seleccionadas de la lista de reproducción."
#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Eliminar los seleccionados"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Elimina las entradas seleccionadas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Ordenar aleatoriamente"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Ordena la lista de reproducción de forma aleatoria."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Invertir la lista"
+
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
-msgstr ""
+msgstr "Invierte la lista de reproducción."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Ordenar lista"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
-msgstr ""
+msgstr "Ordena la lista por título."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Por álbum"
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
-msgstr ""
+msgstr "Ordena la lista por álbum."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Por artista"
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
-msgstr ""
+msgstr "Ordena la lista por artista."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
-msgstr ""
+msgstr "Ordena la lista por nombre de archivo."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
-msgstr ""
+msgstr "Ordena la lista por ruta de archivo completa."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "Por fecha"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
-msgstr ""
+msgstr "Ordena la lista por fecha de modificación."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Por número de pista"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
-msgstr ""
+msgstr "Ordena la lista por número de pista."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
-msgstr ""
+msgstr "Ordenar los seleccionados"
-#: src/skins/ui_manager.c:373
-msgid "Plugin Services"
-msgstr ""
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Archivo"
#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "Servicios de complementos"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Ver detalles de la pista"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Ver detalles de la pista"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Acerca de Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "Reproducir archivo"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Carga y reproduce un archivo."
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
-msgstr "Reproducir lugar"
+msgstr "Reproducir localización"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Reproduce los medios desde la localización seleccionada."
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Servicios de complementos"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Abrir la ventana de preferencias"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Salir de Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Poner A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Quitar A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Saltar en el tiempo"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Conmutar cola"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Activa/desactiva las entradas en la lista de reproducción."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Pegar"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
-msgstr ""
+msgstr "Cargar"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
-msgid "Preset"
-msgstr ""
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importar"
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr ""
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Guardar"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Borrar"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Predefinido"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
-msgstr ""
+msgstr "Auto-cargar predefinido"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
-msgstr ""
+msgstr "Cargar auto-cargar predefinido"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
-msgstr ""
+msgstr "Cargar el predefinido predeterminado en el ecualizador"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
-msgstr ""
+msgstr "Cero"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
-msgstr ""
+msgstr "Pone los niveles predefinidos del ecualizador a cero"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
-msgstr ""
+msgstr "Desde archivo"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
-msgstr ""
+msgstr "Cargar el predefinido desde un archivo"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
-msgstr ""
+msgstr "Desde archivo"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
-msgstr ""
+msgstr "Carga el predefinido desde un archivo EQF de WinAMP"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
-msgstr ""
+msgstr "Predefinidos de WinAMP"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
-msgstr ""
-
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr ""
+msgstr "Importar los predefindos de WinAMP"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
-msgstr ""
+msgstr "Guardar auto-cargar predefinido"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
-msgstr ""
+msgstr "Guardar predefinido predeterminado"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
-msgstr ""
+msgstr "A un archivo"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
-msgstr ""
+msgstr "Guarda el predefinido en un archivo"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
-msgstr ""
+msgstr "A un archivo EQF de WinAMP"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
-msgstr ""
+msgstr "Guarda el predefinido en un archivo EQF de WinAMP"
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr ""
-
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
-msgstr ""
+msgstr "Borrar auto-cargar predefinido"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
-msgstr ""
+msgstr "Buscar entradas en la lista de reproducción activa"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:256
msgid ""
-"Select entries in playlist by filling one or more fields. Fields use regular "
-"expressions syntax, case-insensitive. If you don't know how regular "
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
"expressions work, simply insert a literal portion of what you're searching "
"for."
msgstr ""
+"Seleccione entradas en la lista de reproducción indicando uno o más campos. "
+"Los campos utilizan sintaxis de expresiones regulares, sin distinguir "
+"mayúsculas de minúsculas. Si no sabe como funcionan las expresiones "
+"regulares, tan solo escriba la parte del literal que quiere buscar."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Título: "
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:271
msgid "Album: "
-msgstr ""
+msgstr "Ãlbum: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
-msgstr "Artista"
+msgstr "Artista: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
-msgstr "Nombre del archivo"
+msgstr "Nombre del archivo: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
-msgstr ""
+msgstr "Limpiar la selección previa antes de buscar"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
-msgstr ""
+msgstr "Conmutar automáticamente la cola para las entradas coincidentes"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
-msgstr ""
-
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr ""
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr ""
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Cargar lista de reproducción"
+msgstr "Crear una nueva lista de reproducción con las entradas coincidentes"
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Guardar lista de reproducción"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
-msgstr ""
+msgstr "Editor de listas de reproducción de Audacious"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d de %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "44100 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "96 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "96 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
-msgstr ""
+msgstr "Tema para Winamp 2.x archivado"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
-msgstr ""
+msgstr "Tema para Winamp 2.x no archivado"
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
-msgstr ""
+msgstr "No se pudo crear el directorio (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
-msgstr ""
+msgstr "Acerca del complemento de archivos de sonido"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
-msgstr ""
+msgstr "Acerca del extensor de sonido"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
-msgstr ""
+msgstr "Corr. volumen"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
-msgstr ""
+msgstr "Solapamiento corto"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
-msgstr ""
+msgstr "Velocidad"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
-msgstr ""
+msgstr "Tono"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Escala"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
-msgstr ""
+msgstr "Extensor de sonido - Configuración"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
-msgstr ""
+msgstr "Comando a ejecutar cuando Audacious reproduce una canción nueva."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
-msgstr ""
+msgstr "Comando:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
-msgstr ""
+msgstr "Comando para ejecutar al final de una canción."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
+"Comando para ejecutar cuando Audacious llega al final de una lista de "
+"reproducción."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:455
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
+"Comando para ejecutar cuando el título cambia para una canción (es decir, "
+"títulos de flujos en red)"
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5107,32 +3434,48 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
-msgstr ""
-
-#: src/song_change/song_change.c:437
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Puede utilizar los siguientes formatos de cadena que\n"
+"se reemplazarán antes de ejecutar el comando (no\n"
+"todos son útiles para el final del comando de fin de lista).\n"
+"\n"
+"%F: Frecuencia (en hercios)\n"
+"%c: Número de canales\n"
+"%f: Nombre de archivo (ruta completa)\n"
+"%l: Longitud (en milisegundos)\n"
+"%n o %s: Nombre de la canción\n"
+"%r: Tasa (en bits por segundo)\n"
+"%t: Posición de la lista de reproducción (%02d)\n"
+"%p: Reproduciendo actualmente (1 o 0)\n"
+"%a: Artista\n"
+"%b: Ãlbum\n"
+"%T: Título de la pista"
+
+#: src/song_change/song_change.c:488
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
+"<span size='small'>Los parámetros enviados a la consola se deberían "
+"encapsular con comillas. De otra forma existe un riesgo de seguridad.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
-msgstr ""
+msgstr "Comandos"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
-msgstr ""
-
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr ""
+msgstr "Cambio de canción"
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
-msgstr "Acerca del plugin Status Icon"
+msgstr "Acerca del complemento de icono de estado"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5142,162 +3485,81 @@ msgid ""
"This plugin provides a status icon, placed in\n"
"the system tray area of the window manager.\n"
msgstr ""
-"Status Icon Plugin\n"
+"Complemento de icono de estado\n"
"\n"
"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
"\n"
-"This plugin provides a status icon, placed in\n"
-"the system tray area of the window manager.\n"
+"Este complemento proporciona un icono de estado, situado\n"
+"en la bandeja de sistema del gestor de ventanas.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
-msgstr "Plugin Status Icon - Preferencias"
+msgstr "Complemento de icono de estado - Preferencias"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
-msgstr ""
+msgstr "Menú con click derecho"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Menú pequeño de reproducción #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Menú pequeño de reproducción #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
-msgstr ""
+msgstr "Acción de la rueda del ratón"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
-msgstr ""
+msgstr "Cambiar el volumen"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
-msgstr ""
+msgstr "Cambiar la canción en reproducción"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Otros ajustes"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Desactivar la ventana emergente"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Cerrar al área de notificación (bandeja de sistema)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Avanzar en la lista de reproducción al desplazar arriba"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
"By Johan Levin 1999."
msgstr ""
-"Extra Stereo Plugin\n"
+"Complemento de estéreo extra\n"
"\n"
-"By Johan Levin 1999."
+"Por Johan Levin 1999."
#: src/stereo_plugin/stereo.c:64
msgid "About Extra Stereo Plugin"
-msgstr ""
+msgstr "Acerca del complemento de estéreo extra"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr ""
+msgstr "Configurar estéreo extra"
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr ""
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr ""
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr ""
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr ""
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr ""
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr ""
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr ""
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
-msgstr ""
+msgstr "Acerca del generador de tonos"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5305,42 +3567,30 @@ msgid ""
"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
-"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
-"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"Generador de tonos por Haavard Kvaalen <havardk@xmms.org>\n"
+"Modificado por Daniel J. Peng <danielpeng@bigfoot.com>\n"
"\n"
-"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
-"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+"Para utilizarlo, añada una URL: tone://frequencia1;frequencia2;frequencia3;...\n"
+"p. ej. tone://2000;2005 para reproducir un tono de 2000Hz y otro de 2005Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
-msgstr ""
-
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr ""
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Formato del título:"
-
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Ogg Vorbis Tags"
+msgstr "Generador de tonos: "
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Configuración del plugin de audio Ogg Vorbis"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Acerca del complemento de archivos de E/S"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
-msgstr "Acerca del plugin de audio Ogg Vorbis"
+msgstr "Acerca del complemento de sonido Ogg Vorbis"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5358,11 +3608,11 @@ msgid ""
"\n"
"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
msgstr ""
-"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"Complemento Ogg Vorbis por la fundación Xiph.org\n"
"\n"
-"Original code by\n"
+"Código original de\n"
"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
-"Contributions from\n"
+"Contribuciones de\n"
"Chris Montgomery <monty@xiph.org>\n"
"Peter Alm <peter@xmms.org>\n"
"Michael Smith <msmith@labyrinth.edu.au>\n"
@@ -5372,7 +3622,7 @@ msgstr ""
"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
"Eugene Zagidullin <e.asphyx@gmail.com>\n"
"\n"
-"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+"Visite la fundación Xiph.org en http://www.xiph.org/\n"
#: src/vtx/about.c:14
msgid "About Vortex Player"
@@ -5381,72 +3631,36 @@ msgstr "Acerca del reproductor Vortex"
#: src/vtx/about.c:15
msgid ""
"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
-"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor."
-"ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
"\n"
"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
"and other AY/YM music sites.\n"
"\n"
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
-"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
-"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor."
-"ru>\n"
+"Reproductor de archivos con formato Vortex por Sashnov Alexander <sashnov@ngs.ru>\n"
+"Basado en el código original in_vtx.dll de Roman Sherbakov <v_soft@microfor.ru>\n"
"\n"
-"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
-"and other AY/YM music sites.\n"
+"Se puede encontrar música en formato vtx en http://vtx.microfor.ru/music.htm\n"
+"y otros portales de música AY/YM.\n"
"\n"
-"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+"Implementación de Audacious por Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
-msgstr "Plugin decodificador Wavpack %s"
+msgstr "Complemento decodificador Wavpack %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
"Some of the plugin code was by Miles Egan\n"
"Visit the Wavpack site at http://www.wavpack.com/\n"
msgstr ""
-"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"Copyright (c) 2006 William Pitcock <nenolod -en- nenolod.net>\n"
"\n"
-"Some of the plugin code was by Miles Egan\n"
-"Visit the Wavpack site at http://www.wavpack.com/\n"
-
-#~ msgid "PREAMP"
-#~ msgstr "PREAMP"
-
-#~ msgid "60HZ"
-#~ msgstr "60HZ"
-
-#~ msgid "170HZ"
-#~ msgstr "170HZ"
-
-#~ msgid "310HZ"
-#~ msgstr "310HZ"
-
-#~ msgid "600HZ"
-#~ msgstr "600HZ"
-
-#~ msgid "1KHZ"
-#~ msgstr "1KHZ"
-
-#~ msgid "3KHZ"
-#~ msgstr "3KHZ"
-
-#~ msgid "6KHZ"
-#~ msgstr "6KHZ"
-
-#~ msgid "12KHZ"
-#~ msgstr "12KHZ"
-
-#~ msgid "14KHZ"
-#~ msgstr "14KHZ"
+"Parte del código del complemento es de Miles Egan\n"
+"Visite el portal de Wavpack en http://www.wavpack.com/\n"
-#~ msgid "16KHZ"
-#~ msgstr "16KHZ"
-#~ msgid "Audacious standard menu"
-#~ msgstr "Menú estándar Audacious"
diff --git a/po/es_AR.po b/po/es_AR.po
new file mode 100644
index 0000000..53675fc
--- /dev/null
+++ b/po/es_AR.po
@@ -0,0 +1,3666 @@
+# Argentinian Spanish translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# Adrián Ramirez Escalante <buried.prophet@gmail.com>, 2012.
+# Cosme Domínguez Díaz <cosme.ddiaz@gmail.com>, 2010.
+# Jorge Andrés <winninglero@gmail.com>, 2011.
+# <xukosky@yahoo.es>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-12 11:23+0000\n"
+"Last-Translator: Adrián Ramirez Escalante <buried.prophet@gmail.com>\n"
+"Language-Team: Spanish (Argentinian)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_AR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"Utilizando libfaad2-%s para decodificar.\n"
+"Decodificador FAAD2 AAC/HE-AAC/HE-AACv2/DRM (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 El equipo de Audacious"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "Cargar ecualizador predefinido"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Acerca de la alarma"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+"Un complemento que se puede utilizar para empezar la reproducción a una hora concreta.\n"
+"\n"
+"Originalmente escrito por Adam Feakin y Daniel Stodden."
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "Alarma"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr "Esta es su llamada despertador"
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "Aceptar"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "Configuración de la alarma"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "Tiempo"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "horas"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr "h"
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "minutos"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "Silencio tras:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "Alarma a (predeterminado):"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "Seleccione los días para que salte la alarma"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "Predeterminado"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "Día"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "Martes"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "Miércoles"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "Jueves"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "Viernes"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "Sábado"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "Domingo"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "Lunes"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "Días"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "Desvanecimiento"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "segundos"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "Volumen"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "Actual"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "Iniciar a"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "Final"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "Comando adicional"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "activar"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "Lista de reproducción (opcional)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "Examinar..."
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "Recordatorio"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "Utilizar recordatorio"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Opciones"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "¿Qué significan estas opciones?"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"Hora\n"
+" Alarma a: \n"
+" La hora a la que saltará la alarma.\n"
+"\n"
+" Silencio tras: \n"
+" Detener la alarma tras esta cantidad de tiempo.\n"
+" (si el diálogo de despertar no se cierra)\n"
+"\n"
+"\n"
+"Días\n"
+" Día:\n"
+" Seleccione los días para que se active la alarma.\n"
+"\n"
+" Hora:\n"
+" Elija la hora para la alarma en cada día,\n"
+" o seleccione el botón para utilizar la hora\n"
+" predeterminada.\n"
+"\n"
+"\n"
+"Volumen\n"
+" Desvanecimiento: \n"
+" Bajar el volumen hasta el nivel elegido \n"
+" durante este periodo de tiempo.\n"
+"\n"
+" Iniciar a: \n"
+" Empezar a desvanecer desde este volumen.\n"
+"\n"
+" Final: \n"
+" El volumen final del desvanecimiento. Si el tiempo\n"
+" de desvanecimiento es 0 se establece este volumen\n"
+" y empieza la reproducción.\n"
+"\n"
+"\n"
+"Opciones:\n"
+" Comando adicional:\n"
+" Ejecutar este comando a la hora de la alarma.\n"
+"\n"
+" Lista de reproducción: \n"
+" Cargar esta lista de producción para reproducir\n"
+" (debe tener una extensión .m3u). Si no se introduce\n"
+" introduce ninguna lista se utilizarán las canciones\n"
+" en la lista actual.\n"
+" También se puede introducir la URL de un flujo\n"
+" mp3/ogg, pero actualmente xmms no puede cargar\n"
+" listas de reproducción desde URLs.\n"
+"\n"
+" Recordatorio:\n"
+" Mostrar un recordatorio cuando se apaga la alarma,\n"
+" escriba el recordatorio en la caja y seleccione el\n"
+" botón si quiere que se muestre.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Ayuda"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "Su recordatorio para hoy es..."
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "Gracias"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "Dispositivo PCM predeterminado"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "Dispositivo mezclador predeterminado"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "Preferencias de complemento de salida ALSA"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "Dispositivo PCM:"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "Dispositivo mezclador:"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "Elemento mezclador:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "Evitar los cuelgues por falta de recursos"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "Acerca del complemento de salida ALSA"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "Error de ALSA"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"No tiene seleccionado ningún puerto secuenciador para la reproducción MIDI."
+" Puede hacerlo en la preferencias del complemento MIDI."
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "Motor ALSA "
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Este motor envía eventos MIDI a un grupo de puertos secuenciadores ALSA definidos. El interfaz secuenciador ALSA es muy versátil, puede proporcionar puertos para sintetizadores hardware (p. ej. emu10k1) pero también sintetizadores software, dispositivos externos, etc.\n"
+"Este motor no produce sonido, los eventos MIDI son manejados directamente por los dispositivos/programas tras los puertos ALSA; por ejemplo, los eventos MIDI enviados a un sintetizador hardware serán reproducidos directamente.\n"
+"Motor escrito por Giacomo Lozito."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "Motor FluidSynth "
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Este motor produce sonido al enviar eventos MIDI a FluidSynth, un sintetizador software en tiempo real basado en la especificación SoundFont2 (www.fluidsynth.org).\n"
+"El sonido producido se puede manipular mediante complementos de efectos y es procesado por el complemento de salida elegido.\n"
+"Motor escrito por Giacomo Lozito."
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "CONFIGURACIÓN DE MOTOR ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Puerto"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "Nombre del cliente"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Nombre del puerto"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "Puertos de salida ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "Tarjeta de sonido: "
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "Control mezclador: "
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "Ajustes del mezclador"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "Motor ALSA no cargado o no disponible"
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">motor\n"
+"ALSA</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "Complemento AMIDI - información del motor"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "PREFERENCIAS DEL COMPLEMENTO AMIDI"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "Selección de motor"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "Motores disponibles"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "Ajustes de reproducción"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "Transponer: "
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "Cambio de batería: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Ajustes avanzados"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "calcular la longitud de los archivos MIDI en lista de reproducción"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "extraer comentarios desde el archivo MIDI (si está disponible)"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "extraer letras desde el archivo MIDI (si está disponible)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr "<span size=\"smaller\">Complemento AMIDI</span>"
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "Complemento AMIDI - seleccione un archivo"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "Complemento AMIDI - configuración"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "Complemento AMIDI - seleccione un archivo SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "CONFIGURACIÓN DE MOTOR FLUIDSYNTH"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "Ajustes de SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Nombre del archivo"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Tamaño (bytes)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "Cargar SF cuando se inicie el reproductor"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "Cargar SF en la primera reproducción de archivo MIDI"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "Preferencias del sintetizador"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "ganancia"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "usar predeterminado"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "valor:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "polifonía"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "reverberación"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "si"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "no"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "coro"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "frecuencia de muestro"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "personalizado "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "Motor FluidSynth no cargado o no disponible"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">Motor\n"
+"FluidSynth</span>"
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "CONFIGURACIÓN MOTOR TIMIDITY"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "Motor TiMidity no cargado o no disponible"
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">Motor\n"
+"TiMidity</span>"
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Nombre:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> Información MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Formato:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "Longitud (mseg):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "Número de pistas:"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "variable"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "BPM:"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg):"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "Div tiempo:"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> Comentarios y letras MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* no hay comentarios disponibles en este archivo MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* no hay letras disponibles en este archivo MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (UTF-8 no válido)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "Complemento AMIDI - acerca de"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+"\n"
+"Complemento AMIDI"
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+"\n"
+"reproductor de música MIDI modular\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"escrito por Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"agradecimientos especiales a...\n"
+"\n"
+"Clemens Ladisch y Jaroslav Kysela\n"
+"por sus geniales programas aplaymidi and amixer; que\n"
+"fueron muy útiles, junto con la documentación de alsa-lib,\n"
+"para aprender más acerca de la programación ALSA.\n"
+"\n"
+"Alfredo Spadafina\n"
+"por el bonito logo de teclado midi\n"
+"\n"
+"Tony Vroon\n"
+"por su buena ayuda con las pruebas\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "Rectángulo"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Rectángulo redondeado"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Rectángulo cóncavo"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Ninguno"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "Reproducción iniciada"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "Avisa cuando se reproduce un elemento de la lista de reproducción."
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "Cambio de título"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Avisa cuando, durante la reproducción, el título de la canción cambia pero "
+"el nombre de archivo es el mismo. Esto es principalmente útil para mostrar "
+"cambios de título en los flujos de Internet."
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "Cambio de volumen"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "Avisa cuando se cambia el volumen."
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "Inicio de pausa"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "Avisa cuando la reproducción es pausada."
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "Fin de pausa"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "Avisa cuando la reproducción se reanuda."
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "Colocación"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "Desplazamiento X relativo:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "Desplazamiento Y relativo:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "Ancho máximo:"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "Opciones multi-monitor"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "Mostrar notificaciones utilizando:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "todos los monitores"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "monitor %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "Temporización (ms)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "Mostrar:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "Desvanecimiento de entrada:"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "Desvanecimiento de salida:"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "Tipografías"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "Tipografía %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "Sombra"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "Internacionalización"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "Deshabilitar la conversión de texto UTF-8 (en notificaciones)"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "Seleccione un archivo de temas"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "Estilo de renderizado"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "Colores"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "Color %i:"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "Tema personalizado"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "Archivo de temas:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "Examinar"
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "Activar disparador"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "Evento"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "Administrador de composición detectado"
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+"Administrador de composición no detectado;\n"
+"a menos que sepa que tiene uno ejecutándose, por favor active un administrador de composición o las notificaciones no funcionarán correctamente"
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "Administrador de composición no necesario para transparencia falsa"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "Transparencia"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "Transparencia falsa"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Transparencia real (requiere composición 3D)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Extensión de composición no cargada"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Extensión de composición no disponible"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr "<span font_desc='%s'>Notificaciones de Audacious</span>"
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "Notificaciones de Audacious - configuración"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "Probar"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "Posición"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "Animación"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "Texto"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "Decoración"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "Disparador"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "Varios"
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "Notificaciones de Audacious - acerca de"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Notificaciones de Audacious"
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"escrito por Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"Las notificaciones de Audacious se basan en la biblioteca\n"
+"Ghosd escrita por Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Alcance de desenfoque: Selección de color"
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "Opciones:"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Preferencias del filtro Bauer estereofónico a binaural"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Nivel de alimentación:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Cortar frecuencia:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Predefinidos:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "Acerca del complemento de CD de música"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+"Copyright (c) 2007, por Calin Crisan <ccrisan@gmail.com> y el Equipo Audacious.\n"
+"\n"
+"Muchas gracias a los desarrolladores de libcdio <http://www.gnu.org/software/libcdio/>\n"
+"\ty de libcddb <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"También gracias a Tony Vroon su tutoría y orientación.\n"
+"\n"
+"Este fue un proyecto del Google Summer of Code 2007.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "CD de audio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "La unidad está vacía."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Tipo de disco no soportado."
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "Configuración de complemento de CD de audio"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "Extracción digital de sonido"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "Información de título"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "Velocidad de Disco:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "Usar texto en CD si está disponible"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "Usar CDDB si está disponible"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "Servidor: "
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "Ruta: "
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Puerto:"
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "Usar HTTP en lugar de CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "Sobreescribir el dispositivo predeterminado: "
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Aceptar"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Reproducir CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Agregar CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "Acerca del complemento de compresión de rango dinámico"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "Preferencias del compresor de rango dinámico"
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Centrar volumen:"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Rango dinámico:"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "Decodificador musical de videoconsola"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "General"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Reproducción"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "Graves:"
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "segs"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "Agudos:"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "Longitud de canción predeterminada:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "Remuestreo"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "Activar el remuestreo de sonido"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "Tasa de remuestreo:"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "SPC"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "Ignorar longitud de etiquetas SPC"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "Aumentar la reverberación"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+"La longitud de canción predeterminada, expresada en segundos, es usada para "
+"canciones que no preveén información de longitud (es decir pistas cíclicas)."
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "Acerca del decodificador de música de videoconsola"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"El motor decodificador de música de videoconsola está basado en Game_Music_Emu 0.5.2.\n"
+"Formatos sopotados: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Implementación de Audacious por: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "Acerca de la atenuación cruzada"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "Preferencias de la atenuación cruzada"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "Solapamiento (en segundos):"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Error de atenuación cruzada"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+"La atenuación cruzada falló porque las canciones tienen números diferentes "
+"de canales."
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+"La tenuación cruzada falló porque las canciones tienen diferentes frecuencias de muestreo.\n"
+"\n"
+"Puede usar el efecto convertidor de frecuencia de muestro para volver a muestrear las canciones a la misma tasa."
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr "Configurar el cristalizador"
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "Intensidad de efectos:"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+"Complemento de eco\n"
+"por Johan Levin 1999.\n"
+"\n"
+"Eco envolvente por Carl van Schaik 1999"
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "Acerca del complemento de eco"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "Configurar eco"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "Retraso: (ms)"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "Retroalimentación: (%)"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "Volumen: (%)"
+
+#: src/ffaudio/ffaudio-core.c:725
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Complemento de decodificación de sonido multi-formato para Audacious\n"
+"basado en el marco multimedia FFmpeg (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, y otros.\n"
+"\n"
+"Complemento de Audacious por:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+
+#: src/ffaudio/ffaudio-core.c:739
+msgid "About FFaudio Plugin"
+msgstr "Acerca del complemento FFaudio"
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "Acerca del complemento escritor de archivos"
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "Configuración del escritor de archivos"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "Formato del archivo de salida:"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "Configurar"
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "Guardar dentro del directorio original"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "Guardar dentro de directorio personalizado"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "Carpeta de archivo de salida:"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Elija una carpeta"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Obtener nombre de archivo desde:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "etiquetas del archivo original"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "nombre del archivo original"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "No quitar la extensión del archivo"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Anteponer el número de pista al nombre de archivo"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Estéreo conjunto"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Estereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "Configuración MP3"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "Calidad del algoritmo:"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "Frecuencia de muestreo de salida:"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr "(Hz)"
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "Tasa de bits / Compresión:"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "Tasa de bits (kbps):"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "Compresión:"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "Modo de sonido:"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "Varios:"
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr "Cumplir estrictamente la norma ISO"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "Error de protección"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "Calidad"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "Activar VBR/ABR"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "Opciones VBR:"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "Tasa de bits mínima (kbps):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "Tasa de bits máxima (kbps):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "Aplicar estrictamente la tasa de bits mínima"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "Opciones ABR:"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "Tasa de bits promedio (kbps):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "Nivel de calidad VBR:"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "No escribir la cabecera VBR Xing"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr "VBR/ABR"
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "Prametros de cuadro:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "Marcar como derechos de autor"
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "Marcar como original"
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "Parametros ID3:"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "Forzar adición de etiqueta de la versión 2"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "Solo agregar etiqueta v1"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "Solo agregar etiqueta v2"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "Configuración de codificador Vorbis"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "Nivel de calidad (0 - 10):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Acerca del complemento de sonido FLAC"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+"\n"
+"Código original por\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "Acerca del complemento de atajos Gnome"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Complemento de atajos Gnome\n"
+"Le permite controlar el reproductor con atajos de Gnome.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Número de entrada"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Título"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Artista"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Año"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Pista"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Posición de la cola"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Longitud"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Ruta del archivo"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Nombre del archivo"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Título personalizado"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Tasa de bits"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Seleccionar columnas"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Disponible:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Seleccionado:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Acoplar a la izquierda"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Acoplar a la derecha"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Acoplar arriba"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Acoplar abajo"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Desacoplar"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Deshabilitar"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Abrir archivos ..."
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Abrir _URL ..."
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_Añadir archivos ..."
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Añadir U_RL ..."
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "A_cerca de ..."
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Preferencias"
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Salir"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Reproducir"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Pa_usar"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Detener"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "An_terior"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "Si_guiente"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "R_epetir"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "_Orden aleatorio"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "No avan_zar la lista de reproducción"
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "_Detener tras esta canción"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "_Información de la canción ..."
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "_Saltar en el tiempo ..."
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Saltar a la _canción ..."
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Por _número de pista"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Por _título"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Por _artista"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Por a_lbum"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Por _fecha de estreno"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Por _ruta de archivo"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Por título _personalizado"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Orden _inverso"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Orden alea_torio"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "A_ctualizar"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Eliminar archivos _no disponibles"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Ordenar"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nuevo"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Cerrar"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importar ..."
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exportar ..."
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Gestor de listas de reproducción ..."
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Gestor de _colas ..."
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "_Subir volumen"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "_Bajar volumen"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Ecualizador"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_fectos"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interfaz"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Visualizaciones"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "_Mostrar barra de menú"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Mostrar barra de _información"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Mostrar barra de _estado"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Mostrar _cabeceras de columna"
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "_Seleccionar columnas ..."
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "A_vanzar al cambiar de canción"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Archivo"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Reproducción"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_Lista de reproducción"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Servicios"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "Sali_da"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Ver"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Encolar/desencolar"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "Cor_tar"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Pegar"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Seleccionar _todo"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Renombrar"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Interfaz GTK"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Gestión de memoria intermedia ..."
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Error"
+
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Cerrar"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "mono"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "estéreo"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d canal"
+msgstr[1] "%d canales"
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d kbps"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "Pista anterior"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Reproducir"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Pausa/continuar"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Detener"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "Siguiente pista"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "Avanzar 5 segundos"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "Retroceder 5 segundos"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "Silenciar"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Subir volumen"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Bajar volumen"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Ir al archivo"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Cambiar ventanas del reproductor"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "Mostrar notificaciones"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Conmutar el modo repetir"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Conmutar orden aleatorio"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(ninguno)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"No se recomienda asociar los botones principales del mouse sin cambios.\n"
+"\n"
+"¿Quiere continuar?"
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "Asociar botones del mouse"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "Configuración de atajos de teclado"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"Pulse una combinación de teclas dentro del campo de texto.\n"
+"También puede asociar botones del ratón."
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "Atajos de teclado:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>Acción:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "<b>Teclas asociadas:</b>"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "Acerca del complemento de atajos de teclado"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+"Complemento de atajos de teclado\n"
+"Controla el reproductor con combinaciones de teclas o teclas multimedia.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Con la participación de:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Conectar a todos los puertos jack disponibles"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Conectar solo los puertos de salida"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "No conectar puertos"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "Configuración del complemento jack"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Modo de conexión:"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Activar mensajes de depuración"
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+"Complemento jack para XMMS 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Portado a Audacious por\n"
+"Giacomo Lozito de develia.org"
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr "Acerca del complemento de salida JACK 0.17"
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Acerca del servidor LADSPA"
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Ajustes %s"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Ajustes del servidor LADSPA"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Rutas de complementos:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Separe múltiples rutas por dos puntos.\n"
+"Estas rutas se utilizan además de LADSPA_PATH.\n"
+"Tras añadir nuevas rutas, pulse Intro para buscar complementos nuevos.</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Complementos disponibles:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Activar"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Complementos activos:"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Ajustes"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Buscando letras ..."
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"Conectando a lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"No se encontraron letras."
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr "Acerca del metrónomo"
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+"Un generador de tacto por Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"Para utilizarlo, añada una URL: tact://pulsos*num/den\n"
+"p. ej. tact://77 para reproducir 77 pulsos por minuto\n"
+"o tact://60*3/4 para reproducir 60 ppm en 3/4 tactos"
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr "Generador de tacto: %d ppm"
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr "Generador de tacto: %d ppm %d/%d"
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Acerca del mezclador de canales"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Ajustes del mezclador de canales"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Canales de salida:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Los cambios se aplicarán en el siguiente cambio de canción."
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "Envolvente"
+
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "Carga en progreso..."
+
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Cargar a un dispositivo MTP"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Desconectar dispositivo MTP"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Detenido"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious no está reproduciendo."
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Complemento de salida nula "
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+" por Christian Birchinger <joker@netswarm.net>\n"
+"basado en el complemento de XMMS por Håvard Kvål <havardk@xmms.org>"
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr "Acerca del complemento de salida nula"
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "Preferencias de la salida nula"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "Ejecutar en tiempo real"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. Dispositivo predeterminado"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "Preferencias del complemento de salida OSS4"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Dispositivo de sonido:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "Utilizar dispositivo alternativo:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Guardar volumen entre sesiones"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "Activar conversiones de formato realizadas por el software OSS."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Activa el modo exclusivo para evitar la mezcla virtual."
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "Acerca del complemento OSS4"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "Error OSS4"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "Predeterminado (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "Configuración del complemento OSS"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "Gestión de memoria intermedia:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "Información inicial (porcentaje):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "Gestión de memoria intermedia"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "Ajustes del mezclador:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "El volumen controla el maestro no PCM"
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "Mezclador"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "Acerca del complemento OSS"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "Acerca del complemento de salida PulseAudio"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr "Acerca del módulo de conversión de frecuencia de muestreo"
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr "Preferencias del conversor de frecuencia de muestreo"
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "Mapas de frecuencia:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "Todos los demás:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "Método:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "Cambiar la contraseña"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>Servicios</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "Nombre de usuario:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr "URL del Scrobbler:"
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr "<b>Last.FM</b>"
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr "Scrobbler"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Módulo de AudioScrobbler para Audacious\n"
+"\n"
+"Creado originalmente por Audun Hove <audun@nlc.no> y Pipian <pipian@pipian.com>\n"
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "Acerca del complemento Scrobbler"
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Acerca del complemento de salida SDL"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Error SDL"
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Género"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Biblioteca"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Crear lista de reproducción"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Añadir a la lista de reproducción"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Buscar biblioteca"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Para importar su colección musical en Audacious, elija una carpeta y pulse "
+"el botón «actualizar»."
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Espere por favor..."
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Elija una carpeta"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "Acerca del interfaz con soporte de temas"
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr "Copyright (c) 2008, por Tomasz Moń <desowin@gmail.com>\n"
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "_Reproductor:"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Seleccione la tipografía para la ventana principal:"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "Lista de reproducción:"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Seleccione la tipografía de la lista de reproducción:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Tipografías</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Usar tipografías de mapa de bits (solo soporta ASCII)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Desplazar el título de la canción en ambas direcciones"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Tema</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Preferencias del interfaz"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamplificador"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Ecualizador de Audacious"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Predefinidos"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Cargar predefinido"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Cargar auto-predefinido"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Cargar ecualizador predefinido"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Guardar predefinido"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Guardar auto-predefinido"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Guardar ecualizador predefinido"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Borrar predefinido"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Borrar auto-predefinido"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "envolvente"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Ir a la posición %d:%-2.2d / %d:%-2.2d"
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "Volumen: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "Balance: %d%% izquierda"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "Balance: centrado"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "Balance: %d%% derecha"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "Menú de opciones"
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "Desactivar 'Siempre encima'"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Activar 'Siempre encima'"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Caja de información de archivo"
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Menú de visualización"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "Modo único."
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "Modo de lista de reproducción."
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "Parar después de la canción."
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "No parar después de la canción."
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "Desplazar el nombre de la canción"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Parar tras la canción actual"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "Picos"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Repetir"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Orden aleatorio"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "No avanzar la lista de reproducción"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "Mostrar reproductor"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "Mostrar el editor de listas de reproducción"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "Mostrar el ecualizador"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "Siempre encima"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "Poner en todos los espacios de trabajo"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "Enrollar el reproductor"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "Enrollar el editor de listas de reproducción"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "Enrollar el ecualizador"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "Analizador"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "Campo"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "Marca de voz"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "Apagado"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Normal"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "Fuego"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "Líneas verticales"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "Líneas"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "Barras"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "Campo de puntos"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "Campo de líneas"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "Campo sólido"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "Hielo"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Suave"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "Muy lento"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "Lento"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Medio"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Rápido"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "Muy rápido"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "Tiempo transcurrido"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "Tiempo restante"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pausar"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Siguiente"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "Visualización"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "Modo de visualización"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "Modo analizador"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "Modo de campo"
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "Modo marca de voz"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "Modo WindowShade VU"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "Caída del analizador"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "Caída de los picos"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Lista de reproducción"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nueva lista de reproducción"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "Lista de reproducción siguiente"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "Lista de reproducción anterior"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Eliminar la lista de reproducción"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Importar lista de reproducción"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Carga un archivo de listas en la lista de reproducción seleccionada."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Exportar lista de reproducción"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Guarda la lista de reproducción seleccionada."
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Actualizar lista"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+"Actualiza los metadatos asociados con una entrada de la lista de "
+"reproducción."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Gestor de listas de reproducción"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Gestor de colas"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Ver"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interfaz"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Preferencias del interfaz ..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "Añadir dirección de Internet..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Añade una pista remota a la lista de reproducción."
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "Añadir archivos..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Añadir archivos a la lista de reproducción."
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Buscar y seleccionar"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+"Busca en la lista de reproducción y selecciona las entradas que cumplen un "
+"criterio específico."
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "Invertir la selección"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr "Invierte las entradas seleccionadas y no seleccionadas."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Seleccionar todo"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Selecciona todos los elementos de la lista de reproducción."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "No seleccionar nada"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Quita la selección de todos los elementos de la lista."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Eliminar todo"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Elimina todas las entradas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "Limpiar la cola"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr "Limpia la cola asociada con esta lista de reproducción."
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "Eliminar los archivos no disponibles"
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr "Elimina los archivos no disponibles de la lista de reproducción."
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "Eliminar duplicados"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Por título"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr "Elimina las entradas duplicadas de la lista por título."
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "Por nombre de archivo"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr ""
+"Elimina las entradas duplicadas de la lista de reproducción por nombre de "
+"archivo."
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "Por ruta y nombre de archivo"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr ""
+"Elimina las entradas duplicadas de la lista de reproducción por su ruta "
+"completa."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Eliminar los no seleccionados"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Elimina las entradas no seleccionadas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Eliminar los seleccionados"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Elimina las entradas seleccionadas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Ordenar aleatoriamente"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Ordena la lista de reproducción de forma aleatoria."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Invertir la lista"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "Invierte la lista de reproducción."
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Ordenar lista"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr "Ordena la lista por título."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Por álbum"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr "Ordena la lista por álbum."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Por artista"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr "Ordena la lista por artista."
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr "Ordena la lista por nombre de archivo."
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr "Ordena la lista por ruta de archivo completa."
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "Por fecha"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr "Ordena la lista por fecha de modificación."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Por número de pista"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr "Ordena la lista por número de pista."
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "Ordenar los seleccionados"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Archivo"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "Servicios de complementos"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Ver detalles de la pista"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Ver detalles de la pista"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Acerca de Audacious"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "Reproducir archivo"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Carga y reproduce un archivo."
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "Reproducir localización"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Reproduce los medios desde la localización seleccionada."
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Servicios de complementos"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Abrir la ventana de preferencias"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Salir de Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Poner A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Quitar A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Saltar en el tiempo"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Conmutar cola"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Activa/desactiva las entradas en la lista de reproducción."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Pegar"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "Cargar"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importar"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Guardar"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Borrar"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Predefinido"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "Auto-cargar predefinido"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "Cargar auto-cargar predefinido"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "Cargar el predefinido predeterminado en el ecualizador"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "Cero"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "Pone los niveles predefinidos del ecualizador a cero"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "Desde archivo"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "Cargar el predefinido desde un archivo"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "Desde archivo"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "Carga el predefinido desde un archivo EQF de WinAMP"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "Predefinidos de WinAMP"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "Importar los predefindos de WinAMP"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "Guardar auto-cargar predefinido"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "Guardar predefinido predeterminado"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "A un archivo"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "Guarda el predefinido en un archivo"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "A un archivo EQF de WinAMP"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "Guarda el predefinido en un archivo EQF de WinAMP"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "Borrar auto-cargar predefinido"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr "Buscar entradas en la lista de reproducción activa"
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+"Seleccione entradas en la lista de reproducción indicando uno o más campos. "
+"Los campos utilizan sintaxis de expresiones regulares, sin distinguir "
+"mayúsculas de minúsculas. Si no sabe como funcionan las expresiones "
+"regulares, tan solo escriba la parte del literal que quiere buscar."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Título: "
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "Ãlbum: "
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "Artista: "
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "Nombre del archivo: "
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr "Limpiar la selección previa antes de buscar"
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr "Conmutar automáticamente la cola para las entradas coincidentes"
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr "Crear una nueva lista de reproducción con las entradas coincidentes"
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr "Editor de listas de reproducción de Audacious"
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d de %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "Tema para Winamp 2.x archivado"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "Tema para Winamp 2.x no archivado"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "No se pudo crear el directorio (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr "Acerca del complemento de archivos de sonido"
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "Acerca del extensor de sonido"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "Corr. volumen"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "Solapamiento corto"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Velocidad"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "Tono"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Escala"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "Extensor de sonido - Configuración"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "Comando a ejecutar cuando Audacious reproduce una canción nueva."
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr "Comando:"
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "Comando para ejecutar al final de una canción."
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr ""
+"Comando para ejecutar cuando Audacious llega al final de una lista de "
+"reproducción."
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+"Comando para ejecutar cuando el título cambia para una canción (es decir, "
+"títulos de flujos en red)"
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Puede utilizar los siguientes formatos de cadena que\n"
+"se reemplazarán antes de ejecutar el comando (no\n"
+"todos son útiles para el final del comando de fin de lista).\n"
+"\n"
+"%F: Frecuencia (en hercios)\n"
+"%c: Número de canales\n"
+"%f: Nombre de archivo (ruta completa)\n"
+"%l: Longitud (en milisegundos)\n"
+"%n o %s: Nombre de la canción\n"
+"%r: Tasa (en bits por segundo)\n"
+"%t: Posición de la lista de reproducción (%02d)\n"
+"%p: Reproduciendo actualmente (1 o 0)\n"
+"%a: Artista\n"
+"%b: Ãlbum\n"
+"%T: Título de la pista"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>Los parámetros enviados a la consola se deberían "
+"encapsular con comillas. De otra forma existe un riesgo de seguridad.</span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "Comandos"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr "Cambio de canción"
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "Acerca del complemento de icono de estado"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+"Complemento de icono de estado\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"Este complemento proporciona un icono de estado, situado\n"
+"en la bandeja de sistema del gestor de ventanas.\n"
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "Complemento de icono de estado - Preferencias"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "Menú con click derecho"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "Menú pequeño de reproducción #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "Menú pequeño de reproducción #2"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "Acción de la rueda del ratón"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "Cambiar el volumen"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "Cambiar la canción en reproducción"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Otros ajustes"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Desactivar la ventana emergente"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Cerrar al área de notificación (bandeja de sistema)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Avanzar en la lista de reproducción al desplazar arriba"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+"Complemento de estéreo extra\n"
+"\n"
+"Por Johan Levin 1999."
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "Acerca del complemento de estéreo extra"
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "Configurar estéreo extra"
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr "Acerca del generador de tonos"
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+"Generador de tonos por Haavard Kvaalen <havardk@xmms.org>\n"
+"Modificado por Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"Para utilizarlo, añada una URL: tone://frequencia1;frequencia2;frequencia3;...\n"
+"p. ej. tone://2000;2005 para reproducir un tono de 2000Hz y otro de 2005Hz"
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Hz"
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr "Generador de tonos: "
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Acerca del complemento de archivos de E/S"
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Acerca del complemento de sonido Ogg Vorbis"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Complemento Ogg Vorbis por la fundación Xiph.org\n"
+"\n"
+"Código original de\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contribuciones de\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visite la fundación Xiph.org en http://www.xiph.org/\n"
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr "Acerca del reproductor Vortex"
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+"Reproductor de archivos con formato Vortex por Sashnov Alexander <sashnov@ngs.ru>\n"
+"Basado en el código original in_vtx.dll de Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Se puede encontrar música en formato vtx en http://vtx.microfor.ru/music.htm\n"
+"y otros portales de música AY/YM.\n"
+"\n"
+"Implementación de Audacious por Pavel Vymetalek <pvymetalek@seznam.cz>"
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr "Complemento decodificador Wavpack %s"
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"Copyright (c) 2006 William Pitcock <nenolod -en- nenolod.net>\n"
+"\n"
+"Parte del código del complemento es de Miles Egan\n"
+"Visite el portal de Wavpack en http://www.wavpack.com/\n"
+
+
diff --git a/po/es_MX.po b/po/es_MX.po
new file mode 100644
index 0000000..22cdbf2
--- /dev/null
+++ b/po/es_MX.po
@@ -0,0 +1,3673 @@
+# Spanish (Mexican) translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# Jorge A. García Sosa <jagsmd@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-12 01:23+0000\n"
+"Last-Translator: Jorge A. García Sosa <jagsmd@gmail.com>\n"
+"Language-Team: Spanish (Mexican)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es_MX\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"Usando libfaad2-%s para decodificar.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM descoficador (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "Acerca del plugin descodificador MP4 AAC"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Acerca de Alarm"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+"Un plugin que puede ser usado para comenzar a reproducir a una hora dada.\n"
+"Originalmente escrito por Adam Feakin y Daniel Stodden."
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "Alarma"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr "Esta es tu llamada despertador."
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "OK"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "Ajustes de Alarma"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "Tiempo"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "horas"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr "h"
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "minutos"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "Silencio después de:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "Alarma a las (predeterminado):"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "Escoge los días para suene la alarma"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "Predeterminado"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "Día"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "Martes"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "Miércoles"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "Jueves"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "Viernes"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "Sábado"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "Domingo"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "Lunes"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "Días"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "Disminución"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "segundos"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "Volumen"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "Actual"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "Comenzar a"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "Finalizar a"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "Comando Adicional"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "Habilitar"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "Lista de Reproducción (opcional)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "Examinar"
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "Recodatorio"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "Usar recordatorio"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Opciones"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "¿Qué significan estás opciones?"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"Tiempo\n"
+" Alarma a las: \n"
+" La hora a la que sonará la alarma.\n"
+"\n"
+" Detener Después de: \n"
+" Detener la alarma después de esta cantidad de tiempo.\n"
+" (si el diálogo deif the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Días\n"
+" Día:\n"
+" Selecciona los días que la alarma se activará.\n"
+"\n"
+" Hora:\n"
+" Escoge la hora para la alarma de cada día,\n"
+" o selecciona Predeterminada para utilizar la hora\n"
+" predeterminada.\n"
+"\n"
+"\n"
+"Volumen\n"
+" Disminución: \n"
+" Disminuye el volumen al volumen seleccionado \n"
+" para esta cantidad de tiempo.\n"
+"\n"
+" Comenzar a: \n"
+" Comienza la disminución a este volumen.\n"
+"\n"
+" Finalizar: \n"
+" El volumen a la que se detendrá la disminución. Si la hora de\n"
+" disminución es 0 entonces el volumen se ajustara a esto y comenzará \n"
+" reproducir.\n"
+"\n"
+"\n"
+"Opciones:\n"
+" Comando Adicional:\n"
+" Ejecuta este comando a la hora de la alarma.\n"
+"\n"
+" Lista de Reproducción: \n"
+" Carga esta lista de reproducción para reproducir sus pistas \n"
+" (debe tener la extensión .m3u). Si no es dada una\n"
+" lista de repoducción entonces serán reproducidas las de la actual\n"
+" lista de reproducción.\n"
+" También puede ser introducido aquí el URL de un stream de mp3/ogg,\n"
+" pero cargar listas de repoducción desde URLs\n"
+" no es soportado actualmente por xmms.\n"
+"\n"
+" Recordatorio:\n"
+" Muestra un recordatorio cuando la alarma se apague,\n"
+" escribe el recordatorio en la caja y selecciona la type the reminder in the box and turn on the\n"
+" opción Habilitar Recordatorio si quieres que sea mostrado.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Ayuda"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "Tu recordatorio para hoy es.."
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "Gracias"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "Dispositivo PCM determinado"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "Dispositivo mezclador predeterminado"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "Preferencias del plugin de salida ALSA"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "Dispositivo PCM"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "Dispositivo mezclador"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "Elemento mezclador:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "Evitar colapsos por falta de recursos"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "Acerca del plugin de salida ALSA"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "Error ALSA"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"No has seleccionado ningún puerto secuenciador para reproducción MIDI. "
+"Puedes hacerlo en las preferencias del plugin MIDI."
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "Motor ALSA"
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Este motor envía eventos MIDI a un grupo de puertos secuenciadores ALSA escogidos por el usuario. La interfaz del secuenciador ALSA es muy versátil, puede proveer puertos para sintetizadores por hardware de tarjetas de audio (por ejemplo, emu10k1) pero tambien para sintetizadores por software, dispositivos externos, etc.\n"
+"Este motor no produce audio, los eventos MIDI son manejados durectamente desde los dispositivos o programas detrás de los puertos ALSA; por ejemplo, los eventos MIDI enviados al sintetizador por hardware serán reproducidos directamente.\n"
+"Motor escrito por Giacomo Lozito."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "Motor FluidSynth "
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Este motor produce audio enviando los eventos MIDI a Fluidsynth, un sintetizador de software en tiempo real basado en la especificación SoundFont2 (www.fluidsynth.org).\n"
+"El audio producido puede ser manipulado a través de los plugins de efectos del reproductor y es procesado por el plugin de salida seleccionado.\n"
+"Motor escrito por Giacomo Lozito."
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "CONFIGURACIÓN DEL MOTOR ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Puerto"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "Nombre del Cliente"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Nombre del Puerto"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "Puertos de salida ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "Tarjeta de sonido:"
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "Control de Mezcla"
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "Ajustes del mezclador"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "El Motor ALSA no está cargado o no está disponible"
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">Motor\n"
+"ALSA</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "AMIDI-Plug - información del motor"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "PREFERENCIAS AMIDI-PLUG"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "Selección del motor"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "Motores disponibles"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "Ajustes de reproducción"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "Transponer: "
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "Cambio de bateria: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Ajustes avanzados"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "pre-calcular duración de archivos MIDI en la lista de reproducción"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "extraer comentarios del archivo MIDI (si están disponibles)"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "extraer letras de canciones del archivo MIDI (si están disponibles)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "AMIDI-Plug - seleccionar archivo"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "AMIDI-Plug - configuración"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "AMIDI-Plug - seleccionar archivo SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "CONFIGURACIÓN DEL MOTOR FLUIDSYNTH "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "Ajustes de SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Nombre del archivo"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Tamaño (bytes)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "Cargar SF al iniciar el reproductor"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "Cargar SF al reproducir el primer archivo MIDI"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "Ajustes del sintetizador"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "ganancia"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "Utilizar predeterminado"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "valor:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "polifonía"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "reverberación"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "sí"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "no"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "coro"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "frecuencia de muestreo"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "personalizada"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Hz"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "Motor FluidSynth no cargado o no está disponible"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">Motor\n"
+"FluidSynth</span>"
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "CONFIGURACIÓN DEL MOTOR TIMIDITY"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "Motor TiMidity no cargado o no está disponible"
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">Motor\n"
+"TiMidity</span>"
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Nombre:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> Información MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Formato:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "Duración (ms):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "Núm de Pistas"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "variable"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "BPM"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg)"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "Div tiempo"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> Comentarios y Letras de canción MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* no hay comentarios disponibles en este archivo MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* no hay letras de canción disponibles en este archivo MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (UTF-8 inválido)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "AMIDI-Plug - acerca de"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+"\n"
+"AMIDI-Plug "
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+"\n"
+"reproductor musical modular MIDI\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"escrito por Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"agradecimientos especiales a...\n"
+"\n"
+"Clemens Ladisch y Jaroslav Kysela\n"
+"por sus chingones programas aplaymidi y amixer; estos\n"
+"fueron realmente útiles, junto con la documentación alsa-lib docs, para\n"
+"aprender más sobre la API ALSA\n"
+"\n"
+"Alfredo Spadafina\n"
+"por el lindo logotipo de teclado midi\n"
+"\n"
+"Tony Vroon\n"
+"por la buena ayuda con las pruebas alfa\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "Rectángulo"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Rectágulo Redondeado"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Rectángulo Cóncavo"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Ninguno"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "Iniciar Reproducción"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr ""
+"Muestra el Notificación en Pantalla cuando se reproduce un elemento de la "
+"lista de reproducción"
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "Cambio de Título"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Muestra el Notificación en Pantalla cuando, en la reproducción, el título de"
+" la pista cambia pero el nombre del archivo es el mismo. Esto es muy útil "
+"para mostrar cambios de título en streams de internet."
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "Cambiar Volumen"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "Muestra Notificación en Pantalla cuando cambia el volumen."
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "Pausa Encendida"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "Muestra Notificación en Pantalla cuando la reproducción está pausada."
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "Pausa Apagada"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "Muestra Notificación en Pantalla cuando la pausa termina."
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "Colocación"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "Compensación relativa en X:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "Compensación relativa en Y:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "Ancho máximo de OSD"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "Opciones de varios monitores"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "Mostrar OSD utilizando:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "Todos los monitores"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "monitor %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "Tiempo (ms)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "Mostrar:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "Desvanecimiento al aparecer"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "Desvanecimiento al desaparecer"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "Fuentes"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "Fuente %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "Sombra"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "Internacionalización"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "Deshabilitar conversión de texto UTF-8 (en Avisos en Pantalla)"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "Seleccionar archivo de Skin"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "Estilo de Renderización"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "Colores"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "Color %i"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "Skin personalizada"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "Archivo de Skin:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "Examinar"
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "Activar Aviso"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "Evento"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "Administrador de composición detectado"
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+"Administrador de composición no detectado;\n"
+"a menos que sepas que tienes uno ejecutándose, por favor activa un administrador de composición, de otra forma las Notificaciones en Pantalla no funcionarán apropiadamente"
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "Administrador de composición no requerido para transparencia falsa"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "Transparencia"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "Transparencia falsa"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Transparencia real (requiere X Composite Ext.)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Extensión de composición no cargada"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Extensión de composición no disponible"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr "<span font_desc='%s'>Audacious OSD</span>"
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "Audacious OSD - configuración"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "Probar"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "Posición"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "Animación"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "Texto"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "Decoración"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "Avisos"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "Misc."
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "Audacious OSD - acerca"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Audacious OSD "
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"excrito por Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display (Notificaciones en Pantalla) está basado en la librería Ghosd\n"
+"escrita por Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Osciloscopio borroso: Selección de color"
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "Opciones"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Preferencias Bauer stereophonic-to-binaural"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Nivel de alimentación"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Frecuencia de corte"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Predefinidos"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "Acerca del plugin Audio CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+"Copyright (c) 2007, por Calin Crisan <ccrisan@gmail.com> y el Audacious Team.\n"
+"\n"
+"Muchas gracias a los desarroladores de libcdio <http://www.gnu.org/software/libcdio/>\n"
+"\ty a los desarolladores de libcddb <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Gracias también a Tony Vroon por ser mi mentor y guiarme.\n"
+"\n"
+"Este fue un proyecto de Google Summer of Code 2007.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "CD de Audio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "La unidad de disco está vacía"
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Tipo de disco no soportado"
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "Configuración del plugin CD Audio"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "Extración de audio digital"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "Información de título"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "Velocidad del disco:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "Utilizar cd-text si está disponible"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "Utilizar CDDB si está disponible"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "Servidor: "
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "Ruta"
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Puerto: "
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "Utilizar HTTP en vez de CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "Anular dispositivo determinado: "
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Ok"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Reproducir CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Agregar CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "Acerca del plugin Dynamic Range Compression"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "Preferencias del Compresor de Rango Dinámico "
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Centrar volumen"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Rango dinámico"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "Descodificador de Música de Consolas de Juego"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "General"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Reproducción"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "Bajos: "
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "segundos"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "Agudos"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "Duración de pista predeterminada:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "Resampling"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "Habilitar resampling de audio"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "Frecuencia de resampling:"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "SPC"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "Ignorar duración proveniente de las etiquetas SPC"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "Aumentar reverberación"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+"La duración predeterminada de la pista, expresada en segundos, es usada para"
+" pistas que no proveen información de su duracióngth (por ejemplo: pistas de"
+" repetición)."
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "Acerca del Descodificador de Música de Consolas de Juego"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"Motor del descofificador de música de consola basado en Game_Music_Emu 0.5.2.\n"
+"Formatos soportados: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Implementación en Audacious por: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "Acerca de Crossfade"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "Preferencias de Crossfade"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "Encimar (en segundos)"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Error de atenuación cruzada"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+"La atenuación cruzada falló porque las pistas tenían diferente número de "
+"canales."
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+"La atenución cruzada falló porque las pistas tenían frecuencias de muestreo.\n"
+"\n"
+"Puedes usar el efecto Convertidor de Frecuencias de Muestreo para re-muestrear las pistas a la misma frecuencia."
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr "Configurar Cristalizador"
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "Intensidad del efecto"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+"Plugin Echo\n"
+"por Johan Levin, 1999.\n"
+"\n"
+"Eco envolvente por Carl van Schaik, 1999"
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "Acerca del Plugin Echo"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "Configurar Eco"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "Retraso: (ms)"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "Feedback: (%)"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "Volumen: (%)"
+
+#: src/ffaudio/ffaudio-core.c:725
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Plugin de descodificación de audio Multi-formato para Audacious basado en\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Plugin para Audacious por:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+
+#: src/ffaudio/ffaudio-core.c:739
+msgid "About FFaudio Plugin"
+msgstr "Acerca del Plugin FFaudio"
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "Acerca del FileWriter-Plugin"
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "Configuración del Escritor de Archivos"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "Formato del archivo de salida"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "Configurar"
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "Guardar en el directorio original"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "Guardar en un directorio personalizado"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "Carpeta del archivo de salida"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Escoge una carpeta"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Obtener el nombre del archivo desde:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "Etiquetas del archivo original"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "Nombre del archivo original"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "No quitar la extensión del archivo"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Colocar primero el número de pista en el nombre del archivo"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Estéreo Unido"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Estéreo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Monoaural"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "Configuración MP3"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "Calidad del algoritmo"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "Frecuencia de muestrei de salida"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr "(Hz)"
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "Relación de Tasa de bits / Compresión:"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "Tasa de bits (kbps):"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "Tasa de Compresión"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "Modo de audio"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "Misc."
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr "Forzar conformidad ISO estricta"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "Error de protección"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "Calidad"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "Habilitar VBR/ABR"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "Opciones VBR:"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "Tasa de bits mínima (kbps):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "Tasa de bits máxima (kbps):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "Forzar estríctamente tasa de bits mínima"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "Opciones ABR:"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "Tasa de bits promedio (kbps):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "Nivel de calidad VBR:"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "No escribir encabezado VBR Xing"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr "VBR/ABR"
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "Parámetros de cuadro:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "Marcar como copyright"
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "Marcar como original"
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "Parámetros ID3:"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "Forzar adición de etiquetas versión 2"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "Sólo agrega etiqueta v1"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "Sólo agrega etiqueta v2"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "Configuración del codificador Vorbis"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "Nivel de calidad (0-10):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Acerca del plugin de audio FLAC"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+"\n"
+"\n"
+"Código original por\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "Acerca del plugin Atajos Gnome"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Plugin Gnome Shortcut \n"
+"Te permite controlar el reproductor con los atajos de Gnome.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Número de entrada"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Título"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Artista"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Año"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Ãlbum"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Pista"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Posición en cola"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Duración"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Ruta del archivo"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Nombre del archivo"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Título personalizado"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Tasa de bits"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Seleccionar Columnas"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Disponibles:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Seleccionadas"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Dock a la izquierda"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Dock a la derecha"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Dock arriba"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Dock abajo"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Desacoplar"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Dehabilitar"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Abrir archivos..."
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Abrir _URL..."
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "A_gregar archivos..."
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Agregar U_RL..."
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "A_cerca..."
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Preferencias"
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Salir"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Reproducir"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Pa_usa"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Detener"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "_Anterior"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "Siguie_nte"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "Repe_tir"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "A_leatorio"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "_No avanzar Lista de Reprod."
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Detener de_spués de esta pista"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "_Información de pista..."
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Saltar al _tiempo"
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Saltar a la _pista"
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Por _Núm de pista"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Por _Título"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Por_Artista"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Por Ã_lbum"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Por _Fecha de Lanzamiento"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Por _Ruta del Archivo"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Por Título _Personalizado"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "_Invertir Orden"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "O_rden Aleatorio"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "A_ctualizar"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Remover Archivos No _Disponibles"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Ordenar"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nuevo"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Cerrar"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importar..."
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exportar..."
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "Aministrador de _Listas de Reprod..."
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Administrador de _Colas"
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "_Aumentar Volumen"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "_Disminuir Volumen"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Ecualizador"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_fectos"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interfaz"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Visualizaciones"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Mostrar Barra de _Menú"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Mostrar Barra de I_nformación"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Mostrar Barra de E_stado"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Mostrar Encabezados de _Columna"
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Seleccionar _Columnas..."
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Avanzar a_l Cambiar Pista"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Archivo"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Reproducción"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_Lista de Reproducción"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Servicios"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Salida"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Ver"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Formar/Desformar"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "Cor_tar"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Pegar"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Seleccion_ar todo"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Renombrar"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Interfaz GTK"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Almacenando en buffer..."
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Error"
+
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Cerrar"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "monoaural"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "estéreo"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d canal"
+msgstr[1] "%d canales"
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d kbps"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "Pista Anterior"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Reproducir"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Pausa/Continuar"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Detener"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "Siguiente Pista"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "Avanzar 5 Segundos"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "Regresar 5 Segundos"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "Silenciar"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Aumentar Volumen"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Disminuir Volumen"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Saltar al Archivo"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Cambiar Ventanas del Reproductor"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "Mostrar Notificaciones en Pantalla"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Cambiar Repetir"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Cambiar Aleatorio"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(ninguno)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"No se recomienda asociar los botones primarios del ratón sin modificadores.\n"
+"\n"
+"¿Quieres continuar?"
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "Asociat botones del ratón"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "Configuración del Plugin Global Hotkey"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"Presiona una combinación de teclas dentro de un campo de texto.\n"
+"También puedes asociar butones del ratón."
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "Atajos del teclado"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>Acción:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "Asociación de Teclas"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "Acerca del Plugin Global Hotkey"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+"Plugin Global Hotkey\n"
+"Controla el reproductor con combinaciones de teclas o teclas multimedia.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Los que contribuyeron incluyen a:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Conectar a todos los puertos jack disponibles"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Conectar únicamente a los puertos de salida"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "No conectar puertos"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "Configuración del plugin jack"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Modo de conexión:"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Habilitar impresión de mensajes de depuración"
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+"Controlador jack XMMS 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Puerto Audacious por\n"
+"Giacomo Lozito desde develia.org"
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr "Acerca del Plugin de Salida JACK 0.17"
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Acerca del Host LADSPA"
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Ajustes %s"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Ajustes del Host LADSPA"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Rutas de Módulos:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Separar rutas múltiples con dos puntos (:).\n"
+"Esas rutas se utilizan además del LADSPA_PATH.\n"
+"Después de agregar nuevas rutas, presiona Intro para buscar plugins nuevos.</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Plugins disponibles:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Habilitar"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Habilitar plugins"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Ajustes"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Buscándo letras..."
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"Conectándose a lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"No se encontraron letras."
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr "Acerca de Metronom"
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+"Un Generador Tact por Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"Para usarlo, agrega una URL: tact://beats*num/den\n"
+"por ejemplo, tact://77 para reproducir a 77 golpes por minuto\n"
+"o tact://60*3/4 para reproducir 60 bpm en tacts 3/4"
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr "Generador de tact: %d bpm"
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr "Generador de tact: %d bpm %d/%d"
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Acerca de Channel Mixer"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Ajustes de Mezclador de Canales"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Canales de salida:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Los cambios tendrán efecto en el siguiente cambio de pista."
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "Envolvente"
+
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "Carga en progreso..."
+
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Cargar en un dispositivo MTP"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Desconectar dispositivo MTP"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Detenido"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious no está reproduciendo."
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Plugin Null output"
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+" por Christian Birchinger <joker@netswarm.net>\n"
+"basado en el plugin para XMMS plugin de Håvard Kvål <havardk@xmms.org>"
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr "Acerca Null Output"
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "Preferencias de Null output"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "Ejecutar en tiempo real"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. Dispositivo predeterminado"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "Preferencias del Plugin de Salisa OSS4"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Dispositivo de audio:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "Usar dispositivo alterno:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Guardar volumen entre sesiones"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "Habilitar las conversiones de formato hechas por el software OSS."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Habilitar modo exclusivo para prevenir mezclado virtual"
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "Acerca del Plugin OSS4"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "Error OSS4"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "Predeterminado (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "Configuración del Controlador OSS"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Dispositivos"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "Buffering:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "Pre-buffer (percent):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "Buffering"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "Configuraciones del mezclador:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "Volumen controla al Maestro, no al PCM"
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "Mezclador"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "Acerca del Controlador OSS"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "Acerca del plugin Audacious PulseAudio Output"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr "Acerca del plugin Sample Rate Converter"
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr "Preferencias del Convertidor de Frecuencia de Muestreo"
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "Mapas de Frecuencias:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "Todos los demás:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "Método:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "Cambiar contraseña"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>Services</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "Nombre de usuario:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr "URL de Scrobler:"
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr "Last.FM"
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr "Scrobbler"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Plugin AudioScrobbler para Audacious\n"
+"\n"
+"Originalmente creado por Audun Hove <audun@nlc.no> y Pipian <pipian@pipian.com>\n"
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "Acerca del plugin Scrobbler"
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Acerca del plugin de salida SDL"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Error SDL"
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Género"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Librería"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Crear Lista de Reproducción"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Agregar a la Lista de Reproducción"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Buscar librería"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Para importar tu librería de música en Audacious, selecciona una carpeta y "
+"luego haz clic en el ícono \"actualizar\"."
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Por favor espere..."
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Seleccione Carpeta"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "Acerca Skinned GUI"
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+"Copyright (c) 2008, por Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "Re_productor"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Selecciona la fuente de la ventana principal del reproductor:"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "_Lista de Reproducción:"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Selecciona la fuenta de la lista de reproducción:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Fuentes</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Usar fuentes de mapa de bits (únicamente soporta ASCII)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Desplaza el título de la pista en ambas direcciones"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Preferencias de Interfaz"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamplificación"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Ecualizador de Audacious"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Presets"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Cargar preset"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Cargar auto-preset"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Cargar preset del ecualizador"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Guardar preset"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Guardar auto-preset"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Guardar preset del ecualizador"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Borrar preset"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Borrar auto-preset"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "envolvente"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Saltar a %d:%-2.2d / %d:%-2.2d"
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "Volumen: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "Balance: %d%% izquierda"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "Balance: central"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "Balance: %d%% derecha"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "Menú de Opciones"
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "Deshabilitar 'Siempre Encima'"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Habilitar 'Siempre Encima'"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Caja de Información del Archivo"
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Menú de Visualización"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "Modo sencillo."
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "Modo Lista de Reproducción."
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "Detener después de la pista."
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "No detener después de la pista"
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "Desplazamiento automático del Título"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Detener después de la pista actual"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "Picos"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Repetir"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Aleatorio"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "No avanzar Lista de Reproducción"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "Mostrar Reproductor"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "Mostrar Editor de Listas de Reproducción"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "Mostrar Ecualizador"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "Siempre Encima"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "Colocar en TODOS los Espacios de Trabajo"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "Enrollar Reproductor"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "Enrollar Editor de Listas de Resproducción"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "Enrollar Ecualizador"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "Analizador de Espectro"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "Osciloscopio"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "Espectrograma"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "Apagado"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Normal"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "Fuego"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "Líneas verticales"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "Líneas"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "Barras"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "Osciloscopio de Puntos"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "Osciloscopio de Líneas"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "Osciloscopio Sólido"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "Hielo"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Suave"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "Muy lento"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "Lento"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Medio"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Rápido"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "Muy rápido"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "Tiempo Transcurrido"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "Tiempo Faltante"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pausa"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Anterior"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Siguiente"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "visualización"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "Modo de Visualización"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "Analizador de Espectro"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "Osciloscopio "
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "Espectrograma"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "VU WindowShade"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "Caída del analizador"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "Caida del pico"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Lista de Reproducción"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nueva Lista de Reproducción"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "Siguiente Lista de Reproducción"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "Anterior Lista de Reproducción"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Borrar Lista de Reproducción"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Importar Lista de Reproducción"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr ""
+"Carga una lista de reproducción dentro de la lista de reproducción "
+"seleccionada"
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Exportar Lista de Reproducción"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Guardar la Lista de Reproducción seleccionada"
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Actualizar Lista"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+"Actualiza metadatos asociados con una entrada de Lista de Reproducción"
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Administrador de Listas de Reproducción"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Aministrador de Colas"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Ver"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interfaz"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Preferencias de Interfaz..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "Agregar Dirección de Internet..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Agrega una pista remota a la Lista de Reproducción"
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "Agregar Archivos..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Agregar archivos a la Lista de Reproducción"
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Buscar y Seleccionar"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+"Busca la lista de reproducción y selecciona las entradas basado en criterios"
+" específicos."
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "Invertir Selección"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr "Invierte las entradas seleccionadas y no seleccionadas."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Selecciona Todo"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Selecciona todas las entradas de la Lista de Reproducción."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Selecciona ninguno"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Quita la selección de todas las entradas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Quitar Todo"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Quita todas las entradas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "Limpiar Cola de reproducción"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr "Limpia la cola asociada con esta lista de reproducción."
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "Remueve los Archivos No Disponibles"
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr "Remueve los archivos no disponibles de la lista de reproducción."
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "Remover Duplicados"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Por Título"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr ""
+"Remueve las entradas duplicadas de la lista de reproducción por título."
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "Por Nombre de Archivo"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr ""
+"Remueve las entradas duplicadas de la lista de reproducción por nombre de "
+"archivo."
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "Por Ruta + Nombre de archivo"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr ""
+"Remueve las entradas duplicadas de la lista de reproducción por su ruta "
+"completa."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Remover No Seleccionados"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Remueve las entradas no seleccionadas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Remover Seleccionados"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Remueve las entradas seleccionadas de la lista de reproducción."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Aleatorizar Lista"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Aleatoriza la lista de reproducción."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Invertir Lista"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "Invierte el orden de la lista de reproducción."
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Ordenar Lista"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr "Ordena la lista de reproducción por título."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Por Ãlbum"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr "Ordena la lista de reproducción por álbum."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Por Artista"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr "Ordena la lista de reproducción por Artista."
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr "Ordena la lista de reproducción por nombre de archivo."
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr "Ordena la lista de reproducción por ruta completa."
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "Por Fecha"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr "Ordena la lista de reproducción por hora de modificación."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Por Número de Pista"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr "Ordena la lista de reproducción por número de pista."
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "Ordenar Seleccionado"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Archivo"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "Servicios de Plugin"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Ver Detaller de la Pista"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Ver detalles de la pista"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Acerca de Audacious"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "Reproducir Archivo"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Cargar y reproducir un archivo"
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "Reproducir Dirección"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Reproducir medios desde la dirección seleccionada"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Servicios de plugin"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Abrir ventana de preferencias"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Salir de Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Ajusta A-b"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Limpiar A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Saltar al tiempo"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Cambiar Cola"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+"Habilita/deshabilita la entrada en la cola de la lista de reproducción."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Pegar"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "Cargar"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importar"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Guardar"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Borrar"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Preset"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "Auto cargar preset"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "Cargar preset auto-load"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "Cargar preset determinado en el ecualizador"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "Cero"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "Ajustar niveles preset del ecualizador a cero"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "Desde archivo"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "Cargar preset desde un archivo"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "Desde archivo WinAMP EQF"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "Cargar preset desde archivo WinAMP EQF"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "Presets WinAMP"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "Importar presets WinAMP"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "Guardar preset auto-load"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "guardar preset predeterminado"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "En archivo"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "Guardar preset en archivo"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "En archivo WinAMP EQF"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "Guardar present en archivo WinAMP EQF"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "Borrar preset auto-load"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr "Buscar entradas en la lista de reproducción activa"
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+"Selecciona entradas en la lista de reproducción llenando uno o más campos. "
+"Los campos usan la sintaxis de expresiones regulares, mayúsculas o "
+"minísculas indiscriminadas. Si no sabes como trabajan las expresiones "
+"regulares, simplemente inserta una porción literal de lo que buscas."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Título: "
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "Ãlbum: "
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "Artista: "
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "Nombre de Archivo: "
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr "Limpiar selección previa antes de buscar"
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr "Cambiar automáticamente la cola para las entradas coincidentes"
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr "Crear una nueva lista de reproducción con las entradas coincidentes"
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr "Editor de Listas de Reproducción de Audacious"
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d de %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "Skin de Winamp 2.x comprimida"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "Skin de winamp 2.x sin comprimir"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "No se puede crear el directorio (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr "Acerca del plugin sndfile"
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "Acerca de SndStretch"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "Corr. volumen"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "Encimado corto"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Velocidad"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "Tono"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Escala"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "SndStretch - Configuración"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "Comando para ejecutar cuando Audacious comience una nueva pista."
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr "Comando:"
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "Comando para ejecutar al final de una pista."
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr ""
+"Comando para ejecutar cuando Audacious alcance el final de una lista de "
+"reproducción."
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+"Comando para ejecutar cuando el título de una pista cambie (por ejemplo, "
+"títulos de flujos de red)."
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Puedes usar las siguientes cadena de formato las cuales\n"
+"serán sustituidas antes de llamar al comando\n"
+"(no todas son útiles para el comando al finalizar la lista de reproducción).\n"
+"\n"
+"%F: Frecuencia (en hertz)\n"
+"%c: Número de canales\n"
+"%f: nombre del archivo (ruta completa)\n"
+"%l: duración (en milisegundos)\n"
+"%n ó %s: Nombre de la Pista\n"
+"%r: Tasa (en bits por segundo)\n"
+"%t: Posición en la Lista de Reproducción (%02d)\n"
+"%p: Reproduciendo actualmente (1 ó 0)\n"
+"%a: Artista\n"
+"%b: Ãlbum\n"
+"%T: Título de la Pista"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>Parámetros enviados al shell deberán ser encapsulados en "
+"apóstrofes. Hacer otra cosa es un riesgo de seguridad.</span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "Comandos"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr "Cambiar Pista"
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "Acerca del plugin de Icono de Estado"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+"Plugin Status Icon\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"Este plugin provee un ícono de estado colocado en\n"
+"el área de la bandeja del sistema del administrador de ventanas.\n"
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "Status Icon Plugin - Preferencias"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "Menú con Clic Derecho"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "Menú pequeño de reproducción #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "Menú pequeño de reproducción #2"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "Acción con la Rueda del Ratón"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "Cambiar volumen"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "Cambiar pista en reproducción"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Otros ajustes"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Deshabilitar la ventana emergente"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Cerrar al área de notificación (bandeja del sistema)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Avanzar en la lista de reproducción cuando se desplace hacía arriba"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+"plugin Extra Stereo\n"
+"\n"
+"Por Johan Levin, 1999."
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "Acerca del plugin Extra Stereo"
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "Configurar Extra Stereo"
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr "Acerca de Tone Generator"
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+"Generador de tonos sinusoidales por Haavard Kvaalen <havardk@xmms.org>\n"
+"Modificado por Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"Para usarlo, agrega una URL: tone://frecuencia1;frecuencia2;frecuencia3;...\n"
+"por ejemplo, tone://2000;2005 para reproducir un tono de 2000Hz y un tono de 2005Hz"
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Hz"
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr "Generador de tonos: "
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Acerca del plugin File I/O"
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Acerca del plugin Ogg Vorbis Audio"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Plugin Ogg Vorbis por la Fundación Xiph.org\n"
+"\n"
+"Código original por\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributiones de\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visita la Fundación Xiph.org Foundation en http://www.xiph.org/\n"
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr "Acerca del Reproducción Vortex"
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+"Reproductor de archivos en formato Vortex por Sashnov Alexander <sashnov@ngs.ru>\n"
+"Fundamentado en el código fuente original in_vtx.dll por Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"La música en formato vtx puede ser encontrada en http://vtx.microfor.ru/music.htm\n"
+"y otros sitios de música AY/YM.\n"
+"\n"
+"Implementación en Audacious por Pavel Vymetalek <pvymetalek@seznam.cz>"
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr "Plugin Descodificador Wavpack %s"
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"Copyright (c) 2006 William Pitcock <nenolod -en- nenolod.net>\n"
+"\n"
+"Algo del código del plugin code fue por Miles Egan\n"
+"Visita el sitio Wavpack en http://www.wavpack.com/\n"
+
+
diff --git a/po/et.po b/po/et.po
index d2d62f3..c79e227 100644
--- a/po/et.po
+++ b/po/et.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins 1.4.2\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2007-12-30 17:49+0200\n"
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
"Language-Team: Estonian <et@li.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -25,541 +25,55 @@ msgid ""
"Copyright (c) 2005-2006 Audacious team"
msgstr ""
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "MP4 AAC esituspluginast lähemalt"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug'i sätted"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Olgu"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Loobu"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Ãœldine"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Helikvaliteet"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8-bitine"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16-bitine"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Kanaleid"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Sagedus"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Esitamine"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Loo lõpp tuvastatakse"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Vormingud"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Vormingute valimine"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Vorming"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Laiend"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Failinimi"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Pealkiri: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Faili tüüp: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumendid: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Mustrid: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Instrumendi nimi"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Loo sõnum"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Muster: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Kiirus: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "XMMS-alarmist lähemalt"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS-alarm"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"XMMS-plugin, mida saab kasutada esitamise\n"
-"alustamiseks kindlaksmääratud ajal.\n"
-"\n"
-"Kaebused paluks saata aadressidele:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Sulge"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "Alarm"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "See on sinu äratus."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "Olgu"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Esitusnimekirja valimine"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Vabandust"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Hoiatus"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr ""
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "Alarmi sätted"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "Aeg"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "tundi"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "t"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr "minutit"
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "Vait pärast:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "Alarmi aeg (vaikimisi):"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "Alarmi töölehakkamise päevade valimine"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "Vaikimisi"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "Päev"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "Teisipäeval"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "Kolmapäeval"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "Neljapäeval"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "Reedel"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "Laupäeval"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "Pühapäeval"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "Esmaspäeval"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "Päevad"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "Kahanemine"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-msgid "seconds"
-msgstr "sekundit"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-msgid "Volume"
-msgstr "Valjus"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr "Praegune"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr ""
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr "Alguses"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "Lõpus"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "Täiendav käsk"
-
-#: src/alarm/interface.c:1253
-msgid "enable"
-msgstr "lubatud"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr "Esitusnimekiri (valikuline)"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "Sirvi..."
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr "Meeldetuletaja"
-
-#: src/alarm/interface.c:1312
-msgid "Use reminder"
-msgstr "Meeldetuletaja on kasutusel"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-msgid "Options"
-msgstr "Valikud"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "Mida need valikud tähendavad?"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "Abi"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr ""
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr ""
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "Vaikimisi PCM-seade (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "Vaikimisi PCM-seade (%s)"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "Olekuikooni plugina eelistused"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "Miksimisseade:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Miksimisseade:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "Miksimisseade:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "JACK väljundplugina versioonist 0.17 lähemalt"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
#, fuzzy
msgid "ALSA error"
msgstr "Viga!"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -581,11 +95,11 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -595,367 +109,205 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Helikaart: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Mikseri juhtimine: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Mikseri sätted"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Esituse sätted"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Laiendatud sätted"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr ""
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Failinimi"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Süntesaatori sätted"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -977,8 +329,7 @@ msgstr ""
"<span size=\"smaller\">TiMidity\n"
"taustaprogramm</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Nimi:"
@@ -1124,198 +475,198 @@ msgstr "Pausi lõpetamine"
msgid "Triggers OSD when playback is unpaused."
msgstr ""
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "Paigutamine"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "Suhteline X-nihe:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "Suhteline Y-nihe:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "Suurim OSD laius:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "Mitme monitori valikud"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "OSD-d kuvatakse:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "kõigil monitoridel"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "%i. monitoril"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "Ajastus (millisekundites)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "Kuvamine:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "Sujuv näitamine:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "Sujuv peitmine:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "Kirjatüübid"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "Kirjatüüp %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "Vari"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr ""
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr ""
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr ""
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "Renderdamise laad"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Värvused"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "Värvus %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr ""
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr ""
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr ""
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Päästik on lubatud"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Sündmus"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr ""
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
"manager otherwise the OSD won't work properly"
msgstr ""
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Läbipaistvus"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Võltsitud läbipaistvus"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Tegelik läbipaistvus (vajab X Composite laiendust)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr ""
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr ""
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr ""
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr ""
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Proovi"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Asukoht"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "Animatsioon"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Tekst"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Kaunistused"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "Päästikud"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr "Muu"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr ""
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
msgstr ""
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1328,131 +679,6 @@ msgid ""
"\n"
msgstr ""
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr ""
-
-#: src/bluetooth/gui.c:224
-#, fuzzy
-msgid "Current Headset"
-msgstr "Praegune"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr ""
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "Asukoht:"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "Sulge"
-
-#: src/bluetooth/gui.c:274
-#, fuzzy
-msgid "Class"
-msgstr "Sulge"
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "Seadme aadress"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-#, fuzzy
-msgid "Play"
-msgstr "Esitamine"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr ""
@@ -1461,12 +687,12 @@ msgstr ""
msgid "Options:"
msgstr "Valikud:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "FLAC audiopluginast lähemalt"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
#, fuzzy
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
@@ -1491,127 +717,161 @@ msgstr ""
"\n"
"See projekt loodi Google Summer of Code 2007 raames."
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+msgid "Audio CD"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Audioplaatide plugina sätted"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Digitaalne audiolugemine"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Pealkirja andmed"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr ""
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Võimaluse korral kasutatakse cd-teksti"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Võimaluse korral kasutatakse CDDB-d"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Server: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
#, fuzzy
msgid "Path: "
msgstr "Muster: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr ""
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Vaikimisi seadme asemel kasutatakse: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "Olgu"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Loobu"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "Esitamine"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Lisa CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "Ekstra stereo pluginast lähemalt"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
msgid "Dynamic Range Compressor Preferences"
msgstr ""
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "Muudetakse valjust"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Efektid"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
#, fuzzy
msgid "Game Console Music Decoder"
msgstr "Console Music Decoder pluginast lähemalt"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "Ãœldine"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Esitamine"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr ""
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr ""
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr ""
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr ""
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr ""
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr ""
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr ""
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr ""
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr ""
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr ""
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1630,30 +890,30 @@ msgid ""
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "Kajapluginast lähemalt"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
msgid "Crossfade Preferences"
msgstr ""
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "ModPlug'i sätted"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1661,21 +921,25 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
#, fuzzy
msgid "Configure Crystalizer"
msgstr "Seadista..."
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr ""
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "Rakenda"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1687,358 +951,52 @@ msgstr ""
"\n"
"Surround-kaja autor: Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Kajapluginast lähemalt"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "Kaja seadistamine"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "Viivitus (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr ""
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "Valjus: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr ""
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr ""
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr ""
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr ""
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr ""
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr ""
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr ""
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr ""
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr ""
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr ""
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr ""
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr ""
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "Loo lõpp tuvastatakse"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:223
-#, fuzzy
-msgid "Not Detected"
-msgstr "Vormingute valimine"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Seadne nimi:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Seadmefail:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktiivne"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Olek"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Seadme nimi"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Seadmefail"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Seadme aadress"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Nimi: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Failinimi: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "FLAC audiopluginast lähemalt"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
msgid "About FileWriter-Plugin"
msgstr "FailiKirjutaja pluginast lähemalt"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2074,243 +1032,208 @@ msgstr ""
"programmiga; kui ei, siis võtke ühendust Free Software Foundation'iga,\n"
"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
msgid "File Writer Configuration"
msgstr "Failikirjutaja sätted"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
msgid "Output file format:"
msgstr "Väljundfaili vorming:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "Seadista..."
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "Salvestatakse algkataloogi"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "Salvestatakse kohandatud kataloogi"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "Väljundkataloog:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Kataloogi valimine"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr "Failinimi tuletatakse lähtefaili:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr "siltidest"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr "nimest"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "Algse faili laiendit maha ei lõigata"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
+#: src/filewriter/filewriter.c:567
+msgid "Prepend track number to filename"
msgstr ""
-#: src/filewriter/filewriter.c:588
-msgid "Prepend track number to filename"
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+msgid "Auto"
msgstr ""
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:724
msgid "MP3 Configuration"
msgstr "MP3 sätted"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr "Algoritmi kvaliteet:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"parim/aeglaseim:0;\n"
-"halvim/kiireim:9;\n"
-"soovitatav:2;\n"
-"vaikimisi:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
msgid "Output Samplerate:"
msgstr ""
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr ""
-
#: src/filewriter/mp3.c:800
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr "Bitikiirus / pakkimistihedus:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "Bitikiirus (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
msgid "Audio Mode:"
msgstr ""
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr ""
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr ""
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr ""
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
msgid "Error protection"
msgstr ""
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr "Kvaliteet"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr ""
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr "Liik:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Muutuv bitikiirus"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Keskmine bitikiirus"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
msgid "VBR Options:"
msgstr ""
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "Vähim bitikiirus (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "Suurim bitikiirus (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr ""
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
msgid "ABR Options:"
msgstr ""
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr "Keskmine bitikiirus (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr ""
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr ""
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr ""
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr ""
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr ""
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr ""
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr ""
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr ""
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr ""
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Vorbis-kodeerija sätted"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "Kvaliteedi tase (0-10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC audioplugin "
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "FLAC audiopluginast lähemalt"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2326,15 +1249,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "FLAC audiopluginast lähemalt"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Gnome kiirklahvide pluginast lähemalt"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
#, fuzzy
msgid ""
"Gnome Shortcut Plugin\n"
@@ -2349,511 +1268,492 @@ msgstr ""
"Autoriõigused (C) 2007 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "Failinimi"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "%s - Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "Loo number:"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr ""
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "Pealkiri"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "minutes:seconds"
-msgstr "minutit"
+msgid "Artist"
+msgstr "Esitaja:"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Track length:"
-msgstr "Loo number:"
+msgid "Year"
+msgstr "Aasta:"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr ""
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Album"
+msgstr "Album:"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
+#: src/gtkui/columns.c:37
+msgid "Track"
msgstr ""
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Export Playlist"
-msgstr "Esitusnimekirja andmed kiiresti"
+msgid "Queue position"
+msgstr "Asukoht"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Import Playlist"
-msgstr "Esitusnimekirja andmed kiiresti"
-
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
+msgid "Length"
+msgstr "Kestus:"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File path"
+msgstr "Failinimi"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Audacious"
-msgstr "%s - Audacious"
+msgid "File name"
+msgstr "Failinimi"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
msgstr ""
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr ""
+#: src/gtkui/columns.c:39
+#, fuzzy
+msgid "Bitrate"
+msgstr "Bitikiirus:"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
+#: src/gtkui/columns.c:286
+msgid "Choose Columns"
msgstr ""
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
+#: src/gtkui/columns.c:300
+msgid "Available:"
msgstr ""
-#: src/gtkui/ui_manager.c:47
-#, fuzzy
-msgid "Show playlists"
-msgstr "Esitusnimekirja valimine"
-
-#: src/gtkui/ui_manager.c:48
-#, fuzzy
-msgid "Show/hide playlists"
-msgstr "Esitusnimekirja valimine"
-
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
msgstr ""
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
msgstr ""
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
msgstr ""
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
msgstr ""
-#: src/gtkui/ui_manager.c:56
-#, fuzzy
-msgid "Show statusbar"
-msgstr "Olek"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr ""
-#: src/gtkui/ui_manager.c:57
-#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Esitusnimekirja valimine"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr ""
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Pause"
-msgstr "Pausimine"
+msgid "Disable"
+msgstr "lubatud"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
+#: src/gtkui/menus.c:132
#, fuzzy
-msgid "Stop"
-msgstr "Stereo"
+msgid "_Open Files ..."
+msgstr "Failinimi"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
+#: src/gtkui/menus.c:133
+msgid "Open _URL ..."
msgstr ""
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
+#: src/gtkui/menus.c:134
#, fuzzy
-msgid "Next"
-msgstr "Tekst"
-
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-#, fuzzy
-msgid "Playlist"
-msgstr "Esitusnimekirja valimine"
-
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-#, fuzzy
-msgid "New Playlist"
-msgstr "Esitusnimekirja valimine"
+msgid "_Add File ..."
+msgstr "Failinimi"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Delete Playlist"
-msgstr "Esitusnimekirja valimine"
+msgid "Add U_RL ..."
+msgstr "Failinimi"
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/menus.c:137
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Esitusnimekirja andmed kiiresti"
+msgid "A_bout ..."
+msgstr "\"%s\" pluginast lähemalt"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
+#: src/gtkui/menus.c:138
+msgid "_Preferences ..."
msgstr ""
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Esitusnimekirja andmed kiiresti"
+msgid "_Quit"
+msgstr "Kvaliteet"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Saves the selected playlist."
-msgstr "Esitusnimekirja valimine"
+msgid "_Play"
+msgstr "Esitamine"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:143
#, fuzzy
-msgid "Save All Playlists"
-msgstr "Esitusnimekirja valimine"
-
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr ""
+msgid "Paus_e"
+msgstr "Pausimine"
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:144
#, fuzzy
-msgid "Playlist Manager"
-msgstr "Esitusnimekirja valimine"
+msgid "_Stop"
+msgstr "Stereo"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
+#: src/gtkui/menus.c:145
+msgid "Pre_vious"
msgstr ""
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr ""
+#: src/gtkui/menus.c:146
+#, fuzzy
+msgid "_Next"
+msgstr "Tekst"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
+#: src/gtkui/menus.c:148
+msgid "_Repeat"
msgstr ""
-#: src/gtkui/ui_manager.c:115
-#, fuzzy
-msgid "Add Files ..."
-msgstr "Failinimi"
-
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
+#: src/gtkui/menus.c:149
+msgid "S_huffle"
msgstr ""
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
+#: src/gtkui/menus.c:150
#, fuzzy
-msgid "Remove All"
-msgstr "Eemalda"
+msgid "N_o Playlist Advance"
+msgstr "Esitusnimekirja valimine"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
+#: src/gtkui/menus.c:151
+msgid "Stop _After This Song"
msgstr ""
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
msgstr ""
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
+#: src/gtkui/menus.c:154
+msgid "Jump to _Time ..."
msgstr ""
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
msgstr ""
-#: src/gtkui/ui_manager.c:131
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "Sort"
-msgstr "Vabandust"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-#, fuzzy
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "Loo number:"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
+#: src/gtkui/menus.c:159
#, fuzzy
-msgid "By Title"
+msgid "By _Title"
msgstr "Pealkiri"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
+#: src/gtkui/menus.c:160
#, fuzzy
-msgid "By Artist"
+msgid "By _Artist"
msgstr "Esitaja:"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "Album:"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
+#, fuzzy
+msgid "By Release _Date"
+msgstr "Kuupäev:"
+
+#: src/gtkui/menus.c:163
#, fuzzy
-msgid "By File Path"
+msgid "By _File Path"
msgstr "Failinimi"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr ""
+#: src/gtkui/menus.c:164
+#, fuzzy
+msgid "By _Custom Title"
+msgstr "Pealkiri"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
+#: src/gtkui/menus.c:166
+msgid "R_everse Order"
msgstr ""
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efektid"
-
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
+#: src/gtkui/menus.c:167
+msgid "_Random Order"
msgstr ""
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
+msgid "_Refresh"
msgstr ""
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
+#: src/gtkui/menus.c:172
+#, fuzzy
+msgid "_Sort"
+msgstr "Vabandust"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
+#: src/gtkui/menus.c:175
#, fuzzy
-msgid "File"
-msgstr "Failinimi"
+msgid "_Close"
+msgstr "Sulge"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "Components"
-msgstr "Kommentaar:"
+msgid "_Import ..."
+msgstr "Esitusnimekirja andmed kiiresti"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr ""
+#: src/gtkui/menus.c:178
+#, fuzzy
+msgid "_Export ..."
+msgstr "Esitusnimekirja andmed kiiresti"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr ""
+#: src/gtkui/menus.c:180
+#, fuzzy
+msgid "_Playlist Manager ..."
+msgstr "Esitusnimekirja valimine"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
+#: src/gtkui/menus.c:183
#, fuzzy
-msgid "About Audacious"
-msgstr "Audacious'e LIRC pluginast lähemalt"
+msgid "Volume _Up"
+msgstr "Valjus"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr ""
+#: src/gtkui/menus.c:184
+#, fuzzy
+msgid "Volume _Down"
+msgstr "Valjus"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
+#: src/gtkui/menus.c:186
+msgid "_Equalizer"
msgstr ""
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:188
+#, fuzzy
+msgid "E_ffects"
+msgstr "Efektid"
+
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "Olek"
+
+#: src/gtkui/menus.c:197
+msgid "Show Column _Headers"
msgstr ""
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
+#: src/gtkui/menus.c:198
+msgid "Choose _Columns ..."
msgstr ""
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
+#: src/gtkui/menus.c:199
#, fuzzy
-msgid "_Quit"
-msgstr "Kvaliteet"
+msgid "Scrol_l on Song Change"
+msgstr "Loo sõnum"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
+#: src/gtkui/menus.c:202
#, fuzzy
-msgid "Quit Audacious"
-msgstr "%s - Audacious"
+msgid "_File"
+msgstr "Failinimi"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr ""
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "Esitamine"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr ""
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "Esitusnimekirja valimine"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr ""
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "Seadmed"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
+#: src/gtkui/menus.c:206
+msgid "_Output"
msgstr ""
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
+#: src/gtkui/menus.c:207
+msgid "_View"
msgstr ""
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "Praegune"
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
+#: src/gtkui/menus.c:216
+msgid "_Paste"
msgstr ""
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
+#: src/gtkui/menus.c:217
#, fuzzy
-msgid "Select All"
+msgid "Select _All"
msgstr "Esitusnimekirja valimine"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
+#: src/gtkui/menus.c:222
+#, fuzzy
+msgid "_Rename"
+msgstr "Failinimi"
+
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
#, fuzzy
-msgid "Select None"
-msgstr "Loo lõpp tuvastatakse"
+msgid "Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
msgstr ""
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
#, fuzzy
msgid "mono"
msgstr "Mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
#, fuzzy
msgid "stereo"
msgstr "Stereo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Kanaleid"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "Kanaleid"
+msgstr[1] "Kanaleid"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr ""
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+#, fuzzy
+msgid "Play"
+msgstr "Esitamine"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr ""
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+#, fuzzy
+msgid "Stop"
+msgstr "Stereo"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr ""
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr ""
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr ""
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr ""
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
#, fuzzy
msgid "Volume Up"
msgstr "Valjus"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
#, fuzzy
msgid "Volume Down"
msgstr "Valjus"
-#: src/hotkey/gui.c:81
-msgid "Toggle Player Windows"
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+msgid "Jump to File"
msgstr ""
#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr ""
+
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr ""
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr ""
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr ""
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr ""
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -2861,39 +1761,39 @@ msgid ""
"Do you want to continue?"
msgstr ""
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr ""
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr ""
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr ""
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
#, fuzzy
msgid "Hotkeys:"
msgstr "Host:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
#, fuzzy
msgid "<b>Action:</b>"
msgstr "<b>Failinimi: </b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr ""
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr ""
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2933,7 +1833,7 @@ msgstr ""
msgid "Enable debug printing"
msgstr ""
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2944,121 +1844,20 @@ msgid ""
"Giacomo Lozito from develia.org"
msgstr ""
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "JACK väljundplugina versioonist 0.17 lähemalt"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr ""
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Nimi"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Paigaldatud pluginad"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Töötavad pluginad"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Lisa"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Eemalda"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA pluginate kataloog"
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "Audacious'e LIRC pluginast lähemalt"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr ""
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr ""
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr ""
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr ""
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr ""
-
-#: src/lirc/interface.c:79
-#, fuzzy
-msgid "Connection"
-msgstr "Asukoht:"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr ""
-
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr ""
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr ""
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr ""
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3067,11 +1866,11 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "Metronoomist lähemalt"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3080,281 +1879,61 @@ msgid ""
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Taktigeneraator: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Taktigeneraator: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug'i sätted"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16-bitine"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8-bitine"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
+#: src/mpg123/mpg123.c:183
+msgid "Surround"
msgstr ""
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
msgstr ""
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
msgstr ""
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
msgstr ""
-#: src/modplug/gui/interface.cxx:286
+#: src/notify/libnotify-aosd_event.c:47
#, fuzzy
-msgid "96 kHz"
-msgstr "44 kHz"
+msgid "Stopped"
+msgstr "Stereo"
-#: src/modplug/gui/interface.cxx:293
+#: src/notify/libnotify-aosd_event.c:47
#, fuzzy
-msgid "48 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Diskreetimissagedus"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Lubatud"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Sügavus"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Viivitus"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
-msgid "Surround"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Failinime kasutatakse pealkirjaks"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
+msgid "Audacious is not playing."
msgstr "Esitusnimekirja andmed kiiresti"
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Müra vähendatakse"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Esitatakse Amiga MOD-e"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Ei korrata"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Korratakse"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "kord(a)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Korratakse igavesti"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Kordamine"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD-i andmed"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Failinimi:\n"
-"Pealkiri:\n"
-"Liik:\n"
-"Kestus:\n"
-"Kiirus:\n"
-"Tempo:\n"
-"Sämpleid:\n"
-"Instrumente:\n"
-"Mustreid:\n"
-"Kanaleid:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Sämplid"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Instrumendid"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Sõnum"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:52
-#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Modplug helimootor, autor: Olivier Lapicque.\n"
-"Modplug'i XMMS-liidese autor: Kenton Varda.\n"
-"Autoriõigused (c) 2000 Olivier Lapicque ja Kenton Varda.\n"
-"Uuendused ja hooldus: Konstanty Bialkowski.\n"
-"BMP jaoks portinud Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Modplug'ist lähemalt"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr ""
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr ""
-
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr ""
-
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
-
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr ""
-
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr ""
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Nullväljundist lähemalt"
-#: src/null/null.c:93
+#: src/null/null.c:94
msgid "Null output preferences"
msgstr "Nullväljundi eelistused"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr ""
@@ -3368,11 +1947,11 @@ msgstr "Vaikimisi PCM-seade (%s)"
msgid "OSS4 Output Plugin Preferences"
msgstr "Olekuikooni plugina eelistused"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "Audioseade:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "Kasutatakse alternatiivseadet:"
@@ -3384,12 +1963,12 @@ msgstr ""
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "ESounD'i pluginast lähemalt"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3432,40 +2011,45 @@ msgstr ""
msgid "OSS4 error"
msgstr "Viga!"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "Vaikimisi (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "Vaikimisi"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "OSS draiveri sätted"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "Seadmed"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "Puhverdamine:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "Eelpuhver (protsentides):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "Puhverdamine"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "Mikseri sätted"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr ""
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "Mikser"
@@ -3508,11 +2092,11 @@ msgstr ""
"programmiga; kui ei, siis võtke ühendust Free Software Foundation'iga,\n"
"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Audacious'e PulseAudio väljundpluginast lähemalt"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
msgid ""
"Audacious PulseAudio Output Plugin\n"
"\n"
@@ -3547,53 +2131,53 @@ msgstr ""
"programmiga; kui ei, siis võtke ühendust Free Software Foundation'iga,\n"
"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "Olekuikooni pluginast lähemalt"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
#, fuzzy
msgid "Change password"
msgstr "Vahetatakse esitatavat lugu"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>Teenused</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "Kasutajanimi:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "Parool:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
msgid "Scrobbler URL:"
msgstr ""
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
msgid "Scrobbler"
msgstr ""
@@ -3609,16 +2193,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr ""
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "JACK väljundplugina versioonist 0.17 lähemalt"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "Viga!"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "\"%s\" pluginast lähemalt"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "Sulge"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "Viga!"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "Olgu"
+
#: src/sid/xs_fileinfo.c:151
msgid "General info"
msgstr "Ãœldandmed"
@@ -3628,6 +2230,11 @@ msgstr "Ãœldandmed"
msgid "Tune #%i: "
msgstr ""
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr ""
+
#: src/sid/xs_interface.c:234
msgid "Audacious-SID configuration"
msgstr ""
@@ -3902,15 +2509,15 @@ msgstr ""
msgid "Use"
msgstr ""
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
msgid "Save"
msgstr ""
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
msgid "Import"
msgstr ""
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
msgid "Delete"
msgstr ""
@@ -3941,6 +2548,11 @@ msgstr ""
msgid "Playtime:"
msgstr ""
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+msgid "seconds"
+msgstr "sekundit"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr ""
@@ -4031,10 +2643,6 @@ msgstr ""
msgid "Song title format:"
msgstr ""
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Pealkiri"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr ""
@@ -4176,704 +2784,874 @@ msgstr ""
msgid "No"
msgstr ""
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr ""
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
#, fuzzy
msgid "_Player:"
msgstr "Esitamine"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr ""
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "_Playlist:"
msgstr "Esitusnimekirja valimine"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "Select playlist font:"
msgstr "Esitusnimekirja valimine"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
#, fuzzy
msgid "<b>_Fonts</b>"
msgstr "<b>Failinimi: </b>"
-#: src/skins/skins_cfg.c:323
-#, fuzzy
-msgid "Use Bitmap fonts if available"
-msgstr "Võimaluse korral kasutatakse CDDB-d"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-
-#: src/skins/skins_cfg.c:324
-#, fuzzy
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>Teenused</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
msgstr ""
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr ""
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr ""
+#: src/skins/skins_cfg.c:346
+#, fuzzy
+msgid "<b>_Skin</b>"
+msgstr "<b>Failinimi: </b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
+#: src/skins/skins_cfg.c:393
+msgid "Interface Preferences"
msgstr ""
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
msgstr ""
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "22050 Hz "
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:417
+#: src/skins/ui_equalizer.c:335
#, fuzzy
-msgid "Blue"
-msgstr "Valjus"
+msgid "1 kHz"
+msgstr "11 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:569
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "<b>_Skin</b>"
-msgstr "<b>Failinimi: </b>"
+msgid "8 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "16 kHz"
+msgstr "44 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
msgid "Audacious Equalizer"
msgstr ""
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr ""
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
#, fuzzy
msgid "surround"
msgstr "Surround-kaja"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr ""
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr ""
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr ""
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr ""
-
-#: src/skins/ui_main.c:1050
+#: src/skins/ui_main.c:807
#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr ""
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr ""
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr ""
-
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, fuzzy, c-format
msgid "Volume: %d%%"
msgstr "Valjus: (%)"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr ""
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr ""
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr ""
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
#, fuzzy
msgid "Options Menu"
msgstr "Valikud"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
#, fuzzy
msgid "File Info Box"
msgstr "Faili andmed"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr ""
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr ""
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr ""
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "Esitusnimekirja valimine"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
msgid "Stopping after song."
msgstr ""
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr ""
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr ""
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr ""
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr ""
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr ""
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr ""
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr ""
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr ""
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr ""
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr ""
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr ""
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr ""
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr ""
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr ""
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr ""
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr ""
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
#, fuzzy
msgid "Scope"
msgstr "Stereo"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr ""
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr ""
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
#, fuzzy
msgid "Normal"
msgstr "Vorming"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr ""
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr ""
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
#, fuzzy
msgid "Lines"
msgstr "minutit"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr ""
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
#, fuzzy
msgid "Dot Scope"
msgstr "Ei korrata"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr ""
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr ""
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr ""
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr ""
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr ""
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
#, fuzzy
msgid "Slow"
msgstr "Vari"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr ""
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
#, fuzzy
msgid "Fast"
msgstr "Vorming"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr ""
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr ""
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr ""
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+#, fuzzy
+msgid "Pause"
+msgstr "Pausimine"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr ""
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+#, fuzzy
+msgid "Next"
+msgstr "Tekst"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr ""
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr ""
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr ""
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr ""
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr ""
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr ""
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr ""
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr ""
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+#, fuzzy
+msgid "Playlist"
+msgstr "Esitusnimekirja valimine"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+#, fuzzy
+msgid "New Playlist"
+msgstr "Esitusnimekirja valimine"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
#, fuzzy
msgid "Select Next Playlist"
msgstr "Esitusnimekirja valimine"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
#, fuzzy
msgid "Select Previous Playlist"
msgstr "Esitusnimekirja valimine"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+#, fuzzy
+msgid "Delete Playlist"
+msgstr "Esitusnimekirja valimine"
+
#: src/skins/ui_manager.c:222
-msgid "Refresh List"
+#, fuzzy
+msgid "Import Playlist"
+msgstr "Esitusnimekirja andmed kiiresti"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
msgstr ""
#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "Esitusnimekirja andmed kiiresti"
+
+#: src/skins/ui_manager.c:227
+#, fuzzy
+msgid "Saves the selected playlist."
+msgstr "Esitusnimekirja valimine"
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "Esitusnimekirja valimine"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
+msgid "Refresh List"
+msgstr ""
+
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr ""
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr ""
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr ""
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+msgid "Interface Preferences ..."
+msgstr ""
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr ""
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr ""
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr ""
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
#, fuzzy
msgid "Invert Selection"
msgstr "Vormingute valimine"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr ""
+#: src/skins/ui_manager.c:267
+#, fuzzy
+msgid "Select All"
+msgstr "Esitusnimekirja valimine"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:271
+#, fuzzy
+msgid "Select None"
+msgstr "Loo lõpp tuvastatakse"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:277
+#, fuzzy
+msgid "Remove All"
+msgstr "Eemalda"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr ""
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr ""
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr ""
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr ""
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+#, fuzzy
+msgid "By Title"
+msgstr "Pealkiri"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr ""
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
#, fuzzy
msgid "By Filename"
msgstr "Failinimi"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
#, fuzzy
msgid "By Path + Filename"
msgstr "Failinimi"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr ""
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr ""
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:313
+msgid "Randomize List"
+msgstr ""
+
+#: src/skins/ui_manager.c:314
+#, fuzzy
+msgid "Randomizes the playlist."
+msgstr "Esitusnimekirja valimine"
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr ""
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr ""
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
#, fuzzy
msgid "Sort List"
msgstr "Esitaja:"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr ""
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "Album:"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
msgid "Sorts the list by album."
msgstr ""
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#, fuzzy
+msgid "By Artist"
+msgstr "Esitaja:"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr ""
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr ""
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr ""
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
#, fuzzy
msgid "By Date"
msgstr "Kuupäev:"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr ""
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+#, fuzzy
+msgid "By Track Number"
+msgstr "Loo number:"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr ""
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
#, fuzzy
msgid "Sort Selected"
msgstr "Vormingute valimine"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+#, fuzzy
+msgid "File"
+msgstr "Failinimi"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "Abi"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr ""
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+msgid "View Track Details"
+msgstr ""
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr ""
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+#, fuzzy
+msgid "About Audacious"
+msgstr "Audacious'e LIRC pluginast lähemalt"
+
+#: src/skins/ui_manager.c:401
#, fuzzy
msgid "Play File"
msgstr "Esitamine"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+msgid "Load and play a file"
+msgstr ""
+
+#: src/skins/ui_manager.c:404
#, fuzzy
msgid "Play Location"
msgstr "Esitusnimekiri (valikuline)"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+msgid "Play media from the selected location"
+msgstr ""
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr ""
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr ""
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr ""
+
+#: src/skins/ui_manager.c:413
+#, fuzzy
+msgid "Quit Audacious"
+msgstr "%s - Audacious"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr ""
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+msgid "Jump to Time"
+msgstr ""
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr ""
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "Praegune"
+
+#: src/skins/ui_manager.c:438
+msgid "Paste"
+msgstr ""
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr ""
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
#, fuzzy
msgid "Preset"
msgstr "Proovi"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr ""
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
#, fuzzy
msgid "Load default preset into equalizer"
msgstr "Laadi vaikeväärtused"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
#, fuzzy
msgid "Zero"
msgstr "Stereo"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr ""
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr ""
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
msgid "Load preset from file"
msgstr ""
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr ""
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr ""
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr ""
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
#, fuzzy
msgid "Save default preset"
msgstr "Laadi vaikeväärtused"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
#, fuzzy
msgid "To file"
msgstr "Pealkiri"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr ""
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
msgid "Delete preset"
msgstr ""
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr ""
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr ""
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -4881,128 +3659,66 @@ msgid ""
"for."
msgstr ""
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Pealkiri: "
+
+#: src/skins/ui_playlist.c:267
#, fuzzy
msgid "Album: "
msgstr "Album:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
#, fuzzy
msgid "Artist: "
msgstr "Esitaja:"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
#, fuzzy
msgid "Filename: "
msgstr "Failinimi:"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr ""
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:772
-#, fuzzy
-msgid "Save as Static Playlist"
-msgstr "Esitusnimekirja valimine"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr ""
-
-#: src/skins/ui_playlist.c:802
-#, fuzzy
-msgid "Load Playlist"
-msgstr "Esitusnimekirja andmed kiiresti"
-
-#: src/skins/ui_playlist.c:815
-#, fuzzy
-msgid "Save Playlist"
-msgstr "Esitusnimekirja valimine"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
#, fuzzy
msgid "Audacious Playlist Editor"
msgstr "Esitusnimekirja andmed kiiresti"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr ""
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr ""
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr ""
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
#, fuzzy
msgid "About sndfile plugin"
msgstr "ESounD'i pluginast lähemalt"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5025,53 +3741,61 @@ msgid ""
"Boston, MA 02110-1301 USA"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
msgid "Volume corr."
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
msgid "Speed"
msgstr "Kiirus"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:363
+msgid "Options"
+msgstr "Valikud"
+
+#: src/sndstretch/sndstretch_xmms.c:382
msgid "SndStretch - Configuration"
msgstr ""
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr ""
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr ""
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr ""
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5084,33 +3808,32 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr ""
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "Loo sõnum"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr ""
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "Olekuikooni pluginast lähemalt"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5121,149 +3844,67 @@ msgid ""
"the system tray area of the window manager.\n"
msgstr ""
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "Olekuikooni plugina eelistused"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "Paremklõpsu menüü"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "Väike esitusmenüü nr. 1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "Väike esitusmenüü nr. 2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "Hiire kerimisel"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "Muudetakse valjust"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "Vahetatakse esitatavat lugu"
-#: src/stereo_plugin/stereo.c:40
-msgid ""
-"Extra Stereo Plugin\n"
-"\n"
-"By Johan Levin 1999."
-msgstr ""
-
-#: src/stereo_plugin/stereo.c:64
-msgid "About Extra Stereo Plugin"
-msgstr "Ekstra stereo pluginast lähemalt"
-
-#: src/stereo_plugin/stereo.c:100
-msgid "Configure Extra Stereo"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:62
-#, fuzzy
-msgid "Search:"
-msgstr "Aasta:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:319
+#: src/statusicon/statusicon.c:500
#, fuzzy
-msgid "Stream name"
-msgstr "Instrumendi nimi"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-#, fuzzy
-msgid "Now playing"
-msgstr "Esitusnimekirja valimine"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "OSS draiverist lähemalt"
-
-#: src/streambrowser/streambrowser.c:332
-#, fuzzy
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Autoriõigused (c) 2007, Calin Crisan <ccrisan@gmail.com> ja Audacious'e "
-"meeskond.\n"
-"\n"
-"Palju tänu libcdio arendajatele <http://www.gnu.org/software/libcdio/>\n"
-"\tja libcddb arendajatele <http://libcddb.sourceforge.net/>.\n"
-"\n"
-"Samuti tänan Tony Vroon'i minu juhendamise eest.\n"
-"\n"
-"See projekt loodi Google Summer of Code 2007 raames."
+msgid "Other settings"
+msgstr "Mikseri sätted"
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
msgstr ""
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
msgstr ""
-#: src/sun/about.c:31
+#: src/stereo_plugin/stereo.c:41
msgid ""
-"XMMS BSD Sun Driver\n"
+"Extra Stereo Plugin\n"
"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr ""
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Puhvri suurus (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
+"By Johan Levin 1999."
msgstr ""
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr ""
+#: src/stereo_plugin/stereo.c:65
+msgid "About Extra Stereo Plugin"
+msgstr "Ekstra stereo pluginast lähemalt"
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
+#: src/stereo_plugin/stereo.c:102
+msgid "Configure Extra Stereo"
msgstr ""
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "Toonigeneraatorist lähemalt"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5272,15 +3913,20 @@ msgid ""
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr ""
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "ESounD'i pluginast lähemalt"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "Kasutatakse oma pealkirjavormingut"
@@ -5294,15 +3940,15 @@ msgstr "Pealkirja vorming:"
msgid "Ogg Vorbis Tags"
msgstr "Ogg Vorbis sildid:"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Ogg Vorbis audioplugina sätted"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Ogg Vorbis audiopluginast lähemalt"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
#, fuzzy
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
@@ -5352,12 +3998,12 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr ""
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5365,6 +4011,546 @@ msgid ""
"Visit the Wavpack site at http://www.wavpack.com/\n"
msgstr ""
+#, fuzzy
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Võimaluse korral kasutatakse CDDB-d"
+
+#, fuzzy
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>Teenused</b>"
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug'i sätted"
+
+#~ msgid "Sound quality"
+#~ msgstr "Helikvaliteet"
+
+#~ msgid "8bit"
+#~ msgstr "8-bitine"
+
+#~ msgid "16bit"
+#~ msgstr "16-bitine"
+
+#~ msgid "Channels"
+#~ msgstr "Kanaleid"
+
+#~ msgid "Frequency"
+#~ msgstr "Sagedus"
+
+#~ msgid "Detect songend"
+#~ msgstr "Loo lõpp tuvastatakse"
+
+#~ msgid "Formats"
+#~ msgstr "Vormingud"
+
+#~ msgid "Format selection"
+#~ msgstr "Vormingute valimine"
+
+#~ msgid "Format"
+#~ msgstr "Vorming"
+
+#~ msgid "Extension"
+#~ msgstr "Laiend"
+
+#~ msgid "Author: "
+#~ msgstr "Autor: "
+
+#~ msgid "File Type: "
+#~ msgstr "Faili tüüp: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Instrumendid: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Mustrid: "
+
+#~ msgid "Instrument name"
+#~ msgstr "Instrumendi nimi"
+
+#~ msgid "Song message"
+#~ msgstr "Loo sõnum"
+
+#~ msgid "Pattern: "
+#~ msgstr "Muster: "
+
+#~ msgid "Speed: "
+#~ msgstr "Kiirus: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "XMMS-alarmist lähemalt"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS-alarm"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "XMMS-plugin, mida saab kasutada esitamise\n"
+#~ "alustamiseks kindlaksmääratud ajal.\n"
+#~ "\n"
+#~ "Kaebused paluks saata aadressidele:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "Alarm"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "See on sinu äratus."
+
+#~ msgid "Select Playlist"
+#~ msgstr "Esitusnimekirja valimine"
+
+#~ msgid "Sorry"
+#~ msgstr "Vabandust"
+
+#~ msgid "Warning"
+#~ msgstr "Hoiatus"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "Alarmi sätted"
+
+#~ msgid "Time"
+#~ msgstr "Aeg"
+
+#~ msgid "hours"
+#~ msgstr "tundi"
+
+#~ msgid "h"
+#~ msgstr "t"
+
+#~ msgid "minutes"
+#~ msgstr "minutit"
+
+#~ msgid "Quiet after:"
+#~ msgstr "Vait pärast:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "Alarmi aeg (vaikimisi):"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "Alarmi töölehakkamise päevade valimine"
+
+#~ msgid "Day"
+#~ msgstr "Päev"
+
+#~ msgid "Tuesday"
+#~ msgstr "Teisipäeval"
+
+#~ msgid "Wednesday"
+#~ msgstr "Kolmapäeval"
+
+#~ msgid "Thursday"
+#~ msgstr "Neljapäeval"
+
+#~ msgid "Friday"
+#~ msgstr "Reedel"
+
+#~ msgid "Saturday"
+#~ msgstr "Laupäeval"
+
+#~ msgid "Sunday"
+#~ msgstr "Pühapäeval"
+
+#~ msgid "Monday"
+#~ msgstr "Esmaspäeval"
+
+#~ msgid "Days"
+#~ msgstr "Päevad"
+
+#~ msgid "Fading"
+#~ msgstr "Kahanemine"
+
+#~ msgid "Volume"
+#~ msgstr "Valjus"
+
+#~ msgid "Current"
+#~ msgstr "Praegune"
+
+#~ msgid "Start at"
+#~ msgstr "Alguses"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "Lõpus"
+
+#~ msgid "Additional Command"
+#~ msgstr "Täiendav käsk"
+
+#~ msgid "enable"
+#~ msgstr "lubatud"
+
+#~ msgid "Playlist (optional)"
+#~ msgstr "Esitusnimekiri (valikuline)"
+
+#~ msgid "Browse..."
+#~ msgstr "Sirvi..."
+
+#~ msgid "Reminder"
+#~ msgstr "Meeldetuletaja"
+
+#~ msgid "Use reminder"
+#~ msgstr "Meeldetuletaja on kasutusel"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "Mida need valikud tähendavad?"
+
+#, fuzzy
+#~ msgid "Current Headset"
+#~ msgstr "Praegune"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Asukoht:"
+
+#, fuzzy
+#~ msgid "Class"
+#~ msgstr "Sulge"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "Seadme aadress"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "Loo lõpp tuvastatakse"
+
+#, fuzzy
+#~ msgid "Not Detected"
+#~ msgstr "Vormingute valimine"
+
+#~ msgid "Device name:"
+#~ msgstr "Seadne nimi:"
+
+#~ msgid "Device file:"
+#~ msgstr "Seadmefail:"
+
+#~ msgid "Active"
+#~ msgstr "Aktiivne"
+
+#~ msgid "Status"
+#~ msgstr "Olek"
+
+#~ msgid "Device Name"
+#~ msgstr "Seadme nimi"
+
+#~ msgid "Device File"
+#~ msgstr "Seadmefail"
+
+#~ msgid "Device Address"
+#~ msgstr "Seadme aadress"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Nimi: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Failinimi: </b>"
+
+#~ msgid "Name"
+#~ msgstr "Nimi"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Installed plugins"
+#~ msgstr "Paigaldatud pluginad"
+
+#~ msgid "Running plugins"
+#~ msgstr "Töötavad pluginad"
+
+#~ msgid "Add"
+#~ msgstr "Lisa"
+
+#~ msgid "Remove"
+#~ msgstr "Eemalda"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "LADSPA pluginate kataloog"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "Audacious'e LIRC pluginast lähemalt"
+
+#, fuzzy
+#~ msgid "Connection"
+#~ msgstr "Asukoht:"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "ModPlug'i sätted"
+
+#~ msgid "16 bit"
+#~ msgstr "16-bitine"
+
+#~ msgid "8 bit"
+#~ msgstr "8-bitine"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "44 kHz"
+
+#, fuzzy
+#~ msgid "48 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Diskreetimissagedus"
+
+#~ msgid "Enable"
+#~ msgstr "Lubatud"
+
+#~ msgid "Depth"
+#~ msgstr "Sügavus"
+
+#~ msgid "Delay"
+#~ msgstr "Viivitus"
+
+#~ msgid "Effects"
+#~ msgstr "Efektid"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "Failinime kasutatakse pealkirjaks"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "Esitusnimekirja andmed kiiresti"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "Müra vähendatakse"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Esitatakse Amiga MOD-e"
+
+#~ msgid "Don't loop"
+#~ msgstr "Ei korrata"
+
+#~ msgid "Loop"
+#~ msgstr "Korratakse"
+
+#~ msgid "time(s)"
+#~ msgstr "kord(a)"
+
+#~ msgid "Loop forever"
+#~ msgstr "Korratakse igavesti"
+
+#~ msgid "Looping"
+#~ msgstr "Kordamine"
+
+#~ msgid "MOD Info"
+#~ msgstr "MOD-i andmed"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "Failinimi:\n"
+#~ "Pealkiri:\n"
+#~ "Liik:\n"
+#~ "Kestus:\n"
+#~ "Kiirus:\n"
+#~ "Tempo:\n"
+#~ "Sämpleid:\n"
+#~ "Instrumente:\n"
+#~ "Mustreid:\n"
+#~ "Kanaleid:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "Sämplid"
+
+#~ msgid "Instruments"
+#~ msgstr "Instrumendid"
+
+#~ msgid "Message"
+#~ msgstr "Sõnum"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Modplug helimootor, autor: Olivier Lapicque.\n"
+#~ "Modplug'i XMMS-liidese autor: Kenton Varda.\n"
+#~ "Autoriõigused (c) 2000 Olivier Lapicque ja Kenton Varda.\n"
+#~ "Uuendused ja hooldus: Konstanty Bialkowski.\n"
+#~ "BMP jaoks portinud Theofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "Modplug'ist lähemalt"
+
+#, fuzzy
+#~ msgid "Blue"
+#~ msgstr "Valjus"
+
+#, fuzzy
+#~ msgid "Search:"
+#~ msgstr "Aasta:"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "Instrumendi nimi"
+
+#, fuzzy
+#~ msgid "Now playing"
+#~ msgstr "Esitusnimekirja valimine"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "OSS draiverist lähemalt"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "This is a simple stream browser that includes the most popular streaming "
+#~ "directories.\n"
+#~ "Many thanks to the Streamtuner developers <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tand of course to the whole Audacious community.\n"
+#~ "\n"
+#~ "Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+#~ "\n"
+#~ "This was a Google Summer of Code 2008 project."
+#~ msgstr ""
+#~ "Autoriõigused (c) 2007, Calin Crisan <ccrisan@gmail.com> ja Audacious'e "
+#~ "meeskond.\n"
+#~ "\n"
+#~ "Palju tänu libcdio arendajatele <http://www.gnu.org/software/libcdio/>\n"
+#~ "\tja libcddb arendajatele <http://libcddb.sourceforge.net/>.\n"
+#~ "\n"
+#~ "Samuti tänan Tony Vroon'i minu juhendamise eest.\n"
+#~ "\n"
+#~ "See projekt loodi Google Summer of Code 2007 raames."
+
+#, fuzzy
+#~ msgid "minutes:seconds"
+#~ msgstr "minutit"
+
+#, fuzzy
+#~ msgid "Track length:"
+#~ msgstr "Loo number:"
+
+#, fuzzy
+#~ msgid "Show/hide statusbar"
+#~ msgstr "Esitusnimekirja valimine"
+
+#, fuzzy
+#~ msgid "Refresh Selected"
+#~ msgstr "Vormingute valimine"
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "Esitusnimekirja valimine"
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "Pealkiri"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "Kommentaar:"
+
+#, fuzzy
+#~ msgid "Save as Static Playlist"
+#~ msgstr "Esitusnimekirja valimine"
+
+#, fuzzy
+#~ msgid "Load Playlist"
+#~ msgstr "Esitusnimekirja andmed kiiresti"
+
+#, fuzzy
+#~ msgid "Save Playlist"
+#~ msgstr "Esitusnimekirja valimine"
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "parim/aeglaseim:0;\n"
+#~ "halvim/kiireim:9;\n"
+#~ "soovitatav:2;\n"
+#~ "vaikimisi:5;"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "Muutuv bitikiirus"
+
+#~ msgid "Average bitrate"
+#~ msgstr "Keskmine bitikiirus"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "Esitusnimekirja valimine"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "Esitusnimekirja valimine"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Puhvri suurus (ms):"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "Muudetakse valjust"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Efektid"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "FLAC audioplugin "
+
#~ msgid "Audacious standard menu"
#~ msgstr "Audacious'e standardmenüü"
@@ -5649,10 +4835,6 @@ msgstr ""
#~ msgstr "Vaikimisi (%s)"
#, fuzzy
-#~ msgid "_Rename"
-#~ msgstr "Failinimi"
-
-#, fuzzy
#~ msgid "About Icecast-Plugin"
#~ msgstr "Kajapluginast lähemalt"
@@ -5836,21 +5018,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "Pealkiri:"
-#~ msgid "Artist:"
-#~ msgstr "Esitaja:"
-
-#~ msgid "Album:"
-#~ msgstr "Album:"
-
#~ msgid "Comment:"
#~ msgstr "Kommentaar:"
-#~ msgid "Year:"
-#~ msgstr "Aasta:"
-
-#~ msgid "Track number:"
-#~ msgstr "Loo number:"
-
#~ msgid "Genre:"
#~ msgstr "Žanr:"
@@ -6027,12 +5197,6 @@ msgstr ""
#~ msgid "Version:"
#~ msgstr "Versioon:"
-#~ msgid "Bit rate:"
-#~ msgstr "Bitikiirus:"
-
-#~ msgid "Length:"
-#~ msgstr "Kestus:"
-
#~ msgid "File size:"
#~ msgstr "Faili suurus:"
diff --git a/po/eu.po b/po/eu.po
index 2e3eae9..0228037 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins_eu\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2009-04-23 18:56+0200\n"
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, fuzzy, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -29,620 +29,54 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM (c) Nero AG, www.nero.com\n"
"Copyright-a (c) 2005-2006 Audacious taldea"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "MP4 AAC erreproduzitzailearen pluginari buruz"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Honi buruz: "
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright-a (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Plugin hau GNU GPL lizentziako terminoen eta baldintzen pean kaleratua.\n"
-"Xehetasunetarako ikusi honako web orrialdea:\n"
-"http://www.gnu.org/licenses/lgpl.html\n"
-"\n"
-"Plugin honek AdPlug liburutegia erabiltzen du. AdPlug-en copyright-a (C) "
-"Simon Peter, eta al.\n"
-"Estekatutako AdPlug liburutegiaren bertsioa: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Konfigurazioa"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Ados"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Utzi"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Orokorra"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Soinuaren kalitatea"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Bereizmena"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 bit"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Kanalak"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Monoa"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Estereoa"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Estereoa ezartzea ez da gomendagarria, ez baduzu behar bederen. Honek ez dio "
-"inolako estereo efekturik gehituko soinuari (OPL2 monoa da soilik) eta "
-"PUZaren errendimendu gehiago beharko du."
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Maiztasuna"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Erreprodukzioa"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Detektatu abestiaren amaiera"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Gaitzen bada XMMS-ek abestiaren amaiera detektatuko du, gelditu eta "
-"erreprodukzio-zerrendan aurrera egingo du. Desgaitzen bada, XMMS ez da "
-"ohartuko abesti baten amaierarekin eta behin eta berriz begiztatuko du."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formatuak"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Formatuaren hautapena"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Formatua"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Luzapena"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Hautatutako fitxategi motak ezagutuko dira eta plugin honek erreproduzituko "
-"ditu. Desautatutako motei ezikusi egingo zaie, beste plugin batzuei lekua "
-"egiteko fitxategi hauek erreproduzitzeko."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Fitxategiaren informazioa"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Fitxategi-Izena"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Izenburua: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Egilea: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Fitxategi mota: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Azpiabestiak: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumentuak: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Ordenak: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Ereduak: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Abestia"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Instrumentuaren izena"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Abestiaren mezua"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Azpiabestiaren hautapena"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Ordena: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Eredua: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Errenkada: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Abiadura: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Tenporizadorea: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "XMMS alarmari buruz"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS alarma"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"XMMSren plugin bat denbora zehatz batean\n"
-"erreproduzitzen hasteko.\n"
-"\n"
-"Bidali kexuak hona:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Itxi"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "Alarma"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "Hau zu esnatzeko deia da."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "Ados"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Hautatu erreprodukzio-zerrenda"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Barkatu"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Abisua"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Segurtasuneko arrazoiak direla medio, \"quiet\" (isilik) denbora iraungitze-"
-"denbora (10 segundo baino gehiagokoa izan behar duelarik) baino gutxienez 65 "
-"segundo luzeagoa izan behar du. Honek kodean akats bat dagoela adierazi nahi "
-"du, eta hau konpondu arte mezu hau agertuko dela :)\n"
-"\n"
-"Iraungitzearen ezarpenak EZ dira gorde\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Ongi"
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "Alarmaren ezarpenak"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "Ordua"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "ordu"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "o"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr "minutu"
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "Isildu honen ondoren:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "Alarma (lehenetsia):"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "Aukeratu zein egunetan alarma aktibatuko den"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "Lehenetsia"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "Eguna"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "Asteartea"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "Asteazkena"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "Osteguna"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "Ostirala"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "Larunbata"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "Igandea"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "Astelehena"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "Egunak"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "Iraungitzea"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-msgid "seconds"
-msgstr "segundo"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-msgid "Volume"
-msgstr "Bolumena"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr "Unekoa"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "berrezarri uneko irteera bolumenera"
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr "Hasiera:"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "Amaiera"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "Komando gehigarria"
-
-#: src/alarm/interface.c:1253
-msgid "enable"
-msgstr "gaitu"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr "Erreprodukzio-zerrenda (aukerakoa)"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "Arakatu..."
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr "Oroigarria"
-
-#: src/alarm/interface.c:1312
-msgid "Use reminder"
-msgstr "Erabili oroigarria"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-msgid "Options"
-msgstr "Aukerak"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "Zer esanahi dute aukera hauek?"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-"\n"
-"Ordua\n"
-" Alarma: \n"
-"\n"
-" Ordua alarma aktibatzeko\n"
-"\n"
-" Isildu honen ondoren: \n"
-" Gelditu alarma denbora kopuruaren ostean.\n"
-" (iratzartzeko elkarrizketa-koadroa ez bada ixten)\n"
-"\n"
-"\n"
-"Egunak\n"
-" Eguna:\n"
-" Hautatu egunak alarma aktibatzeko.\n"
-"\n"
-" Ordua:\n"
-" Aukeratu egun bakoitzeko alarmaren ordua,\n"
-" (edo hautatu txandakatzeko botoia denbora\n"
-" lehenetsia erabiltzeko).\n"
-"\n"
-"\n"
-"Bolumena\n"
-" Iraungitzea: \n"
-" Iraungitu bolumena gorantz aukeratutako bolumenerarte\n"
-" denbora kopuru honentzako.\n"
-"\n"
-" Hasiera: \n"
-" Hasi iraungitzea bolumen honetatik\n"
-"\n"
-" Amaiera: \n"
-" Amaierako bolumenean iraungitzea gelditzeko. Iraungitzearen\n"
-" denbora 0 bada, bolumena honekin ezartzen du eta\n"
-" erreproduzitzen hasten da.\n"
-"\n"
-"\n"
-"Aukerak:\n"
-" Komando gehigarriak:\n"
-" Exekutatu komando hau alarmaren orduan.\n"
-"\n"
-" Erreprodukzio-zerrenda: \n"
-" Kargatu erreprodukzio-zerrenda hau bertatik\n"
-" abestiak erreproduzitzeko (.m3u luzapena\n"
-" eduki behar du). Ez bada erreprodukzio-zerrendarik\n"
-" ematen, uneko zerrendan dauden abestiak\n"
-" erabiliko dira.\n"
-" Hemen mp3/ogg korrontearen URLa sar daitekeen\n"
-" arren, oraingoz xmms-ek ez du URLrik onartzen.\n"
-"\n"
-" Oroigarria: \n"
-" Oroigarri bat bistaratzen du alarma itzaltzean,\n"
-" idatzi oroigarria kutxan eta piztu txandakatzeko\n"
-" botoia oroigarri hori bistaratzea nahi baduzu.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "Laguntza"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr "Gaurko zure oroigarria: "
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr "Eskerrik asko"
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "PCM gailu lehenetsia (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "PCM gailu lehenetsia (%s)"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "Egoeraren ikonoa plugina - Hobespenak"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "Nahastailearen gailua:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Nahastailearen gailua:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "Nahastailearen gailua:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "JACK irteerako plugina 0.17 buruz"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr ""
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -673,11 +107,11 @@ msgstr ""
"sintetizadorera bidalitako MIDI gertaerak zuenean erreproduzi daitezke.\n"
"Motorra Giacomo Lozito-k garatu zuen."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FluidSynth motorra "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -693,86 +127,43 @@ msgstr ""
"aukeratutako irteerako pluginarekin erreproduzitu.\n"
"Motorra Giacomo Lozito-k garatu zuen."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSA motorraren konfigurazioa"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Ataka"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Bezeroaren izena"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Atakaren izena"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSAren irteeraren atakak"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Soinu-txartela: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Nahastaile-kontrola: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Nahastailearen ezarpenak"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Hautatu ALSAren irteerako atakak *\n"
-"MIDI gertaerak hemen hautatutako ataketara bidaliko dira. Adibidez, soinu-"
-"txartelak hardware-sintetizadorea badu, eta horrekin MIDIa erreproduzitzea "
-"nahi baduzu, baliteke zuk uhin-taulako sintetizadorearen atakak hautatu nahi "
-"izatea."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Hautatu ALSAren nahastailearen txartela *\n"
-"ALSA motorrak ALSA bidez ateratzen da, erreproduzitzaileak ez du efekturik "
-"ezta irteerako pluginik erabiltzen. Erreprodukzioan, erreproduzitzailearen "
-"bolumenaren graduatzaileak zuk hemen hautatutako nahastailearen kontrola "
-"kudea dezake. Uhin-taulako sintetizadorearen atakak erabiltzen badituzu, "
-"baliteke zuk hemen sintetizadorearen kontrola hautatu nahi izatea."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Hautatu ALSAren nahastailearen kontrola *\n"
-"ALSA motorrak ALSA bidez ateratzen da, erreproduzitzaileak ez du efekturik "
-"ezta irteerako pluginik erabiltzen. Erreprodukzioan, erreproduzitzailearen "
-"bolumenaren graduatzaileak zuk hemen hautatutako nahastailearen kontrola "
-"kudea dezake. Uhin-taulako sintetizadorearen atakak erabiltzen badituzu, "
-"baliteke zuk hemen sintetizadorearen kontrola hautatu nahi izatea."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSA motorra ez da kargatu edo ez dago erabilgarri"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -780,156 +171,51 @@ msgstr ""
"<span size=\"smaller\">ALSA\n"
"motorra</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - motorraren informazioa"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-PLUG Hobespenak"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Motorraren hautapena"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Motor erabilgarriak"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Erreprodukzioaren ezarpenak"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Irauli: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Perkusio-desplazamendua:"
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Ezarpen aurreratuak"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "aurre-kalkulatu erreprodukzio-zerrendako MIDI fitxategien luzera"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "erauzi MIDI fitxategiko iruzkinak (egonez gero)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "erauzi MIDI fitxategiko letrak (egonez gero)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Motorraren hautapena *\n"
-"AMIDI-Plug motorrekin lan egiten du , era modular batean. Hemen motorra "
-"hauta dezakezu: hau da, MIDI gertaerak nola kudeatu eta erreproduzituko "
-"diren modua.\n"
-"Hardware-sintetizadore bat badu audio-txartelak, eta ALSAk onartzen badu, "
-"ALSA motorra erabiltzea nahi izan dezakezu. ALSA sekuentziadorearen "
-"interfaze bat eskaintzen duen edozerrekin ere erabil daiteke, software-"
-"sintetizadorea edo kanpoko gailuak barne.\n"
-"Software-sintetizadorean oinarritzea nahi baduzu, edo eta audioa "
-"erreproduzitzailearen efektuetara eta irteerako pluginak kanalizatzea nahi "
-"baduzu, FluidSynth motor ona erabiltzea nahi izan dezakezu.\n"
-"Sakatu Informazioa botoia motor bakoitzari buruzko informazio zehatza "
-"irakurtzeko."
-
-#: src/amidi-plug/i_configure-ap.c:331
-#, fuzzy
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* Irauli funtzioa *\n"
-"Aukera honek MIDI fitxategia beste tekla desberdin batean iraulita "
-"erreproduzitzea baimentzen dizu, bere nota guztien nahi duzun semintonu "
-"kopurua desplazatuz (MIDIko 10. kanalekoak izan ezik, perkusioentzako "
-"gordeta baitago). Bereziki erabilgarria da beste instrumentu batekin abestea "
-"edo erreproduzitzea nahi baduzu."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Perkusio-desplazamendua funtzioa *\n"
-"Aukera honek MIDIko 10. kanaleko notak nahi duzun semitonu kopurua "
-"desplazatzea uzten dizu. MIDI erreproduzitzean erabiltzen den bestelako "
-"perkusio multzo desberdin bat dakaer, eta honela perkusioen soinuak hobetu "
-"(edo gutxiagotu edo eraldatu) nahi badituzu, saiatu balio honekin "
-"erreproduzitzen."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* Aurre-kalkulatu MIDI luzera *\n"
-"Aukera hau gaituta egonez gero, 'AMIDI-Plug'-ek MIDI fitxategiaren luzera "
-"kalkula dezake erreproduzaileak eskatu bezain laster, MIDI fitxategia "
-"erreproduzitzen ari den bitartean egin ordez. Adibidez, MIDI fitxategiak "
-"erreprodukzio-zerrendari gehitu bezain laster kalkula daiteke MIDIaren "
-"luzera. Desgaitu aukera hau erreprodukzio-zerrenda azkarrago kargatzea nahi "
-"naduzu (MIDI fitxategi asko gehitzen direnean), gaitu ezazu kargatu bezain "
-"laster erreprodukzio-zerrendan informazio gehiago bistaratzeko."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* Erauzi iruzkinak MIDI fitxategietatik *\n"
-"MIDI fitxategi batzuk testu iruzkinak dituzte (egilea, copyright-a, "
-"instrumentuen oharrak, e.a.). Aukera hau gaitzen bada, AMIDI-Plug-ek "
-"iruzkinak (egonez gero) erauzi eta bistaratuko ditu fitxategiaren "
-"informazioaren elkarrizketa-koadroan."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* Erauzi letrak MIDI fitxategietatik *\n"
-"MIDI fitxategi batzuk abestien letrak dituzte. Aukera hau gaitzen bada, "
-"AMIDI-Plug-ek iruzkinak (egonez gero) erauzi eta bistaratuko ditu "
-"fitxategiaren informazioaren elkarrizketa-koadroan."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -937,235 +223,113 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - hautatu fitxategia"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - konfigurazioa"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - hautatu SoundFont fitxategia"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "FluidSynth motorraren konfigurazioa"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "SoundFont ezarpenak"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Fitxategi-Izena"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Tamaina (byte)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "Kargatu SF erreproduzitzailea abiatzean"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "Kargatu SF MIDI fitxategia lehenbizi erreproduzitzean"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Sintetizadorearen ezarpenak"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "irabazia"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "erabili lehenetsia"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "balioa:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "polifonia"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "reverb"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "bai"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "ez"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "chorus"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "lagin-tasa"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "pertsonalizatua "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* Hautatu SoundFont fitxategiak *\n"
-"MIDIa FluidSynth-ekin erreproduzitzeko, gutxienez SoundFont fitxategi bat "
-"zehaztu behar duzu hemen (erabili bide-izen absolutua). Kargatzeko ordena "
-"goitik (aurrenekoa) behera (azkena) da."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Kargatu SoundFont erreproduzitzailea abiaraztean *\n"
-"Sistemaren abiaduraren arabera, FluidSynth-en SoundFont kargatzeak segundo "
-"gutxi batzuk beharko ditu. Aldi bateko zeregina da hau (soundfont kargatuta "
-"jarraituko du hura aldatu arte, edo motorra memoritik kendu arte) "
-"erreproduzitzailea abiaraztean edo aurreneko MIDI fitxategia erreproduzitu "
-"aurretik egin daitekeena (azkenengoa aukera soilik egokiagoa da ez baduzu "
-"erreproduzitzailerik erabiltzen MIDI fitxategiak entzuteko)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Kargatu SoundFont aurreneko MIDI fitxategia erreproduzitzean *\n"
-"Sistemaren abiaduraren arabera, FluidSynth-en SoundFont kargatzeak segundo "
-"gutxi batzuk beharko ditu. Aldi bateko zeregina da hau (soundfont kargatuta "
-"jarraituko du hura aldatu arte, edo motorra memoritik kendu arte) "
-"erreproduzitzailea abiaraztean edo aurreneko MIDI fitxategia erreproduzitu "
-"aurretik egin daitekeena (azkenengoa aukera soilik egokiagoa da ez baduzu "
-"erreproduzitzailerik erabiltzen MIDI fitxategiak entzuteko)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* Sintetizadorearen irabazia *\n"
-"FluidSynth-en dokumentaziotik: sintetizadorearen amaierako irteerari edo "
-"irteera maisuari aplikatzen zaio irabazia; balio baxu batekin ezartzen da "
-"lehenetsi gisa irteeraren saturazioa saihesteko ausazko MIDI fitxategiak "
-"erreproduzitzen direnean."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* Sintetizadorearen polifonia *\n"
-"FluidSynth-en dokumentaziotik: zenbat ahots paraleloki erreproduzi "
-"daitezkeen definitzen du polifoniak; ahots kopuruak ez dauka aldi berean "
-"erreproduzitutako noten kopuruarekin zer ikusirik derrigorrez; nota bat "
-"jotzen denean MIDI kanalean, kanal horretako aurrezarpenak hainbat ahots "
-"sortuko ditu, adibidez, bat ezkerreko audioaren kanalarentzako eta beste bat "
-"eskuinekoarentzako; aktibatutako ahots kopurua instrumentuen zona "
-"(erreproduzitutako notan eta abiaduran erortzen dena) kopuruaren mende dago."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Sintetizadorearen reverb-a *\n"
-"FluidSynth-en dokumentaziotik: \"bai\" ezartzean reverb efektuen moduloa "
-"aktibatzen da. Jakin ezazu reverb moduloa aktibo dagoenean, reverb moduloari "
-"bidaltzen zaizkion seinale kopurua SoundFont-en definitutako \"reverb bidali"
-"\" sortzailean mende dago."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Sintetizadorearen chorus-a *\n"
-"FluidSynth-en dokumentaziotik: \"bai\" bezala ezarritakoan chorus-en "
-"efektuen moduloa aktibatzen da. Jakin ezazu chorus moduloa aktibatuta "
-"dagoenean, chorus moduloari bidalitako seinu kopurua SoundFont-en "
-"definitutako \"chorus bidali\" sortzailean mende dago."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-#, fuzzy
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Sintetizadorearen lagin-tasa *\n"
-"Sintetizadoreak sortutako audioaren lagin-tasa. Balio pertsonalizatua ere "
-"zehaz dezakezu 22050Hz-96000Hz barrutian.\n"
-"OHARRA: buffer lehenetsiaren parametroak 44100Hz balioarekin ezarrita dago. "
-"Lagin-tasa aldatzean bufferraren parametroa egokitu behar da soinuaren "
-"kalitate ona lortzeko."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth motorra ez da kargatu edo ez dago erabilgarri"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1189,8 +353,7 @@ msgstr ""
"<span size=\"smaller\">TiMidity\n"
"motorra</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Izena:"
@@ -1363,119 +526,119 @@ msgstr "Jarraitu"
msgid "Triggers OSD when playback is unpaused."
msgstr "OSDa abiarazten du erreprodukzioa jarraitzean."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "Kokalekua"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "X desplazamendu erlatiboa:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "Y desplazamendu erlatiboa:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "OSDaren gehi. zabalera:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "Pantaila anitzen aukerak"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "Bistaratu OSDa hau erabiliz:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "pantaila guztiak"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "%i. pantaila"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "Tenporizadorea (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "Bistaratu:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "Pixkanaka agertu:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "Iraungitu:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "Letra-tipoak"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "%i letra-tipoa:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "Itzala"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "Nazioartekotzea"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Desgaitu testuaren UTF-8 bihurketa (aosd-en)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "Hautatu azalaren fitxategia"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "Errendatze estiloa"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Koloreak"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "%i kolorea:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "Azal pertsonalizatua"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "Azalaren fitxategia:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr "Arakatu"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Gaitu abiarazlea"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Gertaera"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "Kudeatzaile konposatua detektatuta"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1485,73 +648,73 @@ msgstr ""
"Bat exekutatzen dagoela jakin ezean, aktibatu konposaketako kudeatzalea "
"bestela OSDak ez du ongi funtzionatuko"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "Gardentasun faltsua egiteko ez da konposaketako kudeaketak behar"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Gardentasuna"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Gardentasun faltsua"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Egitako gardentasuna (Xen konposaketa hed. behar da)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "Konposaketako hedapena ez da kargatu"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "Konposaketako hedapena ez dago erabilgarri"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSDa</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSDa - konfigurazioa"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Proba"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Posizioa"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "Animazioa"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Testua"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Dekorazioa"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "Abiarazlea"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr "Hainbat"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Audacious OSDa - honi buruz"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1559,7 +722,7 @@ msgstr ""
"\n"
"Audacious OSDa "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1581,132 +744,6 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-#, fuzzy
-msgid "Available Headsets"
-msgstr "Motor erabilgarriak"
-
-#: src/bluetooth/gui.c:224
-#, fuzzy
-msgid "Current Headset"
-msgstr "Unekoa"
-
-#: src/bluetooth/gui.c:227
-#, fuzzy
-msgid "_Refresh"
-msgstr "Freskatu tasa"
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "Konexioa"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "Itxi"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr ""
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "Gailuaren helbidea"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-#, fuzzy
-msgid "Rescan"
-msgstr "Berreskaneatu CDa"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Erreproduzitu"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Lausotu esparrua: kolore hautapena"
@@ -1715,12 +752,12 @@ msgstr "Lausotu esparrua: kolore hautapena"
msgid "Options:"
msgstr "Aukerak:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "FLAC audioaren pluginari buruz"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
#, fuzzy
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
@@ -1746,128 +783,163 @@ msgstr ""
"\n"
"Google Summer of Code 2007 proiektu bat izan da."
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+#, fuzzy
+msgid "Audio CD"
+msgstr "Audioa"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "CD Audioaren pluginaren konfigurazioa"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Audio digitalaren erauzketa"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Tituluaren informazioa"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
#, fuzzy
msgid "Disc speed:"
msgstr "Erlojuaren abiadura:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Erabili cd-testua erabilgarri badago"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Erabili CDDB erabilgarri badago"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Zerbitzaria: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Bide-izena: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Ataka: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "HTTP erabili CDDBP ordez"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Gainidatzi gailu lehenetsia: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "Ados"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Utzi"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "Erreproduzitu"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Gehitu CDa"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "Estra Estereo plugina"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
#, fuzzy
msgid "Dynamic Range Compressor Preferences"
msgstr "AudioKonpresioa hobespenak"
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "Aldatu bolumena"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Efektuaren intentsitatea:"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
#, fuzzy
msgid "Game Console Music Decoder"
msgstr "Kontsolako musika dekodetzailea"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "Orokorra"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Erreprodukzioa"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "Baxua:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr "seg"
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "Altua:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr "Abestiaren luzera lehenetsia:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr "Birlagintzea"
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr "Gaitu audioa berriro lagintzea"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr "Birlagintze-tasa:"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr "Ezikusi egin SPCko etiketetako luzerari"
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr "Handiagotu reverb-a"
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1894,31 +966,31 @@ msgstr ""
"Audacious-entzako garapena: William Pitcock <nenolod@nenolod.net>, \n"
" Shay Green <gblargg@gmail.com>"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "%s(r)i buruz"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
#, fuzzy
msgid "Crossfade Preferences"
msgstr "Hobespenak"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "Scrobbler errorea"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1926,20 +998,24 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
msgid "Configure Crystalizer"
msgstr "Konfiguratu Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr "Efektuaren intentsitatea:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "Aplikatu"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1951,412 +1027,52 @@ msgstr ""
"\n"
"Surround-aren ohiartzuna Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Echo pluginari buruz"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "Konfiguratu Echo"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "Atzerapena (ms): "
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr "Berrelikadura (%): "
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "Bolumena (%):"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Erreprodukzioa->Erreproduzitu"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Erreprodukzioa->Gelditu"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Erreprodukzioa->Pausarazi"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Erreprodukzioa->Aurrekoa"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Erreprodukzioa->Hurrengoa"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Erreprodukzioa->Egotzi"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Erreprodukzio-zerrenda->Errepikatu"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Erreprodukzio-zerrenda->Ausaz"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Bolumena->Igo _5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Bolumena->Jeitsi _5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Bolumena->Igo _10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Bolumena->Jeitsi _10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Bolumena->Mututu"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Leihoa->Nagusia"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Leihoa->Erreprodukzio-zerrenda"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Leihoa->Ekualizadorea"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Leihoa->Jauzi fitxategira"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: ezin da gailuko %s fitxategia ireki, gailu hau "
-"saltatzen. Egiaztatu fitxategia existitzen dela eta hura irakurtzeko "
-"baimenak dituzula.\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: ezin da io_channel sortu gailuko %s fitxategiarentzako."
-"Gailua saltatzen\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: ezin da /proc/bus/input/devices ireki, gertaeren "
-"gailuaren detekzio automatikoak ez du funtzionatuko.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: ezin da io_channel ireki /proc/bus/input/devices-"
-"rentzako, gertaeren gailuaren detekzio automatikoak ez du funtzionatuko.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: errorea gertatu da /proc/bus/input/devices irakurtzean, "
-"gertaeren gailuaren detekzio automatikoak ez du funtzionatuko.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr "event-device-plugin: ez da %s aurkitu /dev/input-en, saltatzen.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: ezin da %s konfigurazio-fitxategia kargatu, ezarpen "
-"lehenetsiak erabiliko dira.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: osatu gabeko informazioa \"%s\" gailuaren "
-"konfigurazioko fitxategian, saltatzen.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren is_active "
-"balioa lortu, saltatzen.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: ezin da lokaleko %s direktorioa atzitu, ezarpenak ez "
-"dira gordeko.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren fitxategi-"
-"izenaren balioa, saltatzen.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren balio fisikoa a "
-"lortu, saltatzen.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren is_custom "
-"balioa lortu, saltatzen.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurazioa, \"%s\" gailuaren ustekabeko balioa, "
-"saltatzen.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "Detektatu abestiaren amaiera"
-
-#: src/evdev-plug/ed_ui.c:217
-#, fuzzy
-msgid "Custom"
-msgstr "pertsonalizatua "
-
-#: src/evdev-plug/ed_ui.c:223
-#, fuzzy
-msgid "Not Detected"
-msgstr "Ordenatu hautatutakoak"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Informazioa"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Ezin da detektatu ez den gailuaren loturen leihoa ireki.\n"
-"Ziurtatu gailua ongi konektatuta dagoela."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Errorea"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Ezin da hautatutako gailua ireki.\n"
-"Egiaztatu gailuko fitxategia irakurtzeko baimenak dituzula."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Gehitu gailu pertsonalizatua"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"Sisteman erabilgarri dauden gailuen gertaerak automatikoki \n"
-"detektatu eta informazioa eguneratzen saiatzen da EvDev-Plug.\n"
-"Hala ere, detekzio automatikoak ez badu funtzionatzen sisteman,\n"
-"edo gertaeren gailuak leku ez estandar batean badaude (unean \n"
-"/dev/input-en soilik egiten da bilaketa), gailu pertsonalizatua gehitzea\n"
-"nahi izan dezakezu gailuaren izena eta fitxategia zehaztuz. "
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Gailuaren izena:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Gailuaren fitxategia:"
-
-#: src/evdev-plug/ed_ui.c:404
-#, fuzzy
-msgid "(custom)"
-msgstr "pertsonalizatua "
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Zehaztu bai izena bai fitxategi-izena.\n"
-"Fitxategi-izenak bide-izen absolutua eduki behar du."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-"Nahi duzu hautatutako gailuaren existitzen den konfigurazioa kentzea?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Nahi duzu hautatutako gailu pertsonalizatua kentzea?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - Konfigurazioa"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktibo"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Egoera"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Gailuaren izena"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Gailuaren fitxategia"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Gailuaren helbidea"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Loturak"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Sakatu gailuaren tekla bat lotzeko; \n"
-"bost segundotan ez bada teklarik sakatzen,\n"
-"leiho hau itxi egingo da loturak aldatu gabe."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Sarrerako gertaera hau jadanik lotuta dago.\n"
-"\n"
-"Ezin da hainbat ekintza sarrerako gertaera berdinari esleitu (nahiz eta "
-"ekintza berdina hainbat gertaerei esleitzea posiblea den)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Loturen konfigurazoa"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Izena: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Fitxategi-izena: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Helbide fisikoa: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug - honi buruz"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"erreproduzitzailearen urruneko kontrola gertaera-gailuen bidez.\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"garatzailea: Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "FLAC audioaren pluginari buruz"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
msgid "About FileWriter-Plugin"
msgstr "FileWriter-pluginari buruz"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2393,250 +1109,208 @@ msgstr ""
"02110-1301,\n"
"USA."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
msgid "File Writer Configuration"
msgstr "FileWriter konfigurazioa"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
msgid "Output file format:"
msgstr "Irteerako fitxategi-formatua:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "Konfiguratu"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "Gorde jatorrizko direktorioan"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "Gorde direktorio pertsonalizatuan"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "Irteerako fitxategiaren karpeta:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Hautatu karpeta"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr "Lortu fitxategi-izena hemendik:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr "jatorrizko fitxategi-etiketak"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr "jatorrizko fitxategi-izena"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "Ez kendu fitxategi-izenaren luzapena"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Gaituta badago, jatorrizko fitxategi-izenaren luzapena ez da kenduko "
-"fitxategiaren luzapen berria amaieran gehitu aurretik."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr "Jarri pistaren zenbakia fitxategi-izenaren aurretik"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+msgid "Auto"
+msgstr "Automatikoa"
+
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "Estereo-lotura"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Estereoa"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Monoa"
+
+#: src/filewriter/mp3.c:724
msgid "MP3 Configuration"
msgstr "MP3 konfigurazioa"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr "Algoritmoaren kalitatea:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"onena/motelena:0;\n"
-"txarrena/azkarrena:9;\n"
-"gomendatua:2;\n"
-"lehenetsia:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
msgid "Output Samplerate:"
msgstr "Irteerako lagin-tasa:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Automatikoa"
-
#: src/filewriter/mp3.c:800
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr "Bit-tasa / Konpresio-tasa:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "Bit-tasa (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr "Konpresio-tasa:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
msgid "Audio Mode:"
msgstr "Audio modua:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Estereo-lotura"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr "Hainbat:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr "Derrigortu ISOa betetzen duela"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
msgid "Error protection"
msgstr "Erroreen aurkako babesa"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Gehitu 16 bit-eko kontrol-batura bilbe bakoitzari"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr "Kalitatea"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr "Gaitu VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr "Mota:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Bit-tasa aldagarria (VBR)"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Batez besteko bit-tasa"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
msgid "VBR Options:"
msgstr "VBR aukerak:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "Gutxieneko bit-tasa (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "Gehienezko bit-tasa (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr "Derrigortu gutxieneko bit-tasa"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"MP3ren bit-tasa baxua onartzen ez duten erreproduzitzaileetan erabiltzeko "
-"(Apex AD600-A DVD/ mp3 erreproduzigailua)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
msgid "ABR Options:"
msgstr "ABR aukerak:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr "Batez besteko bit-tasa (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr "VBR kalitate-maila:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"altuena:0;\n"
-"baxuena:9;\n"
-"lehenetsia:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr "Ez idatzi Xing VBR goiburukoa"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr "Bilbearen parametroak:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr "Markatu copyright gisa"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr "Markatu jatorrizko gisa"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr "ID3 parametroak:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr "Derrigortu v2 etiketa gehitzea"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr "Gehitu v1 etiketa soilik"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr "Gehitu v2 etiketa soilik"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr "Etiketak"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Vorbis kodetzailearen konfigurazioa"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "Kalitate maila (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC audioaren plugina"
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "FLAC audioaren pluginari buruz"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2652,15 +1326,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "FLAC audioaren pluginari buruz"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "GNOMEko lasterbideen pluginari buruz"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2674,498 +1344,505 @@ msgstr ""
"Copyright-a (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "Gehitu fitxategiak..."
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "Ezin da denboran jauzirik egin pista ez denean erreproduzitzen ari.\n"
-
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "Jauzi denborara"
-
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "minutu:segundo"
-
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Pistaren luzera:"
-
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Errorea \"%s\" erreprodukzio-zerrenda idaztean: %s"
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "Pista zenbakia:"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s badago lehendik ere. Jarraitu?"
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "Titulua"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Export Playlist"
-msgstr "Kargatu erreprodukzio-zerrenda"
+msgid "Artist"
+msgstr "Artista:"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Import Playlist"
-msgstr "Kargatu erreprodukzio-zerrenda"
+msgid "Year"
+msgstr "Urtea:"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
-
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
-
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
-
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "Gelditu uneko abestiaren ondoren"
-
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Errepikatu"
-
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Ausazkoa"
-
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Erreprodukzio-zerrenda aurreraturik ez"
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Album"
+msgstr "Albuma: "
-#: src/gtkui/ui_manager.c:47
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Show playlists"
-msgstr "Erakutsi erreprodukzio-zerrendaren editorea"
+msgid "Track"
+msgstr "Pista:"
-#: src/gtkui/ui_manager.c:48
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Show/hide playlists"
-msgstr "Kargatu erreprodukzio-zerrenda"
+msgid "Queue position"
+msgstr "Posizioa"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Length"
+msgstr "Abestiaren luzera"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File path"
+msgstr "Fitxategi-izenaren arabera"
-#: src/gtkui/ui_manager.c:53
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Show main menu"
-msgstr "Erakutsi erreproduzitzaile nagusiaren leihoa"
+msgid "File name"
+msgstr "Fitxategi-Izena"
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Custom title"
+msgstr "Azal pertsonalizatua"
-#: src/gtkui/ui_manager.c:56
+#: src/gtkui/columns.c:39
#, fuzzy
-msgid "Show statusbar"
-msgstr "Egoera"
+msgid "Bitrate"
+msgstr "Bit-tasa (kbps):"
-#: src/gtkui/ui_manager.c:57
+#: src/gtkui/columns.c:286
#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Kargatu erreprodukzio-zerrenda"
+msgid "Choose Columns"
+msgstr "Erakutsi erreproduzitzailea"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pausatu"
+#: src/gtkui/columns.c:300
+#, fuzzy
+msgid "Available:"
+msgstr "aldagaia"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Gelditu"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
+msgstr ""
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Aurrekoa"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr ""
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Hurrengoa"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr ""
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Erreprodukzio-zerrenda"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr ""
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Erreprodukzio-zerrenda berria"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr ""
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Ezabatu erreprodukzio-zerrenda"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr ""
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Kargatu erreprodukzio-zerrenda"
+msgid "Disable"
+msgstr "aldagaia"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr ""
-"Erreprodukzio-zerrendaren fitxategia kargatzen du hautatutako erreprodukzio-"
-"zerrendan."
+#: src/gtkui/menus.c:132
+#, fuzzy
+msgid "_Open Files ..."
+msgstr "Gehitu fitxategiak..."
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:133
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Kargatu erreprodukzio-zerrenda"
+msgid "Open _URL ..."
+msgstr "Gehitu fitxategiak..."
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Hautatutako erreprodukzio-zerrenda gordetzen du"
+#: src/gtkui/menus.c:134
+#, fuzzy
+msgid "_Add File ..."
+msgstr "Gehitu fitxategiak..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Save All Playlists"
-msgstr "Gorde erreprodukzio-zerrenda"
+msgid "Add U_RL ..."
+msgstr "Gehitu fitxategiak..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
+#: src/gtkui/menus.c:137
+#, fuzzy
+msgid "A_bout ..."
+msgstr "Honi buruz: "
-#: src/gtkui/ui_manager.c:103
+#: src/gtkui/menus.c:138
#, fuzzy
-msgid "Refresh"
-msgstr "Freskatu tasa"
+msgid "_Preferences ..."
+msgstr "Hobespenak"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr ""
-"Erreprodukzio-zerrendako sarrera bati esleituta dagoen metadatuak freskatzen "
-"ditu."
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
+msgid "_Quit"
+msgstr "I_rten"
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Playlist Manager"
-msgstr "Zerrenda-kudeatzailea"
+msgid "_Play"
+msgstr "Erreproduzitu"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Erreprodukzio-zerrenden kudeatzailea irekitzen du."
+#: src/gtkui/menus.c:143
+#, fuzzy
+msgid "Paus_e"
+msgstr "Pausatu"
-#: src/gtkui/ui_manager.c:111
+#: src/gtkui/menus.c:144
#, fuzzy
-msgid "Add URL ..."
-msgstr "Gehitu fitxategiak..."
+msgid "_Stop"
+msgstr "Gelditu"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Gehitu urruneko pista erreprodukzio-zerrendari."
+#: src/gtkui/menus.c:145
+#, fuzzy
+msgid "Pre_vious"
+msgstr "Aurrekoa"
-#: src/gtkui/ui_manager.c:115
+#: src/gtkui/menus.c:146
#, fuzzy
-msgid "Add Files ..."
-msgstr "Gehitu fitxategiak..."
+msgid "_Next"
+msgstr "Hurrengoa"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Gehitu fitxategiak erreprodukzio-zerrendari."
+#: src/gtkui/menus.c:148
+#, fuzzy
+msgid "_Repeat"
+msgstr "Errepikatu"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Kendu guztiak"
+#: src/gtkui/menus.c:149
+#, fuzzy
+msgid "S_huffle"
+msgstr "Ausazkoa"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Sarrera guztiak kentzen ditu erreprodukzio-zerrendatik"
+#: src/gtkui/menus.c:150
+#, fuzzy
+msgid "N_o Playlist Advance"
+msgstr "Erreprodukzio-zerrenda aurreraturik ez"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Kendu desautatutakoak"
+#: src/gtkui/menus.c:151
+#, fuzzy
+msgid "Stop _After This Song"
+msgstr "Gelditu uneko abestiaren ondoren"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Desautatutako sarrerak kentzen ditu erreprodukzio-zerrendatik."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Kendu hautatutakoak"
+#: src/gtkui/menus.c:154
+#, fuzzy
+msgid "Jump to _Time ..."
+msgstr "Jauzi denborara"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Hautatutako sarrerak kentzen ditu erreprodukzio-zerrendatik."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:131
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "Sort"
-msgstr "Ataka"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "Pista zenbakiaren arabera"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
+#: src/gtkui/menus.c:159
+#, fuzzy
+msgid "By _Title"
msgstr "Tituluaren arabera"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
+#: src/gtkui/menus.c:160
+#, fuzzy
+msgid "By _Artist"
msgstr "Artistaren arabera"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "Albuma:"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
#, fuzzy
-msgid "By File Path"
+msgid "By Release _Date"
+msgstr "Dataren arabera"
+
+#: src/gtkui/menus.c:163
+#, fuzzy
+msgid "By _File Path"
msgstr "Fitxategi-izenaren arabera"
-#: src/gtkui/ui_manager.c:142
+#: src/gtkui/menus.c:164
#, fuzzy
-msgid "Reverse Order"
-msgstr "Alderantzikatu zerrenda"
+msgid "By _Custom Title"
+msgstr "Azal pertsonalizatua"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr ""
+#: src/gtkui/menus.c:166
+#, fuzzy
+msgid "R_everse Order"
+msgstr "Alderantzikatu zerrenda"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efektuak"
+#: src/gtkui/menus.c:167
+#, fuzzy
+msgid "_Random Order"
+msgstr "_Ausazkoa"
-#: src/gtkui/ui_manager.c:151
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
#, fuzzy
-msgid "Equalizer"
-msgstr "Erakutsi ekualizadorea"
+msgid "_Refresh"
+msgstr "Freskatu tasa"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Ikusi"
+#: src/gtkui/menus.c:172
+#, fuzzy
+msgid "_Sort"
+msgstr "Ataka"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Fitxategia"
+#: src/gtkui/menus.c:175
+#, fuzzy
+msgid "_Close"
+msgstr "Itxi"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "Components"
-msgstr "Konpositorea:"
+msgid "_Import ..."
+msgstr "Inportatu"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Ikusi pistaren xehetasunak"
+#: src/gtkui/menus.c:178
+#, fuzzy
+msgid "_Export ..."
+msgstr "Esportatu"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Ikusi pistaren xehetasunak"
+#: src/gtkui/menus.c:180
+#, fuzzy
+msgid "_Playlist Manager ..."
+msgstr "Zerrenda-kudeatzailea"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Audacious-i buruz"
+#: src/gtkui/menus.c:183
+#, fuzzy
+msgid "Volume _Up"
+msgstr "Igo bolumena"
-#: src/gtkui/ui_manager.c:178
+#: src/gtkui/menus.c:184
#, fuzzy
-msgid "Open Files ..."
-msgstr "Gehitu fitxategiak..."
+msgid "Volume _Down"
+msgstr "Jeitsi bolumena"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "Kargatu eta erreproduzitu fitxategi bat"
+#: src/gtkui/menus.c:186
+#, fuzzy
+msgid "_Equalizer"
+msgstr "Erakutsi ekualizadorea"
+
+#: src/gtkui/menus.c:188
+#, fuzzy
+msgid "E_ffects"
+msgstr "Efektuak"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Erreproduzitu multimedia hautatutako kokalekutik"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Pluginen zerbitzuak"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Hobespenak"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "Egoera"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Ireki hobespenen leihoa"
+#: src/gtkui/menus.c:197
+#, fuzzy
+msgid "Show Column _Headers"
+msgstr "Erakutsi erreproduzitzailea"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "I_rten"
+#: src/gtkui/menus.c:198
+#, fuzzy
+msgid "Choose _Columns ..."
+msgstr "Erakutsi erreproduzitzailea"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Irten Audacious-etik"
+#: src/gtkui/menus.c:199
+#, fuzzy
+msgid "Scrol_l on Song Change"
+msgstr "Abestiaren mezua"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "Ezarri A-B"
+#: src/gtkui/menus.c:202
+#, fuzzy
+msgid "_File"
+msgstr "Fitxategia"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Garbitu A-B"
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "Erreprodukzioa"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "Saltatu zerrendaren hasierara"
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "Erreprodukzio-zerrenda"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Joan fitxategira"
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "Gailuak"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Txandakatu ilara"
+#: src/gtkui/menus.c:206
+msgid "_Output"
+msgstr ""
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Erreprodukzio-zerrendako ilarako sarrerak gaitzen/desgaitzen ditu."
+#: src/gtkui/menus.c:207
+#, fuzzy
+msgid "_View"
+msgstr "Ikusi"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "Unekoa"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
+msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr ""
+
+#: src/gtkui/menus.c:216
#, fuzzy
-msgid "Paste"
+msgid "_Paste"
msgstr "Azkarrena"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
+#: src/gtkui/menus.c:217
+#, fuzzy
+msgid "Select _All"
msgstr "Hautatu denak"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Hautatu erreprodukzio-zerrendako sarrera guztiak."
+#: src/gtkui/menus.c:222
+#, fuzzy
+msgid "_Rename"
+msgstr "Fitxategi-Izena"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Ez hautatu ezer"
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
+msgstr ""
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Erreprodukzio-zerrendako sarrera guztiak desautatzen ditu."
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
+msgstr "Errorea"
+
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
msgid "mono"
msgstr "monoa"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
msgid "stereo"
msgstr "estereoa"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Kanalak"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "Kanalak"
+msgstr[1] "Kanalak"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Aurreko pista"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Erreproduzitu"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Pausatu/jarraitu"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Gelditu"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Hurrengo pista"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Joan 5 segundo aurrera"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Joan 5 segundo atzera"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Mututu"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Igo bolumena"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Jeitsi bolumena"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+msgid "Jump to File"
+msgstr "Joan fitxategira"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Txandakatu erreproduzitzailearen leihoak"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "Erakutsi pantaila gaineko mezuak (OSD)"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+#, fuzzy
+msgid "Toggle Repeat"
+msgstr "Errepikatu"
+
+#: src/hotkey/gui.c:85
+#, fuzzy
+msgid "Toggle Shuffle"
+msgstr "Ausazkoa"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(bat ere ez)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3176,15 +1853,15 @@ msgstr ""
"\n"
"Jarraitzea nahi duzu?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Saguaren botoiak lotzea"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Laster-tekla globalen pluginaren konfigurazioa"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3192,23 +1869,23 @@ msgstr ""
"Sakatu tekla konbinazioa testu-eremuaren barruan.\n"
"Saguaren botoiak ere lotu ditzakezu."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Laster-teklak"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Ekintza:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Tekla-konbinazioa:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "Laster-tekla globalen pluginari buruz"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3261,7 +1938,7 @@ msgstr "Konexio modua:"
msgid "Enable debug printing"
msgstr "Gaitu arazketa mezuak"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3279,134 +1956,20 @@ msgstr ""
"Audacious-entzako moldaketa:\n"
"Giacomo Lozito abildua develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "JACK irteerako plugina 0.17 buruz"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "LADSPA plugin honek ez du erabiltzale-kontrolik"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Izena"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UIDa"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Instalatutako pluginak"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Exekutatzen dauden pluginak"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Gehitu"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Kendu"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA pluginen katalogoa"
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "LIRC Audacious plugina"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRC plugina "
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
-"\n"
-"Plugin bakun bat LIRC urruneko kontrolaren daemonarekin\n"
-"Audacious kontrolatzen uzteko.\n"
-"\n"
-"Audacious-ek erabiltzeko moldatua: Tony Vroon <chainsaw@gentoo.org>\n"
-"XMMS LIRC pluginetik:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"LIRC-ren informazio gehiagorako ikusi:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "LIRC pluginaren ezarpenak"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Birkonektatu LIRC zerbitzariarekin"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Denbora-muga birkonektatu aurretik (seg.):"
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Birkonektatu"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Konexioa"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: ezin izan da LIRC euskarria hasieratu\n"
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: ezin izan da LIRCen konfigurazio-fitxategia irakurri\n"
-"%s: irakur ezazu LIRCren dokumentazioa\n"
-"%s: konfigurazio-fitxategi egokia nola sortzen den jakiteko\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: birkonektatzen saiatzen...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: \"%s\" komando ezezaguna\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: LIRCtik deskonektatuta\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: saiatu %d segundoro birkonektatzen...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3415,11 +1978,11 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "Metronom-i buruz"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3434,269 +1997,48 @@ msgstr ""
"adib. tact://77 77 kolpe minutuko erreproduzitzeko\n"
"edo tact://60*3/4 60 bpm erreproduzitzeko 3/4 ukimenean"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Ukimen sortzailea: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Ukimen sortzailea: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug konfigurazioa"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Monoa (bildu kanalak)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "Gertuena (azkarrena)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Lineala (azkarra)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Spline (kalitate ona)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-tap Fir (oso kalitate altua)"
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Lagin-tasa"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Gaitu"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Sakonera"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Atzerapena"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Reverb"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Kopurua"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Barrutia"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Baxuen bultzada"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr "Surround"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Oharra: aurre-anp altuegi jartzeak\n"
-" mozketak sor ditzake\n"
-"(klik eta pop nazkagarriekin!)"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Aurre-anp"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Erabili fitxategi-izena abestiaren titulu gisa"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Erreprodukzio-zerrendaren informazio azkarra"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Zarataren murriztapena"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Erreproduzitu Amiga MOD"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Ez begiztatu"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Begizta"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "denbora(k)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Begiztatu beti"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Begiztatzen"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD informazioa"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Fitxategi-izena:\n"
-"Titulua:\n"
-"Mota:\n"
-"Luzera:\n"
-"Abiadura:\n"
-"Tenpoa:\n"
-"Laginak:\n"
-"Instrumentuak:\n"
-"Ereduak:\n"
-"Kanalak:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Laginak"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Instrumentuak"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Mezua"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Modplug sarrerako plugina Audacious-en bertsio honentzako: "
-
-#: src/modplug/gui/main.cxx:52
-#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Modplug soinu-motorra Olivier Lapicque-k garatua.\n"
-"XMMSen interfazea Modplug-arentzako Kenton Varda-k garatua.\n"
-"(c)2000 Olivier Lapicque eta Kenton Varda.\n"
-"Eguneraketak eta mantetze lanak: Konstanty Bialkowski.\n"
-"BMPrako moldaketak: Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Modplug-i buruz"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Ezin izan da pixmaparen fitxategia aurkitu: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Igo hautatutako pistak"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:298
msgid "Upload in progress..."
msgstr "Igotzearen aurrerapena..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "MTP gailuaren kudeatzailea"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
+msgstr ""
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
+#: src/mtp_up/mtp.c:311
+#, fuzzy
+msgid "Disconnect MTP Device"
msgstr "Deskonektatu gailua"
-#: src/null/null.c:63
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Stopped"
+msgstr "Gelditu"
+
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Audacious is not playing."
+msgstr "Audacious - ikusgaitasunaren abisua"
+
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Null irteerako plugina "
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3704,15 +2046,15 @@ msgstr ""
" Christian Birchinger <joker@netswarm.net>\n"
"XMMS-eko pluginean oinarrituta, Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Null irteerari buruz"
-#: src/null/null.c:93
+#: src/null/null.c:94
msgid "Null output preferences"
msgstr "Null irteeraren hobespenak"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr "Exekutatu denbora-errealean"
@@ -3726,11 +2068,11 @@ msgstr "PCM gailu lehenetsia (%s)"
msgid "OSS4 Output Plugin Preferences"
msgstr "Egoeraren ikonoa plugina - Hobespenak"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "Soinu-gailua:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "Erabili bestelako gailua:"
@@ -3743,12 +2085,12 @@ msgstr "Gorde VMIX bolumena saioen artean"
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "ESounD pluginari buruz"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3791,40 +2133,45 @@ msgstr ""
msgid "OSS4 error"
msgstr ""
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "Lehenetsia (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "Lehenetsia"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "OSS kontrolatzailearen konfigurazioa"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "Gailuak"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "Bufferreratzea:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "Aurrebufferra (ehunekoa):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "Bufferreratzen"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "Nahastailearen ezarpenak:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr "Bolumenak Nagusia kontrolatzen du, ez PCMa"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "Nahastailea"
@@ -3868,11 +2215,11 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Audacious PulseAudio irteeraren plugina"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
msgid ""
"Audacious PulseAudio Output Plugin\n"
"\n"
@@ -3908,54 +2255,54 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "Egoeraren ikonoa pluginari buruz"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
#, fuzzy
msgid "Change password"
msgstr "Aldatu erreprodukzioaren abestia"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>Zerbitzuak</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "Erabiltzaile-izena:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "Pasahitza:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
#, fuzzy
msgid "Scrobbler URL:"
msgstr "Scrobbler errorea"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
#, fuzzy
msgid "Scrobbler"
msgstr "Scrobbler errorea"
@@ -3976,16 +2323,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Scrobbler pluginari buruz"
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "JACK irteerako plugina 0.17 buruz"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "Errorea"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "%s(r)i buruz"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "Itxi"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "Errorea"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "Ados"
+
#: src/sid/xs_fileinfo.c:151
msgid "General info"
msgstr "Informazio orokorra"
@@ -3995,6 +2360,11 @@ msgstr "Informazio orokorra"
msgid "Tune #%i: "
msgstr "%i. doinua: "
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "Ezin izan da pixmaparen fitxategia aurkitu: %s"
+
#: src/sid/xs_interface.c:234
msgid "Audacious-SID configuration"
msgstr "Audacious-SID konfigurazioa"
@@ -4310,15 +2680,15 @@ msgstr "Esportatu"
msgid "Use"
msgstr "Erabili"
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
msgid "Save"
msgstr "Gorde"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
msgid "Import"
msgstr "Inportatu"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
msgid "Delete"
msgstr "Ezabatu"
@@ -4351,6 +2721,11 @@ msgstr ""
msgid "Playtime:"
msgstr "Erreprodukzio-denbora:"
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+msgid "seconds"
+msgstr "segundo"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr "Gutxieneko erreprodukzio-denbora:"
@@ -4460,10 +2835,6 @@ msgstr ""
msgid "Song title format:"
msgstr "Abestiaren titulu-formatua:"
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Titulua"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr "Gehitu azpidoinuak erreprodukzio-zerrendari"
@@ -4615,11 +2986,11 @@ msgstr "Bai"
msgid "No"
msgstr "Ez"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "Azaldun interfazeari buruz"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4627,475 +2998,466 @@ msgstr ""
"Copyright-a (c) 2008, Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "_Player:"
msgstr "_Erreproduzitzailea:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr "Hautatu erreproduzitzaile nagusiaren leihoko letra-tipoa:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "_Playlist:"
msgstr "_Erreprodukzio-zerrenda:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "Select playlist font:"
msgstr "Hautatu erreprodukzio-zerrendaren letra-tipoa:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
msgid "<b>_Fonts</b>"
msgstr "<b>_Letra-tipoak</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Erabili bitmapako letra-tipoak erabilgarri badaude"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-"Erabili bitmapako letra-tipoak erabilgarri egonez gero. Bitmapako letra-"
-"tipoek ez dituzte Unicode kateak onartzen."
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Hainbat</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Erakutsi bereizleak erreprodukzio-zerrendan"
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Erakutsi leiho-kudeatzailearen dekorazioa"
-
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Leiho-kudeatzailea gaitzen du leihoen dekorazioak erakusteko."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Erabili bi bideko testu-korritzailea"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
msgstr ""
-"Hautatzen bada, leiho nagusiko fitxategi-informazioaren testua bi "
-"norabidetan korrituko da. Ez bada hautatzen, testua norabide bakar batean "
-"korrituko da."
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Desgaitu barneko gtk gaia"
+#: src/skins/skins_cfg.c:346
+msgid "<b>_Skin</b>"
+msgstr "<b>_Azala</b>"
-#: src/skins/skins_cfg.c:333
+#: src/skins/skins_cfg.c:393
#, fuzzy
-msgid "Random skin on play"
-msgstr "Nahastu ausaz erreprodukzio-zerrenda"
+msgid "Interface Preferences"
+msgstr "Hobespenak"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Baimendu azal osatugabeak kargatzea"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Aurre-anp"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-"Hautatzen bada, Audacious-ek ez du ukatuko hondatutako azalak kargatzea. "
-"Baldin eta zure azal gogokoenak ez badu funtzionatzen soilik."
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Kolorea doitzea"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr ""
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-"Audacious-ek azaldun interfazeko kolorearen balantzea aldatzea baimentzen "
-"dizu. Azpiko graduatzaileak hori egitea utziko dizu."
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Urdina"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "22050 Hz "
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Berdea"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Gorria"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "1 kHz"
+msgstr "11 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Azala</b>"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22 kHz"
+
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44 kHz"
+
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "8 kHz"
+msgstr "48 kHz"
-#: src/skins/skins_cfg.c:574
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "Color adjustment ..."
-msgstr "Kolorea doitzea"
+msgid "16 kHz"
+msgstr "48 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
msgid "Audacious Equalizer"
msgstr "Audacious-en ekualizadorea"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr "Aurrezarpenak"
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
#, fuzzy
msgid "surround"
msgstr "Surround"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - ikusgaitasunaren abisua"
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Erakutsi erreproduzitzaile nagusiaren leihoa"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ezikusi egin"
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Audacious bere leiho guztiak ezkutatuta dituela abiatu da.\n"
-"Erreproduzitzailearen leihoa erakustea nahiko duzu Audacious kontrolatzeko; "
-"bestela, audtool edo gaitutako pluginen ('egoeraren ikonoa' plugina "
-"bezalakoa) bidez urrunetik kontrola dezakezu."
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Ezikusi egin, erakutsi/ezkutatu beti kontrolatzen da urrunetik"
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - hondatutako GTK motorraren erabileraren abisua"
-
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Hondatutako GTK motorra erabiltzen</b></big>\n"
-"\n"
-"Audacious-ek hondatutako GTK motorra erabiltzen ari zarela detektatu du.\n"
-"\n"
-"Erabiltzen ari zaren gai-motorra, <i>%s</i>, azal modernoek dituzten "
-"eginbide batzuetatik bateraezina da. Bateragarriak ez diren eginbideak "
-"desgaitu egn dira saio honetan.\n"
-"\n"
-"Eginbide hauek erabiltzeko, egokiena bestelako GTK gai-motor bat erabiltzea "
-"izango duzu."
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Ez bistaratu abisu hau berriro"
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
+#: src/skins/ui_main.c:807
+#, fuzzy, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr "Bilatu: %d:%-2.2d/%d:%-2.2d (%% %d)"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Bolumena: %% %d"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Balantzea: %% %d ezkerrean"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Balantzea: erdian"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Balantzea: %% %d eskuinean"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Aukeren menua"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Desgaitu 'Beti gainean'"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "Gaitu 'Beti gainean'"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Fitxategi-informazioaren koadroa"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Desgaitu 'Interfazea eskalatzea'"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Gaitu 'Interfazea eskalatzea'"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Bisualizazioaren menua"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "Erreprodukzio-zerrenda"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
#, fuzzy
msgid "Stopping after song."
msgstr "Gelditu uneko abestiaren ondoren"
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Autokorritu abesti-izena"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Gelditu uneko abestiaren ondoren"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Erpinak"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Errepikatu"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Ausazkoa"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Erreprodukzio-zerrenda aurreraturik ez"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Erakutsi erreproduzitzailea"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Erakutsi erreprodukzio-zerrendaren editorea"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Erakutsi ekualizadorea"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Beti gainean"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Jarri laneko area guztietan"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Bildu erreproduzitzailea"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Bildu erreprodukzio-zerrendaren editorea"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Bildu ekualizadorea"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Eskalatu"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Tamaina bikoitza"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Erraz mugitu"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analizatzailea"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Esparrua"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Ahotsmarka"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Itzalita"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normala"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Sua"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Marra bertikalak"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Marrak"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Barrak"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Puntu esparrua"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Marra esparrua"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Esparru soila"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Izotza"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Leuna"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Motelena"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Motela"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Tartekoa"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Azkarra"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Azkarrena"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Igarotako denbora"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Geratzen den denbora"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pausatu"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Aurrekoa"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Hurrengoa"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Bisualizazioa"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Bisualizazio modua"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Analizatzaile modua"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Esparru modua"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Ahotsmarkaren modua"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "LeihoItzaldura VU modua"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Analizatzailearen erortzea"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Erpinen erortzea"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Erreprodukzio-zerrenda"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Erreprodukzio-zerrenda berria"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Hautatu hurrengo erreprodukzio-zerrenda"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Hautatu aurreko erreprodukzio-zerrenda"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Ezabatu erreprodukzio-zerrenda"
+
#: src/skins/ui_manager.c:222
+#, fuzzy
+msgid "Import Playlist"
+msgstr "Kargatu erreprodukzio-zerrenda"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr ""
+"Erreprodukzio-zerrendaren fitxategia kargatzen du hautatutako erreprodukzio-"
+"zerrendan."
+
+#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "Kargatu erreprodukzio-zerrenda"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Hautatutako erreprodukzio-zerrenda gordetzen du"
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "Gorde erreprodukzio-zerrenda"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
msgid "Refresh List"
msgstr "Freskatu zerrenda"
-#: src/skins/ui_manager.c:226
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+"Erreprodukzio-zerrendako sarrera bati esleituta dagoen metadatuak freskatzen "
+"ditu."
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr "Zerrenda-kudeatzailea"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr "Erreprodukzio-zerrenden kudeatzailea irekitzen du."
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr "Ikusi"
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+#, fuzzy
+msgid "Interface Preferences ..."
+msgstr "Hobespenak"
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr "Gehitu interneteko helbidea..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr "Gehitu urruneko pista erreprodukzio-zerrendari."
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr "Gehitu fitxategiak..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr "Gehitu fitxategiak erreprodukzio-zerrendari."
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr "Bilatu eta hautatu"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
@@ -5103,223 +3465,371 @@ msgstr ""
"Erreprodukzio-zerrendan bilatzen du eta irizpide zehatz batzuetan "
"oinarritutako erreprodukzio-zerrendako sarrerak hautatzen ditu."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
msgid "Invert Selection"
msgstr "Alderantzikatu hautapena"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr "Hautatutako edo hautatu gabeko sarrerak alderantzikatzen ditu."
+#: src/skins/ui_manager.c:267
+msgid "Select All"
+msgstr "Hautatu denak"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr "Hautatu erreprodukzio-zerrendako sarrera guztiak."
+
+#: src/skins/ui_manager.c:271
+msgid "Select None"
+msgstr "Ez hautatu ezer"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr "Erreprodukzio-zerrendako sarrera guztiak desautatzen ditu."
+
+#: src/skins/ui_manager.c:277
+msgid "Remove All"
+msgstr "Kendu guztiak"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr "Sarrera guztiak kentzen ditu erreprodukzio-zerrendatik"
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr "Garbitu ilara"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr "Erreprodukzio-zerrendarekin esleitutako ilara garbitzen du."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr "Kendu fitxategi erabilkaitzak"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr ""
"Erabilgarri ez dauden fitxategiak kentzen ditu erreprodukzio-zerrendatik."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr "Kendu bikoiztuak"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+msgid "By Title"
+msgstr "Tituluaren arabera"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr ""
"Tituluaren arabera bikoiztutako sarrerak kentzen ditu erreprodukzio-"
"zerrendatik."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
msgid "By Filename"
msgstr "Fitxategi-izenaren arabera"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
"Fitxategi-izenaren arabera bikoiztutako sarrerak kenten ditu erreprodukzio-"
"zerrendatik."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
msgid "By Path + Filename"
msgstr "Bide-izenaren arabera"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
"Bide-izen osoaren arabera bikoiztutako sarrerak kentzen ditu erreprodukzio-"
"zerrendatik."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr "Kendu desautatutakoak"
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr "Desautatutako sarrerak kentzen ditu erreprodukzio-zerrendatik."
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr "Kendu hautatutakoak"
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr "Hautatutako sarrerak kentzen ditu erreprodukzio-zerrendatik."
+
+#: src/skins/ui_manager.c:313
+msgid "Randomize List"
+msgstr "Nahastu ausaz zerrenda"
+
+#: src/skins/ui_manager.c:314
+msgid "Randomizes the playlist."
+msgstr "Nahastu ausaz erreprodukzio-zerrenda"
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr "Alderantzikatu zerrenda"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr "Alderantzikatu erreprodukzio-zerrenda."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
msgid "Sort List"
msgstr "Ordenatu zerrenda"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr "Tituluaren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "Albuma:"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
#, fuzzy
msgid "Sorts the list by album."
msgstr "Tituluaren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+msgid "By Artist"
+msgstr "Artistaren arabera"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr "Artistaren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr "Fitxategi-izenaren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr "Bide-izen osoaren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
msgid "By Date"
msgstr "Dataren arabera"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr "Eraldatze-dataren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+msgid "By Track Number"
+msgstr "Pista zenbakiaren arabera"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr "Pista zenbakiaren arabera ordenatzen du zerrenda."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
msgid "Sort Selected"
msgstr "Ordenatu hautatutakoak"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+msgid "File"
+msgstr "Fitxategia"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "Laguntza"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr "Pluginen zerbitzuak"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+msgid "View Track Details"
+msgstr "Ikusi pistaren xehetasunak"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr "Ikusi pistaren xehetasunak"
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+msgid "About Audacious"
+msgstr "Audacious-i buruz"
+
+#: src/skins/ui_manager.c:401
msgid "Play File"
msgstr "Erreproduzitu fitxategia"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+msgid "Load and play a file"
+msgstr "Kargatu eta erreproduzitu fitxategi bat"
+
+#: src/skins/ui_manager.c:404
msgid "Play Location"
msgstr "Erreproduzitu kokalekua"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+msgid "Play media from the selected location"
+msgstr "Erreproduzitu multimedia hautatutako kokalekutik"
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr "Pluginen zerbitzuak"
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr "Hobespenak"
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr "Ireki hobespenen leihoa"
+
+#: src/skins/ui_manager.c:413
+msgid "Quit Audacious"
+msgstr "Irten Audacious-etik"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr "Ezarri A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr "Garbitu A-B"
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr "Saltatu zerrendaren hasierara"
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+msgid "Jump to Time"
+msgstr "Jauzi denborara"
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr "Txandakatu ilara"
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Erreprodukzio-zerrendako ilarako sarrerak gaitzen/desgaitzen ditu."
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "Unekoa"
+
+#: src/skins/ui_manager.c:438
+#, fuzzy
+msgid "Paste"
+msgstr "Azkarrena"
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr "Kargatu"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
msgid "Preset"
msgstr "Aurrezarpena"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr "Kargatu aurrezarpena"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr "Autokargaren aurrezarpena"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr "Kargatu autokargaren aurrezarpenak"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
msgid "Load default preset into equalizer"
msgstr "Kargatu aurrezarpen lehenetsia ekualizadorean"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
msgid "Zero"
msgstr "Zero"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr "Ezarri ekualizadorearen aurrezarpenen maila zerorekin"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr "Fitxategitik"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
msgid "Load preset from file"
msgstr "Kargatu aurrezarpenak fitxategitik"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr "WinAMP EQF fitxategitik"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr "Kargatu aurrezarpenak WinAMP EQF fitxategitik"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr "WinAMP aurrezarpenak"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr "Inportatu WinAMP aurrezarpenak"
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr "Gorde aurrezarpenak"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr "Gorde autokargaren aurrezarpenak"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
msgid "Save default preset"
msgstr "Gorde aurrezarpen lehenetsia"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
msgid "To file"
msgstr "Fitxategian"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr "Gorde aurrezarpena fitxategian"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr "WinAMP EQF fitxategian"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr "Gorde aurrezarpena WinAMP EQF fitxategian"
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
msgid "Delete preset"
msgstr "Ezabatu aurrezarpena"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr "Ezabatu autokargaren aurrezarpenak"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr "Bilatu sarrerak erreprodukzio-zerrenda aktiboan"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5331,120 +3841,61 @@ msgstr ""
"minuskulak ez bereiztuz. Ez badakizu adierazpen erregularrak nola ibiltzen "
"diren, sartu bilatzea nahi duzunaren zati literal bat."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Izenburua: "
+
+#: src/skins/ui_playlist.c:267
msgid "Album: "
msgstr "Albuma: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
msgid "Artist: "
msgstr "Artista: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
msgid "Filename: "
msgstr "Fitxategi-izena: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr "Garbitu aurreko hautapena bilatu aurretik"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr "Txandakatu automatikoki ilara bat datozen sarrerentzako"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr "Sortu erreprodukzio-zerrenda berria bat datozen sarrerekin"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Gorde erreprodukzio-zerrenda estatiko gisa"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Erabili bide-izen erlatiboa"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Kargatu erreprodukzio-zerrenda"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Gorde erreprodukzio-zerrenda"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr "Audacious erreprodukzio-zerrendaren editorea"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Konprimitutako Winamp 2.x azala"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Deskonprimitutako Winamp 2.x azala"
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Ezin izan da direktorioa (%s) sortu: %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
msgid "About sndfile plugin"
msgstr "sndfile pluginari buruz"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5485,57 +3936,65 @@ msgstr ""
"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
"Boston, MA 02110-1301, USA."
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "SndStretch-i buruz"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
msgid "Volume corr."
msgstr "Bolumenaren korr."
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr "Teilakatze laburra"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
msgid "Speed"
msgstr "Abiadura"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr "Tonua"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr "Eskalatu"
+
+#: src/sndstretch/sndstretch_xmms.c:363
+msgid "Options"
+msgstr "Aukerak"
+
+#: src/sndstretch/sndstretch_xmms.c:382
msgid "SndStretch - Configuration"
msgstr "SndStretch - Konfigurazioa"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr "Exekutatuko den komandoa audacious-ek abesti berria hastean."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr "Komandoa:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr "Exekutatuko den komandoa abestiaren amaierantz joatean."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
"Exekutatuko den komandoa Audacious erreprodukzio-zerrendaren amaierara "
"iristean."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Exekutatuko den komandoa abesti baten titulua aldatzean (adib. sareko "
"korronteen tituluak)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
#, fuzzy
msgid ""
"You can use the following format strings which\n"
@@ -5549,7 +4008,10 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Honako formatu-kateak erabil ditzakezu\n"
"komandoari deitu aurretik ordeztuko direnak\n"
@@ -5565,7 +4027,7 @@ msgstr ""
"%%t: erreprodukzio-zerrendaren posizioa (%%02d)\n"
"%%p: unean erreproduzitzen (1 edo 0)"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5573,24 +4035,20 @@ msgstr ""
"<span size='small'>Shell-ari emandako parametroak komatxoen artean kapsulatu "
"behar dira. Bestela segurtasunezko arriskua izan daiteke.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr "Komandoak"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "Abestiaren mezua"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Espektro-analizatzailea"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "Egoeraren ikonoa pluginari buruz"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
#, fuzzy
msgid ""
"Status Icon Plugin\n"
@@ -5607,35 +4065,48 @@ msgstr ""
"Plugin honek egoeraren ikonoa eskaintzen du,\n"
"leiho-kudeatzailearen sistemako erretiluko arean kokatua.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "Egoeraren ikonoa plugina - Hobespenak"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "Eskuineko botoiaren menua"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "1. erreprodukzio-menu txikia"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "2. erreprodukzio-menu txikia"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "Saguaren korritze-ekintza"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "Aldatu bolumena"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "Aldatu erreprodukzioaren abestia"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+#, fuzzy
+msgid "Other settings"
+msgstr "Nahastailearen ezarpenak"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr ""
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:41
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5645,120 +4116,19 @@ msgstr ""
"\n"
"Johan Levin 1999."
-#: src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:65
msgid "About Extra Stereo Plugin"
msgstr "Estra Estereo plugina"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:102
msgid "Configure Extra Stereo"
msgstr "Konfiguratu Estra Estereo"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-#, fuzzy
-msgid "Stream browser"
-msgstr "arakatu"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-#, fuzzy
-msgid "Stream name"
-msgstr "Instrumentuaren izena"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-#, fuzzy
-msgid "Remove Bookmark"
-msgstr "Kendu etiketa"
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "OSS kontrolatzaileari buruz"
-
-#: src/streambrowser/streambrowser.c:332
-#, fuzzy
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright-a (c) 2007, Calin Crisan <ccrisan@gmail.com> eta Audacious "
-"taldea.\n"
-"\n"
-"Eskerrik asko libcdio-ren garatzaileei <http://www.gnu.org/software/libcdio/"
-">\n"
-"\teta libcddb-eko garatzaileei <http://libcddb.sourceforge.net/>.\n"
-"\n"
-"Eskerrik asko Tony Vroon-i gainbegiratzeagatik eta ni gidatzeagatik\n"
-"\n"
-"Google Summer of Code 2007 proiektu bat izan da."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-#, fuzzy
-msgid "Streambrowser"
-msgstr "arakatu"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Sun kontrolatzaileari buruz"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun kontrolatzailea\n"
-"\n"
-"Copyright-a (c) 2001 CubeSoft Communications, Inc.\n"
-"Mantentzailea: <vedge abildua csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Audioa kontrolatzeko gailua:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Buffer-tamaina (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Bolumena kontrolatzeko gailua:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMSek esklusiboki darabil nahastailea"
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun kontrolatzailearen konfigurazioa"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "Tonu-sortzaileari buruz"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5773,15 +4143,20 @@ msgstr ""
"Hau erabiltzeko gehitu URL bat, tone://maiztasun1;maiztasun2;maiztasun3;...\n"
"adib. tone://2000;2005 2000Hz eta 2005Hz tonuak erreproduzitzeko"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "Tonu-sortzailea: "
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "ESounD pluginari buruz"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "Gainidatzi titulu generikoak"
@@ -5795,15 +4170,15 @@ msgstr "Titulu formatua:"
msgid "Ogg Vorbis Tags"
msgstr "Ogg Vorbis etiketak:"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Ogg Vorbis audioaren pluginaren konfigurazioa"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Ogg Vorbis audioaren pluginari buruz"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5863,12 +4238,12 @@ msgstr ""
"\n"
"Audacious-entzako inplementazioa: Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack deskodetzailearen %s plugina"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5880,6 +4255,1610 @@ msgstr ""
"Pluginaren kode batzuk Miles Egan-ek garatua\n"
"Bisitatu Wavpack gunea: http://www.wavpack.com/\n"
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Erabili bitmapako letra-tipoak erabilgarri badaude"
+
+#~ msgid ""
+#~ "Use bitmap fonts if they are available. Bitmap fonts do not support "
+#~ "Unicode strings."
+#~ msgstr ""
+#~ "Erabili bitmapako letra-tipoak erabilgarri egonez gero. Bitmapako letra-"
+#~ "tipoek ez dituzte Unicode kateak onartzen."
+
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>_Hainbat</b>"
+
+#~ msgid "Use two-way text scroller"
+#~ msgstr "Erabili bi bideko testu-korritzailea"
+
+#~ msgid "About "
+#~ msgstr "Honi buruz: "
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright-a (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Plugin hau GNU GPL lizentziako terminoen eta baldintzen pean kaleratua.\n"
+#~ "Xehetasunetarako ikusi honako web orrialdea:\n"
+#~ "http://www.gnu.org/licenses/lgpl.html\n"
+#~ "\n"
+#~ "Plugin honek AdPlug liburutegia erabiltzen du. AdPlug-en copyright-a (C) "
+#~ "Simon Peter, eta al.\n"
+#~ "Estekatutako AdPlug liburutegiaren bertsioa: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: Konfigurazioa"
+
+#~ msgid "Sound quality"
+#~ msgstr "Soinuaren kalitatea"
+
+#~ msgid "Resolution"
+#~ msgstr "Bereizmena"
+
+#~ msgid "8bit"
+#~ msgstr "8 bit"
+
+#~ msgid "16bit"
+#~ msgstr "16 bit"
+
+#~ msgid "Channels"
+#~ msgstr "Kanalak"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "Estereoa ezartzea ez da gomendagarria, ez baduzu behar bederen. Honek ez "
+#~ "dio inolako estereo efekturik gehituko soinuari (OPL2 monoa da soilik) "
+#~ "eta PUZaren errendimendu gehiago beharko du."
+
+#~ msgid "Frequency"
+#~ msgstr "Maiztasuna"
+
+#~ msgid "Detect songend"
+#~ msgstr "Detektatu abestiaren amaiera"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "Gaitzen bada XMMS-ek abestiaren amaiera detektatuko du, gelditu eta "
+#~ "erreprodukzio-zerrendan aurrera egingo du. Desgaitzen bada, XMMS ez da "
+#~ "ohartuko abesti baten amaierarekin eta behin eta berriz begiztatuko du."
+
+#~ msgid "Formats"
+#~ msgstr "Formatuak"
+
+#~ msgid "Format selection"
+#~ msgstr "Formatuaren hautapena"
+
+#~ msgid "Format"
+#~ msgstr "Formatua"
+
+#~ msgid "Extension"
+#~ msgstr "Luzapena"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "Hautatutako fitxategi motak ezagutuko dira eta plugin honek "
+#~ "erreproduzituko ditu. Desautatutako motei ezikusi egingo zaie, beste "
+#~ "plugin batzuei lekua egiteko fitxategi hauek erreproduzitzeko."
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: Fitxategiaren informazioa"
+
+#~ msgid "Author: "
+#~ msgstr "Egilea: "
+
+#~ msgid "File Type: "
+#~ msgstr "Fitxategi mota: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "Azpiabestiak: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Instrumentuak: "
+
+#~ msgid "Orders: "
+#~ msgstr "Ordenak: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Ereduak: "
+
+#~ msgid "Song"
+#~ msgstr "Abestia"
+
+#~ msgid "Instrument name"
+#~ msgstr "Instrumentuaren izena"
+
+#~ msgid "Song message"
+#~ msgstr "Abestiaren mezua"
+
+#~ msgid "Subsong selection"
+#~ msgstr "Azpiabestiaren hautapena"
+
+#~ msgid "Order: "
+#~ msgstr "Ordena: "
+
+#~ msgid "Pattern: "
+#~ msgstr "Eredua: "
+
+#~ msgid "Row: "
+#~ msgstr "Errenkada: "
+
+#~ msgid "Speed: "
+#~ msgstr "Abiadura: "
+
+#~ msgid "Timer: "
+#~ msgstr "Tenporizadorea: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "XMMS alarmari buruz"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS alarma"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "XMMSren plugin bat denbora zehatz batean\n"
+#~ "erreproduzitzen hasteko.\n"
+#~ "\n"
+#~ "Bidali kexuak hona:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "Alarma"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "Hau zu esnatzeko deia da."
+
+#~ msgid "Select Playlist"
+#~ msgstr "Hautatu erreprodukzio-zerrenda"
+
+#~ msgid "Sorry"
+#~ msgstr "Barkatu"
+
+#~ msgid "Warning"
+#~ msgstr "Abisua"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "Segurtasuneko arrazoiak direla medio, \"quiet\" (isilik) denbora "
+#~ "iraungitze-denbora (10 segundo baino gehiagokoa izan behar duelarik) "
+#~ "baino gutxienez 65 segundo luzeagoa izan behar du. Honek kodean akats bat "
+#~ "dagoela adierazi nahi du, eta hau konpondu arte mezu hau agertuko "
+#~ "dela :)\n"
+#~ "\n"
+#~ "Iraungitzearen ezarpenak EZ dira gorde\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+
+#~ msgid "Oh Well"
+#~ msgstr "Ongi"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "Alarmaren ezarpenak"
+
+#~ msgid "Time"
+#~ msgstr "Ordua"
+
+#~ msgid "hours"
+#~ msgstr "ordu"
+
+#~ msgid "h"
+#~ msgstr "o"
+
+#~ msgid "minutes"
+#~ msgstr "minutu"
+
+#~ msgid "Quiet after:"
+#~ msgstr "Isildu honen ondoren:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "Alarma (lehenetsia):"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "Aukeratu zein egunetan alarma aktibatuko den"
+
+#~ msgid "Day"
+#~ msgstr "Eguna"
+
+#~ msgid "Tuesday"
+#~ msgstr "Asteartea"
+
+#~ msgid "Wednesday"
+#~ msgstr "Asteazkena"
+
+#~ msgid "Thursday"
+#~ msgstr "Osteguna"
+
+#~ msgid "Friday"
+#~ msgstr "Ostirala"
+
+#~ msgid "Saturday"
+#~ msgstr "Larunbata"
+
+#~ msgid "Sunday"
+#~ msgstr "Igandea"
+
+#~ msgid "Monday"
+#~ msgstr "Astelehena"
+
+#~ msgid "Days"
+#~ msgstr "Egunak"
+
+#~ msgid "Fading"
+#~ msgstr "Iraungitzea"
+
+#~ msgid "Volume"
+#~ msgstr "Bolumena"
+
+#~ msgid "Current"
+#~ msgstr "Unekoa"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "berrezarri uneko irteera bolumenera"
+
+#~ msgid "Start at"
+#~ msgstr "Hasiera:"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "Amaiera"
+
+#~ msgid "Additional Command"
+#~ msgstr "Komando gehigarria"
+
+#~ msgid "enable"
+#~ msgstr "gaitu"
+
+#~ msgid "Playlist (optional)"
+#~ msgstr "Erreprodukzio-zerrenda (aukerakoa)"
+
+#~ msgid "Browse..."
+#~ msgstr "Arakatu..."
+
+#~ msgid "Reminder"
+#~ msgstr "Oroigarria"
+
+#~ msgid "Use reminder"
+#~ msgstr "Erabili oroigarria"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "Zer esanahi dute aukera hauek?"
+
+#~ msgid ""
+#~ "\n"
+#~ "Time\n"
+#~ " Alarm at: \n"
+#~ " The time for the alarm to come on.\n"
+#~ "\n"
+#~ " Quiet After: \n"
+#~ " Stop alarm after this amount of time.\n"
+#~ " (if the wakeup dialog is not closed)\n"
+#~ "\n"
+#~ "\n"
+#~ "Days\n"
+#~ " Day:\n"
+#~ " Select the days for the alarm to activate.\n"
+#~ "\n"
+#~ " Time:\n"
+#~ " Choose the time for the alarm on each day,\n"
+#~ " or select the toggle button to use the default\n"
+#~ " time.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volume\n"
+#~ " Fading: \n"
+#~ " Fade the volume up to the chosen volume \n"
+#~ " for this amount of time.\n"
+#~ "\n"
+#~ " Start at: \n"
+#~ " Start fading from this volume.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " The volume to stop fading at. If the fading\n"
+#~ " time is 0 then set volume to this and start\n"
+#~ " playing.\n"
+#~ "\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " Additional Command:\n"
+#~ " Run this command at the alarm time.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ordua\n"
+#~ " Alarma: \n"
+#~ "\n"
+#~ " Ordua alarma aktibatzeko\n"
+#~ "\n"
+#~ " Isildu honen ondoren: \n"
+#~ " Gelditu alarma denbora kopuruaren ostean.\n"
+#~ " (iratzartzeko elkarrizketa-koadroa ez bada ixten)\n"
+#~ "\n"
+#~ "\n"
+#~ "Egunak\n"
+#~ " Eguna:\n"
+#~ " Hautatu egunak alarma aktibatzeko.\n"
+#~ "\n"
+#~ " Ordua:\n"
+#~ " Aukeratu egun bakoitzeko alarmaren ordua,\n"
+#~ " (edo hautatu txandakatzeko botoia denbora\n"
+#~ " lehenetsia erabiltzeko).\n"
+#~ "\n"
+#~ "\n"
+#~ "Bolumena\n"
+#~ " Iraungitzea: \n"
+#~ " Iraungitu bolumena gorantz aukeratutako bolumenerarte\n"
+#~ " denbora kopuru honentzako.\n"
+#~ "\n"
+#~ " Hasiera: \n"
+#~ " Hasi iraungitzea bolumen honetatik\n"
+#~ "\n"
+#~ " Amaiera: \n"
+#~ " Amaierako bolumenean iraungitzea gelditzeko. Iraungitzearen\n"
+#~ " denbora 0 bada, bolumena honekin ezartzen du eta\n"
+#~ " erreproduzitzen hasten da.\n"
+#~ "\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ " Komando gehigarriak:\n"
+#~ " Exekutatu komando hau alarmaren orduan.\n"
+#~ "\n"
+#~ " Erreprodukzio-zerrenda: \n"
+#~ " Kargatu erreprodukzio-zerrenda hau bertatik\n"
+#~ " abestiak erreproduzitzeko (.m3u luzapena\n"
+#~ " eduki behar du). Ez bada erreprodukzio-zerrendarik\n"
+#~ " ematen, uneko zerrendan dauden abestiak\n"
+#~ " erabiliko dira.\n"
+#~ " Hemen mp3/ogg korrontearen URLa sar daitekeen\n"
+#~ " arren, oraingoz xmms-ek ez du URLrik onartzen.\n"
+#~ "\n"
+#~ " Oroigarria: \n"
+#~ " Oroigarri bat bistaratzen du alarma itzaltzean,\n"
+#~ " idatzi oroigarria kutxan eta piztu txandakatzeko\n"
+#~ " botoia oroigarri hori bistaratzea nahi baduzu.\n"
+
+#~ msgid "Your reminder for today is.."
+#~ msgstr "Gaurko zure oroigarria: "
+
+#~ msgid "Thankyou"
+#~ msgstr "Eskerrik asko"
+
+#, fuzzy
+#~ msgid "Available Headsets"
+#~ msgstr "Motor erabilgarriak"
+
+#, fuzzy
+#~ msgid "Current Headset"
+#~ msgstr "Unekoa"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Konexioa"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "Gailuaren helbidea"
+
+#, fuzzy
+#~ msgid "Rescan"
+#~ msgstr "Berreskaneatu CDa"
+
+#~ msgid "Playback->Play"
+#~ msgstr "Erreprodukzioa->Erreproduzitu"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "Erreprodukzioa->Gelditu"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "Erreprodukzioa->Pausarazi"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "Erreprodukzioa->Aurrekoa"
+
+#~ msgid "Playback->Next"
+#~ msgstr "Erreprodukzioa->Hurrengoa"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "Erreprodukzioa->Egotzi"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "Erreprodukzio-zerrenda->Errepikatu"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "Erreprodukzio-zerrenda->Ausaz"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "Bolumena->Igo _5"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "Bolumena->Jeitsi _5"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "Bolumena->Igo _10"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "Bolumena->Jeitsi _10"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "Bolumena->Mututu"
+
+#~ msgid "Window->Main"
+#~ msgstr "Leihoa->Nagusia"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "Leihoa->Erreprodukzio-zerrenda"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "Leihoa->Ekualizadorea"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "Leihoa->Jauzi fitxategira"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: ezin da gailuko %s fitxategia ireki, gailu hau "
+#~ "saltatzen. Egiaztatu fitxategia existitzen dela eta hura irakurtzeko "
+#~ "baimenak dituzula.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr ""
+#~ "event-device-plugin: ezin da io_channel sortu gailuko %s "
+#~ "fitxategiarentzako.Gailua saltatzen\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ezin da /proc/bus/input/devices ireki, gertaeren "
+#~ "gailuaren detekzio automatikoak ez du funtzionatuko.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ezin da io_channel ireki /proc/bus/input/devices-"
+#~ "rentzako, gertaeren gailuaren detekzio automatikoak ez du funtzionatuko.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: errorea gertatu da /proc/bus/input/devices "
+#~ "irakurtzean, gertaeren gailuaren detekzio automatikoak ez du "
+#~ "funtzionatuko.\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr "event-device-plugin: ez da %s aurkitu /dev/input-en, saltatzen.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ezin da %s konfigurazio-fitxategia kargatu, ezarpen "
+#~ "lehenetsiak erabiliko dira.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: osatu gabeko informazioa \"%s\" gailuaren "
+#~ "konfigurazioko fitxategian, saltatzen.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren is_active "
+#~ "balioa lortu, saltatzen.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ezin da lokaleko %s direktorioa atzitu, ezarpenak ez "
+#~ "dira gordeko.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren fitxategi-"
+#~ "izenaren balioa, saltatzen.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren balio "
+#~ "fisikoa a lortu, saltatzen.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurazioa, ezin da \"%s\" gailuaren is_custom "
+#~ "balioa lortu, saltatzen.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurazioa, \"%s\" gailuaren ustekabeko balioa, "
+#~ "saltatzen.\n"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "Detektatu abestiaren amaiera"
+
+#, fuzzy
+#~ msgid "Custom"
+#~ msgstr "pertsonalizatua "
+
+#, fuzzy
+#~ msgid "Not Detected"
+#~ msgstr "Ordenatu hautatutakoak"
+
+#~ msgid "Information"
+#~ msgstr "Informazioa"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "Ezin da detektatu ez den gailuaren loturen leihoa ireki.\n"
+#~ "Ziurtatu gailua ongi konektatuta dagoela."
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "Ezin da hautatutako gailua ireki.\n"
+#~ "Egiaztatu gailuko fitxategia irakurtzeko baimenak dituzula."
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug - Gehitu gailu pertsonalizatua"
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "Sisteman erabilgarri dauden gailuen gertaerak automatikoki \n"
+#~ "detektatu eta informazioa eguneratzen saiatzen da EvDev-Plug.\n"
+#~ "Hala ere, detekzio automatikoak ez badu funtzionatzen sisteman,\n"
+#~ "edo gertaeren gailuak leku ez estandar batean badaude (unean \n"
+#~ "/dev/input-en soilik egiten da bilaketa), gailu pertsonalizatua gehitzea\n"
+#~ "nahi izan dezakezu gailuaren izena eta fitxategia zehaztuz. "
+
+#~ msgid "Device name:"
+#~ msgstr "Gailuaren izena:"
+
+#~ msgid "Device file:"
+#~ msgstr "Gailuaren fitxategia:"
+
+#, fuzzy
+#~ msgid "(custom)"
+#~ msgstr "pertsonalizatua "
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "Zehaztu bai izena bai fitxategi-izena.\n"
+#~ "Fitxategi-izenak bide-izen absolutua eduki behar du."
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr ""
+#~ "Nahi duzu hautatutako gailuaren existitzen den konfigurazioa kentzea?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "Nahi duzu hautatutako gailu pertsonalizatua kentzea?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug - Konfigurazioa"
+
+#~ msgid "Active"
+#~ msgstr "Aktibo"
+
+#~ msgid "Status"
+#~ msgstr "Egoera"
+
+#~ msgid "Device Name"
+#~ msgstr "Gailuaren izena"
+
+#~ msgid "Device File"
+#~ msgstr "Gailuaren fitxategia"
+
+#~ msgid "Device Address"
+#~ msgstr "Gailuaren helbidea"
+
+#~ msgid "_Bindings"
+#~ msgstr "_Loturak"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "Sakatu gailuaren tekla bat lotzeko; \n"
+#~ "bost segundotan ez bada teklarik sakatzen,\n"
+#~ "leiho hau itxi egingo da loturak aldatu gabe."
+
+#~ msgid ""
+#~ "This input event has been already assigned.\n"
+#~ "\n"
+#~ "It's not possible to assign multiple actions to the same input event "
+#~ "(although it's possible to assign the same action to multiple events)."
+#~ msgstr ""
+#~ "Sarrerako gertaera hau jadanik lotuta dago.\n"
+#~ "\n"
+#~ "Ezin da hainbat ekintza sarrerako gertaera berdinari esleitu (nahiz eta "
+#~ "ekintza berdina hainbat gertaerei esleitzea posiblea den)."
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug - Loturen konfigurazoa"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Izena: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Fitxategi-izena: </b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>Helbide fisikoa: </b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug - honi buruz"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "erreproduzitzailearen urruneko kontrola gertaera-gailuen bidez.\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "garatzailea: Giacomo Lozito\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "LADSPA plugin honek ez du erabiltzale-kontrolik"
+
+#~ msgid "Name"
+#~ msgstr "Izena"
+
+#~ msgid "UID"
+#~ msgstr "UIDa"
+
+#~ msgid "Installed plugins"
+#~ msgstr "Instalatutako pluginak"
+
+#~ msgid "Running plugins"
+#~ msgstr "Exekutatzen dauden pluginak"
+
+#~ msgid "Add"
+#~ msgstr "Gehitu"
+
+#~ msgid "Remove"
+#~ msgstr "Kendu"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "LADSPA pluginen katalogoa"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "LIRC Audacious plugina"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "LIRC plugina "
+
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "Plugin bakun bat LIRC urruneko kontrolaren daemonarekin\n"
+#~ "Audacious kontrolatzen uzteko.\n"
+#~ "\n"
+#~ "Audacious-ek erabiltzeko moldatua: Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "XMMS LIRC pluginetik:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "LIRC-ren informazio gehiagorako ikusi:\n"
+#~ "http://lirc.org"
+
+#~ msgid "LIRC plugin settings"
+#~ msgstr "LIRC pluginaren ezarpenak"
+
+#~ msgid "Reconnect to LIRC server"
+#~ msgstr "Birkonektatu LIRC zerbitzariarekin"
+
+#~ msgid "Timeout before reconnecting (seconds): "
+#~ msgstr "Denbora-muga birkonektatu aurretik (seg.):"
+
+#~ msgid "Reconnect"
+#~ msgstr "Birkonektatu"
+
+#~ msgid "Connection"
+#~ msgstr "Konexioa"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: ezin izan da LIRC euskarria hasieratu\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: ezin izan da LIRCen konfigurazio-fitxategia irakurri\n"
+#~ "%s: irakur ezazu LIRCren dokumentazioa\n"
+#~ "%s: konfigurazio-fitxategi egokia nola sortzen den jakiteko\n"
+
+#~ msgid "%s: trying to reconnect...\n"
+#~ msgstr "%s: birkonektatzen saiatzen...\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: \"%s\" komando ezezaguna\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: LIRCtik deskonektatuta\n"
+
+#~ msgid "%s: will try reconnect every %d seconds...\n"
+#~ msgstr "%s: saiatu %d segundoro birkonektatzen...\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "ModPlug konfigurazioa"
+
+#~ msgid "16 bit"
+#~ msgstr "16 bit"
+
+#~ msgid "8 bit"
+#~ msgstr "8 bit"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "Monoa (bildu kanalak)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "Gertuena (azkarrena)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "Lineala (azkarra)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "Spline (kalitate ona)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "8-tap Fir (oso kalitate altua)"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "48 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Lagin-tasa"
+
+#~ msgid "Enable"
+#~ msgstr "Gaitu"
+
+#~ msgid "Depth"
+#~ msgstr "Sakonera"
+
+#~ msgid "Delay"
+#~ msgstr "Atzerapena"
+
+#~ msgid "Reverb"
+#~ msgstr "Reverb"
+
+#~ msgid "Amount"
+#~ msgstr "Kopurua"
+
+#~ msgid "Range"
+#~ msgstr "Barrutia"
+
+#~ msgid "Bass Boost"
+#~ msgstr "Baxuen bultzada"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr ""
+#~ "Oharra: aurre-anp altuegi jartzeak\n"
+#~ " mozketak sor ditzake\n"
+#~ "(klik eta pop nazkagarriekin!)"
+
+#~ msgid "Effects"
+#~ msgstr "Efektuak"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "Erabili fitxategi-izena abestiaren titulu gisa"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "Erreprodukzio-zerrendaren informazio azkarra"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "Zarataren murriztapena"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Erreproduzitu Amiga MOD"
+
+#~ msgid "Don't loop"
+#~ msgstr "Ez begiztatu"
+
+#~ msgid "Loop"
+#~ msgstr "Begizta"
+
+#~ msgid "time(s)"
+#~ msgstr "denbora(k)"
+
+#~ msgid "Loop forever"
+#~ msgstr "Begiztatu beti"
+
+#~ msgid "Looping"
+#~ msgstr "Begiztatzen"
+
+#~ msgid "MOD Info"
+#~ msgstr "MOD informazioa"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "Fitxategi-izena:\n"
+#~ "Titulua:\n"
+#~ "Mota:\n"
+#~ "Luzera:\n"
+#~ "Abiadura:\n"
+#~ "Tenpoa:\n"
+#~ "Laginak:\n"
+#~ "Instrumentuak:\n"
+#~ "Ereduak:\n"
+#~ "Kanalak:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "Laginak"
+
+#~ msgid "Instruments"
+#~ msgstr "Instrumentuak"
+
+#~ msgid "Message"
+#~ msgstr "Mezua"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Modplug sarrerako plugina Audacious-en bertsio honentzako: "
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Modplug soinu-motorra Olivier Lapicque-k garatua.\n"
+#~ "XMMSen interfazea Modplug-arentzako Kenton Varda-k garatua.\n"
+#~ "(c)2000 Olivier Lapicque eta Kenton Varda.\n"
+#~ "Eguneraketak eta mantetze lanak: Konstanty Bialkowski.\n"
+#~ "BMPrako moldaketak: Theofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "Modplug-i buruz"
+
+#~ msgid "Show separators in playlist"
+#~ msgstr "Erakutsi bereizleak erreprodukzio-zerrendan"
+
+#~ msgid "Show window manager decoration"
+#~ msgstr "Erakutsi leiho-kudeatzailearen dekorazioa"
+
+#~ msgid "This enables the window manager to show decorations for windows."
+#~ msgstr "Leiho-kudeatzailea gaitzen du leihoen dekorazioak erakusteko."
+
+#~ msgid ""
+#~ "If selected, the file information text in the main window will scroll "
+#~ "back and forth. If not selected, the text will only scroll in one "
+#~ "direction."
+#~ msgstr ""
+#~ "Hautatzen bada, leiho nagusiko fitxategi-informazioaren testua bi "
+#~ "norabidetan korrituko da. Ez bada hautatzen, testua norabide bakar batean "
+#~ "korrituko da."
+
+#~ msgid "Disable inline gtk theme"
+#~ msgstr "Desgaitu barneko gtk gaia"
+
+#, fuzzy
+#~ msgid "Random skin on play"
+#~ msgstr "Nahastu ausaz erreprodukzio-zerrenda"
+
+#~ msgid "Allow loading incomplete skins"
+#~ msgstr "Baimendu azal osatugabeak kargatzea"
+
+#~ msgid ""
+#~ "If selected, audacious won't refuse loading broken skins. Use only if "
+#~ "your favourite skin doesn't work"
+#~ msgstr ""
+#~ "Hautatzen bada, Audacious-ek ez du ukatuko hondatutako azalak kargatzea. "
+#~ "Baldin eta zure azal gogokoenak ez badu funtzionatzen soilik."
+
+#~ msgid "Color Adjustment"
+#~ msgstr "Kolorea doitzea"
+
+#~ msgid ""
+#~ "Audacious allows you to alter the color balance of the skinned UI. The "
+#~ "sliders below will allow you to do this."
+#~ msgstr ""
+#~ "Audacious-ek azaldun interfazeko kolorearen balantzea aldatzea baimentzen "
+#~ "dizu. Azpiko graduatzaileak hori egitea utziko dizu."
+
+#~ msgid "Blue"
+#~ msgstr "Urdina"
+
+#~ msgid "Green"
+#~ msgstr "Berdea"
+
+#~ msgid "Red"
+#~ msgstr "Gorria"
+
+#, fuzzy
+#~ msgid "Color adjustment ..."
+#~ msgstr "Kolorea doitzea"
+
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "Desgaitu 'Interfazea eskalatzea'"
+
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Gaitu 'Interfazea eskalatzea'"
+
+#~ msgid "DoubleSize"
+#~ msgstr "Tamaina bikoitza"
+
+#~ msgid "Easy Move"
+#~ msgstr "Erraz mugitu"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "Espektro-analizatzailea"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "Instrumentuaren izena"
+
+#, fuzzy
+#~ msgid "Remove Bookmark"
+#~ msgstr "Kendu etiketa"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "OSS kontrolatzaileari buruz"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "This is a simple stream browser that includes the most popular streaming "
+#~ "directories.\n"
+#~ "Many thanks to the Streamtuner developers <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tand of course to the whole Audacious community.\n"
+#~ "\n"
+#~ "Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+#~ "\n"
+#~ "This was a Google Summer of Code 2008 project."
+#~ msgstr ""
+#~ "Copyright-a (c) 2007, Calin Crisan <ccrisan@gmail.com> eta Audacious "
+#~ "taldea.\n"
+#~ "\n"
+#~ "Eskerrik asko libcdio-ren garatzaileei <http://www.gnu.org/software/"
+#~ "libcdio/>\n"
+#~ "\teta libcddb-eko garatzaileei <http://libcddb.sourceforge.net/>.\n"
+#~ "\n"
+#~ "Eskerrik asko Tony Vroon-i gainbegiratzeagatik eta ni gidatzeagatik\n"
+#~ "\n"
+#~ "Google Summer of Code 2007 proiektu bat izan da."
+
+#~ msgid "Can't jump to time when no track is being played.\n"
+#~ msgstr ""
+#~ "Ezin da denboran jauzirik egin pista ez denean erreproduzitzen ari.\n"
+
+#~ msgid "minutes:seconds"
+#~ msgstr "minutu:segundo"
+
+#~ msgid "Track length:"
+#~ msgstr "Pistaren luzera:"
+
+#~ msgid "Error writing playlist \"%s\": %s"
+#~ msgstr "Errorea \"%s\" erreprodukzio-zerrenda idaztean: %s"
+
+#~ msgid "%s already exist. Continue?"
+#~ msgstr "%s badago lehendik ere. Jarraitu?"
+
+#, fuzzy
+#~ msgid "Show main menu"
+#~ msgstr "Erakutsi erreproduzitzaile nagusiaren leihoa"
+
+#, fuzzy
+#~ msgid "Show/hide statusbar"
+#~ msgstr "Kargatu erreprodukzio-zerrenda"
+
+#, fuzzy
+#~ msgid "Import Playlist ..."
+#~ msgstr "Kargatu erreprodukzio-zerrenda"
+
+#, fuzzy
+#~ msgid "Export Playlist ..."
+#~ msgstr "Kargatu erreprodukzio-zerrenda"
+
+#, fuzzy
+#~ msgid "Refresh"
+#~ msgstr "Freskatu tasa"
+
+#, fuzzy
+#~ msgid "Refresh Selected"
+#~ msgstr "Kendu hautatutakoak"
+
+#, fuzzy
+#~ msgid "Refreshes metadata associated with selected entries."
+#~ msgstr ""
+#~ "Erreprodukzio-zerrendako sarrera bati esleituta dagoen metadatuak "
+#~ "freskatzen ditu."
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "Nahastu ausaz erreprodukzio-zerrenda"
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "Tituluaren arabera"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "Konpositorea:"
+
+#~ msgid "Upload selected track(s)"
+#~ msgstr "Igo hautatutako pistak"
+
+#~ msgid "MTP device handler"
+#~ msgstr "MTP gailuaren kudeatzailea"
+
+#~ msgid "Show main player window"
+#~ msgstr "Erakutsi erreproduzitzaile nagusiaren leihoa"
+
+#~ msgid "Ignore"
+#~ msgstr "Ezikusi egin"
+
+#~ msgid ""
+#~ "Audacious has been started with all of its windows hidden.\n"
+#~ "You may want to show the player window again to control Audacious; "
+#~ "otherwise, you'll have to control it remotely via audtool or enabled "
+#~ "plugins (such as the statusicon plugin)."
+#~ msgstr ""
+#~ "Audacious bere leiho guztiak ezkutatuta dituela abiatu da.\n"
+#~ "Erreproduzitzailearen leihoa erakustea nahiko duzu Audacious "
+#~ "kontrolatzeko; bestela, audtool edo gaitutako pluginen ('egoeraren "
+#~ "ikonoa' plugina bezalakoa) bidez urrunetik kontrola dezakezu."
+
+#~ msgid "Always ignore, show/hide is controlled remotely"
+#~ msgstr "Ezikusi egin, erakutsi/ezkutatu beti kontrolatzen da urrunetik"
+
+#~ msgid "Audacious - broken GTK engine usage warning"
+#~ msgstr "Audacious - hondatutako GTK motorraren erabileraren abisua"
+
+#~ msgid ""
+#~ "<big><b>Broken GTK engine in use</b></big>\n"
+#~ "\n"
+#~ "Audacious has detected that you are using a broken GTK engine.\n"
+#~ "\n"
+#~ "The theme engine you are using, <i>%s</i>, is incompatible with some of "
+#~ "the features used by modern skins. The incompatible features have been "
+#~ "disabled for this session.\n"
+#~ "\n"
+#~ "To use these features, please consider using a different GTK theme engine."
+#~ msgstr ""
+#~ "<big><b>Hondatutako GTK motorra erabiltzen</b></big>\n"
+#~ "\n"
+#~ "Audacious-ek hondatutako GTK motorra erabiltzen ari zarela detektatu du.\n"
+#~ "\n"
+#~ "Erabiltzen ari zaren gai-motorra, <i>%s</i>, azal modernoek dituzten "
+#~ "eginbide batzuetatik bateraezina da. Bateragarriak ez diren eginbideak "
+#~ "desgaitu egn dira saio honetan.\n"
+#~ "\n"
+#~ "Eginbide hauek erabiltzeko, egokiena bestelako GTK gai-motor bat "
+#~ "erabiltzea izango duzu."
+
+#~ msgid "Do not display this warning again"
+#~ msgstr "Ez bistaratu abisu hau berriro"
+
+#~ msgid "Save as Static Playlist"
+#~ msgstr "Gorde erreprodukzio-zerrenda estatiko gisa"
+
+#~ msgid "Use Relative Path"
+#~ msgstr "Erabili bide-izen erlatiboa"
+
+#~ msgid "Load Playlist"
+#~ msgstr "Kargatu erreprodukzio-zerrenda"
+
+#~ msgid "Save Playlist"
+#~ msgstr "Gorde erreprodukzio-zerrenda"
+
+#~ msgid ""
+#~ "* Select ALSA output ports *\n"
+#~ "MIDI events will be sent to the ports selected here. In example, if your "
+#~ "audio card provides a hardware synth and you want to play MIDI with it, "
+#~ "you'll probably want to select the wavetable synthesizer ports."
+#~ msgstr ""
+#~ "* Hautatu ALSAren irteerako atakak *\n"
+#~ "MIDI gertaerak hemen hautatutako ataketara bidaliko dira. Adibidez, soinu-"
+#~ "txartelak hardware-sintetizadorea badu, eta horrekin MIDIa "
+#~ "erreproduzitzea nahi baduzu, baliteke zuk uhin-taulako sintetizadorearen "
+#~ "atakak hautatu nahi izatea."
+
+#~ msgid ""
+#~ "* Select ALSA mixer card *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volumeslider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Hautatu ALSAren nahastailearen txartela *\n"
+#~ "ALSA motorrak ALSA bidez ateratzen da, erreproduzitzaileak ez du "
+#~ "efekturik ezta irteerako pluginik erabiltzen. Erreprodukzioan, "
+#~ "erreproduzitzailearen bolumenaren graduatzaileak zuk hemen hautatutako "
+#~ "nahastailearen kontrola kudea dezake. Uhin-taulako sintetizadorearen "
+#~ "atakak erabiltzen badituzu, baliteke zuk hemen sintetizadorearen kontrola "
+#~ "hautatu nahi izatea."
+
+#~ msgid ""
+#~ "* Select ALSA mixer control *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volume slider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Hautatu ALSAren nahastailearen kontrola *\n"
+#~ "ALSA motorrak ALSA bidez ateratzen da, erreproduzitzaileak ez du "
+#~ "efekturik ezta irteerako pluginik erabiltzen. Erreprodukzioan, "
+#~ "erreproduzitzailearen bolumenaren graduatzaileak zuk hemen hautatutako "
+#~ "nahastailearen kontrola kudea dezake. Uhin-taulako sintetizadorearen "
+#~ "atakak erabiltzen badituzu, baliteke zuk hemen sintetizadorearen kontrola "
+#~ "hautatu nahi izatea."
+
+#~ msgid ""
+#~ "* Backend selection *\n"
+#~ "AMIDI-Plug works with backends, in a modular fashion; here you should "
+#~ "select your backend; that is, the way MIDI events are going to be handled "
+#~ "and played.\n"
+#~ "If you have a hardware synthesizer on your audio card, and ALSA supports "
+#~ "it, you'll want to use the ALSA backend. It can also be used with "
+#~ "anything that provides an interface to the ALSA sequencer, including "
+#~ "software synths or external devices.\n"
+#~ "If you want to rely on a software synthesizer and/or want to pipe audio "
+#~ "into effect and output plugins of the player you'll want to use the good "
+#~ "FluidSynth backend.\n"
+#~ "Press the info button to read specific information about each backend."
+#~ msgstr ""
+#~ "* Motorraren hautapena *\n"
+#~ "AMIDI-Plug motorrekin lan egiten du , era modular batean. Hemen motorra "
+#~ "hauta dezakezu: hau da, MIDI gertaerak nola kudeatu eta erreproduzituko "
+#~ "diren modua.\n"
+#~ "Hardware-sintetizadore bat badu audio-txartelak, eta ALSAk onartzen badu, "
+#~ "ALSA motorra erabiltzea nahi izan dezakezu. ALSA sekuentziadorearen "
+#~ "interfaze bat eskaintzen duen edozerrekin ere erabil daiteke, software-"
+#~ "sintetizadorea edo kanpoko gailuak barne.\n"
+#~ "Software-sintetizadorean oinarritzea nahi baduzu, edo eta audioa "
+#~ "erreproduzitzailearen efektuetara eta irteerako pluginak kanalizatzea "
+#~ "nahi baduzu, FluidSynth motor ona erabiltzea nahi izan dezakezu.\n"
+#~ "Sakatu Informazioa botoia motor bakoitzari buruzko informazio zehatza "
+#~ "irakurtzeko."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Transpose function *\n"
+#~ "This option allows you to play the midi file transposed in a different "
+#~ "key, by shifting of the desired number of semitones all its notes "
+#~ "(excepting those on midi channel 10, reserved for percussions). "
+#~ "Especially useful if you wish to sing or play along with another "
+#~ "instrument."
+#~ msgstr ""
+#~ "* Irauli funtzioa *\n"
+#~ "Aukera honek MIDI fitxategia beste tekla desberdin batean iraulita "
+#~ "erreproduzitzea baimentzen dizu, bere nota guztien nahi duzun semintonu "
+#~ "kopurua desplazatuz (MIDIko 10. kanalekoak izan ezik, perkusioentzako "
+#~ "gordeta baitago). Bereziki erabilgarria da beste instrumentu batekin "
+#~ "abestea edo erreproduzitzea nahi baduzu."
+
+#~ msgid ""
+#~ "* Drumshift function *\n"
+#~ "This option allows you to shift notes on midi channel 10 (the standard "
+#~ "percussions channel) of the desired number of semitones. This results in "
+#~ "different drumset and percussions being used during midi playback, so if "
+#~ "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
+#~ "with this value."
+#~ msgstr ""
+#~ "* Perkusio-desplazamendua funtzioa *\n"
+#~ "Aukera honek MIDIko 10. kanaleko notak nahi duzun semitonu kopurua "
+#~ "desplazatzea uzten dizu. MIDI erreproduzitzean erabiltzen den bestelako "
+#~ "perkusio multzo desberdin bat dakaer, eta honela perkusioen soinuak "
+#~ "hobetu (edo gutxiagotu edo eraldatu) nahi badituzu, saiatu balio honekin "
+#~ "erreproduzitzen."
+
+#~ msgid ""
+#~ "* Pre-calculate MIDI length *\n"
+#~ "If this option is enabled, AMIDI-Plug will calculate the MIDI file length "
+#~ "as soon as the player requests it, instead of doing that only when the "
+#~ "MIDI file is being played. In example, MIDI length will be calculated "
+#~ "straight after adding MIDI files in a playlist. Disable this option if "
+#~ "you want faster playlist loading (when a lot of MIDI files are added), "
+#~ "enable it to display more information in the playlist straight after "
+#~ "loading."
+#~ msgstr ""
+#~ "* Aurre-kalkulatu MIDI luzera *\n"
+#~ "Aukera hau gaituta egonez gero, 'AMIDI-Plug'-ek MIDI fitxategiaren luzera "
+#~ "kalkula dezake erreproduzaileak eskatu bezain laster, MIDI fitxategia "
+#~ "erreproduzitzen ari den bitartean egin ordez. Adibidez, MIDI fitxategiak "
+#~ "erreprodukzio-zerrendari gehitu bezain laster kalkula daiteke MIDIaren "
+#~ "luzera. Desgaitu aukera hau erreprodukzio-zerrenda azkarrago kargatzea "
+#~ "nahi naduzu (MIDI fitxategi asko gehitzen direnean), gaitu ezazu kargatu "
+#~ "bezain laster erreprodukzio-zerrendan informazio gehiago bistaratzeko."
+
+#~ msgid ""
+#~ "* Extract comments from MIDI files *\n"
+#~ "Some MIDI files contain text comments (author, copyright, instrument "
+#~ "notes, etc.). If this option is enabled, AMIDI-Plug will extract and "
+#~ "display comments (if available) in the file information dialog."
+#~ msgstr ""
+#~ "* Erauzi iruzkinak MIDI fitxategietatik *\n"
+#~ "MIDI fitxategi batzuk testu iruzkinak dituzte (egilea, copyright-a, "
+#~ "instrumentuen oharrak, e.a.). Aukera hau gaitzen bada, AMIDI-Plug-ek "
+#~ "iruzkinak (egonez gero) erauzi eta bistaratuko ditu fitxategiaren "
+#~ "informazioaren elkarrizketa-koadroan."
+
+#~ msgid ""
+#~ "* Extract lyrics from MIDI files *\n"
+#~ "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-"
+#~ "Plug will extract and display song lyrics (if available) in the file "
+#~ "information dialog."
+#~ msgstr ""
+#~ "* Erauzi letrak MIDI fitxategietatik *\n"
+#~ "MIDI fitxategi batzuk abestien letrak dituzte. Aukera hau gaitzen bada, "
+#~ "AMIDI-Plug-ek iruzkinak (egonez gero) erauzi eta bistaratuko ditu "
+#~ "fitxategiaren informazioaren elkarrizketa-koadroan."
+
+#~ msgid ""
+#~ "* Select SoundFont files *\n"
+#~ "In order to play MIDI with FluidSynth, you need to specify at least one "
+#~ "valid SoundFont file here (use absolute paths). The loading order is from "
+#~ "the top (first) to the bottom (last)."
+#~ msgstr ""
+#~ "* Hautatu SoundFont fitxategiak *\n"
+#~ "MIDIa FluidSynth-ekin erreproduzitzeko, gutxienez SoundFont fitxategi bat "
+#~ "zehaztu behar duzu hemen (erabili bide-izen absolutua). Kargatzeko ordena "
+#~ "goitik (aurrenekoa) behera (azkena) da."
+
+#~ msgid ""
+#~ "* Load SoundFont on player start *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Kargatu SoundFont erreproduzitzailea abiaraztean *\n"
+#~ "Sistemaren abiaduraren arabera, FluidSynth-en SoundFont kargatzeak "
+#~ "segundo gutxi batzuk beharko ditu. Aldi bateko zeregina da hau (soundfont "
+#~ "kargatuta jarraituko du hura aldatu arte, edo motorra memoritik kendu "
+#~ "arte) erreproduzitzailea abiaraztean edo aurreneko MIDI fitxategia "
+#~ "erreproduzitu aurretik egin daitekeena (azkenengoa aukera soilik "
+#~ "egokiagoa da ez baduzu erreproduzitzailerik erabiltzen MIDI fitxategiak "
+#~ "entzuteko)."
+
+#~ msgid ""
+#~ "* Load SoundFont on first midifile play *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Kargatu SoundFont aurreneko MIDI fitxategia erreproduzitzean *\n"
+#~ "Sistemaren abiaduraren arabera, FluidSynth-en SoundFont kargatzeak "
+#~ "segundo gutxi batzuk beharko ditu. Aldi bateko zeregina da hau (soundfont "
+#~ "kargatuta jarraituko du hura aldatu arte, edo motorra memoritik kendu "
+#~ "arte) erreproduzitzailea abiaraztean edo aurreneko MIDI fitxategia "
+#~ "erreproduzitu aurretik egin daitekeena (azkenengoa aukera soilik "
+#~ "egokiagoa da ez baduzu erreproduzitzailerik erabiltzen MIDI fitxategiak "
+#~ "entzuteko)."
+
+#~ msgid ""
+#~ "* Synthesizer gain *\n"
+#~ "From FluidSynth docs: the gain is applied to the final or master output "
+#~ "of the synthesizer; it is set to a low value by default to avoid the "
+#~ "saturation of the output when random MIDI files are played."
+#~ msgstr ""
+#~ "* Sintetizadorearen irabazia *\n"
+#~ "FluidSynth-en dokumentaziotik: sintetizadorearen amaierako irteerari edo "
+#~ "irteera maisuari aplikatzen zaio irabazia; balio baxu batekin ezartzen da "
+#~ "lehenetsi gisa irteeraren saturazioa saihesteko ausazko MIDI fitxategiak "
+#~ "erreproduzitzen direnean."
+
+#~ msgid ""
+#~ "* Synthesizer polyphony *\n"
+#~ "From FluidSynth docs: the polyphony defines how many voices can be played "
+#~ "in parallel; the number of voices is not necessarily equivalent to the "
+#~ "number of notes played simultaneously; indeed, when a note is struck on a "
+#~ "specific MIDI channel, the preset on that channel may create several "
+#~ "voices, for example, one for the left audio channel and one for the right "
+#~ "audio channels; the number of voices activated depends on the number of "
+#~ "instrument zones that fall in the correspond to the velocity and key of "
+#~ "the played note."
+#~ msgstr ""
+#~ "* Sintetizadorearen polifonia *\n"
+#~ "FluidSynth-en dokumentaziotik: zenbat ahots paraleloki erreproduzi "
+#~ "daitezkeen definitzen du polifoniak; ahots kopuruak ez dauka aldi berean "
+#~ "erreproduzitutako noten kopuruarekin zer ikusirik derrigorrez; nota bat "
+#~ "jotzen denean MIDI kanalean, kanal horretako aurrezarpenak hainbat ahots "
+#~ "sortuko ditu, adibidez, bat ezkerreko audioaren kanalarentzako eta beste "
+#~ "bat eskuinekoarentzako; aktibatutako ahots kopurua instrumentuen zona "
+#~ "(erreproduzitutako notan eta abiaduran erortzen dena) kopuruaren mende "
+#~ "dago."
+
+#~ msgid ""
+#~ "* Synthesizer reverb *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
+#~ "activated; note that when the reverb module is active, the amount of "
+#~ "signal sent to the reverb module depends on the \"reverb send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Sintetizadorearen reverb-a *\n"
+#~ "FluidSynth-en dokumentaziotik: \"bai\" ezartzean reverb efektuen moduloa "
+#~ "aktibatzen da. Jakin ezazu reverb moduloa aktibo dagoenean, reverb "
+#~ "moduloari bidaltzen zaizkion seinale kopurua SoundFont-en definitutako "
+#~ "\"reverb bidali\" sortzailean mende dago."
+
+#~ msgid ""
+#~ "* Synthesizer chorus *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
+#~ "activated; note that when the chorus module is active, the amount of "
+#~ "signal sent to the chorus module depends on the \"chorus send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Sintetizadorearen chorus-a *\n"
+#~ "FluidSynth-en dokumentaziotik: \"bai\" bezala ezarritakoan chorus-en "
+#~ "efektuen moduloa aktibatzen da. Jakin ezazu chorus moduloa aktibatuta "
+#~ "dagoenean, chorus moduloari bidalitako seinu kopurua SoundFont-en "
+#~ "definitutako \"chorus bidali\" sortzailean mende dago."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Synthesizer samplerate *\n"
+#~ "The sample rate of the audio generated by the synthesizer. You can also "
+#~ "specify a custom value in the interval 22050Hz-96000Hz."
+#~ msgstr ""
+#~ "* Sintetizadorearen lagin-tasa *\n"
+#~ "Sintetizadoreak sortutako audioaren lagin-tasa. Balio pertsonalizatua ere "
+#~ "zehaz dezakezu 22050Hz-96000Hz barrutian.\n"
+#~ "OHARRA: buffer lehenetsiaren parametroak 44100Hz balioarekin ezarrita "
+#~ "dago. Lagin-tasa aldatzean bufferraren parametroa egokitu behar da "
+#~ "soinuaren kalitate ona lortzeko."
+
+#~ msgid ""
+#~ "If enabled, the extension from the original filename will not be stripped "
+#~ "before adding the new file extension to the end."
+#~ msgstr ""
+#~ "Gaituta badago, jatorrizko fitxategi-izenaren luzapena ez da kenduko "
+#~ "fitxategiaren luzapen berria amaieran gehitu aurretik."
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "onena/motelena:0;\n"
+#~ "txarrena/azkarrena:9;\n"
+#~ "gomendatua:2;\n"
+#~ "lehenetsia:5;"
+
+#~ msgid "Adds 16 bit checksum to every frame"
+#~ msgstr "Gehitu 16 bit-eko kontrol-batura bilbe bakoitzari"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "Bit-tasa aldagarria (VBR)"
+
+#~ msgid "Average bitrate"
+#~ msgstr "Batez besteko bit-tasa"
+
+#~ msgid ""
+#~ "For use with players that do not support low bitrate mp3 (Apex AD600-A "
+#~ "DVD/mp3 player)"
+#~ msgstr ""
+#~ "MP3ren bit-tasa baxua onartzen ez duten erreproduzitzaileetan erabiltzeko "
+#~ "(Apex AD600-A DVD/ mp3 erreproduzigailua)"
+
+#~ msgid ""
+#~ "highest:0;\n"
+#~ "lowest:9;\n"
+#~ "default:4;"
+#~ msgstr ""
+#~ "altuena:0;\n"
+#~ "baxuena:9;\n"
+#~ "lehenetsia:4;"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "Erakutsi erreprodukzio-zerrendaren editorea"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "Kargatu erreprodukzio-zerrenda"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "Sun kontrolatzaileari buruz"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "XMMS BSD Sun kontrolatzailea\n"
+#~ "\n"
+#~ "Copyright-a (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Mantentzailea: <vedge abildua csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "Audioa kontrolatzeko gailua:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Buffer-tamaina (ms):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "Bolumena kontrolatzeko gailua:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "XMMSek esklusiboki darabil nahastailea"
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Sun kontrolatzailearen konfigurazioa"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "Aldatu bolumena"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Efektuaren intentsitatea:"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "FLAC audioaren plugina"
+
+#, fuzzy
+#~ msgid "Stream browser"
+#~ msgstr "arakatu"
+
+#, fuzzy
+#~ msgid "Streambrowser"
+#~ msgstr "arakatu"
+
#~ msgid "PREAMP"
#~ msgstr "Aurre-anp"
@@ -6029,12 +6008,6 @@ msgstr ""
#~ "\n"
#~ "'%s' fitxategi mota ezezaguna.\n"
-#~ msgid "Randomize List"
-#~ msgstr "Nahastu ausaz zerrenda"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Nahastu ausaz erreprodukzio-zerrenda"
-
#~ msgid "Using libfaad2-"
#~ msgstr "libfaad2-"
@@ -6595,18 +6568,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "Titulua:"
-#~ msgid "Artist:"
-#~ msgstr "Artista:"
-
#~ msgid "Comment:"
#~ msgstr "Iruzkina:"
-#~ msgid "Year:"
-#~ msgstr "Urtea:"
-
-#~ msgid "Track:"
-#~ msgstr "Pista:"
-
#~ msgid "Genre:"
#~ msgstr "Generoa:"
@@ -6697,9 +6661,6 @@ msgstr ""
#~ "Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\n"
#~ "Boston, MA 02110-1301, USA."
-#~ msgid "_Random"
-#~ msgstr "_Ausazkoa"
-
#~ msgid ""
#~ "There has been an error that may require your attention.\n"
#~ "\n"
@@ -6841,9 +6802,6 @@ msgstr ""
#~ msgid "ID3 Tag:"
#~ msgstr "ID3 etiketa:"
-#~ msgid "Track number:"
-#~ msgstr "Pista zenbakia:"
-
#~ msgid "Ape2 Tag"
#~ msgstr "Ape2 etiketa"
diff --git a/po/fr.po b/po/fr.po
index 853a054..0e4bb1f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,26 +1,25 @@
-# /* _\|/_
-# (o o)
-# +----oOO-{_}-OOo----+
-# | |
-# | audacious-plugins |
-# | |
-# +------------------*/
-msgid ""
-msgstr ""
-"Project-Id-Version: Audacious-plugins 2.4\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-18 13:51+0100\n"
-"PO-Revision-Date: 2010-08-18 13:51+0100\n"
-"Last-Translator: StrassBoy <StrassBoy@gmail.com>\n"
-"Language-Team: \n"
-"Language: \n"
+# French translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# <jagw40k@free.fr>, 2011, 2012.
+# Jean-Alexandre Anglès d'Auriac <jagw40k@free.fr>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-16 11:14+0000\n"
+"Last-Translator: Oxayotl <jagw40k@free.fr>\n"
+"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: French\n"
-"X-Poedit-Country: BELGIUM\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: audacious-plugins/src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -33,238 +32,172 @@ msgstr ""
"\n"
"Droit d'utilisation 2005-2006 : Équipe de développement Audacious"
-#: audacious-plugins/src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "À propos du décodeur « MP4 AAC »"
-#: audacious-plugins/src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "À propos du module « XMMS Alarm »"
-
-#: audacious-plugins/src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS Alarm"
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr ""
-#: audacious-plugins/src/alarm/interface.c:56
+#: src/alarm/alarm.c:313
msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-"Ce module pour XMMS peut être utilisé pour\n"
-"commencer la lecture à un moment donné.\n"
-"\n"
-"\n"
-"Vous pouvez envoyer toutes vos remarques à :\n"
-"\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-#: audacious-plugins/src/alarm/interface.c:71
-msgid "Close"
-msgstr "Fermer"
-
-#: audacious-plugins/src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
-msgstr "Alarm"
+msgstr "Alarme"
-#: audacious-plugins/src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
-msgstr "L'appel du réveil... ;-)"
+msgstr ""
-#: audacious-plugins/src/alarm/interface.c:124
-#: audacious-plugins/src/alarm/interface.c:1389
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "OK"
-#: audacious-plugins/src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Choix d'une liste de lecture"
-
-#: audacious-plugins/src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Désolé"
-
-#: audacious-plugins/src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Avertissement"
-
-#: audacious-plugins/src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer than the fading time, it must also be more than 10 seconds. This basically means that there is a bug in the code and until I find a way of really fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Pour des raisons de sécurité, le temps de « repos » doit au moins durer 65 secondes de plus que le temps du fondu. Il doit aussi être supérieur à 10 secondes. Cela signifie simplement que le code du module comporte une erreur... Jusqu'à ce que je trouve un moyen de la corriger de manière définitive, ce message sera affiché :)\n"
-"\n"
-"Les préférences relatives au fondu n'ont PAS été enregistrées.\n"
-"\n"
-"--------\n"
-"Adam"
-
-#: audacious-plugins/src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Bon, d'accord"
-
-#: audacious-plugins/src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
-msgstr "Préférences du module « Alarm »"
+msgstr "Paramètres de l'alarme"
-#: audacious-plugins/src/alarm/interface.c:404
-#: audacious-plugins/src/alarm/interface.c:576
-#: audacious-plugins/src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "Heure"
-#: audacious-plugins/src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
-msgstr " heures "
+msgstr "heures"
-#: audacious-plugins/src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
-msgstr " minutes "
+msgstr "h"
-#: audacious-plugins/src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
-msgstr " minutes "
+msgstr "minutes"
-#: audacious-plugins/src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
-msgstr "Extinction après :"
+msgstr "Arrêter au bout de"
-#: audacious-plugins/src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
-msgstr "Heure du réveil (par défaut) :"
+msgstr "Se déclencher (par défaut) à :"
-#: audacious-plugins/src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
-msgstr "Jours d'activation de l'alarme"
-
-#: audacious-plugins/src/alarm/interface.c:612
-#: audacious-plugins/src/alarm/interface.c:660
-#: audacious-plugins/src/alarm/interface.c:708
-#: audacious-plugins/src/alarm/interface.c:756
-#: audacious-plugins/src/alarm/interface.c:804
-#: audacious-plugins/src/alarm/interface.c:852
-#: audacious-plugins/src/alarm/interface.c:900
+msgstr "Choisissez les jours où l'alarme se déclenche"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr "Défaut"
-#: audacious-plugins/src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Jour"
-#: audacious-plugins/src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Mardi"
-#: audacious-plugins/src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Mercredi"
-#: audacious-plugins/src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Jeudi"
-#: audacious-plugins/src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "Vendredi"
-#: audacious-plugins/src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Samedi"
-#: audacious-plugins/src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Dimanche"
-#: audacious-plugins/src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Lundi"
-#: audacious-plugins/src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Jours"
-#: audacious-plugins/src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
msgstr "Fondu"
-#: audacious-plugins/src/alarm/interface.c:1087
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "secondes"
-#: audacious-plugins/src/alarm/interface.c:1095
-#: audacious-plugins/src/alarm/interface.c:1211
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Volume"
-#: audacious-plugins/src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "Volume actuel"
-#: audacious-plugins/src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "Réinitialise au volume de sortie actuel."
-
-#: audacious-plugins/src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
-msgstr "Début"
+msgstr "Commencer à"
-#: audacious-plugins/src/alarm/interface.c:1158
-#: audacious-plugins/src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: audacious-plugins/src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
-msgstr "Fin"
+msgstr "Finir à"
-#: audacious-plugins/src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
-msgstr "Commande supplémentaire"
+msgstr "Commande additionnelle"
-#: audacious-plugins/src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
-msgstr "Activer"
+msgstr "activer"
-#: audacious-plugins/src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
-msgstr "Liste de lecture (option facultative)"
+msgstr "Lire la liste de lecture suivante (optionnel)"
-#: audacious-plugins/src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr "Parcourir"
-#: audacious-plugins/src/alarm/interface.c:1295
-#: audacious-plugins/src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
msgstr "Pense-bête"
-#: audacious-plugins/src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
-msgstr "Utiliser le pense-bête"
+msgstr "Afficher le pense-bête suivant"
-#: audacious-plugins/src/alarm/interface.c:1328
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Options"
-#: audacious-plugins/src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
msgstr "Que signifient ces options ?"
-#: audacious-plugins/src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -318,253 +251,137 @@ msgid ""
" type the reminder in the box and turn on the\n"
" toggle button if you want it to be shown.\n"
msgstr ""
-"\n"
-"*** Alarme ***\n"
-"\n"
-"\n"
-"Heure de l'alarme :\n"
-"\n"
-"heure à laquelle l'alarme sera activée.\n"
-"\n"
-"\n"
-"Extinction :\n"
-"\n"
-"laps de temps après lequel l'alarme cessera\n"
-"(si la fenêtre du réveil n'est pas fermée).\n"
-"\n"
-"\n"
-"*** Jours ***\n"
-"\n"
-"\n"
-"Jour :\n"
-"\n"
-"détermine le jour d'activation de l'alarme.\n"
-"\n"
-"\n"
-"Heure :\n"
-"\n"
-"détermine l'heure d'activation de l'alarme\n"
-"(vous pouvez spécifier une heure précise ou utiliser le bouton « Défaut »).\n"
-"\n"
-"\n"
-"*** Volume ***\n"
-"\n"
-"\n"
-"Fondu :\n"
-"\n"
-"applique un effet de fondu au volume sonore, pour le laps de temps indiqué.\n"
-"\n"
-"\n"
-"Début :\n"
-"\n"
-"applique le fondu à partir du niveau sonore déterminé.\n"
-"\n"
-"\n"
-"Fin :\n"
-"\n"
-"détermine le volume à partir duquel le fondu ne sera plus appliqué\n"
-"(si la durée du fondu correspond à 0, le volume de fin de fondu déterminera\n"
-"le niveau sonore de l'alarme).\n"
-"\n"
-"\n"
-"*** Options ***\n"
-"\n"
-"\n"
-"Commande supplémentaire :\n"
-"\n"
-"la commande spécifiée sera exécutée en même temps que l'alarme.\n"
-"\n"
-"\n"
-"Liste de lecture :\n"
-"\n"
-"lit une liste de lecture particulière (l'extension doit être \".m3u\").\n"
-"Si aucune liste n'est spécifiée, ce sont les titres de la liste active\n"
-"du lecteur qui seront utilisés.\n"
-"L'adresse d'un flux distant « mp3 » ou « ogg » peut également constituer une source.\n"
-"\n"
-"\n"
-"Pense-bête :\n"
-"\n"
-"affiche un texte de rappel, lors de l'extinction de l'alarme\n"
-"(écrivez le message dans le champ prévu à cet effet, puis cochez l'option d'activation).\n"
-#: audacious-plugins/src/alarm/interface.c:1366
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Aide"
-#: audacious-plugins/src/alarm/interface.c:1398
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
msgid "Cancel"
msgstr "Annuler"
-#: audacious-plugins/src/alarm/interface.c:1468
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
-msgstr "Le pense-bête du jour est..."
+msgstr "Votre pense-bête pour aujourd'hui est…"
-#: audacious-plugins/src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "Merci"
-#: audacious-plugins/src/alsa/plugin.c:61
-msgid "About ALSA Output Plugin"
-msgstr "À propos du module de sortie « ALSA »"
-
-#: audacious-plugins/src/alsa/plugin.c:83
-msgid "ALSA error"
-msgstr "Erreur ALSA"
-
-#: audacious-plugins/src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "Périphérique PCM par défaut"
-#: audacious-plugins/src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Mélangeur audio par défaut"
-#: audacious-plugins/src/alsa/config.c:438
+#: src/alsa/config.c:438
msgid "ALSA Output Plugin Preferences"
msgstr "Préférences du module de sortie « ALSA »"
-#: audacious-plugins/src/alsa/config.c:445
+#: src/alsa/config.c:445
msgid "PCM device:"
msgstr "Périphérique PCM :"
-#: audacious-plugins/src/alsa/config.c:447
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "Canal de mélange audio :"
-#: audacious-plugins/src/alsa/config.c:449
+#: src/alsa/config.c:449
msgid "Mixer element:"
msgstr "Mélangeur :"
-#: audacious-plugins/src/alsa/config.c:452
+#: src/alsa/config.c:452
msgid "Work around drain hangup"
msgstr "Contourner le problème d'interruption du flux ( « drain hang-up » )"
-#: audacious-plugins/src/amidi-plug/i_utils.c:43
-msgid "AMIDI-Plug - about"
-msgstr "À propos de « AMIDI-Plug »"
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "À propos du module de sortie « ALSA »"
-#: audacious-plugins/src/amidi-plug/i_utils.c:68
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "Erreur ALSA"
+
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
-"\n"
-"AMIDI-Plug "
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
msgstr ""
-"\n"
-"AMIDI-Plug "
+"Vous n'avez pas choisi les ports du séquenceur pour la lecture MIDI. Vous "
+"pouvez le faire dans les préférences du module MIDI."
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "ALSA "
-#: audacious-plugins/src/amidi-plug/i_utils.c:69
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
msgid ""
-"\n"
-"modular MIDI music player\n"
-"http://www.develia.org/projects.php?p=amidiplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-"< james@develia.org >\n"
-"\n"
-"\n"
-"special thanks to...\n"
-"\n"
-"Clemens Ladisch and Jaroslav Kysela\n"
-"for their cool programs aplaymidi and amixer; those\n"
-"were really useful, along with alsa-lib docs, in order\n"
-"to learn more about the ALSA API\n"
-"\n"
-"Alfredo Spadafina\n"
-"for the nice midi keyboard logo\n"
-"\n"
-"Tony Vroon\n"
-"for the good help with alpha testing\n"
-"\n"
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
msgstr ""
+"Ce système envoie les événements MIDI à l'ensemble des ports du séquenceur « ALSA » que l'utilisateur a spécifié. L'interface du séquenceur « ALSA » offre des possibilités variées : elle peut fournir des ports aux synthétiseurs matériels des cartes sons (« emu10k1 », par exemple), mais aussi aux synthétiseurs logiciels, aux périphériques externes, etc.\n"
+"Ce système de sortie ne produit pas de flux audio : les événements MIDI sont gérés directement par les périphériques et les applications associés aux ports « ALSA ». Par exemple, les événements MIDI envoyés au synthétiseur matériel seront directement interprétés.\n"
"\n"
-"\n"
-"Lecteur de musique « MIDI » modulaire\n"
-"\n"
-"http://www.develia.org/projects.php?p=amidiplug\n"
-"\n"
-"Auteur : Giacomo Lozito < james@develia.org >\n"
-"\n"
-"\n"
-"Remerciements particuliers à...\n"
-"\n"
-"Clemens Ladisch et Jaroslav Kysela\n"
-"pour leurs excellents outils « aplaymidi » et « amixer » :\n"
-"ces derniers étaient très utiles (en plus de la documentation\n"
-"relative à la bibliothèque « ALSA ») pour apprendre\n"
-"l'interface de programmation « ALSA ».\n"
-"\n"
-"Alfredo Spadafina\n"
-"pour le beau logo (clavier MIDI).\n"
-"\n"
-"Tony Vroon\n"
-"pour son aide précieuse, lors de la phase alpha.\n"
-"\n"
+"Auteur : Giacomo Lozito."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "FluidSynth "
-#: audacious-plugins/src/amidi-plug/amidi-plug.c:323
-msgid "You have not selected any sequencer ports for MIDI playback. You can do so in the MIDI plugin preferences."
-msgstr "Vous n'avez pas choisi les ports du séquenceur pour la lecture MIDI. Vous pouvez le faire dans les préférences du module MIDI."
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Ce système de sortie produit des flux audio en envoyant les événements MIDI à « FluidSynth », un synthétiseur logiciel en temps réel conçu à partir des principes de « SoundFont2 » (www.fluidsynth.org).\n"
+"Les flux générés peuvent être manipulés grâce aux modules d'effets du lecteur et sont traités par le module de sortie sélectionné.\n"
+"\n"
+"Auteur : Giacomo Lozito."
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "CONFIGURATION DU SYSTÈME DE SORTIE « ALSA »"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Nom du client"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Nom du port"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "Ports de sortie « ALSA »"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Périphérique audio : "
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Canal du mélangeur audio : "
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Paramètres du mélangeur"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your audio card provides a hardware synth and you want to play MIDI with it, you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Choix des ports de sortie « ALSA » *\n"
-"Les événements MIDI seront envoyés aux ports spécifiés ici. Par exemple, si votre carte son dispose d'un synthétiseur matériel et que vous désirez écouter les fichiers MIDI avec celui-ci, vous voudrez probabement choisir les ports du synthétiseur à tables d'ondes à utiliser."
-
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and ouput plugins from the player. During playback, the player volumeslider will manipulate the mixer control you select here. If you're using wavetable synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Choix du périphérique audio « ALSA » *\n"
-"Le système de sortie « ALSA » émet directement via « ALSA » : il n'utilise pas les modules d'effets du lecteur, ni les modules de sortie. Lors de la lecture, le curseur du volume du lecteur opérera sur le contrôleur du mélangeur audio que vous avez sélectionné ici. Si vous utilisez les ports d'un synthétiseur à tables d'ondes, vous voudrez probabement choisir le contrôleur du synthétiseur ici."
-
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and ouput plugins from the player. During playback, the player volume slider will manipulate the mixer control you select here. If you're using wavetable synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Choix du canal du mélangeur audio « ALSA » *\n"
-"Le système de sortie « ALSA » émet directement via « ALSA » : il n'utilise pas les modules d'effets du lecteur, ni les modules de sortie. Lors de la lecture, le curseur du volume du lecteur opérera sur le canal du mélangeur audio que vous avez sélectionné ici. Si vous utilisez les ports d'un synthétiseur à tables d'ondes, vous voudrez probabement choisir le canal du synthétiseur ici."
-
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
-msgstr "Le système de sortie « ALSA » n'est pas chargé ou n'est pas disponible"
+msgstr ""
+"Le système de sortie « ALSA » n'est pas chargé ou n'est pas disponible"
-#: audacious-plugins/src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -572,179 +389,51 @@ msgstr ""
"<span size=\"smaller\">Sortie\n"
"\"ALSA\"</span>"
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:169
-msgid "Name:"
-msgstr "Nom :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:193
-msgid "<span size=\"smaller\"> MIDI Info </span>"
-msgstr "<span size=\"smaller\"> Informations sur le fichier MIDI </span>"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:205
-msgid "Format:"
-msgstr "Format :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:208
-msgid "Length (msec):"
-msgstr "Durée (msec) :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:211
-msgid "Num of Tracks:"
-msgstr "Nombre de pistes :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:216
-msgid "variable"
-msgstr "variable"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:217
-msgid "BPM:"
-msgstr "BPM :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:223
-msgid "BPM (wavg):"
-msgstr "BPM (wavg) :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:226
-msgid "Time Div:"
-msgstr "Division du temps :"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:237
-msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
-msgstr "<span size=\"smaller\"> Commentaires et paroles du fichier MIDI </span>"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:288
-msgid "* no comments available in this MIDI file *"
-msgstr "* aucun commentaire n'est disponible dans ce fichier MIDI *"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:301
-msgid "* no lyrics available in this MIDI file *"
-msgstr "* aucune parole n'est disponible dans ce fichier MIDI"
-
-#: audacious-plugins/src/amidi-plug/i_fileinfo.c:349
-msgid " (invalid UTF-8)"
-msgstr " (format UTF-8 invalide)"
-
-#: audacious-plugins/src/amidi-plug/i_configure-timidity.c:39
-msgid "TIMIDITY BACKEND CONFIGURATION"
-msgstr "CONFIGURATION DU SYSTÈME DE SORTIE « TIMIDITY »"
-
-#: audacious-plugins/src/amidi-plug/i_configure-timidity.c:64
-msgid "TiMidity Backend not loaded or not available"
-msgstr "Le système de sortie « TiMidity » n'est pas chargé ou n'est pas disponible"
-
-#: audacious-plugins/src/amidi-plug/i_configure-timidity.c:83
-msgid ""
-"<span size=\"smaller\">TiMidity\n"
-"backend</span>"
-msgstr ""
-"<span size=\"smaller\">Sortie\n"
-"'TiMidity'</span>"
-
-#: audacious-plugins/src/amidi-plug/i_configure.c:73
-msgid "AMIDI-Plug - select file"
-msgstr "'AMIDI-Plug' - choix du fichier"
-
-#: audacious-plugins/src/amidi-plug/i_configure.c:126
-msgid "AMIDI-Plug - configuration"
-msgstr "Configuration du module « AMIDI-Plug »"
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "Informations sur le système de sortie"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "PRÉFÉRENCES DU MODULE « AMIDI-PLUG »"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Choix du système de sortie"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Systèmes disponibles :"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Paramètres de lecture"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Transposition : "
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Décalage des percussions :"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Paramètres avancés"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "Précalculer la durée des fichiers MIDI dans la liste de lecture"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "Extraire les commentaires des fichiers MIDI (s'ils sont disponibles)"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "Extraire les paroles des fichiers MIDI (si elles sont disponibles)"
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select your backend; that is, the way MIDI events are going to be handled and played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, you'll want to use the ALSA backend. It can also be used with anything that provides an interface to the ALSA sequencer, including software synths or external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into effect and output plugins of the player you'll want to use the good FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Choix du système de sortie *\n"
-"« AMIDI-Plug » utilise des systèmes de sortie, de manière modulaire. C'est par le système de sortie que vous aurez choisi que seront gérés et restitués les événements MIDI. Si votre périphérique audio dispose d'un synthétiseur matériel supporté par « ALSA », vous pourrez utiliser le système de sortie « ALSA ». Celui-ci peut aussi être utilisé par tout ce qui peut offrir une interface au séquenceur « ALSA » (les synthétiseurs logiciels ou les périphériques externes, notamment).\n"
-" Si vous désirez dépendre d'un synthétiseur logiciel et/ou si vous voulez rediriger le flux audio vers les modules de sortie du lecteur, vous pourrez utiliser le système de sortie « FluidSynth ». N'hésitez pas à activer le bouton d'informations, afin d'obtenir des renseignements spécifiques à chaque système de sortie."
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, by shifting of the desired number of semitones all its notes (excepting those on midi channel 10, reserved for percussions). Especially useful if you wish to sing or play along with another instrument."
-msgstr ""
-"* Fonction de transposition *\n"
-"Cette option permet de restituer le fichier MIDI alors transposé dans une tonalité différente, en décalant du nombre désiré de demi-tons toutes les les notes du morceau (à l'exception de celles du canal MIDI 10, réservé aux percussions). Cette fonction est particulièrement utile, si vous désirez chanter ou jouer accompagné d'un autre instrument."
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard percussions channel) of the desired number of semitones. This results in different drumset and percussions being used during midi playback, so if you wish to enhance (or reduce, or alter) percussion sounds, try to play with this value."
-msgstr ""
-"* Fonction de décalage des percussions *\n"
-"Cette option permet de décaler toutes les notes du canal MIDI 10 (le canal standard des percussions) du nombre désiré de demi-tons. Cela se traduit par l'utilisation d'un ensemble de batteries et de percussions différent, lors de la lecture. Donc, si vous désirez améliorer (ou réduire, ou bien encore modifier) les percussions, n'hésitez pas à essayer différentes valeurs."
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as soon as the player requests it, instead of doing that only when the MIDI file is being played. In example, MIDI length will be calculated straight after adding MIDI files in a playlist. Disable this option if you want faster playlist loading (when a lot of MIDI files are added), enable it to display more information in the playlist straight after loading."
-msgstr ""
-"* Pré-calculer la durée des fichiers MIDI *\n"
-"Si cette option est activée, « AMIDI-Plug » déterminera la durée du fichier MIDI dès que le lecteur le demandera, au lieu le faire seulement lorsque le morceau est lu. Par exemple, la durée des fichiers MIDI sera calculée immédiatement après l'ajout des titres dans la liste de lecture. Désactivez cette option, si vous voulez un chargement plus rapide de la liste de lecture (lorsque de nombreux fichiers MIDI sont ajoutés) ; activez cette option pour que s'affichent plus d'informations dans la liste de lecture, directement après le chargement des fichiers."
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, etc.). If this option is enabled, AMIDI-Plug will extract and display comments (if available) in the file information dialog."
-msgstr ""
-"* Extraire les commentaires des fichiers MIDI *\n"
-"Certains fichiers MIDI contiennent des commentaires (auteur, droits d'utilisation, notes relatives aux instruments, etc.). Si cette option est activée, « AMIDI-Plug » extraira et affichera ces commentaires (s'ils sont disponibles) dans la fenêtre d'informations sur le fichier."
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug will extract and display song lyrics (if available) in the file information dialog."
-msgstr ""
-"* Extraire les paroles des fichiers MIDI *\n"
-"Certains fichiers MIDI contiennent les paroles relatives au morceau joué. Si cette option est activée, « AMIDI-Plug » extraira et affichera les paroles (si elles sont disponibles) dans la fenêtre d'informations sur le fichier."
-
-#: audacious-plugins/src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -752,379 +441,430 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "'AMIDI-Plug' - choix du fichier"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "Configuration du module « AMIDI-Plug »"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "Choix du fichier « SoundFont »"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "CONFIGURATION DU SYSTÈME DE SORTIE « FLUIDSYNTH »"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "Paramètres de la banque de sons « SoundFont »"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:348
+#: src/amidi-plug/i_configure-fluidsynth.c:345
msgid "Filename"
msgstr "Nom du fichier"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Taille (bytes)"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "Charger la banque de sons au démarrage du lecteur"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "Charger la banque de sons à la lecture du premier fichier MIDI"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Paramètres du synthétiseur"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "Gain"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:435
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:463
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:491
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "valeur par défaut"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:438
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "valeur :"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "Polyphonie"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "Réverbération"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:494
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "Oui"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:496
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "Non"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "Effet de choeur"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "Fréquence d'échantillonnage"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "Autre "
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one valid SoundFont file here (use absolute paths). The loading order is from the top (first) to the bottom (last)."
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
msgstr ""
-"* Sélectionner les fichier « SoundFont » *\n"
-"Afin de pouvoir écouter des fichiers MIDI avec « FluidSynth », vous devez spécifier au moins un fichier « SoundFont » valide (veillez à utiliser des chemins absolus). Le chargement s'opère, par ordre, du haut (le premier fichier) vers le bas (le dernier fichier)."
+"Le système de sortie « FluidSynth » n'est pas chargé ou n'est pas disponible"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:626
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require up to a few seconds. This is a one-time task (the soundfont will stay loaded until it is changed or the backend is unloaded) that can be done at player start, or before the first MIDI file is played (the latter is a better choice if you don't use your player to listen MIDI files only)."
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
msgstr ""
-"* Charger la banque de sons au démarrage du lecteur *\n"
-"En fonction de la vitesse de votre système, le chargement du fichier « SoundFont » dans « FluidSynth » peut nécessiter plusieurs secondes. Cette opération, qui ne sera exécutée qu'une fois (la banque de sons restera en mémoire, jusqu'à ce qu'elle soit modifiée ou que le système de sortie ne soit supprimé de la mémoire), peut être accomplie au démarrage du lecteur, ou avant que ne soit lu le premier fichier MIDI (la seconde proposition constitue un meilleur choix, si vous n'utilisez pas le lecteur pour écouter des fichiers MIDI uniquement)."
+"<span size=\"smaller\">Sortie\n"
+"'FluidSynth'</span>"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require up to a few seconds. This is a one-time task (the soundfont will stay loaded until it is changed or the backend is unloaded) that can be done at player start, or before the first MIDI file is played (the latter is a better choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Charger la banque de sons à la lecture du premier fichier MIDI *\n"
-"En fonction de la vitesse de votre système, le chargement du fichier « SoundFont » dans « FluidSynth » peut nécessiter plusieurs secondes. Cette opération, qui ne sera exécutée qu'une fois (la banque de sons restera en mémoire, jusqu'à ce qu'elle soit modifiée ou que le système de sortie ne soit supprimé de la mémoire), peut être accomplie au démarrage du lecteur, ou avant que ne soit lu le premier fichier MIDI (la seconde proposition constitue un meilleur choix, si vous n'utilisez pas le lecteur pour écouter des fichiers MIDI uniquement)."
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "CONFIGURATION DU SYSTÈME DE SORTIE « TIMIDITY »"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of the synthesizer; it is set to a low value by default to avoid the saturation of the output when random MIDI files are played."
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
msgstr ""
-"* Gain du synthétiseur *\n"
-"Extrait de la documentation de « FluidSynth » (traduction) : « Le gain est appliqué à la sortie finale ou principale du synthétiseur. Par défaut, il est réglé sur une valeur basse, afin d'éviter la saturation de la sortie, lorsque des fichiers MIDI sont lus de manière aléatoire. »"
+"Le système de sortie « TiMidity » n'est pas chargé ou n'est pas disponible"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:647
+#: src/amidi-plug/i_configure-timidity.c:83
msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in parallel; the number of voices is not necessarily equivalent to the number of notes played simultaneously; indeed, when a note is struck on a specific MIDI channel, the preset on that channel may create several voices, for example, one for the left audio channel and one for the right audio channels; the number of voices activated depends on the number of instrument zones that fall in the correspond to the velocity and key of the played note."
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
msgstr ""
-"* Polyphonie du synthétiseur *\n"
-"Extrait de la documentation de « FluidSynth » (traduction) : « La polyphonie définit le nombre de voix qui peuvent être jouées en parallèle. Le nombre de voix ne correspond pas nécessairement au nombre de notes jouées simultanément. En effet, lorsqu'une note est envoyée à un canal MIDI spécifique, le préréglage de ce canal peut créer plusieurs voix (par exemple, une voix pour le canal audio gauche et une autre pour le canal audio droit). Le nombre de voix activées dépend du nombre de pistes d'instruments relatives à la vélocité et à la tonalité de la note jouée. »"
+"<span size=\"smaller\">Sortie\n"
+"'TiMidity'</span>"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:657
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is activated; note that when the reverb module is active, the amount of signal sent to the reverb module depends on the \"reverb send\" generator defined in the SoundFont."
-msgstr ""
-"* Réverbération du synthétiseur *\n"
-"Extrait de la documentation de « FluidSynth » (traduction) : \"Lorsque l'option « Oui » est cochée, le module d'effet de réverbération est activé. Veuillez noter que, lorsque le module de réverbération est actif, la quantité de signaux envoyés au module dépend du générateur d'« envoi de réverbération » défini dans le fichier « SoundFont ».\""
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Nom :"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:669
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is activated; note that when the chorus module is active, the amount of signal sent to the chorus module depends on the \"chorus send\" generator defined in the SoundFont."
-msgstr ""
-"* Effet de choeur du synthétiseur *\n"
-"Extrait de la documentation de « FluidSynth » (traduction) : \"Lorsque l'option « Oui » est cochée, le module d'effet de choeur est activé. Veuillez noter que, lorsque le module d'effet de choeur est actif, la quantité de signaux envoyés au module dépend du générateur d'« envoi d'effet de choeur » défini dans le fichier « SoundFont ».\""
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> Informations sur le fichier MIDI </span>"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:681
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:685
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:689
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Fréquence d'échantillonnage du synthétiseur *\n"
-"Cette option définit la fréquence d'échantillonnage du flux audio produit par le synthétiseur. Vous pouvez aussi spécifier une valeur personnalisée, située dans l'intervalle 22050 - 96000 Hz."
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Format :"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:701
-msgid "FluidSynth Backend not loaded or not available"
-msgstr "Le système de sortie « FluidSynth » n'est pas chargé ou n'est pas disponible"
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "Durée (msec) :"
-#: audacious-plugins/src/amidi-plug/i_configure-fluidsynth.c:720
-msgid ""
-"<span size=\"smaller\">FluidSynth\n"
-"backend</span>"
-msgstr ""
-"<span size=\"smaller\">Sortie\n"
-"'FluidSynth'</span>"
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "Nombre de pistes :"
-#: audacious-plugins/src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
-msgid "FluidSynth Backend "
-msgstr "FluidSynth "
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "variable"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "BPM :"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg) :"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "Division du temps :"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> Commentaires et paroles du fichier MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* aucun commentaire n'est disponible dans ce fichier MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* aucune parole n'est disponible dans ce fichier MIDI"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (format UTF-8 invalide)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "À propos de « AMIDI-Plug »"
-#: audacious-plugins/src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/i_utils.c:68
msgid ""
-"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
-"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
-"Backend written by Giacomo Lozito."
+"\n"
+"AMIDI-Plug "
msgstr ""
-"Ce système de sortie produit des flux audio en envoyant les événements MIDI à « FluidSynth », un synthétiseur logiciel en temps réel conçu à partir des principes de « SoundFont2 » (www.fluidsynth.org).\n"
-"Les flux générés peuvent être manipulés grâce aux modules d'effets du lecteur et sont traités par le module de sortie sélectionné.\n"
"\n"
-"Auteur : Giacomo Lozito."
-
-#: audacious-plugins/src/amidi-plug/backend-alsa/b-alsa.c:35
-msgid "ALSA Backend "
-msgstr "ALSA "
+"AMIDI-Plug "
-#: audacious-plugins/src/amidi-plug/backend-alsa/b-alsa.c:37
+#: src/amidi-plug/i_utils.c:69
msgid ""
-"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
-"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
-"Backend written by Giacomo Lozito."
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
msgstr ""
-"Ce système envoie les événements MIDI à l'ensemble des ports du séquenceur « ALSA » que l'utilisateur a spécifié. L'interface du séquenceur « ALSA » offre des possibilités variées : elle peut fournir des ports aux synthétiseurs matériels des cartes sons (« emu10k1 », par exemple), mais aussi aux synthétiseurs logiciels, aux périphériques externes, etc.\n"
-"Ce système de sortie ne produit pas de flux audio : les événements MIDI sont gérés directement par les périphériques et les applications associés aux ports « ALSA ». Par exemple, les événements MIDI envoyés au synthétiseur matériel seront directement interprétés.\n"
"\n"
-"Auteur : Giacomo Lozito."
+"\n"
+"Lecteur de musique « MIDI » modulaire\n"
+"\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"Auteur : Giacomo Lozito < james@develia.org >\n"
+"\n"
+"\n"
+"Remerciements particuliers à...\n"
+"\n"
+"Clemens Ladisch et Jaroslav Kysela\n"
+"pour leurs excellents outils « aplaymidi » et « amixer » :\n"
+"ces derniers étaient très utiles (en plus de la documentation\n"
+"relative à la bibliothèque « ALSA ») pour apprendre\n"
+"l'interface de programmation « ALSA ».\n"
+"\n"
+"Alfredo Spadafina\n"
+"pour le beau logo (clavier MIDI).\n"
+"\n"
+"Tony Vroon\n"
+"pour son aide précieuse, lors de la phase alpha.\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "Rectangle"
-#: audacious-plugins/src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Rectangle arrondi"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Rectangle concave"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Aucun"
+
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr "Début de la lecture"
-#: audacious-plugins/src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
-msgstr "Déclenche la fonction « OSD » lorsqu'une entrée de la liste de lecture est lue."
+msgstr ""
+"Déclenche la fonction « OSD » lorsqu'une entrée de la liste de lecture est "
+"lue."
-#: audacious-plugins/src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr "Changement de titre"
-#: audacious-plugins/src/aosd/aosd_trigger.c:83
-msgid "Triggers OSD when, during playback, the song title changes but the filename is the same. This is mostly useful to display title changes in internet streams."
-msgstr "Déclenche la fonction « OSD » si, pendant la lecture, le titre du morceau change, alors que le nom du fichier est identique. Cette option est particulièrement utile pour afficher le changement de titre des flux Internet."
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Déclenche la fonction « OSD » si, pendant la lecture, le titre du morceau "
+"change, alors que le nom du fichier est identique. Cette option est "
+"particulièrement utile pour afficher le changement de titre des flux "
+"Internet."
-#: audacious-plugins/src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr "Changement de volume"
-#: audacious-plugins/src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
msgstr "Déclenche la fonction « OSD » en cas de changement de volume."
-#: audacious-plugins/src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr "Mode « pause » activé"
-#: audacious-plugins/src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
-msgstr "Déclenche la fonction « OSD » lorsque la lecture est en mode « pause »."
+msgstr ""
+"Déclenche la fonction « OSD » lorsque la lecture est en mode « pause »."
-#: audacious-plugins/src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
msgstr "Mode « pause » désactivé"
-#: audacious-plugins/src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
-msgstr "Déclenche la fonction « OSD » lorsque la lecture n'est plus en mode « pause »."
-
-#: audacious-plugins/src/aosd/aosd_style.c:75
-msgid "Rectangle"
-msgstr "Rectangle"
-
-#: audacious-plugins/src/aosd/aosd_style.c:79
-msgid "Rounded Rectangle"
-msgstr "Rectangle arrondi"
-
-#: audacious-plugins/src/aosd/aosd_style.c:83
-msgid "Concave Rectangle"
-msgstr "Rectangle concave"
-
-#: audacious-plugins/src/aosd/aosd_style.c:87
-msgid "None"
-msgstr "Aucun"
+msgstr ""
+"Déclenche la fonction « OSD » lorsque la lecture n'est plus en mode « pause "
+"»."
-#: audacious-plugins/src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr "Position"
-#: audacious-plugins/src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
msgstr "Décalage horizontal :"
-#: audacious-plugins/src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
msgstr "Décalage vertical :"
-#: audacious-plugins/src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr "Largeur maximale :"
-#: audacious-plugins/src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr "Options de l'affichage multiple"
-#: audacious-plugins/src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr "Afficher OSD sur"
-#: audacious-plugins/src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr "tous les moniteurs"
-#: audacious-plugins/src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr "le moniteur %i"
-#: audacious-plugins/src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr "Durée (ms)"
-#: audacious-plugins/src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr "Affichage :"
-#: audacious-plugins/src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr "Fondu d'entrée :"
-#: audacious-plugins/src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr "Fondu de sortie :"
-#: audacious-plugins/src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr "Polices"
-#: audacious-plugins/src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr "Police %i :"
-#: audacious-plugins/src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr "Ombre"
-#: audacious-plugins/src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Internationalisation"
-#: audacious-plugins/src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Désactiver la conversion UTF-8 du texte (dans le module « aOSD »)"
-#: audacious-plugins/src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr "Choisir un fichier de thème"
-#: audacious-plugins/src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr "Style du rendu"
-#: audacious-plugins/src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Couleurs"
-#: audacious-plugins/src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Couleur %i :"
-#: audacious-plugins/src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr "Thème personnalisé"
-#: audacious-plugins/src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr "Fichier du thème"
-#: audacious-plugins/src/aosd/aosd_ui.c:644
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr "Parcourir"
-#: audacious-plugins/src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr "Activer le déclencheur"
-#: audacious-plugins/src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr "Événement"
-#: audacious-plugins/src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr "Gestionnaire composite détecté"
-#: audacious-plugins/src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
@@ -1132,72 +872,72 @@ msgstr ""
"Aucun gestionnaire composite n'a été détecté. À moins que vous ne soyez certain d'utiliser un tel gestionnaire,\n"
"veuillez activer un gestionnaire composite approprié. Sinon, l'affichage « OSD » ne fonctionnera pas correctement."
-#: audacious-plugins/src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr "La fausse transparence ne nécessite pas de gestionnaire composite."
-#: audacious-plugins/src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr "Transparence"
-#: audacious-plugins/src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr "Fausse transparence"
-#: audacious-plugins/src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Véritable transparence (nécessite l'extension « composite » de X)"
-#: audacious-plugins/src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr "L'extension « composite » n'est pas chargée"
-#: audacious-plugins/src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr "L'extension « composite » n'est pas disponible"
-#: audacious-plugins/src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: audacious-plugins/src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr "Configuration du module « Audacious OSD »"
-#: audacious-plugins/src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr "Essai"
-#: audacious-plugins/src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr "Arrangement"
-#: audacious-plugins/src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr "Animation"
-#: audacious-plugins/src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr "Texte"
-#: audacious-plugins/src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr "Décoration"
-#: audacious-plugins/src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr "Déclenchement"
-#: audacious-plugins/src/aosd/aosd_ui.c:1073
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Options diverses"
-#: audacious-plugins/src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr "À propos du module « OSD » pour Audacious"
-#: audacious-plugins/src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
@@ -1205,7 +945,7 @@ msgstr ""
"\n"
"Module « OSD » pour Audacious "
-#: audacious-plugins/src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1227,156 +967,35 @@ msgstr ""
"\n"
"http://neugierig.org/software/ghosd/\n"
-#: audacious-plugins/src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Liaison terminée !"
-
-#: audacious-plugins/src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Aucun accessoire détecté !"
-
-#: audacious-plugins/src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Détection..."
-
-#: audacious-plugins/src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Processus de connexion couplée..."
-
-#: audacious-plugins/src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Redétecter"
-
-#: audacious-plugins/src/bluetooth/scan_gui.c:142
-msgid "Play"
-msgstr "Lecture"
-
-#: audacious-plugins/src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "Module de gestion des périphériques audio « Bluetooth »"
-
-#: audacious-plugins/src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Module de gestion des périphériques audio « Bluetooth »\n"
-"Droits d'utilisation : Paula Stanciu paula.stanciu@gmail.com (2008)\n"
-"\n"
-"Ce projet est issu du « GSoC 2008 ».\n"
-"Remerciements cordiaux à mon conseiller Tony Vroon et à l'équipe d'Audacious.\n"
-"\n"
-"Afin de pouvoir utiliser le mode « AVRCP », le module d'entrée correspondant doit\n"
-"être chargé dans le noyau.\n"
-"\n"
-"Les boutons du périphérique audio seront reconnus comme des touches multimédia\n"
-"et pourront être configurés grâce au module « Global Hotkey » d'Audacious ou\n"
-"aux outils que propose le gestionnaire de fenêtres de votre système.\n"
-
-#: audacious-plugins/src/bluetooth/agent.c:356
-#: audacious-plugins/src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "Demande de connexion couplée pour \"%s\""
-
-#: audacious-plugins/src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "Demande d'autorisation pour \"%s\""
-
-#: audacious-plugins/src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "Une liaison avec \"%s\" a été créée."
-
-#: audacious-plugins/src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "La liaison avec \"%s\" a été supprimée."
-
-#: audacious-plugins/src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "Le périphérique a été éteint."
-
-#: audacious-plugins/src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "Le périphérique est maintenant en mode « privé »."
-
-#: audacious-plugins/src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "Le périphérique peut maintenant initier une connexion."
-
-#: audacious-plugins/src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "Le périphérique est maintenant en mode « public »."
-
-#: audacious-plugins/src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "Le périphérique est maintenant en mode « public limité »."
-
-#: audacious-plugins/src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "Le périphérique est entré en mode « connexion couplée »."
-
-#: audacious-plugins/src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Fabricant"
-
-#: audacious-plugins/src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "Casques/écouteurs disponibles"
-
-#: audacious-plugins/src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "Casque/accessoire actuel"
-
-#: audacious-plugins/src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "_Réactualiser"
-
-#: audacious-plugins/src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "_Connecter"
-
-#: audacious-plugins/src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "_Fermer"
-
-#: audacious-plugins/src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Classe"
-
-#: audacious-plugins/src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Adresse :"
-
-#: audacious-plugins/src/blur_scope/config.c:73
+#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Module « Blur Scope » : sélection de la couleur"
-#: audacious-plugins/src/blur_scope/config.c:83
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Options :"
-#: audacious-plugins/src/cd-menu-items/cd-menu-items.c:35
-msgid "Play CD"
-msgstr "Lire les pistes du CD"
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr ""
-#: audacious-plugins/src/cd-menu-items/cd-menu-items.c:35
-msgid "Add CD"
-msgstr "Ajouter les pistes du CD"
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr ""
-#: audacious-plugins/src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr ""
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr "À propos du module « CD Audio »"
-#: audacious-plugins/src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
"\n"
@@ -1405,176 +1024,200 @@ msgstr ""
"\n"
"Droits d'utilisation (2009) : John Lindgren"
-#: audacious-plugins/src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "CD audio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Le lecteur est vide"
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Type de disque non supporté"
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Configuration du module « CD Audio »"
-#: audacious-plugins/src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Extraction audio digitale"
-#: audacious-plugins/src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Informations sur le titre"
-#: audacious-plugins/src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "Vitesse du disque :"
-#: audacious-plugins/src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Utiliser « CD-TEXT », si la fonction est disponible"
-#: audacious-plugins/src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Utiliser « CDDB », si le service est disponible"
-#: audacious-plugins/src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Serveur : "
-#: audacious-plugins/src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Chemin : "
-#: audacious-plugins/src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port : "
-#: audacious-plugins/src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Utiliser « HTTP » à la place de « CDDB »"
-#: audacious-plugins/src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Remplacer le périphérique par défaut : "
-#: audacious-plugins/src/cdaudio-ng/configure.c:258
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
msgid "Ok"
msgstr "OK"
-#: audacious-plugins/src/compressor/plugin.c:58
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Lire les pistes du CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Ajouter les pistes du CD"
+
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr "À propos du module « Dynamic Range Compression »"
-#: audacious-plugins/src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr "Préférences du module « Dynamic Range Compressor »"
-#: audacious-plugins/src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "Volume cible :"
-
-#: audacious-plugins/src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "Intensité de l'effet :"
-
-#: audacious-plugins/src/console/plugin.c:33
-msgid "About the Game Console Music Decoder"
-msgstr "À propos de « Game Console Music Decoder »"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr ""
-#: audacious-plugins/src/console/plugin.c:34
-msgid ""
-"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
-"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
-"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
-" Shay Green <gblargg@gmail.com>\n"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
msgstr ""
-"Le moteur de « Console Music Decoder » a été conçu à partir de « Game_Music_Emu 0.5.2 ».\n"
-"\n"
-"Formats supportés : AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
-"\n"
-"Support pour Audacious par :\n"
-"\n"
-"William Pitcock <nenolod@dereferenced.org>\n"
-"Shay Green <gblargg@gmail.com>\n"
-#: audacious-plugins/src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Décodeur « Game Console Music »"
-#: audacious-plugins/src/console/configure.c:154
+#: src/console/configure.c:153
msgid "General"
msgstr "Général"
-#: audacious-plugins/src/console/configure.c:156
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
msgid "Playback"
msgstr "Lecture"
-#: audacious-plugins/src/console/configure.c:171
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "Basses :"
-#: audacious-plugins/src/console/configure.c:175
-#: audacious-plugins/src/console/configure.c:186
-#: audacious-plugins/src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr "secondes"
-#: audacious-plugins/src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Aiguës :"
-#: audacious-plugins/src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "Durée par défaut :"
-#: audacious-plugins/src/console/configure.c:209
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Rééchantillonnage"
-#: audacious-plugins/src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "Activer le rééchantillonnage"
-#: audacious-plugins/src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Fréquence de rééchantillonnage"
-#: audacious-plugins/src/console/configure.c:234
+#: src/console/configure.c:233
msgid "Hz"
msgstr "Hz"
-#: audacious-plugins/src/console/configure.c:245
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: audacious-plugins/src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr "Ignorer les métadonnées SPC relatives à la durée"
-#: audacious-plugins/src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Augmenter la réverbération"
-#: audacious-plugins/src/console/configure.c:272
-msgid "The default song length, expressed in seconds, is used for songs that do not provide length information (i.e. looping tracks)."
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
msgstr ""
"* Durée par défaut *\n"
"La durée par défaut, exprimée en secondes, est utilisée pour les morceaux qui ne disposent pas d'informations quant à leur durée (les pistes en boucle, par exemple)."
-#: audacious-plugins/src/crossfade/plugin.c:51
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "À propos de « Game Console Music Decoder »"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"Le moteur de « Console Music Decoder » a été conçu à partir de « Game_Music_Emu 0.5.2 ».\n"
+"\n"
+"Formats supportés : AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"\n"
+"Support pour Audacious par :\n"
+"\n"
+"William Pitcock <nenolod@dereferenced.org>\n"
+"Shay Green <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "À propos du module « Crossfade »"
-#: audacious-plugins/src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Préférences du module « Crossfade »"
-#: audacious-plugins/src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Chevauchement (en secondes) :"
-#: audacious-plugins/src/crossfade/plugin.c:129
-#: audacious-plugins/src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "Erreur du module « Crossfade »"
-#: audacious-plugins/src/crossfade/plugin.c:130
-msgid "Crossfading failed because the songs had a different number of channels."
-msgstr "Le fondu a échoué, parce que les morceaux ont un nombre de voies différent."
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+"Le fondu a échoué, parce que les morceaux ont un nombre de voies différent."
-#: audacious-plugins/src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1583,20 +1226,20 @@ msgstr ""
"Le fondu enchaîné a échoué, parce que les morceaux ont une fréquence d'échantillonnage différente.\n"
"Vous pouvez utiliser l'effet « Sample Rate Converter » pour rééchantillonner les titres à la même fréquence."
-#: audacious-plugins/src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Configuration de « Crystalizer »"
-#: audacious-plugins/src/crystalizer/crystalizer.c:106
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "Intensité de l'effet :"
-#: audacious-plugins/src/crystalizer/crystalizer.c:143
-#: audacious-plugins/src/echo_plugin/gui.c:137
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Appliquer"
-#: audacious-plugins/src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1609,659 +1252,251 @@ msgstr ""
"\n"
"« Surround echo » est écrit par Carl van Schaik (1999)"
-#: audacious-plugins/src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "À propos du module « Écho »"
-#: audacious-plugins/src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Configuration du module « Écho »"
-#: audacious-plugins/src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Délai : (ms)"
-#: audacious-plugins/src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "Retour : (%)"
-#: audacious-plugins/src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "Volume : (%)"
-#: audacious-plugins/src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid "event-device-plugin: unable to open device file %s , skipping this device; check that the file exists and that you have read permission for it\n"
-msgstr "Module « Event-Device » : impossible d'ouvrir le fichier de périphérique %s ; le périphérique sera ignoré...Veuillez vérifier que le fichier existe et que disposez des permissions de lecture requises.\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid "event-device-plugin: unable to create a io_channel for device file %s ,skipping this device\n"
-msgstr "Module « Event-Device » : impossible de créer un canal 'io' pour le fichier de périphérique %s ; le périphérique sera ignoré...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:342
-msgid "event-device-plugin: unable to open /proc/bus/input/devices , automatic detection of event devices won't work.\n"
-msgstr "Module « Event-Device » : impossible d'ouvrir \"/proc/bus/input/devices\" ; la détection automatique des périphériques échouera...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:351
-msgid "event-device-plugin: unable to open a io_channel for /proc/bus/input/devices , automatic detection of event devices won't work.\n"
-msgstr "Module « Event-Device » : impossible de créer un canal 'io' pour \"/proc/bus/input/devices\" ; la détection automatique des périphériques échouera...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:361
-msgid "event-device-plugin: an error occurred while reading /proc/bus/input/devices , automatic detection of event devices won't work.\n"
-msgstr "Module « Event-Device » : une erreur s'est produite lors de lecture de \"/proc/bus/input/devices\" ; la détection automatique des périphériques échouera...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr "Module « Event-Device » : le périphérique %s n'a pas été trouvé dans \"/dev/input\" ; le périphérique sera ignoré...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:489
-#: audacious-plugins/src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid "event-device-plugin: unable to load config file %s , default settings will be used.\n"
-msgstr "Module « Event-Device » : impossible de charger le fichier de configuration %s ; les paramètres par défaut seront utilisés...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid "event-device-plugin: incomplete information in config file for device \"%s\" , skipping.\n"
-msgstr "Module « Event-Device » : information incomplète au sujet du périphérique \"%s\" ; le périphérique sera ignoré...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:604
-#: audacious-plugins/src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid "event-device-plugin: configuration, unable to get is_active value for device \"%s\", skipping it.\n"
-msgstr "Configuration du module « Event-Device » : impossible d'obtenir la valeur de 'is_active' dans le fichier de configuration pour le périphérique \"%s\" ; le périphérique sera ignoré...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid "event-device-plugin: unable to access local directory %s , settings will not be saved.\n"
-msgstr "Module « Event-Device » : impossible d'accéder au dossier local %s ; les paramètres ne seront pas enregistrés...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid "event-device-plugin: configuration, unable to get filename value for device \"%s\", skipping it.\n"
-msgstr "Configuration du module « Event-Device » : impossible d'obtenir, dans le fichier de configuration, le nom du fichier du périphérique \"%s\" ;le périphérique sera ignoré...\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid "event-device-plugin: configuration, unable to get phys value for device \"%s\", skipping it.\n"
-msgstr "Configuration du module « Event-Device » : impossible d'obtenir la valeur physique du périphérique \"%s\" ; opération ignorée.\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid "event-device-plugin: configuration, unable to get is_custom value for device \"%s\", skipping it.\n"
-msgstr "Configuration du module « Event-Device » : impossible d'obtenir la valeur \"is_custom\" pour le périphérique \"%s\" ; opération ignorée.\n"
-
-#: audacious-plugins/src/evdev-plug/ed_internals.c:946
+#: src/ffaudio/ffaudio-core.c:725
#, c-format
-msgid "event-device-plugin: configuration, unexpected value for device \"%s\", skipping it.\n"
-msgstr "Configuration du module « Event-Device » : valeur inattendue pour le périphérique \"%s\" ; opération ignorée.\n"
-
-#: audacious-plugins/src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Lecture -> Lire"
-
-#: audacious-plugins/src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Lecture -> Arrêter"
-
-#: audacious-plugins/src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Lecture -> Pause"
-
-#: audacious-plugins/src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Lecture -> Précédent"
-
-#: audacious-plugins/src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Lecture -> Suivant"
-
-#: audacious-plugins/src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Lecture -> Éjecter"
-
-#: audacious-plugins/src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Liste de lecture -> Répéter"
-
-#: audacious-plugins/src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Liste de lecture -> Aléatoire"
-
-#: audacious-plugins/src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Volume -> Augmenter de 5"
-
-#: audacious-plugins/src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Volume -> Diminuer de 5"
-
-#: audacious-plugins/src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Volume -> Augmenter de 10"
-
-#: audacious-plugins/src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Volume -> Diminuer de 10"
-
-#: audacious-plugins/src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Volume -> Couper"
-
-#: audacious-plugins/src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Fenêtre -> Principale"
-
-#: audacious-plugins/src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Fenêtre -> Liste de lecture"
-
-#: audacious-plugins/src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Fenêtre -> Égaliseur"
-
-#: audacious-plugins/src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Fenêtre -> Aller au titre..."
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Détecté"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "Personnalisé"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Non détécté"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:275
-#: audacious-plugins/src/evdev-plug/ed_ui.c:411
-#: audacious-plugins/src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Informations"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:276
msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Il n'est pas possible d'ouvrir la fenêtre des associations pour un périphérique qui n'a pas été détecté.\n"
-"Veuillez vous assurer que le périphérique a été correctement branché."
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Erreur"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Impossible d'ouvrir le périphérique sélectionné.\n"
-"Veuillez vérifier les permissions de lecture du fichier du périphérique."
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "Ajouter un périphérique personnalisé"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"« EvDev-Plug » essaye de détecter et de mettre à jour automatiquement\n"
-"les informations concernant les périphériques disponibles sur le système.\n"
-"Toutefois, si la détection automatique ne fonctionne pas pour votre\n"
-"système ou si les périphériques ne sont pas installés dans un emplacement\n"
-"standard, vous pouvez ajouter un périphérique personnalisé, en spécifiant\n"
-"de manière précise le nom et le fichier du périphérique."
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Nom du périphérique :"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Fichier du périphérique :"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(personnalisée)"
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Veuillez spécifier à la fois le nom du périphérique et le nom du fichier.\n"
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"Le nom du fichier doit être déterminé par le chemin absolu."
-
-#: audacious-plugins/src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "Voulez-vous supprimer la configuration du périphérique sélectionné ?\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
-#: audacious-plugins/src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Voulez-vous supprimer le périphérique personnalisé sélectionné ?\n"
+#: src/ffaudio/ffaudio-core.c:739
+msgid "About FFaudio Plugin"
+msgstr "À propos du module « FFaudio »"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "Configuration du module « EvDev-Plug »"
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "À propos du module « FileWriter »"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Actif"
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "Configuration du module « File Writer »"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:655
-msgid "Status"
-msgstr "État"
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "Format du fichier de sortie :"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Nom du périphérique"
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "Configurer"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Fichier du périphérique"
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "Enregistrer dans le répertoire d'origine"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Adresse du périphérique"
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "Enregistrer dans un répertoire personnel"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Associations"
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "Dossier de destination :"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Appuyez sur une touche de votre périphérique pour l'associer.\n"
-"Si aucune touche n'a été pressée avant cinq secondes, cette\n"
-"fenêtre sera fermée et aucun changement ne sera effectué."
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Choix d'un répertoire"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event (although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Cet événement a déjà été assigné.\n"
-"\n"
-"Il n'est pas possible d'associer des plusieurs actions au même événement (cepndant, il est possible d'attribuer la même action à plusieurs événements)."
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Déterminer le nom du fichier à partir :"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "Configuration des associations"
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "des métadonnées du fichier d'origine"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Nom : </b>"
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "du nom du fichier d'origine"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Nom du fichier : </b>"
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "Conserver l'extension du nom de fichier"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Adresse physique : </b>"
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Ajouter le numéro de la piste au début du nom du fichier"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "À propos du module « EvDev-Plug »"
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
-#: audacious-plugins/src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
msgstr ""
-"\n"
-"\n"
-"Cette extension permet de contrôler le lecteur à distance,\n"
-"par l'intermédiaire des événements des périphériques.\n"
-"\n"
-"http://www.develia.org/projects.php?p=evdevplug\n"
-"\n"
-"Écrit par Giacomo Lozito < james@develia.org >\n"
-"\n"
-#: audacious-plugins/src/ffaudio/ffaudio-core.c:662
-#, c-format
-msgid ""
-"Multi-format audio decoding plugin for Audacious based on\n"
-"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
-"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
-"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
-"Audacious plugin by:\n"
-" William Pitcock <nenolod@nenolod.net>,\n"
-" Matti Hämäläinen <ccr@tnsp.org>\n"
-msgstr ""
-"Module de décodage audio multi-format pour Audacious,\n"
-"conçu à partir de l'ensemble des bibliothèques multimédia du projet\n"
-"« FFmpeg » (http://www.ffmpeg.org/)\n"
-"Droits d'utilisation (2000-2009) : Fabrice Bellard, et al.\n"
-"\n"
-"Version de la bibliothèque « libavformat » de « FFmpeg » : %d.%d.%d\n"
-"Version de la bibliothèque « libavcodec » de « FFmpeg » : %d.%d.%d\n"
-"\n"
-"Module pour Audacious écrit par :\n"
-"\n"
-"William Pitcock <nenolod@nenolod.net>\n"
-"Matti Hämäläinen <ccr@tnsp.org>\n"
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Stéréo"
-#: audacious-plugins/src/ffaudio/ffaudio-core.c:675
-msgid "About FFaudio Plugin"
-msgstr "À propos du module « FFaudio »"
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
-#: audacious-plugins/src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
msgstr "Configuration de l'encodeur « MP3 »"
-#: audacious-plugins/src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
msgstr "Qualité de l'algorithme :"
-#: audacious-plugins/src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"meilleure / la plus lente : 0\n"
-"pire / la plus rapide : 9\n"
-"recommandée : 2\n"
-"par défaut : 5"
-
-#: audacious-plugins/src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
msgstr "Fréquence d'échantillonnage de sortie :"
-#: audacious-plugins/src/filewriter/mp3.c:778
-#: audacious-plugins/src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Auto"
-
-#: audacious-plugins/src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Hz)"
-#: audacious-plugins/src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
msgstr "Débit binaire / Taux de compression :"
-#: audacious-plugins/src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
msgstr "Débit binaire (kbps)"
-#: audacious-plugins/src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
msgstr "Taux de compression :"
-#: audacious-plugins/src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
msgstr "Mode audio :"
-#: audacious-plugins/src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Stéréo jointe"
-
-#: audacious-plugins/src/filewriter/mp3.c:929
-msgid "Stereo"
-msgstr "Stéréo"
-
-#: audacious-plugins/src/filewriter/mp3.c:934
-msgid "Mono"
-msgstr "Mono"
-
-#: audacious-plugins/src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr "Options diverses :"
-#: audacious-plugins/src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
msgstr "Forcer le respect strict des normes ISO"
-#: audacious-plugins/src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr "Protection contre les erreurs"
-#: audacious-plugins/src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Ajoute à chaque trame une somme de contrôle sur 16 bits"
-
-#: audacious-plugins/src/filewriter/mp3.c:1006
-#: audacious-plugins/src/filewriter/vorbis.c:247
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr "Qualité"
-#: audacious-plugins/src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
msgstr "Activer VBR/ABR"
-#: audacious-plugins/src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr "Type :"
-#: audacious-plugins/src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Débit binaire variable"
-
-#: audacious-plugins/src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Débit binaire moyen"
-
-#: audacious-plugins/src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
msgstr "Options VBR :"
-#: audacious-plugins/src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
msgstr "Débit binaire minimal (kbps) :"
-#: audacious-plugins/src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
msgstr "Débit binaire maximal (kbps) :"
-#: audacious-plugins/src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
msgstr "Forcer de manière stricte le débit binaire minimal"
-#: audacious-plugins/src/filewriter/mp3.c:1153
-msgid "For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/mp3 player)"
-msgstr "Cette option est destinée aux lecteurs qui ne supportent pas les fichiers « mp3 » dont le débit binaire est bas (le lecteur DVD/mp3 « Apex AD600-A », notamment)."
-
-#: audacious-plugins/src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
msgstr "Options ABR :"
-#: audacious-plugins/src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
msgstr "Débit binaire moyen (kbps) :"
-#: audacious-plugins/src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
msgstr "Niveau de qualité VBR :"
-#: audacious-plugins/src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"Le plus élevé : 0\n"
-"Le plus bas : 9\n"
-"Défaut : 4"
-
-#: audacious-plugins/src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
msgstr "Ne pas écrire l'en-tête VBR « Xing »"
-#: audacious-plugins/src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: audacious-plugins/src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr "Paramètres des trames :"
-#: audacious-plugins/src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
msgstr "Marquer comme soumises aux droits d'utilisation"
-#: audacious-plugins/src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
msgstr "Marquer comme originales"
-#: audacious-plugins/src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr "Paramètres ID3 :"
-#: audacious-plugins/src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
msgstr "Forcer l'ajout de la version 2 des métadonnées"
-#: audacious-plugins/src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
msgstr "Ajouter uniquement la version 1 des métadonnées"
-#: audacious-plugins/src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
msgstr "Ajouter uniquement la version 2 des métadonnées"
-#: audacious-plugins/src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
msgstr "Métadonnées"
-#: audacious-plugins/src/filewriter/filewriter.c:180
-msgid "About FileWriter-Plugin"
-msgstr "À propos du module « FileWriter »"
-
-#: audacious-plugins/src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Module « FileWriter »\n"
-"\n"
-"Ceci est une traduction non officielle de la « GNU General Public License »\n"
-"en français. Elle n'a pas été publiée par la « Free Software Foundation »,\n"
-"et ne détermine pas les termes de distribution pour les logiciels qui\n"
-"utilisent la « GNU GPL » -- seul le texte anglais original de la « GNU GPL »\n"
-"en a le droit. Cependant, nous espérons que cette traduction aidera les\n"
-"francophones à mieux comprendre la « GNU GPL ».\n"
-"\n"
-"Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le\n"
-"modifier selon les termes de la « Licence Publique Générale GNU » (GNU GPL),\n"
-"telle que publiée par la « Free Software Foundation », soit la version 2 de\n"
-"la Licence, soit (à votre convenance) toute version postérieure.\n"
-"\n"
-"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE\n"
-"GARANTIE, sans même la garantie implicite d'une possible VALEUR MARCHANDE\n"
-"ou de l'ADÉQUATION à UN BESOIN PARTICULIER. Consultez la « Licence Publique\n"
-"Générale GNU » (GNU GPL) pour plus de détails.\n"
-"\n"
-"Vous devriez avoir reçu une copie de la « Licence Publique Générale GNU »\n"
-"(GNU GPL) avec ce programme. Dans le cas contraire, vous pouvez consulter\n"
-"la Licence sur la page <http://www.gnu.org/licenses/> ou écrire à la\n"
-"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\n"
-"MA 02110-1301, USA."
-
-#: audacious-plugins/src/filewriter/filewriter.c:466
-msgid "File Writer Configuration"
-msgstr "Configuration du module « File Writer »"
-
-#: audacious-plugins/src/filewriter/filewriter.c:478
-msgid "Output file format:"
-msgstr "Format du fichier de sortie :"
-
-#: audacious-plugins/src/filewriter/filewriter.c:496
-msgid "Configure"
-msgstr "Configurer"
-
-#: audacious-plugins/src/filewriter/filewriter.c:511
-msgid "Save into original directory"
-msgstr "Enregistrer dans le répertoire d'origine"
-
-#: audacious-plugins/src/filewriter/filewriter.c:516
-msgid "Save into custom directory"
-msgstr "Enregistrer dans un répertoire personnel"
-
-#: audacious-plugins/src/filewriter/filewriter.c:528
-msgid "Output file folder:"
-msgstr "Dossier de destination :"
-
-#: audacious-plugins/src/filewriter/filewriter.c:532
-msgid "Pick a folder"
-msgstr "Choix d'un répertoire"
-
-#: audacious-plugins/src/filewriter/filewriter.c:551
-msgid "Get filename from:"
-msgstr "Déterminer le nom du fichier à partir :"
-
-#: audacious-plugins/src/filewriter/filewriter.c:554
-msgid "original file tags"
-msgstr "des métadonnées du fichier d'origine"
-
-#: audacious-plugins/src/filewriter/filewriter.c:560
-msgid "original filename"
-msgstr "du nom du fichier d'origine"
-
-#: audacious-plugins/src/filewriter/filewriter.c:570
-msgid "Don't strip file name extension"
-msgstr "Conserver l'extension du nom de fichier"
-
-#: audacious-plugins/src/filewriter/filewriter.c:574
-msgid "If enabled, the extension from the original filename will not be stripped before adding the new file extension to the end."
-msgstr "Si cette option est activée, l'extension du nom du fichier source ne sera pas supprimée avant l'ajout de la nouvelle extension."
-
-#: audacious-plugins/src/filewriter/filewriter.c:588
-msgid "Prepend track number to filename"
-msgstr "Ajouter le numéro de la piste au début du nom du fichier"
-
-#: audacious-plugins/src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:240
msgid "Vorbis Encoder Configuration"
msgstr "Confogiration de l'encodeur « Vorbis »"
-#: audacious-plugins/src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:260
msgid "Quality level (0 - 10):"
msgstr "Niveau de qualité (0 - 10) :"
-#: audacious-plugins/src/flacng/plugin.c:458
-msgid "FLAC Audio Plugin "
-msgstr "Module audio « Flac » "
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "À propos du module « FLAC »"
-#: audacious-plugins/src/flacng/plugin.c:459
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2277,15 +1512,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: audacious-plugins/src/flacng/plugin.c:465
-msgid "About FLAC Audio Plugin"
-msgstr "À propos du module « FLAC »"
-
-#: audacious-plugins/src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "À propos du module « Gnome Shortcut »"
-#: audacious-plugins/src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2301,465 +1532,444 @@ msgstr ""
"Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: audacious-plugins/src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
-
-#: audacious-plugins/src/gntui/gntui.c:272
-#: audacious-plugins/src/gntui/fileselector.c:75
-msgid "Add Files"
-msgstr "Ajouter des fichiers"
-
-#: audacious-plugins/src/gntui/gntui.c:273
-#: audacious-plugins/src/gntui/fileselector.c:75
-msgid "Open Files"
-msgstr "Ouvrir des fichiers"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Place dans la liste"
-#: audacious-plugins/src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr "Interface gnt"
-
-#: audacious-plugins/src/gtkui/ui_gtk.c:76
-msgid "GTK Interface"
-msgstr "Interface GTK"
-
-#: audacious-plugins/src/gtkui/ui_gtk.c:285
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
-
-#: audacious-plugins/src/gtkui/ui_gtk.c:291
-msgid "Audacious"
-msgstr "Audacious"
-
-#: audacious-plugins/src/gtkui/ui_manager.c:35
-#: audacious-plugins/src/gtkui/ui_manager.c:36
-msgid "Stop after Current Song"
-msgstr "Arrêter après le titre en cours de lecture"
-
-#: audacious-plugins/src/gtkui/ui_manager.c:38
-#: audacious-plugins/src/gtkui/ui_manager.c:39
-msgid "Repeat"
-msgstr "Mode « répétition »"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Titre"
-#: audacious-plugins/src/gtkui/ui_manager.c:41
-#: audacious-plugins/src/gtkui/ui_manager.c:42
-msgid "Shuffle"
-msgstr "Mode « lecture aléatoire »"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Artiste"
-#: audacious-plugins/src/gtkui/ui_manager.c:44
-#: audacious-plugins/src/gtkui/ui_manager.c:45
-msgid "No Playlist Advance"
-msgstr "Ne pas avancer dans la liste de lecture"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Année"
-#: audacious-plugins/src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Afficher les listes de lecture"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
-#: audacious-plugins/src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Afficher/cacher les listes de lecture"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Numéro de piste"
-#: audacious-plugins/src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "Afficher l'espace informatif"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Position dans la queue"
-#: audacious-plugins/src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "Afficher/cacher l'espace informatif"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Durée"
-#: audacious-plugins/src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "Afficher le menu principal"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Emplacement du fichier"
-#: audacious-plugins/src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "Afficher/cacher le menu principal"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Nom du fichier"
-#: audacious-plugins/src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr "Afficher la barre d'état"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Titre formaté"
-#: audacious-plugins/src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
-msgstr "Afficher/cacher la barre d'état"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Débit binaire (kbps)"
-#: audacious-plugins/src/gtkui/ui_manager.c:69
-#: audacious-plugins/src/gtkui/ui_manager.c:70
-msgid "Pause"
-msgstr "Pause"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Choisir les colonnes"
-#: audacious-plugins/src/gtkui/ui_manager.c:72
-#: audacious-plugins/src/gtkui/ui_manager.c:73
-msgid "Stop"
-msgstr "Arrêt"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Disponibles :"
-#: audacious-plugins/src/gtkui/ui_manager.c:75
-#: audacious-plugins/src/gtkui/ui_manager.c:76
-msgid "Previous"
-msgstr "Précédent"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Sélectionnées :"
-#: audacious-plugins/src/gtkui/ui_manager.c:78
-#: audacious-plugins/src/gtkui/ui_manager.c:79
-msgid "Next"
-msgstr "Suivant"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Intégrer à gauche"
-#: audacious-plugins/src/gtkui/ui_manager.c:84
-msgid "Playlist"
-msgstr "Liste de lecture"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Intégrer à droite"
-#: audacious-plugins/src/gtkui/ui_manager.c:86
-#: audacious-plugins/src/gtkui/ui_manager.c:87
-msgid "New Playlist"
-msgstr "Nouvelle liste"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Intégrer en haut"
-#: audacious-plugins/src/gtkui/ui_manager.c:89
-#: audacious-plugins/src/gtkui/ui_manager.c:90
-msgid "Delete Playlist"
-msgstr "Supprimer la liste"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Intégrer en bas"
-#: audacious-plugins/src/gtkui/ui_manager.c:92
-msgid "Import Playlist ..."
-msgstr "Importer une liste de lecture ..."
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Séparer"
-#: audacious-plugins/src/gtkui/ui_manager.c:93
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Importe une liste de lecture dans la liste active."
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Désactiver"
-#: audacious-plugins/src/gtkui/ui_manager.c:95
-msgid "Export Playlist ..."
-msgstr "Exporter la liste de lecture ..."
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "Ouvrir des fichiers"
-#: audacious-plugins/src/gtkui/ui_manager.c:96
-msgid "Saves the selected playlist."
-msgstr "Enregistre la liste de lecture active."
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Ouvrir un adresse"
-#: audacious-plugins/src/gtkui/ui_manager.c:98
-msgid "Save All Playlists"
-msgstr "Enregistrer toutes les listes"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_Ajouter des fichiers"
-#: audacious-plugins/src/gtkui/ui_manager.c:99
-msgid "Saves all the playlists that are open. Note that this is done automatically when Audacious quits."
-msgstr "Enregistre toutes les listes de lecture qui sont ouvertes. Veuillez noter que cette opération est effectuée automatiquement à la fermeture d'Audacious."
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Ajouter une adresse"
-#: audacious-plugins/src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr "Réactualiser"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "À propos"
-#: audacious-plugins/src/gtkui/ui_manager.c:104
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Actualise les métadonnées associées à une entrée de la liste."
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Préférences"
-#: audacious-plugins/src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "Gestionnaire de listes de lecture"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Quitter"
-#: audacious-plugins/src/gtkui/ui_manager.c:108
-msgid "Opens the playlist manager."
-msgstr "Ouvre le gestionnaire de listes de lecture."
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "Lecture"
-#: audacious-plugins/src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr "Ajouter l'adresse d'un flux ..."
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Pause"
-#: audacious-plugins/src/gtkui/ui_manager.c:112
-msgid "Adds a remote track to the playlist."
-msgstr "Ajoute un flux distant à la liste de lecture."
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "Stop"
-#: audacious-plugins/src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
-msgstr "Ajouter des fichiers ..."
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "Précédent"
-#: audacious-plugins/src/gtkui/ui_manager.c:116
-msgid "Adds files to the playlist."
-msgstr "Ajoute des fichiers à la liste de lecture."
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "Suivant"
-#: audacious-plugins/src/gtkui/ui_manager.c:119
-msgid "Remove All"
-msgstr "Effacer toutes les entrées"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "Mode « répétition »"
-#: audacious-plugins/src/gtkui/ui_manager.c:120
-msgid "Removes all entries from the playlist."
-msgstr "Efface toutes les entrées de la liste de lecture."
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "Mode « lecture aléatoire »"
-#: audacious-plugins/src/gtkui/ui_manager.c:123
-msgid "Remove Unselected"
-msgstr "Ne garder que la sélection"
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "Ne pas avancer dans la liste de lecture"
-#: audacious-plugins/src/gtkui/ui_manager.c:124
-msgid "Remove unselected entries from the playlist."
-msgstr "Efface les entrées non sélectionnées de la liste de lecture."
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Arrêter après le titre en cours de lecture."
-#: audacious-plugins/src/gtkui/ui_manager.c:127
-msgid "Remove Selected"
-msgstr "Effacer la sélection"
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Informations sur le morceau"
-#: audacious-plugins/src/gtkui/ui_manager.c:128
-msgid "Remove selected entries from the playlist."
-msgstr "Efface les entrées sélectionnées de la liste de lecture."
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Sauter au temps…"
-#: audacious-plugins/src/gtkui/ui_manager.c:131
-msgid "Sort"
-msgstr "Trier"
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Sauter au morceau"
-#: audacious-plugins/src/gtkui/ui_manager.c:132
-msgid "By Track Number"
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
msgstr "Par numéro de piste"
-#: audacious-plugins/src/gtkui/ui_manager.c:134
-msgid "By Title"
+#: src/gtkui/menus.c:158
+msgid "By _Title"
msgstr "Par titre"
-#: audacious-plugins/src/gtkui/ui_manager.c:136
-msgid "By Artist"
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
msgstr "Par artiste"
-#: audacious-plugins/src/gtkui/ui_manager.c:138
-msgid "By Album"
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
msgstr "Par album"
-#: audacious-plugins/src/gtkui/ui_manager.c:140
-msgid "By File Path"
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Par date de parution"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
msgstr "Par emplacement de fichier"
-#: audacious-plugins/src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Par titre formaté"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
msgstr "Inverser l'ordre"
-#: audacious-plugins/src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Sortie"
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Mélanger aléatoirement"
-#: audacious-plugins/src/gtkui/ui_manager.c:149
-msgid "Effects"
-msgstr "Effets audio"
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Réactualiser"
-#: audacious-plugins/src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr "Égaliseur"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Retirer les fichiers inaccessibles"
-#: audacious-plugins/src/gtkui/ui_manager.c:156
-msgid "View"
-msgstr "Affichage"
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "Trier"
-#: audacious-plugins/src/gtkui/ui_manager.c:157
-msgid "Interface"
-msgstr "Interface"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nouvelle liste de lecture"
-#: audacious-plugins/src/gtkui/ui_manager.c:164
-msgid "File"
-msgstr "Fichier"
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Fermer"
-#: audacious-plugins/src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "Composants"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importer"
-#: audacious-plugins/src/gtkui/ui_manager.c:169
-#: audacious-plugins/src/gtkui/ui_manager.c:172
-msgid "View Track Details"
-msgstr "Afficher les détails"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exporter"
-#: audacious-plugins/src/gtkui/ui_manager.c:170
-#: audacious-plugins/src/gtkui/ui_manager.c:173
-msgid "View track details"
-msgstr "Affiche les informations relatives au morceau."
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "Gestionnaire de listes de lecture"
-#: audacious-plugins/src/gtkui/ui_manager.c:175
-#: audacious-plugins/src/gtkui/ui_manager.c:176
-msgid "About Audacious"
-msgstr "À propos d'Audacious"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Gestionnaire de files d'attentes"
-#: audacious-plugins/src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr "Ouvrir des fichiers ..."
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "Augmenter le volume"
-#: audacious-plugins/src/gtkui/ui_manager.c:179
-msgid "Load and play a file"
-msgstr "Charge et lit un fichier."
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "Réduire le volume"
-#: audacious-plugins/src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr "Ouvrir l'adresse d'un flux ..."
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "Égaliseur"
-#: audacious-plugins/src/gtkui/ui_manager.c:182
-msgid "Play media from the selected location"
-msgstr "Lit les média de l'emplacement sélectionné."
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_ffets audio"
-#: audacious-plugins/src/gtkui/ui_manager.c:184
-msgid "Plugin services"
-msgstr "Affiche le menu propre à certains modules."
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interface"
-#: audacious-plugins/src/gtkui/ui_manager.c:186
-msgid "Preferences"
-msgstr "Préférences..."
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Visualisations"
-#: audacious-plugins/src/gtkui/ui_manager.c:187
-msgid "Open preferences window"
-msgstr "Ouvre la fenêtre des préférences."
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Afficher la barre de menu"
-#: audacious-plugins/src/gtkui/ui_manager.c:189
-msgid "_Quit"
-msgstr "_Quitter"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Afficher l'espace informatif"
-#: audacious-plugins/src/gtkui/ui_manager.c:190
-msgid "Quit Audacious"
-msgstr "Ferme Audacious."
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Afficher la barre d'état"
-#: audacious-plugins/src/gtkui/ui_manager.c:192
-#: audacious-plugins/src/gtkui/ui_manager.c:193
-msgid "Set A-B"
-msgstr "Marquer une boucle A-B"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Afficher le titre des colonnes"
-#: audacious-plugins/src/gtkui/ui_manager.c:195
-#: audacious-plugins/src/gtkui/ui_manager.c:196
-msgid "Clear A-B"
-msgstr "Effacer la boucle A-B"
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Choisir les colonnes à afficher"
-#: audacious-plugins/src/gtkui/ui_manager.c:198
-#: audacious-plugins/src/gtkui/ui_manager.c:199
-msgid "Jump to Playlist Start"
-msgstr "Aller au début de la liste"
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Afficher le morceau courant au changement de pistes"
-#: audacious-plugins/src/gtkui/ui_manager.c:201
-#: audacious-plugins/src/gtkui/ui_manager.c:202
-msgid "Jump to File"
-msgstr "Aller au fichier..."
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Fichier"
-#: audacious-plugins/src/gtkui/ui_manager.c:204
-#: audacious-plugins/src/gtkui/ui_manager.c:205
-#: audacious-plugins/src/gtkui/actions.c:272
-msgid "Jump to Time"
-msgstr "Aller au temps..."
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "Lecture"
-#: audacious-plugins/src/gtkui/ui_manager.c:207
-msgid "Queue Toggle"
-msgstr "Mettre dans la file d'attente"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "Liste de lecture"
-#: audacious-plugins/src/gtkui/ui_manager.c:208
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Active/désactive l'entrée dans la file d'attente de la liste."
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "Périphériques"
-#: audacious-plugins/src/gtkui/ui_manager.c:211
-msgid "Copy"
-msgstr "Copier"
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "Sortie"
-#: audacious-plugins/src/gtkui/ui_manager.c:214
-msgid "Cut"
-msgstr "Couper"
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "Affichage"
-#: audacious-plugins/src/gtkui/ui_manager.c:217
-msgid "Paste"
-msgstr "Coller"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "Mettre/enlever dans la file"
-#: audacious-plugins/src/gtkui/ui_manager.c:220
-msgid "Select All"
-msgstr "Tout sélectionner"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "Couper"
-#: audacious-plugins/src/gtkui/ui_manager.c:221
-msgid "Selects all of the playlist entries."
-msgstr "Sélectionne toutes les entrées de la liste."
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "Copier"
-#: audacious-plugins/src/gtkui/ui_manager.c:224
-msgid "Select None"
-msgstr "Ne rien sélectionner"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "Coller"
-#: audacious-plugins/src/gtkui/ui_manager.c:225
-msgid "Deselects all of the playlist entries."
-msgstr "Annule la sélection de toutes les entrées de la liste."
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Sélectionner tout"
-#: audacious-plugins/src/gtkui/ui_statusbar.c:91
-msgid "mono"
-msgstr "mono"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Renommer"
-#: audacious-plugins/src/gtkui/ui_statusbar.c:94
-msgid "stereo"
-msgstr "stereo"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Interface GTK"
-#: audacious-plugins/src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
#, c-format
-msgid "%d channels"
-msgstr "%d voies"
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: audacious-plugins/src/gtkui/ui_statusbar.c:101
-#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr "%s: %d kbps, %d Hz, %s"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Remplissage du tampon"
-#: audacious-plugins/src/gtkui/actions.c:257
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "Impossible d'accéder au temps spécifié, si aucune piste n'est en cours de lecture.\n"
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: audacious-plugins/src/gtkui/actions.c:289
-msgid "minutes:seconds"
-msgstr " minutes : secondes"
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Erreur"
-#: audacious-plugins/src/gtkui/actions.c:299
-msgid "Track length:"
-msgstr "Durée du morceau :"
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Fermer"
-#: audacious-plugins/src/gtkui/actions.c:610
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Erreur lors de l'écriture de la liste de lecture \"%s\": %s"
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "mono"
-#: audacious-plugins/src/gtkui/actions.c:625
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s existe déjà. Faut-il continuer ?"
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "stereo"
-#: audacious-plugins/src/gtkui/actions.c:651
-msgid "Export Playlist"
-msgstr "Exporter la liste de lecture"
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d canal"
+msgstr[1] "%d canaux"
-#: audacious-plugins/src/gtkui/actions.c:723
-msgid "Import Playlist"
-msgstr "Importer une liste de lecture"
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d kbps"
-#: audacious-plugins/src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Piste précédente"
-#: audacious-plugins/src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Lecture"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Pause / Reprise"
-#: audacious-plugins/src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Arrêt"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Piste suivante"
-#: audacious-plugins/src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Avancer de 5 secondes"
-#: audacious-plugins/src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Reculer de 5 secondes"
-#: audacious-plugins/src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Rendre le volume nul"
-#: audacious-plugins/src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Augmenter le volume"
-#: audacious-plugins/src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Réduire le volume"
-#: audacious-plugins/src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Aller au fichier..."
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Afficher / Cacher les fenêtres du lecteur"
-#: audacious-plugins/src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "Activer l'affichage à l'écran (« OSD »)"
-#: audacious-plugins/src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Bascule le mode « répétition »"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Bascule le mode « lecture aléatoire »"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(néant)"
-#: audacious-plugins/src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without modificators.\n"
"\n"
@@ -2771,15 +1981,15 @@ msgstr ""
"\n"
"Souhaitez-vous quand même poursuivre ?"
-#: audacious-plugins/src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Association des boutons de la souris"
-#: audacious-plugins/src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Configuration du module « Global Hotkey »"
-#: audacious-plugins/src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -2789,23 +1999,23 @@ msgstr ""
" Vous pouvez aussi créer des associations avec les boutons de la souris.\n"
" "
-#: audacious-plugins/src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Raccourcis clavier :"
-#: audacious-plugins/src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Action : </b>"
-#: audacious-plugins/src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Touche associée :</b>"
-#: audacious-plugins/src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "À propos du module « Global Hotkey »"
-#: audacious-plugins/src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2837,7 +2047,31 @@ msgstr ""
"Jeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: audacious-plugins/src/jack/jack.c:437
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Connexion à tous les ports « Jack » disponibles"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Connexion aux ports de sortie uniquement"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "Aucune connexion"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "Configuration du module « Jack »"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Mode de connexion :"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Activer le mode de débogage"
+
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2856,166 +2090,69 @@ msgstr ""
"Rétroportage pour Audacious effectué par :\n"
"Giacomo Lozito from develia.org"
-#: audacious-plugins/src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
msgstr "À propos du module « JACK » 0.17"
-#: audacious-plugins/src/jack/configure.c:71
-msgid "Connect to all available jack ports"
-msgstr "Connexion à tous les ports « Jack » disponibles"
-
-#: audacious-plugins/src/jack/configure.c:78
-msgid "Connect only the output ports"
-msgstr "Connexion aux ports de sortie uniquement"
-
-#: audacious-plugins/src/jack/configure.c:85
-msgid "Connect to no ports"
-msgstr "Aucune connexion"
-
-#: audacious-plugins/src/jack/configure.c:103
-msgid "jack Plugin configuration"
-msgstr "Configuration du module « Jack »"
-
-#: audacious-plugins/src/jack/configure.c:121
-msgid "Connection mode:"
-msgstr "Mode de connexion :"
-
-#: audacious-plugins/src/jack/configure.c:133
-msgid "Enable debug printing"
-msgstr "Activer le mode de débogage"
-
-#: audacious-plugins/src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Cette extension « LADSPA » ne dispose pas de contrôles utilisateur"
-
-#: audacious-plugins/src/ladspa/ladspa.c:865
-#: audacious-plugins/src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Nom"
-
-#: audacious-plugins/src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: audacious-plugins/src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Extensions installées"
-
-#: audacious-plugins/src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Extensions utilisées"
-
-#: audacious-plugins/src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Ajouter"
-
-#: audacious-plugins/src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Enlever"
-
-#: audacious-plugins/src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "Liste des extensions « LADSPA »"
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr ""
-#: audacious-plugins/src/lirc/lirc.c:82
+#: src/ladspa/plugin.c:516
#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: impossible d'initialiser le support « LIRC »\n"
+msgid "%s Settings"
+msgstr ""
-#: audacious-plugins/src/lirc/lirc.c:90
-#, c-format
-msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
msgstr ""
-"%s: impossible de lire le fichier de configuration de « LIRC »\n"
-"%s: veuillez consulter la documentation de « LIRC »\n"
-"%s: relative à la création d'un fichier de configuration correct\n"
-#: audacious-plugins/src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: tentative de reconnexion...\n"
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Chemins de recherche des greffons :"
-#: audacious-plugins/src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: commande inconnue \"%s\"\n"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Séparez les différents chemins par deux points («:»).⎠\n"
+"Les greffons seront recherchés dans ces chemins ainsi que deux de LADSPA_PATH.⎠Après avoir ajouté de nouveaux chemins, pressez Entrée pour mettre à jour les greffons disponibles.</small>"
-#: audacious-plugins/src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: déconnecté de « LIRC »\n"
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Greffons disponibles :"
-#: audacious-plugins/src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: le système va essayer de se reconnecter toutes les %d secondes...\n"
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Activer"
-#: audacious-plugins/src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "À propos du module « LIRC »"
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Greffons activés :"
-#: audacious-plugins/src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "Module « LIRC » "
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr ""
-#: audacious-plugins/src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
+"Recherche les paroles"
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
"\n"
-"« LIRC » est un module simple qui permet de contrôler\n"
-"Audacious en utilisant le démon de contrôle distant « LIRC ».\n"
-"\n"
-"Le module a été adapté pour Audacious par\n"
-"Tony Vroon <chainsaw@gentoo.org>,\n"
-"à partir du module « LIRC » pour XMMS écrit par :\n"
-"\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
"\n"
-"Vous pouvez obtenir des informations sur « LIRC » à cette adresse :\n"
-"http://lirc.org"
-
-#: audacious-plugins/src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "Paramètres du module « LIRC » "
-
-#: audacious-plugins/src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Se reconnecter au serveur « LIRC »"
-
-#: audacious-plugins/src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Délai (secondes) avant la reconnexion :"
-
-#: audacious-plugins/src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Reconnexion"
+"Se connecte à lyrics.wikia.com..."
-#: audacious-plugins/src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Connexion"
-
-#: audacious-plugins/src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
-msgstr "LyricWiki"
-
-#: audacious-plugins/src/lyricwiki/lyricwiki.c:326
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
@@ -3023,11 +2160,11 @@ msgstr ""
"\n"
"Les paroles n'ont pas été trouvées."
-#: audacious-plugins/src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
msgstr "À propos du module « Métronome »"
-#: audacious-plugins/src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3046,41 +2183,62 @@ msgstr ""
"'tact://77' produira 77 battements par minute\n"
"'tact://60*3/4' produira 60 battements par minute (mesure à 3/4)"
-#: audacious-plugins/src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Métronome : %d bpm"
-#: audacious-plugins/src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Métronome : %d bpm %d/%d"
-#: audacious-plugins/src/mpg123/mpg123.c:179
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "À propos du module de mélange des canaux"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Préférence de mixage de canaux"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Canaux de sortie :"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr ""
+"Les changements prendront effet lors du prochain changement de morceau"
+
+#: src/mpg123/mpg123.c:191
msgid "Surround"
msgstr "Son d'ambiance"
-#: audacious-plugins/src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Transférer la sélection"
-
-#: audacious-plugins/src/mtp_up/mtp.c:292
+#: src/mtp_up/mtp.c:340
msgid "Upload in progress..."
msgstr "Transfert en cours..."
-#: audacious-plugins/src/mtp_up/mtp.c:301
-msgid "MTP device handler"
-msgstr "Support MTP"
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Envoyer vers le périphérique MTP"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Déconnecter le périphérique MTP"
-#: audacious-plugins/src/mtp_up/mtp.c:305
-msgid "Disconnect the device"
-msgstr "Déconnecter le périphérique"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Arreté"
-#: audacious-plugins/src/null/null.c:63
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious n'est pas en train de lire de la musique."
+
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Module de sortie « Null » "
-#: audacious-plugins/src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3090,1474 +2248,1039 @@ msgstr ""
"Écrit par Christian Birchinger <joker@netswarm.net>,\n"
"à partir du module pour XMMS de Håvard Kvål <havardk@xmms.org>"
-#: audacious-plugins/src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "À propos du module de sortie « Null »"
-#: audacious-plugins/src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Préférences du module de sortie « Null »"
-#: audacious-plugins/src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr "Utiliser en temps réel"
-#: audacious-plugins/src/OSS/OSS.c:40
-msgid "About OSS Driver"
-msgstr "À propos du pilote « OSS »"
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. Périphérique par défaut"
-#: audacious-plugins/src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "Préférences du module de sortie « OSS4 »"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Périphérique audio :"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "Utiliser un autre périphérique :"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Conserver le volume, d'une session à l'autre"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "Activer les conversions de format logicielles de « OSS »."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
msgstr ""
-"Pilote « OSS » pour Audacious\n"
-"\n"
-"Ceci est une traduction non officielle de la « GNU General Public License »\n"
-"en français. Elle n'a pas été publiée par la « Free Software Foundation »,\n"
-"et ne détermine pas les termes de distribution pour les logiciels qui\n"
-"utilisent la « GNU GPL » -- seul le texte anglais original de la « GNU GPL »\n"
-"en a le droit. Cependant, nous espérons que cette traduction aidera les\n"
-"francophones à mieux comprendre la « GNU GPL ».\n"
-"\n"
-"Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le\n"
-"modifier selon les termes de la « Licence Publique Générale GNU » (GNU GPL),\n"
-"telle que publiée par la « Free Software Foundation », soit la version 2 de\n"
-"la Licence, soit (à votre convenance) toute version postérieure.\n"
-"\n"
-"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE\n"
-"GARANTIE, sans même la garantie implicite d'une possible VALEUR MARCHANDE\n"
-"ou de l'ADÉQUATION à UN BESOIN PARTICULIER. Consultez la « Licence Publique\n"
-"Générale GNU » (GNU GPL) pour plus de détails.\n"
-"\n"
-"Vous devriez avoir reçu une copie de la « Licence Publique Générale GNU »\n"
-"(GNU GPL) avec ce programme. Dans le cas contraire, vous pouvez consulter\n"
-"la Licence sur la page <http://www.gnu.org/licenses/> ou écrire à la\n"
-"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\n"
-"MA 02110-1301, USA."
-
-#: audacious-plugins/src/OSS/configure.c:148
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "À propos du module « OSS4 »"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "Erreur OSS4"
+
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "Défaut (%s)"
-#: audacious-plugins/src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "Configuration du pilote « OSS »"
-#: audacious-plugins/src/OSS/configure.c:213
-msgid "Audio device:"
-msgstr "Périphérique audio :"
-
-#: audacious-plugins/src/OSS/configure.c:235
-#: audacious-plugins/src/OSS/configure.c:276
-msgid "Use alternate device:"
-msgstr "Utiliser un autre périphérique :"
-
-#: audacious-plugins/src/OSS/configure.c:298
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "Périphériques"
-#: audacious-plugins/src/OSS/configure.c:300
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "Tampon"
-#: audacious-plugins/src/OSS/configure.c:313
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr "Pré-tampon (pourcents) :"
-#: audacious-plugins/src/OSS/configure.c:324
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "Tampon"
-#: audacious-plugins/src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "Paramètres du mélangeur :"
-#: audacious-plugins/src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "Contrôle du volume via le canal « maître » au lieu du canal « PCM »"
-#: audacious-plugins/src/OSS/configure.c:337
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "Mélangeur audio"
-#: audacious-plugins/src/oss4/utils.c:204
-msgid "OSS4 error"
-msgstr "Erreur OSS4"
-
-#: audacious-plugins/src/oss4/plugin.c:54
-msgid "About OSS4 Plugin"
-msgstr "À propos du module « OSS4 »"
-
-#: audacious-plugins/src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-"Module de sortie « OSS4 » pour Audacious\n"
-"Droits d'utilisation (2010) : Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"Je voudrais remercier les personnes de #audacious -Tony Vroon et John Lindgren en particulier- et, bien entendu, les auteurs du module « OSS » précédent.\n"
-"\n"
-"\n"
-"Ceci est une traduction non officielle de la « GNU General Public License » en français. Elle n'a pas été publiée par la « Free Software Foundation » et ne détermine pas les termes de distribution pour les logiciels qui utilisent la « GNU GPL » -- seul le texte anglais original de la « GNU GPL » en a le droit. Cependant, nous espérons que cette traduction aidera les francophones à mieux comprendre la « GNU GPL ».\n"
-"\n"
-"Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le\n"
-" modifier selon les termes de la « Licence Publique Générale GNU » (GNU GPL), telle que publiée par la « Free Software Foundation », soit la version 2 de la Licence, soit (à votre convenance) toute version postérieure.\n"
-"\n"
-"\"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite d'une possible VALEUR MARCHANDE ou de l'ADÉQUATION à UN BESOIN PARTICULIER. Consultez la « Licence Publique Générale GNU » (GNU GPL) pour plus de détails.\n"
-"\n"
-"Vous devriez avoir reçu une copie de la « Licence Publique Générale GNU » (GNU GPL) avec ce programme. Dans le cas contraire, vous pouvez consulter la Licence sur la page <http://www.gnu.org/licenses/>\n"
-
-#: audacious-plugins/src/oss4/configure.c:89
-msgid "1. Default device"
-msgstr "1. Périphérique par défaut"
-
-#: audacious-plugins/src/oss4/configure.c:151
-msgid "OSS4 Output Plugin Preferences"
-msgstr "Préférences du module de sortie « OSS4 »"
-
-#: audacious-plugins/src/oss4/configure.c:202
-msgid "Save volume between sessions"
-msgstr "Conserver le volume, d'une session à l'autre"
-
-#: audacious-plugins/src/oss4/configure.c:206
-msgid "Enable format conversions made by the OSS software."
-msgstr "Activer les conversions de format logicielles de « OSS »."
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "À propos du pilote « OSS »"
-#: audacious-plugins/src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
msgstr "À propos du module de sortie « PulseAudio » pour Audacious"
-#: audacious-plugins/src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Module de sortie « PulseAudio » pour Audacious\n"
-"\n"
-"Ceci est une traduction non officielle de la « GNU General Public License »\n"
-"en français. Elle n'a pas été publiée par la « Free Software Foundation »,\n"
-"et ne détermine pas les termes de distribution pour les logiciels qui\n"
-"utilisent la « GNU GPL » -- seul le texte anglais original de la « GNU GPL »\n"
-"en a le droit. Cependant, nous espérons que cette traduction aidera les\n"
-"francophones à mieux comprendre la « GNU GPL ».\n"
-"\n"
-"Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le\n"
-"modifier selon les termes de la « Licence Publique Générale GNU » (GNU GPL),\n"
-"telle que publiée par la « Free Software Foundation », soit la version 2 de\n"
-"la Licence, soit (à votre convenance) toute version postérieure.\n"
-"\n"
-"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE\n"
-"GARANTIE, sans même la garantie implicite d'une possible VALEUR MARCHANDE\n"
-"ou de l'ADÉQUATION à UN BESOIN PARTICULIER. Consultez la « Licence Publique\n"
-"Générale GNU » (GNU GPL) pour plus de détails.\n"
-"\n"
-"Vous devriez avoir reçu une copie de la « Licence Publique Générale GNU »\n"
-"(GNU GPL) avec ce programme. Dans le cas contraire, vous pouvez consulter\n"
-"la Licence sur la page <http://www.gnu.org/licenses/> ou écrire à la\n"
-"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\n"
-"MA 02110-1301, USA."
-
-#: audacious-plugins/src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
msgstr "À propos du module « Sample Rate Converter »"
-#: audacious-plugins/src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
msgstr "Préférence du module « Sample Rate Converter »"
-#: audacious-plugins/src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
msgstr "Correspondances des fréquences :"
-#: audacious-plugins/src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr "Toutes les autres :"
-#: audacious-plugins/src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "Méthode :"
-#: audacious-plugins/src/scrobbler/plugin.c:213
-msgid ""
-"Audacious AudioScrobbler Plugin\n"
-"\n"
-"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
-msgstr ""
-"Module « AudioScrobbler » pour Audacious\n"
-"\n"
-"Initialement créé par Audun Hove <audun@nlc.no> et Pipian <pipian@pipian.com>\n"
-
-#: audacious-plugins/src/scrobbler/plugin.c:215
-msgid "About Scrobbler Plugin"
-msgstr "À propos du module « Scrobbler »"
-
-#: audacious-plugins/src/scrobbler/configure.c:152
-#: audacious-plugins/src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
msgstr "Modifier le mot de passe"
-#: audacious-plugins/src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr "<b>Services</b>"
-#: audacious-plugins/src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr "Nom d'utilisateur :"
-#: audacious-plugins/src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr "Mot de passe :"
-#: audacious-plugins/src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
msgstr "Adresse Scrobbler :"
-#: audacious-plugins/src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: audacious-plugins/src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
msgstr "Scrobbler"
-#: audacious-plugins/src/sid/xs_glade.c:90
-#: audacious-plugins/src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Impossible d'ouvrir l'image : %s"
-
-#: audacious-plugins/src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "Général"
-
-#: audacious-plugins/src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr "Module #%i : "
-
-#: audacious-plugins/src/sid/xs_config.c:322
-msgid " Error"
-msgstr "Erreur"
-
-#: audacious-plugins/src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "À propos du module « %s »"
-
-#: audacious-plugins/src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr "Configuration du module « Audacious-SID »"
-
-#: audacious-plugins/src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8 bits"
-
-#: audacious-plugins/src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16 bits"
-
-#: audacious-plugins/src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr "Résolution :"
-
-#: audacious-plugins/src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr "Son panoramique"
-
-#: audacious-plugins/src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr "Sortie :"
-
-#: audacious-plugins/src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr "Fréquence d'échantillonnage :"
-
-#: audacious-plugins/src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr "Utiliser le suréchantillonnage"
-
-#: audacious-plugins/src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr "Facteur :"
-
-#: audacious-plugins/src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr "Les facteurs élevés nécessitent plus de ressources du processeur"
-
-#: audacious-plugins/src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr "Suréchantillonnage :"
-
-#: audacious-plugins/src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Audio"
-
-#: audacious-plugins/src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr "Forcer la vitesse"
-
-#: audacious-plugins/src/sid/xs_interface.c:449
-msgid "If enabled, this option \"forces\" the emulation engine to use the selected clock speed/frequency. Otherwise the speed is determined from played file itself."
-msgstr "Activée, cette option « force » le moteur de l'émulation à utiliser la vitesse/fréquence de l'horloge sélectionnée. Dans le cas contraire, la vitesse est déterminée par le fichier lui-même."
-
-#: audacious-plugins/src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50 Hz)"
-
-#: audacious-plugins/src/sid/xs_interface.c:455
-msgid "PAL is the european TV standard, which uses 50Hz vertical refresh frequency. Most of SID-tunes have been made for PAL computers."
-msgstr "'PAL' est le standard télévisuel européen ; il utilise une fréquence de rafraîchissement vertical de 50 hz. La plupart des compositions « SID » ont été réalisées pour les ordinateurs « PAL »."
-
-#: audacious-plugins/src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60 Hz)"
-
-#: audacious-plugins/src/sid/xs_interface.c:463
-msgid "NTSC is the TV standard with 60Hz vertical refresh rate (and other features that differ from PAL). It is mainly used in United States, Japan and certain other countries."
-msgstr "'NTSC' est le standard télévisuel qui utilise un taux de rafraîchissement vertical de 60 Hz (et d'autres caractéristiques qui diffèrent du standard « PAL »). Il est principalement utilisé aux États-Unis, au Japon et dans d'autres pays."
-
-#: audacious-plugins/src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr "Vitesse d'horloge :"
-
-#: audacious-plugins/src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr "Forcer le modèle"
-
-#: audacious-plugins/src/sid/xs_interface.c:488
-msgid "If enabled, this option \"forces\" the emulation engine to use the selected SID-chip model. Otherwise the preferred SID model is determined from the file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr "Activée, cette option « force » le moteur de l'émulation à utiliser le modèle de puce « SID » sélectionné. Dans le cas contraire, le modèle « SID » adéquat est déterminé à partir du fichier (s'il est du type « PSIDv2NG »). Si l'information concernant le modèle n'est pas disponible, c'est le réglage choisi via cette option qui sera utilisé."
-
-#: audacious-plugins/src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: audacious-plugins/src/sid/xs_interface.c:494
-msgid "MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 in few ways, having much fuller filter (which, due to design error, is never same between two different SID-chips) and has the \"volume adjustment bug\", which enables playing of digital samples."
-msgstr "'MOS/CSG 6581 est la toute première version majeure de la puce « SID ». Elle diffère du modèle '8580' de plusieurs manières : elle dispose d'un filtre plus complet (qui, à cause d'une erreur de conception, n'est jamais le même, d'un modèle de puce « SID » à l'autre) et présente le « problème d'ajustement du volume » qui permet la lecture des échantillons digitaux."
-
-#: audacious-plugins/src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
-
-#: audacious-plugins/src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr "Modèle « SID » :"
-
-#: audacious-plugins/src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr "SIDPlay 1 (synchronisation de la trame)"
-
-#: audacious-plugins/src/sid/xs_interface.c:526
-msgid "Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most cases, though."
-msgstr "Utilise la bibliothèque « libSIDPlay 1.x ». L'émulation est plus rapide, mais moins précise (toutefois, elle offre une bonne restitution, dans la plupart des cas)."
-
-#: audacious-plugins/src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr "SIDPlay 2 (synchronisation du cycle)"
-
-#: audacious-plugins/src/sid/xs_interface.c:534
-msgid "Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact emulation."
-msgstr "Utilise la bibliothèque « libSIDPlay 2.x ». L'émulation nécessite un processeur puissant, mais est plus précise."
-
-#: audacious-plugins/src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr "Choix de la bibliothèque d'émulation :"
-
-#: audacious-plugins/src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr "C64 réel (SIDPlay 2 uniquement)"
-
-#: audacious-plugins/src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr "Pagination"
-
-#: audacious-plugins/src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr "ROM transparente"
-
-#: audacious-plugins/src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr "Environnement « PlaySID »"
-
-#: audacious-plugins/src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr "Gestion de la mémoire :"
-
-#: audacious-plugins/src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr "Émulation #1"
-
-#: audacious-plugins/src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr "Mode « optimisation » (plus rapide, mais imprécis)"
-
-#: audacious-plugins/src/sid/xs_interface.c:615
-msgid "This setting can be used to enable libSIDPlay2's \"optimization mode\", which in downgrades the emulation from cycle-exact to something similar to frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr "Ce réglage peut être utilisé pour activer le « mode d'optimisation » de la bibliothèque « libSIDPlay2 ». Ce mode réduit l'émulation de « synchronisation du cycle » à quelque chose équivalant à « synchronisation de la trame »."
-
-#: audacious-plugins/src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr "Émulation « reSID »"
-
-#: audacious-plugins/src/sid/xs_interface.c:621
-msgid "reSID is the software SID-chip simulator based on SID reverse-engineering, created by Dag Lem. It is probably the closest thing to real SID available as software-only emulation."
-msgstr "« reSID » est le simulateur logiciel de puces « SID » créé par Dag Lem par ingénierie inverse. Il constitue probablement l'émulation logicielle la plus proche des véritables puces « SID »."
-
-#: audacious-plugins/src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr "HardSID"
-
-#: audacious-plugins/src/sid/xs_interface.c:629
-msgid "HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a real SID-chip. Software can be used to control the HardSID and combined with software emulation of rest of C64 via libSIDPlay2 HardSID can be used to achieve \"near 100%\" similarity to real C64. For more information, see http://www.hardsid.com/"
-msgstr "'HardSID' est une carte EISA/PCI destinée aux systèmes compatibles PC, dans laquelle peut être insérée une véritable puce « SID ». La carte « HardSID » peut être contrôlée par un logiciel, mais, combinée à l'émulation d'un système C64 fournie par la bibliothèque « libSIDPlay2 », elle permet d'obtenir un rendu sonore « presque » similaire à celui d'un véritable C64. Pour de plus amples informations, vous pouvez consulter le site suivant : http://www.hardsid.com/"
-
-#: audacious-plugins/src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr "Options de « SIDPlay 2 » :"
-
-#: audacious-plugins/src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr "Rapide (méthode du « plus proche voisin »)"
-
-#: audacious-plugins/src/sid/xs_interface.c:654
-msgid "Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample."
-msgstr "La plus rapide, mais aussi la pire méthode de restitution sonore : les échantillons sont choisis selon la méthode du « plus proche voisin »."
-
-#: audacious-plugins/src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr "Interpolation linéaire"
-
-#: audacious-plugins/src/sid/xs_interface.c:662
-msgid "Uses linear interpolation between samples, yielding higher audio quality with less sampling noise."
-msgstr "Utilise l'interpolation linéaire entre les échantillons. Le flux audio est alors de plus grande qualité et est moins affecté par le bruit. "
-
-#: audacious-plugins/src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr "Filtre à réponse impulsionnelle finie ('FIR')"
-
-#: audacious-plugins/src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr "Options d'échantillonnage de « reSID » :"
-
-#: audacious-plugins/src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr "Émulation #2"
-
-#: audacious-plugins/src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr "Émuler les filtres"
-
-#: audacious-plugins/src/sid/xs_interface.c:701
-msgid "This option enables emulation of SID filter. The filter is an essential part of SID's sound capacity, but accurate emulation of it may require quite much CPU power. However, if filter emulation is disabled, tunes won't sound authentic at all if they utilize the filter."
-msgstr "Cette option active l'émulation des filtres « SID ». Le filtre constitue l'élément' essentiel de la qualité du son « SID », mais une émulation précise peut utiliser beaucoup de ressources du processeur. Cependant, si l'émulation est désactivée, alors qu'un module audio a été composé avec les fonctions d'un filtre, le son ne sera pas restitué de manière authentique."
-
-#: audacious-plugins/src/sid/xs_interface.c:726
-msgid "FS"
-msgstr "FS"
-
-#: audacious-plugins/src/sid/xs_interface.c:743
-msgid "FM"
-msgstr "FM"
-
-#: audacious-plugins/src/sid/xs_interface.c:760
-msgid "FT"
-msgstr "FT"
-
-#: audacious-plugins/src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr "Réinitialiser"
-
-#: audacious-plugins/src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr "SIDPlay 1"
-
-#: audacious-plugins/src/sid/xs_interface.c:817
-msgid "Export"
-msgstr "Exporter"
-
-#: audacious-plugins/src/sid/xs_interface.c:825
-msgid "Use"
-msgstr "Utiliser"
-
-#: audacious-plugins/src/sid/xs_interface.c:833
-msgid "Save"
-msgstr "Enregistrer"
-
-#: audacious-plugins/src/sid/xs_interface.c:841
-msgid "Import"
-msgstr "Importer"
-
-#: audacious-plugins/src/sid/xs_interface.c:849
-msgid "Delete"
-msgstr "Supprimer"
-
-#: audacious-plugins/src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr "Courbe du filtre :"
-
-#: audacious-plugins/src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr "SIDPlay 2"
-
-#: audacious-plugins/src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr "Filtres"
-
-#: audacious-plugins/src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr "Lire au moins pendant la durée indiquée"
-
-#: audacious-plugins/src/sid/xs_interface.c:901
-msgid "If enabled, the tune is played at least for the specified time, adding silence to the end if necessary."
-msgstr "Si cette option est activée, le module audio sera lu au moins pendant la durée indiquée. Si cela s'avère nécessaire, un silence sera ajouté à la fin du morceau."
-
-#: audacious-plugins/src/sid/xs_interface.c:908
-#: audacious-plugins/src/sid/xs_interface.c:962
-#: audacious-plugins/src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr "Durée :"
-
-#: audacious-plugins/src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr "Durée de lecture minimale :"
-
-#: audacious-plugins/src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr "Lire au maximum pendant la durée indiquée"
-
-#: audacious-plugins/src/sid/xs_interface.c:949
-msgid "If enabled, tune is played until specified duration is reached (aka maximum playtime)."
-msgstr "Si cette option est activée, le module audio sera lu jusqu'à ce que soit atteinte la durée indiquée (la durée de lecture maximale, en d'autres termes)."
-
-#: audacious-plugins/src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr "Uniquement si la durée du module audio est inconnue"
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Module « AudioScrobbler » pour Audacious\n"
+"\n"
+"Initialement créé par Audun Hove <audun@nlc.no> et Pipian <pipian@pipian.com>\n"
-#: audacious-plugins/src/sid/xs_interface.c:955
-msgid "If enabled, the maximum playtime is applied only if song/tune length is not known."
-msgstr "Si cette option est activée, la durée de lecture maximale ne sera appliquée que si la durée du module audio ne peut pas être déterminée."
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "À propos du module « Scrobbler »"
-#: audacious-plugins/src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr "Durée de lecture maximale :"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "AÌ€ propos du module de sortie SDL"
-#: audacious-plugins/src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr "Utiliser une base de données compatible avec « XSIDPLAY »"
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Erreur SDL"
-#: audacious-plugins/src/sid/xs_interface.c:1003
-msgid "This option enables using of XSIDPLAY compatible song length database. (Refer to Audacious-SID documentation for more information)"
-msgstr "Cette option active l'utilisation d'une base de données compatible avec « XSIDPLAY », relative à la durée des modules audio. Pour de plus amples informations, vous pouvez consulter la documentation de « Audacious-SID »."
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Genre"
-#: audacious-plugins/src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr "Fichier :"
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Bibliothèque"
-#: audacious-plugins/src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr "Emplacement et nom du fichier de la base de données"
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Créer une liste de lecture"
-#: audacious-plugins/src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr "Permet de parcourir l'arborescence pour sélectionner le fichier de la base de données"
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Ajouter à la liste de lecture"
-#: audacious-plugins/src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr "Base de données relative à la durée des modules audio :"
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Rechercher"
-#: audacious-plugins/src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr "Durée"
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Pour importer votre bibliothèque musicale dans Audacious, choisissez un "
+"dossier, puis utilisez l'icône de rafraichissement."
-#: audacious-plugins/src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr "Remplacer les titres génériques"
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Veuillez patienter …"
-#: audacious-plugins/src/sid/xs_interface.c:1076
-msgid "By enabling this option you can specify a custom Tuplez formatting string for SID-files. The SID-plugin specific Tuplez tags are described shortly below."
-msgstr "Si vous cochez cette option, vous pourrez indiquer un format de titre personnalisé pour les fichiers « SID ». Les métadonnées propres au module d'extension « SID » sont brièvement expliquées ci-dessous."
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Choisissez un dossier"
-#: audacious-plugins/src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr "Format du titre des modules audio « SID »"
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "À propos de l'interface à thème"
-#: audacious-plugins/src/sid/xs_interface.c:1090
+#: src/skins/plugin.c:168
msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
-"<b>subsong-num, subsong-id</b>"
msgstr ""
-"<u>Champs des métadonnées propres à « SID » :</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Format de fichier spécifique\n"
-"<b>sid-model</b>\t\t- 6581 ou 8580\n"
-"<b>sid-speed</b>\t\t- Fréquence ou vitesse : « PAL » / « NTSC » / etc.\n"
-"\n"
-"<u>Autres champs « spéciaux » :</u>\n"
+"Droits d'utilisation : Tomasz Moń <desowin@gmail.com> (2008)\n"
"\n"
-"<b>subsong-num, subsong-id</b>"
-
-#: audacious-plugins/src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr "Format du titre :"
-
-#: audacious-plugins/src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Titre"
-
-#: audacious-plugins/src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr "Ajouter les sous-modules à la liste de lecture"
-
-#: audacious-plugins/src/sid/xs_interface.c:1129
-msgid "If enabled, sub-tunes of each file will be added to playlist. If disabled, only the default sub-tune will be added."
-msgstr "Si cette option est activée, les sous-modules de chaque fichier seront ajoutés à la liste de lecture. Dans le cas contraire, seul le sous-module par défaut sera ajouté."
-
-#: audacious-plugins/src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr "Uniquement les morceaux dont la durée minimale est la suivante :"
-
-#: audacious-plugins/src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr "Ajoute uniquement les sous-modules dont la durée est au moins égale au temps spécifié."
-
-#: audacious-plugins/src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr "Gestion des sous-modules :"
-
-#: audacious-plugins/src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr "Utiliser une base de données « STIL »"
-
-#: audacious-plugins/src/sid/xs_interface.c:1183
-msgid "If this option is enabled (and the database & HVSC settings below are correctly set), Audacious-SID will use and display additional information from STIL database when HVSC SIDs are played."
-msgstr "Si cette option est activée (et que la base de données ainsi que les paramètres « HVSC » ci-dessous sont correctement configurés), « Audacious-SID » utilisera et affichera des informations supplémentaires, à partir de la base de données « STIL », lorsque des modules audio « SID » de la collection « HVSC » seront lus."
-
-#: audacious-plugins/src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr "Fichier « STIL » :"
-#: audacious-plugins/src/sid/xs_interface.c:1206
-msgid "Path and filename of STIL database file (STIL.txt), usually found from HVSC's DOCUMENTS-subdirectory."
-msgstr "Emplacement et nom du fichier de la base de données « STIL » (le fichier \"STIL.txt\" est habituellement situé dans le sous-répertoire \"DOCUMENTS\" du dossier \"HVSC\")."
-
-#: audacious-plugins/src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr "Permet de parcourir l'arborescence pour sélectionner le fichier de la base de données « STIL »"
-
-#: audacious-plugins/src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr "Emplacement de « HVSC » :"
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "F_enêtre principale"
-#: audacious-plugins/src/sid/xs_interface.c:1262
-msgid "Path to base-directory of your High Voltage SID Collection (HVSC), for example /media/C64Music/"
-msgstr "Emplacement du dossier de base de « High Voltage SID Collection » (HVSC) (\"/media/C64Music/\", par exemple)"
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Police de la fenêtre principale du lecteur"
-#: audacious-plugins/src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr "Permet de parcourir l'arborescence pour sélectionner le dossier \"HVSC\""
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "_Liste de lecture"
-#: audacious-plugins/src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr "Base de données « STIL » (SID Tune Information List) :"
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Police de la liste de lecture"
-#: audacious-plugins/src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "Annule tous les changements"
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Polices</b>"
-#: audacious-plugins/src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "Valide et applique les changements"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Utiliser des polices bitmap (supporte seulement les caractères ASCII)"
-#: audacious-plugins/src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Infomations sur le fichier « Audacious-SID »"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Faire défiler le titre dans les deux sens"
-#: audacious-plugins/src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "Nom du fichier :"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Thème</b>"
-#: audacious-plugins/src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "Nom du morceau :"
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Préférences de l'interface"
-#: audacious-plugins/src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "Compositeur :"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Préamplification"
-#: audacious-plugins/src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "Droits :"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: audacious-plugins/src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "Informations sur le module :"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: audacious-plugins/src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "Auteur :"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: audacious-plugins/src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "Durée :"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
-#: audacious-plugins/src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr "Informations sur les sous-modules :"
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: audacious-plugins/src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr "Choix de la base de données « HVSC »"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: audacious-plugins/src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr "Choix de la base de données « STIL »"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: audacious-plugins/src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr "Emplacement de « HVSC »"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: audacious-plugins/src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr "Fichier de filtres « SIDPlay2 » à importer :"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: audacious-plugins/src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr "Fichier de filtres « SIDPlay2 » à exporter :"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: audacious-plugins/src/sid/xs_interface.c:2093
-#: audacious-plugins/src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "Confirmer l'action choisie"
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Égaliseur d'Audacious"
-#: audacious-plugins/src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Oui"
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Préréglages"
-#: audacious-plugins/src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "Aucun"
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Charge un préréglage général."
-#: audacious-plugins/src/skins/skins_cfg.c:316
-msgid "_Player:"
-msgstr "F_enêtre principale"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr ""
-#: audacious-plugins/src/skins/skins_cfg.c:316
-msgid "Select main player window font:"
-msgstr "Police de la fenêtre principale du lecteur"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr ""
-#: audacious-plugins/src/skins/skins_cfg.c:317
-msgid "_Playlist:"
-msgstr "_Liste de lecture"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Enregistre comme préréglage général."
-#: audacious-plugins/src/skins/skins_cfg.c:317
-msgid "Select playlist font:"
-msgstr "Police de la liste de lecture"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr ""
-#: audacious-plugins/src/skins/skins_cfg.c:321
-msgid "<b>_Fonts</b>"
-msgstr "<b>_Polices</b>"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr ""
-#: audacious-plugins/src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Utiliser les polices matricielles (si elles sont disponibles)"
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Efface un préréglage."
-#: audacious-plugins/src/skins/skins_cfg.c:323
-msgid "Use bitmap fonts if they are available. Bitmap fonts do not support Unicode strings."
-msgstr "Cette option permet d'utiliser les polices matricielles ('bitmap'), si elles sont disponibles. Ces polices ne gèrent pas la norme « Unicode » (caractères accentués)."
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr ""
-#: audacious-plugins/src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Divers</b>"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
-#: audacious-plugins/src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Afficher les barres de séparation dans la liste de lecture"
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
-#: audacious-plugins/src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Montrer la décoration du gestionnaire de fenêtres"
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "son d'ambiance"
-#: audacious-plugins/src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Cette option affiche les ornements propres au gestionnaire de fenêtres du système."
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Aller à %d:%-2.2d/%d:%-2.2d"
-#: audacious-plugins/src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Utiliser le défilement de texte bidirectionnel"
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "Volume : %d%%"
-#: audacious-plugins/src/skins/skins_cfg.c:330
-msgid "If selected, the file information text in the main window will scroll back and forth. If not selected, the text will only scroll in one direction."
-msgstr "Si cette option est cochée, le texte d'information relatif au morceau écouté défilera dans la fenêtre principale, vers la gauche et vers la droite. Sinon, le texte défilera dans une seule direction."
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "Balance : %d%% gauche"
-#: audacious-plugins/src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Ne pas appliquer aux menus le style « GTK » du thème sélectionné"
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "Balance : centre"
-#: audacious-plugins/src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Changer de thème de manière aléatoire, lors de la lecture"
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "Balance : %d%% droite"
-#: audacious-plugins/src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Permettre le chargement des thèmes incomplets"
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "Menu des options"
-#: audacious-plugins/src/skins/skins_cfg.c:335
-msgid "If selected, audacious won't refuse loading broken skins. Use only if your favourite skin doesn't work"
-msgstr "Si cette option est cochée, Audacious ne refusera pas de charger les thèmes corrompus. N'utilisez cette option que si votre thème préféré ne fonctionne pas autrement."
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "Annuler « Toujours au premier plan »"
-#: audacious-plugins/src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Ajustement des couleurs"
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Activer « Toujours au premier plan »"
-#: audacious-plugins/src/skins/skins_cfg.c:407
-msgid "Audacious allows you to alter the color balance of the skinned UI. The sliders below will allow you to do this."
-msgstr "Audacious permet de modifier la balance des couleurs de l'interface, à l'aide des curseurs ci-dessous."
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Informations sur le fichier"
-#: audacious-plugins/src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Bleu"
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Menu des effets visuels"
-#: audacious-plugins/src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Vert"
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "Mode « Fichier unique »."
-#: audacious-plugins/src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Rouge"
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "Mode « Liste de lecture »."
-#: audacious-plugins/src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Thème</b>"
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "Arrêter après le titre en cours de lecture."
-#: audacious-plugins/src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr "Ajustement des couleurs ..."
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "Ne pas arrêter après le titre en cours de lecture."
-#: audacious-plugins/src/skins/ui_manager.c:50
-#: audacious-plugins/src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Activer le défilement du titre"
-#: audacious-plugins/src/skins/ui_manager.c:56
-#: audacious-plugins/src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Arrêter après le titre en cours de lecture"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Pics"
-#: audacious-plugins/src/skins/ui_manager.c:68
-#: audacious-plugins/src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Mode « répétition »"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Mode « lecture aléatoire »"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Ne pas avancer dans la liste de lecture"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Montrer le lecteur"
-#: audacious-plugins/src/skins/ui_manager.c:71
-#: audacious-plugins/src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Montrer la liste de lecture"
-#: audacious-plugins/src/skins/ui_manager.c:74
-#: audacious-plugins/src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Montrer l'égaliseur"
-#: audacious-plugins/src/skins/ui_manager.c:77
-#: audacious-plugins/src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Toujours au premier plan"
-#: audacious-plugins/src/skins/ui_manager.c:80
-#: audacious-plugins/src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Afficher sur tous les bureaux"
-#: audacious-plugins/src/skins/ui_manager.c:83
-#: audacious-plugins/src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Enrouler le lecteur"
-#: audacious-plugins/src/skins/ui_manager.c:86
-#: audacious-plugins/src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Enrouler la liste de lecture"
-#: audacious-plugins/src/skins/ui_manager.c:89
-#: audacious-plugins/src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Enrouler l'égaliseur"
-#: audacious-plugins/src/skins/ui_manager.c:92
-msgid "Scale"
-msgstr "Échelle"
-
-#: audacious-plugins/src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Taille double"
-
-#: audacious-plugins/src/skins/ui_manager.c:95
-#: audacious-plugins/src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Déplacement facile"
-
-#: audacious-plugins/src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analyseur"
-#: audacious-plugins/src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Oscilloscope"
-#: audacious-plugins/src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Spectrogramme"
-#: audacious-plugins/src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Arrêt"
-#: audacious-plugins/src/skins/ui_manager.c:111
-#: audacious-plugins/src/skins/ui_manager.c:128
-#: audacious-plugins/src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normal"
-#: audacious-plugins/src/skins/ui_manager.c:112
-#: audacious-plugins/src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Feu"
-#: audacious-plugins/src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Lignes verticales"
-#: audacious-plugins/src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Lignes"
-#: audacious-plugins/src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Barres"
-#: audacious-plugins/src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Points"
-#: audacious-plugins/src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Lignes"
-#: audacious-plugins/src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Vagues"
-#: audacious-plugins/src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Glace"
-#: audacious-plugins/src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Lissé"
-#: audacious-plugins/src/skins/ui_manager.c:139
-#: audacious-plugins/src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Très lente"
-#: audacious-plugins/src/skins/ui_manager.c:140
-#: audacious-plugins/src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Lente"
-#: audacious-plugins/src/skins/ui_manager.c:141
-#: audacious-plugins/src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Moyenne"
-#: audacious-plugins/src/skins/ui_manager.c:142
-#: audacious-plugins/src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Rapide"
-#: audacious-plugins/src/skins/ui_manager.c:143
-#: audacious-plugins/src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Très rapide"
-#: audacious-plugins/src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Temps écoulé"
-#: audacious-plugins/src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Temps restant"
-#: audacious-plugins/src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pause"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Précédent"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Suivant"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Effets visuels"
-#: audacious-plugins/src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Type d'effet visuel"
-#: audacious-plugins/src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Mode « analyseur »"
-#: audacious-plugins/src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Mode « oscilloscope »"
-#: audacious-plugins/src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Mode « spectrogramme »"
-#: audacious-plugins/src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Mode « VU en fenêtre réduite »"
-#: audacious-plugins/src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Retombée de l'analyseur"
-#: audacious-plugins/src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Retombée des pics"
-#: audacious-plugins/src/skins/ui_manager.c:202
-#: audacious-plugins/src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Liste de lecture"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nouvelle liste"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Liste suivante"
-#: audacious-plugins/src/skins/ui_manager.c:205
-#: audacious-plugins/src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Liste précédente"
-#: audacious-plugins/src/skins/ui_manager.c:222
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Supprimer la liste"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Importer une liste de lecture"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Importe une liste de lecture dans la liste active."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Exporter la liste de lecture"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Enregistre la liste de lecture active."
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "Actualiser la liste"
-#: audacious-plugins/src/skins/ui_manager.c:226
-msgid "List Manager"
-msgstr "Gestionnaire de listes"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Actualise les métadonnées associées à une entrée de la liste."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Gestionnaire de listes de lecture"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Gestionnaire de files d'attente"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Affichage"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interface"
-#: audacious-plugins/src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Préférences de l'interface"
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "Ajouter un flux Internet..."
-#: audacious-plugins/src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Ajoute un flux distant à la liste de lecture."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Ajouter des fichiers..."
-#: audacious-plugins/src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Ajoute des fichiers à la liste de lecture."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Chercher et sélectionner"
-#: audacious-plugins/src/skins/ui_manager.c:247
-msgid "Searches the playlist and selects playlist entries based on specific criteria."
-msgstr "Effectue une recherche dans la liste de lecture et sélectionne des entrées en fonction de critères définis."
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+"Effectue une recherche dans la liste de lecture et sélectionne des entrées "
+"en fonction de critères définis."
-#: audacious-plugins/src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Inverser la sélection"
-#: audacious-plugins/src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "Inverse les entrées sélectionnées et les entrées non sélectionnées."
-#: audacious-plugins/src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Tout sélectionner"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Sélectionne toutes les entrées de la liste."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Ne rien sélectionner"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Annule la sélection de toutes les entrées de la liste."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Effacer toutes les entrées"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Efface toutes les entrées de la liste de lecture."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "Vider la file d'attente"
-#: audacious-plugins/src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "Vide la file d'attente associée à la liste de lecture active."
-#: audacious-plugins/src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Effacer les fichiers inexistants"
-#: audacious-plugins/src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
-msgstr "Efface de la liste de lecture les fichiers qui ne sont plus disponibles."
+msgstr ""
+"Efface de la liste de lecture les fichiers qui ne sont plus disponibles."
-#: audacious-plugins/src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Effacer les éléments redondants"
-#: audacious-plugins/src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Par titre"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "Efface les entrées redondantes, en fonction de leur titre."
-#: audacious-plugins/src/skins/ui_manager.c:282
-#: audacious-plugins/src/skins/ui_manager.c:318
-#: audacious-plugins/src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "Par nom de fichier"
-#: audacious-plugins/src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr "Efface les entrées redondantes, en fonction de leur nom de fichier."
-#: audacious-plugins/src/skins/ui_manager.c:286
-#: audacious-plugins/src/skins/ui_manager.c:322
-#: audacious-plugins/src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "Par chemin et nom de fichier"
-#: audacious-plugins/src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "Efface les entrées redondantes, en fonction de leur chemin complet."
-#: audacious-plugins/src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Ne garder que la sélection"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Efface les entrées non sélectionnées de la liste de lecture."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Effacer la sélection"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Efface les entrées sélectionnées de la liste de lecture."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "MeÌlanger aleÌatoirement la liste"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "MeÌlange aleÌatoirement la liste de lecture."
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "Inverser la liste"
-#: audacious-plugins/src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Inverse l'ordre de la liste de lecture."
-#: audacious-plugins/src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Trier la liste"
-#: audacious-plugins/src/skins/ui_manager.c:307
-#: audacious-plugins/src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
msgstr "Trie la liste, en fonction du titre des entrées."
-#: audacious-plugins/src/skins/ui_manager.c:311
-#: audacious-plugins/src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Par album"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
msgstr "Trie la liste, en fonction du nom de l'album."
-#: audacious-plugins/src/skins/ui_manager.c:315
-#: audacious-plugins/src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Par artiste"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
msgstr "Trie la liste, en fonction de l'artiste."
-#: audacious-plugins/src/skins/ui_manager.c:319
-#: audacious-plugins/src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
msgstr "Trie la liste, en fonction du nom de fichier des entrées."
-#: audacious-plugins/src/skins/ui_manager.c:323
-#: audacious-plugins/src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Trie la liste, en fonction du chemin complet des entrées."
-#: audacious-plugins/src/skins/ui_manager.c:326
-#: audacious-plugins/src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "Par date"
-#: audacious-plugins/src/skins/ui_manager.c:327
-#: audacious-plugins/src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
msgstr "Trie la liste, en fonction de la date de modification des entrées."
-#: audacious-plugins/src/skins/ui_manager.c:331
-#: audacious-plugins/src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Par numéro de piste"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
msgstr "Trie la liste, en fonction du numéro des pistes."
-#: audacious-plugins/src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "Trier la sélection"
-#: audacious-plugins/src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Fichier"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Services des modules"
-#: audacious-plugins/src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Afficher les détails"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Affiche les informations relatives au morceau."
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "À propos d'Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "Lire un fichier..."
-#: audacious-plugins/src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Charge et lit un fichier."
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "Lire un emplacement..."
-#: audacious-plugins/src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Lit les média de l'emplacement sélectionné."
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Affiche le menu propre à certains modules."
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Préférences..."
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Ouvre la fenêtre des préférences."
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Ferme Audacious."
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Marquer une boucle A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Effacer la boucle A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Aller au temps..."
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Mettre dans la file d'attente"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Active/désactive l'entrée dans la file d'attente de la liste."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Copier"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Couper"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Coller"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
msgstr "Charger"
-#: audacious-plugins/src/skins/ui_manager.c:433
-#: audacious-plugins/src/skins/ui_manager.c:454
-#: audacious-plugins/src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importer"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Enregistrer"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Supprimer"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
msgid "Preset"
msgstr "Préréglage général"
-#: audacious-plugins/src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr "Charge un préréglage général."
-
-#: audacious-plugins/src/skins/ui_manager.c:436
-#: audacious-plugins/src/skins/ui_manager.c:457
-#: audacious-plugins/src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
msgstr "Préréglage spécifique"
-#: audacious-plugins/src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
msgstr "Charge un préréglage spécifique."
-#: audacious-plugins/src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
msgstr "Charge le préréglage par défaut dans l'égaliseur."
-#: audacious-plugins/src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr "Remise à zéro"
-#: audacious-plugins/src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
msgstr "Réinitialise les niveaux de l'égaliseur."
-#: audacious-plugins/src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr "À partir d'un fichier"
-#: audacious-plugins/src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
msgstr "Charge un préréglage à partir d'un fichier."
-#: audacious-plugins/src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr "À partir d'un fichier « EQF » de « WinAMP »"
-#: audacious-plugins/src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
msgstr "Charge un préréglage à partir d'un fichier « EQF » de « WinAMP »."
-#: audacious-plugins/src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
msgstr "Préréglages de « WinAMP »"
-#: audacious-plugins/src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
msgstr "Importe les préréglages de « WinAMP »."
-#: audacious-plugins/src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr "Enregistre comme préréglage général."
-
-#: audacious-plugins/src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
msgstr "Enregistre comme préréglage spécifique."
-#: audacious-plugins/src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
msgstr "Enregistre comme préréglage par défaut."
-#: audacious-plugins/src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr "Dans un fichier"
-#: audacious-plugins/src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
msgstr "Enregistre le préréglage dans un fichier."
-#: audacious-plugins/src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr "Dans un fichier « EQF » pour « WinAMP »"
-#: audacious-plugins/src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
msgstr "Enregistre le préréglage dans un fichier « EQF » pour « WinAMP »."
-#: audacious-plugins/src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr "Efface un préréglage."
-
-#: audacious-plugins/src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
msgstr "Efface un préréglage spécifique."
-#: audacious-plugins/src/skins/ui_main.c:593
-msgid "kbps"
-msgstr "kbps"
-
-#: audacious-plugins/src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "kHz"
-
-#: audacious-plugins/src/skins/ui_main.c:608
-msgid "surround"
-msgstr "son d'ambiance"
-
-#: audacious-plugins/src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - avertissement concernant l'affichage"
-
-#: audacious-plugins/src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Montrer la fenêtre principale"
-
-#: audacious-plugins/src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignorer"
-
-#: audacious-plugins/src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; otherwise, you'll have to control it remotely via audtool or enabled plugins (such as the statusicon plugin)."
-msgstr ""
-"Audacious a démarré, mais toutes les fenêtres de l'interface sont cachées.\n"
-"\n"
-"Peut-être voulez-vous voir à nouveau la fenêtre principale, afin de pouvoir contrôler Audacious.\n"
-"Dans le cas contraire, vous devrez utiliser les commandes distantes, par l'intermédiaire de « audtool » ou des extensions activées (le module « statusicon », par exemple).\n"
-" "
-
-#: audacious-plugins/src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Toujours ignorer : la fonction « montrer/cacher » est contrôlée à distance."
-
-#: audacious-plugins/src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - défaillance du moteur « GTK »"
-
-#: audacious-plugins/src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the features used by modern skins. The incompatible features have been disabled for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Utilisation d'un moteur « GTK » défaillant</b></big>\n"
-"\n"
-"Audacious a détecté un moteur « GTK » défaillant.\n"
-"\n"
-"Le moteur de rendu de votre système (<i>%s</i>) est incompatible avec certaines fonctions propres aux thèmes modernes d'Audacious. Les caractéristiques concernées ont donc été désactivées pour cette session.\n"
-"\n"
-"Pour disposer de ces options particulières, vous devrez utilisez un autre moteur de rendu « GTK ».\n"
-" "
-
-#: audacious-plugins/src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Ne plus afficher cet avertissement"
-
-#: audacious-plugins/src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "Position : %d:%-2.2d/%d:%-2.2d (%d%%)"
-
-#: audacious-plugins/src/skins/ui_main.c:1299
-#, c-format
-msgid "Volume: %d%%"
-msgstr "Volume : %d%%"
-
-#: audacious-plugins/src/skins/ui_main.c:1322
-#, c-format
-msgid "Balance: %d%% left"
-msgstr "Balance : %d%% gauche"
-
-#: audacious-plugins/src/skins/ui_main.c:1324
-msgid "Balance: center"
-msgstr "Balance : centre"
-
-#: audacious-plugins/src/skins/ui_main.c:1326
-#, c-format
-msgid "Balance: %d%% right"
-msgstr "Balance : %d%% droite"
-
-#: audacious-plugins/src/skins/ui_main.c:1618
-msgid "Options Menu"
-msgstr "Menu des options"
-
-#: audacious-plugins/src/skins/ui_main.c:1622
-msgid "Disable 'Always On Top'"
-msgstr "Annuler « Toujours au premier plan »"
-
-#: audacious-plugins/src/skins/ui_main.c:1624
-msgid "Enable 'Always On Top'"
-msgstr "Activer « Toujours au premier plan »"
-
-#: audacious-plugins/src/skins/ui_main.c:1627
-msgid "File Info Box"
-msgstr "Informations sur le fichier"
-
-#: audacious-plugins/src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Annuler « Agrandissement de l'interface »"
-
-#: audacious-plugins/src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Activer « Agrandissement de l'interface »"
-
-#: audacious-plugins/src/skins/ui_main.c:1636
-msgid "Visualization Menu"
-msgstr "Menu des effets visuels"
-
-#: audacious-plugins/src/skins/ui_main.c:2348
-msgid "Single mode."
-msgstr "Mode « Fichier unique »."
-
-#: audacious-plugins/src/skins/ui_main.c:2350
-msgid "Playlist mode."
-msgstr "Mode « Liste de lecture »."
-
-#: audacious-plugins/src/skins/ui_main.c:2374
-msgid "Stopping after song."
-msgstr "Arrêter après le titre en cours de lecture."
-
-#: audacious-plugins/src/skins/ui_main.c:2376
-msgid "Not stopping after song."
-msgstr "Ne pas arrêter après le titre en cours de lecture."
-
-#: audacious-plugins/src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr "Chercher des entrées dans la liste active"
-#: audacious-plugins/src/skins/ui_playlist.c:382
-msgid "Select entries in playlist by filling one or more fields. Fields use regular expressions syntax, case-insensitive. If you don't know how regular expressions work, simply insert a literal portion of what you're searching for."
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
msgstr ""
"Le choix des entrées de la liste de lecture s'effectue au moyen des champs ci-dessous.\n"
"\n"
@@ -4565,242 +3288,114 @@ msgstr ""
"\n"
"Si vous ne savez pas comment fonctionnent les expressions rationnelles, vous pouvez simplement indiquer une expression littérale de ce que vous cherchez."
-#: audacious-plugins/src/skins/ui_playlist.c:390
+#: src/skins/ui_playlist.c:264
msgid "Title: "
msgstr "Titre : "
-#: audacious-plugins/src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:271
msgid "Album: "
msgstr "Titre de l'album : "
-#: audacious-plugins/src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
msgstr "Nom de l'artiste : "
-#: audacious-plugins/src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
msgstr "Nom du fichier : "
-#: audacious-plugins/src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
msgstr "Effacer la sélection précédente avant d'effectuer la recherche"
-#: audacious-plugins/src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr "Mettre automatiquement dans la file d'attente les entrées trouvées"
-#: audacious-plugins/src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr "Créer une nouvelle liste comportant les entrées trouvées"
-#: audacious-plugins/src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Enregistrer comme liste statique"
-
-#: audacious-plugins/src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Utiliser une arborescence relative"
-
-#: audacious-plugins/src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Charger une liste de lecture"
-
-#: audacious-plugins/src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Enregistrer la liste"
-
-#: audacious-plugins/src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr "Éditeur de la liste de lecture d'Audacious"
-#: audacious-plugins/src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d sur %d)"
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Préamplification"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr "31 Hz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr "63 Hz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr "125 Hz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr "250 Hz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr "500 Hz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr "1 kHz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr "2 kHz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr "4 kHz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: audacious-plugins/src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr "16 kHz"
-
-#: audacious-plugins/src/skins/util.c:834
-#, c-format
-msgid "Could not create directory (%s): %s\n"
-msgstr "Impossible de créer le répertoire (%s) : %s\n"
-
-#: audacious-plugins/src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Thème « Winamp 2.x » archivé"
-#: audacious-plugins/src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Thème « Winamp 2.x » non archivé"
-#: audacious-plugins/src/skins/plugin.c:179
-msgid "About Skinned GUI"
-msgstr "À propos de l'interface à thème"
-
-#: audacious-plugins/src/skins/plugin.c:180
-msgid ""
-"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
-"\n"
-msgstr ""
-"Droits d'utilisation : Tomasz Moń <desowin@gmail.com> (2008)\n"
-"\n"
-
-#: audacious-plugins/src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Interface à thème"
-
-#: audacious-plugins/src/skins/ui_equalizer.c:463
-msgid "Audacious Equalizer"
-msgstr "Égaliseur d'Audacious"
-
-#: audacious-plugins/src/skins/ui_equalizer.c:991
-msgid "Presets"
-msgstr "Préréglages"
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "Impossible de créer le répertoire (%s) : %s\n"
-#: audacious-plugins/src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
msgstr "À propos du module « sndfile »"
-#: audacious-plugins/src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-"Adapté pour Audacious par Tony Vroon <chainsaw@gentoo.org>\n"
-"à partir du module « xmms_sndfile » de Erik de Castro Lopo\n"
-"(Droits d'utilisation 2000, 2002)\n"
-"\n"
-"\n"
-"Ceci est une traduction non officielle de la « GNU General Public License »\n"
-"en français. Elle n'a pas été publiée par la « Free Software Foundation »,\n"
-"et ne détermine pas les termes de distribution pour les logiciels qui\n"
-"utilisent la « GNU GPL » -- seul le texte anglais original de la « GNU GPL »\n"
-"en a le droit. Cependant, nous espérons que cette traduction aidera les\n"
-"francophones à mieux comprendre la « GNU GPL ».\n"
-"\n"
-"Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le\n"
-"modifier selon les termes de la « Licence Publique Générale GNU » (GNU GPL),\n"
-"telle que publiée par la « Free Software Foundation », soit la version 2 de\n"
-"la Licence, soit (à votre convenance) toute version postérieure.\n"
-"\n"
-"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE\n"
-"GARANTIE, sans même la garantie implicite d'une possible VALEUR MARCHANDE\n"
-"ou de l'ADÉQUATION à UN BESOIN PARTICULIER. Consultez la « Licence Publique\n"
-"Générale GNU » (GNU GPL) pour plus de détails.\n"
-"\n"
-"Vous devriez avoir reçu une copie de la « Licence Publique Générale GNU »\n"
-"(GNU GPL) avec ce programme. Dans le cas contraire, vous pouvez consulter\n"
-"la Licence sur la page <http://www.gnu.org/licenses/> ou écrire à la\n"
-"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,\n"
-"MA 02110-1301, USA."
-
-#: audacious-plugins/src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "À propos de « SndStretch »"
-#: audacious-plugins/src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr "Correction du volume"
-#: audacious-plugins/src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr "Chevauchement léger"
-#: audacious-plugins/src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "Vitesse"
-#: audacious-plugins/src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "Hauteur"
-#: audacious-plugins/src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Échelle"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "Configuration de « SndStretch »"
-#: audacious-plugins/src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
msgstr "Commande à exécuter lorsqu'un nouveau morceau commence :"
-#: audacious-plugins/src/song_change/song_change.c:398
-#: audacious-plugins/src/song_change/song_change.c:402
-#: audacious-plugins/src/song_change/song_change.c:406
-#: audacious-plugins/src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
msgstr "Commande :"
-#: audacious-plugins/src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
msgstr "Commande à exécuter lorsque la lecture d'un morceau se termine :"
-#: audacious-plugins/src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
-msgstr "Commande à exécuter lorsque la fin de la liste de lecture est atteinte :"
+msgstr ""
+"Commande à exécuter lorsque la fin de la liste de lecture est atteinte :"
-#: audacious-plugins/src/song_change/song_change.c:409
-msgid "Command to run when title changes for a song (i.e. network streams titles)."
-msgstr "Commande à exécuter lorsque le titre d'un morceau change (le titre d'un flux distant, par exemple) :"
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+"Commande à exécuter lorsque le titre d'un morceau change (le titre d'un flux"
+" distant, par exemple) :"
-#: audacious-plugins/src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -4813,44 +3408,48 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-"Vous pouvez utiliser les chaînes de la liste ci-dessous.\n"
+"Vous pouvez utiliser les variables de la liste ci-dessous.\n"
"\n"
"Elles seront remplacées avant l'appel de la commande à exécuter (toutes ne sont pas utiles pour la fonction « fin de liste ») :\n"
"\n"
-"%F: Fréquence (en Hertz)\n"
-"%c: Nombre de voies\n"
-"%f: Nom du fichier (chemin complet)\n"
-"%l: Durée (en millisecondes)\n"
-"%n ou %s: Titre du morceau\n"
-"%r: Taux d'encodage (en « bits » par seconde)\n"
-"%t: Position dans la liste de lecture (%02d)\n"
-"%p: État de la lecture (1 ou 0)"
-
-#: audacious-plugins/src/song_change/song_change.c:437
-msgid "<span size='small'>Parameters passed to the shell should be encapsulated in quotes. Doing otherwise is a security risk.</span>"
+"%F : Fréquence (en Hertz)\n"
+"%c : Nombre de canaux\n"
+"%f : Nom du fichier (chemin complet)\n"
+"%l : Durée (en millisecondes)\n"
+"%n ou %s : Nom du morceau\n"
+"%r : Taux d'encodage (en « bits » par seconde)\n"
+"%t : Position dans la liste de lecture (%02d)\n"
+"%p : 1 si la lecture continue, 0 si elle est arrêtée\n"
+"%a : Artiste du morceau\n"
+"%b : Album du morceau\n"
+"%T : Titre du morceau"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
"<span size='small'>Les arguments à lancer dans la console doivent être entourés de guillemets.\n"
"Une utilisation différente constitue un risque en matière de sécurité.</span>"
-#: audacious-plugins/src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
msgstr "Commandes"
-#: audacious-plugins/src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
msgstr "Song Change"
-#: audacious-plugins/src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Analyseur Spectral"
-
-#: audacious-plugins/src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr "À propos du module « Status Icon »"
-#: audacious-plugins/src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -4868,35 +3467,51 @@ msgstr ""
"Ce module affiche une icône d'état dans l'espace\n"
"de notification du gestionnaire de fenêtres.\n"
-#: audacious-plugins/src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr "Préférences de « Status Icon »"
-#: audacious-plugins/src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr "Menu disponible via le clic droit :"
-#: audacious-plugins/src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Menu de lecture compact #1"
-#: audacious-plugins/src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Menu de lecture compact #2"
-#: audacious-plugins/src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
-msgstr "Effet du défilement de la souris :"
+msgstr "Effet de la molette de la souris :"
-#: audacious-plugins/src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr "Changement du volume"
-#: audacious-plugins/src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr "Changement du titre en cours de lecture"
-#: audacious-plugins/src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Autres paramètres"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "DeÌsactiver l'affichage d'information au survol"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "ReÌduire dans la zone de notification aÌ€ la fermeture"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Inverser le sens du changement de piste à la molette"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -4906,116 +3521,19 @@ msgstr ""
"\n"
"Écrit par Johan Levin (1999)."
-#: audacious-plugins/src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:64
msgid "About Extra Stereo Plugin"
msgstr "À propos de « Extra Stereo »"
-#: audacious-plugins/src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "Configuration de « Extra Stereo »"
-#: audacious-plugins/src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr "À propos du module « Stream Browser »"
-
-#: audacious-plugins/src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Droits d'utilisation (2008) : Calin Crisan <ccrisan@gmail.com> et l'Équipe d'Audacious.\n"
-"\n"
-"Ce module est un simple explorateur de flux qui propose les répertoires de flux en ligne\n"
-"les plus connus.\n"
-"\n"
-"Remerciements cordiaux aux développeurs de « Streamtuner » <http://www.nongnu.org/streamtuner>,\n"
-"et, bien entendu, à toute la communauté d'Audacious.\n"
-"\n"
-"Je remercie également Tony Vroon de m'avoir conseillé et soutenu, à nouveau.\n"
-"\n"
-"Ce module était un projet de « Google Summer Of Code 2008 »."
-
-#: audacious-plugins/src/streambrowser/streambrowser.c:357
-#: audacious-plugins/src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "Explorateur de flux"
-
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr "Recherche :"
-
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:81
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr "Ajouter le favori"
-
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "Explorateur de flux"
-
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr "Nom du flux"
-
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr "En cours de diffusion"
-
-#: audacious-plugins/src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr "Supprimer le favori"
-
-#: audacious-plugins/src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "À propos du pilote « Sun »"
-
-#: audacious-plugins/src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"Pilote « Sun BSD » pour XMMS\n"
-"\n"
-"Droits d'utilisation :\n"
-"(c) 2001, CubeSoft Communications, Inc.\n"
-"\n"
-"Responsable de la maintenance :\n"
-"<vedge at csoft.org>.\n"
-
-#: audacious-plugins/src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Périphérique de contrôle audio :"
-
-#: audacious-plugins/src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Taille du tampon (ms) :"
-
-#: audacious-plugins/src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Périphérique de contrôle du volume :"
-
-#: audacious-plugins/src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS utilise le mélangeur audio de manière exclusive."
-
-#: audacious-plugins/src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Configuration du pilote « Sun »"
-
-#: audacious-plugins/src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
msgstr "À propos de « Tone Generator »"
-#: audacious-plugins/src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5032,36 +3550,24 @@ msgstr ""
"\n"
"Par exemple, \"tone://2000;2005\" émettra un son de 2000 Hz et un son de 2005 Hz."
-#: audacious-plugins/src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: audacious-plugins/src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
msgstr "Générateur de sons : "
-#: audacious-plugins/src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "Remplacer les titres génériques"
-
-#: audacious-plugins/src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Format du titre :"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "À propos du module de gestion des entrées/sorties"
-#: audacious-plugins/src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Métadonnées « Ogg Vorbis »"
-
-#: audacious-plugins/src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Configuration du module audio « Ogg Vorbis »"
-
-#: audacious-plugins/src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
msgstr "À propos du module audio « Ogg Vorbis »"
-#: audacious-plugins/src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5098,11 +3604,11 @@ msgstr ""
"Vous pouvez visiter « Xiph.org Foundation » à cette adresse :\n"
"http://www.xiph.org/\n"
-#: audacious-plugins/src/vtx/about.c:14
+#: src/vtx/about.c:14
msgid "About Vortex Player"
msgstr "À propos du lecteur « Vortex »"
-#: audacious-plugins/src/vtx/about.c:15
+#: src/vtx/about.c:15
msgid ""
"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
@@ -5126,12 +3632,12 @@ msgstr ""
"Adaptation pour Audacious :\n"
"Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: audacious-plugins/src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Module de décodage « Wavpack » %s"
-#: audacious-plugins/src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5145,375 +3651,4 @@ msgstr ""
"Vous pouvez visiter le site « Wavpack » à l'adresse suivante :\n"
"http://www.wavpack.com/\n"
-#: audacious-plugins/src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "À propos du module "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Droits d'utilisation : Simon Peter <dn.tlp@gmx.net> (2002, 2003)\n"
-"\n"
-"Ce module est distribué sous les termes et les conditions de la licence GNU LGPL.\n"
-"Consultez la page suivante pour les détails : http://www.gnu.org/licenses/lgpl.html\n"
-"\n"
-"Cette extension utilise la bibliothèque « AdPlug ».\n"
-"Droits d'utilisation : Simon Peter, et al.\n"
-"\n"
-"Version de la bibliothèque « AdPlug » liée : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "Configuration du module « AdPlug »"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Qualité du son"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:286
-msgid "Resolution"
-msgstr "Résolution"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 bits"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 bits"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:301
-msgid "Channels"
-msgstr "Sortie"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:312
-msgid "Setting stereo is not recommended, unless you need to. This won't add any stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr "Activer le mode stéréo n'est pas recommandé, à moins que vous ne le vouliez vraiment. Cette option n'ajoutera pas d'effet stéréo au son produit (OPL2 n'utilise que le mode mono), mais nécessitera beaucoup plus de puissance CPU !"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Fréquence"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Détecter la fin du morceau"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:364
-msgid "If enabled, XMMS will detect a song's ending, stop it and advance in the playlist. If disabled, XMMS won't take notice of a song's ending and loop it all over again and again."
-msgstr "Si cette option est activée, Audacious détectera la fin du morceau, interrompra la lecture, puis passera au titre suivant dans la liste de lecture. Dans le cas contraire, Audacious ne se préoccupera pas de la fin des morceaux : le titre sera lu en boucle."
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formats"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Choix des formats"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Format"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Extension"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:425
-msgid "Selected file types will be recognized and played back by this plugin. Deselected types will be ignored to make room for other plugins to play these files."
-msgstr "Les types de fichiers sélectionnés seront reconnus et gérés par ce module. Les autres seront ignorés, de manière à pouvoir être supportés par d'autres extensions."
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "Informations sur le fichier"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Auteur : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Format : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Sous-modules : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instruments : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Partitions : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Séquences : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Morceau"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Nom de l'instrument"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Commentaires"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Sélection du sous-module"
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Partition : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Séquence : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Ligne : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Vitesse : "
-
-#: audacious-plugins/src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Fréquence : "
-
-#: audacious-plugins/src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Module d'entrée « Modplug » pour Audacious, version "
-
-#: audacious-plugins/src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"\n"
-"Le moteur sonore de « Modplug » a été écrit par Olivier Lapicque.\n"
-"L'interface XMMS pour « Modplug » a été conçue par Kenton Varda.\n"
-"\n"
-"Droits d'utilisation (2000) : Olivier Lapicque et Kenton Varda.\n"
-"\n"
-"Mises à jour et maintenance : Konstanty Bialkowski.\n"
-"Rétroportage pour BMP : Theofilos Intzoglou."
-
-#: audacious-plugins/src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "À propos de « Modplug »"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "Configuration du module « ModPlug »"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bits"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bits"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Mono (sous-mélange)"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "Méthode « au plus proche » (la plus rapide)"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Interpolation linéaire (rapide)"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Interpolation par segments ('spline') (bonne qualité)"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "Filtre à réponse impulsionnelle finie ('8-tap FIR') (qualité optimale)"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 kHz"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Fréquence d'échantillonnage"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:349
-#: audacious-plugins/src/modplug/gui/interface.cxx:411
-#: audacious-plugins/src/modplug/gui/interface.cxx:477
-#: audacious-plugins/src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Activer"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:378
-#: audacious-plugins/src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Profondeur"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:386
-#: audacious-plugins/src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Délai"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Réverbération"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Intensité"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Portée"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Amplification des basses"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Note : une valeur de préamplification excessive\n"
-"peut produire des coupures et des distorsions\n"
-"(des clics et des bruits secs assez agaçants) !"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Utiliser le nom du fichier comme titre du morceau"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Informations rapides sur la liste de lecture"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Réduction du bruit"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Lire les modules musicaux Amiga"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Ne pas répéter"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Répéter"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "fois"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Répéter en boucle"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Répétition"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "Informations sur le module"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Nom du fichier :\n"
-"Titre :\n"
-"Type :\n"
-"Durée :\n"
-"Vitesse :\n"
-"Tempo :\n"
-"Échantillons :\n"
-"Instruments :\n"
-"Séquences :\n"
-"Voies :"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Échantillons"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Instruments"
-
-#: audacious-plugins/src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Commentaires"
diff --git a/po/hu.po b/po/hu.po
index a9db33e..1a0a3b3 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -1,24 +1,25 @@
-# Hungarian translation of audacious-plugins.
-# Copyright (C) 2006 Free Software Foundation, Inc.
-# This file is distributed under the same license as the audacious-plugins package.
-# Peter Polonkai <polesz@nedudu.hu>, 2010.
+# Hungarian translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
#
+# Translators:
+# Peter Polonkai <polesz@nedudu.hu>, 2010.
+# Péter Polonkai <polesz@nedudu.hu>, 2011, 2012.
msgid ""
msgstr ""
-"Project-Id-Version: audacious 2.4\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 18:09-0400\n"
-"PO-Revision-Date: 2010-08-23 12:00+0100\n"
-"Last-Translator: Peter Polonkai <polesz@nedudu.hu>\n"
-"Language-Team: Nedudu Team <nedudu@nedudu.hu>\n"
-"Language: hu\n"
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-12 06:38+0000\n"
+"Last-Translator: Péter Polonkai <polesz@nedudu.hu>\n"
+"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Hungarian\n"
-"X-Poedit-Country: HUNGARY\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -29,449 +30,172 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 Audacious team"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "MP4 AAC dekóder bővítmény névjegye"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Névjegy"
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Ébresztő névjegye"
-#: src/adplug/adplug-xmms.cc:157
+#: src/alarm/alarm.c:313
msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Beállítások"
-
-#: src/adplug/adplug-xmms.cc:243
-#: src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258
-#: src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122
-#: src/jack/configure.c:146
-#: src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123
-#: src/sun/configure.c:557
-msgid "Ok"
-msgstr "Ok"
-
-#: src/adplug/adplug-xmms.cc:253
-#: src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263
-#: src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130
-#: src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715
-#: src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132
-#: src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Mégsem"
-
-#: src/adplug/adplug-xmms.cc:269
-#: src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629
-#: src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Ãltalános"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Hang minőség"
-
-#: src/adplug/adplug-xmms.cc:286
-#: src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Felbontás"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16bit"
-
-#: src/adplug/adplug-xmms.cc:301
-#: src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Csatornák"
-
-#: src/adplug/adplug-xmms.cc:303
-#: src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Monó"
-
-#: src/adplug/adplug-xmms.cc:308
-#: src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205
-#: src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Sztereó"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid "Setting stereo is not recommended, unless you need to. This won't add any stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frekvencia"
-
-#: src/adplug/adplug-xmms.cc:356
-#: src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156
-#: src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Lejátszás"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Dalvég érzékelése"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid "If enabled, XMMS will detect a song's ending, stop it and advance in the playlist. If disabled, XMMS won't take notice of a song's ending and loop it all over again and again."
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formátumok"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Formátum választás"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Formátum"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Kiterjesztés"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid "Selected file types will be recognized and played back by this plugin. Deselected types will be ignored to make room for other plugins to play these files."
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Fájl infomráció"
-
-#: src/adplug/adplug-xmms.cc:533
-#: src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Fájlnév"
-
-#: src/adplug/adplug-xmms.cc:537
-#: src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Cím:"
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Szerző:"
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Fájtípus:"
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Hangszerek:"
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Sorrend:"
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Minták:"
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Dal"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Hangszer neve"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Dal üzenet"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Sorrend:"
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Minta:"
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Sor:"
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Sebesség:"
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Időzítő:"
-
-#: src/adplug/adplug-xmms.cc:713
-#: src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "XMMS Ébresztő névjegye"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS Ébresztő"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-
-#: src/alarm/interface.c:71
-#: src/bluetooth/scan_gui.c:149
-#: src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972
-#: src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Bezár"
-
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
-msgstr "Ébresztő"
+msgstr "Riasztás"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
-msgstr "Ez egy ébresztő üzenet."
+msgstr "Ez egy ébresztési hívás."
-#: src/alarm/interface.c:124
-#: src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703
-#: src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "OK"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Lejátszólista választása"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Sajnálom"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Figyelmeztetés"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer than the fading time, it must also be more than 10 seconds. This basically means that there is a bug in the code and until I find a way of really fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Hát igen"
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
-msgstr "Ébresztő beállítások"
+msgstr "Riasztási beállítások"
-#: src/alarm/interface.c:404
-#: src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "Idő"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
msgstr "óra"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
-msgstr "ó"
+msgstr "h"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
msgstr "perc"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
-msgstr "Elnémítás ezután:"
+msgstr "Csendes ezután:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
-msgstr "Ébresztés ekkor (alapértelmezett):"
+msgstr "Riasztás (alapértelmezett):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
-msgstr "Válassza ki az ébresztés napjait a listáról"
-
-#: src/alarm/interface.c:612
-#: src/alarm/interface.c:660
-#: src/alarm/interface.c:708
-#: src/alarm/interface.c:756
-#: src/alarm/interface.c:804
-#: src/alarm/interface.c:852
-#: src/alarm/interface.c:900
-#: src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439
-#: src/skins/ui_manager.c:460
+msgstr "Válassza ki a riasztás napját a következőekből"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr "Alapértelmezett"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Nap"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Kedd"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Szerda"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Csütörtök"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "Péntek"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Szombat"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Vasárnap"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Hétfő"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Napok"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
-msgstr "Ãttűnés"
+msgstr "Elhalványulás"
-#: src/alarm/interface.c:1087
-#: src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975
-#: src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "másodperc"
-#: src/alarm/interface.c:1095
-#: src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Hangerő"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "Jelenlegi"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "a jelenlegi hangerőre állít"
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
-msgstr "Kezdés ekkor"
+msgstr "Kezdjük a"
-#: src/alarm/interface.c:1158
-#: src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr "Vége"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
-msgstr "Kiegészító parancs"
+msgstr "További parancs"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
-msgstr "engedélyezve"
+msgstr "engedélyez"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
msgstr "Lejátszólista (opcionális)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
-msgstr "Keresés..."
+msgstr "Tallózás…"
-#: src/alarm/interface.c:1295
-#: src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
msgstr "Emlékeztető"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
msgstr "Emlékeztető használata"
-#: src/alarm/interface.c:1328
-#: src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Opciók"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
msgstr "Mit jelentenek ezek a lehetőségek?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -525,76 +249,30 @@ msgid ""
" type the reminder in the box and turn on the\n"
" toggle button if you want it to be shown.\n"
msgstr ""
-"\n"
-"Idő\n"
-" Ébresztés ekkor: \n"
-" A megadott időben fog ébreszteni.\n"
-"\n"
-" Elhalkul ezután: \n"
-" Megállítja az ébresztőt a megadott idő után.\n"
-" (ha a figyelmeztető ablak nincs bezárva)\n"
-"\n"
-"\n"
-"Napok\n"
-" Nap:\n"
-" Válassza ki az ébresztés napjait.\n"
-"\n"
-" Idő: Válassza ki az ébresztés idejét naponta\n"
-" vagy használja az alapértelmezett idő\n"
-" gombot.\n"
-"\n"
-"\n"
-"Hangerő\n"
-" Ãttűnés: \n"
-" A hangerő emelkedését lehet szabályozni\n"
-" az ébresztéskor.\n"
-"\n"
-" Kezdete: \n"
-" A kezdeti hangerő beállítása.\n"
-"\n"
-" Vége: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-#: src/alarm/interface.c:1366
-#: src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Súgó"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Mégsem"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
-msgstr ""
+msgstr "Mai emlékeztető.."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "Köszönöm"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "Alapértelmezett PCM eszköz"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Alapértelmezett keverő eszköz"
@@ -606,9 +284,7 @@ msgstr "ALSA Kimeneti bővítmény beállítások"
msgid "PCM device:"
msgstr "PCM eszköz:"
-#: src/alsa/config.c:447
-#: src/OSS/configure.c:256
-#: src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "Keverő eszköz:"
@@ -620,16 +296,18 @@ msgstr "Mixer elem:"
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "ALSA Kimeneti bővítmény névjegye"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "ALSA hiba"
-#: src/amidi-plug/amidi-plug.c:323
-msgid "You have not selected any sequencer ports for MIDI playback. You can do so in the MIDI plugin preferences."
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
msgstr ""
#: src/amidi-plug/backend-alsa/b-alsa.c:35
@@ -643,72 +321,54 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FludSynth háttér-szolgáltatás"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSA HÃTTÉR-SZOLGÃLTATÃS BEÃLLÃTÃSOK"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Kliens neve"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Port neve"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSA kimeneti portok"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Hangkártya:"
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Keverő szabályozás:"
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Keverő beállítások"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your audio card provides a hardware synth and you want to play MIDI with it, you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and ouput plugins from the player. During playback, the player volumeslider will manipulate the mixer control you select here. If you're using wavetable synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and ouput plugins from the player. During playback, the player volume slider will manipulate the mixer control you select here. If you're using wavetable synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSA háttér-szolgáltatás nem lett betöltve vagy nem elérhető"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -716,251 +376,165 @@ msgstr ""
"<span size=\"smaller\">ALSA\n"
"háttér-szolgáltatás</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - backend információ"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-PLUG BEÃLLÃTÃSOK"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Backend választás"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Elérhető backendek"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Lejátszási beállítások"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
-msgstr ""
+msgstr "Transzponálás:"
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Haladó beállítások"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
-msgstr ""
+msgstr "előre kiszámítani a MIDI fájlok hosszát a lejátszólistában"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
-msgstr ""
+msgstr "extra megjegyzések a MIDI fájlból (ha van)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select your backend; that is, the way MIDI events are going to be handled and played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, you'll want to use the ALSA backend. It can also be used with anything that provides an interface to the ALSA sequencer, including software synths or external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into effect and output plugins of the player you'll want to use the good FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, by shifting of the desired number of semitones all its notes (excepting those on midi channel 10, reserved for percussions). Especially useful if you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard percussions channel) of the desired number of semitones. This results in different drumset and percussions being used during midi playback, so if you wish to enhance (or reduce, or alter) percussion sounds, try to play with this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as soon as the player requests it, instead of doing that only when the MIDI file is being played. In example, MIDI length will be calculated straight after adding MIDI files in a playlist. Disable this option if you want faster playlist loading (when a lot of MIDI files are added), enable it to display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, etc.). If this option is enabled, AMIDI-Plug will extract and display comments (if available) in the file information dialog."
-msgstr ""
+msgstr "dalszöveg kibontása a MIDI fájból (ha elérhető)"
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug will extract and display song lyrics (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
+"<span size=\"smaller\">AMIDI\n"
+"bővítmény</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - fájl választás"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - konfiguráció"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - SoundFont fájl választás"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "FLUIDSYNTH HÃTTÉR-SZOLGÃLTATÃS KONFIGURÃCIÓ"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "SoundFont beállítások"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Fájlnév"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Méret (byte)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "SF betöltése a lejátszó indításakor"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "SF betöltése az első midi fájl betöltésekor"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Szintetizátor beállítások"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "erősítés"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "legyen alapértelmezett"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "érték:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "polifónikus"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "visszhang"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "igen"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "nem"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "kórus"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "mintavételi frekvencia"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "egyéb"
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz"
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one valid SoundFont file here (use absolute paths). The loading order is from the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require up to a few seconds. This is a one-time task (the soundfont will stay loaded until it is changed or the backend is unloaded) that can be done at player start, or before the first MIDI file is played (the latter is a better choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require up to a few seconds. This is a one-time task (the soundfont will stay loaded until it is changed or the backend is unloaded) that can be done at player start, or before the first MIDI file is played (the latter is a better choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of the synthesizer; it is set to a low value by default to avoid the saturation of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in parallel; the number of voices is not necessarily equivalent to the number of notes played simultaneously; indeed, when a note is struck on a specific MIDI channel, the preset on that channel may create several voices, for example, one for the left audio channel and one for the right audio channels; the number of voices activated depends on the number of instrument zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is activated; note that when the reverb module is active, the amount of signal sent to the reverb module depends on the \"reverb send\" generator defined in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is activated; note that when the chorus module is active, the amount of signal sent to the chorus module depends on the \"chorus send\" generator defined in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth háttér-szolgáltatás nem lett betöltve vagy nem elérhető"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -983,8 +557,6 @@ msgstr ""
"backend</span>"
#: src/amidi-plug/i_fileinfo.c:169
-#: src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Név"
@@ -1089,161 +661,161 @@ msgstr "Konkáv téglalap"
msgid "None"
msgstr "Nincs"
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr "Lejátszás kezdete"
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
msgstr "OSD használata ha a lejátszólista egy eleme elindul."
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr "Cím váltás"
-#: src/aosd/aosd_trigger.c:83
-msgid "Triggers OSD when, during playback, the song title changes but the filename is the same. This is mostly useful to display title changes in internet streams."
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
msgstr ""
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr "Hangerő váltás"
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
msgstr "OSD használata ha változik a hangerő."
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr "Szünet Be"
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
msgstr "OSD használata ha megállítják a lejátszást."
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
msgstr "Szünet Ki"
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
msgstr "OSD használata ha elindítják a lejátszást."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr "Elhelyezés"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
msgstr "Relatív X pozíció:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
msgstr "Relatív Y pozíció:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr "Max OSD szélesség:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr "Több monitoros opciók"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr "OSD képernyők használata:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr "minden monitoron"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr "monitor %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr "Időtartam (mp)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr "Képernyő:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr "Ãttűnés be:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr "Ãttűnés ki:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr "Betűkészletek"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr "Betűkészlet %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr "Ãrnyék"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Nemzetközi"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "UTF-8 karakter konverzió letiltása (aosd-ben)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr "Téma fájl választás"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr "Renderelési stílus"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Színek"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Szín %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr "Egyedi téma"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr "Téma fájl:"
-#: src/aosd/aosd_ui.c:644
-#: src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236
-#: src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr "Böngészés"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr "Esemény engedélyezése"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr "Esemény"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr "Kompozit kezelő detektálva"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
@@ -1251,75 +823,72 @@ msgstr ""
"Kompozít kezelő nem érzékelhető;\n"
"ha tudja, hogy van egy futó kompozít kezelő, kérjük aktiválja, egyébként az OSD nem fog megfelelően működni"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr "Kompozít kezelő nem szükséges a nem valódi átlátszósághoz"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr "Ãtlátszóság"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr "Nem valódi átlátszóság"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Valódi átlászóság (szükséges X Composite Ext.)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr "Kompozit kiterjesztés nem tölthető be"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr "Kompozit kiterjesztés nem érhető el"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - beállítás"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr "Teszt"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr "Pozíció"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr "Animáció"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr "Szöveg"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr "Dekoráció"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr "Esemény"
-#: src/aosd/aosd_ui.c:1073
-#: src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689
-#: src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Egyéb"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr "Audacious OSD - névjegy"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
@@ -1327,7 +896,7 @@ msgstr ""
"\n"
"Audacious OSD"
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1349,142 +918,35 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356
-#: src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "Párosításkérés a(z) %s eszköztől"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "Engedély kérés ehhez %s"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "Kötés létrehozva: %s"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "Kötés eltávolítva: %s"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "Az eszköz kikapcsolva"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "Az eszköz nem felfedezhető"
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "Az eszköz csatlakoztatható"
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "Az eszköz felfedezhető"
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "Az eszköz korlátozottan felfedezhető"
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "Az eszköz párosítás módban"
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "Bluetooth fejhallgató támogatás bővítmény"
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Készítő"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "Elérhető fejhallgatók"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "Aktuális fejhallgató"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "_Frissítés"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "Kap_csolódás"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "_Bezár"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Osztály"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Cím:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Kötés sikeres!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Nem találtam eszközt!"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Keresés..."
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Párosítás"
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Újraolvasás"
-
-#: src/bluetooth/scan_gui.c:142
-#: src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67
-#: src/hotkey/gui.c:71
-#: src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Lejátszás"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur Scope: Szín választás"
-#: src/blur_scope/config.c:83
-#: src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Beállítások:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr ""
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr ""
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Vágási frekvencia:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr "Audio CD bővítmény néjvegye"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
"\n"
@@ -1497,125 +959,164 @@ msgid ""
"\n"
"Copyright 2009 John Lindgren"
msgstr ""
+"Copyright (c) 2007, írta Calin Crisan <ccrisan@gmail.com> és az Audacious csapat.\n"
+"\n"
+"Sok-sok köszönet a libcdio fejlesztőknek <http://www.gnu.org/software/libcdio/>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>és a libcddb fejlesztőknek <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Továbbá köszönöm Tony Vroon mentori és irányadói segítségét.\n"
+"\n"
+"Ez a Google Summer of Code 2007 projekt keretén belül készült.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Audio CD"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "A meghajtó üres."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Nem támogatott lemez típus."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Hang CD bővítmény beállítások"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Digitális zenelejátszás"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Cím információ"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "Lemez sebesség:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Használjon cd-text információt ha elérhető"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Használja a CDDB adatbázist ha elérhető"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Szerver:"
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Útvonal:"
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port:"
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Hasznájon HTTP helyett CDDBP protokollt"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Alapértelmezett eszköz felülírása:"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Ok"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "CD lejátszása"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "CD Hozzáadása"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr "Dinamikus tartomány kompresszió bővítmény névjegye"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr "Dinamika tartomány kompresszió beállítások"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "Cél hangerő:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Közép hangerő:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "Effekt erőssége:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Dinamikus tartomány:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Játék Konzol Zene Dekóder"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Ãltalános"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Lejátszás"
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "Basszus:"
-#: src/console/configure.c:175
-#: src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr "mp"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Magas:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "Alapértelmezett szám hossz:"
-#: src/console/configure.c:209
-#: src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Újra mintavételezés"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "Engedélyezi az audio újra mintavételezést"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Újra mintavételezési arány:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr ""
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Visszhang növelése"
-#: src/console/configure.c:272
-msgid "The default song length, expressed in seconds, is used for songs that do not provide length information (i.e. looping tracks)."
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
msgstr ""
#: src/console/plugin.c:33
@@ -1630,51 +1131,48 @@ msgid ""
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "Ãtfedés névjegye"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Ãtfedés beállítások"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Ãtfedés (másodpercben):"
-#: src/crossfade/plugin.c:129
-#: src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "Ãtfedési hiba"
-#: src/crossfade/plugin.c:130
-msgid "Crossfading failed because the songs had a different number of channels."
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
"You can use the Sample Rate Converter effect to resample the songs to the same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Crystalizer beállítása"
-#: src/crystalizer/crystalizer.c:106
-#: src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "Effektus intenzitása:"
-#: src/crystalizer/crystalizer.c:143
-#: src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709
-#: src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Alkalmazás"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1686,570 +1184,235 @@ msgstr ""
"\n"
"Surround visszhang Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Visszhang bővítmény névjegye"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Visszhang beállítása"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Késleltetés: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "Visszacsatolás: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "Hangerő: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Lejátszás->Indítás"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Lejátszás->Megállítás"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Lejátszás->Szünet"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Lejátszás->Előző"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Lejátszás->Következő"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Lejátszás->Kiadás"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Lejátszólista->Ismétlés"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Lejátszólista->Véletlenszerű"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Hangerő ->Fel_5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Hangerő->Le_5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Hangerő->Fel_10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Hangerő->Le_10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Hangerő->Némítás"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Ablak->FÅ‘ablak"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Ablak->Lejátszólista"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Ablak->Ekvalízer"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Ablak->FájlhozUgrás"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid "event-device-plugin: unable to open device file %s , skipping this device; check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid "event-device-plugin: unable to create a io_channel for device file %s ,skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid "event-device-plugin: unable to open /proc/bus/input/devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid "event-device-plugin: unable to open a io_channel for /proc/bus/input/devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid "event-device-plugin: an error occurred while reading /proc/bus/input/devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489
-#: src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid "event-device-plugin: unable to load config file %s , default settings will be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid "event-device-plugin: incomplete information in config file for device \"%s\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604
-#: src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid "event-device-plugin: configuration, unable to get is_active value for device \"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid "event-device-plugin: unable to access local directory %s , settings will not be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid "event-device-plugin: configuration, unable to get filename value for device \"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid "event-device-plugin: configuration, unable to get phys value for device \"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid "event-device-plugin: configuration, unable to get is_custom value for device \"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid "event-device-plugin: configuration, unexpected value for device \"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Detektálva"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "Egyéni"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Nem talált"
-
-#: src/evdev-plug/ed_ui.c:275
-#: src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Információ"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Hiba"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Egyéb eszköz hozzáadása"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Eszköz neve:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Eszköz fájl:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(egyéni)"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - beállítások"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktív"
-
-#: src/evdev-plug/ed_ui.c:655
-#: src/sun/configure.c:486
-msgid "Status"
-msgstr "Státusz"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Eszköz neve"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Eszköz fájl"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Eszköz cím"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Kötések"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event (although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Kötések konfiguráció"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Név:</b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Fájlnév:</b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Phys.Cím: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug - névjegy"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:725
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:739
msgid "About FFaudio Plugin"
msgstr "FFaudio bővítmény névjegye"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr "Fájlíró bővítmény névjegye"
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
msgstr "Fájl Ãró beállítások"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
msgstr "Kimeneti fájl formátum:"
-#: src/filewriter/filewriter.c:496
-#: src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr "Beállítás"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
msgstr "Mentés az eredeti könyvtárba"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
msgstr "Mentés egyéb könyvtárba"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
msgstr "Kimeneti fájl könyvtára:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
msgstr "Válasszon egy mappát"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
msgstr "Legyen a fájlnévből:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
msgstr "eredeti fájl kiterjesztések"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
msgstr "eredeti fájlnév"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
msgstr "Ne vágja le a fájl kiterjesztést"
-#: src/filewriter/filewriter.c:574
-msgid "If enabled, the extension from the original filename will not be stripped before adding the new file extension to the end."
-msgstr ""
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:578
msgid "Prepend track number to filename"
msgstr ""
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Automatikus"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Sztereó"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Monó"
+
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
msgstr "MP3 Beállítás"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
msgstr "Algoritmus minősége:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
msgstr "Kimenet mintavétele:"
-#: src/filewriter/mp3.c:778
-#: src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Automatikus"
-
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
msgstr "Bitráta / Tömörítési arány:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
msgstr "Bitráta (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
msgstr "Tömörítési arány:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
msgstr "Audio mód:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Joint-Stereo"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr "Egyéb:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
msgstr ""
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr "Hiba védelem"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
-
-#: src/filewriter/mp3.c:1006
-#: src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr "Minőség"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
msgstr "VBR/ABR engedélyezése"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr "Típus:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Változó bitsebesség"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Ãtlagos bitsebesség"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
msgstr "VBR beállítások:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
msgstr "Minimális bitsebesség (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
msgstr "Maximális bitsebesség (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
msgstr ""
-#: src/filewriter/mp3.c:1153
-msgid "For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/mp3 player)"
-msgstr ""
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
msgstr "ABR beállítások:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
msgstr "Ãtlagos bitráta (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
msgstr "VBR minőségi szint:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"legnagyobb:0;\n"
-"legkisebb:9;\n"
-"alapértelmezés:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
msgstr "Ne írjon Xing VBR fejlécet"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr "Keret paraméterek:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
msgstr "Megjelölés jogvédettként"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
msgstr "Megjelölés eredetiként"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr "ID3 paraméterek:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
msgstr "Mindig adja hozzá a 2-es verzió címkéit"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
msgstr "Csak v1 címkék hozzáadása"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
msgstr "Csak v2 címkék hozzáadása"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
msgstr "Címkék"
@@ -2261,11 +1424,11 @@ msgstr "Vorbis kódoló beállítások"
msgid "Quality level (0 - 10):"
msgstr "Minőségi szint (0-10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC audio bővítmény"
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "FLAC audio bővítmény névjegye"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2275,15 +1438,11 @@ msgid ""
"http://www.skytale.net/projects/bmp-flac2/"
msgstr ""
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "FLAC audio bővítmény névjegye"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Gnome Parancsikon bővítmény névjegye"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2292,597 +1451,481 @@ msgid ""
"\n"
msgstr ""
-#: src/gntui/fileselector.c:75
-#: src/gntui/gntui.c:273
-msgid "Open Files"
-msgstr "Fájlok megnyitása"
-
-#: src/gntui/fileselector.c:75
-#: src/gntui/gntui.c:272
-msgid "Add Files"
-msgstr "Fájlok hozzáadása"
-
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Bejegyzés száma"
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr "gnt felület"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Cím"
-#: src/gtkui/actions.c:257
-#: src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Előadó"
-#: src/gtkui/actions.c:272
-#: src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205
-#: src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410
-#: src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "Ugrás a megadott időre"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Év"
-#: src/gtkui/actions.c:289
-#: src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "perc:másodperc"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:299
-#: src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Szám hossza:"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Sáv"
-#: src/gtkui/actions.c:610
-#: src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Hiba a lejátszólista írásakor \"%s\": %s"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Várakozási sor pozíció"
-#: src/gtkui/actions.c:625
-#: src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s már létezik. Folytatja?"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Hossz"
-#: src/gtkui/actions.c:651
-#: src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "Lejátszólista exportálása"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Fájl elérési útja"
-#: src/gtkui/actions.c:723
-#: src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "Lejátszólista importálása"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Fájlnév"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr "GTK+ felület"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Egyéni cím"
-#: src/gtkui/ui_gtk.c:281
-#: src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Bitráta"
-#: src/gtkui/ui_gtk.c:287
-#: src/skins/ui_main.c:390
-#: src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Oszlopok választása"
-#: src/gtkui/ui_manager.c:35
-#: src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53
-#: src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "Leállítás az aktuális dal után"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Elérhető:"
-#: src/gtkui/ui_manager.c:38
-#: src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59
-#: src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Ismétlés"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Választott:"
-#: src/gtkui/ui_manager.c:41
-#: src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62
-#: src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Véletlenszerű"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Balra rögzít"
-#: src/gtkui/ui_manager.c:44
-#: src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65
-#: src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Ne legyen léptetés a lejátszólistában"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Jobbra rögzít"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Lejátszólisták mutatása"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Felülre rögzít"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Lejátszólisták megjelenítése/elrejtése"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Alulra rögzít"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "Információs terület mutatása"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Rögzítés feloldása"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "Információs terület megjelenítése/elrejtése"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Letiltás"
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "Főmenü megjelenítése"
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "Fájl_ok megnyitása ..."
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "Főmenü megjelenítése/elrejtése"
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "_URL megnyitása ..."
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr "Az állapotsor megjelenítése"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "Fájlok hozzá_adása ..."
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
-msgstr "Az állapotsor megjelenítése/elrejtése"
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "U_RL hozzáadása ..."
-#: src/gtkui/ui_manager.c:69
-#: src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170
-#: src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Szünet"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "_Névjegy ..."
-#: src/gtkui/ui_manager.c:72
-#: src/gtkui/ui_manager.c:73
-#: src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173
-#: src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Leállít"
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Beállítások ..."
-#: src/gtkui/ui_manager.c:75
-#: src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176
-#: src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Előző"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Kilépés"
-#: src/gtkui/ui_manager.c:78
-#: src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179
-#: src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Következő"
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Lejátszás"
-#: src/gtkui/ui_manager.c:84
-#: src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Lejátszólista"
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "_Szünet"
-#: src/gtkui/ui_manager.c:86
-#: src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199
-#: src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Új lejátszólista"
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Megállítás"
-#: src/gtkui/ui_manager.c:89
-#: src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208
-#: src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Lejátszólista törlése"
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "Elő_ző"
-#: src/gtkui/ui_manager.c:92
-msgid "Import Playlist ..."
-msgstr "Lejátszólista importálása ..."
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Következő"
-#: src/gtkui/ui_manager.c:93
-#: src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Lejátszólista betöltése a kiválasztott lejátszólistába."
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "_Ismétlés"
-#: src/gtkui/ui_manager.c:95
-msgid "Export Playlist ..."
-msgstr "Lejátszólista exportálása ..."
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "_Véletlenszerű"
-#: src/gtkui/ui_manager.c:96
-#: src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Kiválasztott lejátszólista mentése."
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr ""
-#: src/gtkui/ui_manager.c:98
-#: src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Minden lejátszó lista mentése"
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Megállítás _az aktuális szám után"
-#: src/gtkui/ui_manager.c:99
-#: src/skins/ui_manager.c:218
-msgid "Saves all the playlists that are open. Note that this is done automatically when Audacious quits."
-msgstr "Minden nyitott lejátszólista mentése. Ez automatikus megtörténik amikor az Audaciousból kilép."
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Dal _információ ..."
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr "Frissítés"
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Ugrás _időre ..."
-#: src/gtkui/ui_manager.c:104
-#: src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "A lejátszólista elemek metaadatainak frissítése."
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Ugrás _dalra ..."
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "Lejátszólista kezelő"
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Sáv szeri_nt"
-#: src/gtkui/ui_manager.c:108
-#: src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Lejátszólista kezelő megnyitása."
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Cím szerin_t"
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr "URL hozzáadása ..."
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Elő_adó szerint"
-#: src/gtkui/ui_manager.c:112
-#: src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Távoli sávok hozzáadása a lejátszólistához."
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "A_lbum szerint"
-#: src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
-msgstr "Fájlok hozzáadása ..."
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "_Dátum szerint"
-#: src/gtkui/ui_manager.c:116
-#: src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Fájlok hozzáadása a lejátszólistához."
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "_Fájl útvonal szerint"
-#: src/gtkui/ui_manager.c:119
-#: src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Összes törlése"
-
-#: src/gtkui/ui_manager.c:120
-#: src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Minden elem eltávolítása a lejátszólistáról."
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "_Egyedi cím szerint"
-#: src/gtkui/ui_manager.c:123
-#: src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Nem kiválasztottak törlése"
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Fo_rdított sorrend"
-#: src/gtkui/ui_manager.c:124
-#: src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Minden nem kiválasztott elem törlése a lejátszólistáról."
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Véletlensze_rű sorrend"
-#: src/gtkui/ui_manager.c:127
-#: src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Kijelölt törlése"
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Frissítés"
-#: src/gtkui/ui_manager.c:128
-#: src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Kijelölt elemek törlése a lejátszólistáról"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "_Nem elérhető fájlok törlése"
-#: src/gtkui/ui_manager.c:131
-msgid "Sort"
-msgstr "Rendezés"
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "Rendezé_s"
-#: src/gtkui/ui_manager.c:132
-#: src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "A dal sorszáma szerint"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Új"
-#: src/gtkui/ui_manager.c:134
-#: src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306
-#: src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "Cím szerint"
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Bezár"
-#: src/gtkui/ui_manager.c:136
-#: src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "Előadó szerint"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importálás ..."
-#: src/gtkui/ui_manager.c:138
-#: src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "Album szerint"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exportálás ..."
-#: src/gtkui/ui_manager.c:140
-msgid "By File Path"
-msgstr "Fájl útvonal szerint"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Lejátszólista kezelő ..."
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr "Fordított sorrend"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "_Várakozási sor kezelő ..."
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Kimenet"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "Hangerő _fel"
-#: src/gtkui/ui_manager.c:149
-#: src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Effektek"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "Hangerő _le"
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr "Hangszínszabályzó"
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Hangszínszabályzó"
-#: src/gtkui/ui_manager.c:156
-#: src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Nézet"
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_ffektusok"
-#: src/gtkui/ui_manager.c:157
-#: src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr "Felület"
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Felület"
-#: src/gtkui/ui_manager.c:164
-#: src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Fájl"
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Megjelenítés"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "Komponensek"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "_Menü sor mutatása"
-#: src/gtkui/ui_manager.c:169
-#: src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375
-#: src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Szám részleteinek megjelenítése"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "I_nfo sor mutatása"
-#: src/gtkui/ui_manager.c:170
-#: src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376
-#: src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Szám részleteinek megjelenítése"
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "_Státusz sor mutatása"
-#: src/gtkui/ui_manager.c:175
-#: src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381
-#: src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Audacious névjegye"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "O_szlop fejlécek mutatása"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr "Fájlok megnyitása ..."
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "_Válasszon oszlopokat ..."
-#: src/gtkui/ui_manager.c:179
-#: src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "Megyitja és lejátsza a fájlt"
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr ""
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr "URL megnyitása ..."
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Fájl"
-#: src/gtkui/ui_manager.c:182
-#: src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Média lejátszása a kiválasztott helyről"
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "L_ejátszás"
-#: src/gtkui/ui_manager.c:184
-#: src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Szolgáltatások kezelése"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_Lejátszólista"
-#: src/gtkui/ui_manager.c:186
-#: src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Beállítások"
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Szervizek"
-#: src/gtkui/ui_manager.c:187
-#: src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Tulajdonságok ablak megnyitása"
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Kimenet"
-#: src/gtkui/ui_manager.c:189
-#: src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "_Kilépés"
-
-#: src/gtkui/ui_manager.c:190
-#: src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Kilépés az Audaciousból"
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Nézet"
-#: src/gtkui/ui_manager.c:192
-#: src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398
-#: src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "Beállítás A-B"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr ""
-#: src/gtkui/ui_manager.c:195
-#: src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401
-#: src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Törlés A-B"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "_Kivágás"
-#: src/gtkui/ui_manager.c:198
-#: src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404
-#: src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "Ugrás a lejátszólista kezdetére"
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Másolás"
-#: src/gtkui/ui_manager.c:201
-#: src/gtkui/ui_manager.c:202
-#: src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407
-#: src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Ugrás fájlhoz"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Beillesztés"
-#: src/gtkui/ui_manager.c:207
-#: src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Várakozási sor váltása"
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Mind kivál_aszt"
-#: src/gtkui/ui_manager.c:208
-#: src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Engedélyezi/letiltja az elemek lejátszólista várósorba helyezését."
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Ãtnevezés"
-#: src/gtkui/ui_manager.c:211
-#: src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Másolás"
-
-#: src/gtkui/ui_manager.c:214
-#: src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Kivágás"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "GTK+ felület"
-#: src/gtkui/ui_manager.c:217
-#: src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Beillesztés"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:220
-#: src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Mindet kijelöl"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Pufferelés ..."
-#: src/gtkui/ui_manager.c:221
-#: src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Minden szám kiválasztása a lejátszólistán."
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:224
-#: src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Nincs kijelölés"
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Hiba"
-#: src/gtkui/ui_manager.c:225
-#: src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Minden kijelölés megszüntetése a lejátszólista elemein."
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr ""
-#: src/gtkui/ui_statusbar.c:91
-#: src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94
-#: src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr "sztereó"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:109
#, c-format
-msgid "%d channels"
-msgstr "%d csatorna"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d csatorna"
+msgstr[1] "%d csatorna"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
+msgstr "%d kbps"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Előző szám"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Lejátszás"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Szünet/Folytatás"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Leállít"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Következő szám"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Vissza 5 másodperccel"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Előre 5 másodperccel"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Némítás"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Hangerő fel"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Hangerő le"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Ugrás fájlhoz"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Lejátszó ablakok váltása"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "On-Screen-Display mutatása"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Ismétlés váltása"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Véletlenszerű lejátszás váltása"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(nincs)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without modificators.\n"
"\n"
"Do you want to continue?"
msgstr ""
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Egér gombok hozzárendelése"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr ""
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr ""
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Gyorsbillentyűk:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Művelet:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Billentyű kötések:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr ""
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2898,31 +1941,31 @@ msgid ""
"\n"
msgstr ""
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr "Kapcsolódás minden eléhető jack porthoz"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr "Csatlakozás csak a kiválasztott kimeneti porthoz"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr "Csatlakozás portok nélkül"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr "Jack bővítmény beállítások"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
msgstr "Kapcsolat módja:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr "Hibakeresés engedélyezése"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2940,124 +1983,67 @@ msgstr ""
"Audacious bővítményt írta:\n"
"Giacomo Lozito from develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
msgstr "JACK kimenet bővítmény névjegye 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
msgstr ""
-#: src/ladspa/ladspa.c:865
-#: src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Név"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Telepített bővímények"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Futó bővítmények"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Hozzáadás"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Eltávolítás"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA bővítmény katalógus"
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "%s Beállítások"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "LIRC audacious bővítmény névjegye"
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr ""
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRC bővítmény"
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr ""
-#: src/lirc/about.c:92
+#: src/ladspa/plugin.c:598
msgid ""
-"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
msgstr ""
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "LIRC bővítmény beállítások"
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Elérhető bővítmények:"
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Újracsatlakozás a LIRC szerverhez"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Újracsatlakozás a megadott idő után (másodperc):"
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Újracsatlakozás"
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Engedélyez"
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Kapcsolat"
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Engedélyezett modulok:"
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr ""
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Beállítások"
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
+"\n"
+"Looking for lyrics..."
msgstr ""
+"\n"
+"Dalszöveg keresése ..."
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: újrakapcsolódás megkisérlése...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: ismeretlen parancs \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: kapcsolat bontva a LIRC-cel\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"Csatlakozás a lyrics.wikia.com-hoz ..."
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
-msgstr "LyricWiki"
-
-#: src/lyricwiki/lyricwiki.c:337
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
@@ -3065,11 +2051,11 @@ msgstr ""
"\n"
"Dalszöveg nem található."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
msgstr "Metronom névjegye"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3078,1858 +2064,1205 @@ msgid ""
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Tact generátor: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Tact generátor: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug beállítások"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Lineáris (gyors)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Mintavételi sebesség"
-
-#: src/modplug/gui/interface.cxx:349
-#: src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477
-#: src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Engedélyez"
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Csatorna keverő névjegye"
-#: src/modplug/gui/interface.cxx:378
-#: src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Mélység"
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Csatorna keverő beállítások"
-#: src/modplug/gui/interface.cxx:386
-#: src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Késleltetés"
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Kimeneti csatornák:"
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Visszhang"
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Változások a következő dal váltáskor lépnek életbe."
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Összeg"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Tartomány"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Basszus kiemelés"
-
-#: src/modplug/gui/interface.cxx:522
-#: src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
msgstr "Térhatású"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Preamp"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Használja a fáljnevét a dal címének"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Gyors lejátszólista információ"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Zaj csökkentés"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Amiga MOD lejátszása"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Ne ismételjen"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Ismétlés"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "idő"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Végtelen ismétlés"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Ismétlés"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD információ"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Fájlnév:\n"
-"Cím:\n"
-"Típus:\n"
-"Hossz:\n"
-"Sebesség:\n"
-"Tempo:\n"
-"Minták:\n"
-"Hangszerek:\n"
-"Minták:\n"
-"Csatornák:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Minták"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Hangszerek"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Ãœzenet"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Modplug bemeneti bővítmény az Audacioushoz verzió"
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Modplug névjegye"
-
-#: src/modplug/gui/support.cxx:90
-#: src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90
-#: src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Nem találom a pixmap fájlt: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Kijelölt szám(ok) feltöltése"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:340
msgid "Upload in progress..."
msgstr "Feltöltés folyamatban..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Feltöltés az MTP Eszközre"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "MTP Eszköz leválasztása"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Leállítva"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "Eszköz leválasztása"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Az Audacious nem játszik."
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Null kimeneti bővítmény"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
+" írta Christian Birchinger <joker@netswarm.net>\n"
+"XMMS plugin alapján Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Null kimeneti bővítmény névjegye"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Null kimenet beállítások"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr "Futtatás valós időben"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
msgstr "1. Alapértelmezett eszköz"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
msgstr "OSS4 Kimeneti bővítmény beállítások"
-#: src/oss4/configure.c:163
-#: src/OSS/configure.c:213
-#: src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
msgstr "Audio eszköz:"
-#: src/oss4/configure.c:189
-#: src/OSS/configure.c:235
-#: src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr "Alternatív eszköz használata:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
msgstr "Hangerő mentése munkamentek között"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
+msgstr "Formátum konverzió engedélyezése az OSS szoftverben."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
msgstr "OSS4 bővítmény névjegye"
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
msgstr "OSS4 hiba"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "Alapértelmezett (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "OSS meghajtó beállítások"
-#: src/OSS/configure.c:298
-#: src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "Eszközök"
-#: src/OSS/configure.c:300
-#: src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "Pufferelés:"
-#: src/OSS/configure.c:313
-#: src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr "Elő-pufferelés (százalék):"
-#: src/OSS/configure.c:324
-#: src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "Pufferelés"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "Keverő beállítások:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "Hangerőszabályzó a Főhangerőt nem a PCM-et használja"
-#: src/OSS/configure.c:337
-#: src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "Keverő"
-#: src/OSS/OSS.c:40
+#: src/OSS/OSS.c:41
msgid "About OSS Driver"
msgstr "OSS meghajtó névjegye"
-#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Audacious PulseAudio kimeneti bővítmény névjegye"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
-msgstr ""
+msgstr "Mintavételi konverter modul névjegye"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
-msgstr ""
+msgstr "Mintavételi konverter beállítások"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
-msgstr ""
+msgstr "Ráta leképezések:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr "Minden egyéb:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "Módszer: "
-#: src/scrobbler/configure.c:152
-#: src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
msgstr "Jelszó megváltoztatása"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr "<b>Szolgáltatások</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr "Felhasználónév:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr "Jelszó:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
msgstr "Scrobbler URL:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
msgstr "<b>Last FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
msgstr ""
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
msgstr ""
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr "Scrobbler bővítmény névjegye"
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "%s névjegye"
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr " Hiba"
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "Ãltalános információ"
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr ""
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr "Audacious SID beállítás"
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8-bit"
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16-bit"
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr "Felbontás:"
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr ""
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr "Csatornák:"
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr "Mintavételi arány:"
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr "Túlmintavételezés engedélyezése"
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr "Szorzó:"
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr ""
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Hang"
-
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr "Kényszerített sebesség"
-
-#: src/sid/xs_interface.c:449
-msgid "If enabled, this option \"forces\" the emulation engine to use the selected clock speed/frequency. Otherwise the speed is determined from played file itself."
-msgstr ""
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50 Hz)"
-
-#: src/sid/xs_interface.c:455
-msgid "PAL is the european TV standard, which uses 50Hz vertical refresh frequency. Most of SID-tunes have been made for PAL computers."
-msgstr ""
-
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60 Hz)"
-
-#: src/sid/xs_interface.c:463
-msgid "NTSC is the TV standard with 60Hz vertical refresh rate (and other features that differ from PAL). It is mainly used in United States, Japan and certain other countries."
-msgstr ""
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr "Óra sebesség:"
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr "Kényszerített modell"
-
-#: src/sid/xs_interface.c:488
-msgid "If enabled, this option \"forces\" the emulation engine to use the selected SID-chip model. Otherwise the preferred SID model is determined from the file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: src/sid/xs_interface.c:494
-msgid "MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 in few ways, having much fuller filter (which, due to design error, is never same between two different SID-chips) and has the \"volume adjustment bug\", which enables playing of digital samples."
-msgstr ""
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr "SID modell:"
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:526
-msgid "Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most cases, though."
-msgstr ""
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr ""
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "SDL Kimeneti modul névjegye"
-#: src/sid/xs_interface.c:534
-msgid "Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr "Emulációs könyvtár választás:"
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr "Valódi C64 (csak SIDPlay 2)"
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr "Bank váltása"
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr "Ãtlátszó ROM"
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr "PlaySID környezet"
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr "Memória mód:"
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr "Emu#1"
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr ""
-
-#: src/sid/xs_interface.c:615
-msgid "This setting can be used to enable libSIDPlay2's \"optimization mode\", which in downgrades the emulation from cycle-exact to something similar to frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr "reSID-emuláció"
-
-#: src/sid/xs_interface.c:621
-msgid "reSID is the software SID-chip simulator based on SID reverse-engineering, created by Dag Lem. It is probably the closest thing to real SID available as software-only emulation."
-msgstr ""
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "SDL hiba"
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr "HardSID"
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Műfaj"
-#: src/sid/xs_interface.c:629
-msgid "HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a real SID-chip. Software can be used to control the HardSID and combined with software emulation of rest of C64 via libSIDPlay2 HardSID can be used to achieve \"near 100%\" similarity to real C64. For more information, see http://www.hardsid.com/"
-msgstr ""
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Gyűjtemény"
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr "SIDPlay 2 beállítások:"
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Lejátszólista létrehozása"
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr ""
-
-#: src/sid/xs_interface.c:654
-msgid "Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample."
-msgstr ""
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr "Lineáris interpoláció"
-
-#: src/sid/xs_interface.c:662
-msgid "Uses linear interpolation between samples, yielding higher audio quality with less sampling noise."
-msgstr ""
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "Lejátszólistához hozzá_ad"
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr "Újramintavételezés (FIR)"
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Keresés a gyűjteményben"
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr "reSID mintavétel beállítások:"
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr "Emu#2"
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr "Szűrők emulálása"
-
-#: src/sid/xs_interface.c:701
-msgid "This option enables emulation of SID filter. The filter is an essential part of SID's sound capacity, but accurate emulation of it may require quite much CPU power. However, if filter emulation is disabled, tunes won't sound authentic at all if they utilize the filter."
-msgstr ""
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr "FS"
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr "FM"
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr "FT"
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr "Visszaállítás az alapértelmezett értékekre"
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr "SIDPlay1"
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr "Exportálás"
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr "Használ"
-
-#: src/sid/xs_interface.c:833
-#: src/skins/ui_manager.c:430
-msgid "Save"
-msgstr "Mentés"
-
-#: src/sid/xs_interface.c:841
-#: src/skins/ui_manager.c:429
-msgid "Import"
-msgstr "Importálás"
-
-#: src/sid/xs_interface.c:849
-#: src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr "Törlés"
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr ""
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr "SIDPlay2"
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr "Szűrők"
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr ""
-
-#: src/sid/xs_interface.c:901
-msgid "If enabled, the tune is played at least for the specified time, adding silence to the end if necessary."
-msgstr ""
-
-#: src/sid/xs_interface.c:908
-#: src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr "Lejátszási idő:"
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr "Minimális lejátszási idő:"
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr ""
-
-#: src/sid/xs_interface.c:949
-msgid "If enabled, tune is played until specified duration is reached (aka maximum playtime)."
-msgstr ""
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr "Csak akkor ha a dal hossza ismeretlen"
-
-#: src/sid/xs_interface.c:955
-msgid "If enabled, the maximum playtime is applied only if song/tune length is not known."
-msgstr ""
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr "Maximális lejátszási idő:"
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1003
-msgid "This option enables using of XSIDPLAY compatible song length database. (Refer to Audacious-SID documentation for more information)"
-msgstr ""
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr "DB-fájl:"
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr "Adatbázis útvonal és fájlnév"
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr ""
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr "Számhossz adatbázis:"
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr "Dalhossz"
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr ""
-
-#: src/sid/xs_interface.c:1076
-msgid "By enabling this option you can specify a custom Tuplez formatting string for SID-files. The SID-plugin specific Tuplez tags are described shortly below."
-msgstr ""
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr ""
-
-#: src/sid/xs_interface.c:1090
+#: src/search-tool/search-tool.c:645
msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr "Szám címének formátuma:"
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Cím"
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr ""
-
-#: src/sid/xs_interface.c:1129
-msgid "If enabled, sub-tunes of each file will be added to playlist. If disabled, only the default sub-tune will be added."
-msgstr ""
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr ""
-
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr ""
-
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr "Használjon STIL adatbázist"
-
-#: src/sid/xs_interface.c:1183
-msgid "If this option is enabled (and the database & HVSC settings below are correctly set), Audacious-SID will use and display additional information from STIL database when HVSC SIDs are played."
-msgstr ""
-
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr "STIL fájl:"
-
-#: src/sid/xs_interface.c:1206
-msgid "Path and filename of STIL database file (STIL.txt), usually found from HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr "STIL adatbázis fájl keresése"
-
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr "HVSC útvonal:"
-
-#: src/sid/xs_interface.c:1262
-msgid "Path to base-directory of your High Voltage SID Collection (HVSC), for example /media/C64Music/"
-msgstr ""
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr ""
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "Mindem változtatás elvetése"
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Kérem várjon ..."
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "Elfogad és frissíti a változásokat"
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Mappa választás"
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Audacious SID fájl információ"
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "Fájlnév:"
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "Zene neve:"
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "Zeneszerző:"
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "Copyright:"
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "Száminformációk"
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "Szerző:"
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "Időtartam:"
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr "STIL adatbázis kiválasztása"
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr ""
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr ""
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr ""
-
-#: src/sid/xs_interface.c:2093
-#: src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "Kiválasztott művelet megerősítése"
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Igen"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "Nem"
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "Felhasználói GUI névjegye"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Felhasználói felület"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
msgstr "_Lejátszó:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
msgstr "Főablak betűtípus kiválasztás:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
msgstr "_Lejátszólista:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
msgstr "Válassza ki a lejátszólista betűkészletét:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>_Betűkészletek</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Bitmap betűtípus használata ha elérhető"
-
-#: src/skins/skins_cfg.c:323
-msgid "Use bitmap fonts if they are available. Bitmap fonts do not support Unicode strings."
-msgstr "Bitmap betűtípus használata ha elérhető. A Bitmap betűtípusok nem támogatják az Unicode szövegeket."
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Egyebek</b>"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Bitmap fontok használata (csak ASCII támogatása)"
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Elválasztók mutatása a lejátszólistában"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "A dal címe mindkét irányba mozog"
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Ablakkezelő dekoráció mutatása"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_BÅ‘r</b>"
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Engedélyezi az ablakkezelőnek hogy megjelenítse a saját dekorációt."
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Felület beállítások"
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr ""
-
-#: src/skins/skins_cfg.c:330
-msgid "If selected, the file information text in the main window will scroll back and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "A beépített gtk téma tiltása"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamp"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Véletlenszerű bőr lejátszáskor"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "A nem teljesen kész bőrök betöltése mindig"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid "If selected, audacious won't refuse loading broken skins. Use only if your favourite skin doesn't work"
-msgstr "Ha kiválasztott az audacious nem dobja el betöltéskor a sérült bőrt. Csak akkor használja ha a kedvenc bőr nem működne"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Szín beállítás"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
-#: src/skins/skins_cfg.c:407
-msgid "Audacious allows you to alter the color balance of the skinned UI. The sliders below will allow you to do this."
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Kék"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Zöld"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Vörös"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_BÅ‘r</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr "Szín beállítás ..."
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Audacious Equalizer"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:887
msgid "Presets"
msgstr "Profilok"
-#: src/skins/ui_main.c:593
-msgid "kbps"
-msgstr "kbps"
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Előre beállított betöltése"
-#: src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "kHz"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr ""
-#: src/skins/ui_main.c:608
-msgid "surround"
-msgstr "térhatású"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr ""
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - láthatósági figyelmeztetés"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr ""
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Lejátszó főablakának mutatása"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr ""
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Mellőzés"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr ""
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; otherwise, you'll have to control it remotely via audtool or enabled plugins (such as the statusicon plugin)."
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
msgstr ""
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
msgstr ""
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - hibás GTK téma megjelenítő használat figyelmeztetés"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the features used by modern skins. The incompatible features have been disabled for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Ne mutassa ezt a figyelmeztetést ismét"
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "térhatású"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "Pozicionálás: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Tekerés %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Hangerő: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Balansz: %d%% bal"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Balansz: közép"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Balansz: %d%% jobb"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Beállítások menü"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Tiltja a 'Mindig felül' opciót"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "Engedélyezi a 'Mindig felül' opciót"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Fájl Információs doboz"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "'GUI méretezés' tiltása"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "'GUI méretezés' engedélyezése"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Megjelenítési menü"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1653
msgid "Single mode."
msgstr "Egyszerű mód."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1655
msgid "Playlist mode."
msgstr "Lejátszólista mód."
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1677
msgid "Stopping after song."
msgstr "Leállítás az aktuális dal után."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1679
msgid "Not stopping after song."
msgstr "Nincs leállítás az aktuális dal után."
-#: src/skins/ui_manager.c:50
-#: src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Szám nevének automatikus görgetése"
-#: src/skins/ui_manager.c:56
-#: src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Leállítás az aktuális dal után"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Csúcsérték"
-#: src/skins/ui_manager.c:68
-#: src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Ismétlés"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Véletlenszerű"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Ne legyen léptetés a lejátszólistában"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Lejátszó mutatása"
-#: src/skins/ui_manager.c:71
-#: src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Lejátszólista szerkesztő mutatása"
-#: src/skins/ui_manager.c:74
-#: src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Hangszínszabályzó mutatása"
-#: src/skins/ui_manager.c:77
-#: src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Mindig felül"
-#: src/skins/ui_manager.c:80
-#: src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Minden munkaterületre elhelyez"
-#: src/skins/ui_manager.c:83
-#: src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Lejátszó felgördítése"
-#: src/skins/ui_manager.c:86
-#: src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Lejátszólista szerkesztő felgördítése"
-#: src/skins/ui_manager.c:89
-#: src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Hangszínszabályzó felgördítése"
-#: src/skins/ui_manager.c:92
-#: src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Skála"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "KétszeresMéret"
-
-#: src/skins/ui_manager.c:95
-#: src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Könnyű mozgatás"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analizátor"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
-msgstr ""
+msgstr "Szkóp"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
-msgstr ""
+msgstr "Voiceprint"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Kikapcsolva"
-#: src/skins/ui_manager.c:111
-#: src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Szokásos"
-#: src/skins/ui_manager.c:112
-#: src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Tűz"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Függőleges vonalak"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Vonalak"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Csíkok"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
-msgstr ""
+msgstr "Pont szkóp"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
-msgstr ""
+msgstr "Vonal szkóp"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
-msgstr ""
+msgstr "Szolid szkóp"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Jég"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Sima"
-#: src/skins/ui_manager.c:139
-#: src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Lasabb"
-#: src/skins/ui_manager.c:140
-#: src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Lassú"
-#: src/skins/ui_manager.c:141
-#: src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Közepes"
-#: src/skins/ui_manager.c:142
-#: src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Gyors"
-#: src/skins/ui_manager.c:143
-#: src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Leggyorsabb"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Eltelt idő"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Hátralévő idő"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Szünet"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Előző"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Következő"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Megjelenítés"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Megjelenítési mód"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Analizátor mód"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
-msgstr ""
+msgstr "Szkóp mód"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
-msgstr ""
+msgstr "Voiceprint Mód"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr ""
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Analizátor kikapcsolása"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Csúcsérték ki"
-#: src/skins/ui_manager.c:202
-#: src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Lejátszólista"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Új lejátszólista"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "A következő lejátszólista kijelölése"
-#: src/skins/ui_manager.c:205
-#: src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Az előző lejátszólista kijelölése"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Lejátszólista törlése"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Lejátszólista importálása"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Lejátszólista betöltése a kiválasztott lejátszólistába."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Lejátszólista exportálása"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Kiválasztott lejátszólista mentése."
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "Lista frissítése"
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
-msgstr "List kezelő"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "A lejátszólista elemek metaadatainak frissítése."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Lejátszólista kezelő"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Várakozási sor kezelő"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Nézet"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Felület"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Felület beállítások ..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "Internetes cím hozzáadása ..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Távoli sávok hozzáadása a lejátszólistához."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Fájlok hozzáadása ..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Fájlok hozzáadása a lejátszólistához."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Keresés és választ"
-#: src/skins/ui_manager.c:247
-msgid "Searches the playlist and selects playlist entries based on specific criteria."
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
msgstr ""
+"Keres a lejátszási listán és kiválasztja azokat a lista bejegyzéseket amik "
+"megfelelnek a meghatározott kritériumoknak."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Kijelölés megfordítása"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
-msgstr ""
+msgstr "Megfordítja a kiválasztásokat."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Mindet kijelöl"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Minden szám kiválasztása a lejátszólistán."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Nincs kijelölés"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Minden kijelölés megszüntetése a lejátszólista elemein."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Összes törlése"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Minden elem eltávolítása a lejátszólistáról."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "Várólista törlése"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
-msgstr ""
+msgstr "Törli a várakozási sorral kapcsolatos listát."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Elérhetetlen fájlok törlése"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "Törölje az elérhetetlen fájlokat a lejátszólistáról."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Kettőzöttek eltávolítása"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Cím szerint"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "A többszörösen felvett elemek törlése a lejátszólistáról cím alapján."
-#: src/skins/ui_manager.c:282
-#: src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "Fájlnév szerint"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
-msgstr "A többszörösen felvett elemekt törlése a lejátszólistáról fájlnév alapján."
+msgstr ""
+"A többszörösen felvett elemekt törlése a lejátszólistáról fájlnév alapján."
-#: src/skins/ui_manager.c:286
-#: src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "Útvonal + fájlnév szerint"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
-msgstr "A többszörösen felvett elemekt törlése a lejátszólistáról teljes elérési út alapján."
+msgstr ""
+"A többszörösen felvett elemekt törlése a lejátszólistáról teljes elérési út "
+"alapján."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Nem kiválasztottak törlése"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Minden nem kiválasztott elem törlése a lejátszólistáról."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Kijelölt törlése"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Kijelölt elemek törlése a lejátszólistáról"
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Véletlenszerű lista"
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Lejátszólista véletlenszerű keverése."
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "Fordított lista"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Megfordítja a lejátszólistát."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Lista rendezése"
-#: src/skins/ui_manager.c:307
-#: src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
msgstr "Lista rendezése cím alapján."
-#: src/skins/ui_manager.c:311
-#: src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Album szerint"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
msgstr "Lista rendezése album szerint."
-#: src/skins/ui_manager.c:315
-#: src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Előadó szerint"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
msgstr "Lista rendezése előadók szerint."
-#: src/skins/ui_manager.c:319
-#: src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
msgstr "A lista rendezése fájlok neve szerint."
-#: src/skins/ui_manager.c:323
-#: src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Lista rendezése teljes útvonal alapján."
-#: src/skins/ui_manager.c:326
-#: src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "Dátum alapján"
-#: src/skins/ui_manager.c:327
-#: src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
msgstr "A lista rendezése a módosítás ideje szerint"
-#: src/skins/ui_manager.c:331
-#: src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "A dal sorszáma szerint"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
msgstr "Lista rendezése a szám sorszáma alapján."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "Kijelöltek rendezése"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Fájl"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Bővítmények karbantartása"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Szám részleteinek megjelenítése"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Szám részleteinek megjelenítése"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Audacious névjegye"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "Fájl lejátszáa"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Megyitja és lejátsza a fájlt"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "Hely lejátszása"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Média lejátszása a kiválasztott helyről"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Szolgáltatások kezelése"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Beállítások"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Tulajdonságok ablak megnyitása"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Kilépés az Audaciousból"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Beállítás A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Törlés A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Ugrás a megadott időre"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Várakozási sor váltása"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Engedélyezi/letiltja az elemek lejátszólista várósorba helyezését."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Másolás"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Kivágás"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Beillesztés"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
msgstr "Betöltés"
-#: src/skins/ui_manager.c:433
-#: src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importálás"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Mentés"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Törlés"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
msgid "Preset"
msgstr "Előre beállított"
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr "Előre beállított betöltése"
-
-#: src/skins/ui_manager.c:436
-#: src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
msgstr "Előre beállított automatikus betöltése"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
msgstr ""
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr "Nulla"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
msgstr "Legyen minden hangszínszabályozó értéke nulla"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr "Fájlból"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
msgstr ""
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
msgstr ""
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
msgstr ""
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr ""
-
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
msgstr ""
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr "Fájlba"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
msgstr ""
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr ""
-
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
msgstr ""
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr "Elemek keresése az aktív lejátszólistában"
-#: src/skins/ui_playlist.c:382
-msgid "Select entries in playlist by filling one or more fields. Fields use regular expressions syntax, case-insensitive. If you don't know how regular expressions work, simply insert a literal portion of what you're searching for."
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
msgstr ""
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Cím:"
+
+#: src/skins/ui_playlist.c:271
msgid "Album: "
msgstr "Album:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
msgstr "Előadó:"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
msgstr "Fájlnév:"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
msgstr "Az előző kiválasztások törlése keresés előtt"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr "Automatikusan várólistára kerülnek a talált elemek"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr "Hozzon létre új lejátszólistát az egyező elemekből"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Mentés statikus lejátszólistaként"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Relatív útvonal használata"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Lejátszólista betöltése"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Lejátszólista mentése"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr "Audacious lejátszólista szerkesztő"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d / %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr "31 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr "63 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr "125 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr "250 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr "500 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr "1 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr "2 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr "4 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr "16 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Régi Winamp 2.x bőr"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Nem régi Winamp 2.x bőr"
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Nem lehet létrehozni a könyvtárat (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
msgstr "sndfile bővítmény névjegye"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "SndStretch névjegye"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr "Hangerő korrekció"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr "Rövid átfedés"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "Sebesség"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "Hangmagasság"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Skála"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "SndStretch - beállítások"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
msgstr "Parancs futtatása ha az Audacious elindít egy új számot."
-#: src/song_change/song_change.c:398
-#: src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406
-#: src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
msgstr "Parancs:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
-msgstr ""
+msgstr "Parancs futtatása a dal végén."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
-msgstr ""
+msgstr "Parancs futtatása amikor Audacious elér a lejátszási lista végéhez."
-#: src/song_change/song_change.c:409
-msgid "Command to run when title changes for a song (i.e. network streams titles)."
-msgstr ""
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr "Parancs futtatása ha a dal cím változik (pl. hálózati stream-címek)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -4942,30 +3275,31 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-#: src/song_change/song_change.c:437
-msgid "<span size='small'>Parameters passed to the shell should be encapsulated in quotes. Doing otherwise is a security risk.</span>"
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
msgstr "Parancsok"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
msgstr "Szám váltás"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Spektrum ábrázolása"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr "Státusz ikon bővítmény névjegye"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -4983,35 +3317,51 @@ msgstr ""
"Ez a bővítmény státusz ikont helyez el az\n"
"ablakkezelő rendszer tálca területén.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr "Státusz ikon bővítmény - beállítások"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr "Jobb-Egér menű"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Kicsi lejátszó menü #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Kicsi lejátszó menü #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
msgstr "Egérgörgő működés"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr "Hangerő váltás"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr "Váltja a lejátszott dalt"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Egyéb beállítások"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Felugró ablakok tiltása"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Bezáráskor az értesítési területen marad (a tálcán)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5025,94 +3375,15 @@ msgstr ""
msgid "About Extra Stereo Plugin"
msgstr "Extra sztereó bővítmény névjegye"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "Extra sztereó beállítások"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr "Keresés:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr "Könyvjelző hozzáadása"
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "Folyam böngésző"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr "Folyam neve"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr "Éppen szól"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr "Könyvjelző eltávolítása"
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr "Folyam böngésző névjegye"
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:357
-#: src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "Folyam böngésző"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Sun meghajtó névjegye"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Hang szabályzó eszköz:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Puffer méter (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Hangerőszabályzó eszköz:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS kizárólagosan használja a keverőt."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun meghajtó beállítások"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
msgstr "Hang generátor névjegye"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5121,36 +3392,24 @@ msgid ""
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
msgstr "Hang generátor:"
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "általános címek felülírása"
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Cím formátum:"
-
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Ogg Vorbis címkék"
-
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Ogg Vorbis Audio bővítmény beállítások"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr ""
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Ogg Vorbis Audio bővítmény névjegye"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5184,12 +3443,12 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack dekóder bővítmény %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5201,38 +3460,4 @@ msgstr ""
"Egyéb plugin kódokat írta Miles Egan\n"
"Nézze meg a Wavpack honlapját: http://www.wavpack.com/\n"
-#~ msgid "PREAMP"
-#~ msgstr "PREAMP"
-
-#~ msgid "60HZ"
-#~ msgstr "60HZ"
-
-#~ msgid "170HZ"
-#~ msgstr "170HZ"
-
-#~ msgid "310HZ"
-#~ msgstr "310HZ"
-
-#~ msgid "600HZ"
-#~ msgstr "600HZ"
-
-#~ msgid "1KHZ"
-#~ msgstr "1KHZ"
-
-#~ msgid "3KHZ"
-#~ msgstr "3KHZ"
-
-#~ msgid "6KHZ"
-#~ msgstr "6KHZ"
-
-#~ msgid "12KHZ"
-#~ msgstr "12KHZ"
-
-#~ msgid "14KHZ"
-#~ msgstr "14KHZ"
-
-#~ msgid "16KHZ"
-#~ msgstr "16KHZ"
-#~ msgid "Audacious standard menu"
-#~ msgstr "Audacious általános menü"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..1afbff1
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,3663 @@
+# Italian translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# Jacopo Lorenzetti <jacopo.jl@gmail.com>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-11 18:56+0000\n"
+"Last-Translator: Jacopo Lorenzetti <jacopo.jl@gmail.com>\n"
+"Language-Team: Italian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"Per la decodifica è utilizzato libfaad2-%s.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "Informazioni sul plugin di decodifica AAC MP4"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Informazioni su Sveglia"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+"Un plugin che può essere utilizzato per avviare la riproduzione a un'orario prestabilito.\n"
+"\n"
+"Originariamente scritto da Adam Feakin e Daniel Stodden."
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "Sveglia"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr "Questa è la tua sveglia."
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "OK"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "Impostazioni sveglia"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "Ora"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "ore"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr "h"
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "minuti"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "Ferma dopo:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "Sveglia alle (predefinita):"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "Scegliere i giorni in cui attivare la sveglia"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "Predefinita"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "Giorno"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "Martedì"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "Giovedì"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "Venerdì"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "Sabato"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "Domenica"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "Lunedì"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "Giorni"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "Dissolvenza"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "secondi"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "Volume"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "Attuale"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "Inizia a"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "Finale"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "Comando aggiuntivo"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "abilita"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "Playlist (opzionale)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "Sfoglia…"
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "Promemoria"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "Usa promemoria"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Opzioni"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "Cosa significano queste opzioni?"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"Ora\n"
+" Sveglia alle: \n"
+" L'ora in cui si attiva la sveglia.\n"
+"\n"
+" Ferma dopo: \n"
+" Ferma la sveglia dopo l'intervallo di tempo\n"
+" specificato.\n"
+" (se la finestra della sveglia non viene chiusa)\n"
+"\n"
+"\n"
+"Giorni\n"
+" Giorno:\n"
+" Seleziona i giorni in cui attivare la sveglia.\n"
+"\n"
+" Ora:\n"
+" Scegli l'ora della sveglia per ogni giorno,\n"
+" o seleziona la checkbox per utilizzare l'ora\n"
+" predefinita.\n"
+"\n"
+"\n"
+"Volume\n"
+" Dissolvenza: \n"
+" Alza gradualmente il volume fino al valore\n"
+" scelto per il tempo selezionato.\n"
+"\n"
+" Inizia a: \n"
+" Inizia la dissolvenza a partire dal volume\n"
+" selezionato.\n"
+"\n"
+" Finale: \n"
+" Il volume a cui smettere la dissolvenza. Se\n"
+" il tempo della dissolvenza è 0 allora imposta\n"
+" il volume a questo valore e avvia la\n"
+" riproduzione.\n"
+"\n"
+"\n"
+"Opzioni:\n"
+" Comando aggiuntivo:\n"
+" All'ora della sveglia esegui il comando\n"
+" specificato.\n"
+"\n"
+" Playlist: \n"
+" Carica questa playlist e riproduci i brani da qui\n"
+" (deve avere estensione .m3u). Se non viene\n"
+" selezionata alcuna playlist saranno usati i\n"
+" brani che sono attualmente nella lista.\n"
+" Può anche essere inserito l'URL di uno stream\n"
+" mp3/ogg, ma il caricamento delle playlist da\n"
+" URL al momento non è supportato da xmms.\n"
+"\n"
+" Promemoria:\n"
+" visualizza un promemoria quando si spegne\n"
+" la sveglia, se vuoi che venga mostrato digita il\n"
+" promemoria nella casella e attiva la checkbox.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Aiuto"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Annulla"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "Il tuo promemoria di oggi è…"
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "Grazie"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "Dispositivo PCM predefinito"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "Dispositivo mixer predefinito"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "Preferenze del plugin di uscita ALSA"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "Dispositivo PCM:"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "Dispositivo mixer:"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "Elemento mixer:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "Aggira interruzione per esaurimento risorse"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "Informazioni sul plugin di uscita ALSA"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "Errore ALSA"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"Non hai selezionato alcuna porta del sequencer per la riproduzione MIDI. "
+"Puoi farlo nelle preferenze del plugin MIDI."
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "Backend ALSA "
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Questo backend invia eventi MIDI a un gruppo di porte del sequencer ALSA scelte dall'utente. L'interfaccia del sequencer ALSA è molto versatile, può fornire porte per sintetizzatori hardware delle schede audio (emu10k1) ma anche per sintetizzatori software, dispositivi esterni, ecc.\n"
+"Questo backend non produce audio, gli eventi MIDI sono gestiti direttamente dai dispositivi/programmi dietro le porte ALSA; ad esempio, gli eventi MIDI inviati al sintetizzatore hardware saranno riprodotti direttamente.\n"
+"Backend scritto da Giacomo Lozito."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "Backend FluidSynth "
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Questo backend produce audio inviando eventi MIDI a FluidSynth, un sintetizzatore software in tempo reale basato sulla specifica SoundFont2 (www.fluidsynth.org).\n"
+"L'audio prodotto può essere manipolato tramite i plugin di effetto del lettore ed è elaborato dai plugin di uscita selezionati.\n"
+"Backend scritto da Giacomo Lozito."
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "CONFIGURAZIONE DEL BACKEND ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Porta"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "Nome del client"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Nome della porta"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "Porte di uscita ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "Scheda audio: "
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "Controllo mixer: "
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "Impostazioni mixer"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "Backend ALSA non caricato o non disponibile"
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr "<span size=\"smaller\">Backend ALSA</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "AMIDI-Plug - informazioni backend"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "PREFERENZE AMIDI-PLUG"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "Selezione backend"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "Backend disponibili"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "Impostazioni di riproduzione"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "Trasponi: "
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "Spostamento percussioni: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Impostazioni avanzate"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "precalcola durata dei file MIDI nella playlist"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "estrai commenti dal file MIDI (se disponibili)"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "estrai testi dal file MIDI (se disponibili)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "AMIDI-Plug - seleziona file"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "AMIDI-Plug - configurazione"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "AMIDI-Plug - seleziona file SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "CONFIGURAZIONE DEL BACKEND FLUIDSYNTH"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "Impostazioni SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Nome del file"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Dimensioni (byte)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "Carica SF all'avvio del lettore"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "Carica SF alla prima riproduzione di file midi"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "Impostazioni sintetizzatore"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "guadagno"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "usa predefinito"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "valore:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "polifonia"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "riverbero"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "sì"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "no"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "chorus"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "frequenza di campionamento"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "personalizzata "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "Backend FluidSynth non caricato o non disponibile"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr "<span size=\"smaller\">Backend FluidSynth</span>"
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "CONFIGURAZIONE DEL BACKEND TIMIDITY"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "Backend TiMidity non caricato o non disponibile"
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr "<span size=\"smaller\">Backend TiMidity</span>"
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> Informazioni MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Formato:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "Durata (msec):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "Num di tracce:"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "variabile"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "BPM:"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg):"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "Suddivisione temporale:"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> Commenti e testi MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* nessun commento disponibile in questo file MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* nessun testo disponibile in questo file MIDI *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (UTF-8 non valido)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "AMIDI-Plug - informazioni su"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+"\n"
+"AMIDI-Plug "
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+"\n"
+"lettore musicale MIDI modulare\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"scritto da Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"un ringraziamento speciale a…\n"
+"\n"
+"Clemens Ladisch e Jaroslav Kysela\n"
+"per i loro favolosi programmi aplaymidi e amixer; sono\n"
+"stati davvero utili, insieme alla documentazione di alsa-lib,\n"
+"per saperne di più sulle API di ALSA\n"
+"\n"
+"Alfredo Spadafina\n"
+"per il bel logo della tastiera midi\n"
+"\n"
+"Tony Vroon\n"
+"per il valido aiuto con il collaudo alpha\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "Rettangolo"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Rettangolo arrotondato"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Rettangolo concavo"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Nessuno"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "Avvio della riproduzione"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "Visualizza l'OSD quando viene riprodotto un elemento della playlist."
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "Cambio titolo"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Visualizza l'OSD quando, durante la riproduzione, il titolo del brano cambia"
+" ma il nome del file è lo stesso. È utile principalmente per visualizzare i "
+"cambi di titolo negli stream su internet."
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "Cambio volume"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "Visualizza l'OSD quando viene cambiato il volume."
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "Attivazione pausa"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "Visualizza l'OSD quando viene interrotta la riproduzione."
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "Disattivazione pausa"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "Visualizza l'OSD quando viene ripresa la riproduzione."
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "Posizionamento"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "Offset X relativo:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "Offset Y relativo:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "Larghezza massima OSD:"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "Opzioni multi-monitor"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "Visualizza OSD su:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "tutti i monitor"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "monitor %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "Temporizzazione (ms)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "Visualizza:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "Dissolvi in ingresso:"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "Dissolvi in uscita:"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "Caratteri"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "Carattere %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "Ombra"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "Internazionalizzazione"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "Disabilita conversione UTF-8 del testo (in aosd)"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "Seleziona file della skin"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "Stile di resa grafica"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "Colori"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "Colore %i:"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "Skin personalizzata"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "File della skin:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "Sfoglia"
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "Abilita visualizzazione in seguito all'evento"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "Evento"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "Rilevato compositing manager"
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+"Compositing manager non rilevato;\n"
+"a meno che tu non sappia di averne uno in esecuzione, per favore attiva un compositing manager altrimenti l'OSD non funzionerà correttamente"
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "Compositing manager non richiesto per la falsa trasparenza"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "Trasparenza"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "Falsa trasparenza"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Trasparenza reale (richiede est. Composite di X)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Estensione Composite non caricata"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Estensione Composite non disponibile"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr "<span font_desc='%s'>Audacious OSD</span>"
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "Audacious OSD - configurazione"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "Prova"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "Posizione"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "Animazione"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "Testo"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "Decorazione"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "Eventi"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "Varie"
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "Audacious OSD - informazioni su"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Audacious OSD "
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"scritto da Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display è basato sulla libreria Ghosd\n"
+"scritta da Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Blur Scope: Selezione colore"
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "Opzioni:"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Preferenze Stereofonico-a-binaurale Bauer"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Livello di alimentazione:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Frequenza di taglio:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Preimpostazioni:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "Informazioni sul plugin CD Audio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+"Copyright (c) 2007, di Calin Crisan <ccrisan@gmail.com> e del team Audacious.\n"
+"\n"
+"Molte grazie agli sviluppatori di libcdio <http://www.gnu.org/software/libcdio/>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>e agli sviluppatori di libcddb <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Grazie anche a Tony Vroon per avermi guidato e consigliato.\n"
+"\n"
+"Questo è stato un progetto Google Summer of Code 2007.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "CD Audio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Il drive è vuoto."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Tipo di disco non supportato."
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "Configurazione del plugin Audio CD"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "Estrazione audio digitale"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "Informazioni titoli"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "Velocità disco:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "Usa cd-text se disponibile"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "Usa CDDB se disponibile"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "Server: "
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "Percorso: "
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Porta: "
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "Usa HTTP invece di CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "Ignora dispositivo predefinito: "
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Ok"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Riproduci CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Aggiungi CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "Informazioni sul plugin Compressione gamma dinamica"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "Preferenze Compressore gamma dinamica"
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Volume centrale:"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Gamma dinamica:"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "Decodificatore musica console giochi"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Generale"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Riproduzione"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "Bassi:"
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "sec"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "Alti:"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "Durata brano predefinita:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "Ricampionamento"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "Abilita ricampionamento audio"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "Frequenza di ricampionamento:"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "SPC"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "Ignora durata specificata nei tag SPC"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "Aumenta riverbero"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+"La durata brano predefinita, espressa in secondi, è utilizzata per i brani "
+"che non forniscono informazioni sulla durata (tracce che si ripetono "
+"ciclicamente)"
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "Informazioni sul Decodificatore musica console giochi"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"Motore del decodificatore musica console basato su Game_Music_Emu 0.5.2.\n"
+"Formati supportati: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Implementazione Audacious di: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "Informazioni su Dissolvenza incrociata"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "Preferenze Dissolvenza incrociata"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "Sovrapposizione (in secondi):"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Errore Dissolvenza incrociata"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+"La dissolvenza incrociata è fallita poiché i brani avevano un numero di "
+"canali differente."
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+"La dissolvenza incrociata è fallita poiché i brani avevano una differente frequenza di campionamento.\n"
+"\n"
+"Puoi usare l'effetto Convertitore frequenza di campionamento per ricampionare i brani alla stessa frequenza."
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr "Configura Crystalizer"
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "Intensità dell'effetto:"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "Applica"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+"Plugin Eco\n"
+"Di Johan Levin 1999.\n"
+"\n"
+"Eco surround di Carl van Schaik 1999"
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "Informazioni sul plugin Eco"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "Configura Eco"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "Ritardo: (ms)"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "Ritorno: (%)"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "Volume: (%)"
+
+#: src/ffaudio/ffaudio-core.c:725
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Plugin di decodifica audio multi-formato per Audacious basato\n"
+"sul framework multimediale FFmpeg (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Plugin per Audacious di:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+
+#: src/ffaudio/ffaudio-core.c:739
+msgid "About FFaudio Plugin"
+msgstr "Informazioni sul plugin FFaudio"
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "Informazioni sul plugin FileWriter"
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "Configurazione File writer"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "Formato del file in uscita:"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "Configura"
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "Salva nella directory originale"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "Salva in directory personalizzata"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "Cartella del file in uscita:"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Seleziona una cartella"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Ottieni nome file da:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "tag del file originale"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "nome del file originale"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "Non togliere estensione dal nome del file"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Anteponi numero di traccia al nome del file"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "Configurazione MP3"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "Qualità dell'algoritmo:"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "Frequenza di campionamento in uscita:"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr "(Hz)"
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "Bitrate / fattore di compressione:"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "Bitrate (kbps):"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "Fattore di compressione:"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "Modalità audio:"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "Varie:"
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr "Rispetta rigorosamente conformità ISO"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "Protezione dagli errori"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "Qualità"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "Abilita VBR/ABR"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "Opzioni VBR:"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "Bitrate minima (kbps):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "Bitrate massima (kbps):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "Rispetta rigorosamente bitrate minima"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "Opzioni ABR:"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "Bitrate media (kbps):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "Livello di qualità VBR:"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "Non scrivere intestazione VBR Xing"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr "VBR/ABR"
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "Parametri frame:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "Contrassegna come coperto da copyright"
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "Contrassegna come originale"
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "Parametri ID3:"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "Forza aggiunta del tag versione 2"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "Aggiungi solo tag v1"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "Aggiungi solo tag v2"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "Tag"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "Configurazione del codificatore Vorbis"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "Livello di qualità (0 - 10):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Informazioni sul plugin Audio FLAC"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+"\n"
+"\n"
+"Codice originale di\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "Informazioni sul plugin Scorciatoie Gnome"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Plugin Scorciatoie Gnome\n"
+"Consente di controllare il lettore con i tasti di scelta rapida di Gnome.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Numero elemento"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Titolo"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Artista"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Anno"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Traccia"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Posizione nella coda"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Durata"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Percorso del file"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Nome del file"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Titolo personalizzato"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Bitrate"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Scegli colonne"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Disponibili:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Selezionate:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Aggancia a sinistra"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Aggancia a destra"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Aggancia in alto"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Aggancia in basso"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Sgancia"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Disabilita"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Apri file…"
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Apri _URL…"
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "A_ggiungi file…"
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Aggiungi U_RL…"
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "I_nformazioni su…"
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Preferenze…"
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Esci"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Riproduci"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Interro_mpi"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Ferma"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "Pre_cedente"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Successiva"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "Ripe_ti"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "C_asuale"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "N_on avanzare nella playlist"
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Ferma _dopo questo brano"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Informazioni sul _brano…"
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Salta alla _posizione…"
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Sa_lta al brano…"
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Per _numero di traccia"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Per _titolo"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Per _artista"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Per a_lbum"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Per _data di pubblicazione"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Per percorso del _file"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Per titolo _personalizzato"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Ordine in_verso"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Ordine _casuale"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "A_ggiorna"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Ri_muovi file non disponibili"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Ordina"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nuova"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Chiudi"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importa…"
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Esporta…"
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "Gestione _playlist…"
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Gestione co_da…"
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "_Alza volume"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "A_bbassa volume"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Equalizzatore"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_ffetti"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interfaccia"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Visualizzazioni"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Mostra barra dei _menu"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Mostra barra i_nformazioni"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Mostra barra di _stato"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Mostra in_testazioni di colonna"
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Scegli _colonne…"
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Sco_rri al cambiare del brano"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_File"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Riproduzione"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_Playlist"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Servizi"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Uscita"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Visualizza"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "Inserisci/rimuovi dalla _coda"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "T_aglia"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "C_opia"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Incolla"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Seleziona _tutti"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Rinomina"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Interfaccia GTK"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Buffering…"
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Errore"
+
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Chiudi"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "mono"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "stereo"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d canale"
+msgstr[1] "%d canali"
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d kbps"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "Traccia precedente"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Riproduci"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Interrompi/riprendi"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Ferma"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "Traccia successiva"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "Avanza di 5 secondi"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "Riavvolgi di 5 secondi"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "Silenzia"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Alza volume"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Abbassa volume"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Salta al file"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Mostra/nascondi finestre del lettore"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "Mostra On-screen-display"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Attiva/disattiva ripetizione"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Attiva/disattiva riproduzione casuale"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(nessuno)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"Non è consigliabile associare i pulsanti primari del mouse senza modificatori.\n"
+"\n"
+"Vuoi continuare?"
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "Associazione pulsanti del mouse"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "Configurazione plugin Tasti di scelta rapida globali"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"Premi una combinazione di tasti all'interno di un campo di testo.\n"
+"Puoi anche associare i pulsanti del mouse."
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "Tasti di scelta rapida:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>Azione:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "<b>Tasto associato:</b>"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "Informazioni sul plugin Tasti di scelta rapida globali"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+"Plugin Tasti di scelta rapida globali\n"
+"Controlla il lettore con combinazioni di tasti o tasti multimediali globali.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Hanno collaborato, tra gli altri:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span>Bryn Davies <curious@ihug.com.au>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span>Jonathan A. Davis <davis@jdhouse.org>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span>Jeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Connetti a tutte le porte jack disponibili"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Connetti solo le porte di uscita"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "Non connettere a nessuna porta"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "Configurazione del plugin jack"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Modalità di connessione:"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Abilita messaggi di debug"
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+"Driver jack per XMMS 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Port per Audacious di\n"
+"Giacomo Lozito from develia.org"
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr "Informazioni sul plugin di uscita JACK 0.17"
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Informazioni su Host LADSPA"
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Impostazioni %s"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Impostazioni Host LADSPA"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Percorsi dei moduli:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Separa più percorsi con i due punti.\n"
+"La ricerca viene effettuata in questi percorsi in aggiunta a LADSPA_PATH.\n"
+"Dopo aver aggiunto nuovi percorsi, premi Invio per ricercare nuovi plugin.</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Plugin disponibili:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Abilita"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Plugin abilitati:"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Ricerca testi in corso…"
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"Connessione a lyrics.wikia.com in corso…"
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"Non sono stati trovati testi."
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr "Informazioni su Metronomo"
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+"Un metronomo di Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"Per utilizzarlo, aggiungi un URL: tact://battiti*num/den\n"
+"p.es. tact://77 per suonare 77 battiti per minuto\n"
+"oppure tact://60*3/4 per suonare 60 bpm in misure da 3/4"
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr "Metronomo: %d bpm"
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr "Metronomo: %d bpm %d/%d"
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Informazioni su Mixer canali"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Impostazioni Mixer canali"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Canali in uscita:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "I cambiamenti avranno effetto al prossimo cambio di brano."
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "Surround"
+
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "Caricamento in corso…"
+
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Carica su dispositivo MTP"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Disconnetti dispositivo MTP"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Fermato"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious non sta riproducendo."
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Plugin di uscita Null "
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+" di Christian Birchinger <joker@netswarm.net>\n"
+"basato sul plugin per XMMS di Håvard Kvål <havardk@xmms.org>"
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr "Informazioni su Uscita Null"
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "Preferenze di uscita Null"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "Esegui in tempo reale"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. Dispositivo predefinito"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "Preferenze del plugin di uscita OSS4"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Dispositivo audio:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "Usa dispositivo alternativo:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Salva il volume tra una sessione e l'altra"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "Abilita conversioni di formato effettuate dal software OSS."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Abilita la modalità esclusiva per prevenire il missaggio virtuale."
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "Informazioni sul plugin OSS4"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "Errore OSS4"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "Predefinito (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "Configurazione del driver OSS"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Dispositivi"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "Buffering:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "Pre-buffer (percento):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "Buffering"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "Impostazioni mixer:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "Volume controlla il Master anziché il PCM"
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "Mixer"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "Informazioni sul driver OSS"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "Informazioni sul plugin di uscita PulseAudio per Audacious"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr "Informazioni sul plugin Convertitore frequenza di campionamento"
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr "Preferenze Convertitore frequenza di campionamento"
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "Mappatura frequenze:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "Tutte le altre:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "Metodo:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "Cambia password"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>Servizi</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "Nome utente:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "Password:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr "URL Scrobbler:"
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr "<b>Last.FM</b>"
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr "Scrobbler"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Plugin AudioScrobbler per Audacious\n"
+"\n"
+"Originariamente creato da Audun Hove <audun@nlc.no> e Pipian <pipian@pipian.com>\n"
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "Informazioni sul plugin Scrobbler"
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Informazioni sul plugin di uscita SDL"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Errore SDL"
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Genere"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Libreria"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Crea playlist"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Aggiungi alla playlist"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Cerca nella libreria"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Per importare la tua musica in Audacious, scegli una cartella e clicca "
+"sull'icona \"aggiorna\"."
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Attendi per favore…"
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Scegli una cartella"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "Informazioni GUI con skin"
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+"Copyright (c) 2008, di Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "_Lettore:"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Seleziona il carattere della finestra principale del lettore:"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "_Playlist:"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Seleziona il carattere della playlist:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Caratteri</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Usa caratteri bitmap (supporta solo ASCII)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Scorri titolo brano in entrambe le direzioni"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Skin</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Preferenze interfaccia"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamplificazione"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Equalizzatore di Audacious"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Preimpostazioni"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Carica preimpostazione"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Carica preimpostazione a caricamento automatico"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Carica preimpostazione equalizzatore"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Salva preimpostazione"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Salva preimpostazione a caricamento automatico"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Salva preimpostazione equalizzatore"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Elimina preimpostazione"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Elimina preimpostazione a caricamento automatico"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "surround"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Vai a %d:%-2.2d / %d:%-2.2d"
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "Volume: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "Bilanciamento: sinistra %d%%"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "Bilanciamento: centro"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "Bilanciamento: destra %d%%"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "Menu opzioni"
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "Disabilita 'Sempre in primo piano'"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Abilita 'Sempre in primo piano'"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Finestra informazioni file"
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Menu visualizzazione"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "Modalità singolo."
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "Modalità playlist."
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "La riproduzione si fermerà alla fine del brano."
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "La riproduzione non si fermerà alla fine del brano."
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "Scorri automaticamente nome del brano"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Ferma riproduzione alla fine del brano corrente"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "Picchi"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Ripeti"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Casuale"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Non avanzare nella playlist"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "Mostra lettore"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "Mostra editor della playlist"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "Mostra equalizzatore"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "Sempre in primo piano"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "Visualizza su tutti gli spazi di lavoro"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "Riavvolgi lettore"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "Riavvolgi editor della playlist"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "Riavvolgi equalizzatore"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "Analizzatore"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "Oscilloscopio"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "Spettrogramma"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "Spento"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Normale"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "Fuoco"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "Linee verticali"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "Linee"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "Barre"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "Oscilloscopio a punti"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "Oscilloscopio a linee"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "Oscilloscopio pieno"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "Ghiaccio"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Morbida"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "Molto lenta"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "Lenta"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Media"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Veloce"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "Molto veloce"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "Tempo trascorso"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "Tempo rimanente"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Interrompi"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Precedente"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Successivo"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "Visualizzazione"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "Modalità di visualizzazione"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "Modalità analizzatore"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "Modalità oscilloscopio"
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "Modalità spettrogramma"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "Modalità WindowShade VU"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "Caduta analizzatore"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "Caduta picchi"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Playlist"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nuova playlist"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "Seleziona playlist successiva"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "Seleziona playlist precedente"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Elimina playlist"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Importa playlist"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Carica un file della playlist all'interno della playlist selezionata."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Esporta playlist"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Salva la playlist selezionata."
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Aggiorna lista"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Aggiorna i metadati associati ad un elemento della playlist."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Gestione playlist"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Gestione coda"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Visualizza"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interfaccia"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Preferenze dell'interfaccia…"
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "Aggiungi indirizzo internet…"
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Aggiunge una traccia remota alla playlist."
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "Aggiungi file…"
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Aggiunge file alla playlist."
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Cerca e seleziona"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+"Cerca nella playlist e seleziona gli elementi della playlist in base a un "
+"criterio specifico."
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "Inverti selezione"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr "Inverte le voci selezionate e non selezionate."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Seleziona tutti"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Seleziona tutti gli elementi della playlist."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Deseleziona tutti"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Deseleziona tutti gli elementi della playlist."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Rimuovi tutti"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Rimuove dalla playlist tutti gli elementi."
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "Cancella coda"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr "Cancella la coda associata con questa playlist."
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "Rimuovi i file non disponibili"
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr "Rimuove dalla playlist i file non disponibili."
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "Rimuovi i duplicati"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Per titolo"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr "Rimuove dalla playlist le voci duplicate in base al titolo."
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "Per nome del file"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr "Rimuove dalla playlist le voci duplicate in base al nome del file."
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "Per percorso + nome del file"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr ""
+"Rimuove dalla playlist le voci duplicate in base al loro percorso completo."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Rimuovi deselezionati"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Rimuove dalla playlist gli elementi deselezionati."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Rimuovi selezionati"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Rimuove dalla playlist gli elementi selezionati."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Riordina casualmente la lista"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Riordina casualmente la playlist."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Inverti lista"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "Inverte la playlist."
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Ordina lista"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr "Ordina la lista per titolo."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Per album"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr "Ordina la lista per album."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Per artista"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr "Ordina la lista per artista."
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr "Ordina la lista per nome del file."
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr "Ordina la lista in base al percorso completo."
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "Per data"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr "Ordina la lista per data di modifica."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Per numero di traccia"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr "Ordina la lista per numero di traccia."
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "Ordina selezionati"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "File"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "Servizi plugin"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Visualizza dettagli traccia"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Visualizza i dettagli della traccia"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Informazioni su Audacious"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "Riproduci file"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Carica e riproduce un file"
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "Riproduci posizione"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Riproduce contenuti dalla posizione selezionata"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Servizi dei plugin"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Preferenze"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Apre la finestra delle preferenze"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Esci da Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Imposta A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Cancella A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Salta alla posizione"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Attivazione/disattivazione coda"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Attiva/disattiva l'elemento nella coda della playlist."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Copia"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Taglia"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Incolla"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "Carica"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importa"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Salva"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Elimina"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Preimpostazione"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "Preimpostazione a caricamento automatico"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "Carica preimpostazione a caricamento automatico"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "Carica preimpostazione predefinita all'interno dell'equalizzatore"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "Azzera"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "Imposta livelli della preimpostazione dell'equalizzatore a zero"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "Da file"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "Carica preimpostazione da file"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "Da un file EQF di WinAMP"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "Carica preimpostazione da un file EQF di WinAMP"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "Preimpostazioni di WinAMP"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "Imposta preimpostazioni di WinAMP"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "Salva preimpostazione a caricamento automatico"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "Salva preimpostazione predefinita"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "Su file"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "Salva preimpostazione su file"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "Su file EQF di WinAMP"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "Salva preset su un file EQF di WinAMP"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "Elimina preimpostazione a caricamento automatico"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr "Cerca elementi nella playlist attiva"
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+"Seleziona gli elementi nella playlist compilando uno o più campi. I campi "
+"utilizzano la sintassi delle espressioni regolari, senza distinzione tra "
+"maiuscole e minuscole. Se non sai come funzionano le espressioni regolari, "
+"inserisci semplicemente una porzione letterale di quello che stai cercando."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Titolo: "
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "Album: "
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "Artista: "
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "Nome del file: "
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr "Cancella la selezione precedente prima di effettuare la ricerca"
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr "Inserisci automaticamente in coda gli elementi trovati"
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr "Crea una nuova playlist con gli elementi trovati"
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr "Editor della playlist di Audacious"
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d di %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "Skin Winamp 2.x archiviata"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "Skin Winamp 2.x non archiviata"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "Impossibile creare la directory (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr "Informazioni sul plugin sndfile"
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "Informazioni su SndStretch"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "Corr. volume"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "Breve sovrapposizione"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Velocità"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "Tono"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Scala"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "SndStretch - Configurazione"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "Comando da eseguire quando Audacious inizia un nuovo brano."
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr "Comando:"
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "Comando da eseguire alla fine del brano."
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr ""
+"Comando da eseguire quando Audacious raggiunge la fine della playlist."
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+"Comando da eseguire quando cambia il titolo del brano (titoli degli stream "
+"di rete)."
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Puoi usare le seguenti stringhe di formattazione\n"
+"le quali saranno sostituite prima di richiamare il\n"
+"comando (non tutte sono utili per il comando a\n"
+"fine playlist).\n"
+"\n"
+"%F: Frequenza (in hertz)\n"
+"%c: Numero di canali\n"
+"%f: nome del file (percorso completo)\n"
+"%l: durata (in millisecondi)\n"
+"%n o %s: Nome del brano\n"
+"%r: Frequenza (in bit per secondo)\n"
+"%t: Posizione nella playlist (%02d)\n"
+"%p: Attualmente in riproduzione (1 oppure 0)\n"
+"%a: Artista\n"
+"%b: Album\n"
+"%T: Titolo della traccia"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>I parametri passati alla shell dovrebbero essere "
+"racchiusi tra virgolette. Fare diversamente costituisce un rischio per la "
+"sicurezza.</span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "Comandi"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr "Cambio brano"
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "Informazioni sul plugin Icona di stato"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+"Plugin Icona di stato\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"Questo plugin fornisce un'icona di stato, posta nell'area\n"
+"del system tray del window manager.\n"
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "Plugin Icona di stato - Preferenze"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "Menu click-destro"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "Piccolo menu di riproduzione #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "Piccolo menu di riproduzione #2"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "Azione scorrimento mouse"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "Cambia volume"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "Cambia brano in riproduzione"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Altre impostazioni"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Disabilita la finestra popup"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Chiudi nell'area di notifica (system tray)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Avanza nella playlist quando si scorre verso l'alto"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+"Plugin Stereo extra\n"
+"\n"
+"Di Johan Levin 1999."
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "Informazioni sul plugin Stereo extra"
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "Configura Stereo extra"
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr "Informazioni su Generatore toni"
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+"Generatore di toni sinusoidali di Haavard Kvaalen <havardk@xmms.org>\n"
+"Modificato da Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"Per utilizzarlo, aggiungi un URL: tone://frequenza1;frequenza2;frequenza3;…\n"
+"p.es. tone://2000;2005 per riprodurre un tono a 2000Hz e un tono a 2005Hz"
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Hz"
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr "Generatore di toni: "
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Informazioni sul plugin I/O su file"
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Informazioni sul plugin Audio Ogg Vorbis"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Plugin Ogg Vorbis della Xiph.org Foundation\n"
+"\n"
+"Codice originale di\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributi di\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visita la Xiph.org Foundation su http://www.xiph.org/\n"
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr "Informazioni su Lettore Vortex"
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+"Lettore per il formato di file Vortex di Sashnov Alexander <sashnov@ngs.ru>\n"
+"Fondato sul sorgente originale in_vtx.dll da Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Musica in formato vtx si può trovare su http://vtx.microfor.ru/music.htm\n"
+"e su altri siti musicali AY/YM.\n"
+"\n"
+"Implementazione per Audacious di Pavel Vymetalek <pvymetalek@seznam.cz>"
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr "Plugin di decodifica Wavpack %s"
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Parte del codice del plugin era di Miles Egan\n"
+"Visita il sito Wavpack su http://www.wavpack.com/\n"
+
+
diff --git a/po/ja.po b/po/ja.po
index 725f8a6..27be01f 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins HEAD\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2008-07-08 13:10+0900\n"
"Last-Translator: dai <d+po@vdr.jp>\n"
"Language-Team: Japanese <ja@li.org>\n"
@@ -22,7 +22,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, fuzzy, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -33,616 +33,55 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 Audacious team"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "MP4 AAC プレイヤプラグインã«ã¤ã„ã¦"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "プラグインã«ã¤ã„ã¦"
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"ã“ã®ãƒ—ラグイン㯠GNU LGPL ã®æ¡é …ã¨æ¡ä»¶ã®ã‚‚ã¨ã«é…布ã•ã‚Œã¦ã„ã‚‹.\n"
-"詳細㯠http://www.gnu.org/licenses/lgpl.html を見よ.\n"
-"\n"
-"ã“ã®ãƒ—ラグインã¯, copyright (C) Simon Peter ãŠã‚ˆã³ãã®ä»–ã«ã‚ˆã‚‹AdPlug ライブラ"
-"リを用ã„ã¦ã„ã‚‹.\n"
-"リンクã—ã¦ã„ã‚‹ AdPlug ライブラリã®ãƒ´ã‚¡ãƒ¼ã‚¸ãƒ§ãƒ³: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: 設定"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "OK"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "キャンセル"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "一般"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "音質"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "解åƒåº¦"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr " 8ビット"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16ビット"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "ãƒãƒ£ãƒ³ãƒãƒ«æ•°"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "モノラル"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "ステレオ"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"å¿…è¦ã§ãªã„ãªã‚‰ã°, ステレオ設定ã¯æŽ¨å¥¨ã—ã¾ã›ã‚“. OPL2 ã¯å˜ã«ãƒ¢ãƒŽãƒ©ãƒ«ãªã®ã§, サウ"
-"ンドã«ã‚¹ãƒ†ãƒ¬ã‚ªã‚¨ãƒ•ã‚§ã‚¯ãƒˆã¯ã‹ã‹ã‚Šã¾ã›ã‚“ãŒ, より CPU パワーを消費ã—ã¾ã™!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "周波数"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "æ¼”å¥"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "曲ã®çµ‚ã‚りを検出ã™ã‚‹"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"有効ãªã‚‰ã°, XMMS ã¯æ›²ã®çµ‚ã‚りを検出ã—, 曲をåœæ­¢ã—ã¦ãƒ—レイリストを進ã¿ã¾ã™. ç„¡"
-"効ãªã‚‰ã°, XMMS ã¯æ›²ã®çµ‚ã‚りを通知ã›ãšã«, 曲全体を何度も繰り返ã—ã¾ã™. "
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "フォーマット"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "フォーマットé¸æŠž"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "フォーマット"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "æ‹¡å¼µå­"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"é¸æŠžã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—ãŒèªè­˜ã•ã‚Œ, ã“ã®ãƒ—ラグインã«ã‚ˆã£ã¦å†ç”Ÿã•ã‚Œã¾ã™. é¸æŠž"
-"ã•ã‚Œã¦ã„ãªã„タイプã¯, ã“ã®ãƒ—ラグインã‹ã‚‰ã¯ç„¡è¦–ã•ã‚Œ, ä»–ã®ãƒ—ラグインã«ã‚ˆã£ã¦å†"
-"生ã•ã‚Œã¾ã™. "
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: ファイル情報"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "ファイルå"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "タイトル: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "作者: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "ファイルタイプ: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "サブソング: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "楽器: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "é †åº: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "パターン: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "曲"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "楽器å"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "曲メッセージ"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "サブソングé¸æŠž"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "é †åº: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "パターン: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "列: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "æ—©ã•: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "タイマー: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "XMMS アラームã«ã¤ã„ã¦"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS アラーム"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"特定ã®æ™‚é–“ã«æ¼”å¥ã‚’開始ã™ã‚‹ã®ã«\n"
-"用ã„られる XMMS プラグイン.\n"
-"\n"
-"å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã‚‰ã™ã¹ã¦ä»¥ä¸‹ã¸é€ã£ã¦ãã ã•ã„:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "é–‰ã˜ã‚‹"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "アラーム"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "目覚ã¾ã—ã§ã™."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "OK"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "プレイリストã®é¸æŠž"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "ã”ã‚ã‚“ãªã•ã„"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "警告"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"安全ã®ãŸã‚ã«, \"é™ã‹ã«ãªã‚‹\"時間ã¯å°‘ãªãã¨ã‚‚ 65 秒ã‚ã‚Š, 10 秒以上ãªã‘ã‚Œã°ãªã‚‰"
-"ãªã„フェーディング時間より長ããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“. ã“ã‚Œã¯åŸºæœ¬çš„ã«ã‚³ãƒ¼ãƒ‰ã®ãƒã‚°"
-"ã§ã‚ã‚Š, 真ã®ä¿®æ­£æ–¹æ³•ãŒè¦‹ã¤ã‹ã‚‹ã¾ã§ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯è¡¨ç¤ºã•ã‚Œã‚‹ã§ã—ょㆠ:)\n"
-"\n"
-"フェーディング設定ã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "ã‚ã‹ã‚Šã¾ã—ãŸ"
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "アラーム設定"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "時間"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "時"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "時"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr "分"
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "é™ã‹ã«ãªã‚‹ã¾ã§:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "アラーム(デフォルト):"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "アラームを鳴らã™æ›œæ—¥ã®é¸æŠž"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "デフォルト"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "曜日"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "ç«"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "æ°´"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "木"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "金"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "土"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "æ—¥"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "月"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "曜日"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "フェーディング"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-msgid "seconds"
-msgstr "秒"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-msgid "Volume"
-msgstr "音é‡"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr "ç¾åœ¨ã®å€¤"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "ç¾åœ¨ã®å‡ºåŠ›éŸ³é‡ã«ãƒªã‚»ãƒƒãƒˆ"
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr "開始"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "最終"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "追加コマンド"
-
-#: src/alarm/interface.c:1253
-msgid "enable"
-msgstr "有効"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr "プレイリスト (オプショナル)"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "å‚ç…§..."
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr "リマインダ"
-
-#: src/alarm/interface.c:1312
-msgid "Use reminder"
-msgstr "リマインダを使ã†"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-msgid "Options"
-msgstr "オプション"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "オプションã®æ„味"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-"\n"
-"時間\n"
-" アラーム: \n"
-" アラームを鳴らã™æ™‚é–“ã§ã™.\n"
-"\n"
-" é™ã‹ã«ãªã‚‹ã¾ã§: \n"
-" 指定ã®æ™‚é–“ãŒçµŒéŽã—ãŸã‚‰ã‚¢ãƒ©ãƒ¼ãƒ ã‚’åœæ­¢ã—ã¾ã™.\n"
-" (目覚ã—ダイアログãŒé–‰ã˜ã‚‰ã‚Œã¦ã„ãªã‘ã‚Œã°)\n"
-"\n"
-"\n"
-"曜日\n"
-" 曜日:\n"
-" アラームを有効ã«ã™ã‚‹æ›œæ—¥ã‚’é¸æŠžã—ã¾ã™.\n"
-"\n"
-" 時間:\n"
-" å„曜日ã®ã‚¢ãƒ©ãƒ¼ãƒ ã®æ™‚é–“ã‚’é¸æŠžã—ã¾ã™.\n"
-" ã‚ã‚‹ã„ã¯ãƒˆã‚°ãƒ«ãƒœã‚¿ãƒ³ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ™‚é–“ã‚’\n"
-" 使ã†ã‹é¸æŠžã—ã¾ã™.\n"
-"\n"
-"\n"
-"音é‡\n"
-" フェーディング: \n"
-" 指定ã®æ™‚é–“ã‚’ã‹ã‘ã¦, 指定ã®éŸ³é‡ã¾ã§\n"
-" å¾ã€…ã«éŸ³é‡ã‚’上ã’ã¦ã„ãã¾ã™.\n"
-"\n"
-" 開始: \n"
-" ã“ã®éŸ³é‡ã‹ã‚‰ãƒ•ã‚§ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’開始ã—ã¾ã™.\n"
-"\n"
-" 最終: \n"
-" ã“ã®éŸ³é‡ã§ãƒ•ã‚§ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’終ãˆã¾ã™.\n"
-" ã‚‚ã—フェーディング時間㌠0 ãªã‚‰ã°,\n"
-" ã“ã®éŸ³é‡ã§æ¼”å¥ãŒé–‹å§‹ã•ã‚Œã¾ã™.\n"
-"\n"
-"\n"
-"オプション:\n"
-" 追加コマンド:\n"
-" アラームã®æ™‚é–“ã«æŒ‡å®šã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™.\n"
-"\n"
-" プレイリスト: \n"
-" 曲を演å¥ã™ã‚‹ãŸã‚ã®ãƒ—レイリストを読ã¿è¾¼ã¿ã¾ã™\n"
-" (.m3u æ‹¡å¼µå­ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“). \n"
-" プレイリストãŒæŒ‡å®šã•ã‚Œãªã‘ã‚Œã°, \n"
-" ç¾åœ¨ã®ãƒªã‚¹ãƒˆã®æ›²ãŒç”¨ã„られã¾ã™.\n"
-" mp3 ã‹ ogg ストリーム㮠URL も指定ã§ãã¾ã™ãŒ,\n"
-" URL ã‹ã‚‰ã®ãƒ—レイリスト読ã¿è¾¼ã¿ã¯\n"
-" ç¾åœ¨ã® xmms ã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“.\n"
-"\n"
-" リマインダ:\n"
-" アラームをåœæ­¢ã™ã‚‹éš›ã«ãƒªãƒžã‚¤ãƒ³ãƒ€ã‚’表示ã—ã¾ã™.\n"
-" ã“れを利用ã™ã‚‹ã«ã¯ãƒœãƒƒã‚¯ã‚¹å†…ã«ãƒªãƒžã‚¤ãƒ³ãƒ€ã‚’書ã\n"
-" トグルボタンを有効ã«ã—ã¾ã™.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "ヘルプ"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr "今日ã®ãƒªãƒžã‚¤ãƒ³ãƒ€ã¯.."
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr "ã‚ã‚ŠãŒã¨ã†"
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "デフォルト PCM デãƒã‚¤ã‚¹ (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "デフォルト PCM デãƒã‚¤ã‚¹ (%s)"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "ステータスアイコンプラグイン - 設定"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "ミキサデãƒã‚¤ã‚¹:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "ミキサデãƒã‚¤ã‚¹:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "ミキサデãƒã‚¤ã‚¹:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "JACK 出力プラグイン 0.17 ã«ã¤ã„ã¦"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
#, fuzzy
msgid "ALSA error"
msgstr "エラー"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -672,11 +111,11 @@ msgstr ""
"㟠MIDI イベントã¯ç›´æŽ¥æ¼”å¥ã•ã‚Œã‚‹ã§ã—ょã†.\n"
"ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¯ Giacomo Lozito ã«ã‚ˆã£ã¦æ›¸ã‹ã‚Œã¾ã—ãŸ."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FluidSynth ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -692,83 +131,43 @@ msgstr ""
"ã‚ŒãŸå‡ºåŠ›ãƒ—ラグインã«ã‚ˆã£ã¦å‡¦ç†ã•ã‚Œã¾ã™.\n"
"ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¯ Giacomo Lozito ã«ã‚ˆã£ã¦æ›¸ã‹ã‚Œã¾ã—ãŸ."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰è¨­å®š"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "ãƒãƒ¼ãƒˆ"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "クライアントå"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "ãƒãƒ¼ãƒˆå"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSA 出力ãƒãƒ¼ãƒˆ"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "サウンドカード: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "ミキサコントロール:"
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "ミキサ設定"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* ALSA 出力ãƒãƒ¼ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„ *\n"
-"MIDI イベントã¯ã“ã“ã§é¸æŠžã•ã‚ŒãŸãƒãƒ¼ãƒˆã«é€ã‚‰ã‚Œã¾ã™. 例ãˆã°, ã‚ãªãŸã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ª"
-"カードãŒãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚·ãƒ³ã‚»ã‚’æä¾›ã—, ãれ㧠MIDI ã‚’æ¼”å¥ã—ãŸã„ãªã‚‰ã°, ウェーブ"
-"テーブルシンセサイザーãƒãƒ¼ãƒˆã‚’é¸ã¶ã¨ã‚ˆã„ã§ã—ょã†."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* ALSA ミキサカードをé¸æŠžã—ã¦ãã ã•ã„ *\n"
-"ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¯ ALSA を直接通ã—ã¦å‡ºåŠ›ã—ã¾ã™ã®ã§, プレイヤã®ã‚¨ãƒ•ã‚§ã‚¯ãƒˆã‚„出"
-"力プラグインã¯ä½¿ç”¨ã—ã¾ã›ã‚“. å†ç”Ÿä¸­, プレイヤã®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚¹ãƒ©ã‚¤ãƒ€ã¯ã“ã“ã§é¸æŠž"
-"ã—ãŸãƒŸã‚­ã‚µã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’æ“作ã—ã¾ã™. ウェーブテーブルシンセサイザーãƒãƒ¼ãƒˆã‚’"
-"使ã£ã¦ã„ã‚‹ãªã‚‰ã°, ã“ã“ã§ã‚·ãƒ³ã‚»ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’é¸ã¶ã¨ã‚ˆã„ã§ã—ょã†."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* ALSA ミキサコントロールをé¸æŠžã—ã¦ãã ã•ã„ *\n"
-"ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¯ ALSA を直接通ã—ã¦å‡ºåŠ›ã—ã¾ã™ã®ã§, プレイヤã®ã‚¨ãƒ•ã‚§ã‚¯ãƒˆã‚„出"
-"力プラグインã¯ä½¿ç”¨ã—ã¾ã›ã‚“. å†ç”Ÿä¸­, プレイヤã®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚¹ãƒ©ã‚¤ãƒ€ã¯ã“ã“ã§é¸æŠž"
-"ã—ãŸãƒŸã‚­ã‚µã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’æ“作ã—ã¾ã™. ウェーブテーブルシンセサイザーãƒãƒ¼ãƒˆã‚’"
-"使ã£ã¦ã„ã‚‹ãªã‚‰ã°, ã“ã“ã§ã‚·ãƒ³ã‚»ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’é¸ã¶ã¨ã‚ˆã„ã§ã—ょã†."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒèª­ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ã‹æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -776,149 +175,51 @@ msgstr ""
"<span size=\"smaller\">ALSA\n"
"ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰æƒ…å ±"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-PLUG 設定"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰é¸æŠž"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "有効ãªãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "æ¼”å¥è¨­å®š"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "トランスãƒãƒ¼ã‚º: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "ドラムシフト: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "高度ãªè¨­å®š"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "プレイリスト㮠MIDI ファイルã®é•·ã•ã‚’å‰ã‚‚ã£ã¦è¨ˆç®—ã™ã‚‹"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "MIDI ファイルã‹ã‚‰ã‚³ãƒ¡ãƒ³ãƒˆã‚’抽出ã™ã‚‹ (å¯èƒ½ãªã‚‰ã°)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "MIDI ファイルã‹ã‚‰æ­Œè©žã‚’抽出ã™ã‚‹ (å¯èƒ½ãªã‚‰ã°)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„ *\n"
-"AMIDI-Plug ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å½¢å¼ã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¨å‹•ä½œã—ã¾ã™. ã“ã“ã§ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é¸"
-"択ã—ã¦ãã ã•ã„. ãã‚Œã«ã‚ˆã£ã¦, MIDI イベントã¯å–り扱ã‚ã‚Œ, æ¼”å¥ã•ã‚Œã¾ã™.\n"
-"ã‚ãªãŸã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚«ãƒ¼ãƒ‰ã«ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚·ãƒ³ã‚»ã‚µã‚¤ã‚¶ãƒ¼ãŒã¤ã„ã¦ã„ã¦, ALSA ãŒãã‚Œ"
-"をサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ãªã‚‰ã°, ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’使ã†ã¨ã‚ˆã„ã§ã—ょã†.ã“ã‚Œã¯ã‚½ãƒ•ãƒˆ"
-"ウェアシンセや外部デãƒã‚¤ã‚¹ã‚’å«ã‚€, ALSA シーケンサã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã‚’æä¾›ã™"
-"ã‚‹ã‚らゆるもã®ã‚’用ã„ã‚‹ã“ã¨ãŒã§ãã¾ã™.\n"
-"ソフトウェアシンセサイザーを当ã¦ã«ã—ãŸã„, ãŠã‚ˆã³ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’プレイヤã®ã‚¨ãƒ•ã‚§"
-"クトや出力プラグインã«é€šã—ãŸã„ãªã‚‰ã°, 有用㪠FluidSynth ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’用ã„ã‚‹"
-"ã¨ã‚ˆã„ã§ã—ょã†.\n"
-"ãã‚Œãžã‚Œã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ç‰¹å®šã®æƒ…報を読むã«ã¯æƒ…報ボタンを押ã—ã¦ãã ã•ã„."
-
-#: src/amidi-plug/i_configure-ap.c:331
-#, fuzzy
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* トランスãƒãƒ¼ã‚ºæ©Ÿèƒ½ *\n"
-"ã“ã®ã‚ªãƒ—ション㯠MIDI ファイルを, å…¨ã¦ã®éŸ³(パーカッションã®ãŸã‚ã«äºˆç´„ã•ã‚ŒãŸ "
-"MIDI ãƒãƒ£ãƒ³ãƒãƒ« 10 を除ã)ã®åŠéŸ³ã‚’è¦æ±‚ã•ã‚ŒãŸæ•°ã§å¤‰åŒ–ã•ã›ãŸç•°ãªã‚‹ã‚­ãƒ¼ã§, トラ"
-"ンスãƒãƒ¼ã‚ºã—ã¦æ¼”å¥ã§ãるよã†ã«ã—ã¾ã™.ä»–ã®æ¥½å™¨ã‚’加ãˆã¦æ¼”å¥ã•ã›ãŸã„ãªã‚‰ã°éžå¸¸ã«"
-"有用ã§ã™."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* ドラムシフト機能 *\n"
-"ã“ã®ã‚ªãƒ—ションã¯, MIDI ãƒãƒ£ãƒ³ãƒãƒ« 10 (標準ã®ãƒ‘ーカッションãƒãƒ£ãƒ³ãƒãƒ«) ã®åŠéŸ³"
-"ã‚’è¦æ±‚ã•ã‚ŒãŸæ•°ã§å¤‰åŒ–ã•ã›ã‚‹ã‚ˆã†ã«ã—ã¾ã™. MIDI ã®æ¼”å¥ä¸­ã«ç•°ãªã‚‹ãƒ‰ãƒ©ãƒ ã‚»ãƒƒãƒˆã¨"
-"パーカッションãŒç”¨ã„られるã“ã¨ã«ã‚ˆã‚Š, ã“ã®å€¤ã‚’用ã„ã¦æ¼”å¥ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Š, パー"
-"カッションã®éŸ³ã‚’高ã‚ã‚‹ (ã¾ãŸã¯å¼±ã‚ã‚‹, ã¾ãŸã¯å¤‰ãˆã‚‹) ã“ã¨ãŒã§ãã¾ã™."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* MIDI é•·ã‚’å‰ã‚‚ã£ã¦è¨ˆç®— *\n"
-"ã“ã®ã‚ªãƒ—ションãŒæœ‰åŠ¹ãªã‚‰ã°, AMIDI-Plug 㯠MIDI ファイルã®é•·ã•ã‚’, MIDI ファイ"
-"ルãŒæ¼”å¥ã•ã‚Œã‚ˆã†ã¨ã—ãŸã¨ãã ã‘ã§ã¯ãªã, プレイヤãŒè¦æ±‚ã—ãŸã¨ãã™ãã«è¨ˆç®—ã—ã¾"
-"ã™. 例ãˆã°, MIDI ファイルãŒãƒ—レイリスト中ã«è¿½åŠ ã•ã‚ŒãŸç›´å¾Œã« MIDI 長を計算ã—ã¾"
-"ã™. (多ãã® MIDI ファイルãŒè¿½åŠ ã•ã‚Œã¦ã„ã‚‹ã¨ã) プレイリストã®èª­ã¿è¾¼ã¿ã‚’æ—©ãã—"
-"ãŸã„ãªã‚‰ã°, ã“ã®ã‚ªãƒ—ションを無効ã«ã—ã¾ã™.プレイリストを読ã¿è¾¼ã‚“ã ç›´å¾Œã«ã‚ˆã‚Šå¤š"
-"ãã®æƒ…報を表示ã•ã›ãŸã„ãªã‚‰ã°, 有効ã«ã—ã¾ã™. "
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* MIDI ファイルã‹ã‚‰ã‚³ãƒ¡ãƒ³ãƒˆã‚’抽出 *\n"
-"MIDI ファイルã¯ãƒ†ã‚­ã‚¹ãƒˆã‚³ãƒ¡ãƒ³ãƒˆ(作者, 著作権情報, 楽譜ãªã©)ã‚’å«ã‚“ã§ã„ã‚‹ã“ã¨ãŒ"
-"ã‚ã‚Šã¾ã™. ã“ã®ã‚ªãƒ—ションãŒæœ‰åŠ¹ãªã‚‰ã°, AMIDI-Plug ã¯ã‚³ãƒ¡ãƒ³ãƒˆã‚’抽出ã—, ファイル"
-"情報ダイアログ内ã«è¡¨ç¤ºã—ã¾ã™ (å¯èƒ½ãªã‚‰ã°)."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* MIDI ファイルã‹ã‚‰æ­Œè©žã‚’抽出 *\n"
-"MIDI ファイルã¯æ­Œè©žã‚’å«ã‚“ã§ã„ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™. ã“ã®ã‚ªãƒ—ションãŒæœ‰åŠ¹ãªã‚‰ã°, "
-"AMIDI-Plug ã¯æ­Œè©žã‚’抽出ã—, ファイル情報ダイアログ内ã«è¡¨ç¤ºã—ã¾ã™ (å¯èƒ½ãªã‚‰ã°)."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -926,231 +227,113 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - ファイルé¸æŠž"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - 設定"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - サウンドフォント ファイルã®é¸æŠž"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "FLUIDSYNTH ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰è¨­å®š"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "サウンドフォント設定"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "ファイルå"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "サイズ (ãƒã‚¤ãƒˆ)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "プレイヤ起動時㫠SF を読ã¿è¾¼ã‚€"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "MIDI ファイルã®æœ€åˆã®æ¼”å¥æ™‚ã« SF を読ã¿è¾¼ã‚€"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "シンセサイザ設定"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "ゲイン"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "デフォルトを使用"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "値:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "ãƒãƒªãƒ•ã‚©ãƒ‹ãƒ¼"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "リãƒãƒ¼ãƒ–"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "ã¯ã„"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "ã„ã„ãˆ"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "コーラス"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "サンプリングレート"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "カスタム "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* サウンドフォント ファイルã®é¸æŠž *\n"
-"FluidSynth 㧠MIDI ã‚’æ¼”å¥ã™ã‚‹ã«ã¯, ã“ã“ã§å°‘ãªãã¨ã‚‚1ã¤ã®æœ‰åŠ¹ãªã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©ãƒ³"
-"ト ファイルを絶対パスã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™. 読ã¿è¾¼ã¿é †åºã¯ä¸Š(å…ˆ)ã‹ã‚‰ä¸‹(後)"
-"ã«ãªã‚Šã¾ã™."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* サウンドフォントをプレイヤ起動時ã«èª­ã¿è¾¼ã‚€ *\n"
-"システムã®é€Ÿã•ã«ã‚ˆã‚Šã¾ã™ãŒ, FluidSynth ã§ã®ã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©ãƒ³ãƒˆã®èª­ã¿è¾¼ã¿ã«ã¯æ•°åˆ†"
-"ã‹ã‹ã‚Šã¾ã™. ã“ã‚Œã¯ãƒ—レイヤã®èµ·å‹•æ™‚ã‹, 最åˆã® MIDI ファイルãŒæ¼”å¥ã•ã‚Œã‚‹å‰ã«ä¸€"
-"度ã ã‘è¡Œã‚ã‚Œã¾ã™. MIDI ファイルをè´ãã“ã¨ã ã‘ã«ãƒ—レイヤを使ã†ã®ã§ãªã‘ã‚Œã°, 後"
-"者をé¸æŠžã™ã‚‹ã®ãŒã‚ˆã„ã§ã—ょã†. (サウンドフォントã¯, ãã‚ŒãŒå¤‰æ›´ã•ãˆã‚‹ã‹ãƒãƒƒã‚¯ã‚¨"
-"ンドãŒå–り外ã•ã‚Œã‚‹ã¾ã§, 読ã¿è¾¼ã¾ã‚ŒãŸã¾ã¾ã§ã™). "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* サウンドフォントを最åˆã® MIDI ファイル演å¥æ™‚ã«èª­ã¿è¾¼ã‚€ *\n"
-"システムã®é€Ÿã•ã«ã‚ˆã‚Šã¾ã™ãŒ, FluidSynth ã§ã®ã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©ãƒ³ãƒˆã®èª­ã¿è¾¼ã¿ã«ã¯æ•°åˆ†"
-"ã‹ã‹ã‚Šã¾ã™. ã“ã‚Œã¯ãƒ—レイヤã®èµ·å‹•æ™‚ã‹, 最åˆã® MIDI ファイルãŒæ¼”å¥ã•ã‚Œã‚‹å‰ã«ä¸€"
-"度ã ã‘è¡Œã‚ã‚Œã¾ã™. MIDI ファイルをè´ãã“ã¨ã ã‘ã«ãƒ—レイヤを使ã†ã®ã§ãªã‘ã‚Œã°, 後"
-"者をé¸æŠžã™ã‚‹ã®ãŒã‚ˆã„ã§ã—ょã†. (サウンドフォントã¯, ãã‚ŒãŒå¤‰æ›´ã•ãˆã‚‹ã‹ãƒãƒƒã‚¯ã‚¨"
-"ンドãŒå–り外ã•ã‚Œã‚‹ã¾ã§, 読ã¿è¾¼ã¾ã‚ŒãŸã¾ã¾ã§ã™). "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* シンセサイザーゲイン *\n"
-"FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: ゲインã¯ã‚·ãƒ³ã‚»ã‚µã‚¤ã‚¶ãƒ¼ã®æœ€å¾Œã‹ãƒžã‚¹ã‚¿å‡ºåŠ›ã«é©ç”¨ã•ã‚Œã¾"
-"ã™. ランダム㪠MIDI ファイルãŒæ¼”å¥ã•ã‚Œã‚‹ã¨ãã«, 出力ã®é£½å’Œã‚’é¿ã‘ã‚‹ãŸã‚, デ"
-"フォルトã§ã¯ä½Žã„値ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™. "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* シンセサイザーãƒãƒªãƒ•ã‚©ãƒ‹ãƒ¼ *\n"
-"FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: ãƒãƒªãƒ•ã‚©ãƒ‹ãƒ¼ã¯ã©ã‚Œã ã‘ã®éŸ³å£°ãŒä¸¦è¡Œã«æ¼”å¥ã•ã‚Œã‚‹ã‹ã‚’定義"
-"ã—ã¾ã™. 音声ã®æ•°ã¯, åŒæ™‚ã«æ¼”å¥ã•ã‚Œã‚‹éŸ³ã®æ•°ã¨åŒã˜ã§ã‚ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“. 実際"
-"ã¯, ã‚る音ãŒç‰¹å®šã® MIDI ãƒãƒ£ãƒ³ãƒãƒ«ã§é³´ã‚‰ã•ã‚ŒãŸã¨ã, ãã®ãƒãƒ£ãƒ³ãƒãƒ«ã®ãƒ—リセッ"
-"トã¯, 例ãˆã°, 一ã¤ã¯å·¦ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒãƒ£ãƒ³ãƒãƒ«ã«, 一ã¤ã¯å³ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒãƒ£ãƒ³ãƒ"
-"ルã«, ã„ãã¤ã‹ã®éŸ³å£°ã‚’生æˆã—ã¾ã™. 生æˆã•ã‚ŒãŸéŸ³å£°ã®æ•°ã¯, æ¼”å¥ã•ã‚ŒãŸéŸ³ã®é«˜ã•ã¨"
-"キーã«å¯¾å¿œã—ã¦ã„る楽器ã®æ•°ã«ä¾å­˜ã—ã¾ã™. "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* シンセサイザーリãƒãƒ¼ãƒ– *\n"
-"FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: \"ã¯ã„\" ã«è¨­å®šã™ã‚‹ã¨ãƒªãƒãƒ¼ãƒ–エフェクトモジュールãŒæœ‰"
-"効ã«ãªã‚Šã¾ã™. リãƒãƒ¼ãƒ–モジュールãŒæœ‰åŠ¹ãªã¨ãã¯, 多数ã®ã‚·ã‚°ãƒŠãƒ«ãŒã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©"
-"ントã§å®šç¾©ã•ã‚ŒãŸ \"リãƒãƒ¼ãƒ– センド\" ジェãƒãƒ¬ãƒ¼ã‚¿ã«ä¾å­˜ã—ã¦ã„るリãƒãƒ¼ãƒ–モ"
-"ジュールã«é€ã‚‰ã‚Œã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„. "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* シンセサイザーコーラス *\n"
-"FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: \"ã¯ã„\" ã«è¨­å®šã™ã‚‹ã¨ã‚³ãƒ¼ãƒ©ã‚¹ã‚¨ãƒ•ã‚§ã‚¯ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæœ‰"
-"効ã«ãªã‚Šã¾ã™. コーラスモジュールãŒæœ‰åŠ¹ãªã¨ãã¯, 多数ã®ã‚·ã‚°ãƒŠãƒ«ãŒã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©"
-"ントã§å®šç¾©ã•ã‚ŒãŸ \"コーラス センド\" ジェãƒãƒ¬ãƒ¼ã‚¿ã«ä¾å­˜ã—ã¦ã„るコーラスモ"
-"ジュールã«é€ã‚‰ã‚Œã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„. "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-#, fuzzy
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* シンセサイザーサンプリングレート *\n"
-"シンセサイザーã§ç”Ÿæˆã•ã‚ŒãŸã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã®ã‚µãƒ³ãƒ—リングレートã§ã™. "
-"22050Hz-96000Hz ã®é–“ã§ã‚«ã‚¹ã‚¿ãƒ å€¤ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™.\n"
-"注æ„: デフォルトã®ãƒãƒƒãƒ•ã‚¡ãƒ‘ラメータ㯠44100Hz ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™. サンプリン"
-"グレートを変更ã—ãŸã‚‰, よã„音質を得るãŸã‚ã«, ãƒãƒƒãƒ•ã‚¡ãƒ‘ラメータã®ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°"
-"ãŒå¿…è¦ã«ãªã‚Šã¾ã™. "
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒèª­ã¿è¾¼ã¾ã‚Œã¦ã„ãªã„ã‹æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1174,8 +357,7 @@ msgstr ""
"<span size=\"smaller\">TiMidity\n"
"ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "åå‰:"
@@ -1347,119 +529,119 @@ msgstr "æ¼”å¥å†é–‹"
msgid "Triggers OSD when playback is unpaused."
msgstr "æ¼”å¥ãŒå†é–‹ã•ã‚ŒãŸã‚‰ OSD ãŒå‹•ä½œã—ã¾ã™."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "ä½ç½®"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "相対 X オフセット:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "相対 Y オフセット:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "最大 OSD 幅:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "マルãƒãƒ¢ãƒ‹ã‚¿ オプション"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "OSD を表示ã™ã‚‹ãƒ¢ãƒ‹ã‚¿:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "å…¨ã¦ã®ãƒ¢ãƒ‹ã‚¿"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "モニタ %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "タイミング (ミリ秒)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "表示:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "フェードイン:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "フェードアウト:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "フォント"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "フォント %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "å½±"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "国際化"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "aosd ã§ã¯ãƒ†ã‚­ã‚¹ãƒˆã® UTF-8 変æ›ã‚’無効ã«ã™ã‚‹"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "スキンファイルé¸æŠž"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "æ画形å¼"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "色"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "色 %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "カスタムスキン"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "スキンファイル:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr "å‚ç…§"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "トリガー有効"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "イベント"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "Composite マãƒãƒ¼ã‚¸ãƒ£ãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸ"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1469,73 +651,73 @@ msgstr ""
"動作ã•ã›ã¦ã„ã‚‹ã‹ã‚ã‹ã‚‰ãªã‘ã‚Œã°, Composite マãƒãƒ¼ã‚¸ãƒ£ã‚’有効ã«ã—ã¦ãã ã•ã„. ã"
"ã†ã—ãªã‘れ㰠OSD ã¯æ­£å¸¸ã«å‹•ä½œã—ãªã„ã§ã—ょã†."
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "Composite マãƒãƒ¼ã‚¸ãƒ£ã¯å½ã®é€æ˜ŽåŒ–ã«ã¯å¿…è¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "é€æ˜ŽåŒ–"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "å½ã®é€æ˜ŽåŒ–"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "真ã®é€æ˜ŽåŒ– (X Composite æ‹¡å¼µãŒå¿…è¦)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "Composite æ‹¡å¼µãŒèª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã›ã‚“"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "Composite æ‹¡å¼µãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - 設定"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "テスト"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "ä½ç½®"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "アニメーション"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "文字"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "装飾"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "トリガー"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr "ãã®ä»–"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Audacious OSD ã«ã¤ã„ã¦"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1543,7 +725,7 @@ msgstr ""
"\n"
"Audacious OSD "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1565,133 +747,6 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-#, fuzzy
-msgid "Available Headsets"
-msgstr "有効ãªãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"
-
-#: src/bluetooth/gui.c:224
-#, fuzzy
-msgid "Current Headset"
-msgstr "ç¾åœ¨ã®å€¤"
-
-#: src/bluetooth/gui.c:227
-#, fuzzy
-msgid "_Refresh"
-msgstr "リフレッシュレート"
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "接続"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "é–‰ã˜ã‚‹"
-
-#: src/bluetooth/gui.c:274
-#, fuzzy
-msgid "Class"
-msgstr "é–‰ã˜ã‚‹"
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-#, fuzzy
-msgid "Rescan"
-msgstr "CD ã‚’å†ã‚¹ã‚­ãƒ£ãƒ³"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "æ¼”å¥"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "ブラースコープ: 色ã®é¸æŠž"
@@ -1700,12 +755,12 @@ msgstr "ブラースコープ: 色ã®é¸æŠž"
msgid "Options:"
msgstr "オプション:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "FLAC オーディオプラグインã«ã¤ã„ã¦"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
#, fuzzy
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
@@ -1730,128 +785,163 @@ msgstr ""
"\n"
"ã“れ㯠Google Summer of Code 2007 ã®ãƒ—ロジェクトã§ã—ãŸ."
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+#, fuzzy
+msgid "Audio CD"
+msgstr "オーディオ"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "CD オーディオプラグインã®è¨­å®š"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "ディジタルオーディオ抽出"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "タイトル情報"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
#, fuzzy
msgid "Disc speed:"
msgstr "クロック速度:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "有効ãªã‚‰ã° cd-text を使ã†"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "有効ãªã‚‰ã° CDDB を使ã†"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "サーãƒ: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "パス: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "ãƒãƒ¼ãƒˆç•ªå·: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "CDDBP ã®ä»£ã‚ã‚Šã« HTTP を使ã†"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "デフォルトデãƒã‚¤ã‚¹ã‚’上書ãã™ã‚‹: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "OK"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "æ¼”å¥"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "CD を追加"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "エクストラステレオプラグインã«ã¤ã„ã¦"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
#, fuzzy
msgid "Dynamic Range Compressor Preferences"
msgstr "オーディオ圧縮 設定"
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "音é‡ã®å¤‰æ›´"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "エフェクトã®å¼·ã•:"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
#, fuzzy
msgid "Game Console Music Decoder"
msgstr "コンソールミュージックデコーダ"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "一般"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "æ¼”å¥"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "ベース:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr "秒"
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "トリãƒãƒ«:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr "デフォルトã®æ›²ã®é•·ã•:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr "リサンプリング"
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr "オーディオリサンプリングを有効ã«ã™ã‚‹"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr "リサンプリングレート:"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr "SPC ã‚¿ã‚°ã‹ã‚‰ã®é•·ã•ã‚’無視ã™ã‚‹"
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr "リãƒãƒ¼ãƒ–を増やã™"
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1879,31 +969,31 @@ msgstr ""
"Audacious ã®å®Ÿè£…㯠William Pitcock <nenolod@nenolod.net> ã¨\n"
"Shay Green <hotpop.com@blargg> ã«ã‚ˆã‚Šã¾ã™."
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "Scrobbler プラグインã«ã¤ã„ã¦"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
#, fuzzy
msgid "Crossfade Preferences"
msgstr "設定"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "ModPlug 設定"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1911,20 +1001,24 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
msgid "Configure Crystalizer"
msgstr "Crystalizer ã®è¨­å®š"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr "エフェクトã®å¼·ã•:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "é©ç”¨"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1936,413 +1030,52 @@ msgstr ""
"\n"
"サラウンドエコー㯠1999 å¹´ Carl van Schaik ã«ã‚ˆã‚‹"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "エコー プラグインã«ã¤ã„ã¦"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "エコー設定"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "é…延: (ミリ秒)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr "フィードãƒãƒƒã‚¯: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "音é‡: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "æ¼”å¥->開始"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "æ¼”å¥->åœæ­¢"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "æ¼”å¥->一時åœæ­¢"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "æ¼”å¥->å‰ã®æ›²"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "æ¼”å¥->次ã®æ›²"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "æ¼”å¥->イジェクト"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "æ¼”å¥->リピート"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "æ¼”å¥->シャッフル"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "音é‡->5上ã’ã‚‹"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "音é‡->5下ã’ã‚‹"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "音é‡->10上ã’ã‚‹"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "音é‡->10下ã’ã‚‹"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "音é‡->ミュート"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "ウィンドウ->メイン"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "ウィンドウ->プレイリスト"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "ウィンドウ->イコライザー"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "ウィンドウ->ファイルã¸ã‚¸ãƒ£ãƒ³ãƒ—"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’é–‹ã‘ã¾ã›ã‚“, ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’スキップ"
-"ã—ã¾ã™; ファイルãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã¨èª­ã¿è¾¼ã¿ãƒ‘ーミッションãŒã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•"
-"ã„\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« %s ã® io_channel を作æˆã§ãã¾ã›ã‚“,ã“ã®"
-"デãƒã‚¤ã‚¹ã‚’スキップã—ã¾ã™\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: /proc/bus/input/devices ã‚’é–‹ã‘ã¾ã›ã‚“, イベントデãƒã‚¤ã‚¹ã®"
-"自動検出ã¯å‹•ä½œã—ã¾ã›ã‚“.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: /proc/bus/input/ デãƒã‚¤ã‚¹ã® io_channel ã‚’é–‹ã‘ã¾ã›ã‚“, イ"
-"ベントデãƒã‚¤ã‚¹ã®è‡ªå‹•æ¤œå‡ºã¯å‹•ä½œã—ã¾ã›ã‚“.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: /proc/bus/input/ デãƒã‚¤ã‚¹ã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾"
-"ã—ãŸ, イベントデãƒã‚¤ã‚¹ã®è‡ªå‹•æ¤œå‡ºã¯å‹•ä½œã—ã¾ã›ã‚“.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: デãƒã‚¤ã‚¹ %s ㌠/dev/input ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“, スキップã—ã¾"
-"ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: コンフィグファイル %s ãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“, デフォルト設定ãŒ"
-"用ã„られã¾ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: デãƒã‚¤ã‚¹ \"%s\" ã®ã‚³ãƒ³ãƒ•ã‚£ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã®æƒ…å ±ãŒä¸å®Œå…¨ã§ã™, "
-"スキップã—ã¾ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã® is_active 値ãŒå–å¾—ã§ãã¾ã›ã‚“, "
-"スキップã—ã¾ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: ローカルディレクトリ %s ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“, 設定ã¯ä¿å­˜"
-"ã•ã‚Œã¾ã›ã‚“.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã®ãƒ•ã‚¡ã‚¤ãƒ«åãŒå–å¾—ã§ãã¾ã›ã‚“, ス"
-"キップã—ã¾ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã® phys 値ãŒå–å¾—ã§ãã¾ã›ã‚“, スキッ"
-"プã—ã¾ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã® is_custom 値ãŒå–å¾—ã§ãã¾ã›ã‚“, "
-"スキップã—ã¾ã™.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã®äºˆæœŸã›ã¬å€¤ã§ã™, スキップã—ã¾"
-"ã™.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "曲ã®çµ‚ã‚りを検出ã™ã‚‹"
-
-#: src/evdev-plug/ed_ui.c:217
-#, fuzzy
-msgid "Custom"
-msgstr "カスタム "
-
-#: src/evdev-plug/ed_ui.c:223
-#, fuzzy
-msgid "Not Detected"
-msgstr "é¸æŠžç¯„囲ã®ã‚½ãƒ¼ãƒˆ"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "情報"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"デãƒã‚¤ã‚¹ãŒæ¤œå‡ºã•ã‚Œã¦ã„ãªã„ãŸã‚, ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒé–‹ã‘ã¾ã›ã‚“.\n"
-"デãƒã‚¤ã‚¹ãŒæ­£ã—ã接続ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "エラー"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"é¸æŠžã•ã‚ŒãŸãƒ‡ãƒã‚¤ã‚¹ãŒé–‹ã‘ã¾ã›ã‚“.\n"
-"デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿ãƒ‘ーミッションを確èªã—ã¦ãã ã•ã„."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - カスタムデãƒã‚¤ã‚¹ã®è¿½åŠ "
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug ã¯, システムã§æœ‰åŠ¹ãªã‚¤ãƒ™ãƒ³ãƒˆãƒ‡ãƒã‚¤ã‚¹ã®æƒ…報を自動的ã«æ¤œå‡ºã—ã¦æ›´æ–°ã—"
-"よã†ã¨ã—ã¾ã™.\n"
-"ã—ã‹ã—, システムã§è‡ªå‹•æ¤œå‡ºãŒå‹•ä½œã—ãªã„, ã‚ã‚‹ã„ã¯ã‚¤ãƒ™ãƒ³ãƒˆãƒ‡ãƒã‚¤ã‚¹ãŒéžæ¨™æº–ãªä½"
-"ç½®ã«ã‚ã‚‹å ´åˆ(ç¾çŠ¶ /dev/input/ ã®ã¿ã‚’検索ã—ã¾ã™), \n"
-"åå‰ã¨ãƒ‡ãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’明確ã«æŒ‡å®šã—ã¦ã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒã‚¤ã‚¹ã¨ã—ã¦è¿½åŠ ã—ã¦ãã ã•ã„."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "デãƒã‚¤ã‚¹å:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«:"
-
-#: src/evdev-plug/ed_ui.c:404
-#, fuzzy
-msgid "(custom)"
-msgstr "カスタム "
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"åå‰ã¨ãƒ•ã‚¡ã‚¤ãƒ«åã®ä¸¡æ–¹ã‚’指定ã—ã¦ãã ã•ã„.\n"
-"ファイルåã¯çµ¶å¯¾ãƒ‘スã§æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "é¸æŠžã—ãŸãƒ‡ãƒã‚¤ã‚¹ã‚’ç¾åœ¨ã®è¨­å®šã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "é¸æŠžã—ãŸã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒã‚¤ã‚¹ã‚’削除ã—ã¾ã™ã‹?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - 設定"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "アクティブ"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "状態"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "デãƒã‚¤ã‚¹å"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°(_B)"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ã®ã‚­ãƒ¼ã‚’押ã—ã¦ãã ã•ã„.\n"
-"5秒以内ã«ã‚­ãƒ¼ãŒæŠ¼ã•ã‚Œãªã‘ã‚Œã°, \n"
-"ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’変更ã›ãšã«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã¾ã™. "
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"ã“ã®å…¥åŠ›ã‚¤ãƒ™ãƒ³ãƒˆã¯æ—¢ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™.\n"
-"\n"
-"åŒã˜å…¥åŠ›ã‚¤ãƒ™ãƒ³ãƒˆã«è¤‡æ•°ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“. (ã—ã‹ã—, 複数"
-"ã®ã‚¤ãƒ™ãƒ³ãƒˆã«åŒã˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’割り当ã¦ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™)"
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°è¨­å®š"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>åå‰: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>ファイルå: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Phys.アドレス: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug ã«ã¤ã„ã¦"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"イベントデãƒã‚¤ã‚¹ã«ã‚ˆã£ã¦ãƒ—レイヤをé éš”æ“作\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"Giacomo Lozito ã«ã‚ˆã£ã¦æ›¸ã‹ã‚ŒãŸ.\n"
-"\n"
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "FLAC オーディオプラグインã«ã¤ã„ã¦"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
msgid "About FileWriter-Plugin"
msgstr "ファイルライタ・プラグインã«ã¤ã„ã¦"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2379,250 +1112,208 @@ msgstr ""
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
"USA.ã¸æ‰‹ç´™ã‚’書ã„ã¦ä¸‹ã•ã„."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
msgid "File Writer Configuration"
msgstr "ファイルライタã®è¨­å®š"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
msgid "Output file format:"
msgstr "出力ファイルフォーマット:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "設定"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "å…ƒã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä¿å­˜ã™ã‚‹"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "指定ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä¿å­˜ã™ã‚‹"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "ファイル出力先ディレクトリ:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "ディレクトリã®é¸æŠž"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr "ファイルåã®å–å¾—å…ƒ:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr "å…ƒã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¿ã‚°"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr "å…ƒã®ãƒ•ã‚¡ã‚¤ãƒ«å"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "ファイルåã‹ã‚‰æ‹¡å¼µå­ã‚’å–り除ã‹ãªã„"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"ã“れを有効ã«ã™ã‚‹ã¨, æ–°ã—ã„ファイル拡張å­ã‚’末尾ã«ã¤ã‘るより先ã«, å…ƒã®ãƒ•ã‚¡ã‚¤ãƒ«"
-"åã®æ‹¡å¼µå­ã¯å–り除ã‹ã‚Œã¾ã›ã‚“."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr "ファイルåã®å…ˆé ­ã«ãƒˆãƒ©ãƒƒã‚¯ç•ªå·ã‚’付加ã™ã‚‹"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+msgid "Auto"
+msgstr "自動"
+
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "ジョイントステレオ"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "ステレオ"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "モノラル"
+
+#: src/filewriter/mp3.c:724
msgid "MP3 Configuration"
msgstr "MP3 設定"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr "アルゴリズムå“質:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"最高å“質/最低速:0;\n"
-"最低å“質/最高速:9;\n"
-"推奨:2;\n"
-"デフォルト:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
msgid "Output Samplerate:"
msgstr "出力サンプリングレート:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "自動"
-
#: src/filewriter/mp3.c:800
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr "ビットレート / 圧縮率:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "ビットレート (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr "圧縮率:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
msgid "Audio Mode:"
msgstr "オーディオ モード:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "ジョイントステレオ"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr "ãã®ä»–:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr "厳格㪠ISO éµå®ˆã‚’強制ã™ã‚‹"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
msgid "Error protection"
msgstr "エラーä¿è­·"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "ã™ã¹ã¦ã®ãƒ•ãƒ¬ãƒ¼ãƒ ã« 16 ビットãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’付加ã™ã‚‹"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr "音質"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr "VBR/ABR を有効ã«ã™ã‚‹"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr "タイプ:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "å¯å¤‰ãƒ“ットレート"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "å¹³å‡ãƒ“ットレート"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
msgid "VBR Options:"
msgstr "VBR オプション:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "最å°ãƒ“ットレート (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "最大ビットレート (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr "最å°ãƒ“ットレートを厳格ã«å¼·åˆ¶ã™ã‚‹"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"低ã„ビットレート㮠mp3 をサãƒãƒ¼ãƒˆã—ãªã„プレイヤ (Apex AD600-A DVD/mp3 player)"
-"ã®ãŸã‚ã«ä½¿ã„ã¾ã™"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
msgid "ABR Options:"
msgstr "ABR オプション:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr "å¹³å‡ãƒ“ットレート (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr "VBR å“質レベル:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"最高:0;\n"
-"最低:9;\n"
-"デフォルト:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr "Xing VBR ヘッダを書ãè¾¼ã¾ãªã„"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr "フレーム パラメータ:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr "著作権物ã¨ã—ã¦ãƒžãƒ¼ã‚¯"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr "オリジナルã¨ã—ã¦ãƒžãƒ¼ã‚¯"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr "ID3 パラメータ:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr "ヴァージョン 2 ã‚¿ã‚°ã®ä»˜åŠ ã‚’強制ã™ã‚‹"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr "v1 ã‚¿ã‚°ã®ã¿ä»˜åŠ ã™ã‚‹"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr "v2 ã‚¿ã‚°ã®ã¿ä»˜åŠ ã™ã‚‹"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr "ã‚¿ã‚°"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Vorbis エンコーダ設定"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "å“質レベル (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC オーディオ プラグイン"
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "FLAC オーディオプラグインã«ã¤ã„ã¦"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2638,15 +1329,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "FLAC オーディオプラグインã«ã¤ã„ã¦"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Gnome ショートカットプラグインã«ã¤ã„ã¦"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2660,494 +1347,506 @@ msgstr ""
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "ファイルã®è¿½åŠ ..."
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "å†ç”Ÿã•ã‚Œã‚‹ãƒˆãƒ©ãƒƒã‚¯ãŒãªã„時間ã¸ã¯ç§»å‹•ã§ãã¾ã›ã‚“.\n"
-
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "指定ã—ãŸæ™‚é–“ã¸ç§»å‹•"
-
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "分:秒"
-
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "トラックã®åˆè¨ˆæ™‚é–“:"
-
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "プレイリスト \"%s\" を書ã込む際ã«ã‚¨ãƒ©ãƒ¼: %s"
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "トラック番å·:"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™. 続行ã—ã¾ã™ã‹ï¼Ÿ"
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "タイトル"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Export Playlist"
-msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+msgid "Artist"
+msgstr "アーティスト:"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Import Playlist"
-msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
-
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
-
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
-
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
-
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "ç¾åœ¨ã®æ›²ã®å¾Œã«åœæ­¢ã™ã‚‹"
-
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "リピート"
-
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "シャッフル"
+msgid "Year"
+msgstr "å¹´:"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "次ã®æ›²ã«é€²ã¾ãªã„"
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Album"
+msgstr "アルãƒãƒ å:"
-#: src/gtkui/ui_manager.c:47
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Show playlists"
-msgstr "プレイリストエディタを表示ã™ã‚‹"
+msgid "Track"
+msgstr "トラック:"
-#: src/gtkui/ui_manager.c:48
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Show/hide playlists"
-msgstr "プレイリストã®ä¿å­˜"
+msgid "Queue position"
+msgstr "ä½ç½®"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Length"
+msgstr "長㕠(ミリ秒):"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File path"
+msgstr "ファイルå"
-#: src/gtkui/ui_manager.c:53
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Show main menu"
-msgstr "メインウィンドウを表示ã™ã‚‹"
+msgid "File name"
+msgstr "ファイルå"
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Custom title"
+msgstr "カスタムスキン"
-#: src/gtkui/ui_manager.c:56
+#: src/gtkui/columns.c:39
#, fuzzy
-msgid "Show statusbar"
-msgstr "状態"
+msgid "Bitrate"
+msgstr "ビットレート (kbps):"
-#: src/gtkui/ui_manager.c:57
+#: src/gtkui/columns.c:286
#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "プレイリストã®ä¿å­˜"
+msgid "Choose Columns"
+msgstr "プレイヤを表示ã™ã‚‹"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "一時åœæ­¢"
+#: src/gtkui/columns.c:300
+#, fuzzy
+msgid "Available:"
+msgstr "å¯å¤‰"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "åœæ­¢"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
+msgstr ""
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "å‰ã®æ›²"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr ""
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "次ã®æ›²"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr ""
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "プレイリスト"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr ""
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "æ–°ã—ã„プレイリスト"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr ""
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "プレイリストã®å‰Šé™¤"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr ""
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+msgid "Disable"
+msgstr "å¯å¤‰"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "é¸æŠžã—ãŸãƒ—レイリストã«ãƒ—レイリストファイルを読ã¿è¾¼ã¿ã¾ã™."
+#: src/gtkui/menus.c:132
+#, fuzzy
+msgid "_Open Files ..."
+msgstr "ファイルã®è¿½åŠ ..."
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:133
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+msgid "Open _URL ..."
+msgstr "ファイルã®è¿½åŠ ..."
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "é¸æŠžã—ãŸãƒ—レイリストをä¿å­˜ã—ã¾ã™."
+#: src/gtkui/menus.c:134
+#, fuzzy
+msgid "_Add File ..."
+msgstr "ファイルã®è¿½åŠ ..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Save All Playlists"
-msgstr "プレイリストã®ä¿å­˜"
+msgid "Add U_RL ..."
+msgstr "ファイルã®è¿½åŠ ..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
+#: src/gtkui/menus.c:137
+#, fuzzy
+msgid "A_bout ..."
+msgstr "プラグインã«ã¤ã„ã¦"
-#: src/gtkui/ui_manager.c:103
+#: src/gtkui/menus.c:138
#, fuzzy
-msgid "Refresh"
-msgstr "リフレッシュレート"
+msgid "_Preferences ..."
+msgstr "設定"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "プレイリストã®ã‚¨ãƒ³ãƒˆãƒªã«é–¢é€£ä»˜ã‘られãŸãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¾ã™."
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
+msgid "_Quit"
+msgstr "終了(_Q)"
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Playlist Manager"
-msgstr "プレイリストマãƒãƒ¼ã‚¸ãƒ£"
+msgid "_Play"
+msgstr "æ¼”å¥"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "プレイリストマãƒãƒ¼ã‚¸ãƒ£ã‚’é–‹ãã¾ã™."
+#: src/gtkui/menus.c:143
+#, fuzzy
+msgid "Paus_e"
+msgstr "一時åœæ­¢"
-#: src/gtkui/ui_manager.c:111
+#: src/gtkui/menus.c:144
#, fuzzy
-msgid "Add URL ..."
-msgstr "ファイルã®è¿½åŠ ..."
+msgid "_Stop"
+msgstr "åœæ­¢"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "リモートトラックをプレイリストã«è¿½åŠ ã—ã¾ã™."
+#: src/gtkui/menus.c:145
+#, fuzzy
+msgid "Pre_vious"
+msgstr "å‰ã®æ›²"
-#: src/gtkui/ui_manager.c:115
+#: src/gtkui/menus.c:146
#, fuzzy
-msgid "Add Files ..."
-msgstr "ファイルã®è¿½åŠ ..."
+msgid "_Next"
+msgstr "次ã®æ›²"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "ファイルをプレイリストã«è¿½åŠ ã—ã¾ã™."
+#: src/gtkui/menus.c:148
+#, fuzzy
+msgid "_Repeat"
+msgstr "リピート"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "å…¨ã¦å‰Šé™¤"
+#: src/gtkui/menus.c:149
+#, fuzzy
+msgid "S_huffle"
+msgstr "シャッフル"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
+#: src/gtkui/menus.c:150
+#, fuzzy
+msgid "N_o Playlist Advance"
+msgstr "次ã®æ›²ã«é€²ã¾ãªã„"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "é¸æŠžã—ã¦ã„ãªã„エントリã®å‰Šé™¤"
+#: src/gtkui/menus.c:151
+#, fuzzy
+msgid "Stop _After This Song"
+msgstr "ç¾åœ¨ã®æ›²ã®å¾Œã«åœæ­¢ã™ã‚‹"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "é¸æŠžã—ã¦ã„ãªã„エントリをプレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "é¸æŠžã—ãŸã‚¨ãƒ³ãƒˆãƒªã®å‰Šé™¤"
+#: src/gtkui/menus.c:154
+#, fuzzy
+msgid "Jump to _Time ..."
+msgstr "指定ã—ãŸæ™‚é–“ã¸ç§»å‹•"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "é¸æŠžã—ãŸã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:131
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "Sort"
-msgstr "ãƒãƒ¼ãƒˆ"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "トラック番å·"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
+#: src/gtkui/menus.c:159
+#, fuzzy
+msgid "By _Title"
msgstr "タイトル"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
+#: src/gtkui/menus.c:160
+#, fuzzy
+msgid "By _Artist"
msgstr "アーティスト"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "アルãƒãƒ å:"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
#, fuzzy
-msgid "By File Path"
+msgid "By Release _Date"
+msgstr "日付"
+
+#: src/gtkui/menus.c:163
+#, fuzzy
+msgid "By _File Path"
msgstr "ファイルå"
-#: src/gtkui/ui_manager.c:142
+#: src/gtkui/menus.c:164
#, fuzzy
-msgid "Reverse Order"
-msgstr "プレイリストを逆順ã«ã™ã‚‹"
+msgid "By _Custom Title"
+msgstr "カスタムスキン"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr ""
+#: src/gtkui/menus.c:166
+#, fuzzy
+msgid "R_everse Order"
+msgstr "プレイリストを逆順ã«ã™ã‚‹"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "エフェクト"
+#: src/gtkui/menus.c:167
+#, fuzzy
+msgid "_Random Order"
+msgstr "ランダム(R_)"
-#: src/gtkui/ui_manager.c:151
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
#, fuzzy
-msgid "Equalizer"
-msgstr "イコライザを表示ã™ã‚‹"
+msgid "_Refresh"
+msgstr "リフレッシュレート"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "表示"
+#: src/gtkui/menus.c:172
+#, fuzzy
+msgid "_Sort"
+msgstr "ãƒãƒ¼ãƒˆ"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "ファイル"
+#: src/gtkui/menus.c:175
+#, fuzzy
+msgid "_Close"
+msgstr "é–‰ã˜ã‚‹"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "Components"
-msgstr "コメント:"
+msgid "_Import ..."
+msgstr "インãƒãƒ¼ãƒˆ"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "トラックã®è©³ç´°"
+#: src/gtkui/menus.c:178
+#, fuzzy
+msgid "_Export ..."
+msgstr "エクスãƒãƒ¼ãƒˆ"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "トラックã®è©³ç´°"
+#: src/gtkui/menus.c:180
+#, fuzzy
+msgid "_Playlist Manager ..."
+msgstr "プレイリストマãƒãƒ¼ã‚¸ãƒ£"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Audacious ã«ã¤ã„ã¦"
+#: src/gtkui/menus.c:183
+#, fuzzy
+msgid "Volume _Up"
+msgstr "音é‡ã‚’上ã’ã‚‹"
-#: src/gtkui/ui_manager.c:178
+#: src/gtkui/menus.c:184
#, fuzzy
-msgid "Open Files ..."
-msgstr "ファイルã®è¿½åŠ ..."
+msgid "Volume _Down"
+msgstr "音é‡ã‚’下ã’ã‚‹"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "ファイルを読ã¿è¾¼ã‚“ã§æ¼”å¥"
+#: src/gtkui/menus.c:186
+#, fuzzy
+msgid "_Equalizer"
+msgstr "イコライザを表示ã™ã‚‹"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:188
+#, fuzzy
+msgid "E_ffects"
+msgstr "エフェクト"
+
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "é¸æŠžã—ãŸå ´æ‰€ã‹ã‚‰ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’æ¼”å¥"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "プラグインサービス"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "設定"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "状態"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "設定ウィンドウを開ã"
+#: src/gtkui/menus.c:197
+#, fuzzy
+msgid "Show Column _Headers"
+msgstr "プレイヤを表示ã™ã‚‹"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "終了(_Q)"
+#: src/gtkui/menus.c:198
+#, fuzzy
+msgid "Choose _Columns ..."
+msgstr "プレイヤを表示ã™ã‚‹"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Audacious を終了ã™ã‚‹"
+#: src/gtkui/menus.c:199
+#, fuzzy
+msgid "Scrol_l on Song Change"
+msgstr "曲メッセージ"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "A-B をセット"
+#: src/gtkui/menus.c:202
+#, fuzzy
+msgid "_File"
+msgstr "ファイル"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "A-B をクリア"
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "æ¼”å¥"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "最åˆã®æ›²ã¸ç§»å‹•"
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "プレイリスト"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "指定ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã¸ç§»å‹•"
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "デãƒã‚¤ã‚¹"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "キューを切り替ãˆã‚‹"
+#: src/gtkui/menus.c:206
+#, fuzzy
+msgid "_Output"
+msgstr "出力プラグインエラー\n"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "プレイリストã®ã‚­ãƒ¥ãƒ¼ã«å…¥ã£ã¦ã„るエントリã®æœ‰åŠ¹/無効を切り替ãˆã¾ã™."
+#: src/gtkui/menus.c:207
+#, fuzzy
+msgid "_View"
+msgstr "表示"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "カスタム "
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
+msgstr ""
+
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
+#: src/gtkui/menus.c:216
#, fuzzy
-msgid "Paste"
+msgid "_Paste"
msgstr "最も早ã„"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
+#: src/gtkui/menus.c:217
+#, fuzzy
+msgid "Select _All"
msgstr "å…¨ã¦é¸æŠž"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "プレイリストã®å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’é¸æŠžã—ã¾ã™."
+#: src/gtkui/menus.c:222
+#, fuzzy
+msgid "_Rename"
+msgstr "ファイルå"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "未é¸æŠžã«ã™ã‚‹"
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
+msgstr ""
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "プレイリストã®å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’未é¸æŠžã«ã—ã¾ã™."
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
+msgstr "エラー"
+
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
msgid "mono"
msgstr "モノラル"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
msgid "stereo"
msgstr "ステレオ"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "ãƒãƒ£ãƒ³ãƒãƒ«æ•°"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "ãƒãƒ£ãƒ³ãƒãƒ«æ•°"
+msgstr[1] "ãƒãƒ£ãƒ³ãƒãƒ«æ•°"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "å‰ã®ãƒˆãƒ©ãƒƒã‚¯"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "æ¼”å¥"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "一時åœæ­¢/å†é–‹"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "åœæ­¢"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "次ã®ãƒˆãƒ©ãƒƒã‚¯"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "5秒進ã‚ã‚‹"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "5秒戻ã™"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "無音"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "音é‡ã‚’上ã’ã‚‹"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "音é‡ã‚’下ã’ã‚‹"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+msgid "Jump to File"
+msgstr "指定ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã¸ç§»å‹•"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "プレイヤウィンドウを切り替ãˆã‚‹"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "On-Screen-Display を表示ã™ã‚‹"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+#, fuzzy
+msgid "Toggle Repeat"
+msgstr "リピート"
+
+#: src/hotkey/gui.c:85
+#, fuzzy
+msgid "Toggle Shuffle"
+msgstr "シャッフル"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(ãªã—)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3158,15 +1857,15 @@ msgstr ""
"\n"
"続ã‘ã¾ã™ã‹?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "マウスボタン割り当ã¦"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "グローãƒãƒ«ãƒ›ãƒƒãƒˆã‚­ãƒ¼ãƒ—ラグイン設定"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3174,23 +1873,23 @@ msgstr ""
"テキストフィールド内ã§ã‚­ãƒ¼ã‚³ãƒ³ãƒ“ãƒãƒ¼ã‚·ãƒ§ãƒ³ã‚’押ã—ã¦ãã ã•ã„.\n"
"マウスボタンを組ã¿åˆã‚ã›ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "ホットキー:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>動作:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>キーãƒã‚¤ãƒ³ãƒ‰:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "グローãƒãƒ«ãƒ›ãƒƒãƒˆã‚­ãƒ¼ãƒ—ラグインã«ã¤ã„ã¦"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3242,7 +1941,7 @@ msgstr "接続モード"
msgid "Enable debug printing"
msgstr "デãƒã‚°å‡ºåŠ›ã‚’有効ã«ã™ã‚‹"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3260,134 +1959,20 @@ msgstr ""
"develia.org ã® Giacomo Lozito ã«ã‚ˆã‚‹\n"
"Audacious ãƒãƒ¼ãƒˆ"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "JACK 出力プラグイン 0.17 ã«ã¤ã„ã¦"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "LADSPA プラグインã«ãƒ¦ãƒ¼ã‚¶ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "åå‰"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "インストール済プラグイン"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "動作中ã®ãƒ—ラグイン"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "追加"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "削除"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA プラグイン カタログ"
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "LIRC Audacious プラグインã«ã¤ã„ã¦"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRC プラグイン"
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
-"\n"
-"LIRC リモートコントロールデーモンを用ã„ã¦\n"
-"Audacious をコントロールã™ã‚‹ã‚·ãƒ³ãƒ—ルãªãƒ—ラグイン\n"
-"\n"
-"Tony Vroon <chainsaw@gentoo.org> ã«ã‚ˆã‚‹ Audacious ã¸ã®é©ç”¨\n"
-"å…ƒã¨ãªã£ãŸ XMMS LIRC プラグインã¯\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by> ã«ã‚ˆã‚‹.\n"
-"LIRC ã®æƒ…å ±ã¯ä»¥ä¸‹ã§å¾—られる.\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "LIRC プラグイン設定"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "LIRC サーãƒã«å†æŽ¥ç¶š"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "å†æŽ¥ç¶šã¾ã§ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ(秒): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "å†æŽ¥ç¶š"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "接続"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: LIRC サãƒãƒ¼ãƒˆã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ\n"
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: LIRC 設定ファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ\n"
-"%s: æ­£ã—ã„設定ファイルã®ä½œã‚Šæ–¹ã‚’知るã«ã¯\n"
-"%s: LIRC ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’読んã§ãã ã•ã„\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: å†æŽ¥ç¶šã‚’試行中...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰ \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: LIRC ã‹ã‚‰åˆ‡æ–­ã•ã‚Œã¾ã—ãŸ\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: %d 秒ã”ã¨ã«å†æŽ¥ç¶šã‚’試ã¿ã¾ã™...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3396,11 +1981,11 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "Metronom ã«ã¤ã„ã¦"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3414,269 +1999,48 @@ msgstr ""
"例: tact://77 - 毎分 77 æ‹ã‚’æ¼”å¥\n"
" tact://60*3/4 - 60 bpm ã‚’ 3/4 æ‹å­ã§æ¼”å¥"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "タクトジェãƒãƒ¬ãƒ¼ã‚¿: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "タクトジェãƒãƒ¬ãƒ¼ã‚¿: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug 設定"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16ビット"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr " 8ビット"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "モノラル (ダウンミックス)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "最短 (最速)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "線形 (高速)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "スプライン (良å“質)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8 タップ Fir (éžå¸¸ã«é«˜å“質)"
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "サンプリングレート"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "有効"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "æ·±ã•"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "é…延"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "リãƒãƒ¼ãƒ–"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "é‡"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "範囲"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "ベース増加"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr "サラウンド"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"注æ„: プリアンプã®è¨­å®šãŒé«˜ã™ãŽã‚‹ã¨\n"
-"クリッピング(ã†ã‚‹ã•ã„ã‚«ãƒã‚«ãƒéŸ³ã‚„\n"
-"ブツブツ音)ã®åŽŸå› ã«ãªã‚Šã¾ã™!"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "プリアンプ"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "ファイルåを曲åã¨ã—ã¦ä½¿ã†"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "高速ãªãƒ—レイリスト情報"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "ノイズリダクション"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Amiga MOD ã‚’æ¼”å¥ã™ã‚‹"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "ループã—ãªã„"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "ループ回数"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "回"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "æ°¸é ã«ãƒ«ãƒ¼ãƒ—"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "ループ"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD 情報"
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
+msgstr "アップロード進行中..."
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
msgstr ""
-"ファイルå:\n"
-"曲å:\n"
-"タイプ:\n"
-"é•·ã•:\n"
-"速ã•:\n"
-"テンãƒ:\n"
-"サンプリングレート:\n"
-"楽器:\n"
-"パターン:\n"
-"ãƒãƒ£ãƒ³ãƒãƒ«:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "サンプリングレート"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "楽器"
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "メッセージ"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Modplug 入力プラグイン for Audacious ver"
-
-#: src/modplug/gui/main.cxx:52
+#: src/mtp_up/mtp.c:311
#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Modplug サウンドエンジン㯠Olivier Lapicque ã«ã‚ˆã£ã¦æ›¸ã‹ã‚ŒãŸ.\n"
-"Modplug XMMS インタフェイス㯠Kenton Vard ã«ã‚ˆã‚‹.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"æ›´æ–°ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã¯ Konstanty Bialkowski ã«ã‚ˆã‚‹.\n"
-"BMP ã¸ã®ãƒãƒ¼ãƒˆã¯ Theofilos Intzoglou ã«ã‚ˆã‚‹."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Modplug ã«ã¤ã„ã¦"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "pixmap ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "é¸æŠžã•ã‚ŒãŸãƒˆãƒ©ãƒƒã‚¯ã‚’アップロード"
-
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr "アップロード進行中..."
+msgid "Disconnect MTP Device"
+msgstr "デãƒã‚¤ã‚¹ã‚’切断"
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "MTP デãƒã‚¤ã‚¹ãƒãƒ³ãƒ‰ãƒ©"
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Stopped"
+msgstr "åœæ­¢"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "デãƒã‚¤ã‚¹ã‚’切断"
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Audacious is not playing."
+msgstr "Audacious - å¯è¦–警告"
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "ヌル出力プラグイン "
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3684,15 +2048,15 @@ msgstr ""
" HÃ¥vard KvÃ¥l <havardk@xmms.org> ã® XMMS プラグインをベースã¨ã—ãŸ\n"
" Christian Birchinger <joker@netswarm.net> ã«ã‚ˆã‚‹ãƒãƒ¼ãƒˆ"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "ヌル出力プラグインã«ã¤ã„ã¦"
-#: src/null/null.c:93
+#: src/null/null.c:94
msgid "Null output preferences"
msgstr "ヌル出力設定"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr "実時間ã§å®Ÿè¡Œã™ã‚‹"
@@ -3706,11 +2070,11 @@ msgstr "デフォルト PCM デãƒã‚¤ã‚¹ (%s)"
msgid "OSS4 Output Plugin Preferences"
msgstr "ステータスアイコンプラグイン - 設定"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "オーディオデãƒã‚¤ã‚¹:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "代替デãƒã‚¤ã‚¹ã‚’使用ã™ã‚‹:"
@@ -3723,12 +2087,12 @@ msgstr "セッション間㮠VMIX 音é‡ã‚’ä¿å­˜"
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "ESounD プラグインã«ã¤ã„ã¦"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3772,40 +2136,45 @@ msgstr ""
msgid "OSS4 error"
msgstr "エラー"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "デフォルト (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "デフォルト"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "OSS ドライãƒã®è¨­å®š"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "デãƒã‚¤ã‚¹"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "ãƒãƒƒãƒ•ã‚¡ãƒªãƒ³ã‚°:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "事å‰ã«ãƒãƒƒãƒ•ã‚¡ãƒªãƒ³ã‚°ã™ã‚‹å‰²åˆ (ï¼…):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "ãƒãƒƒãƒ•ã‚¡ãƒªãƒ³ã‚°"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "ミキサã®è¨­å®š:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr "音é‡ã®èª¿æ•´ã¯ PCM ã§ã¯ãªãマスタを使用ã™ã‚‹"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "ミキサ"
@@ -3849,11 +2218,11 @@ msgstr ""
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
"USA. ã¸æ‰‹ç´™ã‚’書ã„ã¦ä¸‹ã•ã„."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Audacious PulseAudio 出力プラグインã«ã¤ã„ã¦"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
msgid ""
"Audacious PulseAudio Output Plugin\n"
"\n"
@@ -3889,54 +2258,54 @@ msgstr ""
"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
"USA. ã¾ã§è«‹æ±‚ã—ã¦ä¸‹ã•ã„."
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "ステータスアイコン プラグインã«ã¤ã„ã¦"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
#, fuzzy
msgid "Change password"
msgstr "æ¼”å¥æ›²ã®å¤‰æ›´"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>サービス</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "ユーザå:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "パスワード:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
#, fuzzy
msgid "Scrobbler URL:"
msgstr "Scrobbler エラー"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
#, fuzzy
msgid "Scrobbler"
msgstr "Scrobbler エラー"
@@ -3957,16 +2326,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Scrobbler プラグインã«ã¤ã„ã¦"
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "JACK 出力プラグイン 0.17 ã«ã¤ã„ã¦"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "エラー"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "%s ã«ã¤ã„ã¦"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "é–‰ã˜ã‚‹"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "エラー"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "OK"
+
#: src/sid/xs_fileinfo.c:151
msgid "General info"
msgstr "一般情報"
@@ -3976,6 +2363,11 @@ msgstr "一般情報"
msgid "Tune #%i: "
msgstr "ãƒãƒ¥ãƒ¼ãƒ³ #%i:"
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "pixmap ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: %s"
+
#: src/sid/xs_interface.c:234
msgid "Audacious-SID configuration"
msgstr "Audacious-SID 設定"
@@ -4285,15 +2677,15 @@ msgstr "エクスãƒãƒ¼ãƒˆ"
msgid "Use"
msgstr "使用"
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
msgid "Save"
msgstr "ä¿å­˜"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
msgid "Import"
msgstr "インãƒãƒ¼ãƒˆ"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
msgid "Delete"
msgstr "削除"
@@ -4326,6 +2718,11 @@ msgstr ""
msgid "Playtime:"
msgstr "æ¼”å¥æ™‚é–“:"
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+msgid "seconds"
+msgstr "秒"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr "最å°æ¼”å¥æ™‚é–“:"
@@ -4432,10 +2829,6 @@ msgstr ""
msgid "Song title format:"
msgstr "曲ã®ã‚¿ã‚¤ãƒˆãƒ«ã®æ›¸å¼:"
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "タイトル"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr "サブãƒãƒ¥ãƒ¼ãƒ³ã‚’プレイリストã«è¿½åŠ "
@@ -4586,11 +2979,11 @@ msgstr "ã¯ã„"
msgid "No"
msgstr "ã„ã„ãˆ"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "スキン GUI ã«ã¤ã„ã¦"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4598,686 +2991,825 @@ msgstr ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "_Player:"
msgstr "プレイヤ(_P):"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr "メインウィンドウã§ä½¿ç”¨ã™ã‚‹ãƒ•ã‚©ãƒ³ãƒˆã®é¸æŠž"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "_Playlist:"
msgstr "プレイリスト(_P):"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "Select playlist font:"
msgstr "プレイリストã§ä½¿ç”¨ã™ã‚‹ãƒ•ã‚©ãƒ³ãƒˆã®é¸æŠž"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
msgid "<b>_Fonts</b>"
msgstr "<b>フォント(_F)</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "å¯èƒ½ãªã‚‰ã°ãƒ“ットマップフォントを使用"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-"å¯èƒ½ãªã‚‰ã°ãƒ“ットマップフォントを使用ã—ã¾ã™. ビットマップフォント㯠Unicode æ–‡"
-"字列をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“."
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>ãã®ä»–(_M)</b>"
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "プレイリストã®åŒºåˆ‡ã‚Šç·šã‚’表示ã™ã‚‹"
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
+msgstr ""
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "ウィンドウマãƒãƒ¼ã‚¸ãƒ£è£…飾を表示ã™ã‚‹"
+#: src/skins/skins_cfg.c:346
+msgid "<b>_Skin</b>"
+msgstr "<b>スキン(_S)</b>"
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "ウィンドウマãƒãƒ¼ã‚¸ãƒ£ã«ã‚ˆã‚‹ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦è£…飾を有効ã«ã—ã¾ã™."
+#: src/skins/skins_cfg.c:393
+#, fuzzy
+msgid "Interface Preferences"
+msgstr "設定"
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "åŒæ–¹å‘テキストスクロールを使ã†"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "プリアンプ"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-"ã“れを使ã†ã¨ï¼Œãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ãƒ•ã‚¡ã‚¤ãƒ«æƒ…報テキストãŒå‰å¾Œã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¾"
-"ã™ï¼Žãã†ã§ãªã‘ã‚Œã°ï¼Œãƒ†ã‚­ã‚¹ãƒˆã¯ä¸€æ–¹å‘ã®ã¿ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¾ã™ï¼Ž"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "インライン GTK テーマを無効ã«ã™ã‚‹"
-
-#: src/skins/skins_cfg.c:333
-#, fuzzy
-msgid "Random skin on play"
-msgstr "プレイリストã®é †åºã‚’ランダムã«ã—ã¾ã™."
-
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "ä¸å®Œå…¨ãªã‚¹ã‚­ãƒ³ã®èª­ã¿è¾¼ã¿ã‚’許å¯ã™ã‚‹"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-"ã“れを使ã†ã¨ï¼Œaudacious ã¯å£Šã‚ŒãŸã‚¹ã‚­ãƒ³ã®èª­ã¿è¾¼ã¿ã‚’拒絶ã—ã¾ã›ã‚“.ãŠæ°—ã«å…¥ã‚Šã®"
-"スキンãŒå‹•ã‹ãªã„ã¨ãã ã‘使用ã—ã¦ãã ã•ã„."
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "色補正"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "22000 Hz "
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr "以下ã®ã‚¹ãƒ©ã‚¤ãƒ€ã‚’用ã„ã¦ã‚¹ã‚­ãƒ³ UI ã®è‰²åˆã„ã®å¤‰æ›´ãŒã§ãã¾ã™."
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "é’"
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "1 kHz"
+msgstr "11 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "ç·‘"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "赤"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>スキン(_S)</b>"
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "8 kHz"
+msgstr "48 kHz"
-#: src/skins/skins_cfg.c:574
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "Color adjustment ..."
-msgstr "色補正"
+msgid "16 kHz"
+msgstr "48 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
msgid "Audacious Equalizer"
msgstr "Audacious イコライザ"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr "プリセット"
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
#, fuzzy
msgid "surround"
msgstr "サラウンド"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - å¯è¦–警告"
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "メインウィンドウを表示ã™ã‚‹"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "無視"
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Audacious ã¯ã™ã¹ã¦ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒéš ã•ã‚ŒãŸçŠ¶æ…‹ã§é–‹å§‹ã•ã‚Œã¾ã—ãŸï¼Ž\n"
-"å†åº¦ãƒ—レイヤウィンドウを表示ã™ã‚‹ã‹ï¼Œãã®ã¾ã¾ Audacious ã‚’æ“作ã™ã‚‹ãŸã‚ã«ã¯ï¼Œ"
-"audtool を用ã„ã‚‹ã‹ statusicon ã®ã‚ˆã†ãªãƒ—ラグインを有効ã«ã™ã‚‹ã“ã¨ã§é éš”æ“作ã—"
-"ã¦ãã ã•ã„."
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "常ã«ç„¡è¦–ã—,表示ã™ã‚‹/éš ã™ ã¯é éš”æ“作ã™ã‚‹"
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - 壊れ㟠GTK エンジンã®ä½¿ç”¨è­¦å‘Š"
-
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>壊れ㟠GTK エンジンãŒä½¿ã‚ã‚Œã¦ã„ã¾ã™</b></big>\n"
-"\n"
-"Audacious 㯠GTK エンジンãŒä½¿ã‚ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’検出ã—ã¾ã—ãŸ.\n"
-"\n"
-"テーマエンジン <i>%s</i> ã¯æœ€è¿‘ã®ã‚¹ã‚­ãƒ³ã§ç”¨ã„られã¦ã„る特徴ã¨éžäº’æ›ã§ã™.éžäº’"
-"æ›ãªç‰¹å¾´ã¯ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã¯ç„¡åŠ¹ã«ã•ã‚Œã¾ã—ãŸ.\n"
-"\n"
-"ã“れらã®ç‰¹å¾´ã‚’用ã„ã‚‹ã«ã¯, ä»–ã® GTK テーマエンジンを使ã†ã“ã¨ã‚’考慮ã—ã¦ãã ã•"
-"ã„."
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "次回ã‹ã‚‰ã“ã®è­¦å‘Šã‚’表示ã—ãªã„"
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
+#: src/skins/ui_main.c:807
+#, fuzzy, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr "移動先: %d:%-2.2d/%d:%-2.2d (%d%%)"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "音é‡: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "ãƒãƒ©ãƒ³ã‚¹: %d%% å·¦"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "ãƒãƒ©ãƒ³ã‚¹: 中央"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "ãƒãƒ©ãƒ³ã‚¹: %d%% å³"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "オプションメニュー"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "「常ã«æœ€å‰é¢ã«é…ç½®ã€ç„¡åŠ¹"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "「常ã«æœ€å‰é¢ã«é…ç½®ã€æœ‰åŠ¹"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "ファイル情報ボックス"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "「GUI スケーリングã€ç„¡åŠ¹"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "「GUI スケーリングã€æœ‰åŠ¹"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "視覚化メニュー"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "プレイリスト"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
#, fuzzy
msgid "Stopping after song."
msgstr "ç¾åœ¨ã®æ›²ã®å¾Œã«åœæ­¢ã™ã‚‹"
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "曲åã®è‡ªå‹•ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "ç¾åœ¨ã®æ›²ã®å¾Œã«åœæ­¢ã™ã‚‹"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "ピーク"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "リピート"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "シャッフル"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "次ã®æ›²ã«é€²ã¾ãªã„"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "プレイヤを表示ã™ã‚‹"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "プレイリストエディタを表示ã™ã‚‹"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "イコライザを表示ã™ã‚‹"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "常ã«æœ€å‰é¢ã«é…ç½®ã™ã‚‹"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "全ワークスペースã«é…ç½®ã™ã‚‹"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "プレイヤを巻ã上ã’ã‚‹"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "プレイリストエディタを巻ã上ã’ã‚‹"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "イコライザを巻ã上ã’ã‚‹"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "スケール"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "ダブルサイズ"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "ç°¡å˜ç§»å‹•"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "アナライザ"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "スコープ"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "声紋"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "オフ"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "標準"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "ファイア"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "垂直ライン"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "ライン"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "ãƒãƒ¼"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "ドット"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "ライン"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "ソリッド"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "アイス"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "スムーズ"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "最もé…ã„"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "é…ã„"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "中"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "æ—©ã„"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "最も早ã„"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "経éŽæ™‚間を表示ã™ã‚‹"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "残り時間を表示ã™ã‚‹"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "一時åœæ­¢"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "å‰ã®æ›²"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "次ã®æ›²"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "視覚化"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "視覚化モード"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "アナライザモード"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "スコープモード"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "声紋モード"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "WindowShade VU モード"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "アナライザ フォールオフ"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "ピーク フォールオフ"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "プレイリスト"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "æ–°ã—ã„プレイリスト"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "次ã®ãƒ—レイリストをé¸æŠž"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "å‰ã®ãƒ—レイリストをé¸æŠž"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "プレイリストã®å‰Šé™¤"
+
#: src/skins/ui_manager.c:222
+#, fuzzy
+msgid "Import Playlist"
+msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "é¸æŠžã—ãŸãƒ—レイリストã«ãƒ—レイリストファイルを読ã¿è¾¼ã¿ã¾ã™."
+
+#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "é¸æŠžã—ãŸãƒ—レイリストをä¿å­˜ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "プレイリストã®ä¿å­˜"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
msgid "Refresh List"
msgstr "プレイリストã®æ›´æ–°"
-#: src/skins/ui_manager.c:226
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "プレイリストã®ã‚¨ãƒ³ãƒˆãƒªã«é–¢é€£ä»˜ã‘られãŸãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr "プレイリストマãƒãƒ¼ã‚¸ãƒ£"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr "プレイリストマãƒãƒ¼ã‚¸ãƒ£ã‚’é–‹ãã¾ã™."
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr "表示"
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+#, fuzzy
+msgid "Interface Preferences ..."
+msgstr "設定"
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr "インターãƒãƒƒãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã®è¿½åŠ ..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr "リモートトラックをプレイリストã«è¿½åŠ ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr "ファイルã®è¿½åŠ ..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr "ファイルをプレイリストã«è¿½åŠ ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr "検索ã¨é¸æŠž"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr "プレイリストを検索ã—, 特定ã®åˆ¤å®šåŸºæº–ã«åŸºã„ã¦é¸æŠžã—ã¾ã™."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
msgid "Invert Selection"
msgstr "é¸æŠžç¯„囲ã®å転"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr "エントリã®é¸æŠžã¨æœªé¸æŠžã‚’å転ã—ã¾ã™."
+#: src/skins/ui_manager.c:267
+msgid "Select All"
+msgstr "å…¨ã¦é¸æŠž"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr "プレイリストã®å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’é¸æŠžã—ã¾ã™."
+
+#: src/skins/ui_manager.c:271
+msgid "Select None"
+msgstr "未é¸æŠžã«ã™ã‚‹"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr "プレイリストã®å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’未é¸æŠžã«ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:277
+msgid "Remove All"
+msgstr "å…¨ã¦å‰Šé™¤"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr "å…¨ã¦ã®ã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr "キューã®ã‚¯ãƒªã‚¢"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr "プレイリストã«é–¢é€£ä»˜ã‘られãŸã‚­ãƒ¥ãƒ¼ã‚’クリアã—ã¾ã™."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr "利用ä¸å¯ãƒ•ã‚¡ã‚¤ãƒ«ã®å‰Šé™¤"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr "利用ä¸å¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr "é‡è¤‡ã‚¨ãƒ³ãƒˆãƒªã®å‰Šé™¤"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+msgid "By Title"
+msgstr "タイトル"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr "é‡è¤‡ã™ã‚‹ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
msgid "By Filename"
msgstr "ファイルå"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr "é‡è¤‡ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã®ã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
msgid "By Path + Filename"
msgstr "パスåã¨ãƒ•ã‚¡ã‚¤ãƒ«å"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "é‡è¤‡ã™ã‚‹ãƒ‘スåã¨ãƒ•ã‚¡ã‚¤ãƒ«åã®ã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr "é¸æŠžã—ã¦ã„ãªã„エントリã®å‰Šé™¤"
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr "é¸æŠžã—ã¦ã„ãªã„エントリをプレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr "é¸æŠžã—ãŸã‚¨ãƒ³ãƒˆãƒªã®å‰Šé™¤"
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr "é¸æŠžã—ãŸã‚¨ãƒ³ãƒˆãƒªã‚’プレイリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:313
+msgid "Randomize List"
+msgstr "プレイリストをランダムã«ã™ã‚‹"
+
+#: src/skins/ui_manager.c:314
+msgid "Randomizes the playlist."
+msgstr "プレイリストã®é †åºã‚’ランダムã«ã—ã¾ã™."
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr "プレイリストを逆順ã«ã™ã‚‹"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr "プレイリストã®é †åºã‚’逆順ã«ã—ã¾ã™."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
msgid "Sort List"
msgstr "プレイリストã®ã‚½ãƒ¼ãƒˆ"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr "タイトル順ã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "アルãƒãƒ å:"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
#, fuzzy
msgid "Sorts the list by album."
msgstr "タイトル順ã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+msgid "By Artist"
+msgstr "アーティスト"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr "アーティスト順ã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr "ファイルåé †ã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr "ファイルã®ãƒ‘スåã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
msgid "By Date"
msgstr "日付"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr "変更時間ã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+msgid "By Track Number"
+msgstr "トラック番å·"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr "トラック番å·é †ã§ãƒ—レイリストをソートã—ã¾ã™."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
msgid "Sort Selected"
msgstr "é¸æŠžç¯„囲ã®ã‚½ãƒ¼ãƒˆ"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+msgid "File"
+msgstr "ファイル"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "ヘルプ"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr "プラグインサービス"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+msgid "View Track Details"
+msgstr "トラックã®è©³ç´°"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr "トラックã®è©³ç´°"
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+msgid "About Audacious"
+msgstr "Audacious ã«ã¤ã„ã¦"
+
+#: src/skins/ui_manager.c:401
msgid "Play File"
msgstr "ファイルを演å¥"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+msgid "Load and play a file"
+msgstr "ファイルを読ã¿è¾¼ã‚“ã§æ¼”å¥"
+
+#: src/skins/ui_manager.c:404
msgid "Play Location"
msgstr "場所を演å¥"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+msgid "Play media from the selected location"
+msgstr "é¸æŠžã—ãŸå ´æ‰€ã‹ã‚‰ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’æ¼”å¥"
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr "プラグインサービス"
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr "設定"
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr "設定ウィンドウを開ã"
+
+#: src/skins/ui_manager.c:413
+msgid "Quit Audacious"
+msgstr "Audacious を終了ã™ã‚‹"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr "A-B をセット"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr "A-B をクリア"
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr "最åˆã®æ›²ã¸ç§»å‹•"
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+msgid "Jump to Time"
+msgstr "指定ã—ãŸæ™‚é–“ã¸ç§»å‹•"
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr "キューを切り替ãˆã‚‹"
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "プレイリストã®ã‚­ãƒ¥ãƒ¼ã«å…¥ã£ã¦ã„るエントリã®æœ‰åŠ¹/無効を切り替ãˆã¾ã™."
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "カスタム "
+
+#: src/skins/ui_manager.c:438
+#, fuzzy
+msgid "Paste"
+msgstr "最も早ã„"
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr "読ã¿è¾¼ã¿"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
msgid "Preset"
msgstr "プリセット"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr "プリセットã®èª­ã¿è¾¼ã¿"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr "自動読ã¿è¾¼ã¿ã®ãƒ—リセット"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr "自動読ã¿è¾¼ã¿ã®ãƒ—リセット"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
msgid "Load default preset into equalizer"
msgstr "イコライザã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ—リセットを読ã¿è¾¼ã‚€"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
msgid "Zero"
msgstr "ゼロ"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr "イコライザプリセットレベルをゼロã«ã‚»ãƒƒãƒˆ"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr "ファイル"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
msgid "Load preset from file"
msgstr "ファイルã‹ã‚‰ãƒ—リセットを読ã¿è¾¼ã¿"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr "WinAMP EQF ファイル"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr "WinAMP EQF ファイルã‹ã‚‰ãƒ—リセットを読ã¿è¾¼ã¿"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr "WinAMP プリセット"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr "WinAMP プリセット"
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr "プリセットã®ä¿å­˜"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr "自動読ã¿è¾¼ã¿ã®ãƒ—リセットã®ä¿å­˜"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
msgid "Save default preset"
msgstr "デフォルトプリセットã®ä¿å­˜"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
msgid "To file"
msgstr "ファイル"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr "プリセットをファイルã¸ä¿å­˜"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr "WinAMP EQF ファイル"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr "プリセットを WinAMP EQF ファイルã¸ä¿å­˜"
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
msgid "Delete preset"
msgstr "プリセットã®å‰Šé™¤"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr "自動読ã¿è¾¼ã¿ã®ãƒ—リセットã®å‰Šé™¤"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr "有効ã«ãªã£ã¦ã„るプレイリストã®ã‚¨ãƒ³ãƒˆãƒªã‚’検索"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5288,120 +3820,61 @@ msgstr ""
"æ­£è¦è¡¨ç¾ãŒä½¿ãˆ, 大文字ã¨å°æ–‡å­—を区別ã—ã¾ã›ã‚“. æ­£è¦è¡¨ç¾ãŒã©ã®ã‚ˆã†ã«å‹•ä½œã™ã‚‹ã‹"
"ã‚ã‹ã‚‰ãªã„å ´åˆã¯, å˜ç´”ã«æ¤œç´¢ã—よã†ã¨ã—ã¦ã„ã‚‹ã‚‚ã®ã®æ–‡å­—を入力ã—ã¾ã™."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "タイトル: "
+
+#: src/skins/ui_playlist.c:267
msgid "Album: "
msgstr "アルãƒãƒ å: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
msgid "Artist: "
msgstr "アーティスト: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
msgid "Filename: "
msgstr "ファイルå: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr "検索å‰ã«ä»¥å‰ã®é¸æŠžã‚’クリア"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr "マッãƒã—ãŸã‚¨ãƒ³ãƒˆãƒªã®ã‚­ãƒ¥ãƒ¼ã‚’自動的ã«ãƒˆã‚°ãƒ«"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr "マッãƒã—ãŸã‚¨ãƒ³ãƒˆãƒªã§æ–°ã—ã„プレイリストを作æˆ"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "スタティックプレイリストã¨ã—ã¦ä¿å­˜"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "相対パスを使ã†"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "プレイリストã®ä¿å­˜"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr "Audacious プレイリストエディタ"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22000 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Archived Winamp 2.x スキン"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Unarchived Winamp 2.x スキン"
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "ディレクトリ (%s) を作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ: %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
msgid "About sndfile plugin"
msgstr "sndfile プラグインã«ã¤ã„ã¦"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5443,55 +3916,63 @@ msgstr ""
"51 Franklin Street, Fifth Floor, \n"
"Boston, MA 02110-1301 USA ã¸æ‰‹ç´™ã‚’書ã„ã¦ä¸‹ã•ã„."
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "SndStretch ã«ã¤ã„ã¦"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
msgid "Volume corr."
msgstr "音é‡è£œæ­£"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr "一部é‡ã­åˆã‚ã›"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
msgid "Speed"
msgstr "スピード"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr "ピッãƒ"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr "スケール"
+
+#: src/sndstretch/sndstretch_xmms.c:363
+msgid "Options"
+msgstr "オプション"
+
+#: src/sndstretch/sndstretch_xmms.c:382
msgid "SndStretch - Configuration"
msgstr "SndStretch - 設定"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr "Audacious ãŒæ–°ã—ã„曲を開始ã—ãŸã¨ãã«å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰"
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr "コマンド:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr "曲ã®çµ‚ã‚ã‚Šã§å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr "Audacious ãŒãƒ—レイリストã®æœ€å¾Œã«åˆ°é”ã—ãŸã¨ãã«å®Ÿè¡Œã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"例ãˆã°ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ãƒˆãƒªãƒ¼ãƒ ã®ã‚¿ã‚¤ãƒˆãƒ«ãªã©, 曲ã®ã‚¿ã‚¤ãƒˆãƒ«ãŒå¤‰ã‚ã£ãŸã¨ãã«å®Ÿè¡Œ"
"ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
#, fuzzy
msgid ""
"You can use the following format strings which\n"
@@ -5505,7 +3986,10 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"コマンドを呼ã³å‡ºã™å‰ã«ç½®æ›ã•ã‚Œã‚‹ä»¥ä¸‹ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列を利用ã§ãã¾ã™(プレイ"
"リストã®æœ€å¾Œã®ã‚³ãƒžãƒ³ãƒ‰ã«ã¯ã™ã¹ã¦ãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã›ã‚“).\n"
@@ -5519,7 +4003,7 @@ msgstr ""
"%%t: プレイリストã®ä½ç½® (%%02d)\n"
"%%p: ç¾åœ¨æ¼”å¥ä¸­ã‹ (1 or 0)"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5527,24 +4011,20 @@ msgstr ""
"<span size='small'>シェルã«æ¸¡ã•ã‚Œã‚‹ãƒ‘ラメータã¯ã‚¯ã‚©ãƒ¼ãƒˆã§ããられるã¹ãã§ã™."
"ã•ã‚‚ãªã„ã¨ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¸Šã®å±é™ºãŒã‚ã‚Šã¾ã™.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr "コマンド"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "曲メッセージ"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "スペクトラムアナライザ"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "ステータスアイコン プラグインã«ã¤ã„ã¦"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
#, fuzzy
msgid ""
"Status Icon Plugin\n"
@@ -5561,35 +4041,48 @@ msgstr ""
"ã“ã®ãƒ—ラグインã¯, ウィンドウマãƒãƒ¼ã‚¸ãƒ£ã®\n"
"システムトレイエリアã«ç½®ã‹ã‚Œã‚‹ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚¢ã‚¤ã‚³ãƒ³ã‚’æä¾›ã—ã¾ã™.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "ステータスアイコンプラグイン - 設定"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "å³ã‚¯ãƒªãƒƒã‚¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "å°åž‹å†ç”Ÿãƒ¡ãƒ‹ãƒ¥ãƒ¼ #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "å°åž‹å†ç”Ÿãƒ¡ãƒ‹ãƒ¥ãƒ¼ #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "マウススクロールã®å‹•ä½œ"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "音é‡ã®å¤‰æ›´"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "æ¼”å¥æ›²ã®å¤‰æ›´"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+#, fuzzy
+msgid "Other settings"
+msgstr "ミキサ設定"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr ""
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:41
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5599,121 +4092,19 @@ msgstr ""
"\n"
"1999. Johan Levin ã«ã‚ˆã‚‹"
-#: src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:65
msgid "About Extra Stereo Plugin"
msgstr "エクストラステレオプラグインã«ã¤ã„ã¦"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:102
msgid "Configure Extra Stereo"
msgstr "エクストラステレオã®è¨­å®š"
-#: src/streambrowser/gui/streambrowser_win.c:62
-#, fuzzy
-msgid "Search:"
-msgstr "å¹´:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-#, fuzzy
-msgid "Stream browser"
-msgstr "å‚ç…§"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-#, fuzzy
-msgid "Stream name"
-msgstr "楽器å"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-#, fuzzy
-msgid "Now playing"
-msgstr "æ–°ã—ã„プレイリスト"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-#, fuzzy
-msgid "Remove Bookmark"
-msgstr "ã‚¿ã‚°ã®å‰Šé™¤"
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "OSS ドライãƒã«ã¤ã„ã¦"
-
-#: src/streambrowser/streambrowser.c:332
-#, fuzzy
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"libcdio 開発者 <http://www.gnu.org/software/libcdio/> ã¨\n"
-"\tlibcddb 開発者 <http://libcddb.sourceforge.net/> ã«å¤šå¤§ãªã‚‹æ„Ÿè¬.\n"
-"\n"
-"Tony Vroon ã«ã‚ˆã‚‹åŠ©è¨€ã¨æŒ‡é‡ã«æ„Ÿè¬.\n"
-"\n"
-"ã“れ㯠Google Summer of Code 2007 ã®ãƒ—ロジェクトã§ã—ãŸ."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-#, fuzzy
-msgid "Streambrowser"
-msgstr "å‚ç…§"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Sun ドライãƒã«ã¤ã„ã¦"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun ドライãƒ\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"メンテナ: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "オーディオコントロールデãƒã‚¤ã‚¹:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "ãƒãƒƒãƒ•ã‚¡ã®ã‚µã‚¤ã‚º (ミリ秒):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "音é‡ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ‡ãƒã‚¤ã‚¹:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "ミキサを排他的ã«ä½¿ã†"
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun ドライãƒã®è¨­å®š"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "トーンジェãƒãƒ¬ãƒ¼ã‚¿ã«ã¤ã„ã¦"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5727,15 +4118,20 @@ msgstr ""
"URLã« tone://frequency1;frequency2;frequency3;... ã¨è¿½åŠ ã—ã¦ä½¿ç”¨ã—ã¾ã™\n"
"例 tone://2000;2005 㯠2000Hz トーン㨠2005Hz トーンを演å¥ã—ã¾ã™"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "トーンジェãƒãƒ¬ãƒ¼ã‚¿: "
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "ESounD プラグインã«ã¤ã„ã¦"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "オリジナルã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’上書ãã™ã‚‹"
@@ -5749,15 +4145,15 @@ msgstr "タイトルã®æ›¸å¼:"
msgid "Ogg Vorbis Tags"
msgstr "Ogg Vorbis ã‚¿ã‚°:"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Ogg Vorbis オーディオプラグインã®è¨­å®š"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Ogg Vorbis オーディオ プラグインã«ã¤ã„ã¦"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5815,12 +4211,12 @@ msgstr ""
"\n"
"Audacious 実装㯠Pavel Vymetalek <pvymetalek@seznam.cz> ã«ã‚ˆã‚‹"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack デコーダプラグイン %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5832,6 +4228,1595 @@ msgstr ""
"プラグインコードã®ä¸€éƒ¨ã¯ Miles Egan ã«ã‚ˆã‚‹\n"
"Wavpack ã®ã‚µã‚¤ãƒˆ http://www.wavpack.com/ ã‚’ã”覧ãã ã•ã„\n"
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "å¯èƒ½ãªã‚‰ã°ãƒ“ットマップフォントを使用"
+
+#~ msgid ""
+#~ "Use bitmap fonts if they are available. Bitmap fonts do not support "
+#~ "Unicode strings."
+#~ msgstr ""
+#~ "å¯èƒ½ãªã‚‰ã°ãƒ“ットマップフォントを使用ã—ã¾ã™. ビットマップフォント㯠"
+#~ "Unicode 文字列をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“."
+
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>ãã®ä»–(_M)</b>"
+
+#~ msgid "Use two-way text scroller"
+#~ msgstr "åŒæ–¹å‘テキストスクロールを使ã†"
+
+#~ msgid "About "
+#~ msgstr "プラグインã«ã¤ã„ã¦"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "ã“ã®ãƒ—ラグイン㯠GNU LGPL ã®æ¡é …ã¨æ¡ä»¶ã®ã‚‚ã¨ã«é…布ã•ã‚Œã¦ã„ã‚‹.\n"
+#~ "詳細㯠http://www.gnu.org/licenses/lgpl.html を見よ.\n"
+#~ "\n"
+#~ "ã“ã®ãƒ—ラグインã¯, copyright (C) Simon Peter ãŠã‚ˆã³ãã®ä»–ã«ã‚ˆã‚‹AdPlug ライ"
+#~ "ブラリを用ã„ã¦ã„ã‚‹.\n"
+#~ "リンクã—ã¦ã„ã‚‹ AdPlug ライブラリã®ãƒ´ã‚¡ãƒ¼ã‚¸ãƒ§ãƒ³: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: 設定"
+
+#~ msgid "Sound quality"
+#~ msgstr "音質"
+
+#~ msgid "Resolution"
+#~ msgstr "解åƒåº¦"
+
+#~ msgid "8bit"
+#~ msgstr " 8ビット"
+
+#~ msgid "16bit"
+#~ msgstr "16ビット"
+
+#~ msgid "Channels"
+#~ msgstr "ãƒãƒ£ãƒ³ãƒãƒ«æ•°"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "å¿…è¦ã§ãªã„ãªã‚‰ã°, ステレオ設定ã¯æŽ¨å¥¨ã—ã¾ã›ã‚“. OPL2 ã¯å˜ã«ãƒ¢ãƒŽãƒ©ãƒ«ãªã®ã§, "
+#~ "サウンドã«ã‚¹ãƒ†ãƒ¬ã‚ªã‚¨ãƒ•ã‚§ã‚¯ãƒˆã¯ã‹ã‹ã‚Šã¾ã›ã‚“ãŒ, より CPU パワーを消費ã—ã¾ã™!"
+
+#~ msgid "Frequency"
+#~ msgstr "周波数"
+
+#~ msgid "Detect songend"
+#~ msgstr "曲ã®çµ‚ã‚りを検出ã™ã‚‹"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "有効ãªã‚‰ã°, XMMS ã¯æ›²ã®çµ‚ã‚りを検出ã—, 曲をåœæ­¢ã—ã¦ãƒ—レイリストを進ã¿ã¾"
+#~ "ã™. 無効ãªã‚‰ã°, XMMS ã¯æ›²ã®çµ‚ã‚りを通知ã›ãšã«, 曲全体を何度も繰り返ã—ã¾"
+#~ "ã™. "
+
+#~ msgid "Formats"
+#~ msgstr "フォーマット"
+
+#~ msgid "Format selection"
+#~ msgstr "フォーマットé¸æŠž"
+
+#~ msgid "Format"
+#~ msgstr "フォーマット"
+
+#~ msgid "Extension"
+#~ msgstr "æ‹¡å¼µå­"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "é¸æŠžã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—ãŒèªè­˜ã•ã‚Œ, ã“ã®ãƒ—ラグインã«ã‚ˆã£ã¦å†ç”Ÿã•ã‚Œã¾ã™. é¸"
+#~ "択ã•ã‚Œã¦ã„ãªã„タイプã¯, ã“ã®ãƒ—ラグインã‹ã‚‰ã¯ç„¡è¦–ã•ã‚Œ, ä»–ã®ãƒ—ラグインã«ã‚ˆã£"
+#~ "ã¦å†ç”Ÿã•ã‚Œã¾ã™. "
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: ファイル情報"
+
+#~ msgid "Author: "
+#~ msgstr "作者: "
+
+#~ msgid "File Type: "
+#~ msgstr "ファイルタイプ: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "サブソング: "
+
+#~ msgid "Instruments: "
+#~ msgstr "楽器: "
+
+#~ msgid "Orders: "
+#~ msgstr "é †åº: "
+
+#~ msgid "Patterns: "
+#~ msgstr "パターン: "
+
+#~ msgid "Song"
+#~ msgstr "曲"
+
+#~ msgid "Instrument name"
+#~ msgstr "楽器å"
+
+#~ msgid "Song message"
+#~ msgstr "曲メッセージ"
+
+#~ msgid "Subsong selection"
+#~ msgstr "サブソングé¸æŠž"
+
+#~ msgid "Order: "
+#~ msgstr "é †åº: "
+
+#~ msgid "Pattern: "
+#~ msgstr "パターン: "
+
+#~ msgid "Row: "
+#~ msgstr "列: "
+
+#~ msgid "Speed: "
+#~ msgstr "æ—©ã•: "
+
+#~ msgid "Timer: "
+#~ msgstr "タイマー: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "XMMS アラームã«ã¤ã„ã¦"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS アラーム"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "特定ã®æ™‚é–“ã«æ¼”å¥ã‚’開始ã™ã‚‹ã®ã«\n"
+#~ "用ã„られる XMMS プラグイン.\n"
+#~ "\n"
+#~ "å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã‚‰ã™ã¹ã¦ä»¥ä¸‹ã¸é€ã£ã¦ãã ã•ã„:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "アラーム"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "目覚ã¾ã—ã§ã™."
+
+#~ msgid "Select Playlist"
+#~ msgstr "プレイリストã®é¸æŠž"
+
+#~ msgid "Sorry"
+#~ msgstr "ã”ã‚ã‚“ãªã•ã„"
+
+#~ msgid "Warning"
+#~ msgstr "警告"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "安全ã®ãŸã‚ã«, \"é™ã‹ã«ãªã‚‹\"時間ã¯å°‘ãªãã¨ã‚‚ 65 秒ã‚ã‚Š, 10 秒以上ãªã‘ã‚Œã°"
+#~ "ãªã‚‰ãªã„フェーディング時間より長ããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“. ã“ã‚Œã¯åŸºæœ¬çš„ã«ã‚³ãƒ¼ãƒ‰"
+#~ "ã®ãƒã‚°ã§ã‚ã‚Š, 真ã®ä¿®æ­£æ–¹æ³•ãŒè¦‹ã¤ã‹ã‚‹ã¾ã§ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯è¡¨ç¤ºã•ã‚Œã‚‹ã§ã—ょ"
+#~ "ㆠ:)\n"
+#~ "\n"
+#~ "フェーディング設定ã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+
+#~ msgid "Oh Well"
+#~ msgstr "ã‚ã‹ã‚Šã¾ã—ãŸ"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "アラーム設定"
+
+#~ msgid "Time"
+#~ msgstr "時間"
+
+#~ msgid "hours"
+#~ msgstr "時"
+
+#~ msgid "h"
+#~ msgstr "時"
+
+#~ msgid "minutes"
+#~ msgstr "分"
+
+#~ msgid "Quiet after:"
+#~ msgstr "é™ã‹ã«ãªã‚‹ã¾ã§:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "アラーム(デフォルト):"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "アラームを鳴らã™æ›œæ—¥ã®é¸æŠž"
+
+#~ msgid "Day"
+#~ msgstr "曜日"
+
+#~ msgid "Tuesday"
+#~ msgstr "ç«"
+
+#~ msgid "Wednesday"
+#~ msgstr "æ°´"
+
+#~ msgid "Thursday"
+#~ msgstr "木"
+
+#~ msgid "Friday"
+#~ msgstr "金"
+
+#~ msgid "Saturday"
+#~ msgstr "土"
+
+#~ msgid "Sunday"
+#~ msgstr "æ—¥"
+
+#~ msgid "Monday"
+#~ msgstr "月"
+
+#~ msgid "Days"
+#~ msgstr "曜日"
+
+#~ msgid "Fading"
+#~ msgstr "フェーディング"
+
+#~ msgid "Volume"
+#~ msgstr "音é‡"
+
+#~ msgid "Current"
+#~ msgstr "ç¾åœ¨ã®å€¤"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "ç¾åœ¨ã®å‡ºåŠ›éŸ³é‡ã«ãƒªã‚»ãƒƒãƒˆ"
+
+#~ msgid "Start at"
+#~ msgstr "開始"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "最終"
+
+#~ msgid "Additional Command"
+#~ msgstr "追加コマンド"
+
+#~ msgid "enable"
+#~ msgstr "有効"
+
+#~ msgid "Playlist (optional)"
+#~ msgstr "プレイリスト (オプショナル)"
+
+#~ msgid "Browse..."
+#~ msgstr "å‚ç…§..."
+
+#~ msgid "Reminder"
+#~ msgstr "リマインダ"
+
+#~ msgid "Use reminder"
+#~ msgstr "リマインダを使ã†"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "オプションã®æ„味"
+
+#~ msgid ""
+#~ "\n"
+#~ "Time\n"
+#~ " Alarm at: \n"
+#~ " The time for the alarm to come on.\n"
+#~ "\n"
+#~ " Quiet After: \n"
+#~ " Stop alarm after this amount of time.\n"
+#~ " (if the wakeup dialog is not closed)\n"
+#~ "\n"
+#~ "\n"
+#~ "Days\n"
+#~ " Day:\n"
+#~ " Select the days for the alarm to activate.\n"
+#~ "\n"
+#~ " Time:\n"
+#~ " Choose the time for the alarm on each day,\n"
+#~ " or select the toggle button to use the default\n"
+#~ " time.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volume\n"
+#~ " Fading: \n"
+#~ " Fade the volume up to the chosen volume \n"
+#~ " for this amount of time.\n"
+#~ "\n"
+#~ " Start at: \n"
+#~ " Start fading from this volume.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " The volume to stop fading at. If the fading\n"
+#~ " time is 0 then set volume to this and start\n"
+#~ " playing.\n"
+#~ "\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " Additional Command:\n"
+#~ " Run this command at the alarm time.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "時間\n"
+#~ " アラーム: \n"
+#~ " アラームを鳴らã™æ™‚é–“ã§ã™.\n"
+#~ "\n"
+#~ " é™ã‹ã«ãªã‚‹ã¾ã§: \n"
+#~ " 指定ã®æ™‚é–“ãŒçµŒéŽã—ãŸã‚‰ã‚¢ãƒ©ãƒ¼ãƒ ã‚’åœæ­¢ã—ã¾ã™.\n"
+#~ " (目覚ã—ダイアログãŒé–‰ã˜ã‚‰ã‚Œã¦ã„ãªã‘ã‚Œã°)\n"
+#~ "\n"
+#~ "\n"
+#~ "曜日\n"
+#~ " 曜日:\n"
+#~ " アラームを有効ã«ã™ã‚‹æ›œæ—¥ã‚’é¸æŠžã—ã¾ã™.\n"
+#~ "\n"
+#~ " 時間:\n"
+#~ " å„曜日ã®ã‚¢ãƒ©ãƒ¼ãƒ ã®æ™‚é–“ã‚’é¸æŠžã—ã¾ã™.\n"
+#~ " ã‚ã‚‹ã„ã¯ãƒˆã‚°ãƒ«ãƒœã‚¿ãƒ³ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ™‚é–“ã‚’\n"
+#~ " 使ã†ã‹é¸æŠžã—ã¾ã™.\n"
+#~ "\n"
+#~ "\n"
+#~ "音é‡\n"
+#~ " フェーディング: \n"
+#~ " 指定ã®æ™‚é–“ã‚’ã‹ã‘ã¦, 指定ã®éŸ³é‡ã¾ã§\n"
+#~ " å¾ã€…ã«éŸ³é‡ã‚’上ã’ã¦ã„ãã¾ã™.\n"
+#~ "\n"
+#~ " 開始: \n"
+#~ " ã“ã®éŸ³é‡ã‹ã‚‰ãƒ•ã‚§ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’開始ã—ã¾ã™.\n"
+#~ "\n"
+#~ " 最終: \n"
+#~ " ã“ã®éŸ³é‡ã§ãƒ•ã‚§ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’終ãˆã¾ã™.\n"
+#~ " ã‚‚ã—フェーディング時間㌠0 ãªã‚‰ã°,\n"
+#~ " ã“ã®éŸ³é‡ã§æ¼”å¥ãŒé–‹å§‹ã•ã‚Œã¾ã™.\n"
+#~ "\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ " 追加コマンド:\n"
+#~ " アラームã®æ™‚é–“ã«æŒ‡å®šã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™.\n"
+#~ "\n"
+#~ " プレイリスト: \n"
+#~ " 曲を演å¥ã™ã‚‹ãŸã‚ã®ãƒ—レイリストを読ã¿è¾¼ã¿ã¾ã™\n"
+#~ " (.m3u æ‹¡å¼µå­ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“). \n"
+#~ " プレイリストãŒæŒ‡å®šã•ã‚Œãªã‘ã‚Œã°, \n"
+#~ " ç¾åœ¨ã®ãƒªã‚¹ãƒˆã®æ›²ãŒç”¨ã„られã¾ã™.\n"
+#~ " mp3 ã‹ ogg ストリーム㮠URL も指定ã§ãã¾ã™ãŒ,\n"
+#~ " URL ã‹ã‚‰ã®ãƒ—レイリスト読ã¿è¾¼ã¿ã¯\n"
+#~ " ç¾åœ¨ã® xmms ã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“.\n"
+#~ "\n"
+#~ " リマインダ:\n"
+#~ " アラームをåœæ­¢ã™ã‚‹éš›ã«ãƒªãƒžã‚¤ãƒ³ãƒ€ã‚’表示ã—ã¾ã™.\n"
+#~ " ã“れを利用ã™ã‚‹ã«ã¯ãƒœãƒƒã‚¯ã‚¹å†…ã«ãƒªãƒžã‚¤ãƒ³ãƒ€ã‚’書ã\n"
+#~ " トグルボタンを有効ã«ã—ã¾ã™.\n"
+
+#~ msgid "Your reminder for today is.."
+#~ msgstr "今日ã®ãƒªãƒžã‚¤ãƒ³ãƒ€ã¯.."
+
+#~ msgid "Thankyou"
+#~ msgstr "ã‚ã‚ŠãŒã¨ã†"
+
+#, fuzzy
+#~ msgid "Available Headsets"
+#~ msgstr "有効ãªãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"
+
+#, fuzzy
+#~ msgid "Current Headset"
+#~ msgstr "ç¾åœ¨ã®å€¤"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "接続"
+
+#, fuzzy
+#~ msgid "Class"
+#~ msgstr "é–‰ã˜ã‚‹"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#, fuzzy
+#~ msgid "Rescan"
+#~ msgstr "CD ã‚’å†ã‚¹ã‚­ãƒ£ãƒ³"
+
+#~ msgid "Playback->Play"
+#~ msgstr "æ¼”å¥->開始"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "æ¼”å¥->åœæ­¢"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "æ¼”å¥->一時åœæ­¢"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "æ¼”å¥->å‰ã®æ›²"
+
+#~ msgid "Playback->Next"
+#~ msgstr "æ¼”å¥->次ã®æ›²"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "æ¼”å¥->イジェクト"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "æ¼”å¥->リピート"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "æ¼”å¥->シャッフル"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "音é‡->5上ã’ã‚‹"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "音é‡->5下ã’ã‚‹"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "音é‡->10上ã’ã‚‹"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "音é‡->10下ã’ã‚‹"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "音é‡->ミュート"
+
+#~ msgid "Window->Main"
+#~ msgstr "ウィンドウ->メイン"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "ウィンドウ->プレイリスト"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "ウィンドウ->イコライザー"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "ウィンドウ->ファイルã¸ã‚¸ãƒ£ãƒ³ãƒ—"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’é–‹ã‘ã¾ã›ã‚“, ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’ス"
+#~ "キップã—ã¾ã™; ファイルãŒå­˜åœ¨ã™ã‚‹ã“ã¨ã¨èª­ã¿è¾¼ã¿ãƒ‘ーミッションãŒã‚ã‚‹ã‹ç¢ºèªã—"
+#~ "ã¦ãã ã•ã„\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr ""
+#~ "event-device-plugin: デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« %s ã® io_channel を作æˆã§ãã¾ã›ã‚“,ã“"
+#~ "ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’スキップã—ã¾ã™\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /proc/bus/input/devices ã‚’é–‹ã‘ã¾ã›ã‚“, イベントデãƒã‚¤"
+#~ "スã®è‡ªå‹•æ¤œå‡ºã¯å‹•ä½œã—ã¾ã›ã‚“.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /proc/bus/input/ デãƒã‚¤ã‚¹ã® io_channel ã‚’é–‹ã‘ã¾ã›ã‚“, "
+#~ "イベントデãƒã‚¤ã‚¹ã®è‡ªå‹•æ¤œå‡ºã¯å‹•ä½œã—ã¾ã›ã‚“.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /proc/bus/input/ デãƒã‚¤ã‚¹ã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—"
+#~ "ã¾ã—ãŸ, イベントデãƒã‚¤ã‚¹ã®è‡ªå‹•æ¤œå‡ºã¯å‹•ä½œã—ã¾ã›ã‚“.\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: デãƒã‚¤ã‚¹ %s ㌠/dev/input ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“, スキップ"
+#~ "ã—ã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr ""
+#~ "event-device-plugin: コンフィグファイル %s ãŒèª­ã¿è¾¼ã‚ã¾ã›ã‚“, デフォルト設"
+#~ "定ãŒç”¨ã„られã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: デãƒã‚¤ã‚¹ \"%s\" ã®ã‚³ãƒ³ãƒ•ã‚£ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã®æƒ…å ±ãŒä¸å®Œå…¨ã§"
+#~ "ã™, スキップã—ã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã® is_active 値ãŒå–å¾—ã§ãã¾ã›"
+#~ "ã‚“, スキップã—ã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ローカルディレクトリ %s ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“, 設定ã¯"
+#~ "ä¿å­˜ã•ã‚Œã¾ã›ã‚“.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã®ãƒ•ã‚¡ã‚¤ãƒ«åãŒå–å¾—ã§ãã¾ã›ã‚“, "
+#~ "スキップã—ã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã® phys 値ãŒå–å¾—ã§ãã¾ã›ã‚“, ス"
+#~ "キップã—ã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã® is_custom 値ãŒå–å¾—ã§ãã¾ã›"
+#~ "ã‚“, スキップã—ã¾ã™.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 設定: デãƒã‚¤ã‚¹ \"%s\" ã®äºˆæœŸã›ã¬å€¤ã§ã™, スキップã—ã¾"
+#~ "ã™.\n"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "曲ã®çµ‚ã‚りを検出ã™ã‚‹"
+
+#, fuzzy
+#~ msgid "Custom"
+#~ msgstr "カスタム "
+
+#, fuzzy
+#~ msgid "Not Detected"
+#~ msgstr "é¸æŠžç¯„囲ã®ã‚½ãƒ¼ãƒˆ"
+
+#~ msgid "Information"
+#~ msgstr "情報"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "デãƒã‚¤ã‚¹ãŒæ¤œå‡ºã•ã‚Œã¦ã„ãªã„ãŸã‚, ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒé–‹ã‘ã¾ã›ã‚“.\n"
+#~ "デãƒã‚¤ã‚¹ãŒæ­£ã—ã接続ã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„."
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "é¸æŠžã•ã‚ŒãŸãƒ‡ãƒã‚¤ã‚¹ãŒé–‹ã‘ã¾ã›ã‚“.\n"
+#~ "デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿ãƒ‘ーミッションを確èªã—ã¦ãã ã•ã„."
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug - カスタムデãƒã‚¤ã‚¹ã®è¿½åŠ "
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "EvDev-Plug ã¯, システムã§æœ‰åŠ¹ãªã‚¤ãƒ™ãƒ³ãƒˆãƒ‡ãƒã‚¤ã‚¹ã®æƒ…報を自動的ã«æ¤œå‡ºã—ã¦æ›´"
+#~ "æ–°ã—よã†ã¨ã—ã¾ã™.\n"
+#~ "ã—ã‹ã—, システムã§è‡ªå‹•æ¤œå‡ºãŒå‹•ä½œã—ãªã„, ã‚ã‚‹ã„ã¯ã‚¤ãƒ™ãƒ³ãƒˆãƒ‡ãƒã‚¤ã‚¹ãŒéžæ¨™æº–ãª"
+#~ "ä½ç½®ã«ã‚ã‚‹å ´åˆ(ç¾çŠ¶ /dev/input/ ã®ã¿ã‚’検索ã—ã¾ã™), \n"
+#~ "åå‰ã¨ãƒ‡ãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’明確ã«æŒ‡å®šã—ã¦ã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒã‚¤ã‚¹ã¨ã—ã¦è¿½åŠ ã—ã¦ãã ã•"
+#~ "ã„."
+
+#~ msgid "Device name:"
+#~ msgstr "デãƒã‚¤ã‚¹å:"
+
+#~ msgid "Device file:"
+#~ msgstr "デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«:"
+
+#, fuzzy
+#~ msgid "(custom)"
+#~ msgstr "カスタム "
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "åå‰ã¨ãƒ•ã‚¡ã‚¤ãƒ«åã®ä¸¡æ–¹ã‚’指定ã—ã¦ãã ã•ã„.\n"
+#~ "ファイルåã¯çµ¶å¯¾ãƒ‘スã§æŒ‡å®šã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“."
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr "é¸æŠžã—ãŸãƒ‡ãƒã‚¤ã‚¹ã‚’ç¾åœ¨ã®è¨­å®šã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "é¸æŠžã—ãŸã‚«ã‚¹ã‚¿ãƒ ãƒ‡ãƒã‚¤ã‚¹ã‚’削除ã—ã¾ã™ã‹?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug - 設定"
+
+#~ msgid "Active"
+#~ msgstr "アクティブ"
+
+#~ msgid "Status"
+#~ msgstr "状態"
+
+#~ msgid "Device Name"
+#~ msgstr "デãƒã‚¤ã‚¹å"
+
+#~ msgid "Device File"
+#~ msgstr "デãƒã‚¤ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«"
+
+#~ msgid "Device Address"
+#~ msgstr "デãƒã‚¤ã‚¹ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#~ msgid "_Bindings"
+#~ msgstr "ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°(_B)"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "ãƒã‚¤ãƒ³ãƒ‰ã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ã®ã‚­ãƒ¼ã‚’押ã—ã¦ãã ã•ã„.\n"
+#~ "5秒以内ã«ã‚­ãƒ¼ãŒæŠ¼ã•ã‚Œãªã‘ã‚Œã°, \n"
+#~ "ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’変更ã›ãšã«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã¾ã™. "
+
+#~ msgid ""
+#~ "This input event has been already assigned.\n"
+#~ "\n"
+#~ "It's not possible to assign multiple actions to the same input event "
+#~ "(although it's possible to assign the same action to multiple events)."
+#~ msgstr ""
+#~ "ã“ã®å…¥åŠ›ã‚¤ãƒ™ãƒ³ãƒˆã¯æ—¢ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™.\n"
+#~ "\n"
+#~ "åŒã˜å…¥åŠ›ã‚¤ãƒ™ãƒ³ãƒˆã«è¤‡æ•°ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’割り当ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“. (ã—ã‹ã—, "
+#~ "複数ã®ã‚¤ãƒ™ãƒ³ãƒˆã«åŒã˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’割り当ã¦ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™)"
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug - ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°è¨­å®š"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>åå‰: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>ファイルå: </b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>Phys.アドレス: </b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug ã«ã¤ã„ã¦"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "イベントデãƒã‚¤ã‚¹ã«ã‚ˆã£ã¦ãƒ—レイヤをé éš”æ“作\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "Giacomo Lozito ã«ã‚ˆã£ã¦æ›¸ã‹ã‚ŒãŸ.\n"
+#~ "\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "LADSPA プラグインã«ãƒ¦ãƒ¼ã‚¶ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#~ msgid "Name"
+#~ msgstr "åå‰"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Installed plugins"
+#~ msgstr "インストール済プラグイン"
+
+#~ msgid "Running plugins"
+#~ msgstr "動作中ã®ãƒ—ラグイン"
+
+#~ msgid "Add"
+#~ msgstr "追加"
+
+#~ msgid "Remove"
+#~ msgstr "削除"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "LADSPA プラグイン カタログ"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "LIRC Audacious プラグインã«ã¤ã„ã¦"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "LIRC プラグイン"
+
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "LIRC リモートコントロールデーモンを用ã„ã¦\n"
+#~ "Audacious をコントロールã™ã‚‹ã‚·ãƒ³ãƒ—ルãªãƒ—ラグイン\n"
+#~ "\n"
+#~ "Tony Vroon <chainsaw@gentoo.org> ã«ã‚ˆã‚‹ Audacious ã¸ã®é©ç”¨\n"
+#~ "å…ƒã¨ãªã£ãŸ XMMS LIRC プラグインã¯\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by> ã«ã‚ˆã‚‹.\n"
+#~ "LIRC ã®æƒ…å ±ã¯ä»¥ä¸‹ã§å¾—られる.\n"
+#~ "http://lirc.org"
+
+#~ msgid "LIRC plugin settings"
+#~ msgstr "LIRC プラグイン設定"
+
+#~ msgid "Reconnect to LIRC server"
+#~ msgstr "LIRC サーãƒã«å†æŽ¥ç¶š"
+
+#~ msgid "Timeout before reconnecting (seconds): "
+#~ msgstr "å†æŽ¥ç¶šã¾ã§ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ(秒): "
+
+#~ msgid "Reconnect"
+#~ msgstr "å†æŽ¥ç¶š"
+
+#~ msgid "Connection"
+#~ msgstr "接続"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: LIRC サãƒãƒ¼ãƒˆã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: LIRC 設定ファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ\n"
+#~ "%s: æ­£ã—ã„設定ファイルã®ä½œã‚Šæ–¹ã‚’知るã«ã¯\n"
+#~ "%s: LIRC ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’読んã§ãã ã•ã„\n"
+
+#~ msgid "%s: trying to reconnect...\n"
+#~ msgstr "%s: å†æŽ¥ç¶šã‚’試行中...\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: ä¸æ˜Žãªã‚³ãƒžãƒ³ãƒ‰ \"%s\"\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: LIRC ã‹ã‚‰åˆ‡æ–­ã•ã‚Œã¾ã—ãŸ\n"
+
+#~ msgid "%s: will try reconnect every %d seconds...\n"
+#~ msgstr "%s: %d 秒ã”ã¨ã«å†æŽ¥ç¶šã‚’試ã¿ã¾ã™...\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "ModPlug 設定"
+
+#~ msgid "16 bit"
+#~ msgstr "16ビット"
+
+#~ msgid "8 bit"
+#~ msgstr " 8ビット"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "モノラル (ダウンミックス)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "最短 (最速)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "線形 (高速)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "スプライン (良å“質)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "8 タップ Fir (éžå¸¸ã«é«˜å“質)"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "48 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "サンプリングレート"
+
+#~ msgid "Enable"
+#~ msgstr "有効"
+
+#~ msgid "Depth"
+#~ msgstr "æ·±ã•"
+
+#~ msgid "Delay"
+#~ msgstr "é…延"
+
+#~ msgid "Reverb"
+#~ msgstr "リãƒãƒ¼ãƒ–"
+
+#~ msgid "Amount"
+#~ msgstr "é‡"
+
+#~ msgid "Range"
+#~ msgstr "範囲"
+
+#~ msgid "Bass Boost"
+#~ msgstr "ベース増加"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr ""
+#~ "注æ„: プリアンプã®è¨­å®šãŒé«˜ã™ãŽã‚‹ã¨\n"
+#~ "クリッピング(ã†ã‚‹ã•ã„ã‚«ãƒã‚«ãƒéŸ³ã‚„\n"
+#~ "ブツブツ音)ã®åŽŸå› ã«ãªã‚Šã¾ã™!"
+
+#~ msgid "Effects"
+#~ msgstr "エフェクト"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "ファイルåを曲åã¨ã—ã¦ä½¿ã†"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "高速ãªãƒ—レイリスト情報"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "ノイズリダクション"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Amiga MOD ã‚’æ¼”å¥ã™ã‚‹"
+
+#~ msgid "Don't loop"
+#~ msgstr "ループã—ãªã„"
+
+#~ msgid "Loop"
+#~ msgstr "ループ回数"
+
+#~ msgid "time(s)"
+#~ msgstr "回"
+
+#~ msgid "Loop forever"
+#~ msgstr "æ°¸é ã«ãƒ«ãƒ¼ãƒ—"
+
+#~ msgid "Looping"
+#~ msgstr "ループ"
+
+#~ msgid "MOD Info"
+#~ msgstr "MOD 情報"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "ファイルå:\n"
+#~ "曲å:\n"
+#~ "タイプ:\n"
+#~ "é•·ã•:\n"
+#~ "速ã•:\n"
+#~ "テンãƒ:\n"
+#~ "サンプリングレート:\n"
+#~ "楽器:\n"
+#~ "パターン:\n"
+#~ "ãƒãƒ£ãƒ³ãƒãƒ«:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "サンプリングレート"
+
+#~ msgid "Instruments"
+#~ msgstr "楽器"
+
+#~ msgid "Message"
+#~ msgstr "メッセージ"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Modplug 入力プラグイン for Audacious ver"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Modplug サウンドエンジン㯠Olivier Lapicque ã«ã‚ˆã£ã¦æ›¸ã‹ã‚ŒãŸ.\n"
+#~ "Modplug XMMS インタフェイス㯠Kenton Vard ã«ã‚ˆã‚‹.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "æ›´æ–°ã¨ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã¯ Konstanty Bialkowski ã«ã‚ˆã‚‹.\n"
+#~ "BMP ã¸ã®ãƒãƒ¼ãƒˆã¯ Theofilos Intzoglou ã«ã‚ˆã‚‹."
+
+#~ msgid "About Modplug"
+#~ msgstr "Modplug ã«ã¤ã„ã¦"
+
+#~ msgid "Show separators in playlist"
+#~ msgstr "プレイリストã®åŒºåˆ‡ã‚Šç·šã‚’表示ã™ã‚‹"
+
+#~ msgid "Show window manager decoration"
+#~ msgstr "ウィンドウマãƒãƒ¼ã‚¸ãƒ£è£…飾を表示ã™ã‚‹"
+
+#~ msgid "This enables the window manager to show decorations for windows."
+#~ msgstr "ウィンドウマãƒãƒ¼ã‚¸ãƒ£ã«ã‚ˆã‚‹ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦è£…飾を有効ã«ã—ã¾ã™."
+
+#~ msgid ""
+#~ "If selected, the file information text in the main window will scroll "
+#~ "back and forth. If not selected, the text will only scroll in one "
+#~ "direction."
+#~ msgstr ""
+#~ "ã“れを使ã†ã¨ï¼Œãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ãƒ•ã‚¡ã‚¤ãƒ«æƒ…報テキストãŒå‰å¾Œã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¾"
+#~ "ã™ï¼Žãã†ã§ãªã‘ã‚Œã°ï¼Œãƒ†ã‚­ã‚¹ãƒˆã¯ä¸€æ–¹å‘ã®ã¿ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¾ã™ï¼Ž"
+
+#~ msgid "Disable inline gtk theme"
+#~ msgstr "インライン GTK テーマを無効ã«ã™ã‚‹"
+
+#, fuzzy
+#~ msgid "Random skin on play"
+#~ msgstr "プレイリストã®é †åºã‚’ランダムã«ã—ã¾ã™."
+
+#~ msgid "Allow loading incomplete skins"
+#~ msgstr "ä¸å®Œå…¨ãªã‚¹ã‚­ãƒ³ã®èª­ã¿è¾¼ã¿ã‚’許å¯ã™ã‚‹"
+
+#~ msgid ""
+#~ "If selected, audacious won't refuse loading broken skins. Use only if "
+#~ "your favourite skin doesn't work"
+#~ msgstr ""
+#~ "ã“れを使ã†ã¨ï¼Œaudacious ã¯å£Šã‚ŒãŸã‚¹ã‚­ãƒ³ã®èª­ã¿è¾¼ã¿ã‚’拒絶ã—ã¾ã›ã‚“.ãŠæ°—ã«å…¥ã‚Š"
+#~ "ã®ã‚¹ã‚­ãƒ³ãŒå‹•ã‹ãªã„ã¨ãã ã‘使用ã—ã¦ãã ã•ã„."
+
+#~ msgid "Color Adjustment"
+#~ msgstr "色補正"
+
+#~ msgid ""
+#~ "Audacious allows you to alter the color balance of the skinned UI. The "
+#~ "sliders below will allow you to do this."
+#~ msgstr "以下ã®ã‚¹ãƒ©ã‚¤ãƒ€ã‚’用ã„ã¦ã‚¹ã‚­ãƒ³ UI ã®è‰²åˆã„ã®å¤‰æ›´ãŒã§ãã¾ã™."
+
+#~ msgid "Blue"
+#~ msgstr "é’"
+
+#~ msgid "Green"
+#~ msgstr "ç·‘"
+
+#~ msgid "Red"
+#~ msgstr "赤"
+
+#, fuzzy
+#~ msgid "Color adjustment ..."
+#~ msgstr "色補正"
+
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "「GUI スケーリングã€ç„¡åŠ¹"
+
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "「GUI スケーリングã€æœ‰åŠ¹"
+
+#~ msgid "DoubleSize"
+#~ msgstr "ダブルサイズ"
+
+#~ msgid "Easy Move"
+#~ msgstr "ç°¡å˜ç§»å‹•"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "スペクトラムアナライザ"
+
+#, fuzzy
+#~ msgid "Search:"
+#~ msgstr "å¹´:"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "楽器å"
+
+#, fuzzy
+#~ msgid "Now playing"
+#~ msgstr "æ–°ã—ã„プレイリスト"
+
+#, fuzzy
+#~ msgid "Remove Bookmark"
+#~ msgstr "ã‚¿ã‚°ã®å‰Šé™¤"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "OSS ドライãƒã«ã¤ã„ã¦"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "This is a simple stream browser that includes the most popular streaming "
+#~ "directories.\n"
+#~ "Many thanks to the Streamtuner developers <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tand of course to the whole Audacious community.\n"
+#~ "\n"
+#~ "Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+#~ "\n"
+#~ "This was a Google Summer of Code 2008 project."
+#~ msgstr ""
+#~ "Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "libcdio 開発者 <http://www.gnu.org/software/libcdio/> ã¨\n"
+#~ "\tlibcddb 開発者 <http://libcddb.sourceforge.net/> ã«å¤šå¤§ãªã‚‹æ„Ÿè¬.\n"
+#~ "\n"
+#~ "Tony Vroon ã«ã‚ˆã‚‹åŠ©è¨€ã¨æŒ‡é‡ã«æ„Ÿè¬.\n"
+#~ "\n"
+#~ "ã“れ㯠Google Summer of Code 2007 ã®ãƒ—ロジェクトã§ã—ãŸ."
+
+#~ msgid "Can't jump to time when no track is being played.\n"
+#~ msgstr "å†ç”Ÿã•ã‚Œã‚‹ãƒˆãƒ©ãƒƒã‚¯ãŒãªã„時間ã¸ã¯ç§»å‹•ã§ãã¾ã›ã‚“.\n"
+
+#~ msgid "minutes:seconds"
+#~ msgstr "分:秒"
+
+#~ msgid "Track length:"
+#~ msgstr "トラックã®åˆè¨ˆæ™‚é–“:"
+
+#~ msgid "Error writing playlist \"%s\": %s"
+#~ msgstr "プレイリスト \"%s\" を書ã込む際ã«ã‚¨ãƒ©ãƒ¼: %s"
+
+#~ msgid "%s already exist. Continue?"
+#~ msgstr "%s ã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™. 続行ã—ã¾ã™ã‹ï¼Ÿ"
+
+#, fuzzy
+#~ msgid "Show main menu"
+#~ msgstr "メインウィンドウを表示ã™ã‚‹"
+
+#, fuzzy
+#~ msgid "Show/hide statusbar"
+#~ msgstr "プレイリストã®ä¿å­˜"
+
+#, fuzzy
+#~ msgid "Import Playlist ..."
+#~ msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+
+#, fuzzy
+#~ msgid "Export Playlist ..."
+#~ msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+
+#, fuzzy
+#~ msgid "Refresh"
+#~ msgstr "リフレッシュレート"
+
+#, fuzzy
+#~ msgid "Refresh Selected"
+#~ msgstr "é¸æŠžã—ãŸã‚¨ãƒ³ãƒˆãƒªã®å‰Šé™¤"
+
+#, fuzzy
+#~ msgid "Refreshes metadata associated with selected entries."
+#~ msgstr "プレイリストã®ã‚¨ãƒ³ãƒˆãƒªã«é–¢é€£ä»˜ã‘られãŸãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¾ã™."
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "プレイリストã®é †åºã‚’ランダムã«ã—ã¾ã™."
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "タイトル"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "コメント:"
+
+#~ msgid "Upload selected track(s)"
+#~ msgstr "é¸æŠžã•ã‚ŒãŸãƒˆãƒ©ãƒƒã‚¯ã‚’アップロード"
+
+#~ msgid "MTP device handler"
+#~ msgstr "MTP デãƒã‚¤ã‚¹ãƒãƒ³ãƒ‰ãƒ©"
+
+#~ msgid "Show main player window"
+#~ msgstr "メインウィンドウを表示ã™ã‚‹"
+
+#~ msgid "Ignore"
+#~ msgstr "無視"
+
+#~ msgid ""
+#~ "Audacious has been started with all of its windows hidden.\n"
+#~ "You may want to show the player window again to control Audacious; "
+#~ "otherwise, you'll have to control it remotely via audtool or enabled "
+#~ "plugins (such as the statusicon plugin)."
+#~ msgstr ""
+#~ "Audacious ã¯ã™ã¹ã¦ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒéš ã•ã‚ŒãŸçŠ¶æ…‹ã§é–‹å§‹ã•ã‚Œã¾ã—ãŸï¼Ž\n"
+#~ "å†åº¦ãƒ—レイヤウィンドウを表示ã™ã‚‹ã‹ï¼Œãã®ã¾ã¾ Audacious ã‚’æ“作ã™ã‚‹ãŸã‚ã«"
+#~ "ã¯ï¼Œaudtool を用ã„ã‚‹ã‹ statusicon ã®ã‚ˆã†ãªãƒ—ラグインを有効ã«ã™ã‚‹ã“ã¨ã§é éš”"
+#~ "æ“作ã—ã¦ãã ã•ã„."
+
+#~ msgid "Always ignore, show/hide is controlled remotely"
+#~ msgstr "常ã«ç„¡è¦–ã—,表示ã™ã‚‹/éš ã™ ã¯é éš”æ“作ã™ã‚‹"
+
+#~ msgid "Audacious - broken GTK engine usage warning"
+#~ msgstr "Audacious - 壊れ㟠GTK エンジンã®ä½¿ç”¨è­¦å‘Š"
+
+#~ msgid ""
+#~ "<big><b>Broken GTK engine in use</b></big>\n"
+#~ "\n"
+#~ "Audacious has detected that you are using a broken GTK engine.\n"
+#~ "\n"
+#~ "The theme engine you are using, <i>%s</i>, is incompatible with some of "
+#~ "the features used by modern skins. The incompatible features have been "
+#~ "disabled for this session.\n"
+#~ "\n"
+#~ "To use these features, please consider using a different GTK theme engine."
+#~ msgstr ""
+#~ "<big><b>壊れ㟠GTK エンジンãŒä½¿ã‚ã‚Œã¦ã„ã¾ã™</b></big>\n"
+#~ "\n"
+#~ "Audacious 㯠GTK エンジンãŒä½¿ã‚ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’検出ã—ã¾ã—ãŸ.\n"
+#~ "\n"
+#~ "テーマエンジン <i>%s</i> ã¯æœ€è¿‘ã®ã‚¹ã‚­ãƒ³ã§ç”¨ã„られã¦ã„る特徴ã¨éžäº’æ›ã§ã™.éž"
+#~ "互æ›ãªç‰¹å¾´ã¯ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã¯ç„¡åŠ¹ã«ã•ã‚Œã¾ã—ãŸ.\n"
+#~ "\n"
+#~ "ã“れらã®ç‰¹å¾´ã‚’用ã„ã‚‹ã«ã¯, ä»–ã® GTK テーマエンジンを使ã†ã“ã¨ã‚’考慮ã—ã¦ãã "
+#~ "ã•ã„."
+
+#~ msgid "Do not display this warning again"
+#~ msgstr "次回ã‹ã‚‰ã“ã®è­¦å‘Šã‚’表示ã—ãªã„"
+
+#~ msgid "Save as Static Playlist"
+#~ msgstr "スタティックプレイリストã¨ã—ã¦ä¿å­˜"
+
+#~ msgid "Use Relative Path"
+#~ msgstr "相対パスを使ã†"
+
+#~ msgid "Load Playlist"
+#~ msgstr "プレイリストã®èª­ã¿è¾¼ã¿"
+
+#~ msgid "Save Playlist"
+#~ msgstr "プレイリストã®ä¿å­˜"
+
+#~ msgid ""
+#~ "* Select ALSA output ports *\n"
+#~ "MIDI events will be sent to the ports selected here. In example, if your "
+#~ "audio card provides a hardware synth and you want to play MIDI with it, "
+#~ "you'll probably want to select the wavetable synthesizer ports."
+#~ msgstr ""
+#~ "* ALSA 出力ãƒãƒ¼ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„ *\n"
+#~ "MIDI イベントã¯ã“ã“ã§é¸æŠžã•ã‚ŒãŸãƒãƒ¼ãƒˆã«é€ã‚‰ã‚Œã¾ã™. 例ãˆã°, ã‚ãªãŸã®ã‚ªãƒ¼"
+#~ "ディオカードãŒãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚·ãƒ³ã‚»ã‚’æä¾›ã—, ãれ㧠MIDI ã‚’æ¼”å¥ã—ãŸã„ãªã‚‰ã°, "
+#~ "ウェーブテーブルシンセサイザーãƒãƒ¼ãƒˆã‚’é¸ã¶ã¨ã‚ˆã„ã§ã—ょã†."
+
+#~ msgid ""
+#~ "* Select ALSA mixer card *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volumeslider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* ALSA ミキサカードをé¸æŠžã—ã¦ãã ã•ã„ *\n"
+#~ "ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¯ ALSA を直接通ã—ã¦å‡ºåŠ›ã—ã¾ã™ã®ã§, プレイヤã®ã‚¨ãƒ•ã‚§ã‚¯ãƒˆ"
+#~ "や出力プラグインã¯ä½¿ç”¨ã—ã¾ã›ã‚“. å†ç”Ÿä¸­, プレイヤã®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚¹ãƒ©ã‚¤ãƒ€ã¯ã“ã“"
+#~ "ã§é¸æŠžã—ãŸãƒŸã‚­ã‚µã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’æ“作ã—ã¾ã™. ウェーブテーブルシンセサイザー"
+#~ "ãƒãƒ¼ãƒˆã‚’使ã£ã¦ã„ã‚‹ãªã‚‰ã°, ã“ã“ã§ã‚·ãƒ³ã‚»ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’é¸ã¶ã¨ã‚ˆã„ã§ã—ょã†."
+
+#~ msgid ""
+#~ "* Select ALSA mixer control *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volume slider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* ALSA ミキサコントロールをé¸æŠžã—ã¦ãã ã•ã„ *\n"
+#~ "ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¯ ALSA を直接通ã—ã¦å‡ºåŠ›ã—ã¾ã™ã®ã§, プレイヤã®ã‚¨ãƒ•ã‚§ã‚¯ãƒˆ"
+#~ "や出力プラグインã¯ä½¿ç”¨ã—ã¾ã›ã‚“. å†ç”Ÿä¸­, プレイヤã®ãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚¹ãƒ©ã‚¤ãƒ€ã¯ã“ã“"
+#~ "ã§é¸æŠžã—ãŸãƒŸã‚­ã‚µã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’æ“作ã—ã¾ã™. ウェーブテーブルシンセサイザー"
+#~ "ãƒãƒ¼ãƒˆã‚’使ã£ã¦ã„ã‚‹ãªã‚‰ã°, ã“ã“ã§ã‚·ãƒ³ã‚»ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã‚’é¸ã¶ã¨ã‚ˆã„ã§ã—ょã†."
+
+#~ msgid ""
+#~ "* Backend selection *\n"
+#~ "AMIDI-Plug works with backends, in a modular fashion; here you should "
+#~ "select your backend; that is, the way MIDI events are going to be handled "
+#~ "and played.\n"
+#~ "If you have a hardware synthesizer on your audio card, and ALSA supports "
+#~ "it, you'll want to use the ALSA backend. It can also be used with "
+#~ "anything that provides an interface to the ALSA sequencer, including "
+#~ "software synths or external devices.\n"
+#~ "If you want to rely on a software synthesizer and/or want to pipe audio "
+#~ "into effect and output plugins of the player you'll want to use the good "
+#~ "FluidSynth backend.\n"
+#~ "Press the info button to read specific information about each backend."
+#~ msgstr ""
+#~ "* ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’é¸æŠžã—ã¦ãã ã•ã„ *\n"
+#~ "AMIDI-Plug ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«å½¢å¼ã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã¨å‹•ä½œã—ã¾ã™. ã“ã“ã§ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"
+#~ "ã‚’é¸æŠžã—ã¦ãã ã•ã„. ãã‚Œã«ã‚ˆã£ã¦, MIDI イベントã¯å–り扱ã‚ã‚Œ, æ¼”å¥ã•ã‚Œã¾"
+#~ "ã™.\n"
+#~ "ã‚ãªãŸã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚«ãƒ¼ãƒ‰ã«ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚·ãƒ³ã‚»ã‚µã‚¤ã‚¶ãƒ¼ãŒã¤ã„ã¦ã„ã¦, ALSA ãŒ"
+#~ "ãれをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ãªã‚‰ã°, ALSA ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’使ã†ã¨ã‚ˆã„ã§ã—ょã†.ã“ã‚Œã¯"
+#~ "ソフトウェアシンセや外部デãƒã‚¤ã‚¹ã‚’å«ã‚€, ALSA シーケンサã¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤"
+#~ "スをæä¾›ã™ã‚‹ã‚らゆるもã®ã‚’用ã„ã‚‹ã“ã¨ãŒã§ãã¾ã™.\n"
+#~ "ソフトウェアシンセサイザーを当ã¦ã«ã—ãŸã„, ãŠã‚ˆã³ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’プレイヤã®ã‚¨"
+#~ "フェクトや出力プラグインã«é€šã—ãŸã„ãªã‚‰ã°, 有用㪠FluidSynth ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚’"
+#~ "用ã„ã‚‹ã¨ã‚ˆã„ã§ã—ょã†.\n"
+#~ "ãã‚Œãžã‚Œã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ç‰¹å®šã®æƒ…報を読むã«ã¯æƒ…報ボタンを押ã—ã¦ãã ã•ã„."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Transpose function *\n"
+#~ "This option allows you to play the midi file transposed in a different "
+#~ "key, by shifting of the desired number of semitones all its notes "
+#~ "(excepting those on midi channel 10, reserved for percussions). "
+#~ "Especially useful if you wish to sing or play along with another "
+#~ "instrument."
+#~ msgstr ""
+#~ "* トランスãƒãƒ¼ã‚ºæ©Ÿèƒ½ *\n"
+#~ "ã“ã®ã‚ªãƒ—ション㯠MIDI ファイルを, å…¨ã¦ã®éŸ³(パーカッションã®ãŸã‚ã«äºˆç´„ã•ã‚Œ"
+#~ "㟠MIDI ãƒãƒ£ãƒ³ãƒãƒ« 10 を除ã)ã®åŠéŸ³ã‚’è¦æ±‚ã•ã‚ŒãŸæ•°ã§å¤‰åŒ–ã•ã›ãŸç•°ãªã‚‹ã‚­ãƒ¼"
+#~ "ã§, トランスãƒãƒ¼ã‚ºã—ã¦æ¼”å¥ã§ãるよã†ã«ã—ã¾ã™.ä»–ã®æ¥½å™¨ã‚’加ãˆã¦æ¼”å¥ã•ã›ãŸã„"
+#~ "ãªã‚‰ã°éžå¸¸ã«æœ‰ç”¨ã§ã™."
+
+#~ msgid ""
+#~ "* Drumshift function *\n"
+#~ "This option allows you to shift notes on midi channel 10 (the standard "
+#~ "percussions channel) of the desired number of semitones. This results in "
+#~ "different drumset and percussions being used during midi playback, so if "
+#~ "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
+#~ "with this value."
+#~ msgstr ""
+#~ "* ドラムシフト機能 *\n"
+#~ "ã“ã®ã‚ªãƒ—ションã¯, MIDI ãƒãƒ£ãƒ³ãƒãƒ« 10 (標準ã®ãƒ‘ーカッションãƒãƒ£ãƒ³ãƒãƒ«) ã®åŠ"
+#~ "音をè¦æ±‚ã•ã‚ŒãŸæ•°ã§å¤‰åŒ–ã•ã›ã‚‹ã‚ˆã†ã«ã—ã¾ã™. MIDI ã®æ¼”å¥ä¸­ã«ç•°ãªã‚‹ãƒ‰ãƒ©ãƒ ã‚»ãƒƒ"
+#~ "トã¨ãƒ‘ーカッションãŒç”¨ã„られるã“ã¨ã«ã‚ˆã‚Š, ã“ã®å€¤ã‚’用ã„ã¦æ¼”å¥ã™ã‚‹ã“ã¨ã«ã‚ˆ"
+#~ "ã‚Š, パーカッションã®éŸ³ã‚’高ã‚ã‚‹ (ã¾ãŸã¯å¼±ã‚ã‚‹, ã¾ãŸã¯å¤‰ãˆã‚‹) ã“ã¨ãŒã§ãã¾"
+#~ "ã™."
+
+#~ msgid ""
+#~ "* Pre-calculate MIDI length *\n"
+#~ "If this option is enabled, AMIDI-Plug will calculate the MIDI file length "
+#~ "as soon as the player requests it, instead of doing that only when the "
+#~ "MIDI file is being played. In example, MIDI length will be calculated "
+#~ "straight after adding MIDI files in a playlist. Disable this option if "
+#~ "you want faster playlist loading (when a lot of MIDI files are added), "
+#~ "enable it to display more information in the playlist straight after "
+#~ "loading."
+#~ msgstr ""
+#~ "* MIDI é•·ã‚’å‰ã‚‚ã£ã¦è¨ˆç®— *\n"
+#~ "ã“ã®ã‚ªãƒ—ションãŒæœ‰åŠ¹ãªã‚‰ã°, AMIDI-Plug 㯠MIDI ファイルã®é•·ã•ã‚’, MIDI ファ"
+#~ "イルãŒæ¼”å¥ã•ã‚Œã‚ˆã†ã¨ã—ãŸã¨ãã ã‘ã§ã¯ãªã, プレイヤãŒè¦æ±‚ã—ãŸã¨ãã™ãã«è¨ˆç®—"
+#~ "ã—ã¾ã™. 例ãˆã°, MIDI ファイルãŒãƒ—レイリスト中ã«è¿½åŠ ã•ã‚ŒãŸç›´å¾Œã« MIDI é•·ã‚’"
+#~ "計算ã—ã¾ã™. (多ãã® MIDI ファイルãŒè¿½åŠ ã•ã‚Œã¦ã„ã‚‹ã¨ã) プレイリストã®èª­ã¿"
+#~ "è¾¼ã¿ã‚’æ—©ãã—ãŸã„ãªã‚‰ã°, ã“ã®ã‚ªãƒ—ションを無効ã«ã—ã¾ã™.プレイリストを読ã¿è¾¼"
+#~ "ã‚“ã ç›´å¾Œã«ã‚ˆã‚Šå¤šãã®æƒ…報を表示ã•ã›ãŸã„ãªã‚‰ã°, 有効ã«ã—ã¾ã™. "
+
+#~ msgid ""
+#~ "* Extract comments from MIDI files *\n"
+#~ "Some MIDI files contain text comments (author, copyright, instrument "
+#~ "notes, etc.). If this option is enabled, AMIDI-Plug will extract and "
+#~ "display comments (if available) in the file information dialog."
+#~ msgstr ""
+#~ "* MIDI ファイルã‹ã‚‰ã‚³ãƒ¡ãƒ³ãƒˆã‚’抽出 *\n"
+#~ "MIDI ファイルã¯ãƒ†ã‚­ã‚¹ãƒˆã‚³ãƒ¡ãƒ³ãƒˆ(作者, 著作権情報, 楽譜ãªã©)ã‚’å«ã‚“ã§ã„ã‚‹ã“"
+#~ "ã¨ãŒã‚ã‚Šã¾ã™. ã“ã®ã‚ªãƒ—ションãŒæœ‰åŠ¹ãªã‚‰ã°, AMIDI-Plug ã¯ã‚³ãƒ¡ãƒ³ãƒˆã‚’抽出ã—, "
+#~ "ファイル情報ダイアログ内ã«è¡¨ç¤ºã—ã¾ã™ (å¯èƒ½ãªã‚‰ã°)."
+
+#~ msgid ""
+#~ "* Extract lyrics from MIDI files *\n"
+#~ "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-"
+#~ "Plug will extract and display song lyrics (if available) in the file "
+#~ "information dialog."
+#~ msgstr ""
+#~ "* MIDI ファイルã‹ã‚‰æ­Œè©žã‚’抽出 *\n"
+#~ "MIDI ファイルã¯æ­Œè©žã‚’å«ã‚“ã§ã„ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™. ã“ã®ã‚ªãƒ—ションãŒæœ‰åŠ¹ãªã‚‰"
+#~ "ã°, AMIDI-Plug ã¯æ­Œè©žã‚’抽出ã—, ファイル情報ダイアログ内ã«è¡¨ç¤ºã—ã¾ã™ (å¯èƒ½"
+#~ "ãªã‚‰ã°)."
+
+#~ msgid ""
+#~ "* Select SoundFont files *\n"
+#~ "In order to play MIDI with FluidSynth, you need to specify at least one "
+#~ "valid SoundFont file here (use absolute paths). The loading order is from "
+#~ "the top (first) to the bottom (last)."
+#~ msgstr ""
+#~ "* サウンドフォント ファイルã®é¸æŠž *\n"
+#~ "FluidSynth 㧠MIDI ã‚’æ¼”å¥ã™ã‚‹ã«ã¯, ã“ã“ã§å°‘ãªãã¨ã‚‚1ã¤ã®æœ‰åŠ¹ãªã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©"
+#~ "ント ファイルを絶対パスã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™. 読ã¿è¾¼ã¿é †åºã¯ä¸Š(å…ˆ)ã‹ã‚‰"
+#~ "下(後)ã«ãªã‚Šã¾ã™."
+
+#~ msgid ""
+#~ "* Load SoundFont on player start *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* サウンドフォントをプレイヤ起動時ã«èª­ã¿è¾¼ã‚€ *\n"
+#~ "システムã®é€Ÿã•ã«ã‚ˆã‚Šã¾ã™ãŒ, FluidSynth ã§ã®ã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©ãƒ³ãƒˆã®èª­ã¿è¾¼ã¿ã«ã¯"
+#~ "数分ã‹ã‹ã‚Šã¾ã™. ã“ã‚Œã¯ãƒ—レイヤã®èµ·å‹•æ™‚ã‹, 最åˆã® MIDI ファイルãŒæ¼”å¥ã•ã‚Œã‚‹"
+#~ "å‰ã«ä¸€åº¦ã ã‘è¡Œã‚ã‚Œã¾ã™. MIDI ファイルをè´ãã“ã¨ã ã‘ã«ãƒ—レイヤを使ã†ã®ã§ãª"
+#~ "ã‘ã‚Œã°, 後者をé¸æŠžã™ã‚‹ã®ãŒã‚ˆã„ã§ã—ょã†. (サウンドフォントã¯, ãã‚ŒãŒå¤‰æ›´ã•"
+#~ "ãˆã‚‹ã‹ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒå–り外ã•ã‚Œã‚‹ã¾ã§, 読ã¿è¾¼ã¾ã‚ŒãŸã¾ã¾ã§ã™). "
+
+#~ msgid ""
+#~ "* Load SoundFont on first midifile play *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* サウンドフォントを最åˆã® MIDI ファイル演å¥æ™‚ã«èª­ã¿è¾¼ã‚€ *\n"
+#~ "システムã®é€Ÿã•ã«ã‚ˆã‚Šã¾ã™ãŒ, FluidSynth ã§ã®ã‚µã‚¦ãƒ³ãƒ‰ãƒ•ã‚©ãƒ³ãƒˆã®èª­ã¿è¾¼ã¿ã«ã¯"
+#~ "数分ã‹ã‹ã‚Šã¾ã™. ã“ã‚Œã¯ãƒ—レイヤã®èµ·å‹•æ™‚ã‹, 最åˆã® MIDI ファイルãŒæ¼”å¥ã•ã‚Œã‚‹"
+#~ "å‰ã«ä¸€åº¦ã ã‘è¡Œã‚ã‚Œã¾ã™. MIDI ファイルをè´ãã“ã¨ã ã‘ã«ãƒ—レイヤを使ã†ã®ã§ãª"
+#~ "ã‘ã‚Œã°, 後者をé¸æŠžã™ã‚‹ã®ãŒã‚ˆã„ã§ã—ょã†. (サウンドフォントã¯, ãã‚ŒãŒå¤‰æ›´ã•"
+#~ "ãˆã‚‹ã‹ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãŒå–り外ã•ã‚Œã‚‹ã¾ã§, 読ã¿è¾¼ã¾ã‚ŒãŸã¾ã¾ã§ã™). "
+
+#~ msgid ""
+#~ "* Synthesizer gain *\n"
+#~ "From FluidSynth docs: the gain is applied to the final or master output "
+#~ "of the synthesizer; it is set to a low value by default to avoid the "
+#~ "saturation of the output when random MIDI files are played."
+#~ msgstr ""
+#~ "* シンセサイザーゲイン *\n"
+#~ "FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: ゲインã¯ã‚·ãƒ³ã‚»ã‚µã‚¤ã‚¶ãƒ¼ã®æœ€å¾Œã‹ãƒžã‚¹ã‚¿å‡ºåŠ›ã«é©ç”¨ã•ã‚Œ"
+#~ "ã¾ã™. ランダム㪠MIDI ファイルãŒæ¼”å¥ã•ã‚Œã‚‹ã¨ãã«, 出力ã®é£½å’Œã‚’é¿ã‘ã‚‹ãŸã‚, "
+#~ "デフォルトã§ã¯ä½Žã„値ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™. "
+
+#~ msgid ""
+#~ "* Synthesizer polyphony *\n"
+#~ "From FluidSynth docs: the polyphony defines how many voices can be played "
+#~ "in parallel; the number of voices is not necessarily equivalent to the "
+#~ "number of notes played simultaneously; indeed, when a note is struck on a "
+#~ "specific MIDI channel, the preset on that channel may create several "
+#~ "voices, for example, one for the left audio channel and one for the right "
+#~ "audio channels; the number of voices activated depends on the number of "
+#~ "instrument zones that fall in the correspond to the velocity and key of "
+#~ "the played note."
+#~ msgstr ""
+#~ "* シンセサイザーãƒãƒªãƒ•ã‚©ãƒ‹ãƒ¼ *\n"
+#~ "FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: ãƒãƒªãƒ•ã‚©ãƒ‹ãƒ¼ã¯ã©ã‚Œã ã‘ã®éŸ³å£°ãŒä¸¦è¡Œã«æ¼”å¥ã•ã‚Œã‚‹ã‹ã‚’"
+#~ "定義ã—ã¾ã™. 音声ã®æ•°ã¯, åŒæ™‚ã«æ¼”å¥ã•ã‚Œã‚‹éŸ³ã®æ•°ã¨åŒã˜ã§ã‚ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›"
+#~ "ã‚“. 実際ã¯, ã‚る音ãŒç‰¹å®šã® MIDI ãƒãƒ£ãƒ³ãƒãƒ«ã§é³´ã‚‰ã•ã‚ŒãŸã¨ã, ãã®ãƒãƒ£ãƒ³ãƒãƒ«"
+#~ "ã®ãƒ—リセットã¯, 例ãˆã°, 一ã¤ã¯å·¦ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒãƒ£ãƒ³ãƒãƒ«ã«, 一ã¤ã¯å³ã®ã‚ªãƒ¼"
+#~ "ディオãƒãƒ£ãƒ³ãƒãƒ«ã«, ã„ãã¤ã‹ã®éŸ³å£°ã‚’生æˆã—ã¾ã™. 生æˆã•ã‚ŒãŸéŸ³å£°ã®æ•°ã¯, æ¼”å¥"
+#~ "ã•ã‚ŒãŸéŸ³ã®é«˜ã•ã¨ã‚­ãƒ¼ã«å¯¾å¿œã—ã¦ã„る楽器ã®æ•°ã«ä¾å­˜ã—ã¾ã™. "
+
+#~ msgid ""
+#~ "* Synthesizer reverb *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
+#~ "activated; note that when the reverb module is active, the amount of "
+#~ "signal sent to the reverb module depends on the \"reverb send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* シンセサイザーリãƒãƒ¼ãƒ– *\n"
+#~ "FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: \"ã¯ã„\" ã«è¨­å®šã™ã‚‹ã¨ãƒªãƒãƒ¼ãƒ–エフェクトモジュールãŒ"
+#~ "有効ã«ãªã‚Šã¾ã™. リãƒãƒ¼ãƒ–モジュールãŒæœ‰åŠ¹ãªã¨ãã¯, 多数ã®ã‚·ã‚°ãƒŠãƒ«ãŒã‚µã‚¦ãƒ³ãƒ‰"
+#~ "フォントã§å®šç¾©ã•ã‚ŒãŸ \"リãƒãƒ¼ãƒ– センド\" ジェãƒãƒ¬ãƒ¼ã‚¿ã«ä¾å­˜ã—ã¦ã„るリãƒãƒ¼"
+#~ "ブモジュールã«é€ã‚‰ã‚Œã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„. "
+
+#~ msgid ""
+#~ "* Synthesizer chorus *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
+#~ "activated; note that when the chorus module is active, the amount of "
+#~ "signal sent to the chorus module depends on the \"chorus send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* シンセサイザーコーラス *\n"
+#~ "FluidSynth ã®æ–‡æ›¸ã‚ˆã‚Š: \"ã¯ã„\" ã«è¨­å®šã™ã‚‹ã¨ã‚³ãƒ¼ãƒ©ã‚¹ã‚¨ãƒ•ã‚§ã‚¯ãƒˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ"
+#~ "有効ã«ãªã‚Šã¾ã™. コーラスモジュールãŒæœ‰åŠ¹ãªã¨ãã¯, 多数ã®ã‚·ã‚°ãƒŠãƒ«ãŒã‚µã‚¦ãƒ³ãƒ‰"
+#~ "フォントã§å®šç¾©ã•ã‚ŒãŸ \"コーラス センド\" ジェãƒãƒ¬ãƒ¼ã‚¿ã«ä¾å­˜ã—ã¦ã„るコーラ"
+#~ "スモジュールã«é€ã‚‰ã‚Œã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„. "
+
+#, fuzzy
+#~ msgid ""
+#~ "* Synthesizer samplerate *\n"
+#~ "The sample rate of the audio generated by the synthesizer. You can also "
+#~ "specify a custom value in the interval 22050Hz-96000Hz."
+#~ msgstr ""
+#~ "* シンセサイザーサンプリングレート *\n"
+#~ "シンセサイザーã§ç”Ÿæˆã•ã‚ŒãŸã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã®ã‚µãƒ³ãƒ—リングレートã§ã™. "
+#~ "22050Hz-96000Hz ã®é–“ã§ã‚«ã‚¹ã‚¿ãƒ å€¤ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™.\n"
+#~ "注æ„: デフォルトã®ãƒãƒƒãƒ•ã‚¡ãƒ‘ラメータ㯠44100Hz ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™. サンプ"
+#~ "リングレートを変更ã—ãŸã‚‰, よã„音質を得るãŸã‚ã«, ãƒãƒƒãƒ•ã‚¡ãƒ‘ラメータã®ãƒãƒ¥ãƒ¼"
+#~ "ニングãŒå¿…è¦ã«ãªã‚Šã¾ã™. "
+
+#~ msgid ""
+#~ "If enabled, the extension from the original filename will not be stripped "
+#~ "before adding the new file extension to the end."
+#~ msgstr ""
+#~ "ã“れを有効ã«ã™ã‚‹ã¨, æ–°ã—ã„ファイル拡張å­ã‚’末尾ã«ã¤ã‘るより先ã«, å…ƒã®ãƒ•ã‚¡ã‚¤"
+#~ "ルåã®æ‹¡å¼µå­ã¯å–り除ã‹ã‚Œã¾ã›ã‚“."
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "最高å“質/最低速:0;\n"
+#~ "最低å“質/最高速:9;\n"
+#~ "推奨:2;\n"
+#~ "デフォルト:5;"
+
+#~ msgid "Adds 16 bit checksum to every frame"
+#~ msgstr "ã™ã¹ã¦ã®ãƒ•ãƒ¬ãƒ¼ãƒ ã« 16 ビットãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’付加ã™ã‚‹"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "å¯å¤‰ãƒ“ットレート"
+
+#~ msgid "Average bitrate"
+#~ msgstr "å¹³å‡ãƒ“ットレート"
+
+#~ msgid ""
+#~ "For use with players that do not support low bitrate mp3 (Apex AD600-A "
+#~ "DVD/mp3 player)"
+#~ msgstr ""
+#~ "低ã„ビットレート㮠mp3 をサãƒãƒ¼ãƒˆã—ãªã„プレイヤ (Apex AD600-A DVD/mp3 "
+#~ "player)ã®ãŸã‚ã«ä½¿ã„ã¾ã™"
+
+#~ msgid ""
+#~ "highest:0;\n"
+#~ "lowest:9;\n"
+#~ "default:4;"
+#~ msgstr ""
+#~ "最高:0;\n"
+#~ "最低:9;\n"
+#~ "デフォルト:4;"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "プレイリストエディタを表示ã™ã‚‹"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "プレイリストã®ä¿å­˜"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "Sun ドライãƒã«ã¤ã„ã¦"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "XMMS BSD Sun ドライãƒ\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "メンテナ: <vedge at csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "オーディオコントロールデãƒã‚¤ã‚¹:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "ãƒãƒƒãƒ•ã‚¡ã®ã‚µã‚¤ã‚º (ミリ秒):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "音é‡ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ‡ãƒã‚¤ã‚¹:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "ミキサを排他的ã«ä½¿ã†"
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Sun ドライãƒã®è¨­å®š"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "音é‡ã®å¤‰æ›´"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "エフェクトã®å¼·ã•:"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "FLAC オーディオ プラグイン"
+
+#, fuzzy
+#~ msgid "Stream browser"
+#~ msgstr "å‚ç…§"
+
+#, fuzzy
+#~ msgid "Streambrowser"
+#~ msgstr "å‚ç…§"
+
#~ msgid "PREAMP"
#~ msgstr "プリアンプ"
@@ -5984,12 +5969,6 @@ msgstr ""
#~ "\n"
#~ "%s ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç¨®é¡žãŒä¸æ˜Žã§ã™.\n"
-#~ msgid "Randomize List"
-#~ msgstr "プレイリストをランダムã«ã™ã‚‹"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "プレイリストã®é †åºã‚’ランダムã«ã—ã¾ã™."
-
#, fuzzy
#~ msgid "ALSA Gapless Output Plugin Preferences"
#~ msgstr "ステータスアイコンプラグイン - 設定"
@@ -6290,10 +6269,6 @@ msgstr ""
#~ msgstr "プラグインã«ã¤ã„ã¦"
#, fuzzy
-#~ msgid "Output plugin"
-#~ msgstr "出力プラグインエラー\n"
-
-#, fuzzy
#~ msgid "Throttle Output"
#~ msgstr "aRts 出力プラグインã«ã¤ã„ã¦"
@@ -6318,10 +6293,6 @@ msgstr ""
#~ msgstr "削除"
#, fuzzy
-#~ msgid "Length (ms):"
-#~ msgstr "長㕠(ミリ秒):"
-
-#, fuzzy
#~ msgid "Start volume (%):"
#~ msgstr "音é‡: (%)"
@@ -6404,10 +6375,6 @@ msgstr ""
#~ msgstr "é¸æŠžã—ãŸãƒ—レイリストをデフォルトä½ç½®ã«ä¿å­˜ã—ã¾ã™."
#, fuzzy
-#~ msgid "_Rename"
-#~ msgstr "ファイルå"
-
-#, fuzzy
#~ msgid "About Icecast-Plugin"
#~ msgstr "エコー プラグインã«ã¤ã„ã¦"
@@ -6678,21 +6645,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "タイトル:"
-#~ msgid "Artist:"
-#~ msgstr "アーティスト:"
-
-#~ msgid "Album:"
-#~ msgstr "アルãƒãƒ å:"
-
#~ msgid "Comment:"
#~ msgstr "コメント:"
-#~ msgid "Year:"
-#~ msgstr "å¹´:"
-
-#~ msgid "Track number:"
-#~ msgstr "トラック番å·:"
-
#~ msgid "Genre:"
#~ msgstr "ジャンル:"
@@ -6937,9 +6892,6 @@ msgstr ""
#~ msgid "Musepack Tag"
#~ msgstr "Musepack ã‚¿ã‚°"
-#~ msgid "Track:"
-#~ msgstr "トラック:"
-
#~ msgid "Musepack Info"
#~ msgstr "Musepack 情報"
@@ -7131,9 +7083,6 @@ msgstr ""
#~ msgid "auto-M/S mode"
#~ msgstr "自動 M/S モード"
-#~ msgid "_Random"
-#~ msgstr "ランダム(R_)"
-
#~ msgid "Show track numbers in playlist"
#~ msgstr "プレイリストã«ãƒˆãƒ©ãƒƒã‚¯ç•ªå·ã‚’表示ã™ã‚‹"
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..21c0c1b
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,3659 @@
+# Lithuanian translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# Algimantas MargeviÄius <gymka@mail.ru>, 2011.
+# Algimantas MargeviÄius <margevicius.algimantas@gmail.com>, 2011, 2012.
+# gymka <gymka@mail.ru>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-13 12:23+0000\n"
+"Last-Translator: Algimantas MargeviÄius <margevicius.algimantas@gmail.com>\n"
+"Language-Team: Lithuanian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"Dekodavimui naudojamas libfaad2-%s.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM dekoderis (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "Apie MP4 AAC decoder plugin"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Apie Alarm"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+"Įskiepis kuris suteikia galimybę pradėti groti, nuo tam tikros vietos.\n"
+"\n"
+"Originaliai sukūrė Adam Feakin ir Daniel Stodden."
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "Žadintuvas"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr "Tai pabudimo skambutis."
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "Gerai"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "Žadintuvo nustatymai"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "Laikas"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "valandos"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr "v"
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "minutÄ—s"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "Nutilti po:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "Žadinti (numatyta):"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "Pasirinkite dienas kuriomis žadinti"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "Numatytasis"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "Diena"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "Antradienis"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "TreÄiadienis"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "Ketvirtadienis"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "Penktadienis"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "Šeštadienis"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "Sekmadienis"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "Pirmadienis"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "Dienos"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "Blukimas"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "sekundÄ—s"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "Garsas"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "Dabartinis"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "PradÄ—ti nuo"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "Baigti"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "Papildoma komanda"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "Įjungti"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "Grojaraštis (nebūtina)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "Naršyti..."
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "Priminimas"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "Naudoti priminimÄ…"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Pasirinktys"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "Ką šios pasirinktys reiškia?"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"Laikas\n"
+" Žadinti laiku: \n"
+" Laikas kada įjungti žadintuvą.\n"
+"\n"
+" Nutilti po: \n"
+" Po šio laiko tarpo išjungti žadintuvą.\n"
+" (jei prikėlimo žadintuvas neuždarytas)\n"
+"\n"
+"\n"
+"Dienos\n"
+" Diena:\n"
+" Pasirink dienas kuriomis įjungti žadintuvą.\n"
+"\n"
+" Laikas:\n"
+" Pasirinkti kiekvienos dienos žadintuvo laiką,\n"
+" arba pasirinkti numatytąjį laiką.\n"
+"\n"
+"\n"
+"\n"
+"Garsas\n"
+" GarsÄ—jimas: \n"
+" Garsinti iki nurodyto garso, \n"
+" šį laiko tarpą.\n"
+"\n"
+" PradÄ—ti nuo: \n"
+" PradÄ—ti garsinti nuo.\n"
+"\n"
+" Baigti: \n"
+" Garsas ties kuriuo baigti garsinti. Jei garsinimo\n"
+" laikas yra 0 tada nustatykit garsÄ… Å¡itÄ… ir\n"
+" pradÄ—kit groti.\n"
+"\n"
+"\n"
+"Pasirinktys:\n"
+" Papildoma komanda:\n"
+" Vykdyti šią komandą žadintuvo laiku.\n"
+"\n"
+" Grojaraštis: \n"
+" Įkelti šį grojaraštį ir groti dainas iš ji \n"
+" (turi turėti .m3u plėtinį). Jei nenurodytas \n"
+" grojaraštis bus naudojamos dainos kurios\n"
+" dabar yra sąraše.\n"
+" mp3/ogg URL taipogi gali bÅ«t Äia įvestas,\n"
+" bet grojaraÅ¡Äio įkrovimas iÅ¡ URL Å¡iuo metu\n"
+" nepalaikomas xmms.\n"
+"\n"
+" Priminimas:\n"
+" Parodyti priminimą žadintuvui išsijungus,\n"
+" įveskit priminimą langelyje ir paspauskite patvirtinimo mygtuką\n"
+" jei norit jog būtų rodomas.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Pagalba"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Atšaukti"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "Å iandien tavo priminimas yra.."
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "DÄ—kui"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "Numatytasis PCM įrenginys"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "Numatytasis mikseris"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "ALSA išvesties įskiepio nustatymai"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "PCM įrenginys:"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "Mikseris:"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "Mikserio elementas:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "Apeiti sausÄ… pakibimÄ…"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "Apie ALSA išvesties įskiepį"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "ALSA klaida"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"Nepasirinkti jokie MIDI atkūrimo prievadai. Pasirinkt gali MIDI įskiepio "
+"nustatymuose."
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "ALSA posistemÄ—"
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Å i posistemÄ— siunÄia MIDI įvykius naudotojo pasirinktai ALSA eiliÅ¡kumo prievadų grupei. ALSA sekvencerio sÄ…saja yra labai universali, ji gali suteikti prievadus audio plokÅ¡Äių sintezatoriams (pvz. emu10k1) beto programiniams sintezatoriams, papildomiems įrenginiams ir t.t.\n"
+"Ši posistemė nekuria garso, MIDI įvykius apdoroja tiesiogiai įrenginiai/programos už ALSA prievadų; pavyzdžiui MIDI įvykiai nusiųsti į sintezatorių bus grojami tiesiogiai.\n"
+"Posistemę sukūrė Giacomo Lozito."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "FluidSynth PosistemÄ—"
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Ši posistemė atkuria garsą sisųdama MIDI įvykius į FluidSynth, realaus laiko programinį sintezatorių, paremtą SoundFont2 specifika (www.fluidsynth.org).\n"
+"Atkurtu garsu galima manipuliuoti grotuvo efektų įskiepiais ir jis yra apdorojamas išvesties įskiepiu.\n"
+"Posistemę sukūrė Giacomo Lozito."
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "ALSA POSISTEMĖS KONFIGŪRAVIMAS"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Prievadas"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "Vardas"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Prievado vardas"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "ALSA išvesties prievadai"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "Garso plokštė:"
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "Mikserio valdymas:"
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "Mikserio nustatymai"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "ALSA posistemė neužkrauta arba neprieinama"
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ALSA\n"
+"posistemÄ—</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "AMIDI-Plug - posistemÄ—s informacija"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "AMIDI-PLUG NUSTATYMAI"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "PosistemÄ—s pasirinkimas"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "Prieinamos posistemÄ—s"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "Atkūrimo nustatymai"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "Perkelti:"
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "Būgnų poslinkis: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Papildomi nustatymai"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "numanomas MIDI failų grojaraštyje ilgis"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "gauti komentarus iš MIDI failo (jei įmanoma)"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "gauti žodžius iš MIDI failo (jei įmanoma)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "AMIDI-Plug - pasirinkti failÄ…"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "AMIDI-Plug - konfigūracija"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "AMIDI-Plug - pasirink SoundFont failÄ…"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "FLUIDSYNTH POSISTEMĖS KONFIGŪRAVIMAS"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "SoundFont nustatymai"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Bylos vardas"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Dydis (bitais)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "Įkrauti SF paleidžiant grotuvą"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "Įkrauti SF pirmą kart paleidus midi failą"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "Sintezatoriaus nustatymai"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "gauti"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "naudoti numatytÄ…"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "vertÄ—:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "polifonija"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "aidas"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "taip"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "ne"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "choras"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "diskretizacijos dažnis"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "derinta"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "FluidSynth posistemė neįkrauta arba neprieinama"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">FluidSynth\n"
+"posistemÄ—</span>"
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "TIMIDITY POSISTEMĖS KONFIGŪRACIJA"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "TiMidity posistemė neįkrauta arba neprieinama"
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">TiMidity\n"
+"posistemÄ—</span>"
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Pavadinimas:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> MIDI Info </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Formatas:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "Ilgis (ms):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "Takelių kiekis:"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "kintamasis"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "BPM:"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg):"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "Laiko div:"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> MIDI komentarai ir žodžiai</span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* Šiame MIDI faile nėra komentarų *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* Šiame MIDI faile nėra žodžių *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (neteisingas UTF-8)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "AMIDI-Plug - apie"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+"\n"
+"AMIDI-Plug "
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"sukūrė Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"ypatinga padÄ—ka...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"už jų puikias programas aplaymidi ir amixer; jos\n"
+"ištikro buvo naudingos, su alsa-lib docs, norint \n"
+"daugiau sužinot apei ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"už gražų midi klaviatūros logo\n"
+"\n"
+"Tony Vroon\n"
+"už pagalbą testuojant alpha versiją\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "StaÄiakampis"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Apvalus staÄiakampis"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Ä®gaubtas staÄiakampis"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Joks"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "Atkūrimo pradžia"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "Sužadina OSD kai grojaraÅ¡Äio elementas grojamas."
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "Pavadinimo keitimas"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Sužadina OSD kai, atkÅ«rimo metu, dainos pavadinimas pasikeiÄia, bet bylos "
+"vardas lieka tas pats. Å ita pasirinktis naudingiausia atvaizduojant "
+"interneto srauto dainos pavadinimo pokyÄius. "
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "Garso keitimas"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "Sužadina OSD kai garsas pakeiÄiamas."
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "PauzÄ—"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "Sužadina OSD kai atkūrimas sustabdomas"
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "Pauzė išjungiama"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "Sužadina OSD kai atkūrimas atkuriamas po pauzės."
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "Vieta"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "Relative X offset:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "Relative Y offset:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "Didžiausias OSD plotis:"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "Kelių vaizduoklių pasirinktys"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "Vaizduoklis naudoja OSD:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "visi vaizduokliai"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "vaizduoklis %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "Laiko derinimas (ms)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "Monitorius:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "Nustelbti:"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "Fade out:"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "Å riftai"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "Å riftas %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "Šešėlis"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "Lokalizavimas"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "IÅ¡jungti UTF-8 teksto konvertavimÄ… (aosd'e)"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "Pasirinkti išvaizdos failą"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "Atvaizdavimo stilius"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "Spalvos"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "Spalva %i:"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "Derintas apipavalidinimas"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "IÅ¡vaizdos failas:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "Naršyti"
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "Sužadinti"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "Įvykis"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "Composite tvarkytuvas rastas"
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+"Composite tvarkyklÄ— nerasta;\n"
+"įjunk composite tvarkyklę, nes OSD neveiks taip kaip priklauso"
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "Netikram permatomumui composite tvarkyklÄ— nereikalinga"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "Skaidrumas"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "Netikras skaidrumas"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Tikras skaidrumas (reikalinga X composite plÄ—tinys)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Composite plėtinys neįkrautas"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Composite plÄ—tinys neprieinamas"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr "<span font_desc='%s'>Audacious OSD</span>"
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "Audacious OSD - konfigūracija"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "Testas"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "Pozicija"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "Animacija"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "Tekstas"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "Dekoracijos"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "Sužadintojas"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "Kita"
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "Audacious OSD - apie"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Audacious OSD "
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"sukūrė Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display paremta Ghosd library\n"
+"kurią sukūrė Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "IÅ¡siliejimo sritis: Pagal spalvas"
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "Pasirinktys:"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Bauer stereofoninis-į-binaural nustatymai"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Duoti lygį:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Nukirpti dažnius:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Nustatymų rinkiniai:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "Apie Audio CD Plugin"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Didelis dėkui libcdio kūrėjams <http://www.gnu.org/software/libcdio/>\n"
+"\tir libcddb kūrėjams <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Beto dėkui Tony Vroon už pamokymus ir užvedimą ant kelio.\n"
+"\n"
+"ÄŒia buvo Google Summer Code 2007 projektas.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Diskasukis tuÅ¡Äias."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Nepalaikomas disko tipas."
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "CD Audio Plugin Konfigūracija"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "Skaitmeninio garso išėmimas"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "Pavadinimo informacija"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "Disko greitis:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "Jei įmanoma naudoti cd-tekstą"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "Jei įmanoma naudoti CDDB"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "Serveris:"
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "Kelias:"
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Prievadas:"
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "Naudoti HTTP vietoj CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "Nepaisyti numatytojo prietaiso:"
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Gerai"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Groti CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "PridÄ—ti CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "Apie Dynamic Range Compression Plugin"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "Dynamic Range Compressor Nustatymai"
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Centro garsas:"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "DinaminÄ— sritis:"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "Žaidimų konsolės muzikos dekoderis"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "PagrindinÄ—s"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Atkūrimas"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "Bosas:"
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "sekundÄ—s"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "Treble:"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "Numatyta dainos trukmÄ—:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "Resampling"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "Įjungti audio resampling"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "Diskretizacijos dažnis:"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "SPC"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "Ignoruoti SPC žymų ilgį"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "Padidinti reverb"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+"Numatyta dainos trukmė, išreikšta sekundėmis, naudojama dainom kurios "
+"nesuteikia trukmÄ—s informacijos (pvz. looping tracks)"
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "Apie Game Console Music Decoder"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"Console music decoder engine paremtas Game_Music_Emu 0.5.2.\n"
+"Palaikomi formatai: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Integravo į Audacious : William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "Apie Crossfade"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "Crossfade Nustatymai"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "Perdengimas (sekundÄ—mis):"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Crossfade klaida"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+"Garso perÄ—jimo efektas nepavyko, nes dainos turi skirtingÄ… kanalų skaiÄių."
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+"Garso perėjimo efektas nepavyko, nes dainos turi skirtingus diskretizavimo dažnius.\n"
+"\n"
+"Gali panaudoti Sample Rate Converter efektą padaryti diskretizavimo dažnius tokius pat."
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr "Konfigūruoti Crystalizer"
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "Efekto intensyvumas:"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "Pritaikyti"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+"Echo įskiepis\n"
+"Sukūrė Johan Levin 1999.\n"
+"\n"
+"Surround echo sukūrė Carl van Schaik 1999"
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "Apie Echo įskiepį"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "Konfigūruoti Echo"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "VÄ—lavimas: (ms)"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "Aidas: (%)"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "Garsas: (%)"
+
+#: src/ffaudio/ffaudio-core.c:725
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Daugiaformatis audio dekodavimo įskiepis skirtas Audacious paremtas\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious įskiepį kūrė:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+
+#: src/ffaudio/ffaudio-core.c:739
+msgid "About FFaudio Plugin"
+msgstr "Apie FFaudio įskiepį"
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "Apie FileWriter įskiepį"
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "File Writer konfigūravimas"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "IÅ¡vesties failo formatas:"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "Konfigūruoti"
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "IÅ¡saugoti originalo aplanke"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "IÅ¡saugoti pasirinktame aplanke"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "Paskirties aplankas:"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Rinkis aplankÄ…"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Gauti failo vardą iš:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "originalios failo žymės"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "originalus failo vardas"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "Neištrinti failo plėtinio"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Įdėti takelio numerį į failo vardą"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Sujungtas stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "MP3 konfigūravimas"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "Algoritmo kokybÄ—:"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "Išvesties diskretizavimo dažnis:"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr "(Hz)"
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "Bitų dažnis / Kompresijos santykis:"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "Bitų dažnis(kbps):"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "Kompresijos santykis:"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "Audio režimas:"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "Kita:"
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr "Priversti griežtai laikytis ISO suderinamumo"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "Apsauga nuo klaidų"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "KokybÄ—"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "Įjungti VBR/ABR"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "Tipas:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "VBR pasirinktys:"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "Minimalus bitų dažnis (kbps):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "Maksimalus bitų dažnis (kbps):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "Griežtai laikytis minimalaus bitų dažnio"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "ABR pasirinktys:"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "Vidutinis bitų dažnis (kbps):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "VBR kokybÄ—s lygis:"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "Nerašyti Xing VBR antraštės"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr "VBR/ABR"
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "Kadro parametrai:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "Pažymėti kaip saugomą autorinių teisių"
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "Pažymėti kaip originalą"
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "ID3 parametrai"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "Priverstinai pridėti 2 versijos žymą"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "Pridėti tik v1 žymą"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "Pridėti tik v2 žymą"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "Žymos"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "Vorbis koduotojo konfigūracija"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "KokybÄ—s lygis (0 - 10):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Apie FLAC Audio įskiepį"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+"\n"
+"\n"
+"Originalų kodą parašė\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "Apie Gnome Shortcut įskiepį"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Gnome Shortcut įskiepis\n"
+"Suteikia galimybÄ™ valdyti grotuvÄ… su gnome trumpiniais.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Įvesties numeris"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Pavadinimas"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "AtlikÄ—jas"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Metai"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Albumas"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Takelis"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Vieta eilÄ—je"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "TrukmÄ—"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Bylos kelias"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Bylos vardas"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Derintas pavadinimas"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Bitų seka"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Rinktis stulpelius"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Prieinama:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Pasirinkta:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Sumažinti į kairę"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Sumažinti į dešinę"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Sumažinti į viršų"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Sumažinti apaÄioje"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Padidinti"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "IÅ¡jungti"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Atverti failus ..."
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Atverti _URL ..."
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_PridÄ—ti failus..."
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "PridÄ—ti U_RL ..."
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "A_pie"
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Nustatymai ..."
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_IÅ¡eiti"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Groti"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Pauz_Ä—"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Sustabdyti"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "Ankste_snis"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Sekantis"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "_Kartoti"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "S_umaišyti"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "N_esislinkti grojaraÅ¡Äiu"
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Sustabdyti _po Å¡itos dainos"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Dainos _informacija ..."
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Šokti į _laiką"
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "_Pereiti prie dainos ..."
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Pagal takelio _numerį"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Pagal _pavadinimÄ…"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Pagal _atlikÄ—jÄ…"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Pagal a_lbumÄ…"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Pagal išleidimo _datą"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Pagal _failo keliÄ…"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Pagal _derintÄ… eilutÄ™"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "A_tvirkštine tvarka"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "_Atsitiktine tvarka"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Atnaujinti"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Pašalinti _neprieinamus failus"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Rikiuoti"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Naujas"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Uždaryti"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Įkelti ..."
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Eksportuoti ..."
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_GrojaraÅ¡Äio redaktorius ..."
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "_EilÄ—s redaktorius ..."
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "Pagarsi_nti"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "Patil_dyti"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Ekvalaizeris"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_fektai"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Vartotojo sÄ…saja"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Vizualizacijos"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Rodyti _meniu juostÄ…"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Rodyti i_nfo juostÄ…"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Rodyti _būsenos juostą"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Rodyti stulpelio _antraštes"
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Pasirinkti _stulpelius ..."
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Slinkt_is keiÄiantis dainai"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Failas"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Atkūrimas"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "G_rojaraštis"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Paslaugos"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_IÅ¡vestis"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Rodymas"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Ä® eilÄ™/IÅ¡ eilÄ—s"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "IÅ¡kirpt_i"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Kopijuoti"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Įklijuoti"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Pasirinkti _viskÄ…"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Pervadinti"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "GTK vartotojo sÄ…saja"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Įkraunama į atmintį ..."
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Klaida"
+
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Užverti"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "mono"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "stereo"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d kanalas"
+msgstr[1] "%d kanalai"
+msgstr[2] "%d kanalų"
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d kbps"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "Ankstesnis takelis"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Groti"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Sustabdyti/Paleisti"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Stop"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "Kitas takelis"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "5 sekundes į priekį"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "5 sekundes atgal"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "Nutildyti"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Pagarsinti"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Patildyti"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Šokti į failą"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Perjungti grotuvo langus"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "Rodyti On-Screen-Display"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Perjungti KartojimÄ…"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Perjungti maišymą"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(joks)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"Nerekomenduojama susieti pagrindinius pelės mygtukus be prižiūrėtojų\n"
+"\n"
+"Tęsti?"
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "Saistyti pelÄ—s mygtukus"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "Global Hotkey įskiepio konfiguravimas"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"Paspauskite klavišų kombinaciją teksto lauke\n"
+"Taip pat galima sieti ir pelÄ—s mygtukus."
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "Karštieji klavišai:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>Veiksmas:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "<b>Klavišo susiejimas:</b>"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "Apie Global Hotkey įskiepį"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+"Globalus karštųjų klavišų įskiepis\n"
+"Valdyk grotuvą su globalių klavišų kombinacijomis arba multimedia klavišais.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"KÅ«rÄ—jai:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Prisijungti prie visų prieinamų jack prievadų"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Prisijungti tik prie išvesties prievadų"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "Nesijungti prie jokių prievadų"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "jack įskiepio konfigūracija"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Prisijungimo režimas:"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Įjungti derinimo pranešimus"
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"PritaikÄ— Audacious programai\n"
+"Giacomo Lozito from develia.org"
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr "Apie JACK išvesties įskiepį 0.17"
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Apie LADSPA Hot"
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "%s nustatymai:"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "LADSPA Host nustatymai"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Modulio kelias:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Atskirk kelis kelius su dvitaškiu.\n"
+"Šie keliai ieškomi neradus ko reikia LADSPA_PATH kelyje.\n"
+"Kai pridedamai nauji keliai, paspausk ENTER naujų įskiepių paieškai.</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Prieinami įskiepiai:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Įjungti"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Įjungti įskiepiai:"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Nustatymai"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Ieškoma dainos žodžių..."
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"Jungiamasi prie lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"Dainų žodžiai nerasti."
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr "Apie Metronom"
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+"Takto generatorius, sukūrė Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"Norint naudoti, pridÄ—k URL: tact://beats*num/den\n"
+"pvz. tact://77 groti 77 dūžiai per minutę\n"
+"arba tact://60*3/4 groti 60 bpm 3/4 taktu"
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr "Takto generatorius: %d bpm"
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr "Takto generatorius: %d bpm %d/%d"
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Apie kanalų mikserį"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Kanalų Mikserio nustatymai"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "IÅ¡vesties kanalai:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Pakeitimai įsigalios nuo sekanÄios dainos."
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "Apsupimas"
+
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "IÅ¡siunÄiama..."
+
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Išsiųsti į MTP įrenginį"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Atjungti MTP įrenginį"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Sustabdyta"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious negroja."
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Null išvesties įskiepio"
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+" kūrė Christian Birchinger <joker@netswarm.net>\n"
+"paremta XMMS įskiepiu kurį sukūrė Håvard Kvål <havardk@xmms.org>"
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr "Apie Null išvestį"
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "Null išvesties nustatymai"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "Vykdyti realiu laiku"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. Numatytasis įrenginys"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "OSS4 išvesties įskiepio nustatymai"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Audio įrenginys:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "Naudoti alternatyvų įrenginį:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Išsaugoti garsą tarp sesijų"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "Įgalinti formato keitimą kurį padarė OSS programinė įranga."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Įgalinti išskirtinį režimą, siekiant išvengti virtualaus maišymosi."
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "Apie OSS4 įskiepį"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "OSS4 klaida"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "Numatytasis (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "OSS Driver konfigūracija"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Įrenginiai"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "Buferiavimas:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "Priešlaikinis buferiavimas (procentais):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "Buferiavimas"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "Mikserio nustatymai:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "Garso valdymas Master ne PCM"
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "Mikseris"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "Apie OSS Driver"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "Apie Audacious PulseAudio išvesties įskiepį"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr "Apie diskretizavimo dažnio keitėjo įskiepį"
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr "Diskretizavimo dažnio keitėjo nustatymai"
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "Dažnio parodymai:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "Visi kiti:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "Metodas:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "Keisti slaptažodį"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>Tarnyba</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "Naudotojo vardas:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "Slaptažodis:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr "Scrobbler URL:"
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr "<b>Last.FM</b>"
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr "Scrobbler"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Audacious AudioScrobbler įskiepis\n"
+"\n"
+"Originaliai sukūrė Audun Hove <audun@nlc.no> ir Pipian <pipian@pipian.com>\n"
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "Apie Scrobbler įskiepį"
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Apie SDL išvesties įskiepį"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "SDL klaida"
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Žanras"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Fonoteka"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Sukurti grojaraštį"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Pridėti į grojaraštį"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Ieškoti fonotekoje"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Norėdami importuoti muziką į Audacious fonoteką, pasirinkite aplanką ir "
+"paspauskite „atnaujinti“ piktogramą."
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Palaukite..."
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Pasirinkite aplankÄ…"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "Apie Skinned GUI"
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "_Grotuvas:"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Pasirinkti pagrindinį lango šriftą:"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "_Grojaraštis:"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Pasirinkti grojaraÅ¡Äio Å¡riftÄ…:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Å riftai</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Naudoti bitmap Å¡riftus (palaiko tik ASCII)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Slinkti pavadinimą į abi puses"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_IÅ¡vaizda</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "SÄ…sajos nustatymai"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamp"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Audacious ekvalaizeris"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Å ablonai"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Įkrauti šabloną"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Įkrauti auto išankstinius nustatymus"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Įkrauti ekvalaizerio išankstinius nustatymus"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "IÅ¡saugoti Å¡ablonus"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Išsaugoti auto išankstinius nustatymus"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Išsaugoti ekvalaizerio išankstinius nustatymus"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "IÅ¡trinti Å¡ablonÄ…"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Ištrinti auto išankstinius nustatymus"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kbps"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "surround"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Eiti į %d:%-2.2d / %d:%-2.2d"
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "Garsumas: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "Balansas: %d%% kairÄ—"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "Balansas: centras"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "Balansas: %d%% dešinė"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "PasirinkÄių meniu"
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "Išjungti 'Visada viršuje'"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Įjungti 'Visada viršuje'"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Failo informacijos langas"
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Vizualizacijos meniu"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "Vieno režimas."
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "GrojaraÅ¡Äio režimas."
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "Sustabdymas po dainos."
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "Nesustabdyti po dainos."
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "Automatiškai slinkti dainos pavadinimą"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Sustabdyti po grojamos dainos"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "Pikai"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Kartoti"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Maišyti"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Nesislinkti grojaraÅ¡Äiu"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "Rodyti grotuvÄ…"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "Rodyti grojaraÅ¡Äio redaktorių"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "Rodyti ekvalaizerį"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "Visada viršuje"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "Rodyti visuose darbalaukiuose"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "Sustumti grotuvÄ…"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "Sustumti grojaraÅ¡Äio redaktorių"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "Sustumti ekvalaizerį"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "Analizatorius"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "Akiratis"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "Voiceprint"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "IÅ¡jungta"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Normalus"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "Ugnis"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "Vertikalios linijos"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "Linijos"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "Juostos"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "Taško akiratis"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "Linijos akiratis"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "Vientisas akiratis"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "Ledas"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Tolygus"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "LÄ—Äiausias"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "LÄ—tas"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Vidutinis"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Greitas"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "GreiÄiausias"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "PraÄ—jo laiko"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "Liko laiko"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "PauzÄ—"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Ankstesnis"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Sekantis"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "Vizualizacija"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "Vizualizacijos režimas"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "Analizatoriaus režimas"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "AkiraÄio režimas"
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "Voiceprint režimas"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "WindowShade VU režimas"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "Analizatoriaus nukritimas"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "Pikų krytis"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Grojaraštis"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Naujas grojaraštis"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "Pasirinkti sekantį grojaraštį"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "Pasirinkti ankstesnį grojaraštį"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Ištrinti grojaraštį"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Įkelti grojaraštį"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Įkrauna grojaraštį į pasirinktą grojaraštį."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Eksportuoti grojaraštį"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Išsaugo pasirinktą grojaraštį."
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Atnaujinti sąrašą"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Atnaujina meta duomenis susietus su grojaraÅ¡Äio elementu."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "GrojaraÅ¡Äio redaktorius"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "EilÄ—s redaktorius"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Rodymas"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Vartotojo sÄ…saja"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Vartotojo sÄ…sajos nustatymai..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "PridÄ—ti interneto adresÄ…..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Pridėti nutolusį takelį į grojaraštį."
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "PridÄ—ti failus..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Prideda failus į grojaraštį."
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Ieškoti ir pasirinkti"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr "IeÅ¡ko ir pasirenka grojaraÅ¡Äio elementus pagal nurodytÄ… kriterijų."
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "Apversti pasirinktus"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr "ApverÄia visus elementus."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Pasirinkti viskÄ…"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Pasirenka visus grojaraÅ¡Äio įraÅ¡us."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Nieko nepasirinkti"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Atžymi visus grojaraÅ¡Äio įraÅ¡us."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Pašalinti visus"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "PaÅ¡alina visus įraÅ¡us iÅ¡ grojaraÅ¡Äio."
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "IÅ¡valyti eilÄ™"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr "IÅ¡valo eilÄ™ susietÄ… su Å¡iuo grojaraÅ¡Äiu."
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "Pašalina neprieinamus failus"
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr "PaÅ¡alina neprieinamus failus iÅ¡ grojaraÅ¡Äio."
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "Pašalinti dubliuotus"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Pagal pavadinimÄ…"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr "PaÅ¡alina dubliuotus įraÅ¡us iÅ¡ grojaraÅ¡Äio pagal pavadinimÄ…."
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "Pagal failo vardÄ…"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr "PaÅ¡alina dubliuotus įraÅ¡us iÅ¡ grojaraÅ¡Äio pagal failo vardÄ…."
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "Pagal keliÄ… + failo vardÄ…"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr "PaÅ¡alina dubliuotus įraÅ¡us iÅ¡ grojaraÅ¡Äio pagal pilnÄ… jų keliÄ…."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Pašalint nepažymėtus"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Pašalina nepažymėtus."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Pašalint pažymėtus"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "PaÅ¡alina pažymÄ—tus elementus iÅ¡ grojaraÅ¡Äio."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Sumaišyti sąrašą"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Sumaišo sąrašą."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Apversti sąrašą"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "ApverÄia grojaraÅ¡tį."
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Rikiuoti sąrašą"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr "Rikiuoja sąrašą pagal pavadinimą."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Pagal albumÄ…"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr "Rikiuoja sąrašą pagal albumą."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Pagal atlikÄ—jÄ…"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr "Rikiuoja sąrašą pagal atlikėją."
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr "Rikiuoja sąrašą pagal failo vardą."
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr "Rikiuoja sąrašą pagal pilną kelią."
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "Pagal datÄ…"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr "Rikiuoja sąrašą pagal keitimo laiką."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Pagal takelio numerį"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr "Rikiuoja sąrašą pagal takelio numerį."
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "Rikuoti pasirinktus"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Failas"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "Įskiepių paslaugos"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Pažiūrėti takelio detales"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Pažiūrėti takelio detales"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Apie Audacious"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "Groti failÄ…"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Įkrauti ir groti failą"
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "Groti vietÄ…"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Groti failą iš pasirinktos vietos"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Įskiepių paslaugos"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Nustatymai"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Atverti nustatymų langą"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Užverti Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Nustatyti A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "IÅ¡valyti A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Šokti į laiką"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Perjungti eilÄ™"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Ä®jungia/IÅ¡jungia įraÅ¡Ä… grojaraÅ¡Äio eilÄ—je."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Kopijuoti"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "IÅ¡kirpti"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Įklijuoti"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "Įkrauti"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Įkelti"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "IÅ¡saugoti"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "IÅ¡trinti"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Å ablonas"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "Savaime įsikraunantis šablonas"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "Įkrauti savaime įsikraunantį šabloną"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "Įkrauti numatytąjį šabloną į ekvalaizerį"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "Nulis"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "Nustatyti ekvalaizerio šablono lygius į nulius"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "IÅ¡ failo"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "Įkrauti šabloną iš failo"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "IÅ¡ WinAMP EQF failo"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "Įkrauti šabloną iš WinAMP EQF failo"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "WinAMP Å¡ablonai"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "Importuoti WinAMP Å¡ablonus"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "Išsaugoti savaime įsikraunantį šabloną"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "Išsaugoti numatytąjį šabloną"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "Ä® failÄ…"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "Išsaugoti šabloną į failą"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "Ä® WinAMP EQF failÄ…"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "Išsaugoti šabloną į WinAMP EQF failą"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "Ištrinti savaime įsikraunantį šabloną"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr "Ieškoti įrašų aktyviame grojaraštyje"
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+"Surask ir pasirink įrašus grojaraštyje užpildydamas vieną ar kelis "
+"laukelius. Laukeliai naudoja reguliariųjų išraiškų sintaksę, raidžių lygis "
+"nesvarbus. Jei nežinai kaip veikia reguliariosios iÅ¡raiÅ¡kos, paprasÄiausiai "
+"įrašyk paraidžiui tai ko ieškai."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Pavadinimas:"
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "Albumas:"
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "AtlikÄ—jas:"
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "Failo vardas:"
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr "Prie ieškant, išvalyti buvusius pasirinkimus"
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr "Atitinkantiems įrašams automatiškai perjungti eilę"
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr "Iš surastų įrašų sukurti naują grojaraštį"
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr "Audacious grojaraÅ¡Äio redaktorius"
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d iš %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "Archyvuotas Winamp 2.x skin"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "IÅ¡archyvuotas Winamp 2.x skin"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "Negaliu sukurt aplanko (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr "Apie sndfile įsiepį"
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "Apie SndStretch"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "Garso taisymas"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "Trumpas užklojimas"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Greitis"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "Pikai"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Mastas"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "SndStretch - Konfiguravimas"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "Komanda kurią paleisti kai Audacious paleidžia naują dainą."
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr "Komanda:"
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "Komanda kurią paleisti prieš pasibaigiant dainai."
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr "Komanda kuriÄ… paleisti kai Audacious pasiekia grojaraÅ¡Äio pabaigÄ…."
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+"Komanda kuriÄ… paleisti kai dainos pavadinimas pasikeiÄia (t.y. interneto "
+"srautų pavadinimai)"
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Galite naudoti tokio formato žymas\n"
+"kurios bus pakeistos prieÅ¡ kvieÄiant komandÄ…\n"
+"(nevisos yra naudingos end-of-playlist komandai).\n"
+"\n"
+"%F: Dažnis ( hertcais)\n"
+"%c: Kanalų kiekis\n"
+"%f: failo vardas (pilnas kelias)\n"
+"%l: trukmÄ— (milisekundÄ—mis)\n"
+"%n arba %s: Dainos pavadinimas\n"
+"%r: Rate (bitais per sekundÄ™)\n"
+"%t: GrojaraÅ¡Äio vieta (%02d)\n"
+"%p: Dabar grojama (1 or 0)\n"
+"%a: AtlikÄ—jas\n"
+"%b: Albumas\n"
+"%T: Takelio pavadinimas"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>Parametrai pateikti komandų interpretatoriui turi būt "
+"kabutÄ—se. Darant kitaip rizikuojate savo saugumu.</span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "Komandos"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr "Dainos keitimas"
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "Apie Status Icon įskiepį"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+"Status Icon įskiepis\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"Šis įskiepis sistemos dėkle sukuria piktogramą.\n"
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "Status icon įskiepis - Nustatymai"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "Dešinio pelės klavišo meniu"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "Mažas atkūrimo meniu #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "Mažas atkūrimo meniu #2"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "PelÄ—s ratuko veiksmas"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "Keisti garsÄ…"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "Keisti grojanÄiÄ… dainÄ…"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Kiti nustatymai"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Išjungti iššokantį langą"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Uždaryti į pranešimų srity (sistemos dėklą)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Slenkant aukÅ¡tyn, žengti grojaraÅ¡Äiu"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+"Extra Stereo Plugin\n"
+"\n"
+"KÅ«rÄ— Johan Levin 1999."
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "Apie Extra Stereo įskiepį"
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "Konfigūruoti Extra Stereo"
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr "Apie Tonų Generatorių"
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+"Sinus tono generatorius, sukūrė Haavard Kvaalen <havardk@xmms.org>\n"
+"Patobulino Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"Norint naudot pridÄ—k URL: tone://frequency1;frequency2;frequency3;...\n"
+"pvz. tone://2000;2005 norint grot 2000Hz tonÄ… ir 2005Hz tonÄ…"
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Hz"
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr "Tono generatorius: "
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Apie File I/O įskiepį"
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Apie Ogg Vorbis Audio įskiepį"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Ogg Vorbis sukūrė Xiph.org Foundation\n"
+"\n"
+"Orginalų kodą rašė\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Aplankykite Xiph.org Foundation http://www.xiph.org/\n"
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr "Apie Vortex Player"
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+"Vortex formato grotuvą kūrė Sashnov Alexander <sashnov@ngs.ru>\n"
+"Sukurtas remiantis kodu rastu _vtx.dll kurį kūrė Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Muzikos vtx formatu galim rast http://vtx.microfor.ru/music.htm\n"
+"ir kitose AY/YM muzikos svetainÄ—se.\n"
+"\n"
+"Integravo į Audacious Pavel Vymetalek <pvymetalek@seznam.cz>"
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr "Wavpack Decoder įskiepis %s"
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Dalį įskiepio sukūrė Miles Egan\n"
+"Aplankykite Wavpack puslapį http://www.wavpack.com/\n"
+
+
diff --git a/po/lv.po b/po/lv.po
index 69dd969..593de4d 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -1,24 +1,24 @@
# Copyright (C) 2009 Einars Sprugis <einars8@gmail.com>
# This file is distributed under the same license as the audacious-plugins package.
#
-# Einars Sprugis <einars8@gmail.com>, 2009.
+# Einars Sprugis <einars8@gmail.com>, 2009, 2011.
msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins2_22062009\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: 2009-10-11 01:21+0300\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
+"PO-Revision-Date: 2011-10-30 16:53+0200\n"
"Last-Translator: Einars Sprugis <einars8@gmail.com>\n"
"Language-Team: Latvian <kde-i18n-doc@kde.org>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
+"X-Generator: Lokalize 1.2\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
"2);\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -29,618 +29,53 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM dekodÄ“tÄjs (c) Nero AG, www.nero.com\n"
"Autortiesības (c) 2005-2006 Audacious komanda"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "Par MP4 AAC dekodÄ“tÄja spraudni"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Par"
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Autortiesības (c) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Šis spraudnis ir izlaists zem GNU LGPL nosacījumiem.\n"
-"Detaļas skatīt http://www.gnu.org/licenses/lgpl.html\n"
-"\n"
-"Šis spraudnis izmanto AdPlug bibliotēku, autortiesības (C) Simon Peter u.c.\n"
-"SaistÄ«tÄs AdPlug bibliotÄ“kas versija: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: KonfigurÄcija"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Labi"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Atcelt"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "VispÄrÄ«gi"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Skaņas kvalitÄte"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Izšķirtspēja"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16bit"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "KanÄli"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Ieslēgt stereo režīmu nav ieteicams, ja vien jums to nevajag. Tas "
-"nepievienos skaņai stereo efektu (OPL2 ir tikai mono), bet patÄ“rÄ“s vairÄk "
-"procesora resursu!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frekvence"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Atskaņošana"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Noteikt dziesmas beigas"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Ja ieslēgts, XMMS noteiks dziesmas beigas, apturēs to un pavirzīsies uz "
-"priekÅ¡u repertuÄrÄ. Ja izslÄ“gts, XMMS neievÄ“ros dziesmas beigas un atkÄrtos "
-"to."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "FormÄti"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "FormÄta izvÄ“le"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "FormÄts"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "PaplaÅ¡inÄjums"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Šis spraudnis atpazīs un atskaņos izvēlētos faila tipus. Neizvēlētie tipi "
-"tiks ignorēti, lai atļautu tos atskaņot citiem spraudņiem."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Faila informÄcija"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Faila nosaukums"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Nosaukums: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autors: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Faila tips: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Apakšdziesmas: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumenti: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "KÄrtÄ«bas: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Paraugi: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Dziesma"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Instrumenta nosaukums"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Dziesmas ziņojums"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Apakšdziesmas izvēle"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "KÄrtÄ«ba: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Paraugs: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Rinda: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Ä€trums: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Taimeris: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "Par XMMS Alarm"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS Alarm"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"XMMS spraudnis, kas var tikt izmantots,\n"
-"lai sÄktu atskaņoÅ¡anu noteiktÄ laikÄ.\n"
-"\n"
-"Sūtiet visas sūdzības uz:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Aizvērt"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "ModinÄtÄjs"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "Å is ir jÅ«su moÅ¡anÄs zvans."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "Labi"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "IzvÄ“lieties repertuÄru"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Atvainojiet"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "BrÄ«dinÄjums"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"DroÅ¡Ä«bas dēļ \"kluss\" ilgumam jÄbÅ«t vismaz par 65 sekundÄ“m garÄkam nekÄ "
-"izdziÅ¡anas ilgumam, tam jÄbÅ«t arÄ« garÄkam par 10 sekundÄ“m. BÅ«tÄ«bÄ tas "
-"nozÄ«mÄ“, ka kodÄ ir kļūda un, lÄ«dz tiks atrasts risinÄjums, jums bÅ«s jÄredz "
-"šis ziņojums :)\n"
-"\n"
-"JÅ«su izdziÅ¡anas ilguma iestatÄ«jumi NAV saglabÄti\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Nu, labi"
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "ModinÄtÄjs iestatÄ«jumi"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "Laiks"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "stundas"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "h"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr "minūtes"
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "Kluss pēc:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "ModinÄt (noklusÄ“jums):"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "IzvÄ“lieties dienas, kurÄs ieslÄ“gsies modinÄtÄjs"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "Noklusētais"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "Diena"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "Otrdiena"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "Trešdiena"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "Ceturtdiena"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "Piektdiena"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "Sestdiena"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "Svētdiena"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "Pirmdiena"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "Dienas"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "Izdzišana"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-msgid "seconds"
-msgstr "sekundes"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-msgid "Volume"
-msgstr "Skaļums"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr "Pašreizējais"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "Atstatīt uz pašreizējo izvades skaļumu"
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr "SÄkumÄ"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "BeigÄs"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "Papildu komanda"
-
-#: src/alarm/interface.c:1253
-msgid "enable"
-msgstr "ieslēgt"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr "RepertuÄrs (neobligÄts)"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "PÄrlÅ«kot..."
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr "AtgÄdinÄjums"
-
-#: src/alarm/interface.c:1312
-msgid "Use reminder"
-msgstr "Izmantot atgÄdinÄjumu"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-msgid "Options"
-msgstr "Opcijas"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "Ko šīs opcijas nozīmē?"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-"\n"
-"Laiks\n"
-" ModinÄt: \n"
-" Laiks, kad ieslÄ“dzas modinÄtÄjs.\n"
-"\n"
-" Kluss pēc: \n"
-" IzslÄ“gt modinÄtÄju pÄ“c Å¡Ä« laika sprīža.\n"
-" (ja netiek aizvÄ“rts pamoÅ¡anÄs dialogs)\n"
-"\n"
-"\n"
-"Dienas\n"
-" Diena:\n"
-" IzvÄ“lieties dienas, kad modinÄtÄjam jÄieslÄ“dzas.\n"
-"\n"
-" Laiks:\n"
-" IzvÄ“lieties modinÄÅ¡anas laiku katrai dienai\n"
-" vai arī atzīmējiet 'Noklusētais', lai izmantotu\n"
-" noklusēto laiku.\n"
-"\n"
-"\n"
-"Skaļums\n"
-" Izdzišana:\n"
-" PalielinÄt skaļumu lÄ«dz izvÄ“lÄ“tajam lÄ«menim\n"
-" Å¡ajÄ laika brÄ«dÄ«.\n"
-"\n"
-" SÄkt: \n"
-" SÄkt skaļuma palielinÄÅ¡anu no Å¡Ä« lÄ«meņa.\n"
-"\n"
-" Beigt: \n"
-" LÄ«menis, pie kura pÄrtraukt skaļuma palielinÄÅ¡anu.\n"
-" Ja izdzišanas laiks ir 0, tad iestatīt skaļumu uz šo\n"
-" lÄ«meni un sÄkt atskaņoÅ¡anu.\n"
-"\n"
-"\n"
-"Opcijas:\n"
-" Papildu komanda:\n"
-" Palaist Å¡o komandu modinÄtÄja palaiÅ¡anas brÄ«dÄ«.\n"
-"\n"
-" RepertuÄrs: \n"
-" IelÄdÄ“t repertuÄru, no kura tiks atskaņotas dziesmas\n"
-" (jÄbÅ«t ar .m3u paplaÅ¡inÄjumu). Ja tas netiek norÄdÄ«ts,\n"
-" tiks izmantotas dziesmas no paÅ¡reizÄ“jÄ repertuÄra.\n"
-" Šeit var ievadīt arī mp3/ogg straumes URL, bet\n"
-" repertuÄru ielÄdÄ“Å¡anu no URL xmms paÅ¡reiz\n"
-" neatbalsta.\n"
-"\n"
-" AtgÄdinÄjums:\n"
-" ModinÄtÄjam izslÄ“dzoties, parÄda atgÄdinÄjumu.\n"
-" Ievadiet atgÄdinÄjumu teksta laukÄ un ielieciet\n"
-" Ä·eksÄ«ti blakus esoÅ¡ajÄ rÅ«tÄ«, ja vÄ“lieties, lai tas tiktu\n"
-" parÄdÄ«ts.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "Palīdzība"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr "JÅ«su atgÄdinÄjums Å¡odienai ir.."
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr "Paldies"
-
-#: src/alsa/config.c:209
-#, fuzzy
+#: src/alsa/config.c:210
msgid "Default PCM device"
-msgstr "NoklusÄ“tÄ PCM ierÄ«ce (%s)"
+msgstr "NoklusÄ“tÄ PCM ierÄ«ce"
-#: src/alsa/config.c:234
-#, fuzzy
+#: src/alsa/config.c:235
msgid "Default mixer device"
-msgstr "NoklusÄ“tÄ PCM ierÄ«ce (%s)"
+msgstr "NoklusÄ“tÄ miksera ierÄ«ce"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
msgid "ALSA Output Plugin Preferences"
msgstr "ALSA izvades spraudņa iestatījumi"
-#: src/alsa/config.c:445
-#, fuzzy
+#: src/alsa/config.c:454
msgid "PCM device:"
-msgstr "Miksera ierīce:"
+msgstr "PCM ierīce:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Miksera ierīce:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
msgid "Mixer element:"
msgstr "Miksera elements:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
-msgstr ""
+msgstr "Apiet 'drain hangup' problēmai"
-#: src/alsa/plugin.c:61
-#, fuzzy
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
-msgstr "Par JACK izvades spraudni 0.17"
+msgstr "Par ALSA izvades spraudni"
-#: src/alsa/plugin.c:83
-#, fuzzy
+#: src/alsa/plugin.c:81
msgid "ALSA error"
-msgstr " Kļūda"
+msgstr "ALSA kļūda"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
msgstr ""
+"Jūs neesat izvēlējies nevienu sekvencera portu MIDI atskaņošanai. To varat "
+"izdarīt MIDI spraudņa iestatījumos."
#: src/amidi-plug/backend-alsa/b-alsa.c:35
msgid "ALSA Backend "
@@ -666,11 +101,11 @@ msgstr ""
"aparatūras sintezatoru, tiks atskaņoti tieši.\n"
"Aizmuguri uzrakstījis Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FluidSynth aizmugure "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -686,84 +121,43 @@ msgstr ""
"tiek apstrÄdÄta ar izvÄ“lÄ“to izvades spraudni.\n"
"Aizmuguri uzrakstījis Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSA AIZMUGURES KONFIGURÄ€CIJA"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Ports"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Klienta nosaukums"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Porta nosaukums"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSA izvades porti"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Skaņas karte: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Miksera kontrole: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Miksera iestatījumi"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Izvēlieties ALSA izvades portus *\n"
-"MIDI notikumi tiks sūtīti uz šeit izvēlētajiem portiem. Piemēram, ja jūsu "
-"skaņas karte ir aprīkota ar sintezatoru aparatūras līmenī un jūs vēlaties ar "
-"to atskaņot MIDI, tad, jums vajadzētu šeit izvēlēties viļņtabulas "
-"sintezatora portus."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Izvēlieties ALSA mikseri *\n"
-"ALSA aizmugure padod izvadi tieÅ¡i caur ALSA, tÄ neizmanto efektu un izvades "
-"spraudņus no atskaņotÄja. AtskaņoÅ¡anas laikÄ atskaņotÄja skaļuma regulators "
-"manipulēs ar to miksera vadīklu, ko izvēlēsieties šeit. Ja izmantojat "
-"viļņtabulas sintezatora portus, jums vajadzētu šeit izvēlēties Synth vadīklu."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Izvēlieties ALSA miksera vadīklu *\n"
-"ALSA aizmugure padod izvadi tieÅ¡i caur ALSA, tÄ neizmanto efektu un izvades "
-"spraudņus no atskaņotÄja. AtskaņoÅ¡anas laikÄ atskaņotÄja skaļuma regulators "
-"manipulēs ar to miksera vadīklu, ko izvēlēsieties šeit. Ja izmantojat "
-"viļņtabulas sintezatora portus, jums vajadzētu šeit izvēlēties Synth vadīklu."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSA aizmugure nav ielÄdÄ“ta vai arÄ« nav pieejama"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -771,151 +165,51 @@ msgstr ""
"<span size=\"smaller\">ALSA\n"
"aizmugure</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - aizmugures informÄcija"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-PLUG Iestatījumi"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Aizmugures izvēle"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "PieejamÄs aizmugures"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Atskaņošanas iestatījumi"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "PÄrlikt: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Bungu pÄrbÄ«de: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "PaplaÅ¡inÄtie iestatÄ«jumi"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "aprÄ“Ä·inÄt garumus MIDI failiem repertuÄrÄ iepriekÅ¡"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "izvilkt komentÄrus no MIDI failiem (ja pieejami)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "izvilkt dziesmu vÄrdu tekstus no MIDI failiem (ja pieejami)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Aizmugures izvēle *\n"
-"AMIDI-Plug darbojas ar aizmugurÄ“m, modulÄrÄ veidÄ. Å eit jums jÄizvÄ“las "
-"aizmugure, t.i., veids, kÄdÄ MIDI notikumi tiks apstrÄdÄti un atskaņoti.\n"
-"Ja jūsu skaņas kartei ir ALSA atbalstīts aparatūras sintezators, jūs "
-"vÄ“lÄ“sieties izmantot ALSA aizmuguri. TÄ arÄ« var tikt izmantota ar jebko, kas "
-"nodrošina saskarni ALSA sekvencerim, ieskaitot programmatūras sintezatorus "
-"vai ÄrÄ“jas ierÄ«ces.\n"
-"Ja vēlaties izmantot programmatūras sintezatoru un/vai vēlaties ievadīt "
-"skaņu atskaņotÄja efektu un izvades spraudņos, jÅ«s vÄ“lÄ“sieties izmantot labu "
-"FluidSynth aizmuguri.\n"
-"Nospiediet informÄcijas pogu, lai saņemtu specifisku informÄciju par katru "
-"aizmuguri."
-
-#: src/amidi-plug/i_configure-ap.c:331
-#, fuzzy
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* PÄrlikÅ¡anas funkcija *\n"
-"Å Ä« opcija ļauj jums atskaņot pÄrveidotu midi failu, pÄrbÄ«dot par vÄ“lamo "
-"skaitu pustoņu visas tÄ notis (izņemot notis 10. midi kanÄlÄ, kas rezervÄ“ts "
-"perkusijÄm). Tas ir Ä«paÅ¡i noderÄ«gi, ja vÄ“laties dziedÄt vai spÄ“lÄ“t lÄ«dz ar "
-"citu instrumentu."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Bungu pÄrbÄ«des funkcija *\n"
-"Å Ä« opcija ļauj jums pÄrbÄ«dÄ«t notis 10. midi kanÄlÄ (standarta perkusiju "
-"kanÄls) par vÄ“lamo skaitu pustoņu. RezultÄtÄ midi atskaņoÅ¡anas laikÄ tiks "
-"izmantotas atÅ¡Ä·irÄ«gas bungu un perkusiju skaņas. TÄtad, ja vÄ“laties mainÄ«t "
-"perkusiju skaņas, mēģiniet paeksperimentēt ar šo vērtību."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* AprÄ“Ä·inÄt MIDI garumus iepriekÅ¡ *\n"
-"Ja Å¡Ä« opcija ir ieslÄ“gta, AMIDI-Plug aprÄ“Ä·inÄs MIDI faila garumu, tiklÄ«dz "
-"atskaņotÄjs to pieprasa, nevis faila atskaņoÅ¡anas laikÄ. PiemÄ“ram, MIDI "
-"garums tiks aprÄ“Ä·inÄts uzreiz pÄ“c to pievienoÅ¡anas repertuÄram. IzslÄ“dziet "
-"Å¡o opciju, ja vÄ“laties ÄtrÄku repertuÄra ielÄdi (pievienojot daudz MIDI "
-"failu), bet ieslÄ“dziet, lai repertuÄrÄ tiktu attÄ“lots vairÄk informÄcijas "
-"uzreiz pÄ“c failu ielÄdÄ“Å¡anas."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* Izvilkt komentÄrus no MIDI failiem *\n"
-"DažkÄrt MIDI faili satur teksta komentÄrus (autors, autortiesÄ«bas, "
-"instrumentu notis, u.t.t.). Ja šī opcija ir ieslēgta, AMIDI-Plug izvilks un "
-"attÄ“los komentÄrus (ja pieejami) faila informÄcijas dialogÄ."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* Izvilkt dziesmu vÄrdu tekstus no MIDI failiem *\n"
-"DažkÄrt MIDI faili satur dziesmu vÄrdu tekstus. Ja Å¡Ä« opcija ir ieslÄ“gta, "
-"AMIDI-Plug izvilks un attÄ“los dziesmu vÄrdu tekstus (ja pieejami) faila "
-"informÄcijas dialogÄ."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -923,232 +217,113 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - izvēlieties failu"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - konfigurÄcija"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - izvēlieties SoundFont failu"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "FLUIDSYNTH AIZMUGURES KONFIGURÄ€CIJA"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "SoundFont iestatījumi"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Faila nosaukums"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Izmērs (baitos)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "IelÄdÄ“t SF palaižot atskaņotÄju"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "IelÄdÄ“t SF pie pirmÄs MIDI faila atskaņoÅ¡anas"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Sintezatora iestatījumi"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "pastiprinÄjums"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "izmantot noklusēto"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "vērtība:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "polifonija"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "atbalss"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "jÄ"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "nē"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "koris"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "iztveršanas temps"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "pielÄgots "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* Izvēlieties SoundFont failus *\n"
-"Lai atskaņotu MIDI failus ar FluidSynth, jums Å¡eit jÄnorÄda vismaz viens "
-"derÄ«gs SoundFont fails (lietojiet absolÅ«tos ceļus). IelÄdÄ“Å¡anas kÄrtÄ«ba ir "
-"no augšas (pirmais) uz apakšu (pēdējais)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* IelÄdÄ“t SoundFont palaižot atskaņotÄju *\n"
-"AtkarÄ«bÄ no jÅ«su sistÄ“mas Ätruma, SoundFont ielÄdÄ“Å¡ana FluidSynth ilgs lÄ«dz "
-"pat dažÄm sekundÄ“m. Å is ir vienreizÄ“js uzdevums (SoundFont paliks ielÄdÄ“ts "
-"lÄ«dz tas tiks mainÄ«ts vai arÄ« tiks izlÄdÄ“ta aizmugure), ko var izpildÄ«t, "
-"palaižot programmu vai pirms pirmÄ MIDI faila atskaņoÅ¡anas (pÄ“dÄ“jÄ ir labÄka "
-"izvÄ“le, ja neizmantojat atskaņotÄju tikai MIDI failu atskaņoÅ¡anai)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* IelÄdÄ“t SoundFont, pirmoreiz atskaņojot MIDI failu *\n"
-"AtkarÄ«bÄ no jÅ«su sistÄ“mas Ätruma, SoundFont ielÄdÄ“Å¡ana FluidSynth ilgs lÄ«dz "
-"pat dažÄm sekundÄ“m. Å is ir vienreizÄ“js uzdevums (SoundFont paliks ielÄdÄ“ts "
-"lÄ«dz tas tiks mainÄ«ts vai arÄ« tiks izlÄdÄ“ta aizmugure), ko var izpildÄ«t, "
-"palaižot programmu vai pirms pirmÄ MIDI faila atskaņoÅ¡anas (pÄ“dÄ“jÄ ir labÄka "
-"izvÄ“le, ja neizmantojat atskaņotÄju tikai MIDI failu atskaņoÅ¡anai)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* Sintezatora pastiprinÄjums *\n"
-"No FluidSynth dokumentÄcijas: pastiprinÄjums tiek attiecinÄts uz sintezatora "
-"gala izvadi. PÄ“c noklusÄ“juma tam ir uzstÄdÄ«ta zema vÄ“rtÄ«ba, lai izvairÄ«tos "
-"no izvades piesÄtinÄtÄ«bas, kad tiek atskaņoti gadÄ«juma MIDI faili."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* Sintezatora polifonija *\n"
-"No FluidSynth dokumentÄcijas: polifonija nosaka, cik balsu var tikt "
-"atskaņots paralÄ“li. Balsu skaitam nav noteikti jÄbÅ«t vienÄdam ar vienlaikus "
-"atskaņoto noÅ¡u skaitu. Patiesi, kad nots tiek atskaņota noteiktÄ MIDI "
-"kanÄlÄ, Å¡Ä« kanÄla uzstÄdÄ«jumi var izveidot vairÄkas balsis, piemÄ“ram, vienu "
-"kreisajam, bet otru labajam audio kanÄlam. AktivizÄ“to balsu skaits ir "
-"atkarÄ«gs no instrumentu zonu skaita, kas iekrÄ«t Ätruma atbilstÄ«bÄ, un "
-"atskaņotÄs nots taustiņa."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Sintezatora atbalss *\n"
-"No FluidSynth dokumentÄcijas: kad uzstÄdÄ«ts uz \"jÄ\", tiek "
-"aktivizētsatbalss efektu modulis. Ievērojiet - tad, kad atbalss modulis ir "
-"aktÄ«vs, uz atbalss moduli nosÅ«tÄ«tais signÄlu daudzums ir atkarÄ«gs no "
-"\"nosÅ«tÄ«tÄ atbalss\" Ä£eneratora, kas definÄ“ts SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Sintezatora koris *\n"
-"No FluidSynth dokumentÄcijas: kad uzstÄdÄ«ts uz \"jÄ\", tiek aktivizÄ“tskora "
-"efektu modulis. Ievērojiet - tad, kad kora modulis ir aktīvs, uz kora moduli "
-"nosÅ«tÄ«tais signÄlu daudzums ir atkarÄ«gs no \"nosÅ«tÄ«tais koris\" Ä£eneratora, "
-"kas definēts SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-#, fuzzy
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Sintezatora iztveršanas temps *\n"
-"Sintezatora Ä£enerÄ“tais audio iztverÅ¡anas temps. Varat norÄdÄ«t arÄ« pielÄgotu "
-"vÄ“rtÄ«bu intervÄlÄ 22050Hz-96000Hz.\n"
-"Piezīme: noklusētie bufera parametri ir noregulēti 44100Hz tempam. Mainot "
-"iztveršanas tempu, iespējams, būs nepieciešama bufera parametru regulēšana, "
-"lai iegÅ«tu labu skaņas kvalitÄti."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth aizmugure nav ielÄdÄ“ta vai arÄ« nav pieejama"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1172,8 +347,7 @@ msgstr ""
"<span size=\"smaller\">TiMidity\n"
"aizmugure</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Nosaukums:"
@@ -1345,119 +519,119 @@ msgstr "Pauze izslēgta"
msgid "Triggers OSD when playback is unpaused."
msgstr "Palaiž OSD, kad tiek atjaunota atskaņošana pēc pauzes."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "Novietojums"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "RelatÄ«vÄ X nobÄ«de:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "RelatÄ«vÄ Y nobÄ«de:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "MaksimÄlais OSD platums:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "Daudzmonitoru opcijas"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "RÄdÄ«t OSD izmantojot:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "visi monitori"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "%i. monitors"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "Ilgums (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "RÄdÄ«t:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "ParÄdÄ«ties:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "Izgaist:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "Fonti"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "%i. fonts:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "Ä’na"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "InternacionalizÄcija"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "AtslÄ“gt teksta UTF-8 pÄrveidi (iekÅ¡ aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "Izvēlieties apdares failu"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "Renderēšanas stils"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "KrÄsas"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "%i. krÄsa:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "PielÄgota apdare"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "Apdares fails:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr "PÄrlÅ«kot"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Ieslēgt palaidēju"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Notikums"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "KompozitÄ“Å¡anas pÄrvaldnieks atrasts"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1467,73 +641,73 @@ msgstr ""
"ja vien esat pÄrliecinÄts, ka jums tas ir palaists, lÅ«dzu, aktivizÄ“jiet "
"kompozitÄ“Å¡anas pÄrvaldnieku, citÄdi OSD nefunkcionÄ“s pareizi"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "Viltus caurspÄ«dÄ«bai kompozitÄ“Å¡anas pÄrvaldnieks nav nepiecieÅ¡ams"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Caurspīdība"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Viltus caurspīdība"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Īsta caurspīdība (nepieciešams X Composite paplašin.)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "Composite paplaÅ¡inÄjums nav ielÄdÄ“ts"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "Composite paplaÅ¡inÄjums nav pieejams"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - konfigurÄcija"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Testēt"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Novietojums"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "AnimÄcija"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Teksts"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Noformējums"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "Palaidējs"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr "DažÄdi"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Audacious OSD - par"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1541,7 +715,7 @@ msgstr ""
"\n"
"Audacious OSD "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1563,135 +737,6 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "PÄroÅ¡anas pieprasÄ«jums priekÅ¡ '%s'"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "AutorizÄcijas pieprasÄ«jums priekÅ¡ '%s'"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "Izveidots saite ar %s"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "Atcelta saite ar %s"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "Ierīce tika izslēgta"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "IerÄ«ce tika padarÄ«ta neatklÄjama"
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "Ierīce tika padarīta savienojama"
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "IerÄ«ce tika padarÄ«ta atklÄjama"
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "IerÄ«ce tika padarÄ«ta ierobežoti atklÄjama"
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "IerÄ«ce tika pÄrslÄ“gta pÄroÅ¡anas režīmÄ"
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "Bluetooth austiņu atbalsta spraudnis"
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Bluetooth austiņu atbalsts\n"
-"autortiesības (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"Šis bija GSoC 2008 projekts - liels paldies manam padomdevējam Tony Vroon un "
-"Audacious komandai\n"
-"\n"
-"Lai izmantotu AVRCP, kodolÄ jÄbÅ«t ielÄdÄ“tam 'uinput' modulim\n"
-"Austiņu taustiņi tiks atpazÄ«ti kÄ parasti multivides taustiņi\n"
-"un var tikt konfigurÄ“ti, izmantojot Audacious globÄlo Ä«sinÄjumtaustiņu "
-"spraudni\n"
-"vai citus jÅ«su logu pÄrvaldÄ«tÄja rÄ«kus\n"
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "RažotÄjs"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "PieejamÄs austiņas"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "PaÅ¡reizÄ“jÄs austiņas"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "A_tsvaidzinÄt"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "_Pievienot"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "Ai_zvērt"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Klase"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Adrese:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Sasaiste pabeigta!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Nav atrasta neviena ierīce!"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Skenē..."
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "PÄro..."
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "PÄrskenÄ“t"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Atskaņot"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur Scope: krÄsu izvÄ“le"
@@ -1700,11 +745,11 @@ msgstr "Blur Scope: krÄsu izvÄ“le"
msgid "Options:"
msgstr "Iestatījumi:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
msgid "About Audio CD Plugin"
msgstr "Par audio CD spraudni"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1729,126 +774,156 @@ msgstr ""
"\n"
"Autortiesības 2009 John Lindgren"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr "Dzinis ir tukšs."
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr "Neatbalstīts diska tips."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
-msgstr "CD Audio spraudņa konfigurÄcija"
+msgstr "CD audio spraudņa konfigurÄcija"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Ciparu audio ekstrakcija"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Nosaukuma informÄcija"
-#: src/cdaudio-ng/configure.c:190
-#, fuzzy
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
-msgstr "TaktÄtrums:"
+msgstr "Diska Ätrums:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Izmantot cd-text, ja pieejams"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Izmantot CDDB, ja pieejams"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Serveris: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Ceļš: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Ports: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Lietot HTTP nevis CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "AizstÄt noklusÄ“to ierÄ«ci: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "Labi"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Atcelt"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "Atskaņot CD"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Pievienot CD"
-#: src/compressor/plugin.c:58
-#, fuzzy
+#: src/compressor/plugin.c:67
msgid "About Dynamic Range Compression Plugin"
-msgstr "Par Extra Stereo spraudni"
+msgstr "Par Dynamic Range Compression spraudni"
-#: src/compressor/plugin.c:91
-#, fuzzy
+#: src/compressor/plugin.c:99
msgid "Dynamic Range Compressor Preferences"
-msgstr "AudioCompress iestatījumi"
+msgstr "Dynamic Range Compressor iestatījumi"
-#: src/compressor/plugin.c:103
-#, fuzzy
-msgid "Target volume:"
-msgstr "Mainīt skaļumu"
+#: src/compressor/plugin.c:111
+msgid "Center volume:"
+msgstr "Centra skaļums:"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Efekta intensitÄte:"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr "Dinamiskais diapazons:"
-#: src/console/configure.c:137
+#: src/console/configure.c:138
msgid "Game Console Music Decoder"
msgstr "Spēļu konsoles mÅ«zikas dekodÄ“tÄjs"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "VispÄrÄ«gi"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Atskaņošana"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "Bass:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr "sekundes"
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "Augstie toņi:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr "Noklusētais dziesmas garums:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr "IztverÅ¡anas tempa pÄrveidoÅ¡ana"
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr "IeslÄ“gt audio iztverÅ¡anas tempa pÄrveidoÅ¡anu"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr "Iztveršanas temps:"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr "Ignorēt garums no SPC tagiem"
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr "PalielinÄt atbalsi"
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1872,476 +947,124 @@ msgstr ""
"Ieviešana iekš Audacious: William Pitcock <nenolod@dereferenced.org>, \n"
" Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
-#, fuzzy
+#: src/crossfade/plugin.c:65
msgid "About Crossfade"
-msgstr "Par sapludinÄÅ¡anas spraudni"
+msgstr "Par Crossfade"
-#: src/crossfade/plugin.c:84
-#, fuzzy
+#: src/crossfade/plugin.c:97
msgid "Crossfade Preferences"
-msgstr "Iestatījumi"
+msgstr "Crossfade iestatījumi"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
-msgstr ""
+msgstr "PÄrklÄÅ¡anÄs (sekundÄ“s):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
-#, fuzzy
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
msgid "Crossfade Error"
-msgstr "SapludinÄtÄjs"
+msgstr "Crossfade kļūda"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
-msgstr ""
+msgstr "SapludinÄÅ¡ana neizdevÄs, jo dziesmÄm ir dažÄds kanÄlu skaits."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
"You can use the Sample Rate Converter effect to resample the songs to the "
"same rate."
msgstr ""
+"SapludinÄÅ¡ana neizdevÄs, jo dziesmÄm ir dažÄdas iztverÅ¡anas frekvences.\n"
+"\n"
+"Varat izmantot Sample Rate Converter efektu, lai pÄrveidotu dziesmas uz to "
+"pašu iztveršanas frekvenci."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
msgid "Configure Crystalizer"
msgstr "Konfigurēt Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr "Efekta intensitÄte:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "Pielietot"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr "Dēmona saskarne (līdzīgs vecajam bezgalvas režīmam)"
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
"\n"
"Surround echo by Carl van Schaik 1999"
msgstr ""
-"Atbalss spraudnis\n"
+"Echo spraudnis\n"
"Autors Johan Levin 1999.\n"
"\n"
"IeskaujoÅ¡Äs atbalss autors Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
-msgstr "Par atbalss spraudni"
+msgstr "Par Echo spraudni"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
-msgstr "Konfigurēt atbalss"
+msgstr "Konfigurēt Echo"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "Aizture: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr "Atbilde: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "Skaļums: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Atskaņošana->Atskaņot"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Atskaņošana->Stop"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Atskaņošana->Pauze"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "AtskaņoÅ¡ana->IepriekÅ¡Ä“jÄ"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "AtskaņoÅ¡ana->NÄkamÄ"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Atskaņošana->Izņemt"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "RepertuÄrs->AtkÄrtot"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "RepertuÄrs->Sajaukt"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Skaļums->Uz_augšu_5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Skaļums->Uz_leju_5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Skaļums->Uz_augšu_10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Skaļums->Uz_leju_10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Skaļums->ApklusinÄt"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Logs->Galvenais"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Logs->RepertuÄrs"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Logs->Balansieris"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Logs->PÄrietUzFailu"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: neizdevÄs atvÄ“rt ierÄ«ces failu %s , ierÄ«ce tika "
-"izlaista; pÄrbaudiet, vai fails eksistÄ“ un vai jums ir lasÄ«Å¡anas atļauja Å¡im "
-"failam\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: neizdevÄs izveidot io_channel ierÄ«ces failam %s , "
-"ierīce tika izlaista\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: neizdevÄs atvÄ“rt /proc/bus/input/devices , automÄtiskÄ "
-"notikumu ierÄ«Äu atraÅ¡ana nedarbosies.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: neizdevÄs atvÄ“rt io_channel /proc/bus/input/ ierÄ«cÄ“m , "
-"automÄtiskÄ notikumu ierÄ«Äu atraÅ¡ana nedarbosies.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: kļūda lasot /proc/bus/input/ ierÄ«ces , automÄtiskÄ "
-"notikumu ierÄ«Äu atraÅ¡ana nedarbosies.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: ierÄ«ce %s nav atrasta iekÅ¡ /dev/input , tÄ tiek\n"
-"izlaista.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: neizdevÄs ielÄdÄ“t konfigurÄcijas failu %s , tiks "
-"izmantoti noklusētie iestatījumi.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: nepilnÄ«ga informÄcija konfigurÄcijas failÄ ierÄ«cei \"%s"
-"\", tÄ tiks izlaista.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t is_active vÄ“rtÄ«bu "
-"ierÄ«cei \"%s\", tÄ tiks izlaista.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: neizdevÄs piekļūt vietÄ“jai mapei %s , iestatÄ«jumi "
-"netiks saglabÄti.\n"
-
-#: src/evdev-plug/ed_internals.c:890
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t filename vÄ“rtÄ«bu ierÄ«cei "
-"\"%s\", tÄ tiks izlaista.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t phys vÄ“rtÄ«bu ierÄ«cei "
-"\"%s \", tÄ tiks izlaista.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t is_custom vÄ“rtÄ«bu "
-"ierÄ«cei \"%s\", tÄ tiks izlaista.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurÄcija, negaidÄ«ta vÄ“rtÄ«ba ierÄ«cei \"%s \", tÄ "
-"tiks izlaista.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Atrasts"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "PielÄgots"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Nav atrasts"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "InformÄcija"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Nevar atvērt piesaistu logu ierīcei, kas nav atrasta.\n"
-"PÄrliecinieties, ka ir pareizi pievienota."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Kļūda"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"NeizdevÄs atvÄ“rt izvÄ“lÄ“to ierÄ«ci.\n"
-"LÅ«dzu, pÄrbaudiet lasÄ«Å¡anas atļaujas ierÄ«ces failam."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Pievienot pielÄgotu ierÄ«ci"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug mÄ“Ä£ina automÄtiski atrast un atjaunot informÄciju par notikumu\n"
-"ierÄ«cÄ“m, kas pieejamas jÅ«su sistÄ“mÄ.\n"
-"TomÄ“r, ja automÄtiskÄ atraÅ¡ana jÅ«su sistÄ“mÄ nedarbojas, vai arÄ« notikumu\n"
-"ierÄ«ces ir nestandarta vietÄ (paÅ¡reiz tÄs tiek meklÄ“tas tikai iekÅ¡ /dev/"
-"input/ ),\n"
-"jÅ«s varat pievienot pielÄgotu ierÄ«ci, norÄdot tÄs nosaukumu un ierÄ«ces failu."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Ierīces nosaukums:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Ierīces fails:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(pielÄgots)"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"LÅ«dzu, norÄdiet gan nosaukumu, gan faila nosaukumu.\n"
-"Faila nosaukumu jÄnorÄda ar pilno ceļu."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "Vai vÄ“laties dzÄ“st paÅ¡reizÄ“jo konfigurÄciju izvÄ“lÄ“tajai ierÄ«cei?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Vai vÄ“laties dzÄ“st izvÄ“lÄ“to pielÄgoto ierÄ«ci?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - KonfigurÄcija"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktīvs"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Statuss"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Ierīces nosaukums"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Ierīces fails"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Ierīces adrese"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "Pie_saistes"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Nospiediet jūsu ierīces taustiņu, lai to piesaistītu;\n"
-"ja pÄ“c piecu sekunžu laikÄ netiks nospiests neviens\n"
-"taustiņš, šis logs aizvērsies, neizmainot piesaistes."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Šis ievades notikums jau ir piesaistīts.\n"
-"\n"
-"Nav iespÄ“jams piesaistÄ«t vairÄkas darbÄ«bas vienam ievades notikumam (tomÄ“r "
-"ir iespÄ“jams piesaistÄ«t vienu darbÄ«bu vairÄkiem notikumiem)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Piesaistu konfigurÄcija"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Nosaukums: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Faila nosaukums: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Fiz. adrese: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug - par"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"atskaņotÄja tÄlvadÄ«ba ar notikumu ierÄ«cÄ“m\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"autors Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
-#, fuzzy, c-format
-msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
"DaudzformÄtu audio dekodÄ“Å¡anas Audacious spraudnis, kas balstÄ«ts uz\n"
"FFmpeg multivides karkasu (http://www.ffmpeg.org/)\n"
"Autortiesības (c) 2000-2009 Fabrice Bellard, u.c.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
-"AtbalstÄ«tie formÄti: %s\n"
-"\n"
"Audacious spraudņa autori:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
msgid "About FFaudio Plugin"
msgstr "Par FFaudio spraudni"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
msgid "About FileWriter-Plugin"
msgstr "Par FileWriter spraudni"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
msgid ""
"FileWriter-Plugin\n"
"\n"
@@ -2375,250 +1098,207 @@ msgstr ""
"Ja tÄ nav, rakstiet uz Free Software Foundation, Inc., 51 Franklin Street,\n"
"Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
msgid "File Writer Configuration"
msgstr "Failu rakstÄ«tÄja konfigurÄcija"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
msgid "Output file format:"
msgstr "Izvades faila formÄts:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "Konfigurēt"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "SaglabÄt oriÄ£inÄlajÄ mapÄ“"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "SaglabÄt pielÄgotÄ mapÄ“"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "Izvades faila mape:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Izvēlieties mapi"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr "Iegūt faila nosaukumu no:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr "oriÄ£inÄlajiem faila tagiem"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr "oriÄ£inÄlÄ faila nosaukuma"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "Neatmest faila paplaÅ¡inÄjumu"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Ja ieslÄ“gts, paplaÅ¡inÄjums no oriÄ£inÄlÄ faila nosaukuma netiks atmests pirms "
-"jaunÄ faila paplaÅ¡inÄjuma pievienoÅ¡anas beigÄs."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr "Pievienot celiņa numuru pirms faila nosaukuma"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+msgid "Auto"
+msgstr "AutomÄtiski"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:724
msgid "MP3 Configuration"
msgstr "MP3 konfigurÄcija"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr "Algoritma kvalitÄte:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"labÄkais/lÄ“nÄkais:0;\n"
-"sliktÄkais/ÄtrÄkais:9;\n"
-"rekomendētais:2;\n"
-"noklusētais:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
msgid "Output Samplerate:"
msgstr "Izvades iztveršanas temps:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "AutomÄtiski"
-
#: src/filewriter/mp3.c:800
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr "BitÄtrums / Kompresijas attiecÄ«ba:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "BitÄtrums (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr "Kompresijas attiecība:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
msgid "Audio Mode:"
msgstr "Audio režīms:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Joint-Stereo"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr "DažÄdi:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr "Uzspiest stingru ISO savietojamību"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
msgid "Error protection"
msgstr "Kļūdu aizsardzība"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Pievieno 16 bitu kontrolsummu katram kadram"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr "KvalitÄte"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr "Ieslēgt VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr "Tips:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "MainÄ«gs bitÄtrums"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "VidÄ“jais bitÄtrums"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
msgid "VBR Options:"
msgstr "VBR opcijas:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "MinimÄlais bitÄtrums (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "MaksimÄlais bitÄtrums (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr "Stingri uzspiest minimÄlo bitÄtrumu"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"IzmantoÅ¡anai ar atskaņotÄjiem, kas neatbalsta zema bitÄtruma mp3 (Apex AD600-"
-"A DVD/mp3 atskaņotÄjs)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
msgid "ABR Options:"
msgstr "ABR opcijas:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr "VidÄ“jais bitÄtrums (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr "VBR kvalitÄtes lÄ«menis:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"augstÄkais:0;\n"
-"zemÄkais:9;\n"
-"noklusētais:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr "Nerakstīt Xing VBR galveni"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr "Kadra parametri:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr "AtzÄ«mÄ“t kÄ autortiesÄ«bas"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr "AtzÄ«mÄ“t kÄ oriÄ£inÄlu"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr "ID3 parametri:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr "Uzspiest 2. versijas tagu pievienošanu"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr "Pievienot tikai 1. versijas tagu"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr "Pievienot tikai 2. versijas tagu"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr "Tagi"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Vorbis kodÄ“tÄja konfigurÄcija"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "KvalitÄtes lÄ«menis (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC audio spraudnis"
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "Par FLAC audio spraudni"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2634,15 +1314,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "Par FLAC audio spraudni"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Par Gnome īsceļu spraudni"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2656,493 +1332,441 @@ msgstr ""
"Autortiesības (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr "Atvērt failus"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
msgid "Add Files"
msgstr "Pievienot failus"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
msgid "Audacious2"
msgstr "Audacious2"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr "gnt saskarne"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "Nevar pÄriet uz noteiktu laiku, ja nekas netiek atskaņots.\n"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Ieraksta numurs"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "PÄriet uz laiku"
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "Nosaukums"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "minūtes:sekundes"
+#: src/gtkui/columns.c:37
+msgid "Artist"
+msgstr "IzpildÄ«tÄjs"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Celiņa garums:"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Gads"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Kļūda rakstot repertuÄru \"%s\": %s"
+#: src/gtkui/columns.c:37
+msgid "Album"
+msgstr "Albums"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s jau pastÄv. TurpinÄt?"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Celiņš"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-#, fuzzy
-msgid "Export Playlist"
-msgstr "IelÄdÄ“t repertuÄru"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Novietojums rindÄ"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-#, fuzzy
-msgid "Import Playlist"
-msgstr "IelÄdÄ“t repertuÄru"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Ilgums"
-#: src/gtkui/ui_gtk.c:72
-#, fuzzy
-msgid "GTK Interface"
-msgstr "gnt saskarne"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Faila ceļš"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Faila nosaukums"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "PielÄgots nosaukums"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "ApturÄ“t pÄ“c paÅ¡reizÄ“jÄs dziesmas"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "BitÄtrums"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "AtkÄrtot"
+#: src/gtkui/columns.c:286
+msgid "Choose Columns"
+msgstr "Izvēlēties kolonnas"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Jaukt"
+#: src/gtkui/columns.c:300
+msgid "Available:"
+msgstr "Pieejams:"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "NevirzÄ«ties uz priekÅ¡u repertuÄrÄ"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
+msgstr "Izvēlēts:"
-#: src/gtkui/ui_manager.c:47
-#, fuzzy
-msgid "Show playlists"
-msgstr "RÄdÄ«t repertuÄra redaktoru"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Pietauvot pa kreisi"
-#: src/gtkui/ui_manager.c:48
-#, fuzzy
-msgid "Show/hide playlists"
-msgstr "SaglabÄt repertuÄru"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Pietauvot pa labi"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Pietauvot augÅ¡Ä"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Pietauvot apakÅ¡Ä"
-#: src/gtkui/ui_manager.c:53
-#, fuzzy
-msgid "Show main menu"
-msgstr "RÄdÄ«t galveno atskaņotÄja logu"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Attauvot"
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr ""
+#: src/gtkui/layout.c:123
+msgid "Disable"
+msgstr "Atslēgt"
-#: src/gtkui/ui_manager.c:56
-#, fuzzy
-msgid "Show statusbar"
-msgstr "Statuss"
+#: src/gtkui/menus.c:132
+msgid "_Open Files ..."
+msgstr "Atvērt _failus ..."
-#: src/gtkui/ui_manager.c:57
-#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "SaglabÄt repertuÄru"
+#: src/gtkui/menus.c:133
+msgid "Open _URL ..."
+msgstr "Atvērt _URL ..."
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pauze"
+#: src/gtkui/menus.c:134
+msgid "_Add File ..."
+msgstr "_Pievienot failus ..."
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Stop"
+#: src/gtkui/menus.c:135
+msgid "Add U_RL ..."
+msgstr "Pievienot U_RL ..."
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Iepriekšējais"
+#: src/gtkui/menus.c:137
+msgid "A_bout ..."
+msgstr "_Par ..."
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "NÄkamais"
+#: src/gtkui/menus.c:138
+msgid "_Preferences ..."
+msgstr "_Iestatījumi ..."
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "RepertuÄrs"
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
+msgid "_Quit"
+msgstr "I_ziet"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Jauns repertuÄrs"
+#: src/gtkui/menus.c:142
+msgid "_Play"
+msgstr "A_tskaņot"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "DzÄ“st repertuÄru"
+#: src/gtkui/menus.c:143
+msgid "Paus_e"
+msgstr "Pauz_e"
-#: src/gtkui/ui_manager.c:92
-#, fuzzy
-msgid "Import Playlist ..."
-msgstr "IelÄdÄ“t repertuÄru"
+#: src/gtkui/menus.c:144
+msgid "_Stop"
+msgstr "_Stop"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "IelÄdÄ“ repertuÄra failu izvÄ“lÄ“tajÄ repertuÄrÄ."
+#: src/gtkui/menus.c:145
+msgid "Pre_vious"
+msgstr "_Iepriekšējais"
-#: src/gtkui/ui_manager.c:95
-#, fuzzy
-msgid "Export Playlist ..."
-msgstr "IelÄdÄ“t repertuÄru"
+#: src/gtkui/menus.c:146
+msgid "_Next"
+msgstr "_NÄkamais"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "SaglabÄ izvÄ“lÄ“to repertuÄru."
+#: src/gtkui/menus.c:148
+msgid "_Repeat"
+msgstr "_AtkÄrtot"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "SaglabÄt visus repertuÄrus"
+#: src/gtkui/menus.c:149
+msgid "S_huffle"
+msgstr "_Jaukt"
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-"SaglabÄ visus atvÄ“rtos repertuÄrus. IevÄ“ro, ka tas tiek izdarÄ«ts "
-"automÄtiski, izejot no Audacious."
+#: src/gtkui/menus.c:150
+msgid "N_o Playlist Advance"
+msgstr "Ne_virzÄ«ties uz priekÅ¡u repertuÄrÄ"
-#: src/gtkui/ui_manager.c:103
-#, fuzzy
-msgid "Refresh"
-msgstr "A_tsvaidzinÄt"
-
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Atsvaidzina ar repertuÄra ierakstu saistÄ«tos metadatus."
-
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "RepertuÄru pÄrvaldnieks"
+#: src/gtkui/menus.c:151
+msgid "Stop _After This Song"
+msgstr "Apt_urÄ“t pÄ“c paÅ¡reizÄ“jÄs dziesmas"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Atver repertuÄru pÄrvaldnieku."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
+msgstr "Dziesmas _info ..."
-#: src/gtkui/ui_manager.c:111
-#, fuzzy
-msgid "Add URL ..."
-msgstr "Pievienot failus..."
+#: src/gtkui/menus.c:154
+msgid "Jump to _Time ..."
+msgstr "PÄriet uz _laiku ..."
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Pievieno repertuÄram attÄlinÄtu celiņu."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
+msgstr "PÄriet uz _dziesmu ..."
-#: src/gtkui/ui_manager.c:115
-#, fuzzy
-msgid "Add Files ..."
-msgstr "Pievienot failus..."
-
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Pievieno failus repertuÄram."
-
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Izņemt visus"
-
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Izņem no repertuÄra visus ierakstus."
-
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Izņemt neiezīmētos"
+#: src/gtkui/menus.c:158
+msgid "By Track _Number"
+msgstr "Pēc celiņa _numura"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Izņem no repertuÄra neiezÄ«mÄ“tos ierakstus."
+#: src/gtkui/menus.c:159
+msgid "By _Title"
+msgstr "PÄ“c n_osaukuma"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Izņemt iezīmētos"
+#: src/gtkui/menus.c:160
+msgid "By _Artist"
+msgstr "PÄ“c _izpildÄ«tÄja"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Izņem no repertuÄra iezÄ«mÄ“tos ierakstus."
+#: src/gtkui/menus.c:161
+msgid "By A_lbum"
+msgstr "PÄ“c a_lbuma"
-#: src/gtkui/ui_manager.c:131
-#, fuzzy
-msgid "Sort"
-msgstr "Ports"
+#: src/gtkui/menus.c:162
+msgid "By Release _Date"
+msgstr "Pēc izlaišanas _datuma"
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "Pēc celiņa numura"
+#: src/gtkui/menus.c:163
+msgid "By _File Path"
+msgstr "Pēc _faila ceļa"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "PÄ“c nosaukuma"
+#: src/gtkui/menus.c:164
+msgid "By _Custom Title"
+msgstr "PÄ“c _pielÄgota nosaukuma"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "PÄ“c izpildÄ«tÄja"
+#: src/gtkui/menus.c:166
+msgid "R_everse Order"
+msgstr "Apgri_eztÄ kÄrtÄ«bÄ"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "PÄ“c albuma"
+#: src/gtkui/menus.c:167
+msgid "_Random Order"
+msgstr "NejauÅ¡Ä _kÄrtÄ«bÄ"
-#: src/gtkui/ui_manager.c:140
-#, fuzzy
-msgid "By File Path"
-msgstr "PÄ“c faila nosaukuma"
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
+msgid "_Refresh"
+msgstr "A_tsvaidzinÄt"
-#: src/gtkui/ui_manager.c:142
-#, fuzzy
-msgid "Reverse Order"
-msgstr "Apgrieztais balanss"
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_KÄrtot"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Izvade"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Jauns"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efekti"
+#: src/gtkui/menus.c:175
+msgid "_Close"
+msgstr "Ai_zvērt"
-#: src/gtkui/ui_manager.c:151
-#, fuzzy
-msgid "Equalizer"
-msgstr "RÄdÄ«t balansieri"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importēt ..."
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Skatīt"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Eksportēt ..."
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-#, fuzzy
-msgid "Interface"
-msgstr "gnt saskarne"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_RepertuÄru pÄrvaldnieks ..."
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Fails"
+#: src/gtkui/menus.c:183
+msgid "Volume _Up"
+msgstr "_PalielinÄt skaļumu"
-#: src/gtkui/ui_manager.c:167
-#, fuzzy
-msgid "Components"
-msgstr "KomentÄrs:"
+#: src/gtkui/menus.c:184
+msgid "Volume _Down"
+msgstr "_SamazinÄt skaļumu"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Skatīt celiņa detaļas"
+#: src/gtkui/menus.c:186
+msgid "_Equalizer"
+msgstr "_Balansieris"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Skatīt celiņa detaļas"
+#: src/gtkui/menus.c:188
+msgid "E_ffects"
+msgstr "E_fekti"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Par Audacious"
+#: src/gtkui/menus.c:191
+msgid "_Interface"
+msgstr "S_askarne"
-#: src/gtkui/ui_manager.c:178
-#, fuzzy
-msgid "Open Files ..."
-msgstr "Atvērt failus"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
+msgstr "RÄdÄ«t _izvÄ“lnes joslu"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "IelÄdÄ“t un atskaņot failu"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
+msgstr "RÄdÄ«t i_nfoapgabalu"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr ""
+#: src/gtkui/menus.c:195
+msgid "Show _Status Bar"
+msgstr "RÄdÄ«t _stÄvokļjoslu"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Atskaņot multitvides failu no izvÄ“lÄ“tÄs vietas"
+#: src/gtkui/menus.c:197
+msgid "Show Column _Headers"
+msgstr "RÄdÄ«t kolonnu _galvenes"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Spraudņu servisi"
+#: src/gtkui/menus.c:198
+msgid "Choose _Columns ..."
+msgstr "Izvēlēties _kolonnas ..."
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Iestatījumi"
+#: src/gtkui/menus.c:199
+msgid "Scrol_l on Song Change"
+msgstr "RitinÄt, _dziesmÄm mainoties"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Atver iestatījumu logu"
+#: src/gtkui/menus.c:202
+msgid "_File"
+msgstr "_Fails"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "I_ziet"
+#: src/gtkui/menus.c:203
+msgid "_Playback"
+msgstr "_Atskaņošana"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Aizver Audacious"
+#: src/gtkui/menus.c:204
+msgid "P_laylist"
+msgstr "_RepertuÄrs"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "UzstÄdÄ«t A-B"
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+msgid "_Services"
+msgstr "_Servisi"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Notīrīt A-B"
+#: src/gtkui/menus.c:206
+msgid "_Output"
+msgstr "I_zvade"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "PÄriet uz repertuÄra sÄkumu"
+#: src/gtkui/menus.c:207
+msgid "_View"
+msgstr "S_kats"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "PÄriet uz failu"
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
+msgstr "Ie_rindot/Izņ. no rindas"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "PÄrslÄ“gt ierindoÅ¡anau"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
+msgstr "_Izgriezt"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "IeslÄ“dz/izslÄ“dz repertuÄra ieraksta ierindoÅ¡anu."
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr "_Kopēt"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr ""
+#: src/gtkui/menus.c:216
+msgid "_Paste"
+msgstr "I_elīmēt"
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "PielÄgots"
+#: src/gtkui/menus.c:217
+msgid "Select _All"
+msgstr "Iezīmēt _visu"
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-#, fuzzy
-msgid "Paste"
-msgstr "Ä€trÄkais"
+#: src/gtkui/menus.c:222
+msgid "_Rename"
+msgstr "PÄ_rdÄ“vÄ“t"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Iezīmēt visus"
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
+msgstr "GTK saskarne"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "IezÄ«mÄ“ visus repertuÄra ierakstus."
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Notīrīt iezīmējumu"
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Noņem iezīmējumu no visiem ierakstiem."
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
+msgstr "Kļūda"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
msgid "stereo"
msgstr "stereo"
-#: src/gtkui/ui_statusbar.c:97
-#, fuzzy, c-format
-msgid "%d channels"
-msgstr "KanÄli"
+#: src/gtkui/ui_statusbar.c:106
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d kanÄls"
+msgstr[1] "%d kanÄli"
+msgstr[2] "%d kanÄlu"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr ""
+msgid "%d kbps"
+msgstr "%d kbps"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Iepriekšējais celiņš"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Atskaņot"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Pauze/AtsÄkt"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Stop"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "NÄkamais celiņš"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Uz priekšu par 5 sekundēm"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Atpakaļ par 5 sekundēm"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "ApklusinÄt"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "PalielinÄt skaļumu"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "SamazinÄt skaļumu"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+msgid "Jump to File"
+msgstr "PÄriet uz failu"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "PÄrslÄ“gt atskaņotÄja logus"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "ParÄdÄ«t uz-ekrÄna-attÄ“lu"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "PÄrslÄ“gt atkÄrtoÅ¡anu"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "PÄrslÄ“gt jaukÅ¡anu"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(nekas)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3153,15 +1777,15 @@ msgstr ""
"\n"
"Vai vÄ“laties turpinÄt?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Piesaista peles pogas"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "GlobÄlo Ä«sinÄjumtaustiņu spraudņa konfigurÄcija"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3169,23 +1793,23 @@ msgstr ""
"Nospiediet taustiņu kombinÄciju teksta laukÄ.\n"
"Jūs varat piesaistīt arī peles pogas."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "ĪsinÄjumtaustiņi:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Darbība:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Taustiņa piesaiste:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "Par globÄlo Ä«sinÄjumtaustiņu spraudni"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3238,7 +1862,7 @@ msgstr "Savienojuma režīms:"
msgid "Enable debug printing"
msgstr "Ieslēgt atkļūdošanas izvadi"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3256,148 +1880,39 @@ msgstr ""
"Audacious porta autors\n"
"Giacomo Lozito no develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "Par JACK izvades spraudni 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Å im LADSPA spraudnim nav lietotÄja vadÄ«klu"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Nosaukums"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Instalētie spraudņi"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Spraudņi, kas pašreiz darbojas"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Pievienot"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Izņemt"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA spraudņu katalogs"
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "Par LIRC Audacious spraudni"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRC spraudnis "
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"vienkÄrÅ¡s spraudnis, kas ļauj jums kontrolÄ“t\n"
-"Audacious, izmantojot LIRC attÄlinÄtÄs vadÄ«bas dÄ“monu\n"
-"\n"
-"Piemērojis izmantošanai Audacious - Tony Vroon <chainsaw@gentoo.org>\n"
-"no XMMS LIRC spraudņa, kura autori ir:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"Varat iegÅ«t informÄciju par LIRC:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "LIRC spraudņa iestatījumi"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Pieslēgties vēlreiz LIRC serverim"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Noildze pirms atkÄrtotas pieslÄ“gÅ¡anÄs (sekundes): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Pieslēgties vēlreiz"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Pieslēgties"
+"MeklÄ“ dziesmas vÄrdus..."
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: neizdevÄs inicializÄ“t LIRC atbalstu\n"
-
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: neizdevÄs nolasÄ«t LIRC konf. failu\n"
-"%s: lÅ«dzu, lasiet LIRC dokumentÄcijÄ\n"
-"%s: kÄ izveidot pareizu konf. failu\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: mēģina pieslēgties vēlreiz...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: nezinÄma komanda \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: atvienots no LIRC\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: tiks mÄ“Ä£inÄts pieslÄ“gties vÄ“lreiz katras %d sekundes...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"Pieslēdzas lyrics.wikia.com..."
#: src/lyricwiki/lyricwiki.c:337
-#, fuzzy
msgid ""
"\n"
"No lyrics were found."
-msgstr "Nav atrasta neviena ierīce!"
+msgstr ""
+"\n"
+"Dziesmas vÄrdi netika atrasti."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "Par Metronom"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3411,270 +1926,45 @@ msgstr ""
"piem., tact://77 , lai atskaņotu 77 sitienus minūtē\n"
"vai tact://60*3/4 , lai atskaņotu 60 sit./min. 3/4 taktīs"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Takts ģenerators: %d sit./min."
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Takts ģenerators: %d sit./min. %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug konfigurÄcija"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Mono (lejupmiksēšana)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "TuvÄkais (ÄtrÄkais)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "LineÄrais (Ätri)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Spline (laba kvalitÄte)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-tap Fir (ļoti augsta kvalitÄte)"
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Iztveršanas temps"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Ieslēgt"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Dziļums"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Aizture"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Atbalss"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Daudzums"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Apgabals"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Basu uzsvēršana"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr "Ieskaušana"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"PiezÄ«me: pÄrÄk augsta\n"
-"priekÅ¡pastiprinÄjuma iestatÄ«Å¡ana\n"
-"var izraisīt apgriešanu\n"
-"(kaitinošus klikšķus un paukšķus)!"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "PriekÅ¡pastiprinÄjums"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Lietot faila nosaukumu kÄ dziesmas nosaukumu"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Ä€trais repertuÄra info"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Trokšņu samazinÄÅ¡ana"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Atskaņot Amiga MOD"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Neciklot"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Ciklot"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "reize(s)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Ciklot bezgalīgi"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "CikloÅ¡anÄs"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD info"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Faila nosaukums:\n"
-"Nosaukums:\n"
-"Tips:\n"
-"Garums:\n"
-"Ä€trums:\n"
-"Temps:\n"
-"Paraugi:\n"
-"Instrumenti:\n"
-"Struktūras:\n"
-"KanÄli:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Paraugi"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Instrumenti"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Ziņojums"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Audacious Modplug ievades spraudnis ver"
-
-#: src/modplug/gui/main.cxx:52
-#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Modplug skaņas dzinējs, autors Olivier Lapicque.\n"
-"Modplug XMMS saskarnes autors Kenton Varda.\n"
-"(c)2000 Olivier Lapicque un Kenton Varda.\n"
-"AtjauninÄjumi un uzturÄ“Å¡ana - Konstanty Bialkowski.\n"
-"BMP porta autors Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Par Modplug"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "NeizdevÄs atrast pikseļkartes failu: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "AugÅ¡upielÄdÄ“t izvÄ“lÄ“to celiņu(s)"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:298
msgid "Upload in progress..."
msgstr "Notiek augÅ¡upielÄde..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "MTP ierÄ«ces apstrÄdÄtÄjs"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
+msgstr "AugÅ¡upielÄdÄ“t uz MTP ierÄ«ci"
+
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
+msgstr "Atvienot MTP ierīci"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "Atvienot ierīci"
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Stopped"
+msgstr "Apturēts"
-#: src/null/null.c:63
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Audacious is not playing."
+msgstr "Audacious pašreiz neatskaņo."
+
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Nulles izvades spraudnis "
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3683,52 +1973,47 @@ msgstr ""
"bÄzÄ“ts uz XMMS spraudni, kura autors ir HÃ¥vard KvÃ¥l\n"
"<havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Par nulles izvadi"
-#: src/null/null.c:93
+#: src/null/null.c:94
msgid "Null output preferences"
msgstr "Nulles izvades iestatījumi"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr "IzpildÄ«t reÄlÄ laikÄ"
#: src/oss4/configure.c:89
-#, fuzzy
msgid "1. Default device"
-msgstr "NoklusÄ“tÄ PCM ierÄ«ce (%s)"
+msgstr "1. noklusÄ“tÄ ierÄ«ce"
#: src/oss4/configure.c:151
-#, fuzzy
msgid "OSS4 Output Plugin Preferences"
-msgstr "ALSA izvades spraudņa iestatījumi"
+msgstr "OSS4 izvades spraudņa iestatījumi"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "Audio ierīce:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "Lietot citu ierīci:"
#: src/oss4/configure.c:202
-#, fuzzy
msgid "Save volume between sessions"
-msgstr "SaglabÄt VMIX skaļumu starp sesijÄm"
+msgstr "SaglabÄt skaļumu starp sesijÄm"
#: src/oss4/configure.c:206
msgid "Enable format conversions made by the OSS software."
-msgstr ""
+msgstr "IeslÄ“gt OSS programmatÅ«ras veiktÄs formÄta pÄrveides."
-#: src/oss4/plugin.c:54
-#, fuzzy
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
-msgstr "Par ESounD spraudnis"
+msgstr "Par OSS4 spraudni"
-#: src/oss4/plugin.c:55
-#, fuzzy
+#: src/oss4/plugin.c:52
msgid ""
"OSS4 Output Plugin for Audacious\n"
"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
@@ -3749,7 +2034,12 @@ msgid ""
"You should have received a copy of the GNU General Public License along with "
"this program. If not, see <http://www.gnu.org/licenses/>.\n"
msgstr ""
-"Audacious PulseAudio izvades spraudnis\n"
+"Audacious OSS4 izvades spraudnis\n"
+"\n"
+"Autortiesības 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"Es vÄ“lÄ“tos pateikties cilvÄ“kiem #audacious kanÄlÄ, it Ä«paÅ¡i Tony Vroon un "
+"John Lindgren, kÄ arÄ« iepriekÅ¡Ä“jÄ OSS spraudņa autoriem.\n"
"\n"
" Å Ä« ir brÄ«vÄ programmatÅ«ra. JÅ«s varat to izplatÄ«t un/vai modificÄ“t saskaņÄ\n"
"ar GNU GPL licenses nosacījumiem, kurus publicējis Free Software\n"
@@ -3761,48 +2051,51 @@ msgstr ""
"SÄ«kÄkai informÄcijai skatiet GNU General Public License.\n"
"\n"
"GNU GPL licenses kopijai vajadzÄ“tu bÅ«t saņemtai kopÄ ar Å¡o programmu.\n"
-"Ja tÄ nav, rakstiet uz Free Software Foundation, Inc., 51 Franklin Street,\n"
-"Fifth Floor, Boston, MA 02110-1301, USA.\n"
+"Ja tÄ nav, skatiet <http://www.gnu.org/licenses/>.\n"
#: src/oss4/utils.c:204
-#, fuzzy
msgid "OSS4 error"
-msgstr " Kļūda"
+msgstr "OSS4 kļūda"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "Noklusētais (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "Noklusētais"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "OSS dziņa konfigurÄcija"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "Ierīces"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "BuferizÄcija:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "Pirms-buferēšana (%):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "BuferizÄcija"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "Miksera iestatījumi:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr "Skaļuma regulators kontrolē Master nevis PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "Mikseris"
@@ -3844,12 +2137,11 @@ msgstr ""
"Ja tÄ nav, rakstiet uz Free Software Foundation, Inc., 51 Franklin Street,\n"
"Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Par Audacious PulseAudio izvades spraudni"
-#: src/pulse_audio/pulse_audio.c:692
-#, fuzzy
+#: src/pulse_audio/pulse_audio.c:688
msgid ""
"Audacious PulseAudio Output Plugin\n"
"\n"
@@ -3881,54 +2173,53 @@ msgstr ""
"\n"
"GNU GPL licenses kopijai vajadzÄ“tu bÅ«t saņemtai kopÄ ar Å¡o programmu.\n"
"Ja tÄ nav, rakstiet uz Free Software Foundation, Inc., 51 Franklin Street,\n"
-"Fifth Floor, Boston, MA 02110-1301, USA.\n"
+"Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/resample/plugin.c:78
-#, fuzzy
+#: src/resample/plugin.c:91
msgid "About Sample Rate Converter Plugin"
-msgstr "Par statusa ikonas spraudni"
+msgstr "Par Sample Rate Converter spraudni"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
-msgstr ""
+msgstr "Sample Rate Converter iestatījumi"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
-msgstr ""
+msgstr "FrekvenÄu kartÄ“jumi:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
-msgstr ""
+msgstr "Visas citas:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
-msgstr ""
+msgstr "Metode:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
msgid "Change password"
msgstr "Mainīt paroli"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>Servisi</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "LietotÄjvÄrds:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "Parole:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
msgid "Scrobbler URL:"
msgstr "Scrobbler URL:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
msgid "Scrobbler"
msgstr "Scrobbler"
@@ -3948,15 +2239,31 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Par Scrobbler spraudni"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Par SDL izvades spraudni"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "SDL kļūda"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "Par %s"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "Aizvērt"
+
+#: src/sid/xs_config.c:326
msgid " Error"
msgstr " Kļūda"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "Labi"
+
#: src/sid/xs_fileinfo.c:151
msgid "General info"
msgstr "VispÄrÄ“jÄ informÄcija"
@@ -3966,6 +2273,11 @@ msgstr "VispÄrÄ“jÄ informÄcija"
msgid "Tune #%i: "
msgstr "Melodija #%i: "
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "NeizdevÄs atrast pikseļkartes failu: %s"
+
#: src/sid/xs_interface.c:234
msgid "Audacious-SID configuration"
msgstr "Audacious-SID konfigurÄcija"
@@ -4279,15 +2591,15 @@ msgstr "Export"
msgid "Use"
msgstr "Lietot"
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
msgid "Save"
msgstr "SaglabÄt"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
msgid "Import"
msgstr "Importēt"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
msgid "Delete"
msgstr "Dzēst"
@@ -4320,6 +2632,11 @@ msgstr ""
msgid "Playtime:"
msgstr "Atskaņošanas ilgums:"
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+msgid "seconds"
+msgstr "sekundes"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr "MinimÄlais atskaņoÅ¡anas ilgums:"
@@ -4427,10 +2744,6 @@ msgstr ""
msgid "Song title format:"
msgstr "Dziesmas nosaukuma formÄts:"
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Nosaukums"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr "Pievienot apakÅ¡melodijas repertuÄram"
@@ -4580,11 +2893,11 @@ msgstr "JÄ"
msgid "No"
msgstr "NÄ“"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "Par apdarinÄto GLS"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4592,687 +2905,808 @@ msgstr ""
"Autortiesības (c) 2008, autors Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "ApdarinÄtÄ saskarne"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "_Player:"
msgstr "A_tskaņotÄjs:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr "IzvÄ“lieties galvenÄ atskaņotÄja loga fontu:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "_Playlist:"
msgstr "Re_pertuÄrs:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
msgid "Select playlist font:"
msgstr "IzvÄ“lieties repertuÄra fontu:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
msgid "<b>_Fonts</b>"
msgstr "<b>_Fonti</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Lietot bitmap fontus, ja pieejami"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-"Lietot bitmap fontus, ja tie ir pieejami. Bitmap fonti neatbalsta unikoda "
-"virknes."
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Lietot bitmap fontus (atbalsta tikai ASCII)"
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_DažÄdi</b>"
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
+msgstr "RitinÄt dziesmas nosaukumu abos virzienos"
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "RÄdÄ«t atdalÄ«tÄjus repertuÄrÄ"
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "RÄdÄ«t logu pÄrvaldnieka apdares"
-
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr ""
-"IeslÄ“dziet Å¡o, lai rÄdÄ«tu loga pÄrvaldnieka apdares atskaņotÄja logiem."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Lietot divvirzienu teksta ritinÄtÄju"
+#: src/skins/skins_cfg.c:346
+msgid "<b>_Skin</b>"
+msgstr "<b>_Apdare</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-"Ja ieslÄ“gts, faila informÄcijas teksts galvenajÄ logÄ ritinÄsies uz priekÅ¡u "
-"un atpakaļ. Ja izslÄ“gts, teksta ritinÄÅ¡ana notiks tikai vienÄ virzienÄ."
+#: src/skins/skins_cfg.c:393
+msgid "Interface Preferences"
+msgstr "Saskarnes iestatījumi"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Atslēgt iekļauto GTK tēmu"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "PriekÅ¡pastiprinÄjums"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Nejauša apdare atskaņojot"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Atļaut ielÄdÄ“t nepilnÄ«gas apdares"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
-"Ja atzÄ«mÄ“ts, Audacious atļaus nepilnÄ«gu apdaru ielÄdi. Izmantojiet tikai "
-"gadÄ«jumÄ, ja jÅ«su iecienÄ«tÄ apdare nestrÄdÄ."
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "KrÄsu regulÄ“Å¡ana"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Audacious atļauj jums mainÄ«t lietotÄja saskarnes apdaru krÄsu balansu. Lai "
-"to darÄ«tu, lietojiet apakÅ¡Ä esoÅ¡os slÄ«dņus."
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Zils"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Zaļš"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Sarkans"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Apdare</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-#, fuzzy
-msgid "Color adjustment ..."
-msgstr "KrÄsu regulÄ“Å¡ana"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
msgid "Audacious Equalizer"
msgstr "Audacious balansieris"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr "Gatavie regulējumi"
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
-msgstr ""
+msgstr "kbps"
-#: src/skins/ui_main.c:601
-#, fuzzy
+#: src/skins/ui_main.c:452
msgid "kHz"
-msgstr "Hz"
+msgstr "kHz"
-#: src/skins/ui_main.c:608
-#, fuzzy
+#: src/skins/ui_main.c:459
msgid "surround"
-msgstr "Ieskaušana"
-
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - redzamÄ«bas brÄ«dinÄjums"
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "RÄdÄ«t galveno atskaņotÄja logu"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignorēt"
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Audacious startÄ“jÄs, visiem logiem esot slÄ“ptÄ stÄvoklÄ«.\n"
-"Jūs, iespējams, vēlaties logus atkal padarīt redzamus, lai kontrolētu "
-"Audacious. Ja nÄ“, jums nÄksies to kontrolÄ“t attÄlinÄti ar 'audtool' vai "
-"spraudņu (piemēram, sistēmjoslas ikonas spraudņa) palīdzību."
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "VienmÄ“r ignorÄ“t, rÄdÄ«t/slÄ“pt tiek kontrolÄ“ts attÄlinÄti"
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - salauzta GTK dzinÄ“ja izmantoÅ¡anas brÄ«dinÄjums"
-
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Tiek izmantots salauzts GTK dzinējs</b></big>\n"
-"\n"
-"Audacious atklÄja, ka jÅ«s izmantojat salauztu GTK dzinÄ“ju.\n"
-"\n"
-"TÄ“mu dzinÄ“js, ko izmantojat, <i>%s</i>, nav savietojams ar dažÄm moderno "
-"spraudņu iespÄ“jÄm. NesavietojamÄs iespÄ“jas Å¡Ä«s sesijas laikÄ ir atslÄ“gtas.\n"
-"\n"
-"Lai izmantotu šīs iespējas, lūdzu, izmantojiet citu GTK tēmu dzinēju."
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Vairs nerÄdÄ«t Å¡o brÄ«dinÄjumu"
+msgstr "ieskaušana"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "PÄrlekt uz:%d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "PÄriet uz %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Skaļums: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Balanss: %d%% pa kreisi"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Balanss: centrs"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Balanss: %d%% pa labi"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Iestatījumu izvēlne"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Izslēgt 'Vienmēr virspusē'"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "Ieslēgt 'Vienmēr virspusē'"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Faila info lodziņš"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Atslēgt 'GLS mērogošana'"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Ieslēgt 'GLS mērogošana'"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Vizualizēšanas izvēlne"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
-msgstr ""
+msgstr "Vieninstances režīms."
-#: src/skins/ui_main.c:2350
-#, fuzzy
+#: src/skins/ui_main.c:1647
msgid "Playlist mode."
-msgstr "RepertuÄrs"
+msgstr "RepertuÄra režīms."
-#: src/skins/ui_main.c:2374
-#, fuzzy
+#: src/skins/ui_main.c:1669
msgid "Stopping after song."
-msgstr "ApturÄ“t pÄ“c paÅ¡reizÄ“jÄs dziesmas"
+msgstr "Aptur pÄ“c paÅ¡reizÄ“jÄs dziesmas."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
-msgstr ""
+msgstr "Neaptur pÄ“c paÅ¡reizÄ“jÄs dziesmas."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "AutomÄtiski tÄ«t dziesmas nosaukumu"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "ApturÄ“t pÄ“c paÅ¡reizÄ“jÄs dziesmas"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Maksimumi"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "AtkÄrtot"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Jaukt"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "NevirzÄ«ties uz priekÅ¡u repertuÄrÄ"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "RÄdÄ«t atskaņotÄju"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "RÄdÄ«t repertuÄra redaktoru"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "RÄdÄ«t balansieri"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Vienmēr virspusē"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Uzlikt uz visÄm darbvirsmÄm"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "SaritinÄt atskaņotÄju"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "SaritinÄt repertuÄra redaktoru"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "SaritinÄt balansieri"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "MÄ“rogot"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Dubultizmērs"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "VienkÄrÅ¡Ä pÄrvietoÅ¡ana"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analizators"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Loks"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Balss vizualizēšana"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Izslēgts"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "NormÄls"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Uguns"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "VertikÄlas lÄ«nijas"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "LÄ«nijas"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Joslas"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Punktēts loks"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "LÄ«nijveida loks"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Aizpildīts loks"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Ledus"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Gluds"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "LÄ“nÄkais"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "LÄ“ni"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Vidēji"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Ä€tri"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Ä€trÄkais"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Pavadītais laiks"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Atlikušais laiks"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pauze"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Iepriekšējais"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "NÄkamais"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Vizualizēšana"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Vizualizēšanas režīms"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Analizatora režīms"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Loka režīms"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Balss vizualizēšanas režīms"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Loga saritinÄÅ¡anas VU režīms"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Analizatora krišana"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Maksimumu krišana"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "RepertuÄrs"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Jauns repertuÄrs"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "IezÄ«mÄ“t nÄkamo repertuÄru"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "IezÄ«mÄ“t iepriekÅ¡Ä“jo repertuÄru"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "DzÄ“st repertuÄru"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "ImportÄ“t repertuÄru"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "IelÄdÄ“ repertuÄra failu izvÄ“lÄ“tajÄ repertuÄrÄ."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "EksportÄ“t repertuÄru"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "SaglabÄ izvÄ“lÄ“to repertuÄru."
+
+#: src/skins/ui_manager.c:229
+msgid "Save All Playlists"
+msgstr "SaglabÄt visus repertuÄrus"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+"SaglabÄ visus atvÄ“rtos repertuÄrus. IevÄ“ro, ka tas tiek izdarÄ«ts "
+"automÄtiski, izejot no Audacious."
+
+#: src/skins/ui_manager.c:234
msgid "Refresh List"
msgstr "AtsvaidzinÄt repertuÄru"
-#: src/skins/ui_manager.c:226
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Atsvaidzina ar repertuÄra ierakstu saistÄ«tos metadatus."
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr "RepertuÄru pÄrvaldnieks"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr "Atver repertuÄru pÄrvaldnieku."
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr "Skatīt"
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr "Saskarne"
+
+#: src/skins/ui_manager.c:245
+msgid "Interface Preferences ..."
+msgstr "Saskarnes iestatījumi ..."
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr "Pievienot interneta adresi..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr "Pievieno repertuÄram attÄlinÄtu celiņu."
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr "Pievienot failus..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr "Pievieno failus repertuÄram."
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr "Meklēt un iezīmēt"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
"MeklÄ“ un atlasa repertuÄra ierakstus, balstoties uz norÄdÄ«tajiem kritÄ“rijiem."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
msgid "Invert Selection"
msgstr "Apgriezt iezīmēto"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr "Invertē iezīmētos un neiezīmētos ierakstus."
+#: src/skins/ui_manager.c:267
+msgid "Select All"
+msgstr "Iezīmēt visus"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr "IezÄ«mÄ“ visus repertuÄra ierakstus."
+
+#: src/skins/ui_manager.c:271
+msgid "Select None"
+msgstr "Notīrīt iezīmējumu"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr "Noņem iezīmējumu no visiem ierakstiem."
+
+#: src/skins/ui_manager.c:277
+msgid "Remove All"
+msgstr "Izņemt visus"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr "Izņem no repertuÄra visus ierakstus."
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr "Notīrīt ierindošanu"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr "NotÄ«ra ar Å¡o repertuÄru saistÄ«to ierindoÅ¡anu."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr "Izņemt nepieejamos failus"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr "Izņem no repertuÄra nepieejamos failus."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr "Izņemt dublikÄtus"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+msgid "By Title"
+msgstr "PÄ“c nosaukuma"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr "Izņem no repertuÄra dublikÄtus pÄ“c nosaukuma."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
msgid "By Filename"
msgstr "PÄ“c faila nosaukuma"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr "Izņem no repertuÄra dublikÄtus pÄ“c faila nosaukuma."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
msgid "By Path + Filename"
msgstr "Pēc ceļa + faila nosaukuma"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "Izņem no repertuÄra dublikÄtus pÄ“c to pilna ceļa."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr "Izņemt neiezīmētos"
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr "Izņem no repertuÄra neiezÄ«mÄ“tos ierakstus."
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr "Izņemt iezīmētos"
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr "Izņem no repertuÄra iezÄ«mÄ“tos ierakstus."
+
+#: src/skins/ui_manager.c:313
+msgid "Randomize List"
+msgstr "Sajaukt repertuÄru"
+
+#: src/skins/ui_manager.c:314
+msgid "Randomizes the playlist."
+msgstr "Sajauc repertuÄra ierakstu atskaņoÅ¡anas kÄrtÄ«bu."
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr "Apgriezt repertuÄru"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr "Apgriež repertuÄru."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
msgid "Sort List"
msgstr "KÄrtot repertuÄru"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr "KÄrto repertuÄru pÄ“c nosaukuma."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+msgid "By Album"
+msgstr "PÄ“c albuma"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
msgid "Sorts the list by album."
msgstr "KÄrto sarakstu pÄ“c albuma."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+msgid "By Artist"
+msgstr "PÄ“c izpildÄ«tÄja"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr "KÄrto repertuÄru pÄ“c izpildÄ«tÄja."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr "KÄrto repertuÄru pÄ“c faila nosaukuma."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr "KÄrto repertuÄru pÄ“c pilnÄ ceļa."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
msgid "By Date"
msgstr "PÄ“c datuma"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr "KÄrto repertuÄru pÄ“c izmaiņas datuma."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+msgid "By Track Number"
+msgstr "Pēc celiņa numura"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr "KÄrto repertuÄru pÄ“c celiņa numura."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
msgid "Sort Selected"
msgstr "KÄrtot iezÄ«mÄ“tos"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+msgid "File"
+msgstr "Fails"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "Palīdzība"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr "Spraudņu servisi"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+msgid "View Track Details"
+msgstr "Skatīt celiņa detaļas"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr "Skatīt celiņa detaļas"
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+msgid "About Audacious"
+msgstr "Par Audacious"
+
+#: src/skins/ui_manager.c:401
msgid "Play File"
msgstr "Atskaņot failu"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+msgid "Load and play a file"
+msgstr "IelÄdÄ“t un atskaņot failu"
+
+#: src/skins/ui_manager.c:404
msgid "Play Location"
msgstr "Atskaņot vietu"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+msgid "Play media from the selected location"
+msgstr "Atskaņot multitvides failu no izvÄ“lÄ“tÄs vietas"
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr "Spraudņu servisi"
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr "Iestatījumi"
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr "Atver iestatījumu logu"
+
+#: src/skins/ui_manager.c:413
+msgid "Quit Audacious"
+msgstr "Aizver Audacious"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr "UzstÄdÄ«t A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr "Notīrīt A-B"
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr "PÄriet uz repertuÄra sÄkumu"
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+msgid "Jump to Time"
+msgstr "PÄriet uz laiku"
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr "PÄrslÄ“gt ierindoÅ¡anau"
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "IeslÄ“dz/izslÄ“dz repertuÄra ieraksta ierindoÅ¡anu."
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr "Kopēt"
+
+#: src/skins/ui_manager.c:436
+msgid "Cut"
+msgstr "Izgriezt"
+
+#: src/skins/ui_manager.c:438
+msgid "Paste"
+msgstr "Ielīmēt"
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr "IelÄdÄ“t"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
msgid "Preset"
msgstr "SÄkumuzstÄdÄ«jumi"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr "IelÄdÄ“t sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr "Auto-ielÄdes sÄkumuzstÄdÄ«jums"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr "IelÄdÄ“ auto-ielÄdes sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
msgid "Load default preset into equalizer"
msgstr "IelÄdÄ“t noklusÄ“to sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
msgid "Zero"
msgstr "Nulle"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr "UzstÄdÄ«t balansiera sÄkumuzstÄdÄ«jumu lÄ«meņus uz 0"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr "No faila"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
msgid "Load preset from file"
msgstr "IelÄdÄ“t sÄkumuzstÄdÄ«jumu no faila"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr "No WinAMP EQF faila"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr "IelÄdÄ“t sÄkumuzstÄdÄ«jumu no WinAMP EQF faila"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr "WinAMP sÄkumuzstÄdÄ«jumi"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr "ImportÄ“t WinAMP sÄkumuzstÄdÄ«jumus"
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr "SaglabÄt sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr "SaglabÄt auto-ielÄdes sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
msgid "Save default preset"
msgstr "SaglabÄt noklusÄ“to sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
msgid "To file"
msgstr "Uz failu"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr "SaglabÄt sÄkumuzstÄdÄ«jumu failÄ"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr "Uz WinAMP EQF failu"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr "SaglabÄt sÄkumuzstÄdÄ«jumu WinAMP EQF failÄ"
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
msgid "Delete preset"
msgstr "DzÄ“st sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr "DzÄ“st auto-ielÄdes sÄkumuzstÄdÄ«jumu"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr "MeklÄ“t ierakstus aktÄ«vajÄ repertuÄrÄ"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5283,120 +3717,61 @@ msgstr ""
"jÄizmanto regulÄro izteiksmju sintakse, reÄ£istrnejutÄ«ga. Ja neziniet, kÄ "
"regulÄrÄs izteiksmes darbojas, vienkÄrÅ¡i nosaukuma daļu tam, ko meklÄ“jat."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Nosaukums: "
+
+#: src/skins/ui_playlist.c:267
msgid "Album: "
msgstr "Albums: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
msgid "Artist: "
msgstr "IzpildÄ«tÄjs: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
msgid "Filename: "
msgstr "Faila nosaukums: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr "Notīrīt iepriekšējo iezīmējumu pirms meklēšanas"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr "AutomÄtiski pÄrslÄ“gt ierindoÅ¡anu atbilstoÅ¡ajiem ierakstiem"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr "Izveidot jaunu repertuÄru no atbilstoÅ¡ajiem ierakstiem"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "SaglabÄt kÄ statisko repertuÄru"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Izmantot relatīvo ceļu"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "IelÄdÄ“t repertuÄru"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "SaglabÄt repertuÄru"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr "Audacious repertuÄra redaktors"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
-msgstr ""
+msgstr "%s (%d of %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Arhivēta Winamp 2.x apdare"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Atarhivēta Winamp 2.x apdare"
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "NeizdevÄs izveidot mapi (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
msgid "About sndfile plugin"
msgstr "Par sndfile spraudni"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5435,54 +3810,62 @@ msgstr ""
"Ja tÄ nav, rakstiet uz Free Software Foundation, Inc., 51 Franklin Street,\n"
"Fifth Floor, Boston, MA 02110-1301, USA."
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "Par SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
msgid "Volume corr."
msgstr "Skaļuma kor."
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr "Īsa pÄrklÄÅ¡anÄs"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
msgid "Speed"
msgstr "Ä€trums"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr "Augstums"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr "MÄ“rogot"
+
+#: src/sndstretch/sndstretch_xmms.c:363
+msgid "Options"
+msgstr "Opcijas"
+
+#: src/sndstretch/sndstretch_xmms.c:382
msgid "SndStretch - Configuration"
msgstr "SndStretch - konfigurÄcija"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr "Komanda, ko palaist, kad Audacious sÄk atskaņot jaunu dziesmu."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr "Komanda:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr "Komanda, ko palaist dziesmas beigÄs."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr "Komanda, ko palaist, kad Audacious sasniedz repertuÄra beigas."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Komanda, ko palaist, kad nomainÄs dziesmas nosaukums (piem., tÄ«kla plÅ«smas)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5495,22 +3878,28 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Varat izmantot sekojoÅ¡a formÄta virknes, kuras\n"
"pirms komandas izsaukšanas tiks aizvietotas\n"
"(ne visas ir derÄ«gas repertuÄra-beigas komandai).\n"
"\n"
-"%F: Frekvence (hercos)\n"
-"%c: KanÄlu skaits\n"
+"%F: frekvence (hercos)\n"
+"%c: kanÄlu skaits\n"
"%f: faila nosaukums (pilns ceļš)\n"
"%l: ilgums (milisekundēs)\n"
-"%n vai %s: Dziesmas nosaukums\n"
-"%r: Ātrums (bitos sekundē)\n"
-"%t: RepertuÄra pozÄ«cija (%02d)\n"
-"%p: Pašreiz atskaņo (1 vai 0)"
+"%n vai %s: dziesmas nosaukums\n"
+"%r: Ätrums (bitos sekundÄ“)\n"
+"%t: repertuÄra pozÄ«cija (%02d)\n"
+"%p: pašreiz atskaņo (1 vai 0)\n"
+"%a: izpildÄ«tÄjs\n"
+"%b: albums\n"
+"%T: celiņa nosaukums"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5518,24 +3907,19 @@ msgstr ""
"<span size='small'>Parametrus, kuri tiek padoti Äaulai, vajadzÄ“tu ietvert "
"pÄ“diņÄs. PretÄ“jÄ gadÄ«jumÄ rodas risks droÅ¡Ä«bai.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr "Komandas"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
msgid "Song Change"
msgstr "Dziesmas maiņa"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Spektra analizators"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "Par statusa ikonas spraudni"
-#: src/statusicon/statusicon.c:356
-#, fuzzy
+#: src/statusicon/statusicon.c:379
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5545,41 +3929,55 @@ msgid ""
"This plugin provides a status icon, placed in\n"
"the system tray area of the window manager.\n"
msgstr ""
+"Status Icon spraudnis\n"
"\n"
-"autors Giacomo Lozito < james@develia.org >\n"
+"Autortiesības 2005-2007 Giacomo Lozito < james@develia.org >\n"
+"Autortiesības 2010 Michał Lipski <tallica@o2.pl>\n"
"\n"
"Šis spraudnis nodrošina ar statusa ikonu, kas\n"
"tiek novietota logu pÄrvaldnieka sistÄ“mas ikonu joslÄ.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "Statusa ikonas spraudnis - iestatījumi"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "LabÄ klikÅ¡Ä·a izvÄ“lne"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "Neliela atskaņošanas izvēlne #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "Neliela atskaņošanas izvēlne #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "Peles rullīša darbība"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "Mainīt skaļumu"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "Mainīt atskaņojamo dziesmu"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+msgid "Other settings"
+msgstr "Citi iestatījumi"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr "Atslēgt izlecošo logu"
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr "Aizvērt uz paziņojumu apgabalu (sistēmas ikonu joslu)"
+
+#: src/stereo_plugin/stereo.c:41
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5589,116 +3987,19 @@ msgstr ""
"\n"
"Autors Johan Levin 1999."
-#: src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:65
msgid "About Extra Stereo Plugin"
msgstr "Par Extra Stereo spraudni"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:102
msgid "Configure Extra Stereo"
msgstr "Konfigurēt Extra Stereo"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr "Meklēt:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr "Pievienot grÄmatzÄ«mi"
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "PlÅ«smu pÄrlÅ«ks"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr "Plūsmas nosaukums"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr "Pašreiz atskaņo"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr "DzÄ“st grÄmatzÄ«mi"
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr "Par plÅ«smu pÄrlÅ«ku"
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Autortiesības (c) 2008, Calin Crisan <ccrisan@gmail.com> un Audacious "
-"komanda.\n"
-"\n"
-"Å is ir vienkÄrÅ¡s plÅ«smu pÄrlÅ«ks, kurÄ ir iekļautas populÄrÄkÄs plÅ«smu "
-"mapes.\n"
-"Liels paldies Streamtuner izstrÄdÄtÄjiem <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tun, protams, visai Audacious kopienai.\n"
-"\n"
-"Paldies arī Tony Vroon par padomiem, vēlreiz.\n"
-"\n"
-"Å is bija Google Summer of Code 2008 projekts."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "PlÅ«smu pÄrlÅ«ks"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Par Sun dzini"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun dzinis\n"
-"\n"
-"Autortiesības (c) 2001 CubeSoft Communications, Inc.\n"
-"UzturÄ“tÄjs: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Audio vadības ierīce:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Bufera izmērs (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Skaļuma vadības ierīce:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS izmanto tikai mikseri."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun dziņa konfigurÄcija"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "Par toņa ģeneratoru"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5712,15 +4013,19 @@ msgstr ""
"Lai to izmantotu, ievadiet URL: tone://frekvence1;frekvence2;frekvence3;...\n"
"piem., tone://2000;2005 , lai atskaņotu 2000Hz un 2005Hz toni"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "Toņa ģenerators: "
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Par File I/O spraudni"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "AizstÄt vispÄrÄ«gos nosaukumus"
@@ -5733,15 +4038,15 @@ msgstr "Nosaukuma formÄts:"
msgid "Ogg Vorbis Tags"
msgstr "Ogg Vorbis tagi"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Ogg Vorbis Audio spraudņa konfigurÄcija"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Par Ogg Vorbis Audio spraudni"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5799,12 +4104,12 @@ msgstr ""
"\n"
"Ieviešana iekš Audacious: Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack dekodÄ“tÄja spraudnis %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5816,6 +4121,1669 @@ msgstr ""
"Daļas spraudņa koda autors Miles Egan\n"
"Apciemojiet Wavpack vietni http://www.wavpack.com/\n"
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Lietot bitmap fontus, ja pieejami"
+
+#~ msgid ""
+#~ "Use bitmap fonts if they are available. Bitmap fonts do not support "
+#~ "Unicode strings."
+#~ msgstr ""
+#~ "Lietot bitmap fontus, ja tie ir pieejami. Bitmap fonti neatbalsta unikoda "
+#~ "virknes."
+
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>_DažÄdi</b>"
+
+#~ msgid "Use two-way text scroller"
+#~ msgstr "Lietot divvirzienu teksta ritinÄtÄju"
+
+#~ msgid "About "
+#~ msgstr "Par"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Autortiesības (c) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Šis spraudnis ir izlaists zem GNU LGPL nosacījumiem.\n"
+#~ "Detaļas skatīt http://www.gnu.org/licenses/lgpl.html\n"
+#~ "\n"
+#~ "Šis spraudnis izmanto AdPlug bibliotēku, autortiesības (C) Simon Peter u."
+#~ "c.\n"
+#~ "SaistÄ«tÄs AdPlug bibliotÄ“kas versija: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: KonfigurÄcija"
+
+#~ msgid "Sound quality"
+#~ msgstr "Skaņas kvalitÄte"
+
+#~ msgid "Resolution"
+#~ msgstr "Izšķirtspēja"
+
+#~ msgid "8bit"
+#~ msgstr "8bit"
+
+#~ msgid "16bit"
+#~ msgstr "16bit"
+
+#~ msgid "Channels"
+#~ msgstr "KanÄli"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "Ieslēgt stereo režīmu nav ieteicams, ja vien jums to nevajag. Tas "
+#~ "nepievienos skaņai stereo efektu (OPL2 ir tikai mono), bet patÄ“rÄ“s vairÄk "
+#~ "procesora resursu!"
+
+#~ msgid "Frequency"
+#~ msgstr "Frekvence"
+
+#~ msgid "Detect songend"
+#~ msgstr "Noteikt dziesmas beigas"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "Ja ieslēgts, XMMS noteiks dziesmas beigas, apturēs to un pavirzīsies uz "
+#~ "priekÅ¡u repertuÄrÄ. Ja izslÄ“gts, XMMS neievÄ“ros dziesmas beigas un "
+#~ "atkÄrtos to."
+
+#~ msgid "Formats"
+#~ msgstr "FormÄti"
+
+#~ msgid "Format selection"
+#~ msgstr "FormÄta izvÄ“le"
+
+#~ msgid "Format"
+#~ msgstr "FormÄts"
+
+#~ msgid "Extension"
+#~ msgstr "PaplaÅ¡inÄjums"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "Šis spraudnis atpazīs un atskaņos izvēlētos faila tipus. Neizvēlētie tipi "
+#~ "tiks ignorēti, lai atļautu tos atskaņot citiem spraudņiem."
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: Faila informÄcija"
+
+#~ msgid "Author: "
+#~ msgstr "Autors: "
+
+#~ msgid "File Type: "
+#~ msgstr "Faila tips: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "Apakšdziesmas: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Instrumenti: "
+
+#~ msgid "Orders: "
+#~ msgstr "KÄrtÄ«bas: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Paraugi: "
+
+#~ msgid "Song"
+#~ msgstr "Dziesma"
+
+#~ msgid "Instrument name"
+#~ msgstr "Instrumenta nosaukums"
+
+#~ msgid "Song message"
+#~ msgstr "Dziesmas ziņojums"
+
+#~ msgid "Subsong selection"
+#~ msgstr "Apakšdziesmas izvēle"
+
+#~ msgid "Order: "
+#~ msgstr "KÄrtÄ«ba: "
+
+#~ msgid "Pattern: "
+#~ msgstr "Paraugs: "
+
+#~ msgid "Row: "
+#~ msgstr "Rinda: "
+
+#~ msgid "Speed: "
+#~ msgstr "Ä€trums: "
+
+#~ msgid "Timer: "
+#~ msgstr "Taimeris: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "Par XMMS Alarm"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS Alarm"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "XMMS spraudnis, kas var tikt izmantots,\n"
+#~ "lai sÄktu atskaņoÅ¡anu noteiktÄ laikÄ.\n"
+#~ "\n"
+#~ "Sūtiet visas sūdzības uz:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "ModinÄtÄjs"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "Å is ir jÅ«su moÅ¡anÄs zvans."
+
+#~ msgid "Select Playlist"
+#~ msgstr "IzvÄ“lieties repertuÄru"
+
+#~ msgid "Sorry"
+#~ msgstr "Atvainojiet"
+
+#~ msgid "Warning"
+#~ msgstr "BrÄ«dinÄjums"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "DroÅ¡Ä«bas dēļ \"kluss\" ilgumam jÄbÅ«t vismaz par 65 sekundÄ“m garÄkam nekÄ "
+#~ "izdziÅ¡anas ilgumam, tam jÄbÅ«t arÄ« garÄkam par 10 sekundÄ“m. BÅ«tÄ«bÄ tas "
+#~ "nozÄ«mÄ“, ka kodÄ ir kļūda un, lÄ«dz tiks atrasts risinÄjums, jums bÅ«s "
+#~ "jÄredz Å¡is ziņojums :)\n"
+#~ "\n"
+#~ "JÅ«su izdziÅ¡anas ilguma iestatÄ«jumi NAV saglabÄti\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+
+#~ msgid "Oh Well"
+#~ msgstr "Nu, labi"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "ModinÄtÄjs iestatÄ«jumi"
+
+#~ msgid "Time"
+#~ msgstr "Laiks"
+
+#~ msgid "hours"
+#~ msgstr "stundas"
+
+#~ msgid "h"
+#~ msgstr "h"
+
+#~ msgid "minutes"
+#~ msgstr "minūtes"
+
+#~ msgid "Quiet after:"
+#~ msgstr "Kluss pēc:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "ModinÄt (noklusÄ“jums):"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "IzvÄ“lieties dienas, kurÄs ieslÄ“gsies modinÄtÄjs"
+
+#~ msgid "Day"
+#~ msgstr "Diena"
+
+#~ msgid "Tuesday"
+#~ msgstr "Otrdiena"
+
+#~ msgid "Wednesday"
+#~ msgstr "Trešdiena"
+
+#~ msgid "Thursday"
+#~ msgstr "Ceturtdiena"
+
+#~ msgid "Friday"
+#~ msgstr "Piektdiena"
+
+#~ msgid "Saturday"
+#~ msgstr "Sestdiena"
+
+#~ msgid "Sunday"
+#~ msgstr "Svētdiena"
+
+#~ msgid "Monday"
+#~ msgstr "Pirmdiena"
+
+#~ msgid "Days"
+#~ msgstr "Dienas"
+
+#~ msgid "Fading"
+#~ msgstr "Izdzišana"
+
+#~ msgid "Volume"
+#~ msgstr "Skaļums"
+
+#~ msgid "Current"
+#~ msgstr "Pašreizējais"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "Atstatīt uz pašreizējo izvades skaļumu"
+
+#~ msgid "Start at"
+#~ msgstr "SÄkumÄ"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "BeigÄs"
+
+#~ msgid "Additional Command"
+#~ msgstr "Papildu komanda"
+
+#~ msgid "enable"
+#~ msgstr "ieslēgt"
+
+#~ msgid "Playlist (optional)"
+#~ msgstr "RepertuÄrs (neobligÄts)"
+
+#~ msgid "Browse..."
+#~ msgstr "PÄrlÅ«kot..."
+
+#~ msgid "Reminder"
+#~ msgstr "AtgÄdinÄjums"
+
+#~ msgid "Use reminder"
+#~ msgstr "Izmantot atgÄdinÄjumu"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "Ko šīs opcijas nozīmē?"
+
+#~ msgid ""
+#~ "\n"
+#~ "Time\n"
+#~ " Alarm at: \n"
+#~ " The time for the alarm to come on.\n"
+#~ "\n"
+#~ " Quiet After: \n"
+#~ " Stop alarm after this amount of time.\n"
+#~ " (if the wakeup dialog is not closed)\n"
+#~ "\n"
+#~ "\n"
+#~ "Days\n"
+#~ " Day:\n"
+#~ " Select the days for the alarm to activate.\n"
+#~ "\n"
+#~ " Time:\n"
+#~ " Choose the time for the alarm on each day,\n"
+#~ " or select the toggle button to use the default\n"
+#~ " time.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volume\n"
+#~ " Fading: \n"
+#~ " Fade the volume up to the chosen volume \n"
+#~ " for this amount of time.\n"
+#~ "\n"
+#~ " Start at: \n"
+#~ " Start fading from this volume.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " The volume to stop fading at. If the fading\n"
+#~ " time is 0 then set volume to this and start\n"
+#~ " playing.\n"
+#~ "\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " Additional Command:\n"
+#~ " Run this command at the alarm time.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Laiks\n"
+#~ " ModinÄt: \n"
+#~ " Laiks, kad ieslÄ“dzas modinÄtÄjs.\n"
+#~ "\n"
+#~ " Kluss pēc: \n"
+#~ " IzslÄ“gt modinÄtÄju pÄ“c Å¡Ä« laika sprīža.\n"
+#~ " (ja netiek aizvÄ“rts pamoÅ¡anÄs dialogs)\n"
+#~ "\n"
+#~ "\n"
+#~ "Dienas\n"
+#~ " Diena:\n"
+#~ " IzvÄ“lieties dienas, kad modinÄtÄjam jÄieslÄ“dzas.\n"
+#~ "\n"
+#~ " Laiks:\n"
+#~ " IzvÄ“lieties modinÄÅ¡anas laiku katrai dienai\n"
+#~ " vai arī atzīmējiet 'Noklusētais', lai izmantotu\n"
+#~ " noklusēto laiku.\n"
+#~ "\n"
+#~ "\n"
+#~ "Skaļums\n"
+#~ " Izdzišana:\n"
+#~ " PalielinÄt skaļumu lÄ«dz izvÄ“lÄ“tajam lÄ«menim\n"
+#~ " Å¡ajÄ laika brÄ«dÄ«.\n"
+#~ "\n"
+#~ " SÄkt: \n"
+#~ " SÄkt skaļuma palielinÄÅ¡anu no Å¡Ä« lÄ«meņa.\n"
+#~ "\n"
+#~ " Beigt: \n"
+#~ " LÄ«menis, pie kura pÄrtraukt skaļuma palielinÄÅ¡anu.\n"
+#~ " Ja izdzišanas laiks ir 0, tad iestatīt skaļumu uz šo\n"
+#~ " lÄ«meni un sÄkt atskaņoÅ¡anu.\n"
+#~ "\n"
+#~ "\n"
+#~ "Opcijas:\n"
+#~ " Papildu komanda:\n"
+#~ " Palaist Å¡o komandu modinÄtÄja palaiÅ¡anas brÄ«dÄ«.\n"
+#~ "\n"
+#~ " RepertuÄrs: \n"
+#~ " IelÄdÄ“t repertuÄru, no kura tiks atskaņotas dziesmas\n"
+#~ " (jÄbÅ«t ar .m3u paplaÅ¡inÄjumu). Ja tas netiek norÄdÄ«ts,\n"
+#~ " tiks izmantotas dziesmas no paÅ¡reizÄ“jÄ repertuÄra.\n"
+#~ " Šeit var ievadīt arī mp3/ogg straumes URL, bet\n"
+#~ " repertuÄru ielÄdÄ“Å¡anu no URL xmms paÅ¡reiz\n"
+#~ " neatbalsta.\n"
+#~ "\n"
+#~ " AtgÄdinÄjums:\n"
+#~ " ModinÄtÄjam izslÄ“dzoties, parÄda atgÄdinÄjumu.\n"
+#~ " Ievadiet atgÄdinÄjumu teksta laukÄ un ielieciet\n"
+#~ " Ä·eksÄ«ti blakus esoÅ¡ajÄ rÅ«tÄ«, ja vÄ“lieties, lai tas tiktu\n"
+#~ " parÄdÄ«ts.\n"
+
+#~ msgid "Your reminder for today is.."
+#~ msgstr "JÅ«su atgÄdinÄjums Å¡odienai ir.."
+
+#~ msgid "Thankyou"
+#~ msgstr "Paldies"
+
+#~ msgid "Pairing request for '%s'"
+#~ msgstr "PÄroÅ¡anas pieprasÄ«jums priekÅ¡ '%s'"
+
+#~ msgid "Authorization request for %s"
+#~ msgstr "AutorizÄcijas pieprasÄ«jums priekÅ¡ '%s'"
+
+#~ msgid "Created bonding with %s"
+#~ msgstr "Izveidots saite ar %s"
+
+#~ msgid "Removed bonding with %s"
+#~ msgstr "Atcelta saite ar %s"
+
+#~ msgid "Device has been switched off"
+#~ msgstr "Ierīce tika izslēgta"
+
+#~ msgid "Device has been made non-discoverable"
+#~ msgstr "IerÄ«ce tika padarÄ«ta neatklÄjama"
+
+#~ msgid "Device has been made connectable"
+#~ msgstr "Ierīce tika padarīta savienojama"
+
+#~ msgid "Device has been made discoverable"
+#~ msgstr "IerÄ«ce tika padarÄ«ta atklÄjama"
+
+#~ msgid "Device has been made limited discoverable"
+#~ msgstr "IerÄ«ce tika padarÄ«ta ierobežoti atklÄjama"
+
+#~ msgid "Device has been switched into pairing mode"
+#~ msgstr "IerÄ«ce tika pÄrslÄ“gta pÄroÅ¡anas režīmÄ"
+
+#~ msgid "Bluetooth headset support plugin"
+#~ msgstr "Bluetooth austiņu atbalsta spraudnis"
+
+#~ msgid ""
+#~ "Bluetooth headset support\n"
+#~ "Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
+#~ "This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and "
+#~ "the Audacious team\n"
+#~ " \n"
+#~ "In order to use the AVRCP you need the uinput module loaded into the "
+#~ "kernel\n"
+#~ "The headset keys will be recognized as normal mutimedia keys and \n"
+#~ "can be configured using the Audacious Global Hotkey plugin or ohter "
+#~ "tools \n"
+#~ "provided by your window manager\n"
+#~ msgstr ""
+#~ "Bluetooth austiņu atbalsts\n"
+#~ "autortiesības (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
+#~ "Šis bija GSoC 2008 projekts - liels paldies manam padomdevējam Tony Vroon "
+#~ "un Audacious komandai\n"
+#~ "\n"
+#~ "Lai izmantotu AVRCP, kodolÄ jÄbÅ«t ielÄdÄ“tam 'uinput' modulim\n"
+#~ "Austiņu taustiņi tiks atpazÄ«ti kÄ parasti multivides taustiņi\n"
+#~ "un var tikt konfigurÄ“ti, izmantojot Audacious globÄlo Ä«sinÄjumtaustiņu "
+#~ "spraudni\n"
+#~ "vai citus jÅ«su logu pÄrvaldÄ«tÄja rÄ«kus\n"
+
+#~ msgid "Producer"
+#~ msgstr "RažotÄjs"
+
+#~ msgid "Available Headsets"
+#~ msgstr "PieejamÄs austiņas"
+
+#~ msgid "Current Headset"
+#~ msgstr "PaÅ¡reizÄ“jÄs austiņas"
+
+#~ msgid "_Connect"
+#~ msgstr "_Pievienot"
+
+#~ msgid "Class"
+#~ msgstr "Klase"
+
+#~ msgid "Address:"
+#~ msgstr "Adrese:"
+
+#~ msgid "Bonding finish!"
+#~ msgstr "Sasaiste pabeigta!"
+
+#~ msgid "No devices found!"
+#~ msgstr "Nav atrasta neviena ierīce!"
+
+#~ msgid "Scanning..."
+#~ msgstr "Skenē..."
+
+#~ msgid "Pairing..."
+#~ msgstr "PÄro..."
+
+#~ msgid "Rescan"
+#~ msgstr "PÄrskenÄ“t"
+
+#~ msgid "Playback->Play"
+#~ msgstr "Atskaņošana->Atskaņot"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "Atskaņošana->Stop"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "Atskaņošana->Pauze"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "AtskaņoÅ¡ana->IepriekÅ¡Ä“jÄ"
+
+#~ msgid "Playback->Next"
+#~ msgstr "AtskaņoÅ¡ana->NÄkamÄ"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "Atskaņošana->Izņemt"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "RepertuÄrs->AtkÄrtot"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "RepertuÄrs->Sajaukt"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "Skaļums->Uz_augšu_5"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "Skaļums->Uz_leju_5"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "Skaļums->Uz_augšu_10"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "Skaļums->Uz_leju_10"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "Skaļums->ApklusinÄt"
+
+#~ msgid "Window->Main"
+#~ msgstr "Logs->Galvenais"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "Logs->RepertuÄrs"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "Logs->Balansieris"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "Logs->PÄrietUzFailu"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: neizdevÄs atvÄ“rt ierÄ«ces failu %s , ierÄ«ce tika "
+#~ "izlaista; pÄrbaudiet, vai fails eksistÄ“ un vai jums ir lasÄ«Å¡anas atļauja "
+#~ "Å¡im failam\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr ""
+#~ "event-device-plugin: neizdevÄs izveidot io_channel ierÄ«ces failam %s , "
+#~ "ierīce tika izlaista\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: neizdevÄs atvÄ“rt /proc/bus/input/devices , "
+#~ "automÄtiskÄ notikumu ierÄ«Äu atraÅ¡ana nedarbosies.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: neizdevÄs atvÄ“rt io_channel /proc/bus/input/ "
+#~ "ierÄ«cÄ“m , automÄtiskÄ notikumu ierÄ«Äu atraÅ¡ana nedarbosies.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: kļūda lasot /proc/bus/input/ ierÄ«ces , automÄtiskÄ "
+#~ "notikumu ierÄ«Äu atraÅ¡ana nedarbosies.\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ierÄ«ce %s nav atrasta iekÅ¡ /dev/input , tÄ tiek\n"
+#~ "izlaista.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr ""
+#~ "event-device-plugin: neizdevÄs ielÄdÄ“t konfigurÄcijas failu %s , tiks "
+#~ "izmantoti noklusētie iestatījumi.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: nepilnÄ«ga informÄcija konfigurÄcijas failÄ ierÄ«cei "
+#~ "\"%s\", tÄ tiks izlaista.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t is_active vÄ“rtÄ«bu "
+#~ "ierÄ«cei \"%s\", tÄ tiks izlaista.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr ""
+#~ "event-device-plugin: neizdevÄs piekļūt vietÄ“jai mapei %s , iestatÄ«jumi "
+#~ "netiks saglabÄti.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t filename vÄ“rtÄ«bu "
+#~ "ierÄ«cei \"%s\", tÄ tiks izlaista.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t phys vÄ“rtÄ«bu ierÄ«cei "
+#~ "\"%s \", tÄ tiks izlaista.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurÄcija, neizdevÄs iegÅ«t is_custom vÄ“rtÄ«bu "
+#~ "ierÄ«cei \"%s\", tÄ tiks izlaista.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: konfigurÄcija, negaidÄ«ta vÄ“rtÄ«ba ierÄ«cei \"%s \", tÄ "
+#~ "tiks izlaista.\n"
+
+#~ msgid "Detected"
+#~ msgstr "Atrasts"
+
+#~ msgid "Custom"
+#~ msgstr "PielÄgots"
+
+#~ msgid "Not Detected"
+#~ msgstr "Nav atrasts"
+
+#~ msgid "Information"
+#~ msgstr "InformÄcija"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "Nevar atvērt piesaistu logu ierīcei, kas nav atrasta.\n"
+#~ "PÄrliecinieties, ka ir pareizi pievienota."
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "NeizdevÄs atvÄ“rt izvÄ“lÄ“to ierÄ«ci.\n"
+#~ "LÅ«dzu, pÄrbaudiet lasÄ«Å¡anas atļaujas ierÄ«ces failam."
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug - Pievienot pielÄgotu ierÄ«ci"
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "EvDev-Plug mÄ“Ä£ina automÄtiski atrast un atjaunot informÄciju par "
+#~ "notikumu\n"
+#~ "ierÄ«cÄ“m, kas pieejamas jÅ«su sistÄ“mÄ.\n"
+#~ "TomÄ“r, ja automÄtiskÄ atraÅ¡ana jÅ«su sistÄ“mÄ nedarbojas, vai arÄ« notikumu\n"
+#~ "ierÄ«ces ir nestandarta vietÄ (paÅ¡reiz tÄs tiek meklÄ“tas tikai iekÅ¡ /dev/"
+#~ "input/ ),\n"
+#~ "jÅ«s varat pievienot pielÄgotu ierÄ«ci, norÄdot tÄs nosaukumu un ierÄ«ces "
+#~ "failu."
+
+#~ msgid "Device name:"
+#~ msgstr "Ierīces nosaukums:"
+
+#~ msgid "Device file:"
+#~ msgstr "Ierīces fails:"
+
+#~ msgid "(custom)"
+#~ msgstr "(pielÄgots)"
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "LÅ«dzu, norÄdiet gan nosaukumu, gan faila nosaukumu.\n"
+#~ "Faila nosaukumu jÄnorÄda ar pilno ceļu."
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr "Vai vÄ“laties dzÄ“st paÅ¡reizÄ“jo konfigurÄciju izvÄ“lÄ“tajai ierÄ«cei?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "Vai vÄ“laties dzÄ“st izvÄ“lÄ“to pielÄgoto ierÄ«ci?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug - KonfigurÄcija"
+
+#~ msgid "Active"
+#~ msgstr "Aktīvs"
+
+#~ msgid "Status"
+#~ msgstr "Statuss"
+
+#~ msgid "Device Name"
+#~ msgstr "Ierīces nosaukums"
+
+#~ msgid "Device File"
+#~ msgstr "Ierīces fails"
+
+#~ msgid "Device Address"
+#~ msgstr "Ierīces adrese"
+
+#~ msgid "_Bindings"
+#~ msgstr "Pie_saistes"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "Nospiediet jūsu ierīces taustiņu, lai to piesaistītu;\n"
+#~ "ja pÄ“c piecu sekunžu laikÄ netiks nospiests neviens\n"
+#~ "taustiņš, šis logs aizvērsies, neizmainot piesaistes."
+
+#~ msgid ""
+#~ "This input event has been already assigned.\n"
+#~ "\n"
+#~ "It's not possible to assign multiple actions to the same input event "
+#~ "(although it's possible to assign the same action to multiple events)."
+#~ msgstr ""
+#~ "Šis ievades notikums jau ir piesaistīts.\n"
+#~ "\n"
+#~ "Nav iespÄ“jams piesaistÄ«t vairÄkas darbÄ«bas vienam ievades notikumam "
+#~ "(tomÄ“r ir iespÄ“jams piesaistÄ«t vienu darbÄ«bu vairÄkiem notikumiem)."
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug - Piesaistu konfigurÄcija"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Nosaukums: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Faila nosaukums: </b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>Fiz. adrese: </b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug - par"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "atskaņotÄja tÄlvadÄ«ba ar notikumu ierÄ«cÄ“m\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "autors Giacomo Lozito\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "Å im LADSPA spraudnim nav lietotÄja vadÄ«klu"
+
+#~ msgid "Name"
+#~ msgstr "Nosaukums"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Installed plugins"
+#~ msgstr "Instalētie spraudņi"
+
+#~ msgid "Running plugins"
+#~ msgstr "Spraudņi, kas pašreiz darbojas"
+
+#~ msgid "Add"
+#~ msgstr "Pievienot"
+
+#~ msgid "Remove"
+#~ msgstr "Izņemt"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "LADSPA spraudņu katalogs"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "Par LIRC Audacious spraudni"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "LIRC spraudnis "
+
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "vienkÄrÅ¡s spraudnis, kas ļauj jums kontrolÄ“t\n"
+#~ "Audacious, izmantojot LIRC attÄlinÄtÄs vadÄ«bas dÄ“monu\n"
+#~ "\n"
+#~ "Piemērojis izmantošanai Audacious - Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "no XMMS LIRC spraudņa, kura autori ir:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "Varat iegÅ«t informÄciju par LIRC:\n"
+#~ "http://lirc.org"
+
+#~ msgid "LIRC plugin settings"
+#~ msgstr "LIRC spraudņa iestatījumi"
+
+#~ msgid "Reconnect to LIRC server"
+#~ msgstr "Pieslēgties vēlreiz LIRC serverim"
+
+#~ msgid "Timeout before reconnecting (seconds): "
+#~ msgstr "Noildze pirms atkÄrtotas pieslÄ“gÅ¡anÄs (sekundes): "
+
+#~ msgid "Reconnect"
+#~ msgstr "Pieslēgties vēlreiz"
+
+#~ msgid "Connection"
+#~ msgstr "Pieslēgties"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: neizdevÄs inicializÄ“t LIRC atbalstu\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: neizdevÄs nolasÄ«t LIRC konf. failu\n"
+#~ "%s: lÅ«dzu, lasiet LIRC dokumentÄcijÄ\n"
+#~ "%s: kÄ izveidot pareizu konf. failu\n"
+
+#~ msgid "%s: trying to reconnect...\n"
+#~ msgstr "%s: mēģina pieslēgties vēlreiz...\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: nezinÄma komanda \"%s\"\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: atvienots no LIRC\n"
+
+#~ msgid "%s: will try reconnect every %d seconds...\n"
+#~ msgstr "%s: tiks mÄ“Ä£inÄts pieslÄ“gties vÄ“lreiz katras %d sekundes...\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "ModPlug konfigurÄcija"
+
+#~ msgid "16 bit"
+#~ msgstr "16 bit"
+
+#~ msgid "8 bit"
+#~ msgstr "8 bit"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "Mono (lejupmiksēšana)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "TuvÄkais (ÄtrÄkais)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "LineÄrais (Ätri)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "Spline (laba kvalitÄte)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "8-tap Fir (ļoti augsta kvalitÄte)"
+
+#~ msgid "96 kHz"
+#~ msgstr "96 kHz"
+
+#~ msgid "48 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Iztveršanas temps"
+
+#~ msgid "Enable"
+#~ msgstr "Ieslēgt"
+
+#~ msgid "Depth"
+#~ msgstr "Dziļums"
+
+#~ msgid "Delay"
+#~ msgstr "Aizture"
+
+#~ msgid "Reverb"
+#~ msgstr "Atbalss"
+
+#~ msgid "Amount"
+#~ msgstr "Daudzums"
+
+#~ msgid "Range"
+#~ msgstr "Apgabals"
+
+#~ msgid "Bass Boost"
+#~ msgstr "Basu uzsvēršana"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr ""
+#~ "PiezÄ«me: pÄrÄk augsta\n"
+#~ "priekÅ¡pastiprinÄjuma iestatÄ«Å¡ana\n"
+#~ "var izraisīt apgriešanu\n"
+#~ "(kaitinošus klikšķus un paukšķus)!"
+
+#~ msgid "Effects"
+#~ msgstr "Efekti"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "Lietot faila nosaukumu kÄ dziesmas nosaukumu"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "Ä€trais repertuÄra info"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "Trokšņu samazinÄÅ¡ana"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Atskaņot Amiga MOD"
+
+#~ msgid "Don't loop"
+#~ msgstr "Neciklot"
+
+#~ msgid "Loop"
+#~ msgstr "Ciklot"
+
+#~ msgid "time(s)"
+#~ msgstr "reize(s)"
+
+#~ msgid "Loop forever"
+#~ msgstr "Ciklot bezgalīgi"
+
+#~ msgid "Looping"
+#~ msgstr "CikloÅ¡anÄs"
+
+#~ msgid "MOD Info"
+#~ msgstr "MOD info"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "Faila nosaukums:\n"
+#~ "Nosaukums:\n"
+#~ "Tips:\n"
+#~ "Garums:\n"
+#~ "Ä€trums:\n"
+#~ "Temps:\n"
+#~ "Paraugi:\n"
+#~ "Instrumenti:\n"
+#~ "Struktūras:\n"
+#~ "KanÄli:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "Paraugi"
+
+#~ msgid "Instruments"
+#~ msgstr "Instrumenti"
+
+#~ msgid "Message"
+#~ msgstr "Ziņojums"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Audacious Modplug ievades spraudnis ver"
+
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Modplug skaņas dzinējs, autors Olivier Lapicque.\n"
+#~ "Modplug XMMS saskarnes autors Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque un Kenton Varda.\n"
+#~ "AtjauninÄjumi un uzturÄ“Å¡ana - Konstanty Bialkowski.\n"
+#~ "BMP porta autors Theofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "Par Modplug"
+
+#~ msgid "Show separators in playlist"
+#~ msgstr "RÄdÄ«t atdalÄ«tÄjus repertuÄrÄ"
+
+#~ msgid "Show window manager decoration"
+#~ msgstr "RÄdÄ«t logu pÄrvaldnieka apdares"
+
+#~ msgid "This enables the window manager to show decorations for windows."
+#~ msgstr ""
+#~ "IeslÄ“dziet Å¡o, lai rÄdÄ«tu loga pÄrvaldnieka apdares atskaņotÄja logiem."
+
+#~ msgid ""
+#~ "If selected, the file information text in the main window will scroll "
+#~ "back and forth. If not selected, the text will only scroll in one "
+#~ "direction."
+#~ msgstr ""
+#~ "Ja ieslÄ“gts, faila informÄcijas teksts galvenajÄ logÄ ritinÄsies uz "
+#~ "priekÅ¡u un atpakaļ. Ja izslÄ“gts, teksta ritinÄÅ¡ana notiks tikai vienÄ "
+#~ "virzienÄ."
+
+#~ msgid "Disable inline gtk theme"
+#~ msgstr "Atslēgt iekļauto GTK tēmu"
+
+#~ msgid "Random skin on play"
+#~ msgstr "Nejauša apdare atskaņojot"
+
+#~ msgid "Allow loading incomplete skins"
+#~ msgstr "Atļaut ielÄdÄ“t nepilnÄ«gas apdares"
+
+#~ msgid ""
+#~ "If selected, audacious won't refuse loading broken skins. Use only if "
+#~ "your favourite skin doesn't work"
+#~ msgstr ""
+#~ "Ja atzÄ«mÄ“ts, Audacious atļaus nepilnÄ«gu apdaru ielÄdi. Izmantojiet tikai "
+#~ "gadÄ«jumÄ, ja jÅ«su iecienÄ«tÄ apdare nestrÄdÄ."
+
+#~ msgid "Color Adjustment"
+#~ msgstr "KrÄsu regulÄ“Å¡ana"
+
+#~ msgid ""
+#~ "Audacious allows you to alter the color balance of the skinned UI. The "
+#~ "sliders below will allow you to do this."
+#~ msgstr ""
+#~ "Audacious atļauj jums mainÄ«t lietotÄja saskarnes apdaru krÄsu balansu. "
+#~ "Lai to darÄ«tu, lietojiet apakÅ¡Ä esoÅ¡os slÄ«dņus."
+
+#~ msgid "Blue"
+#~ msgstr "Zils"
+
+#~ msgid "Green"
+#~ msgstr "Zaļš"
+
+#~ msgid "Red"
+#~ msgstr "Sarkans"
+
+#~ msgid "Color adjustment ..."
+#~ msgstr "KrÄsu regulÄ“Å¡ana ..."
+
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "Atslēgt 'GLS mērogošana'"
+
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Ieslēgt 'GLS mērogošana'"
+
+#~ msgid "DoubleSize"
+#~ msgstr "Dubultizmērs"
+
+#~ msgid "Easy Move"
+#~ msgstr "VienkÄrÅ¡Ä pÄrvietoÅ¡ana"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "Spektra analizators"
+
+#~ msgid "Search:"
+#~ msgstr "Meklēt:"
+
+#~ msgid "Add Bookmark"
+#~ msgstr "Pievienot grÄmatzÄ«mi"
+
+#~ msgid "Stream name"
+#~ msgstr "Plūsmas nosaukums"
+
+#~ msgid "Now playing"
+#~ msgstr "Pašreiz atskaņo"
+
+#~ msgid "Remove Bookmark"
+#~ msgstr "DzÄ“st grÄmatzÄ«mi"
+
+#~ msgid "About Stream Browser"
+#~ msgstr "Par plÅ«smu pÄrlÅ«ku"
+
+#~ msgid ""
+#~ "Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "This is a simple stream browser that includes the most popular streaming "
+#~ "directories.\n"
+#~ "Many thanks to the Streamtuner developers <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tand of course to the whole Audacious community.\n"
+#~ "\n"
+#~ "Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+#~ "\n"
+#~ "This was a Google Summer of Code 2008 project."
+#~ msgstr ""
+#~ "Autortiesības (c) 2008, Calin Crisan <ccrisan@gmail.com> un Audacious "
+#~ "komanda.\n"
+#~ "\n"
+#~ "Å is ir vienkÄrÅ¡s plÅ«smu pÄrlÅ«ks, kurÄ ir iekļautas populÄrÄkÄs plÅ«smu "
+#~ "mapes.\n"
+#~ "Liels paldies Streamtuner izstrÄdÄtÄjiem <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tun, protams, visai Audacious kopienai.\n"
+#~ "\n"
+#~ "Paldies arī Tony Vroon par padomiem, vēlreiz.\n"
+#~ "\n"
+#~ "Å is bija Google Summer of Code 2008 projekts."
+
+#~ msgid "Can't jump to time when no track is being played.\n"
+#~ msgstr "Nevar pÄriet uz noteiktu laiku, ja nekas netiek atskaņots.\n"
+
+#~ msgid "minutes:seconds"
+#~ msgstr "minūtes:sekundes"
+
+#~ msgid "Track length:"
+#~ msgstr "Celiņa garums:"
+
+#~ msgid "Error writing playlist \"%s\": %s"
+#~ msgstr "Kļūda rakstot repertuÄru \"%s\": %s"
+
+#~ msgid "%s already exist. Continue?"
+#~ msgstr "%s jau pastÄv. TurpinÄt?"
+
+#~ msgid "Show/hide infoarea"
+#~ msgstr "RÄdÄ«t/slÄ“pt infoapgabalu"
+
+#~ msgid "Show main menu"
+#~ msgstr "RÄdÄ«t galveno izvÄ“lni"
+
+#~ msgid "Show/hide main menu"
+#~ msgstr "RÄdÄ«t/slÄ“pt galveno izvÄ“lni"
+
+#~ msgid "Show/hide statusbar"
+#~ msgstr "RÄdÄ«t/slÄ“pt stÄvokļjoslu"
+
+#~ msgid "Import Playlist ..."
+#~ msgstr "ImportÄ“t repertuÄru ..."
+
+#~ msgid "Export Playlist ..."
+#~ msgstr "EksportÄ“t repertuÄru ..."
+
+#~ msgid "Refresh"
+#~ msgstr "AtsvaidzinÄt"
+
+#~ msgid "Refresh Selected"
+#~ msgstr "AtsvaidzinÄt iezÄ«mÄ“tos"
+
+#~ msgid "Refreshes metadata associated with selected entries."
+#~ msgstr "Atsvaidzina ar izvÄ“lÄ“to repertuÄra ierakstu saistÄ«tos metadatus."
+
+#~ msgid "Edit title"
+#~ msgstr "Rediģēt nosaukumu"
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "Rediģē repertuÄra nosaukumu."
+
+#~ msgid "By Formatted Title"
+#~ msgstr "PÄ“c formatÄ“tÄ nosaukuma"
+
+#~ msgid "Components"
+#~ msgstr "Komponentes"
+
+#~ msgid "Upload selected track(s)"
+#~ msgstr "AugÅ¡upielÄdÄ“t izvÄ“lÄ“to celiņu(s)"
+
+#~ msgid "MTP device handler"
+#~ msgstr "MTP ierÄ«ces apstrÄdÄtÄjs"
+
+#~ msgid "Show main player window"
+#~ msgstr "RÄdÄ«t galveno atskaņotÄja logu"
+
+#~ msgid "Ignore"
+#~ msgstr "Ignorēt"
+
+#~ msgid ""
+#~ "Audacious has been started with all of its windows hidden.\n"
+#~ "You may want to show the player window again to control Audacious; "
+#~ "otherwise, you'll have to control it remotely via audtool or enabled "
+#~ "plugins (such as the statusicon plugin)."
+#~ msgstr ""
+#~ "Audacious startÄ“jÄs, visiem logiem esot slÄ“ptÄ stÄvoklÄ«.\n"
+#~ "Jūs, iespējams, vēlaties logus atkal padarīt redzamus, lai kontrolētu "
+#~ "Audacious. Ja nÄ“, jums nÄksies to kontrolÄ“t attÄlinÄti ar 'audtool' vai "
+#~ "spraudņu (piemēram, sistēmjoslas ikonas spraudņa) palīdzību."
+
+#~ msgid "Always ignore, show/hide is controlled remotely"
+#~ msgstr "VienmÄ“r ignorÄ“t, rÄdÄ«t/slÄ“pt tiek kontrolÄ“ts attÄlinÄti"
+
+#~ msgid "Audacious - broken GTK engine usage warning"
+#~ msgstr "Audacious - salauzta GTK dzinÄ“ja izmantoÅ¡anas brÄ«dinÄjums"
+
+#~ msgid ""
+#~ "<big><b>Broken GTK engine in use</b></big>\n"
+#~ "\n"
+#~ "Audacious has detected that you are using a broken GTK engine.\n"
+#~ "\n"
+#~ "The theme engine you are using, <i>%s</i>, is incompatible with some of "
+#~ "the features used by modern skins. The incompatible features have been "
+#~ "disabled for this session.\n"
+#~ "\n"
+#~ "To use these features, please consider using a different GTK theme engine."
+#~ msgstr ""
+#~ "<big><b>Tiek izmantots salauzts GTK dzinējs</b></big>\n"
+#~ "\n"
+#~ "Audacious atklÄja, ka jÅ«s izmantojat salauztu GTK dzinÄ“ju.\n"
+#~ "\n"
+#~ "TÄ“mu dzinÄ“js, ko izmantojat, <i>%s</i>, nav savietojams ar dažÄm moderno "
+#~ "spraudņu iespÄ“jÄm. NesavietojamÄs iespÄ“jas Å¡Ä«s sesijas laikÄ ir "
+#~ "atslēgtas.\n"
+#~ "\n"
+#~ "Lai izmantotu šīs iespējas, lūdzu, izmantojiet citu GTK tēmu dzinēju."
+
+#~ msgid "Do not display this warning again"
+#~ msgstr "Vairs nerÄdÄ«t Å¡o brÄ«dinÄjumu"
+
+#~ msgid "Save as Static Playlist"
+#~ msgstr "SaglabÄt kÄ statisko repertuÄru"
+
+#~ msgid "Use Relative Path"
+#~ msgstr "Izmantot relatīvo ceļu"
+
+#~ msgid "Load Playlist"
+#~ msgstr "IelÄdÄ“t repertuÄru"
+
+#~ msgid "Save Playlist"
+#~ msgstr "SaglabÄt repertuÄru"
+
+#~ msgid "Skinned Interface"
+#~ msgstr "ApdarinÄtÄ saskarne"
+
+#~ msgid "%s: %d kbps, %d Hz, %s"
+#~ msgstr "%s: %d kbps, %d Hz, %s"
+
+#~ msgid ""
+#~ "* Select ALSA output ports *\n"
+#~ "MIDI events will be sent to the ports selected here. In example, if your "
+#~ "audio card provides a hardware synth and you want to play MIDI with it, "
+#~ "you'll probably want to select the wavetable synthesizer ports."
+#~ msgstr ""
+#~ "* Izvēlieties ALSA izvades portus *\n"
+#~ "MIDI notikumi tiks sūtīti uz šeit izvēlētajiem portiem. Piemēram, ja jūsu "
+#~ "skaņas karte ir aprīkota ar sintezatoru aparatūras līmenī un jūs vēlaties "
+#~ "ar to atskaņot MIDI, tad, jums vajadzētu šeit izvēlēties viļņtabulas "
+#~ "sintezatora portus."
+
+#~ msgid ""
+#~ "* Select ALSA mixer card *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volumeslider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Izvēlieties ALSA mikseri *\n"
+#~ "ALSA aizmugure padod izvadi tieÅ¡i caur ALSA, tÄ neizmanto efektu un "
+#~ "izvades spraudņus no atskaņotÄja. AtskaņoÅ¡anas laikÄ atskaņotÄja skaļuma "
+#~ "regulators manipulēs ar to miksera vadīklu, ko izvēlēsieties šeit. Ja "
+#~ "izmantojat viļņtabulas sintezatora portus, jums vajadzētu šeit izvēlēties "
+#~ "Synth vadīklu."
+
+#~ msgid ""
+#~ "* Select ALSA mixer control *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volume slider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* Izvēlieties ALSA miksera vadīklu *\n"
+#~ "ALSA aizmugure padod izvadi tieÅ¡i caur ALSA, tÄ neizmanto efektu un "
+#~ "izvades spraudņus no atskaņotÄja. AtskaņoÅ¡anas laikÄ atskaņotÄja skaļuma "
+#~ "regulators manipulēs ar to miksera vadīklu, ko izvēlēsieties šeit. Ja "
+#~ "izmantojat viļņtabulas sintezatora portus, jums vajadzētu šeit izvēlēties "
+#~ "Synth vadīklu."
+
+#~ msgid ""
+#~ "* Backend selection *\n"
+#~ "AMIDI-Plug works with backends, in a modular fashion; here you should "
+#~ "select your backend; that is, the way MIDI events are going to be handled "
+#~ "and played.\n"
+#~ "If you have a hardware synthesizer on your audio card, and ALSA supports "
+#~ "it, you'll want to use the ALSA backend. It can also be used with "
+#~ "anything that provides an interface to the ALSA sequencer, including "
+#~ "software synths or external devices.\n"
+#~ "If you want to rely on a software synthesizer and/or want to pipe audio "
+#~ "into effect and output plugins of the player you'll want to use the good "
+#~ "FluidSynth backend.\n"
+#~ "Press the info button to read specific information about each backend."
+#~ msgstr ""
+#~ "* Aizmugures izvēle *\n"
+#~ "AMIDI-Plug darbojas ar aizmugurÄ“m, modulÄrÄ veidÄ. Å eit jums jÄizvÄ“las "
+#~ "aizmugure, t.i., veids, kÄdÄ MIDI notikumi tiks apstrÄdÄti un atskaņoti.\n"
+#~ "Ja jūsu skaņas kartei ir ALSA atbalstīts aparatūras sintezators, jūs "
+#~ "vÄ“lÄ“sieties izmantot ALSA aizmuguri. TÄ arÄ« var tikt izmantota ar jebko, "
+#~ "kas nodrošina saskarni ALSA sekvencerim, ieskaitot programmatūras "
+#~ "sintezatorus vai ÄrÄ“jas ierÄ«ces.\n"
+#~ "Ja vēlaties izmantot programmatūras sintezatoru un/vai vēlaties ievadīt "
+#~ "skaņu atskaņotÄja efektu un izvades spraudņos, jÅ«s vÄ“lÄ“sieties izmantot "
+#~ "labu FluidSynth aizmuguri.\n"
+#~ "Nospiediet informÄcijas pogu, lai saņemtu specifisku informÄciju par "
+#~ "katru aizmuguri."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Transpose function *\n"
+#~ "This option allows you to play the midi file transposed in a different "
+#~ "key, by shifting of the desired number of semitones all its notes "
+#~ "(excepting those on midi channel 10, reserved for percussions). "
+#~ "Especially useful if you wish to sing or play along with another "
+#~ "instrument."
+#~ msgstr ""
+#~ "* PÄrlikÅ¡anas funkcija *\n"
+#~ "Å Ä« opcija ļauj jums atskaņot pÄrveidotu midi failu, pÄrbÄ«dot par vÄ“lamo "
+#~ "skaitu pustoņu visas tÄ notis (izņemot notis 10. midi kanÄlÄ, kas "
+#~ "rezervÄ“ts perkusijÄm). Tas ir Ä«paÅ¡i noderÄ«gi, ja vÄ“laties dziedÄt vai "
+#~ "spēlēt līdz ar citu instrumentu."
+
+#~ msgid ""
+#~ "* Drumshift function *\n"
+#~ "This option allows you to shift notes on midi channel 10 (the standard "
+#~ "percussions channel) of the desired number of semitones. This results in "
+#~ "different drumset and percussions being used during midi playback, so if "
+#~ "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
+#~ "with this value."
+#~ msgstr ""
+#~ "* Bungu pÄrbÄ«des funkcija *\n"
+#~ "Å Ä« opcija ļauj jums pÄrbÄ«dÄ«t notis 10. midi kanÄlÄ (standarta perkusiju "
+#~ "kanÄls) par vÄ“lamo skaitu pustoņu. RezultÄtÄ midi atskaņoÅ¡anas laikÄ tiks "
+#~ "izmantotas atÅ¡Ä·irÄ«gas bungu un perkusiju skaņas. TÄtad, ja vÄ“laties "
+#~ "mainīt perkusiju skaņas, mēģiniet paeksperimentēt ar šo vērtību."
+
+#~ msgid ""
+#~ "* Pre-calculate MIDI length *\n"
+#~ "If this option is enabled, AMIDI-Plug will calculate the MIDI file length "
+#~ "as soon as the player requests it, instead of doing that only when the "
+#~ "MIDI file is being played. In example, MIDI length will be calculated "
+#~ "straight after adding MIDI files in a playlist. Disable this option if "
+#~ "you want faster playlist loading (when a lot of MIDI files are added), "
+#~ "enable it to display more information in the playlist straight after "
+#~ "loading."
+#~ msgstr ""
+#~ "* AprÄ“Ä·inÄt MIDI garumus iepriekÅ¡ *\n"
+#~ "Ja Å¡Ä« opcija ir ieslÄ“gta, AMIDI-Plug aprÄ“Ä·inÄs MIDI faila garumu, tiklÄ«dz "
+#~ "atskaņotÄjs to pieprasa, nevis faila atskaņoÅ¡anas laikÄ. PiemÄ“ram, MIDI "
+#~ "garums tiks aprÄ“Ä·inÄts uzreiz pÄ“c to pievienoÅ¡anas repertuÄram. "
+#~ "IzslÄ“dziet Å¡o opciju, ja vÄ“laties ÄtrÄku repertuÄra ielÄdi (pievienojot "
+#~ "daudz MIDI failu), bet ieslÄ“dziet, lai repertuÄrÄ tiktu attÄ“lots vairÄk "
+#~ "informÄcijas uzreiz pÄ“c failu ielÄdÄ“Å¡anas."
+
+#~ msgid ""
+#~ "* Extract comments from MIDI files *\n"
+#~ "Some MIDI files contain text comments (author, copyright, instrument "
+#~ "notes, etc.). If this option is enabled, AMIDI-Plug will extract and "
+#~ "display comments (if available) in the file information dialog."
+#~ msgstr ""
+#~ "* Izvilkt komentÄrus no MIDI failiem *\n"
+#~ "DažkÄrt MIDI faili satur teksta komentÄrus (autors, autortiesÄ«bas, "
+#~ "instrumentu notis, u.t.t.). Ja šī opcija ir ieslēgta, AMIDI-Plug izvilks "
+#~ "un attÄ“los komentÄrus (ja pieejami) faila informÄcijas dialogÄ."
+
+#~ msgid ""
+#~ "* Extract lyrics from MIDI files *\n"
+#~ "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-"
+#~ "Plug will extract and display song lyrics (if available) in the file "
+#~ "information dialog."
+#~ msgstr ""
+#~ "* Izvilkt dziesmu vÄrdu tekstus no MIDI failiem *\n"
+#~ "DažkÄrt MIDI faili satur dziesmu vÄrdu tekstus. Ja Å¡Ä« opcija ir ieslÄ“gta, "
+#~ "AMIDI-Plug izvilks un attÄ“los dziesmu vÄrdu tekstus (ja pieejami) faila "
+#~ "informÄcijas dialogÄ."
+
+#~ msgid ""
+#~ "* Select SoundFont files *\n"
+#~ "In order to play MIDI with FluidSynth, you need to specify at least one "
+#~ "valid SoundFont file here (use absolute paths). The loading order is from "
+#~ "the top (first) to the bottom (last)."
+#~ msgstr ""
+#~ "* Izvēlieties SoundFont failus *\n"
+#~ "Lai atskaņotu MIDI failus ar FluidSynth, jums Å¡eit jÄnorÄda vismaz viens "
+#~ "derÄ«gs SoundFont fails (lietojiet absolÅ«tos ceļus). IelÄdÄ“Å¡anas kÄrtÄ«ba "
+#~ "ir no augšas (pirmais) uz apakšu (pēdējais)."
+
+#~ msgid ""
+#~ "* Load SoundFont on player start *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* IelÄdÄ“t SoundFont palaižot atskaņotÄju *\n"
+#~ "AtkarÄ«bÄ no jÅ«su sistÄ“mas Ätruma, SoundFont ielÄdÄ“Å¡ana FluidSynth ilgs "
+#~ "lÄ«dz pat dažÄm sekundÄ“m. Å is ir vienreizÄ“js uzdevums (SoundFont paliks "
+#~ "ielÄdÄ“ts lÄ«dz tas tiks mainÄ«ts vai arÄ« tiks izlÄdÄ“ta aizmugure), ko var "
+#~ "izpildÄ«t, palaižot programmu vai pirms pirmÄ MIDI faila atskaņoÅ¡anas "
+#~ "(pÄ“dÄ“jÄ ir labÄka izvÄ“le, ja neizmantojat atskaņotÄju tikai MIDI failu "
+#~ "atskaņošanai)."
+
+#~ msgid ""
+#~ "* Load SoundFont on first midifile play *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* IelÄdÄ“t SoundFont, pirmoreiz atskaņojot MIDI failu *\n"
+#~ "AtkarÄ«bÄ no jÅ«su sistÄ“mas Ätruma, SoundFont ielÄdÄ“Å¡ana FluidSynth ilgs "
+#~ "lÄ«dz pat dažÄm sekundÄ“m. Å is ir vienreizÄ“js uzdevums (SoundFont paliks "
+#~ "ielÄdÄ“ts lÄ«dz tas tiks mainÄ«ts vai arÄ« tiks izlÄdÄ“ta aizmugure), ko var "
+#~ "izpildÄ«t, palaižot programmu vai pirms pirmÄ MIDI faila atskaņoÅ¡anas "
+#~ "(pÄ“dÄ“jÄ ir labÄka izvÄ“le, ja neizmantojat atskaņotÄju tikai MIDI failu "
+#~ "atskaņošanai)."
+
+#~ msgid ""
+#~ "* Synthesizer gain *\n"
+#~ "From FluidSynth docs: the gain is applied to the final or master output "
+#~ "of the synthesizer; it is set to a low value by default to avoid the "
+#~ "saturation of the output when random MIDI files are played."
+#~ msgstr ""
+#~ "* Sintezatora pastiprinÄjums *\n"
+#~ "No FluidSynth dokumentÄcijas: pastiprinÄjums tiek attiecinÄts uz "
+#~ "sintezatora gala izvadi. PÄ“c noklusÄ“juma tam ir uzstÄdÄ«ta zema vÄ“rtÄ«ba, "
+#~ "lai izvairÄ«tos no izvades piesÄtinÄtÄ«bas, kad tiek atskaņoti gadÄ«juma "
+#~ "MIDI faili."
+
+#~ msgid ""
+#~ "* Synthesizer polyphony *\n"
+#~ "From FluidSynth docs: the polyphony defines how many voices can be played "
+#~ "in parallel; the number of voices is not necessarily equivalent to the "
+#~ "number of notes played simultaneously; indeed, when a note is struck on a "
+#~ "specific MIDI channel, the preset on that channel may create several "
+#~ "voices, for example, one for the left audio channel and one for the right "
+#~ "audio channels; the number of voices activated depends on the number of "
+#~ "instrument zones that fall in the correspond to the velocity and key of "
+#~ "the played note."
+#~ msgstr ""
+#~ "* Sintezatora polifonija *\n"
+#~ "No FluidSynth dokumentÄcijas: polifonija nosaka, cik balsu var tikt "
+#~ "atskaņots paralÄ“li. Balsu skaitam nav noteikti jÄbÅ«t vienÄdam ar "
+#~ "vienlaikus atskaņoto nošu skaitu. Patiesi, kad nots tiek atskaņota "
+#~ "noteiktÄ MIDI kanÄlÄ, Å¡Ä« kanÄla uzstÄdÄ«jumi var izveidot vairÄkas balsis, "
+#~ "piemÄ“ram, vienu kreisajam, bet otru labajam audio kanÄlam. AktivizÄ“to "
+#~ "balsu skaits ir atkarÄ«gs no instrumentu zonu skaita, kas iekrÄ«t Ätruma "
+#~ "atbilstÄ«bÄ, un atskaņotÄs nots taustiņa."
+
+#~ msgid ""
+#~ "* Synthesizer reverb *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
+#~ "activated; note that when the reverb module is active, the amount of "
+#~ "signal sent to the reverb module depends on the \"reverb send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Sintezatora atbalss *\n"
+#~ "No FluidSynth dokumentÄcijas: kad uzstÄdÄ«ts uz \"jÄ\", tiek "
+#~ "aktivizētsatbalss efektu modulis. Ievērojiet - tad, kad atbalss modulis "
+#~ "ir aktÄ«vs, uz atbalss moduli nosÅ«tÄ«tais signÄlu daudzums ir atkarÄ«gs no "
+#~ "\"nosÅ«tÄ«tÄ atbalss\" Ä£eneratora, kas definÄ“ts SoundFont."
+
+#~ msgid ""
+#~ "* Synthesizer chorus *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
+#~ "activated; note that when the chorus module is active, the amount of "
+#~ "signal sent to the chorus module depends on the \"chorus send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Sintezatora koris *\n"
+#~ "No FluidSynth dokumentÄcijas: kad uzstÄdÄ«ts uz \"jÄ\", tiek "
+#~ "aktivizētskora efektu modulis. Ievērojiet - tad, kad kora modulis ir "
+#~ "aktÄ«vs, uz kora moduli nosÅ«tÄ«tais signÄlu daudzums ir atkarÄ«gs no "
+#~ "\"nosūtītais koris\" ģeneratora, kas definēts SoundFont."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Synthesizer samplerate *\n"
+#~ "The sample rate of the audio generated by the synthesizer. You can also "
+#~ "specify a custom value in the interval 22050Hz-96000Hz."
+#~ msgstr ""
+#~ "* Sintezatora iztveršanas temps *\n"
+#~ "Sintezatora Ä£enerÄ“tais audio iztverÅ¡anas temps. Varat norÄdÄ«t arÄ« "
+#~ "pielÄgotu vÄ“rtÄ«bu intervÄlÄ 22050Hz-96000Hz.\n"
+#~ "Piezīme: noklusētie bufera parametri ir noregulēti 44100Hz tempam. Mainot "
+#~ "iztveršanas tempu, iespējams, būs nepieciešama bufera parametru "
+#~ "regulÄ“Å¡ana, lai iegÅ«tu labu skaņas kvalitÄti."
+
+#~ msgid ""
+#~ "If enabled, the extension from the original filename will not be stripped "
+#~ "before adding the new file extension to the end."
+#~ msgstr ""
+#~ "Ja ieslÄ“gts, paplaÅ¡inÄjums no oriÄ£inÄlÄ faila nosaukuma netiks atmests "
+#~ "pirms jaunÄ faila paplaÅ¡inÄjuma pievienoÅ¡anas beigÄs."
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "labÄkais/lÄ“nÄkais:0;\n"
+#~ "sliktÄkais/ÄtrÄkais:9;\n"
+#~ "rekomendētais:2;\n"
+#~ "noklusētais:5;"
+
+#~ msgid "Adds 16 bit checksum to every frame"
+#~ msgstr "Pievieno 16 bitu kontrolsummu katram kadram"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "MainÄ«gs bitÄtrums"
+
+#~ msgid "Average bitrate"
+#~ msgstr "VidÄ“jais bitÄtrums"
+
+#~ msgid ""
+#~ "For use with players that do not support low bitrate mp3 (Apex AD600-A "
+#~ "DVD/mp3 player)"
+#~ msgstr ""
+#~ "IzmantoÅ¡anai ar atskaņotÄjiem, kas neatbalsta zema bitÄtruma mp3 (Apex "
+#~ "AD600-A DVD/mp3 atskaņotÄjs)"
+
+#~ msgid ""
+#~ "highest:0;\n"
+#~ "lowest:9;\n"
+#~ "default:4;"
+#~ msgstr ""
+#~ "augstÄkais:0;\n"
+#~ "zemÄkais:9;\n"
+#~ "noklusētais:4;"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "RÄdÄ«t repertuÄra redaktoru"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "SaglabÄt repertuÄru"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "Par Sun dzini"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "XMMS BSD Sun dzinis\n"
+#~ "\n"
+#~ "Autortiesības (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "UzturÄ“tÄjs: <vedge at csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "Audio vadības ierīce:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Bufera izmērs (ms):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "Skaļuma vadības ierīce:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "XMMS izmanto tikai mikseri."
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Sun dziņa konfigurÄcija"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "Mainīt skaļumu"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Efekta intensitÄte:"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "FLAC audio spraudnis"
+
+#~ msgid "Stream browser"
+#~ msgstr "PlÅ«smu pÄrlÅ«ks"
+
+#~ msgid "Streambrowser"
+#~ msgstr "PlÅ«smu pÄrlÅ«ks"
+
#~ msgid "PREAMP"
#~ msgstr "PRIEKÅ PASTIPRINÄ€T"
@@ -5970,12 +5938,6 @@ msgstr ""
#~ "\n"
#~ "NezinÄms faila tips '%s'.\n"
-#~ msgid "Randomize List"
-#~ msgstr "Sajaukt repertuÄru"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Sajauc repertuÄra ierakstu atskaņoÅ¡anas kÄrtÄ«bu."
-
#~ msgid "ALSA Gapless Output Plugin Preferences"
#~ msgstr "ALSA bezstarplaiku spraudņa iestatījumi"
@@ -6422,9 +6384,6 @@ msgstr ""
#~ msgid "Reopen"
#~ msgstr "AtvÄ“rt atkÄrtoti"
-#~ msgid "Length (ms):"
-#~ msgstr "Ilgums (ms):"
-
#~ msgid ""
#~ "Specify the length of the silence to be inserted between the tracks.\n"
#~ "Default: 2000"
@@ -6852,9 +6811,6 @@ msgstr ""
#~ msgid "Entries"
#~ msgstr "Ieraksti"
-#~ msgid "_Rename"
-#~ msgstr "PÄ_rdÄ“vÄ“t"
-
#~ msgid "About Icecast-Plugin"
#~ msgstr "Par Icecast spraudni"
@@ -7215,21 +7171,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "Nosaukums:"
-#~ msgid "Artist:"
-#~ msgstr "IzpildÄ«tÄjs:"
-
-#~ msgid "Album:"
-#~ msgstr "Albums:"
-
#~ msgid "Comment:"
#~ msgstr "KomentÄrs:"
-#~ msgid "Year:"
-#~ msgstr "Gads:"
-
-#~ msgid "Track number:"
-#~ msgstr "Celiņa numurs:"
-
#~ msgid "Genre:"
#~ msgstr "Žanrs:"
@@ -7475,9 +7419,6 @@ msgstr ""
#~ msgid "Musepack Tag"
#~ msgstr "Musepack birka"
-#~ msgid "Track:"
-#~ msgstr "Celiņš:"
-
#~ msgid "Musepack Info"
#~ msgstr "Musepack info"
diff --git a/po/pl.po b/po/pl.po
index 6191c87..81ee78a 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,24 +1,26 @@
-# Polish translation for audacious
-# Copyright (C) 2010, Szymon Weihs <sz.weihs@gmail.com>
-# This file is distributed under the same license as the audacious package.
-# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-# Szymon Weihs <sz.weihs@gmail.com>, 2010.
+# Polish translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
#
-
+# Translators:
+# Piotr Sokół <psokol@jabster.pl>, 2012.
+# <sz.weihs@gmail.com>, 2011.
+# Szymon Weihs <sz.weihs@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: Audacious Plugins\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 18:09-0400\n"
-"PO-Revision-Date: 2010-08-16 11:48+0200\n"
-"Last-Translator: Szymon Weihs <sz.weihs@gmail.com>\n"
-"Language-Team: \n"
-"Language: \n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-16 21:02+0000\n"
+"Last-Translator: Piotr Sokół <psokol@jabster.pl>\n"
+"Language-Team: Polish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -29,456 +31,174 @@ msgstr ""
"Dekoder FAAD2 AAC/HE-AAC/HE-AACv2/DRM (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 Zespół Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "O wtyczce dekodera MP4 AAC"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "O programie"
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "O wtyczce Alarm"
-#: src/adplug/adplug-xmms.cc:157
+#: src/alarm/alarm.c:313
msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Ta wtyczka została wydana na zasadach licencji GNU LGPL.\n"
-"Zobacz http://www.gnu.org/licenses/lgpl.html .\n"
-"\n"
-"Ten plugin używa biblioteki AdPlug - Copyright (C) Simon Peter, et "
-"al.\n"
-"Podłączona wersja biblioteki AdPlug: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Konfiguracja"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Ok"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Anuluj"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Ogólne"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Jakość dźwięku"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Rozdzielczość"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16bit"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Kanały"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Nie należy wybierać opcji Stereo, jeśli nie jest to konieczne. Nie poprawi "
-"to wcale jakości dźwięku - OPL2 obsługuje tylko mono - ale będzie zużywac "
-"większą ilość mocy obliczeniowej procesora!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Częstotliwość"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Odtwarzanie"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Wykryj koniec utworu"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Gdy włączone, XMMS wykrywa koniec utworu, zatrzymuje go i przeskakuje "
-"do następnego na liście. Gdy wyłączone, XMMS nie rozpoznaje zakończenia "
-"utworu i powtarza go w nieskończoność."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formaty"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Wybór formatu"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Format"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Rozszerzenie"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-"Wybrane typy plików zostaną rozpoznane i odtworzone przy pomocy tej wtyczki. "
-"Odznaczone formaty zostaną zignorowane, aby umożliwić innym pluginom ich "
-"odtworzenie."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Informacja o pliku"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Nazwa pliku"
+"Wtyczka, która może być użyta do rozpoczęcia odtwarzania o ustalonym czasie.\n"
+"Pierwotnie stworzona przez Adam Feaking oraz Daniel Stodden."
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Tytuł: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Typ pliku: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Teksty: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumenty: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Kolejność: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Wzory: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Utwór"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Nazwa instrumentu"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Informacja"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Wybór tekstu"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Kolejność: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Wzór: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Linia: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Szybkość: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Czas: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "O wtyczce Alarm XMMS"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "Alarm XMMS"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"Wtyczka XMMS, która może zostać użyta\n"
-"do rozpoczęcia odtwarzania o określonej porze.\n"
-"\n"
-"Wszelkie uwagi należy zgłaszać do:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Zamknij"
-
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
msgstr "Budzik"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
msgstr "To jest twój sygnał budzenia."
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "OK"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Wybierz listÄ™ odtwarzania"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Przepraszam"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Ostrzeżenie"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Z powodów bezpieczeństwa czas \"ciszy\" powinien być przynajmniej "
-"o 65 sekund dłuższy od czasu wyciszania, musi być także dłuższy niż "
-"10 sekund. Jest to spowodowane bugiem w kodzie wtyczki, więc do czasu "
-"jego naprawienia będzie pojawiał się ten komunikat :)"
-"\n"
-"Twoje ustawienia wyciszania NIE zostały zapisane\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "No dobrze... :)"
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
msgstr "Ustawienia budzika"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "Czas"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
msgstr "godziny"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
msgstr "h"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
msgstr "minuty"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
msgstr "Wycisz po:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
msgstr "Alarm o (domyślnie):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
msgstr "Wybierz dni, w których budzik zostanie uruchomiony"
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr "Domyślnie"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Dzień"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Wtorek"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Åšroda"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Czwartek"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "PiÄ…tek"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Sobota"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Niedziela"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Poniedziałek"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Dni"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
msgstr "Czas przejścia"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "sekundy"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Głośność"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "Aktualny"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "zresetuj do bieżącej głośności wyjścia"
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
msgstr "Rozpocznij od"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr "Końcowa głośność"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
msgstr "Dodatkowe komendy"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
msgstr "włącz"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
msgstr "Playlista (opcjonalnie)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr "PrzeglÄ…daj..."
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
msgstr "Przypominacz"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
msgstr "Użyj przypominacza"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Opcje"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
msgstr "Co oznaczajÄ… te opcje?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -583,24 +303,29 @@ msgstr ""
" Wpisz w podane pole treść komunkatu i zaznacz odpowiednią\n"
" opcję, jeśli chcesz, aby było ono pokazywane..\n"
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Pomoc"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
msgstr "Powiadomienie na dzisiaj to..."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "Dziękuję"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "Domyślne urządzenie PCM"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Domyślne urządzenie miksera"
@@ -612,7 +337,7 @@ msgstr "Preferencje wtyczki wyjściowej ALSA"
msgid "PCM device:"
msgstr "UrzÄ…dzenie PCM:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "UrzÄ…dzenie miksera:"
@@ -624,494 +349,339 @@ msgstr "Element miksera:"
msgid "Work around drain hangup"
msgstr "Obejście rozłączania"
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "O wtyczce wyjściowej ALSA"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "BÅ‚Ä…d ALSA"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
msgstr ""
-"Nie wybrałeś żadnych portów sequencera dla odtwarzania MIDI. Możesz to "
+"Nie wybrałeś żadnych portów sekwencera dla odtwarzania MIDI. Możesz to "
"zrobić w opcjach wtyczki MIDI."
#: src/amidi-plug/backend-alsa/b-alsa.c:35
msgid "ALSA Backend "
-msgstr ""
+msgstr "ALSA Backend"
#: src/amidi-plug/backend-alsa/b-alsa.c:37
msgid ""
-"This backend sends MIDI events to a group of user-chosen ALSA sequencer "
-"ports. The ALSA sequencer interface is very versatile, it can provide ports "
-"for audio cards hardware synthesizers (i.e. emu10k1) but also for software "
-"synths, external devices, etc.\n"
-"This backend does not produce audio, MIDI events are handled directly from "
-"devices/programs behind the ALSA ports; in example, MIDI events sent to the "
-"hardware synth will be directly played.\n"
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"Ten backend wysyła zdarzenia MIDI do grupy wybranych przez użytkownika portów sekwencera ALSA. Interfejs sekwencera ALSA jest bardzo wszechstronny, może on dostarczyć porty dla sprzętowych syntezatorów kart dźwiękowych (np. emu10k1), a także dla programowych syntezatorów, zewnętrznych urządzeń itp.\n"
+"Ten backend nie wytwarza dźwięku, zdarzenia MIDI są obsługiwane bezpośrednio przez urządzenia/programy poprzez porty ALSA; na przykład, zdarzenia MIDI wysłane do sprzętowego syntezatora zostaną bezpośrednio odtworzone.\n"
+"Backend napisany przez Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
-msgstr ""
+msgstr "FluidSynth Backend"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
-"This backend produces audio by sending MIDI events to FluidSynth, a real-"
-"time software synthesizer based on the SoundFont2 specification (www."
-"fluidsynth.org).\n"
-"Produced audio can be manipulated via player effect plugins and is processed "
-"by chosen ouput plugin.\n"
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"Ten backend wytwarza dźwięk poprzez wysyłanie zdarzeń MIDI do FluidSynth, programowego syntezatora czasu rzeczywistego opartego na specyfikacji SoundFont2 (www.fluidsynth.org).\n"
+"Wytworzony dźwięk może być modyfikowany przez wtyczki efektów odtwarzacza i jest przetwarzany przez wybraną wtyczkę wyjściową.\n"
+"Backend napisany przez Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
-msgstr ""
+msgstr "KONFIGURACJA BACKEND'U ALSA"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
-msgstr ""
+msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
-msgstr ""
+msgstr "Nazwa klienta"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
-msgstr ""
+msgstr "Nazwa portu"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
-msgstr ""
+msgstr "Porty wyjściowe ALSA"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
-msgstr ""
+msgstr "Karta dźwiękowa: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
-msgstr ""
+msgstr "Kontroler miksera: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
+msgstr "Ustawienia miksera"
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
-msgstr ""
+msgstr "Backend ALSA niezaładowany lub niedostępny"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">Backend\n"
+"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
-msgstr ""
+msgstr "AMIDI-Plug - informacje o backendzie"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
-msgstr ""
+msgstr "PREFERENCJE AMIDI-PLUG"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
-msgstr ""
+msgstr "Wybór backendu"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
-msgstr ""
+msgstr "Dostępne backendy"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
-msgstr ""
+msgstr "Ustawienia odtwarzania"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
-msgstr ""
+msgstr "Transpozycja: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
-msgstr ""
+msgstr "Zmiany bębnów: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
-msgstr ""
+msgstr "Zaawansowane ustawienia"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
-msgstr ""
+msgstr "oblicz wstępnie długości plików MIDI z playlisty"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
-msgstr ""
+msgstr "wyodrębnij komentarze z pliku MIDI (jeśli dostępne)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
+msgstr "wyodrębnij słowa piosenki z pliku MIDI (jeśli dostępne)"
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
-msgstr ""
+msgstr "AMIDI-Plug - wybierz plik"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
-msgstr ""
+msgstr "AMIDI-Plug - konfiguracja"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
-msgstr ""
+msgstr "AMIDI-Plug - wybierz plik SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
-msgstr ""
+msgstr "KONFIGURACJA BACKEND'U FLUIDSYNTH"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
-msgstr ""
+msgstr "Ustawienia SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Nazwa pliku"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
-msgstr ""
+msgstr "Wielkość (w bajtach)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
-msgstr ""
+msgstr "Załaduj SF przy starcie odtwarzacza"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
-msgstr ""
+msgstr "Załaduj SF przy pierwszym odtwarzaniu pliku mid"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
-msgstr ""
+msgstr "Ustawienia syntezatora"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
-msgstr ""
+msgstr "wzmocnienie"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
-msgstr ""
+msgstr "użyj domyślnej"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
-msgstr ""
+msgstr "wartość:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
-msgstr ""
+msgstr "polifonia"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
-msgstr ""
+msgstr "pogłos"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
-msgstr ""
+msgstr "tak"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
-msgstr ""
+msgstr "nie"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
-msgstr ""
+msgstr "chór"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
-msgstr ""
+msgstr "częstotliwość próbkowania"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
-msgstr ""
+msgstr "22050 Hz"
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
-msgstr ""
+msgstr "44100 Hz"
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
-msgstr ""
+msgstr "96000 Hz"
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
-msgstr ""
+msgstr "własna"
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
-msgstr ""
+msgstr "Hz"
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
-msgstr ""
+msgstr "Backend FluidSynth niezaładowany lub niedostępny"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">Backend\n"
+"FluidSynth</span>"
#: src/amidi-plug/i_configure-timidity.c:39
msgid "TIMIDITY BACKEND CONFIGURATION"
-msgstr ""
+msgstr "KONFIGURACJA BACKEND'U TIMIDITY"
#: src/amidi-plug/i_configure-timidity.c:64
msgid "TiMidity Backend not loaded or not available"
-msgstr ""
+msgstr "Backend TiMidity niezaładowany lub niedostępny"
#: src/amidi-plug/i_configure-timidity.c:83
msgid ""
"<span size=\"smaller\">TiMidity\n"
"backend</span>"
msgstr ""
+"<span size=\"smaller\">Backend\n"
+"TiMidity</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
-msgstr ""
+msgstr "Nazwa:"
#: src/amidi-plug/i_fileinfo.c:193
msgid "<span size=\"smaller\"> MIDI Info </span>"
-msgstr ""
+msgstr "<span size=\"smaller\"> Info MIDI </span>"
#: src/amidi-plug/i_fileinfo.c:205
msgid "Format:"
-msgstr ""
+msgstr "Format:"
#: src/amidi-plug/i_fileinfo.c:208
msgid "Length (msec):"
-msgstr ""
+msgstr "Długość (msek):"
#: src/amidi-plug/i_fileinfo.c:211
msgid "Num of Tracks:"
-msgstr ""
+msgstr "Liczba utworów"
#: src/amidi-plug/i_fileinfo.c:216
msgid "variable"
-msgstr ""
+msgstr "zmienna"
#: src/amidi-plug/i_fileinfo.c:217
msgid "BPM:"
-msgstr ""
+msgstr "BPM:"
#: src/amidi-plug/i_fileinfo.c:223
msgid "BPM (wavg):"
-msgstr ""
+msgstr "BPM (wavg):"
#: src/amidi-plug/i_fileinfo.c:226
msgid "Time Div:"
-msgstr ""
+msgstr "Podział czasu:"
#: src/amidi-plug/i_fileinfo.c:237
msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
-msgstr ""
+msgstr "<span size=\"smaller\"> Komentarze i teksty piosenek MIDI </span>"
#: src/amidi-plug/i_fileinfo.c:288
msgid "* no comments available in this MIDI file *"
-msgstr ""
+msgstr "* brak dostępnych komentarzy w tym pliku MIDI"
#: src/amidi-plug/i_fileinfo.c:301
msgid "* no lyrics available in this MIDI file *"
-msgstr ""
+msgstr "* brak dostępnych tekstów piosenek w tym pliku MIDI"
#: src/amidi-plug/i_fileinfo.c:349
msgid " (invalid UTF-8)"
-msgstr ""
+msgstr " (invalid UTF-8)"
#: src/amidi-plug/i_utils.c:43
msgid "AMIDI-Plug - about"
-msgstr ""
+msgstr "O wtyczce AMIDI-Plug"
#: src/amidi-plug/i_utils.c:68
msgid ""
"\n"
"AMIDI-Plug "
msgstr ""
+"\n"
+"AMIDI-Plug "
#: src/amidi-plug/i_utils.c:69
msgid ""
@@ -1137,6 +707,27 @@ msgid ""
"for the good help with alpha testing\n"
"\n"
msgstr ""
+"\n"
+"modułowy odtwarzacz muzyczny MIDI\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"stworzony przez Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"specjalne podziękowania dla...\n"
+"\n"
+"Clemens Ladisch oraz Jaroslav Kysela\n"
+"za ich fajne programy aplaymidi i amixer; były one\n"
+"bardzo przydatne, równolegle z dokumentacją alsa-lib,\n"
+"w nauce ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"za Å‚adne logo z klawiaturÄ… midi\n"
+"\n"
+"Tony Vroon\n"
+"za dobrÄ… pomoc w testowaniu alfa\n"
+"\n"
#: src/aosd/aosd_style.c:75
msgid "Rectangle"
@@ -1154,241 +745,237 @@ msgstr "Wklęsły prostokąt"
msgid "None"
msgstr "Brak"
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr "Rozpoczęcie odtwarzania"
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
msgstr "Wyświetla OSD, gdy zostanie rozpoczęte odtwarzanie utworu na liście."
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr "Zmiana tytułu"
-#: src/aosd/aosd_trigger.c:83
+#: src/aosd/aosd_trigger.c:84
msgid ""
"Triggers OSD when, during playback, the song title changes but the filename "
"is the same. This is mostly useful to display title changes in internet "
"streams."
msgstr ""
"Wyświetla OSD, gdy podczas odtwarzania tytuł piosenki zmieni się, ale plik "
-"pozostanie ten sam. Zazwyczaj przydaje się to przy słuchaniu muzyki "
-"ze strumieni internetowych."
+"pozostanie ten sam. Zazwyczaj przydaje się to przy słuchaniu muzyki ze "
+"strumieni internetowych."
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr "Zmiana głośności"
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
msgstr "Wyświetla OSD, gdy nastąpi zmiana głośności"
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr "Pauza WÅ‚."
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
msgstr "Wyświetla OSD, gdy odtwarzanie zostanie wstrzymane."
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
-msgstr "Pauza Wył."
+msgstr "Pauza wył."
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
msgstr "Wyświetla OSD, gdy odtwarzanie zostanie wznowione."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr "Rozmieszczenie"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
msgstr "Przesunięcie wzdłuż osi X:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
msgstr "Przesunięcie wzdłuż osi Y:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr "Maksymalna szerokość OSD:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr "Ustawienia wielu monitorów"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr "Wyświetl OSD używając:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr "wszystkie"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr "monitor %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr "Czas (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr "Wyświetlanie:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr "Pojawianie:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr "Zanikanie:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr "Czcionki"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr "Czcionka %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr "Cień"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Języki"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Wyłącz konwersję tekstu na UTF-8 (w aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr "Wybierz plik skórki"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr "Renderuj styl"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Kolory"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Kolor %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr "Własna skórka"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr "Plik skórki:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr "PrzeglÄ…daj"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr "Uruchom ten wyzwalacz"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr "Zdarzenia"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr "Wykryto menedżer okien obsługujący przezroczystość"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
-"unless you know that you have one running, please activate a composite "
-"manager otherwise the OSD won't work properly"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
msgstr ""
"Nie wykryto obsługi przezroczystości!\n"
-"Aby OSD działał teraz prawidłowo, należy uruchomić menedżer okien "
-"obsługujący przeroczystość (np. Compiz)."
+"Aby OSD działał teraz prawidłowo, należy uruchomić menedżer okien obsługujący przeroczystość (np. Compiz)."
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr "Menedżer okien obsługujący przezroczystość nie jest wymagany"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr "Przezroczystość"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr "Udawana przezroczystość"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Prawdziwa przezroczystość (wymaga rozszerzenia X Composite)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr "Rozszerzenie Composite nie zostało załadowane"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr "Rozszerzenie Composite nie jest dostępne"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - konfiguracja"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr "Test"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr "Pozycja"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr "Animacja"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr "Tekst"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr "Dekoracja"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr "Wyzwalacz"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Różne"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr "O wtyczce Audacious OSD"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
@@ -1396,7 +983,7 @@ msgstr ""
"\n"
"Audacious OSD"
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1418,150 +1005,37 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "Prośba o uwierzytelnienie dla '%s'"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "Prośba o autoryzację dla %s"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "Utworzono połączenie z %s"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "Usunięto połączenie z %s"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "Urządzenie zostało wyłączone"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "Urządzenie jest poza zasięgiem"
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "Urządzenie jest możliwe do podłączenia"
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "Urządzenie jest w zasięgu"
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "UrzÄ…dzenie jest w ograniczonym zasiegu"
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "Urządzenie zostało przełączone w tryb uwierzytelniania"
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "Wtyczka obsługi słuchawek bluetooth"
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Obsługa zestawu słuchawkowego Bluetooth\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"To był projekt GSoC 2008 - Podziękowania dla mojego mentora Tony Vroon i dla "
-"zespołu Audacious\n"
-" \n"
-"Aby móc używać AVRCP, musisz załadować moduł uinput do jądra systemu.\n"
-"Przyciski na słuchawkach zostaną rozpoznane jako zwykłe klawisze \n"
-"multimedialne i mogą zostać skonfigurowane przez wtyczkę Audacious Global \n"
-"Hotkey lub inne narzędzia dostarczane z twoim menedżerem okien.\n"
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Producent"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "Dostępne słuchawki"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "Aktywne słuchawki"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "_Odśwież"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "_Podłącz"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "_Zamknij"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Klasa"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Adres:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Podłączanie zakończone!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Nie znaleziono urządzeń!"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Szukanie..."
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Uwierzytelnianie..."
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Szukaj ponownie"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Odtwarzaj"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur Scope: wybór koloru"
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Opcje:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Preferencje Bauer stereophonic-to-binaural"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Poziom zasilenia:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Obetnij częstotliwość:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Schematy ustawień:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr "O wtyczce Audio CD"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
-"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
"\n"
"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
@@ -1572,8 +1046,7 @@ msgid ""
"\n"
"Copyright 2009 John Lindgren"
msgstr ""
-"Copyright (c) 2007, Calin Crisan <ccrisan@gmail.com> i zespół "
-"Audacious.\n"
+"Copyright (c) 2007, Calin Crisan <ccrisan@gmail.com> i zespół Audacious.\n"
"\n"
"Podziękowania dla deweloperów libcdio <http://www.gnu.org/software/libcdio/>\n"
"\ti deweloperów libcddb <http://libcddb.sourceforge.net/>.\n"
@@ -1584,128 +1057,156 @@ msgstr ""
"\n"
"Copyright 2009 John Lindgren"
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Brak płyty w napędzie."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Nieobsługiwany rodzaj dysku."
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Konfiguracja wtyczki Audio CD"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Wymuszenie cyfrowego dźwięku"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Pobieranie informacji o utworach"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "Prędkość dysku:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Użyj info zapisanych na płycie, jeśli dostępne"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Użyj internetowej bazy CDDB, jeśli dostępna"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Serwer: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Położenie: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Użyj HTTP zamiast CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Urządzenie inne, niż domyślne: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Ok"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
-msgstr "Odtwarzaj CD"
+msgstr "Odtwórz płytę CD"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
-msgstr "Dodaj CD"
+msgstr "Dodaj płytę CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr "O wtyczce Dynamic Range Compression"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr "Konfiguracja - Dynamic Range Compressor"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "Docelowa głośność:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Centralna głośność:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "Moc efektu:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Zakres dynamiczny:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Game Console Music Decoder"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Ogólne"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Odtwarzanie"
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "Bas:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
-msgstr "sek."
+msgstr "s"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Sopran:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "Domyślna długość piosenki:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Konwersja częstotliwości próbkowania"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "WÅ‚Ä…cz resampling audio"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Częstotliwość:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr "Ignoruj długość z tagów SPC"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Zwiększ pogłos"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
-"The default song length, expressed in seconds, is used for songs that do not "
-"provide length information (i.e. looping tracks)."
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
msgstr ""
-"Domyślna długość piosenki, wyrażona w sekundach, jest używana przy "
-"utworach, dla których nie określono długości (np. ścieżki - pętle). "
+"Domyślna długość piosenki, wyrażona w sekundach, jest używana przy utworach,"
+" dla których nie określono długości (np. ścieżki - pętle). "
#: src/console/plugin.c:33
msgid "About the Game Console Music Decoder"
@@ -1723,54 +1224,50 @@ msgstr ""
"Implementacja w Audacious: William Pitcock <nenolod@dereferenced.org>, \n"
" Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "O Crossfade"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Konfiguracja Crossfade"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Zachodzenie na siebie (w sek.)"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "BÅ‚Ä…d Crossfade"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
-msgstr ""
-"Crossfading nie zadziałał, gdyż piosenki mają różną ilość kanałów."
+msgstr "Crossfading nie zadziałał, gdyż piosenki mają różną ilość kanałów."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
-"You can use the Sample Rate Converter effect to resample the songs to the "
-"same rate."
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
msgstr ""
-"Crossfading nie zadziałał, gdyż piosenki mają różne częstotliwości "
-"próbkowania.\n"
-"Możesz użyć efektu Sample Rate Converter, aby przekonwertować piosenki "
-"do tej samej częstotliwości."
+"Crossfading nie zadziałał, gdyż piosenki mają różne częstotliwości próbkowania.\n"
+"Możesz użyć efektu Sample Rate Converter, aby przekonwertować piosenki do tej samej częstotliwości."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Konfiguruj Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "Intensywność efektu:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Zastosuj"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1781,685 +1278,248 @@ msgstr ""
"Johan Levin 1999.\n"
"Echo otoczenia: Carl van Shaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "O wtyczce Echo"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Konfiguruj Echo"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Opóźnienie: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "Oddźwięk: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "Głośność: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Odtwarzanie->Graj"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Odtwarzanie->Stop"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Odtwarzanie->Pauza"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Odtwarzanie->Poprzedni"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Odtwarzanie->Następny"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Odtwarzanie->Wysuń"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Odtwarzanie->Powtarzaj"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Odtwarzanie->Losuj"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Głośność-> +_5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Głośność- -_5>"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Głośność-> +_10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Głośność-> -_10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Głośność->Wycisz"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Okno->Główne"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Okno->Playlista"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Okno->Equalizer"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Okno->PrzeskoczDoPliku"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: nie można otworzyć pliku urządzenia %s , pomijanie "
-"tego urządzenia; sprawdź, czy plik istnieje i czy masz uprawnienia do "
-"jego czytania.\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: nie można utworzyć _kanału we/wy dla pliku urządzenia "
-"%s , pomijanie tego urzÄ…dzenia.\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: nie można otworzyć /proc/bus/input/devices , "
-"automatyczne wykrywanie zdarzeń dla urządzeń nie zadziała.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: nie można otworzyć _kanału we/wy dla urządzeń "
-"/proc/bus/input , automatyczne wykrywanie zdarzeń dla urządzeń "
-"nie zadziała.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: wystąpił błąd podczas czytania urządzeń z"
-"/proc/bus/input/ , automatyczne wykrywanie zdarzeń dla urządzeń "
-"nie zadziała.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: nie znaleziono urzÄ…dzenia %s w /dev/input ,"
-"pomijanie.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: nie można załadować pliku konfiguracji %s , zostaną "
-"użyte domyślne ustawienia.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: niekompletne informacje w pliku konfiguracji dla "
-"urzÄ…dzenia \"%s\" , pomijanie.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfiguracja, nie można znaleźć wartość is_active dla "
-"urzÄ…dzenia \"%s\" , pomijanie.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: nie można uzyskać dostępu do lokalnego katalogu %s , "
-"ustawienia nie zostanÄ… zapisane.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfiguracja, nie można znaleźć wartości nazwy pliku "
-"dla urzÄ…dzenia \"%s\" , pomijanie.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfiguracja, nie można uzyskać wartości phys dla "
-"urzÄ…dzenia \"%s\" , pomijanie.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfiguracja, nie można uzyskać wartości is_custom dla "
-"urzÄ…dzenia \"%s\" , pomijanie.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: konfiguracja, niespodziewana wartość dla urządzenia "
-"\"%s\" , pomijanie.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Wykryto"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "WÅ‚asne"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Nie wykryto"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Informacja"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Nie można otworzyć okna dowiązań dla nie-wykrytego urządzenia.\n"
-"Upewnij się, że urządzenie zostało poprawnie podłączone."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "BÅ‚Ä…d"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Nie można otworzyć wybranego urządzenia.\n"
-"Proszę sprawdzić uprawnienia czytania dla pliku urządzenia."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Dodaj niestandardowe urzÄ…dzenie"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug próbuje automatycznie wykryć i zaktualizować informacje o\n"
-"urządzeniach zdarzeń dostępnych w systemie.\n"
-"Jeśli jednak auto-detekcja nie zadziała bądź posiadasz nietypowe urządzenia\n"
-"(znajdują się obecnie tylko w /dev/input/), możesz spróbować dodać je\n"
-"ręcznie podając przy tym nazwę oraz plik urządzenia."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Nazwa urzÄ…dzenia:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Plik urzÄ…dzenia:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(własne)"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Proszę podać zarówno nazwę, jak i lokalizację pliku.\n"
-"Nazwa pliku musi zostać podana z bezpośrednią ścieżką."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "Czy chcesz usunąć istniejącą konfigurację dla wybranego urządzenia?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Czy chcesz usunąć wybrane niestandardowe urządzenie?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - Konfiguracja"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktywne"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Stan"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Nazwa urzÄ…dzenia"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Plik urzÄ…dzenia"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Adres urzÄ…dzenia"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_DowiÄ…zania"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Wciśnij przycisk twojego urządzenia, aby skojarzyć go z wtyczką;\n"
-"jeśli żaden przycisk nie zostanie wciśnięŧy przez kolejne 5 sekund, \n"
-"to nastąpi zamknięcie tego okna bez dokonywania zmian."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"To zdarzenie wejścia zostało już przypisane.\n"
-"\n"
-"Nie można przydzielić wielu akcji do tego samego zdarzenia wejścia "
-"(jednakże można przypisać tą samą akcję do wielu zdarzeń)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Konfiguracja dowiązań"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Nazwa: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Lokalizacja pliku: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Adres fizyczny: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "O wtyczce EvDev-Plug"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"Zdalna kontrola odtwarzacza poprzez urządzenia zdarzeń\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"Autor: Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:725
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
"Wtyczka dekodera audio dla Audacious obsługująca wiele formatów.\n"
"Oparta na framework'u multimedialnym FFmpeg (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Wtyczka dla Audacious napisana prez:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:739
msgid "About FFaudio Plugin"
msgstr "O wtyczce FFaudio"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr "O wtyczce File-Writer"
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Wtyczka FileWriter\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
msgstr "Konfiguracja File Writer"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
msgstr "Format pliku wyjściowego:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr "Konfiguruj"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
-msgstr "Zapisz w oryginalnym katalogu"
+msgstr "Zapisywanie w pierwotnym położeniu"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
-msgstr "Zapisz we własnym katalogu"
+msgstr "Zapisywanie we własnym położeniu"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
-msgstr "Folder pliku wyjściowego:"
+msgstr "Położenie pliku docelowego:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
-msgstr "Wybierz folder"
+msgstr "Wybór katalogu"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
-msgstr "Uzyskaj nazwÄ™ pliku z:"
+msgstr "Uzyskanie nazwy pliku z:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
-msgstr "tagi pliku oryginalnego"
+msgstr "załączonych etykiet"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
-msgstr "oryginalna nazwa pliku"
+msgstr "nazwy pliku"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
-msgstr "Nie ucinaj rozszerzenia pliku"
+msgstr "Pozostawienie rozszerzenia nazwy pierwotnego pliku"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Gdy włączone, rozszerzenie pliku oryginalnego nie zostanie usunięte z jego "
-"nazwy przed dodaniem na końcu nowego rozszerzenia."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:578
msgid "Prepend track number to filename"
-msgstr "Dodaj do nazwy pliku numer ścieżki"
+msgstr "Dodanie do nazwy pliku numer ścieżki"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Automatycznie"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
-msgstr "Konfiguracja MP3"
+msgstr "Konfiguracja kodera MP3"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
msgstr "Jakość algorytmu:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"najlepszy/najwolniejszy:0;\n"
-"najgorszy/najszybyszy:9;\n"
-"zalecany:2;\n"
-"domyślny:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
-msgstr "Częstotliwość próbkowania na wyjściu:"
-
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Automatycznie"
+msgstr "Docelowa częstotliwość próbkowania:"
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
-msgstr "Bitrate / stopień kompresji:"
+msgstr "Tempo bitowe/współczynnik kompresji:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
-msgstr "Bitrate (kbps):"
+msgstr "Tempo bitowe (kb/s):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
-msgstr "Stopień kompresji:"
+msgstr "Współczynnik kompresji:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
-msgstr "Tryb audio:"
-
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Dodaj Stereo"
+msgstr "Kanały:"
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr "Różne:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
-msgstr "Wymuś ścisłą zgodność z ISO"
+msgstr "Wymuszenie ścisłej zgodności z ISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr "Zabezpieczenie przed błędami"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Dodaje 16-bitową sumę kontrolną do każdej klatki"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr "Jakość"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
-msgstr "WÅ‚Ä…cz VBR/ABR"
+msgstr "WÅ‚Ä…czenie"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr "Typ:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Zmienny bitrate"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Åšredni bitrate"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
-msgstr "Opcje VBR:"
+msgstr "Zmienne tempo bitowe (VBR):"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
-msgstr "Minimalny bitrate (kbps):"
+msgstr "Minimalna wartość (kb/s):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
-msgstr "Maksymalny bitrate (kbps):"
+msgstr "Maksymalna wartość (kb/s):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
-msgstr "WymuÅ› minimalny bitrate"
-
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Do użycia z odtwarzaczami, które nie obsługują niskiego bitrate dla mp3"
-"(Apex AD600-A DVD/mp3 player)"
-
+msgstr "Wymuszenie wartości minimalnej"
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
-msgstr "Opcje ABR:"
+msgstr "Åšrednie tempo bitowe (ABR):"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
-msgstr "Åšredni bitrate (kbps):"
+msgstr "Średnia wartość (kb/s):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
-msgstr "Poziom jakości VBR:"
-
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"najwyższy:0;\n"
-"najniższy:9;\n"
-"domyślny:4;"
+msgstr "Jakość algorytmu:"
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
-msgstr "Nie zapisuj nagłówka Xing VBR"
+msgstr "Pominięcie zapisywania nagłówka Xing VBR"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr "Parametry klatek:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
-msgstr "Oznacz prawem autorskim"
+msgstr "Oznaczenie prawem autorskim"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
-msgstr "Oznacz jako oryginalne"
+msgstr "Oznaczenie jako oryginalne"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr "Parametry ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
-msgstr "Wymuś dodanie tagów w wersji 2"
+msgstr "Wymuszenie dodawania wersji 2"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
-msgstr "Dodaj tylko tagi v1"
+msgstr "Dodawanie tylko wersji 1"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
-msgstr "Dodaj tylko tagi v2"
+msgstr "Dodawanie tylko wersji 2"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
-msgstr "Tagi"
+msgstr "Etykiety"
#: src/filewriter/vorbis.c:240
msgid "Vorbis Encoder Configuration"
@@ -2467,13 +1527,13 @@ msgstr "Konfiguracja kodera Vorbis"
#: src/filewriter/vorbis.c:260
msgid "Quality level (0 - 10):"
-msgstr "Poziom jakości (0 - 10):"
+msgstr "Poziom (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "Wtyczka FLAC Audio "
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "O wtyczce FLAC Audio"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2489,15 +1549,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "O wtyczce FLAC Audio"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
-msgstr "O wtyczce Gnome Shortcut"
+msgstr "O wtyczce skróty Gnome"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2505,497 +1561,469 @@ msgid ""
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
msgstr ""
-"Wtyczka Gnome Shortcut\n"
-"Kontroluj swój odtwarzacz za pomocą skrótów klawiaturowych Gnome.\n"
+"Wtyczka skróty GNOME\n"
+"Steruje odtwarzaczem za pomocą skrótów klawiaturowych środowiska GNOME.\n"
"\n"
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
-msgid "Open Files"
-msgstr "Otwórz pliki"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Numer porzÄ…dkowy"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
-msgid "Add Files"
-msgstr "Dodaj pliki"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Tytuł"
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Wykonawca"
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr "interfejs gnt"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Rok"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "Nie można przeskoczyć do czasu, gdy żaden utwór nie jest odtwarzany.\n"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "Przeskocz do czasu"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Numer ścieżki"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "minuty:sekundy"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Pozycja w kolejce"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Długość utworu:"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Czas trwania"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "BÅ‚Ä…d zapisywania playlisty \"%s\": %s"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Położenie pliku"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s już istnieje. Kontynuować?"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Nazwa pliku"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "Eksportuj listÄ™ odtwarzania"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Własny tytuł (z ustawień)"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "Importuj listÄ™ odtwarzania"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Tempo bitowe"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr "Interfejs GTK"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Wybierz kolumny"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Dostępne:"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Wybrane:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "Zatrzymaj po tym utworze"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Zaczep po lewej"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Powtarzaj"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Zaczep po prawej"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Losuj"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Zaczep na górze"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Odtwarzaj pojedynczo"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Zaczep na dole"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Pokaż listy odtwarzania"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Odczep"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Pokaż/ukryj playlisty"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Wyłącz"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "Pokaż obszar informacji"
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Otwórz..."
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "Pokaż/ukryj obszar informacji"
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Otwórz adres _URL..."
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "Pokaż menu główne"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_Dodaj..."
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "Pokaż/ukryj menu główne"
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Dodaj adres U_RL..."
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr "Pokaż pasek stanu"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "_O programie..."
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
-msgstr "Pokaż/ukryj pasek stanu"
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Preferencje..."
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pauza"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "Za_kończ"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Stop"
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Rozpocznij"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Poprzedni"
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "_Wstrzymaj"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Następny"
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Zatrzymaj"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Playlista"
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "P_oprzednie nagranie"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Nowa playlista"
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Następne nagranie"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Usuń playlistę"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "Po_wtarzanie"
-#: src/gtkui/ui_manager.c:92
-msgid "Import Playlist ..."
-msgstr "Importuj playlistÄ™ ..."
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "_Losowanie kolejności"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Åaduje playlistÄ™ z pliku do obecnej listy"
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "_Pojedynczo"
-#: src/gtkui/ui_manager.c:95
-msgid "Export Playlist ..."
-msgstr "Eksportuj playlistÄ™ ..."
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "_Zatrzymanie po tym nagraniu"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Zapisuje wybrane listy odtwarzania"
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "_Informacje o nagraniu..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Zapisz wszystkie playlisty"
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Przejdź do _czasu..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-"Zapisuje wszystkie otwarte listy odtwarzania. Akcja ta jest również "
-"wykonywana automatycznie przy zamykaniu programu."
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Przejdź do _nagrania..."
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr "Odśwież"
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Według _numeru ścieżki"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Odświeża metadane związane z wpisem na liście."
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Według _tytułu"
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "Menedżer playlist"
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Według _wykonawcy"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Otwiera menedżera list odtwarzania"
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Według _albumu"
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr "Dodaj URL ..."
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Według _daty wydania"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Dodaje zdalny utwór do playlisty."
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Według p_ołożenia pliku"
-#: src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
-msgstr "Dodaj pliki ..."
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Według wła_snego tytułu"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Dodaje pliki do playlisty."
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "_Odwróć kolejność"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Usuń wszystkie"
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Wy_losuj kolejność"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Usuwa wszystkie wpisy z playlisty."
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Wczytaj ponownie"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Usuń niezaznaczone"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Usuń _niedostępne ścieżki"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Usuwa niezaznaczone wpisy z playlisty."
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Sortowanie"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Usuń zaznaczone"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nowa"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Usuwa zaznaczone wpisy z playlisty"
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Zamknij"
-#: src/gtkui/ui_manager.c:131
-msgid "Sort"
-msgstr "Sortuj"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importuj..."
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "Numer utworu"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Eksportuj..."
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "Tytuł"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Menedżer list odtwarzania..."
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "Artysta"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Menedżer _kolejki..."
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "Album"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "_Zwiększ głośność"
-#: src/gtkui/ui_manager.c:140
-msgid "By File Path"
-msgstr "Położenie pliku"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "Z_mniejsz głośność"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr "Odwróć kolejność"
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Korektor graficzny"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Wyjście"
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "_Efekty"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efekty"
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Interfejs"
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr "Korektor graficzny"
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Wizualizacje"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Widok"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Pasek _menu"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr "Interfejs"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Pasek _informacji"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Plik"
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Pasek _stanu"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "Komponenty"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "_Nagłówki kolumn"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Pokaż szczegóły utworu"
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Wybierz _kolumny ..."
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Pokaż szczegóły utworu"
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "_Przewijanie listy po zmianie nagrania"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "O Audacious"
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Plik"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr "Otwórz pliki ..."
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Odtwarzanie"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "Åaduje i odtwarza wybrany plik"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_Lista"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr "Otwórz URL ..."
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "W_tyczki"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Odtwarza utwór z wybranej lokalizacji"
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Dźwięk"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Wtyczki"
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Widok"
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Ustawienia"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Dodaj/usuń kolejkę"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Otwiera okno preferencji"
-
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "_Zamknij"
-
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Zamyka Audacious"
-
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "Ustaw A-B"
-
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Wyczyść A-B"
-
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "Przeskocz do poczÄ…tku playlisty"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "_Wytnij"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Przeskocz do pliku"
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "S_kopiuj"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Przełącz kolejkę"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "Wk_lej"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Dodaje/usuwa wpis z kolejki listy odtwarzania"
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "_Zaznacz wszystko"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Kopiuj"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "Zmień _nazwę"
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Wytnij"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Interfejs GTK"
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Wklej"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Zaznacz wszystko"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Buforowanie ..."
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Zaznacza wszystkie wpisy na playliście"
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Wyczyść zaznaczenie"
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "BÅ‚Ä…d"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Odznacza wszystkie wpisy na playliście"
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr ""
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr "stereo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:109
#, c-format
-msgid "%d channels"
-msgstr "%d kanały"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d kanał"
+msgstr[1] "%d kanały"
+msgstr[2] "%d kanałów"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
+msgstr "%d kb/s"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Poprzedni utwór"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Rozpocznij"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
-msgstr "Pauzuj/Wznów"
+msgstr "Wstrzymaj/wznów"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Zatrzymaj"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Następny utwór"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Przewiń do przodu o 5 sekund"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Przewiń do tyłu o 5 skund"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Wycisz"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Zwiększ głośność"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Zmniejsz głośność"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Przejdź do nagrania"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Przełącz okno odtwarzacza"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
-msgstr "Pokaż OSD"
+msgstr "Pokaż menu ekranowe"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Przełącz powtarzanie"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Przełącz losowanie"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:95
msgid "(none)"
-msgstr "(---)"
+msgstr "(brak)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
-"It is not recommended to bind the primary mouse buttons without "
-"modificators.\n"
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
"\n"
"Do you want to continue?"
msgstr ""
-"Niezalecane jest dowiązywanie podstawowych przycisków myszy bez "
-"dodatkowych klawiszy.\n"
+"Niezalecane jest dowiązywanie podstawowych przycisków myszy bez dodatkowych klawiszy.\n"
"\n"
"Czy chcesz kontynuować?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Przyciski dowiązań myszy"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Konfiguracja wtyczki Global Hotkey"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3003,23 +2031,23 @@ msgstr ""
"Proszę wcisnąć kombinację klawiszy wewnątrz pola\n"
"tekstowego. Możesz również użyć przycisków myszy."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Skróty klawiszowe:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
-msgstr "<b>Akcja:</b>"
+msgstr "<b>Czynność:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
-msgstr "<b>DowiÄ…zany klawisz:</b>"
+msgstr "<b>Skrót klawiszowy:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "O wtyczce Global Hotkey"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3048,31 +2076,31 @@ msgstr ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
-msgstr ""
+msgstr "Połącz ze wszystkimi dostępnymi portami jack"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
-msgstr ""
+msgstr "Połącz tylko z portami wyjściowymi"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
-msgstr ""
+msgstr "Nie łącz z żadnymi portami"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
-msgstr ""
+msgstr "Konfiguracja wtyczki jack"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
-msgstr ""
+msgstr "Tryb połączenia:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
-msgstr ""
+msgstr "WÅ‚Ä…cz wydruk debugowania"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3082,124 +2110,78 @@ msgid ""
"Audacious port by\n"
"Giacomo Lozito from develia.org"
msgstr ""
+"Sterownik XMMS jack 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan <cmorgan@alum.wpi.edu>\n"
+"\n"
+"Port dla Audacious stworzony przez \n"
+"Giacomo Lozito z develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
-msgstr ""
+msgstr "O wtyczce wyjściowej JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr ""
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "O wtyczce LADSPA Host"
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr ""
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Ustawienia %s"
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr ""
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Ustawienia LADSPA Host"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr ""
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Ścieżki modułów:"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
msgstr ""
+"<small>Możesz rozdzielać wiele ścieżek dwukropkiem.\n"
+"Podane ścieżki są przeszukiwane wraz z LADSPA_PATH.\n"
+"Po dodaniu nowych ścieżek wciśnij Enter, aby odszukać nowe wtyczki.</small>"
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr ""
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Dostępne wtyczki:"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr ""
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "WÅ‚Ä…cz"
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr ""
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "WÅ‚Ä…czone wtyczki:"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr ""
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr ""
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Ustawienia"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
-msgstr ""
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr ""
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr ""
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr ""
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr ""
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr ""
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
+"Looking for lyrics..."
msgstr ""
+"\n"
+"Wyszukiwanie tekstu..."
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:304
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr ""
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr ""
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"ÅÄ…czenie z lyrics.wikia.com..."
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
-msgstr "LyricWiki"
-
-#: src/lyricwiki/lyricwiki.c:337
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
@@ -3207,11 +2189,11 @@ msgstr ""
"\n"
"Nie znaleziono żadnych tekstów do piosenki."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
-msgstr ""
+msgstr "O wtyczce Metronom"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3219,1026 +2201,278 @@ msgid ""
"e.g. tact://77 to play 77 beats per minute\n"
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
+"Generator Taktu przez Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"Aby go użyć, dodaj URL: tact://beats*num/den\n"
+"np. tact://77 by zagrać 77 beat'ów na minutę\n"
+"lub tact://60*3/4 by zagrać 60 bpm w 3/4 taktu"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
-msgstr ""
+msgstr "Generator taktu: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr ""
+msgstr "Generator taktu: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr ""
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "O wtyczce Channel Mixer"
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr ""
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Ustawienia miksera kanałów"
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr ""
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Kanały wyjściowe:"
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Zmiany zostaną zastosowane przy przejściu do następnego utworu."
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
+msgstr "Surround"
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr ""
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr ""
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "Trwa wgrywanie..."
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr ""
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Wgraj do urzÄ…dzenia MTP"
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr ""
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Rozłącz urządzenie MTP"
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Zatrzymany"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr ""
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious nie odtwarza."
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
-msgstr ""
+msgstr "Wtyczka wyjściowa Null"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
+" stworzona przez Christian Birchinger <joker@netswarm.net>\n"
+"bazując na wtyczce XMMS napisanej przez Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
-msgstr ""
+msgstr "O wyjściu Null"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
-msgstr ""
+msgstr "Preferencje wyjścia Null"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
-msgstr ""
+msgstr "Uruchomienie w czasie rzeczywistym"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
-msgstr ""
+msgstr "1. Domyślne urządzenie"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
-msgstr ""
+msgstr "Preferencje wtyczki wyjściowej OSS4"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
-msgstr ""
+msgstr "Urządzenie dźwiękowe:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
-msgstr ""
+msgstr "Użyj alternatywnego urządzenia:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
-msgstr ""
+msgstr "Zapisz głośność pomiędzy sesjami"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
-msgstr ""
+msgstr "WÅ‚Ä…cz konwersje formatu poprzez oprogramowanie OSS"
-#: src/oss4/plugin.c:54
-msgid "About OSS4 Plugin"
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
msgstr ""
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "O wtyczce OSS4"
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
-msgstr ""
+msgstr "BÅ‚Ä…d OSS4"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
-msgstr ""
+msgstr "Domyślny (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
-msgstr ""
+msgstr "Konfiguracja sterownika OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
-msgstr ""
+msgstr "UrzÄ…dzenia"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
-msgstr ""
+msgstr "Buforowanie:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
-msgstr ""
+msgstr "Pre-bufor (w procentach):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
-msgstr ""
+msgstr "Buforowanie"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
-msgstr ""
+msgstr "Ustawienia miksera:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
-msgstr ""
+msgstr "Zmiana głośności kanału Master, nie PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
-msgstr ""
-
-#: src/OSS/OSS.c:40
-msgid "About OSS Driver"
-msgstr ""
+msgstr "Mikser"
#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
+msgid "About OSS Driver"
+msgstr "O sterowniku OSS"
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
-msgstr ""
-
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
+msgstr "O wtyczce wyjściowej PulseAudio dla Audacious"
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
-msgstr ""
+msgstr "O wtyczce Sample Rate Converter"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
-msgstr ""
+msgstr "Ustawienia Sample Rate Converter"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
-msgstr ""
+msgstr "Częstotliwości mapowania:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
-msgstr ""
+msgstr "Wszystkie inne:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
-msgstr ""
+msgstr "Metoda:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
-msgstr ""
+msgstr "Zmień hasło"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
-msgstr ""
+msgstr "<b>Usługi</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
-msgstr ""
+msgstr "Nazwa użytkownika:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
-msgstr ""
+msgstr "Hasło:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
-msgstr ""
+msgstr "Adres URL Scrobblera:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
-msgstr ""
+msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
-msgstr ""
+msgstr "Scrobbler"
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
-"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
-"com>\n"
-msgstr ""
-
-#: src/scrobbler/plugin.c:215
-msgid "About Scrobbler Plugin"
-msgstr ""
-
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr ""
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr ""
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr ""
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr ""
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr ""
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr ""
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr ""
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr ""
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr ""
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr ""
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr ""
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr ""
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr ""
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr ""
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr ""
-
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr ""
-
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr ""
-
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
-msgstr ""
-
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr ""
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr ""
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr ""
-
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr ""
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr ""
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr ""
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr ""
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr ""
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr ""
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr ""
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr ""
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr ""
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr ""
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr ""
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr ""
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr ""
-
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr ""
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr ""
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr ""
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr ""
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr ""
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr ""
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr ""
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr ""
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr ""
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr ""
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr ""
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr ""
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr ""
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr ""
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr ""
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr ""
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr ""
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr ""
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr ""
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr ""
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr ""
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr ""
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr ""
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr ""
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr ""
-
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
msgstr ""
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
+"Wtyczka Audacious AudioScrobbler\n"
"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr ""
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr ""
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr ""
+"Oryginalnie utworzona przez Audun Hove <audun@nlc.no> oraz Pipian <pipian@pipian.com>\n"
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr ""
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "O wtyczce Scrobbler"
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr ""
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "O wtyczce wyjściowej SDL"
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr ""
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "BÅ‚Ä…d SDL"
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Gatunek"
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr ""
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Kolekcja"
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Utwórz listę odtwarzania"
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr ""
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Dodaj do listy odtwarzania"
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr ""
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Wyszukiwanie..."
-#: src/sid/xs_interface.c:1262
+#: src/search-tool/search-tool.c:645
msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
-msgstr ""
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr ""
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr ""
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr ""
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr ""
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
+"Aby zaimportować kolekcję muzyczną, proszę wybrać katalog i kliknąć przycisk"
+" ponownego wczytywania."
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr ""
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Proszę czekać..."
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr ""
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Wybór katalogu"
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr ""
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr ""
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr ""
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr ""
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr ""
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr ""
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "O interfejsie skórkowym"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4246,870 +2480,939 @@ msgstr ""
"Copyright (c) 2008, Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Skórkowy Interfejs"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
msgstr "_Odtwarzacz:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
-msgstr "Wybierz czcionkę dla głownego okna odtwarzacza:"
+msgstr "Wybór czcionki okna odtwarzacza"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
-msgstr "_Playlista:"
+msgstr "_Lista odtwarzania:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
-msgstr "Wybierz czcionkÄ™ dla playlisty:"
+msgstr "Wybór czcionki listy odtwarzania"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>_Czcionki</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Użyj bitmapowych czcionek, jeśli dostępne"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Czcionki bitmapowe (obsługuje tylko kodowanie ASCII)"
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-"Używa bitmapowych czcionek, jeżeli są one dostępne. Bitmapowe czcionki "
-"nie obsługują znaków Unicode."
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Przewijanie tytułu utworu w obydwu kierunkach"
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Różne</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Pokaż separatory na playliście"
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Pokaż dekoracje menedżera okien"
-
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Używa dla okna odtwarzacza obramowania włączonego menedżera okien."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Używaj dwukierunkowego przewijania tekstu"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Styl</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-"Jeśli zaznaczone, informacje o pliku w oknie głównym są przewijane tam i "
-"z powrotem. Gdy niezaznaczone, tekst jest przewijany w jednym kierunku."
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Preferencje interfejsu"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Użyj globalnego stylu gtk"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Przedwzm"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Losowa skórka przy odtwarzaniu"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Pozwól na ładowanie niekompletnych skórek"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
-"Jeśli zaznaczone, Audacious nie wstrzymie ładowania zepsutych skórek. Używaj "
-"tylko wtedy, gdy twoja ulubiona skórka nie chce działać."
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Dopasowanie kolorów"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Audacious pozwala na zmianę balansu kolorów dowolnej skórki przy użyciu "
-"poniższych suwaków."
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Niebieski"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Zielony"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Czerwony"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Skórka</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr "Dopasowanie kolorów..."
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Equalizer Audacious"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:887
msgid "Presets"
-msgstr "Schematy ustawień"
-
-#: src/skins/ui_main.c:593
-msgid "kbps"
-msgstr "kbps"
+msgstr "Profile ustawień"
-#: src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "kHz"
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Wczytywanie profilu"
-#: src/skins/ui_main.c:608
-msgid "surround"
-msgstr "surround"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr ""
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - ostrzeżenie o widoczności"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr ""
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Pokaż głowne okno odtwarzacza"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Zapisywanie profilu"
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ingoruj"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Zapisywanie domyślnego profilu"
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
msgstr ""
-"Audacious został uruchomiony z ukrytymi wszystkimi oknami.\n"
-"Być może zechcesz ponownie włączyć główne okno odtwarzacza; "
-"jeśli nie, będziesz musiał kontrolować Audacious zdalnie poprzez audtool lub "
-"załadowane wtyczki (takie jak Status Icon)."
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Zawsze ignoruj, pokazywanie/ukrywanie kontrolowane zdalnie"
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - ostrzeżenie o użyciu wadliwego silnika GTK"
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Usuwanie profilu"
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
msgstr ""
-"<big><b>Wadliwy silnik GTK jest w użyciu</b></big>\n"
-"\n"
-"Audacious wykrył, że używasz niesprawnego silnika GTK.\n"
-"\n"
-"Silnik motywów, którego używasz: <i>%s</i> jest niezgodny z niektórymi "
-"elementami używanymi przez nowoczesne skórki. Niedziałające obiekty zostały "
-"wyłączone na czas trwania tej sesji.\n"
-"\n"
-"Aby uzyskać możliwość używania tych elementów, powinieneś rozważyć zmianę "
-"silnika motywów GTK."
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Nie wyświetlaj tego ostrzeżenia ponownie"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kb/s"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "surround"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "Skocz do: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Skocz do: %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Głośność: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Balans: %d%% lewy"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Balans: centralny"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Balans: %d%% prawy"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Menu opcji"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Wyłącz 'Zawsze na wierzchu'"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "WÅ‚Ä…cz 'Zawsze na wierzchu'"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Obszar informacji o pliku"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Wyłącz 'Skalowanie GUI'"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "WÅ‚Ä…cz 'Skalowanie GUI'"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Menu wizualizacji"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1653
msgid "Single mode."
msgstr "Tryb prosty."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1655
msgid "Playlist mode."
msgstr "Tryb playlisty."
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1677
msgid "Stopping after song."
msgstr "Zatrzymaj po tym utworze."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1679
msgid "Not stopping after song."
msgstr "Nie zatrzymuj po utworze."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Auto-przewijanie nazwy piosenki"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Zatrzymaj po tym utworze"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Wierzchołki"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Powtarzanie"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Losowanie kolejności"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Pojedynczo"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
-msgstr "Pokaż odtwarzacz"
+msgstr "Odtwarzacz"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
-msgstr "Pokaż listę odtwarzania"
+msgstr "Edytor list odtwarzania"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
-msgstr "Pokaż korektor graficzny"
+msgstr "Korektor graficzny"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Zawsze na wierzchu"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Umieść na wszystkich pulpitach"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Zwiń odtwarzacz"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Zwiń listę odtwarzania"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Zwiń korektor graficzny"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Skaluj"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Podwójna wielkość"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Åatwe przesuwanie"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analizator"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Scope"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Voiceprint"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Wyłączony"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normalny"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Ognisty"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Pionowe linie"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Linie"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Kolumny"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Kropkowany"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Liniowy"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "GÅ‚adki"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Lodowy"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Wygładzony"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Najwolniejszy"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Wolny"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Åšredni"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Szybki"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Najszybszy"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
-msgstr "Miniony czas"
+msgstr "Bieżący czas"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Pozostały czas"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Wstrzymaj"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Poprzednie nagranie"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Następne nagranie"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Wizualizacja"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Tryb wizualizacji"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Tryb analizatora"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Tryb Scope"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Tryb Voiceprint"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Tryb WindowShade VU"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Spadek linii/kolumn"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Spadek wierzchołków"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Lista odtwarzania"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nowa"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
-msgstr "Następna playlista"
+msgstr "Następna lista odtwarzania"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Poprzednia playlista"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Usuń"
+
#: src/skins/ui_manager.c:222
-msgid "Refresh List"
-msgstr "Odśwież listę"
+msgid "Import Playlist"
+msgstr "Wybór pliku importowania"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Wczytuje listę odtwarzania z pliku do bieżącej listy"
#: src/skins/ui_manager.c:226
-msgid "List Manager"
+msgid "Export Playlist"
+msgstr "Wybór pliku eksportowania"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Zapisuje wybranÄ… listÄ™ odtwarzania"
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Wczytaj ponownie"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Odświeża metadane związane z wpisem na liście."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
msgstr "Menedżer list odtwarzania"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Menedżer kolejki"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Widok"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Interfejs"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Preferencje interfejsu..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
-msgstr "Dodaj adres internetowy..."
+msgstr "Dodaj adres URL..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Dodaje zdalny utwór do playlisty."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Dodaj pliki..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Dodaje pliki do listy odtwarzania"
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Szukaj i zaznacz"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
"Przeszukuje playlistę i zaznacza wpisy na podstawie ustalonych kryteriów."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Odwróć zaznaczenie"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "Odwraca zaznaczone i niezaznaczone wpisy."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Zaznacz wszystko"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Zaznacza wszystkie wpisy na playliście"
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Wyczyść zaznaczenie"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Odznacza wszystkie wpisy na playliście"
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Usuń wszystkie"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Usuwa wszystkie wpisy z playlisty."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "Wyczyść kolejkę"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "Usuwa kolejkÄ™ powiÄ…zanÄ… z tÄ… listÄ… odtwarzania."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Usuń niedostępne"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "Usuwa niedostępne pliki z playlisty."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Usuń duplikaty"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Według tytułu"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "Usuwa duplikaty z playlisty na podstawie tytułu utworu."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
-msgstr "Nazwa pliku"
+msgstr "Według nazwy pliku"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr "Usuwa duplikaty z playlisty na podstawie nazwy pliku."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
-msgstr "Ścieżka + Nazwa pliku"
+msgstr "Według ścieżki i nazwy pliku"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "Usuwa duplikaty z playlisty na podstawie ich pełnej ścieżki."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Usuń niezaznaczone"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Usuwa niezaznaczone wpisy z playlisty."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Usuń zaznaczone"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Usuwa zaznaczone wpisy z playlisty"
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Wymieszaj listÄ™"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Losowo zmienia kolejność wpisów na playliście"
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "Odwróć listę"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Odwraca kolejność wpisów na playliście"
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
-msgstr "Sortuj listÄ™"
+msgstr "Sortowanie"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
msgstr "Porządkuje listę na podstawie tytułu."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Według albumu"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
msgstr "PorzÄ…dkuje listÄ™ na podstawie albumu."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Według wykonawcy"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
msgstr "PorzÄ…dkuje listÄ™ na podstawie artysty."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
msgstr "PorzÄ…dkuje listÄ™ na podstawie nazwy pliku."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Porządkuje listę na podstawie pełnej ścieżki."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
-msgstr "Data"
+msgstr "Według daty"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
msgstr "PorzÄ…dkuje listÄ™ na podstawie daty modyfikacji."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Według numeru ścieżki"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
-msgstr "PorzÄ…dkuje listÄ™ na podstawie numeru utworu."
+msgstr "Porządkuje listę na podstawie numeru ścieżki."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
-msgstr "Sortuj zaznaczone"
+msgstr "Posortuj zaznaczone"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Plik"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Wtyczki"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Pokaż szczegóły utworu"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Informacje o nagraniu"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "O programie"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
-msgstr "Wczytaj plik"
+msgstr "Odtwórz plik"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Wczytuje i odtwarza wybrany plik"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
-msgstr "Wczytaj lokalizacjÄ™"
+msgstr "Odtwórz położenie"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Odtwarza utwór z wybranego położenia"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Wtyczki"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Preferencje"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Otwiera okno preferencji"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Kończy działanie programu"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Ustaw A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Wyczyść A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Przejdź do czasu"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Przełącz kolejkę"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Dodaje/usuwa wpis z kolejki listy odtwarzania"
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Skopiuj"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Wytnij"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Wklej"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
msgstr "Wczytaj"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
-msgid "Preset"
-msgstr "Ustawienia"
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importuj"
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr "Wczytaj ustawienia"
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Zapisz"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Usuń"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Profil"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
msgstr "Auto-Å‚adowane ustawienia"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
msgstr "Wczytaj auto-Å‚adowane ustawienia"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
msgstr "Wczytaj domyślne ustawienia equalizera"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr "Wyzeruj"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
msgstr "Wyzeruj ustawienia equalizera"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr "Z pliku"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
-msgstr "Wczytaj ustawienia z pliku"
+msgstr "Wczytuje profil ustawień z pliku"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr "Z pliku WinAMP EQF"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
msgstr "Wczytaj ustawienia z pliku WinAMP EQF"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
msgstr "Ustawienia WinAMPa"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
msgstr "Importuj ustawienia WinAMPa"
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr "Zapisz ustawienia"
-
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
msgstr "Zapisz auto-Å‚adowane ustawienia"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
msgstr "Zapisz domyślne ustawienia"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr "Do pliku"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
msgstr "Zapisz ustawienia do pliku"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr "Do pliku WinAMP EQF"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
msgstr "Zapisz ustawienia do pliku WinAMP EQF"
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr "Usuń ustawienia"
-
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
msgstr "Usuń auto-ładowane ustawienia"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr "Wyszukaj wpisy w aktywnej playliście"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:256
msgid ""
-"Select entries in playlist by filling one or more fields. Fields use regular "
-"expressions syntax, case-insensitive. If you don't know how regular "
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
"expressions work, simply insert a literal portion of what you're searching "
"for."
msgstr ""
-"Zaznacz wpisy na playliście poprzez wypełnienie jednego lub więcej pól. Pola "
-"używają składni wyrażeń regularnych, bez uwzględniania wielkości liter. "
-"Jeśli nie wiesz, jak działają wyrażenia regularne, po prostu wstawiaj części "
-"wyrazów tego, czego szukasz."
+"Zaznacz wpisy na playliście poprzez wypełnienie jednego lub więcej pól. Pola"
+" używają składni wyrażeń regularnych, bez uwzględniania wielkości liter. "
+"Jeśli nie wiesz, jak działają wyrażenia regularne, po prostu wstawiaj części"
+" wyrazów tego, czego szukasz."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Tytuł: "
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:271
msgid "Album: "
msgstr "Album:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
-msgstr "Artysta:"
+msgstr "Wykonawca:"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
msgstr "Nazwa pliku:"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
msgstr "Wyczyść poprzednie zaznaczenie przed szukaniem"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr "Automatycznie przełącz kolejkę dla pasujących wpisów"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr "Utwórz nową playlistę z pasującymi wpisami"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Zapisz jako statycznÄ… playlistÄ™"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Użyj względnej ścieżki"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Wczytaj playlistÄ™"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Zapisz playlistÄ™"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr "Edytor playlisty Audacious"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d z %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr "31 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr "63 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr "125 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr "250 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr "500 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr "1 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr "2 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr "4 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr "8 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr "16 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
-msgstr "Spakowana skórka Winamp 2.x"
+msgstr "Zarchiwizowany styl programu Winamp 2.x"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
-msgstr "Skórka Winamp 2.x"
+msgstr "Styl programu Winamp 2.x"
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Nie można utworzyć katalogu (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
-msgstr ""
+msgstr "O wtyczce sndfile"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
-msgstr ""
+msgstr "O SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
-msgstr ""
+msgstr "Korekcja dźwięku"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
-msgstr ""
+msgstr "Krótkie zazębianie się"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
-msgstr ""
+msgstr "Szybkość odtwarzania"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
-msgstr ""
+msgstr "Wysokość dźwięku"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Skaluj"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
-msgstr ""
+msgstr "SndStretch - Konfiguracja"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
-msgstr ""
+msgstr "Komenda wywoływana przy rozpoczęciu nowej piosenki."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
-msgstr ""
+msgstr "Komenda:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
-msgstr ""
+msgstr "Komenda wywoływana przy końcu piosenki."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
-msgstr ""
+msgstr "Komenda wywoływana, gdy Audacious dotrze do końca playlisty."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:455
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
+"Komenda wywoływana, gdy zmieni się tytuł piosenki (np. dla internetowych "
+"strumieni)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5122,32 +3425,47 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
-msgstr ""
-
-#: src/song_change/song_change.c:437
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Możesz użyć poniższych zmiennych, które ulegną\n"
+"odpowiedniemu podstawieniu przed wywołaniem komendy\n"
+"(nie wszystkie są użyteczne dla komend końca playlisty).\n"
+"\n"
+"%F: Częstotliwość (w hertzach)\n"
+"%c: Ilość kanałów\n"
+"%f: nazwa pliku (pełna ścieżka)\n"
+"%l: długość (w milisekundach)\n"
+"%n lub %s: nazwa piosenki\n"
+"%r: Jakość (bity na sekundę)\n"
+"%t: Pozycja na playliście (%02d)\n"
+"%p: Aktualnie odtwarzany (1 lub 0)%a: Wykonawca\n"
+"%b: Album\n"
+"%T: Tytuł utworu"
+
+#: src/song_change/song_change.c:488
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
+"<span size='small'>Parametry przekazane do powłoki powinny być zawarte w "
+"cudzysłowach. Ich brak jest zagrożeniem dla bezpieczeństwa.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
-msgstr ""
+msgstr "Komendy"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
-msgstr ""
-
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr ""
+msgstr "Zmiana piosenki"
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr "O wtyczce Status Icon"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5165,136 +3483,73 @@ msgstr ""
"Ta wtyczka dostarcza ikonÄ™ stanu, umieszczonÄ…\n"
"w zasobniku systemowym menedżera okien.\n"
-
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr "Wtyczka Status Icon - Preferencje"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr "Menu PPM"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Małe menu odtwarzania #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Małe menu odtwarzania #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
msgstr "Akcja rolki myszy"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr "Zmiana głośności"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr "Zmiana odtwarzanego utworu"
-#: src/stereo_plugin/stereo.c:40
-msgid ""
-"Extra Stereo Plugin\n"
-"\n"
-"By Johan Levin 1999."
-msgstr ""
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Inne ustawienia"
-#: src/stereo_plugin/stereo.c:64
-msgid "About Extra Stereo Plugin"
-msgstr ""
-
-#: src/stereo_plugin/stereo.c:100
-msgid "Configure Extra Stereo"
-msgstr ""
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Wyłącz okno powiadamiania"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Zamknij do obszaru powiadamiania (systemowy tray)"
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
msgstr ""
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:332
+#: src/stereo_plugin/stereo.c:45
msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+"Extra Stereo Plugin\n"
"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr ""
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
+"By Johan Levin 1999."
msgstr ""
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
+"Wtyczka Extra Stereo\n"
"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr ""
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr ""
+"Johan Levin, 1999."
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr ""
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr ""
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "O wtyczce Extra Stereo"
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr ""
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "Konfiguruj dźwięk stereo"
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
-msgstr ""
+msgstr "O generatorze sygnałów"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5302,37 +3557,30 @@ msgid ""
"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
+"Generator sygnałów Sinus autorstwa Haavard Kvaalen <havardk@xmms.org>\n"
+"Zmodyfikowany przez Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"Aby go użyć, dodaj URL w postaci: tone://częstotliwość1;częstotliwość2;częstotliwość3;...\n"
+"np. tone://2000;2005 aby odtworzyć sygnał o kombinacji częstotliwości 2000Hz oraz 2005Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
-msgstr ""
+msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
-msgstr ""
-
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr ""
+msgstr "Generator sygnałów: "
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr ""
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "O wtyczce File I/O"
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr ""
-
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr ""
-
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
-msgstr ""
+msgstr "O wtyczce dźwięku Ogg Vorbis"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5350,32 +3598,59 @@ msgid ""
"\n"
"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
msgstr ""
+"Wtyczka Ogg Vorbis autorstwa Xiph.org Foundation\n"
+"\n"
+"Oryginalny kod:\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Wsparcie od:\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Odwiedź witrynę Xiph.org Foundation: http://www.xiph.org/\n"
#: src/vtx/about.c:14
msgid "About Vortex Player"
-msgstr ""
+msgstr "O odtwarzaczu Vortex"
#: src/vtx/about.c:15
msgid ""
"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
-"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor."
-"ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
"\n"
"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
"and other AY/YM music sites.\n"
"\n"
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
+"Odtwarzacz plików formatu Vortex stworzony przez Sashnov Alexander <sashnov@ngs.ru>\n"
+"Oryginalne źródła znalezione w_vtx.dll przez Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Muzykę w formacie vtx można znaleźć na http://vtx.microfor.ru/music.htm\n"
+"oraz na innych witrynach z muzykÄ… AY/YM.\n"
+"\n"
+"Implementacja w Audacious: Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
-msgstr ""
+msgstr "Wtyczka dekodera Wavpack %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
"Some of the plugin code was by Miles Egan\n"
"Visit the Wavpack site at http://www.wavpack.com/\n"
msgstr ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Część kodu napisał Miles Egan\n"
+"Odwiedź witrynę internetową Wavpack: http://www.wavpack.com/\n"
+
+
diff --git a/po/ro.po b/po/ro.po
index e606058..5612901 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins 1.4.0\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2007-08-28 20:44+0200\n"
"Last-Translator: Daniel Patriche <m4st3rth0r@gmail.com>\n"
"Language-Team: Romanian <audacious@atheme.org>\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, fuzzy, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -31,629 +31,55 @@ msgstr ""
"decoder-ul este ·(C)·Nero·AG,·www.nero.com\n"
"Copyright·(c)·2005-2006·Echipa de dezvoltare Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Despre "
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright·(C)·2002,·2003·Simon·Peter·<dn.tlp@gmx.net>\n"
-"\n"
-"Acest plugin este distribuit conform termenilor și condițiilor licenței GNU "
-"LGPL.\n"
-"Vedeți·http://www.gnu.org/licenses/lgpl.html·tentru detalii.\n"
-"\n"
-"Plugin-ul folosește biblioteca AdPlug,·Copyright·(C)·Simon·Peter·și alții.\n"
-"Versiunea AdPlug pentru care a fost link-editat:·"
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug·::·Configurare"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Ok"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Anulează"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "General"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Calitatea sunetului"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Rezoluție"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 biți"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 biți"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Canale"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Nu este recomandată setarea forțată Stereo, decât dacă este neapărată "
-"nevoieAceastă setare nu va adăuga efecte stereo, deoarece OPL2 suportă doar "
-"MonoVa consuma însă mai multe resurse de calcul!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frecvența"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Redare"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Detectează sfârșitul melodiei"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Dacă este activat, Audacious va detecta·sfârșitul melodiei, va opri redarea "
-"și va avansa la melodia următoare. Dacă este dezactivat, nu se va ști când s-"
-"a terminat melodia și va fi redată din nou, la infinit. "
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formate"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Selecția formatelor"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Format"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Extensie"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Tipurile de fișiere selectate vor fi recunoscute și redate de acest plugin. "
-"Cele deselectate vor fi ignorate, dar pot fi redate de alte pluginuri."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug·::·Informații despre fișier"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Numele Fișierului:"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Titlu: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Tipul Fișierului: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Sub-melodii: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Instrumente: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Ordine: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Șabloane: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Melodia"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Numele Instrumentului"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Mesajul melodiei"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Selecția sub-melodiei"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Ordine: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Șablon: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Linie: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Viteză: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Cronometru: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "Despre plugin-ul·pentru Alarmă"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS·Alarm"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"Acest plugin poate fi folosit pentru\n"
-"a orni redarea la un anumit timp.\n"
-"\n"
-"Trimiteți eventualele reclamații la:\n"
-"Adam·Feakin·<adamf@snika.uklinux.net>\n"
-"Daniel·Stodden·<stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "ÃŽnchide"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "Alarmă"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "Acesta este semnalul de deșteptare."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "Ok"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Selectați Playlist-ul"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Ne pare rău"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Avertizare"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Din motive de siguranță, timpul de \"liniște\" trebuie să fie de minim 65 "
-"secunde.For·safety·reasons·the·\"quiet"
-"\"·time·must·be·at·least·65·seconds·longer·than·the·fading·time,"
-"·it·must·also·be·more·than·10·seconds."
-"··This·basically·means·that·there·is·a·bug·in·the·code·and·until·I·find·a·way·of·really·fixing·it·this·message·will·appear·:)\n"
-"\n"
-"Your·fading·settings·have·NOT·been·saved\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Ok"
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "Opțiuni ale plugin-ului Alarm"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "Timp"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "ore"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "h"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr ""
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "Oprește după:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "Alarmă la (implicit):"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "Alegeți zilele în care să pornească alarma"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-#, fuzzy
-msgid "Default"
-msgstr "Implicit"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "Ziua"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "Marți"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "Miercuri"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "Joi"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "Vineri"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "Sâmbătă"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "Duminică"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "Luni"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "Zile"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "Tranziție"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-#, fuzzy
-msgid "seconds"
-msgstr "secunde"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-#, fuzzy
-msgid "Volume"
-msgstr "Volum: %d%%"
-
-#: src/alarm/interface.c:1121
-#, fuzzy
-msgid "Current"
-msgstr "Plugin-ul de ieșire curent"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "resetează la volumul curent"
-
-#: src/alarm/interface.c:1130
-#, fuzzy
-msgid "Start at"
-msgstr "ÃŽncepe redarea playlist-ului curent"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "Final"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "Comandă adițională"
-
-#: src/alarm/interface.c:1253
-#, fuzzy
-msgid "enable"
-msgstr "Activează modul 'Mărime Dublă'"
-
-#: src/alarm/interface.c:1261
-#, fuzzy
-msgid "Playlist (optional)"
-msgstr "Selectați Playlist-ul"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "Răsfoiește"
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-#, fuzzy
-msgid "Reminder"
-msgstr "Reminder"
-
-#: src/alarm/interface.c:1312
-#, fuzzy
-msgid "Use reminder"
-msgstr "Folosește cursoare de mouse personalizate (oferite de skin)"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-#, fuzzy
-msgid "Options"
-msgstr "Meniu de Opțiuni"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "Ce înseamnă opțiunile acestea?"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-"\n"
-"Timp\n"
-" Alarmă la: \n"
-" Ora la care se va declanșa alarma.\n"
-"\n"
-" Oprește după: \n"
-" Oprește alarma după atât timp.\n"
-" (dacă dialogul de trezire nu este închis)\n"
-"\n"
-"\n"
-"Zile\n"
-" Ziua:\n"
-" Selectați zilele în care să se activeze alarma.\n"
-"\n"
-" Timp:\n"
-" Alegeți timpul la care va porni alarma în fiecare zi.\n"
-" sau selectați valoarea implicită folosind butonul\n"
-"\n"
-"\n"
-"Volum\n"
-" Tranziție: \n"
-" Va face volumul să crească lent până la valoarea \n"
-" maximă, iar aceasta este durata perioadei de\n"
-" tranziție.\n"
-"\n"
-"\n"
-" Volum inițial: \n"
-" Începe tranziția de la această valoare inițială a \n"
-" volumului.\n"
-"\n"
-" Volum final: \n"
-" Volumul maxim la care se va ajunge în timpul \n"
-" tranziției.\n"
-"\n"
-"\n"
-"Opțiuni:\n"
-" Comandă adițională:\n"
-" Comandă ce va fi rulată la momentul declanșării \n"
-" alarmei.\n"
-"\n"
-" Playlist: \n"
-" Încarcă un playlist a cărui melodii vor fi redate\n"
-" la declanșarea alarmei. (cu extensie .m3u), sau \n"
-" un link spre un fișier sau stream audio.\n"
-" Dacă nu este dat nimic vor fi folosite melodiile\n"
-" existente în playlist.\n"
-"\n"
-" Reminder:\n"
-" Afișează un mesaj de reamintire când alarma se \n"
-" oprește. Editați mesajul și activați-l dacă doriți \n"
-" ca acesta să fie afișat.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "Ajutor"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr "Mesajul de reamintire pentru ziua de azi este..."
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr "Mulțumesc"
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "Salvează Lista Implicită"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "Salvează Lista Implicită"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "Preferințele Plugin-ului de Ieșire"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "Dispozitiv mixer:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Dispozitiv mixer:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "Dispozitiv mixer:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
#, fuzzy
msgid "ALSA error"
msgstr "Terror"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -685,11 +111,11 @@ msgstr ""
"\n"
"Backend-ul a fost scris de către Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "Backend-ul FluidSynth"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -699,74 +125,48 @@ msgid ""
"Backend written by Giacomo Lozito."
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
#, fuzzy
msgid "Port"
msgstr "Port-ul:"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
#, fuzzy
msgid "Client name"
msgstr "Numele Instrumentului"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
#, fuzzy
msgid "Port name"
msgstr "Numele Instrumentului"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
#, fuzzy
msgid "ALSA output ports"
msgstr "Plugin-ul de ieșire curent"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Placa de sunet:"
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Controlul mixerului:"
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
#, fuzzy
msgid "Mixer settings"
msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "Backend-ul ALSA nu este incarcat sau nu este disponibil"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -774,315 +174,179 @@ msgstr ""
"<span size=\"smaller\">Backend-ul\n"
"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - informatii backend"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
#, fuzzy
msgid "AMIDI-PLUG PREFERENCES"
msgstr "Preferințele Plugin-ului de Ieșire"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
#, fuzzy
msgid "Backend selection"
msgstr "Selecția formatelor"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
#, fuzzy
msgid "Available backends"
msgstr "_Preset-uri disponibile:"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
#, fuzzy
msgid "Playback settings"
msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
#, fuzzy
msgid "Advanced settings"
msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "extrage comentariile din fişierul MIDI (dacă sunt disponibile)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "extrage versuri din fişierul MIDI (dacă sunt disponibile)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - Alege fiÅŸierul"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - Configuraţie"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - Selectaţi fişierul SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
#, fuzzy
msgid "SoundFont settings"
msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Numele Fișierului:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
#, fuzzy
msgid "Size (bytes)"
msgstr "Mărimea Buffer-ului:"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "Încarcă SF la pornirea playerului"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "Încarcă SF la prima redare a unui fişier MIDI"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
#, fuzzy
msgid "Synthesizer settings"
msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
#, fuzzy
msgid "use default"
msgstr "Skin-ul implicit:"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "valoare:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "polifonie"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "reverb"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "da"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
#, fuzzy
msgid "no"
msgstr "Nu avansa în Playlist"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
#, fuzzy
msgid "sample rate"
msgstr "Rata de Reîmprospătare"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
#, fuzzy
msgid "22050 Hz "
msgstr "Rata de eșantionare [Hz]:"
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
#, fuzzy
msgid "44100 Hz "
msgstr "Rata de eșantionare [Hz]:"
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
#, fuzzy
msgid "96000 Hz "
msgstr "Rata de eșantionare [Hz]:"
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
#, fuzzy
msgid "custom "
msgstr "Format specificat:"
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
#, fuzzy
msgid "Hz "
msgstr "Hz"
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1102,8 +366,7 @@ msgid ""
"backend</span>"
msgstr ""
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
#, fuzzy
msgid "Name:"
msgstr "Numele Instrumentului"
@@ -1263,212 +526,212 @@ msgstr "Pauză pentru"
msgid "Triggers OSD when playback is unpaused."
msgstr ""
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "Pozitionare"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
#, fuzzy
msgid "Relative X offset:"
msgstr "Folosește cale relativă"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
#, fuzzy
msgid "Relative Y offset:"
msgstr "Folosește cale relativă"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr ""
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr ""
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
#, fuzzy
msgid "Display OSD using:"
msgstr "Arată fereastra principală"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
#, fuzzy
msgid "all monitors"
msgstr "Selectează Tot"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr ""
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr ""
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
#, fuzzy
msgid "Display:"
msgstr "La afișare"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
#, fuzzy
msgid "Fade in:"
msgstr "Pornește"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr ""
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
#, fuzzy
msgid "Fonts"
msgstr "<b>_Fonturi</b>"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, fuzzy, c-format
msgid "Font %i:"
msgstr "Alege fontul playlist-ului"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr ""
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "Internaţionalizare"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr ""
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
#, fuzzy
msgid "Select Skin File"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr ""
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Culori"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, fuzzy, c-format
msgid "Color %i:"
msgstr "Ajustarea culorii"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
#, fuzzy
msgid "Custom Skin"
msgstr "Skin-ul implicit:"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
#, fuzzy
msgid "Skin file:"
msgstr "Tipul Fișierului: "
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr ""
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
#, fuzzy
msgid "Enable trigger"
msgstr "Activează modul 'Mărime Dublă'"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Eveniment"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
#, fuzzy
msgid "Composite manager detected"
msgstr "Deschide Managerul de Playlist-uri"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
"manager otherwise the OSD won't work properly"
msgstr ""
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr ""
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Transparenţă"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Transparenţă falsă"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Transparenţă reală (necesita Extensia X Composite)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "Extensia composită nu a fost încărcată"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "Extensia composită nu este disponibilă"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr ""
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
#, fuzzy
msgid "Audacious OSD - configuration"
msgstr "Developerii Audacious:"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Test"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Poziţie"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "Animaţie"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Text"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Decoraţii"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "DeclanÅŸator"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr ""
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
#, fuzzy
msgid "Audacious OSD - about"
msgstr "Despre plugin-ul·pentru Alarmă"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
msgstr ""
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1481,133 +744,6 @@ msgid ""
"\n"
msgstr ""
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-#, fuzzy
-msgid "Available Headsets"
-msgstr "_Preset-uri disponibile:"
-
-#: src/bluetooth/gui.c:224
-#, fuzzy
-msgid "Current Headset"
-msgstr "Plugin-ul de ieșire curent"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr ""
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "Mod de Vizualizare"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "ÃŽnchide"
-
-#: src/bluetooth/gui.c:274
-#, fuzzy
-msgid "Class"
-msgstr "Classical"
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "Adaugă Adresa Internet..."
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-#, fuzzy
-msgid "Rescan"
-msgstr "Dreptunghi"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-#, fuzzy
-msgid "Play"
-msgstr "Pauză pentru"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr ""
@@ -1617,12 +753,12 @@ msgstr ""
msgid "Options:"
msgstr "Meniu de Opțiuni"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1637,138 +773,173 @@ msgid ""
"Copyright 2009 John Lindgren"
msgstr ""
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+#, fuzzy
+msgid "Audio CD"
+msgstr "Audio"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
#, fuzzy
msgid "CD Audio Plugin Configuration"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
#, fuzzy
msgid "Digital audio extraction"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
#, fuzzy
msgid "Title information"
msgstr "Informații despre Track"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr ""
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
#, fuzzy
msgid "Use cd-text if available"
msgstr "Folosește fonturi Bitmap dacă sunt disponibile"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
#, fuzzy
msgid "Use CDDB if available"
msgstr "Folosește fonturi Bitmap dacă sunt disponibile"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Server:"
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
#, fuzzy
msgid "Path: "
msgstr "Șablon: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
#, fuzzy
msgid "Port: "
msgstr "Port-ul:"
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr ""
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
#, fuzzy
msgid "Override default device: "
msgstr "Salvează Lista Implicită"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "Ok"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Anulează"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "Pauză pentru"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Add CD"
msgstr "Adauga CD..."
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
#, fuzzy
msgid "Dynamic Range Compressor Preferences"
msgstr "Preferințe Audacious"
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "Schimbă volumul cu"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Lista plugin-urilor de _Efecte"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
msgid "Game Console Music Decoder"
msgstr ""
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "General"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Redare"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "Bass:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr ""
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "Inalte:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
#, fuzzy
msgid "Default song length:"
msgstr "Pauză"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr ""
-#: src/console/configure.c:215
+#: src/console/configure.c:216
#, fuzzy
msgid "Enable audio resampling"
msgstr "Activează proxy"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
#, fuzzy
msgid "Resampling rate:"
msgstr "Rata de Reîmprospătare"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr ""
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr "Măreşte reverbul"
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1786,31 +957,31 @@ msgid ""
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
#, fuzzy
msgid "Crossfade Preferences"
msgstr "Preferințe Audacious"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "Crossover"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1818,22 +989,26 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
#, fuzzy
msgid "Configure Crystalizer"
msgstr "Configurează"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
#, fuzzy
msgid "Effect intensity:"
msgstr "Lista plugin-urilor de _Efecte"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr ""
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1841,391 +1016,55 @@ msgid ""
"Surround echo by Carl van Schaik 1999"
msgstr ""
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
#, fuzzy
msgid "About Echo Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "Configurează Ecou"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr ""
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr ""
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
#, fuzzy
msgid "Volume: (%)"
msgstr "Volum: %d%%"
-#: src/evdev-plug/ed.c:60
-#, fuzzy
-msgid "Playback->Play"
-msgstr "Redă fișiere"
-
-#: src/evdev-plug/ed.c:61
-#, fuzzy
-msgid "Playback->Stop"
-msgstr "Oprește melodia curentă"
-
-#: src/evdev-plug/ed.c:62
-#, fuzzy
-msgid "Playback->Pause"
-msgstr "Pauză pentru"
-
-#: src/evdev-plug/ed.c:63
-#, fuzzy
-msgid "Playback->Prev"
-msgstr "Continuă redarea la pornire"
-
-#: src/evdev-plug/ed.c:64
-#, fuzzy
-msgid "Playback->Next"
-msgstr "Selectează Playlist-ul Următor"
-
-#: src/evdev-plug/ed.c:65
-#, fuzzy
-msgid "Playback->Eject"
-msgstr "Continuă redarea la pornire"
-
-#: src/evdev-plug/ed.c:67
-#, fuzzy
-msgid "Playlist->Repeat"
-msgstr "Selectați Playlist-ul"
-
-#: src/evdev-plug/ed.c:68
-#, fuzzy
-msgid "Playlist->Shuffle"
-msgstr "Selectați Playlist-ul"
-
-#: src/evdev-plug/ed.c:70
-#, fuzzy
-msgid "Volume->Up_5"
-msgstr "Restrânge player-ul"
-
-#: src/evdev-plug/ed.c:71
-#, fuzzy
-msgid "Volume->Down_5"
-msgstr "Schimbă volumul cu"
-
-#: src/evdev-plug/ed.c:72
-#, fuzzy
-msgid "Volume->Up_10"
-msgstr "Restrânge player-ul"
-
-#: src/evdev-plug/ed.c:73
-#, fuzzy
-msgid "Volume->Down_10"
-msgstr "Schimbă volumul cu"
-
-#: src/evdev-plug/ed.c:74
-#, fuzzy
-msgid "Volume->Mute"
-msgstr "Schimbă volumul cu"
-
-#: src/evdev-plug/ed.c:76
-#, fuzzy
-msgid "Window->Main"
-msgstr "Arată fereastra principală"
-
-#: src/evdev-plug/ed.c:77
-#, fuzzy
-msgid "Window->Playlist"
-msgstr "Selectați Playlist-ul"
-
-#: src/evdev-plug/ed.c:78
-#, fuzzy
-msgid "Window->Equalizer"
-msgstr "Egalizator Audacious"
-
-#: src/evdev-plug/ed.c:79
-#, fuzzy
-msgid "Window->JumpToFile"
-msgstr "Fereastra de Preferințe"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "Detectează sfârșitul melodiei"
-
-#: src/evdev-plug/ed_ui.c:217
-#, fuzzy
-msgid "Custom"
-msgstr "Format specificat:"
-
-#: src/evdev-plug/ed_ui.c:223
-#, fuzzy
-msgid "Not Detected"
-msgstr "Selecția formatelor"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-#, fuzzy
-msgid "Information"
-msgstr "Informații despre Track"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-#, fuzzy
-msgid "Error"
-msgstr "Eroare în Audacious"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-#, fuzzy
-msgid "Device name:"
-msgstr "Numele Instrumentului"
-
-#: src/evdev-plug/ed_ui.c:365
-#, fuzzy
-msgid "Device file:"
-msgstr "Tipul Fișierului: "
-
-#: src/evdev-plug/ed_ui.c:404
-#, fuzzy
-msgid "(custom)"
-msgstr "Format specificat:"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Activ"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Statut"
-
-#: src/evdev-plug/ed_ui.c:664
-#, fuzzy
-msgid "Device Name"
-msgstr "Numele Instrumentului"
-
-#: src/evdev-plug/ed_ui.c:668
-#, fuzzy
-msgid "Device File"
-msgstr "Tipul Fișierului: "
-
-#: src/evdev-plug/ed_ui.c:672
-#, fuzzy
-msgid "Device Address"
-msgstr "Adaugă Adresa Internet..."
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1363
-#, fuzzy
-msgid "<b>Name: </b>"
-msgstr "Numele Instrumentului"
-
-#: src/evdev-plug/ed_ui.c:1372
-#, fuzzy
-msgid "<b>Filename: </b>"
-msgstr "Numele Fișierului:"
-
-#: src/evdev-plug/ed_ui.c:1381
-#, fuzzy
-msgid "<b>Phys.Address: </b>"
-msgstr "Adaugă Adresa Internet..."
-
-#: src/evdev-plug/ed_ui.c:1460
-#, fuzzy
-msgid "EvDev-Plug - about"
-msgstr "Despre plugin-ul·pentru Alarmă"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
#, fuzzy
msgid "About FileWriter-Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2261,260 +1100,229 @@ msgstr ""
"\n"
"Autor: Matthieu Sozeau (mattam@altern.org)"
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
#, fuzzy
msgid "File Writer Configuration"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
#, fuzzy
msgid "Output file format:"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "Configurează"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "Salvează în directorul original"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "Salvează în directorul specificat"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
#, fuzzy
msgid "Output file folder:"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Alegeţi un director"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
#, fuzzy
msgid "Get filename from:"
msgstr "După calea completă"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
#, fuzzy
msgid "original file tags"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
#, fuzzy
msgid "original filename"
msgstr "După Fișier"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr ""
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr ""
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+#, fuzzy
+msgid "Auto"
+msgstr "Auto-Încarcă Preset-ul"
+
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:724
#, fuzzy
msgid "MP3 Configuration"
msgstr "AdPlug·::·Configurare"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
#, fuzzy
msgid "Algorithm Quality:"
msgstr "Calitatea sunetului"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
#, fuzzy
msgid "Output Samplerate:"
msgstr "Plugin-ul de ieșire curent"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-#, fuzzy
-msgid "Auto"
-msgstr "Auto-Încarcă Preset-ul"
-
#: src/filewriter/mp3.c:800
#, fuzzy
msgid "(Hz)"
msgstr "Hz"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "Bitrate-ul (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr ""
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
#, fuzzy
msgid "Audio Mode:"
msgstr "Mod de Vizualizare"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr ""
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr ""
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr ""
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
#, fuzzy
msgid "Error protection"
msgstr "Eroare în Audacious"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
#, fuzzy
msgid "Quality"
msgstr "Calitatea sunetului"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
#, fuzzy
msgid "Enable VBR/ABR"
msgstr "Activează proxy"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
#, fuzzy
msgid "Type:"
msgstr "Tipul Fișierului: "
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Bitrate variabil"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Bitrate mediu"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
#, fuzzy
msgid "VBR Options:"
msgstr "Meniu de Opțiuni"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "Bitrate minim (kbps)"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "Bitrate maxim (kbps)"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr ""
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
#, fuzzy
msgid "ABR Options:"
msgstr "Meniu de Opțiuni"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr ""
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr ""
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr ""
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr ""
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
#, fuzzy
msgid "Mark as copyright"
msgstr "Salvează ca și playlist static"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
#, fuzzy
msgid "Mark as original"
msgstr "Salvează ca și playlist static"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr ""
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr ""
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr "Adaugă numai tag-ul v1"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr "Adaugă numai tag-ul v2"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr "Tag-uri"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Configuraţia Vorbis Encoder"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "Nivelul de calitate (0 - 10):"
-#: src/flacng/plugin.c:457
+#: src/flacng/plugin.c:379
#, fuzzy
-msgid "FLAC Audio Plugin "
+msgid "About FLAC Audio Plugin"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2524,17 +1332,12 @@ msgid ""
"http://www.skytale.net/projects/bmp-flac2/"
msgstr ""
-#: src/flacng/plugin.c:464
-#, fuzzy
-msgid "About FLAC Audio Plugin"
-msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
#, fuzzy
msgid "About Gnome Shortcut Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2543,525 +1346,510 @@ msgid ""
"\n"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "Numele Fișierului:"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "%s - Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "Numărul Trackului"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
#, fuzzy
-msgid "Jump to Time"
-msgstr "Fereastra de Preferințe"
+msgid "Title"
+msgstr "Titlu"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "minutes:seconds"
-msgstr "secunde"
+msgid "Artist"
+msgstr "Artist"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Track length:"
-msgstr "Informații despre Track"
+msgid "Year"
+msgstr "Anul"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr ""
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr ""
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Track"
+msgstr "Informații despre Track"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Export Playlist"
-msgstr "AdPlug·::·Informații despre fișier"
+msgid "Queue position"
+msgstr "Poziţie"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Import Playlist"
-msgstr "AdPlug·::·Informații despre fișier"
+msgid "Length"
+msgstr "Mărimea track-ului"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File path"
+msgstr "Numele Fișierului:"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, fuzzy, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File name"
+msgstr "Numele Fișierului:"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Audacious"
-msgstr "%s - Audacious"
+msgid "Custom title"
+msgstr "Skin-ul implicit:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
+#: src/gtkui/columns.c:39
+#, fuzzy
+msgid "Bitrate"
+msgstr "Rata de Reîmprospătare"
+
+#: src/gtkui/columns.c:286
+msgid "Choose Columns"
msgstr ""
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
+#: src/gtkui/columns.c:300
#, fuzzy
-msgid "Repeat"
-msgstr "Beat"
+msgid "Available:"
+msgstr "variabil"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
msgstr ""
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
msgstr ""
-#: src/gtkui/ui_manager.c:47
-#, fuzzy
-msgid "Show playlists"
-msgstr "Selectați Playlist-ul"
-
-#: src/gtkui/ui_manager.c:48
-#, fuzzy
-msgid "Show/hide playlists"
-msgstr "Selectați Playlist-ul"
-
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
msgstr ""
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
msgstr ""
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
msgstr ""
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
+#: src/gtkui/layout.c:123
+msgid "Undock"
msgstr ""
-#: src/gtkui/ui_manager.c:56
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Show statusbar"
-msgstr "Statut"
+msgid "Disable"
+msgstr "variabil"
-#: src/gtkui/ui_manager.c:57
+#: src/gtkui/menus.c:132
#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Selectați Playlist-ul"
+msgid "_Open Files ..."
+msgstr "Numele Fișierului:"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-#, fuzzy
-msgid "Pause"
-msgstr "La încărcare"
+#: src/gtkui/menus.c:133
+msgid "Open _URL ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
+#: src/gtkui/menus.c:134
#, fuzzy
-msgid "Stop"
-msgstr "Synthpop"
+msgid "_Add File ..."
+msgstr "Numele Fișierului:"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Previous"
-msgstr "Primus"
+msgid "Add U_RL ..."
+msgstr "Numele Fișierului:"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
+#: src/gtkui/menus.c:137
#, fuzzy
-msgid "Next"
-msgstr "Text"
+msgid "A_bout ..."
+msgstr "Despre "
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
+#: src/gtkui/menus.c:138
#, fuzzy
-msgid "Playlist"
-msgstr "Selectați Playlist-ul"
+msgid "_Preferences ..."
+msgstr "Preferințe Audacious"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
#, fuzzy
-msgid "New Playlist"
-msgstr "Selectați Playlist-ul"
+msgid "_Quit"
+msgstr "Calitatea sunetului"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Delete Playlist"
-msgstr "Selectați Playlist-ul"
+msgid "_Play"
+msgstr "Pauză pentru"
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/menus.c:143
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "AdPlug·::·Informații despre fișier"
-
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr ""
+msgid "Paus_e"
+msgstr "La încărcare"
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:144
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "AdPlug·::·Informații despre fișier"
+msgid "_Stop"
+msgstr "Synthpop"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
+#: src/gtkui/menus.c:145
#, fuzzy
-msgid "Saves the selected playlist."
-msgstr "Selectați Playlist-ul"
+msgid "Pre_vious"
+msgstr "Primus"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:146
#, fuzzy
-msgid "Save All Playlists"
-msgstr "Selectați Playlist-ul"
-
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
+msgid "_Next"
+msgstr "Text"
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr ""
+#: src/gtkui/menus.c:148
+#, fuzzy
+msgid "_Repeat"
+msgstr "Beat"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
+#: src/gtkui/menus.c:149
+msgid "S_huffle"
msgstr ""
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:150
#, fuzzy
-msgid "Playlist Manager"
+msgid "N_o Playlist Advance"
msgstr "Selectați Playlist-ul"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
+#: src/gtkui/menus.c:151
+msgid "Stop _After This Song"
msgstr ""
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
msgstr ""
-#: src/gtkui/ui_manager.c:115
+#: src/gtkui/menus.c:154
#, fuzzy
-msgid "Add Files ..."
-msgstr "Numele Fișierului:"
-
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-#, fuzzy
-msgid "Remove All"
-msgstr "Șterge Duplicatele"
-
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr ""
+msgid "Jump to _Time ..."
+msgstr "Fereastra de Preferințe"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
msgstr ""
-#: src/gtkui/ui_manager.c:131
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "Sort"
-msgstr "Port-ul:"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-#, fuzzy
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "Numărul Trackului"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
+#: src/gtkui/menus.c:159
#, fuzzy
-msgid "By Title"
+msgid "By _Title"
msgstr "Titlu"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
+#: src/gtkui/menus.c:160
#, fuzzy
-msgid "By Artist"
+msgid "By _Artist"
msgstr "Artist"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "Album"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
+#, fuzzy
+msgid "By Release _Date"
+msgstr "Data:"
+
+#: src/gtkui/menus.c:163
#, fuzzy
-msgid "By File Path"
+msgid "By _File Path"
msgstr "Numele Fișierului:"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
+#: src/gtkui/menus.c:164
+#, fuzzy
+msgid "By _Custom Title"
+msgstr "Skin-ul implicit:"
+
+#: src/gtkui/menus.c:166
+msgid "R_everse Order"
msgstr ""
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
+#: src/gtkui/menus.c:167
+msgid "_Random Order"
msgstr ""
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-#, fuzzy
-msgid "Effects"
-msgstr "<b>Efecte</b>"
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
+msgid "_Refresh"
+msgstr ""
-#: src/gtkui/ui_manager.c:151
+#: src/gtkui/menus.c:172
#, fuzzy
-msgid "Equalizer"
-msgstr "Egalizator Audacious"
+msgid "_Sort"
+msgstr "Port-ul:"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr ""
+#: src/gtkui/menus.c:175
+#, fuzzy
+msgid "_Close"
+msgstr "ÃŽnchide"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "File"
-msgstr "Numele Fișierului:"
+msgid "_Import ..."
+msgstr "Importă"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:178
#, fuzzy
-msgid "Components"
-msgstr "Comentariu"
+msgid "_Export ..."
+msgstr "AdPlug·::·Informații despre fișier"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
+#: src/gtkui/menus.c:180
#, fuzzy
-msgid "View Track Details"
-msgstr "Fereastra cu informații despre Track"
+msgid "_Playlist Manager ..."
+msgstr "Selectați Playlist-ul"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr ""
+#: src/gtkui/menus.c:183
+#, fuzzy
+msgid "Volume _Up"
+msgstr "Volum: %d%%"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
+#: src/gtkui/menus.c:184
#, fuzzy
-msgid "About Audacious"
-msgstr "Despre plugin-ul decodor MP4·AAC"
+msgid "Volume _Down"
+msgstr "Schimbă volumul cu"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr ""
+#: src/gtkui/menus.c:186
+#, fuzzy
+msgid "_Equalizer"
+msgstr "Egalizator Audacious"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
+#: src/gtkui/menus.c:188
#, fuzzy
-msgid "Load and play a file"
-msgstr "Încarcă SF la pornirea playerului"
+msgid "E_ffects"
+msgstr "<b>Efecte</b>"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-#, fuzzy
-msgid "Play media from the selected location"
-msgstr "Selecția formatelor"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "Statut"
+
+#: src/gtkui/menus.c:197
+msgid "Show Column _Headers"
msgstr ""
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
+#: src/gtkui/menus.c:198
+msgid "Choose _Columns ..."
msgstr ""
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
+#: src/gtkui/menus.c:199
#, fuzzy
-msgid "_Quit"
-msgstr "Calitatea sunetului"
+msgid "Scrol_l on Song Change"
+msgstr "Mesajul melodiei"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
+#: src/gtkui/menus.c:202
#, fuzzy
-msgid "Quit Audacious"
-msgstr "%s - Audacious"
+msgid "_File"
+msgstr "Numele Fișierului:"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr ""
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "Redare"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr ""
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "Selectați Playlist-ul"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr ""
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "Server"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
+#: src/gtkui/menus.c:206
#, fuzzy
-msgid "Jump to File"
-msgstr "Fereastra de Preferințe"
+msgid "_Output"
+msgstr "Plugin-ul de ieșire curent"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
+#: src/gtkui/menus.c:207
+msgid "_View"
msgstr ""
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "Cult"
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
+#: src/gtkui/menus.c:216
+msgid "_Paste"
msgstr ""
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
+#: src/gtkui/menus.c:217
#, fuzzy
-msgid "Select All"
+msgid "Select _All"
msgstr "Selectați Playlist-ul"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
+#: src/gtkui/menus.c:222
+#, fuzzy
+msgid "_Rename"
+msgstr "Numele Fișierului:"
+
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, fuzzy, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
#, fuzzy
-msgid "Select None"
-msgstr "AdPlug·::·Informații despre fișier"
+msgid "Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr ""
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+#, fuzzy
+msgid "Error"
+msgstr "Eroare în Audacious"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
#, fuzzy
msgid "mono"
msgstr "Mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
#, fuzzy
msgid "stereo"
msgstr "Stereo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Canale"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "Canale"
+msgstr[1] "Canale"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr ""
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+#, fuzzy
+msgid "Play"
+msgstr "Pauză pentru"
+
+#: src/hotkey/gui.c:73
#, fuzzy
msgid "Pause/Resume"
msgstr "La încărcare"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+#, fuzzy
+msgid "Stop"
+msgstr "Synthpop"
+
+#: src/hotkey/gui.c:75
#, fuzzy
msgid "Next Track"
msgstr "Informații despre Track"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr ""
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr ""
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
#, fuzzy
msgid "Mute"
msgstr "Data:"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
#, fuzzy
msgid "Volume Up"
msgstr "Volum: %d%%"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
#, fuzzy
msgid "Volume Down"
msgstr "Schimbă volumul cu"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+#, fuzzy
+msgid "Jump to File"
+msgstr "Fereastra de Preferințe"
+
+#: src/hotkey/gui.c:82
#, fuzzy
msgid "Toggle Player Windows"
msgstr "Schimbă Coada"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr ""
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+#, fuzzy
+msgid "Toggle Repeat"
+msgstr "Beat"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr ""
+
+#: src/hotkey/gui.c:95
#, fuzzy
msgid "(none)"
msgstr "Deselectează tot"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3069,40 +1857,40 @@ msgid ""
"Do you want to continue?"
msgstr ""
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr ""
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
#, fuzzy
msgid "Global Hotkey Plugin Configuration"
msgstr "Lista plugin-urilor _Generale"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr ""
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr ""
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
#, fuzzy
msgid "<b>Action:</b>"
msgstr "Numele Fișierului:"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr ""
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
#, fuzzy
msgid "About Global Hotkey Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3145,7 +1933,7 @@ msgstr "Mod de Vizualizare"
msgid "Enable debug printing"
msgstr "Activează proxy"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3156,130 +1944,20 @@ msgid ""
"Giacomo Lozito from develia.org"
msgstr ""
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr ""
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr ""
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-#, fuzzy
-msgid "Name"
-msgstr "Numele Instrumentului"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr ""
-
-#: src/ladspa/ladspa.c:1029
-#, fuzzy
-msgid "Installed plugins"
-msgstr "Reîncarcă Plugin-urile"
-
-#: src/ladspa/ladspa.c:1037
-#, fuzzy
-msgid "Running plugins"
-msgstr "Reîncarcă Plugin-urile"
-
-#: src/ladspa/ladspa.c:1052
-#, fuzzy
-msgid "Add"
-msgstr "Adaugă Fișiere"
-
-#: src/ladspa/ladspa.c:1055
-#, fuzzy
-msgid "Remove"
-msgstr "Șterge Duplicatele"
-
-#: src/ladspa/ladspa.c:1066
-#, fuzzy
-msgid "LADSPA Plugin Catalog"
-msgstr "Lista plugin-urilor _Generale"
-
-#: src/lirc/about.c:63
-#, fuzzy
-msgid "About LIRC Audacious Plugin"
-msgstr "Despre plugin-ul decodor MP4·AAC"
-
-#: src/lirc/about.c:90
-#, fuzzy
-msgid "LIRC Plugin "
-msgstr "Plugin de intrare: %s"
-
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
-msgstr ""
-
-#: src/lirc/interface.c:37
-#, fuzzy
-msgid "LIRC plugin settings"
-msgstr "Plugin de intrare: %s"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr ""
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr ""
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr ""
-
-#: src/lirc/interface.c:79
-#, fuzzy
-msgid "Connection"
-msgstr "Mod de Vizualizare"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
+"Looking for lyrics..."
msgstr ""
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr ""
-
-#: src/lirc/lirc.c:342
-#, fuzzy, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "Încarcă preset din fișier"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr ""
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3288,12 +1966,12 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
#, fuzzy
msgid "About Metronom"
msgstr "Despre Audacious"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3302,269 +1980,64 @@ msgid ""
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr ""
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr ""
-#: src/modplug/gui/interface.cxx:137
-#, fuzzy
-msgid "ModPlug Configuration"
-msgstr "AdPlug·::·Configurare"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-#, fuzzy
-msgid "Sampling Rate"
-msgstr "<b>Convertor pentru rata de eșantionare</b>"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-#, fuzzy
-msgid "Enable"
-msgstr "Activează modul 'Mărime Dublă'"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-#, fuzzy
-msgid "Depth"
-msgstr "Adancimea cautarii"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr ""
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
msgstr ""
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-#, fuzzy
-msgid "Preamp"
-msgstr "PREAMP"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
msgstr ""
-#: src/modplug/gui/interface.cxx:606
-#, fuzzy
-msgid "Fast Playlist Info"
-msgstr "AdPlug·::·Informații despre fișier"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
msgstr ""
-#: src/modplug/gui/interface.cxx:623
-#, fuzzy
-msgid "Play Amiga MOD"
-msgstr "- redă fișierele multimedia"
-
-#: src/modplug/gui/interface.cxx:646
+#: src/notify/libnotify-aosd_event.c:47
#, fuzzy
-msgid "Don't loop"
-msgstr "Nu curăța playlist-ul"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:671
-#, fuzzy
-msgid "time(s)"
-msgstr "Timp Scurs"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr ""
+msgid "Stopped"
+msgstr "Synthpop"
-#: src/modplug/gui/interface.cxx:859
+#: src/notify/libnotify-aosd_event.c:47
#, fuzzy
-msgid "MOD Info"
+msgid "Audacious is not playing."
msgstr "AdPlug·::·Informații despre fișier"
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:938
-#, fuzzy
-msgid "Instruments"
-msgstr "Instrumente: "
-
-#: src/modplug/gui/interface.cxx:959
-#, fuzzy
-msgid "Message"
-msgstr "Mesajul melodiei"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr ""
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-
-#: src/modplug/gui/main.cxx:55
-#, fuzzy
-msgid "About Modplug"
-msgstr "Despre Audacious"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr ""
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr ""
-
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
-msgstr ""
-
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
-
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr ""
-
-#: src/null/null.c:63
+#: src/null/null.c:64
#, fuzzy
msgid "Null output plugin "
msgstr "Plugin-ul de ieșire curent"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
-#: src/null/null.c:67
+#: src/null/null.c:68
#, fuzzy
msgid "About Null Output"
msgstr "Plugin-ul de ieșire curent"
-#: src/null/null.c:93
+#: src/null/null.c:94
#, fuzzy
msgid "Null output preferences"
msgstr "Preferințele Plugin-ului de Ieșire"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr ""
@@ -3578,12 +2051,12 @@ msgstr "Salvează Lista Implicită"
msgid "OSS4 Output Plugin Preferences"
msgstr "Preferințele Plugin-ului de Ieșire"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
#, fuzzy
msgid "Audio device:"
msgstr "<b>Sistemul Audio</b>"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
#, fuzzy
msgid "Use alternate device:"
msgstr "Folosește cursoare de mouse personalizate (oferite de skin)"
@@ -3596,12 +2069,12 @@ msgstr ""
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3644,41 +2117,47 @@ msgstr ""
msgid "OSS4 error"
msgstr "Terror"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, fuzzy, c-format
msgid "Default (%s)"
msgstr "Implicit"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+#, fuzzy
+msgid "Default"
+msgstr "Implicit"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr ""
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr ""
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr ""
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr ""
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr ""
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
#, fuzzy
msgid "Mixer Settings:"
msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr ""
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr ""
@@ -3707,12 +2186,12 @@ msgid ""
"USA."
msgstr ""
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
#, fuzzy
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
#, fuzzy
msgid ""
"Audacious PulseAudio Output Plugin\n"
@@ -3748,57 +2227,57 @@ msgstr ""
"\n"
"Autor: Matthieu Sozeau (mattam@altern.org)"
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
#, fuzzy
msgid "Change password"
msgstr "Pauză"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr ""
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
#, fuzzy
msgid "Username:"
msgstr "Utilizator:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
#, fuzzy
msgid "Password:"
msgstr "Parolă:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
#, fuzzy
msgid "Scrobbler URL:"
msgstr "Eroare în Audacious"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
#, fuzzy
msgid "<b>Last.FM</b>"
msgstr "Radio Last.fm"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
#, fuzzy
msgid "Scrobbler"
msgstr "Eroare în Audacious"
@@ -3816,16 +2295,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "Despre plugin-ul·Apple·Lossless·Audio"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "Terror"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "Despre %s"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "ÃŽnchide"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "Eroare în Audacious"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "Ok"
+
#: src/sid/xs_fileinfo.c:151
#, fuzzy
msgid "General info"
@@ -3836,6 +2333,11 @@ msgstr "AdPlug·::·Informații despre fișier"
msgid "Tune #%i: "
msgstr "Pornește"
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr ""
+
#: src/sid/xs_interface.c:234
#, fuzzy
msgid "Audacious-SID configuration"
@@ -4122,17 +2624,17 @@ msgstr ""
msgid "Use"
msgstr ""
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
#, fuzzy
msgid "Save"
msgstr "Salvează"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
#, fuzzy
msgid "Import"
msgstr "Importă"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
#, fuzzy
msgid "Delete"
msgstr "Implicit"
@@ -4164,6 +2666,12 @@ msgstr ""
msgid "Playtime:"
msgstr ""
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+#, fuzzy
+msgid "seconds"
+msgstr "secunde"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr ""
@@ -4257,11 +2765,6 @@ msgstr ""
msgid "Song title format:"
msgstr "Formatul titlului:"
-#: src/sid/xs_interface.c:1103
-#, fuzzy
-msgid "Title"
-msgstr "Titlu"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr ""
@@ -4415,715 +2918,894 @@ msgstr "da"
msgid "No"
msgstr "Deselectează tot"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr ""
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
#, fuzzy
msgid "_Player:"
msgstr "Pauză pentru"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr ""
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "_Playlist:"
msgstr "Selectați Playlist-ul"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "Select playlist font:"
msgstr "Selectați Playlist-ul"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
#, fuzzy
msgid "<b>_Fonts</b>"
msgstr "Numele Fișierului:"
-#: src/skins/skins_cfg.c:323
-#, fuzzy
-msgid "Use Bitmap fonts if available"
-msgstr "Folosește fonturi Bitmap dacă sunt disponibile"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-
-#: src/skins/skins_cfg.c:324
-#, fuzzy
-msgid "<b>_Miscellaneous</b>"
-msgstr "Meniu de Opțiuni"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr ""
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
msgstr ""
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr ""
+#: src/skins/skins_cfg.c:346
+#, fuzzy
+msgid "<b>_Skin</b>"
+msgstr "Numele Fișierului:"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
+#: src/skins/skins_cfg.c:393
+#, fuzzy
+msgid "Interface Preferences"
+msgstr "Preferințe Audacious"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr ""
+#: src/skins/ui_equalizer.c:330
+#, fuzzy
+msgid "Preamp"
+msgstr "PREAMP"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "Rata de eșantionare [Hz]:"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:417
+#: src/skins/ui_equalizer.c:335
#, fuzzy
-msgid "Blue"
-msgstr "Blues"
+msgid "1 kHz"
+msgstr "11 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:569
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "<b>_Skin</b>"
-msgstr "Numele Fișierului:"
+msgid "8 kHz"
+msgstr "48 kHz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "16 kHz"
+msgstr "48 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
#, fuzzy
msgid "Audacious Equalizer"
msgstr "Egalizator Audacious"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr ""
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
msgid "surround"
msgstr ""
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr ""
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr ""
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr ""
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr ""
-
-#: src/skins/ui_main.c:1050
+#: src/skins/ui_main.c:807
#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr ""
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr ""
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, fuzzy, c-format
msgid "Volume: %d%%"
msgstr "Volum: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr ""
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr ""
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr ""
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
#, fuzzy
msgid "Options Menu"
msgstr "Meniu de Opțiuni"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
#, fuzzy
msgid "File Info Box"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr ""
-
-#: src/skins/ui_main.c:1633
-#, fuzzy
-msgid "Enable 'GUI Scaling'"
-msgstr "Activează proxy"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr ""
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "Selectați Playlist-ul"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
msgid "Stopping after song."
msgstr ""
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr ""
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr ""
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
#, fuzzy
msgid "Peaks"
msgstr "Pranks"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+#, fuzzy
+msgid "Repeat"
+msgstr "Beat"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr ""
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr ""
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr ""
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
#, fuzzy
msgid "Show Equalizer"
msgstr "Egalizator Audacious"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr ""
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr ""
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr ""
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr ""
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr ""
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr ""
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr ""
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
#, fuzzy
msgid "Analyzer"
msgstr "Modul Analizatorului"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
#, fuzzy
msgid "Scope"
msgstr "Synthpop"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr ""
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr ""
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
#, fuzzy
msgid "Normal"
msgstr "Format"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
#, fuzzy
msgid "Fire"
msgstr "Satire"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr ""
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
#, fuzzy
msgid "Lines"
msgstr "Latin"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
#, fuzzy
msgid "Bars"
msgstr "Bass"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
#, fuzzy
msgid "Dot Scope"
msgstr "Nu curăța playlist-ul"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr ""
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr ""
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr ""
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr ""
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
#, fuzzy
msgid "Slowest"
msgstr "Showtunes"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
#, fuzzy
msgid "Slow"
msgstr "Slow Jam"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr ""
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
#, fuzzy
msgid "Fast"
msgstr "Format"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr ""
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr ""
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr ""
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+#, fuzzy
+msgid "Pause"
+msgstr "La încărcare"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+#, fuzzy
+msgid "Previous"
+msgstr "Primus"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+#, fuzzy
+msgid "Next"
+msgstr "Text"
+
+#: src/skins/ui_manager.c:196
#, fuzzy
msgid "Visualization"
msgstr "Internaţionalizare"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr ""
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr ""
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr ""
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr ""
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr ""
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr ""
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr ""
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+#, fuzzy
+msgid "Playlist"
+msgstr "Selectați Playlist-ul"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+#, fuzzy
+msgid "New Playlist"
+msgstr "Selectați Playlist-ul"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
#, fuzzy
msgid "Select Next Playlist"
msgstr "Selectați Playlist-ul"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
#, fuzzy
msgid "Select Previous Playlist"
msgstr "Selectați Playlist-ul"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+#, fuzzy
+msgid "Delete Playlist"
+msgstr "Selectați Playlist-ul"
+
#: src/skins/ui_manager.c:222
-msgid "Refresh List"
+#, fuzzy
+msgid "Import Playlist"
+msgstr "AdPlug·::·Informații despre fișier"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
msgstr ""
#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "AdPlug·::·Informații despre fișier"
+
+#: src/skins/ui_manager.c:227
+#, fuzzy
+msgid "Saves the selected playlist."
+msgstr "Selectați Playlist-ul"
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "Selectați Playlist-ul"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
+msgid "Refresh List"
+msgstr ""
+
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr ""
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr ""
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr ""
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+#, fuzzy
+msgid "Interface Preferences ..."
+msgstr "Preferințe Audacious"
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr ""
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr ""
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+msgid "Adds files to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr ""
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
#, fuzzy
msgid "Invert Selection"
msgstr "Selecția formatelor"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr ""
+#: src/skins/ui_manager.c:267
+#, fuzzy
+msgid "Select All"
+msgstr "Selectați Playlist-ul"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:271
+#, fuzzy
+msgid "Select None"
+msgstr "AdPlug·::·Informații despre fișier"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:277
+#, fuzzy
+msgid "Remove All"
+msgstr "Șterge Duplicatele"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr ""
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr ""
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr ""
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr ""
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+#, fuzzy
+msgid "By Title"
+msgstr "Titlu"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr ""
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
#, fuzzy
msgid "By Filename"
msgstr "Numele Fișierului:"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
#, fuzzy
msgid "By Path + Filename"
msgstr "Numele Fișierului:"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr ""
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr ""
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:313
+#, fuzzy
+msgid "Randomize List"
+msgstr "Salvează"
+
+#: src/skins/ui_manager.c:314
+#, fuzzy
+msgid "Randomizes the playlist."
+msgstr "Selectați Playlist-ul"
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr ""
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr ""
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
#, fuzzy
msgid "Sort List"
msgstr "Artist"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr ""
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "Album"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
msgid "Sorts the list by album."
msgstr ""
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#, fuzzy
+msgid "By Artist"
+msgstr "Artist"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr ""
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr ""
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr ""
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
#, fuzzy
msgid "By Date"
msgstr "Data:"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr ""
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+#, fuzzy
+msgid "By Track Number"
+msgstr "Numărul Trackului"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr ""
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
#, fuzzy
msgid "Sort Selected"
msgstr "Selecția formatelor"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+#, fuzzy
+msgid "File"
+msgstr "Numele Fișierului:"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "Ajutor"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr ""
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+#, fuzzy
+msgid "View Track Details"
+msgstr "Fereastra cu informații despre Track"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr ""
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+#, fuzzy
+msgid "About Audacious"
+msgstr "Despre plugin-ul decodor MP4·AAC"
+
+#: src/skins/ui_manager.c:401
#, fuzzy
msgid "Play File"
msgstr "Pauză pentru"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+#, fuzzy
+msgid "Load and play a file"
+msgstr "Încarcă SF la pornirea playerului"
+
+#: src/skins/ui_manager.c:404
#, fuzzy
msgid "Play Location"
msgstr "Locaţie:"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+#, fuzzy
+msgid "Play media from the selected location"
+msgstr "Selecția formatelor"
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr ""
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr ""
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr ""
+
+#: src/skins/ui_manager.c:413
+#, fuzzy
+msgid "Quit Audacious"
+msgstr "%s - Audacious"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr ""
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+#, fuzzy
+msgid "Jump to Time"
+msgstr "Fereastra de Preferințe"
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr ""
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "Cult"
+
+#: src/skins/ui_manager.c:438
+msgid "Paste"
+msgstr ""
+
+#: src/skins/ui_manager.c:445
#, fuzzy
msgid "Load"
msgstr "Încarcă"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
#, fuzzy
msgid "Preset"
msgstr "Port-ul:"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr ""
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
#, fuzzy
msgid "Load default preset into equalizer"
msgstr "Încarcă presetarea implicită a egalizatorului"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
#, fuzzy
msgid "Zero"
msgstr "Retro"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr ""
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
msgid "From file"
msgstr ""
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
#, fuzzy
msgid "Load preset from file"
msgstr "Încarcă preset din fișier"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr ""
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr ""
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr ""
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
#, fuzzy
msgid "Save default preset"
msgstr "Încarcă presetarea implicită a egalizatorului"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
#, fuzzy
msgid "To file"
msgstr "Fisierul STIL:"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr ""
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
#, fuzzy
msgid "Delete preset"
msgstr "Implicit"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr ""
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr ""
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5131,128 +3813,66 @@ msgid ""
"for."
msgstr ""
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Titlu: "
+
+#: src/skins/ui_playlist.c:267
#, fuzzy
msgid "Album: "
msgstr "Album"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
#, fuzzy
msgid "Artist: "
msgstr "Artist"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
#, fuzzy
msgid "Filename: "
msgstr "Fișier:"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr ""
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:772
-#, fuzzy
-msgid "Save as Static Playlist"
-msgstr "Selectați Playlist-ul"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr ""
-
-#: src/skins/ui_playlist.c:802
-#, fuzzy
-msgid "Load Playlist"
-msgstr "AdPlug·::·Informații despre fișier"
-
-#: src/skins/ui_playlist.c:815
-#, fuzzy
-msgid "Save Playlist"
-msgstr "Selectați Playlist-ul"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
#, fuzzy
msgid "Audacious Playlist Editor"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "Rata de eșantionare [Hz]:"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr ""
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr ""
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, fuzzy, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Nu s-a putut crea directorul (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
#, fuzzy
msgid "About sndfile plugin"
msgstr "Lista plugin-urilor _Generale"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5275,57 +3895,66 @@ msgid ""
"Boston, MA 02110-1301 USA"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
#, fuzzy
msgid "About SndStretch"
msgstr "Despre Audacious"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
#, fuzzy
msgid "Volume corr."
msgstr "Schimbă volumul cu"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
#, fuzzy
msgid "Speed"
msgstr "Viteză: "
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:363
+#, fuzzy
+msgid "Options"
+msgstr "Meniu de Opțiuni"
+
+#: src/sndstretch/sndstretch_xmms.c:382
#, fuzzy
msgid "SndStretch - Configuration"
msgstr "AdPlug·::·Configurare"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr ""
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr ""
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr ""
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5338,35 +3967,33 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr ""
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "Mesajul melodiei"
-#: src/spectrum/spectrum.c:89
-#, fuzzy
-msgid "Spectrum Analyzer"
-msgstr "Modul Analizatorului"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
#, fuzzy
msgid "About Status Icon Plugin"
msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5377,150 +4004,73 @@ msgid ""
"the system tray area of the window manager.\n"
msgstr ""
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr ""
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr ""
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
#, fuzzy
msgid "Small playback menu #1"
msgstr "Continuă redarea la pornire"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
#, fuzzy
msgid "Small playback menu #2"
msgstr "Continuă redarea la pornire"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr ""
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
#, fuzzy
msgid "Change volume"
msgstr "Schimbă volumul cu"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
#, fuzzy
msgid "Change playing song"
msgstr "Pauză"
-#: src/stereo_plugin/stereo.c:40
-msgid ""
-"Extra Stereo Plugin\n"
-"\n"
-"By Johan Levin 1999."
-msgstr ""
-
-#: src/stereo_plugin/stereo.c:64
+#: src/statusicon/statusicon.c:500
#, fuzzy
-msgid "About Extra Stereo Plugin"
-msgstr "Despre plugin-ul decodor MP4·AAC"
-
-#: src/stereo_plugin/stereo.c:100
-msgid "Configure Extra Stereo"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:62
-#, fuzzy
-msgid "Search:"
-msgstr "Anul"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-#, fuzzy
-msgid "Stream name"
-msgstr "Numele Instrumentului"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-#, fuzzy
-msgid "Now playing"
-msgstr "Selectați Playlist-ul"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-#, fuzzy
-msgid "Remove Bookmark"
-msgstr "Șterge Duplicatele"
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "Despre plugin-ul·pentru Alarmă"
+msgid "Other settings"
+msgstr "Opțiuni pentru Popup-ul cu informații suplimentare"
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
msgstr ""
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
msgstr ""
-#: src/sun/about.c:30
-#, fuzzy
-msgid "About the Sun Driver"
-msgstr "Despre plugin-ul·pentru Alarmă"
-
-#: src/sun/about.c:31
+#: src/stereo_plugin/stereo.c:41
msgid ""
-"XMMS BSD Sun Driver\n"
+"Extra Stereo Plugin\n"
"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
+"By Johan Levin 1999."
msgstr ""
-#: src/sun/configure.c:199
-#, fuzzy
-msgid "Audio control device:"
-msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-
-#: src/sun/configure.c:270
-#, fuzzy
-msgid "Buffer size (ms):"
-msgstr "<span size=\"small\">Titlu</span>"
-
-#: src/sun/configure.c:348
+#: src/stereo_plugin/stereo.c:65
#, fuzzy
-msgid "Volume controls device:"
-msgstr "Schimbă volumul cu"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr ""
+msgid "About Extra Stereo Plugin"
+msgstr "Despre plugin-ul decodor MP4·AAC"
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
+#: src/stereo_plugin/stereo.c:102
+msgid "Configure Extra Stereo"
msgstr ""
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
#, fuzzy
msgid "About Tone Generator"
msgstr "Despre plugin-ul·pentru Alarmă"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5529,15 +4079,20 @@ msgid ""
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr ""
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "Despre plugin-ul decodor MP4·AAC"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr ""
@@ -5552,16 +4107,16 @@ msgstr "Formatul titlului:"
msgid "Ogg Vorbis Tags"
msgstr "AdPlug·::·Informații despre fișier"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr ""
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
#, fuzzy
msgid "About Ogg Vorbis Audio Plugin"
msgstr "Despre plugin-ul·Apple·Lossless·Audio"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5597,12 +4152,12 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, fuzzy, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Lista plugin-urilor _Generale"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5611,6 +4166,810 @@ msgid ""
msgstr ""
#, fuzzy
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Folosește fonturi Bitmap dacă sunt disponibile"
+
+#, fuzzy
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "Meniu de Opțiuni"
+
+#~ msgid "About "
+#~ msgstr "Despre "
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Copyright·(C)·2002,·2003·Simon·Peter·<dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Acest plugin este distribuit conform termenilor și condițiilor licenței "
+#~ "GNU LGPL.\n"
+#~ "Vedeți·http://www.gnu.org/licenses/lgpl.html·tentru detalii.\n"
+#~ "\n"
+#~ "Plugin-ul folosește biblioteca AdPlug,·Copyright·(C)·Simon·Peter·și "
+#~ "alții.\n"
+#~ "Versiunea AdPlug pentru care a fost link-editat:·"
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug·::·Configurare"
+
+#~ msgid "Sound quality"
+#~ msgstr "Calitatea sunetului"
+
+#~ msgid "Resolution"
+#~ msgstr "Rezoluție"
+
+#~ msgid "8bit"
+#~ msgstr "8 biți"
+
+#~ msgid "16bit"
+#~ msgstr "16 biți"
+
+#~ msgid "Channels"
+#~ msgstr "Canale"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "Nu este recomandată setarea forțată Stereo, decât dacă este neapărată "
+#~ "nevoieAceastă setare nu va adăuga efecte stereo, deoarece OPL2 suportă "
+#~ "doar MonoVa consuma însă mai multe resurse de calcul!"
+
+#~ msgid "Frequency"
+#~ msgstr "Frecvența"
+
+#~ msgid "Detect songend"
+#~ msgstr "Detectează sfârșitul melodiei"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "Dacă este activat, Audacious va detecta·sfârșitul melodiei, va opri "
+#~ "redarea și va avansa la melodia următoare. Dacă este dezactivat, nu se va "
+#~ "ști când s-a terminat melodia și va fi redată din nou, la infinit. "
+
+#~ msgid "Formats"
+#~ msgstr "Formate"
+
+#~ msgid "Format selection"
+#~ msgstr "Selecția formatelor"
+
+#~ msgid "Format"
+#~ msgstr "Format"
+
+#~ msgid "Extension"
+#~ msgstr "Extensie"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "Tipurile de fișiere selectate vor fi recunoscute și redate de acest "
+#~ "plugin. Cele deselectate vor fi ignorate, dar pot fi redate de alte "
+#~ "pluginuri."
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug·::·Informații despre fișier"
+
+#~ msgid "Author: "
+#~ msgstr "Autor: "
+
+#~ msgid "File Type: "
+#~ msgstr "Tipul Fișierului: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "Sub-melodii: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Instrumente: "
+
+#~ msgid "Orders: "
+#~ msgstr "Ordine: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Șabloane: "
+
+#~ msgid "Song"
+#~ msgstr "Melodia"
+
+#~ msgid "Instrument name"
+#~ msgstr "Numele Instrumentului"
+
+#~ msgid "Song message"
+#~ msgstr "Mesajul melodiei"
+
+#~ msgid "Subsong selection"
+#~ msgstr "Selecția sub-melodiei"
+
+#~ msgid "Order: "
+#~ msgstr "Ordine: "
+
+#~ msgid "Pattern: "
+#~ msgstr "Șablon: "
+
+#~ msgid "Row: "
+#~ msgstr "Linie: "
+
+#~ msgid "Speed: "
+#~ msgstr "Viteză: "
+
+#~ msgid "Timer: "
+#~ msgstr "Cronometru: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "Despre plugin-ul·pentru Alarmă"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS·Alarm"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "Acest plugin poate fi folosit pentru\n"
+#~ "a orni redarea la un anumit timp.\n"
+#~ "\n"
+#~ "Trimiteți eventualele reclamații la:\n"
+#~ "Adam·Feakin·<adamf@snika.uklinux.net>\n"
+#~ "Daniel·Stodden·<stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "Alarmă"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "Acesta este semnalul de deșteptare."
+
+#~ msgid "Select Playlist"
+#~ msgstr "Selectați Playlist-ul"
+
+#~ msgid "Sorry"
+#~ msgstr "Ne pare rău"
+
+#~ msgid "Warning"
+#~ msgstr "Avertizare"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "Din motive de siguranță, timpul de \"liniște\" trebuie să fie de minim 65 "
+#~ "secunde.For·safety·reasons·the·\"quiet"
+#~ "\"·time·must·be·at·least·65·seconds·longer·than·the·fading·time,"
+#~ "·it·must·also·be·more·than·10·seconds."
+#~ "··This·basically·means·that·there·is·a·bug·in·the·code·and·until·I·find·a·way·of·really·fixing·it·this·message·will·appear·:)\n"
+#~ "\n"
+#~ "Your·fading·settings·have·NOT·been·saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+
+#~ msgid "Oh Well"
+#~ msgstr "Ok"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "Opțiuni ale plugin-ului Alarm"
+
+#~ msgid "Time"
+#~ msgstr "Timp"
+
+#~ msgid "hours"
+#~ msgstr "ore"
+
+#~ msgid "h"
+#~ msgstr "h"
+
+#~ msgid "Quiet after:"
+#~ msgstr "Oprește după:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "Alarmă la (implicit):"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "Alegeți zilele în care să pornească alarma"
+
+#~ msgid "Day"
+#~ msgstr "Ziua"
+
+#~ msgid "Tuesday"
+#~ msgstr "Marți"
+
+#~ msgid "Wednesday"
+#~ msgstr "Miercuri"
+
+#~ msgid "Thursday"
+#~ msgstr "Joi"
+
+#~ msgid "Friday"
+#~ msgstr "Vineri"
+
+#~ msgid "Saturday"
+#~ msgstr "Sâmbătă"
+
+#~ msgid "Sunday"
+#~ msgstr "Duminică"
+
+#~ msgid "Monday"
+#~ msgstr "Luni"
+
+#~ msgid "Days"
+#~ msgstr "Zile"
+
+#~ msgid "Fading"
+#~ msgstr "Tranziție"
+
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Volum: %d%%"
+
+#, fuzzy
+#~ msgid "Current"
+#~ msgstr "Plugin-ul de ieșire curent"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "resetează la volumul curent"
+
+#, fuzzy
+#~ msgid "Start at"
+#~ msgstr "ÃŽncepe redarea playlist-ului curent"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "Final"
+
+#~ msgid "Additional Command"
+#~ msgstr "Comandă adițională"
+
+#, fuzzy
+#~ msgid "enable"
+#~ msgstr "Activează modul 'Mărime Dublă'"
+
+#, fuzzy
+#~ msgid "Playlist (optional)"
+#~ msgstr "Selectați Playlist-ul"
+
+#~ msgid "Browse..."
+#~ msgstr "Răsfoiește"
+
+#, fuzzy
+#~ msgid "Reminder"
+#~ msgstr "Reminder"
+
+#, fuzzy
+#~ msgid "Use reminder"
+#~ msgstr "Folosește cursoare de mouse personalizate (oferite de skin)"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "Ce înseamnă opțiunile acestea?"
+
+#~ msgid ""
+#~ "\n"
+#~ "Time\n"
+#~ " Alarm at: \n"
+#~ " The time for the alarm to come on.\n"
+#~ "\n"
+#~ " Quiet After: \n"
+#~ " Stop alarm after this amount of time.\n"
+#~ " (if the wakeup dialog is not closed)\n"
+#~ "\n"
+#~ "\n"
+#~ "Days\n"
+#~ " Day:\n"
+#~ " Select the days for the alarm to activate.\n"
+#~ "\n"
+#~ " Time:\n"
+#~ " Choose the time for the alarm on each day,\n"
+#~ " or select the toggle button to use the default\n"
+#~ " time.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volume\n"
+#~ " Fading: \n"
+#~ " Fade the volume up to the chosen volume \n"
+#~ " for this amount of time.\n"
+#~ "\n"
+#~ " Start at: \n"
+#~ " Start fading from this volume.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " The volume to stop fading at. If the fading\n"
+#~ " time is 0 then set volume to this and start\n"
+#~ " playing.\n"
+#~ "\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " Additional Command:\n"
+#~ " Run this command at the alarm time.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Timp\n"
+#~ " Alarmă la: \n"
+#~ " Ora la care se va declanșa alarma.\n"
+#~ "\n"
+#~ " Oprește după: \n"
+#~ " Oprește alarma după atât timp.\n"
+#~ " (dacă dialogul de trezire nu este închis)\n"
+#~ "\n"
+#~ "\n"
+#~ "Zile\n"
+#~ " Ziua:\n"
+#~ " Selectați zilele în care să se activeze alarma.\n"
+#~ "\n"
+#~ " Timp:\n"
+#~ " Alegeți timpul la care va porni alarma în fiecare zi.\n"
+#~ " sau selectați valoarea implicită folosind butonul\n"
+#~ "\n"
+#~ "\n"
+#~ "Volum\n"
+#~ " Tranziție: \n"
+#~ " Va face volumul să crească lent până la valoarea \n"
+#~ " maximă, iar aceasta este durata perioadei de\n"
+#~ " tranziție.\n"
+#~ "\n"
+#~ "\n"
+#~ " Volum inițial: \n"
+#~ " Începe tranziția de la această valoare inițială a \n"
+#~ " volumului.\n"
+#~ "\n"
+#~ " Volum final: \n"
+#~ " Volumul maxim la care se va ajunge în timpul \n"
+#~ " tranziției.\n"
+#~ "\n"
+#~ "\n"
+#~ "Opțiuni:\n"
+#~ " Comandă adițională:\n"
+#~ " Comandă ce va fi rulată la momentul declanșării \n"
+#~ " alarmei.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Încarcă un playlist a cărui melodii vor fi redate\n"
+#~ " la declanșarea alarmei. (cu extensie .m3u), sau \n"
+#~ " un link spre un fișier sau stream audio.\n"
+#~ " Dacă nu este dat nimic vor fi folosite melodiile\n"
+#~ " existente în playlist.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Afișează un mesaj de reamintire când alarma se \n"
+#~ " oprește. Editați mesajul și activați-l dacă doriți \n"
+#~ " ca acesta să fie afișat.\n"
+
+#~ msgid "Your reminder for today is.."
+#~ msgstr "Mesajul de reamintire pentru ziua de azi este..."
+
+#~ msgid "Thankyou"
+#~ msgstr "Mulțumesc"
+
+#, fuzzy
+#~ msgid "Available Headsets"
+#~ msgstr "_Preset-uri disponibile:"
+
+#, fuzzy
+#~ msgid "Current Headset"
+#~ msgstr "Plugin-ul de ieșire curent"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Mod de Vizualizare"
+
+#, fuzzy
+#~ msgid "Class"
+#~ msgstr "Classical"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "Adaugă Adresa Internet..."
+
+#, fuzzy
+#~ msgid "Rescan"
+#~ msgstr "Dreptunghi"
+
+#, fuzzy
+#~ msgid "Playback->Play"
+#~ msgstr "Redă fișiere"
+
+#, fuzzy
+#~ msgid "Playback->Stop"
+#~ msgstr "Oprește melodia curentă"
+
+#, fuzzy
+#~ msgid "Playback->Pause"
+#~ msgstr "Pauză pentru"
+
+#, fuzzy
+#~ msgid "Playback->Prev"
+#~ msgstr "Continuă redarea la pornire"
+
+#, fuzzy
+#~ msgid "Playback->Next"
+#~ msgstr "Selectează Playlist-ul Următor"
+
+#, fuzzy
+#~ msgid "Playback->Eject"
+#~ msgstr "Continuă redarea la pornire"
+
+#, fuzzy
+#~ msgid "Playlist->Repeat"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Volume->Up_5"
+#~ msgstr "Restrânge player-ul"
+
+#, fuzzy
+#~ msgid "Volume->Down_5"
+#~ msgstr "Schimbă volumul cu"
+
+#, fuzzy
+#~ msgid "Volume->Up_10"
+#~ msgstr "Restrânge player-ul"
+
+#, fuzzy
+#~ msgid "Volume->Down_10"
+#~ msgstr "Schimbă volumul cu"
+
+#, fuzzy
+#~ msgid "Volume->Mute"
+#~ msgstr "Schimbă volumul cu"
+
+#, fuzzy
+#~ msgid "Window->Main"
+#~ msgstr "Arată fereastra principală"
+
+#, fuzzy
+#~ msgid "Window->Playlist"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Window->Equalizer"
+#~ msgstr "Egalizator Audacious"
+
+#, fuzzy
+#~ msgid "Window->JumpToFile"
+#~ msgstr "Fereastra de Preferințe"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "Detectează sfârșitul melodiei"
+
+#, fuzzy
+#~ msgid "Custom"
+#~ msgstr "Format specificat:"
+
+#, fuzzy
+#~ msgid "Not Detected"
+#~ msgstr "Selecția formatelor"
+
+#, fuzzy
+#~ msgid "Information"
+#~ msgstr "Informații despre Track"
+
+#, fuzzy
+#~ msgid "Device name:"
+#~ msgstr "Numele Instrumentului"
+
+#, fuzzy
+#~ msgid "Device file:"
+#~ msgstr "Tipul Fișierului: "
+
+#, fuzzy
+#~ msgid "(custom)"
+#~ msgstr "Format specificat:"
+
+#~ msgid "Active"
+#~ msgstr "Activ"
+
+#~ msgid "Status"
+#~ msgstr "Statut"
+
+#, fuzzy
+#~ msgid "Device Name"
+#~ msgstr "Numele Instrumentului"
+
+#, fuzzy
+#~ msgid "Device File"
+#~ msgstr "Tipul Fișierului: "
+
+#, fuzzy
+#~ msgid "Device Address"
+#~ msgstr "Adaugă Adresa Internet..."
+
+#, fuzzy
+#~ msgid "<b>Name: </b>"
+#~ msgstr "Numele Instrumentului"
+
+#, fuzzy
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "Numele Fișierului:"
+
+#, fuzzy
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "Adaugă Adresa Internet..."
+
+#, fuzzy
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "Despre plugin-ul·pentru Alarmă"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Numele Instrumentului"
+
+#, fuzzy
+#~ msgid "Installed plugins"
+#~ msgstr "Reîncarcă Plugin-urile"
+
+#, fuzzy
+#~ msgid "Running plugins"
+#~ msgstr "Reîncarcă Plugin-urile"
+
+#, fuzzy
+#~ msgid "Add"
+#~ msgstr "Adaugă Fișiere"
+
+#, fuzzy
+#~ msgid "Remove"
+#~ msgstr "Șterge Duplicatele"
+
+#, fuzzy
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "Lista plugin-urilor _Generale"
+
+#, fuzzy
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "Despre plugin-ul decodor MP4·AAC"
+
+#, fuzzy
+#~ msgid "LIRC Plugin "
+#~ msgstr "Plugin de intrare: %s"
+
+#, fuzzy
+#~ msgid "LIRC plugin settings"
+#~ msgstr "Plugin de intrare: %s"
+
+#, fuzzy
+#~ msgid "Connection"
+#~ msgstr "Mod de Vizualizare"
+
+#, fuzzy
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "Încarcă preset din fișier"
+
+#, fuzzy
+#~ msgid "ModPlug Configuration"
+#~ msgstr "AdPlug·::·Configurare"
+
+#~ msgid "16 bit"
+#~ msgstr "16 bit"
+
+#~ msgid "8 bit"
+#~ msgstr "8 bit"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "48 kHz"
+#~ msgstr "48 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#, fuzzy
+#~ msgid "Sampling Rate"
+#~ msgstr "<b>Convertor pentru rata de eșantionare</b>"
+
+#, fuzzy
+#~ msgid "Enable"
+#~ msgstr "Activează modul 'Mărime Dublă'"
+
+#, fuzzy
+#~ msgid "Depth"
+#~ msgstr "Adancimea cautarii"
+
+#, fuzzy
+#~ msgid "Effects"
+#~ msgstr "<b>Efecte</b>"
+
+#, fuzzy
+#~ msgid "Fast Playlist Info"
+#~ msgstr "AdPlug·::·Informații despre fișier"
+
+#, fuzzy
+#~ msgid "Play Amiga MOD"
+#~ msgstr "- redă fișierele multimedia"
+
+#, fuzzy
+#~ msgid "Don't loop"
+#~ msgstr "Nu curăța playlist-ul"
+
+#, fuzzy
+#~ msgid "time(s)"
+#~ msgstr "Timp Scurs"
+
+#, fuzzy
+#~ msgid "MOD Info"
+#~ msgstr "AdPlug·::·Informații despre fișier"
+
+#, fuzzy
+#~ msgid "Instruments"
+#~ msgstr "Instrumente: "
+
+#, fuzzy
+#~ msgid "Message"
+#~ msgstr "Mesajul melodiei"
+
+#, fuzzy
+#~ msgid "About Modplug"
+#~ msgstr "Despre Audacious"
+
+#, fuzzy
+#~ msgid "Blue"
+#~ msgstr "Blues"
+
+#, fuzzy
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Activează proxy"
+
+#, fuzzy
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "Modul Analizatorului"
+
+#, fuzzy
+#~ msgid "Search:"
+#~ msgstr "Anul"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "Numele Instrumentului"
+
+#, fuzzy
+#~ msgid "Now playing"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Remove Bookmark"
+#~ msgstr "Șterge Duplicatele"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "Despre plugin-ul·pentru Alarmă"
+
+#, fuzzy
+#~ msgid "minutes:seconds"
+#~ msgstr "secunde"
+
+#, fuzzy
+#~ msgid "Track length:"
+#~ msgstr "Informații despre Track"
+
+#, fuzzy
+#~ msgid "Show/hide statusbar"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Import Playlist ..."
+#~ msgstr "AdPlug·::·Informații despre fișier"
+
+#, fuzzy
+#~ msgid "Refresh Selected"
+#~ msgstr "Selecția formatelor"
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "Titlu"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "Comentariu"
+
+#, fuzzy
+#~ msgid "Save as Static Playlist"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Load Playlist"
+#~ msgstr "AdPlug·::·Informații despre fișier"
+
+#, fuzzy
+#~ msgid "Save Playlist"
+#~ msgstr "Selectați Playlist-ul"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "Bitrate variabil"
+
+#~ msgid "Average bitrate"
+#~ msgstr "Bitrate mediu"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "Selectați Playlist-ul"
+
+#, fuzzy
+#~ msgid "About the Sun Driver"
+#~ msgstr "Despre plugin-ul·pentru Alarmă"
+
+#, fuzzy
+#~ msgid "Audio control device:"
+#~ msgstr "Despre plugin-ul·Apple·Lossless·Audio"
+
+#, fuzzy
+#~ msgid "Buffer size (ms):"
+#~ msgstr "<span size=\"small\">Titlu</span>"
+
+#, fuzzy
+#~ msgid "Volume controls device:"
+#~ msgstr "Schimbă volumul cu"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "Schimbă volumul cu"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Lista plugin-urilor de _Efecte"
+
+#, fuzzy
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "Despre plugin-ul·Apple·Lossless·Audio"
+
+#, fuzzy
#~ msgid "Audacious standard menu"
#~ msgstr "Developerii Audacious:"
@@ -5626,18 +4985,11 @@ msgstr ""
#~ msgid "Port:"
#~ msgstr "Port-ul:"
-#~ msgid "Server"
-#~ msgstr "Server"
-
#, fuzzy
#~ msgid "Load List"
#~ msgstr "Încarcă"
#, fuzzy
-#~ msgid "Save List"
-#~ msgstr "Salvează"
-
-#, fuzzy
#~ msgid "About RoarAudio Plugin"
#~ msgstr "Despre plugin-ul·Apple·Lossless·Audio"
@@ -5853,10 +5205,6 @@ msgstr ""
#~ msgstr "Despre "
#, fuzzy
-#~ msgid "Output plugin"
-#~ msgstr "Plugin-ul de ieșire curent"
-
-#, fuzzy
#~ msgid "Throttle Output"
#~ msgstr "Plugin-ul de ieșire curent"
@@ -5965,10 +5313,6 @@ msgstr ""
#~ msgstr "Implicit"
#, fuzzy
-#~ msgid "_Rename"
-#~ msgstr "Numele Fișierului:"
-
-#, fuzzy
#~ msgid "About Icecast-Plugin"
#~ msgstr "Despre plugin-ul decodor MP4·AAC"
@@ -6101,26 +5445,10 @@ msgstr ""
#~ msgstr "Titlu: "
#, fuzzy
-#~ msgid "Artist:"
-#~ msgstr "Artist"
-
-#, fuzzy
-#~ msgid "Album:"
-#~ msgstr "Album"
-
-#, fuzzy
#~ msgid "Comment:"
#~ msgstr "Comentariu"
#, fuzzy
-#~ msgid "Year:"
-#~ msgstr "Anul"
-
-#, fuzzy
-#~ msgid "Track number:"
-#~ msgstr "Numărul Trackului"
-
-#, fuzzy
#~ msgid "Genre:"
#~ msgstr "Genul"
@@ -6340,10 +5668,6 @@ msgstr ""
#~ msgstr "Folosește cursoare de mouse personalizate (oferite de skin)"
#, fuzzy
-#~ msgid "Track:"
-#~ msgstr "Informații despre Track"
-
-#, fuzzy
#~ msgid "Musepack Info"
#~ msgstr "AdPlug·::·Informații despre fișier"
@@ -6930,14 +6254,6 @@ msgstr ""
#~ msgstr "<span size=\"small\">Album</span>"
#, fuzzy
-#~ msgid "Bit rate:"
-#~ msgstr "Rata de Reîmprospătare"
-
-#, fuzzy
-#~ msgid "Length:"
-#~ msgstr "Mărimea track-ului"
-
-#, fuzzy
#~ msgid "File size:"
#~ msgstr "Mărimea Buffer-ului:"
diff --git a/po/ru.po b/po/ru.po
index 27efaad..3c2eba3 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,32 +1,27 @@
-# Russian translation for Audacious-plugins.
-# Copyright (C) 2006, 2007 Alexander Orlov <alxorlov@pochta.ru>
-# This file is distributed under the same license as the Audacious-plugins package.
-#
-# За оÑнову взÑÑ‚ перевод Ð’Ð¸Ñ‚Ð°Ð»Ð¸Ñ Ð›Ð¸Ð¿Ð°Ñ‚Ð¾Ð²Ð° Ð´Ð»Ñ BMP.
-# Ð£Ð»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° приветÑтвуютÑÑ :)
+# Russian translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
#
+# Translators:
# Alexander Orlov <alxorlov@pochta.ru>, 2007.
+# NaiLi Rootaerc <theism@mail.ru>, 2012.
# Sergey V. Mironov <serg0@ulx.ru>, 2009.
# Sergey V. Mironov <sergo@bk.ru>, 2010.
msgid ""
msgstr ""
-"Project-Id-Version: audacious-plugins 1.5\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: 2010-08-22 22:00+0400\n"
-"Last-Translator: Sergey V. Mironov <sergo@bk.ru>\n"
-"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
-"Language: ru\n"
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-13 11:36+0000\n"
+"Last-Translator: NaiLi Rootaerc <theism@mail.ru>\n"
+"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Russian\n"
-"X-Poedit-Basepath: /home/asphyx/ahinea/audacious-plugins\n"
-"X-Generator: Lokalize 1.0\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -37,457 +32,174 @@ msgstr ""
"Декодер FAAD2 AAC/HE-AAC/HE-AACv2/DRM (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 команда разработчиков Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "О модуле MP4 AAC"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "О "
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Этот модуль раÑпроÑтранÑетÑÑ Ð½Ð° уÑловиÑÑ… GNU LGPL.\n"
-"Смотрите http://www.gnu.org/licenses/lgpl.html Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ "
-"информации.\n"
-"\n"
-"Этот модуль иÑпользует библиотеку AdPlug, Copyright (C) Simon Peter.\n"
-"ВерÑÐ¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ AdPlug: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: ÐаÑтройка"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "ОК"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Отмена"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "ОÑновной"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "КачеÑтво звука"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Разрешение"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 бит"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 бит"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Каналы"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Моно"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Стерео"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"ÐаÑтройка режима Ñтерео не рекомендуетÑÑ, еÑли вам Ñто не требуетÑÑ. Эта "
-"Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ добавит ÑтереоÑффектов к звучанию, но увеличит загрузку "
-"процеÑÑора!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "ЧаÑтота"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "ВоÑпроизведение"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Определить конец дорожки"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"ЕÑли включено, то Audacious определит окончание дорожки, оÑтановит "
-"воÑпроизведение и выведет Ñообщение в ÑпиÑке воÑпроизведениÑ. ЕÑли "
-"отключено, то Audacious не Ñтанет Ñообщать об окончании дорожки и "
-"воÑпроизведение продолжитÑÑ Ð¿Ð¾ кругу."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Форматы"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Выбор формата"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Формат"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "РаÑширение"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"С помощью Ñтих модулей можно выбрать типы файлов Ð´Ð»Ñ Ð²Ð¾ÑпроизведениÑ. ЕÑли "
-"модули не отмечены, то Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñтих файлов будут иÑпользоватьÑÑ "
-"другие модули."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле"
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Про Будильник"
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Ðазвание: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Ðвтор: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Тип файла: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Поддорожки: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "ИнÑтрументы:"
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "ПорÑдки: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Ритмы: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Дорожка"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Ðазвание инÑтрумента"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Сообщение дорожки"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Выбор поддорожки"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "ПорÑдок: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Ритм: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "РÑд: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "СкороÑÑ‚ÑŒ:"
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Таймер:"
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Гц"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "О модуле Будильник"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "Будильник"
-
-#: src/alarm/interface.c:56
+#: src/alarm/alarm.c:313
msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
-"Модуль XMMS, который можно иÑпользовать\n"
-"Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ в заданное времÑ.\n"
-"\n"
-"Ð’Ñе Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»Ñйте по адреÑу:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
+"Модуль, который начинает и заканчивает воÑпроизведение по раÑпиÑанию.\n"
+"Первоначально напиÑан Adam Feakin and Daniel Stodden."
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Закрыть"
-
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
-msgstr "Сигнал"
+msgstr "Будильник"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
-msgstr "Ваш Ñигнал будильника."
+msgstr "Это ваш звонок будильника."
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "ОК"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Выберите ÑпиÑок воÑпроизведениÑ"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Извините"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Предупреждение"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"По причинам безопаÑноÑти режим \"тишина\" должен быть по крайней мере на 65 "
-"Ñекунд дольше, чем Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ, и больше 10 Ñекунд. Это, в общем, "
-"означает, что в коде программы еÑÑ‚ÑŒ ошибка. До тех пор, пока она не будет "
-"найдена и уÑтранена, вы будете видеть Ñто Ñообщение :)\n"
-"\n"
-"Ваши наÑтройки Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ ÐЕ были Ñохранены\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Отлично"
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
-msgstr "Параметры будильника"
+msgstr "ÐаÑтройки будильника"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "ВремÑ"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
-msgstr "чаÑов"
+msgstr "чаÑÑ‹"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
-msgstr "ч."
+msgstr "ч"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
-msgstr "минут"
+msgstr "минуты"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
-msgstr "Отключить поÑле:"
+msgstr "Тихо поÑле:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
-msgstr "Ð’Ñ€ÐµÐ¼Ñ Ñигнала (по умолчанию):"
+msgstr "Будильник в: (по-умолчанию):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
-msgstr "Выберите дни Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+msgstr "Выберите дни Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка будильника"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr "По умолчанию"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "День"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Вторник"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Среда"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Четверг"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "ПÑтница"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Суббота"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "ВоÑкреÑенье"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Понедельник"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Дни"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
msgstr "Затухание"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "Ñекунд"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "ГромкоÑÑ‚ÑŒ"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
-msgstr "СейчаÑ"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "ÑброÑить до текущей громкоÑти"
+msgstr "Текущее"
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
-msgstr "ÐачальнаÑ"
+msgstr "Ðачать в"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
-msgstr "КонечнаÑ"
+msgstr "Завершить"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
msgstr "Дополнительные команды"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
-msgstr "ЗапуÑтить"
+msgstr "включить"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
-msgstr "СпиÑок воÑпроизведениÑ"
+msgstr "СпиÑок (выборочно)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
msgstr "Обзор..."
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
-msgstr "Ðапоминание"
+msgstr "Ðапоминатель"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
-msgstr "Включить напоминание"
+msgstr "Применить напоминатель"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Параметры"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
-msgstr "Что означают Ñти параметры?"
+msgstr "Что же Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð½Ð°Ñ‡Ð¸Ñ‚?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -543,73 +255,77 @@ msgid ""
msgstr ""
"\n"
"ВремÑ\n"
-" Ð’Ñ€ÐµÐ¼Ñ Ñигнала (по умолчанию): \n"
-" Ð’Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° Ñигнала будильника.\n"
+" Будильник в:\n"
+" Ð’Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° пришло.\n"
"\n"
-" Отключить поÑле: \n"
-" ОÑтановить будильник поÑле указанного времени.\n"
-" (еÑли диалоговое окно не закрыто)\n"
+" Тишина поÑле:\n"
+" ОÑтановить будильник по иÑтечении времени.\n"
+" (еÑли диалог Ð¿Ñ€Ð¾Ð±ÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ закрыт)\n"
"\n"
"\n"
"Дни\n"
" День:\n"
-" Выберите дни, когда будильник активирован.\n"
+" Выберите дни Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ будильника.\n"
"\n"
-" ВремÑ:\n"
-" Выберите Ð²Ñ€ÐµÐ¼Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° на каждый день,\n"
-" или же уÑтановите флаг \"По умолчанию\"\n"
+"ВремÑ:\n"
+" Выберите Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° на каждый день,\n"
+" или выберите переключатель чтобы иÑпользовать Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾-умолчанию.\n"
"\n"
"\n"
"ГромкоÑÑ‚ÑŒ\n"
" Затухание:\n"
-" Затухание громкоÑти от выбранного начального значениÑ\n"
-" до конечного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð° Ñтот промежуток времени.\n"
+" Повышать громкоÑÑ‚ÑŒ до выбранного ÑƒÑ€Ð¾Ð²Ð½Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти\n"
+" Ð´Ð»Ñ Ñтого периода времени.\n"
"\n"
-" ÐачальнаÑ: \n"
-" ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾ÑÑ‚ÑŒ затуханиÑ.\n"
+" Ðачать в:\n"
+" Ðачать затухание Ñ Ñтого ÑƒÑ€Ð¾Ð²Ð½Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти.\n"
"\n"
-" КонечнаÑ: \n"
-" ГромкоÑÑ‚ÑŒ, на которой оÑтанавливаетÑÑ Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ðµ. ЕÑли\n"
-" Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ñ€Ð°Ð²Ð½Ð¾ 0, уÑтановите громкоÑÑ‚ÑŒ и начните\n"
-" воÑпроизведение.\n"
+" Завершить:\n"
+" ГромкоÑÑ‚ÑŒ переÑтанет затухать в. ЕÑли времÑ\n"
+" Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ñ€Ð°Ð²Ð½Ð¾ 0 тогда уÑтановить громкоÑÑ‚ÑŒ и начать\n"
+" воÑпроизводить.\n"
"\n"
"\n"
-"Параметры:\n"
+"ÐаÑтройки:\n"
" Дополнительные команды:\n"
-" ЗапуÑк указанной команды в Ñто времÑ.\n"
-"\n"
-" СпиÑок воÑпроизведениÑ:\n"
-" Загрузка ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñигнала\n"
-" (иÑпользуетÑÑ Ñ€Ð°Ñширение .m3u). ЕÑли ÑпиÑок\n"
-" воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ð½, то дорожки будут воÑпроизводитьÑÑ\n"
-" из Ñтого ÑпиÑка.\n"
-" Могут также быть иÑпользованы URL потоков mp3/ogg,\n"
-" но загрузка ÑпиÑков воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ URL в наÑтоÑщее\n"
-" Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ поддерживаетÑÑ Audacious.\n"
-"\n"
-" Ðапоминание:\n"
-" Отображение текÑта Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ выключении Ñигнала.\n"
-" Введите текÑÑ‚ Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð² поле и уÑтановите флажок\n"
-" \"Включить напоминание\".\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+" ЗапуÑтить Ñту команду во Ð²Ñ€ÐµÐ¼Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°.\n"
+"\n"
+" СпиÑок:\n"
+" Загрузить ÑпиÑок Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð·\n"
+" (Ñ Ñ€Ð°Ñширением .m3u). ЕÑли ÑпиÑок отÑутÑтвует,\n"
+" брать текущую пеÑню.\n"
+" СÑылка на mp3/ogg поток может быть\n"
+" введена здеÑÑŒ, но загрузка ÑпиÑка из\n"
+" ÑÑылок неполноÑтью поддерживаетÑÑ xmms.\n"
+"\n"
+" Ðапоминатель:\n"
+" Отображать напоминание когда будильник отключён,\n"
+" тип Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð² окне, еÑли хотите Ñтого\n"
+" включите переключатель.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Справка"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Отмена"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
-msgstr "Ðапоминание на ÑегоднÑшний день..."
+msgstr "Ваше напоминание на ÑÐµÐ³Ð¾Ð´Ð½Ñ Ñто..."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "СпаÑибо"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "УÑтройÑтво PCM по умолчанию"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Микшер по умолчанию"
@@ -621,7 +337,7 @@ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ALSA"
msgid "PCM device:"
msgstr "УÑтройÑтво PCM:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "Микшер:"
@@ -631,17 +347,17 @@ msgstr "Компонент микшера:"
#: src/alsa/config.c:452
msgid "Work around drain hangup"
-msgstr ""
+msgstr "Ðе завиÑать из-за изъÑна \"drain\" в ALSA"
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "О модуле вывода ALSA"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "Ошибка ALSA"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -655,123 +371,65 @@ msgstr "Модуль ALSA"
#: src/amidi-plug/backend-alsa/b-alsa.c:37
msgid ""
-"This backend sends MIDI events to a group of user-chosen ALSA sequencer "
-"ports. The ALSA sequencer interface is very versatile, it can provide ports "
-"for audio cards hardware synthesizers (i.e. emu10k1) but also for software "
-"synths, external devices, etc.\n"
-"This backend does not produce audio, MIDI events are handled directly from "
-"devices/programs behind the ALSA ports; in example, MIDI events sent to the "
-"hardware synth will be directly played.\n"
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
"Backend written by Giacomo Lozito."
msgstr ""
-"Этот модуль отправлÑет ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI на группу выбранных пользователем портов "
-"Ñинтезатора ALSA. Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñинтезатора ALSA очень разноÑторонний, он может "
-"предоÑтавлÑÑ‚ÑŒ порты Ð´Ð»Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ñ… Ñинтезаторов (например, emu10k1), Ð´Ð»Ñ "
-"программных Ñинтезаторов, Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… уÑтройÑтв, и др.\n"
-"Этот модуль не производит звук, ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI от уÑтройÑтв/программ "
-"обрабатываютÑÑ Ð½Ð°Ð¿Ñ€Ñмую поÑле портов ALSA; например, отправленные на "
-"аппаратный Ñинтезатор ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI будут Ñразу воÑпроизведены.\n"
+"Этот модуль отправлÑет ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI на группу выбранных пользователем портов Ñинтезатора ALSA. Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñинтезатора ALSA очень разноÑторонний, он может предоÑтавлÑÑ‚ÑŒ порты Ð´Ð»Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ñ… Ñинтезаторов (например, emu10k1), Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ñ… Ñинтезаторов, Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… уÑтройÑтв, и др.\n"
+"Этот модуль не производит звук, ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI от уÑтройÑтв/программ обрабатываютÑÑ Ð½Ð°Ð¿Ñ€Ñмую поÑле портов ALSA; например, отправленные на аппаратный Ñинтезатор ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI будут Ñразу воÑпроизведены.\n"
"Этот внутренний модуль напиÑан Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "Модуль FluidSynth"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
-"This backend produces audio by sending MIDI events to FluidSynth, a real-"
-"time software synthesizer based on the SoundFont2 specification (www."
-"fluidsynth.org).\n"
-"Produced audio can be manipulated via player effect plugins and is processed "
-"by chosen ouput plugin.\n"
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
-"Этот внутренний модуль производит звук, отправлÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI на "
-"FluidSynth, программный Ñинтезатор реального времени, оÑнованный на "
-"ÑпецификациÑÑ… SoundFont2 (www.fluidsynth.org).\n"
-"Полученный звук может быть изменён Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ модулей Ñффектов и обработан "
-"выбранным модулем вывода.\n"
+"Этот внутренний модуль производит звук, отправлÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI на FluidSynth, программный Ñинтезатор реального времени, оÑнованный на ÑпецификациÑÑ… SoundFont2 (www.fluidsynth.org).\n"
+"Полученный звук может быть изменён Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ модулей Ñффектов и обработан выбранным модулем вывода.\n"
"Этот внутренний модуль напиÑан Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ПÐРÐМЕТРЫ Ð’ÐУТРЕÐÐЕГО МОДУЛЯ ALSA"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Порт"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Ðазвание клиента"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Ðазвание порта"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "Порты вывода ALSA"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð°: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Выбор микшера: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Параметры микшера"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Выберите порты вывода ALSA *\n"
-"Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI будут направлены в порты, указанные здеÑÑŒ. Ðапример, еÑли у "
-"вашей звуковой карты еÑÑ‚ÑŒ аппаратный Ñинтезатор, и вы хотите проиграть "
-"MIDI Ñ ÐµÐ³Ð¾ помощью, то вам необходимо выбрать порты Ñинтезатора."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Выберите микшерную карту ALSA *\n"
-"Внутренний модуль ALSA выводит звук напрÑмую через ALSA, он не иÑпользует "
-"модули Ñффектов и модули вывода проигрывателÑ. Во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ "
-"регулÑтор громкоÑти Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ управлÑÑ‚ÑŒ микшером, выбранным вами "
-"здеÑÑŒ. ЕÑли вы иÑпользуете порты Ñинтезатора, то, вероÑтно, захотите выбрать "
-"регулÑтор Synth."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Выберите уÑтройÑтво микшера ALSA *\n"
-"Внутренний модуль ALSA выводит звук напрÑмую через ALSA, он не иÑпользует "
-"модули Ñффектов и вывода из проигрывателÑ. Во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ "
-"регулÑтор громкоÑти Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ управлÑÑ‚ÑŒ микшером, который вы "
-"выберете здеÑÑŒ. ЕÑли вы иÑпользуете порты Ñинтезатора, то, вероÑтно, "
-"захотите выбрать регулÑтор Synth."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "Внутренний модуль ALSA не загружен или недоÑтупен."
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -779,151 +437,51 @@ msgstr ""
"<span size=\"smaller\">Модуль\n"
"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ внутреннем модуле"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "ПÐРÐМЕТРЫ Ð’ÐУТРЕÐÐЕГО МОДУЛЯ AMIDI-PLUG"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Выбор внутреннего модулÑ"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "ДоÑтупные внутренние модули"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Параметры воÑпроизведениÑ"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "ТранÑпонирование: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Смещение ударных: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "Дополнительные параметры"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "ВычиÑлÑÑ‚ÑŒ длительноÑÑ‚ÑŒ MIDI-файлов в ÑпиÑке"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "Считывать комментарии из MIDI-файлов (еÑли доÑтупны)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "Считывать текÑÑ‚Ñ‹ из MIDI-файлов (еÑли доÑтупны)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Выбор внутреннего Ð¼Ð¾Ð´ÑƒÐ»Ñ *\n"
-"AMIDI-Plug работает в модульном режиме; здеÑÑŒ вам необходимо выбрать "
-"внутренний модуль, то еÑÑ‚ÑŒ, ÑпоÑоб, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ которого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI будут "
-"обрабатыватьÑÑ Ð¸ проигрыватьÑÑ.\n"
-"ЕÑли ваша Ð·Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° оÑнащена аппаратным Ñинтезатором и ALSA его "
-"поддерживает, то лучше выбрать модуль ALSA. Его также можно иÑпользовать Ð´Ð»Ñ "
-"вÑего, что поддерживает Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñинтезатора ALSA, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ñ‹Ðµ "
-"Ñинтезаторы или внешние уÑтройÑтва.\n"
-"ЕÑли вы хотите иÑпользовать программный Ñинтезатор и/или пропуÑкать звук "
-"через модули Ñффектов и вывода, то вам Ñледует иÑпользовать хороший модуль "
-"FluidSynth."
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* ТранÑпонирование *\n"
-"Этот параметр позволÑет воÑпроизводить MIDI-файл, переложив его в другой "
-"Ñ€Ñд, ÑÐ¼ÐµÑ‰Ð°Ñ Ð½ÑƒÐ¶Ð½Ð¾Ðµ чиÑло полутонов и их нот (за иÑключением тех, которые "
-"находÑÑ‚ÑÑ Ð² 10 канале, который зарезервирован Ð´Ð»Ñ ÑƒÐ´Ð°Ñ€Ð½Ñ‹Ñ…). Это удобно, еÑли "
-"вы хотите петь или играть вмеÑте Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ инÑтрументом."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Смещение ударных *\n"
-"Этот параметр позволÑет вам ÑмеÑтить ноты на 10 канале (Ñтандартный канал "
-"Ð´Ð»Ñ ÑƒÐ´Ð°Ñ€Ð½Ñ‹Ñ…) на желаемое чиÑло полутонов. Ð’ результате во Ð²Ñ€ÐµÐ¼Ñ "
-"воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользован другой Ñ€Ñд ударных, так что еÑли вы хотите "
-"уÑилить (оÑлабить, или изменить) звуки ударных, попробуйте "
-"поÑкÑпериментировать Ñ Ñтим значением."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* ВычиÑлÑÑ‚ÑŒ длительноÑÑ‚ÑŒ MIDI *\n"
-"ЕÑли Ñтот параметр включен, AMIDI-Plug будет вычиÑлÑÑ‚ÑŒ длительноÑÑ‚ÑŒ MIDI-"
-"файлов Ñразу же по запроÑу проигрывателÑ, вмеÑто того, чтобы дожидатьÑÑ "
-"Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°. Ðапример, длительноÑÑ‚ÑŒ MIDI будет вычиÑлена "
-"Ñразу при добавлении MIDI файла в ÑпиÑок. Отключите Ñтот параметр, еÑли вы "
-"хотите уÑкорить загрузку ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ (когда добавлено много MIDI "
-"файлов), или же включите его Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° большей информации в ÑпиÑке Ñразу "
-"поÑле загрузки."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* Считывать комментарии из MIDI-файлов *\n"
-"Ðекоторые MIDI файлы Ñодержат текÑтовые комментарии (автор, авторÑкое право, "
-"ноты, и др.). ЕÑли Ñтот параметр включен, AMIDI-Plug будет Ñчитывать и "
-"показывать комментарии (еÑли доÑтупны) в информационном окне."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* Считывать текÑÑ‚Ñ‹ из MIDI-файлов *\n"
-"Ðекоторые MIDI-файлы Ñодержат текÑÑ‚Ñ‹ пеÑен. ЕÑли Ñтот параметр включен, "
-"AMIDI-Plug будет Ñчитывать и показывать текÑÑ‚Ñ‹ пеÑен (еÑли доÑтупны) в "
-"информационном окне."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -931,230 +489,113 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - выбор файла"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ AMIDI-Plug"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - выбор SoundFont файла"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "ПÐРÐМЕТРЫ Ð’ÐУТРЕÐÐЕГО МОДУЛЯ FLUIDSYNTH"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "Параметры SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Размер (байт)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "Загружать SF при запуÑке проигрывателÑ"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "Загружать SF при воÑпроизведении первого MIDI-файла"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Параметры Ñинтезатора"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "уÑиление"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "по умолчанию"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "значение:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "полифониÑ"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "реверберациÑ"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "да"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "нет"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "хор"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "чаÑтота"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Гц"
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Гц"
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Гц"
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "Ð´Ñ€ÑƒÐ³Ð°Ñ "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Гц"
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* Выбор файлов SoundFont *\n"
-"Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы воÑпроизводить MIDI Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ FluidSynth, нужно указать "
-"здеÑÑŒ по крайней мере один рабочий SoundFont файл (указав абÑолютный путь к "
-"нему). Файлы загружаютÑÑ Ñверху (Ñ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾) вниз (до поÑледнего)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Загружать SoundFont при запуÑке Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ *\n"
-"Ð’ завиÑимоÑти от ÑкороÑти вашей ÑиÑтемы, загрузка SoundFont в FluidSynth "
-"может занимать до неÑкольких Ñекунд. Эта задача выполнÑетÑÑ Ð¾Ð´Ð¸Ð½ раз "
-"(SoundFont оÑтаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ð¼, пока не изменитÑÑ, или не будет выгружен) "
-"во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка проигрывателÑ, или перед воÑпроизведением MIDI файла "
-"(поÑледнее лучше, еÑли вы иÑпользуете проигрыватель не только Ð´Ð»Ñ "
-"проÑÐ»ÑƒÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ MIDI-файлов)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Загружать SoundFont при воÑпроизведении первого MIDI-файла *\n"
-"Ð’ завиÑимоÑти от ÑкороÑти вашей ÑиÑтемы, загрузка SoundFont в FluidSynth "
-"может занимать до неÑкольких Ñекунд. Эта задача выполнÑетÑÑ Ð¾Ð´Ð¸Ð½ раз "
-"(SoundFont оÑтаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ð¼, пока не изменитÑÑ, или не будет выгружен) "
-"во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка проигрывателÑ, или перед воÑпроизведением MIDI файла "
-"(поÑледнее лучше, еÑли вы иÑпользуете проигрыватель не только Ð´Ð»Ñ "
-"проÑÐ»ÑƒÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ MIDI-файлов)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* УÑиление Ñинтезатора *\n"
-"Из документации FluidSynth: уÑиление применÑетÑÑ Ð½Ð° поÑледнем или на "
-"оÑновном выводе Ñинтезатора; по умолчанию уÑтановлено в низкое значение, "
-"чтобы избежать иÑкажений при воÑпроизведении разных MIDI-файлов."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* ÐŸÐ¾Ð»Ð¸Ñ„Ð¾Ð½Ð¸Ñ Ñинтезатора *\n"
-"Из документации FluidSynth: Ð¿Ð¾Ð»Ð¸Ñ„Ð¾Ð½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑÑ‚, Ñколько голоÑов могут "
-"играть одновременно; чиÑло голоÑов не обÑзательно ÑоответÑтвует количеÑтву "
-"воÑпроизводимых одновременно нот; на Ñамом деле, когда нота Ñтоит на каком-"
-"то канале MIDI, Ñинтезатор Ð´Ð»Ñ Ñтого канала может Ñоздать неÑколько голоÑов, "
-"например, один Ð´Ð»Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ аудио канала и один Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð³Ð¾. КоличеÑтво "
-"активированных голоÑов завиÑит от количеÑтва инÑтрументальных зон, "
-"ÑоотноÑимых Ñо ÑкороÑтью Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¸ ключом проигрываемой ноты."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Ð ÐµÐ²ÐµÑ€Ð±ÐµÑ€Ð°Ñ†Ð¸Ñ Ñинтезатора *\n"
-"Из документации FluidSynth: когда уÑтановлено в \"да\", включаетÑÑ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ "
-"реверберации; заметьте, что когда модуль реверберации включен, количеÑтво "
-"Ñигналов, отправлÑемых на него, завиÑит от параметра \"reverb send\" "
-"уÑтановленного в SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Хор Ñинтезатора *\n"
-"Из документации FluidSynth: когда уÑтановлено в \"да\", включаетÑÑ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ "
-"хора; заметьте, что когда модуль хора включен, количеÑтво Ñигналов, "
-"отправлÑемых на него, завиÑит от параметра \"chorus send\" уÑтановленного в "
-"SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* ЧаÑтота Ñинтезатора *\n"
-"ЧаÑтота звука, который генерирует Ñинтезатор. Можно также указать другое "
-"значение в интервале 22050-96000 Гц."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "Внутренний модуль FluidSynth не загружен или недоÑтупен"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1178,8 +619,7 @@ msgstr ""
"<span size=\"smaller\">Модуль\n"
"TiMidity</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr "ИмÑ:"
@@ -1305,242 +745,239 @@ msgstr "Вогнутый прÑмоугольник"
msgid "None"
msgstr "Ðет"
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr "Ðачало воÑпроизведениÑ"
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
msgstr "Показать OSD в начале воÑпроизведениÑ."
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr "Изменение названиÑ"
-#: src/aosd/aosd_trigger.c:83
+#: src/aosd/aosd_trigger.c:84
msgid ""
"Triggers OSD when, during playback, the song title changes but the filename "
"is the same. This is mostly useful to display title changes in internet "
"streams."
msgstr ""
"Показать OSD, еÑли в процеÑÑе воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑетÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ, но Ð¸Ð¼Ñ "
-"файла оÑтаётÑÑ Ð¿Ñ€ÐµÐ¶Ð½Ð¸Ð¼. Полезно Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ð¹ при воÑпроизведении "
-"из Ñети."
+"файла оÑтаётÑÑ Ð¿Ñ€ÐµÐ¶Ð½Ð¸Ð¼. Полезно Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ð¹ при воÑпроизведении"
+" из Ñети."
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr "Изменение громкоÑти"
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
msgstr "Показать OSD когда менÑетÑÑ Ð³Ñ€Ð¾Ð¼ÐºÐ¾ÑÑ‚ÑŒ."
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr "Пауза вкл."
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
msgstr "Показать OSD, когда воÑпроизведение приоÑтанавливаетÑÑ."
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
msgstr "Пауза выкл."
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
msgstr "Показать OSD, когда воÑпроизведение возобновлÑетÑÑ."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr "РаÑположение"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
msgstr "Смещение по оÑи X:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
msgstr "Смещение по оÑи Y:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° OSD:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr "Параметры Ð´Ð»Ñ ÑиÑтем Ñ Ð½ÐµÑколькими мониторами"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr "Показать OSD:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr "на вÑех мониторах"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr "на мониторе %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr "Ð’Ñ€ÐµÐ¼Ñ (мÑ)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr "отображениÑ:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr "поÑвлениÑ:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr "затуханиÑ:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr "Шрифты"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr "Шрифт %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr "Тень"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Поддержка меÑтных Ñзыков"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Отключить преобразование текÑта в UTF-8"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr "Выберите файл ÑтилÑ"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr "Стиль отображениÑ"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Цвета"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Цвет %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr "Другой Ñтиль"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr "Файл ÑтилÑ:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr "Обзор"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr "Включить Ñобытие"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr "Событие"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr "Ðайден композитный менеджер"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
-"unless you know that you have one running, please activate a composite "
-"manager otherwise the OSD won't work properly"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
msgstr ""
"Композитный менеджер не найден;\n"
"ПожалуйÑта, запуÑтите композитный менеджер; в противном Ñлучае\n"
"OSD не будет работать корректно."
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr ""
"Ð”Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° \"Ð˜Ð¼Ð¸Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾ÑÑ‚ÑŒ\" композитный менеджер не требуетÑÑ."
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr "ПрозрачноÑÑ‚ÑŒ"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr "Ð˜Ð¼Ð¸Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾ÑÑ‚ÑŒ"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr "ÐаÑтоÑÑ‰Ð°Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾ÑÑ‚ÑŒ (требуетÑÑ Ñ€Ð°Ñширение X Composite)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr "РаÑширение X Composite не загружено"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr "РаÑширение X Composite недоÑтупно"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Audacious OSD"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr "Проверить"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr "Положение"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr "ÐнимациÑ"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr "ТекÑÑ‚"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr "Стиль"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr "СобытиÑ"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Прочее"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr "О модуле Audacious OSD"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
@@ -1548,7 +985,7 @@ msgstr ""
"\n"
"Audacious OSD "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1570,151 +1007,37 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "Парный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ '%s'"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию Ð´Ð»Ñ %s"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "УÑтановлено Ñоединение Ñ %s"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "Соединение Ñ %s прервано"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "УÑтройÑтво было выключено"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "Ðевозможно обнаружить уÑтройÑтво"
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "УÑтройÑтво доÑтупно Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ"
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "УÑтройÑтво определÑетÑÑ"
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "УÑтройÑтво определилоÑÑŒ чаÑтично"
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "УÑтройÑтво переведено в режим подключениÑ"
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "О модуле поддержки гарнитуры Bluetooth"
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Модуль поддержки гарнитуры Bluetooth\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"Это проект Google Summer of Code 2008. Благодарю моего наÑтавника Tony Vroon "
-"и членов команды Audacious\n"
-" \n"
-"Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ AVRCP нужно загрузить модуль Ñдра uinput\n"
-"Кнопки гарнитуры будут раÑпознаны как обычные мультимедийные кнопки\n"
-"и могут быть наÑтроены Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð¼Ð¾Ð´ÑƒÐ»Ñ Global Hotkey в Audacious или Ñ "
-"помощью других программ,\n"
-"предоÑтавлÑемых вашим оконным менеджером.\n"
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Производитель"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "ДоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð³Ð°Ñ€Ð½Ð¸Ñ‚ÑƒÑ€Ð°"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð³Ð°Ñ€Ð½Ð¸Ñ‚ÑƒÑ€Ð°"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "Обновить"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "Соединение"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "Закрыть"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "КлаÑÑ"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "ÐдреÑ:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Соединение завершено!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "УÑтройÑтва не обнаружены!"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Сканирование..."
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Подключение..."
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Повторное Ñканирование"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "ВоÑпроизвеÑти"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Размытый оÑциллоÑкоп: выбор цвета"
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Параметры:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "ÐаÑтройка Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтереозвука в бинауральный по БауÑру"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Уровень ÑÐ¼ÐµÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð²:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "ЧаÑтота Ñреза:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Заготовки:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr "О модуле Audio CD"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
-"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
"\n"
"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
@@ -1725,11 +1048,9 @@ msgid ""
"\n"
"Copyright 2009 John Lindgren"
msgstr ""
-"Copyright (c) 2007 Calin Crisan <ccrisan@gmail.com> и команда разработчиков "
-"Audacious.\n"
+"Copyright (c) 2007 Calin Crisan <ccrisan@gmail.com> и команда разработчиков Audacious.\n"
"\n"
-"Ðвтор выражает благодарноÑÑ‚ÑŒ разработчикам библиотеки libcdio <http://www."
-"gnu.org/software/libcdio/>\n"
+"Ðвтор выражает благодарноÑÑ‚ÑŒ разработчикам библиотеки libcdio <http://www.gnu.org/software/libcdio/>\n"
"\tи разработчикам библиотеки libcddb <http://libcddb.sourceforge.net/>.\n"
"\n"
"Также ÑпаÑибо тебе, Tony Vroon, за наÑтавлениÑ.\n"
@@ -1738,124 +1059,153 @@ msgstr ""
"\n"
"Copyright 2009 John Lindgren"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Ðудио CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Привод пуÑÑ‚."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Ðеподдерживаемый тип диÑка."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ CD Audio"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Цифровое Ñчитывание аудио"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Данные о названии"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "СкороÑÑ‚ÑŒ диÑка:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "ИÑпользовать CD-Text, еÑли возможно"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "ИÑпользовать CDDB, еÑли возможно"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Сервер: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Путь: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Порт: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "ИÑпользовать HTTP вмеÑто CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Изменить уÑтройÑтво по умолчанию: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "ОК"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "ВоÑпроизвеÑти CD-диÑк"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Добавить CD-диÑк"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr "О модуле ДинамичеÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ñ€ÐµÑÑиÑ"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð”Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ñ€ÐµÑÑиÑ"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "ГромкоÑÑ‚ÑŒ:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Центр громкоÑти:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "ИнтенÑивноÑÑ‚ÑŒ Ñффекта:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "ДинамичеÑкий диапазон:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Модуль поддержки звука игровой конÑоли"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "ОÑновной"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "ВоÑпроизведение"
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "БаÑ:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr "Ñекунд"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Ð’Ñ‹Ñокие:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "ДлительноÑÑ‚ÑŒ композиции по умолчанию:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Преобразование чаÑтоты"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "Включить преобразование"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Преобразование чаÑтоты:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Гц"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr "Игнорировать длительноÑÑ‚ÑŒ из тегов SPC"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Увеличить реверберацию"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
-"The default song length, expressed in seconds, is used for songs that do not "
-"provide length information (i.e. looping tracks)."
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
msgstr ""
"ДлительноÑÑ‚ÑŒ дорожки по умолчанию, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð² Ñекундах, иÑпользуетÑÑ Ð´Ð»Ñ "
"запиÑей, у которых отÑутÑтвуют данные о длительноÑти (например, беÑконечные "
@@ -1873,61 +1223,57 @@ msgid ""
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
"Модуль поддержки звука игровых конÑолей оÑнован на Game_Music_Emu 0.5.2.\n"
-"Поддерживаемые форматы: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, "
-"VGZ\n"
+"Поддерживаемые форматы: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
"Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "О модуле ПерекрёÑтное затухание"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ ÐŸÐµÑ€ÐµÐºÑ€Ñ‘Ñтное затухание"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Перекрытие (в Ñекундах):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "ПерекрёÑтное затухание недоÑтупно"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
"ПерекрёÑтное затухание недоÑтупно, поÑкольку композиции имеет разное "
"количеÑтво каналов."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
-"You can use the Sample Rate Converter effect to resample the songs to the "
-"same rate."
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
msgstr ""
-"ПерекрёÑтное затухание недоÑтупно, поÑкольку композиции имеют различные "
-"битрейты.\n"
+"ПерекрёÑтное затухание недоÑтупно, поÑкольку композиции имеют различные битрейты.\n"
"\n"
-"Ð’Ñ‹ можете иÑпользовать модуль ÐŸÑ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð°Ñтоты Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ "
-"композиций к единому битрейту."
+"Ð’Ñ‹ можете иÑпользовать модуль ÐŸÑ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‡Ð°Ñтоты Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¹ к единому битрейту."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "ИнтенÑивноÑÑ‚ÑŒ Ñффекта:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Применить"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1939,684 +1285,245 @@ msgstr ""
"\n"
"Объёмное Ñхо добавил Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "О модуле Эхо"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð­Ñ…Ð¾"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Задержка (мÑ):"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑвÑзь (%):"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "ГромкоÑÑ‚ÑŒ (%):"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "ВоÑпроизведение->Играть"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "ВоÑпроизведение->Стоп"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "ВоÑпроизведение->Пауза"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "ВоÑпроизведение->ПредыдущаÑ"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "ВоÑпроизведение->СледующаÑ"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "ВоÑпроизведение->Извлечь"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "СпиÑок->Повтор"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "СпиÑок->Случайно"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "ГромкоÑÑ‚ÑŒ->Вверх_5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "ГромкоÑÑ‚ÑŒ->Вниз_5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "ГромкоÑÑ‚ÑŒ->Вверх_10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "ГромкоÑÑ‚ÑŒ->Вниз_10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "ГромкоÑÑ‚ÑŒ->Приглушить"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Окно->Главное"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Окно->СпиÑок воÑпроизведениÑ"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Окно->Эквалайзер"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Окно->Перейти к файлу"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: невозможно открыть файл уÑтройÑтва %s , уÑтройÑтво "
-"пропущено; проверьте, что файл ÑущеÑтвует и что у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ права на его "
-"чтение\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: невозможно Ñоздать io_channel Ð´Ð»Ñ ÑƒÑтройÑтва %s, "
-"уÑтройÑтво пропущено\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: невозможно открыть /proc/bus/input/devices, "
-"автоматичеÑкое раÑпознавание уÑтройÑтв Ñобытий не будет работать.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: невозможно открыть io_channel Ð´Ð»Ñ /proc/bus/input/"
-"devices, автоматичеÑкое раÑпознавание уÑтройÑтв Ñобытий не будет работать.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: произошла ошибка при чтении /proc/bus/input/devices, "
-"автоматичеÑкое раÑпознавание уÑтройÑтв Ñобытий не будет работать.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: уÑтройÑтво %s не найдено в /dev/input, пропущено.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: невозможно загрузить конфигурационный файл %s, будут "
-"иÑпользованы наÑтройки по умолчанию.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: Ð½ÐµÐ¿Ð¾Ð»Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² конфигурационном файле Ð´Ð»Ñ "
-"уÑтройÑтва \"%s\", пропущено.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: наÑтройка, невозможно получить значение is_active Ð´Ð»Ñ "
-"уÑтройÑтва \"%s\", пропущено.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: невозможно получить доÑтуп к локальному каталогу %s, "
-"наÑтройки не будут Ñохранены.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: наÑтройка, невозможно получить Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ ÑƒÑтройÑтва "
-"\"%s\", пропущено.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: наÑтройка, невозможно получить физичеÑкое значение Ð´Ð»Ñ "
-"уÑтройÑтва \"%s\", пропущено.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: наÑтройка, невозможно получить значение is_custom Ð´Ð»Ñ "
-"уÑтройÑтва \"%s\", пропущено.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: наÑтройка, непредуÑмотренное значение Ð´Ð»Ñ ÑƒÑтройÑтва "
-"\"%s\", пропущено.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Определено"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "Другое"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Ðе определено"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "ИнформациÑ"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Ðевозможно открыть окно Ð´Ð»Ñ Ð½ÐµÐ¾Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð¾Ð³Ð¾ уÑтройÑтва.\n"
-"УбедитеÑÑŒ, что уÑтройÑтво подключено правильно."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Ошибка"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Ðевозможно открыть выбранное уÑтройÑтво.\n"
-"ПожалуйÑта, проверьте права доÑтупа к файлу уÑтройÑтва."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Добавить другое уÑтройÑтво"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug пытаетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки определить и обновить информацию\n"
-"о ÑобытиÑÑ… уÑтройÑтв, приÑутÑтвующих в ÑиÑтеме.\n"
-"Однако, еÑли автоматичеÑкое определение в вашей ÑиÑтеме не работает\n"
-"или же уÑтройÑтва размещены не там, где обычно (ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ñ€Ð¾ÑматриваетÑÑ\n"
-"только каталог /dev/input/), то вы можете добавить уÑтройÑтво вручную,\n"
-"указав название и файл уÑтройÑтва."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Ð˜Ð¼Ñ ÑƒÑтройÑтва:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Файл уÑтройÑтва:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(другое)"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"ПожалуйÑта укажите название и Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.\n"
-"Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° должно иметь абÑолютный путь."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-"Ð’Ñ‹ хотите удалить ÑущеÑтвующую конфигурацию Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ уÑтройÑтва?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Ð’Ñ‹ хотите удалить выбранное уÑтройÑтво?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ EvDev-Plug"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Ðктивное"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "СтатуÑ"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Ðазвание уÑтройÑтва"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Файл уÑтройÑтва"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "ÐÐ´Ñ€ÐµÑ ÑƒÑтройÑтва"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_ПривÑзки клавиш"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Ðажмите клавишу на вашем уÑтройÑтве, чтобы Ñделать\n"
-"привÑзку к ней. ЕÑли ни одна клавиша не будет нажата\n"
-"в течении 5 Ñекунд, окно закроетÑÑ Ð±ÐµÐ· Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ñзок."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Это Ñобытие уже назначено.\n"
-"\n"
-"Ðевозможно назначить неÑколько дейÑтвий на одно и тоже входное Ñобытие (так "
-"же, как Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ одно дейÑтвие на неÑколько Ñобытий)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - ÐаÑтройка привÑзок клавиш"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Ðазвание: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Физ. адреÑ: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "О модуле EvDev-Plug"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"Удалённое управление проигрывателем Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ уÑтройÑтв Ñобытий\n"
-"http://www.develia.org/projects.php?p=evdevplug\n"
-"\n"
-"Модуль напиÑал Giacomo Lozito\n"
-"< james@develia.org >\n"
-"\n"
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:725
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-"Многоформатный модуль Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ° Ð´Ð»Ñ Audacious,\n"
-"оÑнован на FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Мульти-формат плагина аудио-декодера Ð´Ð»Ñ Audacious оÑнован на FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
-"Модуль Ð´Ð»Ñ Audacious напиÑали:\n"
+"Ðвторы плагина Ð´Ð»Ñ Audacious:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:739
msgid "About FFaudio Plugin"
msgstr "О модуле FFaudio"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr "О модуле ЗапиÑÑŒ в файл"
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Модуль ЗапиÑÑŒ в файл\n"
-"\n"
-"Эта программа - Ñвободное программное обеÑпечение; вы можете раÑпроÑтранÑÑ‚ÑŒ "
-"и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-"Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-"Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-"Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-"\n"
-"Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-"ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-"ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-"ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-"\n"
-"Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-"вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: Free "
-"Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-"USA."
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
msgstr "Параметры запиÑи в файл"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
msgstr "Формат запиÑываемого файла:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr "ÐаÑтройка"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
msgstr "Сохранить в тот же каталог"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
msgstr "Сохранить в другой каталог"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
msgstr "Каталог Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñываемых файлов:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
msgstr "ПоиÑк каталога"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
msgstr "Создать название файла из:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
msgstr "имеющихÑÑ Ñ‚ÐµÐ³Ð¾Ð² файла"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
msgstr "имеющегоÑÑ Ð¸Ð¼ÐµÐ½Ð¸ файла"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
msgstr "Ðе удалÑÑ‚ÑŒ раÑширение имени файла"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"ЕÑли включено, то раÑширение имеющегоÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° не будет удалено до "
-"Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² конце нового раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°"
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:578
msgid "Prepend track number to filename"
msgstr "ВпиÑать до Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° номер дорожки"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "ÐвтоматичеÑки"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Объединённое Ñтерео"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Стерео"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Моно"
+
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
msgstr "Параметры MP3"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
msgstr "КачеÑтво алгоритма:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"наилучшее, но медленно: 0;\n"
-"наихудшее, но быÑтро: 9;\n"
-"рекомендованное: 2;\n"
-"по умолчанию: 5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
msgstr "Ð’Ñ‹Ñ…Ð¾Ð´Ð½Ð°Ñ Ñ‡Ð°Ñтота:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "ÐвтоматичеÑки"
-
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Гц)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
msgstr "Битрейт / Степень ÑжатиÑ:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
msgstr "Битрейт (кб/Ñ)"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
msgstr "Степень ÑжатиÑ:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
msgstr "Ðудио режим:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Joint Ñтерео"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr "Прочее:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
msgstr "Полное ÑоответÑтвие ISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr "Защита от ошибок"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Добавить 16-битную контрольную Ñумму к каждому фрейму"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr "КачеÑтво"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
msgstr "Включить VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr "Тип:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Переменный битрейт"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Средний битрейт"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
msgstr "Параметры VBR:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
msgstr "Минимальный битрейт (кб/Ñ):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
msgstr "МакÑимальный битрейт (кб/Ñ):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
msgstr "Строгое Ñоблюдение минимального битрейта"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñми, которые не поддерживают низкий битрейт "
-"mp3 (Apex AD600-A DVD/mp3 player)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
msgstr "Параметры ABR:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
msgstr "Средний битрейт (кб/Ñ):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
msgstr "Уровень качеÑтва VBR:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"наивыÑший: 0;\n"
-"Ñамый низкий: 9;\n"
-"по умолчанию: 4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
msgstr "Ðе запиÑывать заголовки Xing VBR"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr "Параметры фрейма:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
msgstr "Пометить авторÑким правом (copyright)"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
msgstr "Пометить как оригинальное"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr "Параметры ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
msgstr "Принудительное добавление 2-й верÑии тегов"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
msgstr "Только 1-Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñ‚ÐµÐ³Ð¾Ð²"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
msgstr "Только 2-Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñ‚ÐµÐ³Ð¾Ð²"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
msgstr "Теги"
@@ -2628,11 +1535,11 @@ msgstr "ÐаÑтройка кодека Vorbis"
msgid "Quality level (0 - 10):"
msgstr "Уровень качеÑтва (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "Модуль поддержки FLAC "
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "О модуле поддержки FLAC"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2648,15 +1555,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "О модуле поддержки FLAC"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "О модуле \"ГорÑчие клавиши\" Ð´Ð»Ñ Gnome"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2671,492 +1574,463 @@ msgstr ""
"Copyright (C) 2007 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
-msgid "Open Files"
-msgstr "Открыть файлы"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Ð’Ñтупительный номер"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
-msgid "Add Files"
-msgstr "Добавить файлы"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Ðазвание"
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "ÐртиÑÑ‚"
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr "Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ gnt"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Год"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
-"Ðевозможно перейти к указанному времени, еÑли дорожка не проигрываетÑÑ.\n"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Ðльбом"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "Перейти к указанному времени"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Дорожка"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "минут:Ñекунд"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Очередь размещениÑ"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Длина дорожки:"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Длинна"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Ошибка запиÑи ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ \"%s\": %s"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Путь к файлу"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s уже ÑущеÑтвует. Продолжить?"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "Выгрузить ÑпиÑок воÑпроизведениÑ"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Ðазвание вручную:"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "Загрузить ÑпиÑок воÑпроизведениÑ"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Битрейт"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr "Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ GTK"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Выбрать Ñтолбики"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "ДоÑтупно:"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Выбрано:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "ОÑтановить поÑле текущей дорожки"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Прикрепить Ñлева"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Повтор"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Прикрепить Ñправа"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Случайно"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Прикрепить наверху"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "Без Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑпиÑку воÑпроизведениÑ"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Прикрепить внизу"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Показать ÑпиÑки воÑпроизведениÑ"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Открепить"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Показать/Ñкрыть ÑпиÑки воÑпроизведениÑ"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Отключить"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "Показать информационное поле"
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Открыть файлы ..."
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "Показать/Ñкрыть информационное поле"
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Открыть _URL ..."
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "Показать главное меню"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_Добавить файлы ..."
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "Показать/Ñкрыть главное меню"
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Добавить U_RL ..."
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr "Показать Ñтроку ÑоÑтоÑниÑ"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "О_ программе ..."
-#: src/gtkui/ui_manager.c:57
-msgid "Show/hide statusbar"
-msgstr "Показать/Ñкрыть Ñтроку ÑоÑтоÑниÑ"
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_ÐаÑтройка..."
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Пауза"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Выход"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "ОÑтановить"
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_ВоÑпроизведение"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Пауз_а"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Стоп"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "СпиÑок воÑпроизведениÑ"
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "пре_дыдущее"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Ðовый ÑпиÑок"
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Следующее"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Удалить ÑпиÑок"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "_Повтор"
-#: src/gtkui/ui_manager.c:92
-msgid "Import Playlist ..."
-msgstr "Загрузить ÑпиÑок..."
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "Ð’_разброÑ"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Загрузить ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð· файла в выбранный ÑпиÑок."
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "Ð_е передвигатьÑÑ Ð¿Ð¾ ÑпиÑку"
-#: src/gtkui/ui_manager.c:95
-msgid "Export Playlist ..."
-msgstr "Выгрузить ÑпиÑок..."
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "ОÑтановить _поÑле Ñтой пеÑни"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Сохранить выбранный ÑпиÑок воÑпроизведениÑ."
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ _пеÑне"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Сохранить вÑе ÑпиÑки воÑпроизведениÑ"
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Перейти к _времени ..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-"Сохранить вÑе открытые ÑпиÑки воÑпроизведениÑ. Это делаетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки "
-"при закрытии Audacious."
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "_Перейти к пеÑне ..."
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr "Обновить"
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "По _номеру Трека"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Обновить метаданные и ÑоотнеÑти их Ñ Ð·Ð°Ð¿Ð¸ÑÑми ÑпиÑка воÑпроизведениÑ."
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "По _названию"
-#: src/gtkui/ui_manager.c:107
-msgid "Playlist Manager"
-msgstr "Менеджер ÑпиÑков"
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "По _артиÑту"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Открыть менеджер ÑпиÑков."
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "По а_льбому"
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr "Добавить адреÑ..."
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "По _дате выпуÑка"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Добавить звуковой поток из Ñети в ÑпиÑок воÑпроизведениÑ."
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "По раÑположению _файла"
-#: src/gtkui/ui_manager.c:115
-msgid "Add Files ..."
-msgstr "Добавить файлы..."
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "По _заданному названию файла"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Добавить файлы в ÑпиÑок воÑпроизведениÑ."
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Ð’ _обратном порÑдке"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Удалить вÑе"
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Ð’ _Ñлучайном порÑдке"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Удалить вÑе запиÑи из ÑпиÑка воÑпроизведениÑ."
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "Обновить"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "Удалить не отмеченные"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Убрать _недоÑтупные файлы"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ðµ выделенные запиÑи."
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Сортировать"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "Удалить выбранные"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Ðовый"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ запиÑи."
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "Закрыть"
-#: src/gtkui/ui_manager.c:131
-msgid "Sort"
-msgstr "Сортировка"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Импортировать ..."
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "По номеру дорожки"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_ЭкÑпортировать ..."
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "По названию"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Управление ÑпиÑком ..."
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "По иÑполнителю"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "_Управление очередью ..."
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "По альбому"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "ГромкоÑÑ‚ÑŒ _больше"
-#: src/gtkui/ui_manager.c:140
-msgid "By File Path"
-msgstr "По имени файла"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "ГромкоÑÑ‚ÑŒ _меньше"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
-msgstr "Ð’ обратном порÑдке"
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Эквалайзер"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Вывод"
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "Э_ффекты"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Эффекты"
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_ИнтерфейÑ"
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr "Эквалайзер"
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_ВизуализациÑ"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Вид"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Показывать _панель меню"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr "ИнтерфейÑ"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Показывать п_анель информации"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Файл"
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Показывать _Ñтроку ÑоÑтоÑниÑ"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "Компоненты"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Показывать заголовки _Ñтолбцов"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ дорожке"
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Показывать _Ñтолбцы"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "ПроÑмотреть информацию о дорожке."
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Прокручивать при Ñмене пеÑни"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "Об Audacious"
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Файл"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr "Открыть файлы..."
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_ВоÑпроизведение"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "Загрузить и воÑпроизвеÑти файл"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "С_пиÑок"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr "Открыть адреÑ..."
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Службы"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "ВоÑпроизвеÑти аудиоданные из выбранного меÑта."
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Вывод"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Службы модулей"
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Вид"
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Параметры"
-
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Открыть окно параметров"
-
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "_Выход"
-
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "Закрыть Audacious"
-
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "УÑтановить A-B"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Элемент очереди"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "ОчиÑтить A-B"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "_Вырезать"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "Перейти к началу ÑпиÑка"
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Копировать"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Перейти к файлу"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "_Ð’Ñтавить"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Показать/Ñкрыть очередь"
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Выбрать _вÑÑ‘"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Включить или отключить очерёдноÑÑ‚ÑŒ запиÑей в ÑпиÑке воÑпроизведениÑ."
-
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Копировать"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Переименовать"
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Вырезать"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ GTK"
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Ð’Ñтавить"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Выбрать вÑе"
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Ð‘ÑƒÑ„ÐµÑ€Ð¸Ð·Ð°Ñ†Ð¸Ñ ..."
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Выбрать вÑе запиÑи ÑпиÑка воÑпроизведениÑ."
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "СнÑÑ‚ÑŒ выделение"
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Ошибка"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "СнÑÑ‚ÑŒ выделение Ñ Ñ€Ð°Ð½ÐµÐµ выделенных запиÑей."
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Закрыть"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr "моно"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr "Ñтерео"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:109
#, c-format
-msgid "%d channels"
-msgstr "%d каналов"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d канал"
+msgstr[1] "%d каналов"
+msgstr[2] "%d каналы"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr "%s: %d кбит/Ñ, %d Гц, %s"
+msgid "%d kbps"
+msgstr "%d кбит/Ñ"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "ВоÑпроизвеÑти"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "Пауза/Продолжить"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "ОÑтановить"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Перемотать вперёд на 5 Ñек."
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Перемотать назад на 5 Ñек."
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Приглушить"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Громче"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Тише"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Перейти к файлу"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Показать/Ñкрыть окна проигрывателÑ"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "Отобразить Ñкранное Ñообщение (OSD)"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Переключить на повтор"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Переключить на раÑброÑ"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(нет)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
-"It is not recommended to bind the primary mouse buttons without "
-"modificators.\n"
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
"\n"
"Do you want to continue?"
msgstr ""
-"Ðе рекомендуетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ привÑзки к оÑновным кнопкам мыши без клавиш-"
-"модификаторов.\n"
+"Ðе рекомендуетÑÑ Ð´ÐµÐ»Ð°Ñ‚ÑŒ привÑзки к оÑновным кнопкам мыши без клавиш-модификаторов.\n"
"\n"
"Продолжить?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "ПривÑзки к кнопкам мыши"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ðµ \"горÑчие клавиши\""
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3164,23 +2038,23 @@ msgstr ""
"Ðажмите комбинацию клавиш в текÑтовом поле.\n"
"Можно также Ñделать привÑзки к кнопкам мыши."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "ГорÑчие клавиши:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>ДейÑтвие:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>ПривÑзка клавиш:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "О модуле Глобальные \"горÑчие клавиши\""
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3209,31 +2083,31 @@ msgstr ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr "ПодÑоединитьÑÑ Ðº доÑтупным портам"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr "ПодÑоединитьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к портам вывода"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr "Ðе подÑоединÑÑ‚ÑŒÑÑ Ðº портам"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Jack"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
msgstr "Режим ÑоединениÑ:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr "Выводить отладочную информацию"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3251,139 +2125,70 @@ msgstr ""
"Портирован Ð´Ð»Ñ Audacious:\n"
"Giacomo Lozito Ñ develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
msgstr "О модуле вывода JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Этот модуль LADSPA не имеет пользовательÑких наÑтроек"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "ИмÑ"
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Про хоÑÑ‚ LADSPA"
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "%s ÐаÑтройки"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "УÑтановленные модули"
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "ÐаÑтройки хоÑта LADSPA"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Ðктивные модули"
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Путь к модулÑм:"
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Добавить"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>ЕÑли путей неÑколько, разделÑйте их двоеточием.\n"
+"ПоиÑк оÑущеÑтвлÑетÑÑ Ð¿Ð¾ указанным путÑм и переменной LADSPA_PATH.\n"
+"Указав пути, нажмите Enter Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка новых плагинов.</small>"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Удалить"
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "ДоÑтупные плагины:"
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "Каталог модулей LADSPA"
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Включить"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "О модуле LIRC"
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Включенные плагины"
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "Модуль LIRC "
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "ÐаÑтройки"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"ПроÑтой модуль, позволÑющий управлÑÑ‚ÑŒ Audacious\n"
-"Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ инфракраÑного пульта управлениÑ\n"
-"и ÑиÑтемного ÑервиÑа LIRC\n"
-"\n"
-"Ðдаптировано Ð´Ð»Ñ Audacious:\n"
-"Tony Vroon <chainsaw@gentoo.org>,\n"
-"оÑновано на модуле XMMS LIRC:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"Информацию о LIRC можно найти на:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ LIRC"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Повторно подключитьÑÑ Ðº Ñерверу LIRC"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾ повторного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (Ñекунд): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Повторное подключение"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Соединение"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: невозможно инициализировать поддержку LIRC\n"
+"Ищу Ñлова..."
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:304
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
-"%s: невозможно прочитать конфигурационный файл LIRC\n"
-"%s: пожалуйÑта, обратитеÑÑŒ к документации LIRC\n"
-"%s: как Ñоздать рабочий конфигурационный файл\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: повторное Ñоединение...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: неизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: отключение от LIRC\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: пытатьÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ каждые %d Ñекунд...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
-msgstr "LyricWiki"
+"\n"
+"Подключение к lyrics.wikia.com..."
-#: src/lyricwiki/lyricwiki.c:337
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
@@ -3391,11 +2196,11 @@ msgstr ""
"\n"
"ТекÑÑ‚Ñ‹ не обнаружены."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
msgstr "О модуле Метроном"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3403,275 +2208,68 @@ msgid ""
"e.g. tact://77 to play 77 beats per minute\n"
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-"Тактовый генератор (метроном) от Martin Strauss <mys@faveve.uni-stuttgart."
-"de>\n"
+"Тактовый генератор (метроном) от Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
"Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²ÑŒÑ‚Ðµ адреÑ, например: tact://такты[*чиÑл/знам]\n"
"Ðапример, tact://77 Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ 77и тактов в минуту\n"
"или tact://60*3/4 Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ 60и тактов в минуту\n"
"в размере 3/4"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Тактовый генератор: %d тактов/Ñ"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Тактовый генератор: %d такт/мин %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ ModPlug"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 бит"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 бит"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Моно (микшировать 2 канала в 1)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "КуÑочно-поÑтоÑнное (быÑтрейшее)"
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Про Channel Mixer"
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Линейное (быÑтрое)"
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "ÐаÑтройки Channel Mixer "
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Сплайны (хорошее качеÑтво)"
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Каналов на выходе:"
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-точечный КИХ (наилучшее качеÑтво)"
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾ÑущеÑтвлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¸ Ñмене воÑпроизводимой пеÑни."
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 кГц"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 кГц"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 кГц"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 кГц"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "ЧаÑтота"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Включить"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Глубина"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Задержка"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "РеверберациÑ"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Величина"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Диапазон"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "УÑиление баÑа"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
msgstr "Объёмное звучание"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Важно: УÑтановка Ñлишком большого значениÑ\n"
-"предуÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ вызвать отÑечение Ñигнала,\n"
-"и, как ÑледÑтвие, щелчки и треÑк!"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "ПредуÑиление"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "ИÑпользовать Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° как название дорожки"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "БыÑÑ‚Ñ€Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÑпиÑка воÑпроизведениÑ"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Шумоподавление"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Играть Amiga MOD"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Ðе по кругу"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "По кругу"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "времÑ(Ñ)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "По кругу беÑпрерывно"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "БеÑпрерывно"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ MOD"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°:\n"
-"Ðазвание:\n"
-"Тип:\n"
-"Длина:\n"
-"СкороÑÑ‚ÑŒ:\n"
-"Темп:\n"
-"СÑмплы:\n"
-"ИнÑтрументы:\n"
-"РитмичноÑÑ‚ÑŒ:\n"
-"Каналы:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "СÑмплы"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "ИнÑтрументы"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Сообщение"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Модуль ввода Modplug Ð´Ð»Ñ Audacious, верÑÐ¸Ñ "
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Звуковое Ñдро Modplug напиÑал Olivier Lapicque.\n"
-"XMMS interface for Modplug напиÑал Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ Ñопровождение Konstanty Bialkowski.\n"
-"Портировал в BMP Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "О модуле Modplug"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Ðе удалоÑÑŒ найти файл изображениÑ: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Выгрузка выбранных дорожек"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:340
msgid "Upload in progress..."
msgstr "ПроводитÑÑ Ð²Ñ‹Ð³Ñ€ÑƒÐ·ÐºÐ°..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "Оператор уÑтройÑтва MTP"
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Загрузить на MTP-уÑтройÑтво"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Отключить MTP-уÑтройÑтво"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "Отключить уÑтройÑтво"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "ОÑтановлен"
-#: src/null/null.c:63
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious ничего не воÑпроизводит."
+
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Модуль Ðулевой вывод"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3679,925 +2277,210 @@ msgstr ""
"Christian Birchinger <joker@netswarm.net>\n"
"оÑнован на модуле Ð´Ð»Ñ XMMS, от HÃ¥vard KvÃ¥l <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "О модуле Ðулевой вывод"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ðулевой вывод"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr "ЗапуÑтить в режиме реального времени"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
msgstr "1. УÑтройÑтво по умолчанию"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° OSS4"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
msgstr "Звуковое уÑтройÑтво:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr "ИÑпользовать другое уÑтройÑтво:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
msgstr "Сохранить громкоÑÑ‚ÑŒ между ÑеÑÑиÑми"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
msgstr "Включить преобразование формата Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ OSS."
-#: src/oss4/plugin.c:54
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Включить ÑкÑклюзивный режим, избегать виртуального микшированиÑ."
+
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
msgstr "О модуле OSS4"
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-"Модуль вывода OSS4 Ð´Ð»Ñ Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"Мне хотелоÑÑŒ бы поблагодарить людей на канале #audacious, оÑобенно Tony "
-"Vroon и John "
-"Lindgren и, конечно, авторов предыдущего Ð¼Ð¾Ð´ÑƒÐ»Ñ OSS.\n"
-"\n"
-"Эта программа - беÑплатное программное обеÑпечение; вы можете "
-"раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать ее\n"
-"в ÑоответÑтвии Ñ ÑƒÑловиÑми Лицензии GNU, опубликованную\n"
-"Организацией БеÑплатного Программного ОбеÑпечениÑ; вы можете пользоватьÑÑ "
-"верÑией 2 Лицензии или\n"
-"(по вашему желанию) любой более поздней верÑией.\n"
-"\n"
-"Эта программа раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезна,\n"
-"но БЕЗ ВСЯКОЙ ГÐРÐÐТИИ; даже без гарании подразумеваемой\n"
-"РÐБОТОСПОСОБÐОСТИ или ПРИГОДÐОСТИ ДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ. ПожалуйÑта,\n"
-"за подробноÑÑ‚Ñми обратитеÑÑŒ к Лицензии GNU.\n"
-"\n"
-"Ð’Ñ‹ должны были получить копию Лицензии GNU вмеÑте Ñ Ñтой программой;\n"
-"еÑли же нет, то обратитеÑÑŒ к Ñтранице <http://www.gnu.org/licenses/>.\n"
-
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
msgstr "Ошибка OSS4"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "По умолчанию (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "УÑтройÑтва"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "БуферизациÑ:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr "ÐŸÑ€ÐµÐ´Ð±ÑƒÑ„ÐµÑ€Ð¸Ð·Ð°Ñ†Ð¸Ñ (%):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "БуферизациÑ"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "Параметры микшера:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "Регулировка громкоÑти через Master, а не через PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "Микшер"
-#: src/OSS/OSS.c:40
+#: src/OSS/OSS.c:41
msgid "About OSS Driver"
msgstr "О модуле OSS"
-#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Модуль OSS Ð´Ð»Ñ Audacious\n"
-"\n"
-"Эта программа - Ñвободное программное обеÑпечение; вы можете раÑпроÑтранÑÑ‚ÑŒ "
-"и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-"Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-"Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-"Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-"\n"
-"Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-"ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-"ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-"ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-"\n"
-"Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-"вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: Free "
-"Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-"USA."
-
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
msgstr "О модуле вывода PulseAudio"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Модуль вывода PulseAudio Ð´Ð»Ñ Audacious\n"
-"\n"
-" Эта программа - беÑплатное программное обеÑпечение; вы можете "
-"раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать ее\n"
-"в ÑоответÑтвии Ñ ÑƒÑловиÑми Лицензии GNU, опубликованную\n"
-"Организацией БеÑплатного Программного ОбеÑпечениÑ; вы можете пользоватьÑÑ "
-"верÑией 2 Лицензии или\n"
-"(по вашему желанию) любой более поздней верÑией.\n"
-"\n"
-"Эта программа раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезна,\n"
-"но БЕЗ ВСЯКОЙ ГÐРÐÐТИИ; даже без гарании подразумеваемой\n"
-"РÐБОТОСПОСОБÐОСТИ или ПРИГОДÐОСТИ ДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ. ПожалуйÑта,\n"
-"за подробноÑÑ‚Ñми обратитеÑÑŒ к Лицензии GNU.\n"
-"\n"
-"Ð’Ñ‹ должны были получить копию Лицензии GNU вмеÑте Ñ Ñтой программой;\n"
-"еÑли же нет, то напишите об Ñтом по адреÑу: Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307,\n"
-"USA."
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
msgstr "О модуле Преобразование чаÑтоты"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ ÐŸÑ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ðµ чаÑтоты"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
msgstr "Карта битрейтов:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr "Ð’Ñе оÑтальные:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "Метод:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
msgstr "Сменить пароль"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr "<b>Службы</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr "Пароль:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
msgstr "Scrobbler URL:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
msgstr "Scrobbler"
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
-"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
-"com>\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
msgstr ""
"Модуль AudioScrobbler Ð´Ð»Ñ Audacious\n"
"\n"
-"Первоначально был разработан Audun Hove <audun@nlc.no> и Pipian "
-"<pipian@pipian.com>\n"
+"Первоначально был разработан Audun Hove <audun@nlc.no> и Pipian <pipian@pipian.com>\n"
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr "О модуле Scrobbler"
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "О модуле %s"
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr "Ошибка"
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr "Дорожка #%i: "
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr "Параметры Audacious-SID"
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8 бит"
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16 бит"
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr "Разрешение:"
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr "ÐвтоматичеÑкое панорамирование"
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr "Каналы:"
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr "ЧаÑтота:"
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr "ИÑпользовать повышение чаÑтоты"
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr "КоÑффициент:"
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr "Большие коÑффициенты требуют больше реÑурÑов процеÑÑора."
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr "Повышение чаÑтоты:"
-
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Звук"
-
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr "Принудительное уÑкорение"
-
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
-"ЕÑли включено, то Ñтот параметр заÑтавлÑет иÑпользовать выбранную чаÑтоту. Ð’ "
-"другом Ñлучае ÑкороÑÑ‚ÑŒ воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑетÑÑ Ð¸Ð· Ñамого проигрываемого "
-"файла."
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50 Гц)"
-
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
-msgstr ""
-"PAL ÑвлÑетÑÑ ÐµÐ²Ñ€Ð¾Ð¿ÐµÐ¹Ñким телевизионным Ñтандартом, иÑпользующим 50-герцовую "
-"вертикальную развёртку. БольшинÑтво уÑтройÑтв SID было Ñделано Ð´Ð»Ñ PAL-"
-"ÑовмеÑтимых компьютеров."
-
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60 Гц)"
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-"NTSC ÑвлÑетÑÑ Ñ‚ÐµÐ»ÐµÐ²Ð¸Ð·Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ Ñтандартом Ñ 60-герцовой вертикальной развёрткой "
-"(и другими функциÑми, отличающимиÑÑ Ð¾Ñ‚ ÑиÑтемы PAL). Большей чаÑтью, он "
-"иÑпользуетÑÑ Ð² Соединённых Штатах, Японии и некоторых других Ñтранах."
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr "Ð¢Ð°ÐºÑ‚Ð¾Ð²Ð°Ñ Ñ‡Ð°Ñтота:"
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr "Принудительно задать модель"
-
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-"ЕÑли включено, Ñтот параметр принудительно Ñмулирует выбранную модель "
-"микроÑхемы SID. Ð’ другом Ñлучае, Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ SID определÑетÑÑ "
-"из файла (еÑли тип PSIDv2NG type). ЕÑли же еÑли Ñто недоÑтупно, то "
-"иÑпользуетÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ðµ значение."
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-"MOS/CSG 6581 - Ñто ÑÐ°Ð¼Ð°Ñ ÑÑ‚Ð°Ñ€ÑˆÐ°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ñхемы SID. Она немного "
-"отличаетÑÑ Ð¾Ñ‚ 8580, имеет более полные фильтры (которые, в ÑвÑзи Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ "
-"проектированиÑ, никогда не Ñовпадают в разных микроÑхемах SID) и имеет "
-"\"ошибку наÑтойки громкоÑти\", ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ воÑпроизведение цифровых "
-"ÑÑмплов."
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr "Модель SID:"
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr "SIDPlay 1 (frame-based)"
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-"ЭмулÑÑ†Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ libSIDPlay верÑии 1.x, быÑтрее, но не так точно. Хороший "
-"выбор в большинÑтве Ñлучаев."
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr "SIDPlay 2 (cycle-based)"
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-"ЭмулÑÑ†Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ libSIDPlay верÑии 2.x, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ более мощных CPU в "
-"ÑвÑзи в более точной ÑмулÑцией."
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr "Выбор библиотеки ÑмулÑции:"
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr "Real C64 (только 2-Ñ Ð²ÐµÑ€ÑÐ¸Ñ SIDPlay)"
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr "Переключение банков"
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr "Прозрачное ПЗУ"
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr "Окружение PlaySID"
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr "Режим памÑти:"
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr "Emu#1"
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr "Режим оптимизации (быÑтро, неточно)"
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-"Этот параметр может быть иÑпользован Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ \"режима оптимизации\" во "
-"2-й верÑии libSIDPlay, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñнижает ÑмулÑцию от cycle-exact к чему-то "
-"наподобие frame-exact. Результатом ÑвлÑетÑÑ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° процеÑÑора Ñ "
-"потерей точноÑти."
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr "ЭмулÑÑ†Ð¸Ñ reSID"
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-"reSID Ñто программный ÑимулÑтор микроÑхемы SID, полученный в ходе реверÑ-"
-"инжиниринга SID, Ñоздана Dag Lem. ВероÑтно, она ближе вÑех к наÑтоÑщим SID "
-"по Ñравнению Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ программными ÑмулÑторами."
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr "HardSID"
-
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-"HardSID Ñто EISA/PCI карта Ð´Ð»Ñ PC-ÑовмеÑтимых уÑтройÑтв, на которых можно "
-"размеÑтить наÑтоÑщие микроÑхемы SID. Программы могут быть иÑпользованы Ð´Ð»Ñ "
-"ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ HardSID и, Ñоединив её Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð½Ð¾Ð¹ ÑмулÑцией оÑтавшихÑÑ C64 через "
-"libSIDPlay2, HardSID, можно иÑпользовать Ð´Ð»Ñ Ð´Ð¾ÑÑ‚Ð¸Ð¶ÐµÐ½Ð¸Ñ \"100-процентной "
-"близоÑти\" к наÑтоÑщему C64. Дополнительную информацию Ñмотрите на http://"
-"www.hardsid.com/"
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr "Параметры SIDPlay 2:"
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr "БыÑтро (ближайший ÑÑмпл)"
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-"БыÑтрое и также наихудшее звучание ÑÑмплов, проÑтой поиÑк ближайшего "
-"ÑоÑеднего ÑÑмпла."
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑциÑ"
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-"ИÑпользовать линейную интерполÑцию между ÑÑмплами, результатом чего ÑвлÑетÑÑ "
-"повышение качеÑтва звука Ñ Ð¼ÐµÐ½ÑŒÑˆÐ¸Ð¼Ð¸ шумами."
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr "Преобразование чаÑтоты (КИХ)"
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr "Параметры reSID"
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr "Emu#2"
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr "Эмулировать фильтры"
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-"Этот параметр активирует ÑмулÑцию фильтра SID. Фильтр ÑвлÑетÑÑ ÑоÑтавной "
-"чаÑтью звуковых возможноÑтей SID, но Ñ‚Ð¾Ñ‡Ð½Ð°Ñ ÐµÐ³Ð¾ ÑмулÑÑ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ потребовать "
-"значительных реÑурÑов процеÑÑора. Однако, еÑли ÑмулÑÑ†Ð¸Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° отключена, "
-"то мелодии не будут иметь наÑтоÑщее звучание, как было бы, еÑли при их "
-"воÑпроизведении иÑпользовалÑÑ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€."
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr "FS"
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr "FM"
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr "FT"
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr "СброÑить значениÑ"
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr "SIDPlay1"
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr "ЭкÑпорт"
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr "ИÑпользовать"
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr "Сохранить"
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr "Импорт"
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr "Удалить"
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr "ÐšÑ€Ð¸Ð²Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°:"
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr "SIDPlay2"
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr "Фильтры"
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr "ВоÑпроизводить, как минимум, за указанное времÑ"
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-"ЕÑли включено, то мелодии проигрываютÑÑ, по меньшей мере, за указанное "
-"времÑ, добавлÑÑ Ñ‚Ð¸ÑˆÐ¸Ð½Ñƒ в конце по мере необходимоÑти."
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑпроизведениÑ:"
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr "Минимальное Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑпроизведениÑ:"
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr "ВоÑпроизводить указанное макÑимальное времÑ"
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-"ЕÑли включено, то Ð¼ÐµÐ»Ð¾Ð´Ð¸Ñ Ð²Ð¾ÑпроизводитÑÑ Ð´Ð¾ доÑÑ‚Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ "
-"длительноÑти (макÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑпроизведениÑ)."
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr "Только когда длительноÑÑ‚ÑŒ неизвеÑтна"
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-"ЕÑли включено, то воÑпроизведение оÑущеÑтвлÑетÑÑ Ð·Ð° макÑимальное времÑ, еÑли "
-"длительноÑÑ‚ÑŒ дорожки не извеÑтна."
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr "МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑпроизведениÑ:"
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr "ИÑпользовать XSIDPLAY-ÑовмеÑтимые базы данных"
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-"Этот параметр активирует иÑпользование XSIDPLAY-ÑовмеÑтимых баз данных "
-"длительноÑти мелодий. (Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации обратитеÑÑŒ к "
-"документации Audacious-SID)."
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr "DB-файл:"
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr "Путь и Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° базы данных"
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr "Перейти к файлу базы данных длительноÑти мелодий"
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr "База данных длительноÑти мелодий:"
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr "ДлительноÑÑ‚ÑŒ"
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr "Переопределить Ñтандартную Ñтроку формата Tuplez"
-
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-"Включив Ñтот параметр, можно указать другую Ñтроку Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Tuplez Ð´Ð»Ñ "
-"SID-файлов. Специальные теги Tuplez Ð¼Ð¾Ð´ÑƒÐ»Ñ SID кратко опиÑаны ниже."
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr "Формат Ñтроки Tuplez Ð´Ð»Ñ SID-файлов"
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-"<u>SID-Ñпецифичные Ð¿Ð¾Ð»Ñ Tuplez:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Указать формат файла\n"
-"<b>sid-model</b>\t\t- 6581 или 8580\n"
-"<b>sid-speed</b>\t\t- Тайминги или ÑкороÑÑ‚ÑŒ: PAL/NTSC/ и Ñ‚.д.\n"
-"\n"
-"<u>ÐаÑтройка других \"Ñпециальных\" полей:</u>\n"
-"\n"
-"<b>Ðомер поддорожки, идентификатор поддорожки</b>"
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr "Формат названиÑ:"
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Ðазвание"
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr "Добавить поддорожки в ÑпиÑок воÑпроизведениÑ"
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-"ЕÑли включено, вÑтроенные мелодии каждого файла будут добавлены в ÑпиÑок "
-"воÑпроизведениÑ. ЕÑли отключено, то будут добавлены только поддорожки по "
-"умолчанию."
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr "Только дорожки Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ длительноÑтью"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Про SDL Output Plugin"
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr ""
-"Добавить только те поддорожки, которые имеют продолжительноÑÑ‚ÑŒ не меньше "
-"указанного времени."
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Сбой SDL"
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr "Обработка поддорожек:"
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Жанр"
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr "ИÑпользовать базу данных STIL"
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Библиотека"
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
-"ЕÑли включён Ñтот параметр (и наÑтройки базы данных и HVSC ниже указаны "
-"правильно), Audacious-SID Ñтанет иÑпользовать и отображать дополнительную "
-"информацию из базы данных STIL при воÑпроизведении HVSC SID-файлов."
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Создать ÑпиÑок"
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr "Файл STIL:"
-
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-"Путь и Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° базы данных STIL (STIL.txt), обычно раÑположенных в "
-"подкаталоге DOCUMENTS HVSC."
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Добавить в ÑпиÑок"
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr "Перейти к файлу базы данных STIL"
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "ПоиÑк в библиотеке"
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr "Путь HVSC:"
-
-#: src/sid/xs_interface.c:1262
+#: src/search-tool/search-tool.c:645
msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
-"Путь к каталогу базы данных вашей High Voltage SID Collection (HVSC), "
-"например, /media/C64Music/"
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr "Перейти к HVSC"
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr "База данных SID Tune Information List (STIL):"
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "Отменить Ñделанные изменениÑ"
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "ПринÑÑ‚ÑŒ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ обновить"
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Audacious-SID: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле"
+"Ð”Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° музыки в библиотеку Audacious, выберите каталог, затем нажмите "
+"иконку \"обновить\"."
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°:"
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "ПожалуйÑта подождите ..."
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "Ðазвание дорожки:"
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Выберите каталог"
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "Композитор:"
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "ÐвторÑкое право:"
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ дорожке:"
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "Ðвтор:"
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "ДлительноÑÑ‚ÑŒ:"
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ поддорожке:"
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr "Выберите базу данных длительноÑти дорожек HVSC"
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr "Выберите базу данных STIL"
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr "Выберите Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð°Ð´Ñ€ÐµÑа HVSC"
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr "Выберите Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файл фильтров SIDPlay2"
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr "Выберите Ð´Ð»Ñ Ð²Ñ‹Ð³Ñ€ÑƒÐ·ÐºÐ¸ файл фильтров SIDPlay2"
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "Подтвердить выбранное дейÑтвие"
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Да"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "No"
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "О графичеÑком интерфейÑе, иÑпользующем Ñтили"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4605,469 +2488,469 @@ msgstr ""
"Copyright (c) 2008, Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Стили"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
msgstr "Проигрыватель:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
msgstr "Выберите шрифт оÑновного окна проигрывателÑ:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
msgstr "СпиÑок воÑпроизведениÑ:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
msgstr "Выберите шрифт ÑпиÑка воÑпроизведениÑ:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>Шрифты</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "ИÑпользовать раÑтровые шрифты, еÑли возможно"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-"ИÑпользовать раÑтровые шрифты, еÑли они доÑтупны. РаÑтровые шрифты не "
-"поддерживают кодировку Юникод."
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>Разное</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "Показать разделители в ÑпиÑке воÑпроизведениÑ"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "ИÑпользовать раÑтровые шрифты (поддерживает только ASCII)"
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "ИÑпользовать оформление оконного менеджера"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Прокручивать название пеÑни в обоих направлениÑÑ…"
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Применить к окнам Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ðµ оконного менеджера."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Прокрутка Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð² обоих направлениÑÑ…"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>Стиль</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-"ЕÑли включено, то текÑÑ‚ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð² оÑновном окне Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ "
-"двигатьÑÑ Ð²Ð¿ÐµÑ€Ñ‘Ð´ и назад. ЕÑли не включено, то текÑÑ‚ будет двигатьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ "
-"в одном направлении."
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "ÐаÑтройка ИнтерфейÑа"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Отключить тему, оÑнованную на библиотеке gtk."
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "ПредуÑиление"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Случайный Ñтиль при воÑпроизведении"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Гц"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "Разрешить загрузку незавершённых Ñтилей"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Гц"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
-"ЕÑли включено, то audacious не Ñтанет отвергать нерабочие Ñтили. ИÑпользуйте "
-"лишь тогда, когда ваш любимый Ñтиль не работает."
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Гц"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "ÐаÑтройка цвета"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Гц"
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Audacious может изменÑÑ‚ÑŒ цветовой Ð±Ð°Ð»Ð°Ð½Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа Ñтилей. "
-"Ползунки ниже позволÑÑ‚ Ñделать Ñто."
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Гц"
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Синий"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 кГц"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Зелёный"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 кГц"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "КраÑный"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 кГц"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>Стиль</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 кГц"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr "ÐаÑтройка цвета..."
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 кГц"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Эквалайзер Audacious"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:887
msgid "Presets"
msgstr "ПредуÑтановки"
-#: src/skins/ui_main.c:593
-msgid "kbps"
-msgstr "кбит/Ñ"
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Загрузить предуÑтановку"
-#: src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "кГц"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Загрузить авто-уÑтановки"
-#: src/skins/ui_main.c:608
-msgid "surround"
-msgstr "объёмное звучание"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Загрузить уÑтановки Ñквалайзера"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - предупреждение о неразличимоÑти"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Сохранить предуÑтановки"
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "Отобразить оÑновное окно проигрывателÑ"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Сохранить авто-уÑтановки"
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Игнорировать"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Сохранить уÑтановки Ñквалайзера"
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Ð’Ñе окна запущенной программы Audacious Ñкрыты.\n"
-"Вам может потребоватьÑÑ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð·Ð¸Ñ‚ÑŒ окна Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ "
-"Audacious; иначе вы должны управлÑÑ‚ÑŒ ей Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ активных модулей "
-"(например, через значок в ÑиÑтемном лотке)."
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Удалить предуÑтановку"
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Ð’Ñегда игнорировать, Ñкрытие/Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÑетÑÑ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾"
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Удалить авто-уÑтановки"
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - предупреждение о нерабочем движке GTK"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "кбит/Ñ"
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>ИÑпользуетÑÑ Ð½ÐµÑ€Ð°Ð±Ð¾Ñ‡Ð¸Ð¹ движок GTK</b></big>\n"
-"\n"
-"Audacious определила, что иÑпользуетÑÑ Ð½ÐµÑ€Ð°Ð±Ð¾Ñ‡Ð¸Ð¹ движок GTK.\n"
-"\n"
-"Движок тем, который вы иÑпользуете, <i>%s</i>, неÑовмеÑтим Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ "
-"возможноÑÑ‚Ñми, иÑпользуемыми Ñовременными ÑтилÑми. Ðе поддерживаемые "
-"возможноÑти отключены в Ñтой ÑеÑÑии.\n"
-"\n"
-"Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтих возможноÑтей попробуйте иÑпользовать другой движок "
-"тем GTK."
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "кГц"
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Больше не показывать Ñто предупреждение"
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "объёмное звучание"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "ПоиÑк: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Переход к %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "ГромкоÑÑ‚ÑŒ: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "БаланÑ: %d%% влево"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "БаланÑ: по центру"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "БаланÑ: %d%% вправо"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Меню параметров"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Отключить \"Видимый вÑегда\""
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "Включить \"Видимый вÑегда\""
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Отключить маÑштабирование"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Включить маÑштабирование"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Меню визуализации"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1653
msgid "Single mode."
msgstr "Одиночный режим."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1655
msgid "Playlist mode."
msgstr "Режим ÑпиÑка воÑпроизведениÑ."
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1677
msgid "Stopping after song."
msgstr "ОÑтановить поÑле дорожки."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1679
msgid "Not stopping after song."
msgstr "Ðе оÑтанавливать поÑле дорожки."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Ðвтопрокрутка Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "ОÑтановить поÑле текущей дорожки"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Пики"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Повтор"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Случайно"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Без Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑпиÑку воÑпроизведениÑ"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "Отобразить проигрыватель"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Отобразить редактор ÑпиÑка воÑпроизведениÑ"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Отобразить Ñквалайзер"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Видимый вÑегда"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "РазмеÑтить на вÑе рабочие Ñтолы"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "Свернуть проигрыватель"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Свернуть ÑпиÑок воÑпроизведениÑ"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Свернуть Ñквалайзер"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "МаÑштабирование"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Двойной размер"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "ПроÑтое перемещение"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Ðнализатор"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "ОÑциллограмма"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "Отпечаток голоÑа"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Выкл."
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Обычный"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Огонь"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Вертикальные линии"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "Линии"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "ПолоÑки"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Ð¢Ð¾Ñ‡ÐµÑ‡Ð½Ð°Ñ Ð¾Ñциллограмма"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¾Ñциллограмма"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "ÐÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð¾Ñциллограмма"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Лёд"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Сглаженный"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Очень медленно"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Медленно"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Средне"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "БыÑтро"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Очень быÑтро"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "Прошедшее времÑ"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "ОÑтавшееÑÑ Ð²Ñ€ÐµÐ¼Ñ"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Пауза"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "ВизуализациÑ"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Режим визуализации"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Ðнализатор"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "ОÑциллограмма"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Отпечаток голоÑа"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Режим WindowShade VU"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Падение анализатора"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Падение пиков"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "СпиÑок воÑпроизведениÑ"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Ðовый ÑпиÑок"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Выбрать Ñледующий ÑпиÑок"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Выбрать предыдущий ÑпиÑок"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Удалить ÑпиÑок"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Загрузить ÑпиÑок воÑпроизведениÑ"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Загрузить ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð· файла в выбранный ÑпиÑок."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Выгрузить ÑпиÑок воÑпроизведениÑ"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Сохранить выбранный ÑпиÑок воÑпроизведениÑ."
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "Обновить ÑпиÑок"
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
-msgstr "Менеджер ÑпиÑков"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Обновить метаданные и ÑоотнеÑти их Ñ Ð·Ð°Ð¿Ð¸ÑÑми ÑпиÑка воÑпроизведениÑ."
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Управление ÑпиÑком"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Управление очередью"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Вид"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "ИнтерфейÑ"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "ÐаÑтройка интерфейÑа ..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "Добавить адреÑ..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Добавить звуковой поток из Ñети в ÑпиÑок воÑпроизведениÑ."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Добавить файлы..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Добавить файлы в ÑпиÑок воÑпроизведениÑ."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Ðайти и выбрать"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
@@ -5075,224 +2958,361 @@ msgstr ""
"Ðайти в ÑпиÑке воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ отметить запиÑи, ÑоответÑтвующие заданному "
"критерию."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Инвертировать выбор"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "СнÑÑ‚ÑŒ выделение Ñ Ð¾Ñ‚Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ñ… пунктов и пометить не отмеченные."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Выбрать вÑе"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Выбрать вÑе запиÑи ÑпиÑка воÑпроизведениÑ."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "СнÑÑ‚ÑŒ выделение"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "СнÑÑ‚ÑŒ выделение Ñ Ñ€Ð°Ð½ÐµÐµ выделенных запиÑей."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Удалить вÑе"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Удалить вÑе запиÑи из ÑпиÑка воÑпроизведениÑ."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "ОчиÑтить очередь"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "ОчиÑтить очередь, ÑвÑзанную Ñ Ñтим ÑпиÑком воÑпроизведениÑ."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Удалить недоÑтупные файлы"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "Удалить недоÑтупные файлы из ÑпиÑка воÑпроизведениÑ."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Удалить дубликаты"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "По названию"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr ""
"Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸ÐµÑÑ Ð·Ð°Ð¿Ð¸Ñи Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ "
"названием."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "По имени файла"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
-"Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸ÐµÑÑ Ð·Ð°Ð¿Ð¸Ñи Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ именами "
-"файлов."
+"Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸ÐµÑÑ Ð·Ð°Ð¿Ð¸Ñи Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ именами"
+" файлов."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "По пути и имени файла"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
"Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÑŽÑ‰Ð¸ÐµÑÑ Ð·Ð°Ð¿Ð¸Ñи, имеющие одинаковый "
"абÑолютный путь."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Удалить не отмеченные"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ðµ выделенные запиÑи."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Удалить выбранные"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ запиÑи."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Сортировать в Ñлучайном порÑдке"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Сортировать запиÑи в ÑпиÑке воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² Ñлучайном порÑдке."
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "Ð’ обратном порÑдке"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Обратить порÑдок запиÑей в ÑпиÑке воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ð° противоположный."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Сортировать ÑпиÑок"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ названию."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "По альбому"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ альбому."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "По иÑполнителю"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ иÑполнителю."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ имени файла."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ абÑолютному пути к файлу."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "По дате"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ дате изменениÑ."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "По номеру дорожки"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
msgstr "Сортировать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ номеру дорожки."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "Сортировать выбранные"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Файл"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Службы модулей"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ дорожке"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "ПроÑмотреть информацию о дорожке."
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Об Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "ВоÑпроизвеÑти файл"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Загрузить и воÑпроизвеÑти файл"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "ВоÑпроизвеÑти из адреÑа"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "ВоÑпроизвеÑти аудиоданные из выбранного меÑта."
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Службы модулей"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Параметры"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Открыть окно параметров"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Закрыть Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "УÑтановить A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "ОчиÑтить A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Перейти к указанному времени"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Показать/Ñкрыть очередь"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Включить или отключить очерёдноÑÑ‚ÑŒ запиÑей в ÑпиÑке воÑпроизведениÑ."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Копировать"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Вырезать"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Ð’Ñтавить"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
msgstr "Загрузить"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Импорт"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Сохранить"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Удалить"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
msgid "Preset"
msgstr "ПредуÑтановка"
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr "Загрузить предуÑтановку"
-
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
msgstr "ÐвтоматичеÑки Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ð°Ñ Ð¿Ñ€ÐµÐ´ÑƒÑтановка"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
msgstr "Загрузить автоматичеÑки загружаемую предуÑтановку"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
msgstr "Загрузить в Ñквалайзер предуÑтановку по умолчанию"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr "Ðулевой уровень"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
msgstr "СброÑить уÑтановки Ñквалайзера в нулевой уровень"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr "Из файла"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
msgstr "Загрузить предуÑтановку из файла"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr "Из EQF файла WinAMP'a"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
msgstr "Загрузить предуÑтановки из EQF файла WinAMP'a"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
msgstr "ПредуÑтановки WinAMP'a"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
msgstr "Импортировать предуÑтановки WinAMP'a"
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr "Сохранить предуÑтановки"
-
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
msgstr "Сохранить автозагружаемые предуÑтановки"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
msgstr "Сохранить предуÑтановки по умолчанию"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr "В файл"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
msgstr "Сохранить предуÑтановки в файл"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr "В файл EQF WinAMP'a"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
msgstr "Сохранить предуÑтановки в файл EQF WinAMP'a"
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr "Удалить предуÑтановку"
-
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
msgstr "Удалить автозагружаемую предуÑтановку"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr "ПоиÑк запиÑей в активном ÑпиÑке воÑпроизведениÑ"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:256
msgid ""
-"Select entries in playlist by filling one or more fields. Fields use regular "
-"expressions syntax, case-insensitive. If you don't know how regular "
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
"expressions work, simply insert a literal portion of what you're searching "
"for."
msgstr ""
@@ -5301,205 +3321,115 @@ msgstr ""
"чувÑтвительное к региÑтру. ЕÑли вы не знаете, как работают регулÑрные "
"выражениÑ, проÑто вÑтавьте чаÑÑ‚ÑŒ букв из Ñлова, которые хотите найти."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Ðазвание: "
+
+#: src/skins/ui_playlist.c:271
msgid "Album: "
msgstr "Ðльбом: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
msgstr "ИÑполнитель: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
msgstr "ОчиÑтить предыдущий выбор до начала поиÑка"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr "ÐвтоматичеÑки переключать поочерёдно на ÑоответÑтвующим запиÑÑм"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr "Создать новый ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ ÑоответÑтвующими запиÑÑми"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Сохранить как ÑтатичеÑкий ÑпиÑок воÑпроизведениÑ"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "ОтноÑительный путь"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "Загрузить ÑпиÑок воÑпроизведениÑ"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Сохранить ÑпиÑок воÑпроизведениÑ"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr "Редактор ÑпиÑков воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Audacious"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d из %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr "31 Гц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr "63 Гц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr "125 Гц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr "250 Гц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr "500 Гц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr "1 кГц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr "2 кГц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr "4 кГц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr "8 кГц"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr "16 кГц"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "ÐÑ€Ñ…Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð° Winamp 2.x"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Ðе Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð° Winamp 2.x"
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Ðевозможно Ñоздать каталог (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
msgstr "О модуле sndfile"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-"Ðдаптировал Ð´Ð»Ñ Audacious Tony Vroon <chainsaw@gentoo.org>\n"
-"из Ð¼Ð¾Ð´ÑƒÐ»Ñ xmms_sndfile\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"Эта программа - Ñвободное программное обеÑпечение; вы можете раÑпроÑтранÑÑ‚ÑŒ "
-"и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-"Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-"Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-"Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-"\n"
-"Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-"ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-"ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-"ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-"\n"
-"Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-"вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: Free "
-"Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-"USA."
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "О модуле SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr "ÐšÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr "Короткое перекрытие"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "СкороÑÑ‚ÑŒ"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "Смена выÑоты тона"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "МаÑштабирование"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ SndStretch"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
-msgstr "Команда, запуÑÐºÐ°ÐµÐ¼Ð°Ñ Audacious в начале воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ дорожки."
+msgstr ""
+"Команда, запуÑÐºÐ°ÐµÐ¼Ð°Ñ Audacious в начале воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ дорожки."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
msgstr "Команда:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
msgstr "Команда, запуÑÐºÐ°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ñле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
"Команда, запуÑÐºÐ°ÐµÐ¼Ð°Ñ Audacious при доÑтижении конца ÑпиÑка воÑпроизведениÑ."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:455
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Команда, запуÑÐºÐ°ÐµÐ¼Ð°Ñ Ð¿Ñ€Ð¸ изменении Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ (например, при "
"воÑпроизведении из Ñети)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5512,46 +3442,48 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
-"ДопуÑкаетÑÑ Ð¸Ñпользовать Ñледующий формат Ñтрок, которые будут заменены\n"
-"поÑле вызова команды (не вÑе из них можно иÑпользовать Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´,\n"
-"выполнÑемых при доÑтижении конца ÑпиÑка воÑпроизведениÑ).\n"
+"Ð’Ñ‹ можете иÑпользовать Ñледующие форматы Ñтрок,\n"
+"которые будут заменены перед вызовом команды\n"
+"(не вÑе они полезны Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑпиÑка ).\n"
"\n"
-"%F: ЧаÑтота (в герцах)\n"
-"%c: ЧиÑло каналов\n"
-"%f: Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° (абÑолютный путь)\n"
-"%l: Длина (в миллиÑекундах)\n"
-"%n или %s: Ðазвание дорожки\n"
-"%r: Битрейт (в битах в Ñекунду)\n"
-"%t: Положение ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ (%02d)\n"
-"%p: ВоÑпроизведение ÑÐµÐ¹Ñ‡Ð°Ñ (1 или 0)"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:488
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
-"<span size='small'>Параметры, передаваемые оболочке, должны быть заключены в "
-"кавычки. Ð’ противном Ñлучае возможны проблемы Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑтью.</span>"
+"<span size='small'>Параметры, передаваемые оболочке, должны быть заключены в"
+" кавычки. Ð’ противном Ñлучае возможны проблемы Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑтью.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
msgstr "Команды"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
msgstr "Смена дорожки"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Ðнализатор Ñпектра"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr "О модуле СтатуÑ"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5561,43 +3493,58 @@ msgid ""
"This plugin provides a status icon, placed in\n"
"the system tray area of the window manager.\n"
msgstr ""
-"Модуль СтатуÑ"
-"\n"
+"Модуль СтатуÑ\n"
"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
"\n"
"Этот модуль отображает значок программы\n"
"в ÑиÑтемном лотке.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¡Ñ‚Ð°Ñ‚ÑƒÑ"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr "ДейÑтвие при щелчке правой кнопкой мыши"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Уменьшенное меню #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Уменьшенное меню #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
msgstr "ДейÑтвие при прокрутке колеÑа мыши"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr "Изменить громкоÑÑ‚ÑŒ"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr "Сменить текущую дорожку"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Другие наÑтройки"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Отключить вÑплывающее окно"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "ВмеÑто Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñвернуть в облаÑÑ‚ÑŒ уведомлений (в трей)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "ПродвигатьÑÑ Ð¿Ð¾ ÑпиÑку воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ прокрутке колёÑика"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5611,111 +3558,15 @@ msgstr ""
msgid "About Extra Stereo Plugin"
msgstr "О модуле Дополнительное Ñтерео"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ Ñтерео"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr "ПоиÑк:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr "Добавить закладку"
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "Потоковый браузер"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr "Ðазвание потока"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr "ВоÑпроизводитÑÑ"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr "Удалить закладку"
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr "О модуле Потоковый браузер"
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright (c) 2008, Calin Crisan <ccrisan@gmail.com> и команда Audacious.\n"
-"\n"
-"Это проÑтой потоковый браузер, который включает большинÑтво Ñамых популÑрных "
-"потоковых каталогов.\n"
-"БлагодарноÑти разработчикам Streamtuner <http://www.nongnu.org/"
-"streamtuner>,\n"
-"и, конечно, вÑему ÑообщеÑтву Audacious.\n"
-"\n"
-"Также благодарноÑти Tony Vroon за наÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ оказанную мне помощь.\n"
-"\n"
-"Это проект Google Summer of Code 2008."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "Потоковый браузер"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "О модуле Sun Driver"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun Драйвер\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Поддержка: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "УÑтройÑтво ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð¼:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Размер буфера (мÑ):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "УÑтройÑтво ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñтью:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "Микшер иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ XMMS."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Sun driver"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
msgstr "О модуле Генератор Ñигналов"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5726,40 +3577,27 @@ msgstr ""
"Генератор ÑинуÑоидальных Ñигналов, Haavard Kvaalen <havardk@xmms.org>\n"
"ИзменениÑ, Daniel J. Peng <danielpeng@bigfoot.com>\n"
"\n"
-"Чтобы иÑпользовать его, добавьте в проигрыватель Ñледующий адреÑ: tone://"
-"чаÑтота1;чаÑтота2;чаÑтота3;...\n"
+"Чтобы иÑпользовать его, добавьте в проигрыватель Ñледующий адреÑ: tone://чаÑтота1;чаÑтота2;чаÑтота3;...\n"
"Ðапример, tone://2000;2005 Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñигналов 2000 Гц и 2005 Гц"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Гц"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
msgstr "Генератор Ñигналов: "
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "Ðе иÑпользовать Ñтандартные названиÑ"
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Формат названиÑ:"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Про File I/O Plugin"
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Теги Ogg Vorbis"
-
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ogg Vorbis"
-
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
msgstr "О модуле Ogg Vorbis"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5800,8 +3638,7 @@ msgstr "О проигрывателе Vortex"
#: src/vtx/about.c:15
msgid ""
"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
-"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor."
-"ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
"\n"
"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
"and other AY/YM music sites.\n"
@@ -5816,12 +3653,12 @@ msgstr ""
"\n"
"Реализацию Ð´Ð»Ñ Audacious выполнил Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Модуль Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Wavpack %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5833,2851 +3670,4 @@ msgstr ""
"ЧаÑÑ‚ÑŒ кода Ñтого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð½Ð°Ð¿Ð¸Ñал Miles Egan\n"
"ПоÑетите Ñайт Wavpack по адреÑу http://www.wavpack.com/\n"
-#~ msgid "PREAMP"
-#~ msgstr "ПРЕДУСИЛЕÐИЕ"
-
-#~ msgid "60HZ"
-#~ msgstr "60 Гц"
-
-#~ msgid "170HZ"
-#~ msgstr "170 Гц"
-
-#~ msgid "310HZ"
-#~ msgstr "310 Гц"
-
-#~ msgid "600HZ"
-#~ msgstr "600 Гц"
-
-#~ msgid "1KHZ"
-#~ msgstr "1 кГц"
-
-#~ msgid "3KHZ"
-#~ msgstr "3 кГц"
-
-#~ msgid "6KHZ"
-#~ msgstr "6 кГц"
-
-#~ msgid "12KHZ"
-#~ msgstr "12 кГц"
-
-#~ msgid "14KHZ"
-#~ msgstr "14 кГц"
-
-#~ msgid "16KHZ"
-#~ msgstr "16 кГц"
-
-#~ msgid "Audacious standard menu"
-#~ msgstr "Стандартное меню Audacious"
-
-#~ msgid "Surround echo"
-#~ msgstr "Объёмное Ñхо"
-
-#~ msgid "About ESounD Plugin"
-#~ msgstr "О модуле ESounD"
-
-#~ msgid ""
-#~ "Audacious ESounD Plugin\n"
-#~ "\n"
-#~ " This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
-#~ "02110-1301,\n"
-#~ "USA."
-#~ msgstr ""
-#~ "Драйвер ESounD Ð´Ð»Ñ Audacious\n"
-#~ "\n"
-#~ "Эта программа - Ñвободное программное обеÑпечение; вы можете "
-#~ "раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-#~ "Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-#~ "Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-#~ "Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-#~ "\n"
-#~ "Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-#~ "ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-#~ "ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-#~ "ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-#~ "\n"
-#~ "Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-#~ "вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: "
-#~ "Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-#~ "USA."
-
-#~ msgid "ESD Output Plugin configuration"
-#~ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ ESD"
-
-#~ msgid "Host:"
-#~ msgstr "Узел:"
-
-#~ msgid "Use remote host"
-#~ msgstr "ИÑпользовать удалённый узел"
-
-#~ msgid "Volume controls OSS mixer"
-#~ msgstr "ГромкоÑÑ‚ÑŒ регулируетÑÑ Ð¼Ð¸ÐºÑˆÐµÑ€Ð¾Ð¼ OSS"
-
-#~ msgid "Port:"
-#~ msgstr "Порт:"
-
-#~ msgid "Server"
-#~ msgstr "Сервер"
-
-#~ msgid "GTK Foobar-like Interface"
-#~ msgstr "Похожий на GTK Foobar интерфейÑ"
-
-#~ msgid "Load List"
-#~ msgstr "Загрузить ÑпиÑок"
-
-#~ msgid "Save List"
-#~ msgstr "Сохранить ÑпиÑок"
-
-#, fuzzy
-#~ msgid "About RoarAudio Plugin"
-#~ msgstr "О модуле FFaudio"
-
-#, fuzzy
-#~ msgid "RoarAudio Audacious Plugin..."
-#~ msgstr "О модуле LIRC"
-
-#, fuzzy
-#~ msgid "RoarAudio Plugin - Configuration"
-#~ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ CD Audio"
-
-#, fuzzy
-#~ msgid "Server Type:"
-#~ msgstr "Сервер:"
-
-#, fuzzy
-#~ msgid "<b>Host:</b>"
-#~ msgstr "<b>_Шрифты</b>"
-
-#, fuzzy
-#~ msgid "Proxy Address"
-#~ msgstr "ÐдреÑ:"
-
-#, fuzzy
-#~ msgid "<b>Proxy</b>"
-#~ msgstr "<b>Gerpok</b>"
-
-#, fuzzy
-#~ msgid "Player Name:"
-#~ msgstr "_Проигрыватель:"
-
-#, fuzzy
-#~ msgid "<b>Player</b>"
-#~ msgstr "<b>Плеер:</b>"
-
-#, fuzzy
-#~ msgid "<b>Current Song</b>"
-#~ msgstr "<b>ДейÑтвие:</b>"
-
-#~ msgid ""
-#~ "<b><big>Unable to save playlist.</big></b>\n"
-#~ "\n"
-#~ "Unknown file type for '%s'.\n"
-#~ msgstr ""
-#~ "<b><big>Ðевозможно Ñохранить ÑпиÑок воÑпроизведениÑ.</big></b>\n"
-#~ "\n"
-#~ "ÐеизвеÑтный тип файла Ð´Ð»Ñ '%s'.\n"
-
-#~ msgid "Randomize List"
-#~ msgstr "Сортировать в Ñлучайном порÑдке"
-
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Сортировать запиÑи в ÑпиÑке воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² Ñлучайном порÑдке."
-
-#~ msgid "ALSA Gapless Output Plugin Preferences"
-#~ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ALSA Gapless"
-
-#~ msgid "Unknown soundcard"
-#~ msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð·Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð°"
-
-#~ msgid "Default PCM device (%s)"
-#~ msgstr "УÑтройÑтво PCM по умолчанию (%s)"
-
-#~ msgid "Device:"
-#~ msgstr "УÑтройÑтво:"
-
-#~ msgid "Mixer:"
-#~ msgstr "Микшер:"
-
-#~ msgid "Dummy Backend "
-#~ msgstr "Фиктивный модуль"
-
-#~ msgid ""
-#~ "This backend does not produce audio at all. It is mostly useful for "
-#~ "analysis and testing purposes, as it can log all MIDI events to standard "
-#~ "output, standard error or file.\n"
-#~ "Backend written by Giacomo Lozito."
-#~ msgstr ""
-#~ "Этот внутренний модуль вообще не производит звук. Он удобен только Ð´Ð»Ñ "
-#~ "анализа и теÑтированиÑ, он также может журналировать вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI в "
-#~ "Ñтандартный вывод, Ñтандартный вывод ошибок, или в файл.\n"
-#~ "Этот внутренний модуль напиÑан Giacomo Lozito."
-
-#~ msgid "AMIDI-Plug message"
-#~ msgstr "Сообщение AMIDI-Plug"
-
-#~ msgid "Please stop the player before changing AMIDI-Plug settings."
-#~ msgstr ""
-#~ "ПожалуйÑта, оÑтановите воÑпроизведение перед изменением параметров AMIDI-"
-#~ "PLug"
-
-#~ msgid "DUMMY BACKEND CONFIGURATION"
-#~ msgstr "ПÐРÐМЕТРЫ ФИКТИВÐОГО МОДУЛЯ"
-
-#~ msgid "MIDI logger settings"
-#~ msgstr "Параметры журнала MIDI"
-
-#~ msgid "Do not log anything"
-#~ msgstr "Ðе веÑти журнал"
-
-#~ msgid "Log MIDI events to standard output"
-#~ msgstr "ЗапиÑывать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI в Ñтандартный вывод"
-
-#~ msgid "Log MIDI events to standard error"
-#~ msgstr "ЗапиÑывать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI в Ñтандартный вывод ошибок"
-
-#~ msgid "Log MIDI events to file"
-#~ msgstr "ЗапиÑывать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI в файл"
-
-#~ msgid "Logfile settings"
-#~ msgstr "Параметры файла журнала"
-
-#~ msgid "Use a single file to log everything (rewrite)"
-#~ msgstr "ИÑпользовать один файл Ð´Ð»Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð° (перезапиÑывать)"
-
-#~ msgid "Use a single file to log everything (append)"
-#~ msgstr "ИÑпользовать один файл Ð´Ð»Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð° (добавлÑÑ‚ÑŒ)"
-
-#~ msgid "Use a different logfile for each MIDI file"
-#~ msgstr "ИÑпользовать отдельный файл Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ MIDI-файла"
-
-#~ msgid "» Log dir:"
-#~ msgstr "» Каталог журнала:"
-
-#~ msgid "browse"
-#~ msgstr "Обзор"
-
-#~ msgid "» Log file:"
-#~ msgstr "» Файл журнала:"
-
-#~ msgid "Playback speed"
-#~ msgstr "СкороÑÑ‚ÑŒ воÑпроизведениÑ"
-
-#~ msgid "Play at normal speed"
-#~ msgstr "ÐÐ¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑÑ‚ÑŒ воÑпроизведениÑ"
-
-#~ msgid "Play as fast as possible"
-#~ msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑкороÑÑ‚ÑŒ воÑпроизведениÑ"
-
-#~ msgid "Dummy Backend not loaded or not available"
-#~ msgstr "Фиктивный модуль не загружен или недоÑтупен"
-
-#~ msgid ""
-#~ "<span size=\"smaller\">Dummy\n"
-#~ "backend</span>"
-#~ msgstr ""
-#~ "<span size=\"smaller\">Фиктивный\n"
-#~ "модуль</span>"
-
-#~ msgid "Buffer settings"
-#~ msgstr "Параметры буфера"
-
-#~ msgid "<span size=\"smaller\">def</span>"
-#~ msgstr "<span size=\"smaller\">определение</span>"
-
-#~ msgid "<span size=\"smaller\">handy buffer tuner</span>"
-#~ msgstr "<span size=\"smaller\">Ñ‚Ð¾Ð½ÐºÐ°Ñ Ð½Ð°Ñтройка буфера</span>"
-
-#~ msgid "<span size=\"smaller\">size</span>"
-#~ msgstr "<span size=\"smaller\">размер</span>"
-
-#~ msgid "<span size=\"smaller\">margin</span>"
-#~ msgstr "<span size=\"smaller\">поле</span>"
-
-#~ msgid "<span size=\"smaller\">increment</span>"
-#~ msgstr "<span size=\"smaller\">увеличение</span>"
-
-#~ msgid ""
-#~ "* FluidSynth backend buffer *\n"
-#~ "This button resets the backend buffer parameters to default values."
-#~ msgstr ""
-#~ "* Буфер внутреннего Ð¼Ð¾Ð´ÑƒÐ»Ñ FluidSynth *\n"
-#~ "Эта кнопка ÑбраÑывает наÑтройки буфера до значений по умолчанию."
-
-#~ msgid ""
-#~ "* FluidSynth backend buffer *\n"
-#~ "If you notice skips or slowness during song playback and your system is "
-#~ "not performing any cpu-intensive task (except FluidSynth itself), you may "
-#~ "want to adjust the buffer parameters. Try to move the \"handy buffer tuner"
-#~ "\" some steps to the right until playback is fluid again."
-#~ msgstr ""
-#~ "* Буфер внутреннего Ð¼Ð¾Ð´ÑƒÐ»Ñ FluidSynth *\n"
-#~ "ЕÑли вы заметили пропуÑки или замедление воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸ в то "
-#~ "времÑ, когда ваша ÑиÑтема не выполнÑет каких-либо реÑурÑоёмких задач "
-#~ "(кроме Ñамого FluidSynth), то, возможно, вам Ñледует подкорректировать "
-#~ "параметры буфера. Попробуйте подвинуть ползунок \"Ñ‚Ð¾Ð½ÐºÐ°Ñ Ð½Ð°Ñтройка буфера"
-#~ "\" на неÑколько пунктов вправо до тех пор, пока воÑпроизведение не Ñтанет "
-#~ "ровным."
-
-#~ msgid ""
-#~ "* FluidSynth backend buffer *\n"
-#~ "It is a good idea to make buffer adjustments with the \"handy buffer tuner"
-#~ "\" before resorting to manual editing of buffer parameters.\n"
-#~ "However, if you want to fine-tune something and want to know what you're "
-#~ "doing, you can understand how these parameters work by reading the "
-#~ "backend code (b-fluidsynth.c). In short words, every amount of time "
-#~ "(proportional to buffer_SIZE and sample rate), right before gathering "
-#~ "samples, the buffer is resized as follows:\n"
-#~ "buffer_SIZE + buffer_MARGIN + extramargin\n"
-#~ "where extramargin is a value computed as number_of_seconds_of_playback / "
-#~ "margin_INCREMENT ."
-#~ msgstr ""
-#~ "* Буфер внутреннего Ð¼Ð¾Ð´ÑƒÐ»Ñ FluidSynth *\n"
-#~ "Прежде чем вручную наÑтраивать параметры буфера, попробуйте "
-#~ "подкорректировать его Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ползунка \"Ñ‚Ð¾Ð½ÐºÐ°Ñ Ð½Ð°Ñтройка буфера\".Тем "
-#~ "не менее, еÑли вы хотите хорошо наÑтроить что-то и знаете, что делаете, "
-#~ "вы можете понÑÑ‚ÑŒ как работают Ñти параметры, поÑмотрев иÑходный код "
-#~ "Ð¼Ð¾Ð´ÑƒÐ»Ñ (b-fluidsynth.c). Короче говорÑ, в каждый момент времени "
-#~ "(пропорционально buffer_SIZE и чаÑтоте), прÑмо перед Ñозданием очередной "
-#~ "порции звука, у буфера менÑетÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ по Ñледующему принципу:\n"
-#~ "buffer_SIZE + buffer_MARGIN + extramargin,\n"
-#~ "где extramargin - чиÑло, выÑчитываемое как "
-#~ "количеÑтво_Ñекунд_воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ / margin_INCREMENT."
-
-#~ msgid "AudioCompress "
-#~ msgstr "AudioCompress "
-
-#~ msgid ""
-#~ "\n"
-#~ "(c)2003 trikuare studios(http://trikuare.cx)\n"
-#~ "Ported to Audacious by Tony Vroon (chainsaw@gentoo.org)\n"
-#~ "\n"
-#~ "Simple dynamic range compressor for transparently\n"
-#~ "keeping the volume level more or less consistent"
-#~ msgstr ""
-#~ "\n"
-#~ "(c)2003 trikuare studios (http://trikuare.cx)\n"
-#~ "Портирован Tony Vroon (chainsaw@gentoo.org) Ð´Ð»Ñ Audacious\n"
-#~ "\n"
-#~ "ПроÑтой динамичеÑкий компреÑÑор Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾Ð³Ð¾\n"
-#~ "ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти на отноÑительно поÑтоÑнном уровне."
-
-#~ msgid "About AudioCompress"
-#~ msgstr "О модуле AudioCompress"
-
-#~ msgid ""
-#~ "If checked, when the sound peaks the volume will be cut instantly; "
-#~ "otherwise, it will ramp down just in time for the peak (but some minor "
-#~ "clipping may still occur)."
-#~ msgstr ""
-#~ "ЕÑли включён, то Ñрезает громкие звуковые пики немедленно. Иначе, модуль "
-#~ "Ñнижает громкоÑÑ‚ÑŒ только во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð²ÑƒÐºÐ¾Ð²Ñ‹Ñ… пиков (Ñ…Ð¾Ñ‚Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ резкие "
-#~ "звуки могут быть пропущены)."
-
-#~ msgid "The maximum amount to amplify the audio by"
-#~ msgstr "Уровень макÑимального уÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ°"
-
-#~ msgid "Defines how smoothly the volume will ramp up"
-#~ msgstr "УÑтановить, наÑколько гладко должна нараÑтать громкоÑÑ‚ÑŒ"
-
-#~ msgid ""
-#~ "The target audio level for ramping up. Lowering the value gives a bit "
-#~ "more dynamic range for peaks, but will make the overall sound quieter."
-#~ msgstr ""
-#~ "Заданный уровень Ð´Ð»Ñ Ð½Ð°Ñ€Ð°Ñ‰Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ°. Снижение Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ‚ "
-#~ "более динамичный Ñпектр пиков, но Ñделает общий звуковой фон тише."
-
-#~ msgid "How long of a window to maintain"
-#~ msgstr "Сколько удерживать окно"
-
-#~ msgid " Quality Options "
-#~ msgstr "Параметры качеÑтва"
-
-#~ msgid " Aggressively prevent clipping"
-#~ msgstr "УÑиленно предотвращать Ñрезание"
-
-#~ msgid " Target & gain"
-#~ msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑƒÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ°"
-
-#~ msgid "Target audio level:"
-#~ msgstr "Заданный уровень звука:"
-
-#~ msgid "Maximum gain:"
-#~ msgstr "МакÑимальное уÑиление:"
-
-#~ msgid "Gain smooth:"
-#~ msgstr "Сглаживание уÑилениÑ:"
-
-#~ msgid " History "
-#~ msgstr "ИÑториÑ"
-
-#~ msgid ""
-#~ "How long of a history to maintain. A higher number will make the volume "
-#~ "changes less responsive."
-#~ msgstr ""
-#~ "ДлительноÑÑ‚ÑŒ Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ñтории изменений Ñигнала. Большие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´ÑƒÑ‚ "
-#~ "к замедлению Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти."
-
-#~ msgid "Load default values"
-#~ msgstr "Параметры по умолчанию"
-
-#~ msgid "Audio values"
-#~ msgstr "Параметры звука"
-
-#~ msgid "Limit read speed to: "
-#~ msgstr "Ограничить ÑкороÑÑ‚ÑŒ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð¾:"
-
-#~ msgid "Start of playback"
-#~ msgstr "Ðачало воÑпроизведениÑ"
-
-#~ msgid "Automatic songchange"
-#~ msgstr "ÐвтоматичеÑÐºÐ°Ñ Ñмена дорожки"
-
-#~ msgid "Manual songchange"
-#~ msgstr "Смена дорожки вручную"
-
-#~ msgid "Manual stop"
-#~ msgstr "ОÑтановка воÑпроизведениÑ"
-
-#~ msgid "End of playlist"
-#~ msgstr "Конец ÑпиÑка воÑпроизведениÑ"
-
-#~ msgid "Seeking"
-#~ msgstr "Перемещение"
-
-#~ msgid "Reopen output device"
-#~ msgstr "Повторно открыть уÑтройÑтво вывода"
-
-#~ msgid "Flush output device"
-#~ msgstr "СброÑить уÑтройÑтво вывода"
-
-#~ msgid "None (gapless/off)"
-#~ msgstr "Ðет (непрерывный режим выключен)"
-
-#~ msgid "Simple crossfade"
-#~ msgstr "ПроÑтое перекрёÑтное затухание"
-
-#~ msgid "Advanced crossfade"
-#~ msgstr "Сложное перекрёÑтное затухание"
-
-#~ msgid "Fadein"
-#~ msgstr "Плавное увеличение громкоÑти"
-
-#~ msgid "Fadeout"
-#~ msgstr "Плавное уменьшение громкоÑти"
-
-#~ msgid "Fadeout/Fadein"
-#~ msgstr "Уменьшение/увеличение громкоÑти"
-
-#~ msgid ""
-#~ "Audacious Crossfade Plugin\n"
-#~ "\n"
-#~ "Copyright © 2009 William Pitcock <nenolod@atheme.org>\n"
-#~ "\n"
-#~ "...based in part on XMMS-Crossfade:\n"
-#~ "Copyright © 2000-2009 Peter Eisenlohr <peter@eisenlohr.org>\n"
-#~ "\n"
-#~ "based on the original OSS Output Plugin Copyright (C) 1998-2000\n"
-#~ "Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front "
-#~ "Technologies\n"
-#~ "\n"
-#~ "This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software\n"
-#~ "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
-#~ "USA."
-#~ msgstr ""
-#~ "Модуль \"ПерекрёÑтное затухание\"\n"
-#~ "\n"
-#~ "Copyright © 2009 William Pitcock <nenolod@atheme.org>\n"
-#~ "\n"
-#~ "...иÑпользует чаÑÑ‚ÑŒ кода XMMS-Crossfade:\n"
-#~ "Copyright © 2000-2009 Peter Eisenlohr <peter@eisenlohr.org>\n"
-#~ "\n"
-#~ "иÑпользуютÑÑ Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ñ‹Ðµ модули вывода звуковой ÑиÑтемы OSS Copyright "
-#~ "(C) 1998-2000\n"
-#~ "Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front "
-#~ "Technologies\n"
-#~ "\n"
-#~ "Эта программа - Ñвободное программное обеÑпечение; вы можете "
-#~ "раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-#~ "Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-#~ "Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-#~ "Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-#~ "\n"
-#~ "Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-#~ "ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-#~ "ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-#~ "ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-#~ "\n"
-#~ "Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-#~ "вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: "
-#~ "Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-#~ "USA."
-
-#~ msgid "Crossfade Configuration"
-#~ msgstr "Параметры перекрёÑтного затуханиÑ"
-
-#~ msgid "About"
-#~ msgstr "О"
-
-#~ msgid "Output plugin"
-#~ msgstr "Драйвер вывода звука"
-
-#~ msgid "Throttle Output"
-#~ msgstr "Приглушенный вывод"
-
-#~ msgid "Max block size (bytes):"
-#~ msgstr "МакÑимальный размер блока (байт):"
-
-#~ msgid "Force close/reopen on songchange"
-#~ msgstr "Принудительно открыть заново при Ñмене дорожки"
-
-#~ msgid "Plugin compatibility options"
-#~ msgstr "Параметры ÑовмеÑтимоÑти драйвера"
-
-#~ msgid ""
-#~ "When modifying the Output Options or the Mixing buffer size, you need to "
-#~ "stop/restart playback for the settings to take effect."
-#~ msgstr ""
-#~ "При изменении параметров вывода или размера буфера микшера необходимо "
-#~ "оÑтановить и запуÑтить воÑпроизведение заново, чтобы Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñтупили в "
-#~ "Ñилу."
-
-#~ msgid "Mixing buffer size (ms):"
-#~ msgstr "Размер буфера микшера (мÑ):"
-
-#~ msgid ""
-#~ "Specify the size of the mixing buffer. Mixing buffer space is required "
-#~ "for pauses, fade-outs, offsetting (i.e. interleaving the end and "
-#~ "beginning of two songs) and killing trailing gaps. Fade-ins and killing "
-#~ "leading gaps are done on-the-fly and do not depend on mixing buffer "
-#~ "space.\n"
-#~ "Default: n/a - calculated automatically"
-#~ msgstr ""
-#~ "Укажите здеÑÑŒ размер буфера микшера. Буфер микшера необходим Ð´Ð»Ñ Ð¿Ð°ÑƒÐ·, "
-#~ "плавного ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти, переходов (например, Ð´Ð»Ñ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ†Ð° "
-#~ "и начала двух дорожек) и Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚ÐºÐ¾Ð² между дорожками. "
-#~ "Плавное увеличение громкоÑти и удаление главных промежутков делаетÑÑ \"на "
-#~ "лету\" и не завиÑит от размера буфера микшера.\n"
-#~ "По умолчанию: недоÑтупно - подÑчитываетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки"
-
-#~ msgid "auto"
-#~ msgstr "ÐвтоматичеÑки"
-
-#~ msgid ""
-#~ "Automatically calculate an optimal buffer size.\n"
-#~ "Default: On"
-#~ msgstr ""
-#~ "ÐвтоматичеÑки раÑÑчитывать оптимальный размер буфера.\n"
-#~ "По умолчанию включено"
-
-#~ msgid "Set parameters for:"
-#~ msgstr "ÐаÑтроить параметры длÑ:"
-
-#~ msgid ""
-#~ "Select the type of songchange you want to configure:\n"
-#~ "* Start of playback: When starting playback by pressing PLAY\n"
-#~ "* Automatic songchange: When reaching the end of a song and the playlist "
-#~ "advances to the next song\n"
-#~ "* Manual songchange: When manually selecting another song, for example by "
-#~ "pressing NEXT/PREV\n"
-#~ "* Manual stop: When pressing the STOP button\n"
-#~ "* End of playlist: After the last song in the playlist has been played\n"
-#~ "* Seeking: When seeking within the current song"
-#~ msgstr ""
-#~ "Выберите тип Ñмены дорожки, который требуетÑÑ Ð½Ð°Ñтроить:\n"
-#~ "* Ðачало воÑпроизведениÑ: когда воÑпроизведение запуÑкаетÑÑ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ "
-#~ "\"ИГРÐТЬ\"\n"
-#~ "* ÐвтоматичеÑÐºÐ°Ñ Ñмена дорожки: когда при доÑтижении конца дорожки "
-#~ "проиÑходит переход к Ñледующей в ÑпиÑке воÑпроизведениÑ\n"
-#~ "* Смена дорожки вручную: при выборе другой дорожки вручную, например, Ñ "
-#~ "помощью кнопок СЛЕДУЮЩÐЯ ДОРОЖКР/ ПРЕДЫДУЩÐЯ ДОРОЖКÐ\n"
-#~ "* ОÑтановка воÑпроизведениÑ: при нажатии на кнопку \"ОСТÐÐОВИТЬ\"\n"
-#~ "* Конец ÑпиÑка воÑпроизведениÑ: поÑле поÑледней проигранной дорожки в "
-#~ "ÑпиÑке воÑпроизведениÑ\n"
-#~ "* Перемещение: При передвижении по текущей дорожке"
-
-#~ msgid "Crossfade/Transition type:"
-#~ msgstr "Тип перекрёÑтного затуханиÑ/перехода:"
-
-#~ msgid ""
-#~ "Select the transition to be used for the songchange type selected above:\n"
-#~ "* Fade-in: Fade-in at 'Start of playback'\n"
-#~ "* Reopen output device: Force a close/open on the output plugin. This "
-#~ "will most certainly re-introduce gaps and clicks, but might be usefull "
-#~ "with some plugins.\n"
-#~ "* Flush output device: Keeps the output plugin opened, but flushes its "
-#~ "buffers. This will give you almost instant reaction when pressing NEXT/"
-#~ "PREV.\n"
-#~ "* None (gapless/off): Gapless mode. Keeps the device opened, but does not "
-#~ "do any fading.\n"
-#~ "* Simple crossfade: Does a simple crossfade between the previous and the "
-#~ "next song.\n"
-#~ "* Advanced crossfade: Allows you to configure the crossfade in more "
-#~ "detail.\n"
-#~ "* Fade-out: Fade-out at 'Manual stop' or 'End of playlist'."
-#~ msgstr ""
-#~ "Выберите переход Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ выше типа Ñмены дорожки:\n"
-#~ "* Плавное увеличение громкоÑти: плавное увеличение громкоÑти в начале "
-#~ "воÑпроизведениÑ'\n"
-#~ "* Повторно открыть уÑтройÑтво вывода: принудительно закрыть и открыть "
-#~ "драйвер вывода. Это Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ определённоÑтью добавит пауз и щелчков, но "
-#~ "может помочь при иÑпользовании некоторых драйверов.\n"
-#~ "* СброÑить уÑтройÑтво вывода: оÑтавить драйвер вывода открытым, но "
-#~ "ÑброÑить его буферы. Это приведёт к более быÑтрой реакции на нажатие "
-#~ "кнопок СЛЕДУЮЩÐЯ ДОРОЖКР/ ПРЕДЫДУЩÐЯ ДОРОЖКÐ.\n"
-#~ "* Ðет (непрерывный режим выключен): режим без пауз. УÑтройÑтво оÑтаётÑÑ "
-#~ "открытым, но плавного Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ð½ÐµÑ‚.\n"
-#~ "* ПроÑтое перекрёÑтное затухание: проÑтое затухание между предыдущей и "
-#~ "Ñледующей дорожками.\n"
-#~ "* Сложное перекрёÑтное затухание: имеетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ наÑтроить параметры "
-#~ "перекрёÑтного Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ детально.\n"
-#~ "* Плавное уменьшение громкоÑти: уменьшение громкоÑти в режиме 'ОÑтановка "
-#~ "воÑпроизведениÑ\" или \"Конец ÑпиÑка воÑпроизведениÑ\"."
-
-#~ msgid "Reopen"
-#~ msgstr "Открыть повторно"
-
-#~ msgid "Length (ms):"
-#~ msgstr "ДлительноÑÑ‚ÑŒ (мÑ):"
-
-#~ msgid ""
-#~ "Specify the length of the silence to be inserted between the tracks.\n"
-#~ "Default: 2000"
-#~ msgstr ""
-#~ "Укажите длительноÑÑ‚ÑŒ тишины между дорожками.\n"
-#~ "По умолчанию: 2000"
-
-#~ msgid "Start volume (%):"
-#~ msgstr "ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾ÑÑ‚ÑŒ (%):"
-
-#~ msgid "Set the duration for the fadein of the next song."
-#~ msgstr ""
-#~ "Укажите продолжительноÑÑ‚ÑŒ плавного ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти Ð´Ð»Ñ Ñледующей "
-#~ "дорожки"
-
-#~ msgid ""
-#~ "Set the start volume. XMMS-crossfade will fade from this volume to 100% "
-#~ "during the time specified above.\n"
-#~ "Default: 0"
-#~ msgstr ""
-#~ "Укажите начальную громкоÑÑ‚ÑŒ. ПерекрёÑтное затухание начнётÑÑ Ñ Ñтой "
-#~ "громкоÑти до доÑÑ‚Ð¸Ð¶ÐµÐ½Ð¸Ñ 100% громкоÑти за времÑ, указанное выше.\n"
-#~ "По умолчанию: 0"
-
-#~ msgid "Fade in"
-#~ msgstr "Плавное увеличение громкоÑти"
-
-#~ msgid "Flush"
-#~ msgstr "ОчиÑтить"
-
-#~ msgid ""
-#~ "Specify the length of the crosssfade.\n"
-#~ "Default: depends on songchange type"
-#~ msgstr ""
-#~ "Укажите длительноÑÑ‚ÑŒ перекрёÑтного затуханиÑ.\n"
-#~ "По умолчанию: в завиÑимоÑти от выбранного типа Ñмены дорожки"
-
-#~ msgid "Crossfade"
-#~ msgstr "ПерекрёÑтное затухание"
-
-#~ msgid "Simple XF"
-#~ msgstr "ПроÑтое затухание"
-
-#~ msgid "Set the duration for the fadeout of the previous song."
-#~ msgstr ""
-#~ "УÑтановите продолжительноÑÑ‚ÑŒ плавного ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти предыдущей "
-#~ "дорожки"
-
-#~ msgid "End volume (%):"
-#~ msgstr "ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾ÑÑ‚ÑŒ (%):"
-
-#~ msgid ""
-#~ "Set the end volume. XMMS-crossfade will fade from 100% to this volume "
-#~ "during the time specified above.\n"
-#~ "Default: 0"
-#~ msgstr ""
-#~ "Укажите конечную громкоÑÑ‚ÑŒ. ПерекрёÑтное затухание начнётÑÑ Ñо 100% "
-#~ "громкоÑти до указанной громкоÑти за времÑ, указанное выше.\n"
-#~ "По умолчанию: 0"
-
-#~ msgid "Fade out"
-#~ msgstr "Плавное уменьшение громкоÑти"
-
-#~ msgid "Custom (ms):"
-#~ msgstr "Другой (мÑ):"
-
-#~ msgid "Set a custom offset."
-#~ msgstr "УÑтановите другое Ñмещение"
-
-#~ msgid ""
-#~ "Set how much the end of the previous and the beginning of the next song "
-#~ "should overlap.\n"
-#~ "* Negative values indicate that the next song should start before the "
-#~ "previous has reached the end.\n"
-#~ "* A value of 0 means that the songs are concatenated seamlessly.\n"
-#~ "* Positive values will yield insert silence inbetween.."
-#~ msgstr ""
-#~ "УÑтановите, ÐºÐ°ÐºÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ предыдущей дорожки и начало Ñледующей дорожки "
-#~ "должны перекрыватьÑÑ.\n"
-#~ "* Отрицательные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚, что ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ° должна начатьÑÑ "
-#~ "до того, как закончитÑÑ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ.\n"
-#~ "* Значение, равное 0, означает, что дорожки воÑпроизводÑÑ‚ÑÑ Ð±ÐµÐ· "
-#~ "промежутков.\n"
-#~ "* Положительные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвидетельÑтвуют об уÑтановлении тишины между "
-#~ "дорожками."
-
-#~ msgid "None (0 ms)"
-#~ msgstr "Ðет (0 мÑ)"
-
-#~ msgid ""
-#~ "Don't overlap the two songs. The next song will start immediatelly after "
-#~ "the previous has ended."
-#~ msgstr ""
-#~ "Ðе перекрывать две дорожки. Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ° начнётÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ поÑле "
-#~ "Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹."
-
-#~ msgid "Lock to fadeout length"
-#~ msgstr "ПривÑзать к времени ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
-
-#~ msgid "Overlap by the fadeout duration specified above."
-#~ msgstr ""
-#~ "Перекрытие делаетÑÑ Ð¿Ð¾ длительноÑти ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти, указанного выше."
-
-#~ msgid "Lock to fadein length"
-#~ msgstr "ПривÑзать к времени ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
-
-#~ msgid "Overlap by the fadein duration specified below.."
-#~ msgstr ""
-#~ "Перекрытие делаетÑÑ Ð¿Ð¾ длительноÑти ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти, указанного ниже."
-
-#~ msgid "Offset"
-#~ msgstr "Смещение"
-
-#~ msgid " Enable"
-#~ msgstr "Включить"
-
-#~ msgid "Lock to Fade-out"
-#~ msgstr "ПривÑзать к времени ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
-
-#~ msgid "Use the same settings as fade-out."
-#~ msgstr ""
-#~ "ИÑпользовать те же наÑтройки, что и Ð´Ð»Ñ Ð¿Ð»Ð°Ð²Ð½Ð¾Ð³Ð¾ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти"
-
-#~ msgid "Advanced XF"
-#~ msgstr "Дополнительно"
-
-#~ msgid "Set the duration for the fadein when starting playback."
-#~ msgstr ""
-#~ "УÑтановить продолжительноÑÑ‚ÑŒ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти в начале "
-#~ "воÑпроизведениÑ."
-
-#~ msgid "Set the duration for the fadeout of the last song."
-#~ msgstr ""
-#~ "УÑтановить продолжительноÑÑ‚ÑŒ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти поÑледней дорожки."
-
-#~ msgid ""
-#~ "Set how much additional silence should be played after the end of the "
-#~ "last song. This way, you can avoid the clicks some soundcards produce "
-#~ "when being shut down during playback.\n"
-#~ "Default: 500"
-#~ msgstr ""
-#~ "УÑтановить, наÑколько увеличить тишину поÑле Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñледней дорожки. "
-#~ "Таким образом, можно избежать щелчков, которые издают некоторые звуковые "
-#~ "карты при выключении воÑпроизведениÑ.\n"
-#~ "По умолчанию: 500"
-
-#~ msgid "Additional silence"
-#~ msgstr "Увеличение тишины"
-
-#~ msgid ""
-#~ "Set the duration for the fadeout when pausing.\n"
-#~ "Default: 100"
-#~ msgstr ""
-#~ "УÑтановить продолжительноÑÑ‚ÑŒ плавного ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти во Ð²Ñ€ÐµÐ¼Ñ "
-#~ "паузы.\n"
-#~ "По умолчанию: 100"
-
-#~ msgid ""
-#~ "Set how much additional silence should be played after pausing. This way, "
-#~ "you can avoid the clicks some soundcards produce when entering pause.\n"
-#~ "Default: 100"
-#~ msgstr ""
-#~ "УÑтановить, наÑколько увеличить тишину поÑле паузы. Таким образом, можно "
-#~ "избежать щелчков, которые издают некоторые звуковые карты при паузе.\n"
-#~ "По умолчанию: 100"
-
-#~ msgid ""
-#~ "Set the duration for the fadein when unpausing.\n"
-#~ "Default: 100"
-#~ msgstr ""
-#~ "УÑтановить длительноÑÑ‚ÑŒ плавного ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñти поÑле Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ "
-#~ "воÑпроизведениÑ.\n"
-#~ "По умолчанию: 100"
-
-#~ msgid "Fade out (ms):"
-#~ msgstr "Уменьшение громкоÑти (мÑ):"
-
-#~ msgid "Silence (ms):"
-#~ msgstr "Тишина (мÑ):"
-
-#~ msgid "Fade in (ms):"
-#~ msgstr "Увеличение громкоÑти (мÑ):"
-
-#~ msgid "Fade out / Fade in"
-#~ msgstr "Уменьшение / увеличение громкоÑти"
-
-#~ msgid ""
-#~ "Set the maximum length for gaps at the beginning of a stream.\n"
-#~ "Default: 500"
-#~ msgstr ""
-#~ "УÑтановить макÑимальную длительноÑÑ‚ÑŒ пауз в начале звукового потока.\n"
-#~ "По умолчанию: 500"
-
-#~ msgid ""
-#~ "Set the maximum volume for gaps at the beginning of a stream. All samples "
-#~ "below this value are considered as silent.\n"
-#~ "Default: 512"
-#~ msgstr ""
-#~ "УÑтановить макÑимальную громкоÑÑ‚ÑŒ пауз в начале звукового потока. Ð’Ñе "
-#~ "ÑÑмплы ниже Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑматриваютÑÑ ÐºÐ°Ðº тишина.\n"
-#~ "По умолчанию: 512"
-
-#~ msgid "Max. length (ms):"
-#~ msgstr "МакÑ. длительноÑÑ‚ÑŒ (мÑ):"
-
-#~ msgid "Max. level (16bit sample):"
-#~ msgstr "МакÑ. уровень (16-битные ÑÑмплы):"
-
-#~ msgid "Leading gap killer"
-#~ msgstr "Ðачальное удаление промежутков"
-
-#~ msgid ""
-#~ "Set the maximum length for gaps at the end of a stream.\n"
-#~ "Default: 500"
-#~ msgstr ""
-#~ "УÑтановить макÑимальную длительноÑÑ‚ÑŒ пауз в конце потока.\n"
-#~ "По умолчанию: 500"
-
-#~ msgid ""
-#~ "Set the maximum volume for gaps at the end of a stream. All samples below "
-#~ "this value are considered as silent.\n"
-#~ "Default: 512"
-#~ msgstr ""
-#~ "УÑтановить макÑимальную громкоÑÑ‚ÑŒ пауз в конце звукового потока. Ð’Ñе "
-#~ "ÑÑмплы ниже Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑматриваютÑÑ ÐºÐ°Ðº тишина.\n"
-#~ "По умолчанию: 512"
-
-#~ msgid "Lock to Leading"
-#~ msgstr "ПривÑзать к начальному"
-
-#~ msgid "Use the same settings as above."
-#~ msgstr "ИÑпользовать те же параметры, что и указанные выше."
-
-#~ msgid "Trailing gap killer"
-#~ msgstr "Конечное удаление промежутков"
-
-#~ msgid "Skip to next zero crossing"
-#~ msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð´Ð¾ Ñледующего переÑÐµÑ‡ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ð² нулевой точке"
-
-#~ msgid ""
-#~ "If enabled, XMMS-crossfade will take additional care to avoid clicks with "
-#~ "pre-faded (gapless) tracks. XMMS-crossfade will cut off the end of the "
-#~ "previous song (the beginning of the next song) only at a zero-crossing of "
-#~ "the sample values.\n"
-#~ "Default: On"
-#~ msgstr ""
-#~ "ЕÑли активно, то модуль перекрёÑтного Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð·Ð°Ð±Ð¾Ñ‚Ð¸Ñ‚ÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ "
-#~ "о том, как избежать щелчков от дорожек, к которым уже применено "
-#~ "затухание. Ð’ Ñтом Ñлучае окончание предыдущей дорожки ÑрезаетÑÑ (начало "
-#~ "Ñледующей дорожки) только в нулевой точке значений затуханиÑ.\n"
-#~ "По умолчанию: включено"
-
-#~ msgid "Advanced"
-#~ msgstr "Дополнительно"
-
-#~ msgid "Gap Killer"
-#~ msgstr "Уничтожитель пауз"
-
-#~ msgid "Write debug output to <stderr>"
-#~ msgstr "ЗапиÑать отладочную информацию в Ñтандартный вывод <stderr>"
-
-#~ msgid ""
-#~ "Monitors what is going on in XMMS-crossfade. If you think you found a bug "
-#~ "in XMMS-crossfade, please enable this option and send me the output.\n"
-#~ "Note that you should disable debug output if you start XMMS from within "
-#~ "Netscape. Netscape will spam you with dialogs containing the debug output "
-#~ "captured from <stderr>.\n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "Проводить мониторинг дейÑтвий Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‘Ñтного затуханиÑ. ЕÑли вам "
-#~ "показалоÑÑŒ, что вы обнаружили ошибку в Ñтом модуле, пожалуйÑта, включите "
-#~ "Ñтот параметр и перешлите нам полученные данные.\n"
-#~ "Помните, что необходимо выключить формирование отладочной информации, "
-#~ "еÑли модуль Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½ в браузере Netscape. Netscape заброÑает Ð²Ð°Ñ "
-#~ "ÑообщениÑми, Ñодержащими отладочную информацию, полученную из "
-#~ "Ñтандартного вывода <stderr>.\n"
-#~ "По умолчанию: выключено"
-
-#~ msgid "Debug options"
-#~ msgstr "Параметры отладки"
-
-#~ msgid "Enable volume control"
-#~ msgstr "Включить регулÑтор громкоÑти"
-
-#~ msgid ""
-#~ "Enables/disables XMMS volume and balance controls.\n"
-#~ "Default: On"
-#~ msgstr ""
-#~ "Включить или отключить программные регулÑторы громкоÑти и баланÑа "
-#~ "Audacious.\n"
-#~ "По умолчанию: включено"
-
-#~ msgid ""
-#~ "Reverses left and right with the balance control.\n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "Изменить левый и правый канал Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ регулÑтора баланÑа.\n"
-#~ "По умолчанию: выключено"
-
-#~ msgid "Software Mixer"
-#~ msgstr "Программный микшер"
-
-#~ msgid ""
-#~ "Enable software mixer. Usefull for output plugins without mixer support.\n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "Включить программный микшер. Полезно Ð´Ð»Ñ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹ вывода без поддержки "
-#~ "микшера.\n"
-#~ "По умолчанию: выключено"
-
-#~ msgid "Volume control options"
-#~ msgstr "Параметры ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñтью"
-
-#~ msgid "Songchange timeout (ms):"
-#~ msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñмены дорожки (мÑ):"
-
-#~ msgid ""
-#~ "The songchange timeout is the maximum time XMMS-crossfade waits for the "
-#~ "next song. If this timeout is exceeded, the output plugin/device is "
-#~ "closed.\n"
-#~ "Default: 100"
-#~ msgstr ""
-#~ "МакÑимальное времÑ, в течение которого модуль перекрёÑтного Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ "
-#~ "будет ожидать Ñледующую дорожку. При доÑтижении Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»ÑŒ "
-#~ "вывода и уÑтройÑтво будут закрыты.\n"
-#~ "По умолчанию: 100"
-
-#~ msgid "Mixing buffer preload (ms):"
-#~ msgstr "Предзагрузка буфера микшера (мÑ):"
-
-#~ msgid ""
-#~ "Tells XMMS-crossfade how much data it should buffer before it starts "
-#~ "writing to the output plugin/device. Usually, this value can be set to 0, "
-#~ "because the output plugin does preloading on its own.\n"
-#~ "Default: 0"
-#~ msgstr ""
-#~ "Сообщить модулю перекрёÑтного затуханиÑ, Ñколько данных должны быть "
-#~ "переведены в буфер до начала запиÑи в модуль вывода или уÑтройÑтво. "
-#~ "Обычно Ñто значение равно 0, так как модуль вывода имеет Ñвою ÑобÑтвенную "
-#~ "ÑиÑтему предварительно загрузки.\n"
-#~ "По умолчанию: 0"
-
-#~ msgid "Don't crossfade"
-#~ msgstr "Ðе применÑÑ‚ÑŒ затухание"
-
-#~ msgid "successive tracks"
-#~ msgstr "поÑледующих дорожек"
-
-#~ msgid ""
-#~ "This option enables the automatic detection of pre-faded or gapless "
-#~ "tracks, like the tracks on some compilations or on most live albums. If "
-#~ "such tracks are detected, crossfading will be disabled and only the "
-#~ "gapkiller (if enabled) will be used for the songchange.\n"
-#~ "Default: On"
-#~ msgstr ""
-#~ "Этот параметр включает автоматичеÑкое определение дорожек Ñ Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸ÐµÐ¼ "
-#~ "или непрерывных дорожек, например, дорожек в некоторых Ñборниках или в "
-#~ "большинÑтве \"живых\" альбомов. ЕÑли определена Ñ‚Ð°ÐºÐ°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°, затухание "
-#~ "будет отключено и только уничтожитель пауз (еÑли включён) будет "
-#~ "применÑÑ‚ÑŒÑÑ Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñтих дорожек.\n"
-#~ "По умолчанию: включено"
-
-#~ msgid "same file"
-#~ msgstr "тот же Ñамый файл"
-
-#~ msgid ""
-#~ "This option disables crossfading between the same file. This can happen "
-#~ "if you have only one file in the playlist and 'repeat' turned on.\n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "Этот параметр отключает затухание между единÑтвенным файлом. Такое может "
-#~ "быть, еÑли в ÑпиÑке воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ один файл при "
-#~ "включённом режиме \"Повтор\".\n"
-#~ "По умолчанию: выключено"
-
-#~ msgid "Enable HTTP buffer underrun workaround"
-#~ msgstr "Включить буфер HTTP Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½ÐµÐ´Ð¾Ð³Ñ€ÑƒÐ·ÐºÐ¾Ð¹"
-
-#~ msgid ""
-#~ "Enable this when you have problems playing internet HTTP audio streams. "
-#~ "Unfortunatelly, it also breaks crossfading.\n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "Включите Ñтот параметр, еÑли еÑÑ‚ÑŒ проблемы Ñ Ð²Ð¾Ñпроизведением HTTP "
-#~ "аудиопотоков через интернет. К Ñожалению, Ñто также нарушает затухание.\n"
-#~ "По умолчанию: выключено"
-
-#~ msgid "Limit OP buffer usage (ms):"
-#~ msgstr "Ограничение размера буфера Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° (мÑ):"
-
-#~ msgid ""
-#~ "With this option enabled, XMMS-crossfade will limit the amount of data "
-#~ "being buffered by the output plugin. This way, you can decrease the "
-#~ "latency between pressing STOP/NEXT/PREV and the new song actually being "
-#~ "played. \n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "ЕÑли включён Ñтот параметр, модуль перекрёÑтного Ð·Ð°Ñ‚ÑƒÑ…Ð°Ð½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ "
-#~ "ограничивать количеÑтво данных буфера Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð°. Таким образом можно "
-#~ "Ñократить задержки между нажатием кнопок \"ОСТÐÐОВИТЬ\", \"СЛЕДУЮЩÐЯ\", "
-#~ "\"ПРЕДЫДУЩÐЯ\" во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐµÐº. \n"
-#~ "По умолчанию: выключено"
-
-#~ msgid ""
-#~ "Beware that setting this value too low also increases the chance of "
-#~ "buffer underruns.\n"
-#~ "Default: 250"
-#~ msgstr ""
-#~ "Помните, что Ñлишком низкое значение Ñтого параметра также увеличивает "
-#~ "ÑˆÐ°Ð½Ñ Ð½ÐµÐ´Ð¾Ð³Ñ€ÑƒÐ·ÐºÐ¸ буфера.\n"
-#~ "По умолчанию: 250"
-
-#~ msgid "Use Quantaudio timing comments"
-#~ msgstr "ИÑпользовать комментарии Quantaudio"
-
-#~ msgid "Keep output opened"
-#~ msgstr "Ðе закрывать вывод"
-
-#~ msgid ""
-#~ "Keep the output device opened all the time, even if XMMS is stopped. This "
-#~ "way, you can avoid clicks caused by the soundcard when the device is "
-#~ "opened or closed\n"
-#~ "Default: Off"
-#~ msgstr ""
-#~ "ОÑтавить открытым уÑтройÑтво вывода вÑÑ‘ времÑ, даже еÑли программа "
-#~ "Audacious будет закрыта. Так можно избежать щелчков, вызванных звуковой "
-#~ "картой при открытии или закрытии уÑтройÑтва\n"
-#~ "По умолчанию: выключено"
-
-#~ msgid "Advanced options"
-#~ msgstr "Дополнительные параметры"
-
-#~ msgid "New"
-#~ msgstr "Ðовый"
-
-#~ msgid "Save Default List"
-#~ msgstr "Сохранить ÑпиÑок по умолчанию"
-
-#~ msgid "Saves the selected playlist to the default location."
-#~ msgstr "Сохранить выбранный ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² меÑто по умолчанию."
-
-#~ msgid "Entries"
-#~ msgstr "ЗапиÑи"
-
-#~ msgid "_Rename"
-#~ msgstr "_Переименовать"
-
-#~ msgid "About Icecast-Plugin"
-#~ msgstr "О модуле Icecast"
-
-#~ msgid ""
-#~ "Icecast-Plugin\n"
-#~ "\n"
-#~ "This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
-#~ "02110-1301,\n"
-#~ "USA."
-#~ msgstr ""
-#~ "Модуль Icecast\n"
-#~ "\n"
-#~ "Эта программа - Ñвободное программное обеÑпечение; вы можете "
-#~ "раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-#~ "Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-#~ "Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-#~ "Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-#~ "\n"
-#~ "Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-#~ "ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-#~ "ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-#~ "ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-#~ "\n"
-#~ "Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-#~ "вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: "
-#~ "Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-#~ "USA."
-
-#~ msgid "Error setting hostname: %s\n"
-#~ msgstr "Ошибка в указании удалённого узла: %s\n"
-
-#~ msgid "Error setting protocol: %s\n"
-#~ msgstr "Ошибка в указании протокола: %s\n"
-
-#~ msgid "Error setting port: %s\n"
-#~ msgstr "Ошибка в указании порта: %s\n"
-
-#~ msgid "Error setting password: %s\n"
-#~ msgstr "Ошибка при введении паролÑ: %s\n"
-
-#~ msgid "Error setting mount: %s\n"
-#~ msgstr "Ошибка параметров монтированиÑ: %s\n"
-
-#~ msgid "Error setting stream %s: %s\n"
-#~ msgstr "Ошибка в указании потока %s: %s\n"
-
-#~ msgid "public"
-#~ msgstr "публичный"
-
-#~ msgid "private"
-#~ msgstr "перÑональный"
-
-#~ msgid "Error setting stream name: %s\n"
-#~ msgstr "Ошибка в имени потока: %s\n"
-
-#~ msgid "Error setting stream genre: %s\n"
-#~ msgstr "Ошибка в указании жанра потока: %s\n"
-
-#~ msgid "Error setting stream URL: %s\n"
-#~ msgstr "Ошибка в URL потока: %s\n"
-
-#~ msgid "Error setting stream description: %s\n"
-#~ msgstr "Ошибка в опиÑании потока: %s\n"
-
-#~ msgid "Error setting user: %s\n"
-#~ msgstr "Ошибка в имени пользователÑ: %s\n"
-
-#~ msgid "Error connecting to server: %s\n"
-#~ msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ñервером: %s\n"
-
-#~ msgid "Icecast Configuration"
-#~ msgstr "Параметры Icecast"
-
-#~ msgid "Output stream format:"
-#~ msgstr "Формат вывода потока:"
-
-#~ msgid "Server address:"
-#~ msgstr "ÐÐ´Ñ€ÐµÑ Ñервера:"
-
-#~ msgid "Server hostname or IP address"
-#~ msgstr "Ð˜Ð¼Ñ (hostname) Ñервера или IP адреÑ"
-
-#~ msgid "Server port number"
-#~ msgstr "Ðомер порта Ñервера"
-
-#~ msgid "Mount point:"
-#~ msgstr "Точка монтированиÑ:"
-
-#~ msgid "Mount point for the stream"
-#~ msgstr "Точка Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ°"
-
-#~ msgid "User name:"
-#~ msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ:"
-
-#~ msgid ""
-#~ "Icecast source user name for the stream; depends on your server "
-#~ "settings.\n"
-#~ "The default value is \"source\""
-#~ msgstr ""
-#~ "Icecast получает Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· потока; завиÑит от наÑтройки вашего "
-#~ "Ñервера.\n"
-#~ "Значение по умолчанию \"source\""
-
-#~ msgid "Icecast source user password"
-#~ msgstr "Icecast получает пароль пользователÑ"
-
-#~ msgid "Connection timeout (seconds):"
-#~ msgstr "Ð’Ñ€ÐµÐ¼Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (Ñекунд):"
-
-#~ msgid ""
-#~ "Amount of time before plugin closes connection to server when no audio "
-#~ "data available"
-#~ msgstr ""
-#~ "Лимит времени до того, как модуль закроет Ñоединение Ñ Ñервером, еÑли "
-#~ "аудиоданные больше недоÑтупны."
-
-#~ msgid "Buffer size (bytes):"
-#~ msgstr "Размер буфера (байт):"
-
-#~ msgid ""
-#~ "Internal buffer size\n"
-#~ "Try to increase this if you are experiencing audio skipping on client side"
-#~ msgstr ""
-#~ "Внутренний размер буфера\n"
-#~ "Попробуйте увеличить Ñто значение еÑли еÑÑ‚ÑŒ пропуÑки звука на Ñтороне "
-#~ "клиента."
-
-#~ msgid "Flush buffer if "
-#~ msgstr "ОчиÑтить буфер, еÑли"
-
-#~ msgid "Determines when to flush internal buffer to prevent its overflow"
-#~ msgstr ""
-#~ "Определить, когда очиÑтить внутренний буфер, чтобы избежать его "
-#~ "переполнениÑ."
-
-#~ msgid "percents are filled"
-#~ msgstr "процентов заполнено"
-
-#~ msgid "Stream is public"
-#~ msgstr "Поток ÑвлÑетÑÑ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼"
-
-#~ msgid ""
-#~ "Setting this asks the server to list the stream in any directories it "
-#~ "knows about"
-#~ msgstr ""
-#~ "Эта уÑтановка запрашивает у Ñервера ÑпиÑок потоков во вÑех каталогах, о "
-#~ "которых он знает."
-
-#~ msgid "Stream name:"
-#~ msgstr "Ðазвание потока:"
-
-#~ msgid "Stream URL:"
-#~ msgstr "URL потока:"
-
-#~ msgid "The URL of a site about this stream"
-#~ msgstr "URL Ñайта об Ñтом потоке"
-
-#~ msgid "Stream genre:"
-#~ msgstr "Жанр потока:"
-
-#~ msgid ""
-#~ "The genre (or genres) of the stream. This is usually a keyword list, eg "
-#~ "\"pop rock rap\""
-#~ msgstr ""
-#~ "Жанр (или жанры) потока. Обычно Ñто ÑпиÑок Ñлов, например, \"pop rock rap"
-#~ "\"."
-
-#~ msgid "Stream description:"
-#~ msgstr "ОпиÑание потока:"
-
-#~ msgid ""
-#~ "<b><big>Couldn't initialize the last.fm radio plugin.</big></b>\n"
-#~ "\n"
-#~ "Check if your Scrobbler's plugin login data is set up properly."
-#~ msgstr ""
-#~ "<b><big>Ðевозможно инициализировать модуль last.fm радио.</big></b>\n"
-#~ "\n"
-#~ "Проверьте правильноÑÑ‚ÑŒ имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð² модуле Scrobbler."
-
-#~ msgid "Enable fast play-length calculation"
-#~ msgstr "Включить быÑтрый подÑчёт длительноÑти звучаниÑ"
-
-#~ msgid "Parse XING headers"
-#~ msgstr "Обрабатывать заголовки XING"
-
-#~ msgid "Use SJIS to write ID3 tags (not recommended)"
-#~ msgstr "ИÑпользовать SJIS Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи тегов ID3 (не рекомендуетÑÑ)"
-
-#~ msgid "Metadata Settings"
-#~ msgstr "ÐаÑтройка метаданных"
-
-#~ msgid "MPEG Audio Plugin Configuration"
-#~ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ MPEG"
-
-#~ msgid ""
-#~ "Audacious MPEG Audio Plugin\n"
-#~ "\n"
-#~ "Compiled against libMAD version: %d.%d.%d%s\n"
-#~ "\n"
-#~ "Written by:\n"
-#~ " William Pitcock <nenolod@sacredspiral.co.uk>\n"
-#~ " Yoshiki Yazawa <yaz@cc.rim.or.jp>\n"
-#~ "\n"
-#~ "Portions derived from XMMS-MAD by:\n"
-#~ " Sam Clegg\n"
-#~ "\n"
-#~ "ReplayGain support by:\n"
-#~ " Samuel Krempp"
-#~ msgstr ""
-#~ "Модуль Audacious MPEG Audio\n"
-#~ "\n"
-#~ "Собран Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ libMAD верÑии: %d.%d.%d%s\n"
-#~ "\n"
-#~ "Ðвторы:\n"
-#~ " William Pitcock <nenolod@sacredspiral.co.uk>\n"
-#~ " Yoshiki Yazawa <yaz@cc.rim.or.jp>\n"
-#~ "\n"
-#~ "ЧаÑтично иÑпользован XMMS-MAD от:\n"
-#~ " Sam Clegg\n"
-#~ "\n"
-#~ "Поддержка ReplayGain:\n"
-#~ " Samuel Krempp"
-
-#~ msgid "About MPEG Audio Plugin"
-#~ msgstr "О модуле поддержки MPEG"
-
-#~ msgid "About OSSv4 Driver"
-#~ msgstr "О драйвере OSSv4 Driver"
-
-#~ msgid ""
-#~ "Audacious OSSv4 Driver\n"
-#~ "\n"
-#~ "Based on the OSSv3 Output plugin,\n"
-#~ "Ported to OSSv4's VMIX by Cristi Magherusan <majeru@gentoo.ro>\n"
-#~ "\n"
-#~ "This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
-#~ "02110-1301,\n"
-#~ "USA.\n"
-#~ "\n"
-#~ "Note: For any issues regarding this plugin (including patches and \n"
-#~ "suggestions) please contact the maintainer, and NO other \n"
-#~ "Audacious developers\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Драйвер Audacious OSSv4\n"
-#~ "\n"
-#~ "ОÑнован на модуле вывода OSSv3,\n"
-#~ "Портирование на VMIX OSSv4 выполнил Cristi Magherusan <majeru@gentoo.ro>\n"
-#~ "\n"
-#~ "Эта программа - Ñвободное программное обеÑпечение; вы можете "
-#~ "раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать его в ÑоответÑтвии Ñ ÑƒÑловиÑми\n"
-#~ "Стандартной ОбщеÑтвенной Лицензии GNU, изданной Фондом Свободного\n"
-#~ "Программного ОбеÑпечениÑ; или же верÑией 2 Стандартной ОбщеÑтвенной\n"
-#~ "Лицензии Лицензии GNU или (по желанию) любой более поздней её верÑией.\n"
-#~ "\n"
-#~ "Эта программа раÑпроÑтранÑетÑÑ Ñ Ð½Ð°Ð´ÐµÐ¶Ð´Ð¾Ð¹, что она будет полезна, но БЕЗ\n"
-#~ "ВСЯКИХ ГÐРÐÐТИЙÐЫХ ОБЯЗÐТЕЛЬСТВ; без подразумеваемой гарантии товарного\n"
-#~ "ÑоÑтоÑÐ½Ð¸Ñ Ð¸ ПРИГОДÐОСТИ ИСПОЛЬЗОВÐÐИЯ ЕРДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n"
-#~ "ОбратитеÑÑŒ за подробноÑÑ‚Ñми к Лицензии GNU.\n"
-#~ "\n"
-#~ "Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-#~ "вмеÑте Ñ Ñтой программой; еÑли же нет, то напишите об Ñтом по адреÑу: "
-#~ "Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, "
-#~ "USA.\n"
-#~ "Примечание: По вÑем вопроÑам, ÑвÑзанным Ñ Ñтим модулем, (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ð°Ñ‚Ñ‡Ð¸ и\n"
-#~ "предложениÑ) пожалуйÑта, обращайтеÑÑŒ к разработчику и ÐИ К КОМУ ДРУГОМУ "
-#~ "из\n"
-#~ "разработчиков Audacious\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "There has been an error that may require your attention.\n"
-#~ "\n"
-#~ "Contents of server error:\n"
-#~ "\n"
-#~ "%s\n"
-#~ msgstr ""
-#~ "Произошла ошибка, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ потребовать вашего вниманиÑ.\n"
-#~ "\n"
-#~ "Содержание ошибки Ñервера:\n"
-#~ "\n"
-#~ "%s\n"
-
-#~ msgid "Scrobbler Error"
-#~ msgstr "Ошибка Scrobbler"
-
-#~ msgid "VBR"
-#~ msgstr "VBR"
-
-#~ msgid ""
-#~ "<b><big>Couldn't open audio.</big></b>\n"
-#~ "\n"
-#~ "Please check that:\n"
-#~ "1. You have the correct output plugin selected.\n"
-#~ "2. No other programs is blocking the soundcard.\n"
-#~ "3. Your soundcard is configured properly.\n"
-#~ msgstr ""
-#~ "<b><big>Ðевозможно воÑпроизвеÑти звук.</big></b>\n"
-#~ "\n"
-#~ "ПожалуйÑта, убедитеÑÑŒ, что:\n"
-#~ "1. Вы выбрали правильный модуль вывода звука.\n"
-#~ "2. Другие программы не блокируют звуковую карту.\n"
-#~ "3. Ваша Ð·Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° наÑтроена правильно.\n"
-
-#~ msgid "TiMidity Configuration"
-#~ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ TiMidity"
-
-#~ msgid "22000 Hz"
-#~ msgstr "22000 Гц"
-
-#~ msgid "44100 Hz"
-#~ msgstr "44100 Гц"
-
-#~ msgid "Sample Width"
-#~ msgstr "РазрÑдноÑÑ‚ÑŒ ÑÑмпла"
-
-#~ msgid "TiMidity Configuration File"
-#~ msgstr "Файл наÑтроек TiMidity"
-
-#~ msgid "TiMidity Plugin %s"
-#~ msgstr "О модуле TiMidity %s"
-
-#~ msgid ""
-#~ "TiMidity Plugin\n"
-#~ "http://libtimidity.sourceforge.net\n"
-#~ "by Konstantin Korikov"
-#~ msgstr ""
-#~ "Модуль TiMidity\n"
-#~ "http://libtimidity.sourceforge.net\n"
-#~ "Konstantin Korikov"
-
-#~ msgid "Couldn't load MIDI file"
-#~ msgstr "Ðевозможно загрузить MIDI файл"
-
-#~ msgid "Can't open file\n"
-#~ msgstr "Ðевозможно открыть файл\n"
-
-#~ msgid "Not supported file format\n"
-#~ msgstr "Формат файла не поддерживаетÑÑ\n"
-
-#~ msgid "File is corrupted\n"
-#~ msgstr "Файл повреждён\n"
-
-#~ msgid "Can't read from file\n"
-#~ msgstr "Ðевозможно прочеÑÑ‚ÑŒ информацию из файла\n"
-
-#~ msgid "Insufficient memory available\n"
-#~ msgstr "ÐедоÑтаточно памÑти\n"
-
-#~ msgid "Output plugin error\n"
-#~ msgstr "Ошибка Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð°\n"
-
-#~ msgid "Unknown error\n"
-#~ msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°\n"
-
-#~ msgid "TTA Decoder Error"
-#~ msgstr "Ошибка декодера TTA"
-
-#~ msgid "TTA input plugin "
-#~ msgstr "Модуль поддержки TTA"
-
-#~ msgid ""
-#~ " for BMP\n"
-#~ "Copyright (c) 2004 True Audio Software\n"
-#~ msgstr ""
-#~ "ÐапиÑано Ð´Ð»Ñ BMP\n"
-#~ "Copyright (c) 2004 True Audio Software\n"
-
-#~ msgid "About True Audio Plugin"
-#~ msgstr "О модуле True Audio"
-
-#~ msgid "Ape2 Tag"
-#~ msgstr "Теги Ape2"
-
-#~ msgid "Title:"
-#~ msgstr "Ðазвание:"
-
-#~ msgid "Artist:"
-#~ msgstr "ИÑполнитель:"
-
-#~ msgid "Album:"
-#~ msgstr "Ðльбом:"
-
-#~ msgid "Comment:"
-#~ msgstr "Комментарий:"
-
-#~ msgid "Year:"
-#~ msgstr "Год:"
-
-#~ msgid "Track number:"
-#~ msgstr "Ðомер дорожки:"
-
-#~ msgid "Genre:"
-#~ msgstr "Жанр:"
-
-#~ msgid "Remove Tag"
-#~ msgstr "Удалить тег"
-
-#~ msgid "Wavpack Info:"
-#~ msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Wavpack:"
-
-#~ msgid "version %d"
-#~ msgstr "верÑиÑ: %d"
-
-#~ msgid "average bitrate: %6.1f kbps"
-#~ msgstr "Ñредний битрейт: %6.1f кбит/Ñ"
-
-#~ msgid "samplerate: %d Hz"
-#~ msgstr "чаÑтота: %d Гц"
-
-#~ msgid "bits per sample: %d"
-#~ msgstr "бит на ÑÑмпл: %d"
-
-#~ msgid "channels: %d"
-#~ msgstr "каналов: %d"
-
-#~ msgid "length: %d:%.2d"
-#~ msgstr "длительноÑÑ‚ÑŒ: %d:%.2d"
-
-#~ msgid "file size: %d Bytes"
-#~ msgstr "размер файла: %d байт"
-
-#~ msgid "Title Peak: ?"
-#~ msgstr "Пики названиÑ: ?"
-
-#~ msgid "Album Peak: ?"
-#~ msgstr "Пики альбома: ?"
-
-#~ msgid "Title Gain: ?"
-#~ msgstr "УÑиление названиÑ: ?"
-
-#~ msgid "Album Gain: ?"
-#~ msgstr "УÑиление альбома: ?"
-
-#~ msgid "File Info - %s"
-#~ msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле %s"
-
-#~ msgid "Enable Dynamic Bitrate Display"
-#~ msgstr "Включить динамичеÑкое отображение битрейта"
-
-#~ msgid "General Plugin Settings"
-#~ msgstr "ОÑновные параметры модулÑ"
-
-#~ msgid "use Track Gain/Peak"
-#~ msgstr "иÑпользовать уÑиление / пик дорожки"
-
-#~ msgid "use Album Gain/Peak"
-#~ msgstr "иÑпользовать уÑиление / пик альбома"
-
-#~ msgid "Enable Clipping Prevention"
-#~ msgstr "Включить предотвращение ÑрезаниÑ"
-
-#~ msgid "Enable ReplayGain"
-#~ msgstr "Включить ReplayGain"
-
-#~ msgid "ReplayGain Type"
-#~ msgstr "Тип ReplayGain"
-
-#~ msgid "ReplayGain Settings"
-#~ msgstr "Параметры ReplayGain"
-
-#~ msgid "Plugin"
-#~ msgstr "Модуль"
-
-#~ msgid "ReplayGain"
-#~ msgstr "ReplayGain"
-
-#~ msgid "Wavpack Configuration"
-#~ msgstr "Параметры Ð¼Ð¾Ð´ÑƒÐ»Ñ Wavpack"
-
-#, fuzzy
-#~ msgid "Override default devices"
-#~ msgstr "Переопределить уÑтройÑтво по-умолчанию:"
-
-#, fuzzy
-#~ msgid "Card:"
-#~ msgstr "Команда:"
-
-#~ msgid "Mixer card:"
-#~ msgstr "Карта микшера:"
-
-#~ msgid "Orientation"
-#~ msgstr "Положение"
-
-#~ msgid "The orientation of the tray"
-#~ msgstr "Положение ÑиÑтемного лотка"
-
-#~ msgid "/Toggle Decorations"
-#~ msgstr "/Переключить отображение обрамлениÑ"
-
-#~ msgid "/-"
-#~ msgstr "/-"
-
-#~ msgid "/Close"
-#~ msgstr "/Закрыть"
-
-#~ msgid "Blur scope"
-#~ msgstr "Размытый оÑциллоÑкоп"
-
-#~ msgid "ReplayGain Settings:"
-#~ msgstr "ÐаÑтройки ReplayGain:"
-
-#~ msgid "ReplayGain Type:"
-#~ msgstr "Тип ReplayGain:"
-
-#~ msgid "About Apple Lossless Audio Plugin"
-#~ msgstr "О модуле Apple Lossless"
-
-#~ msgid "About Monkey's Audio Plugin"
-#~ msgstr "О модуле Monkey's Audio"
-
-#~ msgid ""
-#~ "Copyright (C) 2007 Eugene Zagidullin <e.asphyx@gmail.com>\n"
-#~ "Based on ffape decoder, Copyright (C) 2007 Benjamin Zores\n"
-#~ "ffape itself based on libdemac by Dave Chapman\n"
-#~ "\n"
-#~ "ffape is a part of FFmpeg project, http://ffmpeg.mplayerhq.hu/"
-#~ msgstr ""
-#~ "Copyright (C) 2007 Eugene Zagidullin <e.asphyx@gmail.com>\n"
-#~ "ОÑнован на декодере ffape, Copyright (C) 2007 Benjamin Zores\n"
-#~ "ffape, в Ñвою очередь, оÑнован на libdemac от Dave Chapman\n"
-#~ "\n"
-#~ "ffape ÑвлÑетÑÑ Ñ‡Ð°Ñтью проекта FFmpeg, http://ffmpeg.mplayerhq.hu/"
-
-#~ msgid "ID3 format:"
-#~ msgstr "Формат ID3-тега:"
-
-#~ msgid "ALSA Driver configuration"
-#~ msgstr "ÐаÑтройка драйвера ALSA"
-
-#~ msgid "Device settings"
-#~ msgstr "ÐаÑтройки уÑтройÑтва"
-
-#~ msgid "About CD Audio Plugin NG"
-#~ msgstr "О модуле CD Audio NG"
-
-#~ msgid "Musepack Decoder Configuration"
-#~ msgstr "ÐаÑтройка декодера Musepack"
-
-#~ msgid "General Settings"
-#~ msgstr "Общие параметры"
-
-#~ msgid "Use Track Gain"
-#~ msgstr "ИÑпользовать Gain/Peak дорожки"
-
-#~ msgid "Use Album Gain"
-#~ msgstr "ИÑпользовать Gain/Peak альбома"
-
-#~ msgid "Track:"
-#~ msgstr "Дорожка:"
-
-#~ msgid "Samplerate: %d Hz"
-#~ msgstr "ЧаÑтота: %d Гц"
-
-#~ msgid "Channels: %d"
-#~ msgstr "Каналы: %d"
-
-#~ msgid "Length: %d:\\%.2d"
-#~ msgstr "ДлительноÑÑ‚ÑŒ: %d:\\%.2d"
-
-#~ msgid "File size: %d Bytes"
-#~ msgstr "Размер файла: %d Байт"
-
-#~ msgid "Track Peak: %5u"
-#~ msgstr "Пик дорожки: %5u"
-
-#~ msgid "Track Gain: %-+2.2f dB"
-#~ msgstr "УÑиление дорожки: %-+2.2f dB"
-
-#~ msgid "Album Peak: %5u"
-#~ msgstr "Пик альбома: %5u"
-
-#~ msgid "Album Gain: %-+5.2f dB"
-#~ msgstr "УÑиление альбома: %-+5.2f dB"
-
-#~ msgid "ID3 Tag:"
-#~ msgstr "Тег ID3:"
-
-#~ msgid " Close "
-#~ msgstr " Закрыть "
-
-#~ msgid "Sample rate mismatch"
-#~ msgstr "ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ñ‡Ð°Ñтота ÑÑмплированиÑ"
-
-#, fuzzy
-#~ msgid "Audio Settings"
-#~ msgstr "ÐаÑтройки будильника"
-
-#~ msgid "Force reopen audio when audio type changed"
-#~ msgstr "Принудительно пере-открывать аудио-вывод при Ñмене типа аудио"
-
-#, fuzzy
-#~ msgid "Miscellaneous Settings"
-#~ msgstr "ÐаÑтройки микшера:"
-
-#~ msgid "Display average bitrate for VBR"
-#~ msgstr "Отображать Ñредний битрейт Ð´Ð»Ñ VBR"
-
-#~ msgid "Using libfaad2-"
-#~ msgstr "ИÑпользуетÑÑ libfaad2-"
-
-#~ msgid "About ALSA Driver"
-#~ msgstr "О драйвере ALSA"
-
-#~ msgid ""
-#~ "Audacious ALSA Driver\n"
-#~ "\n"
-#~ " This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
-#~ "02110-1301,\n"
-#~ "USA.\n"
-#~ "Author: Matthieu Sozeau (mattam@altern.org)"
-#~ msgstr ""
-#~ "Драйвер ALSA Ð´Ð»Ñ Audacious\n"
-#~ "\n"
-#~ " Эта программа - беÑплатное программное обеÑпечение; вы можете "
-#~ "раÑпроÑтранÑÑ‚ÑŒ и/или модифицировать ее\n"
-#~ "в ÑоответÑтвии Ñ ÑƒÑловиÑми Лицензии GNU, опубликованную\n"
-#~ "Организацией БеÑплатного Программного ОбеÑпечениÑ; вы можете пользоватьÑÑ "
-#~ "верÑией 2 Лицензии или\n"
-#~ "(по вашему желанию) любой более поздней верÑией.\n"
-#~ "\n"
-#~ "Эта программа раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезна,\n"
-#~ "но БЕЗ ВСЯКОЙ ГÐРÐÐТИИ; даже без гарании подразумеваемой\n"
-#~ "РÐБОТОСПОСОБÐОСТИ или ПРИГОДÐОСТИ ДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ. ПожалуйÑта,\n"
-#~ "за подробноÑÑ‚Ñми обратитеÑÑŒ к Лицензии GNU.\n"
-#~ "\n"
-#~ "Ð’Ñ‹ должны были получить копию Лицензии GNU вмеÑте Ñ Ñтой программой;\n"
-#~ "еÑли же нет, то напишите об Ñтом по адреÑу: Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
-#~ "02110-1301,\n"
-#~ "USA.\n"
-#~ "Ðвтор: Matthieu Sozeau (mattam@altern.org)"
-
-#~ msgid "Soundcard:"
-#~ msgstr "Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð°:"
-
-#~ msgid "Buffer time (ms):"
-#~ msgstr "Размер буфера (мÑ):"
-
-#~ msgid "Period time (ms):"
-#~ msgstr "Размер периода (мÑ):"
-
-#~ msgid "aRts Driver configuration"
-#~ msgstr "ÐаÑтройка драйвера aRts"
-
-#~ msgid ""
-#~ "<b><big>No playable CD found.</big></b>\n"
-#~ "\n"
-#~ "No CD inserted, or inserted CD is not an audio CD.\n"
-#~ msgstr ""
-#~ "<b><big>Ðу найден пригодный к воÑпроизведению диÑк.</big></b>\n"
-#~ "\n"
-#~ "ДиÑк не вÑтавлен в привод, или вÑтавленный диÑк не ÑвлÑетÑÑ Audio CD.\n"
-
-#~ msgid "Print debug information"
-#~ msgstr "Выводить отладочную информацию"
-
-#, fuzzy
-#~ msgid "Audacious Skinned GUI Configuration"
-#~ msgstr "ÐаÑтройка Audacious OSD"
-
-#~ msgid "Dither output when rounding to 16-bit"
-#~ msgstr "Размыть вывод при округлении до 16 бит"
-
-#, fuzzy
-#~ msgid "Base gain (dB):"
-#~ msgstr "УÑиление по-умолачнию (дБ):"
-
-#~ msgid "Enable ReplayGain processing"
-#~ msgstr "Включить ReplayGain"
-
-#, fuzzy
-#~ msgid "Enable peak info clip prevention"
-#~ msgstr "Включить предотвращение ÑрезаниÑ"
-
-#, fuzzy
-#~ msgid "Enable adaptive scaler clip prevention"
-#~ msgstr "Включить предотвращение ÑрезаниÑ"
-
-#, fuzzy
-#~ msgid "Gain Control"
-#~ msgstr "РегулÑтор громкоÑти:"
-
-#~ msgid "Enable 6dB Boost + Hard Limiting"
-#~ msgstr "Включить уÑиление на 6dB + жёÑткое ограничение"
-
-#~ msgid "<b>Playback:</b>"
-#~ msgstr "<b>ВоÑпроизведение:</b>"
-
-#~ msgid "<i>Configure keys which controls Audacious playback.</i>"
-#~ msgstr "<i>Клавиши Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ñпроизведением в Audacious.</i>"
-
-#~ msgid "<b>Volume Control:</b>"
-#~ msgstr "<b>Регулировка громкоÑти:</b>"
-
-#~ msgid "<i>Configure keys which controls music volume.</i>"
-#~ msgstr "<i>Клавиши Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ñтью.</i>"
-
-#~ msgid "<i>Configure keys which control the player.</i>"
-#~ msgstr "<i>Клавиши Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð»ÐµÐµÑ€Ð¾Ð¼.</i>"
-
-#~ msgid "For this, the Audacious OSD plugin must be activated."
-#~ msgstr ""
-#~ "Чтобы Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñтала доÑтупной,\n"
-#~ "необходимо включить модуль Audacious OSD."
-
-#~ msgid "Track mode"
-#~ msgstr "Режим дорожки"
-
-#~ msgid "6dB hard limiting"
-#~ msgstr "6dB жёÑткое ограничение"
-
-#~ msgid "Preamp (dB):"
-#~ msgstr "ПредуÑиление (дБ):"
-
-#~ msgid "About sndfile WAV support"
-#~ msgstr "О модуле поддержки WAV"
-
-#, fuzzy
-#~ msgid "Couldn't open file!"
-#~ msgstr "Ðевозможно загрузить MIDI файл"
-
-#, fuzzy
-#~ msgid "<b>Name:</b>"
-#~ msgstr "<b>Ðазвание: </b>"
-
-#~ msgid " MPEG Info "
-#~ msgstr " Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ MPEG "
-
-#~ msgid " ID3 Tag "
-#~ msgstr " ID3-тег "
-
-#, fuzzy
-#~ msgid "Unknown"
-#~ msgstr "(неизвеÑтно)"
-
-#, fuzzy
-#~ msgid "Layer %s"
-#~ msgstr "Проигрыватель WMA %s"
-
-#~ msgid "%d Hz"
-#~ msgstr "%d Гц"
-
-#~ msgid "Classic Rock"
-#~ msgstr "КлаÑÑичеÑкий рок"
-
-#~ msgid "Country"
-#~ msgstr "Кантри"
-
-#~ msgid "Dance"
-#~ msgstr "ДÑнÑ"
-
-#~ msgid "Disco"
-#~ msgstr "ДиÑко"
-
-#~ msgid "Funk"
-#~ msgstr "Фанк"
-
-#~ msgid "Grunge"
-#~ msgstr "Гранж"
-
-#~ msgid "Hip-Hop"
-#~ msgstr "Хип-Хоп"
-
-#~ msgid "Jazz"
-#~ msgstr "Джаз"
-
-#~ msgid "Metal"
-#~ msgstr "Метал"
-
-#~ msgid "Oldies"
-#~ msgstr "Ретро"
-
-#~ msgid "Other"
-#~ msgstr "Другое"
-
-#~ msgid "Pop"
-#~ msgstr "Поп"
-
-#~ msgid "R&B"
-#~ msgstr "R&B"
-
-#~ msgid "Rap"
-#~ msgstr "РÑп"
-
-#~ msgid "Reggae"
-#~ msgstr "Регги"
-
-#~ msgid "Rock"
-#~ msgstr "Рок"
-
-#~ msgid "Techno"
-#~ msgstr "Техно"
-
-#~ msgid "Industrial"
-#~ msgstr "ИндуÑтриальный"
-
-#~ msgid "Alternative"
-#~ msgstr "Ðльтернативный"
-
-#~ msgid "Ska"
-#~ msgstr "Ска"
-
-#~ msgid "Death Metal"
-#~ msgstr "ДÑз метал"
-
-#~ msgid "Soundtrack"
-#~ msgstr "Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°"
-
-#~ msgid "Euro-Techno"
-#~ msgstr "Евро-Техно"
-
-#~ msgid "Ambient"
-#~ msgstr "ÐžÐºÑ€ÑƒÐ¶Ð°ÑŽÑ‰Ð°Ñ Ñреда"
-
-#~ msgid "Trip-Hop"
-#~ msgstr "Трип-Хоп"
-
-#~ msgid "Vocal"
-#~ msgstr "Вокал"
-
-#~ msgid "Jazz+Funk"
-#~ msgstr "Джаз+Фанк"
-
-#~ msgid "Fusion"
-#~ msgstr "СлиÑние"
-
-#~ msgid "Trance"
-#~ msgstr "ТранÑ"
-
-#~ msgid "Instrumental"
-#~ msgstr "ИнÑтрументальный"
-
-#~ msgid "Acid"
-#~ msgstr "КиÑлота"
-
-#~ msgid "House"
-#~ msgstr "ХауÑ"
-
-#~ msgid "Game"
-#~ msgstr "Игра"
-
-#~ msgid "Sound Clip"
-#~ msgstr "Музыкальный клип"
-
-#~ msgid "Gospel"
-#~ msgstr "Евангелие"
-
-#~ msgid "Noise"
-#~ msgstr "Шум"
-
-#~ msgid "AlternRock"
-#~ msgstr "Ðльтернативный рок"
-
-#~ msgid "Soul"
-#~ msgstr "Душа"
-
-#~ msgid "Punk"
-#~ msgstr "Панк"
-
-#~ msgid "Space"
-#~ msgstr "КоÑмоÑ"
-
-#~ msgid "Meditative"
-#~ msgstr "МедитациÑ"
-
-#~ msgid "Instrumental Pop"
-#~ msgstr "ИÑтрументальный поп"
-
-#~ msgid "Instrumental Rock"
-#~ msgstr "ИÑтрументальный рок"
-
-#~ msgid "Ethnic"
-#~ msgstr "ЭтничеÑкий"
-
-#~ msgid "Gothic"
-#~ msgstr "ГотичеÑкий"
-
-#~ msgid "Darkwave"
-#~ msgstr "Ð¢ÐµÐ¼Ð½Ð°Ñ Ð²Ð¾Ð»Ð½Ð°"
-
-#~ msgid "Techno-Industrial"
-#~ msgstr "ТехноиндуÑтриальный"
-
-#~ msgid "Electronic"
-#~ msgstr "Электронный"
-
-#~ msgid "Pop-Folk"
-#~ msgstr "Ðародный поп"
-
-#~ msgid "Eurodance"
-#~ msgstr "ЕвродÑнÑ"
-
-#~ msgid "Dream"
-#~ msgstr "Сон"
-
-#~ msgid "Southern Rock"
-#~ msgstr "Южный рок"
-
-#~ msgid "Comedy"
-#~ msgstr "КомедиÑ"
-
-#~ msgid "Gangsta Rap"
-#~ msgstr "Черный Ñ€Ñп"
-
-#~ msgid "Top 40"
-#~ msgstr "Top 40"
-
-#~ msgid "Christian Rap"
-#~ msgstr "ХриÑтианÑкий реп"
-
-#~ msgid "Pop/Funk"
-#~ msgstr "Поп/Фанк"
-
-#~ msgid "Jungle"
-#~ msgstr "Джангл"
-
-#~ msgid "Native American"
-#~ msgstr "ÐÐ°Ñ€Ð¾Ð´Ð½Ð°Ñ Ð°Ð¼ÐµÑ€Ð¸ÐºÐ°Ð½ÑкаÑ"
-
-#~ msgid "Cabaret"
-#~ msgstr "Кабаре"
-
-#~ msgid "New Wave"
-#~ msgstr "ÐÐ¾Ð²Ð°Ñ Ð²Ð¾Ð»Ð½Ð°"
-
-#~ msgid "Psychedelic"
-#~ msgstr "ПÑиходелиÑ"
-
-#~ msgid "Rave"
-#~ msgstr "РÑйв"
-
-#~ msgid "Trailer"
-#~ msgstr "ÐнонÑ"
-
-#~ msgid "Lo-Fi"
-#~ msgstr "Lo-Fi"
-
-#~ msgid "Tribal"
-#~ msgstr "Семейное"
-
-#~ msgid "Acid Punk"
-#~ msgstr "КиÑлотный панк"
-
-#~ msgid "Acid Jazz"
-#~ msgstr "КиÑлотный джаз"
-
-#~ msgid "Polka"
-#~ msgstr "Полька"
-
-#~ msgid "Musical"
-#~ msgstr "Музыкальное"
-
-#~ msgid "Rock & Roll"
-#~ msgstr "Рок-н-рол"
-
-#~ msgid "Hard Rock"
-#~ msgstr "ТÑжелый рок"
-
-#~ msgid "Folk"
-#~ msgstr "Фольк"
-
-#~ msgid "Folk/Rock"
-#~ msgstr "Фольк/Рок"
-
-#~ msgid "National Folk"
-#~ msgstr "Ðациональный фольк"
-
-#~ msgid "Fast-Fusion"
-#~ msgstr "БыÑтрое ÑлиÑние"
-
-#~ msgid "Bebob"
-#~ msgstr "Бибоп"
-
-#~ msgid "Revival"
-#~ msgstr "Возрождение"
-
-#~ msgid "Celtic"
-#~ msgstr "КельтÑкаÑ"
-
-#~ msgid "Bluegrass"
-#~ msgstr "Bluegrass"
-
-#~ msgid "Avantgarde"
-#~ msgstr "Ðвангард"
-
-#~ msgid "Gothic Rock"
-#~ msgstr "ГотичеÑкий рок"
-
-#~ msgid "Progressive Rock"
-#~ msgstr "ПрогреÑÑивный рок"
-
-#~ msgid "Psychedelic Rock"
-#~ msgstr "ПÑиходеличеÑкий рок"
-
-#~ msgid "Symphonic Rock"
-#~ msgstr "СимфоничеÑкий рок"
-
-#~ msgid "Slow Rock"
-#~ msgstr "Медленный рок"
-
-#~ msgid "Big Band"
-#~ msgstr "Big Band"
-
-#~ msgid "Chorus"
-#~ msgstr "Хор"
-
-#~ msgid "Easy Listening"
-#~ msgstr "Easy Listening"
-
-#~ msgid "Acoustic"
-#~ msgstr "ÐкуÑтичеÑкаÑ"
-
-#~ msgid "Humour"
-#~ msgstr "Юмор"
-
-#~ msgid "Chanson"
-#~ msgstr "ШанÑон"
-
-#~ msgid "Opera"
-#~ msgstr "Опера"
-
-#~ msgid "Chamber Music"
-#~ msgstr "ÐšÐ°Ð¼ÐµÑ€Ð½Ð°Ñ Ð¼ÑƒÐ·Ñ‹ÐºÐ°"
-
-#~ msgid "Sonata"
-#~ msgstr "Соната"
-
-#~ msgid "Symphony"
-#~ msgstr "СимфониÑ"
-
-#~ msgid "Booty Bass"
-#~ msgstr "Booty Bass"
-
-#~ msgid "Primus"
-#~ msgstr "Прима"
-
-#~ msgid "Porn Groove"
-#~ msgstr "Порн грув"
-
-#~ msgid "Slow Jam"
-#~ msgstr "Медленный джÑм"
-
-#~ msgid "Club"
-#~ msgstr "Клуб"
-
-#~ msgid "Tango"
-#~ msgstr "Танго"
-
-#~ msgid "Samba"
-#~ msgstr "Самба"
-
-#~ msgid "Folklore"
-#~ msgstr "Фольклор"
-
-#~ msgid "Ballad"
-#~ msgstr "Баллада"
-
-#~ msgid "Power Ballad"
-#~ msgstr "Ð¡Ð¸Ð»ÑŒÐ½Ð°Ñ Ð±Ð°Ð»Ð»Ð°Ð´Ð°"
-
-#~ msgid "Rhythmic Soul"
-#~ msgstr "Ритмичный Ñоул"
-
-#~ msgid "Freestyle"
-#~ msgstr "Свободный Ñтиль"
-
-#~ msgid "Duet"
-#~ msgstr "ДуÑÑ‚"
-
-#~ msgid "Punk Rock"
-#~ msgstr "Панк рок"
-
-#~ msgid "Drum Solo"
-#~ msgstr "Ударное Ñоло"
-
-#~ msgid "A Cappella"
-#~ msgstr "РКапелла"
-
-#~ msgid "Euro-House"
-#~ msgstr "Euro-House"
-
-#~ msgid "Dance Hall"
-#~ msgstr "Танцевальный зал"
-
-#~ msgid "Goa"
-#~ msgstr "Гоа"
-
-#~ msgid "Drum & Bass"
-#~ msgstr "Драм-н-баÑ"
-
-#~ msgid "Club-House"
-#~ msgstr "Клуб-хауÑ"
-
-#~ msgid "Hardcore"
-#~ msgstr "Хардкор"
-
-#~ msgid "Indie"
-#~ msgstr "Indie"
-
-#~ msgid "BritPop"
-#~ msgstr "Бритпоп"
-
-#~ msgid "Negerpunk"
-#~ msgstr "Чёрный панк"
-
-#~ msgid "Polsk Punk"
-#~ msgstr "ПольÑкий панк"
-
-#~ msgid "Christian Gangsta Rap"
-#~ msgstr "Черный хриÑтианÑкий Ñ€Ñп"
-
-#~ msgid "Heavy Metal"
-#~ msgstr "ТÑжелый метал"
-
-#~ msgid "Black Metal"
-#~ msgstr "Чёрный метал"
-
-#~ msgid "Contemporary Christian"
-#~ msgstr "Ð¡Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ…Ñ€Ð¸ÑтианÑкаÑ"
-
-#~ msgid "Christian Rock"
-#~ msgstr "ХриÑтианÑкий рок"
-
-#~ msgid "Merengue"
-#~ msgstr "Меренга"
-
-#~ msgid "Salsa"
-#~ msgstr "СалÑа"
-
-#~ msgid "Thrash Metal"
-#~ msgstr "ТрÑш метал"
-
-#~ msgid "Anime"
-#~ msgstr "Ðниме"
-
-#~ msgid "JPop"
-#~ msgstr "JPop"
-
-#~ msgid "Synthpop"
-#~ msgstr "Электронный поп"
-
-#~ msgid ""
-#~ "An error occured:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "Произошла ошибка:\n"
-#~ "%s"
-
-#~ msgid "Error!"
-#~ msgstr "Ошибка!"
-
-#~ msgid "Failed to modify tag (open)"
-#~ msgstr "Ðе удалоÑÑŒ изменить тег (открыть)"
-
-#~ msgid "Failed to modify tag (close)"
-#~ msgstr "Ðе удалоÑÑŒ изменить тег (закрыть)"
-
-#~ msgid "Failed to modify tag"
-#~ msgstr "Ðе удалоÑÑŒ изменить тег"
-
-#~ msgid " Ogg Vorbis Tag "
-#~ msgstr " Тег Ogg Vorbis "
-
-#~ msgid "Version:"
-#~ msgstr "ВерÑиÑ:"
-
-#~ msgid "ISRC number:"
-#~ msgstr "Ðомер ISRC:"
-
-#~ msgid " Ogg Vorbis ReplayGain "
-#~ msgstr " Ogg Vorbis ReplayGain "
-
-#~ msgid "Track peak:"
-#~ msgstr "Пик дорожки:"
-
-#~ msgid "Album gain:"
-#~ msgstr "УÑиление альбома:"
-
-#~ msgid "Album peak:"
-#~ msgstr "Пик альбома:"
-
-#~ msgid " Ogg Vorbis Info "
-#~ msgstr " Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ogg Vorbis "
-
-#~ msgid "Bit rate:"
-#~ msgstr "БитрÑйт:"
-
-#~ msgid "Length:"
-#~ msgstr "Длина:"
-
-#~ msgid "File size:"
-#~ msgstr "Размер файла:"
-
-#~ msgid "N/A"
-#~ msgstr "Ð/Д"
-
-#~ msgid "%d KBit/s (nominal)"
-#~ msgstr "%d КБит/Ñ (номинал)"
-
-#~ msgid "%d"
-#~ msgstr "%d"
-
-#~ msgid "%d:%.2d"
-#~ msgstr "%d:%.2d"
-
-#~ msgid "%d Bytes"
-#~ msgstr "%d байт"
-
-#, fuzzy
-#~ msgid ""
-#~ "You cannot use the FileWriter plugin\n"
-#~ "when you're running in realtime mode."
-#~ msgstr ""
-#~ "ИÑпользование Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð·Ð°Ð¿Ð¸Ñи на диÑк невозможно\n"
-#~ "во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ в режиме реального времени."
-
-#, fuzzy
-#~ msgid "Override generic XMMS titles"
-#~ msgstr "Ðе иÑпользовать Ñтандартные названиÑ"
-
-#, fuzzy
-#~ msgid "No sub-tune control."
-#~ msgstr "РегулÑтор громкоÑти:"
-
-#, fuzzy
-#~ msgid "Disabled"
-#~ msgstr "переменный"
-
-#, fuzzy
-#~ msgid "22050"
-#~ msgstr "22000 Гц"
-
-#, fuzzy
-#~ msgid "44100"
-#~ msgstr "44100 Гц"
-
-#, fuzzy
-#~ msgid "12000"
-#~ msgstr "11000 Гц"
-
-#, fuzzy
-#~ msgid "24000"
-#~ msgstr "22000 Гц"
-
-#, fuzzy
-#~ msgid "32000"
-#~ msgstr "22000 Гц"
-
-#~ msgid "Drive %d"
-#~ msgstr "Привод %d"
-
-#~ msgid ""
-#~ "Failed to open device %s\n"
-#~ "Error: %s\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Ðе удалоÑÑŒ открыть уÑтройÑтво %s\n"
-#~ "Ошибка: %s\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Failed to read \"Table of Contents\"\n"
-#~ "Maybe no disc in the drive?\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Ðе удалоÑÑŒ прочитать \"Оглавление\"\n"
-#~ "Возможно нет диÑка в приводе?\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Device %s OK.\n"
-#~ "Disc has %d tracks"
-#~ msgstr ""
-#~ "Привод %s: ОК.\n"
-#~ "Ðа диÑке %d дорожек"
-
-#~ msgid " (%d data tracks)"
-#~ msgstr " (%d дорожек Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸)"
-
-#~ msgid ""
-#~ "Digital audio extraction not tested as the disc has no audio tracks\n"
-#~ msgstr ""
-#~ "Цифровое Ñчитывание аудио не теÑтировалоÑÑŒ, так как на диÑке нет аудио-"
-#~ "дорожек\n"
-
-#~ msgid ""
-#~ "Digital audio extraction test: OK\n"
-#~ "\n"
-#~ msgstr ""
-#~ "ТеÑтирование цифрового ÑчитываниÑ: OK\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Digital audio extraction test failed: %s\n"
-#~ "\n"
-#~ msgstr ""
-#~ "ТеÑтирование цифрового ÑÑ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾: %s\n"
-#~ "\n"
-
-#~ msgid "Error: %s exist, but is not a directory"
-#~ msgstr "Ошибка: %s ÑущеÑтвует, но не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼"
-
-#~ msgid "Directory %s OK."
-#~ msgstr "Каталог %s OK."
-
-#~ msgid "_Device:"
-#~ msgstr "_УÑтройÑтво:"
-
-#~ msgid "Dir_ectory:"
-#~ msgstr "_Каталог:"
-
-#~ msgid "Analog"
-#~ msgstr "Ðналоговый"
-
-#~ msgid "No mixer"
-#~ msgstr "Ðет микшера"
-
-#~ msgid "CDROM drive"
-#~ msgstr "Привод CD-ROM"
-
-#~ msgid "OSS mixer"
-#~ msgstr "OSS-микшер"
-
-#~ msgid "Check drive..."
-#~ msgstr "Проверить привод"
-
-#~ msgid "CD Audio Player Configuration"
-#~ msgstr "ÐаÑтройка Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ¾Ð¼Ð¿Ð°ÐºÑ‚ диÑков"
-
-#~ msgid "Device"
-#~ msgstr "УÑтройÑтво"
-
-#~ msgid "CDDB:"
-#~ msgstr "CDDB:"
-
-#~ msgid "Use CDDB"
-#~ msgstr "ИÑпользовать CDDB"
-
-#~ msgid "Get server list"
-#~ msgstr "Получить ÑпиÑок Ñерверов"
-
-#~ msgid "CDDB server:"
-#~ msgstr "Cервер CDDB:"
-
-#~ msgid "Name format:"
-#~ msgstr "Формат названиÑ:"
-
-#~ msgid "CD Audio Plugin"
-#~ msgstr "Модуль поддержки аудио компакт-диÑков"
-
-#~ msgid "CD Audio Track %02u"
-#~ msgstr "CD аудио-дорожка %02u"
-
-#~ msgid "Game console audio module decoder"
-#~ msgstr "Модуль поддержки Console Audio"
-
-#~ msgid "NSF/NSFE"
-#~ msgstr "NSF/NSFE"
-
-#~ msgid "Use optional NSFE playlist"
-#~ msgstr "ИÑпользовать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ NSFE"
-
-#~ msgid "Disk Writer Plugin %s"
-#~ msgstr "Модуль запиÑи на диÑк %s"
-
-#~ msgid "eSound Output Plugin"
-#~ msgstr "Модуль вывода звука eSound"
-
-#~ msgid "Extra Stereo Plugin %s"
-#~ msgstr "Модуль Extra Stereo %s"
-
-#~ msgid "BSD Sun Driver %s"
-#~ msgstr "BSD Sun Драйвер %s"
-
-#~ msgid "TiMidity Player %s"
-#~ msgstr "Проигрыватель TiMidity %s"
-
-#~ msgid "Tone Generator %s"
-#~ msgstr "Генератор Ñигналов %s"
-
-#~ msgid "Ogg Vorbis Audio Plugin"
-#~ msgstr "Модуль поддержки Ogg Vorbis"
-
-#~ msgid "WAV Audio Plugin"
-#~ msgstr "Модуль поддержки WAV"
-
-#~ msgid "ALSA %s output plugin"
-#~ msgstr "Модуль вывода звука ALSA %s"
-
-#~ msgid "AMIDI-Plug %s (MIDI Player)"
-#~ msgstr "AMIDI-Plug %s (MIDI проигрыватель)"
-
-#~ msgid "AMIDI-Plug - warning"
-#~ msgstr "AMIDI-Plug - предупреждение"
-
-#~ msgid ""
-#~ "No sequencer backend has been selected!\n"
-#~ "Please configure AMIDI-Plug before playing."
-#~ msgstr ""
-#~ "Ðе выбран модуль ÑеквенÑера!\n"
-#~ "ПожалуйÑта наÑтройте AMIDI-Plug перед воÑпроизведением."
-
-#~ msgid ""
-#~ "\n"
-#~ "EvDev-Plug "
-#~ msgstr ""
-#~ "\n"
-#~ "EvDev-Plug "
-
-#~ msgid "Arabic (IBM-864)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (IBM-864)"
-
-#~ msgid "Arabic (ISO-8859-6)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (ISO-8859-6)"
-
-#~ msgid "Arabic (Windows-1256)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (Windows-1256)"
-
-#~ msgid "Baltic (ISO-8859-13)"
-#~ msgstr "БалтийÑÐºÐ°Ñ (ISO-8859-13)"
-
-#~ msgid "Baltic (ISO-8859-4)"
-#~ msgstr "БалтийÑÐºÐ°Ñ (ISO-8859-4)"
-
-#~ msgid "Baltic (Windows-1257)"
-#~ msgstr "БалтийÑÐºÐ°Ñ (Windows-1257)"
-
-#~ msgid "Celtic (ISO-8859-14)"
-#~ msgstr "КельтÑÐºÐ°Ñ (ISO-8859-14)"
-
-#~ msgid "Central European (IBM-852)"
-#~ msgstr "Ð¦ÐµÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð•Ð²Ñ€Ð¾Ð¿Ð° (IBM-852)"
-
-#~ msgid "Central European (ISO-8859-2)"
-#~ msgstr "Ð¦ÐµÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð•Ð²Ñ€Ð¾Ð¿Ð° (ISO-8859-2)"
-
-#~ msgid "Central European (Windows-1250)"
-#~ msgstr "Ð¦ÐµÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð•Ð²Ñ€Ð¾Ð¿Ð° (Windows-1250)"
-
-#~ msgid "Chinese Simplified (GB18030)"
-#~ msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ð°Ñ (GB18030)"
-
-#~ msgid "Chinese Simplified (GB2312)"
-#~ msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ð°Ñ (GB2312)"
-
-#~ msgid "Chinese Traditional (Big5)"
-#~ msgstr "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (Big5)"
-
-#~ msgid "Chinese Traditional (Big5-HKSCS)"
-#~ msgstr "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (Big5-HKSCS)"
-
-#~ msgid "Cyrillic (IBM-855)"
-#~ msgstr "Кириллица (IBM-855)"
-
-#~ msgid "Cyrillic (ISO-8859-5)"
-#~ msgstr "Кириллица (ISO-8859-5)"
-
-#~ msgid "Cyrillic (ISO-IR-111)"
-#~ msgstr "Кириллица (ISO-IR-111)"
-
-#~ msgid "Cyrillic (KOI8-R)"
-#~ msgstr "Кириллица (KOI8-R)"
-
-#~ msgid "Cyrillic (Windows-1251)"
-#~ msgstr "Кириллица (Windows-1251)"
-
-#~ msgid "Cyrillic/Russian (CP-866)"
-#~ msgstr "Кириллица/РоÑÑÐ¸Ñ (CP-866)"
-
-#~ msgid "Cyrillic/Ukrainian (KOI8-U)"
-#~ msgstr "Кириллица/Украина (KOI8-U)"
-
-#~ msgid "English (US-ASCII)"
-#~ msgstr "ÐнглийÑÐºÐ°Ñ (US-ASCII)"
-
-#~ msgid "Greek (ISO-8859-7)"
-#~ msgstr "ГречеÑÐºÐ°Ñ (ISO-8859-7)"
-
-#~ msgid "Greek (Windows-1253)"
-#~ msgstr "ГречеÑÐºÐ°Ñ (Windows-1253)"
-
-#~ msgid "Hebrew (IBM-862)"
-#~ msgstr "Иврит (IBM-862)"
-
-#~ msgid "Hebrew (Windows-1255)"
-#~ msgstr "Иврит (Windows-1255)"
-
-#~ msgid "Japanese (EUC-JP)"
-#~ msgstr "ЯпонÑÐºÐ°Ñ (EUC-JP)"
-
-#~ msgid "Japanese (ISO-2022-JP)"
-#~ msgstr "ЯпонÑÐºÐ°Ñ (ISO-2022-JP)"
-
-#~ msgid "Japanese (Shift_JIS)"
-#~ msgstr "ЯпонÑÐºÐ°Ñ (Shift_JIS)"
-
-#~ msgid "Korean (EUC-KR)"
-#~ msgstr "КорейÑÐºÐ°Ñ (EUC-KR)"
-
-#~ msgid "Nordic (ISO-8859-10)"
-#~ msgstr "СкандинавÑÐºÐ°Ñ (ISO-8859-10)"
-
-#~ msgid "South European (ISO-8859-3)"
-#~ msgstr "ВоÑÑ‚Ð¾Ñ‡Ð½Ð°Ñ Ð•Ð²Ñ€Ð¾Ð¿Ð° (ISO-8859-3)"
-
-#~ msgid "Thai (TIS-620)"
-#~ msgstr "ТайÑÐºÐ°Ñ (TIS-620)"
-
-#~ msgid "Turkish (IBM-857)"
-#~ msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (IBM-857)"
-
-#~ msgid "Turkish (ISO-8859-9)"
-#~ msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (ISO-8859-9)"
-
-#~ msgid "Turkish (Windows-1254)"
-#~ msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (Windows-1254)"
-
-#~ msgid "Unicode (UTF-7)"
-#~ msgstr "Юникод (UTF-7)"
-
-#~ msgid "Unicode (UTF-8)"
-#~ msgstr "Юникод (UTF-8)"
-
-#~ msgid "Unicode (UTF-16BE)"
-#~ msgstr "Юникод (UTF-16BE)"
-
-#~ msgid "Unicode (UTF-16LE)"
-#~ msgstr "Юникод (UTF-16LE)"
-
-#~ msgid "Unicode (UTF-32BE)"
-#~ msgstr "Юникод (UTF-32BE)"
-
-#~ msgid "Unicode (UTF-32LE)"
-#~ msgstr "Юникод (UTF-32LE)"
-
-#~ msgid "Vietnamese (VISCII)"
-#~ msgstr "ВьетнамÑÐºÐ°Ñ (VISCII)"
-
-#~ msgid "Vietnamese (Windows-1258)"
-#~ msgstr "ВьетнамÑÐºÐ°Ñ (Windows-1258)"
-
-#~ msgid "Visual Hebrew (ISO-8859-8)"
-#~ msgstr "Иврит (ISO-8859-8)"
-
-#~ msgid "Western (IBM-850)"
-#~ msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (IBM-850)"
-
-#~ msgid "Western (ISO-8859-1)"
-#~ msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (ISO-8859-1)"
-
-#~ msgid "Western (ISO-8859-15)"
-#~ msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (ISO-8859-15)"
-
-#~ msgid "Western (Windows-1252)"
-#~ msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (Windows-1252)"
-
-#~ msgid "Arabic (IBM-864-I)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (IBM-864-I)"
-
-#~ msgid "Arabic (ISO-8859-6-E)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (ISO-8859-6-E)"
-
-#~ msgid "Arabic (ISO-8859-6-I)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (ISO-8859-6-I)"
-
-#~ msgid "Arabic (MacArabic)"
-#~ msgstr "ÐрабÑÐºÐ°Ñ (MacArabic)"
-
-#~ msgid "Armenian (ARMSCII-8)"
-#~ msgstr "ÐрмÑнÑÐºÐ°Ñ (ARMSCII-8)"
-
-#~ msgid "Central European (MacCE)"
-#~ msgstr "Ð¦ÐµÐ½Ñ‚Ñ€Ð°Ð»ÑŒÐ½Ð°Ñ Ð•Ð²Ñ€Ð¾Ð¿Ð° (MacCE)"
-
-#~ msgid "Chinese Simplified (GBK)"
-#~ msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ð°Ñ (GBK)"
-
-#~ msgid "Chinese Simplified (HZ)"
-#~ msgstr "КитайÑÐºÐ°Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ð°Ñ (HZ)"
-
-#~ msgid "Chinese Traditional (EUC-TW)"
-#~ msgstr "КитайÑÐºÐ°Ñ Ñ‚Ñ€Ð°Ð´Ð¸Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ (EUC-TW)"
-
-#~ msgid "Croatian (MacCroatian)"
-#~ msgstr "ХорватÑÐºÐ°Ñ (MacCroatian)"
-
-#~ msgid "Cyrillic (MacCyrillic)"
-#~ msgstr "Кириллица (MacCyrillic)"
-
-#~ msgid "Cyrillic/Ukrainian (MacUkrainian)"
-#~ msgstr "Кириллица/Украина (MacUkrainian)"
-
-#~ msgid "Farsi (MacFarsi)"
-#~ msgstr "ФарÑи (MacFarsi)"
-
-#~ msgid "Greek (MacGreek)"
-#~ msgstr "ГречеÑÐºÐ°Ñ (MacGreek)"
-
-#~ msgid "Gujarati (MacGujarati)"
-#~ msgstr "Гуджарати (MacGujarati)"
-
-#~ msgid "Gurmukhi (MacGurmukhi)"
-#~ msgstr "Гурмуки (MacGurmukhi)"
-
-#~ msgid "Hebrew (ISO-8859-8-E)"
-#~ msgstr "Иврит (ISO-8859-8-E)"
-
-#~ msgid "Hebrew (ISO-8859-8-I)"
-#~ msgstr "Иврит (ISO-8859-8-I)"
-
-#~ msgid "Hebrew (MacHebrew)"
-#~ msgstr "Иврит (MacHebrew)"
-
-#~ msgid "Hindi (MacDevanagari)"
-#~ msgstr "Хинди (MacDevanagari)"
-
-#~ msgid "Icelandic (MacIcelandic)"
-#~ msgstr "ИÑландÑÐºÐ°Ñ (MacIcelandic)"
-
-#~ msgid "Korean (JOHAB)"
-#~ msgstr "КорейÑÐºÐ°Ñ (JOHAB)"
-
-#~ msgid "Korean (UHC)"
-#~ msgstr "КорейÑÐºÐ°Ñ (UHC)"
-
-#~ msgid "Romanian (MacRomanian)"
-#~ msgstr "РумынÑÐºÐ°Ñ (MacRomanian)"
-
-#~ msgid "Turkish (MacTurkish)"
-#~ msgstr "Ð¢ÑƒÑ€ÐµÑ†ÐºÐ°Ñ (MacTurkish)"
-
-#~ msgid "Vietnamese (TCVN)"
-#~ msgstr "ВьетнамÑÐºÐ°Ñ (TCVN)"
-
-#~ msgid "Vietnamese (VPS)"
-#~ msgstr "ВьетнамÑÐºÐ°Ñ (VPS)"
-
-#~ msgid "Western (MacRoman)"
-#~ msgstr "Ð—Ð°Ð¿Ð°Ð´Ð½Ð°Ñ (MacRoman)"
-
-#~ msgid "Tag Handling"
-#~ msgstr "Обработка Ñ‚Ñгов"
-
-#~ msgid "Convert Character Set"
-#~ msgstr "Преобразование кодировки"
-
-#~ msgid "Convert character set from :"
-#~ msgstr "Преобразовать кодировку из :"
-
-#~ msgid "Disable bitrate update during playback (saves cpu usage)"
-#~ msgstr ""
-#~ "Запретить обновление битрейта во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ (уменьшает загрузку "
-#~ "процеÑÑора)"
-
-#~ msgid "Album mode"
-#~ msgstr "Ðльбомный режим"
-
-#~ msgid "0 dB"
-#~ msgstr "0 dB"
-
-#~ msgid "Without ReplayGain"
-#~ msgstr "Выключить ReplayGain"
-
-#~ msgid "Dither 24bps to 16bps"
-#~ msgstr "Преобразовать 24 бит/Ñ Ð² 16 бит/Ñ"
-
-#~ msgid "With ReplayGain"
-#~ msgstr "Включить ReplayGain"
-
-#~ msgid "Noise shaping"
-#~ msgstr "Подавление шума"
-
-#~ msgid "high"
-#~ msgstr "выÑокое"
-
-#~ msgid "Dither to"
-#~ msgstr "Преобразовать к"
-
-#~ msgid "16 bps"
-#~ msgstr "16 бит/Ñ"
-
-#~ msgid "24 bps"
-#~ msgstr "24 бит/Ñ"
-
-#~ msgid ""
-#~ "Flac Plugin by Josh Coalson\n"
-#~ "contributions by\n"
-#~ "......\n"
-#~ "......\n"
-#~ "and\n"
-#~ "Daisuke Shimamura\n"
-#~ "Visit http://flac.sourceforge.net/\n"
-#~ "\n"
-#~ "Audacious Team port"
-#~ msgstr ""
-#~ "Модуль Flac от Josh Coalson\n"
-#~ "в разработке учаÑтвовали:\n"
-#~ "......\n"
-#~ "......\n"
-#~ "и\n"
-#~ "Daisuke Shimamura\n"
-#~ "ПоÑетите http://flac.sourceforge.net/\n"
-#~ "\n"
-#~ "Audacious Team port"
-
-#~ msgid "Alt"
-#~ msgstr "Alt"
-
-#~ msgid "Blocksize: %d"
-#~ msgstr "Блок: %d"
-
-#~ msgid ""
-#~ "Blocksize: variable\n"
-#~ " min/max: %d/%d"
-#~ msgstr ""
-#~ "Блок: переменный\n"
-#~ " мин/макÑ: %d/%d"
-
-#~ msgid "FLAC Info:"
-#~ msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ FLAC:"
-
-#~ msgid "Filesize: %lld B"
-#~ msgstr "Размер файла: %lld Б"
-
-#~ msgid "ReplayGain Reference Loudness: %2.1f dB"
-#~ msgstr "ReplayGain Ð ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ð°Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾ÑÑ‚ÑŒ: %2.1f дБ"
-
-#~ msgid "ReplayGain Track Peak: %1.8f"
-#~ msgstr "ReplayGain Пик дорожки: %1.8f"
-#~ msgid "ReplayGain Album Peak: %1.8f"
-#~ msgstr "ReplaGain Пик альбома: %1.8f"
diff --git a/po/sk.po b/po/sk.po
index 150b7c9..3edbc7e 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1,26 +1,25 @@
-# translation of sk.po to Slovak
-# Slovak translation for Audacious-Plugins
-# Copyright (C) 2007, 2008, 2010 Andrej Herceg <herceg.andrej@zoznam.sk>.
-# This file is distributed under the same license as the audacious-plugins package.
+# Slovak translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
#
-#
-# Andrej Herceg <herceg.andrej@zoznam.sk>, 2007, 2008, 2010.
+# Translators:
+# Andrej Herceg <herceg.andrej@zoznam.sk>, 2007, 2008, 2010, 2011.
+# Tomáš Vadina <kyberdev@gmail.com>, 2012.
msgid ""
msgstr ""
-"Project-Id-Version: audacious-plugins-2.4-alpha2\n"
-"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: 2010-06-25 16:31+0200\n"
-"Last-Translator: Andrej Herceg <herceg.andrej@zoznam.sk>\n"
-"Language-Team: Slovak <Slovak <sk-i18n@lists.linux.sk>>\n"
-"Language: \n"
+"Project-Id-Version: Audacious\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2011-12-29 19:29-0500\n"
+"PO-Revision-Date: 2012-01-09 14:29+0000\n"
+"Last-Translator: Tomáš Vadina <kyberdev@gmail.com>\n"
+"Language-Team: Slovak\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: KBabel 1.11.4\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -31,454 +30,175 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM dekodér (c) Nero AG, www.nero.com\n"
"Copyright (c) 2005-2006 tím Audacious"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "O module dekodéra MP4 AAC"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "O "
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "O programe Alarm"
-#: src/adplug/adplug-xmms.cc:157
+#: src/alarm/alarm.c:313
msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
+"Originally written by Adam Feakin and Daniel Stodden."
msgstr ""
+"Modul, ktorý možno použiÅ¥ na prehrávanie v urÄitom Äase.\n"
"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Modul je poskytovaný za podmienok licencie GNU LGPL.\n"
-"Pre podrobnosti navštívte http://www.gnu.org/licenses/lgpl.html\n"
-"\n"
-"Modul používa knižnicu AdPlug, Copyright (C) Simon Peter a Äalší.\n"
-"Zostavené s AdPlug knižnicou verzie: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Nastavenie"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "OK"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Zrušiť"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Všeobecné"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Kvalita zvuku"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Rozlíšenie"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8 bitov"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16 bitov"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "PoÄet kanálov"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Povolenie sterea nie je odporúÄané (ak ho naozaj nepotrebujete). Táto voľba "
-"nepridá zvuku žiadne stereoefekty (OPL2 je len mono), a spotrebováva sa viac "
-"výkonu CPU."
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Frekvencia"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Prehrávanie"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Rozoznať koniec skladby"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Ak je povolené, XMMS rozozná, že sa skladba skonÄila, zastaví ju a prejde na "
-"nasledujúcu skladbu v zozname skladieb. Ak je zakázané, XMMS nebude reagovať "
-"na koniec pesniÄky a bude ju opakovaÅ¥ neustále dookola."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Formáty"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Výber formátu"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Formát"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Prípona"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Vybrané typy súborov budú rozpoznané a prehrávané týmto modulom. Ostatné "
-"budú ignorované a budú prenechané iným modulom."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Informácie o súbore"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Názov súboru"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Názov: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Autor: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Typ súboru: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Podskladby: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Nástroje: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Poradia: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Úseky: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Skladba"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Meno nástroja"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Správa skladby"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Výber podskladby"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Poradie: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Úsek: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Riadok: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Rýchlosť: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "ÄŒasovaÄ: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "O budíku"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS budík"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"XMMS modul, ktorý môže byť použitý\n"
-"k naÄasovaniu spustenia prehrávanie.\n"
-"\n"
-"Sťažnosti posielajte na adresu:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Zatvoriť"
+"Pôvodne napísal Adam Feakin a Daniel Stodden."
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:33
msgid "Alarm"
-msgstr "Budík"
+msgstr "Alarm"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:40
msgid "This is your wakeup call."
-msgstr "Toto je váš budiaci signál."
+msgstr "Toto je budiaci signál."
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
msgid "OK"
msgstr "OK"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Vybrať zoznam skladieb"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Ospravedlnenie"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Upozornenie"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Z bezpeÄnostých dôvodov musí byÅ¥ dĺžka ticha aspoň o 65 sekúnd dlhÅ¡ia ako je "
-"dĺžka zosilňovania a zároveň musí byť dlhá aspoň 10 sekúnd. To v podstate "
-"znamená, že v kóde je chyba a kým nenájdem spôsob, ako ju naozaj odstrániť, "
-"bude sa zobrazovať táto správa. :)\n"
-"\n"
-"Vaše nastavenia zosilňovanie NEBOLI uložené.\n"
-"\n"
-"--\n"
-"Adam"
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Tak dobre"
-
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:214
msgid "Alarm Settings"
-msgstr "Nastavenia budíka"
+msgstr "Nastavenie Alarmu"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
msgid "Time"
msgstr "ÄŒas"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:270
msgid "hours"
-msgstr "hodinách"
+msgstr "hodín"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:331
msgid "h"
msgstr "h"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:361
msgid "minutes"
-msgstr "minútach"
+msgstr "minút"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:379
msgid "Quiet after:"
msgstr "Ticho po:"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:389
msgid "Alarm at (default):"
-msgstr "Budiť v (štandardne):"
+msgstr "Budiť o (predvolené):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:409
msgid "Choose the days for the alarm to come on"
-msgstr "Zvoľte dni, kedy má budík budiť"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+msgstr "Vyberte dni, kedy má budík budiť"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
msgid "Default"
msgstr "Štandardné"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:763
msgid "Day"
msgstr "Deň"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:783
msgid "Tuesday"
msgstr "Utorok"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:794
msgid "Wednesday"
msgstr "Streda"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:805
msgid "Thursday"
msgstr "Å tvrtok"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:816
msgid "Friday"
msgstr "Piatok"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:827
msgid "Saturday"
msgstr "Sobota"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:838
msgid "Sunday"
msgstr "Nedeľa"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:848
msgid "Monday"
msgstr "Pondelok"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:859
msgid "Days"
msgstr "Dni"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:875
msgid "Fading"
-msgstr "Zosilňovanie"
+msgstr "Zosilovanie"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:912
msgid "seconds"
msgstr "sekúnd"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
msgid "Volume"
msgstr "Hlasitosť"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:946
msgid "Current"
msgstr "Aktuálna"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "vrátiť na aktuálnu hlasitosť výstupu"
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:954
msgid "Start at"
msgstr "ZaÄaÅ¥ na"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:998
msgid "Final"
msgstr "SkonÄiÅ¥ na"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1051
msgid "Additional Command"
msgstr "DodatoÄný príkaz"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1077
msgid "enable"
msgstr "povoliť"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1085
msgid "Playlist (optional)"
msgstr "Zoznam skladieb (voliteľné)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1111
msgid "Browse..."
-msgstr "Prechádzať…"
+msgstr "Prechádzať..."
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
msgid "Reminder"
-msgstr "Pripomenutie"
+msgstr "Upozornenie"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1136
msgid "Use reminder"
-msgstr "Pripomenúť"
+msgstr "Upozorňovať"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "Možnosti"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1160
msgid "What do these options mean?"
-msgstr "Čo znamenajú tieto možnosti?"
+msgstr "Čo tieto možnosti znamenajú?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1188
msgid ""
"\n"
"Time\n"
@@ -534,73 +254,78 @@ msgid ""
msgstr ""
"\n"
"ÄŒas\n"
-" Budiť v: \n"
-" Čas, v ktorom sa spustí budenie.\n"
+" Budiť o: \n"
+" Čas budíka.\n"
"\n"
" Ticho po: \n"
" Zastaviť budík po uplynutí tejto doby.\n"
-" (ak nie je okno budíka medzi tým zatvorené)\n"
+" (pokiaľ nebude budiaci dialóg zatvorený)\n"
"\n"
"\n"
"Dni\n"
" Deň:\n"
-" Zvoľte dni, kedy má byť budík aktívny.\n"
+" Vyberte dni, kedy má budík fungovať.\n"
"\n"
" ÄŒas:\n"
-" Zvoľte Äas budenia pre každý deň, alebo zaÅ¡krtnite\n"
-" prepínacie tlaÄidlo na použitie Å¡tandardného Äasu.\n"
+" Vyberte Äas budíka pre každý deň,\n"
+" alebo použite Å¡tandardný Äas.\n"
"\n"
"\n"
"Hlasitosť\n"
-" Zosilňovanie: \n"
-" PoÄas tohoto Äasu postupne zosilňuje hlasitosÅ¥ až\n"
-" na zvolenú hodnotu\n"
+" Zosilovanie: \n"
+" Zosiluje až na vybranú hodnotu \n"
+" po vybranú dobu.\n"
"\n"
" ZaÄaÅ¥ na: \n"
-" ZaÄaÅ¥ zosilňovanie z tejto úrovne.\n"
+" Zosilovanie zaÄne z tejto hlasitosti.\n"
"\n"
" SkonÄiÅ¥ na: \n"
-" Úroveň, pri ktorej skonÄí zosilňovanie. Ak je Äas\n"
-"zosilňovania 0, hlasitosť sa nastaví na túto úroveň\n"
-"a spustí sa prehrávanie.\n"
+" Hlasitosť na konci zosilnenia. Ak je doba\n"
+" zosilovania na hodnote 0, potom bude \n"
+" hlasitosť táto.\n"
"\n"
"\n"
-"Nastavenia:\n"
+"Možnosti:\n"
" DodatoÄný príkaz:\n"
-" Tento príkaz bude pri budení spustený.\n"
+" Tento príkaz bude spustený v dobe budíka.\n"
"\n"
" Zoznam skladieb: \n"
-" NaÄítaÅ¥ zoznam skladieb, z ktorého sa budú\n"
-" prehrávať skladby (musí mať príponu .m3u).\n"
-" Ak nie je zoznam zadaný, budú sa prehrávať skladby\n"
-" z aktuálneho zoznamu skladieb.\n"
-" Je možné použiť aj URL mp3/ogg prúdu, ale\n"
-" naÄítavanie zoznamu skladieb z URL nie je momentálne\n"
-" v XMMS podporované.\n"
-"\n"
-" Pripomenutie:\n"
-" Pri vypnutí budíka zobrazí pripomienku.\n"
-" Text pripomienky napíšte do vstupného poľa\n"
-" a zaškrtnite „Pripomenúť“ ak si prajete, aby sa text zobrazil.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+" NaÄíta tento zoznam skladieb, z ktorého bude hraÅ¥ \n"
+" (musí mať príponu .m3u). Ak zoznam nie je zadaný, \n"
+" budú použité skladby, ktoré budú v aktuálnom\n"
+" zozname skladieb.\n"
+" URL MP3/OGG prúdu môže byť taktiež\n"
+" zadaná, ale naÄítanie zoznamu skladieb\n"
+" z URL nie je momentálne podporované.\n"
+"\n"
+" Upozornenie:\n"
+" Pri vypnutí budíka zobrazí odkaz.\n"
+" Text odkazu vpíšte do vstupného poľa a ak \n"
+" si želáte zobrazovaÅ¥ odkaz, stlaÄte tlaÄidlo.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
msgid "Help"
msgstr "Pomocník"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: src/alarm/interface.c:1290
msgid "Your reminder for today is.."
-msgstr "Vaša pripomienka pre dnes je…"
+msgstr "Váš odkaz pre dnes je.."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1315
msgid "Thankyou"
msgstr "ÄŽakujem"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "Predvolené PCM zariadenie"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "Predvolené zariadenie mixéra"
@@ -612,7 +337,7 @@ msgstr "Predvoľby výstupného modulu ALSA"
msgid "PCM device:"
msgstr "PCM zariadenie:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "Zariadenie mixéra:"
@@ -624,15 +349,15 @@ msgstr "Prvok mixéra:"
msgid "Work around drain hangup"
msgstr "Obísť problém so zasekávaním pri vyprázdňovaní"
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "O výstupnom module ALSA"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "Chyba ALSA"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:326
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -646,122 +371,66 @@ msgstr "Koncové zariadenie pre ALSA "
#: src/amidi-plug/backend-alsa/b-alsa.c:37
msgid ""
-"This backend sends MIDI events to a group of user-chosen ALSA sequencer "
-"ports. The ALSA sequencer interface is very versatile, it can provide ports "
-"for audio cards hardware synthesizers (i.e. emu10k1) but also for software "
-"synths, external devices, etc.\n"
-"This backend does not produce audio, MIDI events are handled directly from "
-"devices/programs behind the ALSA ports; in example, MIDI events sent to the "
-"hardware synth will be directly played.\n"
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
"Backend written by Giacomo Lozito."
msgstr ""
-"Toto koncové zariadenie posiela MIDI udalosti skupine užívateľom vybraných "
-"portov ALSA sekvencéra. Rozhranie ALSA sekvencéra je vysoko prispôsobivé. "
-"Môže poskytovať porty pre hardvérové syntetizátory zvukovej karty (napr. "
-"emu10k1), alebo syntetizátorom softvérovým, vonkajším zariadeniam atÄ.\n"
-"Toto koncové zariadenie nevytvára zvuk, MIDI udalosti sú spracovávané priamo "
-"zariadením/programom, ktoré sa ukrýva za ALSA portom. Napríklad MIDI "
-"udalosti poslané hardvérovému syntetizátoru budú prehrané priamo ním.\n"
+"Toto koncové zariadenie posiela MIDI udalosti skupine užívateľom vybraných portov ALSA sekvencéra. Rozhranie ALSA sekvencéra je vysoko prispôsobivé. Môže poskytovaÅ¥ porty pre hardvérové syntetizátory zvukovej karty (napr. emu10k1), alebo syntetizátorom softvérovým, vonkajším zariadeniam atÄ.\n"
+"Toto koncové zariadenie nevytvára zvuk, MIDI udalosti sú spracovávané priamo zariadením/programom, ktoré sa ukrýva za ALSA portom. Napríklad MIDI udalosti poslané hardvérovému syntetizátoru budú prehrané priamo ním.\n"
"OvládaÄ koncového zariadenia napísal Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "Koncové zariadenie FluidSynth "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
-"This backend produces audio by sending MIDI events to FluidSynth, a real-"
-"time software synthesizer based on the SoundFont2 specification (www."
-"fluidsynth.org).\n"
-"Produced audio can be manipulated via player effect plugins and is processed "
-"by chosen ouput plugin.\n"
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
-"Toto koncové zariadenie vytvára zvuk posielaním MIDI udalostí do FluidSynth "
-"(softvérový syntetizátor pracujúci v reálnom Äase založený na Å¡pecifikácii "
-"SoundFont2 www.fluidsynth.org).\n"
-"Vyprodukovaný zvuk môže byÅ¥ upravený efektovými modulmi prehrávaÄa a "
-"následne je spracovaný zvoleným výstupným modulom.\n"
+"Toto koncové zariadenie vytvára zvuk posielaním MIDI udalostí do FluidSynth (softvérový syntetizátor pracujúci v reálnom Äase založený na Å¡pecifikácii SoundFont2 www.fluidsynth.org).\n"
+"Vyprodukovaný zvuk môže byÅ¥ upravený efektovými modulmi prehrávaÄa a následne je spracovaný zvoleným výstupným modulom.\n"
"OvládaÄ koncového zariadenia napísal Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "KONFIGURÃCIA KONCOVÉHO ZARIADENIE PRE ALSA"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "Názov klienta"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Názov portu"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "Výstupné porty ALSA"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Zvuková karta: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Ovládanie mixéra: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Nastavenia mixéra"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* Vyberte výstupné porty ALSA *\n"
-"MIDI udalosti budú zasielané tu vybraným portom. Napríklad, ak vaša zvuková "
-"karta poskytuje hardvérový syntetizátor a chcete ho použiť na prehrávanie, "
-"budete pravdepodobne potrebovať vybrať porty wavetable syntetizátora."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Vyberte kartu ALSA mixéra *\n"
-"OvládaÄ koncového zariadenia ALSA posiela výstup priamo cez ALSA. Nepoužíva "
-"moduly efektov a výstupu prehrávaÄa. PoÄas prehrávania bude ovládanie "
-"hlasitosti používať mixér, ktorý tu vyberiete. Ak používate porty wavetable "
-"syntetizátora, budete pravdepodobne chcieť použiť \"Ovládanie syntézy\"."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* Vyberte ovládanie ALSA mixéra *\n"
-"OvládaÄ koncového zariadenia ALSA posiela výstup priamo cez ALSA. Nepoužíva "
-"moduly efektov a výstupu prehrávaÄa. PoÄas prehrávania bude ovládanie "
-"hlasitosti používať mixér, ktorý tu vyberiete. Ak používate porty wavetable "
-"syntetizátora, budete pravdepodobne chcieť použiť \"Ovládanie syntézy\"."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr ""
"OvládaÄ koncového zariadenia ALSA nie je naÄítaný, alebo nie je dostupný"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -769,148 +438,51 @@ msgstr ""
"<span size=\"smaller\">Koncové zariadenie\n"
"ALSA</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - podrobnosti o koncovom zariadení"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "PREDVOĽBY AMIDI-PLUG"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Výber koncového zariadenia"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Dostupné koncové zariadenia"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Nastavenie prehrávania"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Transponovať: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Posun bicích: "
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "PokroÄilé nastavenia"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "dopredu vypoÄítaÅ¥ dĺžku MIDI súborov v zozname skladieb"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "extrahovať komentáre z MIDI súboru (ak existujú)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "extrahovať slová z MIDI súboru (ak existujú)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Výber koncového zariadenia *\n"
-"AMIDI-Plug pracuje s koncovými zariadeniami modulárnym spôsobom. Tu by ste "
-"si mali vybraÅ¥ ovládaÄ, to znamená spôsob, akým budú MIDI udalosti "
-"spracovávané a prehrávané.\n"
-"Ak na vašej zvukovej karte máte hardvérový syntetizátor, a ALSA ho "
-"podporuje, je rozumné použiÅ¥ ovládaÄ ALSA. Môže byÅ¥ tiež použitý s "
-"Äímkoľvek, Äo poskytuje rozhranie k sekvencéru ALSA, vrátane softvérového "
-"syntetizátora a externých zariadení.\n"
-"Ak sa budete chcieť spoľahnúť na softvérový syntetizátor a/alebo budete "
-"chcieÅ¥ zvuk spracovaÅ¥ efektovým a výstupným modulom prehrávaÄa, dobrou "
-"voľbou bude ovládaÄ FluidSynth.\n"
-"Podrobnosti o jednotlivých ovládaÄoch získate po stlaÄení tlaÄítka "
-"„Podrobnosti“."
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* Funkcia transpozície *\n"
-"Táto voľba umožňuje prehraÅ¥ MIDI súbor transponovaný o zadaný poÄet poltónov "
-"(okrem stopy 10, ktorá je vyhradené pre bicie). Funkcia je užitoÄná, ak "
-"chcete spievať alebo hrať s iným nástrojom spolu so skladbou."
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Funkcia posunu bicích *\n"
-"Táto funkcia umožňuje posun tónov na 10. MIDI kanáli (štandardný kanál pre "
-"bicie) o zadaný poÄet poltónov. Výsledkom je použitie inej sady bicích poÄas "
-"prehrávania. Takže ak chcete vylepÅ¡iÅ¥ (stlmiÅ¥ Äi inak upraviÅ¥) zvuk bicích, "
-"pohrajte sa s touto hodnotou."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* Dopredu vypoÄítaÅ¥ dĺžku MIDI skladby *\n"
-"Ak je táto voľba povolená, AMIDI-Plug vypoÄíta dĺžku MIDI súboru okamžite, "
-"ako o ňu prehrávaÄ požiada. Inak bude dĺžka skladby vypoÄítaná až pri prvom "
-"prehraní. Vypnutím tejto voľby sa zrýchli naÄítanie zoznamu skladieb (hlavne "
-"ak obsahuje veľa MIDI súborov). Túto funkciu zapnite ak potrebujete vidieť "
-"dĺžku skladieb okamžite po naÄítaní zoznamu."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"* NaÄítaÅ¥ komentáre z MIDI súborov *\n"
-"Niektoré MIDI súbory obsahujú textové komentáre (autora, autorské práva, "
-"poznámky k nástrojom, atÄ.). Ak je táto voľba povolená, AMIDI-Plug tieto "
-"komentáre naÄíta (ak existujú) a zobrazí v okne s podrobnosÅ¥ami o súbore."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"* NaÄítaÅ¥ slová z MIDI súborov *\n"
-"Niektoré MIDI súbory obsahujú text piesne. Ak je táto voľba povolená, AMIDI-"
-"Plug text naÄíta (ak existuje) a zobrazí ho v okne s podrobnosÅ¥ami o súbore."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -918,232 +490,115 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - vyberte súbor"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - nastavenie"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - vyberte SoundFont súbor"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "NASTAVENIE KONCOV0HO ZARIADENIA FLUIDSYNTH"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "Nastavenia SoundFont"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Názov súboru"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Veľkosť (v bajtoch)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "NaÄítaÅ¥ SoundFont pri spustení prehrávaÄa"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "NaÄítaÅ¥ SoundFont pri prehrávaní prvého MIDI súboru"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Nastavenia syntetizátora"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "zosilnenie"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "použiť predvolené"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "hodnota:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "viachlas"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "dozvuk"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "áno"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "nie"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "zbor"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "vzorkovacia frekvencia"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "vlastná "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* Výber SoundFont súborov *\n"
-"Ak chcete prehrávať MIDI súbory pomocou FluidSynth, musíte zadať aspoň jeden "
-"SoundFont súbor (použite absolútne cesty). Poradie pri nahrávaní je zhora "
-"nadol."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* NaÄítaÅ¥ SoundFont pri Å¡tarte prehrávaÄa *\n"
-"V závislosti od rýchlosti vášho systému môže trvaÅ¥ naÄítanie súborov "
-"SoundFont do FluidSynth niekoľko sekúnd. Ide o jednorázovú úlohu (súbor "
-"ostane naÄítaný kým nebude nahradený iným, alebo kým nezakážete ovládaÄ "
-"FluidSynth), ktorá môže byÅ¥ vykonaná pri Å¡tarte prehrávaÄa, alebo pred "
-"prehrávaním prvého MIDI súboru (druhá možnosť je výhodnejšia v prípade, ak "
-"prehrávaÄ nepoužívate iba na prehrávanie MIDI súborov)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* NaÄítaÅ¥ SoundFont pred prehrávaním prvého MIDI súboru *\n"
-"V závislosti od rýchlosti vášho systému môže trvaÅ¥ naÄítanie súborov "
-"SoundFont do FluidSynth niekoľko sekúnd. Ide o jednorázovú úlohu (súbor "
-"ostane naÄítaný kým nebude nahradený iným, alebo kým nezakážete ovládaÄ "
-"FluidSynth), ktorá môže byÅ¥ vykonaná pri Å¡tarte prehrávaÄa, alebo pred "
-"prehrávaním prvého MIDI súboru (druhá možnosť je výhodnejšia v prípade, ak "
-"prehrávaÄ nepoužívate iba na prehrávanie MIDI súborov)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* Zosilnenie syntetizátora *\n"
-"Z dokumentácie FluidSynth: zosilnenie je použité na koneÄný alebo hlavný "
-"výstup syntetizátora. Aby sa zabránilo skresleniu pri prehrávaní rôznorodých "
-"MIDI súborov je štandardne nastavené na nízku hodnotu."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* Viachlas syntetizátora *\n"
-"Z dokumentácie FluidSynth: viachlas urÄuje, koľko sa môže naraz hraÅ¥ hlasov. "
-"PoÄet hlasov nie je nutne zhodný s poÄtom súÄasne hraných nôt. KeÄ je nota "
-"vyslaná na urÄitom MIDI kanáli, nastavenie kanála môže spôsobiÅ¥ vytvorenie "
-"viacerých hlasov (napr. jeden pre ľavý zvukový kanál a jeden pre pravý). "
-"PoÄet aktivovaných hlasov závisí na poÄte nástrojových zón, ktoré "
-"zodpovedajú rýchlosti a kľúÄu hraných nôt."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Dozvuk syntetizátora *\n"
-"Z dokumentácie FluidSynth: ak je nastavené na „áno“ je modul efektu dozvuku "
-"aktivovaný. Veľkosť signálu zasielaného do tohoto modulu závisí na "
-"generátore „posielania dozvuku“, ktorý je definovaný v SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Zbor syntetizátora *\n"
-"Z dokumentácie FluidSynth: ak je nastavené na „áno“ je modul efektu zboru "
-"aktivovaný. Veľkosť signálu zasielaného do tohoto modulu závisí na "
-"generátore „posielania zboru“, ktorý je definovaný v SoundFont."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Vzorkovacia frekvencia syntetizátora *\n"
-"Vzorkovacia frekvencia zvuku generovaného syntetizátorom. Môžete zadať "
-"vlastnú hodnotu z intervalu 22050Hz-96000Hz.\n"
-"Poznámka: štandardné parametre pre vyrovnávaciu pamäť sú nastavené pre "
-"frekvenciu 44100Hz. Dosiahnutie dobrej kvality zvuku bude možno vyžadovať "
-"úpravu týchto parametrov."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr ""
"OvládaÄ koncového zariadenia FluidSynth nie je naÄítaný, alebo nie je "
"dostupný"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1167,8 +622,7 @@ msgstr ""
"<span size=\"smaller\">Koncové zariadenie\n"
"TiMidity</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr "Názov:"
@@ -1294,19 +748,19 @@ msgstr "Konkávny obdĺžnik"
msgid "None"
msgstr "Žiadne"
-#: src/aosd/aosd_trigger.c:77
+#: src/aosd/aosd_trigger.c:78
msgid "Playback Start"
msgstr "ZaÄiatok prehrávania"
-#: src/aosd/aosd_trigger.c:78
+#: src/aosd/aosd_trigger.c:79
msgid "Triggers OSD when a playlist entry is played."
msgstr "OSD sa zobrazí pri zahájení prehrávania položky zo zoznamu skladieb."
-#: src/aosd/aosd_trigger.c:82
+#: src/aosd/aosd_trigger.c:83
msgid "Title Change"
msgstr "Zmena názvu"
-#: src/aosd/aosd_trigger.c:83
+#: src/aosd/aosd_trigger.c:84
msgid ""
"Triggers OSD when, during playback, the song title changes but the filename "
"is the same. This is mostly useful to display title changes in internet "
@@ -1316,219 +770,215 @@ msgstr ""
"nezmenené. Je to hlavne vhodné na zobrazenie zmien názvov skladieb pri "
"prehrávaní internetových prúdov."
-#: src/aosd/aosd_trigger.c:89
+#: src/aosd/aosd_trigger.c:90
msgid "Volume Change"
msgstr "Zmena hlasitosti"
-#: src/aosd/aosd_trigger.c:90
+#: src/aosd/aosd_trigger.c:91
msgid "Triggers OSD when volume is changed."
msgstr "OSD sa zobrazí pri zmene hlasitosti."
-#: src/aosd/aosd_trigger.c:94
+#: src/aosd/aosd_trigger.c:95
msgid "Pause On"
msgstr "Pozastavenie prehrávania"
-#: src/aosd/aosd_trigger.c:95
+#: src/aosd/aosd_trigger.c:96
msgid "Triggers OSD when playback is paused."
msgstr "OSD sa zobrazí pri pozastavení prehrávania."
-#: src/aosd/aosd_trigger.c:99
+#: src/aosd/aosd_trigger.c:100
msgid "Pause Off"
msgstr "Obnovenie prehrávania"
-#: src/aosd/aosd_trigger.c:100
+#: src/aosd/aosd_trigger.c:101
msgid "Triggers OSD when playback is unpaused."
msgstr "OSD sa zobrazí keÄ je prehrávanie obnovené."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:179
msgid "Placement"
msgstr "Umiestnenie"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:218
msgid "Relative X offset:"
msgstr "Relatívne odsadenie v smere osi X:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:227
msgid "Relative Y offset:"
msgstr "Relatívne odsadenie v smere osi Y:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:236
msgid "Max OSD width:"
msgstr "Maximálna šírka OSD:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:249
msgid "Multi-Monitor options"
msgstr "Nastavenia pre viac monitorov"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:253
msgid "Display OSD using:"
msgstr "Zobraziť OSD na:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:264
msgid "all monitors"
msgstr "všetkých monitoroch"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:267
#, c-format
msgid "monitor %i"
msgstr "monitore %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:322
msgid "Timing (ms)"
msgstr "ÄŒasovanie (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:327
msgid "Display:"
msgstr "Zobrazenie:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:332
msgid "Fade in:"
msgstr "Rozsvietenie:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:337
msgid "Fade out:"
msgstr "Zhasnutie:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:418
msgid "Fonts"
msgstr "Písma"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:426
#, c-format
msgid "Font %i:"
msgstr "Písmo %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:443
msgid "Shadow"
msgstr "Tieň"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:478
msgid "Internationalization"
msgstr "Internacionalizácia"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:484
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Zakázať prevod textu do kódovania UTF-8 (v knižnici aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:502
msgid "Select Skin File"
msgstr "Vyberte súbor s vzhľadom"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:613
msgid "Render Style"
msgstr "Štýl zobrazenia"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:629
msgid "Colors"
msgstr "Farby"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:642
#, c-format
msgid "Color %i:"
msgstr "Farba %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:662
msgid "Custom Skin"
msgstr "Používateľský vzhľad"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:668
msgid "Skin file:"
msgstr "Súbor s vzhľadom:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:671
msgid "Browse"
msgstr "Prechádzať"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:773
msgid "Enable trigger"
msgstr "PovoliÅ¥ spúšťaÄ"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:800
msgid "Event"
msgstr "Udalosť"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:828
msgid "Composite manager detected"
msgstr "Bol zistený kompozitný správca"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:835
msgid ""
"Composite manager not detected;\n"
-"unless you know that you have one running, please activate a composite "
-"manager otherwise the OSD won't work properly"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
msgstr ""
"Nebol nájdený kompozitný správca.\n"
-"Ak viete, že žiadny nebeží, prosím, aktivujte kompozitného správcu, inak "
-"nebude OSD pracovať správne"
+"Ak viete, že žiadny nebeží, prosím, aktivujte kompozitného správcu, inak nebude OSD pracovať správne"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:843
msgid "Composite manager not required for fake transparency"
msgstr "Pri falošnej priehľadnosti nie je potrebný kompozitný správca"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:881
msgid "Transparency"
msgstr "Priehľadnosť"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:887
msgid "Fake transparency"
msgstr "Falošná priehľadnosť"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:889
msgid "Real transparency (requires X Composite Ext.)"
msgstr "SkutoÄná priehľadnosÅ¥ (vyžaduje kompozitné rozšírenie X servera)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:931
msgid "Composite extension not loaded"
msgstr "Kompozitné rozšírenie nie je naÄítané"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:939
msgid "Composite extension not available"
msgstr "Kompozitné rozšírenie nie je dostupné"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:958
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>OSD Audacious</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1039
msgid "Audacious OSD - configuration"
msgstr "OSD pre Audacious - nastavenie"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1060
msgid "Test"
msgstr "Vyskúšať"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1075
msgid "Position"
msgstr "Umiestnenie"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1080
msgid "Animation"
msgstr "Animácia"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1085
msgid "Text"
msgstr "Text"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1090
msgid "Decoration"
msgstr "Výzdoba"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1095
msgid "Trigger"
msgstr "SpúšťaÄ"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "Rôzne"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1137
msgid "Audacious OSD - about"
msgstr "O module OSD pre Audacious"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1167
msgid ""
"\n"
"Audacious OSD "
@@ -1536,7 +986,7 @@ msgstr ""
"\n"
"OSD pre Audacious "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1558,151 +1008,37 @@ msgstr ""
"http://neugierig.org/software/ghosd/\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "Požiadavka o spárovanie pre '%s'"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "Požiadavka o autorizáciu pre '%s'"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "Vytvorené prepojenie s %s"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "Odstránené prepojenie s %s"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "Zariadenie bolo vypnuté"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr "Zariadenie už nebude zistiteľné"
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr "K zariadeniu sa bude môcť pripájať"
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr "Zariadenie bude zistiteľné"
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr "Zariadenie bude obmedzene zistiteľné"
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr "Zariadenie bolo prepnuté do párovacieho režimu"
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr "Modul podporujúci bluetooth slúchadlové súpravy"
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-"Podpora bluetooth slúchadlových súprav\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"Toto bol GSoC 2008 projekt. Veľká vÄaka patrí Tonymu Vroonovi a tímu "
-"Audacious\n"
-"\n"
-"Ak sa rozhodnete používať AVRCP budete musieť do jadra zaviesť modul "
-"uinput.\n"
-"TlaÄítka súpravy sa budú tváriÅ¥ ako normálne multimediálne klávesy\n"
-"a môžu byť nastavené pomocou modulu „Globálne klávesové skratky“\n"
-"alebo inými nástrojmi, ktoré poskytuje váš správca okien\n"
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "Výrobca"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "Dostupné slúchadlové súpravy"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "Aktuálna slúchadlová súprava"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "_Obnoviť"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "_Spojiť"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "_Zatvoriť"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "Trieda"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "Adresa:"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "Prepojenie vytvorené!"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "Nebolo nájdené žiadne zariadenie."
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "Vyhľadávanie…"
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "Párovanie…"
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "Znovu vyhľadať"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "Prehrať"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Blur Scope: Výber farby"
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "Možnosti:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "Predvoľby Bauer stereophonic-to-binaural"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Úroveň zdroja:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "Frekvencia pre vystrihnutie:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Predvoľby:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid "About Audio CD Plugin"
msgstr "O module zvukových CD"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:243
msgid ""
-"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
"\n"
"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
@@ -1715,8 +1051,7 @@ msgid ""
msgstr ""
"Copyright (c) 2007, Calin Crisan <ccrisan@gmail.com> a tím Audacious.\n"
"\n"
-"Veľká vÄaka patrí vývojárom libcdio <http://www.gnu.org/software/libcdio/> a "
-"libcddb <http://libcddb.sourceforge.net/>.\n"
+"Veľká vÄaka patrí vývojárom libcdio <http://www.gnu.org/software/libcdio/> a libcddb <http://libcddb.sourceforge.net/>.\n"
"\n"
"Taktiež Äakujem Tonymu Vroonovi za rady a vedenie.\n"
"\n"
@@ -1724,124 +1059,153 @@ msgstr ""
"\n"
"Copyright 2009 John Lindgren"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Zvukové CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Mechanika je prázdna."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Nepodporovaný typ disku."
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "Nastavenie modulu zvukových CD"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Digitálne získane zvuku"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Informácie o titule"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "Rýchlosť disku:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Ak je k dispozícii, použiť cd-text"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Ak je k dispozícii, použiť CDDB"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Server: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "Cesta: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "Namiesto CDDBP použiť HTTP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Nahradiť predvolené zariadenie: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "OK"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "Prehrať CD"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "Pridať CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
msgstr "O module Kompresia dynamického rozsahu"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
msgstr "Nastavenia kompresie dynamického rozsahu"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr "Cieľová hlasitosť:"
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Stredná hlasitosť:"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr "Sila efektu:"
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Dynamický rozsah:"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
msgstr "Dekodér konzolovej hudby"
-#: src/console/configure.c:171
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Všeobecné"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Prehrávanie"
+
+#: src/console/configure.c:170
msgid "Bass:"
msgstr "Hĺbky:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
msgstr "s"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
msgstr "Výšky:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
msgstr "Predvolená dĺžka skladby:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
msgstr "Prevzorkovanie"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
msgstr "Povoliť prevzorkovanie zvuku"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
msgstr "Prevzorkovať na:"
-#: src/console/configure.c:245
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
msgstr "IgnorovaÅ¥ dĺžku z SPC znaÄiek"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
msgstr "Predĺžiť dozvuk"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
-"The default song length, expressed in seconds, is used for songs that do not "
-"provide length information (i.e. looping tracks)."
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
msgstr ""
"Predvolená dĺžka skladby, vyjadrená v sekundách, je použitá pri skladbách, "
"ktoré neposkytujú informáciu o dĺžke (napr. skladby s opakovaním)."
@@ -1862,53 +1226,51 @@ msgstr ""
"Pre Audacious upravili: William Pitcock <nenolod@nenolod.net>,\n"
" Shay Green <gblargg@gmail.com>\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
msgstr "O module Prelínanie (crossfade)"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
msgstr "Predvoľby prelínania"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
msgstr "Presah (v sekundách):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
msgstr "Chyba prelínania"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr "Prelínanie zlyhalo, pretože skladby majú rôzny poÄet kanálov."
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
-"You can use the Sample Rate Converter effect to resample the songs to the "
-"same rate."
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
msgstr ""
"Prelínanie zlyhalo, pretože skladby majú rozdielnu vzorkovaciu frekvenciu:\n"
"\n"
-"Na prevzorkovanie skladieb na rovnakú frekvenciu môžete použiť efektový "
-"modul „Konvertor vzorkovacej frekvencie“."
+"Na prevzorkovanie skladieb na rovnakú frekvenciu môžete použiť efektový modul „Konvertor vzorkovacej frekvencie“."
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
msgstr "Nastaviť Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
msgstr "Sila efektu:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
msgstr "Použiť"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1920,680 +1282,245 @@ msgstr ""
"\n"
"Priestorovú ozvenu pridal Carl van Shaik, 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "O module ozveny"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
msgstr "Nastaviť ozvenu"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
msgstr "Oneskorenie: (ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
msgstr "Spätná väzba: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
msgstr "Hlasitosť: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Prehrávanie->Prehrať"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Prehrávanie->Zastaviť"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Prehrávanie->Pozastaviť"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Prehrávanie->Predchádzajúca"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Prehrávanie->Ďalšia"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Prehrávanie->Vysunúť"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Zoznam skladieb->Opakovať"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Zoznam skladieb->Premiešať zoznam"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Hlasitosť->Zvýšiť o 5"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Hlasitosť->Znížiť o 5"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Hlasitosť->Zvýšiť o 10"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Hlasitosť->Znížiť o 10"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Hlasitosť->Stlmiť"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Okno->Hlavné"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Okno->Zoznam skladieb"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Okno->Ekvalizér"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Okno->Prejsť na súbor"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: zariadenie %s sa nedá otvoriť, toto zariadenie sa "
-"vynechá; skontrolujte, Äi súbor zariadenia existuje a Äi máte právo ho "
-"ÄítaÅ¥\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: vstupno-výstupný kanál pre zariadenie %s sa nedá "
-"vytvoriť, zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: súbor /proc/bus/input/devices sa nedá otvoriť, "
-"automatické detekcia udalostných zariadení nebude fungovať.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: vstupno-výstupný kanál pre /proc/bus/input/devices sa "
-"nedá otvoriť, automatické detekcia udalostných zariadení nebude fungovať.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: pri Äítaní /proc/bus/input/devices nastala chyba, "
-"automatické detekcia udalostných zariadení nebude fungovať.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: zariadenie %s nebolo nájdené v /dev/input; zariadenie "
-"bude vynechané.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
+#: src/ffaudio/ffaudio-core.c:798
#, c-format
msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: konfiguraÄný súbor %s sa nedá naÄítaÅ¥,budú použité "
-"predvolené nastavenia.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: v konfiguraÄnom súbore sú neúplné informácie pre "
-"zariadenie „%s“, zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurácia: nedá sa získať hodnota is_active pre "
-"zariadenie „%s“, zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: prístup k lokálnemu adresáru %s bol odoprený, "
-"nastavenia nebudú uložené.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurácia: hodnotu filename pre zariadenie „%s“ sa "
-"nepodarilo získať, zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurácia: hodnotu phys pre zariadenie „%s“ sa "
-"nepodarilo získať, zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurácia: hodnotu is_custom pre zariadenie „%s“ sa "
-"nepodarilo získať, zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: konfigurácia: neoÄakávaná hodnota pre zariadenie „%s“, "
-"zariadenie bude vynechané\n"
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr "Nájdené"
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr "Vlastné"
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr "Nenájdené"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Podrobnosti"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Okno s prepojeniami pre nenájdené zariadenie sa nedá otvoriť.\n"
-"Uistite sa, že zariadenie je správne pripojené."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Chyba"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Zvolené zariadenie sa nedá otvoriť.\n"
-"Skontrolujte prosím, práva na Äítanie tohoto zariadenia."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Pridať vlastné zariadenie"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug sa pokúsi automaticky zistiť udalostné zariadenia dostupné\n"
-"v systéme a aktualizovať o nich informácie.\n"
-"Ak autodetekcia na vašom systéme nepracuje správne, alebo máte udalostné\n"
-"zariadenia v neÅ¡tandardnom adresári (v súÄastnosti je prehľadávaný iba "
-"adresár\n"
-"/dev/input), môžete pridať vlastné zariadenia."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Názov zariadenia:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Súbor zariadenia:"
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr "(vlastné)"
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Prosím zadajte názov a názov súboru.\n"
-"Názov súboru musí byť uvedené s absolútnou cestou."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "Prajete si odstrániť existujúce nastavenie pre zvolené zariadenie?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Prajete si odstrániť zvolené vlastné zariadenie?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - Nastavenie"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Aktívne"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Stav"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Názov zariadenia"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Súbor zariadenia"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Adresa zariadenia"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Prepojenia"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Na zariadení stlaÄte kláves, ktorý si želáte prepojiÅ¥.\n"
-"Ak nebude stlaÄený žiadny kláves bude toto okno\n"
-"automaticky o päť sekúnd zatvorené."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Táto vstupná udalosť už bola priradená.\n"
-"\n"
-"Nie je možné priradiť viac akcií rovnakej vstupnej udalosti (je ale možné "
-"priradiť jednu akciu viacerým vstupným udalostiam)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Nastavenie prepojení"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Názov: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Názov súboru: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Fyzická adresa: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "O module EvDev-Plug"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"diaľkové ovládanie prehrávaÄa pomocou udalostných zariadení\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"napísal Giacomo Lozito\n"
-
-#: src/ffaudio/ffaudio-core.c:662
-#, fuzzy, c-format
-msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
-msgstr ""
-"Viacformátový modul dekódujúci zvuk pre Audacious založený\n"
-"na multimediálnom systéme FFmpeg (http://www.ffmpeg.org/)\n"
-"Copyright (c) 2000-2009 Fabrice Bellard, ai.\n"
-"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
"\n"
-"Podporované formáty: %s\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Multi-formátový dekódujúci modul zvuku pre Audacious založený na multimediálnom frameworku FFmpeg (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"Modul pre Audacious napísali:\n"
+"Modul do Audacious:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:812
msgid "About FFaudio Plugin"
msgstr "O module FFaudio"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
msgstr "O module FileWriter"
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Modul FileWriter\n"
-"\n"
-"Tento program je slobodný softvér. Môžete ho šíriť a/alebo upravovať podľa "
-"ustanovení GNU GPL, vydávanej nadáciou Free Software Foundation; buÄ vo "
-"verzii 2 tejto licencie, alebo (podľa vášho uváženia) v ľubovoľnej novšej "
-"verzii.\n"
-"\n"
-"Tento program je rozÅ¡irovaný v nádeji, že bude užitoÄný, ale BEZ AKEJKOĽVEK "
-"ZÃRUKY. Neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo VHODNOSTI PRE "
-"URČITà ÚČEL. Ďalšie podrobnosti hľadajte v GNU GPL.\n"
-"\n"
-"Kópiu GNU GPL ste mali dostať spolu s týmto programom. Ak sa tak nestalo, "
-"požiadajte o ňu Free Software Foundation, Inc., 51 Franklin Street, Fifth "
-"Floor, Boston, MA 02110-1301, USA."
-
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:461
msgid "File Writer Configuration"
msgstr "Nastavenie zápisu do súboru"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:473
msgid "Output file format:"
msgstr "Formát výstupného súboru:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:491
msgid "Configure"
msgstr "Nastaviť"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:506
msgid "Save into original directory"
msgstr "Ukladať do pôvodného adresára"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:511
msgid "Save into custom directory"
msgstr "Ukladať do vlastného adresára"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:521
msgid "Output file folder:"
msgstr "PrieÄinok s výstupnými súbormi:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:525
msgid "Pick a folder"
msgstr "VybraÅ¥ prieÄinok"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:544
msgid "Get filename from:"
msgstr "Získať názov súboru z:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:547
msgid "original file tags"
msgstr "pôvodných znaÄiek v súbore"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:553
msgid "original filename"
msgstr "názvu pôvodného súboru"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:563
msgid "Don't strip file name extension"
msgstr "Neodstraňovať príponu názvu súboru"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Ak je povolené, prípona z názvu pôvodného súboru nebude pred pridaním novej "
-"prípony odstránená."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:578
msgid "Prepend track number to filename"
msgstr "Na zaÄiatok názvu súboru pridaÅ¥ Äíslo stopy"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Auto"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Joint Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:706
msgid "MP3 Configuration"
msgstr "Nastavenie MP3"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:729
msgid "Algorithm Quality:"
msgstr "Kvalita algoritmu:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"najlepší/najpomalší:0;\n"
-"najhorší/najrýchlejší:9;\n"
-"odporúÄaná:2;\n"
-"predvolená:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:754
msgid "Output Samplerate:"
msgstr "Výstupná vzorkovacia frekvencia:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Auto"
-
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:782
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:789
msgid "Bitrate / Compression ratio:"
msgstr "Dátový tok / kompresný pomer:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:813
msgid "Bitrate (kbps):"
msgstr "Dátový tok (kb/s):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:846
msgid "Compression ratio:"
msgstr "Kompresný pomer:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:870
msgid "Audio Mode:"
msgstr "Zvukový režim:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "Joint-Stereo"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:895
msgid "Misc:"
msgstr "Rôzne:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:906
msgid "Enforce strict ISO complience"
msgstr "Vynútiť prísnu zhodu s ISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:917
msgid "Error protection"
msgstr "Ochrana pred chybami"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Ku každému rámcu pridaÅ¥ 16 bitový kontrolný súÄet"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
msgid "Quality"
msgstr "Kvalita"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:939
msgid "Enable VBR/ABR"
msgstr "Povoliť VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:949
msgid "Type:"
msgstr "Typ:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Variabilný dátový tok"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Priemerný dátový tok"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:982
msgid "VBR Options:"
msgstr "Nastavenia VBR:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:998
msgid "Minimum bitrate (kbps):"
msgstr "Najmenší dátový tok (kb/s):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1025
msgid "Maximum bitrate (kbps):"
msgstr "NajväÄší dátový tok (kb/s):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1048
msgid "Strictly enforce minimum bitrate"
msgstr "Prísne vynucovať najmenší dátový tok"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Pre použitie v prehrávaÄoch, ktoré nepodporujú mp3 s nízkym dátovým tokom "
-"(prehrávaÄ Apex AD600-A DVD/MP3)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1060
msgid "ABR Options:"
msgstr "Nastavenia ABR:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1070
msgid "Average bitrate (kbps):"
msgstr "Priemerný dátový tok (kb/s):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1098
msgid "VBR quality level:"
msgstr "Úroveň kvality VBR:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"najvyššia:0;\n"
-"najnižšia:9;\n"
-"predvolená:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1117
msgid "Don't write Xing VBR header"
msgstr "NezapisovaÅ¥ hlaviÄku Xing VBR"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1131
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1141
msgid "Frame params:"
msgstr "Parametre rámcov:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1153
msgid "Mark as copyright"
msgstr "PridaÅ¥ oznaÄenie autorských práv"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1164
msgid "Mark as original"
msgstr "PridaÅ¥ oznaÄenie originálu"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1176
msgid "ID3 params:"
msgstr "Parametre ID3:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1187
msgid "Force addition of version 2 tag"
msgstr "VynútiÅ¥ pridanie znaÄiek verzie 2"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1197
msgid "Only add v1 tag"
msgstr "PridávaÅ¥ iba znaÄky verzie 1"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1204
msgid "Only add v2 tag"
msgstr "PridávaÅ¥ iba znaÄky verzie 2"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1225
msgid "Tags"
msgstr "ZnaÄky"
@@ -2605,11 +1532,11 @@ msgstr "Nastavenie kodéra Vorbis"
msgid "Quality level (0 - 10):"
msgstr "Úroveň kvality (0-10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "Modul Flac Audio "
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "O module FLAC Audio"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:381
msgid ""
"\n"
"\n"
@@ -2625,15 +1552,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "O module FLAC Audio"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "O module Klávesové skratky Gnome"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2647,488 +1570,443 @@ msgstr ""
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
-msgid "Open Files"
-msgstr "Otvoriť súbory"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Číslo položky"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
-msgid "Add Files"
-msgstr "Pridať súbory"
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Názov"
-#: src/gntui/gntui.c:271
-msgid "Audacious2"
-msgstr "Audacious2"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Umelec"
-#: src/gntui/gntui.c:312
-msgid "gnt interface"
-msgstr "GNT rozhranie"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Rok"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "KeÄ sa neprehráva žiadna skladba nie je možné prejsÅ¥ na Äas.\n"
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Album"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "PrejsÅ¥ na Äas"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Stopa"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "minúty:sekundy"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Poradie vo fronte"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "Dĺžka skladby:"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Dĺžka"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "Chyba pri ukladaní zoznamu skladieb „%s“: %s"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Cesta k súboru"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s už existuje. PokraÄovaÅ¥?"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Názov súboru"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "Exportovať zoznam skladieb"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Vlastný názov"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "Importovať zoznam skladieb"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Dátový tok"
-#: src/gtkui/ui_gtk.c:72
-#, fuzzy
-msgid "GTK Interface"
-msgstr "GNT rozhranie"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Vybrať stĺpce"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Dostupné:"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Vybrané:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "ZastaviÅ¥ po skonÄení aktuálnej skladby"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Ukotviť vľavo"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "Opakovať"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Ukotviť vpravo"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "Náhodné poradie"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Ukotviť hore"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "NeprehrávaÅ¥ ÄalÅ¡iu skladbu zo zoznamu"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Ukotviť dole"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "Zobraziť zoznamy skladieb"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Uvolniť"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "Zobrazí alebo skryje zoznamy skladieb"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Zakázať"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "ZobraziÅ¥ informaÄnú plochu"
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "_Otvoriť súbory ..."
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "Zobrazí alebo skryje informaÄnú plochu"
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Otvoriť _URL ..."
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "Zobraziť hlavnú ponuku"
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "Prid_ať súbory ..."
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "Zobrazí alebo skryje hlavnú ponuku"
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Pridať U_RL ..."
-#: src/gtkui/ui_manager.c:56
-#, fuzzy
-msgid "Show statusbar"
-msgstr "Stav"
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "_O programe ..."
-#: src/gtkui/ui_manager.c:57
-#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Zobrazí alebo skryje zoznamy skladieb"
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_Predvoľby"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "Pozastaviť"
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Koniec"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "Zastaviť"
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Hrať"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "Predchádzajúca"
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "P_ozastaviť"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "Nasledujúca"
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "Za_staviť"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "Zoznam skladieb"
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "Pred_chádzajúca"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "Nový zoznam skladieb"
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_Nasledujúca"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "Zmazať zoznam skladieb"
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "O_pakovať"
-#: src/gtkui/ui_manager.c:92
-#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Importovať zoznam skladieb"
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "Ná_hodné prehrávanie"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "Pridá súbor so zoznamom do vybraného zoznamu skladieb."
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "Nep_okraÄovaÅ¥ podľa zoznamu skladieb"
-#: src/gtkui/ui_manager.c:95
-#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Exportovať zoznam skladieb"
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Zastaviť po tejto skl_adbe"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "Uloží vybraný zoznam skladieb."
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "_Informácie o skladbe ..."
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "Uložiť všetky zoznamy skladieb"
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "S_koÄiÅ¥ na Äas ..."
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
-"Uloží všetky otvorené zoznamy skladieb. Berte na vedomie, že toto je "
-"automaticky urobené pri ukonÄovaní Audacious."
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "SkoÄiÅ¥ na sk_ladbu ..."
-#: src/gtkui/ui_manager.c:103
-#, fuzzy
-msgid "Refresh"
-msgstr "_Obnoviť"
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Podľa Äí_sla stopy"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "Obnovuje metadáta patriace k skladbe zo zoznamu."
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Podľa _názvu"
-#: src/gtkui/ui_manager.c:107
-#, fuzzy
-msgid "Playlist Manager"
-msgstr "Správca zoznamov"
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Podľa _umelca"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "Otvorí správcu zoznamov skladieb."
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Podľa a_lbumu"
-#: src/gtkui/ui_manager.c:111
-#, fuzzy
-msgid "Add URL ..."
-msgstr "Pridať súbory…"
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Podľa dátumu vy_dania"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "Do zoznamu skladieb pridá vzdialenú stopu."
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Podľa _cesty k súboru"
-#: src/gtkui/ui_manager.c:115
-#, fuzzy
-msgid "Add Files ..."
-msgstr "Pridať súbory…"
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Podľa vlastného ná_zvu"
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "Do zoznamu skladieb pridá súbory."
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Obrátené poradie"
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "Odstrániť všetky"
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "Náhodné po_radie"
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "Zo zoznamu odstráni všetky skladby."
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Obnoviť"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "OdstrániÅ¥ neoznaÄené"
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Odstrániť nedost_upné súbory"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "Zo zoznamu odstráni neoznaÄené skladby."
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Zoradiť"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "OdstrániÅ¥ oznaÄené"
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Nový"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "Zo zoznamu odstráni oznaÄené skladby."
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Zatvoriť"
-#: src/gtkui/ui_manager.c:131
-#, fuzzy
-msgid "Sort"
-msgstr "Port"
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Importovať ..."
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "Podľa Äísla stopy"
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_Exportovať ..."
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "Podľa názvu"
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "S_právca zoznamu skladieb ..."
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "Podľa umelca"
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Správca _fronty .."
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "Podľa albumu"
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "Zo_silniť"
-#: src/gtkui/ui_manager.c:140
-#, fuzzy
-msgid "By File Path"
-msgstr "Podľa názvu súboru"
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "S_tíšiť"
-#: src/gtkui/ui_manager.c:142
-#, fuzzy
-msgid "Reverse Order"
-msgstr "Obrátiť poradie"
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Ekvalizér"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "Výstup"
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "E_fekty"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efekty"
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_Rozhranie"
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr "Ekvalizér"
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Vizualizácie"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "Zobrazenie"
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Zobraziť _panel s ponukou"
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-#, fuzzy
-msgid "Interface"
-msgstr "GNT rozhranie"
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Zobraziť panel s i_nformáciami"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "Súbor"
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Zobraziť panel so _stavom"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "SúÄasti"
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "ZobraziÅ¥ _hlaviÄky stĺpcov"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "Zobraziť informácie o skladbe"
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Vybrať stĺp_ce ..."
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "Zobrazí informácie o skladbe"
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "Ro_lovať na zmenenú skladbu"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "O Audacious"
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Súbor"
-#: src/gtkui/ui_manager.c:178
-#, fuzzy
-msgid "Open Files ..."
-msgstr "Otvoriť súbory"
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Prehrávanie"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "NaÄíta a prehrá súbor"
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "Zoznam sk_ladieb"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr ""
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_Služby"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "Prehrá súbor z vybranej adresy"
-
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "Služby modulov"
-
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "Predvoľby"
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Výstup"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "Otvorí okno s predvoľbami"
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Zobrazenie"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "_Koniec"
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "Pridať alebo odobrať z _fronty"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "UkonÄí Audacious"
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "Vys_trihnúť"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr "Nastaviť A-B"
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Kopírovať"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr "Odstrániť A-B"
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "V_ložiť"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "PrejsÅ¥ na zaÄiatok playlistu"
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Ozn_aÄiÅ¥ vÅ¡etko"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "Prejsť na súbor"
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Premenovať"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "Prepnúť front"
-
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "Povolí/zakáže položku vo fronte zoznamu skladieb."
-
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "Kopírovať"
-
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "Vystrihnúť"
-
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "Vložiť"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Rozhranie GTK"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "Vybrať všetko"
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "Vyberie všetky skladby v zozname."
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Napĺňanie vyrovnávajúcej pamäte ..."
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "Zrušiť výber"
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "Zruší výber skladieb zoznamu."
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Chyba"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
msgid "mono"
msgstr "mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
msgid "stereo"
msgstr "stereo"
-#: src/gtkui/ui_statusbar.c:97
-#, fuzzy, c-format
-msgid "%d channels"
-msgstr "PoÄet kanálov"
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d kanálov"
+msgstr[1] "%d kanál"
+msgstr[2] "%d kanály"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:124
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
-msgstr ""
+msgid "%d kbps"
+msgstr "%d kbps"
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
msgstr "Predchádzajúca stopa"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Prehrať"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "PozastaviÅ¥/PokraÄovaÅ¥"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Zastaviť"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "Nasledujúca stopa"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "Vpred o 5 sekúnd"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "Späť o 5 sekúnd"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "Stlmiť"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "Zosilniť"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "Stíšiť"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Prejsť na súbor"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "Prepnúť okná prehrávaÄa"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "Zobraziť OSD"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Prepnúť opakovanie"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Prepnúť náhodné prehrávanie"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(žiadne)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
-"It is not recommended to bind the primary mouse buttons without "
-"modificators.\n"
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
"\n"
"Do you want to continue?"
msgstr ""
@@ -3136,15 +2014,15 @@ msgstr ""
"\n"
"Chcete pokraÄovaÅ¥?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr "Priradenie tlaÄidiel myÅ¡i"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Nastavenie modulu Globálne klávesové skratky"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
@@ -3152,23 +2030,23 @@ msgstr ""
"V textovom poli stlaÄte kombináciu klávesov.\n"
"Môžete priradiÅ¥ aj tlaÄítka na myÅ¡i."
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "Klávesové skratky:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>Činnosť:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr "<b>Priradenie klávesu:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "O module Globálne klávesové skratky"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -3197,31 +2075,31 @@ msgstr ""
"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr "Pripojiť sa na všetky dostupné porty"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr "Pripojiť sa len na výstupné porty"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr "Nepripájať sa na žiadne porty"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr "Nastavenie modulu jack"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
msgstr "Režim pripojenia:"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr "Povoliť ladiace výpisy"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:435
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3239,148 +2117,82 @@ msgstr ""
"Pre Audacious upravil\n"
"Giacomo Lozito z develia.org"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:440
msgid "About JACK Output Plugin 0.17"
msgstr "O výstupnom module JACK 0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Tento LADSPA modul nemá žiadne používateľské nastavenia"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Názov"
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "O hostiteľovi LADSPA"
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Nastavenia %s"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Nainštalované moduly"
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Nastavenia hostiteľa LADSPA"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Bežiace moduly"
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Cesty modulu:"
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Pridať"
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small> Oddeliť viac ciest s dvojbodkou.\n"
+"Tieto cesty sú vyhľadávané v rátane do LADSPA_PATH.\n"
+"Po pridaní novej cesty, stlaÄte Enter pre vyhľadanie nových modulov. </ Small>"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Odstrániť"
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "Dostupné moduly:"
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "Katalóg LADSPA modulov"
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Povoliť"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "O module LIRC pre Audacious"
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Povolené moduly:"
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "Modul LIRC "
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Nastavenie"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:267
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"Jednoduchý modul, ktorý vám umožní ovládať Audacious\n"
-"pomocou systémovej služby diaľkového ovládania LIRC\n"
-"\n"
-"Pre Audacious upravil Tony Vroon <chainsaw@gentoo.org>\n"
-"Originálny modul XMMS LIRC napísali:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"Informácie o LIRC môžete získať na:\n"
-"http://lirc.org"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "Nastavenia modulu LIRC"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "Znovu sa pripojiť k LIRC serveru"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "Časový limit pred znovupripojením (sekúnd): "
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "Znovu pripojiť"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "Spojenie"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: LIRC podpora sa nedá inicializovať\n"
+"Vyhľadáva sa text skladby..."
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:304
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: konfiguraÄný súbor LIRC sa nedá preÄítaÅ¥,\n"
-"%s: preÄítajte si, prosím, dokumentáciu k LIRC\n"
-"%s: ako správne vytvoriÅ¥ konfiguraÄný súbor\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: pokúšam sa znovupripojiť…\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: neznámy príkaz „%s“\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: odpojené od LIRC\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: pokus o znovupripojenie budem opakovať každých %d sekúnd…\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"Pripájanie na lyrics.wikia.com..."
-#: src/lyricwiki/lyricwiki.c:337
-#, fuzzy
+#: src/lyricwiki/lyricwiki.c:377
msgid ""
"\n"
"No lyrics were found."
-msgstr "Nebolo nájdené žiadne zariadenie."
+msgstr ""
+"\n"
+"Žiadne texty neboli nájdené."
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:86
msgid "About Metronom"
msgstr "O module Metronóm"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:87
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3394,1173 +2206,272 @@ msgstr ""
"napr. tact://77 pre 77 úderov za minútu\n"
"alebo tact://60*3/4 pre 60 úderov za minútu v 3/4 takte"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:144
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Generátor taktu: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:146
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Generátor taktu: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "Nastavenie ModPlug"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bitov"
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "O zmieÅ¡avaÄi kanálov"
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bitov"
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Nastavenie znieÅ¡avaÄa kanálov"
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "mono (zmiešať kanále)"
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Výstupné kanály:"
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "Najbližšie (najrýchlejšie)"
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Zmeny sa prejavia pri prepnutí na ÄalÅ¡iu skladbu."
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Lineárne (rýchle)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Kubická interpolácia (kvalitné)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-tap Fir interpolácia (veľmi kvalitné)"
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr "96 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr "48 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Vzorkovacia frekvencia"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "Povoliť"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Hĺbka"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Oneskorenie"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Dozvuk"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Stupeň"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Rozsah"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Zvýraznenie hlbokých tónov"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:191
msgid "Surround"
msgstr "Priestorový zvuk"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-"Poznámka: Vysoké hodnoty\n"
-"predzosilnenia môžu spôsobiť\n"
-"orezanie (obťažujúce praskanie)."
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Predzosilnenie"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Použiť názov súboru ako názov skladby"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Rýchle informácie o skladbe"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "PotlaÄenie Å¡umu"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Prehrávať moduly z Amigy"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Neopakovať"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Opakovať"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "krát"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "OpakovaÅ¥ donekoneÄna"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Opakovanie"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "Informácie o module"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Názov súboru:\n"
-"Názov skladby:\n"
-"Typ:\n"
-"Dĺžka:\n"
-"Rýchlosť:\n"
-"Tempo:\n"
-"PoÄet vzoriek:\n"
-"PoÄet nástrojov:\n"
-"PoÄet úsekov:\n"
-"PoÄet kanálov:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Vzorky"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Nástroje"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Odkaz"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Vstupný modul Modplug pre Audaciuos verzie "
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-"\n"
-"Zvukové jadro Modplug napísal Olivier Lapicque.\n"
-"XMMS rozhranie k Modplug napísal Kenton Varda.\n"
-"(c)2000 Olivier Lapicque a Kenton Varda.\n"
-"Aktualizuje a udržuje Konstanty Bialkowski.\n"
-"Pre BMP upravil Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "O module Modplug"
-
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Nepodarilo sa nájsť súbor s obrázkom: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "Nahrať vybrané stopy"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:336
msgid "Upload in progress..."
msgstr "Prebieha nahrávanie…"
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "Obsluha MTP zariadenia"
+#: src/mtp_up/mtp.c:348
+msgid "Upload to MTP Device"
+msgstr "Nahrať do zariadenia MTP"
+
+#: src/mtp_up/mtp.c:349
+msgid "Disconnect MTP Device"
+msgstr "Odpojiť zariadenie MTP"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Zastavené"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "Odpojiť zariadenie"
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious teraz neprehráva."
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Slepý výstupný modul"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
" napísal Christian Birchinger <joker@netswarm.net>\n"
-"založené na module pre XMMS, autorom ktorého je Håvard Kvål <havardk@xmms."
-"org>"
+"založené na module pre XMMS, autorom ktorého je Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "O slepom výstupnom module"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Predvoľby slepého výstupu"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
msgstr "BežaÅ¥ v reálnom Äase"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:81
msgid "1. Default device"
msgstr "1. Štandardné zariadenie"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:138
msgid "OSS4 Output Plugin Preferences"
msgstr "Predvoľby výstupného modulu OSS4"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
msgid "Audio device:"
msgstr "Zvukové zariadenie:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr "Použiť iné zariadenie:"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:193
msgid "Save volume between sessions"
msgstr "Medi reláciami uložiť hlasitosť"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:197
msgid "Enable format conversions made by the OSS software."
msgstr "Povoliť konverziu formátu prostredníctvom OSS."
-#: src/oss4/plugin.c:54
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Povoliť exkluzívny režim pre predchádzanie virtuálnemu zmiešavaniu."
+
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
msgstr "O module OSS4"
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-"Výstupný modul OSS4 pre Audacious\n"
-"Coyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"Chcel by som poÄakovaÅ¥ ľudom na #audacious, Å¡peciálne Tony Vroonovi a "
-"Johnovi Lingrenovi a samozrejme autorom predchádzajúceho OSS modulu.\n"
-"\n"
-"Tento program je slobodný softvér. Môžete ho šíriť a/alebo upravovať podľa "
-"ustanovení GNU GPL, vydávanej nadáciou Free Software Foundation buÄ vo "
-"verzii 3 tejto licencie, alebo (podľa vášho uváženia) v ľubovoľnej novšej "
-"verzii.\n"
-"\n"
-"Tento program je rozÅ¡irovaný v nádeji, že bude užitoÄný, ale BEZ AKEJKOĽVEK "
-"ZÃRUKY. Neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo VHODNOSTI PRE "
-"URČITà ÚČEL. Ďalšie podrobnosti hľadajte v GNU GPL.\n"
-"\n"
-"Kópiu GNU GPL ste mali dostať spolu s týmto programom. Ak sa tak nestalo, "
-"požiadajte o ňu Free Software Foundation, Inc., 51 Franklin Street, Fifth "
-"Floor, Boston, MA 02110-1301, USA.\n"
-
-#: src/oss4/utils.c:204
+#: src/oss4/utils.c:211
msgid "OSS4 error"
msgstr "Chyba OSS4"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "Predvolené (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "Nastavenie ovládaÄa OSS"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "Zariadenia"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "Vyrovnávanie:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr "Dopredu naÄítaÅ¥ (v percentách):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "Vyrovnávanie"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "Nastavenia mixéra:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "Hlasitosť je ovládaná kanálom Master a nie PCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "Mixér"
-#: src/OSS/OSS.c:40
+#: src/OSS/OSS.c:41
msgid "About OSS Driver"
msgstr "O module OSS"
-#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"OSS ovládaÄ pre Audacious\n"
-"\n"
-"Tento program je slobodný softvér. Môžete ho šíriť a/alebo upravovať podľa "
-"ustanovení GNU GPL, vydávanej nadáciou Free Software Foundation; buÄ vo "
-"verzii 2 tejto licencie, alebo (podľa vášho uváženia) v ľubovoľnej novšej "
-"verzii.\n"
-"\n"
-"Tento program je rozÅ¡irovaný v nádeji, že bude užitoÄný, ale BEZ AKEJKOĽVEK "
-"ZÃRUKY; neposkytujú sa ani odvodené záruky PREDAJNOSTI, alebo VHODNOSTI PRE "
-"URČITà ÚČEL. Ďalšie podrobnosti hľadajte v GNU GPL.\n"
-"\n"
-"Kópiu GNU GPL by ste mali dostať spolu s týmto programom. Ak sa tak nestalo, "
-"požiadajte o ňu Free Software Foundation, Inc., 51 Franklin Street, Fifth "
-"Floor, Boston, MA 02110-1301, USA."
-
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:669
msgid "About Audacious PulseAudio Output Plugin"
msgstr "O výstupnom module PulseAudio pre Audacious"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-"Výstupný modul PulseAudio pre Audacious\n"
-"\n"
-"Tento program je slobodný softvér. Môžete ho šíriť a/alebo upravovať podľa "
-"ustanovení GNU GPL, vydávanej nadáciou Free Software Foundation buÄ vo "
-"verzii 2, tejto licencie, alebo (podľa vášho uváženia) v ľubovoľnej novšej "
-"verzii.\n"
-"\n"
-"Tento program je rozÅ¡irovaný v nádeji, že bude užitoÄný, ale BEZ AKEJKOĽVEK "
-"ZÃRUKY. Neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo VHODNOSTI PRE "
-"URČITà ÚČEL. Ďalšie podrobnosti hľadajte v GNU GPL.\n"
-"\n"
-"Kópiu GNU GPL ste mali dostať spolu s týmto programom. Ak sa tak nestalo, "
-"požiadajte o ňu Free Software Foundation, Inc., 51 Franklin Street, Fifth "
-"Floor, Boston, MA 02110-1301, USA."
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
msgstr "O module Konvertor vzorkovacej frekvencie"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
msgstr "Nastavenia konverzie vzorkovacej frekvencie"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
msgstr "Priradenie frekvencií:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr "Všetky ostatné:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "Metóda:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
msgid "Change password"
msgstr "Zmeniť heslo"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:144
msgid "<b>Services</b>"
msgstr "<b>Služby</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:166
msgid "Username:"
msgstr "Prístupové meno:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:172
msgid "Password:"
msgstr "Heslo:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:180
msgid "Scrobbler URL:"
msgstr "URL Scrobblera:"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:212
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:239
msgid "Scrobbler"
msgstr "Scrobbler"
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
-"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
-"com>\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
msgstr ""
"Modul AudioScrobbler pre Audacious\n"
"\n"
"Pôvodne vytvoril Audun Hove <audun@nlc.no> a Pipian <pipian@pipian.com>\n"
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr "O module Scrobbler"
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "O %s"
-
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr " Chyba"
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "Všeobecné informácie"
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr "Skladba Ä. %i: "
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr "Nastavenie Audacious-SID"
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr "8 bitov"
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr "16 bitov"
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr "Rozlíšenie:"
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr "Automatický priestorový posun"
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr "PoÄet kanálov:"
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr "Vzorkovacia frekvencia:"
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr "Prevzorkovať"
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr "Činiteľ:"
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr "Vysoký Äiniteľ vyžaduje väÄší výkon procesoru"
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr "Prevzorkovanie:"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "O výstupnom module SDL"
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr "Zvuk"
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Chyba SDL"
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr "Vnútiť rýchlosť"
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Žáner"
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
-"Ak je povolené, bude emulaÄnému jadru vnútená zvolená hodinová frekvencia. "
-"Inak bude rýchlosÅ¥ urÄená zo samotného prehrávaného súboru."
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr "PAL (50Hz)"
-
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
-msgstr ""
-"PAL je európskeho norma televízneho vysielania, ktorá používa 50Hz "
-"vertikálnu obnovovaciu frekvenciu. VäÄÅ¡ina SID skladieb bola vytvorená pre "
-"poÄítaÄe s PAL výstupom."
-
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr "NTSC (60Hz)"
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-"NTSC je norma televízneho vysielanie s 60Hz vertikálnou obnovovacou "
-"frekvenciou (a s Äalšími odliÅ¡nosÅ¥ami od normy PAL). Používa sa hlavne v "
-"Spojených Å¡tátoch, Japonsku a v niekoľkých Äalších krajinách."
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr "Hodinová frekvencia:"
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr "Vnútiť model"
-
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-"Ak je povolené, emulaÄnému jadru bude vnútený typ SID Äipu. V opaÄnom "
-"prípade bude typ SID Äipu urÄený zo súboru (ak je typu PSIDv2NG), alebo, ak "
-"nie je informácia dostupná, použije sa vybraný typ."
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr "MOS 6581"
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-"MOS/CSG 6581 je skorÅ¡ia hlavná verzia SID Äipu. V porovnaní s 8580 má "
-"niekoľko odlišností. Má oveľa plnší filter (ktorý, kvôli chybe v návrhu, nie "
-"je nikdy rovnaký medzi dvomi rôznymi SID Äipmi) a má „chybu pri regulovaní "
-"hlasitosti“, ktorá umožňuje prehrávanie digitálnych vzoriek."
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr "MOS 8580"
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Knižnica"
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr "Typ SID Äipu:"
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Vytvoriť zoznam skladieb"
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr "SIDPlay 1 (založené na snímkoch)"
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Pridať do zoznamu skladieb"
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-"Pre emuláciu sa použije knižnica libSIDPlay 1.x. Je rýchlejšia, ale nie je "
-"tak presná. Napriek tomu je vo väÄÅ¡ine prípadov dostaÄujúca."
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr "SIDPlay 2 (založené na cykloch)"
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-"Pre emuláciu sa použije knižnica libSIDPlay 2.x. Kvôli presnejšej emulácii "
-"vyžaduje väÄší výkon procesoru."
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr "Výber emulaÄnej knižnice:"
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr "SkutoÄný C64 (iba pre SIDPlay 2)"
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr "Prepínanie bánk"
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr "Transparentná ROM"
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Vyhľadať knižnicu"
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr "Prostredie PlaySID"
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr "Režim pamäte:"
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr "Emu#1"
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr "Optimalizovaný mód (rýchlejší, nepresný)"
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-"Táto voľba môže byť použitá pre povolenie „optimalizovaného módu“, v ktorom "
-"sa znižuje presnosť emulácie z presnosti na cyklus k presnosti na snímok. "
-"Výsledkom je nižšie zaťaženie procesoru, ale aj menšia presnosť."
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr "Emulácia reSID"
-
-#: src/sid/xs_interface.c:621
+#: src/search-tool/search-tool.c:645
msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
msgstr ""
-"reSID je softvérový simulátor SID Äipu založený na spätnom inžinierstve SID "
-"Äipu, ktorého autorom je Dag Lem. Ide pravdepodobne o najvernejÅ¡iu "
-"softvérovú emuláciu SID Äipu."
+"Pre import hudobnej knižnice do Audacious, vyberte prieÄinok a potom "
+"kliknite na ikonu \"obnoviť\"."
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr "HardSID"
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Čakajte prosím ..."
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-"HardSID je EISA/PCI karta pre PC kompatibilné poÄítaÄe, ktorá môže byÅ¥ "
-"vybavená skutoÄným SID Äipom. Softvér slúži na ovládanie HardSID a v "
-"kombinácii so softvérovou emuláciou zbytku C64 pomocou libSIDPlay2 sa dá "
-"dosiahnuÅ¥ „takmer 100%“ zhoda so skutoÄným C64. Viac informácií nájdete na "
-"http://www.hardsid.com/"
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr "Možnosti SIDPlay2:"
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr "Rýchla (najbližšia susedná vzorka)"
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-"Najrýchlejšia a tiež najhoršie znejúca vzorkovacia metóda, jednoducho vyberá "
-"najbližšiu susednú vzorku."
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr "Lineárna interpolácia"
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-"Používa lineárnu interpoláciu medzi vzorkami, Äím dosahuje vyÅ¡Å¡iu kvalitu "
-"zvuku s menšími ruchmi."
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr "Prevzorkovanie (FIR)"
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr "Možnosti vzorkovania reSID:"
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr "Emu#2"
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr "Emulovať filtre"
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-"Táto možnosÅ¥ povoľuje emuláciu SID filtra. Filter je dôležitou súÄasÅ¥ou "
-"zvukovej výbavy SID Äipu, ale jeho presná emulácia môže vyžadovaÅ¥ dosÅ¥ veľký "
-"výkon procesoru. Ak však tento filter vypnete, skladby, ktoré ho používajú, "
-"nebudú znieť verne."
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr "FS"
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr "FM"
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr "FT"
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr "Obnoviť hodnoty"
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr "SIDPlay1"
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr "Exportovať"
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr "Použiť"
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr "Uložiť"
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr "Importovať"
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr "Vymazať"
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr "Krivka filtra:"
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr "SIDPlay2"
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr "Filtre"
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr "PrehrávaÅ¥ aspoň poÄas urÄenej doby"
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-"Ak je povolené, skladba je prehrávaná aspoň poÄas urÄenej doby. Ak je to "
-"potrebné, bude na koniec skladby pridané ticho."
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr "Doba prehrávania:"
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr "Minimálna doba prehrávania:"
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr "PrehrávaÅ¥ maximálne poÄas urÄenej doby"
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-"Ak je povolené, skladba bude prehrávaná najdlhÅ¡ie poÄas urÄenej doby (tz. "
-"poÄas maximálnej dĺžky prehrávania)."
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr "Len ak je dĺžka skladby neznáma"
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-"Ak je povolené, maximálna doba prehrávania sa použije iba ak nie je dĺžka "
-"skladby známa."
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr "Maximálna doba prehrávania:"
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr "Použiť databázu kompatibilnú s XSIDPLAY"
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-"Táto voľba poloví používanie XSIDPLAY kompatibilnej databázy s dĺžkami "
-"skladieb. (Podrobnosti nájdete v dokumentácii k modulu Audacious-SID)"
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr "Súbor s databázou:"
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr "Celá cesta k súboru s databázou"
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr "Vyhľadať súbor s databázou dĺžok skladieb"
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr "Databáza s dĺžkou skladby:"
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr "Dĺžka skladby"
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr "Nahradiť všeobecný formátovací reťazec Tuplez"
-
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-"Po povolení tejto voľby môžete urÄiÅ¥ používateľsky formátovací reÅ¥azec "
-"Tuplez pre súbory SID. Tuplez znaÄky Å¡pecifické pre modul SID sú popísané "
-"nižšie."
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr "Formátovací reťazec Tuplez pre súbory SID"
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-"<u>Tuplez položky špecifické pre SID:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Presný formát súboru\n"
-"<b>sid-model</b>\t\t- 6581 alebo 8580\n"
-"<b>sid-speed</b>\t\t- ÄŒasovanie alebo rýchlosÅ¥: PAL/NTSC atÄ.\n"
-"\n"
-"<u>Ostatné „špeciálne“ sady položiek:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr "Formát názvu skladby:"
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Názov"
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr "Pridať podskladby do zoznamu skladieb"
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-"Ak je povolené, do zoznamu skladieb budú pridané podskladby každého súboru. "
-"Ak je zakázané, do zoznamu skladieb bude pridaná iba predvolená podskladba."
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr "Iba skladby dlhšie ako zadaná dĺžka prehrávania"
-
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr "Pridajú sa iba podskladby, ktorých dĺžka je aspoň rovná zadanej dĺžke."
-
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr "Narábanie s podskladbami:"
-
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr "Používať databázu STIL"
-
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
-"Ak je táto voľba povolená (a sú správne nastavené databáza a HVSC "
-"nastavenia), Audacious-SID pri prehrávaní súborov HVSC SID použije a zobrazí "
-"doplňujúce informácie z databázy STIL."
-
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr "Súbor STIL:"
-
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-"Cesta a názov súboru STIL databázy (STIL.txt). ZvyÄajne sa nachádza v "
-"podadresári DOCUMENTS od HVSC."
-
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr "Vybrať cestu k súboru STIL databázy"
-
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr "Cesta k HVSC:"
-
-#: src/sid/xs_interface.c:1262
-msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
-msgstr ""
-"Cesta ku koreňovému adresáru vašej zbierky High Voltage SID (HVSC) (napr. /"
-"media/C64Music/)"
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr "Vybrať cestu k HVSC"
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr "Databáza SID Tune Information List (STIL):"
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "Zrušiť všetky zmeny"
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "Prijať a uložiť zmeny"
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Audacious - Informácie o súbore SID"
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "Názov súboru:"
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "Názov skladby:"
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "Skladateľ:"
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "Autorské práva:"
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "Informácie o skladbe:"
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "Autor:"
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "Dĺžka:"
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr "Informácie o podskladbe:"
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr "Vybrať databázu dĺžok skladieb od HVSC"
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr "Vybrať databázu STIL"
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr "Vybrať cestu k HVSC"
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr "Vybrať súbor so SIDPlay2 filtrami pre import"
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr "Vybrať súbor s SIDPlay2 filtrami pre export"
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "Potvrdiť vybranú akciu"
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "Ãno"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "Nie"
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "VybraÅ¥ prieÄinok"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "O rozhraní s meniteľným vzhľadom"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
@@ -4568,897 +2479,940 @@ msgstr ""
"Copyright (c) 2008 Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "Rozhranie s meniteľným vzhľadom"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
msgstr "V _okne prehrávaÄa:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
msgstr "Vyberte písmo pre hlavné okno prehrávaÄa:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
msgstr "V zozname _skladieb:"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
msgstr "Vyberte písmo pre zoznam skladieb:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>_Písma</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "Ak sú dostupné, použiť bitmapové písma"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-"Ak sú dostupné, použijú sa bitmapové písma. Bitmapové písma nepodporujú "
-"Unicode reťazce."
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>_Rôzne</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "ZobrazovaÅ¥ oddeľovaÄe v zozname skladieb"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "Použiť bitmapové písma (podporuje iba ASCII)"
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "Zobrazovať dekoráciu okien"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Rolovať názov skladby obidvoma smermi"
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "Touto voľbou povolíte zobrazovanie dekorácie okien."
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "Použiť obojsmerný posun textu"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_Vzhľad</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
-"Ak je povolené, bude sa text s informáciami v hlavnom okne posúvať tam a "
-"späť. Ak nie je povolené, text sa bude posúvať iba v jednom smere."
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Predvoľby rozhrania"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "Zakázať vloženú GTK tému"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Predzosilnenie"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "Náhodný vzhľad pri prehrávaní"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "PovoliÅ¥ naÄítavanie nekompletných vzhľadov"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
-msgstr ""
-"Ak je povolené, Audacious neodmietne naÄítanie poÅ¡kodeného vzhľadu. Použite "
-"iba ak váš obľúbený vzhľad nefunguje"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "Prispôsobenie farby"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz "
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
-"Audacious umožňuje zmeniť zafarbenie témy užívateľského rozhrania pomocou "
-"nasledujúcich jazdcov."
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz "
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "Modrá"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "Zelená"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "Červená"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>_Vzhľad</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
-#: src/skins/skins_cfg.c:574
-#, fuzzy
-msgid "Color adjustment ..."
-msgstr "Prispôsobenie farby"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Ekvalizér Audacious"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:887
msgid "Presets"
-msgstr "Prednastavenia"
+msgstr "Predvoľby"
-#: src/skins/ui_main.c:593
-msgid "kbps"
-msgstr "kb/s"
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "NaÄítaÅ¥ predvoľbu"
-#: src/skins/ui_main.c:601
-msgid "kHz"
-msgstr "Hz"
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "NaÄítaÅ¥ automatickú predvoľbu"
-#: src/skins/ui_main.c:608
-msgid "surround"
-msgstr "Priestorový zvuk"
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "NaÄítaÅ¥ predvoľbu ekvalizéra"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - upozornenie o viditeľnosti"
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Uložiť predvoľbu"
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "ZobraziÅ¥ hlavné okno prehrávaÄa"
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Uložiť automatickú predvoľbu"
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "Ignorovať"
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Uložiť predvoľby ekvaizéra"
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-"Pri spustení Audacious boli všetky okná skryté.\n"
-"Možno budete chcieÅ¥ kvôli ovládaniu zobraziÅ¥ okno prehrávaÄa. Inak ho budete "
-"musieť ovládať vzdialene pomocou audtool alebo pomocou zapnutých modulov "
-"(napr. pomocou modulu stavová ikona)."
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Vymazať predvoľbu"
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Vždy ignorovať. Ukázať/skryť je ovládané vzdialene"
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Vymazať automatickú predvoľbu"
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - GTK modul vzhľadu"
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kb/s"
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-"<big><b>Používa sa chybný modul vzhľadu GTK</b></big>\n"
-"\n"
-"Audacious zistil, že používate chybný modul vzhľadu GTK.\n"
-"\n"
-"Používaný modul vzhľadu, <i>%s</i>, nie je kompatibilný s niektorými "
-"vlastnosťami moderných tém. Nekompatibilné vlastnosti budú v tejto relácii "
-"zakázané.\n"
-"\n"
-"Ak chcete tieto vlastnosti použiť, zvážte použitie iného modulu vzhľadu pre "
-"GTK."
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "Hz"
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "Toto upozornenie viac nezobrazovať"
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "Priestorový zvuk"
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:807
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "Prejsť na: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "prejsť na %d:%-2.2d / %d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, c-format
msgid "Volume: %d%%"
msgstr "Hlasitosť: %d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr "Vyváženie: %d%% vľavo"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr "Vyváženie: stred"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr "Vyváženie: %d%% vpravo"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
msgid "Options Menu"
msgstr "Ponuka s možnosťami"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr "Vypnúť „Vždy navrchu“"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr "Zapnúť „Vždy navrchu“"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
msgid "File Info Box"
msgstr "Informácie o súbore"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "Vypnúť „ZväÄÅ¡iÅ¥ GUI“"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "Zapnúť „ZväÄÅ¡iÅ¥ GUI“"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr "Ponuka s typom znázornenia"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1653
msgid "Single mode."
msgstr "Režim jednej skladby."
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1655
msgid "Playlist mode."
msgstr "Režim zoznamu skladieb."
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1677
msgid "Stopping after song."
msgstr "ZastaviÅ¥ po skonÄení skladby."
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1679
msgid "Not stopping after song."
msgstr "NezastaviÅ¥ po skonÄení skladby."
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "Automatický posun názvu skladby"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "ZastaviÅ¥ po skonÄení aktuálnej skladby"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "Vrcholy"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Opakovať"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Náhodné poradie"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "NeprehrávaÅ¥ ÄalÅ¡iu skladbu zo zoznamu"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "ZobraziÅ¥ prehrávaÄ"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "Zobraziť editor zoznamu skladieb"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "Zobraziť ekvalizér"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "Vždy navrchu"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "Zobrazovať na všetkých plochách"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "ZrolovaÅ¥ prehrávaÄ"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "Zrolovať editor zoznamu skladieb"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "Zrolovať ekvalizér"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "ZväÄÅ¡iÅ¥"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "Dvojitá veľkosť"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "Jednoduchý presun"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "Analyzátor"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
msgstr "Osciloskop"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr "FrekvenÄné spektrum"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "Žiadne"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "Normálny"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
msgstr "Oheň"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr "Vertikálne Äiary"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
msgstr "ÄŒiary"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
msgstr "Obdĺžniky"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
msgstr "Bodový osciloskop"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr "Čiarový osciloskop"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr "Vyplnený osciloskop"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr "Ľad"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "Plynulý"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "Najpomalšie"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "Pomaly"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "Stredne"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "Rýchlo"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "Najrýchlejšie"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
-msgstr "Ubehnutý Äas"
+msgstr "Odohraný Äas"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "Zostávajúci Äas"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Pozastaviť"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Predchádzajúca"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Nasledujúca"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "Vizualizácia"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "Typ zobrazenia"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "Typ analyzátora"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr "Typ osciloskopu"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr "Typ frekvenÄného spektra"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr "Typ vizualizácie pri zrolovanom okne"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr "Klesanie stĺpcov"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr "Klesanie vrcholov"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Zoznam skladieb"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Nový zoznam skladieb"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "Vybrať nasledujúci zoznam skladieb"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "Vybrať predchádzajúci zoznam skladieb"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Zmazať zoznam skladieb"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Importovať zoznam skladieb"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Pridá súbor so zoznamom do vybraného zoznamu skladieb."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Exportovať zoznam skladieb"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Uloží vybraný zoznam skladieb."
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "Obnoviť zoznam"
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
-msgstr "Správca zoznamov"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Obnovuje metadáta patriace k skladbe zo zoznamu."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Správca zoznamu skladieb"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Správca fronty"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Zobrazenie"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Rozhranie"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Predvoľby rozhrania ..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "Pridať internetovú adresu…"
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Do zoznamu skladieb pridá vzdialenú stopu."
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "Pridať súbory…"
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Do zoznamu skladieb pridá súbory."
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "Hľadanie a výber"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr "Prehľadá zoznam skladieb a vyberie skladby podľa zadaných kritérií."
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "Invertovať výber"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "Zamení vybrané a nevybrané položky."
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "OznaÄiÅ¥ vÅ¡etko"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Vyberie všetky skladby v zozname."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Zrušiť výber"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Zruší výber skladieb zoznamu."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Odstrániť všetky"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Zo zoznamu odstráni všetky skladby."
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "Vyprázdniť front"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "Vyprázdni front spojený s týmto zoznamom skladieb."
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "Odstrániť nedostupné súbory"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "Zo zoznamu skladieb odstráni nedostupné súbory."
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "Odstrániť duplikáty"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Podľa názvu"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "Zo zoznamu skladieb odstráni skladby s rovnakými názvami."
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "Podľa názvu súboru"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr "Zo zoznamu skladieb odstráni skladby s rovnakými názvami súboru."
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "Podľa cesty a názvu súboru"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
"Zo zoznamu skladieb odstráni skladby s rovnakou cestou a názvom súboru."
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "OdstrániÅ¥ neoznaÄené"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Zo zoznamu odstráni neoznaÄené skladby."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "OdstrániÅ¥ oznaÄené"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Zo zoznamu odstráni oznaÄené skladby."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Premiešať poradie"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Skladby v zozname zoradí náhodne."
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "Obrátiť poradie"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "Obráti poradie skladieb v zozname."
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "Triediť zoznam"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
msgstr "Zoradí skladby v zozname podľa názvu."
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Podľa albumu"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
msgstr "Zoradí skladby v zozname podľa názvu."
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Podľa umelca"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
msgstr "Zoradí skladby v zozname podľa umelca."
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
msgstr "Zoradí skladby v zozname podľa názvu súboru."
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
msgstr "Zoradí skladby v zozname podľa celej cesty."
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
msgstr "Podľa dátumu"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
msgstr "Zoradí skladby v zozname podľa dátumu poslednej úpravy súboru."
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Podľa Äísla stopy"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
msgstr "Zoradí skladby v zozname podľa Äísla stopy."
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "Triediť výber"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Súbor"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "Služby modulov"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Zobraziť informácie o skladbe"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Zobrazí informácie o skladbe"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "O Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "Prehrať súbor"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "NaÄíta a prehrá súbor"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "Prehrať z adresy"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Prehrá súbor z vybranej adresy"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "Služby modulov"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Predvoľby"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Otvorí okno s predvoľbami"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "UkonÄí Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Nastaviť A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Odstrániť A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "PrejsÅ¥ na Äas"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Prepnúť frontu"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Povolí/zakáže položku vo fronte zoznamu skladieb."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Kopírovať"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Vystrihnúť"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Vložiť"
+
+#: src/skins/ui_manager.c:436
msgid "Load"
msgstr "NaÄítaÅ¥"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
-msgid "Preset"
-msgstr "Prednastavenia"
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Importovať"
-#: src/skins/ui_manager.c:434
-msgid "Load preset"
-msgstr "NaÄíta prednastavenia"
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Uložiť"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Vymazať"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Predvoľby"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Auto-load preset"
-msgstr "Automaticky naÄítavané prednastavenia"
+msgstr "Automaticky naÄítavané predvoľby"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:445
msgid "Load auto-load preset"
-msgstr "NaÄíta automaticky naÄítavané prednastavenia"
+msgstr "NaÄítaÅ¥ automaticky naÄítavané predvoľby"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:448
msgid "Load default preset into equalizer"
-msgstr "NaÄíta Å¡tandardné prednastavenia do ekvalizéra"
+msgstr "NaÄítaÅ¥ Å¡tandardné predvoľby do ekvalizéra"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:450
msgid "Zero"
msgstr "Vynulovať"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:451
msgid "Set equalizer preset levels to zero"
-msgstr "Vynuluje prednastavenia ekvalizéra"
+msgstr "Vynulovať predvoľby ekvalizéra"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:453
msgid "From file"
msgstr "Zo súboru"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:454
msgid "Load preset from file"
-msgstr "NaÄíta prednastavenia zo súboru"
+msgstr "NaÄítaÅ¥ predvoľby zo súboru"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:456
msgid "From WinAMP EQF file"
msgstr "Zo súboru WinAMP EQF"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:457
msgid "Load preset from WinAMP EQF file"
-msgstr "NaÄíta prednastavenia zo súboru WinAMP EQF"
+msgstr "NaÄítaÅ¥ predvoľby zo súboru WinAMP EQF"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:459
msgid "WinAMP Presets"
-msgstr "Prednastavenia WinAMP"
+msgstr "Predvoľby WinAMP"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:460
msgid "Import WinAMP presets"
-msgstr "Importuje prednastavenia WinAMP"
-
-#: src/skins/ui_manager.c:455
-msgid "Save preset"
-msgstr "Uloží prednastavenia"
+msgstr "Importovať predvoľby WinAMP"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:466
msgid "Save auto-load preset"
-msgstr "Uloží automaticky naÄítavané prednastavenia"
+msgstr "UložiÅ¥ automaticky naÄítavané predvoľby"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:469
msgid "Save default preset"
-msgstr "Uloží štandardné prednastavenia"
+msgstr "Uložiť štandardné predvoľby"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:471
msgid "To file"
msgstr "Do súboru"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:472
msgid "Save preset to file"
-msgstr "Uloží prednastavenia do súboru"
+msgstr "Uložiť predvoľby do súboru"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:474
msgid "To WinAMP EQF file"
msgstr "Do súboru WinAMP EQF"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:475
msgid "Save preset to WinAMP EQF file"
-msgstr "Uloží prednastavenia do súboru WinAMP EQF"
-
-#: src/skins/ui_manager.c:470
-msgid "Delete preset"
-msgstr "Vymaže prednastavenia"
+msgstr "Uložiť predvoľby do súboru WinAMP EQF"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:481
msgid "Delete auto-load preset"
-msgstr "Vymaže automaticky naÄítavané prednastavenia"
+msgstr "VymazaÅ¥ automaticky naÄítavané predvoľby"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:248
msgid "Search entries in active playlist"
msgstr "Vyhľadať skladby v aktívnom zozname skladieb"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:256
msgid ""
-"Select entries in playlist by filling one or more fields. Fields use regular "
-"expressions syntax, case-insensitive. If you don't know how regular "
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
"expressions work, simply insert a literal portion of what you're searching "
"for."
msgstr ""
-"Položky v zozname skladieb vyberiete vyplnením jedného alebo viacerých polí. "
-"Polia používajú regulárne výrazy a neberie sa ohľad na veľkosť písmen. Ak "
+"Položky v zozname skladieb vyberiete vyplnením jedného alebo viacerých polí."
+" Polia používajú regulárne výrazy a neberie sa ohľad na veľkosť písmen. Ak "
"regulárnym výrazom nerozumiete, jednoducho zadajte ÄasÅ¥ textu, ktorý chcete "
"vyhľadať."
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Názov: "
+
+#: src/skins/ui_playlist.c:271
msgid "Album: "
msgstr "Album: "
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:278
msgid "Artist: "
msgstr "Umelec: "
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:285
msgid "Filename: "
msgstr "Názov súboru: "
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:293
msgid "Clear previous selection before searching"
msgstr "Pred hľadaním vymazať predchádzajúci výber"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:296
msgid "Automatically toggle queue for matching entries"
msgstr "Zhodujúce sa položky pridať do (odstrániť z) frontu"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:299
msgid "Create a new playlist with matching entries"
msgstr "Zo zhodujúcich sa položiek vytvoriť nový zoznam skladieb"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "Uložiť ako statický zoznam skladieb"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "Použiť relatívne cesty"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "NaÄítaÅ¥ zoznam skladieb"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "Uložiť zoznam skladieb"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:765
msgid "Audacious Playlist Editor"
msgstr "Editor zoznamu skladieb"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:812
#, c-format
msgid "%s (%d of %d)"
msgstr "%s (%d z %d)"
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "44100 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "96 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "48 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "96 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "Zabalený vzhľad pre WinAMP 2.x"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "Nezabalený vzhľad pre WinAMP 2.x"
-#: src/skins/util.c:834
+#: src/skins/util.c:774
#, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "Nepodarilo sa vytvoriť adresár (%s): %s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:456
msgid "About sndfile plugin"
msgstr "Modul sndfile (WAV)"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-"Pre Audacious upravil Tony Vroon <chainsaw@gentoo.org>\n"
-"z pôvodného modulu pre xmms_sndfile:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"Tento program slobodný sotvér. Môžete ho šíriť a/alebo upravovať podľa "
-"ustanovení GNU GPL, vydávanej nadáciou Free Software Foundation; buÄ vo "
-"verzii 2, tejto licencie, alebo (podľa vášho uváženia) v ľubovoľnej novšej "
-"verzii.\n"
-"\n"
-"Tento program je rozÅ¡irovaný v nádeji, že bude užitoÄný, ale BEZ AKEJKOĽVEK "
-"ZÃRUKY; neposkytujú sa ani odvodené záruky PREDAJNOSTI, alebo VHODNOSTI PRE "
-"URČITà ÚČEL. Ďalšie podrobnosti hľadajte v GNU GPL.\n"
-"\n"
-"Kópiu GNU GPL by ste mali dostať spolu s týmto programom. Ak sa tak nestalo, "
-"požiadajte o ňu Free Software Foundation, Inc., 51 Franklin Street, Fifth "
-"Floor, Boston, MA 02110-1301, USA."
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "O module SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr "Oprava hlasitosti"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr "Krátke presahy"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "Rýchlosť"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "Výška"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "ZväÄÅ¡iÅ¥"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "SndStretch - Nastavenie"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:437
msgid "Command to run when Audacious starts a new song."
msgstr "Príkaz, ktorý sa vykoná keÄ Audacious zaÄne prehrávaÅ¥ novú skladbu."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
msgid "Command:"
msgstr "Príkaz:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:443
msgid "Command to run toward the end of a song."
msgstr "Príkaz, ktorý sa vykoná na konci skladby."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:449
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr ""
"Príkaz, ktorý sa vykoná, keÄ Audacious dosiahne koniec zoznamu skladieb."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:455
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Príkaz, ktorý sa vykoná pri zmene názvu skladby (t.j. pre názvy v sieťových "
"prúdoch)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:461
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -5471,47 +3425,49 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Môžete použiť nasledujúce formátovacie reťazce,\n"
"ktoré budú pri spustení príkazu nahradené (nie všetky\n"
"sú užitoÄné pre príkaz spúšťaný na konci zoznamu skladieb).\n"
"\n"
-"%F: frekvencia (v hertzoch)\n"
-"%c: poÄet kanálov\n"
-"%f: názov súboru (celá cesta)\n"
-"%l: dĺžka (v milisekundách)\n"
-"%n alebo %%s: názov skladby\n"
-"%r: dátový tok (v bitoch za sekundu)\n"
-"%t: pozícia v zozname skladieb (%02d)\n"
-"%p: práve sa hrá (1 alebo 0)"
+"%F: Frekvencia (v hertzoch)\n"
+"%c: PoÄet kanálov\n"
+"%f: Názov súboru (celá cesta)\n"
+"%l: Dĺžka (v milisekundách)\n"
+"%n alebo %s: Názov skladby\n"
+"%r: Dátový tok (v bitoch za sekundu)\n"
+"%t: Pozícia v zozname skladieb (%02d)\n"
+"%p: Práve sa hrá (1 alebo 0)\n"
+"%a: Umelec\n"
+"%b: Album\n"
+"%T: Názov stopy"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:488
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
msgstr ""
"<span size='small'>Parametre predávané shellu by mali byť uzatvorené do "
-"úvodzoviek. NereÅ¡pektovanie tejto rady predstavuje bezpeÄnostné riziko.</"
-"span>"
+"úvodzoviek. NereÅ¡pektovanie tejto rady predstavuje bezpeÄnostné "
+"riziko.</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:499
msgid "Commands"
msgstr "Príkazy"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:529
msgid "Song Change"
msgstr "Zmena skladby"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Analyzátor spektra"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:379
msgid "About Status Icon Plugin"
msgstr "O module Stavová ikona"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:380
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5529,35 +3485,51 @@ msgstr ""
"Tento modul poskytuje stavovú ikonu umiestnenú\n"
"v oznamovacej oblasti správcu okien.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:451
msgid "Status Icon Plugin - Preferences"
msgstr "Modul Stavová ikona - Nastavenia"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:461
msgid "Right-Click Menu"
msgstr "Ponuka pri stlaÄení pravého tlaÄidla"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:466
msgid "Small playback menu #1"
msgstr "Jednoduchá ponuka na prehrávanie Ä. 1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:469
msgid "Small playback menu #2"
msgstr "Jednoduchá ponuka na prehrávanie Ä. 2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:485
msgid "Mouse Scroll Action"
msgstr "Reakcia na otáÄanie kolieska na myÅ¡i"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:489
msgid "Change volume"
msgstr "Zmeniť hlasitosť"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:491
msgid "Change playing song"
msgstr "Zmeniť prehrávanú skladbu"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Ďalšie nastavenia"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Zakázať vyskakovacie okno"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "ZatvoriÅ¥ do oznamovacej oblasti (systémovej Äasti panelu)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "PokraÄovaÅ¥ v zozname skladieb ak sa posúva smerom hore"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5571,110 +3543,15 @@ msgstr ""
msgid "About Extra Stereo Plugin"
msgstr "O module Extra stereo"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "Nastaviť Extra stereo"
-#: src/streambrowser/gui/streambrowser_win.c:62
-msgid "Search:"
-msgstr "Hľadať:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr "Pridať záložku"
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "PrehliadaÄ prúdov"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-msgid "Stream name"
-msgstr "Názov prúdu"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-msgid "Now playing"
-msgstr "Práve hrá"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-msgid "Remove Bookmark"
-msgstr "Odstrániť záložku"
-
-#: src/streambrowser/streambrowser.c:331
-msgid "About Stream Browser"
-msgstr "O prehliadaÄi prúdov"
-
-#: src/streambrowser/streambrowser.c:332
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright (c) 2008, Calin Crisan <ccrisan@gmail.com> a tím Audacious.\n"
-"\n"
-"Toto je jednoduchý prehliadaÄ prúdov, ktorý obsahuje najobľúbenejÅ¡ie "
-"adresáre prúdov.\n"
-"Veľká vÄaka patrí vývojárom Streamtuner <http://www.nongnu.org/streamtuner>\n"
-"a samozrejme celej komunite okolo Audacious.\n"
-"\n"
-"Opäť Äakujem Tonymu Vroonovi za rady a vedenie.\n"
-"\n"
-"Toto bol Google Summer of Code 2008 projekt."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "PrehliadaÄ prúdov"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "O ovládaÄi pre Sun"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"BSD ovládaÄ pre Sun programu XMMS\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Správca: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Zariadenie na ovládanie zvuku:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Veľkosť vyrovnávacej pamäte (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Zariadenie na ovládanie hlasitosti:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS používa výluÄný prístup k mixéru."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Nastavenie ovládaÄa pre Sun"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:49
msgid "About Tone Generator"
msgstr "O generátore tónov"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:51
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5686,39 +3563,26 @@ msgstr ""
"Upravil Daniel J. Peng <danielpeng@bigfoot.com>\n"
"\n"
"Pre použitie zadajte URL: tone://frekvencia1;frekvencia2; frekvencia3;...\n"
-"napr. na prehranie tónov o frekvencii 2000Hz a 2005Hz zadajte "
-"tone://2000;2005"
+"napr. na prehranie tónov o frekvencii 2000Hz a 2005Hz zadajte tone://2000;2005"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:101
msgid "Tone Generator: "
msgstr "Generátor tónov: "
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "Používať vlastný formát názvu"
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "Formát názvu:"
-
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "ZnaÄky Ogg Vorbis"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "O module File I/O"
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Nastavenie modulu Ogg Vorbis Audio"
-
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:573
msgid "About Ogg Vorbis Audio Plugin"
msgstr "O module Ogg Vorbis Audio"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:578
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5759,8 +3623,7 @@ msgstr "O prehrávaÄi Vortex"
#: src/vtx/about.c:15
msgid ""
"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
-"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor."
-"ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
"\n"
"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
"and other AY/YM music sites.\n"
@@ -5768,20 +3631,18 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
"PrehrávaÄ hudobného formátu Vortex napísal <sashnov@ngs.ru>\n"
-"Založené na pôvodom zdrojovom kóde in_vtx.dll od Romana Sherbakova "
-"<v_soft@microfor.ru>\n"
+"Založené na pôvodom zdrojovom kóde in_vtx.dll od Romana Sherbakova <v_soft@microfor.ru>\n"
"\n"
-"Hudba vo formáte vtx môže byť nájdená na http://vtx.microfor.ru/music.htm a "
-"Äalších AY/YM hudobných stránkach.\n"
+"Hudba vo formáte vtx môže byÅ¥ nájdená na http://vtx.microfor.ru/music.htm a Äalších AY/YM hudobných stránkach.\n"
"\n"
"Pre Audacious upravil Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Modul dekodéra Wavpack %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5793,162 +3654,4 @@ msgstr ""
"Niektoré Äasti kódu modulu napísal Miles Egan\n"
"Navštívte stránku Wavpack na adrese http://www.wavpack.com/\n"
-#~ msgid "PREAMP"
-#~ msgstr "PREAMP"
-
-#~ msgid "60HZ"
-#~ msgstr "60Hz"
-
-#~ msgid "170HZ"
-#~ msgstr "170Hz"
-
-#~ msgid "310HZ"
-#~ msgstr "310Hz"
-
-#~ msgid "600HZ"
-#~ msgstr "600Hz"
-
-#~ msgid "1KHZ"
-#~ msgstr "1kHz"
-
-#~ msgid "3KHZ"
-#~ msgstr "3kHz"
-
-#~ msgid "6KHZ"
-#~ msgstr "6kHz"
-
-#~ msgid "12KHZ"
-#~ msgstr "12kHz"
-
-#~ msgid "14KHZ"
-#~ msgstr "14kHz"
-
-#~ msgid "16KHZ"
-#~ msgstr "16kHz"
-
-#~ msgid "Audacious standard menu"
-#~ msgstr "Štandardná ponuka Audacious"
-
-#~ msgid "Surround echo"
-#~ msgstr "Priestorová ozvena"
-
-#~ msgid "About ESounD Plugin"
-#~ msgstr "O module ESounD"
-
-#~ msgid ""
-#~ "Audacious ESounD Plugin\n"
-#~ "\n"
-#~ " This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software\n"
-#~ "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
-#~ "02110-1301,\n"
-#~ "USA."
-#~ msgstr ""
-#~ "Modul ESounD pre Audacious\n"
-#~ "\n"
-#~ "Tento program je slobodný softvér. Môžete ho šíriť a/alebo upravovať "
-#~ "podľa ustanovení GNU GPL, vydávanej nadáciou Free Software Foundation; "
-#~ "buÄ vo verzii 2 tejto licencie, alebo (podľa vášho uváženia) v ľubovoľnej "
-#~ "novšej verzii.\n"
-#~ "\n"
-#~ "Tento program je rozÅ¡irovaný v nádeji, že bude užitoÄný, ale BEZ "
-#~ "AKEJKOĽVEK ZÃRUKY. Neposkytujú sa ani odvodené záruky PREDAJNOSTI alebo "
-#~ "VHODNOSTI PRE URČITà ÚČEL. Ďalšie podrobnosti hľadajte v GNU GPL.\n"
-#~ "\n"
-#~ "Kópiu GNU GPL ste mali dostať spolu s týmto programom. Ak sa tak nestalo, "
-#~ "požiadajte o ňu Free Software Foundation, Inc., 51 Franklin Street, Fifth "
-#~ "Floor, Boston, MA 02110-1301, USA."
-
-#~ msgid "ESD Output Plugin configuration"
-#~ msgstr "Nastavenie výstupného modulu ESD"
-
-#~ msgid "Host:"
-#~ msgstr "Hostiteľ:"
-
-#~ msgid "Use remote host"
-#~ msgstr "PoužiÅ¥ vzdialený poÄítaÄ"
-
-#~ msgid "Volume controls OSS mixer"
-#~ msgstr "Hlasitosť je ovládaná mixérom OSS"
-
-#~ msgid "Port:"
-#~ msgstr "Port:"
-
-#~ msgid "Server"
-#~ msgstr "Server"
-
-#~ msgid "GTK Foobar-like Interface"
-#~ msgstr "GTK rozhranie podobné prehrávaÄu Foobar"
-
-#~ msgid "Load List"
-#~ msgstr "NaÄítaÅ¥ zoznam"
-
-#~ msgid "Save List"
-#~ msgstr "Uložiť zoznam"
-
-#~ msgid "About RoarAudio Plugin"
-#~ msgstr "O module RoarAudio"
-
-#~ msgid "RoarAudio Audacious Plugin..."
-#~ msgstr "Modul RoarAudio pre Audacious…"
-
-#~ msgid "RoarAudio Plugin - Configuration"
-#~ msgstr "Modul RoarAudio - Konfigurácia"
-
-#~ msgid "Server Type:"
-#~ msgstr "Druh serveru:"
-
-#~ msgid "Host or Path:"
-#~ msgstr "Hostiteľ alebo cesta:"
-
-#~ msgid "<b>Host:</b>"
-#~ msgstr "<b>Hostiteľ:</b>"
-
-#~ msgid "Server & Network"
-#~ msgstr "Server a sieť"
-
-#~ msgid "Proxy Address"
-#~ msgstr "Adresa proxy servera"
-
-#~ msgid "<b>Proxy</b>"
-#~ msgstr "<b>Proxy</b>"
-
-#~ msgid "Proxy"
-#~ msgstr "Proxy"
-
-#~ msgid "Player Name:"
-#~ msgstr "Názov prehrávaÄa:"
-
-#~ msgid "<b>Player</b>"
-#~ msgstr "<b>PrehrávaÄ</b>"
-
-#~ msgid "<b>Current Song</b>"
-#~ msgstr "<b>Aktuálna skladba</b>"
-
-#~ msgid "Meta Data"
-#~ msgstr "Metadáta"
-
-#~ msgid ""
-#~ "<b><big>Unable to save playlist.</big></b>\n"
-#~ "\n"
-#~ "Unknown file type for '%s'.\n"
-#~ msgstr ""
-#~ "<b><big>Zoznam skladieb sa nedá uložiť.</big></b>\n"
-#~ "\n"
-#~ "Neznámy typ súboru '%s'.\n"
-
-#~ msgid "Randomize List"
-#~ msgstr "Premiešať zoznam"
-#~ msgid "Randomizes the playlist."
-#~ msgstr "Zoradí skladby v zozname v náhodnom poradí."
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..af6f827
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,3654 @@
+# Serbian translation for Audacious Plugins
+# Copyright (C) Audacious Translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2011-12-29 19:29-0500\n"
+"PO-Revision-Date: 2012-01-08 17:16+0000\n"
+"Last-Translator: MirosNik <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sr_RS\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"КориÑти libfaad2-%s за декодирање.\n"
+"ФÐÐД2 ÐÐЦ/ХЕ-ÐÐЦ/ХЕ-ÐÐЦв2/ДРМ декодер (c) Ðеро ÐГ, www.nero.com\n"
+"ÐуторÑка права (c) 2005-2006 Екипа Безочника"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "О прикључку МП4 ÐÐЦ декодеру"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "О Ðларму"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+"Прикључак који може бити коришћен да започне пуштање у одређено време.\n"
+"\n"
+"Првобитни аутори Ñу Ðдам Фикин и Данијел Стоден."
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "Ðларм"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr "Ово је ваш позив за буђење."
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "У реду"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "Подешавања аларма"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "Време"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "Ñат(а)"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr "чаÑова"
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "минута"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "Утишај након:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "Ðктивирај аларм у (оÑновно):"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "Изаберите којим данима ће Ñе активирати аларм"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "ОÑновно"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "Дан"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "Уторак"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "Среда"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "Четвртак"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "Петак"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "Субота"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "Ðедеља"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "Понедељак"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "Дани"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "Ишчезавање"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "Ñекунде"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "Јачина"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "Тренутно"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "Започни при"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "Заврши при"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "Додатна наредба"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "укључи"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "СпиÑак нумера (необавезно)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "Претражи..."
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "ПодÑетник"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "КориÑти подÑетник"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Опције"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "Шта значе ове опције?"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"Време\n"
+" Ðктивирај аларм у: \n"
+" Време када ће Ñе активирати аларм.\n"
+"\n"
+" Утишај након: \n"
+" ЗауÑтавља аларм након иÑтека овог времена.\n"
+" (ако није затворено прозорче буђења)\n"
+"\n"
+"\n"
+"Дани\n"
+" Дан:\n"
+" Изаберите којим данима ће бити активиран аларм.\n"
+"\n"
+" Време:\n"
+" Изаберите време аларма за Ñваки дан, или\n"
+" штиклирајте квадратић да кориÑтите оÑновно време.\n"
+"\n"
+"\n"
+"Јачина\n"
+" Ишчезавање: \n"
+" Повећава јачину звука до изабране јачине\n"
+" у овом временÑком периоду.\n"
+"\n"
+" Започни при: \n"
+" Започиње појачавање од ове јачине.\n"
+"\n"
+" Заврши при: \n"
+" Јачина при којој ће бити зауÑтављено појачање.\n"
+" Ðко је време појачања 0 онда подешава јачину\n"
+" на ову и започиње пуштање.\n"
+"\n"
+"\n"
+"Опције:\n"
+" Додатна наредба:\n"
+" Покреће ову наредбу за време аларма.\n"
+"\n"
+" СпиÑак нумера: \n"
+" Учитава овај ÑпиÑак нумера да би пуштао пеÑме \n"
+" (мора да Ñадржи .m3u проширење). Ðко није дат\n"
+" ÑпиÑак нумера онда ће бити коришћене пеÑме\n"
+" које Ñе тренутно налазе на ÑпиÑку.\n"
+" ÐдреÑа мп3/огг тока може такође бити унешена\n"
+" овде, али Ñ…Ð¼Ð¼Ñ Ñ‚Ñ€ÐµÐ½ÑƒÑ‚Ð½Ð¾ не подржава\n"
+" учитавање ÑпиÑка нумера Ñа адреÑа.\n"
+"\n"
+" ПодÑетник:\n"
+" Приказује подÑетник након иÑкључења аларма,\n"
+" упишите подÑетник у поље и штиклирајте\n"
+" квадратић ако желите да буде приказиван.\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Помоћ"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Откажи"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "Ваш подÑетник за Ð´Ð°Ð½Ð°Ñ Ñ˜Ðµ.."
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "Хвала вам"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "ОÑновни ПЦМ уређај"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "ОÑновни уређај мешача"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "ПоÑтавке ÐлÑиног прикључка излаза"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "ПЦМ уређај:"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "Уређај микÑера:"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "Елемент мешача:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "Решите Ñуви прекид"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "О прикључку ÐЛСРизлаза"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "Грешка ÐЛСÐ-е"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"ÐиÑте изабрали ниједан порт Ñеквенцера за МИДИ пуштање. То можете урадити у "
+"поÑтавкама МИДИ прикључка."
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "ÐЛСРпозадинац "
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Овај позадинац шаље МИДИ догађаје у групу портова ÐЛСРÑеквенцера коју је изабрао кориÑник. Сучеље ÐЛСРÑеквенцера је врло разноврÑно, може да обезбеди портове за хардверÑке ÑинтиÑајзере звучних картица (тј. ему10к1), али такође и за ÑофтверÑке ÑинтиÑајзере, Ñпољне уређаје, итд.\n"
+"Овај позадинац не производи звук, МИДИ догађајима Ñе управља непоÑредно Ñа уређаја/програма иза ÐЛСРпортова; на пример, МИДИ догађаји поÑлати хардверÑком ÑинтиÑајзеру ће бити директно репродуковани.\n"
+"Овај програм је напиÑао Ђакомо Лоцито."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "Флуид Ñинт позадинац "
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Овај позадинац производи звук тако што шаље МИДИ догађаје Флуид Ñинту, реално временÑком ÑофтверÑком ÑинтиÑајзеру заÑнованом на СаундФонт2 Ñпецификацији (www.fluidsynth.org).\n"
+"Произведени звук може бити манипулиÑан помоћу програмÑких прикључака за ефекте а обрађен изабраним прикључком излаза.\n"
+"Овај програм је напиÑао Ђакомо Лоцито."
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "ПОДЕШÐÐ’ÐЊРÐЛСРПОЗÐДИÐЦÐ"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Порт"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "Име програма"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Име порта"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "ÐЛСÐ, излазни портови"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "Звучна картица: "
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "Контрола микÑера: "
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "Подешавања микÑера"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "ÐЛСРпозадинац није учитан или није доÑтупан"
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ÐЛСÐ\n"
+"позадинац</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "ÐМИДИ прикључак — информације о позадинцу"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "ПОДЕШÐÐ’ÐЊРÐМИДИ ПРИКЉУЧКÐ"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "Избор позадинца"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "ДоÑтупни позадинци"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "Подешавања репродукције"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "Премештај: "
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "Промена бубња: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Ðапредна подешавања"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "унапред израчунај дужину МИДИ датотека у ÑпиÑку нумера"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "извуци коментаре из МИДИ датотеке (ако поÑтоје)"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "извуци текÑÑ‚ пеÑме из МИДИ датотеке (ако поÑтоји)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+"<span size=\"smaller\">ÐМИДИ\n"
+"прикључак</span>"
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "ÐМИДИ прикључак — изаберите датотеку"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "ÐМИДИ прикључак — подешавања"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "ÐМИДИ прикључак — изаберите СаундФонт датотеку"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "ПОДЕШÐÐ’ÐЊРФЛУИД СИÐТ ПОЗÐДИÐЦÐ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "Подешавања СаундФонта"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Ðазив датотеке"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Величина (бајтова)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "Учитај СФ при покретању програма"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "Учитај СФ при првом пуштању миди датотеке"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "Подешавања ÑинтиÑајзера"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "појачање"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "кориÑти оÑновно"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "вредноÑÑ‚:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "полифонија"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "одјек"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "да"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "не"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "хор"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "узорковање"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "произвољно "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "ФлуидСинт позадинац није учитан или није доÑтупан"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ФлуидСинт\n"
+"позадинац</span>"
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "ПОДЕШÐÐ’ÐЊРТИМИДИТИ ПОЗÐДИÐЦÐ"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "ТиМидити позадинац није учитан или није доÑтупан"
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ТиМидити\n"
+"позадинац</span>"
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Ðазив:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> МИДИ Информације </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Формат:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "Трајање (msec):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "Број нумера:"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "променљиво"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "БПМ:"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "БПМ (wavg):"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "Див време:"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> МИДИ коментари и текÑтови пеÑама </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* нема доÑтупних коментара у овој МИДИ датотеци *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* нема доÑтупних текÑтова пеÑама у овој МИДИ датотеци *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (неиÑправан УТФ-8)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "О ÐМИДИ прикључку"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+"\n"
+"ÐМИДИ прикључак "
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+"\n"
+"Модуларни МИДИ музички програм\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"ÐапиÑао га је Ђакомо Лоцито\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"ПоÑебно Ñу заÑлужни...\n"
+"\n"
+"ÐšÐ»ÐµÐ¼ÐµÐ½Ñ Ð›Ð°Ð´Ð¸Ñˆ и ЈароÑлав КиÑела\n"
+"због њихових програма „aplaymidi“ и „amixer“; који\n"
+"Ñу врло кориÑни, уз „alsa-lib docs“, како биÑмо\n"
+"Ñазнали више о ÐЛСРÐПИју\n"
+"\n"
+"Ðлфредо Спадафина\n"
+"који је урадио леп логотип МИДИ таÑтатуре \n"
+"\n"
+"Тони Врун\n"
+"због одличне помоћи за алфа теÑтирање\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "Правоугаоник"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Заобљени правоугаоник"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Удубљен правоугаоник"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Ðишта"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "Почетак репродукције"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "Приказује ОСД када почиње репродукција пеÑме."
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "Промена наÑлова"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Приказује ОСД када Ñе, у току репродукције, измени наÑлов пеÑме али назив "
+"датотеке оÑтане иÑти. Ово је углавном кориÑно за приказивање измена у "
+"наÑловима у интернет токовима."
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "Промена јачине звука"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "Приказује ОСД када је измењена јачина звука."
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "Паузирање"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "Приказује ОСД када је репродукција привремено зауÑтављена."
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "Отпаузирање"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "Приказује ОСД када је репродукција поново покренута."
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "ПоÑтављање"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "Релативан хоризонтални померај:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "Релативан вертикални померај:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "Ðајвећа ширина приказа:"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "Опција више монитора"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "Прикажи ОСД на:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "Ñвим мониторима"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "на монитору бр. %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "Време трајања (ms)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "Приказ:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "Појављивање:"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "Ишчезавање:"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "Словни ликови"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "ПиÑмо %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "Сенка"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "Интернационализација"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "ИÑкључи УТФ-8 конверзију текÑта (у аоÑд)"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "Изаберите датотеку маÑке"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "Стил иÑцртавања"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "Боје"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "Боја %i:"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "Произвољна маÑка"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "Датотека маÑке:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "Претражи"
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "Омогући активирање"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "Догађај"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "Откривен је композитни управник"
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+"Ðије откривен композитни управник;\n"
+"оÑим ако знате да је један већ покренут, молим покрените композитног управника јер у Ñупротном ОСД неће радити иÑправно"
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "Композитни управник није потребан за лажну провидноÑÑ‚"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "ПровидноÑÑ‚"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "Лажна провидноÑÑ‚"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Стварна провидноÑÑ‚ (захтева Ð¥ композитно проширење)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Композитно проширење није учитано"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Композитно проширење није доÑтупно"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr "<span font_desc='%s'>Безочник — ОСД</span>"
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "Безочник ОСД — подешавања"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "ИÑпробај"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "Положај"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "Ðнимација"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "ТекÑÑ‚"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "Декорација"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "Укључивање"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "ОÑтало"
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "Безочник ОСД"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Безочник ОСД "
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"напиÑао је Ђакомо Лоцито\n"
+"< james@develia.org >\n"
+"\n"
+"Приказ на екрану (OSD) је заÑнован на библиотеци\n"
+"„Ghosd“ коју је напиÑао Еван Мартин\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "Обим замућења: избор боја"
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "Опције:"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "ПоÑтавке Бојер ÑтереофонÑког-у-бинаурални"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Ðиво довода:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "УчеÑтаноÑÑ‚ иÑецања:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "Претподешавања:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "О прикључку звучног ЦД-а"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+"ÐуторÑка права (c) 2007, Калин КриÑан <ccrisan@gmail.com> и Безочник тим.\n"
+"\n"
+"Велико хвала „libcdio“ програмерима <http://www.gnu.org/software/libcdio/>\n"
+"\tи „libcddb“ програмерима <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Хвала ти такође Тони Врун што Ñи ме Ñаветовао и водио.\n"
+"\n"
+"Беше то Гугл лето пројекта Кôд 2007.\n"
+"\n"
+"ÐуторÑка права 2009 Ðон Линдгрен"
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Ðудио ЦД"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Уређај је празан."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Ðеподржана врÑта диÑка."
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "Подешавање ЦД аудио прикључка"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "Извлачење дигиталног звука"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "Информације о наÑлову"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "Брзина диÑка:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "КориÑти цд-текÑÑ‚ ако је доÑтупан"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "КориÑти ЦДДБ ако је доÑтупан"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "Сервер: "
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "Путања: "
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Порт: "
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "КориÑти ХТТП умеÑто ЦДДБП-а"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "Замени оÑновни уређај: "
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "У реду"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "ПуÑти ЦД"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Додај ЦД"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "О прикључку Ñажимања динамичког опÑега"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "ПоÑтавке Ñажиматеља динамичког опÑега"
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "Главна јачина:"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Динамички опÑег:"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "Конзолни музички декодер игре"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Опште"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Репродукција"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "ÐиÑки тонови:"
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "Ñекунди"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "ВиÑоки тонови:"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "ОÑновно трајање пеÑме:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "Поновно узорковање"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "Укључи поновно узорковање"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "Проток поновног узорковања:"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "СПЦ"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "Занемари трајање из СПЦ ознака"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "Повећај одјек"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+"ОÑновно трајање пеÑме, изражено у Ñекундама, Ñе кориÑти за пеÑме које не "
+"пружају информације о трајању (тј. упетљане нумере)."
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "О Конзолном музичком декодеру игре"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"Мотор конзолног музичког декодера је заÑнован на Game_Music_Emu 0.5.2.\n"
+"Подржани формати: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"ПримењеноÑÑ‚ у Безочнику: Вилијам Питкок <nenolod@dereferenced.org>, \n"
+" Шај Грин <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "О поÑтепеном прелазу"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "ПоÑтавке поÑтепеног прелаза"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "Преклапање (у Ñекундама):"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Грешка поÑтепеног прелаза"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr "ПоÑтепени прелаз није уÑпео јер је пеÑма имала различит број канала."
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+"ПоÑтепени прелаз није уÑпео јер је пеÑма имала различит проток узорка.\n"
+"\n"
+"Можете да кориÑтите ефекат претварача протока узорка да поново узоркујете пеÑме на иÑти проток узорка."
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr "Подешавање криÑтализатора"
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "Јачина дејÑтва:"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "Примени"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+"Ехо прикључак\n"
+"Ðутор Јохан Левин 1999.\n"
+"\n"
+"Ехо окружења је напиÑао Карл ван Шаик 1999"
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "О Ехо прикључку"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "Ехо подешавања"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "Кашњење: (ms)"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "Повратни ток: (%)"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "Јачина: (%)"
+
+#: src/ffaudio/ffaudio-core.c:798
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Прикључак декодирања звука више формата за Безочника заÑнован на\n"
+"радном оквиру ФФмпег мултимедија (http://www.ffmpeg.org/)\n"
+"ÐуторÑка права (c) 2000-2009 Ð¤Ð°Ð±Ñ€Ð¸Ñ Ð‘ÐµÐ»Ð°Ñ€Ð´, и оÑ.\n"
+"\n"
+"Прикључак за Безочника приредили:\n"
+" Вилијам Питкок <nenolod@nenolod.net>,\n"
+" Матиј Хамалаинен <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+
+#: src/ffaudio/ffaudio-core.c:812
+msgid "About FFaudio Plugin"
+msgstr "О ФФаудио прикључку"
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "О прикључку ПиÑац датотека"
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "Подешавања ПиÑца датотека"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "Формат излазне датотеке:"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "ПодеÑи"
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "Сачувај у оригиналном директоријуму"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "Сачувај у произвољном директоријуму"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "ФаÑцикла излазне датотеке:"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Изаберите фаÑциклу"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Ðабави име датотеке из:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "ознаке оригиналне датотеке"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "назива оригиналне датотеке"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "Ðе одузимај проширење назива датотеке"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Придодај број нумере називу датотеке"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "СамоÑтално"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Удружени Ñтерео"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Стерео"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Моно"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "МП3 подешавања"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "Квалитет алгоритма:"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "Проток узорка излаза:"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr "(Hz)"
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "Проток бита / ÐžÐ´Ð½Ð¾Ñ Ñажимања:"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "Проток бита (kbps):"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "ÐžÐ´Ð½Ð¾Ñ Ñажимања:"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "Режим звука:"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "Разно:"
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr "ПриÑили Ñтрого ИСО поштовање"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "Грешка заштите"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "Квалитет"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "Укључи ВБР/ÐБР"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "Ð’Ñ€Ñта:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "ВБР опције:"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "Ðајмањи проток бита (kb/s):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "Ðајвећи проток бита (kb/s):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "Строго Ñпроведи најмањи проток бита"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "ÐБР опције:"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "ПроÑечни проток бита (kb/s):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "Ðиво ВБР квалитета:"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "Ðе запиÑуј Хинг ВБР заглавље"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr "ВБР/ÐБР"
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "Параметри кадра:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "Означи као ауторÑко право"
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "Означи као оригинал"
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "ИД3 параметри:"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "ПриÑили додавање ознаке издања 2"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "Додај Ñамо в1 ознаку"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "Додај Ñамо в2 ознаку"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "Ознаке"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "Подешавање Ð’Ð¾Ñ€Ð±Ð¸Ñ ÑˆÐ¸Ñ„Ñ€ÐµÑ€Ð°"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "Ðиво квалитета (0 — 10):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "О ФЛÐЦ аудио прикључку"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+"\n"
+"\n"
+"Оригинални кôд је напиÑао\n"
+"Ралф Ерцингер <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "О прикључку Гномове пречице"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Прикључак Гномове пречице\n"
+"Омогућава вам да управљате програмом кориÑтећи Гномове пречице.\n"
+"\n"
+"ÐуторÑка права (C) 2007-2008 Саша ХлаÑјак <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Број Ñтавке"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "ÐаÑлов"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Извођач"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Година"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Ðлбум"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Ðумера"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "Положај колоне"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Трајање"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "Путања датотеке"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Ðазив датотеке"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Произвољан наÑлов"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "БитÑки проток"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Изабери колоне"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "ДоÑтупно:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Изабрано:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "УÑидри на лево"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "УÑидри на деÑно"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "УÑидри на врх"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "УÑидри на дно"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Откачи"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "ИÑкључи"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "Отвори _датотеке ..."
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Отвори _адреÑу ..."
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "Додај да_тотеке ..."
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Додај ад_реÑу ..."
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "О _програму ..."
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_ПоÑтавке ..."
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Изађи"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "Пу_Ñти"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "Па_узирај"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_ЗауÑтави"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "_Претходно"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "С_ледеће"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "_Понови"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "_ÐаÑумично"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "Ð_е напредуј у ÑпиÑку нумера"
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "ЗауÑтави _након ове пеÑме"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "Подаци о _пеÑми ..."
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Пређи на _време ..."
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Пређи на _пеÑму ..."
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "Према броју _нумере"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "Према _наÑлову"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "Према _извођачу"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "Према _албуму"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "Према _датуму издавања"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "Према _путањи датотеке"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "Према п_роизвољном наÑлову"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "Преокрени п_оредак"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "_Случајан поредак"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_ОÑвежи"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Уклони _недоÑтупне датотеке"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "Пор_еђај"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Ðово"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Затвори"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "Ув_ези ..."
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "Из_вези ..."
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "_Управник ÑпиÑка нумера ..."
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "Управник _редоÑледа ..."
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "По_јачај"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "У_тишај"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "Ује_дначавач"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "Е_фекти"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "Су_чеље"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_Визуализације"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Прикажи линију _изборника"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Прикажи линију _података"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Прикажи линију _Ñтања"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Прикажи _наÑлове колона"
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Изабери _колоне ..."
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "_Клизај при промени пеÑме"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Датотека"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_Извођење"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_СпиÑак нумера"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "_УÑлуге"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "_Излаз"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "_Преглед"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Стави у ред/Избаци из реда"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "_ИÑеци"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "У_множи"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "У_баци"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "_Изабери Ñве"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "_Преименуј"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "ГТК Ñучеље"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s — Безочник"
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Баферујем ..."
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Безочник"
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Грешка"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "моно"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "Ñтерео"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d канал"
+msgstr[1] "%d канала"
+msgstr[2] "%d канала"
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d kb/s"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "Претходна нумера"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "ПуÑти"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Паузирај/наÑтави"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "ЗауÑтави"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "Следећа нумера"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "Унапред 5 Ñекунде"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "Уназад 5 Ñекунде"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "ИÑкључи звук"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Појачај"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Утишај"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Скочи до датотеке"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Укључи/иÑкључи главни прозор"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "Прикажи приказ на екрану"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Укључи/иÑкључи понављање"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Укључи/иÑкључи премештање"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(ништа)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"Ðије препоручљиво повезати главну дугмад миша без измењивача.\n"
+"\n"
+"Да ли желите да наÑтавите?"
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "Повезујем дугмад миша"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "Подешавања прикључка општих пречица"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"ПритиÑните комбинацију таÑтера унутар поља за текÑÑ‚.\n"
+"Можете такође да повежете дугмад миша."
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "Пречице:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>Радња:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "<b>Свезе таÑтера:</b>"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "О прикључку општих пречица"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+"Прикључак општих пречица\n"
+"Управљајте програмом кориÑтећи комбинације општих таÑтера или мултимедијалних таÑтера.\n"
+"\n"
+"ÐуторÑка права (C) 2007-2008 Саша ХлаÑјак <contact@saschahlusiak.de>\n"
+"\n"
+"ОÑтали Ñарадници:\n"
+"ÐуторÑка права (C) 2006-2007 Владимир ПаÑков <vlado.paskov@gmail.com>\n"
+"ÐуторÑка права (C) 2000-2002 Вил Сирјала <syrjala@sci.fi>\n"
+"\t\t\tБрајан Ð”ÐµÐ²Ð¸Ñ <curious@ihug.com.au>\n"
+"\t\t\tÐонатан Ð. Ð”Ð°Ð²Ð¸Ñ <davis@jdhouse.org>\n"
+"\t\t\tÐереми Тан <nsx@nsx.homeip.net>\n"
+"\n"
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Повежи Ñа Ñвим раÑположивим портовима утичница"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Повежи Ñамо излазне портове"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "Ðе повезуј Ñе на портове"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "Подешавање прикључка утичнице"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Режим повезивања:"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Укључи штампање уклањања грешака"
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+"Управљачки програм ХММС утичнице 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"ÐšÑ€Ð¸Ñ ÐœÐ¾Ñ€Ð³Ð°Ð½<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Прилагођавање Безочнику\n"
+"Ђакомо Лоцито Ñа „develia.org“"
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr "О прикључку ЈÐЦК излаза 0.17"
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "О ЛÐДСПРдомаћину"
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "Подешавања за %s"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "Подешавања ЛÐДСПРдомаћину"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "Путање модула:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Раздвојте више путања Ñа две тачке.\n"
+"Те путање Ñу тражене као додатне уз „ЛÐДСПРПУТÐЊÐ“.\n"
+"Ðакон додавања нових путања, притиÑните УнеÑи да потражите нове прикључке.</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "ДоÑтупни прикључци:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Укључи"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Укључени прикључци:"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "Подешавања"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Тражим текÑÑ‚ пеÑме..."
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"Повезујем Ñе на lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+" ÐиÑам пронашао текÑтове пеÑама."
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr "О Метроному"
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+"Генератор такта је напиÑао Мартин Ð¨Ñ‚Ñ€Ð°ÑƒÑ <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"Да га кориÑтите, додајте адреÑу: „tact://beats*num/den“\n"
+"нпр.: „tact://77“ да добијете 77 откуцаја у минуту\n"
+"или: „tact://60*3/4“ да добијете 60 отк./мин у 3/4 такту"
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr "Генератор такта: %d отк/мин"
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr "Генератор такта: %d отк/мин %d/%d"
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "О мешачу канала"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "Подешавања мешача канала"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Излазни канали:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Измене ће Ñтупити на Ñнагу приликом промене Ñледеће пеÑме."
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "Окружење"
+
+#: src/mtp_up/mtp.c:336
+msgid "Upload in progress..."
+msgstr "Слање је у току..."
+
+#: src/mtp_up/mtp.c:348
+msgid "Upload to MTP Device"
+msgstr "Пошаљи на МТП уређај"
+
+#: src/mtp_up/mtp.c:349
+msgid "Disconnect MTP Device"
+msgstr "ИÑкључи МТП уређај"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "ЗауÑтављено"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Безочник не пушта пеÑме."
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Додатак ништавног излаза "
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+" је напиÑао КриÑтијан Бирхингер <joker@netswarm.net>\n"
+"заÑнованом на ХММС прикључку Хаварда Квала <havardk@xmms.org>"
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr "О ништавном излазу"
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "Подешавања ништавног излаза"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "Покрени у реалном времену"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. ОÑновни уређај"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "ПоÑтавке прикључка излаза ОСС4"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Звучни уређај:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "КориÑти алтернативни уређај:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Сачувај јачину звука између ÑеÑија"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "Укључује претварање формата направљено ОСС Ñофтвером."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "Укључује иÑкључиви режим да Ñпречи виртуално мешање."
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "О ОСС4 прикључку"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "Грешка ОСС4"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "ОÑновно (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "Подешавања ОСС управљачког програма"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Уређаји"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "Баферовање:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "Пред-бафер (у процентима):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "Баферовање"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "Подешавања микÑера:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "Главна контрола јачине звука није ПЦМ"
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "МикÑер"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "О ОСС управљачком програму"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "О ПулÑеÐудио излазном прикључку Безочника"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr "О прикључку претварача протока узорка"
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr "ПоÑтавке претварача протока узорка"
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "Мапирања протока:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "Сви оÑтали:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "Метод:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "Промените лозинку"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>УÑлуге</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "КориÑничко име:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "Лозинка:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr "ÐдреÑа Скроблера:"
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr "<b>ЛаÑÑ‚.ФМ</b>"
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr "Скроблер"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Ðудио Скроблер прикључак Безочника\n"
+"\n"
+"Оригинално Ñу га урадили Ðудун Хов <audun@nlc.no> и Пипиан <pipian@pipian.com>\n"
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "О Скроблер прикључку"
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "О прикључку СДЛ излаза"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Грешка СДЛ-а"
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Жанр"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Библиотека"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Ðаправи ÑпиÑак нумера"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Додај у ÑпиÑак нумера"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Претражите библиотеку"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Да увезете вашу музичку библиотеку у Безочнику, изаберите фаÑциклу и затим "
+"кликните на иконицу „оÑвежи“."
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Молим Ñачекајте ..."
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Изаберите фаÑциклу"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "О маÑкирном Ñучељу"
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+"ÐуторÑка права (c) 2008, Томаш Мон <desowin@gmail.com>\n"
+"\n"
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "_Плејер:"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Изаберите Ñловни лик главног прозора плејера:"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "_СпиÑак нумера:"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Изабери Ñловни лик ÑпиÑка нумера:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>_Словни ликови</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "КориÑти битмап Ñловне ликове (подржава Ñамо ÐСКРИ)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Померај наÑлов пеÑме у оба Ñмера"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>_МаÑка</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "ПоÑтавке Ñучеља"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Претпојачање"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Уједначавач Безочника"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Претподешавања"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Учитава претподешавање"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Учитава ÑамоÑтално претподешавање"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Учитава претподешавање уједначавача"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Чува претподешавање"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Чува ÑамоÑтално претподешавање"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Чува претподешавање уједначавача"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Избриши претподешавање"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Брише ÑамоÑтално претподешавање"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "kb/s"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "окружење"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Тражи до: %d:%-2.2d / %d:%-2.2d"
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "Јачина звука: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "УравнотеженоÑÑ‚: %d%% леви"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "УравнотеженоÑÑ‚: центрирано"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "УравнотеженоÑÑ‚: %d%% деÑни"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "Изборник опција"
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "ИÑкључи „Увек у првом плану“"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Укључи „Увек у првом плану“"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Поље информација о датотеци"
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Изборник приказивања"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "ЈедноÑтавни режим."
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "Режим ÑпиÑка нумера."
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "ЗауÑтавља након пеÑме."
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "Ðе зауÑтавља након пеÑме."
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "СамоÑтално померај назив пеÑме"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "ЗауÑтави поÑле текуће пеÑме"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "Врхови"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Понови"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "ÐаÑумично"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Ðе напредуј у ÑпиÑку нумера"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "Прикажи плејер"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "Прикажи уређивач ÑпиÑка нумера"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "Прикажи уједначавач"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "Увек у првом плану"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "Стави на Ñве радне проÑторе"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "Замотај плејер"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "Замотај уређивач ÑпиÑка нумера"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "Замотај уједначавач"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "Ðнализатор"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "ДоÑег"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "ОтиÑак глаÑа"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "ИÑкључено"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Ðормалан"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "Ватра"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "Вертикалне линије"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "Линије"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "Траке"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "ТачкаÑти доÑег"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "ЛинијÑки доÑег"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "ИÑпуњен доÑег"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "Лед"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Глатко"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "ÐајÑпорије"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "Споро"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Средње"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Брзо"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "Ðајбрже"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "Протекло време"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "ПреоÑтало време"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Паузирај"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "Претходна"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "Следећа"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "Приказивање"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "Режим приказивања"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "Режим анализатора"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "Режим доÑега"
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "Режим отиÑка глаÑа"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "ВУ режим Ñкривања прозора"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "Опадање анализатора"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "Опадање врхова"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "СпиÑак нумера"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Ðови ÑпиÑак нумера"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "Изабери Ñледећи ÑпиÑак нумера"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "Изабери претходни ÑпиÑак нумера"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Избриши ÑпиÑак нумера"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Увези ÑпиÑак нумера"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Учитава датотеку ÑпиÑка нумера у изабрани ÑпиÑак нумера."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Извези ÑпиÑак нумера"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Чува изабрани ÑпиÑак нумера."
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "ОÑвежи ÑпиÑак"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "ОÑвежава метаподатке придружене Ñтавци ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "Управник ÑпиÑка нумера"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "Управник редоÑледа"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Поглед"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Сучеље"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "ПоÑтавке Ñучеља ..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "Додај интернет адреÑу..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Додаје удаљену нумеру на ÑпиÑак нумера."
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "Додај датотеке..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Додаје датотеке на ÑпиÑак нумера."
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Претражи и означи"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+"Претржује ÑпиÑак нумера и означава Ñтавке Ñа ÑпиÑка нумера према одређеном "
+"уÑлову."
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "Обрни избор"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr "Преокреће означене и неозначене Ñтавке."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Означи Ñве"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Означава Ñве Ñтавке Ñа ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "Означи ништа"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "Одзначава Ñве Ñтавке Ñа ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Уклони Ñве"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Уклања Ñве Ñтавке Ñа ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "Обриши заказано"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr "Брише заказано придружено овом ÑпиÑку нумера."
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "Уклони недоÑтупне датотеке"
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr "Уклања недоÑтупне датотеке Ñа ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "Уклони дупликате"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Према наÑлову"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr "Уклања дупликате Ñа ÑпиÑка нумера према наÑлову."
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "Према називу датотеке"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr "Уклања дупликате Ñа ÑпиÑка нумера према називу датотеке."
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "Према путањи и називу датотеке"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr "Уклања дупликате Ñа ÑпиÑка нумера према њиховој пуној путањи."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Уклони неозначене"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Уклања неозначене Ñтавке Ñа ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Уклони означене"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Уклања означене Ñтавке Ñа ÑпиÑка нумера."
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "ÐаÑумице иÑпремештај ÑпиÑак"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "ÐаÑумице иÑпремешта ÑпиÑак нумера."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Преокрени ÑпиÑак"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "Преокреће ÑпиÑак нумера."
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Поређај ÑпиÑак"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr "Ређа ÑпиÑак према наÑлову."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Према албуму"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr "Ређа ÑпиÑак према извођачу."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Према извођачу"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr "Ређа ÑпиÑак према извођачу."
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr "Ређа ÑпиÑак према имену датотеке."
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr "Ређа ÑпиÑак према пуном имену путање."
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "Према датуму"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr "Ређа ÑпиÑак према датуму измене."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "Према броју нумере"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr "Ређа ÑпиÑак према броју нумере."
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "Поређај означене"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Датотека"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "УÑлуге прикључка"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Прикажи детаље нумере"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Приказује детаље нумере"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "О Безочнику"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "ПуÑти датотеку"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Учитава и пушта датотеку"
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "ПуÑти локацију"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Пушта медиј Ñа изабране локације"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "УÑлуге додатака"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "ПоÑтавке"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Отвара прозор поÑтавки"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "ГаÑи Безочника"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "ПоÑтави ЗБ"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "Обриши ЗБ"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Пређи на време"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "У ред/из реда"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Укључује/иÑкључује Ñтавке у/из ред(а) ÑпиÑак(а) нумера."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Умножи"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "ИÑеци"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Убаци"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "Учитај"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Увези"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Сачувај"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Обриши"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "Претподешавање"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "СамоÑтално учитај претподешавања"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "Учитава ÑамоÑтално учитана претподешавања"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "Учитава оÑновно претподешавање у уједначавачу"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "Ðула"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "ПоÑтавља нивое претподешавања уједначавача на нулу"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "Из датотеке"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "Учитава претподешавање из датотеке"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "Из ВинÐМП ЕКуФ датотеке"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "Учитава претподешавање из ВинÐМП ЕКуФ датотеке"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "ВинÐМП претподешавања"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "Увези ВинÐМП претподешавања"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "Чува ÑамоÑтално учитано претподешавање"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "Чува оÑновно претподешавање"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "У датотеку"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "Чува претподешавање у датотеку"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "У ВинÐМП ЕКуФ датотеку"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "Чува претподешавање у ВинÐМП ЕКуФ датотеку"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "Брише ÑамоÑтално учитано претподешавање"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr "Претражи Ñтавке у активном ÑпиÑку нумера"
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+"Обележите Ñтавке у ÑпиÑку нумера попуњавајући једно или више поља. Поља "
+"кориÑте ÑинтакÑу обичних израза, не разликују величину Ñлова. Ðко не знате "
+"како обични изрази функционишу, једноÑтавно доÑловно унеÑите део онога што "
+"тражите."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "ÐаÑлов: "
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "Ðлбум: "
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "Извођач: "
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "Ðазив датотеке: "
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr "Обриши претходни избор пре претраге"
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr "Подударајуће Ñтавке ÑамоÑтално пребаци у ред"
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr "Ðаправи нови ÑпиÑак нумера Ñа подударајућим Ñтавкама"
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr "Уређивач ÑпиÑка нумера"
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d од %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "Ðрхивирана Винамп 2.x маÑка"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "Ðеархивирана Винамп 2.x маÑка"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "Ðе могу да направим фаÑциклу (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr "О прикључку датотеке звука"
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "О РаÑтезању звука"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "Поправка јачине"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "Кратко преклапање"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Брзина"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "Корак"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "Скала"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "Подешавања РаÑтезања звука"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "Ðаредба за покретање када Безочник започиње нову пеÑму."
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr "Ðаредба:"
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "Ðаредба за покретање при крају пеÑме."
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr "Ðаредба за покретање када Безочник Ñтигне на крај ÑпиÑка нумера."
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+"Ðаредба за покретање када Ñе промени наÑлов пеÑме (тј. наÑлови мрежних "
+"токова)."
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"Можете да кориÑтите Ñледеће ниÑке формата које\n"
+"ће бити замењене пре позивања наредбе\n"
+"(ниÑу Ñве кориÑне за наредбу крај-ÑпиÑка-нумера).\n"
+"\n"
+"%F: УчеÑталоÑÑ‚ (у херцима)\n"
+"%c: Број канала\n"
+"%f: Ðазив датотеке (пуна путања)\n"
+"%l: Трајање (у милиÑекундама)\n"
+"%n или %s: Ðазив пеÑме\n"
+"%r: Проток (у битима у Ñекунди)\n"
+"%t: Позиција ÑпиÑка нумера (%%02d)\n"
+"%p: Тренутно пуштена (1 или 0)\n"
+"%a: Уметник\n"
+"%b: Ðлбум\n"
+"%T: ÐаÑлов нумере"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>Параметри проÑлеђени љуÑци би требало да буду у "
+"наводницима. Све другачије је безбедноÑни ризик.</span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "Ðаредбе"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr "Промена пеÑме"
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "О прикључку иконице Ñтања"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+"Прикључак иконице Ñтања\n"
+"\n"
+"ÐуторÑка права 2005-2007 Ђакомо Лоцито < james@develia.org >\n"
+"ÐуторÑка права 2010 Михал ЛипÑки <tallica@o2.pl>\n"
+"\n"
+"Овај додатак обезбеђује иконицу Ñтања, Ñмештену\n"
+"у облаÑти фиоке ÑиÑтема управника прозора.\n"
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "Подешавања прикључка иконице Ñтања"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "Изборник деÑног клика"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "Мали изборник репродукције #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "Мали изборник репродукције #2"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "Радња клизања мишем"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "Промени јачину звука"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "Промени пеÑму"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "ОÑтала подешавања"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "ИÑкључи прозор облачића"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "Затвори у обавештајној зони (ÑиÑтемÑка фиока)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "Ðапредује у ÑпиÑку нумера када клиза унапред"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+"ЕкÑтра прикључак Ñтереа\n"
+"\n"
+"ÐапиÑао Ðон Левин 1999."
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "О екÑтра прикључку Ñтереа"
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "Подешавање екÑтра Ñтереа"
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr "О ТонÑком генератору"
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+"СинуÑни тонÑки генератор је напиÑао Хавард Квален <havardk@xmms.org>\n"
+"Прерадио га је Данијел Ј. Пенг <danielpeng@bigfoot.com>\n"
+"\n"
+"Да га кориÑтите, додајте адреÑу: tone://учеÑталоÑÑ‚1;учеÑталоÑÑ‚2;учеÑталоÑÑ‚3;...\n"
+"нпр.: tone://2000;2005 да пуÑтите тонове 2000Hz и 2005Hz."
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Hz"
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr "ТонÑки генератор: "
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "О прикључку У/И датотеке"
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "О Огг Ð’Ð¾Ñ€Ð±Ð¸Ñ Ð°ÑƒÐ´Ð¸Ð¾ прикључку"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Огг Ð’Ð¾Ñ€Ð±Ð¸Ñ Ð¿Ñ€Ð¸ÐºÑ™ÑƒÑ‡Ð°Ðº — Xiph.орг задужбина\n"
+"\n"
+"Оригинални кôд је напиÑао:\n"
+"Тони Ðрћери <bascule@inferno.tusculum.edu>\n"
+"Допринели Ñу:\n"
+"ÐšÑ€Ð¸Ñ ÐœÐ¾Ð½Ñ‚Ð³Ð¾Ð¼ÐµÑ€Ð¸ <monty@xiph.org>\n"
+"Питер Ðлм <peter@xmms.org>\n"
+"Мајкл Смит <msmith@labyrinth.edu.au>\n"
+"Ðек Мофит <jack@icecast.org>\n"
+"Јорн Бајен <jorn@nl.linux.org>\n"
+"Хавард Квален <havardk@xmms.org>\n"
+"Ђанкарло ПаÑкуто <gcp@sjeng.org>\n"
+"Евгениј Загидулин <e.asphyx@gmail.com>\n"
+"\n"
+"ПоÑетите Xiph.org задужбину на: http://www.xiph.org/\n"
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr "О програму ВортекÑ"
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+"Програм за датотеке Ð’Ð¾Ñ€Ñ‚ÐµÐºÑ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° је напиÑао Сашнов ÐлекÑандер <sashnov@ngs.ru>\n"
+"ЗаÑновано на оригиналном извору „in_vtx.dll“ Романа Шербакова <v_soft@microfor.ru>\n"
+"\n"
+"Музику у втх формату можете пронаћи на: http://vtx.microfor.ru/music.htm\n"
+"и другим AY/YM Ñајтовима музике.\n"
+"\n"
+"Применио у Безочнику Павел Вимталек <pvymetalek@seznam.cz>"
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr "Прикључак декодера Вејвпака %s"
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"ÐуторÑка права (c) 2006 Вилијам Питкок <nenolod -at- nenolod.net>\n"
+"\n"
+"Ðешто кôда прикључка је урадио ÐœÐ°Ñ˜Ð»Ñ Ð•Ð³Ð°Ð½\n"
+"ПоÑетите Ñајт Вејвпака на: http://www.wavpack.com/\n"
+
+
diff --git a/po/tr.po b/po/tr.po
index 97906a2..296d739 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audacious-plugins\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
+"POT-Creation-Date: 2011-07-17 18:49-0400\n"
"PO-Revision-Date: 2007-12-22 23:09+0200\n"
"Last-Translator: Onur Küçük <onur@pardus.org.tr>\n"
"Language-Team: Turkish\n"
@@ -25,7 +25,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, fuzzy, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -36,613 +36,55 @@ msgstr ""
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM çözücüsü (c) Nero AG, www.nero.com\n"
"Telif Hakkı (c) 2005-2006 Audacious ekibi"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
#, fuzzy
msgid "About MP4 AAC decoder plugin"
msgstr "MP4 AAC oynatıcı eklentisi hakkında"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "Hakkında"
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-"\n"
-"Telif Hakkı (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"Bu eklenti, GNU LGPL şartları altında yayınlanmaktadır.\n"
-"Daha fazla bilgi için http://www.gnu.org/licenses/lgpl.html adresine "
-"bakınız.\n"
-"\n"
-"Bu eklenti tüm hakları (C) Simon Peter, et al'a ait olan AdPlug "
-"kütüphanesini kullanmaktadır.\n"
-"AdPlug kitaplık sürümü: "
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: Yapılandırması"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "Tamam"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "Ä°ptal"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "Genel"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "Ses kalitesi"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "Çözünürlük"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr "8bit"
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr "16bit"
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "Kanallar"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "Mono"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "Stereo"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"Eğer, ihtyacınız yoksa, stereoyu seçmeyin. Çünkü, sese stereo etkisi "
-"eklenmeyecektir. OPL2 sadece mono kullanır fakat daha fazla CPU gücü harcar!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "Sıklık"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "Çal"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "Şarkı sonunu tespit et"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"Eğer etkinleştirilirse, Audacious şarkının sonunu tespit edecek, şarkıyı "
-"durduracak ve parça listesinde ilerleyecek. Bu özellik etkin değilse, "
-"Audacious şarkı sonunu tespit edemeyecek ve şarkıyı tekrar tekrar çalmaya "
-"devam edecek."
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "Biçimler"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "Biçim seçimi"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "Biçim"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "Dosya uzantısı"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"Seçili dosya türleri, bu eklenti tarafından tanınacak ve çalınacak. "
-"Seçilmemiş türler, diğer eklentilerin bu dosyaları çalması için, dikkate "
-"alınmayacak."
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: Dosya Bilgisi"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "Dosya adı"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "Başlık: "
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "Yazar: "
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "Dosya Türü: "
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "Alt şarkılar: "
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "Enstrumanlar: "
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "Sıralar: "
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "Örnekler: "
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "Şarkı"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "Enstruman adı"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "Şarkı mesajı"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "Arkayüz bölümü"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "Sıra: "
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "Örnek: "
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "Satır: "
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "Hız: "
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "Sayaç: "
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr "Hz"
-
-#: src/alarm/interface.c:34
-msgid "About XMMS Alarm"
-msgstr "XMMS Alarm Hakkında"
-
-#: src/alarm/interface.c:47
-msgid "XMMS Alarm"
-msgstr "XMMS Alarm"
-
-#: src/alarm/interface.c:56
-msgid ""
-"An XMMS plugin which can be used\n"
-"to start playing at a certain time.\n"
-"\n"
-"Send all complaints to:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-msgstr ""
-"Audacious'un belli bir zamanda çalmaya başlaması\n"
-"için bir XMMS eklentisi.\n"
-"\n"
-"Şikayetleriniz için:\n"
-"Adam Feakin <adamf@snika.uklinux.net>\n"
-"Daniel Stodden <stodden@in.tum.de>\n"
-"\n"
-"http://www.snika.uklinux.net/xmms-alarm/"
-
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
-msgid "Close"
-msgstr "Kapat"
-
-#: src/alarm/interface.c:101
-msgid "Alarm"
-msgstr "Alarm"
-
-#: src/alarm/interface.c:109
-msgid "This is your wakeup call."
-msgstr "Bu sizin uyandırma çağrınız."
-
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
-msgid "OK"
-msgstr "Tamam"
-
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "Parça Listesini Seç"
-
-#: src/alarm/interface.c:196
-msgid "Sorry"
-msgstr "Üzgünüm"
-
-#: src/alarm/interface.c:204
-msgid "Warning"
-msgstr "Uyarı"
-
-#: src/alarm/interface.c:213
-msgid ""
-"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
-"than the fading time, it must also be more than 10 seconds. This basically "
-"means that there is a bug in the code and until I find a way of really "
-"fixing it this message will appear :)\n"
-"\n"
-"Your fading settings have NOT been saved\n"
-"\n"
-"--\n"
-"Adam"
-msgstr ""
-"Güvenlik nedenlerinden dolayı, \"sessiz\" zaman en az 10 saniye ve yavaş "
-"geçiş zamanından da en az 65 saniye daha uzun olmalıdır."
-
-#: src/alarm/interface.c:229
-msgid "Oh Well"
-msgstr "Oh Peki"
-
-#: src/alarm/interface.c:388
-msgid "Alarm Settings"
-msgstr "Alarm Ayarları"
-
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
-msgid "Time"
-msgstr "Zaman"
-
-#: src/alarm/interface.c:445
-msgid "hours"
-msgstr "saat"
-
-#: src/alarm/interface.c:506
-msgid "h"
-msgstr "s"
-
-#: src/alarm/interface.c:536
-msgid "minutes"
-msgstr "dakika"
-
-#: src/alarm/interface.c:554
-msgid "Quiet after:"
-msgstr "Sonra çık:"
-
-#: src/alarm/interface.c:564
-msgid "Alarm at (default):"
-msgstr "Alarmı çal (öntanımlı):"
-
-#: src/alarm/interface.c:584
-msgid "Choose the days for the alarm to come on"
-msgstr "Alarmın çalacağı günleri seçiniz"
-
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
-msgid "Default"
-msgstr "Öntanımlı"
-
-#: src/alarm/interface.c:938
-msgid "Day"
-msgstr "Gün"
-
-#: src/alarm/interface.c:958
-msgid "Tuesday"
-msgstr "Salı"
-
-#: src/alarm/interface.c:969
-msgid "Wednesday"
-msgstr "Çarşamba"
-
-#: src/alarm/interface.c:980
-msgid "Thursday"
-msgstr "PerÅŸembe"
-
-#: src/alarm/interface.c:991
-msgid "Friday"
-msgstr "Cuma"
-
-#: src/alarm/interface.c:1002
-msgid "Saturday"
-msgstr "Cumartesi"
-
-#: src/alarm/interface.c:1013
-msgid "Sunday"
-msgstr "Pazar"
-
-#: src/alarm/interface.c:1023
-msgid "Monday"
-msgstr "Pazartesi"
-
-#: src/alarm/interface.c:1034
-msgid "Days"
-msgstr "Günler"
-
-#: src/alarm/interface.c:1050
-msgid "Fading"
-msgstr "Yavaş geçiş"
-
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
-msgid "seconds"
-msgstr "saniye"
-
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
-msgid "Volume"
-msgstr "Ses"
-
-#: src/alarm/interface.c:1121
-msgid "Current"
-msgstr "Güncel"
-
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "güncel çıktı sesine dön"
-
-#: src/alarm/interface.c:1130
-msgid "Start at"
-msgstr "BaÅŸlat"
-
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
-msgid "%"
-msgstr "%"
-
-#: src/alarm/interface.c:1174
-msgid "Final"
-msgstr "Sonlandır"
-
-#: src/alarm/interface.c:1227
-msgid "Additional Command"
-msgstr "Ek Komutlar"
-
-#: src/alarm/interface.c:1253
-msgid "enable"
-msgstr "etkinleÅŸtir"
-
-#: src/alarm/interface.c:1261
-msgid "Playlist (optional)"
-msgstr "Parça listesi (seçmeli)"
-
-#: src/alarm/interface.c:1287
-msgid "Browse..."
-msgstr "Gözat..."
-
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
-msgid "Reminder"
-msgstr "Hatırlatıcı"
-
-#: src/alarm/interface.c:1312
-msgid "Use reminder"
-msgstr "Hatırlatıcıyı kullan"
-
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
-msgid "Options"
-msgstr "Seçenekler"
-
-#: src/alarm/interface.c:1336
-msgid "What do these options mean?"
-msgstr "Bu seçenekler ne anlama geliyor?"
-
-#: src/alarm/interface.c:1364
-msgid ""
-"\n"
-"Time\n"
-" Alarm at: \n"
-" The time for the alarm to come on.\n"
-"\n"
-" Quiet After: \n"
-" Stop alarm after this amount of time.\n"
-" (if the wakeup dialog is not closed)\n"
-"\n"
-"\n"
-"Days\n"
-" Day:\n"
-" Select the days for the alarm to activate.\n"
-"\n"
-" Time:\n"
-" Choose the time for the alarm on each day,\n"
-" or select the toggle button to use the default\n"
-" time.\n"
-"\n"
-"\n"
-"Volume\n"
-" Fading: \n"
-" Fade the volume up to the chosen volume \n"
-" for this amount of time.\n"
-"\n"
-" Start at: \n"
-" Start fading from this volume.\n"
-"\n"
-" Final: \n"
-" The volume to stop fading at. If the fading\n"
-" time is 0 then set volume to this and start\n"
-" playing.\n"
-"\n"
-"\n"
-"Options:\n"
-" Additional Command:\n"
-" Run this command at the alarm time.\n"
-"\n"
-" Playlist: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-msgstr ""
-"\n"
-"Zaman\n"
-" Alarmı çal: \n"
-" Alarmın çalma zamanı.\n"
-"\n"
-" Sonra çık: \n"
-" Belirtilen süreden sonra alarmı kapat.\n"
-" (eğer uyandırma penceresi kapatılmamışsa)\n"
-"\n"
-"\n"
-"Günler\n"
-" Gün:\n"
-" Alarmın etkin olacağı günleri seçin.\n"
-"\n"
-" Zaman:\n"
-" Her bir gün için alarm zamanını seçin,\n"
-" veya önanımlı zamanı kullanmak için\n"
-" değiştirme düğmesini seçin.\n"
-"\n"
-"\n"
-"Ses\n"
-" Yavaş geçiş: \n"
-" Belirtilen sürede sesi istenen ses seviyesine\n"
-" çıkarır.\n"
-"\n"
-" BaÅŸlat: \n"
-" Bu ses seviyesinden sesi yükseltmeye başlar.\n"
-"\n"
-" Sonlandır: \n"
-" Yükseltmenin durdurulacağu ses düzeyi. Eğer\n"
-" yavaş geçiş süresi 0 ise, sesi bu düzeye ayarlar\n"
-" ve çalmaya başlar.\n"
-"\n"
-"\n"
-"Seçenekler:\n"
-" El Lomutlar:\n"
-" Alarm zamanında bu komutu çalıştırır.\n"
-"\n"
-" Parça listesi: \n"
-" Load this playlist for playing songs from \n"
-" (must have .m3u extension). If no playlist\n"
-" is given then the songs which are currently\n"
-" in the list will be used.\n"
-" The URL of an mp3/ogg stream can also be\n"
-" entered here, but loading of playlists from\n"
-" URLs is not currently supported by xmms.\n"
-"\n"
-" Reminder:\n"
-" Display a reminder when the alarm goes off,\n"
-" type the reminder in the box and turn on the\n"
-" toggle button if you want it to be shown.\n"
-
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
-msgid "Help"
-msgstr "Yardım"
-
-#: src/alarm/interface.c:1468
-msgid "Your reminder for today is.."
-msgstr "Bugün için hatırlatıcınız.."
-
-#: src/alarm/interface.c:1493
-msgid "Thankyou"
-msgstr "Teşekkürler"
-
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
#, fuzzy
msgid "Default PCM device"
msgstr "Varsayılan PCM aygıtı (%s)"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
#, fuzzy
msgid "Default mixer device"
msgstr "Varsayılan PCM aygıtı (%s)"
-#: src/alsa/config.c:438
+#: src/alsa/config.c:447
#, fuzzy
msgid "ALSA Output Plugin Preferences"
msgstr "Durum Simgesi Eklentisi - Tercihler"
-#: src/alsa/config.c:445
+#: src/alsa/config.c:454
#, fuzzy
msgid "PCM device:"
msgstr "Karıştırıcı aygıt:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:456 src/OSS/configure.c:246
msgid "Mixer device:"
msgstr "Karıştırıcı aygıt:"
-#: src/alsa/config.c:449
+#: src/alsa/config.c:458
#, fuzzy
msgid "Mixer element:"
msgstr "Karıştırıcı aygıt:"
-#: src/alsa/config.c:452
+#: src/alsa/config.c:461
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
#, fuzzy
msgid "About ALSA Output Plugin"
msgstr "JACK Çıkış Eklentisi 0.17 Hakkında"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
#, fuzzy
msgid "ALSA error"
msgstr "Terör"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -671,11 +113,11 @@ msgstr ""
"bulunan bir MIDI sesini donanımsal olarak elde etmekiçin kullanılır.\n"
"Arkayüzü yazan, Giacomo Lozito"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FluidSynth Arkayüzü "
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -690,85 +132,43 @@ msgstr ""
"eklentisi tarafından işlem yapılır.\n"
"Arkayüzü yazan, Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSA BACKEND AYARLARI"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "Port"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "İstemci adı"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "Port adı"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSA çıkış portları"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "Ses kartı: "
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
msgstr "Karıştırıcı kontrolü: "
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "Karıştırıcı ayarları"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-"* ALSA çıkış portlarını seçin *\n"
-"Midi olayları burada seçtiğiniz portlara gönderilecekler. Örneğin, eğer ses "
-"kartınız donanımsal bir ses işleme sunuyorsa ve siz bununla midi çalmak "
-"istiyorsanız, wavetable sentezleyici portlarını seçmeniz gerekecektir."
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* ALSA karıştırıcı kartı seç *\n"
-"ALSA çıkış eklentileri direkt ALSA kullanarak çalışır, oynatıcılardan gelen "
-"çıkış eklentilerini kullanmaz. Yürütme yaparken, oynatıcı ses seviyesini "
-"işleyen karıştırıcı kontrolünü buradan seçebilirsiniz. Eğer wavetable "
-"sentezleme portlarını kullanıyorsanız, buradan Sentez seçimini "
-"yapabilirsiniz."
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-"* ALSA karıştırıcı kartı seç *\n"
-"ALSA çıkış eklentileri direkt ALSA kullanarak çalışır, oynatıcılardan gelen "
-"çıkış eklentilerini kullanmaz. Yürütme yaparken, oynatıcı ses seviyesini "
-"işleyen karıştırıcı kontrolünü buradan seçebilirsiniz. Eğer wavetable "
-"sentezleme portlarını kullanıyorsanız, buradan Sentez seçimini "
-"yapabilirsiniz."
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSA Arkayüzü yüklü değil veya erişilemiyor."
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
@@ -776,145 +176,51 @@ msgstr ""
"<span size=\"smaller\">ALSA\n"
"arkayüzü</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - arkayüz bilgisi"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-PLUG AYARLARI"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "Arkayüz seçimi"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "Kullanılabilir arkayüzler"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "Oynatma ayarları"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr "Transpose: "
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr "Davul tonlaması:"
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "GeliÅŸmiÅŸ ayarlar"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "parça listesindeki MIDI dosyalarının uzunluklarının ön hesaplaması"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "MIDI dosyalarından yorumları aktar (eğer varsa)"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "MIDI dosyalarından şarkı sözlerini aktar (eğer varsa)"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-"* Backend Seçimi *\n"
-"AMIDI-Plug 'ın çalışması için bir ses sunucusuna ihtiyacınız vardır ve ses "
-"sunucunuzu seçtikten sonra MIDI olaylarını ele alabilir ve çalabilirsiniz.\n"
-"Eğer ses kartınızda donanımsal ses işleme özelliği var ise ve ALSA bunu "
-"destekliyorsa ALSA ses sunucusunu kullanmak isteyebilirsiniz. ALSA ses "
-"sunucusu desteklediği tüm donanımsal ve yazılımsal araçları, onun "
-"arayüzünden kullanabilirsiniz.\n"
-"Eğer yazılımsal ses işleme kullanmak ve/veya efektinize ses enjekte etmek ve "
-"oynatıcınızın çıkış eklentisini eklemek isterseniz, FluidSynth sunucusunu "
-"kullanabilirsiniz. \n"
-"Daha detaylı bilgi için her bir sunucunun dökümanlarına göz atın."
-
-#: src/amidi-plug/i_configure-ap.c:331
-#, fuzzy
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-"* Transpose fonksiyonu *\n"
-"Bu özellik midi dosyasının başka bir tonda çalınmasını sağlar.Bu ayarda her "
-"bir numara bir yarım tonu temsil eder. Tüm notalar belirlenen tona aktarılır."
-"(10. kanal vurmalı çalgılara ayrılmıştır.)"
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-"* Davul tonlama fonksiyonu *\n"
-"Bu özellik 10. kanal üzerindeki notaları (vurmalı çalgılar kanalı) yarımşar "
-"ses olarak ayarlamanızı sağlar. Bu özelliği kullanarak farklı davul "
-"setleriyle farklı sesler elde edip çaldırabilirsiniz."
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-"* MIDI uzunluğunun ön hesaplaması *\n"
-"Eğer bu seçeneği işaretlerseniz, AMIDI-Plug parça listesinde olan MIDI lerin "
-"uzunluklarını hesaplayacakdır aksi takdirde sadece çalma/oynatma esnasında "
-"hesaplama yapılır. Eğer çalma listesinin daha hızlı yüklenmesini "
-"istiyorsanızbu özelliği devre dışı bırakın."
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-"*MIDI dosyalarından yorumları çıkar*\n"
-"Bazı MIDI dosyaları metin biçeminde yorumlar içerir (yazar, telif hakkı, "
-"çalgı notları, vs.). Bu seçenek açılırsa, AMIDI-Plug (varsa) yorumları "
-"çıkarır ve dosya bilgisi ekranında gösterir."
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-"*MIDI dosyalarından şarkı sözlerini çıkar*\n"
-"Bazı MIDI dosyaları şarkı sözleri içerir. Bu seçenek açılırsa, AMIDI-Plug "
-"(varsa) şarkı sözlerini çıkarır ve dosya bilgisi ekranında gösterir."
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
@@ -922,233 +228,113 @@ msgstr ""
"<span size=\"smaller\">AMIDI\n"
"Eklentisi</span>"
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - dosya seç"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - Yapılandırması"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - SoundFont dosyası seç"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "FLUIDSYNTH ARKAYÃœZ AYARLARI"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "SoundFont ayarları"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Dosya adı"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "Boyut (bayt)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "Çalıcı başladığında SF'yi yükle"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "İlk midi dosyasını çaldığında SF'yu yükle"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "Sentezleyici ayarları"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "kazanç"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "öntanımlıyı kullan"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "deÄŸer:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
msgstr "çokseslilik"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
msgstr "derinlik"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "evet"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "hayır"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
msgstr "koro"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "örnekleme oranı"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr "22050 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr "44100 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr "96000 Hz "
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
msgstr "custom "
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr "Hz "
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-"* SoundFont dosyası seç *\n"
-"FluidSynth ile MIDI çalmak için geçerli SoundFont dosyasını seçmelisiniz."
-"(tam yolu kullanın). Yükleme seçeneklerini yukarıdan, aşağıya doğru "
-"görebilirsiniz."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"* Oynatıcı başlangıcında SoundFont yükle *\n"
-"FluidSynth içerisinde SoundFont yükleme süresi sisteminizin hızına göre "
-"birkaç saniye sürecektir. Bu işlem bir kereliğine oynatıcı açılışında ya da "
-"ilk MIDI dosyası oynatılmadan önce yapılabilir. SoundFont bilgisi "
-"değiştirilene ya da uygulama hafızadan çıkarılana kadar kullanılabilir "
-"kalacaktır. Oynatıcınızı sadece MIDI dosyaları için kullanmıyorsanız "
-"SoundFont yüklemesini MIDI oynatılmadan önce yapılmasını tavsiye ederiz."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-"*İlk MIDI dosyasını çaldığında SF'u yükle *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-"* Sentezleyici kazancı *\n"
-"FluidSynth belgelerinden: kazanç sentezleyicinin final ya da ana çıkışına "
-"uygulanır; rastgele MIDI dosyaları oynatıldığında çıktı doygunluğu "
-"oluşmaması için öntanımlı olarak düşük bir değere ayarlanır."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-"* Sentezleyici polifoni *\n"
-"FluidSynth belgelerinden: polifoni aynı anda paralel olarak kaç sesin "
-"oynatılabileceğini belirler; seslerin adedinin aynı anda çalınan nota "
-"adedine eşit olması gerekmemektedir; belirli bir MIDI kanalında bir nota "
-"basıldığında kanal ayarlarına göre birden fazla ses çalınabilir, örneğin sol "
-"kanal için bir ses ve sağ kanal için başka bir ses; kullanılan ses adedi "
-"çalınan notanın hızı ve anahtarına bağlı olarak enstrüman bölgelerinin "
-"sayısına bağlıdır."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Sentezleyici reverb *\n"
-"FluidSynth belgelerinden: \"evet\" olarak ayarlandığında reverb efekt modülü "
-"çalışır; reverb modülü çalışırken reverb modülüne yollanan sinyal miktarı "
-"Soundfont içerisinde tanımlanan \"reverb send\" üreticisi tarafından "
-"belirlenir."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-"* Senteleyici koro *\n"
-"FluidSynth belgelerinden: \"evet\" olarak ayarlandığında koro modülü "
-"çalışır; koro modülü çalışırken koro modülüne yollanan sinyal miktarı "
-"Soundfont içerisinde tanımlanan \"chorus send\" üreticisi tarafından "
-"belirlenir."
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-#, fuzzy
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* Sentezleyici örnekleme oranı *\n"
-"Sentezleyici tarafından üretilen sesin örnekleme oranı. Ayrıca isterseniz "
-"22050Hz-96000Hz aralığından özel bir değer de atayabilirsiniz.\n"
-"NOT: öntanımlı tampon parametreleri 44100Hz için hazırlanmıştır; ses "
-"kalitesinikaybetmemek için örnekleme oranı değişince tampon parametrelerini "
-"deÄŸiÅŸtirmeniz gerekebilir"
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynth Arkayüzü yüklü değil veya erişilemiyor"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1172,8 +358,7 @@ msgstr ""
"<span size=\"smaller\">TiMidity\n"
"arkayüzü</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169 src/sid/xs_interface.c:1769
msgid "Name:"
msgstr "Ä°sim:"
@@ -1345,119 +530,119 @@ msgstr "Bekletme Kapalı"
msgid "Triggers OSD when playback is unpaused."
msgstr "Çalmaya yeniden başladığında OSD'yi başlatır."
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "YerleÅŸtirme"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "DeÄŸiÅŸken X deÄŸeri:"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "DeÄŸiÅŸken Y deÄŸeri:"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "Maksimum OSD geniÅŸliÄŸi:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "Çoklu Ekran seçenekleri"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
msgstr "OSD kullanımını göster:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "tüm ekranlar"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "ekran %i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "Zamanlama (ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "Görüntü:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
msgstr "Gecikme:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
msgstr "Kaybolma:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "Yazı Tipleri"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "Yazı tipi %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "Gölge"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "Uluslararasılaştırma"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "Metnin UTF-8 dönüşümünü iptal et (aosd)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "Deri Dosyasını Seçin"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "Tarama Biçemi"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "Renkler"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "Renkler %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "Özel Deri"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "Deri dosyası:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
+#: src/aosd/aosd_ui.c:672 src/sid/xs_interface.c:1044
#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
msgid "Browse"
msgstr "Gözat"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "Tetikleyiciyi etkinleÅŸtir"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "Olay"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "Composite yöneticisi tespit edildi"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1467,73 +652,73 @@ msgstr ""
"Çalışan bir Composite yöneticisinin olduğundan emin değilseniz lütfen "
"OSD'nin düzgün çalışması için bir Composite yöneticisi çalıştırınız"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "Sahte şeffaflık için composite yöneticisi gerekli değil"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "Şeffaflık"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "Sahte şeffaflık"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "Gerçek Şeffaflık (X Composite Eklentisi gerekli)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "Composite eklentisi yüklü değil"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "Composite eklentisi eriÅŸilebilir deÄŸil"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - yapılandırması"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "Test"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "Konum"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "Canlandırma"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "Metin"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "Dekorasyon"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "BaÅŸlat"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+#: src/sid/xs_interface.c:1302
msgid "Misc"
msgstr "Çeşitli"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Audacius OSD - hakkında"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
@@ -1541,7 +726,7 @@ msgstr ""
"\n"
"Audacious OSD "
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1564,133 +749,6 @@ msgstr ""
"Ghosd kütüphanesini hazırlayan Evan Martin\n"
"\n"
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr ""
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr ""
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr ""
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr ""
-
-#: src/bluetooth/gui.c:221
-#, fuzzy
-msgid "Available Headsets"
-msgstr "Kullanılabilir arkayüzler"
-
-#: src/bluetooth/gui.c:224
-#, fuzzy
-msgid "Current Headset"
-msgstr "Güncel"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr ""
-
-#: src/bluetooth/gui.c:231
-#, fuzzy
-msgid "_Connect"
-msgstr "Bağlantı modu:"
-
-#: src/bluetooth/gui.c:237
-#, fuzzy
-msgid "_Close"
-msgstr "Kapat"
-
-#: src/bluetooth/gui.c:274
-#, fuzzy
-msgid "Class"
-msgstr "Klasik"
-
-#: src/bluetooth/gui.c:278
-#, fuzzy
-msgid "Address:"
-msgstr "Aygıt Adresi"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr ""
-
-#: src/bluetooth/scan_gui.c:138
-#, fuzzy
-msgid "Rescan"
-msgstr "Dikdörtgen"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-#, fuzzy
-msgid "Play"
-msgstr "Oynatma süresi:"
-
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr "Bulanık alan: Renk seçimi"
@@ -1699,12 +757,12 @@ msgstr "Bulanık alan: Renk seçimi"
msgid "Options:"
msgstr "Seçenekler:"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:264
#, fuzzy
msgid "About Audio CD Plugin"
msgstr "FLAC Ses Eklentisi Hakkında"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:265
#, fuzzy
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
@@ -1731,129 +789,164 @@ msgstr ""
"\n"
"Bu bir Google Summer of Code 2007 projesidir."
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:558
+#, fuzzy
+msgid "Audio CD"
+msgstr "Ses"
+
+#: src/cdaudio-ng/cdaudio-ng.c:913
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:915
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "CD Audio Eklentisi Yapılandırması"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "Sayısal ses elde etme"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "Başlık bilgisi"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
#, fuzzy
msgid "Disc speed:"
msgstr "Saat hızı:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "Varsa CD Bilgisini kullan"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "Varsa CDDB kullan"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "Sunucu: "
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
#, fuzzy
msgid "Path: "
msgstr "Örnek: "
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "Port: "
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr ""
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "Öntanımlı aygıtın üstüne yaz: "
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:131
+#: src/echo_plugin/gui.c:123 src/jack/configure.c:146 src/null/null.c:112
+#: src/stereo_plugin/stereo.c:125
+msgid "Ok"
+msgstr "Tamam"
+
+#: src/cdaudio-ng/configure.c:249 src/crystalizer/crystalizer.c:138
+#: src/echo_plugin/gui.c:130 src/jack/configure.c:153 src/null/null.c:113
+#: src/stereo_plugin/stereo.c:132
+msgid "Cancel"
+msgstr "Ä°ptal"
+
+#: src/cd-menu-items/cd-menu-items.c:34
#, fuzzy
msgid "Play CD"
msgstr "Oynatma süresi:"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "CD Ekle"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:67
#, fuzzy
msgid "About Dynamic Range Compression Plugin"
msgstr "Ekstra Stereo Eklentisi Hakkında"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:99
#, fuzzy
msgid "Dynamic Range Compressor Preferences"
msgstr "AudioCompress seçenekleri"
-#: src/compressor/plugin.c:103
+#: src/compressor/plugin.c:111
#, fuzzy
-msgid "Target volume:"
+msgid "Center volume:"
msgstr "Ses seviyesini deÄŸiÅŸtir"
-#: src/compressor/plugin.c:116
-#, fuzzy
-msgid "Effect strength:"
-msgstr "Efekt yoÄŸunluÄŸu:"
+#: src/compressor/plugin.c:124
+msgid "Dynamic range:"
+msgstr ""
-#: src/console/configure.c:137
+#: src/console/configure.c:138
#, fuzzy
msgid "Game Console Music Decoder"
msgstr "Konsol Müzik Çözücüsü"
-#: src/console/configure.c:171
+#: src/console/configure.c:155
+msgid "General"
+msgstr "Genel"
+
+#: src/console/configure.c:157 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "Çal"
+
+#: src/console/configure.c:172
msgid "Bass:"
msgstr "Bas:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:176 src/console/configure.c:187
+#: src/console/configure.c:208
msgid "secs"
msgstr "saniye"
-#: src/console/configure.c:182
+#: src/console/configure.c:183
msgid "Treble:"
msgstr "Tiz:"
-#: src/console/configure.c:203
+#: src/console/configure.c:204
msgid "Default song length:"
msgstr "Varsayılan şarkı uzunluğu:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:210 src/sid/xs_interface.c:666
msgid "Resampling"
msgstr "Yeniden örnekleme"
-#: src/console/configure.c:215
+#: src/console/configure.c:216
msgid "Enable audio resampling"
msgstr "Ses örneklemesini etkinleştir"
-#: src/console/configure.c:230
+#: src/console/configure.c:231
msgid "Resampling rate:"
msgstr "Örnekleme oranı:"
-#: src/console/configure.c:245
+#: src/console/configure.c:235 src/sid/xs_interface.c:354
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:246
msgid "SPC"
msgstr "SPC"
-#: src/console/configure.c:246
+#: src/console/configure.c:247
msgid "Ignore length from SPC tags"
msgstr "SPC etiketlerindeki uzunluğu gözardı et"
-#: src/console/configure.c:247
+#: src/console/configure.c:248
msgid "Increase reverb"
msgstr "Derinliği artır"
-#: src/console/configure.c:272
+#: src/console/configure.c:273
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
@@ -1879,31 +972,31 @@ msgstr ""
"Audacious için uyarlayan: William Pitcock <nenolod@nenolod.net>, \n"
" Shay Green <gblargg@gmail.com>"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:65
#, fuzzy
msgid "About Crossfade"
msgstr "Scrobbler Eklentisi Hakkında"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:97
#, fuzzy
msgid "Crossfade Preferences"
msgstr "AudioCompress seçenekleri"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:109
msgid "Overlap (in seconds):"
msgstr ""
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:140 src/crossfade/plugin.c:146
#, fuzzy
msgid "Crossfade Error"
msgstr "Crossover"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:140
msgid ""
"Crossfading failed because the songs had a different number of channels."
msgstr ""
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:148
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
@@ -1911,21 +1004,25 @@ msgid ""
"same rate."
msgstr ""
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:108
#, fuzzy
msgid "Configure Crystalizer"
msgstr "Ekstra Stereo Eklentisini Yapılandır"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:110 src/stereo_plugin/stereo.c:104
msgid "Effect intensity:"
msgstr "Efekt yoÄŸunluÄŸu:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:144 src/echo_plugin/gui.c:136
+#: src/stereo_plugin/stereo.c:138
msgid "Apply"
msgstr "Uygula"
-#: src/echo_plugin/gui.c:14
+#: src/daemon/daemon.c:58
+msgid "Daemon Interface (like old headless mode)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
@@ -1937,414 +1034,52 @@ msgstr ""
"\n"
"Surround Eko - Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
msgstr "Yankı (Eko) Eklentisi Hakkında"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:72
msgid "Configure Echo"
msgstr "Yankı (Eko) Eklentisini Yapılandır"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:88
msgid "Delay: (ms)"
msgstr "Gecikme: (ms )"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:93
msgid "Feedback: (%)"
msgstr "Geribesleme: (%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:98
msgid "Volume: (%)"
msgstr "Ses: (%)"
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr "Çal"
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr "Dur"
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr "Durakla"
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr "Geri Sar"
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr "Playback->Ä°leri"
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr "Playback->Çıkart"
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr "Tekrarla"
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr "Rastgele"
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr "Sesi 5 Birim Artır"
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr "Sesi 5 Birim Azalt"
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr "Sesi 10 Birim Artır"
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr "Sesi 10 Birim Azalt"
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr "Sessiz"
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr "Ana Ekran"
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr "Çalma Listesi"
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr "Ekolayzır"
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr "Dosya Çal"
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-"event-device-plugin: %s diye belirtilen dosya açılamıyor.\n"
-"Cihaz durduruldu. Dosya yolunun, adının doğruluğunu\n"
-"ve erişim haklarınızı kontrol edin.\n"
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-"event-device-plugin: %s aygıt dosyası okunurken giriş-çıkış hatası\n"
-"meydana geldi. Aygıt okuma işlemi durduruldu.\n"
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: /proc/bus/input/devices açılamıyor.\n"
-"Otomatik başlatma yapılamıyor.\n"
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: /proc/bus/input/devices için girdi-çıktı hatası, "
-"otomatik tanımlama yapılamıyor.\n"
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-"event-device-plugin: /proc/bus/input/devices okunurken hata oluÅŸtu, otomatik "
-"tanımlama çalışmayacak.\n"
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-"event-device-plugin: /dev/input içerisinde aygıt %s bulunamadı, es "
-"geçiliyor.\n"
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-"event-device-plugin: ayar dosyası %s yüklenemiyor, öntanımlı ayarlar "
-"kullanılacak.\n"
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-"event-device-plugin: ayar dosyasında \"%s\" aygıtı için yetersiz bilgi "
-"bulundu, es geçiliyor.\n"
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: ayarlar, \"%s\" aygıtının çalıştığı bilgisine "
-"ulaşılamadı, es geçiliyor.\n"
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
-"event-device-plugin: yerel dizin %s eriÅŸilemiyor, ayarlar kaydedilmeyecek.\n"
-
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugn: ayarlar, aygıt \"%s\" için filename değeri alınamıyor, "
-"es geçiliyor.\n"
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-"event-device-plugin: ayarlar, aygıt \"%s\" için phys değeri alınamıyor, es "
-"geçiliyor.\n"
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-"event-device-plugin: ayarlar, aygıt \"%s\" için is_custom değeri alınamıyor, "
-"es geçiliyor.\n"
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-"event-device-plugin: ayarlar, aygıt \"%s\" için beklenmeyen bir değer "
-"alındı, es geçiliyor.\n"
-
-#: src/evdev-plug/ed_ui.c:212
-#, fuzzy
-msgid "Detected"
-msgstr "Şarkı sonunu tespit et"
-
-#: src/evdev-plug/ed_ui.c:217
-#, fuzzy
-msgid "Custom"
-msgstr "custom "
-
-#: src/evdev-plug/ed_ui.c:223
-#, fuzzy
-msgid "Not Detected"
-msgstr "Biçim seçimi"
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr "Bilgi"
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-"Tanınmamış bir aygıt için ilişkilendirme penceresi açılamıyor.\n"
-"Aygıtın düzgün bir şekilde sisteme takılı olduğundan emin olun."
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr "Hata"
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-"Seçili aygıt açılamıyor.\n"
-"Aygıt dosyasına okuma hakkınız olduğundan emin olun."
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr "EvDev-Plug - Özel aygıt ekle"
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-"EvDev-Plug otomatik olarak sisteminizde olay üreten aygıtları tanımaya\n"
-"ve hakkında bilgi toplamaya çalışır.\n"
-"Yine de otomatik tanıma başarısız olursa ya da sizin standart dışında bir "
-"yerde\n"
-"olay üreten bir aygıtınız varsa (öntanımlı olarak /dev/input/ altında "
-"aranırlar)\n"
-"elle aygıt adını ve aygıt dosyasını tanımlayarak özel bir aygıt tanımlamak\n"
-"isteyebilirsiniz."
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr "Aygıt ismi:"
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr "Aygıt dosyası:"
-
-#: src/evdev-plug/ed_ui.c:404
-#, fuzzy
-msgid "(custom)"
-msgstr "custom "
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-"Lütfen hem isim hem de dosya ismi belirleyiniz.\n"
-"Dosya ismi tam dizin bilgisi ile belirlenmelidir."
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr "Seçilen aygıt için mevcut olan ayarları kaldırmak istiyor musunuz?\n"
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr "Seçili olan özel aygıtı kaldırmak istiyor musunuz?\n"
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr "EvDev-Plug - Yapılandırması"
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr "Etkin"
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr "Durum"
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr "Aygıt İsmi"
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr "Aygıt Dosyası"
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr "Aygıt Adresi"
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr "_Bağlantılar"
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-"Bağlamak için aygıtınızda bir tuşa basınız;\n"
-"Beş saniye içerisinde herhangi bir tuşa basılmazsa\n"
-"bu pencere bağlama işlemi yapmadan kapanacaktır."
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-"Bu girdi olayı önceden atanmış.\n"
-"\n"
-"Aynı girdi olayına birden fazla eylem atanamaz (ama aynı eylem birden fazla "
-"olaya atanabilir)."
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr "EvDev-Plug - Bağlayıcı Yapılandırması"
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr "<b>Ä°sim: </b>"
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr "<b>Dosya ismi: </b>"
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr "<b>Fiziksel Adres: </b>"
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr "EvDev-Plug hakkında"
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-"\n"
-"olay aygıtları ile oynatıcı uzakten yöneticisi\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"Giacomo Lozito tarafından yazılmıştır\n"
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:763
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:777
#, fuzzy
msgid "About FFaudio Plugin"
msgstr "FLAC Ses Eklentisi Hakkında"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:155
msgid "About FileWriter-Plugin"
msgstr "FileWriter Eklentisi Hakkında"
-#: src/filewriter/filewriter.c:181
+#: src/filewriter/filewriter.c:156
#, fuzzy
msgid ""
"FileWriter-Plugin\n"
@@ -2383,250 +1118,208 @@ msgstr ""
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
"USA."
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:450
msgid "File Writer Configuration"
msgstr "File Writer Ayarları"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:462
msgid "Output file format:"
msgstr "Çıktı dosya biçimi:"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:480
msgid "Configure"
msgstr "Yapılandır"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:495
msgid "Save into original directory"
msgstr "Orjinal dizine kaydet"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:500
msgid "Save into custom directory"
msgstr "Özel dizine kaydet"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:510
msgid "Output file folder:"
msgstr "Çıktı dosya klasörü:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:514
msgid "Pick a folder"
msgstr "Dizin seçimi"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:533
msgid "Get filename from:"
msgstr "Dosya adı kaynağı:"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:536
msgid "original file tags"
msgstr "orijinal dosya iÅŸaretleri"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:542
msgid "original filename"
msgstr "özgün dosya adı"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:552
msgid "Don't strip file name extension"
msgstr "Dosya ismi uzantılarını daraltma"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-"Seçildiğinde, yeni oluşturulan dosyaya yeni uzantı eklenirken eski dosyanın "
-"uzantısı dosya adından çıkarılmaz."
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:567
msgid "Prepend track number to filename"
msgstr "Parça numarısını dosya adına ekle"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:783
+msgid "Auto"
+msgstr "Otomatik"
+
+#: src/filewriter/mp3.c:38
+#, fuzzy
+msgid "Joint Stereo"
+msgstr "BirleÅŸik Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:308
+msgid "Stereo"
+msgstr "Stereo"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183 src/sid/xs_interface.c:301
+msgid "Mono"
+msgstr "Mono"
+
+#: src/filewriter/mp3.c:724
msgid "MP3 Configuration"
msgstr "MP3 Yapılandırması"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:747
msgid "Algorithm Quality:"
msgstr "Algoritma Kalitesi:"
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
-"en iyi/en yavaÅŸ:0;\n"
-"en kötü/en hızlı:9;\n"
-"önerilen:2;\n"
-"öntanımlı:5;"
-
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:772
msgid "Output Samplerate:"
msgstr "Çıktı Örnekleme Oranı:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr "Otomatik"
-
#: src/filewriter/mp3.c:800
msgid "(Hz)"
msgstr "(Hz)"
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:807
msgid "Bitrate / Compression ratio:"
msgstr "Bit oranı / Sıkıştırma oranı:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:831
msgid "Bitrate (kbps):"
msgstr "Bit oranı (kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:864
msgid "Compression ratio:"
msgstr "Sıkıştırma oranı:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:888
msgid "Audio Mode:"
msgstr "Ses Kipi:"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr "BirleÅŸik Stereo"
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:913
msgid "Misc:"
msgstr "Çeşitli"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:924
msgid "Enforce strict ISO complience"
msgstr "ISO standartlarına mutlak uyum gözetmeye zorla"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:935
msgid "Error protection"
msgstr "Hata koruması"
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr "Her çerçeveye 16 bit checksum ekler"
-
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:947 src/filewriter/vorbis.c:245
msgid "Quality"
msgstr "Kalite"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:957
msgid "Enable VBR/ABR"
msgstr "VBR/ABR etkinleÅŸtir"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:967
msgid "Type:"
msgstr "Tür:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr "Değişken bit oranı"
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr "Ortalama bit oranı"
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:1000
msgid "VBR Options:"
msgstr "VBR Seçenekleri:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1016
msgid "Minimum bitrate (kbps):"
msgstr "En düşük bit oranı (kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1043
msgid "Maximum bitrate (kbps):"
msgstr "En yüksek bit oranı (kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1066
msgid "Strictly enforce minimum bitrate"
msgstr "En düşük bit oranını tam olarak zorla"
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
-"Düşük bit oranlı mp3'leri desteklemeyen çalıcılarla kullanılması için (Apex "
-"AD600-A DVD/mp3 player)"
-
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1078
msgid "ABR Options:"
msgstr "ABR Seçenekleri:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1088
msgid "Average bitrate (kbps):"
msgstr "Ortalama bit oranı (kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1116
msgid "VBR quality level:"
msgstr "VBR kalite seviyesi:"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-"yüksek:0;\n"
-"alçak:9;\n"
-"öntanımlı:4;"
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1135
msgid "Don't write Xing VBR header"
msgstr "Xing VBR başlığını yazma"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1149
msgid "VBR/ABR"
msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1159
msgid "Frame params:"
msgstr "Çerçeve parametreleri:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1171
msgid "Mark as copyright"
msgstr "Telif hakkı olarak işaretle"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1182
msgid "Mark as original"
msgstr "Orijinal olarak iÅŸaretle"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1194
msgid "ID3 params:"
msgstr "ID3 parametreleri:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1205
msgid "Force addition of version 2 tag"
msgstr "sürüm 2 etkiketin eklenmesini zorla"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1215
msgid "Only add v1 tag"
msgstr "Sadece v1 etiketini ekle"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1222
msgid "Only add v2 tag"
msgstr "Sadece v2 etiketini ekle"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1243
msgid "Tags"
msgstr "Etiketler:"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:238
msgid "Vorbis Encoder Configuration"
msgstr "Vorbis Kodlayıcı Ayarları"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:258
msgid "Quality level (0 - 10):"
msgstr "Kalite seviyesi (0 - 10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC Ses Eklentisi "
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "FLAC Ses Eklentisi Hakkında"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2642,15 +1335,11 @@ msgstr ""
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "FLAC Ses Eklentisi Hakkında"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "Gnome Kısayol Eklentisi Hakkında"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
#, fuzzy
msgid ""
"Gnome Shortcut Plugin\n"
@@ -2665,527 +1354,510 @@ msgstr ""
"Telif Hakkı (C) 2007 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr ""
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
#, fuzzy
msgid "Add Files"
msgstr "Filtreler"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
#, fuzzy
msgid "Audacious2"
msgstr "%s - Audacious"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr ""
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+#: src/gtkui/columns.c:36
+#, fuzzy
+msgid "Entry number"
+msgstr "Parça numarası:"
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
+#: src/gtkui/columns.c:36 src/sid/xs_interface.c:1103
+msgid "Title"
+msgstr "Başlık"
+
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Jump to Time"
-msgstr "Dosyaya Atla:"
+msgid "Artist"
+msgstr "Sanatçı:"
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "minutes:seconds"
-msgstr "dakika"
+msgid "Year"
+msgstr "Yıl:"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
+#: src/gtkui/columns.c:37
#, fuzzy
-msgid "Track length:"
-msgstr "Parça ses yüksekliği:"
+msgid "Album"
+msgstr "Albüm:"
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr ""
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Track"
+msgstr "Parça:"
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr ""
+#: src/gtkui/columns.c:37
+#, fuzzy
+msgid "Queue position"
+msgstr "Konum"
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Export Playlist"
-msgstr "Hızlı Parça Listesi Bilgisi"
+msgid "Length"
+msgstr "Uzunluk:"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
+#: src/gtkui/columns.c:38
#, fuzzy
-msgid "Import Playlist"
-msgstr "Hızlı Parça Listesi Bilgisi"
+msgid "File path"
+msgstr "Dosya adı"
-#: src/gtkui/ui_gtk.c:72
-msgid "GTK Interface"
-msgstr ""
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "File name"
+msgstr "Dosya adı"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:38
+#, fuzzy
+msgid "Custom title"
+msgstr "Özel Deri"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
+#: src/gtkui/columns.c:39
#, fuzzy
-msgid "Audacious"
-msgstr "%s - Audacious"
+msgid "Bitrate"
+msgstr "Bit oranı:"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
+#: src/gtkui/columns.c:286
+msgid "Choose Columns"
msgstr ""
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
+#: src/gtkui/columns.c:300
#, fuzzy
-msgid "Repeat"
-msgstr "Beat"
+msgid "Available:"
+msgstr "deÄŸiÅŸken"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
+#: src/gtkui/columns.c:334
+msgid "Chosen:"
msgstr ""
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
msgstr ""
-#: src/gtkui/ui_manager.c:47
-#, fuzzy
-msgid "Show playlists"
-msgstr "Parça Listesini Seç"
-
-#: src/gtkui/ui_manager.c:48
-#, fuzzy
-msgid "Show/hide playlists"
-msgstr "Parça Listesini Seç"
-
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
msgstr ""
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
msgstr ""
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
msgstr ""
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
+#: src/gtkui/layout.c:123
+msgid "Undock"
msgstr ""
-#: src/gtkui/ui_manager.c:56
+#: src/gtkui/layout.c:123
#, fuzzy
-msgid "Show statusbar"
-msgstr "Durum"
+msgid "Disable"
+msgstr "deÄŸiÅŸken"
-#: src/gtkui/ui_manager.c:57
+#: src/gtkui/menus.c:132
#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "Parça Listesini Seç"
+msgid "_Open Files ..."
+msgstr "Filtreler"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-#, fuzzy
-msgid "Pause"
-msgstr "Bekletme Açık"
+#: src/gtkui/menus.c:133
+msgid "Open _URL ..."
+msgstr ""
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
+#: src/gtkui/menus.c:134
#, fuzzy
-msgid "Stop"
-msgstr "Durdur:"
+msgid "_Add File ..."
+msgstr "Filtreler"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
+#: src/gtkui/menus.c:135
#, fuzzy
-msgid "Previous"
-msgstr "Önceki Parça:"
+msgid "Add U_RL ..."
+msgstr "Filtreler"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
+#: src/gtkui/menus.c:137
#, fuzzy
-msgid "Next"
-msgstr "Metin"
+msgid "A_bout ..."
+msgstr "Hakkında"
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
+#: src/gtkui/menus.c:138
#, fuzzy
-msgid "Playlist"
-msgstr "Parça Listesini Seç"
+msgid "_Preferences ..."
+msgstr "AudioCompress seçenekleri"
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
+#: src/gtkui/menus.c:139 src/skins/ui_manager.c:412
#, fuzzy
-msgid "New Playlist"
-msgstr "Parça Listesini Seç"
+msgid "_Quit"
+msgstr "Kalite"
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
+#: src/gtkui/menus.c:142
#, fuzzy
-msgid "Delete Playlist"
-msgstr "Parça Listesini Seç"
+msgid "_Play"
+msgstr "Oynatma süresi:"
-#: src/gtkui/ui_manager.c:92
+#: src/gtkui/menus.c:143
#, fuzzy
-msgid "Import Playlist ..."
-msgstr "Hızlı Parça Listesi Bilgisi"
-
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr ""
+msgid "Paus_e"
+msgstr "Bekletme Açık"
-#: src/gtkui/ui_manager.c:95
+#: src/gtkui/menus.c:144
#, fuzzy
-msgid "Export Playlist ..."
-msgstr "Hızlı Parça Listesi Bilgisi"
+msgid "_Stop"
+msgstr "Durdur:"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
+#: src/gtkui/menus.c:145
#, fuzzy
-msgid "Saves the selected playlist."
-msgstr "Parça Listesini Seç"
+msgid "Pre_vious"
+msgstr "Önceki Parça:"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
+#: src/gtkui/menus.c:146
#, fuzzy
-msgid "Save All Playlists"
-msgstr "Parça Listesini Seç"
-
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr ""
+msgid "_Next"
+msgstr "Metin"
-#: src/gtkui/ui_manager.c:103
-msgid "Refresh"
-msgstr ""
+#: src/gtkui/menus.c:148
+#, fuzzy
+msgid "_Repeat"
+msgstr "Beat"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
+#: src/gtkui/menus.c:149
+msgid "S_huffle"
msgstr ""
-#: src/gtkui/ui_manager.c:107
+#: src/gtkui/menus.c:150
#, fuzzy
-msgid "Playlist Manager"
+msgid "N_o Playlist Advance"
msgstr "Parça Listesini Seç"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
+#: src/gtkui/menus.c:151
+msgid "Stop _After This Song"
msgstr ""
-#: src/gtkui/ui_manager.c:111
-msgid "Add URL ..."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
+#: src/gtkui/menus.c:153 src/gtkui/menus.c:210
+msgid "Song _Info ..."
msgstr ""
-#: src/gtkui/ui_manager.c:115
+#: src/gtkui/menus.c:154
#, fuzzy
-msgid "Add Files ..."
-msgstr "Filtreler"
-
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-#, fuzzy
-msgid "Adds files to the playlist."
-msgstr "Parça listesine alttınılar ekle"
-
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-#, fuzzy
-msgid "Remove All"
-msgstr "Kaldır"
-
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr ""
-
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr ""
-
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr ""
+msgid "Jump to _Time ..."
+msgstr "Dosyaya Atla:"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
+#: src/gtkui/menus.c:155
+msgid "_Jump to Song ..."
msgstr ""
-#: src/gtkui/ui_manager.c:131
+#: src/gtkui/menus.c:158
#, fuzzy
-msgid "Sort"
-msgstr "Port"
-
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-#, fuzzy
-msgid "By Track Number"
+msgid "By Track _Number"
msgstr "Parça numarası:"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
+#: src/gtkui/menus.c:159
#, fuzzy
-msgid "By Title"
+msgid "By _Title"
msgstr "Başlık"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
+#: src/gtkui/menus.c:160
#, fuzzy
-msgid "By Artist"
+msgid "By _Artist"
msgstr "Sanatçı:"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
+#: src/gtkui/menus.c:161
#, fuzzy
-msgid "By Album"
+msgid "By A_lbum"
msgstr "Albüm:"
-#: src/gtkui/ui_manager.c:140
+#: src/gtkui/menus.c:162
#, fuzzy
-msgid "By File Path"
+msgid "By Release _Date"
+msgstr "Tarih:"
+
+#: src/gtkui/menus.c:163
+#, fuzzy
+msgid "By _File Path"
msgstr "Dosya adı"
-#: src/gtkui/ui_manager.c:142
-msgid "Reverse Order"
+#: src/gtkui/menus.c:164
+#, fuzzy
+msgid "By _Custom Title"
+msgstr "Özel Deri"
+
+#: src/gtkui/menus.c:166
+msgid "R_everse Order"
msgstr ""
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
+#: src/gtkui/menus.c:167
+msgid "_Random Order"
msgstr ""
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "Efektler"
+#: src/gtkui/menus.c:170 src/gtkui/menus.c:212
+msgid "_Refresh"
+msgstr ""
-#: src/gtkui/ui_manager.c:151
+#: src/gtkui/menus.c:172
#, fuzzy
-msgid "Equalizer"
-msgstr "Ekolayzır"
+msgid "_Sort"
+msgstr "Port"
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
+#: src/gtkui/menus.c:174
+msgid "_New"
msgstr ""
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-msgid "Interface"
-msgstr ""
+#: src/gtkui/menus.c:175
+#, fuzzy
+msgid "_Close"
+msgstr "Kapat"
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
+#: src/gtkui/menus.c:177
#, fuzzy
-msgid "File"
-msgstr "Filtreler"
+msgid "_Import ..."
+msgstr "İçe aktar"
-#: src/gtkui/ui_manager.c:167
+#: src/gtkui/menus.c:178
#, fuzzy
-msgid "Components"
-msgstr "Yorum:"
+msgid "_Export ..."
+msgstr "Dışa aktar"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
+#: src/gtkui/menus.c:180
#, fuzzy
-msgid "View Track Details"
-msgstr "Parça Kazancı Kullan"
+msgid "_Playlist Manager ..."
+msgstr "Parça Listesini Seç"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr ""
+#: src/gtkui/menus.c:183
+#, fuzzy
+msgid "Volume _Up"
+msgstr "Sesi yükselt:"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
+#: src/gtkui/menus.c:184
#, fuzzy
-msgid "About Audacious"
-msgstr "LIRC Audacious Eklentisi Hakkında"
+msgid "Volume _Down"
+msgstr "Sesi alçalt:"
-#: src/gtkui/ui_manager.c:178
-msgid "Open Files ..."
-msgstr ""
+#: src/gtkui/menus.c:186
+#, fuzzy
+msgid "_Equalizer"
+msgstr "Ekolayzır"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
+#: src/gtkui/menus.c:188
#, fuzzy
-msgid "Load and play a file"
-msgstr "Çalıcı başladığında SF'yi yükle"
+msgid "E_ffects"
+msgstr "Efektler"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
+#: src/gtkui/menus.c:191
+msgid "_Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-#, fuzzy
-msgid "Play media from the selected location"
-msgstr "Seçilen eylemi onayla"
+#: src/gtkui/menus.c:193
+msgid "Show _Menu Bar"
+msgstr ""
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
+#: src/gtkui/menus.c:194
+msgid "Show I_nfo Bar"
msgstr ""
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
+#: src/gtkui/menus.c:195
+#, fuzzy
+msgid "Show _Status Bar"
+msgstr "Durum"
+
+#: src/gtkui/menus.c:197
+msgid "Show Column _Headers"
msgstr ""
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
+#: src/gtkui/menus.c:198
+msgid "Choose _Columns ..."
msgstr ""
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
+#: src/gtkui/menus.c:199
#, fuzzy
-msgid "_Quit"
-msgstr "Kalite"
+msgid "Scrol_l on Song Change"
+msgstr "Şarkı mesajı"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
+#: src/gtkui/menus.c:202
#, fuzzy
-msgid "Quit Audacious"
-msgstr "%s - Audacious"
+msgid "_File"
+msgstr "Filtreler"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr ""
+#: src/gtkui/menus.c:203
+#, fuzzy
+msgid "_Playback"
+msgstr "Çal"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr ""
+#: src/gtkui/menus.c:204
+#, fuzzy
+msgid "P_laylist"
+msgstr "Parça Listesini Seç"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr ""
+#: src/gtkui/menus.c:205 src/gtkui/menus.c:219
+#, fuzzy
+msgid "_Services"
+msgstr "Aygıtlar"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
+#: src/gtkui/menus.c:206
#, fuzzy
-msgid "Jump to File"
-msgstr "Dosyaya Atla:"
+msgid "_Output"
+msgstr "Çıktı eklentisi hatası\n"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
+#: src/gtkui/menus.c:207
+msgid "_View"
msgstr ""
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
+#: src/gtkui/menus.c:211
+msgid "_Queue/Unqueue"
msgstr ""
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
+#: src/gtkui/menus.c:214
+msgid "Cu_t"
msgstr ""
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-#, fuzzy
-msgid "Cut"
-msgstr "Kült"
+#: src/gtkui/menus.c:215
+msgid "_Copy"
+msgstr ""
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
+#: src/gtkui/menus.c:216
+msgid "_Paste"
msgstr ""
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
+#: src/gtkui/menus.c:217
#, fuzzy
-msgid "Select All"
+msgid "Select _All"
msgstr "Parça Listesini Seç"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
+#: src/gtkui/menus.c:222
+#, fuzzy
+msgid "_Rename"
+msgstr "Dosya adı"
+
+#: src/gtkui/ui_gtk.c:75
+msgid "GTK Interface"
msgstr ""
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
+#: src/gtkui/ui_gtk.c:132 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:138 src/skins/ui_main.c:305 src/skins/ui_main.c:1498
#, fuzzy
-msgid "Select None"
-msgstr "Deri Dosyasını Seçin"
+msgid "Audacious"
+msgstr "%s - Audacious"
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr ""
+#: src/gtkui/ui_gtk.c:177 src/skins/plugin.c:185
+msgid "Error"
+msgstr "Hata"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:460
#, fuzzy
msgid "mono"
msgstr "Mono"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:459
#, fuzzy
msgid "stereo"
msgstr "Stereo"
-#: src/gtkui/ui_statusbar.c:97
+#: src/gtkui/ui_statusbar.c:106
#, fuzzy, c-format
-msgid "%d channels"
-msgstr "Kanallar"
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "Kanallar"
+msgstr[1] "Kanallar"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
#, fuzzy
msgid "Previous Track"
msgstr "Önceki Parça:"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+#, fuzzy
+msgid "Play"
+msgstr "Oynatma süresi:"
+
+#: src/hotkey/gui.c:73
#, fuzzy
msgid "Pause/Resume"
msgstr "Beklet:"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+#, fuzzy
+msgid "Stop"
+msgstr "Durdur:"
+
+#: src/hotkey/gui.c:75
#, fuzzy
msgid "Next Track"
msgstr "Sonraki Parça:"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
#, fuzzy
msgid "Forward 5 Seconds"
msgstr "5 sn ileri:"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
#, fuzzy
msgid "Rewind 5 Seconds"
msgstr "5 sn geri:"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
#, fuzzy
msgid "Mute"
msgstr "Sessiz:"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
#, fuzzy
msgid "Volume Up"
msgstr "Sesi yükselt:"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
#, fuzzy
msgid "Volume Down"
msgstr "Sesi alçalt:"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:424 src/skins/ui_manager.c:425
+#, fuzzy
+msgid "Jump to File"
+msgstr "Dosyaya Atla:"
+
+#: src/hotkey/gui.c:82
#, fuzzy
msgid "Toggle Player Windows"
msgstr "Oynatıcı Pencereleri Arasında Geçiş:"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr ""
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+#, fuzzy
+msgid "Toggle Repeat"
+msgstr "Beat"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr ""
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(hiçbiri)"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
@@ -3193,40 +1865,40 @@ msgid ""
"Do you want to continue?"
msgstr ""
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
msgstr ""
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "Genel Kısayol Eklentisi Ayarları"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
#, fuzzy
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr "Metin alanı içinde bir tuş kombinasyonu girin"
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
#, fuzzy
msgid "Hotkeys:"
msgstr "Makine:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
#, fuzzy
msgid "<b>Action:</b>"
msgstr "<b>Dosya ismi: </b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
msgstr ""
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "Genel Kısayol Eklentisi Hakkında"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
#, fuzzy
msgid ""
"Global Hotkey Plugin\n"
@@ -3280,7 +1952,7 @@ msgstr "Bağlantı modu:"
msgid "Enable debug printing"
msgstr "Hata ayıklama yazdırmasını etkinleştir"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:438
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -3298,136 +1970,20 @@ msgstr ""
"Audacious uyarlaması\n"
"develia.org'tan Giacomo Lozito"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:443
msgid "About JACK Output Plugin 0.17"
msgstr "JACK Çıkış Eklentisi 0.17 Hakkında"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "Bu LADSPA eklentisi kullanıcı ayarı içermiyor"
-
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "Ä°sim"
-
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
-
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "Yüklü eklentiler"
-
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "Çalışan eklentiler"
-
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "Ekle"
-
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "Kaldır"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LADSPA Eklenti KataloÄŸu"
-
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "LIRC Audacious Eklentisi Hakkında"
-
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRC Eklentisi"
-
-#: src/lirc/about.c:92
-#, fuzzy
+#: src/lyricwiki/lyricwiki.c:226
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
-msgstr ""
-"\n"
-"LIRC uzaktan kontrol sunucusunu kullanarak\n"
-"Audacious'u kontrol etmenizi saÄŸlayan bir eklenti\n"
-"\n"
-"Audacious kullanımı için uyarlandı - Tony Vroon <chainsaw@gentoo.org>\n"
-"XMMS LIRC eklentisinden:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"LIRC hakkında bilgi almak için:\n"
-"http://fsinfo.cs.uni-sb.de/~columbus/lirc/index.html"
-
-#: src/lirc/interface.c:37
-#, fuzzy
-msgid "LIRC plugin settings"
-msgstr "LIRC Eklentisi"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr ""
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
+"Looking for lyrics..."
msgstr ""
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr ""
-
-#: src/lirc/interface.c:79
-#, fuzzy
-msgid "Connection"
-msgstr "Bağlantı modu:"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: LIRC desteği başlatılamadı\n"
-
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:249
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: LIRC yapılandırma dosyası okunamadı\n"
-"%s: lütfen LIRC belgelerini okuyun\n"
-"%s: uygun yapılandırma dosyası nasıl oluşturulur\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr ""
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: bilinmeyen komut \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: LIRC bağlantısı kesildi\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr ""
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
#: src/lyricwiki/lyricwiki.c:337
@@ -3436,11 +1992,11 @@ msgid ""
"No lyrics were found."
msgstr ""
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "Metronom Hakkında"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3454,270 +2010,47 @@ msgstr ""
"örneğin tact://77 ile dakikada 77 vurgu ya da\n"
"tact://60*3/4 ile 60 bpm yi 3/4 tact ile"
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr "Takt oluÅŸturucu: %d bpm"
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr "Takt oluÅŸturucu: %d bpm %d/%d"
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug Yapılandırması"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr "16 bit"
-
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr "8 bit"
-
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "Mono (aşağıkarıştırma)"
-
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "En yakın (en hızlı)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "Doğrusal (hızlı)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr "Spline (iyi kalite)"
-
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr "8-tap FIR (fazla iyi kalite)"
-
-#: src/modplug/gui/interface.cxx:286
-#, fuzzy
-msgid "96 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:293
-#, fuzzy
-msgid "48 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr "44 kHz"
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr "22 kHz"
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "Örnekleme Oranı"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "EtkinleÅŸtir"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr "Derinlik"
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "Gecikme"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr "Derinlik"
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr "Miktar"
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "Aralık"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr "Bass Güçlendirme"
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
msgstr "Surround"
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
msgstr ""
-"Not: Preamp deÄŸerini\n"
-"yüksek ayarlamak sesde\n"
-"cızırtı ve patlamalara sebep olur!"
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "Preamp"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "Şarkı Adı için Dosya Adı kullan"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "Hızlı Parça Listesi Bilgisi"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "Gürültü Azaltma"
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "Amiga MOD Oynat"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "Tekrarlama yapma"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "Tekrar"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "süre(ler)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "Sonsuz kere tekrarla"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "Tekrarlama"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MOD Bilgisi"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-"Dosya adı:\n"
-"Başlık:\n"
-"Tip:\n"
-"Uzunluk:\n"
-"Hız:\n"
-"Tempo:\n"
-"Örnekler:\n"
-"Enstrümanlar:\n"
-"Paternler:\n"
-"Kanallar:"
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "Örnekler"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "Enstrumanlar"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "Mesaj"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Modplug Girdi Eklentisi Audacious sürüm"
-
-#: src/modplug/gui/main.cxx:52
-#, fuzzy
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
msgstr ""
-"\n"
-"Modplug ses motoru Olivier Lapicque tarafından yazılmıştır.\n"
-"Modplug için XMMS arayüzü Kenton Varda.\n"
-"(c)2000 Olivier Lapicque ve Kenton Varda.\n"
-"Güncelleme ve bakım Konstanty Bialkowski.\n"
-"BMP uyarlaması Theofilos Intzoglou."
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "Modplug Hakkında"
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "Resim dosyası bulunamadı: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr ""
-
-#: src/mtp_up/mtp.c:291
-msgid "Upload in progress..."
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
msgstr ""
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr ""
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Stopped"
+msgstr "Durdur:"
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr ""
+#: src/notify/libnotify-aosd_event.c:47
+#, fuzzy
+msgid "Audacious is not playing."
+msgstr "Parça listesine alttınılar ekle"
-#: src/null/null.c:63
+#: src/null/null.c:64
msgid "Null output plugin "
msgstr "Null Çıkış eklentisi"
-#: src/null/null.c:64
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
@@ -3725,15 +2058,15 @@ msgstr ""
"Christian Birchinger <joker@netswarm.net>\n"
"Esinlenilen XMMS eklentisi - Håvard Kvål <havardk@xmms.org>"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "Null Çıkışı Hakkında"
-#: src/null/null.c:93
+#: src/null/null.c:94
msgid "Null output preferences"
msgstr "Boşl çıktı eklentisi"
-#: src/null/null.c:102
+#: src/null/null.c:105
msgid "Run in real time"
msgstr "Gerçekzamanlı çalış"
@@ -3747,11 +2080,11 @@ msgstr "Varsayılan PCM aygıtı (%s)"
msgid "OSS4 Output Plugin Preferences"
msgstr "Durum Simgesi Eklentisi - Tercihler"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:163 src/OSS/configure.c:203
msgid "Audio device:"
msgstr "Ses aygıtı:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:189 src/OSS/configure.c:226 src/OSS/configure.c:269
msgid "Use alternate device:"
msgstr "Farklı aygıt kullan:"
@@ -3764,12 +2097,12 @@ msgstr "Oturumlar arası VMIX ses seviyesini kaydet"
msgid "Enable format conversions made by the OSS software."
msgstr ""
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
#, fuzzy
msgid "About OSS4 Plugin"
msgstr "ESounD Eklentisi Hakkında"
-#: src/oss4/plugin.c:55
+#: src/oss4/plugin.c:52
#, fuzzy
msgid ""
"OSS4 Output Plugin for Audacious\n"
@@ -3815,40 +2148,45 @@ msgstr ""
msgid "OSS4 error"
msgstr "Terör"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:146
#, c-format
msgid "Default (%s)"
msgstr "Varsayılan (%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:162 src/skins/ui_manager.c:456
+#: src/skins/ui_manager.c:477
+msgid "Default"
+msgstr "Öntanımlı"
+
+#: src/OSS/configure.c:187
msgid "OSS Driver configuration"
msgstr "OSS Sürücüsü ayarları"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:290
msgid "Devices"
msgstr "Aygıtlar"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:292
msgid "Buffering:"
msgstr "Tamponlama:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:305
msgid "Pre-buffer (percent):"
msgstr "Ön tampon (yüzde):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:316
msgid "Buffering"
msgstr "Tamponlanıyor"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:317
msgid "Mixer Settings:"
msgstr "Karıştırıcı Ayarları:"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:323
msgid "Volume controls Master not PCM"
msgstr "Ses ayarı PCM değil, ana kanalı ayarlasın"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:329
msgid "Mixer"
msgstr "Karıştırıcı"
@@ -3894,11 +2232,11 @@ msgstr ""
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
"USA."
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "Audacious PulseAudio Çıktı Eklentisi Hakkında"
-#: src/pulse_audio/pulse_audio.c:692
+#: src/pulse_audio/pulse_audio.c:688
msgid ""
"Audacious PulseAudio Output Plugin\n"
"\n"
@@ -3936,54 +2274,54 @@ msgstr ""
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
"USA."
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:91
#, fuzzy
msgid "About Sample Rate Converter Plugin"
msgstr "Durum Simgesi Eklentisi Hakkında"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:146
msgid "Sample Rate Converter Preferences"
msgstr ""
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:158
msgid "Rate mappings:"
msgstr ""
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:181
msgid "All others:"
msgstr ""
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:193
msgid "Method:"
msgstr ""
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:128 src/scrobbler/configure.c:204
#, fuzzy
msgid "Change password"
msgstr "Çalan şarkıyı değiştir"
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:150
msgid "<b>Services</b>"
msgstr "<b>Hizmetler</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:172
msgid "Username:"
msgstr "Kullanıcı adı:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:178
msgid "Password:"
msgstr "Åžifre:"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:186
#, fuzzy
msgid "Scrobbler URL:"
msgstr "Scrobbler Hatası"
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:218
msgid "<b>Last.FM</b>"
msgstr "<b>Last.FM</b>"
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:262
#, fuzzy
msgid "Scrobbler"
msgstr "Scrobbler Hatası"
@@ -4003,16 +2341,34 @@ msgstr ""
msgid "About Scrobbler Plugin"
msgstr "Scrobbler Eklentisi Hakkında"
+#: src/sdlout/plugin.c:58
+#, fuzzy
+msgid "About SDL Output Plugin"
+msgstr "JACK Çıkış Eklentisi 0.17 Hakkında"
+
+#: src/sdlout/plugin.c:78
+#, fuzzy
+msgid "SDL error"
+msgstr "Terör"
+
#: src/sid/xs_about.c:84
#, c-format
msgid "About %s"
msgstr "%s Hakkında"
-#: src/sid/xs_config.c:322
+#: src/sid/xs_about.c:214 src/sid/xs_interface.c:1825
+msgid "Close"
+msgstr "Kapat"
+
+#: src/sid/xs_config.c:326
#, fuzzy
msgid " Error"
msgstr "Hata"
+#: src/sid/xs_config.c:326
+msgid "OK"
+msgstr "Tamam"
+
#: src/sid/xs_fileinfo.c:151
msgid "General info"
msgstr "Genel bilgi"
@@ -4022,6 +2378,11 @@ msgstr "Genel bilgi"
msgid "Tune #%i: "
msgstr "Tını #%i: "
+#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "Resim dosyası bulunamadı: %s"
+
#: src/sid/xs_interface.c:234
msgid "Audacious-SID configuration"
msgstr "Audacious-SID - yapılandırması"
@@ -4334,15 +2695,15 @@ msgstr "Dışa aktar"
msgid "Use"
msgstr "Kullan"
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
+#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:447
msgid "Save"
msgstr "Kaydet"
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
+#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:446
msgid "Import"
msgstr "İçe aktar"
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
+#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:448
msgid "Delete"
msgstr "Sil"
@@ -4375,6 +2736,11 @@ msgstr ""
msgid "Playtime:"
msgstr "Oynatma süresi:"
+#: src/sid/xs_interface.c:921 src/sid/xs_interface.c:975
+#: src/sid/xs_interface.c:1155
+msgid "seconds"
+msgstr "saniye"
+
#: src/sid/xs_interface.c:928
msgid "Minimum playtime:"
msgstr "En az oynatma süresi:"
@@ -4474,10 +2840,6 @@ msgstr ""
msgid "Song title format:"
msgstr "Şarkı adı biçimi:"
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr "Başlık"
-
#: src/sid/xs_interface.c:1125
msgid "Add sub-tunes to playlist"
msgstr "Parça listesine alttınılar ekle"
@@ -4628,716 +2990,895 @@ msgstr "Evet"
msgid "No"
msgstr "Hayır"
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr ""
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr ""
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
#, fuzzy
msgid "_Player:"
msgstr "Oynatma süresi:"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:254
msgid "Select main player window font:"
msgstr ""
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "_Playlist:"
msgstr "Parça Listesini Seç"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:255
#, fuzzy
msgid "Select playlist font:"
msgstr "Parça Listesini Seç"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:259
#, fuzzy
msgid "<b>_Fonts</b>"
msgstr "<b>Dosya ismi: </b>"
-#: src/skins/skins_cfg.c:323
-#, fuzzy
-msgid "Use Bitmap fonts if available"
-msgstr "Varsa CDDB kullan"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr ""
-
-#: src/skins/skins_cfg.c:324
-#, fuzzy
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>Hizmetler</b>"
-
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr ""
-
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
+#: src/skins/skins_cfg.c:261
+msgid "Use bitmap fonts (supports ASCII only)"
msgstr ""
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
+#: src/skins/skins_cfg.c:263
+msgid "Scroll song title in both directions"
msgstr ""
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr ""
+#: src/skins/skins_cfg.c:346
+#, fuzzy
+msgid "<b>_Skin</b>"
+msgstr "<b>Dosya ismi: </b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr ""
+#: src/skins/skins_cfg.c:393
+#, fuzzy
+msgid "Interface Preferences"
+msgstr "AudioCompress seçenekleri"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr ""
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Preamp"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "250 Hz"
+msgstr "22050 Hz "
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr ""
+#: src/skins/ui_equalizer.c:335
+#, fuzzy
+msgid "500 Hz"
+msgstr "11000 Hz"
-#: src/skins/skins_cfg.c:417
+#: src/skins/ui_equalizer.c:335
#, fuzzy
-msgid "Blue"
-msgstr "Blues"
+msgid "1 kHz"
+msgstr "11 kHz"
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "2 kHz"
+msgstr "22 kHz"
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "4 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:569
+#: src/skins/ui_equalizer.c:336
#, fuzzy
-msgid "<b>_Skin</b>"
-msgstr "<b>Dosya ismi: </b>"
+msgid "8 kHz"
+msgstr "44 kHz"
-#: src/skins/skins_cfg.c:574
-msgid "Color adjustment ..."
-msgstr ""
+#: src/skins/ui_equalizer.c:336
+#, fuzzy
+msgid "16 kHz"
+msgstr "44 kHz"
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:378
#, fuzzy
msgid "Audacious Equalizer"
msgstr "Ekolayzır"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:884
msgid "Presets"
msgstr ""
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:444
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:452
#, fuzzy
msgid "kHz"
msgstr "Hz"
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:459
#, fuzzy
msgid "surround"
msgstr "Surround"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr ""
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr ""
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr ""
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr ""
-
-#: src/skins/ui_main.c:1050
+#: src/skins/ui_main.c:807
#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr ""
-
-#: src/skins/ui_main.c:1269
-#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
msgstr ""
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:828
#, fuzzy, c-format
msgid "Volume: %d%%"
msgstr "Ses: (%)"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:851
#, c-format
msgid "Balance: %d%% left"
msgstr ""
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:853
msgid "Balance: center"
msgstr ""
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:855
#, c-format
msgid "Balance: %d%% right"
msgstr ""
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:981
#, fuzzy
msgid "Options Menu"
msgstr "Seçenekler"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:985
msgid "Disable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:987
msgid "Enable 'Always On Top'"
msgstr ""
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:990
#, fuzzy
msgid "File Info Box"
msgstr "Dosya Bilgisi"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr ""
-
-#: src/skins/ui_main.c:1633
-#, fuzzy
-msgid "Enable 'GUI Scaling'"
-msgstr "Ses örneklemesini etkinleştir"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:995
msgid "Visualization Menu"
msgstr ""
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1645
msgid "Single mode."
msgstr ""
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1647
#, fuzzy
msgid "Playlist mode."
msgstr "Parça Listesini Seç"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1669
msgid "Stopping after song."
msgstr ""
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1671
msgid "Not stopping after song."
msgstr ""
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr ""
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr ""
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
#, fuzzy
msgid "Peaks"
msgstr "Pranks"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+#, fuzzy
+msgid "Repeat"
+msgstr "Beat"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr ""
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr ""
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr ""
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
#, fuzzy
msgid "Show Equalizer"
msgstr "Ekolayzır"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr ""
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr ""
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr ""
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr ""
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr ""
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "Yayılma"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr ""
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr ""
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
#, fuzzy
msgid "Analyzer"
msgstr "Spektrum Analizi"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
#, fuzzy
msgid "Scope"
msgstr "Durdur:"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
msgstr ""
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr ""
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
#, fuzzy
msgid "Normal"
msgstr "Biçim"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
#, fuzzy
msgid "Fire"
msgstr "TaÅŸlama"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
msgstr ""
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
#, fuzzy
msgid "Lines"
msgstr "dakika"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
#, fuzzy
msgid "Bars"
msgstr "Bas"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
#, fuzzy
msgid "Dot Scope"
msgstr "Tekrarlama yapma"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
msgstr ""
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
msgstr ""
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
msgstr ""
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr ""
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
#, fuzzy
msgid "Slowest"
msgstr "Showtunes"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
#, fuzzy
msgid "Slow"
msgstr "Slow Jam"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr ""
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
#, fuzzy
msgid "Fast"
msgstr "Biçim"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr ""
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr ""
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr ""
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+#, fuzzy
+msgid "Pause"
+msgstr "Bekletme Açık"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+#, fuzzy
+msgid "Previous"
+msgstr "Önceki Parça:"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+#, fuzzy
+msgid "Next"
+msgstr "Metin"
+
+#: src/skins/ui_manager.c:196
#, fuzzy
msgid "Visualization"
msgstr "Kurum:"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr ""
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr ""
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
msgstr ""
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
msgstr ""
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
msgstr ""
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
msgstr ""
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
msgstr ""
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+#, fuzzy
+msgid "Playlist"
+msgstr "Parça Listesini Seç"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+#, fuzzy
+msgid "New Playlist"
+msgstr "Parça Listesini Seç"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
#, fuzzy
msgid "Select Next Playlist"
msgstr "Parça Listesini Seç"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
#, fuzzy
msgid "Select Previous Playlist"
msgstr "Parça Listesini Seç"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+#, fuzzy
+msgid "Delete Playlist"
+msgstr "Parça Listesini Seç"
+
#: src/skins/ui_manager.c:222
-msgid "Refresh List"
+#, fuzzy
+msgid "Import Playlist"
+msgstr "Hızlı Parça Listesi Bilgisi"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
msgstr ""
#: src/skins/ui_manager.c:226
+#, fuzzy
+msgid "Export Playlist"
+msgstr "Hızlı Parça Listesi Bilgisi"
+
+#: src/skins/ui_manager.c:227
+#, fuzzy
+msgid "Saves the selected playlist."
+msgstr "Parça Listesini Seç"
+
+#: src/skins/ui_manager.c:229
+#, fuzzy
+msgid "Save All Playlists"
+msgstr "Parça Listesini Seç"
+
+#: src/skins/ui_manager.c:230
+msgid ""
+"Saves all the playlists that are open. Note that this is done automatically "
+"when Audacious quits."
+msgstr ""
+
+#: src/skins/ui_manager.c:234
+msgid "Refresh List"
+msgstr ""
+
+#: src/skins/ui_manager.c:235
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+
+#: src/skins/ui_manager.c:238
msgid "List Manager"
msgstr ""
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:239
+msgid "Opens the playlist manager."
+msgstr ""
+
+#: src/skins/ui_manager.c:243
+msgid "View"
+msgstr ""
+
+#: src/skins/ui_manager.c:244
+msgid "Interface"
+msgstr ""
+
+#: src/skins/ui_manager.c:245
+#, fuzzy
+msgid "Interface Preferences ..."
+msgstr "AudioCompress seçenekleri"
+
+#: src/skins/ui_manager.c:249
msgid "Add Internet Address..."
msgstr ""
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:250
+msgid "Adds a remote track to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:253
msgid "Add Files..."
msgstr ""
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:254
+#, fuzzy
+msgid "Adds files to the playlist."
+msgstr "Parça listesine alttınılar ekle"
+
+#: src/skins/ui_manager.c:259
msgid "Search and Select"
msgstr ""
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:260
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
msgstr ""
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:263
#, fuzzy
msgid "Invert Selection"
msgstr "Biçim seçimi"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:264
msgid "Inverts the selected and unselected entries."
msgstr ""
+#: src/skins/ui_manager.c:267
+#, fuzzy
+msgid "Select All"
+msgstr "Parça Listesini Seç"
+
#: src/skins/ui_manager.c:268
+msgid "Selects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:271
+#, fuzzy
+msgid "Select None"
+msgstr "Deri Dosyasını Seçin"
+
+#: src/skins/ui_manager.c:272
+msgid "Deselects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:277
+#, fuzzy
+msgid "Remove All"
+msgstr "Kaldır"
+
+#: src/skins/ui_manager.c:278
+msgid "Removes all entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:281
msgid "Clear Queue"
msgstr ""
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:282
msgid "Clears the queue associated with this playlist."
msgstr ""
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:285
msgid "Remove Unavailable Files"
msgstr ""
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:286
msgid "Removes unavailable files from the playlist."
msgstr ""
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:289
msgid "Remove Duplicates"
msgstr ""
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:291 src/skins/ui_manager.c:323
+#: src/skins/ui_manager.c:353
+#, fuzzy
+msgid "By Title"
+msgstr "Başlık"
+
+#: src/skins/ui_manager.c:292
msgid "Removes duplicate entries from the playlist by title."
msgstr ""
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:295 src/skins/ui_manager.c:335
+#: src/skins/ui_manager.c:365
#, fuzzy
msgid "By Filename"
msgstr "Dosya adı"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:296
msgid "Removes duplicate entries from the playlist by filename."
msgstr ""
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:299 src/skins/ui_manager.c:339
+#: src/skins/ui_manager.c:369
#, fuzzy
msgid "By Path + Filename"
msgstr "Dosya adı"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:300
msgid "Removes duplicate entries from the playlist by their full path."
msgstr ""
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:303
+msgid "Remove Unselected"
+msgstr ""
+
+#: src/skins/ui_manager.c:304
+msgid "Remove unselected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:307
+msgid "Remove Selected"
+msgstr ""
+
+#: src/skins/ui_manager.c:308
+msgid "Remove selected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:313
+#, fuzzy
+msgid "Randomize List"
+msgstr "Kaydet"
+
+#: src/skins/ui_manager.c:314
+#, fuzzy
+msgid "Randomizes the playlist."
+msgstr "Parça listesine alttınılar ekle"
+
+#: src/skins/ui_manager.c:317
msgid "Reverse List"
msgstr ""
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:318
msgid "Reverses the playlist."
msgstr ""
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:321
#, fuzzy
msgid "Sort List"
msgstr "Sanatçı:"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:324 src/skins/ui_manager.c:354
msgid "Sorts the list by title."
msgstr ""
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#, fuzzy
+msgid "By Album"
+msgstr "Albüm:"
+
+#: src/skins/ui_manager.c:328 src/skins/ui_manager.c:358
msgid "Sorts the list by album."
msgstr ""
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#, fuzzy
+msgid "By Artist"
+msgstr "Sanatçı:"
+
+#: src/skins/ui_manager.c:332 src/skins/ui_manager.c:362
msgid "Sorts the list by artist."
msgstr ""
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:336 src/skins/ui_manager.c:366
msgid "Sorts the list by filename."
msgstr ""
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:340 src/skins/ui_manager.c:370
msgid "Sorts the list by full pathname."
msgstr ""
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:343 src/skins/ui_manager.c:373
#, fuzzy
msgid "By Date"
msgstr "Tarih:"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:344 src/skins/ui_manager.c:374
msgid "Sorts the list by modification time."
msgstr ""
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:347 src/skins/ui_manager.c:377
+#, fuzzy
+msgid "By Track Number"
+msgstr "Parça numarası:"
+
+#: src/skins/ui_manager.c:348 src/skins/ui_manager.c:378
msgid "Sorts the list by track number."
msgstr ""
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:351
#, fuzzy
msgid "Sort Selected"
msgstr "Biçim seçimi"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:387
+#, fuzzy
+msgid "File"
+msgstr "Filtreler"
+
+#: src/skins/ui_manager.c:388
+msgid "Help"
+msgstr "Yardım"
+
+#: src/skins/ui_manager.c:390
msgid "Plugin Services"
msgstr ""
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:395
+#, fuzzy
+msgid "View Track Details"
+msgstr "Parça Kazancı Kullan"
+
+#: src/skins/ui_manager.c:393 src/skins/ui_manager.c:396
+msgid "View track details"
+msgstr ""
+
+#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
+#, fuzzy
+msgid "About Audacious"
+msgstr "LIRC Audacious Eklentisi Hakkında"
+
+#: src/skins/ui_manager.c:401
#, fuzzy
msgid "Play File"
msgstr "Oynatma süresi:"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:402
+#, fuzzy
+msgid "Load and play a file"
+msgstr "Çalıcı başladığında SF'yi yükle"
+
+#: src/skins/ui_manager.c:404
#, fuzzy
msgid "Play Location"
msgstr "Yer:"
-#: src/skins/ui_manager.c:428
+#: src/skins/ui_manager.c:405
+#, fuzzy
+msgid "Play media from the selected location"
+msgstr "Seçilen eylemi onayla"
+
+#: src/skins/ui_manager.c:407
+msgid "Plugin services"
+msgstr ""
+
+#: src/skins/ui_manager.c:409
+msgid "Preferences"
+msgstr ""
+
+#: src/skins/ui_manager.c:410
+msgid "Open preferences window"
+msgstr ""
+
+#: src/skins/ui_manager.c:413
+#, fuzzy
+msgid "Quit Audacious"
+msgstr "%s - Audacious"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Set A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Clear A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Playlist Start"
+msgstr ""
+
+#: src/skins/ui_manager.c:427 src/skins/ui_manager.c:428
+#, fuzzy
+msgid "Jump to Time"
+msgstr "Dosyaya Atla:"
+
+#: src/skins/ui_manager.c:430
+msgid "Queue Toggle"
+msgstr ""
+
+#: src/skins/ui_manager.c:431
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+
+#: src/skins/ui_manager.c:434
+msgid "Copy"
+msgstr ""
+
+#: src/skins/ui_manager.c:436
+#, fuzzy
+msgid "Cut"
+msgstr "Kült"
+
+#: src/skins/ui_manager.c:438
+msgid "Paste"
+msgstr ""
+
+#: src/skins/ui_manager.c:445
msgid "Load"
msgstr ""
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+#: src/skins/ui_manager.c:486
#, fuzzy
msgid "Preset"
msgstr "Port"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:451
msgid "Load preset"
msgstr ""
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:453 src/skins/ui_manager.c:474
+#: src/skins/ui_manager.c:489
msgid "Auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:454
msgid "Load auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:457
#, fuzzy
msgid "Load default preset into equalizer"
msgstr "Öntanımlı değerleri yükle"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:459
#, fuzzy
msgid "Zero"
msgstr "Retro"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:460
msgid "Set equalizer preset levels to zero"
msgstr ""
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:462
#, fuzzy
msgid "From file"
msgstr "Profil: %s"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:463
#, fuzzy
msgid "Load preset from file"
msgstr "Dosya okunamıyor\n"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:465
msgid "From WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:466
msgid "Load preset from WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:468
msgid "WinAMP Presets"
msgstr ""
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:469
msgid "Import WinAMP presets"
msgstr ""
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:472
msgid "Save preset"
msgstr ""
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:475
msgid "Save auto-load preset"
msgstr ""
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:478
#, fuzzy
msgid "Save default preset"
msgstr "Öntanımlı değerleri yükle"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:480
#, fuzzy
msgid "To file"
msgstr "STIL dosyası:"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:481
msgid "Save preset to file"
msgstr ""
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:483
msgid "To WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:484
msgid "Save preset to WinAMP EQF file"
msgstr ""
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:487
#, fuzzy
msgid "Delete preset"
msgstr "Sil"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:490
msgid "Delete auto-load preset"
msgstr ""
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr ""
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -5345,128 +3886,66 @@ msgid ""
"for."
msgstr ""
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Başlık: "
+
+#: src/skins/ui_playlist.c:267
#, fuzzy
msgid "Album: "
msgstr "Albüm:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
#, fuzzy
msgid "Artist: "
msgstr "Sanatçı:"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
#, fuzzy
msgid "Filename: "
msgstr "Dosya adı:"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr ""
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr ""
-#: src/skins/ui_playlist.c:772
-#, fuzzy
-msgid "Save as Static Playlist"
-msgstr "Parça Listesini Seç"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr ""
-
-#: src/skins/ui_playlist.c:802
-#, fuzzy
-msgid "Load Playlist"
-msgstr "Hızlı Parça Listesi Bilgisi"
-
-#: src/skins/ui_playlist.c:815
-#, fuzzy
-msgid "Save Playlist"
-msgstr "Parça Listesini Seç"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
#, fuzzy
msgid "Audacious Playlist Editor"
msgstr "Hızlı Parça Listesi Bilgisi"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "250 Hz"
-msgstr "22050 Hz "
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "500 Hz"
-msgstr "11000 Hz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "1 kHz"
-msgstr "11 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-#, fuzzy
-msgid "2 kHz"
-msgstr "22 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "4 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "8 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-#, fuzzy
-msgid "16 kHz"
-msgstr "44 kHz"
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr ""
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr ""
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, fuzzy, c-format
msgid "Could not create directory (%s): %s\n"
msgstr "sidFilename ('%s') ayrılamadı\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:438
#, fuzzy
msgid "About sndfile plugin"
msgstr "sndfile WAV eklentisi"
-#: src/sndfile/plugin.c:532
+#: src/sndfile/plugin.c:439
msgid ""
"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
@@ -5509,55 +3988,63 @@ msgstr ""
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
"USA."
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "SndStretch Hakkında"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:313
msgid "Volume corr."
msgstr "Ses düzeltme"
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:314
msgid "Short Overlap"
msgstr "Kısa Bindirme"
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:360
msgid "Speed"
msgstr "Hız"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:361
msgid "Pitch"
msgstr "Tizlik"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:362
+msgid "Scale"
+msgstr "Yayılma"
+
+#: src/sndstretch/sndstretch_xmms.c:363
+msgid "Options"
+msgstr "Seçenekler"
+
+#: src/sndstretch/sndstretch_xmms.c:382
msgid "SndStretch - Configuration"
msgstr "SndStretch Ayarları"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:464
msgid "Command to run when Audacious starts a new song."
msgstr "Audacious yeni bir şarkı başlattığında çalışacak komut."
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:465 src/song_change/song_change.c:469
+#: src/song_change/song_change.c:473 src/song_change/song_change.c:477
msgid "Command:"
msgstr "Komut:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:468
msgid "Command to run toward the end of a song."
msgstr "Bir şarkının sonuna doğru çalışacak komut."
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:472
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr "Audacious parça listesinin sonuna ulaştığında çalıştırılacak komut."
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:476
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
msgstr ""
"Bir şarkı için başlık değiştiğinde çalıştırılacak komut (örneğin ağ yayını "
"başlıkları)."
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:480
#, fuzzy
msgid ""
"You can use the following format strings which\n"
@@ -5571,7 +4058,10 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
msgstr ""
"Komut vermeden önce değiştirilecek olan alttaki\n"
" biçimi kullanabilirsiniz\n"
@@ -5586,7 +4076,7 @@ msgstr ""
"%%t: Çalma listesi durumu (%%02d)\n"
"%%p: Şu an oynatılan (1 or 0)"
-#: src/song_change/song_change.c:437
+#: src/song_change/song_change.c:507
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -5594,24 +4084,20 @@ msgstr ""
"<span size='small'>Kabuğa yollanan parametreler tırnak içinde belirtilmeli. "
"Aksi takdirde güvenlik sorunu yaratır. </span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:518
msgid "Commands"
msgstr "Komutlar"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:555
#, fuzzy
msgid "Song Change"
msgstr "Şarkı mesajı"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "Spektrum Analizi"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "Durum Simgesi Eklentisi Hakkında"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
#, fuzzy
msgid ""
"Status Icon Plugin\n"
@@ -5627,35 +4113,48 @@ msgstr ""
"\n"
"Bu eklenti durum simgesinin sistem araç cubuğunda görüntülenmesini sağlar.\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "Durum Simgesi Eklentisi - Tercihler"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "Sağ-Tık Menüsü"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "Küçük oynatma menüsü #1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "Küçük oynatma menüsü #2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "Fare TekerleÄŸi Eylemi"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
msgstr "Ses seviyesini deÄŸiÅŸtir"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
msgstr "Çalan şarkıyı değiştir"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:500
+#, fuzzy
+msgid "Other settings"
+msgstr "Karıştırıcı ayarları"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr ""
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:41
msgid ""
"Extra Stereo Plugin\n"
"\n"
@@ -5665,123 +4164,19 @@ msgstr ""
"\n"
"Johan Levin 1999."
-#: src/stereo_plugin/stereo.c:64
+#: src/stereo_plugin/stereo.c:65
msgid "About Extra Stereo Plugin"
msgstr "Ekstra Stereo Eklentisi Hakkında"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:102
msgid "Configure Extra Stereo"
msgstr "Ekstra Stereo Eklentisini Yapılandır"
-#: src/streambrowser/gui/streambrowser_win.c:62
-#, fuzzy
-msgid "Search:"
-msgstr "Yıl:"
-
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
-msgid "Add Bookmark"
-msgstr ""
-
-#: src/streambrowser/gui/streambrowser_win.c:95
-#, fuzzy
-msgid "Stream browser"
-msgstr "gözat"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
-#, fuzzy
-msgid "Stream name"
-msgstr "Enstruman adı"
-
-#: src/streambrowser/gui/streambrowser_win.c:326
-#, fuzzy
-msgid "Now playing"
-msgstr "Parça Listesini Seç"
-
-#: src/streambrowser/gui/streambrowser_win.c:367
-#, fuzzy
-msgid "Remove Bookmark"
-msgstr "Etiketi kaldır"
-
-#: src/streambrowser/streambrowser.c:331
-#, fuzzy
-msgid "About Stream Browser"
-msgstr "OSS Sürücüsü Hakkında"
-
-#: src/streambrowser/streambrowser.c:332
-#, fuzzy
-msgid ""
-"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
-"Team.\n"
-"\n"
-"This is a simple stream browser that includes the most popular streaming "
-"directories.\n"
-"Many thanks to the Streamtuner developers <http://www.nongnu.org/"
-"streamtuner>,\n"
-"\tand of course to the whole Audacious community.\n"
-"\n"
-"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
-"\n"
-"This was a Google Summer of Code 2008 project."
-msgstr ""
-"Copyright (c) 2007, Calin Crisan <ccrisan@gmail.com> ve The Audacious "
-"Takımı.\n"
-"\n"
-"libcdio geliÅŸtiricilerine <http://www.gnu.org/software/libcdio/>\n"
-"\t ve libcddb geliÅŸtiricilerine <http://libcddb.sourceforge.net/> "
-"teşekkürler.\n"
-"\n"
-"Ayrıca Tony Vroon'a beni yönlendirdiği ve danışmanım olduğu için "
-"teşekkürler.\n"
-"\n"
-"Bu bir Google Summer of Code 2007 projesidir."
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-#, fuzzy
-msgid "Streambrowser"
-msgstr "gözat"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "Sun Sürücüsü Hakkında"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
-"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun Sürücüsü\n"
-"\n"
-"Telif Hakkı (c) 2001 CubeSoft Communications, Inc.\n"
-"Sorumlu: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "Ses kontrol aygıtı:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr "Tampon boyutu (ms):"
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "Ses kontrolleri aygıtı:"
-
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS, sadece karıştırıcıyı kullanıyor."
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun sürücüsü yapılandırması"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "Ton Oluşturucusu Hakkında"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5795,15 +4190,20 @@ msgstr ""
"Kullanmak için bir URL ekleyin: tone://frequency1;frequency2;frequency3;...\n"
"ör: 2000Hz ton ve 2005Hz ton çalmak için tone://2000;2005"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr "%s %.1f Hz"
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr "Ton OluÅŸturucu: "
+#: src/unix-io/gtk.c:34
+#, fuzzy
+msgid "About File I/O Plugin"
+msgstr "ESounD Eklentisi Hakkında"
+
#: src/vorbis/configure.c:31
msgid "Override generic titles"
msgstr "Genel başlıkları geçersiz kıl"
@@ -5817,15 +4217,15 @@ msgstr "Başlık biçimi:"
msgid "Ogg Vorbis Tags"
msgstr "Ogg Vorbis Etiketleri:"
-#: src/vorbis/configure.c:68
+#: src/vorbis/configure.c:69
msgid "Ogg Vorbis Audio Plugin Configuration"
msgstr "Ogg Vorbis Ses Eklentisi Yapılandırması"
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:581
msgid "About Ogg Vorbis Audio Plugin"
msgstr "OGG Vorbis Ses Eklentisi Hakkında"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:586
#, fuzzy
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
@@ -5884,12 +4284,12 @@ msgstr ""
"\n"
"Audacious desteÄŸi Pavel Vymetalek <pvymetalek@seznam.cz>"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack Dekoder Eklentisi %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
@@ -5901,6 +4301,1445 @@ msgstr ""
"Eklenti kodunun bir kısmı Miles Egan tarafından hazırlanmıştır\n"
"Wavpack sitesine http://www.wavpack.com/ adresinden ulaÅŸabilirsiniz\n"
+#, fuzzy
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "Varsa CDDB kullan"
+
+#, fuzzy
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>Hizmetler</b>"
+
+#~ msgid "About "
+#~ msgstr "Hakkında"
+
+#~ msgid ""
+#~ "\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
+#~ msgstr ""
+#~ "\n"
+#~ "Telif Hakkı (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "Bu eklenti, GNU LGPL şartları altında yayınlanmaktadır.\n"
+#~ "Daha fazla bilgi için http://www.gnu.org/licenses/lgpl.html adresine "
+#~ "bakınız.\n"
+#~ "\n"
+#~ "Bu eklenti tüm hakları (C) Simon Peter, et al'a ait olan AdPlug "
+#~ "kütüphanesini kullanmaktadır.\n"
+#~ "AdPlug kitaplık sürümü: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: Yapılandırması"
+
+#~ msgid "Sound quality"
+#~ msgstr "Ses kalitesi"
+
+#~ msgid "Resolution"
+#~ msgstr "Çözünürlük"
+
+#~ msgid "8bit"
+#~ msgstr "8bit"
+
+#~ msgid "16bit"
+#~ msgstr "16bit"
+
+#~ msgid "Channels"
+#~ msgstr "Kanallar"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "Eğer, ihtyacınız yoksa, stereoyu seçmeyin. Çünkü, sese stereo etkisi "
+#~ "eklenmeyecektir. OPL2 sadece mono kullanır fakat daha fazla CPU gücü "
+#~ "harcar!"
+
+#~ msgid "Frequency"
+#~ msgstr "Sıklık"
+
+#~ msgid "Detect songend"
+#~ msgstr "Şarkı sonunu tespit et"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "Eğer etkinleştirilirse, Audacious şarkının sonunu tespit edecek, şarkıyı "
+#~ "durduracak ve parça listesinde ilerleyecek. Bu özellik etkin değilse, "
+#~ "Audacious şarkı sonunu tespit edemeyecek ve şarkıyı tekrar tekrar çalmaya "
+#~ "devam edecek."
+
+#~ msgid "Formats"
+#~ msgstr "Biçimler"
+
+#~ msgid "Format selection"
+#~ msgstr "Biçim seçimi"
+
+#~ msgid "Format"
+#~ msgstr "Biçim"
+
+#~ msgid "Extension"
+#~ msgstr "Dosya uzantısı"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "Seçili dosya türleri, bu eklenti tarafından tanınacak ve çalınacak. "
+#~ "Seçilmemiş türler, diğer eklentilerin bu dosyaları çalması için, dikkate "
+#~ "alınmayacak."
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: Dosya Bilgisi"
+
+#~ msgid "Author: "
+#~ msgstr "Yazar: "
+
+#~ msgid "File Type: "
+#~ msgstr "Dosya Türü: "
+
+#~ msgid "Subsongs: "
+#~ msgstr "Alt şarkılar: "
+
+#~ msgid "Instruments: "
+#~ msgstr "Enstrumanlar: "
+
+#~ msgid "Orders: "
+#~ msgstr "Sıralar: "
+
+#~ msgid "Patterns: "
+#~ msgstr "Örnekler: "
+
+#~ msgid "Song"
+#~ msgstr "Şarkı"
+
+#~ msgid "Instrument name"
+#~ msgstr "Enstruman adı"
+
+#~ msgid "Song message"
+#~ msgstr "Şarkı mesajı"
+
+#~ msgid "Subsong selection"
+#~ msgstr "Arkayüz bölümü"
+
+#~ msgid "Order: "
+#~ msgstr "Sıra: "
+
+#~ msgid "Pattern: "
+#~ msgstr "Örnek: "
+
+#~ msgid "Row: "
+#~ msgstr "Satır: "
+
+#~ msgid "Speed: "
+#~ msgstr "Hız: "
+
+#~ msgid "Timer: "
+#~ msgstr "Sayaç: "
+
+#~ msgid "About XMMS Alarm"
+#~ msgstr "XMMS Alarm Hakkında"
+
+#~ msgid "XMMS Alarm"
+#~ msgstr "XMMS Alarm"
+
+#~ msgid ""
+#~ "An XMMS plugin which can be used\n"
+#~ "to start playing at a certain time.\n"
+#~ "\n"
+#~ "Send all complaints to:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+#~ msgstr ""
+#~ "Audacious'un belli bir zamanda çalmaya başlaması\n"
+#~ "için bir XMMS eklentisi.\n"
+#~ "\n"
+#~ "Şikayetleriniz için:\n"
+#~ "Adam Feakin <adamf@snika.uklinux.net>\n"
+#~ "Daniel Stodden <stodden@in.tum.de>\n"
+#~ "\n"
+#~ "http://www.snika.uklinux.net/xmms-alarm/"
+
+#~ msgid "Alarm"
+#~ msgstr "Alarm"
+
+#~ msgid "This is your wakeup call."
+#~ msgstr "Bu sizin uyandırma çağrınız."
+
+#~ msgid "Select Playlist"
+#~ msgstr "Parça Listesini Seç"
+
+#~ msgid "Sorry"
+#~ msgstr "Üzgünüm"
+
+#~ msgid "Warning"
+#~ msgstr "Uyarı"
+
+#~ msgid ""
+#~ "For safety reasons the \"quiet\" time must be at least 65 seconds longer "
+#~ "than the fading time, it must also be more than 10 seconds. This "
+#~ "basically means that there is a bug in the code and until I find a way of "
+#~ "really fixing it this message will appear :)\n"
+#~ "\n"
+#~ "Your fading settings have NOT been saved\n"
+#~ "\n"
+#~ "--\n"
+#~ "Adam"
+#~ msgstr ""
+#~ "Güvenlik nedenlerinden dolayı, \"sessiz\" zaman en az 10 saniye ve yavaş "
+#~ "geçiş zamanından da en az 65 saniye daha uzun olmalıdır."
+
+#~ msgid "Oh Well"
+#~ msgstr "Oh Peki"
+
+#~ msgid "Alarm Settings"
+#~ msgstr "Alarm Ayarları"
+
+#~ msgid "Time"
+#~ msgstr "Zaman"
+
+#~ msgid "hours"
+#~ msgstr "saat"
+
+#~ msgid "h"
+#~ msgstr "s"
+
+#~ msgid "minutes"
+#~ msgstr "dakika"
+
+#~ msgid "Quiet after:"
+#~ msgstr "Sonra çık:"
+
+#~ msgid "Alarm at (default):"
+#~ msgstr "Alarmı çal (öntanımlı):"
+
+#~ msgid "Choose the days for the alarm to come on"
+#~ msgstr "Alarmın çalacağı günleri seçiniz"
+
+#~ msgid "Day"
+#~ msgstr "Gün"
+
+#~ msgid "Tuesday"
+#~ msgstr "Salı"
+
+#~ msgid "Wednesday"
+#~ msgstr "Çarşamba"
+
+#~ msgid "Thursday"
+#~ msgstr "PerÅŸembe"
+
+#~ msgid "Friday"
+#~ msgstr "Cuma"
+
+#~ msgid "Saturday"
+#~ msgstr "Cumartesi"
+
+#~ msgid "Sunday"
+#~ msgstr "Pazar"
+
+#~ msgid "Monday"
+#~ msgstr "Pazartesi"
+
+#~ msgid "Days"
+#~ msgstr "Günler"
+
+#~ msgid "Fading"
+#~ msgstr "Yavaş geçiş"
+
+#~ msgid "Volume"
+#~ msgstr "Ses"
+
+#~ msgid "Current"
+#~ msgstr "Güncel"
+
+#~ msgid "reset to current output volume"
+#~ msgstr "güncel çıktı sesine dön"
+
+#~ msgid "Start at"
+#~ msgstr "BaÅŸlat"
+
+#~ msgid "%"
+#~ msgstr "%"
+
+#~ msgid "Final"
+#~ msgstr "Sonlandır"
+
+#~ msgid "Additional Command"
+#~ msgstr "Ek Komutlar"
+
+#~ msgid "enable"
+#~ msgstr "etkinleÅŸtir"
+
+#~ msgid "Playlist (optional)"
+#~ msgstr "Parça listesi (seçmeli)"
+
+#~ msgid "Browse..."
+#~ msgstr "Gözat..."
+
+#~ msgid "Reminder"
+#~ msgstr "Hatırlatıcı"
+
+#~ msgid "Use reminder"
+#~ msgstr "Hatırlatıcıyı kullan"
+
+#~ msgid "What do these options mean?"
+#~ msgstr "Bu seçenekler ne anlama geliyor?"
+
+#~ msgid ""
+#~ "\n"
+#~ "Time\n"
+#~ " Alarm at: \n"
+#~ " The time for the alarm to come on.\n"
+#~ "\n"
+#~ " Quiet After: \n"
+#~ " Stop alarm after this amount of time.\n"
+#~ " (if the wakeup dialog is not closed)\n"
+#~ "\n"
+#~ "\n"
+#~ "Days\n"
+#~ " Day:\n"
+#~ " Select the days for the alarm to activate.\n"
+#~ "\n"
+#~ " Time:\n"
+#~ " Choose the time for the alarm on each day,\n"
+#~ " or select the toggle button to use the default\n"
+#~ " time.\n"
+#~ "\n"
+#~ "\n"
+#~ "Volume\n"
+#~ " Fading: \n"
+#~ " Fade the volume up to the chosen volume \n"
+#~ " for this amount of time.\n"
+#~ "\n"
+#~ " Start at: \n"
+#~ " Start fading from this volume.\n"
+#~ "\n"
+#~ " Final: \n"
+#~ " The volume to stop fading at. If the fading\n"
+#~ " time is 0 then set volume to this and start\n"
+#~ " playing.\n"
+#~ "\n"
+#~ "\n"
+#~ "Options:\n"
+#~ " Additional Command:\n"
+#~ " Run this command at the alarm time.\n"
+#~ "\n"
+#~ " Playlist: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Zaman\n"
+#~ " Alarmı çal: \n"
+#~ " Alarmın çalma zamanı.\n"
+#~ "\n"
+#~ " Sonra çık: \n"
+#~ " Belirtilen süreden sonra alarmı kapat.\n"
+#~ " (eğer uyandırma penceresi kapatılmamışsa)\n"
+#~ "\n"
+#~ "\n"
+#~ "Günler\n"
+#~ " Gün:\n"
+#~ " Alarmın etkin olacağı günleri seçin.\n"
+#~ "\n"
+#~ " Zaman:\n"
+#~ " Her bir gün için alarm zamanını seçin,\n"
+#~ " veya önanımlı zamanı kullanmak için\n"
+#~ " değiştirme düğmesini seçin.\n"
+#~ "\n"
+#~ "\n"
+#~ "Ses\n"
+#~ " Yavaş geçiş: \n"
+#~ " Belirtilen sürede sesi istenen ses seviyesine\n"
+#~ " çıkarır.\n"
+#~ "\n"
+#~ " BaÅŸlat: \n"
+#~ " Bu ses seviyesinden sesi yükseltmeye başlar.\n"
+#~ "\n"
+#~ " Sonlandır: \n"
+#~ " Yükseltmenin durdurulacağu ses düzeyi. Eğer\n"
+#~ " yavaş geçiş süresi 0 ise, sesi bu düzeye ayarlar\n"
+#~ " ve çalmaya başlar.\n"
+#~ "\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ " El Lomutlar:\n"
+#~ " Alarm zamanında bu komutu çalıştırır.\n"
+#~ "\n"
+#~ " Parça listesi: \n"
+#~ " Load this playlist for playing songs from \n"
+#~ " (must have .m3u extension). If no playlist\n"
+#~ " is given then the songs which are currently\n"
+#~ " in the list will be used.\n"
+#~ " The URL of an mp3/ogg stream can also be\n"
+#~ " entered here, but loading of playlists from\n"
+#~ " URLs is not currently supported by xmms.\n"
+#~ "\n"
+#~ " Reminder:\n"
+#~ " Display a reminder when the alarm goes off,\n"
+#~ " type the reminder in the box and turn on the\n"
+#~ " toggle button if you want it to be shown.\n"
+
+#~ msgid "Your reminder for today is.."
+#~ msgstr "Bugün için hatırlatıcınız.."
+
+#~ msgid "Thankyou"
+#~ msgstr "Teşekkürler"
+
+#, fuzzy
+#~ msgid "Available Headsets"
+#~ msgstr "Kullanılabilir arkayüzler"
+
+#, fuzzy
+#~ msgid "Current Headset"
+#~ msgstr "Güncel"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Bağlantı modu:"
+
+#, fuzzy
+#~ msgid "Class"
+#~ msgstr "Klasik"
+
+#, fuzzy
+#~ msgid "Address:"
+#~ msgstr "Aygıt Adresi"
+
+#, fuzzy
+#~ msgid "Rescan"
+#~ msgstr "Dikdörtgen"
+
+#~ msgid "Playback->Play"
+#~ msgstr "Çal"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "Dur"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "Durakla"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "Geri Sar"
+
+#~ msgid "Playback->Next"
+#~ msgstr "Playback->Ä°leri"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "Playback->Çıkart"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "Tekrarla"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "Rastgele"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "Sesi 5 Birim Artır"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "Sesi 5 Birim Azalt"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "Sesi 10 Birim Artır"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "Sesi 10 Birim Azalt"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "Sessiz"
+
+#~ msgid "Window->Main"
+#~ msgstr "Ana Ekran"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "Çalma Listesi"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "Ekolayzır"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "Dosya Çal"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: %s diye belirtilen dosya açılamıyor.\n"
+#~ "Cihaz durduruldu. Dosya yolunun, adının doğruluğunu\n"
+#~ "ve erişim haklarınızı kontrol edin.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr ""
+#~ "event-device-plugin: %s aygıt dosyası okunurken giriş-çıkış hatası\n"
+#~ "meydana geldi. Aygıt okuma işlemi durduruldu.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /proc/bus/input/devices açılamıyor.\n"
+#~ "Otomatik başlatma yapılamıyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /proc/bus/input/devices için girdi-çıktı hatası, "
+#~ "otomatik tanımlama yapılamıyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /proc/bus/input/devices okunurken hata oluÅŸtu, "
+#~ "otomatik tanımlama çalışmayacak.\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: /dev/input içerisinde aygıt %s bulunamadı, es "
+#~ "geçiliyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ayar dosyası %s yüklenemiyor, öntanımlı ayarlar "
+#~ "kullanılacak.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ayar dosyasında \"%s\" aygıtı için yetersiz bilgi "
+#~ "bulundu, es geçiliyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ayarlar, \"%s\" aygıtının çalıştığı bilgisine "
+#~ "ulaşılamadı, es geçiliyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr ""
+#~ "event-device-plugin: yerel dizin %s eriÅŸilemiyor, ayarlar "
+#~ "kaydedilmeyecek.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugn: ayarlar, aygıt \"%s\" için filename değeri "
+#~ "alınamıyor, es geçiliyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ayarlar, aygıt \"%s\" için phys değeri alınamıyor, "
+#~ "es geçiliyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ayarlar, aygıt \"%s\" için is_custom değeri "
+#~ "alınamıyor, es geçiliyor.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: ayarlar, aygıt \"%s\" için beklenmeyen bir değer "
+#~ "alındı, es geçiliyor.\n"
+
+#, fuzzy
+#~ msgid "Detected"
+#~ msgstr "Şarkı sonunu tespit et"
+
+#, fuzzy
+#~ msgid "Custom"
+#~ msgstr "custom "
+
+#, fuzzy
+#~ msgid "Not Detected"
+#~ msgstr "Biçim seçimi"
+
+#~ msgid "Information"
+#~ msgstr "Bilgi"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "Tanınmamış bir aygıt için ilişkilendirme penceresi açılamıyor.\n"
+#~ "Aygıtın düzgün bir şekilde sisteme takılı olduğundan emin olun."
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "Seçili aygıt açılamıyor.\n"
+#~ "Aygıt dosyasına okuma hakkınız olduğundan emin olun."
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug - Özel aygıt ekle"
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "EvDev-Plug otomatik olarak sisteminizde olay üreten aygıtları tanımaya\n"
+#~ "ve hakkında bilgi toplamaya çalışır.\n"
+#~ "Yine de otomatik tanıma başarısız olursa ya da sizin standart dışında bir "
+#~ "yerde\n"
+#~ "olay üreten bir aygıtınız varsa (öntanımlı olarak /dev/input/ altında "
+#~ "aranırlar)\n"
+#~ "elle aygıt adını ve aygıt dosyasını tanımlayarak özel bir aygıt "
+#~ "tanımlamak\n"
+#~ "isteyebilirsiniz."
+
+#~ msgid "Device name:"
+#~ msgstr "Aygıt ismi:"
+
+#~ msgid "Device file:"
+#~ msgstr "Aygıt dosyası:"
+
+#, fuzzy
+#~ msgid "(custom)"
+#~ msgstr "custom "
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "Lütfen hem isim hem de dosya ismi belirleyiniz.\n"
+#~ "Dosya ismi tam dizin bilgisi ile belirlenmelidir."
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr ""
+#~ "Seçilen aygıt için mevcut olan ayarları kaldırmak istiyor musunuz?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "Seçili olan özel aygıtı kaldırmak istiyor musunuz?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug - Yapılandırması"
+
+#~ msgid "Active"
+#~ msgstr "Etkin"
+
+#~ msgid "Status"
+#~ msgstr "Durum"
+
+#~ msgid "Device Name"
+#~ msgstr "Aygıt İsmi"
+
+#~ msgid "Device File"
+#~ msgstr "Aygıt Dosyası"
+
+#~ msgid "Device Address"
+#~ msgstr "Aygıt Adresi"
+
+#~ msgid "_Bindings"
+#~ msgstr "_Bağlantılar"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "Bağlamak için aygıtınızda bir tuşa basınız;\n"
+#~ "Beş saniye içerisinde herhangi bir tuşa basılmazsa\n"
+#~ "bu pencere bağlama işlemi yapmadan kapanacaktır."
+
+#~ msgid ""
+#~ "This input event has been already assigned.\n"
+#~ "\n"
+#~ "It's not possible to assign multiple actions to the same input event "
+#~ "(although it's possible to assign the same action to multiple events)."
+#~ msgstr ""
+#~ "Bu girdi olayı önceden atanmış.\n"
+#~ "\n"
+#~ "Aynı girdi olayına birden fazla eylem atanamaz (ama aynı eylem birden "
+#~ "fazla olaya atanabilir)."
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug - Bağlayıcı Yapılandırması"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>Ä°sim: </b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>Dosya ismi: </b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>Fiziksel Adres: </b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug hakkında"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "olay aygıtları ile oynatıcı uzakten yöneticisi\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "Giacomo Lozito tarafından yazılmıştır\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "Bu LADSPA eklentisi kullanıcı ayarı içermiyor"
+
+#~ msgid "Name"
+#~ msgstr "Ä°sim"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Installed plugins"
+#~ msgstr "Yüklü eklentiler"
+
+#~ msgid "Running plugins"
+#~ msgstr "Çalışan eklentiler"
+
+#~ msgid "Add"
+#~ msgstr "Ekle"
+
+#~ msgid "Remove"
+#~ msgstr "Kaldır"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "LADSPA Eklenti KataloÄŸu"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "LIRC Audacious Eklentisi Hakkında"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "LIRC Eklentisi"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "LIRC uzaktan kontrol sunucusunu kullanarak\n"
+#~ "Audacious'u kontrol etmenizi saÄŸlayan bir eklenti\n"
+#~ "\n"
+#~ "Audacious kullanımı için uyarlandı - Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "XMMS LIRC eklentisinden:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "LIRC hakkında bilgi almak için:\n"
+#~ "http://fsinfo.cs.uni-sb.de/~columbus/lirc/index.html"
+
+#, fuzzy
+#~ msgid "LIRC plugin settings"
+#~ msgstr "LIRC Eklentisi"
+
+#, fuzzy
+#~ msgid "Connection"
+#~ msgstr "Bağlantı modu:"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: LIRC desteği başlatılamadı\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: LIRC yapılandırma dosyası okunamadı\n"
+#~ "%s: lütfen LIRC belgelerini okuyun\n"
+#~ "%s: uygun yapılandırma dosyası nasıl oluşturulur\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: bilinmeyen komut \"%s\"\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: LIRC bağlantısı kesildi\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "ModPlug Yapılandırması"
+
+#~ msgid "16 bit"
+#~ msgstr "16 bit"
+
+#~ msgid "8 bit"
+#~ msgstr "8 bit"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "Mono (aşağıkarıştırma)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "En yakın (en hızlı)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "Doğrusal (hızlı)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "Spline (iyi kalite)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "8-tap FIR (fazla iyi kalite)"
+
+#, fuzzy
+#~ msgid "96 kHz"
+#~ msgstr "44 kHz"
+
+#, fuzzy
+#~ msgid "48 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "44 kHz"
+#~ msgstr "44 kHz"
+
+#~ msgid "22 kHz"
+#~ msgstr "22 kHz"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "Örnekleme Oranı"
+
+#~ msgid "Enable"
+#~ msgstr "EtkinleÅŸtir"
+
+#~ msgid "Depth"
+#~ msgstr "Derinlik"
+
+#~ msgid "Delay"
+#~ msgstr "Gecikme"
+
+#~ msgid "Reverb"
+#~ msgstr "Derinlik"
+
+#~ msgid "Amount"
+#~ msgstr "Miktar"
+
+#~ msgid "Range"
+#~ msgstr "Aralık"
+
+#~ msgid "Bass Boost"
+#~ msgstr "Bass Güçlendirme"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr ""
+#~ "Not: Preamp deÄŸerini\n"
+#~ "yüksek ayarlamak sesde\n"
+#~ "cızırtı ve patlamalara sebep olur!"
+
+#~ msgid "Effects"
+#~ msgstr "Efektler"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "Şarkı Adı için Dosya Adı kullan"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "Hızlı Parça Listesi Bilgisi"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "Gürültü Azaltma"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "Amiga MOD Oynat"
+
+#~ msgid "Don't loop"
+#~ msgstr "Tekrarlama yapma"
+
+#~ msgid "Loop"
+#~ msgstr "Tekrar"
+
+#~ msgid "time(s)"
+#~ msgstr "süre(ler)"
+
+#~ msgid "Loop forever"
+#~ msgstr "Sonsuz kere tekrarla"
+
+#~ msgid "Looping"
+#~ msgstr "Tekrarlama"
+
+#~ msgid "MOD Info"
+#~ msgstr "MOD Bilgisi"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "Dosya adı:\n"
+#~ "Başlık:\n"
+#~ "Tip:\n"
+#~ "Uzunluk:\n"
+#~ "Hız:\n"
+#~ "Tempo:\n"
+#~ "Örnekler:\n"
+#~ "Enstrümanlar:\n"
+#~ "Paternler:\n"
+#~ "Kanallar:"
+
+#~ msgid ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+#~ msgstr ""
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---\n"
+#~ "---"
+
+#~ msgid "Samples"
+#~ msgstr "Örnekler"
+
+#~ msgid "Instruments"
+#~ msgstr "Enstrumanlar"
+
+#~ msgid "Message"
+#~ msgstr "Mesaj"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Modplug Girdi Eklentisi Audacious sürüm"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Modplug ses motoru Olivier Lapicque tarafından yazılmıştır.\n"
+#~ "Modplug için XMMS arayüzü Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque ve Kenton Varda.\n"
+#~ "Güncelleme ve bakım Konstanty Bialkowski.\n"
+#~ "BMP uyarlaması Theofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "Modplug Hakkında"
+
+#, fuzzy
+#~ msgid "Blue"
+#~ msgstr "Blues"
+
+#, fuzzy
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "Ses örneklemesini etkinleştir"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "Spektrum Analizi"
+
+#, fuzzy
+#~ msgid "Search:"
+#~ msgstr "Yıl:"
+
+#, fuzzy
+#~ msgid "Stream name"
+#~ msgstr "Enstruman adı"
+
+#, fuzzy
+#~ msgid "Now playing"
+#~ msgstr "Parça Listesini Seç"
+
+#, fuzzy
+#~ msgid "Remove Bookmark"
+#~ msgstr "Etiketi kaldır"
+
+#, fuzzy
+#~ msgid "About Stream Browser"
+#~ msgstr "OSS Sürücüsü Hakkında"
+
+#, fuzzy
+#~ msgid ""
+#~ "Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+#~ "Team.\n"
+#~ "\n"
+#~ "This is a simple stream browser that includes the most popular streaming "
+#~ "directories.\n"
+#~ "Many thanks to the Streamtuner developers <http://www.nongnu.org/"
+#~ "streamtuner>,\n"
+#~ "\tand of course to the whole Audacious community.\n"
+#~ "\n"
+#~ "Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+#~ "\n"
+#~ "This was a Google Summer of Code 2008 project."
+#~ msgstr ""
+#~ "Copyright (c) 2007, Calin Crisan <ccrisan@gmail.com> ve The Audacious "
+#~ "Takımı.\n"
+#~ "\n"
+#~ "libcdio geliÅŸtiricilerine <http://www.gnu.org/software/libcdio/>\n"
+#~ "\t ve libcddb geliÅŸtiricilerine <http://libcddb.sourceforge.net/> "
+#~ "teşekkürler.\n"
+#~ "\n"
+#~ "Ayrıca Tony Vroon'a beni yönlendirdiği ve danışmanım olduğu için "
+#~ "teşekkürler.\n"
+#~ "\n"
+#~ "Bu bir Google Summer of Code 2007 projesidir."
+
+#, fuzzy
+#~ msgid "minutes:seconds"
+#~ msgstr "dakika"
+
+#, fuzzy
+#~ msgid "Track length:"
+#~ msgstr "Parça ses yüksekliği:"
+
+#, fuzzy
+#~ msgid "Show/hide statusbar"
+#~ msgstr "Parça Listesini Seç"
+
+#, fuzzy
+#~ msgid "Import Playlist ..."
+#~ msgstr "Hızlı Parça Listesi Bilgisi"
+
+#, fuzzy
+#~ msgid "Export Playlist ..."
+#~ msgstr "Hızlı Parça Listesi Bilgisi"
+
+#, fuzzy
+#~ msgid "Refresh Selected"
+#~ msgstr "Biçim seçimi"
+
+#, fuzzy
+#~ msgid "Edit the playlist title."
+#~ msgstr "Parça listesine alttınılar ekle"
+
+#, fuzzy
+#~ msgid "By Formatted Title"
+#~ msgstr "Başlık"
+
+#, fuzzy
+#~ msgid "Components"
+#~ msgstr "Yorum:"
+
+#, fuzzy
+#~ msgid "Save as Static Playlist"
+#~ msgstr "Parça Listesini Seç"
+
+#, fuzzy
+#~ msgid "Load Playlist"
+#~ msgstr "Hızlı Parça Listesi Bilgisi"
+
+#, fuzzy
+#~ msgid "Save Playlist"
+#~ msgstr "Parça Listesini Seç"
+
+#~ msgid ""
+#~ "* Select ALSA output ports *\n"
+#~ "MIDI events will be sent to the ports selected here. In example, if your "
+#~ "audio card provides a hardware synth and you want to play MIDI with it, "
+#~ "you'll probably want to select the wavetable synthesizer ports."
+#~ msgstr ""
+#~ "* ALSA çıkış portlarını seçin *\n"
+#~ "Midi olayları burada seçtiğiniz portlara gönderilecekler. Örneğin, eğer "
+#~ "ses kartınız donanımsal bir ses işleme sunuyorsa ve siz bununla midi "
+#~ "çalmak istiyorsanız, wavetable sentezleyici portlarını seçmeniz "
+#~ "gerekecektir."
+
+#~ msgid ""
+#~ "* Select ALSA mixer card *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volumeslider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* ALSA karıştırıcı kartı seç *\n"
+#~ "ALSA çıkış eklentileri direkt ALSA kullanarak çalışır, oynatıcılardan "
+#~ "gelen çıkış eklentilerini kullanmaz. Yürütme yaparken, oynatıcı ses "
+#~ "seviyesini işleyen karıştırıcı kontrolünü buradan seçebilirsiniz. Eğer "
+#~ "wavetable sentezleme portlarını kullanıyorsanız, buradan Sentez seçimini "
+#~ "yapabilirsiniz."
+
+#~ msgid ""
+#~ "* Select ALSA mixer control *\n"
+#~ "The ALSA backend outputs directly through ALSA, it doesn't use effect and "
+#~ "ouput plugins from the player. During playback, the player volume slider "
+#~ "will manipulate the mixer control you select here. If you're using "
+#~ "wavetable synthesizer ports, you'll probably want to select the Synth "
+#~ "control here."
+#~ msgstr ""
+#~ "* ALSA karıştırıcı kartı seç *\n"
+#~ "ALSA çıkış eklentileri direkt ALSA kullanarak çalışır, oynatıcılardan "
+#~ "gelen çıkış eklentilerini kullanmaz. Yürütme yaparken, oynatıcı ses "
+#~ "seviyesini işleyen karıştırıcı kontrolünü buradan seçebilirsiniz. Eğer "
+#~ "wavetable sentezleme portlarını kullanıyorsanız, buradan Sentez seçimini "
+#~ "yapabilirsiniz."
+
+#~ msgid ""
+#~ "* Backend selection *\n"
+#~ "AMIDI-Plug works with backends, in a modular fashion; here you should "
+#~ "select your backend; that is, the way MIDI events are going to be handled "
+#~ "and played.\n"
+#~ "If you have a hardware synthesizer on your audio card, and ALSA supports "
+#~ "it, you'll want to use the ALSA backend. It can also be used with "
+#~ "anything that provides an interface to the ALSA sequencer, including "
+#~ "software synths or external devices.\n"
+#~ "If you want to rely on a software synthesizer and/or want to pipe audio "
+#~ "into effect and output plugins of the player you'll want to use the good "
+#~ "FluidSynth backend.\n"
+#~ "Press the info button to read specific information about each backend."
+#~ msgstr ""
+#~ "* Backend Seçimi *\n"
+#~ "AMIDI-Plug 'ın çalışması için bir ses sunucusuna ihtiyacınız vardır ve "
+#~ "ses sunucunuzu seçtikten sonra MIDI olaylarını ele alabilir ve "
+#~ "çalabilirsiniz.\n"
+#~ "Eğer ses kartınızda donanımsal ses işleme özelliği var ise ve ALSA bunu "
+#~ "destekliyorsa ALSA ses sunucusunu kullanmak isteyebilirsiniz. ALSA ses "
+#~ "sunucusu desteklediği tüm donanımsal ve yazılımsal araçları, onun "
+#~ "arayüzünden kullanabilirsiniz.\n"
+#~ "Eğer yazılımsal ses işleme kullanmak ve/veya efektinize ses enjekte etmek "
+#~ "ve oynatıcınızın çıkış eklentisini eklemek isterseniz, FluidSynth "
+#~ "sunucusunu kullanabilirsiniz. \n"
+#~ "Daha detaylı bilgi için her bir sunucunun dökümanlarına göz atın."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Transpose function *\n"
+#~ "This option allows you to play the midi file transposed in a different "
+#~ "key, by shifting of the desired number of semitones all its notes "
+#~ "(excepting those on midi channel 10, reserved for percussions). "
+#~ "Especially useful if you wish to sing or play along with another "
+#~ "instrument."
+#~ msgstr ""
+#~ "* Transpose fonksiyonu *\n"
+#~ "Bu özellik midi dosyasının başka bir tonda çalınmasını sağlar.Bu ayarda "
+#~ "her bir numara bir yarım tonu temsil eder. Tüm notalar belirlenen tona "
+#~ "aktarılır.(10. kanal vurmalı çalgılara ayrılmıştır.)"
+
+#~ msgid ""
+#~ "* Drumshift function *\n"
+#~ "This option allows you to shift notes on midi channel 10 (the standard "
+#~ "percussions channel) of the desired number of semitones. This results in "
+#~ "different drumset and percussions being used during midi playback, so if "
+#~ "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
+#~ "with this value."
+#~ msgstr ""
+#~ "* Davul tonlama fonksiyonu *\n"
+#~ "Bu özellik 10. kanal üzerindeki notaları (vurmalı çalgılar kanalı) "
+#~ "yarımşar ses olarak ayarlamanızı sağlar. Bu özelliği kullanarak farklı "
+#~ "davul setleriyle farklı sesler elde edip çaldırabilirsiniz."
+
+#~ msgid ""
+#~ "* Pre-calculate MIDI length *\n"
+#~ "If this option is enabled, AMIDI-Plug will calculate the MIDI file length "
+#~ "as soon as the player requests it, instead of doing that only when the "
+#~ "MIDI file is being played. In example, MIDI length will be calculated "
+#~ "straight after adding MIDI files in a playlist. Disable this option if "
+#~ "you want faster playlist loading (when a lot of MIDI files are added), "
+#~ "enable it to display more information in the playlist straight after "
+#~ "loading."
+#~ msgstr ""
+#~ "* MIDI uzunluğunun ön hesaplaması *\n"
+#~ "Eğer bu seçeneği işaretlerseniz, AMIDI-Plug parça listesinde olan MIDI "
+#~ "lerin uzunluklarını hesaplayacakdır aksi takdirde sadece çalma/oynatma "
+#~ "esnasında hesaplama yapılır. Eğer çalma listesinin daha hızlı "
+#~ "yüklenmesini istiyorsanızbu özelliği devre dışı bırakın."
+
+#~ msgid ""
+#~ "* Extract comments from MIDI files *\n"
+#~ "Some MIDI files contain text comments (author, copyright, instrument "
+#~ "notes, etc.). If this option is enabled, AMIDI-Plug will extract and "
+#~ "display comments (if available) in the file information dialog."
+#~ msgstr ""
+#~ "*MIDI dosyalarından yorumları çıkar*\n"
+#~ "Bazı MIDI dosyaları metin biçeminde yorumlar içerir (yazar, telif hakkı, "
+#~ "çalgı notları, vs.). Bu seçenek açılırsa, AMIDI-Plug (varsa) yorumları "
+#~ "çıkarır ve dosya bilgisi ekranında gösterir."
+
+#~ msgid ""
+#~ "* Extract lyrics from MIDI files *\n"
+#~ "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-"
+#~ "Plug will extract and display song lyrics (if available) in the file "
+#~ "information dialog."
+#~ msgstr ""
+#~ "*MIDI dosyalarından şarkı sözlerini çıkar*\n"
+#~ "Bazı MIDI dosyaları şarkı sözleri içerir. Bu seçenek açılırsa, AMIDI-"
+#~ "Plug (varsa) şarkı sözlerini çıkarır ve dosya bilgisi ekranında gösterir."
+
+#~ msgid ""
+#~ "* Select SoundFont files *\n"
+#~ "In order to play MIDI with FluidSynth, you need to specify at least one "
+#~ "valid SoundFont file here (use absolute paths). The loading order is from "
+#~ "the top (first) to the bottom (last)."
+#~ msgstr ""
+#~ "* SoundFont dosyası seç *\n"
+#~ "FluidSynth ile MIDI çalmak için geçerli SoundFont dosyasını seçmelisiniz."
+#~ "(tam yolu kullanın). Yükleme seçeneklerini yukarıdan, aşağıya doğru "
+#~ "görebilirsiniz."
+
+#~ msgid ""
+#~ "* Load SoundFont on player start *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "* Oynatıcı başlangıcında SoundFont yükle *\n"
+#~ "FluidSynth içerisinde SoundFont yükleme süresi sisteminizin hızına göre "
+#~ "birkaç saniye sürecektir. Bu işlem bir kereliğine oynatıcı açılışında ya "
+#~ "da ilk MIDI dosyası oynatılmadan önce yapılabilir. SoundFont bilgisi "
+#~ "değiştirilene ya da uygulama hafızadan çıkarılana kadar kullanılabilir "
+#~ "kalacaktır. Oynatıcınızı sadece MIDI dosyaları için kullanmıyorsanız "
+#~ "SoundFont yüklemesini MIDI oynatılmadan önce yapılmasını tavsiye ederiz."
+
+#~ msgid ""
+#~ "* Load SoundFont on first midifile play *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+#~ msgstr ""
+#~ "*İlk MIDI dosyasını çaldığında SF'u yükle *\n"
+#~ "Depending on your system speed, SoundFont loading in FluidSynth will "
+#~ "require up to a few seconds. This is a one-time task (the soundfont will "
+#~ "stay loaded until it is changed or the backend is unloaded) that can be "
+#~ "done at player start, or before the first MIDI file is played (the latter "
+#~ "is a better choice if you don't use your player to listen MIDI files "
+#~ "only)."
+
+#~ msgid ""
+#~ "* Synthesizer gain *\n"
+#~ "From FluidSynth docs: the gain is applied to the final or master output "
+#~ "of the synthesizer; it is set to a low value by default to avoid the "
+#~ "saturation of the output when random MIDI files are played."
+#~ msgstr ""
+#~ "* Sentezleyici kazancı *\n"
+#~ "FluidSynth belgelerinden: kazanç sentezleyicinin final ya da ana çıkışına "
+#~ "uygulanır; rastgele MIDI dosyaları oynatıldığında çıktı doygunluğu "
+#~ "oluşmaması için öntanımlı olarak düşük bir değere ayarlanır."
+
+#~ msgid ""
+#~ "* Synthesizer polyphony *\n"
+#~ "From FluidSynth docs: the polyphony defines how many voices can be played "
+#~ "in parallel; the number of voices is not necessarily equivalent to the "
+#~ "number of notes played simultaneously; indeed, when a note is struck on a "
+#~ "specific MIDI channel, the preset on that channel may create several "
+#~ "voices, for example, one for the left audio channel and one for the right "
+#~ "audio channels; the number of voices activated depends on the number of "
+#~ "instrument zones that fall in the correspond to the velocity and key of "
+#~ "the played note."
+#~ msgstr ""
+#~ "* Sentezleyici polifoni *\n"
+#~ "FluidSynth belgelerinden: polifoni aynı anda paralel olarak kaç sesin "
+#~ "oynatılabileceğini belirler; seslerin adedinin aynı anda çalınan nota "
+#~ "adedine eşit olması gerekmemektedir; belirli bir MIDI kanalında bir nota "
+#~ "basıldığında kanal ayarlarına göre birden fazla ses çalınabilir, örneğin "
+#~ "sol kanal için bir ses ve sağ kanal için başka bir ses; kullanılan ses "
+#~ "adedi çalınan notanın hızı ve anahtarına bağlı olarak enstrüman "
+#~ "bölgelerinin sayısına bağlıdır."
+
+#~ msgid ""
+#~ "* Synthesizer reverb *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
+#~ "activated; note that when the reverb module is active, the amount of "
+#~ "signal sent to the reverb module depends on the \"reverb send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Sentezleyici reverb *\n"
+#~ "FluidSynth belgelerinden: \"evet\" olarak ayarlandığında reverb efekt "
+#~ "modülü çalışır; reverb modülü çalışırken reverb modülüne yollanan sinyal "
+#~ "miktarı Soundfont içerisinde tanımlanan \"reverb send\" üreticisi "
+#~ "tarafından belirlenir."
+
+#~ msgid ""
+#~ "* Synthesizer chorus *\n"
+#~ "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
+#~ "activated; note that when the chorus module is active, the amount of "
+#~ "signal sent to the chorus module depends on the \"chorus send\" generator "
+#~ "defined in the SoundFont."
+#~ msgstr ""
+#~ "* Senteleyici koro *\n"
+#~ "FluidSynth belgelerinden: \"evet\" olarak ayarlandığında koro modülü "
+#~ "çalışır; koro modülü çalışırken koro modülüne yollanan sinyal miktarı "
+#~ "Soundfont içerisinde tanımlanan \"chorus send\" üreticisi tarafından "
+#~ "belirlenir."
+
+#, fuzzy
+#~ msgid ""
+#~ "* Synthesizer samplerate *\n"
+#~ "The sample rate of the audio generated by the synthesizer. You can also "
+#~ "specify a custom value in the interval 22050Hz-96000Hz."
+#~ msgstr ""
+#~ "* Sentezleyici örnekleme oranı *\n"
+#~ "Sentezleyici tarafından üretilen sesin örnekleme oranı. Ayrıca isterseniz "
+#~ "22050Hz-96000Hz aralığından özel bir değer de atayabilirsiniz.\n"
+#~ "NOT: öntanımlı tampon parametreleri 44100Hz için hazırlanmıştır; ses "
+#~ "kalitesinikaybetmemek için örnekleme oranı değişince tampon "
+#~ "parametrelerini deÄŸiÅŸtirmeniz gerekebilir"
+
+#~ msgid ""
+#~ "If enabled, the extension from the original filename will not be stripped "
+#~ "before adding the new file extension to the end."
+#~ msgstr ""
+#~ "Seçildiğinde, yeni oluşturulan dosyaya yeni uzantı eklenirken eski "
+#~ "dosyanın uzantısı dosya adından çıkarılmaz."
+
+#~ msgid ""
+#~ "best/slowest:0;\n"
+#~ "worst/fastest:9;\n"
+#~ "recommended:2;\n"
+#~ "default:5;"
+#~ msgstr ""
+#~ "en iyi/en yavaÅŸ:0;\n"
+#~ "en kötü/en hızlı:9;\n"
+#~ "önerilen:2;\n"
+#~ "öntanımlı:5;"
+
+#~ msgid "Adds 16 bit checksum to every frame"
+#~ msgstr "Her çerçeveye 16 bit checksum ekler"
+
+#~ msgid "Variable bitrate"
+#~ msgstr "Değişken bit oranı"
+
+#~ msgid "Average bitrate"
+#~ msgstr "Ortalama bit oranı"
+
+#~ msgid ""
+#~ "For use with players that do not support low bitrate mp3 (Apex AD600-A "
+#~ "DVD/mp3 player)"
+#~ msgstr ""
+#~ "Düşük bit oranlı mp3'leri desteklemeyen çalıcılarla kullanılması için "
+#~ "(Apex AD600-A DVD/mp3 player)"
+
+#~ msgid ""
+#~ "highest:0;\n"
+#~ "lowest:9;\n"
+#~ "default:4;"
+#~ msgstr ""
+#~ "yüksek:0;\n"
+#~ "alçak:9;\n"
+#~ "öntanımlı:4;"
+
+#, fuzzy
+#~ msgid "Show playlists"
+#~ msgstr "Parça Listesini Seç"
+
+#, fuzzy
+#~ msgid "Show/hide playlists"
+#~ msgstr "Parça Listesini Seç"
+
+#~ msgid "About the Sun Driver"
+#~ msgstr "Sun Sürücüsü Hakkında"
+
+#~ msgid ""
+#~ "XMMS BSD Sun Driver\n"
+#~ "\n"
+#~ "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Maintainer: <vedge at csoft.org>.\n"
+#~ msgstr ""
+#~ "XMMS BSD Sun Sürücüsü\n"
+#~ "\n"
+#~ "Telif Hakkı (c) 2001 CubeSoft Communications, Inc.\n"
+#~ "Sorumlu: <vedge at csoft.org>.\n"
+
+#~ msgid "Audio control device:"
+#~ msgstr "Ses kontrol aygıtı:"
+
+#~ msgid "Buffer size (ms):"
+#~ msgstr "Tampon boyutu (ms):"
+
+#~ msgid "Volume controls device:"
+#~ msgstr "Ses kontrolleri aygıtı:"
+
+#~ msgid "XMMS uses mixer exclusively."
+#~ msgstr "XMMS, sadece karıştırıcıyı kullanıyor."
+
+#~ msgid "Sun driver configuration"
+#~ msgstr "Sun sürücüsü yapılandırması"
+
+#, fuzzy
+#~ msgid "Target volume:"
+#~ msgstr "Ses seviyesini deÄŸiÅŸtir"
+
+#, fuzzy
+#~ msgid "Effect strength:"
+#~ msgstr "Efekt yoÄŸunluÄŸu:"
+
+#~ msgid "FLAC Audio Plugin "
+#~ msgstr "FLAC Ses Eklentisi "
+
+#, fuzzy
+#~ msgid "Stream browser"
+#~ msgstr "gözat"
+
+#, fuzzy
+#~ msgid "Streambrowser"
+#~ msgstr "gözat"
+
#~ msgid "Audacious standard menu"
#~ msgstr "Audacious standart menü"
@@ -5969,10 +5808,6 @@ msgstr ""
#~ msgstr "Sunucu"
#, fuzzy
-#~ msgid "Save List"
-#~ msgstr "Kaydet"
-
-#, fuzzy
#~ msgid "About RoarAudio Plugin"
#~ msgstr "FLAC Ses Eklentisi Hakkında"
@@ -6333,10 +6168,6 @@ msgstr ""
#~ msgstr "Hakkında"
#, fuzzy
-#~ msgid "Output plugin"
-#~ msgstr "Çıktı eklentisi hatası\n"
-
-#, fuzzy
#~ msgid "Throttle Output"
#~ msgstr "aRts Çıkışı Hakkında"
@@ -6457,10 +6288,6 @@ msgstr ""
#~ msgstr "Varsayılan (%s)"
#, fuzzy
-#~ msgid "_Rename"
-#~ msgstr "Dosya adı"
-
-#, fuzzy
#~ msgid "About Icecast-Plugin"
#~ msgstr "Yankı (Eko) Eklentisi Hakkında"
@@ -6703,21 +6530,9 @@ msgstr ""
#~ msgid "Title:"
#~ msgstr "Başlık:"
-#~ msgid "Artist:"
-#~ msgstr "Sanatçı:"
-
-#~ msgid "Album:"
-#~ msgstr "Albüm:"
-
#~ msgid "Comment:"
#~ msgstr "Yorum:"
-#~ msgid "Year:"
-#~ msgstr "Yıl:"
-
-#~ msgid "Track number:"
-#~ msgstr "Parça numarası:"
-
#~ msgid "Genre:"
#~ msgstr "Tür:"
@@ -6948,9 +6763,6 @@ msgstr ""
#~ msgid "Musepack Tag"
#~ msgstr "Musepack Etiketi"
-#~ msgid "Track:"
-#~ msgstr "Parça:"
-
#~ msgid "Musepack Info"
#~ msgstr "Musepack Bilgi"
@@ -7827,12 +7639,6 @@ msgstr ""
#~ msgid " Ogg Vorbis Info "
#~ msgstr " Ogg Vorbis Bilgisi "
-#~ msgid "Bit rate:"
-#~ msgstr "Bit oranı:"
-
-#~ msgid "Length:"
-#~ msgstr "Uzunluk:"
-
#~ msgid "File size:"
#~ msgstr "Dosya boyutu:"
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..95360c2
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,3659 @@
+# Ukrainian translation for Audacious Plugins
+# Copyright (C) Audacious translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+# fedenko <fedenko@ukr.net>, 2011.
+# Kostyantyn Fedenko <fedenko@ukr.net>, 2011.
+# NaiLi Rootaerc <theism@mail.ru>, 2012.
+# Rax Garfield (http://biokillaz.com/), 2012.
+# Rax Garfield (http://biokillaz.com)/, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious Plugins\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2012-01-11 09:01-0500\n"
+"PO-Revision-Date: 2012-01-13 11:37+0000\n"
+"Last-Translator: NaiLi Rootaerc <theism@mail.ru>\n"
+"Language-Team: Ukrainian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"(c) 2005-2006, Команда Audacious.\n"
+"\n"
+"Ð”Ð»Ñ Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтовуєтьÑÑ libfaad2-%s.\n"
+"Декодер FAAD2 AAC/HE-AAC/HE-AACv2/DRM: (c) Nero AG, www.nero.com"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "Про плаґін Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ MP4 AAC"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "Про Будильник"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+"Модуль, що починає й закінчує Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð° розкладом.\n"
+"\n"
+"Ðвторами Ñ” Adam Feakin та Daniel Stodden."
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "Будильник"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr "Ð’Ñтавай, Україно! Ð’Ñтавай, рідна ненько! МоÑкаль вже годину не Ñпить!"
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "Гаразд"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "ЧаÑ"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "год"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr " "
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "хв"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "Закінчити через:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "Починати о (типово):"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "Ðалаштуйте дні тижнÑ, в Ñкі працюватиме будильник."
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "Як типово"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "День"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "Вівторок"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "Середа"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "Четвер"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "П’ÑтницÑ"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "Субота"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "ÐеділÑ"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "Понеділок"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "Дні"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "ÐароÑтаннÑ"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "Ñек"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "ГучніÑÑ‚ÑŒ"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "Як зараз"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "Ðа початку:"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "По закінченню:"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "Виконувати команду"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "увімкнути"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "СпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ (необов’Ñзково)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "ОглÑд..."
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "ПовідомленнÑ"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "ВикориÑтовувати:"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Опції"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "Як це вÑе налаштувати?"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"ЧаÑ\n"
+" Починати о: \n"
+" ЧаÑ, коли починатиметьÑÑ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ.\n"
+"\n"
+" Закінчити через: \n"
+" Закінчити Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· заданий тут проміжок чаÑу піÑÐ»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ.\n"
+" (Ñкщо діалогове вікно Ð¿Ñ€Ð¾Ð±ÑƒÐ´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ закрито)\n"
+"\n"
+"\n"
+"Дні\n"
+" День:\n"
+" День тижнÑ, в Ñкий працюватиме будильник.\n"
+"\n"
+" ЧаÑ:\n"
+" ЧаÑ, коли будильник Ñпрацьовуватиме в обраний день.\n"
+" Якщо вибрано \"Як типово\", будильник Ñпрацює в типовий\n"
+" Ñ‡Ð°Ñ (вкладка \"ЧаÑ\").\n"
+"\n"
+"\n"
+"ГучніÑÑ‚ÑŒ\n"
+" ÐароÑтаннÑ: \n"
+" Під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð° розкладом гучніÑÑ‚ÑŒ\n"
+" нарощуватиметьÑÑ Ð¿Ñ€Ð¾Ñ‚Ñгом вказаного.\n"
+" тут періоду чаÑу.\n"
+"\n"
+" Ðа початку: \n"
+" Почати Ð½Ð°Ñ€Ð¾Ñ‰ÐµÐ½Ð½Ñ Ð· цієї гучноÑÑ‚Ñ–.\n"
+"\n"
+" По закінченню: \n"
+" Ðарощувати до цієї гучноÑÑ‚Ñ–. Якщо чаÑом\n"
+" нароÑÑ‚Ð°Ð½Ð½Ñ Ñ” 0, то вÑе Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¹Ñ‚Ð¸Ð¼Ðµ\n"
+" з цією гучніÑÑ‚ÑŽ.\n"
+"\n"
+"\n"
+"Опції:\n"
+" Виконувати команду:\n"
+" ЗапуÑкати цю команду під Ñ‡Ð°Ñ ÑпрацьовуваннÑ.\n"
+"\n"
+" СпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ (необов’Ñзково): \n"
+" Відтворювати цей ÑпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ (лише \n"
+" з ÑуфікÑом .m3u). Якщо не вказано, то\n"
+" відтворюватимутьÑÑ Ð¾Ñтанні відкриті\n"
+" доріжки.\n"
+" Можна ввеÑти Ñюди URL mp3- чи ogg-потоку.\n"
+" Поки що Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÑпиÑків відтвореннÑ\n"
+" за URL не підтримуєтьÑÑ.\n"
+"\n"
+" ПовідомленнÑ:\n"
+" Показувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ Ñпрацьовуванні.\n"
+" Ð”Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð²ÐµÐ´Ñ–Ñ‚ÑŒ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð² поле\n"
+" й увімкніть \"ВикориÑтовувати:\".\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Як налаштувати?"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "Ðагадую:"
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "ДÑкую"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "Типовий PCM-прилад"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "Типовий мікшер"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ ALSA"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "PCM-приÑтрій:"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "Мікшер:"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "Елемент мікшера:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "Ðе завиÑати через \"drain\"-ваду ALSA"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "Про плаґін виводу ALSA"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "Збій ALSA"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"Ви не вибрали портів ÑеквенÑера Ð´Ð»Ñ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ MIDI. Виберіть Ñ—Ñ… у "
+"налаштуваннÑÑ… AMIDI-Plug. "
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "ПоÑтпроцеÑор ALSA"
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Цей поÑтпроцеÑор поÑилає MIDI-Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ñ– портів ÑеквенÑера ALSA, обраних кориÑтувачем. Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑеквенÑера ALSA дуже гнучкий, він може надавати порти Ð´Ð»Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¸Ñ… Ñинтезаторів аудіокарт (наприклад, emu10k1), програмних Ñинтезаторів, зовнішніх приладів тощо.\n"
+"Цей поÑтпроцеÑор не генерує звук. MIDI-Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐºÐµÑ€ÑƒÑŽÑ‚ÑŒÑÑ Ð½Ð°Ð¿Ñ€Ñму приладами та програмами за портами ALSA. Ðаприклад, MIDI-повідомленнÑ, надіÑлані апаратному Ñинтезатору, будуть відтворені напрÑму.\n"
+"Ðвтором поÑтпроцеÑора Ñ” Giacomo Lozito."
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "ПоÑтпроцеÑор FluidSynth"
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"Цей поÑтпроцеÑор утворює звук унаÑлідок відÑÐ¸Ð»Ð°Ð½Ð½Ñ MIDI-повідомлень до FluidSynth, програмного Ñинтезатора реального чаÑу, котрий базуєтьÑÑ Ð½Ð° Ñпецифікації SoundFont2 (www.fluidsynth.org).\n"
+"Утвореним звуком можна керувати через плаґіни ефектів програвача. Звук виводитьÑÑ Ñ‡ÐµÑ€ÐµÐ· обраний плаґін виводу.\n"
+"Ðвтором поÑтпроцеÑора Ñ” Giacomo Lozito."
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑтпроцеÑора ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Порт"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "Ðазва клієнта"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Ðазва порта"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "Порти виводу ALSA"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "Звукова карта:"
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "Елемент мікшера:"
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÐºÑˆÐµÑ€Ð°"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "ПоÑтпроцеÑор ALSA вимкнений або недоÑтупний."
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ПоÑтпроцеÑор\n"
+"ALSA</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "AMIDI-Plug - Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ поÑтпроцеÑор"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ AMIDI-Plug"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "Вибір поÑтпроцеÑора"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "ÐаÑвні поÑтпроцеÑори"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "ТранÑпозиціÑ: "
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "ЗÑув ударних: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Додаткові налаштуваннÑ"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "ОбчиÑлювати триваліÑÑ‚ÑŒ MIDI-файлів у ÑпиÑку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð¿ÐµÑ€ÐµÐ´"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "ВитÑгувати коментарі (Ñкщо Ñ”) з MIDI-файлу"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "ВитÑгувати текÑÑ‚ піÑні (Ñкщо Ñ”) з MIDI-файлу"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+"<span size=\"smaller\">AMIDI-\n"
+"Plug</span>"
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "AMIDI-Plug - вибір файлу"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "AMIDI-Plug - налаштуваннÑ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "AMIDI-Plug - вибір файлу SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑтпроцеÑора FluidSynth"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ SoundFont"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Ð†Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Розмір (у байтах)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "Завантажувати з програвачем"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "Завантажувати при відтворенні MIDI"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинтезатора"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "ПідÑиленнÑ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "Ñк типово"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "значеннÑ:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "ПоліфоніÑ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "РевербераціÑ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "так"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "ні"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "ХоруÑ"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "ЧаÑтота диÑкретизації"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 Гц"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Гц"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Гц"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "Задана:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Гц"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "ПоÑтпроцеÑор FluidSynth вимкнений або недоÑтупний."
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ПоÑтпроцеÑор\n"
+"FluidSynth</span>"
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑтпроцеÑора TiMidity"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "ПоÑтпроцеÑор TiMidity вимкнений або недоÑтупний."
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ПоÑтпроцеÑор\n"
+"TiMidity</span>"
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Ðазва:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Ðазва:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "ТриваліÑÑ‚ÑŒ (мÑ):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "КількіÑÑ‚ÑŒ доріжок:"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr "змінна"
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "Темп (BMP):"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg):"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr "ЧаÑовий код MIDI:"
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> Коментарі й Ñлова піÑні в MIDI </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* у цьому MIDI-файлі немає коментарів *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* у цьому MIDI-файлі немає Ñлів піÑні *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (недійÑний UTF-8)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "Про AMIDI-Plug"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+"\n"
+"AMIDI-Plug "
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+"\n"
+"модульний MIDI-програвач\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"напиÑаний Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"ОÑоблива подÑка:\n"
+"\n"
+"Clemens Ladisch та Jaroslav Kysela\n"
+"за їхні клаÑні програми aplaymidi й amixer, котрі були \n"
+"дуже кориÑними, разом із документацією alsa-lib,\n"
+"у вивченні ALSA API;\n"
+"\n"
+"Alfredo Spadafina\n"
+"за гарненький логотип MIDI-клавіатури;\n"
+"\n"
+"Tony Vroon\n"
+"за допомогу з альфа-теÑтуваннÑм.\n"
+"\n"
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "ПрÑмокутник"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "Заокруглений прÑмокутник"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "Увігнутий прÑмокутник"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "Тільки текÑÑ‚"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "ВідтвореннÑ"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "Показує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° початку відтвореннÑ."
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "Зміна назви"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"Показує повідомленнÑ, коли під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½ÑŽÑ”Ñ‚ÑŒÑÑ Ð½Ð°Ð·Ð²Ð° доріжки, а "
+"Ñ–Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ залишаєтьÑÑ Ñтарим. Це кориÑно при відтворенні потоків."
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "Зміна гучноÑÑ‚Ñ–"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "Показує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ зміні гучноÑÑ‚Ñ–."
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "Пауза"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "Показує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ призупиненні відтвореннÑ."
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "ПродовженнÑ"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "Показує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ продовженні відтвореннÑ."
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "РозташуваннÑ"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "ВідноÑний горизонтальний зÑув:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "ВідноÑний вертикальний зÑув:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "МакÑимальна ширина повідомленнÑ:"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "Опції Ð´Ð»Ñ ÐºÑ–Ð»ÑŒÐºÐ¾Ñ… моніторів"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "Показувати на:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "вÑÑ–Ñ… моніторах"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "моніторі %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "ЧаÑова витримка (мÑ)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "Показ:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "ПоÑва:"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "ЗникненнÑ:"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "Шрифти"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "Шрифт %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "Тінь"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "ІнтернаціоналізаціÑ"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "Вимкнути Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑту в UTF-8 в повідомленнÑÑ…"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "Вибрати файл жупана"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "Показати Ñтиль"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "Кольори"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "Колір %i:"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "ВлаÑний жупан"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "Файл жупана:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "ОглÑд..."
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "ЗадіÑти ÑпуÑковий гачок"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "ПодіÑ"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "Композитний "
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+"Композитного менеджера не знайдено.\n"
+"Якщо він не запущений, увімкніть його, інакше екранне меню працюватиме неправильно."
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "Композитний менеджер не потрібен Ð´Ð»Ñ Ñ„Ð°Ð»ÑŒÑˆÐ¸Ð²Ð¾Ñ— прозороÑÑ‚Ñ–"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "ПрозоріÑÑ‚ÑŒ"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "Фальшива прозоріÑÑ‚ÑŒ"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Ð¡Ð¿Ñ€Ð°Ð²Ð¶Ð½Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€Ñ–ÑÑ‚ÑŒ (потребує композитні Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ X)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Композитне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ðµ"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Композитне Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÐ´Ð¾Ñтупне"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr "<span font_desc='%s'>OSD-Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Audacious</span>"
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ на екрані"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "Перевірка"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "РозташуваннÑ"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "ÐнімаціÑ"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "ТекÑÑ‚"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "ОздобленнÑ"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "СпуÑковий гачок"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "Різне"
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "Про плаґін повідомлень на екрані"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Audacious OSD "
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"Ðвтором Ñ” Giacomo Lozito\n"
+"<james@develia.org>\n"
+"\n"
+"БазуєтьÑÑ Ð½Ð° бібліотеці Ghosd,\n"
+"автором Ñкої Ñ” Evan Martin,\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr "РозпливчаÑтий оÑцилограф: вибір кольору"
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "Опції:"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñтереозвуку в бінауральний за Бауером"
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr "Рівень Ð·Ð¼Ñ–ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñ–Ð²:"
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr "ЧаÑтота зрізу:"
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "ПреÑети:"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "Про плаґін аудіо-компакт-диÑків"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+"(c) 2007, Calin Crisan <ccrisan@gmail.com> і Команда Audacious.\n"
+"\n"
+"(c) 2009, John Lindgren.\n"
+"\n"
+"Велике ÑпаÑибі розробникам libcdio <http://www.gnu.org/software/libcdio/>\n"
+"і розробникам libcddb <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Також дÑкую Tony Vroon за наÑтавництво й ÑпрÑмовуваннÑ.\n"
+"\n"
+"Це був проект \"Google Summer of Code 2007\"."
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "Ðудіо-CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "Привід порожній."
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "Ðепідтримуваний тип диÑку."
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð»Ð°Ò‘Ñ–Ð½Ñƒ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ CD"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "Цифрове Ð´Ð¾Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ назви"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "ШвидкіÑÑ‚ÑŒ Ð¾Ð±ÐµÑ€Ñ‚Ð°Ð½Ð½Ñ Ð´Ð¸Ñка:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "ВикориÑтовувати CD-Text за наÑвноÑÑ‚Ñ–"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "ВикориÑтовувати CDDB за можливоÑÑ‚Ñ–"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "Сервер: "
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "ШлÑÑ…: "
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Порт: "
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "ВикориÑтовувати HTTP заміÑÑ‚ÑŒ CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "ПримуÑово вÑтановити приÑтрій: "
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Гаразд"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Відтворити CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Додати CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "Про плаґін-компреÑор звукового діапазону"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿Ñ€ÐµÑора звукового діапазону"
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "ГучніÑÑ‚ÑŒ центру:"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "Динамічний діапазон:"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "Декодер ігроконÑольної музики"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Загальне"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "ВідтвореннÑ"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "ÐЧ:"
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "Ñек"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "ВЧ:"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "Типова триваліÑÑ‚ÑŒ піÑні:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "ПередиÑкретизаціÑ"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "ПримуÑова передиÑкретизаціÑ"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "ЧаÑтота диÑкретизації:"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Гц"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "SPC700"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "Ігнорувати триваліÑÑ‚ÑŒ із теґів SPC"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "ПоÑилити реверберацію"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+"Типова триваліÑÑ‚ÑŒ піÑні, вказана в Ñекундах, викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ð¾Ñ€Ñ–Ð¶Ð¾Ðº, "
+"що не мають інформації про триваліÑÑ‚ÑŒ (наприклад, повторювані доріжки)."
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "Про декодер ігроконÑольної музики"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+"Двигунець Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð³Ñ€Ð¾ÐºÐ¾Ð½Ñольної музики базуєтьÑÑ Ð½Ð° Game_Music_Emu 0.5.2.\n"
+"Підтримувані формати: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Ð”Ð»Ñ Audacious імплементували William Pitcock <nenolod@dereferenced.org> та Shay Green <gblargg@gmail.com>\n"
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "Про плаґін перехреÑного затиханнÑ-нароÑтаннÑ"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "ПерехреÑне затиханнÑ"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "Охоплювати (Ñекунд):"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Збій при перехреÑному затиханні"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+"ПерехреÑне Ð·Ð°Ñ‚Ð¸Ñ…Ð°Ð½Ð½Ñ Ñ‚ÑƒÑ‚ неможливе, бо доріжки мають різну кількіÑÑ‚ÑŒ "
+"каналів."
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+"ПерехреÑне Ð·Ð°Ñ‚Ð¸Ñ…Ð°Ð½Ð½Ñ Ñ‚ÑƒÑ‚ неможливе, бо доріжки мають різну чаÑтоту диÑкретизації.\n"
+"\n"
+"Можна викориÑтовувати ефект \"Sample Rate Converter\" Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÑƒÑового вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñтоти диÑкретизації."
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐšÑ€Ð¸Ñталізатора"
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "ІнтенÑивніÑÑ‚ÑŒ ефекту:"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "ЗаÑтоÑувати"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+"Плаґін відлуннÑ\n"
+"Johan Levin Ñтворив 1999 року.\n"
+"\n"
+"Ð’Ñ–Ð´Ð»ÑƒÐ½Ð½Ñ Ð¾Ð±â€™Ñ”Ð¼Ð½Ð¾Ð³Ð¾ звуку напиÑав 1999 року Carl van Schaik."
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "Про плаґін відлуннÑ"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð»ÑƒÐ½Ð½Ñ"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "Затримка (мÑ):"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "Зворотній зв’Ñзок (%):"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "ГучніÑÑ‚ÑŒ (%): "
+
+#: src/ffaudio/ffaudio-core.c:725
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+"Плаґін Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð²ÑƒÐºÑƒ багатьох форматів Ð´Ð»Ñ Audacious, базуєтьÑÑ\n"
+"на інтегрованому мультимедіа-Ñередовищі FFmpeg (http://www.ffmpeg.org/).\n"
+"(c) 2000-2009 Fabrice Bellard та інші.\n"
+"\n"
+"Ðвтори плаґіна Ð´Ð»Ñ Audacious:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>.\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+
+#: src/ffaudio/ffaudio-core.c:739
+msgid "About FFaudio Plugin"
+msgstr "Про плаґін FFaudio"
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr "Про плаґін FileWriter"
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ в файл"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "Тип файлу виводу:"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "ÐалаштуваннÑ..."
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "Зберігати в теку оригіналу"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "Обрати теку ÑамоÑтійно"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "Зберігати вивід до:"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "Вибір теки виводу"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "Ðазва файла:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "за тегами доріжки"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "за назвою файлу оригіналу"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "Ðе вирізати Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¾Ñ€Ð¸Ð³Ñ–Ð½Ð°Ð»Ñƒ"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "Ðомер доріжки на початку назви файлу"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "Ðвто"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "Об’єднане Ñтерео"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "Стерео"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "Моно"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ MP3"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "ШвидкіÑÑ‚ÑŒ ÑтиÑненнÑ:"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "ЧаÑтота диÑкретизації виводу:"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr "Гц"
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "Сила ÑтиÑканнÑ"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "Бітрейт (Кбіт/Ñ)"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "Коефіцієнт ÑтиÑненнÑ:"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "Тип звуку:"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "Різне:"
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr ""
+"ПримуÑова відповідніÑÑ‚ÑŒ до ISO (Ð´Ð»Ñ Ð°Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¸Ñ… програвачів, більший розмір)"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "CRC-захиÑÑ‚ від збоїв (дещо менша ÑкіÑÑ‚ÑŒ)"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "ЯкіÑÑ‚ÑŒ"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "Увімкнути змінний чи уÑереднений бітрейт"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "Тип бітрейту:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "Опції VBR (змінний бітрейт):"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "Мінімальний бітрейт (Кбіт/c):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "МакÑимальний бітрейт (Кбіт/c):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "ПримуÑово вÑтановити мінімальний бітрейт"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "Опції ABR (уÑереднений бітрейт):"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "Середній бітрейт (Кбіт/Ñ):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "Рівень ÑкоÑÑ‚Ñ– VBR (менше - краще):"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "Ðе пиÑати VBR-заголовок (\"Xing\")"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr "VBR/ABR"
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "Позначки:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "\"Під авторÑькими правами\""
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "\"Є оригіналом\""
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "Параметри ID3:"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "ПримуÑово додавати теґ другої верÑÑ–Ñ—"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "Додавати лише v1-теґ"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "Додавати лише v2-теґ"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "Теґи"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¸ÐºÐ° Vorbis"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "Рівень ÑкоÑÑ‚Ñ– (0-10, менше - краще):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "Про плаґін вводу з FLAC"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+"\n"
+"Ðвтором оригіналу Ñ”\n"
+"Ralf Ertzinger <ralf@skytale.net>.\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "Про плаґін Ñкорочень GNOME"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Плаґін Ñкорочень GNOME\n"
+"дозволÑÑ” керувати Audacious за допомогою Ñкорочень GNOME.\n"
+"\n"
+"(c) 2007-2008, Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "Ðомер у ÑпиÑку"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "Ðазва"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "Виконавець"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Рік"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "Ðльбом"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "Доріжка"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ñ–Ñ Ñƒ черзі"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "ТриваліÑÑ‚ÑŒ"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "ШлÑÑ… до файлу"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Ðазва файлу"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "Ðазва файлу"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "Бітова швидкіÑÑ‚ÑŒ"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Вибрати Ñтовпчики"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "ДоÑтупні:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Вибрані:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "Прикріпити зліва"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "Прикріпити Ñправа"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "Прикріпити вгорі"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "Прикріпити внизу"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "Відкріпити"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "Вимкнути"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "Відтворити _файли..."
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "Відтворити файли за _поÑиланнÑм..."
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "_Додати файли..."
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "Додати файли _за поÑиланнÑм..."
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "П_ро Audacious..."
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "_ÐалаштуваннÑ..."
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Вихід"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "_Відтворити"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "_Призупинити"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "_Зупинити"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "П_опереднÑ"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "_ÐаÑтупна"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "Повто_рювати"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "В_ипадково"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "Ð_е проÑуватиÑÑ ÑпиÑком"
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "Зупинити піÑÐ»Ñ _цієї піÑні"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "_Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ доріжку..."
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "Перейти до _чаÑу..."
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "Перейти до _доріжки..."
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "_За номером доріжки"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "За _назвою"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "За _виконавцем"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "За _альбомом"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "За _датою виданнÑ"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "За _шлÑхом до файлу"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "За назвою _файлу"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "_У зворотньому порÑдку"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "У випадковому по_Ñ€Ñдку"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "_Оновити"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "Прибрати _недоÑтупні файли"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "_Сортувати"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "_Ðовий"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "_Закрити"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "_Імпортувати..."
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "_ЕкÑпортувати..."
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑками _відтвореннÑ..."
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ _чергою..."
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "З_більшити гучніÑÑ‚ÑŒ"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "З_меншити гучніÑÑ‚ÑŒ"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "_Еквалайзер"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "Е_фекти"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "_ІнтерфейÑ"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "_ВізуалізаціÑ"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "Показувати панель _меню"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "Показувати панель і_нформації"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "Показувати Ñ€Ñдок _Ñтану"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "Показувати _заголовки Ñтовпчиків "
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "Вибрати Ñ_товпчики..."
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "_Прокручувати при зміні доріжки"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "_Файл"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "_ВідтвореннÑ"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "_СпиÑок відтвореннÑ"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "С_лужби"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "В_ивід"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "Ви_глÑд"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "_Елемент черги"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "_Вирізати"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "_Копіювати"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "Ð’ÑÑ‚_авити"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "Виді_лити вÑе"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "Перей_менувати"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ GTK"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr "%s - Audacious"
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "Буферую..."
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "Помилка"
+
+#: src/gtkui/ui_playlist_notebook.c:97
+msgid "Close"
+msgstr "Закрити"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "моно"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "Ñтерео"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d канал"
+msgstr[1] "%d канали"
+msgstr[2] "%d каналів"
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr "%d кб/Ñ"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð´Ð¾Ñ€Ñ–Ð¶ÐºÐ°"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Відтворити"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Призупинити/продовжити"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "Зупинити"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "ÐаÑтупна доріжка"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "Ðа 5 Ñекунд вперед"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "Ðа 5 Ñекунд назад"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "Вимкнути звук"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Збільшити гучніÑÑ‚ÑŒ"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Зменшити гучніÑÑ‚ÑŒ"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "Перейти до файлу"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "Перемкнути Ñтан вікон програвача"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "Показати OSD-повідомленнÑ"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "Перемкнути повтор"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "Перемкнути таÑуваннÑ"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(немає)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+"Ðе раджу пов’Ñзувати головні кнопки миші без модифікаторів.\n"
+"\n"
+"Продовжувати попри це?"
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "Пов’ÑÐ·ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº миші"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ð°Ñ€Ñчих клавіш"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"Маючи курÑор на полі, натиÑніть необхідну клавішу чи комбінацію вÑередині полÑ.\n"
+"Можна також прив’Ñзувати кнопки миші."
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "ГарÑчі клавіші:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>ДіÑ:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "<b>Прив’Ñзка до клавіш:</b>"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "Про плаґін гарÑчих клавіш"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+"Плаґін гарÑчих клавіш\n"
+"дозволÑÑ” керувати Audacious за допомогою клавіш чи Ñ—Ñ… комбінацій.\n"
+"\n"
+"(c) 2007-2008, Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Також брали учаÑÑ‚ÑŒ:\n"
+"(c) 2006-2007, Vladimir Paskov <vlado.paskov@gmail.com>,\n"
+"(c) 2000-2002, Ville Syrjälä <syrjala@sci.fi>,\n"
+"\t\tBryn Davies <curious@ihug.com.au>,\n"
+"\t\tJonathan A. Davis <davis@jdhouse.org>,\n"
+"\t\tJeremy Tan <nsx@nsx.homeip.net>,\n"
+"\n"
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr "Ð’Ñтановити зв’Ñзок із уÑіма доÑтупними JACK-портами"
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr "Ð’Ñтановити зв’Ñзок лише з портами виводу"
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr "Ðе вÑтановлювати зв’Ñзка з портами"
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð»Ð°Ò‘Ñ–Ð½Ð° JACK"
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr "Режим з’єднаннÑ:"
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr "Виводити налагоджувальну інформацію"
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+"Драйвер JACK до XMMS 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Ðвтор: Chris Morgan <cmorgan@alum.wpi.edu>\n"
+"\n"
+"Giacomo Lozito із develia.org\n"
+"Ñпортував під Audacious"
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr "Про плаґін виводу JACK"
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr "Про хоÑÑ‚ LADSPA"
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ…Ð¾Ñту LADSPA"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "ШлÑхи до модулів:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>Якщо шлÑхів кілька, розділÑйте Ñ—Ñ… двокрапками.\n"
+"Пошук відбуваєтьÑÑ Ð·Ð° вказаними шлÑхами та змінною LADSPA_PATH.\n"
+"Вказавши шлÑхи, натиÑніть Enter Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ плаґінів.</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "ÐаÑвні плаґіни:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "Увімкнути"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "Увімкнені плаґіни:"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "ÐалаштуваннÑ"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Шукаю Ñлова..."
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"З’єднуюÑÑ Ð· lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"Ðе знайдено Ñлів піÑні."
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr "Про плаґін-метроном"
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+"Генератор такту, напиÑаний Martin Strauss <mys@faveve.uni-stuttgart.de>,\n"
+"\n"
+"можна викориÑтовувати за URL: tact://beats*num/den\n"
+"(наприклад, tact://77 генерує такт із темпом 77 BPM,\n"
+"tact://60*3/4 - такт із темпом 60 BPM і розміром 3/4)"
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr "Генератор такту: %d BPM"
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr "Генератор такту: %d BPM, %d/%d"
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr "Про змішувач каналів"
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–ÑˆÑƒÐ²Ð°Ñ‡Ð° каналів"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "Каналів на виході:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "Зміни здійÑнюютьÑÑ Ð¿Ñ€Ð¸ зміні відтворюваної доріжки."
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "Об’ємний звук"
+
+#: src/mtp_up/mtp.c:340
+msgid "Upload in progress..."
+msgstr "Завантажую..."
+
+#: src/mtp_up/mtp.c:352
+msgid "Upload to MTP Device"
+msgstr "Завантажити на MTP-прилад"
+
+#: src/mtp_up/mtp.c:353
+msgid "Disconnect MTP Device"
+msgstr "Від’єднати MTP-прилад"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "Зупинено"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr "Audacious нічого не відтворює."
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Плаґін виводу в null"
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+" напиÑаний Christian Birchinger <joker@netswarm.net>\n"
+"на оÑнові плаґіну XMMS, напиÑаного HÃ¥vard KvÃ¥l <havardk@xmms.org>"
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr "Про вивід у нікуди"
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ в нікуди"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "Ð’ реальному чаÑÑ–"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. Типовий прилад"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð»Ð°Ò‘Ñ–Ð½Ñƒ виводу в OSS4"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Ðудіоприлад:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "ВикориÑтати інший прилад:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "Зберігати гучніÑÑ‚ÑŒ між ÑеÑÑ–Ñми"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr "ЗадіÑти зміни формату, здійÑнені програмами OSS."
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr "ДіÑти в екÑклюзивному режимі, уникаючи віртуального мікшуваннÑ."
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "Про плаґін виводу в OSS4"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "Збій OSS4"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "Типово (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ð° OSS"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Прилади"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "БуферуваннÑ:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð±ÑƒÑ„ÐµÑ€Ð¸Ð·Ð°Ñ†Ñ–Ñ (%):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "БуферуваннÑ"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÐºÑˆÐµÑ€Ð°:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "ГучніÑÑ‚ÑŒ контролює Master, не PCM."
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "Мікшер"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "Про драйвер OSS"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "Про плаґін виводу в PulseAudio"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr "Про плаґін-перетворювач чаÑтоти диÑкретизації"
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‡Ð°Ñтоти диÑкретизації"
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "ВідповідніÑÑ‚ÑŒ чаÑтот:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "УÑÑ– інші:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "Метод:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "Змінити пароль"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>Служби</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "Пароль:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr "URL Scrobbler:"
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr "<b>Last.FM</b>"
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr "Scrobbler"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+"Плаґін AudioScrobbler Ð´Ð»Ñ Audacious\n"
+"\n"
+"Оригінал Ñтворили Audun Hove <audun@nlc.no> та Pipian <pipian@pipian.com>\n"
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr "Про плаґін Scrobbler"
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "Про плаґін виводу SDL"
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "Збій SDL"
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "Жанр"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "Бібліотека"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "_Створити ÑпиÑок відтвореннÑ"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "_Додати до ÑпиÑку відтвореннÑ"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "Шукати в бібліотеці"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"Щоб імпортувати Ñвою музичну бібліотеку до Audacious, виберіть теку й "
+"натиÑніть на значок оновленнÑ."
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "Зачекайте..."
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "Вибрати теку"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr "Про GUI \"Skinned\""
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+"(c) 2008, Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "_Програвач"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "Шрифт оÑновного вікна програвача"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "_СпиÑок відтвореннÑ"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "Шрифт ÑпиÑку відтвореннÑ:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>Шрифти</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "ВикориÑтовувати раÑтрові шрифти (підтримуєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ ASCII)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "Прокручувати назву піÑні в обох напрÑмках"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>Жупан</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "Попередній підÑилювач"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Гц"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Гц"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Гц"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Гц"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Гц"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 кГц"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 кГц"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 кГц"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 кГц"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 кГц"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Еквалайзер Audacious"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "Типові налаштуваннÑ"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "Вибір преÑету"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "Завантажити відповідний доріжці преÑет"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "Завантажити еквалайзерний преÑет"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ñ€ÐµÑету"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "Зберегти преÑет Ñк відповідний доріжці"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "Зберегти еквалайзерний преÑет"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€ÐµÑету"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "Видалити відповідний доріжці преÑет"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr "кб/Ñ"
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr "кГц"
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "об'ємний"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "Перехід до %d:%-2.2d / %d:%-2.2d"
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "ГучніÑÑ‚ÑŒ: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "БаланÑ: %d%% вліво"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "БаланÑ: центр"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "БаланÑ: %d%% вправо"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr "Меню опцій"
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "Вимкнути Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð´ іншими вікнами"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "Відображати над іншими вікнами"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr "Редактор інформації про доріжку"
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "Меню візуалізації"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr "Однодоріжковий режим."
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr "Режим ÑпиÑка відтвореннÑ."
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr "Зупинити піÑÐ»Ñ Ñ†Ñ–Ñ”Ñ— доріжки."
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr "Продовжити піÑÐ»Ñ Ñ†Ñ–Ñ”Ñ— доріжки."
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "Прокручувати назву доріжки"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "Зупинити піÑÐ»Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— доріжки"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "Затримувати піки"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Повторювати"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Випадково"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "Ðе проÑуватиÑÑ Ñƒ ÑпиÑку відтвореннÑ"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "Показати програвач"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "Показати редактор ÑпиÑків відтвореннÑ"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "Показати еквалайзер"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "Завжди згори"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "Ðа вÑÑ–Ñ… робочих облаÑÑ‚ÑÑ…"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "Згорнути програвач"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "Згорнути ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "Згорнути еквалайзер"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "Ðналізатор"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "ОÑцилограф"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "Спектрограма"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "Вимкнено"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Звичайний"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "Вогонь"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "Монотонні лінії"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "Лінії"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "Стовпчики"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "Крапковий"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "Лінійний"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "Суцільний"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "Лід"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Плавний"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "Дуже повільне"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "Повільне"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Помірне"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Швидке"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "Дуже швидке"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "Скільки чаÑу пройшло"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "Скільки чаÑу залишаєтьÑÑ"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Призупинити відтвореннÑ"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð´Ð¾Ñ€Ñ–Ð¶ÐºÐ°"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "ÐаÑтупна доріжка"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "ВізуалізаціÑ"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "Режим візуалізації"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "Тип аналізатора"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "Тип оÑцилографа"
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "Тип Ñпектрограми"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "Режим WindowShade VU"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "Ð¡Ð¿Ð°Ð´Ð°Ð½Ð½Ñ Ñтовпчиків аналізатора"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "Ð¡Ð¿Ð°Ð´Ð°Ð½Ð½Ñ Ð¿Ñ–ÐºÑ–Ð² аналізатора"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "СпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "Ðовий ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "Виділити наÑтупний ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "Виділити попередній ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Вилучити ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Імпортувати ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Завантажити ÑпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð· файлу до виділеного ÑпиÑку."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "ЕкÑпортувати ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "Зберегти виділений ÑпиÑок відтвореннÑ."
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "Оновити ÑпиÑок"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "Оновити метадані, пов'Ñзані з доріжками ÑпиÑку відтвореннÑ."
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑками відтвореннÑ"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€Ð³Ð¾ÑŽ"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "ПереглÑд"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "ІнтерфейÑ"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¸Ì†Ñу ..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "Додати інтернет адреÑу ..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "Додає віддалену доріжку до ÑпиÑку відтвореннÑ."
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "Додати файли ..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Додає файли до ÑпиÑку відтвореннÑ."
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Пошук Ñ– виділеннÑ"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr "Виділити елементи ÑпиÑка за вказаними критеріÑми."
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "Інвертувати виділеннÑ"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr "Виділити доÑÑ– невиділене й знÑти поточне виділеннÑ."
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Виділити вÑе"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "Виділити вÑÑ– елементи ÑпиÑка."
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "ЗнÑти виділеннÑ"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "ЗнÑти Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð· уÑÑ–Ñ… елементів ÑпиÑка."
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Вилучити вÑÑ–"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "Вилучає вÑÑ– елементи зі ÑпиÑку відтвореннÑ."
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "ОчиÑтити чергу"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr "Видалити з черги елементи цього ÑпиÑку."
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "Прибрати недоÑтупні файли."
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr "Видалити зі ÑпиÑку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÐ´Ð¾Ñтупні файли."
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "Видалити дублікати"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "За назвою"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr "Видалити зі ÑпиÑку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚Ð¸ за назвою."
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "За ім’Ñм файлу"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr "Видалити зі ÑпиÑку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚Ð¸ за ім’Ñм файла."
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "За шлÑхом та ім’Ñм файлу"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr "Видалити зі ÑпиÑку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ‚Ð¸ за повним шлÑхом до них."
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "Вилучити невідмічені "
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "Вилучити невиділені елементи зі ÑпиÑку відтвореннÑ."
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "Вилучити виділені"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "Вилучити виділені елементи зі ÑпиÑку відтвореннÑ"
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "Порушити порÑдок"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "Розміщує елементи ÑпиÑка в довільному порÑдку."
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Обернути ÑпиÑок"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "РозміÑтити доріжки ÑпиÑка в протилежному порÑдку."
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Сортувати ÑпиÑок..."
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr "Сортувати ÑпиÑок за назвами доріжок."
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "За альбомом"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr "Сортувати ÑпиÑок за назвами альбомів."
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "За виконавцем"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr "Сортувати ÑпиÑок за іменами виконавців."
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr "Сортувати ÑпиÑок за іменами файлів."
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr "Сортувати ÑпиÑок за повним шлÑхом."
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "За датою"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr "Сортувати ÑпиÑок за чаÑом оÑтанньої модифікації файлів."
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "За номером доріжки"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr "Сортувати ÑпиÑок за номерами доріжок."
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "Сортувати виділене"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Файл"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "МожливоÑÑ‚Ñ– плаґінів"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ доріжку"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ доріжку"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "Про Audacious"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "Відтворити файл..."
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "Завантажити та відтворити файл"
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "Відтворити за поÑиланнÑм..."
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "Відтворити за обраним шлÑхом"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "МожливоÑÑ‚Ñ– плаґінів"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "ÐалаштуваннÑ"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "Відчинити вікно налаштувань"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "Завершити Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "Ð’Ñтановити початок/кінець повтору"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "ПереÑтати повторювати"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "Перейти до чаÑу"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "Перемкнути Ñтан черги"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "Вмикати/вимикати елемент черги ÑпиÑку відтвореннÑ."
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "Копіювати"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "Вирізати"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "Ð’Ñтавити"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "Завантажити"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "Імпортувати"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "Зберегти"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "Вилучити"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "ПреÑет"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "Відповідний доріжці преÑет"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "Завантажити відповідний доріжці преÑет"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "Відновити типові значеннÑ"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "Ðулі"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "Обнулити рівні еквалайзера"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "З файлу"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "Завантажити преÑет із файлу"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "Із файлу WinAMP EQF"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "Завантажити преÑет із файлу WinAMP EQF"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "ПреÑети WinAMP"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "Імпортувати преÑети WinAMP"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "Зберегти преÑет Ñк відповідний доріжці"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "Зберегти Ñк типові значеннÑ"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "До файлу"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "Зберегти преÑет до файлу"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "До файлу WinAMP EQF"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "Зберегти преÑет до файлу WinAMP EQF"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "Видалити відповідний доріжці преÑет"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr "Пошук в активному ÑпиÑку відтвореннÑ"
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+"Щоб шукати доріжки в ÑпиÑку відтвореннÑ, заповніть одне чи більше полів. "
+"Можна викориÑтовувати літери, цифри, інші знаки, регулÑрні вирази. ÐŸÐ¾Ð»Ñ "
+"нечутливі до регіÑтру."
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "Ðазва: "
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "Ðльбом: "
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "Виконавець: "
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "Ð†Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ: "
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr "ЗнÑти попереднє Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ пошуком"
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr "Ðвтоматично перемикати Ñтан черги знайдених елементів"
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr "Виділити знайдене в новий ÑпиÑок відтвореннÑ"
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr "Редактор ÑпиÑків Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Audacious"
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d із %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "Заархівований жупан Winamp 2.x"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "Ðеархівований жупан Winamp 2.x"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "Ðеможливо Ñтворити теку (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr "Про плаґін sndfile"
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "Про SndStretch"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "Коригувати гучніÑÑ‚ÑŒ"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "Придушувати відлуннÑ"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Темп"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "ВиÑота"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "МаÑштаб"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ SndStretch"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "Виконувати на початку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾Ñ€Ñ–Ð¶ÐºÐ¸:"
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr " "
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "Виконувати наприкінці Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾Ñ€Ñ–Ð¶ÐºÐ¸:"
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr "Виконувати при доÑÑгненні ÐºÑ–Ð½Ñ†Ñ ÑпиÑка відтвореннÑ."
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr "Виконувати при зміні назви доріжки (онлайн-потоки тощо)."
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"ÐаÑтупні змінні Audacious надає Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð² командах\n"
+"(не вÑÑ– можна викориfor the end-of-playlist command):\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>Параметри подавати Ñлід у лапках. Робити інакше "
+"небезпечно Ð´Ð»Ñ ÑиÑтеми.</span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "Команди"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr "Зміна доріжки"
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "Про плаґін значка Ñтану"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+"Плаґін значка в лотку,\n"
+"\n"
+"2005-2007, Giacomo Lozito <james@develia.org>,\n"
+"2010, Michał Lipski <tallica@o2.pl,>\n"
+"\n"
+"розміщує значок Audacious у ÑиÑтемному\n"
+"лотку, наданому віконним менеджером.\n"
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° в лотку"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "Меню за правою кнопкою миші"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "Мале меню Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "Мале меню Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ #2 (+ \"Вийти\")"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "Ð”Ñ–Ñ ÐºÐ¾Ð»Ñ–Ñ‰Ð°Ñ‚ÐºÐ° миші"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "Зміна гучноÑÑ‚Ñ–"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "Зміна поточної доріжки"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "Інші налаштуваннÑ"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "Вимкнути Ñпливне вікно"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "ЗаміÑÑ‚ÑŒ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ñ‚Ð¸ до лотка"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "ПроÑуватиÑÑ ÑпиÑком Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ прокручуванні догори"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+"Плаґін розширеного Ñтерео\n"
+"\n"
+"Ñтворив 1999 року Johan Levin."
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr "Про плаґін розширеного Ñтерео"
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¾Ð³Ð¾ Ñтерео"
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr "Про генератор тону"
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+"Генератор ÑинуÑоїдного тону, Ñтворений Haavard Kvaalen <havardk@xmms.org>\n"
+"і модифікований Daniel J. Peng <danielpeng@bigfoot.com>,\n"
+"\n"
+"можна викориÑтовувати за URL: tone://frequency1;frequency2;frequency3;...\n"
+"(наприклад, tone://2000;2005 Ð´Ð»Ñ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð¾Ð½Ñƒ 2000 Гц й тону 2005 Гц."
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Гц"
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr "Генератор тону: "
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "Про плаґін файлового вводу-виводу"
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "Про плаґін вводу з Ogg Vorbis"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+"Плаґін вводу з Ogg Vorbis Ñтворений Xiph.org Foundation\n"
+"\n"
+"Ðвтор оригіналу:\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"\n"
+"ДопиÑувачі:\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Відвідайте Фонд Xiph.org: http://www.xiph.org/\n"
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr "Про плаґін вводу з Vortex"
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+"Програвач файлів формату Vortex напиÑаний ОлекÑандром Сашновим <sashnov@ngs.ru>\n"
+"на оÑнові джерела оригінального in_vtx.dll, напиÑаного Романом Щербаковим <v_soft@microfor.ru>\n"
+"\n"
+"Музику в форматі VTX можна знайти на http://vtx.microfor.ru/music.htm (вже немає),\n"
+"http://bulba.untergrund.net/ та інших Ñайтах про AY/YM.\n"
+"\n"
+"Імплементацію Ð´Ð»Ñ Audacious напиÑав Pavel Vymetalek <pvymetalek@seznam.cz>"
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr "Декодер Wavpack %s"
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"(c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"ДеÑкий код напиÑав Miles Egan.\n"
+"Відвідайте Ñайт Wavpack: http://www.wavpack.com/\n"
+
+
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..3f30783
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,3423 @@
+# Vietnamese translation for Audacious Plugins
+# Copyright (C) Audacious Translators
+# This file is distributed under the same license as the Audacious Plugins package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Audacious\n"
+"Report-Msgid-Bugs-To: http://jira.atheme.org/browse/AUD\n"
+"POT-Creation-Date: 2011-10-24 16:38-0400\n"
+"PO-Revision-Date: 2011-11-04 08:14+0000\n"
+"Last-Translator: anix <truongan@linuxmail.org>\n"
+"Language-Team: Vietnamese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"Sử dụng libfaad2-%s để giải mã.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr ""
+
+#: src/alarm/interface.c:34
+msgid "About XMMS Alarm"
+msgstr ""
+
+#: src/alarm/interface.c:41
+msgid "XMMS Alarm"
+msgstr ""
+
+#: src/alarm/interface.c:50
+msgid ""
+"An XMMS plugin which can be used\n"
+"to start playing at a certain time.\n"
+"\n"
+"Send all complaints to:\n"
+"Adam Feakin <adamf@snika.uklinux.net>\n"
+"Daniel Stodden <stodden@in.tum.de>\n"
+"\n"
+"http://www.snika.uklinux.net/xmms-alarm/"
+msgstr ""
+
+#: src/alarm/interface.c:65
+msgid "Close"
+msgstr "Äóng"
+
+#: src/alarm/interface.c:95
+msgid "Alarm"
+msgstr ""
+
+#: src/alarm/interface.c:102
+msgid "This is your wakeup call."
+msgstr ""
+
+#: src/alarm/interface.c:117 src/alarm/interface.c:1338
+msgid "OK"
+msgstr "OK"
+
+#: src/alarm/interface.c:151
+msgid "Sorry"
+msgstr "Thật tiếc"
+
+#: src/alarm/interface.c:158
+msgid "Warning"
+msgstr "Cảnh báo"
+
+#: src/alarm/interface.c:167
+msgid ""
+"For safety reasons the \"quiet\" time must be at least 65 seconds longer than the fading time, it must also be more than 10 seconds. This basically means that there is a bug in the code and until I find a way of really fixing it this message will appear :)\n"
+"\n"
+"Your fading settings have NOT been saved\n"
+"\n"
+"--\n"
+"Adam"
+msgstr ""
+
+#: src/alarm/interface.c:183
+msgid "Oh Well"
+msgstr "Tốt lắm"
+
+#: src/alarm/interface.c:339
+msgid "Alarm Settings"
+msgstr ""
+
+#: src/alarm/interface.c:354 src/alarm/interface.c:526
+#: src/alarm/interface.c:898
+msgid "Time"
+msgstr ""
+
+#: src/alarm/interface.c:395
+msgid "hours"
+msgstr "giá»"
+
+#: src/alarm/interface.c:456
+msgid "h"
+msgstr ""
+
+#: src/alarm/interface.c:486
+msgid "minutes"
+msgstr "phút"
+
+#: src/alarm/interface.c:504
+msgid "Quiet after:"
+msgstr ""
+
+#: src/alarm/interface.c:514
+msgid "Alarm at (default):"
+msgstr ""
+
+#: src/alarm/interface.c:534
+msgid "Choose the days for the alarm to come on"
+msgstr "Chá»n ngày cho chuông báo hoạt Ä‘á»™ng"
+
+#: src/alarm/interface.c:562 src/alarm/interface.c:610
+#: src/alarm/interface.c:658 src/alarm/interface.c:706
+#: src/alarm/interface.c:754 src/alarm/interface.c:802
+#: src/alarm/interface.c:850 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
+msgid "Default"
+msgstr "Mặc định"
+
+#: src/alarm/interface.c:888
+msgid "Day"
+msgstr "Ngày"
+
+#: src/alarm/interface.c:908
+msgid "Tuesday"
+msgstr "Thứ ba"
+
+#: src/alarm/interface.c:919
+msgid "Wednesday"
+msgstr "Thứ tư"
+
+#: src/alarm/interface.c:930
+msgid "Thursday"
+msgstr "Thứ năm"
+
+#: src/alarm/interface.c:941
+msgid "Friday"
+msgstr "Thứ sáu"
+
+#: src/alarm/interface.c:952
+msgid "Saturday"
+msgstr "Thứ bảy"
+
+#: src/alarm/interface.c:963
+msgid "Sunday"
+msgstr "Chủ nhật"
+
+#: src/alarm/interface.c:973
+msgid "Monday"
+msgstr "Thứ hai"
+
+#: src/alarm/interface.c:984
+msgid "Days"
+msgstr "Ngày"
+
+#: src/alarm/interface.c:1000
+msgid "Fading"
+msgstr ""
+
+#: src/alarm/interface.c:1037
+msgid "seconds"
+msgstr "giây"
+
+#: src/alarm/interface.c:1045 src/alarm/interface.c:1160
+msgid "Volume"
+msgstr "Âm lượng"
+
+#: src/alarm/interface.c:1071
+msgid "Current"
+msgstr "Hiện tại"
+
+#: src/alarm/interface.c:1079
+msgid "Start at"
+msgstr ""
+
+#: src/alarm/interface.c:1107 src/alarm/interface.c:1151
+msgid "%"
+msgstr "%"
+
+#: src/alarm/interface.c:1123
+msgid "Final"
+msgstr ""
+
+#: src/alarm/interface.c:1176
+msgid "Additional Command"
+msgstr ""
+
+#: src/alarm/interface.c:1202
+msgid "enable"
+msgstr "bật"
+
+#: src/alarm/interface.c:1210
+msgid "Playlist (optional)"
+msgstr "Danh sách (tùy chỉnh)"
+
+#: src/alarm/interface.c:1236
+msgid "Browse..."
+msgstr "Duyệt..."
+
+#: src/alarm/interface.c:1244 src/alarm/interface.c:1408
+msgid "Reminder"
+msgstr ""
+
+#: src/alarm/interface.c:1261
+msgid "Use reminder"
+msgstr ""
+
+#: src/alarm/interface.c:1277 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "Tùy chá»n"
+
+#: src/alarm/interface.c:1285
+msgid "What do these options mean?"
+msgstr "Những tùy chá»n này có nghÄ©a là gì?"
+
+#: src/alarm/interface.c:1313
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+
+#: src/alarm/interface.c:1315 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "Trợ giúp"
+
+#: src/alarm/interface.c:1347 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "Thôi"
+
+#: src/alarm/interface.c:1415
+msgid "Your reminder for today is.."
+msgstr ""
+
+#: src/alarm/interface.c:1440
+msgid "Thankyou"
+msgstr ""
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr ""
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr ""
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr ""
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr ""
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr ""
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr ""
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr ""
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr ""
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr ""
+
+#: src/amidi-plug/amidi-plug.c:335
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr ""
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer ports. The ALSA sequencer interface is very versatile, it can provide ports for audio cards hardware synthesizers (i.e. emu10k1) but also for software synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from devices/programs behind the ALSA ports; in example, MIDI events sent to the hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr ""
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-time software synthesizer based on the SoundFont2 specification (www.fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "Cổng"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "Tên cổng"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr ""
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "Thiết lập nâng cao"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr ""
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "trích xuất lá»i từ tập tin MIDI (nếu có)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr ""
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "Tên tập tin"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "Dung lượng (byte)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr "22050 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr "44100 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr "96000 Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "tùy chá»n"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr "Hz "
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr ""
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr ""
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr "Tên:"
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "Äịnh dạng:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr "BPM:"
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr "BPM (wavg):"
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* không có lá»i bài hát trong tập tin MIDI này *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr ""
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr ""
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr ""
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr ""
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr ""
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:77
+msgid "Playback Start"
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "Hiện OSD khi một bài hát được phát."
+
+#: src/aosd/aosd_trigger.c:82
+msgid "Title Change"
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:83
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:89
+msgid "Volume Change"
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Triggers OSD when volume is changed."
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:94
+msgid "Pause On"
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Triggers OSD when playback is paused."
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:99
+msgid "Pause Off"
+msgstr ""
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Triggers OSD when playback is unpaused."
+msgstr ""
+
+#: src/aosd/aosd_ui.c:180
+msgid "Placement"
+msgstr "Vị trí"
+
+#: src/aosd/aosd_ui.c:219
+msgid "Relative X offset:"
+msgstr "Dịch theo chiá»u ngang:"
+
+#: src/aosd/aosd_ui.c:228
+msgid "Relative Y offset:"
+msgstr "Dịch theo chiá»u dá»c:"
+
+#: src/aosd/aosd_ui.c:237
+msgid "Max OSD width:"
+msgstr "BỠngang tối đa của OSD:"
+
+#: src/aosd/aosd_ui.c:250
+msgid "Multi-Monitor options"
+msgstr "Tùy chá»n nhiá»u màn hình"
+
+#: src/aosd/aosd_ui.c:254
+msgid "Display OSD using:"
+msgstr "Hiện OSD trên:"
+
+#: src/aosd/aosd_ui.c:265
+msgid "all monitors"
+msgstr "tất cả màn hình"
+
+#: src/aosd/aosd_ui.c:268
+#, c-format
+msgid "monitor %i"
+msgstr "màn hình %i"
+
+#: src/aosd/aosd_ui.c:323
+msgid "Timing (ms)"
+msgstr "Thá»i gian (ms)"
+
+#: src/aosd/aosd_ui.c:328
+msgid "Display:"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:333
+msgid "Fade in:"
+msgstr "Tốc độ hiện:"
+
+#: src/aosd/aosd_ui.c:338
+msgid "Fade out:"
+msgstr "Tốc độ ẩn:"
+
+#: src/aosd/aosd_ui.c:419
+msgid "Fonts"
+msgstr "Phông chữ"
+
+#: src/aosd/aosd_ui.c:427
+#, c-format
+msgid "Font %i:"
+msgstr "Phông %i:"
+
+#: src/aosd/aosd_ui.c:444
+msgid "Shadow"
+msgstr "Bóng má»"
+
+#: src/aosd/aosd_ui.c:479
+msgid "Internationalization"
+msgstr "Ngôn ngữ quốc tế"
+
+#: src/aosd/aosd_ui.c:485
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "Không chuyển đổi văn bản sang mã UTF-8 (trong aosd)"
+
+#: src/aosd/aosd_ui.c:503
+msgid "Select Skin File"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:614
+msgid "Render Style"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:630
+msgid "Colors"
+msgstr "Màu sắc"
+
+#: src/aosd/aosd_ui.c:643
+#, c-format
+msgid "Color %i:"
+msgstr "Màu %i:"
+
+#: src/aosd/aosd_ui.c:663
+msgid "Custom Skin"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:669
+msgid "Skin file:"
+msgstr "Tập tin giao diện:"
+
+#: src/aosd/aosd_ui.c:672
+msgid "Browse"
+msgstr "Duyệt"
+
+#: src/aosd/aosd_ui.c:774
+msgid "Enable trigger"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:801
+msgid "Event"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:829
+msgid "Composite manager detected"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:836
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite manager otherwise the OSD won't work properly"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:844
+msgid "Composite manager not required for fake transparency"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:882
+msgid "Transparency"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:888
+msgid "Fake transparency"
+msgstr "Giả trong suốt"
+
+#: src/aosd/aosd_ui.c:890
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "Trong suốt thực (yêu cầu X Composite)"
+
+#: src/aosd/aosd_ui.c:932
+msgid "Composite extension not loaded"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:940
+msgid "Composite extension not available"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:959
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:1040
+msgid "Audacious OSD - configuration"
+msgstr "Audacious OSD - cấu hình"
+
+#: src/aosd/aosd_ui.c:1061
+msgid "Test"
+msgstr "Xem thá»­"
+
+#: src/aosd/aosd_ui.c:1076
+msgid "Position"
+msgstr "Vị trí"
+
+#: src/aosd/aosd_ui.c:1081
+msgid "Animation"
+msgstr "Hiệu ứng"
+
+#: src/aosd/aosd_ui.c:1086
+msgid "Text"
+msgstr "Văn bản"
+
+#: src/aosd/aosd_ui.c:1091
+msgid "Decoration"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:1096
+msgid "Trigger"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "Khác"
+
+#: src/aosd/aosd_ui.c:1138
+msgid "Audacious OSD - about"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+"\n"
+"Audacious OSD "
+
+#: src/aosd/aosd_ui.c:1169
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr ""
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr ""
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr ""
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr ""
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:241
+msgid "About Audio CD Plugin"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:550
+msgid "Audio CD"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:922
+msgid "Drive is empty."
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Unsupported disk type."
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "ÄÆ°á»ng dẫn: "
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "Cổng: "
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "Dùng HTTP thay cho CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr ""
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "Ok"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "Phát đĩa CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "Thêm CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr ""
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr ""
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr ""
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr ""
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr ""
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "Tổng quát"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr ""
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr ""
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "giây"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr ""
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr ""
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr ""
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr ""
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr ""
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr "Hz"
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr "SPC"
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr ""
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr ""
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not"
+" provide length information (i.e. looping tracks)."
+msgstr ""
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr ""
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr ""
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr ""
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr ""
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr ""
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr ""
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the same rate."
+msgstr ""
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr ""
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr ""
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "Ãp dụng"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr ""
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr ""
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr ""
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "Âm lượng: (%)"
+
+#: src/ffaudio/ffaudio-core.c:795
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+
+#: src/ffaudio/ffaudio-core.c:809
+msgid "About FFaudio Plugin"
+msgstr ""
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr ""
+
+#: src/filewriter/filewriter.c:455
+msgid "File Writer Configuration"
+msgstr ""
+
+#: src/filewriter/filewriter.c:467
+msgid "Output file format:"
+msgstr ""
+
+#: src/filewriter/filewriter.c:485
+msgid "Configure"
+msgstr "Cấu hình"
+
+#: src/filewriter/filewriter.c:500
+msgid "Save into original directory"
+msgstr ""
+
+#: src/filewriter/filewriter.c:505
+msgid "Save into custom directory"
+msgstr ""
+
+#: src/filewriter/filewriter.c:515
+msgid "Output file folder:"
+msgstr ""
+
+#: src/filewriter/filewriter.c:519
+msgid "Pick a folder"
+msgstr ""
+
+#: src/filewriter/filewriter.c:538
+msgid "Get filename from:"
+msgstr ""
+
+#: src/filewriter/filewriter.c:541
+msgid "original file tags"
+msgstr ""
+
+#: src/filewriter/filewriter.c:547
+msgid "original filename"
+msgstr "tên gốc của tập tin"
+
+#: src/filewriter/filewriter.c:557
+msgid "Don't strip file name extension"
+msgstr ""
+
+#: src/filewriter/filewriter.c:572
+msgid "Prepend track number to filename"
+msgstr ""
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:771
+msgid "Auto"
+msgstr ""
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr ""
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183
+msgid "Stereo"
+msgstr ""
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183
+msgid "Mono"
+msgstr ""
+
+#: src/filewriter/mp3.c:712
+msgid "MP3 Configuration"
+msgstr "Cấu hình MP3"
+
+#: src/filewriter/mp3.c:735
+msgid "Algorithm Quality:"
+msgstr ""
+
+#: src/filewriter/mp3.c:760
+msgid "Output Samplerate:"
+msgstr ""
+
+#: src/filewriter/mp3.c:788
+msgid "(Hz)"
+msgstr "(Hz)"
+
+#: src/filewriter/mp3.c:795
+msgid "Bitrate / Compression ratio:"
+msgstr ""
+
+#: src/filewriter/mp3.c:819
+msgid "Bitrate (kbps):"
+msgstr ""
+
+#: src/filewriter/mp3.c:852
+msgid "Compression ratio:"
+msgstr ""
+
+#: src/filewriter/mp3.c:876
+msgid "Audio Mode:"
+msgstr ""
+
+#: src/filewriter/mp3.c:901
+msgid "Misc:"
+msgstr ""
+
+#: src/filewriter/mp3.c:912
+msgid "Enforce strict ISO complience"
+msgstr ""
+
+#: src/filewriter/mp3.c:923
+msgid "Error protection"
+msgstr ""
+
+#: src/filewriter/mp3.c:935 src/filewriter/vorbis.c:243
+msgid "Quality"
+msgstr "Chất lượng:"
+
+#: src/filewriter/mp3.c:945
+msgid "Enable VBR/ABR"
+msgstr ""
+
+#: src/filewriter/mp3.c:955
+msgid "Type:"
+msgstr ""
+
+#: src/filewriter/mp3.c:988
+msgid "VBR Options:"
+msgstr ""
+
+#: src/filewriter/mp3.c:1004
+msgid "Minimum bitrate (kbps):"
+msgstr ""
+
+#: src/filewriter/mp3.c:1031
+msgid "Maximum bitrate (kbps):"
+msgstr ""
+
+#: src/filewriter/mp3.c:1054
+msgid "Strictly enforce minimum bitrate"
+msgstr ""
+
+#: src/filewriter/mp3.c:1066
+msgid "ABR Options:"
+msgstr ""
+
+#: src/filewriter/mp3.c:1076
+msgid "Average bitrate (kbps):"
+msgstr ""
+
+#: src/filewriter/mp3.c:1104
+msgid "VBR quality level:"
+msgstr ""
+
+#: src/filewriter/mp3.c:1123
+msgid "Don't write Xing VBR header"
+msgstr ""
+
+#: src/filewriter/mp3.c:1137
+msgid "VBR/ABR"
+msgstr "VBR/ABR"
+
+#: src/filewriter/mp3.c:1147
+msgid "Frame params:"
+msgstr ""
+
+#: src/filewriter/mp3.c:1159
+msgid "Mark as copyright"
+msgstr ""
+
+#: src/filewriter/mp3.c:1170
+msgid "Mark as original"
+msgstr ""
+
+#: src/filewriter/mp3.c:1182
+msgid "ID3 params:"
+msgstr ""
+
+#: src/filewriter/mp3.c:1193
+msgid "Force addition of version 2 tag"
+msgstr ""
+
+#: src/filewriter/mp3.c:1203
+msgid "Only add v1 tag"
+msgstr ""
+
+#: src/filewriter/mp3.c:1210
+msgid "Only add v2 tag"
+msgstr ""
+
+#: src/filewriter/mp3.c:1231
+msgid "Tags"
+msgstr ""
+
+#: src/filewriter/vorbis.c:236
+msgid "Vorbis Encoder Configuration"
+msgstr ""
+
+#: src/filewriter/vorbis.c:256
+msgid "Quality level (0 - 10):"
+msgstr ""
+
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr ""
+
+#: src/flacng/plugin.c:380
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr "Thông tin trình cắm Dùng phím tắt của GNOME"
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+"Gnome Shortcut Plugin\n"
+"Cho phép bạn Ä‘iá»u khiển Audacious bằng phím tắt của Gnome.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+msgid "Open Files"
+msgstr "Mở tập tin"
+
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
+msgid "Add Files"
+msgstr "Thêm tập tin"
+
+#: src/gntui/gntui.c:270
+msgid "Audacious2"
+msgstr "Audacious2"
+
+#: src/gntui/gntui.c:311
+msgid "gnt interface"
+msgstr ""
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr ""
+
+#: src/gtkui/columns.c:36
+msgid "Title"
+msgstr "Tá»±a Ä‘á»"
+
+#: src/gtkui/columns.c:37
+msgid "Artist"
+msgstr "Nghệ sĩ"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "Năm"
+
+#: src/gtkui/columns.c:37
+msgid "Album"
+msgstr "Album"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr ""
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr ""
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "Thá»i lượng"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "ÄÆ°á»ng dẫn"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "Tên tập tin"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr ""
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr ""
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "Chá»n cá»™t"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "Có thể dùng:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "Äang hiện:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr ""
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr ""
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr ""
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr ""
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr ""
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:643
+msgid "Disable"
+msgstr ""
+
+#: src/gtkui/menus.c:130
+msgid "_Open Files ..."
+msgstr "Mở tậ_p tin ..."
+
+#: src/gtkui/menus.c:131
+msgid "Open _URL ..."
+msgstr "Mở _URL ..."
+
+#: src/gtkui/menus.c:132
+msgid "_Add File ..."
+msgstr "Thêm tập ti_n ..."
+
+#: src/gtkui/menus.c:133
+msgid "Add U_RL ..."
+msgstr "Thêm U_RL ..."
+
+#: src/gtkui/menus.c:135
+msgid "A_bout ..."
+msgstr "_Giới thiệu ..."
+
+#: src/gtkui/menus.c:136
+msgid "_Preferences ..."
+msgstr "Tù_y chỉnh ..."
+
+#: src/gtkui/menus.c:137 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "_Thoát"
+
+#: src/gtkui/menus.c:140
+msgid "_Play"
+msgstr "_Phát"
+
+#: src/gtkui/menus.c:141
+msgid "Paus_e"
+msgstr "Tạm _dừng"
+
+#: src/gtkui/menus.c:142
+msgid "_Stop"
+msgstr "_NgÆ°ng"
+
+#: src/gtkui/menus.c:143
+msgid "Pre_vious"
+msgstr "_Bài trước"
+
+#: src/gtkui/menus.c:144
+msgid "_Next"
+msgstr "Tiếp the_o"
+
+#: src/gtkui/menus.c:146
+msgid "_Repeat"
+msgstr "_Lặp lại"
+
+#: src/gtkui/menus.c:147
+msgid "S_huffle"
+msgstr "T_rộn bài"
+
+#: src/gtkui/menus.c:148
+msgid "N_o Playlist Advance"
+msgstr "_Không tự động phát bài kế tiếp"
+
+#: src/gtkui/menus.c:149
+msgid "Stop _After This Song"
+msgstr "Dừng lại sa_u bài này"
+
+#: src/gtkui/menus.c:151 src/gtkui/menus.c:209
+msgid "Song _Info ..."
+msgstr "Thông t_in bài hát ..."
+
+#: src/gtkui/menus.c:152
+msgid "Jump to _Time ..."
+msgstr "_Xác định thá»i gian ..."
+
+#: src/gtkui/menus.c:153
+msgid "_Jump to Song ..."
+msgstr "C_há»n bài hát ..."
+
+#: src/gtkui/menus.c:156
+msgid "By Track _Number"
+msgstr ""
+
+#: src/gtkui/menus.c:157
+msgid "By _Title"
+msgstr ""
+
+#: src/gtkui/menus.c:158
+msgid "By _Artist"
+msgstr ""
+
+#: src/gtkui/menus.c:159
+msgid "By A_lbum"
+msgstr ""
+
+#: src/gtkui/menus.c:160
+msgid "By Release _Date"
+msgstr ""
+
+#: src/gtkui/menus.c:161
+msgid "By _File Path"
+msgstr ""
+
+#: src/gtkui/menus.c:162
+msgid "By _Custom Title"
+msgstr ""
+
+#: src/gtkui/menus.c:164
+msgid "R_everse Order"
+msgstr ""
+
+#: src/gtkui/menus.c:165
+msgid "_Random Order"
+msgstr ""
+
+#: src/gtkui/menus.c:168 src/gtkui/menus.c:211
+msgid "_Refresh"
+msgstr ""
+
+#: src/gtkui/menus.c:170
+msgid "_Sort"
+msgstr ""
+
+#: src/gtkui/menus.c:172
+msgid "_New"
+msgstr ""
+
+#: src/gtkui/menus.c:173 src/gtkui/menus.c:222
+msgid "_Close"
+msgstr ""
+
+#: src/gtkui/menus.c:175
+msgid "_Import ..."
+msgstr ""
+
+#: src/gtkui/menus.c:176
+msgid "_Export ..."
+msgstr ""
+
+#: src/gtkui/menus.c:178
+msgid "_Playlist Manager ..."
+msgstr ""
+
+#: src/gtkui/menus.c:179
+msgid "_Queue Manager ..."
+msgstr ""
+
+#: src/gtkui/menus.c:182
+msgid "Volume _Up"
+msgstr ""
+
+#: src/gtkui/menus.c:183
+msgid "Volume _Down"
+msgstr ""
+
+#: src/gtkui/menus.c:185
+msgid "_Equalizer"
+msgstr ""
+
+#: src/gtkui/menus.c:187
+msgid "E_ffects"
+msgstr ""
+
+#: src/gtkui/menus.c:190
+msgid "_Interface"
+msgstr ""
+
+#: src/gtkui/menus.c:192
+msgid "Show _Menu Bar"
+msgstr ""
+
+#: src/gtkui/menus.c:193
+msgid "Show I_nfo Bar"
+msgstr ""
+
+#: src/gtkui/menus.c:194
+msgid "Show _Status Bar"
+msgstr ""
+
+#: src/gtkui/menus.c:196
+msgid "Show Column _Headers"
+msgstr ""
+
+#: src/gtkui/menus.c:197
+msgid "Choose _Columns ..."
+msgstr ""
+
+#: src/gtkui/menus.c:198
+msgid "Scrol_l on Song Change"
+msgstr ""
+
+#: src/gtkui/menus.c:201
+msgid "_File"
+msgstr "_Tập tin"
+
+#: src/gtkui/menus.c:202
+msgid "_Playback"
+msgstr "Äiá»u _khiển"
+
+#: src/gtkui/menus.c:203
+msgid "P_laylist"
+msgstr "_Danh sách"
+
+#: src/gtkui/menus.c:204 src/gtkui/menus.c:218
+msgid "_Services"
+msgstr "Dịch _vụ"
+
+#: src/gtkui/menus.c:205
+msgid "_Output"
+msgstr "Â_m thanh"
+
+#: src/gtkui/menus.c:206
+msgid "_View"
+msgstr "_Hiển thị"
+
+#: src/gtkui/menus.c:210
+msgid "_Queue/Unqueue"
+msgstr ""
+
+#: src/gtkui/menus.c:213
+msgid "Cu_t"
+msgstr ""
+
+#: src/gtkui/menus.c:214
+msgid "_Copy"
+msgstr ""
+
+#: src/gtkui/menus.c:215
+msgid "_Paste"
+msgstr ""
+
+#: src/gtkui/menus.c:216
+msgid "Select _All"
+msgstr ""
+
+#: src/gtkui/menus.c:221
+msgid "_Rename"
+msgstr ""
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "Giao diện GTK"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:302
+#, c-format
+msgid "%s - Audacious"
+msgstr ""
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr ""
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:304 src/skins/ui_main.c:1499
+msgid "Audacious"
+msgstr "Audacious"
+
+#: src/gtkui/ui_gtk.c:211 src/skins/plugin.c:183
+msgid "Error"
+msgstr "Lá»—i"
+
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:459
+msgid "mono"
+msgstr ""
+
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:458
+msgid "stereo"
+msgstr ""
+
+#: src/gtkui/ui_statusbar.c:106
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d kênh"
+
+#: src/gtkui/ui_statusbar.c:121
+#, c-format
+msgid "%d kbps"
+msgstr "%d kbps"
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr ""
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "Phát"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "Tạm dừng/Tiếp tục"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "NgÆ°ng"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr ""
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "Xả tới 5 giây"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "Lùi lại 5 giây"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "Tắt âm"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "Tăng âm lượng"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "Giảm âm lượng"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to File"
+msgstr "Chá»n tập tin"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr ""
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr ""
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr ""
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr ""
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr ""
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr ""
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "Cấu hình trình cắm phím tắt chung"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "Phím tắt:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>Hành động:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr ""
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "Thông tin trình cắm phím tắt chung"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr ""
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr ""
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr ""
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr ""
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr ""
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr ""
+
+#: src/jack/jack.c:422
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+
+#: src/jack/jack.c:427
+msgid "About JACK Output Plugin 0.17"
+msgstr ""
+
+#: src/ladspa/plugin.c:414
+msgid "About LADSPA Host"
+msgstr ""
+
+#: src/ladspa/plugin.c:515
+#, c-format
+msgid "%s Settings"
+msgstr ""
+
+#: src/ladspa/plugin.c:583
+msgid "LADSPA Host Settings"
+msgstr ""
+
+#: src/ladspa/plugin.c:592
+msgid "Module paths:"
+msgstr ""
+
+#: src/ladspa/plugin.c:597
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+
+#: src/ladspa/plugin.c:613
+msgid "Available plugins:"
+msgstr ""
+
+#: src/ladspa/plugin.c:625
+msgid "Enable"
+msgstr ""
+
+#: src/ladspa/plugin.c:631
+msgid "Enabled plugins:"
+msgstr ""
+
+#: src/ladspa/plugin.c:646
+msgid "Settings"
+msgstr ""
+
+#: src/lyricwiki/lyricwiki.c:227
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"Äang tìm lá»i bài hát..."
+
+#: src/lyricwiki/lyricwiki.c:250
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"Äang kết nối đến lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:338
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"Không tìm thấy lá»i bài hát."
+
+#: src/metronom/metronom.c:85
+msgid "About Metronom"
+msgstr ""
+
+#: src/metronom/metronom.c:86
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+
+#: src/metronom/metronom.c:143
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr ""
+
+#: src/metronom/metronom.c:145
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr ""
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr ""
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr ""
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr ""
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr ""
+
+#: src/mpg123/mpg123.c:183
+msgid "Surround"
+msgstr ""
+
+#: src/mtp_up/mtp.c:298
+msgid "Upload in progress..."
+msgstr "Äang tải lên..."
+
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
+msgstr ""
+
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
+msgstr ""
+
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Stopped"
+msgstr "Äã dừng"
+
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Audacious is not playing."
+msgstr ""
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr ""
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr ""
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr ""
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr ""
+
+#: src/oss4/configure.c:76
+msgid "1. Default device"
+msgstr "1. Thiết bị măc định"
+
+#: src/oss4/configure.c:132
+msgid "OSS4 Output Plugin Preferences"
+msgstr ""
+
+#: src/oss4/configure.c:144 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "Thiết bị âm thanh:"
+
+#: src/oss4/configure.c:172 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "Dùng thiết bị thay thế:"
+
+#: src/oss4/configure.c:187
+msgid "Save volume between sessions"
+msgstr ""
+
+#: src/oss4/configure.c:191
+msgid "Enable format conversions made by the OSS software."
+msgstr ""
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr ""
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr ""
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "Mặc định (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr ""
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "Thiết bị"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr ""
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr ""
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr ""
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr ""
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr ""
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr ""
+
+#: src/OSS/OSS.c:40
+msgid "About OSS Driver"
+msgstr ""
+
+#: src/pulse_audio/pulse_audio.c:687
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr ""
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr ""
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr ""
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr ""
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr ""
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr ""
+
+#: src/scrobbler/configure.c:122 src/scrobbler/configure.c:197
+msgid "Change password"
+msgstr "Äổi mật khẩu"
+
+#: src/scrobbler/configure.c:143
+msgid "<b>Services</b>"
+msgstr "<b>Dịch vụ</b>"
+
+#: src/scrobbler/configure.c:165
+msgid "Username:"
+msgstr "Tên ngÆ°á»i dùng:"
+
+#: src/scrobbler/configure.c:171
+msgid "Password:"
+msgstr "Mật khẩu:"
+
+#: src/scrobbler/configure.c:179
+msgid "Scrobbler URL:"
+msgstr ""
+
+#: src/scrobbler/configure.c:211
+msgid "<b>Last.FM</b>"
+msgstr "<b>Last.FM</b>"
+
+#: src/scrobbler/configure.c:238
+msgid "Scrobbler"
+msgstr "Scrobbler"
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian.com>\n"
+msgstr ""
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr ""
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr ""
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr ""
+
+#: src/skins/plugin.c:165
+msgid "About Skinned GUI"
+msgstr ""
+
+#: src/skins/plugin.c:166
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr ""
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr ""
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr ""
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr ""
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr ""
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr ""
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr ""
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr ""
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "Tùy chỉnh giao diện"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr "31 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr "63 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr "125 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr "250 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr "500 Hz"
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr "1 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr "2 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr "4 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr "8 kHz"
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr "16 kHz"
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:896
+msgid "Presets"
+msgstr ""
+
+#: src/skins/ui_main.c:443
+msgid "kbps"
+msgstr "kbps"
+
+#: src/skins/ui_main.c:451
+msgid "kHz"
+msgstr "kHz"
+
+#: src/skins/ui_main.c:458
+msgid "surround"
+msgstr ""
+
+#: src/skins/ui_main.c:806
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr ""
+
+#: src/skins/ui_main.c:827
+#, c-format
+msgid "Volume: %d%%"
+msgstr ""
+
+#: src/skins/ui_main.c:850
+#, c-format
+msgid "Balance: %d%% left"
+msgstr ""
+
+#: src/skins/ui_main.c:852
+msgid "Balance: center"
+msgstr ""
+
+#: src/skins/ui_main.c:854
+#, c-format
+msgid "Balance: %d%% right"
+msgstr ""
+
+#: src/skins/ui_main.c:980
+msgid "Options Menu"
+msgstr ""
+
+#: src/skins/ui_main.c:984
+msgid "Disable 'Always On Top'"
+msgstr ""
+
+#: src/skins/ui_main.c:986
+msgid "Enable 'Always On Top'"
+msgstr ""
+
+#: src/skins/ui_main.c:989
+msgid "File Info Box"
+msgstr ""
+
+#: src/skins/ui_main.c:994
+msgid "Visualization Menu"
+msgstr ""
+
+#: src/skins/ui_main.c:1648
+msgid "Single mode."
+msgstr ""
+
+#: src/skins/ui_main.c:1650
+msgid "Playlist mode."
+msgstr ""
+
+#: src/skins/ui_main.c:1672
+msgid "Stopping after song."
+msgstr ""
+
+#: src/skins/ui_main.c:1674
+msgid "Not stopping after song."
+msgstr ""
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr ""
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr ""
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr ""
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "Lặp lại"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "Trộn bài"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr ""
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr ""
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr ""
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr ""
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr ""
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr ""
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr ""
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr ""
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr ""
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr ""
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr ""
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr ""
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "Tắt"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "Bình thÆ°á»ng"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr ""
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr ""
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr ""
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr ""
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr ""
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr ""
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr ""
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr ""
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "Mượt"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "Rất chậm"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "Chậm"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "Vừa phải"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "Nhanh"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "Rất nhanh"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr ""
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr ""
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "Tạm dừng"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr ""
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr ""
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr ""
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr ""
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr ""
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr ""
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr ""
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr ""
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr ""
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr ""
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "Danh sách"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr ""
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr ""
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr ""
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "Xóa danh sách"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "Nhập danh sách"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "Nạp má»™t tập tin danh sách vào trong danh sách đã chá»n."
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "Xuất danh sách"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr ""
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr ""
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr ""
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "Hiển thị"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "Giao diện"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "Tùy chỉnh giao diện ..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "Thêm địa chỉ Internet..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "Thêm tập tin..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "Thêm tập tin vào danh sách."
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "Tìm và lá»±a chá»n"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr ""
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "Chá»n hết"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr ""
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "Loại bỠhết"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr ""
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr ""
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr ""
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "Theo tá»±a Ä‘á»"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr ""
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "Theo tên tập tin"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr ""
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "Theo Ä‘Æ°á»ng dẫn + Tên"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr ""
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr ""
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr ""
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr ""
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "Äảo danh sách"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr "Äảo ngược danh sách"
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "Sắp xếp danh sách"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr ""
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "Theo album"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr ""
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "Theo nghệ sĩ"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr ""
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr ""
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr ""
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "Theo ngày"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr ""
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr ""
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr ""
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr ""
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "Tập tin"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr ""
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr ""
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr ""
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr ""
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "Phát tập tin"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr ""
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr ""
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr ""
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr ""
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "Tùy chỉnh"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr ""
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr ""
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr ""
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to Playlist Start"
+msgstr ""
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Time"
+msgstr ""
+
+#: src/skins/ui_manager.c:424
+msgid "Queue Toggle"
+msgstr ""
+
+#: src/skins/ui_manager.c:425
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+
+#: src/skins/ui_manager.c:428
+msgid "Copy"
+msgstr "Chép"
+
+#: src/skins/ui_manager.c:430
+msgid "Cut"
+msgstr "Cắt"
+
+#: src/skins/ui_manager.c:432
+msgid "Paste"
+msgstr "Dán"
+
+#: src/skins/ui_manager.c:439
+msgid "Load"
+msgstr "Nạp"
+
+#: src/skins/ui_manager.c:440
+msgid "Import"
+msgstr "Nhập"
+
+#: src/skins/ui_manager.c:441
+msgid "Save"
+msgstr "LÆ°u"
+
+#: src/skins/ui_manager.c:442
+msgid "Delete"
+msgstr "Xóa"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Preset"
+msgstr "Thiết lập"
+
+#: src/skins/ui_manager.c:445
+msgid "Load preset"
+msgstr "Nạp thiết lập"
+
+#: src/skins/ui_manager.c:447 src/skins/ui_manager.c:468
+#: src/skins/ui_manager.c:483
+msgid "Auto-load preset"
+msgstr "Thiết lập tự nạp"
+
+#: src/skins/ui_manager.c:448
+msgid "Load auto-load preset"
+msgstr "Nạp thiết lập tự nạp"
+
+#: src/skins/ui_manager.c:451
+msgid "Load default preset into equalizer"
+msgstr "Nạp thiết lập mặc định cho bộ cân chỉnh âm"
+
+#: src/skins/ui_manager.c:453
+msgid "Zero"
+msgstr "Không"
+
+#: src/skins/ui_manager.c:454
+msgid "Set equalizer preset levels to zero"
+msgstr "Äặt các mức thiết lập của bá»™ cân chỉnh âm vá» không"
+
+#: src/skins/ui_manager.c:456
+msgid "From file"
+msgstr "Từ tập tin"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from file"
+msgstr "Nạp thiết lập từ tập tin"
+
+#: src/skins/ui_manager.c:459
+msgid "From WinAMP EQF file"
+msgstr "Từ tập tin EQF của WinAMP"
+
+#: src/skins/ui_manager.c:460
+msgid "Load preset from WinAMP EQF file"
+msgstr "Nạp thiết lập từ tập tin EQF của WinAMP"
+
+#: src/skins/ui_manager.c:462
+msgid "WinAMP Presets"
+msgstr "Thiết lập WinAMP"
+
+#: src/skins/ui_manager.c:463
+msgid "Import WinAMP presets"
+msgstr "Nhập thiết lập WinAMP"
+
+#: src/skins/ui_manager.c:466
+msgid "Save preset"
+msgstr "Lưu thiết lập"
+
+#: src/skins/ui_manager.c:469
+msgid "Save auto-load preset"
+msgstr "Lưu thiết lập tự nạp"
+
+#: src/skins/ui_manager.c:472
+msgid "Save default preset"
+msgstr "Lưu thiết lập mặc định"
+
+#: src/skins/ui_manager.c:474
+msgid "To file"
+msgstr "Vào tập tin"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to file"
+msgstr "Lưu thiết lập vào tập tin"
+
+#: src/skins/ui_manager.c:477
+msgid "To WinAMP EQF file"
+msgstr "Vào tập tin EQF của WinAMP"
+
+#: src/skins/ui_manager.c:478
+msgid "Save preset to WinAMP EQF file"
+msgstr "Lưu thiết lập vào tập tin EQF của WinAMP"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete preset"
+msgstr "Xóa thiết lập"
+
+#: src/skins/ui_manager.c:484
+msgid "Delete auto-load preset"
+msgstr "Xóa thiết lập tự nạp"
+
+#: src/skins/ui_playlist.c:244
+msgid "Search entries in active playlist"
+msgstr "Tìm trong danh sách đang được kích hoạt"
+
+#: src/skins/ui_playlist.c:252
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular"
+" expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "Tá»±a Ä‘á»:"
+
+#: src/skins/ui_playlist.c:267
+msgid "Album: "
+msgstr "Album: "
+
+#: src/skins/ui_playlist.c:274
+msgid "Artist: "
+msgstr "Nghệ sĩ:"
+
+#: src/skins/ui_playlist.c:281
+msgid "Filename: "
+msgstr "Tên tập tin:"
+
+#: src/skins/ui_playlist.c:289
+msgid "Clear previous selection before searching"
+msgstr ""
+
+#: src/skins/ui_playlist.c:292
+msgid "Automatically toggle queue for matching entries"
+msgstr ""
+
+#: src/skins/ui_playlist.c:295
+msgid "Create a new playlist with matching entries"
+msgstr ""
+
+#: src/skins/ui_playlist.c:762
+msgid "Audacious Playlist Editor"
+msgstr ""
+
+#: src/skins/ui_playlist.c:809
+#, c-format
+msgid "%s (%d of %d)"
+msgstr "%s (%d trong số %d)"
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr ""
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr ""
+
+#: src/skins/util.c:773
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr ""
+
+#: src/sndfile/plugin.c:454
+msgid "About sndfile plugin"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "Tốc độ"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr ""
+
+#: src/song_change/song_change.c:447
+msgid "Command to run when Audacious starts a new song."
+msgstr ""
+
+#: src/song_change/song_change.c:449 src/song_change/song_change.c:455
+#: src/song_change/song_change.c:461 src/song_change/song_change.c:467
+msgid "Command:"
+msgstr ""
+
+#: src/song_change/song_change.c:453
+msgid "Command to run toward the end of a song."
+msgstr ""
+
+#: src/song_change/song_change.c:459
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr ""
+
+#: src/song_change/song_change.c:465
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr ""
+
+#: src/song_change/song_change.c:471
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+
+#: src/song_change/song_change.c:498
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+
+#: src/song_change/song_change.c:509
+msgid "Commands"
+msgstr "Lệnh"
+
+#: src/song_change/song_change.c:539
+msgid "Song Change"
+msgstr "Song Change"
+
+#: src/statusicon/statusicon.c:378
+msgid "About Status Icon Plugin"
+msgstr ""
+
+#: src/statusicon/statusicon.c:379
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+
+#: src/statusicon/statusicon.c:447
+msgid "Status Icon Plugin - Preferences"
+msgstr ""
+
+#: src/statusicon/statusicon.c:457
+msgid "Right-Click Menu"
+msgstr "Trình đơn chuột phải"
+
+#: src/statusicon/statusicon.c:462
+msgid "Small playback menu #1"
+msgstr ""
+
+#: src/statusicon/statusicon.c:465
+msgid "Small playback menu #2"
+msgstr ""
+
+#: src/statusicon/statusicon.c:481
+msgid "Mouse Scroll Action"
+msgstr ""
+
+#: src/statusicon/statusicon.c:485
+msgid "Change volume"
+msgstr "Thay đổi âm lượng"
+
+#: src/statusicon/statusicon.c:487
+msgid "Change playing song"
+msgstr ""
+
+#: src/statusicon/statusicon.c:500
+msgid "Other settings"
+msgstr "Thiết lập khác"
+
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr ""
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr ""
+
+#: src/streambrowser/gui/streambrowser_win.c:78
+msgid "Search:"
+msgstr "Tìm:"
+
+#: src/streambrowser/gui/streambrowser_win.c:97
+#: src/streambrowser/gui/streambrowser_win.c:372
+msgid "Add Bookmark"
+msgstr ""
+
+#: src/streambrowser/gui/streambrowser_win.c:324
+msgid "Stream name"
+msgstr ""
+
+#: src/streambrowser/gui/streambrowser_win.c:331
+msgid "Now playing"
+msgstr ""
+
+#: src/streambrowser/gui/streambrowser_win.c:369
+msgid "Remove Bookmark"
+msgstr ""
+
+#: src/streambrowser/streambrowser.c:330
+msgid "About Stream Browser"
+msgstr ""
+
+#: src/streambrowser/streambrowser.c:331
+msgid ""
+"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n"
+"\n"
+"This is a simple stream browser that includes the most popular streaming directories.\n"
+"Many thanks to the Streamtuner developers <http://www.nongnu.org/streamtuner>,\n"
+"\tand of course to the whole Audacious community.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me, again.\n"
+"\n"
+"This was a Google Summer of Code 2008 project."
+msgstr ""
+
+#: src/tonegen/tonegen.c:48
+msgid "About Tone Generator"
+msgstr ""
+
+#: src/tonegen/tonegen.c:50
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+
+#: src/tonegen/tonegen.c:100
+#, c-format
+msgid "%s %.1f Hz"
+msgstr "%s %.1f Hz"
+
+#: src/tonegen/tonegen.c:100
+msgid "Tone Generator: "
+msgstr ""
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr ""
+
+#: src/vorbis/vorbis.c:572
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr ""
+
+#: src/vorbis/vorbis.c:577
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr ""
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor.ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr ""
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Một phần mã nguồn trình cắm do Miles Egan viết\n"
+"Xem trang Wavpack tại http://www.wavpack.com/\n"
+
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 4aee208..8a8507d 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,18 +6,19 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Audacious-plugins 2.4\n"
+"Project-Id-Version: Audacious-plugins\n"
"Report-Msgid-Bugs-To: http://jira.atheme.org/\n"
-"POT-Creation-Date: 2010-08-03 17:55-0400\n"
-"PO-Revision-Date: 2010-07-18 01:47+0800\n"
+"POT-Creation-Date: 2011-10-10 13:39-0400\n"
+"PO-Revision-Date: 2011-10-16 18:53+0800\n"
"Last-Translator: Chasye <chasye@gmail.com>\n"
"Language-Team: Chinese (simplified)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: src/aac/libmp4.c:291
+#: src/aac/libmp4.c:256
#, c-format
msgid ""
"Using libfaad2-%s for decoding.\n"
@@ -26,227 +27,21 @@ msgid ""
msgstr ""
"正在使用libfaad2-%s进行解ç ã€‚\n"
"FAAD2 AAC/HE-AAC/HE-AACv2/DRM解ç å™¨ (c) Nero AG, www.nero.com\n"
-"版æƒæ‰€æœ‰ (c) 2005-2006 Audacious团队"
+"版æƒæ‰€æœ‰ (c) 2005-2006 Audaciouså°ç»„"
-#: src/aac/libmp4.c:296
+#: src/aac/libmp4.c:261
msgid "About MP4 AAC decoder plugin"
msgstr "关于MP4 ACC解ç æ’件"
-#: src/adplug/adplug-xmms.cc:153
-msgid "About "
-msgstr "关于"
-
-#: src/adplug/adplug-xmms.cc:157
-msgid ""
-"\n"
-"Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
-"\n"
-"This plugin is released under the terms and conditions of the GNU LGPL.\n"
-"See http://www.gnu.org/licenses/lgpl.html for details.\n"
-"\n"
-"This plugin uses the AdPlug library, which is copyright (C) Simon Peter, et "
-"al.\n"
-"Linked AdPlug library version: "
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:234
-msgid "AdPlug :: Configuration"
-msgstr "AdPlug :: 设置"
-
-#: src/adplug/adplug-xmms.cc:243 src/adplug/adplug-xmms.cc:504
-#: src/cdaudio-ng/configure.c:258 src/crystalizer/crystalizer.c:127
-#: src/echo_plugin/gui.c:122 src/jack/configure.c:146 src/null/null.c:109
-#: src/stereo_plugin/stereo.c:123 src/sun/configure.c:557
-msgid "Ok"
-msgstr "确定"
-
-#: src/adplug/adplug-xmms.cc:253 src/alarm/interface.c:1398
-#: src/cdaudio-ng/configure.c:263 src/crystalizer/crystalizer.c:136
-#: src/echo_plugin/gui.c:130 src/jack/configure.c:153
-#: src/modplug/gui/interface.cxx:715 src/null/null.c:110
-#: src/stereo_plugin/stereo.c:132 src/sun/configure.c:565
-msgid "Cancel"
-msgstr "å–消"
-
-#: src/adplug/adplug-xmms.cc:269 src/console/configure.c:154
-#: src/modplug/gui/interface.cxx:629 src/modplug/gui/interface.cxx:888
-msgid "General"
-msgstr "常规"
-
-#: src/adplug/adplug-xmms.cc:281
-msgid "Sound quality"
-msgstr "音质"
-
-#: src/adplug/adplug-xmms.cc:286 src/modplug/gui/interface.cxx:188
-msgid "Resolution"
-msgstr "分辨率"
-
-#: src/adplug/adplug-xmms.cc:288
-msgid "8bit"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:293
-msgid "16bit"
-msgstr ""
-
-#: src/adplug/adplug-xmms.cc:301 src/modplug/gui/interface.cxx:219
-msgid "Channels"
-msgstr "声é“"
-
-#: src/adplug/adplug-xmms.cc:303 src/filewriter/mp3.c:934
-#: src/mpg123/mpg123.c:174 src/sid/xs_interface.c:301
-msgid "Mono"
-msgstr "å•å£°é“"
-
-#: src/adplug/adplug-xmms.cc:308 src/filewriter/mp3.c:929
-#: src/modplug/gui/interface.cxx:205 src/mpg123/mpg123.c:174
-#: src/sid/xs_interface.c:308
-msgid "Stereo"
-msgstr "立体音"
-
-#: src/adplug/adplug-xmms.cc:312
-msgid ""
-"Setting stereo is not recommended, unless you need to. This won't add any "
-"stereo effects to the sound - OPL2 is just mono - but eats up more CPU power!"
-msgstr ""
-"设置为立体音是ä¸æŽ¨èçš„åšæ³•ï¼Œé™¤éžä½ çŸ¥é“自己在åšä»€ä¹ˆã€‚此选项ä¸ä¼šå¸¦æ¥ä»»ä½•ç«‹ä½“音"
-"效果(OPL2åªèƒ½æ˜¯å•å£°é“的),相ååªä¼šå ç”¨æ›´å¤šçš„CPU!"
-
-#: src/adplug/adplug-xmms.cc:320
-msgid "Frequency"
-msgstr "频率"
-
-#: src/adplug/adplug-xmms.cc:356 src/adplug/adplug-xmms.cc:560
-#: src/console/configure.c:156 src/gtkui/ui_manager.c:64
-#: src/skins/ui_manager.c:165
-msgid "Playback"
-msgstr "回放"
-
-#: src/adplug/adplug-xmms.cc:360
-msgid "Detect songend"
-msgstr "检测歌曲结尾"
-
-#: src/adplug/adplug-xmms.cc:364
-msgid ""
-"If enabled, XMMS will detect a song's ending, stop it and advance in the "
-"playlist. If disabled, XMMS won't take notice of a song's ending and loop it "
-"all over again and again."
-msgstr ""
-"如果å¯ç”¨ï¼ŒXMMSå°†å°è¯•æµ‹è¯•æ­Œæ›²çš„结尾,并在结æŸæ—¶ï¼Œè‡ªåŠ¨æ’­æ”¾åˆ—表中的下一首歌"
-"曲。\n"
-"如果ç¦ç”¨ï¼ŒXMMS将无法得知歌曲是å¦åˆ°è¾¾ç»“尾而ä¸æ–­é‡å¤æ’­æ”¾åŒä¸€é¦–歌曲。"
-
-#: src/adplug/adplug-xmms.cc:375
-msgid "Formats"
-msgstr "æ ¼å¼"
-
-#: src/adplug/adplug-xmms.cc:382
-msgid "Format selection"
-msgstr "æ ¼å¼é€‰é¡¹"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Format"
-msgstr "æ ¼å¼"
-
-#: src/adplug/adplug-xmms.cc:385
-msgid "Extension"
-msgstr "åŽç¼€"
-
-#: src/adplug/adplug-xmms.cc:425
-msgid ""
-"Selected file types will be recognized and played back by this plugin. "
-"Deselected types will be ignored to make room for other plugins to play "
-"these files."
-msgstr ""
-"被选中文件类型会被识别并被此æ’件播放。\n"
-"未选中的,则会被忽略并由其它æ’件播放"
-
-#: src/adplug/adplug-xmms.cc:511
-msgid "AdPlug :: File Info"
-msgstr "AdPlug :: 文件信æ¯"
-
-#: src/adplug/adplug-xmms.cc:533 src/amidi-plug/i_configure-fluidsynth.c:348
-msgid "Filename"
-msgstr "文件å"
-
-#: src/adplug/adplug-xmms.cc:537 src/skins/ui_playlist.c:390
-msgid "Title: "
-msgstr "标题:"
-
-#: src/adplug/adplug-xmms.cc:538
-msgid "Author: "
-msgstr "作者:"
-
-#: src/adplug/adplug-xmms.cc:539
-msgid "File Type: "
-msgstr "文件类型:"
-
-#: src/adplug/adplug-xmms.cc:540
-msgid "Subsongs: "
-msgstr "å­æ­Œæ›²ï¼š"
-
-#: src/adplug/adplug-xmms.cc:541
-msgid "Instruments: "
-msgstr "ä¹å™¨ï¼š"
-
-#: src/adplug/adplug-xmms.cc:546
-msgid "Orders: "
-msgstr "顺åºï¼š"
-
-#: src/adplug/adplug-xmms.cc:547
-msgid "Patterns: "
-msgstr "模å¼ï¼š"
-
-#: src/adplug/adplug-xmms.cc:551
-msgid "Song"
-msgstr "歌曲"
-
-#: src/adplug/adplug-xmms.cc:577
-msgid "Instrument name"
-msgstr "ä¹å™¨å"
-
-#: src/adplug/adplug-xmms.cc:619
-msgid "Song message"
-msgstr "歌曲信æ¯"
-
-#: src/adplug/adplug-xmms.cc:641
-msgid "Subsong selection"
-msgstr "å­æ­Œæ›²é€‰é¡¹"
-
-#: src/adplug/adplug-xmms.cc:707
-msgid "Order: "
-msgstr "顺åºï¼š"
-
-#: src/adplug/adplug-xmms.cc:708
-msgid "Pattern: "
-msgstr "模å¼ï¼š"
-
-#: src/adplug/adplug-xmms.cc:710
-msgid "Row: "
-msgstr "行:"
-
-#: src/adplug/adplug-xmms.cc:711
-msgid "Speed: "
-msgstr "速度:"
-
-#: src/adplug/adplug-xmms.cc:712
-msgid "Timer: "
-msgstr "计时:"
-
-#: src/adplug/adplug-xmms.cc:713 src/console/configure.c:234
-#: src/sid/xs_interface.c:354
-msgid "Hz"
-msgstr ""
-
-#: src/alarm/interface.c:34
+#: src/alarm/interface.c:33
msgid "About XMMS Alarm"
msgstr "关于XMMS闹钟"
-#: src/alarm/interface.c:47
+#: src/alarm/interface.c:40
msgid "XMMS Alarm"
msgstr "XMMS闹钟"
-#: src/alarm/interface.c:56
+#: src/alarm/interface.c:49
msgid ""
"An XMMS plugin which can be used\n"
"to start playing at a certain time.\n"
@@ -259,44 +54,37 @@ msgid ""
msgstr ""
"用于在设定时间å¯åŠ¨æ’­æ”¾çš„XMMSæ’件\n"
"\n"
-"有问题,请找:\n"
+"问题å馈:\n"
"Adam Feakin <adamf@snika.uklinux.net>\n"
"Daniel Stodden <stodden@in.tum.de>\n"
"\n"
"http://www.snika.uklinux.net/xmms-alarm/"
-#: src/alarm/interface.c:71 src/bluetooth/scan_gui.c:149 src/lirc/about.c:115
-#: src/modplug/gui/interface.cxx:972 src/sid/xs_about.c:214
-#: src/sid/xs_interface.c:1825
+#: src/alarm/interface.c:64
msgid "Close"
msgstr "关闭"
-#: src/alarm/interface.c:101
+#: src/alarm/interface.c:94
msgid "Alarm"
msgstr "闹钟"
-#: src/alarm/interface.c:109
+#: src/alarm/interface.c:101
msgid "This is your wakeup call."
-msgstr "此起床闹钟"
+msgstr "此为起床闹钟"
-#: src/alarm/interface.c:124 src/alarm/interface.c:1389
-#: src/modplug/gui/interface.cxx:703 src/sid/xs_config.c:322
+#: src/alarm/interface.c:116 src/alarm/interface.c:1337
msgid "OK"
msgstr "确定"
-#: src/alarm/interface.c:152
-msgid "Select Playlist"
-msgstr "选择播放列表"
-
-#: src/alarm/interface.c:196
+#: src/alarm/interface.c:150
msgid "Sorry"
msgstr "抱歉"
-#: src/alarm/interface.c:204
+#: src/alarm/interface.c:157
msgid "Warning"
msgstr "警告"
-#: src/alarm/interface.c:213
+#: src/alarm/interface.c:166
msgid ""
"For safety reasons the \"quiet\" time must be at least 65 seconds longer "
"than the fading time, it must also be more than 10 seconds. This basically "
@@ -308,155 +96,156 @@ msgid ""
"--\n"
"Adam"
msgstr ""
+"鉴于安全ç†ç”±ï¼Œ\"é™éŸ³\"时间至少è¦æ¯”æ¸é€€æ—¶é—´é•¿65秒,其本身亦至少大于10秒。\n"
+"这基本上是代ç çš„问题,åŒæ—¶åœ¨æˆ‘找到解决方法å‰æ­¤ä¿¡æ¯è¿˜ä¼šå‡ºçŽ°çš„ :)\n"
+"\n"
+"ä½ çš„æ¸é€€è®¾ç½®æœªä¿å­˜\n"
+"\n"
+"--\n"
+"Adam"
-#: src/alarm/interface.c:229
+#: src/alarm/interface.c:182
msgid "Oh Well"
msgstr "ä¸é”™å˜›"
-#: src/alarm/interface.c:388
+#: src/alarm/interface.c:338
msgid "Alarm Settings"
msgstr "闹钟设置"
-#: src/alarm/interface.c:404 src/alarm/interface.c:576
-#: src/alarm/interface.c:948
+#: src/alarm/interface.c:353 src/alarm/interface.c:525
+#: src/alarm/interface.c:897
msgid "Time"
msgstr "时间"
-#: src/alarm/interface.c:445
+#: src/alarm/interface.c:394
msgid "hours"
msgstr "å°æ—¶"
-#: src/alarm/interface.c:506
+#: src/alarm/interface.c:455
msgid "h"
msgstr "点"
-#: src/alarm/interface.c:536
+#: src/alarm/interface.c:485
msgid "minutes"
msgstr "分"
-#: src/alarm/interface.c:554
+#: src/alarm/interface.c:503
msgid "Quiet after:"
msgstr "é™éŸ³æ—¶é—´ï¼š"
-#: src/alarm/interface.c:564
+#: src/alarm/interface.c:513
msgid "Alarm at (default):"
msgstr "å“闹钟(默认):"
-#: src/alarm/interface.c:584
+#: src/alarm/interface.c:533
msgid "Choose the days for the alarm to come on"
msgstr "选择å“闹钟的日期"
-#: src/alarm/interface.c:612 src/alarm/interface.c:660
-#: src/alarm/interface.c:708 src/alarm/interface.c:756
-#: src/alarm/interface.c:804 src/alarm/interface.c:852
-#: src/alarm/interface.c:900 src/OSS/configure.c:166
-#: src/skins/ui_manager.c:439 src/skins/ui_manager.c:460
+#: src/alarm/interface.c:561 src/alarm/interface.c:609
+#: src/alarm/interface.c:657 src/alarm/interface.c:705
+#: src/alarm/interface.c:753 src/alarm/interface.c:801
+#: src/alarm/interface.c:849 src/OSS/configure.c:153
+#: src/skins/ui_manager.c:450 src/skins/ui_manager.c:471
msgid "Default"
msgstr "默认"
-#: src/alarm/interface.c:938
+#: src/alarm/interface.c:887
msgid "Day"
msgstr "日期"
-#: src/alarm/interface.c:958
+#: src/alarm/interface.c:907
msgid "Tuesday"
msgstr "週二"
-#: src/alarm/interface.c:969
+#: src/alarm/interface.c:918
msgid "Wednesday"
msgstr "週三"
-#: src/alarm/interface.c:980
+#: src/alarm/interface.c:929
msgid "Thursday"
msgstr "週四"
-#: src/alarm/interface.c:991
+#: src/alarm/interface.c:940
msgid "Friday"
msgstr "週五"
-#: src/alarm/interface.c:1002
+#: src/alarm/interface.c:951
msgid "Saturday"
msgstr "週末"
-#: src/alarm/interface.c:1013
+#: src/alarm/interface.c:962
msgid "Sunday"
msgstr "週日"
-#: src/alarm/interface.c:1023
+#: src/alarm/interface.c:972
msgid "Monday"
msgstr "週一"
-#: src/alarm/interface.c:1034
+#: src/alarm/interface.c:983
msgid "Days"
msgstr "日期"
-#: src/alarm/interface.c:1050
+#: src/alarm/interface.c:999
msgid "Fading"
msgstr "æ¸é€€"
-#: src/alarm/interface.c:1087 src/sid/xs_interface.c:921
-#: src/sid/xs_interface.c:975 src/sid/xs_interface.c:1155
+#: src/alarm/interface.c:1036
msgid "seconds"
msgstr "秒"
-#: src/alarm/interface.c:1095 src/alarm/interface.c:1211
-#: src/modplug/gui/interface.cxx:550
+#: src/alarm/interface.c:1044 src/alarm/interface.c:1159
msgid "Volume"
msgstr "音é‡"
-#: src/alarm/interface.c:1121
+#: src/alarm/interface.c:1070
msgid "Current"
msgstr "当å‰"
-#: src/alarm/interface.c:1128
-msgid "reset to current output volume"
-msgstr "é‡ç½®å½“å‰éŸ³é‡"
-
-#: src/alarm/interface.c:1130
+#: src/alarm/interface.c:1078
msgid "Start at"
msgstr "开始于"
-#: src/alarm/interface.c:1158 src/alarm/interface.c:1202
+#: src/alarm/interface.c:1106 src/alarm/interface.c:1150
msgid "%"
msgstr "%"
-#: src/alarm/interface.c:1174
+#: src/alarm/interface.c:1122
msgid "Final"
msgstr "完æˆäºŽ"
-#: src/alarm/interface.c:1227
+#: src/alarm/interface.c:1175
msgid "Additional Command"
msgstr "附加指令"
-#: src/alarm/interface.c:1253
+#: src/alarm/interface.c:1201
msgid "enable"
msgstr "å¯ç”¨"
-#: src/alarm/interface.c:1261
+#: src/alarm/interface.c:1209
msgid "Playlist (optional)"
msgstr "播放列表(å¯é€‰)"
-#: src/alarm/interface.c:1287
+#: src/alarm/interface.c:1235
msgid "Browse..."
msgstr "æµè§ˆ..."
-#: src/alarm/interface.c:1295 src/alarm/interface.c:1460
+#: src/alarm/interface.c:1243 src/alarm/interface.c:1407
msgid "Reminder"
msgstr "æ醒器"
-#: src/alarm/interface.c:1312
+#: src/alarm/interface.c:1260
msgid "Use reminder"
msgstr "使用æ醒器"
-#: src/alarm/interface.c:1328 src/sndstretch/sndstretch_xmms.c:394
+#: src/alarm/interface.c:1276 src/sndstretch/sndstretch_xmms.c:358
msgid "Options"
msgstr "选项"
-#: src/alarm/interface.c:1336
+#: src/alarm/interface.c:1284
msgid "What do these options mean?"
-msgstr "此选项什么æ„æ€ï¼Ÿ"
+msgstr "这些选项有什么用?"
-#: src/alarm/interface.c:1364
+#: src/alarm/interface.c:1312
msgid ""
"\n"
"Time\n"
@@ -555,24 +344,29 @@ msgstr ""
" 当闹钟åœæ­¢åŽæ˜¾ç¤ºæ醒器,\n"
" 如果你想显示æ醒器,输出è¦ç”¨çš„æ醒器并打开相应的开关按钮\n"
-#: src/alarm/interface.c:1366 src/gtkui/ui_manager.c:165
-#: src/skins/ui_manager.c:371
+#: src/alarm/interface.c:1314 src/skins/ui_manager.c:382
msgid "Help"
msgstr "帮助"
-#: src/alarm/interface.c:1468
+#: src/alarm/interface.c:1346 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "å–消"
+
+#: src/alarm/interface.c:1414
msgid "Your reminder for today is.."
-msgstr "你今天的æ醒器是"
+msgstr "你今天的æ醒器是.."
-#: src/alarm/interface.c:1493
+#: src/alarm/interface.c:1439
msgid "Thankyou"
msgstr "谢谢"
-#: src/alsa/config.c:209
+#: src/alsa/config.c:210
msgid "Default PCM device"
msgstr "默认PCM设备"
-#: src/alsa/config.c:234
+#: src/alsa/config.c:235
msgid "Default mixer device"
msgstr "默认混音设备"
@@ -582,9 +376,9 @@ msgstr "ALSA输出æ’件首选项"
#: src/alsa/config.c:445
msgid "PCM device:"
-msgstr "PCM设备"
+msgstr "PCM设备:"
-#: src/alsa/config.c:447 src/OSS/configure.c:256 src/sun/configure.c:218
+#: src/alsa/config.c:447 src/OSS/configure.c:237
msgid "Mixer device:"
msgstr "混音设备"
@@ -596,15 +390,15 @@ msgstr "混音å•å…ƒï¼š"
msgid "Work around drain hangup"
msgstr ""
-#: src/alsa/plugin.c:61
+#: src/alsa/plugin.c:59
msgid "About ALSA Output Plugin"
msgstr "关于ALSA输出æ’件"
-#: src/alsa/plugin.c:83
+#: src/alsa/plugin.c:81
msgid "ALSA error"
msgstr "ALSA错误"
-#: src/amidi-plug/amidi-plug.c:323
+#: src/amidi-plug/amidi-plug.c:335
msgid ""
"You have not selected any sequencer ports for MIDI playback. You can do so "
"in the MIDI plugin preferences."
@@ -625,12 +419,18 @@ msgid ""
"hardware synth will be directly played.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"æ­¤åŽç«¯å°†å‘é€MIDI事件到用户选中的ALSAåˆæˆå™¨ç«¯å£ã€‚ALSAåˆæˆå™¨æŽ¥å£æ˜¯ç›¸å½“多用途"
+"的,它å¯ä»¥ä½¿ç”¨å£°å¡ä¸Šçš„硬件åˆæˆå™¨(如:emu10k1),åŒæ—¶äº¦å¯ä»¥ä½¿ç”¨è½¯åˆæˆå™¨ï¼Œå¤–置设"
+"备等。\n"
+"æ­¤åŽç«¯å¹¶ä¸ç”ŸæˆéŸ³é¢‘,MIDI事件会直接由ALSA端å£åŽé¢çš„设备或程åºå¤„ç†ã€‚å‡å¦‚,MIDI"
+"事件å‘é€åˆ°ç¡¬ä»¶åˆæˆå™¨ä¼šè¢«ç›´æŽ¥æ’­æ”¾ã€‚\n"
+"作者:Giacomo Lozito."
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:41
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
msgid "FluidSynth Backend "
msgstr "FluidSynthåŽç«¯"
-#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:43
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
msgid ""
"This backend produces audio by sending MIDI events to FluidSynth, a real-"
"time software synthesizer based on the SoundFont2 specification (www."
@@ -639,370 +439,210 @@ msgid ""
"by chosen ouput plugin.\n"
"Backend written by Giacomo Lozito."
msgstr ""
+"æ­¤åŽç«¯é€šè¿‡æŠŠMIDI事件å‘é€åˆ°FluidSynth生æˆéŸ³é¢‘,FluidSynth是符åˆSoundFont2标准"
+"的实时软件åˆæˆå™¨(www.fluidsynth.org).\n"
+"音频将由播放器效果æ’件生æˆå¹¶ç”±é€‰ä¸­çš„输出æ’件播放。\n"
+"作者:Giacomo Lozito."
-#: src/amidi-plug/i_configure-alsa.c:221
+#: src/amidi-plug/i_configure-alsa.c:228
msgid "ALSA BACKEND CONFIGURATION"
msgstr "ALSAåŽç«¯è®¾ç½®"
-#: src/amidi-plug/i_configure-alsa.c:326
+#: src/amidi-plug/i_configure-alsa.c:331
msgid "Port"
msgstr "端å£"
-#: src/amidi-plug/i_configure-alsa.c:328
+#: src/amidi-plug/i_configure-alsa.c:333
msgid "Client name"
msgstr "客户端å"
-#: src/amidi-plug/i_configure-alsa.c:330
+#: src/amidi-plug/i_configure-alsa.c:335
msgid "Port name"
msgstr "端å£å"
-#: src/amidi-plug/i_configure-alsa.c:341
+#: src/amidi-plug/i_configure-alsa.c:346
msgid "ALSA output ports"
msgstr "ALSA输出端å£"
-#: src/amidi-plug/i_configure-alsa.c:394
+#: src/amidi-plug/i_configure-alsa.c:399
msgid "Soundcard: "
msgstr "声å¡ï¼š"
-#: src/amidi-plug/i_configure-alsa.c:396
+#: src/amidi-plug/i_configure-alsa.c:401
msgid "Mixer control: "
-msgstr "混音控制:"
+msgstr "混音控制器:"
-#: src/amidi-plug/i_configure-alsa.c:408
+#: src/amidi-plug/i_configure-alsa.c:413
msgid "Mixer settings"
msgstr "混音器设置"
-#: src/amidi-plug/i_configure-alsa.c:421
-msgid ""
-"* Select ALSA output ports *\n"
-"MIDI events will be sent to the ports selected here. In example, if your "
-"audio card provides a hardware synth and you want to play MIDI with it, "
-"you'll probably want to select the wavetable synthesizer ports."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:426
-msgid ""
-"* Select ALSA mixer card *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volumeslider will "
-"manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:433
-msgid ""
-"* Select ALSA mixer control *\n"
-"The ALSA backend outputs directly through ALSA, it doesn't use effect and "
-"ouput plugins from the player. During playback, the player volume slider "
-"will manipulate the mixer control you select here. If you're using wavetable "
-"synthesizer ports, you'll probably want to select the Synth control here."
-msgstr ""
-
-#: src/amidi-plug/i_configure-alsa.c:444
+#: src/amidi-plug/i_configure-alsa.c:429
msgid "ALSA Backend not loaded or not available"
msgstr "ALSAåŽç«¯æœªèƒ½åŠ è½½æˆ–者ä¸å¯ç”¨"
-#: src/amidi-plug/i_configure-alsa.c:463
+#: src/amidi-plug/i_configure-alsa.c:448
msgid ""
"<span size=\"smaller\">ALSA\n"
"backend</span>"
msgstr "<span size=\"smaller\">ALSAåŽç«¯</span>"
-#: src/amidi-plug/i_configure-ap.c:56
+#: src/amidi-plug/i_configure-ap.c:59
msgid "AMIDI-Plug - backend information"
msgstr "AMIDI-Plug - åŽç«¯ä¿¡æ¯"
-#: src/amidi-plug/i_configure-ap.c:194
+#: src/amidi-plug/i_configure-ap.c:196
msgid "AMIDI-PLUG PREFERENCES"
msgstr "AMIDI-PLUG首选项"
-#: src/amidi-plug/i_configure-ap.c:221
+#: src/amidi-plug/i_configure-ap.c:223
msgid "Backend selection"
msgstr "选择åŽç«¯"
-#: src/amidi-plug/i_configure-ap.c:225
+#: src/amidi-plug/i_configure-ap.c:227
msgid "Available backends"
msgstr "å¯ç”¨åŽç«¯"
-#: src/amidi-plug/i_configure-ap.c:255
+#: src/amidi-plug/i_configure-ap.c:257
msgid "Playback settings"
msgstr "回放设置"
-#: src/amidi-plug/i_configure-ap.c:260
+#: src/amidi-plug/i_configure-ap.c:262
msgid "Transpose: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:269
+#: src/amidi-plug/i_configure-ap.c:271
msgid "Drum shift: "
msgstr ""
-#: src/amidi-plug/i_configure-ap.c:287
+#: src/amidi-plug/i_configure-ap.c:289
msgid "Advanced settings"
msgstr "高级选项"
-#: src/amidi-plug/i_configure-ap.c:291
+#: src/amidi-plug/i_configure-ap.c:293
msgid "pre-calculate length of MIDI files in playlist"
msgstr "预先计算在播放列表中的MIDI文件长度"
-#: src/amidi-plug/i_configure-ap.c:296
+#: src/amidi-plug/i_configure-ap.c:298
msgid "extract comments from MIDI file (if available)"
msgstr "如果å¯ç”¨ï¼Œä»ŽMIDI文件释放备注"
-#: src/amidi-plug/i_configure-ap.c:301
+#: src/amidi-plug/i_configure-ap.c:303
msgid "extract lyrics from MIDI file (if available)"
msgstr "如果å¯ç”¨ï¼Œä»ŽMIDI文件释放歌è¯"
-#: src/amidi-plug/i_configure-ap.c:320
-msgid ""
-"* Backend selection *\n"
-"AMIDI-Plug works with backends, in a modular fashion; here you should select "
-"your backend; that is, the way MIDI events are going to be handled and "
-"played.\n"
-"If you have a hardware synthesizer on your audio card, and ALSA supports it, "
-"you'll want to use the ALSA backend. It can also be used with anything that "
-"provides an interface to the ALSA sequencer, including software synths or "
-"external devices.\n"
-"If you want to rely on a software synthesizer and/or want to pipe audio into "
-"effect and output plugins of the player you'll want to use the good "
-"FluidSynth backend.\n"
-"Press the info button to read specific information about each backend."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:331
-msgid ""
-"* Transpose function *\n"
-"This option allows you to play the midi file transposed in a different key, "
-"by shifting of the desired number of semitones all its notes (excepting "
-"those on midi channel 10, reserved for percussions). Especially useful if "
-"you wish to sing or play along with another instrument."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:337
-msgid ""
-"* Drumshift function *\n"
-"This option allows you to shift notes on midi channel 10 (the standard "
-"percussions channel) of the desired number of semitones. This results in "
-"different drumset and percussions being used during midi playback, so if you "
-"wish to enhance (or reduce, or alter) percussion sounds, try to play with "
-"this value."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:344
-msgid ""
-"* Pre-calculate MIDI length *\n"
-"If this option is enabled, AMIDI-Plug will calculate the MIDI file length as "
-"soon as the player requests it, instead of doing that only when the MIDI "
-"file is being played. In example, MIDI length will be calculated straight "
-"after adding MIDI files in a playlist. Disable this option if you want "
-"faster playlist loading (when a lot of MIDI files are added), enable it to "
-"display more information in the playlist straight after loading."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:353
-msgid ""
-"* Extract comments from MIDI files *\n"
-"Some MIDI files contain text comments (author, copyright, instrument notes, "
-"etc.). If this option is enabled, AMIDI-Plug will extract and display "
-"comments (if available) in the file information dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:358
-msgid ""
-"* Extract lyrics from MIDI files *\n"
-"Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
-"will extract and display song lyrics (if available) in the file information "
-"dialog."
-msgstr ""
-
-#: src/amidi-plug/i_configure-ap.c:375
+#: src/amidi-plug/i_configure-ap.c:333
msgid ""
"<span size=\"smaller\">AMIDI\n"
"Plug</span>"
msgstr ""
-#: src/amidi-plug/i_configure.c:73
+#: src/amidi-plug/i_configure.c:76
msgid "AMIDI-Plug - select file"
msgstr "AMIDI-Plug - 选择文件"
-#: src/amidi-plug/i_configure.c:126
+#: src/amidi-plug/i_configure.c:129
msgid "AMIDI-Plug - configuration"
msgstr "AMIDI-Plug - 设置"
-#: src/amidi-plug/i_configure-fluidsynth.c:52
+#: src/amidi-plug/i_configure-fluidsynth.c:55
msgid "AMIDI-Plug - select SoundFont file"
msgstr "AMIDI-Plug - 选择SoundFont文件"
-#: src/amidi-plug/i_configure-fluidsynth.c:268
+#: src/amidi-plug/i_configure-fluidsynth.c:270
msgid "FLUIDSYNTH BACKEND CONFIGURATION"
msgstr "FLUIDSYNTHåŽç«¯è®¾ç½®"
-#: src/amidi-plug/i_configure-fluidsynth.c:316
+#: src/amidi-plug/i_configure-fluidsynth.c:313
msgid "SoundFont settings"
msgstr "SoundFont设置"
-#: src/amidi-plug/i_configure-fluidsynth.c:352
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "文件å"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
msgid "Size (bytes)"
msgstr "大å°(bytes)"
-#: src/amidi-plug/i_configure-fluidsynth.c:401
+#: src/amidi-plug/i_configure-fluidsynth.c:398
msgid "Load SF on player start"
msgstr "播放器å¯åŠ¨æ—¶åŠ è½½SF"
-#: src/amidi-plug/i_configure-fluidsynth.c:405
+#: src/amidi-plug/i_configure-fluidsynth.c:402
msgid "Load SF on first midifile play"
msgstr "在播放第一个midi文件时加载"
-#: src/amidi-plug/i_configure-fluidsynth.c:420
+#: src/amidi-plug/i_configure-fluidsynth.c:417
msgid "Synthesizer settings"
msgstr "åˆæˆå™¨è®¾ç½®"
-#: src/amidi-plug/i_configure-fluidsynth.c:429
+#: src/amidi-plug/i_configure-fluidsynth.c:426
msgid "gain"
msgstr "增益"
-#: src/amidi-plug/i_configure-fluidsynth.c:435
-#: src/amidi-plug/i_configure-fluidsynth.c:463
-#: src/amidi-plug/i_configure-fluidsynth.c:491
-#: src/amidi-plug/i_configure-fluidsynth.c:522
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
msgid "use default"
msgstr "使用默认设置"
-#: src/amidi-plug/i_configure-fluidsynth.c:438
-#: src/amidi-plug/i_configure-fluidsynth.c:466
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
msgid "value:"
msgstr "值:"
-#: src/amidi-plug/i_configure-fluidsynth.c:457
+#: src/amidi-plug/i_configure-fluidsynth.c:454
msgid "poliphony"
-msgstr ""
+msgstr "å¤éŸ³"
-#: src/amidi-plug/i_configure-fluidsynth.c:485
+#: src/amidi-plug/i_configure-fluidsynth.c:482
msgid "reverb"
-msgstr ""
+msgstr "回音"
-#: src/amidi-plug/i_configure-fluidsynth.c:494
-#: src/amidi-plug/i_configure-fluidsynth.c:525
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
msgid "yes"
msgstr "是"
-#: src/amidi-plug/i_configure-fluidsynth.c:496
-#: src/amidi-plug/i_configure-fluidsynth.c:527
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
msgid "no"
msgstr "å¦"
-#: src/amidi-plug/i_configure-fluidsynth.c:516
+#: src/amidi-plug/i_configure-fluidsynth.c:513
msgid "chorus"
-msgstr ""
+msgstr "åˆå”±"
-#: src/amidi-plug/i_configure-fluidsynth.c:547
+#: src/amidi-plug/i_configure-fluidsynth.c:544
msgid "sample rate"
msgstr "å–样率"
-#: src/amidi-plug/i_configure-fluidsynth.c:553
+#: src/amidi-plug/i_configure-fluidsynth.c:550
msgid "22050 Hz "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:556
+#: src/amidi-plug/i_configure-fluidsynth.c:553
msgid "44100 Hz "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:559
+#: src/amidi-plug/i_configure-fluidsynth.c:556
msgid "96000 Hz "
msgstr ""
-#: src/amidi-plug/i_configure-fluidsynth.c:562
+#: src/amidi-plug/i_configure-fluidsynth.c:559
msgid "custom "
-msgstr "定制"
+msgstr "自定"
-#: src/amidi-plug/i_configure-fluidsynth.c:571
+#: src/amidi-plug/i_configure-fluidsynth.c:568
msgid "Hz "
msgstr ""
#: src/amidi-plug/i_configure-fluidsynth.c:621
-msgid ""
-"* Select SoundFont files *\n"
-"In order to play MIDI with FluidSynth, you need to specify at least one "
-"valid SoundFont file here (use absolute paths). The loading order is from "
-"the top (first) to the bottom (last)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:626
-msgid ""
-"* Load SoundFont on player start *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:634
-msgid ""
-"* Load SoundFont on first midifile play *\n"
-"Depending on your system speed, SoundFont loading in FluidSynth will require "
-"up to a few seconds. This is a one-time task (the soundfont will stay loaded "
-"until it is changed or the backend is unloaded) that can be done at player "
-"start, or before the first MIDI file is played (the latter is a better "
-"choice if you don't use your player to listen MIDI files only)."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:642
-msgid ""
-"* Synthesizer gain *\n"
-"From FluidSynth docs: the gain is applied to the final or master output of "
-"the synthesizer; it is set to a low value by default to avoid the saturation "
-"of the output when random MIDI files are played."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:647
-msgid ""
-"* Synthesizer polyphony *\n"
-"From FluidSynth docs: the polyphony defines how many voices can be played in "
-"parallel; the number of voices is not necessarily equivalent to the number "
-"of notes played simultaneously; indeed, when a note is struck on a specific "
-"MIDI channel, the preset on that channel may create several voices, for "
-"example, one for the left audio channel and one for the right audio "
-"channels; the number of voices activated depends on the number of instrument "
-"zones that fall in the correspond to the velocity and key of the played note."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:657
-#: src/amidi-plug/i_configure-fluidsynth.c:663
-msgid ""
-"* Synthesizer reverb *\n"
-"From FluidSynth docs: when set to \"yes\" the reverb effects module is "
-"activated; note that when the reverb module is active, the amount of signal "
-"sent to the reverb module depends on the \"reverb send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:669
-#: src/amidi-plug/i_configure-fluidsynth.c:675
-msgid ""
-"* Synthesizer chorus *\n"
-"From FluidSynth docs: when set to \"yes\" the chorus effects module is "
-"activated; note that when the chorus module is active, the amount of signal "
-"sent to the chorus module depends on the \"chorus send\" generator defined "
-"in the SoundFont."
-msgstr ""
-
-#: src/amidi-plug/i_configure-fluidsynth.c:681
-#: src/amidi-plug/i_configure-fluidsynth.c:685
-#: src/amidi-plug/i_configure-fluidsynth.c:689
-#: src/amidi-plug/i_configure-fluidsynth.c:693
-msgid ""
-"* Synthesizer samplerate *\n"
-"The sample rate of the audio generated by the synthesizer. You can also "
-"specify a custom value in the interval 22050Hz-96000Hz."
-msgstr ""
-"* åˆæˆå™¨å–样率 *\n"
-"此为åˆæˆå™¨ç”Ÿæˆçš„音频å–样率,你å¯ä»¥å®šåˆ¶ä¸€ä¸ªèŒƒå›´åœ¨(22050Hz-96000Hz)的值。"
-
-#: src/amidi-plug/i_configure-fluidsynth.c:701
msgid "FluidSynth Backend not loaded or not available"
msgstr "FluidSynthåŽç«¯æœªèƒ½åŠ è½½æˆ–者ä¸å¯ç”¨"
-#: src/amidi-plug/i_configure-fluidsynth.c:720
+#: src/amidi-plug/i_configure-fluidsynth.c:640
msgid ""
"<span size=\"smaller\">FluidSynth\n"
"backend</span>"
@@ -1022,8 +662,7 @@ msgid ""
"backend</span>"
msgstr "<span size=\"smaller\">TiMidityåŽç«¯</span>"
-#: src/amidi-plug/i_fileinfo.c:169 src/bluetooth/gui.c:271
-#: src/sid/xs_interface.c:1769
+#: src/amidi-plug/i_fileinfo.c:169
msgid "Name:"
msgstr "å称:"
@@ -1109,10 +748,31 @@ msgid ""
"for the good help with alpha testing\n"
"\n"
msgstr ""
+"\n"
+"模å—化的MIDI音ä¹æ’­æ”¾å™¨\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"作者:Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"特别鸣谢:\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
#: src/aosd/aosd_style.c:75
msgid "Rectangle"
-msgstr "矩形"
+msgstr "方角矩形"
#: src/aosd/aosd_style.c:79
msgid "Rounded Rectangle"
@@ -1171,119 +831,118 @@ msgstr "æ¢å¤æ’­æ”¾"
msgid "Triggers OSD when playback is unpaused."
msgstr "æ¢å¤æ’­æ”¾æ—¶è§¦å‘OSD"
-#: src/aosd/aosd_ui.c:168
+#: src/aosd/aosd_ui.c:180
msgid "Placement"
msgstr "ä½ç½®"
-#: src/aosd/aosd_ui.c:202
+#: src/aosd/aosd_ui.c:219
msgid "Relative X offset:"
msgstr "X相对ä½ç§»ï¼š"
-#: src/aosd/aosd_ui.c:211
+#: src/aosd/aosd_ui.c:228
msgid "Relative Y offset:"
msgstr "Y相对ä½ç§»ï¼š"
-#: src/aosd/aosd_ui.c:220
+#: src/aosd/aosd_ui.c:237
msgid "Max OSD width:"
msgstr "最大OSD宽度:"
-#: src/aosd/aosd_ui.c:233
+#: src/aosd/aosd_ui.c:250
msgid "Multi-Monitor options"
msgstr "多å±é€‰é¡¹"
-#: src/aosd/aosd_ui.c:237
+#: src/aosd/aosd_ui.c:254
msgid "Display OSD using:"
-msgstr "用于显示OSD:"
+msgstr "OSD显示于:"
-#: src/aosd/aosd_ui.c:239
+#: src/aosd/aosd_ui.c:265
msgid "all monitors"
msgstr "所有显示器"
-#: src/aosd/aosd_ui.c:242
+#: src/aosd/aosd_ui.c:268
#, c-format
msgid "monitor %i"
msgstr "显示器%i"
-#: src/aosd/aosd_ui.c:295
+#: src/aosd/aosd_ui.c:323
msgid "Timing (ms)"
msgstr "延时(ms)"
-#: src/aosd/aosd_ui.c:300
+#: src/aosd/aosd_ui.c:328
msgid "Display:"
msgstr "显示:"
-#: src/aosd/aosd_ui.c:305
+#: src/aosd/aosd_ui.c:333
msgid "Fade in:"
-msgstr "æ¸å…¥ï¼š"
+msgstr "淡入:"
-#: src/aosd/aosd_ui.c:310
+#: src/aosd/aosd_ui.c:338
msgid "Fade out:"
-msgstr "æ¸å‡ºï¼š"
+msgstr "淡出:"
-#: src/aosd/aosd_ui.c:391
+#: src/aosd/aosd_ui.c:419
msgid "Fonts"
msgstr "字体"
-#: src/aosd/aosd_ui.c:399
+#: src/aosd/aosd_ui.c:427
#, c-format
msgid "Font %i:"
msgstr "字体 %i:"
-#: src/aosd/aosd_ui.c:416
+#: src/aosd/aosd_ui.c:444
msgid "Shadow"
msgstr "阴影"
-#: src/aosd/aosd_ui.c:451
+#: src/aosd/aosd_ui.c:479
msgid "Internationalization"
msgstr "国际化"
-#: src/aosd/aosd_ui.c:457
+#: src/aosd/aosd_ui.c:485
msgid "Disable UTF-8 conversion of text (in aosd)"
msgstr "ç¦ç”¨UTF-8转æ¢(在aosd中)"
-#: src/aosd/aosd_ui.c:475
+#: src/aosd/aosd_ui.c:503
msgid "Select Skin File"
msgstr "选择主题文件"
-#: src/aosd/aosd_ui.c:586
+#: src/aosd/aosd_ui.c:614
msgid "Render Style"
msgstr "渲染风格"
-#: src/aosd/aosd_ui.c:602
+#: src/aosd/aosd_ui.c:630
msgid "Colors"
msgstr "颜色"
-#: src/aosd/aosd_ui.c:615
+#: src/aosd/aosd_ui.c:643
#, c-format
msgid "Color %i:"
msgstr "颜色 %i:"
-#: src/aosd/aosd_ui.c:635
+#: src/aosd/aosd_ui.c:663
msgid "Custom Skin"
msgstr "自定义主题"
-#: src/aosd/aosd_ui.c:641
+#: src/aosd/aosd_ui.c:669
msgid "Skin file:"
msgstr "主题文件:"
-#: src/aosd/aosd_ui.c:644 src/sid/xs_interface.c:1044
-#: src/sid/xs_interface.c:1236 src/sid/xs_interface.c:1292
+#: src/aosd/aosd_ui.c:672
msgid "Browse"
msgstr "æµè§ˆ"
-#: src/aosd/aosd_ui.c:746
+#: src/aosd/aosd_ui.c:774
msgid "Enable trigger"
msgstr "å¯ç”¨è§¦å‘器"
-#: src/aosd/aosd_ui.c:773
+#: src/aosd/aosd_ui.c:801
msgid "Event"
msgstr "事件"
-#: src/aosd/aosd_ui.c:801
+#: src/aosd/aosd_ui.c:829
msgid "Composite manager detected"
msgstr "检测到混åˆç®¡ç†å™¨"
-#: src/aosd/aosd_ui.c:808
+#: src/aosd/aosd_ui.c:836
msgid ""
"Composite manager not detected;\n"
"unless you know that you have one running, please activate a composite "
@@ -1292,79 +951,78 @@ msgstr ""
"未检测到混åˆç®¡ç†å™¨ï¼›\n"
"OSD无法正常工作,除éžä½ æ¿€æ´»æ··åˆç®¡ç†å™¨ã€‚"
-#: src/aosd/aosd_ui.c:816
+#: src/aosd/aosd_ui.c:844
msgid "Composite manager not required for fake transparency"
msgstr "å‡é€æ˜Žæ— éœ€æ··åˆç®¡ç†æ”¯æŒ"
-#: src/aosd/aosd_ui.c:854
+#: src/aosd/aosd_ui.c:882
msgid "Transparency"
msgstr "é€æ˜Ž"
-#: src/aosd/aosd_ui.c:860
+#: src/aosd/aosd_ui.c:888
msgid "Fake transparency"
msgstr "å‡é€æ˜Ž"
-#: src/aosd/aosd_ui.c:862
+#: src/aosd/aosd_ui.c:890
msgid "Real transparency (requires X Composite Ext.)"
msgstr "真é€æ˜Ž(需è¦X Composite扩展)"
-#: src/aosd/aosd_ui.c:904
+#: src/aosd/aosd_ui.c:932
msgid "Composite extension not loaded"
msgstr "X Composite扩展未加载"
-#: src/aosd/aosd_ui.c:912
+#: src/aosd/aosd_ui.c:940
msgid "Composite extension not available"
msgstr "X Composite扩展ä¸å¯ç”¨"
-#: src/aosd/aosd_ui.c:931
+#: src/aosd/aosd_ui.c:959
#, c-format
msgid "<span font_desc='%s'>Audacious OSD</span>"
-msgstr ""
+msgstr "<span font_desc='%s'>Audacious OSD</span>"
-#: src/aosd/aosd_ui.c:1012
+#: src/aosd/aosd_ui.c:1040
msgid "Audacious OSD - configuration"
msgstr "Audacious OSD - 设置"
-#: src/aosd/aosd_ui.c:1033
+#: src/aosd/aosd_ui.c:1061
msgid "Test"
msgstr "测试"
-#: src/aosd/aosd_ui.c:1048
+#: src/aosd/aosd_ui.c:1076
msgid "Position"
msgstr "ä½ç½®"
-#: src/aosd/aosd_ui.c:1053
+#: src/aosd/aosd_ui.c:1081
msgid "Animation"
msgstr "动画"
-#: src/aosd/aosd_ui.c:1058
+#: src/aosd/aosd_ui.c:1086
msgid "Text"
msgstr "字体"
-#: src/aosd/aosd_ui.c:1063
+#: src/aosd/aosd_ui.c:1091
msgid "Decoration"
msgstr "装饰器"
-#: src/aosd/aosd_ui.c:1068
+#: src/aosd/aosd_ui.c:1096
msgid "Trigger"
msgstr "触å‘器"
-#: src/aosd/aosd_ui.c:1073 src/cdaudio-ng/configure.c:178
-#: src/modplug/gui/interface.cxx:689 src/sid/xs_interface.c:1302
+#: src/aosd/aosd_ui.c:1101 src/cdaudio-ng/configure.c:171
msgid "Misc"
msgstr "其它"
-#: src/aosd/aosd_ui.c:1110
+#: src/aosd/aosd_ui.c:1138
msgid "Audacious OSD - about"
msgstr "Audacious OSD - 关于"
-#: src/aosd/aosd_ui.c:1140
+#: src/aosd/aosd_ui.c:1168
msgid ""
"\n"
"Audacious OSD "
msgstr ""
-#: src/aosd/aosd_ui.c:1141
+#: src/aosd/aosd_ui.c:1169
msgid ""
"\n"
"http://www.develia.org/projects.php?p=audacious#aosd\n"
@@ -1376,139 +1034,28 @@ msgid ""
"http://neugierig.org/software/ghosd/\n"
"\n"
msgstr ""
-
-#: src/bluetooth/agent.c:356 src/bluetooth/agent.c:397
-#, c-format
-msgid "Pairing request for '%s'"
-msgstr "正在为'%s'é…对请求"
-
-#: src/bluetooth/agent.c:544
-#, c-format
-msgid "Authorization request for %s"
-msgstr "'%s'è¦æ±‚认è¯"
-
-#: src/bluetooth/agent.c:728
-#, c-format
-msgid "Created bonding with %s"
-msgstr "正在绑定%s"
-
-#: src/bluetooth/agent.c:756
-#, c-format
-msgid "Removed bonding with %s"
-msgstr "正在解除%s"
-
-#: src/bluetooth/agent.c:808
-msgid "Device has been switched off"
-msgstr "设备已关闭"
-
-#: src/bluetooth/agent.c:811
-msgid "Device has been made non-discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:813
-msgid "Device has been made connectable"
-msgstr ""
-
-#: src/bluetooth/agent.c:815
-msgid "Device has been made discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:817
-msgid "Device has been made limited discoverable"
-msgstr ""
-
-#: src/bluetooth/agent.c:819
-msgid "Device has been switched into pairing mode"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:117
-msgid "Bluetooth headset support plugin"
-msgstr ""
-
-#: src/bluetooth/bluetooth.c:118
-msgid ""
-"Bluetooth headset support\n"
-"Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
-"This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the "
-"Audacious team\n"
-" \n"
-"In order to use the AVRCP you need the uinput module loaded into the kernel\n"
-"The headset keys will be recognized as normal mutimedia keys and \n"
-"can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
-"provided by your window manager\n"
-msgstr ""
-
-#: src/bluetooth/gui.c:148
-msgid "Producer"
-msgstr "生产商"
-
-#: src/bluetooth/gui.c:221
-msgid "Available Headsets"
-msgstr "å¯ç”¨è€³æœº"
-
-#: src/bluetooth/gui.c:224
-msgid "Current Headset"
-msgstr "当å‰è€³æœº"
-
-#: src/bluetooth/gui.c:227
-msgid "_Refresh"
-msgstr "刷新(_R)"
-
-#: src/bluetooth/gui.c:231
-msgid "_Connect"
-msgstr "连接(_C)"
-
-#: src/bluetooth/gui.c:237
-msgid "_Close"
-msgstr "关闭(_C)"
-
-#: src/bluetooth/gui.c:274
-msgid "Class"
-msgstr "类型"
-
-#: src/bluetooth/gui.c:278
-msgid "Address:"
-msgstr "地å€ï¼š"
-
-#: src/bluetooth/scan_gui.c:69
-msgid "Bonding finish!"
-msgstr "绑定完æˆï¼"
-
-#: src/bluetooth/scan_gui.c:76
-msgid "No devices found!"
-msgstr "未找到设备ï¼"
-
-#: src/bluetooth/scan_gui.c:119
-msgid "Scanning..."
-msgstr "正在扫æ..."
-
-#: src/bluetooth/scan_gui.c:122
-msgid "Pairing..."
-msgstr "正在é…对..."
-
-#: src/bluetooth/scan_gui.c:138
-msgid "Rescan"
-msgstr "é‡æ–°æ‰«æ"
-
-#: src/bluetooth/scan_gui.c:142 src/gtkui/ui_manager.c:66
-#: src/gtkui/ui_manager.c:67 src/hotkey/gui.c:71 src/skins/ui_manager.c:167
-#: src/skins/ui_manager.c:168
-msgid "Play"
-msgstr "播放"
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"作者:Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display基于Ghosd库\n"
+"作者:Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
#: src/blur_scope/config.c:73
msgid "Blur Scope: Color selection"
msgstr ""
-#: src/blur_scope/config.c:83 src/jack/configure.c:111
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
msgid "Options:"
msgstr "选项"
-#: src/cdaudio-ng/cdaudio-ng.c:278
+#: src/cdaudio-ng/cdaudio-ng.c:241
msgid "About Audio CD Plugin"
msgstr "关于音频CDæ’件"
-#: src/cdaudio-ng/cdaudio-ng.c:279
+#: src/cdaudio-ng/cdaudio-ng.c:242
msgid ""
"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -1522,139 +1069,167 @@ msgid ""
"\n"
"Copyright 2009 John Lindgren"
msgstr ""
-"版æƒæ‰€æœ‰ (c) 2007, Calin Crisan <ccrisan@gmail.com> åŠAudacious团队\n"
-"在此éžå¸¸æ„Ÿè°¢libcdio <http://www.gnu.org/software/libcdio/>\n"
-"\tåŠlibcddb<http://libcddb.sourceforge.net/>çš„å¼€å‘者\n"
+"版æƒæ‰€æœ‰ (c)\n"
+"2009 John Lindgren\n"
+"2007 Calin Crisan <ccrisan@gmail.com> åŠAudaciouså°ç»„\n"
"\n"
+"在此éžå¸¸æ„Ÿè°¢libcdio <http://www.gnu.org/software/libcdio/>\n"
+"åŠlibcddb<http://libcddb.sourceforge.net/>çš„å¼€å‘者\n"
"åŒæ—¶äº¦éžå¸¸æ„Ÿè°¢Tony Vroon对我的帮助和指导.\n"
-"\n"
-"Google Summer of Code 2007 project.\n"
-"\n"
-"版æƒæ‰€æœ‰ (c) 2009 John Lindgren"
+"Google Summer of Code 2007 project."
+
+#: src/cdaudio-ng/cdaudio-ng.c:550
+msgid "Audio CD"
+msgstr "音频CD"
-#: src/cdaudio-ng/configure.c:155
+#: src/cdaudio-ng/cdaudio-ng.c:922
+msgid "Drive is empty."
+msgstr "设备为空"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Unsupported disk type."
+msgstr "未支æŒå…‰ç›˜ç±»åž‹"
+
+#: src/cdaudio-ng/configure.c:148
msgid "CD Audio Plugin Configuration"
msgstr "CD音频æ’件设置"
-#: src/cdaudio-ng/configure.c:167
+#: src/cdaudio-ng/configure.c:160
msgid "Digital audio extraction"
msgstr "抽å–æ•°æ®éŸ³é¢‘"
-#: src/cdaudio-ng/configure.c:172
+#: src/cdaudio-ng/configure.c:165
msgid "Title information"
msgstr "标题信æ¯"
-#: src/cdaudio-ng/configure.c:190
+#: src/cdaudio-ng/configure.c:176
msgid "Disc speed:"
msgstr "光盘速度:"
-#: src/cdaudio-ng/configure.c:198
+#: src/cdaudio-ng/configure.c:184
msgid "Use cd-text if available"
msgstr "如果å¯ç”¨ï¼Œä½¿ç”¨cd-text"
-#: src/cdaudio-ng/configure.c:205
+#: src/cdaudio-ng/configure.c:191
msgid "Use CDDB if available"
msgstr "如果å¯ç”¨ï¼Œä½¿ç”¨CDDB"
-#: src/cdaudio-ng/configure.c:211
+#: src/cdaudio-ng/configure.c:197
msgid "Server: "
msgstr "æœåŠ¡å™¨ï¼š"
-#: src/cdaudio-ng/configure.c:215
+#: src/cdaudio-ng/configure.c:201
msgid "Path: "
msgstr "路径:"
-#: src/cdaudio-ng/configure.c:219
+#: src/cdaudio-ng/configure.c:205
msgid "Port: "
msgstr "端å£ï¼š"
-#: src/cdaudio-ng/configure.c:232
+#: src/cdaudio-ng/configure.c:218
msgid "Use HTTP instead of CDDBP"
msgstr "使用HTTP代替CDDBP"
-#: src/cdaudio-ng/configure.c:244
+#: src/cdaudio-ng/configure.c:230
msgid "Override default device: "
msgstr "覆蓋默设备:"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "确定"
+
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Play CD"
msgstr "播放CD"
-#: src/cd-menu-items/cd-menu-items.c:35
+#: src/cd-menu-items/cd-menu-items.c:34
msgid "Add CD"
msgstr "添加CD"
-#: src/compressor/plugin.c:58
+#: src/compressor/plugin.c:63
msgid "About Dynamic Range Compression Plugin"
-msgstr ""
+msgstr "关于Dynamic Range Compressionæ’件"
-#: src/compressor/plugin.c:91
+#: src/compressor/plugin.c:95
msgid "Dynamic Range Compressor Preferences"
-msgstr ""
+msgstr "Dynamic Range Compressor设置"
-#: src/compressor/plugin.c:103
-msgid "Target volume:"
-msgstr ""
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "中间音é‡ï¼š"
-#: src/compressor/plugin.c:116
-msgid "Effect strength:"
-msgstr ""
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "动æ€èŒƒå›´ï¼š"
-#: src/console/configure.c:137
+#: src/console/configure.c:136
msgid "Game Console Music Decoder"
-msgstr ""
+msgstr "游æˆæœºéŸ³ä¹è§£ç å™¨"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "常规"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "回放"
-#: src/console/configure.c:171
+#: src/console/configure.c:170
msgid "Bass:"
-msgstr ""
+msgstr "低音:"
-#: src/console/configure.c:175 src/console/configure.c:186
-#: src/console/configure.c:207
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
msgid "secs"
-msgstr ""
+msgstr "秒"
-#: src/console/configure.c:182
+#: src/console/configure.c:181
msgid "Treble:"
-msgstr ""
+msgstr "高音:"
-#: src/console/configure.c:203
+#: src/console/configure.c:202
msgid "Default song length:"
-msgstr ""
+msgstr "默认歌曲长度:"
-#: src/console/configure.c:209 src/modplug/gui/interface.cxx:269
-#: src/sid/xs_interface.c:666
+#: src/console/configure.c:208
msgid "Resampling"
-msgstr ""
+msgstr "é‡é‡‡æ ·"
-#: src/console/configure.c:215
+#: src/console/configure.c:214
msgid "Enable audio resampling"
-msgstr ""
+msgstr "å¯ç”¨éŸ³é¢‘é‡é‡‡æ ·"
-#: src/console/configure.c:230
+#: src/console/configure.c:229
msgid "Resampling rate:"
+msgstr "采样率:"
+
+#: src/console/configure.c:233
+msgid "Hz"
msgstr ""
-#: src/console/configure.c:245
+#: src/console/configure.c:244
msgid "SPC"
msgstr ""
-#: src/console/configure.c:246
+#: src/console/configure.c:245
msgid "Ignore length from SPC tags"
-msgstr ""
+msgstr "忽略SPC标签显示的长度"
-#: src/console/configure.c:247
+#: src/console/configure.c:246
msgid "Increase reverb"
-msgstr ""
+msgstr "延长余å“"
-#: src/console/configure.c:272
+#: src/console/configure.c:271
msgid ""
"The default song length, expressed in seconds, is used for songs that do not "
"provide length information (i.e. looping tracks)."
-msgstr ""
+msgstr "默认歌曲长度(å•ä½ï¼šç§’),用于本身ä¸æ供长度信æ¯çš„文件(如:循环音轨)"
#: src/console/plugin.c:33
msgid "About the Game Console Music Decoder"
-msgstr ""
+msgstr "关于游æˆæœºéŸ³ä¹è§£ç å™¨"
#: src/console/plugin.c:34
msgid ""
@@ -1663,658 +1238,328 @@ msgid ""
"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
" Shay Green <gblargg@gmail.com>\n"
msgstr ""
+"游æˆæœºéŸ³ä¹è§£ç å¼•æ“ŽåŸºæœ¬äºŽGame_Music_Emu 0.5.2.\n"
+"支æŒæ ¼å¼ï¼š AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious上的实现由:\n"
+"William Pitcock <nenolod@dereferenced.org>, \n"
+"Shay Green <gblargg@gmail.com>\n"
+"完æˆã€‚\n"
-#: src/crossfade/plugin.c:51
+#: src/crossfade/plugin.c:60
msgid "About Crossfade"
-msgstr ""
+msgstr "关于淡出音效"
-#: src/crossfade/plugin.c:84
+#: src/crossfade/plugin.c:92
msgid "Crossfade Preferences"
-msgstr ""
+msgstr "淡出设置"
-#: src/crossfade/plugin.c:95
+#: src/crossfade/plugin.c:104
msgid "Overlap (in seconds):"
-msgstr ""
+msgstr "é‡å æ—¶é—´(å•ä½ï¼šç§’):"
-#: src/crossfade/plugin.c:129 src/crossfade/plugin.c:137
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
msgid "Crossfade Error"
-msgstr ""
+msgstr "淡出错误"
-#: src/crossfade/plugin.c:130
+#: src/crossfade/plugin.c:135
msgid ""
"Crossfading failed because the songs had a different number of channels."
-msgstr ""
+msgstr "淡出失败, 原因:歌曲的声é“æ•°ä¸ä¸€æ ·"
-#: src/crossfade/plugin.c:138
+#: src/crossfade/plugin.c:143
msgid ""
"Crossfading failed because the songs had different sample rates.\n"
"\n"
"You can use the Sample Rate Converter effect to resample the songs to the "
"same rate."
msgstr ""
+"淡出失败, 原因:歌曲的采样ä¸ä¸€è‡´ã€‚\n"
+"\n"
+"ä½ å¯ä»¥å°è¯•ä½¿ç”¨â€é‡‡æ ·çŽ‡è½¬æ¢å™¨â€œä½¿æ­Œæ›²çš„采样一致。"
-#: src/crystalizer/crystalizer.c:104
+#: src/crystalizer/crystalizer.c:100
msgid "Configure Crystalizer"
-msgstr ""
+msgstr "设置Crystalizer"
-#: src/crystalizer/crystalizer.c:106 src/stereo_plugin/stereo.c:102
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
msgid "Effect intensity:"
-msgstr ""
+msgstr "效果强度:"
-#: src/crystalizer/crystalizer.c:143 src/echo_plugin/gui.c:137
-#: src/modplug/gui/interface.cxx:709 src/stereo_plugin/stereo.c:139
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
msgid "Apply"
-msgstr ""
+msgstr "应用"
-#: src/echo_plugin/gui.c:14
+#: src/echo_plugin/gui.c:15
msgid ""
"Echo Plugin\n"
"By Johan Levin 1999.\n"
"\n"
"Surround echo by Carl van Schaik 1999"
msgstr ""
+"回音æ’件\n"
+"作者: Johan Levin 1999.\n"
+"\n"
+"回音环绕\n"
+"作者:Carl van Schaik 1999"
-#: src/echo_plugin/gui.c:26
+#: src/echo_plugin/gui.c:27
msgid "About Echo Plugin"
-msgstr ""
+msgstr "关于回音æ’件"
-#: src/echo_plugin/gui.c:69
+#: src/echo_plugin/gui.c:67
msgid "Configure Echo"
-msgstr ""
+msgstr "回音设置"
-#: src/echo_plugin/gui.c:82
+#: src/echo_plugin/gui.c:83
msgid "Delay: (ms)"
-msgstr ""
+msgstr "延迟:(ms)"
-#: src/echo_plugin/gui.c:87
+#: src/echo_plugin/gui.c:88
msgid "Feedback: (%)"
-msgstr ""
+msgstr "å馈:(%)"
-#: src/echo_plugin/gui.c:92
+#: src/echo_plugin/gui.c:93
msgid "Volume: (%)"
-msgstr ""
-
-#: src/evdev-plug/ed.c:60
-msgid "Playback->Play"
-msgstr ""
-
-#: src/evdev-plug/ed.c:61
-msgid "Playback->Stop"
-msgstr ""
-
-#: src/evdev-plug/ed.c:62
-msgid "Playback->Pause"
-msgstr ""
-
-#: src/evdev-plug/ed.c:63
-msgid "Playback->Prev"
-msgstr ""
-
-#: src/evdev-plug/ed.c:64
-msgid "Playback->Next"
-msgstr ""
-
-#: src/evdev-plug/ed.c:65
-msgid "Playback->Eject"
-msgstr ""
-
-#: src/evdev-plug/ed.c:67
-msgid "Playlist->Repeat"
-msgstr ""
-
-#: src/evdev-plug/ed.c:68
-msgid "Playlist->Shuffle"
-msgstr ""
-
-#: src/evdev-plug/ed.c:70
-msgid "Volume->Up_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:71
-msgid "Volume->Down_5"
-msgstr ""
-
-#: src/evdev-plug/ed.c:72
-msgid "Volume->Up_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:73
-msgid "Volume->Down_10"
-msgstr ""
-
-#: src/evdev-plug/ed.c:74
-msgid "Volume->Mute"
-msgstr ""
-
-#: src/evdev-plug/ed.c:76
-msgid "Window->Main"
-msgstr ""
-
-#: src/evdev-plug/ed.c:77
-msgid "Window->Playlist"
-msgstr ""
-
-#: src/evdev-plug/ed.c:78
-msgid "Window->Equalizer"
-msgstr ""
-
-#: src/evdev-plug/ed.c:79
-msgid "Window->JumpToFile"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:94
-#, c-format
-msgid ""
-"event-device-plugin: unable to open device file %s , skipping this device; "
-"check that the file exists and that you have read permission for it\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:103
-#, c-format
-msgid ""
-"event-device-plugin: unable to create a io_channel for device file %s ,"
-"skipping this device\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:342
-msgid ""
-"event-device-plugin: unable to open /proc/bus/input/devices , automatic "
-"detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:351
-msgid ""
-"event-device-plugin: unable to open a io_channel for /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:361
-msgid ""
-"event-device-plugin: an error occurred while reading /proc/bus/input/"
-"devices , automatic detection of event devices won't work.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:424
-#, c-format
-msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:489 src/evdev-plug/ed_internals.c:583
-#, c-format
-msgid ""
-"event-device-plugin: unable to load config file %s , default settings will "
-"be used.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:535
-#, c-format
-msgid ""
-"event-device-plugin: incomplete information in config file for device \"%s"
-"\" , skipping.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:604 src/evdev-plug/ed_internals.c:936
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_active value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:840
-#, c-format
-msgid ""
-"event-device-plugin: unable to access local directory %s , settings will not "
-"be saved.\n"
-msgstr ""
+msgstr "音é‡ï¼š(%)"
-#: src/evdev-plug/ed_internals.c:890
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get filename value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:906
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get phys value for device \"%s"
-"\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:922
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unable to get is_custom value for device "
-"\"%s\", skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_internals.c:946
-#, c-format
-msgid ""
-"event-device-plugin: configuration, unexpected value for device \"%s\", "
-"skipping it.\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:212
-msgid "Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:217
-msgid "Custom"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:223
-msgid "Not Detected"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:275 src/evdev-plug/ed_ui.c:411
-#: src/evdev-plug/ed_ui.c:874
-msgid "Information"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:276
-msgid ""
-"Cannot open bindings window for a not-detected device.\n"
-"Ensure that the device has been correctly plugged in."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:319
-msgid "Error"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:320
-msgid ""
-"Unable to open selected device.\n"
-"Please check read permissions on device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:341
-msgid "EvDev-Plug - Add custom device"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:353
-msgid ""
-"EvDev-Plug tries to automatically detect and update information about\n"
-"event devices available on the system.\n"
-"However, if auto-detect doesn't work for your system, or you have event\n"
-"devices in a non-standard location (currently they're only searched in\n"
-"/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
-"name and device file."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:361
-msgid "Device name:"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:365
-msgid "Device file:"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:404
-msgid "(custom)"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:412
-msgid ""
-"Please specify both name and filename.\n"
-"Filename must be specified with absolute path."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:447
-msgid "Do you want to remove the existing configuration for selected device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:466
-msgid "Do you want to remove the selected custom device?\n"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:612
-msgid "EvDev-Plug - Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:651
-msgid "Active"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:655 src/sun/configure.c:486
-msgid "Status"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:664
-msgid "Device Name"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:668
-msgid "Device File"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:672
-msgid "Device Address"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:689
-msgid "_Bindings"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:838
-msgid ""
-"Press a key of your device to bind it;\n"
-"if no key is pressed in five seconds, this window\n"
-"will close without binding changes."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:875
-msgid ""
-"This input event has been already assigned.\n"
-"\n"
-"It's not possible to assign multiple actions to the same input event "
-"(although it's possible to assign the same action to multiple events)."
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1323
-msgid "EvDev-Plug - Bindings Configuration"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1363
-msgid "<b>Name: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1372
-msgid "<b>Filename: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1381
-msgid "<b>Phys.Address: </b>"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1460
-msgid "EvDev-Plug - about"
-msgstr ""
-
-#: src/evdev-plug/ed_ui.c:1491
-msgid ""
-"\n"
-"player remote control via event devices\n"
-"http://www.develia.org/projects.php?p=audacious#evdevplug\n"
-"\n"
-"written by Giacomo Lozito\n"
-msgstr ""
-
-#: src/ffaudio/ffaudio-core.c:662
+#: src/ffaudio/ffaudio-core.c:795
#, c-format
msgid ""
"Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
-"FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
-"\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
msgstr ""
+"基于FFmepg多媒体框架(http://www.ffmpeg.org/)\n"
+"çš„Audacious音频解ç æ’件\n"
+"版æƒæ‰€æœ‰ (c)\n"
+"2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audaciousæ’件作者:\n"
+"\tWilliam Pitcock <nenolod@nenolod.net>,\n"
+"\tMatti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
-#: src/ffaudio/ffaudio-core.c:675
+#: src/ffaudio/ffaudio-core.c:809
msgid "About FFaudio Plugin"
-msgstr ""
+msgstr "关于FFaudioæ’件"
-#: src/filewriter/filewriter.c:180
+#: src/filewriter/filewriter.c:166
msgid "About FileWriter-Plugin"
-msgstr ""
-
-#: src/filewriter/filewriter.c:181
-msgid ""
-"FileWriter-Plugin\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
+msgstr "关于FileWriteræ’件"
-#: src/filewriter/filewriter.c:466
+#: src/filewriter/filewriter.c:455
msgid "File Writer Configuration"
-msgstr ""
+msgstr "FileWriter设置"
-#: src/filewriter/filewriter.c:478
+#: src/filewriter/filewriter.c:467
msgid "Output file format:"
-msgstr ""
+msgstr "输出文件格å¼ï¼š"
-#: src/filewriter/filewriter.c:496 src/ladspa/ladspa.c:1058
+#: src/filewriter/filewriter.c:485
msgid "Configure"
-msgstr ""
+msgstr "设置"
-#: src/filewriter/filewriter.c:511
+#: src/filewriter/filewriter.c:500
msgid "Save into original directory"
-msgstr ""
+msgstr "ä¿å­˜åˆ°åŽŸæ¥çš„目录"
-#: src/filewriter/filewriter.c:516
+#: src/filewriter/filewriter.c:505
msgid "Save into custom directory"
-msgstr ""
+msgstr "ä¿å­˜åˆ°è‡ªå®šä¹‰ç›®å½•"
-#: src/filewriter/filewriter.c:528
+#: src/filewriter/filewriter.c:515
msgid "Output file folder:"
-msgstr ""
+msgstr "输出文件目录:"
-#: src/filewriter/filewriter.c:532
+#: src/filewriter/filewriter.c:519
msgid "Pick a folder"
-msgstr ""
+msgstr "选择目录"
-#: src/filewriter/filewriter.c:551
+#: src/filewriter/filewriter.c:538
msgid "Get filename from:"
-msgstr ""
+msgstr "文件åæ¥è‡ªï¼š"
-#: src/filewriter/filewriter.c:554
+#: src/filewriter/filewriter.c:541
msgid "original file tags"
-msgstr ""
+msgstr "原始文件标签"
-#: src/filewriter/filewriter.c:560
+#: src/filewriter/filewriter.c:547
msgid "original filename"
-msgstr ""
+msgstr "原始文件å"
-#: src/filewriter/filewriter.c:570
+#: src/filewriter/filewriter.c:557
msgid "Don't strip file name extension"
-msgstr ""
+msgstr "ä¿ç•™æ–‡ä»¶åŽç¼€"
-#: src/filewriter/filewriter.c:574
-msgid ""
-"If enabled, the extension from the original filename will not be stripped "
-"before adding the new file extension to the end."
-msgstr ""
-
-#: src/filewriter/filewriter.c:588
+#: src/filewriter/filewriter.c:572
msgid "Prepend track number to filename"
-msgstr ""
+msgstr "文件åå‰åŠ ä¸ŠéŸ³è½¨å·"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:771
+msgid "Auto"
+msgstr "自动"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "è”åˆç«‹ä½“声"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183
+msgid "Stereo"
+msgstr "立体声"
-#: src/filewriter/mp3.c:710
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:183
+msgid "Mono"
+msgstr "å•å£°é“"
+
+#: src/filewriter/mp3.c:712
msgid "MP3 Configuration"
-msgstr ""
+msgstr "MP3设置"
-#: src/filewriter/mp3.c:737
+#: src/filewriter/mp3.c:735
msgid "Algorithm Quality:"
-msgstr ""
-
-#: src/filewriter/mp3.c:759
-msgid ""
-"best/slowest:0;\n"
-"worst/fastest:9;\n"
-"recommended:2;\n"
-"default:5;"
-msgstr ""
+msgstr "音质"
-#: src/filewriter/mp3.c:767
+#: src/filewriter/mp3.c:760
msgid "Output Samplerate:"
-msgstr ""
+msgstr "输出å–样:"
-#: src/filewriter/mp3.c:778 src/filewriter/mp3.c:919
-msgid "Auto"
-msgstr ""
-
-#: src/filewriter/mp3.c:800
+#: src/filewriter/mp3.c:788
msgid "(Hz)"
msgstr ""
-#: src/filewriter/mp3.c:812
+#: src/filewriter/mp3.c:795
msgid "Bitrate / Compression ratio:"
-msgstr ""
+msgstr "ç çŽ‡/压缩率:"
-#: src/filewriter/mp3.c:838
+#: src/filewriter/mp3.c:819
msgid "Bitrate (kbps):"
-msgstr ""
+msgstr "ç çŽ‡(kbps):"
-#: src/filewriter/mp3.c:879
+#: src/filewriter/mp3.c:852
msgid "Compression ratio:"
-msgstr ""
+msgstr "压缩率:"
-#: src/filewriter/mp3.c:909
+#: src/filewriter/mp3.c:876
msgid "Audio Mode:"
-msgstr ""
+msgstr "音频模å¼ï¼š"
-#: src/filewriter/mp3.c:924
-msgid "Joint-Stereo"
-msgstr ""
-
-#: src/filewriter/mp3.c:967
+#: src/filewriter/mp3.c:901
msgid "Misc:"
-msgstr ""
+msgstr "其它:"
-#: src/filewriter/mp3.c:978
+#: src/filewriter/mp3.c:912
msgid "Enforce strict ISO complience"
-msgstr ""
+msgstr "强制严格éµä»ŽISO"
-#: src/filewriter/mp3.c:989
+#: src/filewriter/mp3.c:923
msgid "Error protection"
-msgstr ""
-
-#: src/filewriter/mp3.c:1001
-msgid "Adds 16 bit checksum to every frame"
-msgstr ""
+msgstr "错误ä¿æŠ¤"
-#: src/filewriter/mp3.c:1006 src/filewriter/vorbis.c:247
-#: src/modplug/gui/interface.cxx:320
+#: src/filewriter/mp3.c:935 src/filewriter/vorbis.c:243
msgid "Quality"
-msgstr ""
+msgstr "è´¨é‡"
-#: src/filewriter/mp3.c:1018
+#: src/filewriter/mp3.c:945
msgid "Enable VBR/ABR"
-msgstr ""
+msgstr "å¯ç”¨VBR/ABR"
-#: src/filewriter/mp3.c:1030
+#: src/filewriter/mp3.c:955
msgid "Type:"
-msgstr ""
+msgstr "类型:"
-#: src/filewriter/mp3.c:1041
-msgid "Variable bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1053
-msgid "Average bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1067
+#: src/filewriter/mp3.c:988
msgid "VBR Options:"
-msgstr ""
+msgstr "VBR选项:"
-#: src/filewriter/mp3.c:1083
+#: src/filewriter/mp3.c:1004
msgid "Minimum bitrate (kbps):"
-msgstr ""
+msgstr "最å°ç çŽ‡(kbps):"
-#: src/filewriter/mp3.c:1119
+#: src/filewriter/mp3.c:1031
msgid "Maximum bitrate (kbps):"
-msgstr ""
+msgstr "最大ç çŽ‡(kbps):"
-#: src/filewriter/mp3.c:1151
+#: src/filewriter/mp3.c:1054
msgid "Strictly enforce minimum bitrate"
-msgstr ""
-
-#: src/filewriter/mp3.c:1153
-msgid ""
-"For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/"
-"mp3 player)"
-msgstr ""
+msgstr "严格执行最å°ç çŽ‡"
-#: src/filewriter/mp3.c:1166
+#: src/filewriter/mp3.c:1066
msgid "ABR Options:"
-msgstr ""
+msgstr "ABR选项:"
-#: src/filewriter/mp3.c:1176
+#: src/filewriter/mp3.c:1076
msgid "Average bitrate (kbps):"
-msgstr ""
+msgstr "å¹³å‡ç çŽ‡(kbps):"
-#: src/filewriter/mp3.c:1213
+#: src/filewriter/mp3.c:1104
msgid "VBR quality level:"
-msgstr ""
+msgstr "VBRè´¨é‡ç­‰çº§ï¼š"
-#: src/filewriter/mp3.c:1228
-msgid ""
-"highest:0;\n"
-"lowest:9;\n"
-"default:4;"
-msgstr ""
-
-#: src/filewriter/mp3.c:1236
+#: src/filewriter/mp3.c:1123
msgid "Don't write Xing VBR header"
-msgstr ""
+msgstr "ä¸è¦å†™å…¥Xing VBR头"
-#: src/filewriter/mp3.c:1250
+#: src/filewriter/mp3.c:1137
msgid "VBR/ABR"
-msgstr ""
+msgstr "VBR/ABR"
-#: src/filewriter/mp3.c:1262
+#: src/filewriter/mp3.c:1147
msgid "Frame params:"
-msgstr ""
+msgstr "帧å‚数:"
-#: src/filewriter/mp3.c:1274
+#: src/filewriter/mp3.c:1159
msgid "Mark as copyright"
-msgstr ""
+msgstr "标记为版æƒ"
-#: src/filewriter/mp3.c:1285
+#: src/filewriter/mp3.c:1170
msgid "Mark as original"
-msgstr ""
+msgstr "标记为原始文件"
-#: src/filewriter/mp3.c:1297
+#: src/filewriter/mp3.c:1182
msgid "ID3 params:"
-msgstr ""
+msgstr "ID3å‚数:"
-#: src/filewriter/mp3.c:1308
+#: src/filewriter/mp3.c:1193
msgid "Force addition of version 2 tag"
-msgstr ""
+msgstr "强制添加V2标签"
-#: src/filewriter/mp3.c:1318
+#: src/filewriter/mp3.c:1203
msgid "Only add v1 tag"
msgstr "仅添加v1标签"
-#: src/filewriter/mp3.c:1325
+#: src/filewriter/mp3.c:1210
msgid "Only add v2 tag"
msgstr "仅添加v2标签"
-#: src/filewriter/mp3.c:1346
+#: src/filewriter/mp3.c:1231
msgid "Tags"
msgstr "标签"
-#: src/filewriter/vorbis.c:240
+#: src/filewriter/vorbis.c:236
msgid "Vorbis Encoder Configuration"
msgstr "Vorbisç¼–ç å™¨è®¾ç½®"
-#: src/filewriter/vorbis.c:260
+#: src/filewriter/vorbis.c:256
msgid "Quality level (0 - 10):"
-msgstr "è´¨é‡ç­‰çº§(0-10):"
+msgstr "è´¨é‡ç­‰çº§(0-10):"
-#: src/flacng/plugin.c:457
-msgid "FLAC Audio Plugin "
-msgstr "FLAC音频æ’件"
+#: src/flacng/plugin.c:379
+msgid "About FLAC Audio Plugin"
+msgstr "关于FLAC音频æ’件"
-#: src/flacng/plugin.c:458
+#: src/flacng/plugin.c:380
msgid ""
"\n"
"\n"
@@ -2325,19 +1570,15 @@ msgid ""
msgstr ""
"\n"
"\n"
-"最åˆä½œè€…:Ralf Ertzinger <ralf@skytale.net>\n"
+"原作者:Ralf Ertzinger <ralf@skytale.net>\n"
"\n"
"http://www.skytale.net/projects/bmp-flac2/"
-#: src/flacng/plugin.c:464
-msgid "About FLAC Audio Plugin"
-msgstr "关于FLAC音频æ’件"
-
-#: src/gnomeshortcuts/gnomeshortcuts.c:306
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
msgid "About Gnome Shortcut Plugin"
msgstr "关于Gnomeå¿«æ·é”®æ’件"
-#: src/gnomeshortcuts/gnomeshortcuts.c:307
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
msgid ""
"Gnome Shortcut Plugin\n"
"Let's you control the player with Gnome's shortcuts.\n"
@@ -2348,525 +1589,485 @@ msgstr ""
"Gnomeå¿«æ·é”®æ’件\n"
"通过快æ·é”®æŽ§åˆ¶æ’­æ”¾å™¨.\n"
"\n"
-"版æƒæ‰€æœ‰ (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"版æƒæ‰€æœ‰ (C)\n"
+"2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:273
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
msgid "Open Files"
msgstr "打开文件"
-#: src/gntui/fileselector.c:75 src/gntui/gntui.c:272
+#: src/gntui/fileselector.c:75 src/gntui/gntui.c:271
msgid "Add Files"
msgstr "添加文件"
-#: src/gntui/gntui.c:271
+#: src/gntui/gntui.c:270
msgid "Audacious2"
msgstr "Audacious2"
-#: src/gntui/gntui.c:312
+#: src/gntui/gntui.c:311
msgid "gnt interface"
msgstr "gntç•Œé¢"
-#: src/gtkui/actions.c:257 src/skins/ui_main.c:818
-msgid "Can't jump to time when no track is being played.\n"
-msgstr "未开始æ’放时无法跳到时间。\n"
-
-#: src/gtkui/actions.c:272 src/gtkui/ui_manager.c:204
-#: src/gtkui/ui_manager.c:205 src/skins/ui_main.c:833
-#: src/skins/ui_manager.c:410 src/skins/ui_manager.c:411
-msgid "Jump to Time"
-msgstr "跳到时间"
-
-#: src/gtkui/actions.c:289 src/skins/ui_main.c:854
-msgid "minutes:seconds"
-msgstr "分:秒"
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "åºå·"
-#: src/gtkui/actions.c:299 src/skins/ui_main.c:864
-msgid "Track length:"
-msgstr "音轨长度"
-
-#: src/gtkui/actions.c:610 src/skins/ui_playlist.c:648
-#, c-format
-msgid "Error writing playlist \"%s\": %s"
-msgstr "写入播放列表\"%s\"æ—¶å‘生错误: %s"
-
-#: src/gtkui/actions.c:625 src/skins/ui_playlist.c:670
-#, c-format
-msgid "%s already exist. Continue?"
-msgstr "%s已存在,è¦ç»§ç»­å—?"
-
-#: src/gtkui/actions.c:651 src/skins/ui_manager.c:214
-msgid "Export Playlist"
-msgstr "列出播放列表"
+#: src/gtkui/columns.c:36
+msgid "Title"
+msgstr "标题"
-#: src/gtkui/actions.c:723 src/skins/ui_manager.c:211
-msgid "Import Playlist"
-msgstr "导入播放列表"
+#: src/gtkui/columns.c:37
+msgid "Artist"
+msgstr "艺术家"
-#: src/gtkui/ui_gtk.c:72
-#, fuzzy
-msgid "GTK Interface"
-msgstr "gntç•Œé¢"
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "年份"
-#: src/gtkui/ui_gtk.c:281 src/skins/ui_main.c:388
-#, c-format
-msgid "%s - Audacious"
-msgstr "%s - Audacious"
+#: src/gtkui/columns.c:37
+msgid "Album"
+msgstr "专辑"
-#: src/gtkui/ui_gtk.c:287 src/skins/ui_main.c:390 src/skins/ui_main.c:2166
-msgid "Audacious"
-msgstr "Audacious"
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "音轨"
-#: src/gtkui/ui_manager.c:35 src/gtkui/ui_manager.c:36
-#: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
-msgid "Stop after Current Song"
-msgstr "完æˆå½“å‰æ­Œæ›²åŽåœæ­¢"
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "队列ä½ç½®"
-#: src/gtkui/ui_manager.c:38 src/gtkui/ui_manager.c:39
-#: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-msgid "Repeat"
-msgstr "é‡å¤"
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "长度"
-#: src/gtkui/ui_manager.c:41 src/gtkui/ui_manager.c:42
-#: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-msgid "Shuffle"
-msgstr "éšæœº"
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "文件路径"
-#: src/gtkui/ui_manager.c:44 src/gtkui/ui_manager.c:45
-#: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
-msgid "No Playlist Advance"
-msgstr "ç¦æ­¢è‡ªåŠ¨æ’­æ”¾ä¸‹ä¸€é¦–"
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "文件å"
-#: src/gtkui/ui_manager.c:47
-msgid "Show playlists"
-msgstr "显示播放列表"
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "自定标题"
-#: src/gtkui/ui_manager.c:48
-msgid "Show/hide playlists"
-msgstr "显示/éšè—播放列表"
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "比率"
-#: src/gtkui/ui_manager.c:50
-msgid "Show infoarea"
-msgstr "显示信æ¯åŒºåŸŸ"
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "æ€é€‰åˆ—"
-#: src/gtkui/ui_manager.c:51
-msgid "Show/hide infoarea"
-msgstr "显示/éšè—ä¿¡æ¯åŒºåŸŸ"
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "å¯ç”¨ï¼š"
-#: src/gtkui/ui_manager.c:53
-msgid "Show main menu"
-msgstr "显示主èœå•"
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "选项:"
-#: src/gtkui/ui_manager.c:54
-msgid "Show/hide main menu"
-msgstr "显示/éšè—主èœå•"
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "é¢æ¿åœ¨å·¦"
-#: src/gtkui/ui_manager.c:56
-msgid "Show statusbar"
-msgstr ""
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "é¢æ¿åœ¨å³"
-#: src/gtkui/ui_manager.c:57
-#, fuzzy
-msgid "Show/hide statusbar"
-msgstr "显示/éšè—播放列表"
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "é¢æ¿åœ¨ä¸Š"
-#: src/gtkui/ui_manager.c:69 src/gtkui/ui_manager.c:70
-#: src/skins/ui_manager.c:170 src/skins/ui_manager.c:171
-msgid "Pause"
-msgstr "æš‚åœ"
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "é¢æ¿åœ¨ä¸‹"
-#: src/gtkui/ui_manager.c:72 src/gtkui/ui_manager.c:73 src/hotkey/gui.c:73
-#: src/skins/ui_manager.c:173 src/skins/ui_manager.c:174
-msgid "Stop"
-msgstr "åœæ­¢"
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "æ— é¢æ¿"
-#: src/gtkui/ui_manager.c:75 src/gtkui/ui_manager.c:76
-#: src/skins/ui_manager.c:176 src/skins/ui_manager.c:177
-msgid "Previous"
-msgstr "å‰ä¸€é¦–"
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:639
+msgid "Disable"
+msgstr "ç¦ç”¨"
-#: src/gtkui/ui_manager.c:78 src/gtkui/ui_manager.c:79
-#: src/skins/ui_manager.c:179 src/skins/ui_manager.c:180
-msgid "Next"
-msgstr "下一首"
+#: src/gtkui/menus.c:130
+msgid "_Open Files ..."
+msgstr "打开文件(_O) ..."
-#: src/gtkui/ui_manager.c:84 src/skins/ui_manager.c:197
-msgid "Playlist"
-msgstr "播放列表"
+#: src/gtkui/menus.c:131
+msgid "Open _URL ..."
+msgstr "打开URL(_U)..."
-#: src/gtkui/ui_manager.c:86 src/gtkui/ui_manager.c:87
-#: src/skins/ui_manager.c:199 src/skins/ui_manager.c:200
-msgid "New Playlist"
-msgstr "创建播放列表"
+#: src/gtkui/menus.c:132
+msgid "_Add File ..."
+msgstr "添加文件(_A)..."
-#: src/gtkui/ui_manager.c:89 src/gtkui/ui_manager.c:90
-#: src/skins/ui_manager.c:208 src/skins/ui_manager.c:209
-msgid "Delete Playlist"
-msgstr "删除播放列表"
+#: src/gtkui/menus.c:133
+msgid "Add U_RL ..."
+msgstr "添加URL(_R)..."
-#: src/gtkui/ui_manager.c:92
-#, fuzzy
-msgid "Import Playlist ..."
-msgstr "导入播放列表"
+#: src/gtkui/menus.c:135
+msgid "A_bout ..."
+msgstr "关于(_b)"
-#: src/gtkui/ui_manager.c:93 src/skins/ui_manager.c:212
-msgid "Loads a playlist file into the selected playlist."
-msgstr "把列表加载到被选中的播放列表。"
+#: src/gtkui/menus.c:136
+msgid "_Preferences ..."
+msgstr "首选项(_P)..."
-#: src/gtkui/ui_manager.c:95
-#, fuzzy
-msgid "Export Playlist ..."
-msgstr "列出播放列表"
+#: src/gtkui/menus.c:137 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "退出(_Q)"
-#: src/gtkui/ui_manager.c:96 src/skins/ui_manager.c:215
-msgid "Saves the selected playlist."
-msgstr "ä¿å­˜è¢«é€‰ä¸­çš„播放列表"
+#: src/gtkui/menus.c:140
+msgid "_Play"
+msgstr "播放(_P)"
-#: src/gtkui/ui_manager.c:98 src/skins/ui_manager.c:217
-msgid "Save All Playlists"
-msgstr "ä¿å­˜æ‰€æœ‰æ’­æ”¾åˆ—表"
+#: src/gtkui/menus.c:141
+msgid "Paus_e"
+msgstr "æš‚åœ(_e)"
-#: src/gtkui/ui_manager.c:99 src/skins/ui_manager.c:218
-msgid ""
-"Saves all the playlists that are open. Note that this is done automatically "
-"when Audacious quits."
-msgstr "ä¿å­˜æ‰€æœ‰å·²æ‰“开的播放列表(其实Audacious退出时是会自动ä¿å­˜çš„)。"
+#: src/gtkui/menus.c:142
+msgid "_Stop"
+msgstr "åœæ­¢(_S)"
-#: src/gtkui/ui_manager.c:103
-#, fuzzy
-msgid "Refresh"
-msgstr "刷新(_R)"
+#: src/gtkui/menus.c:143
+msgid "Pre_vious"
+msgstr "上一首(_v)"
-#: src/gtkui/ui_manager.c:104 src/skins/ui_manager.c:223
-msgid "Refreshes metadata associated with a playlist entry."
-msgstr "刷新播放列表的歌曲信æ¯"
+#: src/gtkui/menus.c:144
+msgid "_Next"
+msgstr "下一首(_N)"
-#: src/gtkui/ui_manager.c:107
-#, fuzzy
-msgid "Playlist Manager"
-msgstr "列表管ç†å™¨"
+#: src/gtkui/menus.c:146
+msgid "_Repeat"
+msgstr "é‡å¤(_R)"
-#: src/gtkui/ui_manager.c:108 src/skins/ui_manager.c:227
-msgid "Opens the playlist manager."
-msgstr "打开播放列表管ç†å™¨"
+#: src/gtkui/menus.c:147
+msgid "S_huffle"
+msgstr "éšæœº(_h)"
-#: src/gtkui/ui_manager.c:111
-#, fuzzy
-msgid "Add URL ..."
-msgstr "添加文件..."
+#: src/gtkui/menus.c:148
+msgid "N_o Playlist Advance"
+msgstr "ç¦æ­¢è‡ªåŠ¨æ’­æ”¾ä¸‹ä¸€é¦–(_o)"
-#: src/gtkui/ui_manager.c:112 src/skins/ui_manager.c:237
-msgid "Adds a remote track to the playlist."
-msgstr "添加远程文件到播放列表"
+#: src/gtkui/menus.c:149
+msgid "Stop _After This Song"
+msgstr "完æˆåŽåœæ­¢(_A)"
-#: src/gtkui/ui_manager.c:115
-#, fuzzy
-msgid "Add Files ..."
-msgstr "添加文件..."
+#: src/gtkui/menus.c:151 src/gtkui/menus.c:209
+msgid "Song _Info ..."
+msgstr "歌曲信æ¯(_I)..."
-#: src/gtkui/ui_manager.c:116 src/skins/ui_manager.c:241
-msgid "Adds files to the playlist."
-msgstr "添加文件到播放列表。"
+#: src/gtkui/menus.c:152
+msgid "Jump to _Time ..."
+msgstr "跳到时间(_T)..."
-#: src/gtkui/ui_manager.c:119 src/skins/ui_manager.c:264
-msgid "Remove All"
-msgstr "删除全部"
+#: src/gtkui/menus.c:153
+msgid "_Jump to Song ..."
+msgstr "跳到歌曲(_J)..."
-#: src/gtkui/ui_manager.c:120 src/skins/ui_manager.c:265
-msgid "Removes all entries from the playlist."
-msgstr "从播放列表中删除所有æ¡ç›®ã€‚"
+#: src/gtkui/menus.c:156
+msgid "By Track _Number"
+msgstr "按音轨åºå·(_N)"
-#: src/gtkui/ui_manager.c:123 src/skins/ui_manager.c:290
-msgid "Remove Unselected"
-msgstr "删除未被选中的"
+#: src/gtkui/menus.c:157
+msgid "By _Title"
+msgstr "按标题(_T)"
-#: src/gtkui/ui_manager.c:124 src/skins/ui_manager.c:291
-msgid "Remove unselected entries from the playlist."
-msgstr "从播放列表中删除未被选中的æ¡ç›®ã€‚"
+#: src/gtkui/menus.c:158
+msgid "By _Artist"
+msgstr "按艺术家(_A)"
-#: src/gtkui/ui_manager.c:127 src/skins/ui_manager.c:294
-msgid "Remove Selected"
-msgstr "删除被选中的"
+#: src/gtkui/menus.c:159
+msgid "By A_lbum"
+msgstr "按专辑(_l)"
-#: src/gtkui/ui_manager.c:128 src/skins/ui_manager.c:295
-msgid "Remove selected entries from the playlist."
-msgstr "从播放列表中删除被选中的æ¡ç›®ã€‚"
+#: src/gtkui/menus.c:160
+msgid "By Release _Date"
+msgstr "按å‘表日期(_D)"
-#: src/gtkui/ui_manager.c:131
-#, fuzzy
-msgid "Sort"
-msgstr "端å£"
+#: src/gtkui/menus.c:161
+msgid "By _File Path"
+msgstr "按文件路径(_F)"
-#: src/gtkui/ui_manager.c:132 src/skins/ui_manager.c:330
-#: src/skins/ui_manager.c:360
-msgid "By Track Number"
-msgstr "æ ¹æ®éŸ³è½¨å·ç "
+#: src/gtkui/menus.c:162
+msgid "By _Custom Title"
+msgstr "按自定义标题(_C)"
-#: src/gtkui/ui_manager.c:134 src/skins/ui_manager.c:278
-#: src/skins/ui_manager.c:306 src/skins/ui_manager.c:336
-msgid "By Title"
-msgstr "æ ¹æ®æ ‡é¢˜"
+#: src/gtkui/menus.c:164
+msgid "R_everse Order"
+msgstr "å转(_e)"
-#: src/gtkui/ui_manager.c:136 src/skins/ui_manager.c:314
-#: src/skins/ui_manager.c:344
-msgid "By Artist"
-msgstr "æ ¹æ®è‰ºæœ¯å®¶"
+#: src/gtkui/menus.c:165
+msgid "_Random Order"
+msgstr "éšæœº(_R)"
-#: src/gtkui/ui_manager.c:138 src/skins/ui_manager.c:310
-#: src/skins/ui_manager.c:340
-msgid "By Album"
-msgstr "æ ¹æ®ä¸“辑"
+#: src/gtkui/menus.c:168 src/gtkui/menus.c:211
+msgid "_Refresh"
+msgstr "刷新(_R)"
-#: src/gtkui/ui_manager.c:140
-#, fuzzy
-msgid "By File Path"
-msgstr "æ ¹æ®æ–‡ä»¶å"
+#: src/gtkui/menus.c:170
+msgid "_Sort"
+msgstr "排åº(_S)"
-#: src/gtkui/ui_manager.c:142
-#, fuzzy
-msgid "Reverse Order"
-msgstr "å转列表"
+#: src/gtkui/menus.c:172
+msgid "_New"
+msgstr "新建(_N)"
-#: src/gtkui/ui_manager.c:147
-msgid "Output"
-msgstr "输出"
+#: src/gtkui/menus.c:173 src/gtkui/menus.c:222
+msgid "_Close"
+msgstr "关闭(_C)"
-#: src/gtkui/ui_manager.c:149 src/modplug/gui/interface.cxx:572
-msgid "Effects"
-msgstr "音效"
+#: src/gtkui/menus.c:175
+msgid "_Import ..."
+msgstr "导入(_I)..."
-#: src/gtkui/ui_manager.c:151
-msgid "Equalizer"
-msgstr "å‡è¡¡å™¨"
+#: src/gtkui/menus.c:176
+msgid "_Export ..."
+msgstr "导出(_E)..."
-#: src/gtkui/ui_manager.c:156 src/skins/ui_manager.c:232
-msgid "View"
-msgstr "外观"
+#: src/gtkui/menus.c:178
+msgid "_Playlist Manager ..."
+msgstr "播放列表管ç†å™¨(_P)..."
-#: src/gtkui/ui_manager.c:157 src/skins/ui_manager.c:233
-#, fuzzy
-msgid "Interface"
-msgstr "gntç•Œé¢"
+#: src/gtkui/menus.c:179
+msgid "_Queue Manager ..."
+msgstr "队列管ç†å™¨(_Q)..."
-#: src/gtkui/ui_manager.c:164 src/skins/ui_manager.c:370
-msgid "File"
-msgstr "文件"
+#: src/gtkui/menus.c:182
+msgid "Volume _Up"
+msgstr "调高音é‡(_U)"
-#: src/gtkui/ui_manager.c:167
-msgid "Components"
-msgstr "组件"
+#: src/gtkui/menus.c:183
+msgid "Volume _Down"
+msgstr "调低音é‡(_D)"
-#: src/gtkui/ui_manager.c:169 src/gtkui/ui_manager.c:172
-#: src/skins/ui_manager.c:375 src/skins/ui_manager.c:378
-msgid "View Track Details"
-msgstr "查看音轨信æ¯"
+#: src/gtkui/menus.c:185
+msgid "_Equalizer"
+msgstr "å‡è¡¡å™¨(_E)"
-#: src/gtkui/ui_manager.c:170 src/gtkui/ui_manager.c:173
-#: src/skins/ui_manager.c:376 src/skins/ui_manager.c:379
-msgid "View track details"
-msgstr "查看音轨信æ¯"
+#: src/gtkui/menus.c:187
+msgid "E_ffects"
+msgstr "音效(_f)"
-#: src/gtkui/ui_manager.c:175 src/gtkui/ui_manager.c:176
-#: src/skins/ui_manager.c:381 src/skins/ui_manager.c:382
-msgid "About Audacious"
-msgstr "关于Audacious"
+#: src/gtkui/menus.c:190
+msgid "_Interface"
+msgstr "ç•Œé¢(_I)"
-#: src/gtkui/ui_manager.c:178
-#, fuzzy
-msgid "Open Files ..."
-msgstr "打开文件"
+#: src/gtkui/menus.c:192
+msgid "Show _Menu Bar"
+msgstr "显示èœå•(_M)"
-#: src/gtkui/ui_manager.c:179 src/skins/ui_manager.c:385
-msgid "Load and play a file"
-msgstr "加载并播放文件"
+#: src/gtkui/menus.c:193
+msgid "Show I_nfo Bar"
+msgstr "显示信æ¯åŒºåŸŸ(_n)"
-#: src/gtkui/ui_manager.c:181
-msgid "Open URL ..."
-msgstr ""
+#: src/gtkui/menus.c:194
+msgid "Show _Status Bar"
+msgstr "显示状æ€æ (_S)"
-#: src/gtkui/ui_manager.c:182 src/skins/ui_manager.c:388
-msgid "Play media from the selected location"
-msgstr "播放被选中ä½ç½®çš„文件"
+#: src/gtkui/menus.c:196
+msgid "Show Column _Headers"
+msgstr "显示表头(_H)"
-#: src/gtkui/ui_manager.c:184 src/skins/ui_manager.c:390
-msgid "Plugin services"
-msgstr "æ’件æœåŠ¡"
+#: src/gtkui/menus.c:197
+msgid "Choose _Columns ..."
+msgstr "æ€é€‰åˆ—(_C)..."
-#: src/gtkui/ui_manager.c:186 src/skins/ui_manager.c:392
-msgid "Preferences"
-msgstr "首选项"
+#: src/gtkui/menus.c:198
+msgid "Scrol_l on Song Change"
+msgstr "歌曲改å˜æ—¶æ»šåŠ¨(_l)"
-#: src/gtkui/ui_manager.c:187 src/skins/ui_manager.c:393
-msgid "Open preferences window"
-msgstr "打开首选项窗å£"
+#: src/gtkui/menus.c:201
+msgid "_File"
+msgstr "文件(_F)"
-#: src/gtkui/ui_manager.c:189 src/skins/ui_manager.c:395
-msgid "_Quit"
-msgstr "退出(_Q)"
+#: src/gtkui/menus.c:202
+msgid "_Playback"
+msgstr "回放(_P)"
-#: src/gtkui/ui_manager.c:190 src/skins/ui_manager.c:396
-msgid "Quit Audacious"
-msgstr "退出Audacious"
+#: src/gtkui/menus.c:203
+msgid "P_laylist"
+msgstr "播放列表(_l)"
-#: src/gtkui/ui_manager.c:192 src/gtkui/ui_manager.c:193
-#: src/skins/ui_manager.c:398 src/skins/ui_manager.c:399
-msgid "Set A-B"
-msgstr ""
+#: src/gtkui/menus.c:204 src/gtkui/menus.c:218
+msgid "_Services"
+msgstr "æœåŠ¡(_S)"
-#: src/gtkui/ui_manager.c:195 src/gtkui/ui_manager.c:196
-#: src/skins/ui_manager.c:401 src/skins/ui_manager.c:402
-msgid "Clear A-B"
-msgstr ""
+#: src/gtkui/menus.c:205
+msgid "_Output"
+msgstr "输出(_O)"
-#: src/gtkui/ui_manager.c:198 src/gtkui/ui_manager.c:199
-#: src/skins/ui_manager.c:404 src/skins/ui_manager.c:405
-msgid "Jump to Playlist Start"
-msgstr "跳到被选中列表并播放"
+#: src/gtkui/menus.c:206
+msgid "_View"
+msgstr "外观(_V)"
-#: src/gtkui/ui_manager.c:201 src/gtkui/ui_manager.c:202 src/hotkey/gui.c:80
-#: src/skins/ui_manager.c:407 src/skins/ui_manager.c:408
-msgid "Jump to File"
-msgstr "跳到文件"
+#: src/gtkui/menus.c:210
+msgid "_Queue/Unqueue"
+msgstr "入队ï¼å‡ºåˆ—(_Q)"
-#: src/gtkui/ui_manager.c:207 src/skins/ui_manager.c:413
-msgid "Queue Toggle"
-msgstr "队列切æ¢"
+#: src/gtkui/menus.c:213
+msgid "Cu_t"
+msgstr "剪切(_t)"
-#: src/gtkui/ui_manager.c:208 src/skins/ui_manager.c:414
-msgid "Enables/disables the entry in the playlist's queue."
-msgstr "å¯ç”¨/ç¦ç”¨æ’­æ”¾é˜Ÿåˆ—çš„æ¡ç›®"
+#: src/gtkui/menus.c:214
+msgid "_Copy"
+msgstr "å¤åˆ¶(_C)"
-#: src/gtkui/ui_manager.c:211 src/skins/ui_manager.c:417
-msgid "Copy"
-msgstr "å¤åˆ¶"
+#: src/gtkui/menus.c:215
+msgid "_Paste"
+msgstr "粘贴(_P)"
-#: src/gtkui/ui_manager.c:214 src/skins/ui_manager.c:419
-msgid "Cut"
-msgstr "剪切"
+#: src/gtkui/menus.c:216
+msgid "Select _All"
+msgstr "选中全部(_A)"
-#: src/gtkui/ui_manager.c:217 src/skins/ui_manager.c:421
-msgid "Paste"
-msgstr "粘贴"
+#: src/gtkui/menus.c:221
+msgid "_Rename"
+msgstr "é‡å‘½å(_R)"
-#: src/gtkui/ui_manager.c:220 src/skins/ui_manager.c:254
-msgid "Select All"
-msgstr "选中全部"
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "GTKç•Œé¢"
-#: src/gtkui/ui_manager.c:221 src/skins/ui_manager.c:255
-msgid "Selects all of the playlist entries."
-msgstr "选中播放列表中的所有æ¡ç›®ã€‚"
+#: src/gtkui/ui_gtk.c:154 src/skins/ui_main.c:302
+#, c-format
+msgid "%s - Audacious"
+msgstr ""
-#: src/gtkui/ui_manager.c:224 src/skins/ui_manager.c:258
-msgid "Select None"
-msgstr "å–消选中"
+#: src/gtkui/ui_gtk.c:160 src/skins/ui_main.c:304 src/skins/ui_main.c:1499
+msgid "Audacious"
+msgstr ""
-#: src/gtkui/ui_manager.c:225 src/skins/ui_manager.c:259
-msgid "Deselects all of the playlist entries."
-msgstr "å–消对播放列表的选择"
+#: src/gtkui/ui_gtk.c:206 src/skins/plugin.c:185
+msgid "Error"
+msgstr "错误"
-#: src/gtkui/ui_statusbar.c:91 src/skins/ui_main.c:609
+#: src/gtkui/ui_statusbar.c:102 src/skins/ui_main.c:459
msgid "mono"
msgstr "å•å£°é“"
-#: src/gtkui/ui_statusbar.c:94 src/skins/ui_main.c:608
+#: src/gtkui/ui_statusbar.c:104 src/skins/ui_main.c:458
msgid "stereo"
-msgstr "å•ä½“声"
+msgstr "立体声"
-#: src/gtkui/ui_statusbar.c:97
-#, fuzzy, c-format
-msgid "%d channels"
-msgstr "声é“"
+#: src/gtkui/ui_statusbar.c:106
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] "%d声é“"
-#: src/gtkui/ui_statusbar.c:101
+#: src/gtkui/ui_statusbar.c:121
#, c-format
-msgid "%s: %d kbps, %d Hz, %s"
+msgid "%d kbps"
msgstr ""
-#: src/hotkey/gui.c:70
+#: src/hotkey/gui.c:71
msgid "Previous Track"
-msgstr "å‰ä¸€é¦–"
+msgstr "上一首"
-#: src/hotkey/gui.c:72
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "播放"
+
+#: src/hotkey/gui.c:73
msgid "Pause/Resume"
msgstr "æš‚åœ/继续"
-#: src/hotkey/gui.c:74
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "åœæ­¢"
+
+#: src/hotkey/gui.c:75
msgid "Next Track"
msgstr "下一首"
-#: src/hotkey/gui.c:75
+#: src/hotkey/gui.c:76
msgid "Forward 5 Seconds"
msgstr "快进5秒"
-#: src/hotkey/gui.c:76
+#: src/hotkey/gui.c:77
msgid "Rewind 5 Seconds"
msgstr "快退5秒"
-#: src/hotkey/gui.c:77
+#: src/hotkey/gui.c:78
msgid "Mute"
msgstr "é™éŸ³"
-#: src/hotkey/gui.c:78
+#: src/hotkey/gui.c:79
msgid "Volume Up"
msgstr "调高音é‡"
-#: src/hotkey/gui.c:79
+#: src/hotkey/gui.c:80
msgid "Volume Down"
msgstr "调低音é‡"
-#: src/hotkey/gui.c:81
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to File"
+msgstr "跳到文件"
+
+#: src/hotkey/gui.c:82
msgid "Toggle Player Windows"
msgstr "播放窗å£åˆ‡æ¢"
-#: src/hotkey/gui.c:82
+#: src/hotkey/gui.c:83
msgid "Show On-Screen-Display"
msgstr "显示On-Screen-Display"
-#: src/hotkey/gui.c:92
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "é‡å¤"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "éšæœº"
+
+#: src/hotkey/gui.c:95
msgid "(none)"
msgstr "(æ— )"
-#: src/hotkey/gui.c:229
+#: src/hotkey/gui.c:232
msgid ""
"It is not recommended to bind the primary mouse buttons without "
"modificators.\n"
"\n"
"Do you want to continue?"
-msgstr ""
-"绑定主鼠标键是ä¸æŽ¨èçš„åšæ³•ã€‚\n"
-"è¦ç»§ç»­å—?"
+msgstr "并ä¸å»ºè®®ç»‘定鼠标主键。è¦ç»§ç»­å—?"
-#: src/hotkey/gui.c:231
+#: src/hotkey/gui.c:234
msgid "Binding mouse buttons"
-msgstr "鼠标键绑定"
+msgstr "绑定鼠标按键"
-#: src/hotkey/gui.c:381
+#: src/hotkey/gui.c:384
msgid "Global Hotkey Plugin Configuration"
msgstr "全局热键æ’件设置"
-#: src/hotkey/gui.c:397
+#: src/hotkey/gui.c:400
msgid ""
"Press a key combination inside a text field.\n"
"You can also bind mouse buttons."
msgstr "请在文本区按下è¦ç»‘定的组åˆé”®ï¼Œä½ äº¦å¯ä»¥ç»‘定鼠标键"
-#: src/hotkey/gui.c:402
+#: src/hotkey/gui.c:405
msgid "Hotkeys:"
msgstr "热键:"
-#: src/hotkey/gui.c:421
+#: src/hotkey/gui.c:424
msgid "<b>Action:</b>"
msgstr "<b>动作:</b>"
-#: src/hotkey/gui.c:429
+#: src/hotkey/gui.c:432
msgid "<b>Key Binding:</b>"
-msgstr "<b>é”®ä½ç»‘定:</b>"
+msgstr "<b>é”®ä½ç»‘定:</b>"
-#: src/hotkey/gui.c:660
+#: src/hotkey/gui.c:663
msgid "About Global Hotkey Plugin"
msgstr "关于全局热键æ’件"
-#: src/hotkey/gui.c:661
+#: src/hotkey/gui.c:664
msgid ""
"Global Hotkey Plugin\n"
"Control the player with global key combinations or multimedia keys.\n"
@@ -2883,41 +2084,46 @@ msgid ""
msgstr ""
"全局热键æ’件\n"
"通过组åˆé”®æˆ–多媒体键控制播放器。\n"
-"版æƒæ‰€æœ‰ (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"版æƒæ‰€æœ‰ (C)\n"
+"2007-2008\n"
+"Sascha Hlusiak <contact@saschahlusiak.de>\n"
"\n"
"其它贡献者:\n"
-"版æƒæ‰€æœ‰ (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
-"版æƒæ‰€æœ‰ (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
-"\t\t\tBryn Davies <curious@ihug.com.au>\n"
-"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
-"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"版æƒæ‰€æœ‰ (C)\n"
+"2006-2007\n"
+"Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"2000-2002\n"
+"Ville Syrjälä <syrjala@sci.fi>\n"
+"Bryn Davies <curious@ihug.com.au>\n"
+"Jonathan A. Davis <davis@jdhouse.org>\n"
+"Jeremy Tan <nsx@nsx.homeip.net>\n"
"\n"
-#: src/jack/configure.c:71
+#: src/jack/configure.c:66
msgid "Connect to all available jack ports"
msgstr "连接到所有å¯ç”¨çš„Jack端å£"
-#: src/jack/configure.c:78
+#: src/jack/configure.c:73
msgid "Connect only the output ports"
msgstr "仅连接到输出端å£"
-#: src/jack/configure.c:85
+#: src/jack/configure.c:80
msgid "Connect to no ports"
msgstr "ä¸è¿žæŽ¥åˆ°ä»»ä½•ç«¯å£"
-#: src/jack/configure.c:103
+#: src/jack/configure.c:98
msgid "jack Plugin configuration"
msgstr "Jackæ’件设置"
-#: src/jack/configure.c:121
+#: src/jack/configure.c:116
msgid "Connection mode:"
msgstr "连接模å¼ï¼š"
-#: src/jack/configure.c:133
+#: src/jack/configure.c:128
msgid "Enable debug printing"
msgstr "å¯ç”¨è°ƒè¯•è¾“出"
-#: src/jack/jack.c:437
+#: src/jack/jack.c:422
msgid ""
"XMMS jack Driver 0.17\n"
"\n"
@@ -2934,145 +2140,79 @@ msgstr ""
"\n"
"Audacious版由Giacomo Lozito(develia.org)移æ¤"
-#: src/jack/jack.c:442
+#: src/jack/jack.c:427
msgid "About JACK Output Plugin 0.17"
msgstr "关于JACK输出æ’件0.17"
-#: src/ladspa/ladspa.c:824
-msgid "This LADSPA plugin has no user controls"
-msgstr "LADSPAæ’件未被其它人所用"
+#: src/ladspa/plugin.c:410
+msgid "About LADSPA Host"
+msgstr ""
-#: src/ladspa/ladspa.c:865 src/ladspa/ladspa.c:952
-msgid "Name"
-msgstr "åå­—"
+#: src/ladspa/plugin.c:511
+#, c-format
+msgid "%s Settings"
+msgstr "%s 设置"
-#: src/ladspa/ladspa.c:952
-msgid "UID"
-msgstr "UID"
+#: src/ladspa/plugin.c:579
+msgid "LADSPA Host Settings"
+msgstr "LADSPA主机设置"
-#: src/ladspa/ladspa.c:1029
-msgid "Installed plugins"
-msgstr "已安装æ’件"
+#: src/ladspa/plugin.c:588
+msgid "Module paths:"
+msgstr "模å—路径:"
-#: src/ladspa/ladspa.c:1037
-msgid "Running plugins"
-msgstr "è¿è¡Œä¸­çš„æ’件"
+#: src/ladspa/plugin.c:593
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
-#: src/ladspa/ladspa.c:1052
-msgid "Add"
-msgstr "添加"
+#: src/ladspa/plugin.c:609
+msgid "Available plugins:"
+msgstr "å¯ç”¨æ’件:"
-#: src/ladspa/ladspa.c:1055
-msgid "Remove"
-msgstr "删除"
-
-#: src/ladspa/ladspa.c:1066
-msgid "LADSPA Plugin Catalog"
-msgstr "LDASPAæ’件分类"
+#: src/ladspa/plugin.c:621
+msgid "Enable"
+msgstr "å¯ç”¨"
-#: src/lirc/about.c:63
-msgid "About LIRC Audacious Plugin"
-msgstr "关于LIRC Audaciousæ’件"
+#: src/ladspa/plugin.c:627
+msgid "Enabled plugins:"
+msgstr "å·²å¯ç”¨æ’件:"
-#: src/lirc/about.c:90
-msgid "LIRC Plugin "
-msgstr "LIRCæ’件"
+#: src/ladspa/plugin.c:642
+msgid "Settings"
+msgstr "设置"
-#: src/lirc/about.c:92
+#: src/lyricwiki/lyricwiki.c:227
msgid ""
"\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n"
-"\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"
+"Looking for lyrics..."
msgstr ""
"\n"
-"一个让你通过LIRC控制Audaciousçš„å°æ’件。\n"
-"ç”±Tony Vroon <chainsaw@gentoo.org>用XMMS LIRCæ’件为Audacious进行移æ¤ã€‚\n"
-"XMMS LIRCæ’件作者:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"ä½ å¯ä»¥åœ¨http://lirc.org上找到更多关于LIRCçš„ä¿¡æ¯"
-
-#: src/lirc/interface.c:37
-msgid "LIRC plugin settings"
-msgstr "LIRCæ’件设置"
-
-#: src/lirc/interface.c:61
-msgid "Reconnect to LIRC server"
-msgstr "é‡æ–°è¿žæŽ¥åˆ°LIRCæœåŠ¡å™¨"
-
-#: src/lirc/interface.c:68
-msgid "Timeout before reconnecting (seconds): "
-msgstr "超时åŽå°è¯•é‡æ–°è¿žæŽ¥(秒):"
-
-#: src/lirc/interface.c:75
-msgid "Reconnect"
-msgstr "é‡æ–°è¿žæŽ¥"
-
-#: src/lirc/interface.c:79
-msgid "Connection"
-msgstr "连接"
-
-#: src/lirc/lirc.c:82
-#, c-format
-msgid "%s: could not init LIRC support\n"
-msgstr "%s: 无法åˆå§‹åŒ–LIRCæœåŠ¡\n"
+"正在æœç´¢æ­Œè¯..."
-#: src/lirc/lirc.c:90
-#, c-format
+#: src/lyricwiki/lyricwiki.c:250
msgid ""
-"%s: could not read LIRC config file\n"
-"%s: please read the documentation of LIRC\n"
-"%s: how to create a proper config file\n"
-msgstr ""
-"%s: 未能读å–LIRC的设置文件\n"
-"%s: 请阅读LIRC相关文档\n"
-"%s: 并创建正确的设置文件\n"
-
-#: src/lirc/lirc.c:117
-#, c-format
-msgid "%s: trying to reconnect...\n"
-msgstr "%s: æ­£å°è¯•é‡æ–°è¿žæŽ¥...\n"
-
-#: src/lirc/lirc.c:332
-#, c-format
-msgid "%s: unknown command \"%s\"\n"
-msgstr "%s: 未知指令 \"%s\"\n"
-
-#: src/lirc/lirc.c:342
-#, c-format
-msgid "%s: disconnected from LIRC\n"
-msgstr "%s: 已从LIRC上断开连接\n"
-
-#: src/lirc/lirc.c:346
-#, c-format
-msgid "%s: will try reconnect every %d seconds...\n"
-msgstr "%s: å°è¯•æ¯%d秒é‡æ–°è¿žæŽ¥ä¸€æ¬¡...\n"
-
-#: src/lyricwiki/lyricwiki.c:244
-msgid "LyricWiki"
+"\n"
+"Connecting to lyrics.wikia.com..."
msgstr ""
+"\n"
+"正在连接到lyrics.wikia.com..."
-#: src/lyricwiki/lyricwiki.c:337
-#, fuzzy
+#: src/lyricwiki/lyricwiki.c:338
msgid ""
"\n"
"No lyrics were found."
-msgstr "未找到设备ï¼"
+msgstr ""
+"\n"
+"未找到相关歌è¯ã€‚"
-#: src/metronom/metronom.c:90
+#: src/metronom/metronom.c:85
msgid "About Metronom"
msgstr "关于Metronom"
-#: src/metronom/metronom.c:91
+#: src/metronom/metronom.c:86
msgid ""
"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
"\n"
@@ -3081,345 +2221,146 @@ msgid ""
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
msgstr ""
-#: src/metronom/metronom.c:145
+#: src/metronom/metronom.c:143
#, c-format
msgid "Tact generator: %d bpm"
msgstr ""
-#: src/metronom/metronom.c:147
+#: src/metronom/metronom.c:145
#, c-format
msgid "Tact generator: %d bpm %d/%d"
msgstr ""
-#: src/modplug/gui/interface.cxx:137
-msgid "ModPlug Configuration"
-msgstr "ModPlug设置"
-
-#: src/modplug/gui/interface.cxx:174
-msgid "16 bit"
-msgstr ""
+#: src/mixer/plugin.c:63
+msgid "About Channel Mixer"
+msgstr "关于通é“æ··åˆå™¨"
-#: src/modplug/gui/interface.cxx:181
-msgid "8 bit"
-msgstr ""
+#: src/mixer/plugin.c:92
+msgid "Channel Mixer Settings"
+msgstr "通é“æ··åˆå™¨è®¾ç½®"
-#: src/modplug/gui/interface.cxx:212
-msgid "Mono (downmix)"
-msgstr "å•éŸ³é“(downmix)"
+#: src/mixer/plugin.c:101
+msgid "Output channels:"
+msgstr "输出通é“:"
-#: src/modplug/gui/interface.cxx:241
-msgid "Nearest (fastest)"
-msgstr "最接近(最快)"
-
-#: src/modplug/gui/interface.cxx:248
-msgid "Linear (fast)"
-msgstr "线性(快速)"
-
-#: src/modplug/gui/interface.cxx:255
-msgid "Spline (good quality)"
-msgstr ""
+#: src/mixer/plugin.c:111
+msgid "Changes take effect at the next song change."
+msgstr "修改将在下一首歌生效。"
-#: src/modplug/gui/interface.cxx:262
-msgid "8-tap Fir (extremely high quality)"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:286
-msgid "96 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:293
-msgid "48 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:300
-msgid "44 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:307
-msgid "22 kHz"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:315
-msgid "Sampling Rate"
-msgstr "å–样率"
-
-#: src/modplug/gui/interface.cxx:349 src/modplug/gui/interface.cxx:411
-#: src/modplug/gui/interface.cxx:477 src/modplug/gui/interface.cxx:539
-msgid "Enable"
-msgstr "å¯ç”¨"
-
-#: src/modplug/gui/interface.cxx:378 src/modplug/gui/interface.cxx:506
-msgid "Depth"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:386 src/modplug/gui/interface.cxx:514
-msgid "Delay"
-msgstr "延时"
-
-#: src/modplug/gui/interface.cxx:394
-msgid "Reverb"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:440
-msgid "Amount"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:448
-msgid "Range"
-msgstr "范围"
-
-#: src/modplug/gui/interface.cxx:456
-msgid "Bass Boost"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:522 src/mpg123/mpg123.c:174
+#: src/mpg123/mpg123.c:183
msgid "Surround"
-msgstr "围绕音"
-
-#: src/modplug/gui/interface.cxx:561
-msgid ""
-"Note: Setting the preamp\n"
-"too high may cause clipping\n"
-"(annoying clicks and pops)!"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:567
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "Preamp"
-msgstr "å‰ç½®æ”¾å¤§"
-
-#: src/modplug/gui/interface.cxx:601
-msgid "Use Filename as Song Title"
-msgstr "用文件å作为歌曲标题"
-
-#: src/modplug/gui/interface.cxx:606
-msgid "Fast Playlist Info"
-msgstr "快速播放列表信æ¯"
-
-#: src/modplug/gui/interface.cxx:617
-msgid "Noise Reduction"
-msgstr "é™å™ª"
-
-#: src/modplug/gui/interface.cxx:623
-msgid "Play Amiga MOD"
-msgstr "播放Amiga MOD"
-
-#: src/modplug/gui/interface.cxx:646
-msgid "Don't loop"
-msgstr "ä¸è¦å¾ªçŽ¯"
-
-#: src/modplug/gui/interface.cxx:658
-msgid "Loop"
-msgstr "循环"
-
-#: src/modplug/gui/interface.cxx:671
-msgid "time(s)"
-msgstr "时间(s)"
-
-#: src/modplug/gui/interface.cxx:677
-msgid "Loop forever"
-msgstr "æ— é™å¾ªçŽ¯"
-
-#: src/modplug/gui/interface.cxx:684
-msgid "Looping"
-msgstr "循环"
-
-#: src/modplug/gui/interface.cxx:859
-msgid "MOD Info"
-msgstr "MODä¿¡æ¯"
-
-#: src/modplug/gui/interface.cxx:878
-msgid ""
-"Filename:\n"
-"Title:\n"
-"Type:\n"
-"Length:\n"
-"Speed:\n"
-"Tempo:\n"
-"Samples:\n"
-"Instruments:\n"
-"Patterns:\n"
-"Channels:"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:883
-msgid ""
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---\n"
-"---"
-msgstr ""
-
-#: src/modplug/gui/interface.cxx:913
-msgid "Samples"
-msgstr "å–æ ·"
-
-#: src/modplug/gui/interface.cxx:938
-msgid "Instruments"
-msgstr "ä¹å™¨"
-
-#: src/modplug/gui/interface.cxx:959
-msgid "Message"
-msgstr "ä¿¡æ¯"
-
-#: src/modplug/gui/main.cxx:51
-msgid "Modplug Input Plugin for Audacious ver"
-msgstr "Audaciousçš„Modplug输入æ’件"
-
-#: src/modplug/gui/main.cxx:52
-msgid ""
-"\n"
-"Modplug sound engine written by Olivier Lapicque.\n"
-"XMMS interface for Modplug by Kenton Varda.\n"
-"(c)2000 Olivier Lapicque and Kenton Varda.\n"
-"Updates and maintenance by Konstanty Bialkowski.\n"
-"Ported to BMP by Theofilos Intzoglou."
-msgstr ""
-
-#: src/modplug/gui/main.cxx:55
-msgid "About Modplug"
-msgstr "关于Modplug"
+msgstr "环绕音"
-#: src/modplug/gui/support.cxx:90 src/modplug/gui/support.cxx:114
-#: src/sid/xs_glade.c:90 src/sid/xs_glade.c:114
-#, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "无法找到pixmap文件: %s"
-
-#: src/mtp_up/mtp.c:35
-msgid "Upload selected track(s)"
-msgstr "上传选中的文件"
-
-#: src/mtp_up/mtp.c:291
+#: src/mtp_up/mtp.c:298
msgid "Upload in progress..."
msgstr "正在上传..."
-#: src/mtp_up/mtp.c:300
-msgid "MTP device handler"
-msgstr "MTP设备å¥æŸ„"
+#: src/mtp_up/mtp.c:310
+msgid "Upload to MTP Device"
+msgstr "正上传到MTP设备 "
-#: src/mtp_up/mtp.c:304
-msgid "Disconnect the device"
-msgstr "正在断开与设备的连接"
+#: src/mtp_up/mtp.c:311
+msgid "Disconnect MTP Device"
+msgstr "断开与MTP设备的连接"
-#: src/null/null.c:63
-msgid "Null output plugin "
-msgstr "Null输出æ’件"
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Stopped"
+msgstr "å·²åœæ­¢"
+
+#: src/notify/libnotify-aosd_event.c:47
+msgid "Audacious is not playing."
+msgstr "Audacious未开始播放"
#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "Null Outputæ’件 "
+
+#: src/null/null.c:65
msgid ""
" by Christian Birchinger <joker@netswarm.net>\n"
"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
msgstr ""
"Christian Birchinger <joker@netswarm.net>\n"
-"基于HÃ¥vard KvÃ¥l <havardk@xmms.org>çš„XMMSæ’件生æˆ"
+"基于HÃ¥vard KvÃ¥l <havardk@xmms.org>çš„XMMSæ’件"
-#: src/null/null.c:67
+#: src/null/null.c:68
msgid "About Null Output"
msgstr "关于Null Output"
-#: src/null/null.c:93
+#: src/null/null.c:89
msgid "Null output preferences"
msgstr "Null输出设置"
-#: src/null/null.c:102
+#: src/null/null.c:100
msgid "Run in real time"
-msgstr "以实时方å¼è¿è¡Œ"
+msgstr "以实时模å¼è¿è¡Œ"
-#: src/oss4/configure.c:89
+#: src/oss4/configure.c:84
msgid "1. Default device"
msgstr "1. 默认设备"
-#: src/oss4/configure.c:151
+#: src/oss4/configure.c:142
msgid "OSS4 Output Plugin Preferences"
msgstr "OSS4输出æ’件首选项"
-#: src/oss4/configure.c:163 src/OSS/configure.c:213 src/sun/configure.c:181
+#: src/oss4/configure.c:154 src/OSS/configure.c:194
msgid "Audio device:"
msgstr "音频设备:"
-#: src/oss4/configure.c:189 src/OSS/configure.c:235 src/OSS/configure.c:276
+#: src/oss4/configure.c:182 src/OSS/configure.c:217 src/OSS/configure.c:260
msgid "Use alternate device:"
msgstr "使用其它设备"
-#: src/oss4/configure.c:202
+#: src/oss4/configure.c:197
msgid "Save volume between sessions"
msgstr "会è¯ä¸­ä¿å­˜éŸ³é‡"
-#: src/oss4/configure.c:206
+#: src/oss4/configure.c:201
msgid "Enable format conversions made by the OSS software."
msgstr "使用OSSçš„æ ¼å¼è½¬æ¢ã€‚"
-#: src/oss4/plugin.c:54
+#: src/oss4/plugin.c:51
msgid "About OSS4 Plugin"
msgstr "关于OSS4æ’件"
-#: src/oss4/plugin.c:55
-msgid ""
-"OSS4 Output Plugin for Audacious\n"
-"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
-"\n"
-"I would like to thank people on #audacious, especially Tony Vroon and John "
-"Lindgren and of course the authors of the previous OSS plugin.\n"
-"\n"
-"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 3 of the License, or (at your option) "
-"any later version.\n"
-"\n"
-"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.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>.\n"
-msgstr ""
-
#: src/oss4/utils.c:204
msgid "OSS4 error"
msgstr "OSS4错误"
-#: src/OSS/configure.c:148
+#: src/OSS/configure.c:137
#, c-format
msgid "Default (%s)"
msgstr "默认(%s)"
-#: src/OSS/configure.c:197
+#: src/OSS/configure.c:178
msgid "OSS Driver configuration"
msgstr "OSS驱动设置"
-#: src/OSS/configure.c:298 src/sun/configure.c:246
+#: src/OSS/configure.c:281
msgid "Devices"
msgstr "设备"
-#: src/OSS/configure.c:300 src/sun/configure.c:257
+#: src/OSS/configure.c:283
msgid "Buffering:"
msgstr "缓存:"
-#: src/OSS/configure.c:313 src/sun/configure.c:288
+#: src/OSS/configure.c:296
msgid "Pre-buffer (percent):"
msgstr "预缓存(百分之):"
-#: src/OSS/configure.c:324 src/sun/configure.c:302
+#: src/OSS/configure.c:307
msgid "Buffering"
msgstr "缓存"
-#: src/OSS/configure.c:325
+#: src/OSS/configure.c:308
msgid "Mixer Settings:"
msgstr "混音设置"
-#: src/OSS/configure.c:331
+#: src/OSS/configure.c:314
msgid "Volume controls Master not PCM"
msgstr "音é‡æŽ§åˆ¶çš„是Master,而éžPCM"
-#: src/OSS/configure.c:337 src/sun/configure.c:392
+#: src/OSS/configure.c:320
msgid "Mixer"
msgstr "混音器"
@@ -3427,99 +2368,59 @@ msgstr "混音器"
msgid "About OSS Driver"
msgstr "关于OSS驱动"
-#: src/OSS/OSS.c:41
-msgid ""
-"Audacious OSS Driver\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/pulse_audio/pulse_audio.c:691
+#: src/pulse_audio/pulse_audio.c:687
msgid "About Audacious PulseAudio Output Plugin"
msgstr "关于Audacious PulseAudio输出æ’件"
-#: src/pulse_audio/pulse_audio.c:692
-msgid ""
-"Audacious PulseAudio Output Plugin\n"
-"\n"
-" This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 2 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
-"USA."
-msgstr ""
-
-#: src/resample/plugin.c:78
+#: src/resample/plugin.c:89
msgid "About Sample Rate Converter Plugin"
-msgstr "关于Sample Rate转æ¢æ’件"
+msgstr "关于å–样率转æ¢æ’件"
-#: src/resample/plugin.c:134
+#: src/resample/plugin.c:144
msgid "Sample Rate Converter Preferences"
-msgstr "Sample Rate转æ¢å™¨é¦–选项"
+msgstr "å–样转æ¢è®¾ç½®"
-#: src/resample/plugin.c:146
+#: src/resample/plugin.c:156
msgid "Rate mappings:"
msgstr "比率映射:"
-#: src/resample/plugin.c:169
+#: src/resample/plugin.c:179
msgid "All others:"
msgstr "其它:"
-#: src/resample/plugin.c:181
+#: src/resample/plugin.c:191
msgid "Method:"
msgstr "方法:"
-#: src/scrobbler/configure.c:152 src/scrobbler/configure.c:228
+#: src/scrobbler/configure.c:122 src/scrobbler/configure.c:197
msgid "Change password"
msgstr "修改密ç "
-#: src/scrobbler/configure.c:174
+#: src/scrobbler/configure.c:143
msgid "<b>Services</b>"
msgstr "<b>æœåŠ¡</b>"
-#: src/scrobbler/configure.c:196
+#: src/scrobbler/configure.c:165
msgid "Username:"
msgstr "用户å:"
-#: src/scrobbler/configure.c:202
+#: src/scrobbler/configure.c:171
msgid "Password:"
msgstr "密ç ï¼š"
-#: src/scrobbler/configure.c:210
+#: src/scrobbler/configure.c:179
msgid "Scrobbler URL:"
msgstr ""
-#: src/scrobbler/configure.c:242
+#: src/scrobbler/configure.c:211
msgid "<b>Last.FM</b>"
msgstr ""
-#: src/scrobbler/configure.c:287
+#: src/scrobbler/configure.c:238
msgid "Scrobbler"
msgstr ""
-#: src/scrobbler/plugin.c:213
+#: src/scrobbler/plugin.c:194
msgid ""
"Audacious AudioScrobbler Plugin\n"
"\n"
@@ -3528,1247 +2429,832 @@ msgid ""
msgstr ""
"Audacious AudioScrobbleræ’件\n"
"\n"
-"最åˆä½œè€…:Audun Hove <audun@nlc.no>å’ŒPipian <pipian@pipian.com>。\n"
+"原作者:\n"
+"Audun Hove <audun@nlc.no>\n"
+"Pipian <pipian@pipian.com>\n"
-#: src/scrobbler/plugin.c:215
+#: src/scrobbler/plugin.c:196
msgid "About Scrobbler Plugin"
msgstr "关于Scorbbleræ’件"
-#: src/sid/xs_about.c:84
-#, c-format
-msgid "About %s"
-msgstr "关于 %s"
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr "关于SDL输出æ’件"
-#: src/sid/xs_config.c:322
-msgid " Error"
-msgstr "错误"
-
-#: src/sid/xs_fileinfo.c:151
-msgid "General info"
-msgstr "一般信æ¯"
-
-#: src/sid/xs_fileinfo.c:164
-#, c-format
-msgid "Tune #%i: "
-msgstr ""
-
-#: src/sid/xs_interface.c:234
-msgid "Audacious-SID configuration"
-msgstr ""
-
-#: src/sid/xs_interface.c:270
-msgid "8-bit"
-msgstr ""
-
-#: src/sid/xs_interface.c:277
-msgid "16-bit"
-msgstr ""
-
-#: src/sid/xs_interface.c:284
-msgid "Resolution:"
-msgstr ""
-
-#: src/sid/xs_interface.c:315
-msgid "Autopanning"
-msgstr ""
-
-#: src/sid/xs_interface.c:322
-msgid "Channels:"
-msgstr ""
-
-#: src/sid/xs_interface.c:366
-msgid "Samplerate:"
-msgstr ""
-
-#: src/sid/xs_interface.c:383
-msgid "Use oversampling"
-msgstr ""
-
-#: src/sid/xs_interface.c:394
-msgid "Factor:"
-msgstr ""
-
-#: src/sid/xs_interface.c:406
-msgid "Large factors require more CPU-power"
-msgstr ""
-
-#: src/sid/xs_interface.c:412
-msgid "Oversampling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:417
-msgid "Audio"
-msgstr ""
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr "SDL错误"
-#: src/sid/xs_interface.c:445
-msgid "Force speed"
-msgstr ""
-
-#: src/sid/xs_interface.c:449
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"clock speed/frequency. Otherwise the speed is determined from played file "
-"itself."
-msgstr ""
-
-#: src/sid/xs_interface.c:451
-msgid "PAL (50 Hz)"
-msgstr ""
-
-#: src/sid/xs_interface.c:455
-msgid ""
-"PAL is the european TV standard, which uses 50Hz vertical refresh frequency. "
-"Most of SID-tunes have been made for PAL computers."
-msgstr ""
-
-#: src/sid/xs_interface.c:459
-msgid "NTSC (60 Hz)"
-msgstr ""
-
-#: src/sid/xs_interface.c:463
-msgid ""
-"NTSC is the TV standard with 60Hz vertical refresh rate (and other features "
-"that differ from PAL). It is mainly used in United States, Japan and certain "
-"other countries."
-msgstr ""
-
-#: src/sid/xs_interface.c:467
-msgid "Clock speed:"
-msgstr ""
-
-#: src/sid/xs_interface.c:484
-msgid "Force model"
-msgstr ""
-
-#: src/sid/xs_interface.c:488
-msgid ""
-"If enabled, this option \"forces\" the emulation engine to use the selected "
-"SID-chip model. Otherwise the preferred SID model is determined from the "
-"file (if PSIDv2NG type) or if not available, this setting is used."
-msgstr ""
-
-#: src/sid/xs_interface.c:490
-msgid "MOS 6581"
-msgstr ""
-
-#: src/sid/xs_interface.c:494
-msgid ""
-"MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 "
-"in few ways, having much fuller filter (which, due to design error, is never "
-"same between two different SID-chips) and has the \"volume adjustment bug\", "
-"which enables playing of digital samples."
-msgstr ""
-
-#: src/sid/xs_interface.c:498
-msgid "MOS 8580"
-msgstr ""
-
-#: src/sid/xs_interface.c:505
-msgid "SID model:"
-msgstr ""
-
-#: src/sid/xs_interface.c:522
-msgid "SIDPlay 1 (frame-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:526
-msgid ""
-"Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
-"cases, though."
-msgstr ""
-
-#: src/sid/xs_interface.c:530
-msgid "SIDPlay 2 (cycle-based)"
-msgstr ""
-
-#: src/sid/xs_interface.c:534
-msgid ""
-"Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact "
-"emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:538
-msgid "Emulation library selection:"
-msgstr ""
-
-#: src/sid/xs_interface.c:555
-msgid "Real C64 (SIDPlay 2 only)"
-msgstr ""
-
-#: src/sid/xs_interface.c:562
-msgid "Bank switching"
-msgstr ""
-
-#: src/sid/xs_interface.c:569
-msgid "Transparent ROM"
-msgstr ""
-
-#: src/sid/xs_interface.c:576
-msgid "PlaySID environment"
-msgstr ""
-
-#: src/sid/xs_interface.c:583
-msgid "Memory mode:"
-msgstr ""
-
-#: src/sid/xs_interface.c:588
-msgid "Emu#1"
-msgstr ""
-
-#: src/sid/xs_interface.c:611
-msgid "Optimization mode (faster, inaccurate)"
-msgstr ""
-
-#: src/sid/xs_interface.c:615
-msgid ""
-"This setting can be used to enable libSIDPlay2's \"optimization mode\", "
-"which in downgrades the emulation from cycle-exact to something similar to "
-"frame-exact. The result is lower CPU usage, but worse accuracy."
-msgstr ""
-
-#: src/sid/xs_interface.c:617
-msgid "reSID-emulation"
-msgstr ""
-
-#: src/sid/xs_interface.c:621
-msgid ""
-"reSID is the software SID-chip simulator based on SID reverse-engineering, "
-"created by Dag Lem. It is probably the closest thing to real SID available "
-"as software-only emulation."
-msgstr ""
-
-#: src/sid/xs_interface.c:625
-msgid "HardSID"
-msgstr ""
-
-#: src/sid/xs_interface.c:629
-msgid ""
-"HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a "
-"real SID-chip. Software can be used to control the HardSID and combined with "
-"software emulation of rest of C64 via libSIDPlay2 HardSID can be used to "
-"achieve \"near 100%\" similarity to real C64. For more information, see "
-"http://www.hardsid.com/"
-msgstr ""
-
-#: src/sid/xs_interface.c:633
-msgid "SIDPlay 2 options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:650
-msgid "Fast (nearest neighbour)"
-msgstr ""
-
-#: src/sid/xs_interface.c:654
-msgid ""
-"Fastest and also worst sounding sampling method, simply picks nearest "
-"neighbouring sample."
-msgstr ""
-
-#: src/sid/xs_interface.c:658
-msgid "Linear interpolation"
-msgstr ""
-
-#: src/sid/xs_interface.c:662
-msgid ""
-"Uses linear interpolation between samples, yielding higher audio quality "
-"with less sampling noise."
-msgstr ""
-
-#: src/sid/xs_interface.c:673
-msgid "Resampling (FIR)"
-msgstr ""
-
-#: src/sid/xs_interface.c:680
-msgid "reSID sampling options:"
-msgstr ""
-
-#: src/sid/xs_interface.c:685
-msgid "Emu#2"
-msgstr ""
-
-#: src/sid/xs_interface.c:697
-msgid "Emulate filters"
-msgstr ""
-
-#: src/sid/xs_interface.c:701
-msgid ""
-"This option enables emulation of SID filter. The filter is an essential part "
-"of SID's sound capacity, but accurate emulation of it may require quite much "
-"CPU power. However, if filter emulation is disabled, tunes won't sound "
-"authentic at all if they utilize the filter."
-msgstr ""
-
-#: src/sid/xs_interface.c:726
-msgid "FS"
-msgstr ""
-
-#: src/sid/xs_interface.c:743
-msgid "FM"
-msgstr ""
-
-#: src/sid/xs_interface.c:760
-msgid "FT"
-msgstr ""
-
-#: src/sid/xs_interface.c:771
-msgid "Reset values"
-msgstr ""
-
-#: src/sid/xs_interface.c:776
-msgid "SIDPlay1"
-msgstr ""
-
-#: src/sid/xs_interface.c:817
-msgid "Export"
-msgstr ""
-
-#: src/sid/xs_interface.c:825
-msgid "Use"
-msgstr ""
-
-#: src/sid/xs_interface.c:833 src/skins/ui_manager.c:430
-msgid "Save"
-msgstr ""
-
-#: src/sid/xs_interface.c:841 src/skins/ui_manager.c:429
-msgid "Import"
-msgstr ""
-
-#: src/sid/xs_interface.c:849 src/skins/ui_manager.c:431
-msgid "Delete"
-msgstr ""
-
-#: src/sid/xs_interface.c:863
-msgid "Filter curve:"
-msgstr ""
-
-#: src/sid/xs_interface.c:868
-msgid "SIDPlay2"
-msgstr ""
-
-#: src/sid/xs_interface.c:874
-msgid "Filters"
-msgstr ""
-
-#: src/sid/xs_interface.c:897
-msgid "Play at least for specified time"
-msgstr ""
-
-#: src/sid/xs_interface.c:901
-msgid ""
-"If enabled, the tune is played at least for the specified time, adding "
-"silence to the end if necessary."
-msgstr ""
-
-#: src/sid/xs_interface.c:908 src/sid/xs_interface.c:962
-#: src/sid/xs_interface.c:1142
-msgid "Playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:928
-msgid "Minimum playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:945
-msgid "Play for specified time maximum"
-msgstr ""
-
-#: src/sid/xs_interface.c:949
-msgid ""
-"If enabled, tune is played until specified duration is reached (aka maximum "
-"playtime)."
-msgstr ""
-
-#: src/sid/xs_interface.c:951
-msgid "Only when song length is unknown"
-msgstr ""
-
-#: src/sid/xs_interface.c:955
-msgid ""
-"If enabled, the maximum playtime is applied only if song/tune length is not "
-"known."
-msgstr ""
-
-#: src/sid/xs_interface.c:982
-msgid "Maximum playtime:"
-msgstr ""
-
-#: src/sid/xs_interface.c:999
-msgid "Use XSIDPLAY-compatible database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1003
-msgid ""
-"This option enables using of XSIDPLAY compatible song length database. "
-"(Refer to Audacious-SID documentation for more information)"
-msgstr ""
-
-#: src/sid/xs_interface.c:1010
-msgid "DB-file:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1020
-msgid "Database path and filename"
-msgstr ""
-
-#: src/sid/xs_interface.c:1027
-msgid "Browse for song length-database file"
-msgstr ""
-
-#: src/sid/xs_interface.c:1049
-msgid "Song length database:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1054
-msgid "Songlength"
-msgstr ""
-
-#: src/sid/xs_interface.c:1072
-msgid "Override generic Tuplez format string"
-msgstr ""
-
-#: src/sid/xs_interface.c:1076
-msgid ""
-"By enabling this option you can specify a custom Tuplez formatting string "
-"for SID-files. The SID-plugin specific Tuplez tags are described shortly "
-"below."
-msgstr ""
-
-#: src/sid/xs_interface.c:1087
-msgid "Tuplez format string for SID-files"
-msgstr ""
-
-#: src/sid/xs_interface.c:1090
-msgid ""
-"<u>SID-specific Tuplez fields:</u>\n"
-"\n"
-"<b>sid-format</b>\t\t- Specific fileformat\n"
-"<b>sid-model</b>\t\t- 6581 or 8580\n"
-"<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n"
-"\n"
-"<u>Other \"special\" fields set:</u>\n"
-"\n"
-"<b>subsong-num, subsong-id</b>"
-msgstr ""
-
-#: src/sid/xs_interface.c:1098
-msgid "Song title format:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1103
-msgid "Title"
-msgstr ""
-
-#: src/sid/xs_interface.c:1125
-msgid "Add sub-tunes to playlist"
-msgstr ""
-
-#: src/sid/xs_interface.c:1129
-msgid ""
-"If enabled, sub-tunes of each file will be added to playlist. If disabled, "
-"only the default sub-tune will be added."
-msgstr ""
-
-#: src/sid/xs_interface.c:1131
-msgid "Only tunes with specified minimum duration"
-msgstr ""
-
-#: src/sid/xs_interface.c:1135
-msgid "Only add sub-tunes that have a duration of at least specified time."
-msgstr ""
-
-#: src/sid/xs_interface.c:1162
-msgid "Sub-tune handling:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1179
-msgid "Use STIL database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1183
-msgid ""
-"If this option is enabled (and the database & HVSC settings below are "
-"correctly set), Audacious-SID will use and display additional information "
-"from STIL database when HVSC SIDs are played."
-msgstr ""
-
-#: src/sid/xs_interface.c:1190
-msgid "STIL file:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1206
-msgid ""
-"Path and filename of STIL database file (STIL.txt), usually found from "
-"HVSC's DOCUMENTS-subdirectory."
-msgstr ""
-
-#: src/sid/xs_interface.c:1219
-msgid "Browse for STIL-database file"
-msgstr ""
-
-#: src/sid/xs_interface.c:1246
-msgid "HVSC path:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1262
-msgid ""
-"Path to base-directory of your High Voltage SID Collection (HVSC), for "
-"example /media/C64Music/"
-msgstr ""
-
-#: src/sid/xs_interface.c:1275
-msgid "Browse for HVSC path"
-msgstr "æµè§ˆHVSC路径"
-
-#: src/sid/xs_interface.c:1297
-msgid "SID Tune Information List (STIL) database:"
-msgstr ""
-
-#: src/sid/xs_interface.c:1321
-msgid "Cancel any changes"
-msgstr "å–消所有å˜æ›´"
-
-#: src/sid/xs_interface.c:1328
-msgid "Accept and update changes"
-msgstr "åŒæ„并更新"
-
-#: src/sid/xs_interface.c:1628
-msgid "Audacious-SID Fileinfo"
-msgstr "Audacious-SID文件信æ¯"
-
-#: src/sid/xs_interface.c:1649
-msgid "Filename:"
-msgstr "文件å:"
-
-#: src/sid/xs_interface.c:1657
-msgid "Songname:"
-msgstr "歌曲å:"
-
-#: src/sid/xs_interface.c:1665
-msgid "Composer:"
-msgstr "作曲家:"
-
-#: src/sid/xs_interface.c:1673
-msgid "Copyright:"
-msgstr "版æƒï¼š"
-
-#: src/sid/xs_interface.c:1717
-msgid "Song Information:"
-msgstr "歌曲信æ¯ï¼š"
-
-#: src/sid/xs_interface.c:1752
-msgid "Author:"
-msgstr "作者:"
-
-#: src/sid/xs_interface.c:1786
-msgid "Duration:"
-msgstr "æŒç»­æ—¶é—´ï¼š"
-
-#: src/sid/xs_interface.c:1820
-msgid "Sub-tune Information:"
-msgstr "Sub-tuneä¿¡æ¯ï¼š"
-
-#: src/sid/xs_interface.c:1881
-msgid "Select HVSC song length database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1922
-msgid "Select STIL-database"
-msgstr ""
-
-#: src/sid/xs_interface.c:1963
-msgid "Select HVSC location prefix"
-msgstr ""
-
-#: src/sid/xs_interface.c:2004
-msgid "Select SIDPlay2 filters file for importing"
-msgstr ""
-
-#: src/sid/xs_interface.c:2045
-msgid "Select SIDPlay2 filters file for exporting"
-msgstr ""
-
-#: src/sid/xs_interface.c:2093 src/sid/xs_interface.c:2106
-msgid "Confirm selected action"
-msgstr "确认选中的动作"
-
-#: src/sid/xs_interface.c:2123
-msgid "Yes"
-msgstr "是"
-
-#: src/sid/xs_interface.c:2129
-msgid "No"
-msgstr "å¦"
-
-#: src/skins/plugin.c:179
+#: src/skins/plugin.c:167
msgid "About Skinned GUI"
msgstr "关于主题化界é¢"
-#: src/skins/plugin.c:180
+#: src/skins/plugin.c:168
msgid ""
"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
"\n"
msgstr ""
-"版æƒæ‰€æœ‰ (c) 2008, Tomasz MoÅ„ <desowin@gmail.com>\n"
+"版æƒæ‰€æœ‰ (c)\n"
+"2008, Tomasz Moń <desowin@gmail.com>\n"
"\n"
-#: src/skins/plugin.c:196
-msgid "Skinned Interface"
-msgstr "主题化界é¢"
-
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:207
msgid "_Player:"
-msgstr "播放器(_P):"
+msgstr "播放器(_P):"
-#: src/skins/skins_cfg.c:316
+#: src/skins/skins_cfg.c:208
msgid "Select main player window font:"
msgstr "选择主界é¢å­—体"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:210
msgid "_Playlist:"
msgstr "播放列表(_P):"
-#: src/skins/skins_cfg.c:317
+#: src/skins/skins_cfg.c:211
msgid "Select playlist font:"
msgstr "选择播放列表字体:"
-#: src/skins/skins_cfg.c:321
+#: src/skins/skins_cfg.c:215
msgid "<b>_Fonts</b>"
msgstr "<b>字体(_F)</b>"
-#: src/skins/skins_cfg.c:323
-msgid "Use Bitmap fonts if available"
-msgstr "å°½å¯èƒ½ä½¿ç”¨ç‚¹é˜µå­—体"
-
-#: src/skins/skins_cfg.c:323
-msgid ""
-"Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
-"strings."
-msgstr "å°½å¯èƒ½ä½¿ç”¨ç‚¹é˜µå­—体,点阵字体ä¸æ”¯æŒUnicode设置"
-
-#: src/skins/skins_cfg.c:324
-msgid "<b>_Miscellaneous</b>"
-msgstr "<b>其它(_M)</b>"
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "使用点阵字体(仅支æŒASCII字符)"
-#: src/skins/skins_cfg.c:325
-msgid "Show separators in playlist"
-msgstr "在播放列表中显示分隔符"
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "æ¥å›žæ»šåŠ¨æ­Œæ›²æ ‡é¢˜"
-#: src/skins/skins_cfg.c:327
-msgid "Show window manager decoration"
-msgstr "显示窗å£ç®¡ç†å™¨çš„装饰"
-
-#: src/skins/skins_cfg.c:328
-msgid "This enables the window manager to show decorations for windows."
-msgstr "此选项将å…许显示窗å£ç®¡ç†å™¨çš„装饰"
-
-#: src/skins/skins_cfg.c:329
-msgid "Use two-way text scroller"
-msgstr "使用åŒå‘字符滚动"
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>主题(_S)</b>"
-#: src/skins/skins_cfg.c:330
-msgid ""
-"If selected, the file information text in the main window will scroll back "
-"and forth. If not selected, the text will only scroll in one direction."
-msgstr "如果å¯ç”¨ï¼Œä¸»ç•Œé¢ä¸Šçš„文件信æ¯å°†æ¥å›žæ»šåŠ¨ï¼Œå¦åˆ™åªèƒ½å‘一个方å‘滚动。"
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "ç•Œé¢è®¾ç½®"
-#: src/skins/skins_cfg.c:331
-msgid "Disable inline gtk theme"
-msgstr "ç¦ç”¨å†…部gtk主题"
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "å‰ç½®æ”¾å¤§"
-#: src/skins/skins_cfg.c:333
-msgid "Random skin on play"
-msgstr "å¯åŠ¨æ—¶éšæœºé€‰æ‹©ä¸»é¢˜"
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr ""
-#: src/skins/skins_cfg.c:334
-msgid "Allow loading incomplete skins"
-msgstr "å…许加载ä¸å®Œæ•´çš„主题"
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr ""
-#: src/skins/skins_cfg.c:335
-msgid ""
-"If selected, audacious won't refuse loading broken skins. Use only if your "
-"favourite skin doesn't work"
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
msgstr ""
-"如果å¯ç”¨ï¼Œaudaciouså°†å…许加载破æŸçš„主题。如果你喜欢的主题无法使用,å¯è¯•è¯•å¯ç”¨"
-"此选项"
-#: src/skins/skins_cfg.c:401
-msgid "Color Adjustment"
-msgstr "颜色调整"
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr ""
-#: src/skins/skins_cfg.c:407
-msgid ""
-"Audacious allows you to alter the color balance of the skinned UI. The "
-"sliders below will allow you to do this."
-msgstr "Audaciouså…许你修改主题界é¢çš„颜色平衡。调整滑动æ¡å³å¯"
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr ""
-#: src/skins/skins_cfg.c:417
-msgid "Blue"
-msgstr "è“"
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr ""
-#: src/skins/skins_cfg.c:424
-msgid "Green"
-msgstr "绿"
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr ""
-#: src/skins/skins_cfg.c:431
-msgid "Red"
-msgstr "红"
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr ""
-#: src/skins/skins_cfg.c:569
-msgid "<b>_Skin</b>"
-msgstr "<b>主题(_S)</b>"
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr ""
-#: src/skins/skins_cfg.c:574
-#, fuzzy
-msgid "Color adjustment ..."
-msgstr "颜色调整"
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr ""
-#: src/skins/ui_equalizer.c:463
+#: src/skins/ui_equalizer.c:379
msgid "Audacious Equalizer"
msgstr "Audaciouså‡è¡¡å™¨"
-#: src/skins/ui_equalizer.c:991
+#: src/skins/ui_equalizer.c:896
msgid "Presets"
msgstr "预设"
-#: src/skins/ui_main.c:593
+#: src/skins/ui_main.c:443
msgid "kbps"
msgstr ""
-#: src/skins/ui_main.c:601
+#: src/skins/ui_main.c:451
msgid "kHz"
msgstr ""
-#: src/skins/ui_main.c:608
+#: src/skins/ui_main.c:458
msgid "surround"
msgstr "环绕声"
-#: src/skins/ui_main.c:981
-msgid "Audacious - visibility warning"
-msgstr "Audacious - å¯è§æ€§è­¦å‘Š"
-
-#: src/skins/ui_main.c:984
-msgid "Show main player window"
-msgstr "显示主界é¢"
-
-#: src/skins/ui_main.c:985
-msgid "Ignore"
-msgstr "忽略"
-
-#: src/skins/ui_main.c:991
-msgid ""
-"Audacious has been started with all of its windows hidden.\n"
-"You may want to show the player window again to control Audacious; "
-"otherwise, you'll have to control it remotely via audtool or enabled plugins "
-"(such as the statusicon plugin)."
-msgstr ""
-
-#: src/skins/ui_main.c:997
-msgid "Always ignore, show/hide is controlled remotely"
-msgstr "总是忽略,远程控制“显示/éšè—â€"
-
-#: src/skins/ui_main.c:1042
-msgid "Audacious - broken GTK engine usage warning"
-msgstr "Audacious - æŸåçš„GTK引擎警告"
-
-#: src/skins/ui_main.c:1050
-#, c-format
-msgid ""
-"<big><b>Broken GTK engine in use</b></big>\n"
-"\n"
-"Audacious has detected that you are using a broken GTK engine.\n"
-"\n"
-"The theme engine you are using, <i>%s</i>, is incompatible with some of the "
-"features used by modern skins. The incompatible features have been disabled "
-"for this session.\n"
-"\n"
-"To use these features, please consider using a different GTK theme engine."
-msgstr ""
-
-#: src/skins/ui_main.c:1061
-msgid "Do not display this warning again"
-msgstr "ä¸è¦å†æ示"
-
-#: src/skins/ui_main.c:1269
+#: src/skins/ui_main.c:806
#, c-format
-msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr ""
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr "查找: %d:%-2.2d/%d:%-2.2d"
-#: src/skins/ui_main.c:1299
+#: src/skins/ui_main.c:827
#, c-format
msgid "Volume: %d%%"
-msgstr ""
+msgstr "音é‡ï¼š%d%%"
-#: src/skins/ui_main.c:1322
+#: src/skins/ui_main.c:850
#, c-format
msgid "Balance: %d%% left"
-msgstr "平衡: %d%% 左"
+msgstr "平衡:%d%% 左"
-#: src/skins/ui_main.c:1324
+#: src/skins/ui_main.c:852
msgid "Balance: center"
-msgstr "平衡: 中间"
+msgstr "平衡:中间"
-#: src/skins/ui_main.c:1326
+#: src/skins/ui_main.c:854
#, c-format
msgid "Balance: %d%% right"
-msgstr "平衡: %d%% å³"
+msgstr "平衡:%d%% å³"
-#: src/skins/ui_main.c:1618
+#: src/skins/ui_main.c:980
msgid "Options Menu"
msgstr "选项èœå•"
-#: src/skins/ui_main.c:1622
+#: src/skins/ui_main.c:984
msgid "Disable 'Always On Top'"
msgstr "ç¦ç”¨â€œé¡¶ç½®çª—å£â€"
-#: src/skins/ui_main.c:1624
+#: src/skins/ui_main.c:986
msgid "Enable 'Always On Top'"
msgstr "å¯ç”¨â€œé¡¶ç½®çª—å£â€"
-#: src/skins/ui_main.c:1627
+#: src/skins/ui_main.c:989
msgid "File Info Box"
msgstr "文件信æ¯"
-#: src/skins/ui_main.c:1631
-msgid "Disable 'GUI Scaling'"
-msgstr "ç¦ç”¨â€œç•Œé¢ç¼©æ”¾â€"
-
-#: src/skins/ui_main.c:1633
-msgid "Enable 'GUI Scaling'"
-msgstr "å¯ç”¨â€œç•Œé¢ç¼©æ”¾â€"
-
-#: src/skins/ui_main.c:1636
+#: src/skins/ui_main.c:994
msgid "Visualization Menu"
msgstr "å¯è§†åŒ–èœå•"
-#: src/skins/ui_main.c:2348
+#: src/skins/ui_main.c:1646
msgid "Single mode."
msgstr "å•ä¸€çª—å£æ¨¡å¼"
-#: src/skins/ui_main.c:2350
+#: src/skins/ui_main.c:1648
msgid "Playlist mode."
msgstr "播放列表模å¼"
-#: src/skins/ui_main.c:2374
+#: src/skins/ui_main.c:1670
msgid "Stopping after song."
msgstr "完æˆåŽåœæ­¢"
-#: src/skins/ui_main.c:2376
+#: src/skins/ui_main.c:1672
msgid "Not stopping after song."
msgstr "完æˆåŽä¸åœæ­¢"
-#: src/skins/ui_manager.c:50 src/skins/ui_manager.c:51
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
msgid "Autoscroll Songname"
msgstr "自动滚动歌曲å"
-#: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "完æˆå½“å‰æ­Œæ›²åŽåœæ­¢"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
msgid "Peaks"
msgstr "峰值"
-#: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "é‡å¤"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "éšæœº"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "ç¦æ­¢è‡ªåŠ¨æ’­æ”¾ä¸‹ä¸€é¦–"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
msgid "Show Player"
msgstr "显示播放器"
-#: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
msgid "Show Playlist Editor"
msgstr "显示播放列表编辑器"
-#: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
msgid "Show Equalizer"
msgstr "显示å‡è¡¡å™¨"
-#: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
msgid "Always on Top"
msgstr "顶置窗å£"
-#: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
msgid "Put on All Workspaces"
msgstr "所有工作区å¯è§"
-#: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
msgid "Roll up Player"
msgstr "收起播放器"
-#: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
msgid "Roll up Playlist Editor"
msgstr "收起播放列表编辑器"
-#: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
msgid "Roll up Equalizer"
msgstr "收起å‡è¡¡å™¨"
-#: src/skins/ui_manager.c:92 src/sndstretch/sndstretch_xmms.c:393
-msgid "Scale"
-msgstr "缩放"
-
-#: src/skins/ui_manager.c:93
-msgid "DoubleSize"
-msgstr "åŒå€å¤§å°"
-
-#: src/skins/ui_manager.c:95 src/skins/ui_manager.c:96
-msgid "Easy Move"
-msgstr "简易移动"
-
-#: src/skins/ui_manager.c:104
+#: src/skins/ui_manager.c:115
msgid "Analyzer"
msgstr "分æžå™¨"
-#: src/skins/ui_manager.c:105
+#: src/skins/ui_manager.c:116
msgid "Scope"
-msgstr "范围"
+msgstr "示波器"
-#: src/skins/ui_manager.c:106
+#: src/skins/ui_manager.c:117
msgid "Voiceprint"
-msgstr "声波纹"
+msgstr "声纹"
-#: src/skins/ui_manager.c:107
+#: src/skins/ui_manager.c:118
msgid "Off"
msgstr "关闭"
-#: src/skins/ui_manager.c:111 src/skins/ui_manager.c:128
-#: src/skins/ui_manager.c:134
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
msgid "Normal"
msgstr "一般"
-#: src/skins/ui_manager.c:112 src/skins/ui_manager.c:129
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
msgid "Fire"
-msgstr ""
+msgstr "ç«ç‚Ž"
-#: src/skins/ui_manager.c:113
+#: src/skins/ui_manager.c:124
msgid "Vertical Lines"
-msgstr ""
+msgstr "垂线"
-#: src/skins/ui_manager.c:117
+#: src/skins/ui_manager.c:128
msgid "Lines"
-msgstr ""
+msgstr "细线"
-#: src/skins/ui_manager.c:118
+#: src/skins/ui_manager.c:129
msgid "Bars"
-msgstr ""
+msgstr "柱状"
-#: src/skins/ui_manager.c:122
+#: src/skins/ui_manager.c:133
msgid "Dot Scope"
-msgstr ""
+msgstr "点状"
-#: src/skins/ui_manager.c:123
+#: src/skins/ui_manager.c:134
msgid "Line Scope"
-msgstr ""
+msgstr "线状"
-#: src/skins/ui_manager.c:124
+#: src/skins/ui_manager.c:135
msgid "Solid Scope"
-msgstr ""
+msgstr "å—状"
-#: src/skins/ui_manager.c:130
+#: src/skins/ui_manager.c:141
msgid "Ice"
-msgstr ""
+msgstr "冷è“"
-#: src/skins/ui_manager.c:135
+#: src/skins/ui_manager.c:146
msgid "Smooth"
msgstr "平滑"
-#: src/skins/ui_manager.c:139 src/skins/ui_manager.c:147
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
msgid "Slowest"
msgstr "最慢"
-#: src/skins/ui_manager.c:140 src/skins/ui_manager.c:148
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
msgid "Slow"
msgstr "æ…¢"
-#: src/skins/ui_manager.c:141 src/skins/ui_manager.c:149
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
msgid "Medium"
msgstr "中速"
-#: src/skins/ui_manager.c:142 src/skins/ui_manager.c:150
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
msgid "Fast"
msgstr "å¿«"
-#: src/skins/ui_manager.c:143 src/skins/ui_manager.c:151
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
msgid "Fastest"
msgstr "最快"
-#: src/skins/ui_manager.c:155
+#: src/skins/ui_manager.c:166
msgid "Time Elapsed"
msgstr "已用时间"
-#: src/skins/ui_manager.c:156
+#: src/skins/ui_manager.c:167
msgid "Time Remaining"
msgstr "剩余时间"
-#: src/skins/ui_manager.c:185
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "æš‚åœ"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "上一首"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "下一首"
+
+#: src/skins/ui_manager.c:196
msgid "Visualization"
msgstr "å¯è§†åŒ–效果"
-#: src/skins/ui_manager.c:186
+#: src/skins/ui_manager.c:197
msgid "Visualization Mode"
msgstr "å¯è§†åŒ–模å¼"
-#: src/skins/ui_manager.c:187
+#: src/skins/ui_manager.c:198
msgid "Analyzer Mode"
msgstr "分æžå™¨æ¨¡å¼"
-#: src/skins/ui_manager.c:188
+#: src/skins/ui_manager.c:199
msgid "Scope Mode"
-msgstr ""
+msgstr "示波器模å¼"
-#: src/skins/ui_manager.c:189
+#: src/skins/ui_manager.c:200
msgid "Voiceprint Mode"
-msgstr ""
+msgstr "声纹模å¼"
-#: src/skins/ui_manager.c:190
+#: src/skins/ui_manager.c:201
msgid "WindowShade VU Mode"
-msgstr ""
+msgstr "窗å£æ¸²æŸ“VU模å¼"
-#: src/skins/ui_manager.c:191
+#: src/skins/ui_manager.c:202
msgid "Analyzer Falloff"
-msgstr ""
+msgstr "分æžå™¨å‡é€€é€Ÿåº¦"
-#: src/skins/ui_manager.c:192
+#: src/skins/ui_manager.c:203
msgid "Peaks Falloff"
-msgstr ""
+msgstr "峰值å‡é€€é€Ÿåº¦"
-#: src/skins/ui_manager.c:202 src/skins/ui_manager.c:203
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "播放列表"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "新建播放列表"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
msgid "Select Next Playlist"
msgstr "å‰ä¸€ä¸ªæ’­æ”¾åˆ—表"
-#: src/skins/ui_manager.c:205 src/skins/ui_manager.c:206
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
msgid "Select Previous Playlist"
msgstr "下一下播放列表"
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "删除播放列表"
+
#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "导入播放列表"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr "把列表加载到被选中的播放列表。"
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "导出播放列表"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "ä¿å­˜è¢«é€‰ä¸­çš„播放列表"
+
+#: src/skins/ui_manager.c:229
msgid "Refresh List"
msgstr "刷新列表"
-#: src/skins/ui_manager.c:226
-msgid "List Manager"
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr "刷新播放列表的歌曲信æ¯"
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "播放列表管ç†å™¨"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
msgstr "列表管ç†å™¨"
-#: src/skins/ui_manager.c:236
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "外观"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "ç•Œé¢"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "ç•Œé¢è®¾ç½®..."
+
+#: src/skins/ui_manager.c:243
msgid "Add Internet Address..."
msgstr "添加网络地å€..."
-#: src/skins/ui_manager.c:240
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "添加远程文件到播放列表"
+
+#: src/skins/ui_manager.c:247
msgid "Add Files..."
msgstr "添加文件..."
-#: src/skins/ui_manager.c:246
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "添加文件到播放列表。"
+
+#: src/skins/ui_manager.c:253
msgid "Search and Select"
msgstr "æœç´¢/选择"
-#: src/skins/ui_manager.c:247
+#: src/skins/ui_manager.c:254
msgid ""
"Searches the playlist and selects playlist entries based on specific "
"criteria."
-msgstr "æœç´¢å¹¶é€‰æ‹©åˆ—表中符åˆæ¡ä»¶çš„æ¡ç›®"
+msgstr "在列表中æœç´¢å¹¶é€‰æ‹©ç¬¦åˆæ¡ä»¶çš„æ¡ç›®"
-#: src/skins/ui_manager.c:250
+#: src/skins/ui_manager.c:257
msgid "Invert Selection"
msgstr "å选"
-#: src/skins/ui_manager.c:251
+#: src/skins/ui_manager.c:258
msgid "Inverts the selected and unselected entries."
msgstr "å转被选中与未被选中的æ¡ç›®"
-#: src/skins/ui_manager.c:268
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "选中全部"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr "选中播放列表中的所有æ¡ç›®ã€‚"
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "å–消选中"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr "å–消对播放列表的选择"
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "清空"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr "清空播放列表中的所有æ¡ç›®ã€‚"
+
+#: src/skins/ui_manager.c:275
msgid "Clear Queue"
msgstr "清空队列"
-#: src/skins/ui_manager.c:269
+#: src/skins/ui_manager.c:276
msgid "Clears the queue associated with this playlist."
msgstr "清空此列表中的队列"
-#: src/skins/ui_manager.c:272
+#: src/skins/ui_manager.c:279
msgid "Remove Unavailable Files"
msgstr "删除ä¸å¯ç”¨æ–‡ä»¶"
-#: src/skins/ui_manager.c:273
+#: src/skins/ui_manager.c:280
msgid "Removes unavailable files from the playlist."
msgstr "从播放列表中删除ä¸å¯ç”¨æ–‡ä»¶"
-#: src/skins/ui_manager.c:276
+#: src/skins/ui_manager.c:283
msgid "Remove Duplicates"
msgstr "删除é‡å¤çš„æ¡ç›®"
-#: src/skins/ui_manager.c:279
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "按标题"
+
+#: src/skins/ui_manager.c:286
msgid "Removes duplicate entries from the playlist by title."
msgstr "æ ¹æ®æ ‡é¢˜åˆ é™¤é‡å¤çš„æ¡ç›®"
-#: src/skins/ui_manager.c:282 src/skins/ui_manager.c:318
-#: src/skins/ui_manager.c:348
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
msgid "By Filename"
msgstr "æ ¹æ®æ–‡ä»¶å"
-#: src/skins/ui_manager.c:283
+#: src/skins/ui_manager.c:290
msgid "Removes duplicate entries from the playlist by filename."
msgstr "æ ¹æ®æ–‡ä»¶å删除é‡å¤çš„æ¡ç›®"
-#: src/skins/ui_manager.c:286 src/skins/ui_manager.c:322
-#: src/skins/ui_manager.c:352
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
msgid "By Path + Filename"
msgstr "æ ¹æ®è·¯å¾„和文件å"
-#: src/skins/ui_manager.c:287
+#: src/skins/ui_manager.c:294
msgid "Removes duplicate entries from the playlist by their full path."
msgstr "æ ¹æ®æ–‡ä»¶çš„完整路径删除é‡å¤æ¡ç›®"
-#: src/skins/ui_manager.c:300
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "删除未被选中的"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr "删除播放列表中未被选中的æ¡ç›®ã€‚"
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "删除已选中的"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr "删除播放列表中已选中的æ¡ç›®ã€‚"
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "打乱列表"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr "播放列表éšæœº"
+
+#: src/skins/ui_manager.c:311
msgid "Reverse List"
msgstr "å转列表"
-#: src/skins/ui_manager.c:301
+#: src/skins/ui_manager.c:312
msgid "Reverses the playlist."
msgstr "å转播放列表"
-#: src/skins/ui_manager.c:304
+#: src/skins/ui_manager.c:315
msgid "Sort List"
msgstr "排åºåˆ—表"
-#: src/skins/ui_manager.c:307 src/skins/ui_manager.c:337
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
msgid "Sorts the list by title."
-msgstr "æ ¹æ®æ ‡é¢˜æŽ’åºåˆ—表"
+msgstr "按标题"
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "按专辑"
-#: src/skins/ui_manager.c:311 src/skins/ui_manager.c:341
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
msgid "Sorts the list by album."
-msgstr "æ ¹æ®ä¸“辑排åºåˆ—表"
+msgstr "按专辑"
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "按艺术家"
-#: src/skins/ui_manager.c:315 src/skins/ui_manager.c:345
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
msgid "Sorts the list by artist."
-msgstr "æ ¹æ®è‰ºæœ¯å®¶æŽ’åºåˆ—表"
+msgstr "按艺术家"
-#: src/skins/ui_manager.c:319 src/skins/ui_manager.c:349
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
msgid "Sorts the list by filename."
-msgstr "æ ¹æ®æ–‡ä»¶å排åºåˆ—表"
+msgstr "按文件å"
-#: src/skins/ui_manager.c:323 src/skins/ui_manager.c:353
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
msgid "Sorts the list by full pathname."
-msgstr "æ ¹æ®å®Œæ•´è·¯å¾„排åºåˆ—表"
+msgstr "按完整路径"
-#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
msgid "By Date"
-msgstr "æ ¹æ®æ—¥æœŸ"
+msgstr "按日期"
-#: src/skins/ui_manager.c:327 src/skins/ui_manager.c:357
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
msgid "Sorts the list by modification time."
-msgstr "æ ¹æ®ä¿®æ”¹æ—¶é—´æŽ’åºåˆ—表"
+msgstr "按修改时间"
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "按音轨å·ç "
-#: src/skins/ui_manager.c:331 src/skins/ui_manager.c:361
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
msgid "Sorts the list by track number."
-msgstr "æ ¹æ®éŸ³è½¨å·ç æŽ’åºåˆ—表"
+msgstr "按音轨åºå·"
-#: src/skins/ui_manager.c:334
+#: src/skins/ui_manager.c:345
msgid "Sort Selected"
msgstr "排åºå·²é€‰ä¸­çš„"
-#: src/skins/ui_manager.c:373
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "文件"
+
+#: src/skins/ui_manager.c:384
msgid "Plugin Services"
msgstr "æ’件æœåŠ¡"
-#: src/skins/ui_manager.c:384
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "查看音轨信æ¯"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "查看音轨信æ¯"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "关于Audacious"
+
+#: src/skins/ui_manager.c:395
msgid "Play File"
msgstr "播放文件"
-#: src/skins/ui_manager.c:387
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "加载并播放文件"
+
+#: src/skins/ui_manager.c:398
msgid "Play Location"
msgstr "播放ä½ç½®"
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "播放被选中ä½ç½®çš„文件"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "æ’件æœåŠ¡"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "首选项"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "打开首选项窗å£"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "退出Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "设置A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "清空A-B"
+
+#: src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to Playlist Start"
+msgstr "跳到被选中列表并播放"
+
+#: src/skins/ui_manager.c:421 src/skins/ui_manager.c:422
+msgid "Jump to Time"
+msgstr "跳到时间"
+
+#: src/skins/ui_manager.c:424
+msgid "Queue Toggle"
+msgstr "队列切æ¢"
+
+#: src/skins/ui_manager.c:425
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr "å¯ç”¨/ç¦ç”¨æ’­æ”¾é˜Ÿåˆ—çš„æ¡ç›®"
+
#: src/skins/ui_manager.c:428
+msgid "Copy"
+msgstr "å¤åˆ¶"
+
+#: src/skins/ui_manager.c:430
+msgid "Cut"
+msgstr "剪切"
+
+#: src/skins/ui_manager.c:432
+msgid "Paste"
+msgstr "粘贴"
+
+#: src/skins/ui_manager.c:439
msgid "Load"
msgstr "载入"
-#: src/skins/ui_manager.c:433 src/skins/ui_manager.c:454
-#: src/skins/ui_manager.c:469
+#: src/skins/ui_manager.c:440
+msgid "Import"
+msgstr "导入"
+
+#: src/skins/ui_manager.c:441
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#: src/skins/ui_manager.c:442
+msgid "Delete"
+msgstr "删除"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
msgid "Preset"
msgstr "预设"
-#: src/skins/ui_manager.c:434
+#: src/skins/ui_manager.c:445
msgid "Load preset"
msgstr "载入预设"
-#: src/skins/ui_manager.c:436 src/skins/ui_manager.c:457
-#: src/skins/ui_manager.c:472
+#: src/skins/ui_manager.c:447 src/skins/ui_manager.c:468
+#: src/skins/ui_manager.c:483
msgid "Auto-load preset"
msgstr "自动载入预设"
-#: src/skins/ui_manager.c:437
+#: src/skins/ui_manager.c:448
msgid "Load auto-load preset"
msgstr "载入自动载入预设"
-#: src/skins/ui_manager.c:440
+#: src/skins/ui_manager.c:451
msgid "Load default preset into equalizer"
msgstr "将默认预设载入到å‡è¡¡å™¨"
-#: src/skins/ui_manager.c:442
+#: src/skins/ui_manager.c:453
msgid "Zero"
msgstr "零"
-#: src/skins/ui_manager.c:443
+#: src/skins/ui_manager.c:454
msgid "Set equalizer preset levels to zero"
msgstr "å°†å‡è¡¡å™¨çš„预设等级设置为零"
-#: src/skins/ui_manager.c:445
+#: src/skins/ui_manager.c:456
msgid "From file"
msgstr "从文件加载"
-#: src/skins/ui_manager.c:446
+#: src/skins/ui_manager.c:457
msgid "Load preset from file"
msgstr "从文件加载预设"
-#: src/skins/ui_manager.c:448
+#: src/skins/ui_manager.c:459
msgid "From WinAMP EQF file"
msgstr "从WinAMP EQF文件加载"
-#: src/skins/ui_manager.c:449
+#: src/skins/ui_manager.c:460
msgid "Load preset from WinAMP EQF file"
msgstr "从WinAMP EQF文件加载预设"
-#: src/skins/ui_manager.c:451
+#: src/skins/ui_manager.c:462
msgid "WinAMP Presets"
msgstr "WinAMP 预设"
-#: src/skins/ui_manager.c:452
+#: src/skins/ui_manager.c:463
msgid "Import WinAMP presets"
msgstr "导入WinAMP预设"
-#: src/skins/ui_manager.c:455
+#: src/skins/ui_manager.c:466
msgid "Save preset"
msgstr "ä¿å­˜é¢„设"
-#: src/skins/ui_manager.c:458
+#: src/skins/ui_manager.c:469
msgid "Save auto-load preset"
msgstr "ä¿å­˜è‡ªåŠ¨åŠ è½½é¢„设"
-#: src/skins/ui_manager.c:461
+#: src/skins/ui_manager.c:472
msgid "Save default preset"
msgstr "ä¿å­˜é»˜è®¤é¢„设"
-#: src/skins/ui_manager.c:463
+#: src/skins/ui_manager.c:474
msgid "To file"
msgstr "ä¿å­˜åˆ°æ–‡ä»¶"
-#: src/skins/ui_manager.c:464
+#: src/skins/ui_manager.c:475
msgid "Save preset to file"
msgstr "ä¿å­˜é¢„设到文件"
-#: src/skins/ui_manager.c:466
+#: src/skins/ui_manager.c:477
msgid "To WinAMP EQF file"
msgstr "ä¿å­˜åˆ°WinAMP EQF文件"
-#: src/skins/ui_manager.c:467
+#: src/skins/ui_manager.c:478
msgid "Save preset to WinAMP EQF file"
msgstr "ä¿å­˜é¢„设到WinAMP EQF文件"
-#: src/skins/ui_manager.c:470
+#: src/skins/ui_manager.c:481
msgid "Delete preset"
msgstr "删除预设"
-#: src/skins/ui_manager.c:473
+#: src/skins/ui_manager.c:484
msgid "Delete auto-load preset"
msgstr "删除自动加载预设"
-#: src/skins/ui_playlist.c:374
+#: src/skins/ui_playlist.c:244
msgid "Search entries in active playlist"
msgstr "从当å‰æ’­æ”¾åˆ—表中æœç´¢æ¡ç›®"
-#: src/skins/ui_playlist.c:382
+#: src/skins/ui_playlist.c:252
msgid ""
"Select entries in playlist by filling one or more fields. Fields use regular "
"expressions syntax, case-insensitive. If you don't know how regular "
@@ -4778,182 +3264,111 @@ msgstr ""
"按部分字段æœç´¢æ’­æ”¾åˆ—表中的æ¡ç›®ã€‚å„个字段都å¯ä»¥ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼ï¼Œè€Œä¸”是ä¸åˆ†å¤§å°"
"字的。如果你ä¸çŸ¥é“何为正则表达å¼ï¼Œç®€å•çš„输入部分你想æœç´¢çš„文字亦å¯ã€‚"
-#: src/skins/ui_playlist.c:397
+#: src/skins/ui_playlist.c:260
+msgid "Title: "
+msgstr "标题:"
+
+#: src/skins/ui_playlist.c:267
msgid "Album: "
msgstr "专辑:"
-#: src/skins/ui_playlist.c:404
+#: src/skins/ui_playlist.c:274
msgid "Artist: "
msgstr "艺术家:"
-#: src/skins/ui_playlist.c:411
+#: src/skins/ui_playlist.c:281
msgid "Filename: "
msgstr "文件å"
-#: src/skins/ui_playlist.c:419
+#: src/skins/ui_playlist.c:289
msgid "Clear previous selection before searching"
msgstr "æœç´¢å‰æ¸…空之å‰çš„结果"
-#: src/skins/ui_playlist.c:422
+#: src/skins/ui_playlist.c:292
msgid "Automatically toggle queue for matching entries"
msgstr "自动为区é…æ¡ç›®åˆ‡æ¢é˜Ÿåˆ—"
-#: src/skins/ui_playlist.c:425
+#: src/skins/ui_playlist.c:295
msgid "Create a new playlist with matching entries"
msgstr "用匹é…çš„æ¡ç›®åˆ›å»ºæ–°çš„播放列表"
-#: src/skins/ui_playlist.c:772
-msgid "Save as Static Playlist"
-msgstr "ä¿å­˜åˆ°é™æ€æ’­æ”¾åˆ—表"
-
-#: src/skins/ui_playlist.c:779
-msgid "Use Relative Path"
-msgstr "使用相对路径"
-
-#: src/skins/ui_playlist.c:802
-msgid "Load Playlist"
-msgstr "加载播放列表"
-
-#: src/skins/ui_playlist.c:815
-msgid "Save Playlist"
-msgstr "ä¿å­˜æ’­æ”¾åˆ—表"
-
-#: src/skins/ui_playlist.c:1146
+#: src/skins/ui_playlist.c:762
msgid "Audacious Playlist Editor"
msgstr "Audacious播放列表编辑器"
-#: src/skins/ui_playlist.c:1206
+#: src/skins/ui_playlist.c:809
#, c-format
msgid "%s (%d of %d)"
msgstr ""
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "31 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:435
-msgid "63 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "125 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "250 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "500 Hz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "1 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:436
-msgid "2 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "4 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "8 kHz"
-msgstr ""
-
-#: src/skins/ui_skinned_equalizer_slider.c:437
-msgid "16 kHz"
-msgstr ""
-
-#: src/skins/ui_skinselector.c:179
+#: src/skins/ui_skinselector.c:162
msgid "Archived Winamp 2.x skin"
msgstr "已打包的Winamp 2.x主题"
-#: src/skins/ui_skinselector.c:184
+#: src/skins/ui_skinselector.c:167
msgid "Unarchived Winamp 2.x skin"
msgstr "未打包的Winamp 2.x主题"
-#: src/skins/util.c:834
+#: src/skins/util.c:773
#, c-format
msgid "Could not create directory (%s): %s\n"
-msgstr "无法创建目录(%s): %s\n"
+msgstr "无法创建目录(%s):%s\n"
-#: src/sndfile/plugin.c:531
+#: src/sndfile/plugin.c:454
msgid "About sndfile plugin"
msgstr "关于sndfileæ’件"
-#: src/sndfile/plugin.c:532
-msgid ""
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the xmms_sndfile plugin which is:\n"
-"Copyright (C) 2000, 2002 Erik de Castro Lopo\n"
-"\n"
-"This program is free software ; you can redistribute it and/or modify \n"
-"it under the terms of the GNU General Public License as published by \n"
-"the Free Software Foundation ; either version 2 of the License, or \n"
-"(at your option) any later version. \n"
-" \n"
-"This program is distributed in the hope that it will be useful, \n"
-"but WITHOUT ANY WARRANTY ; without even the implied warranty of \n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. \n"
-"See the GNU General Public License for more details. \n"
-"\n"
-"You should have received a copy of the GNU General Public \n"
-"License along with this program ; if not, write to \n"
-"the Free Software Foundation, Inc., \n"
-"51 Franklin Street, Fifth Floor, \n"
-"Boston, MA 02110-1301 USA"
-msgstr ""
-
-#: src/sndstretch/sndstretch_xmms.c:175
+#: src/sndstretch/sndstretch_xmms.c:155
msgid "About SndStretch"
msgstr "关于SndStretch"
-#: src/sndstretch/sndstretch_xmms.c:336
+#: src/sndstretch/sndstretch_xmms.c:308
msgid "Volume corr."
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:337
+#: src/sndstretch/sndstretch_xmms.c:309
msgid "Short Overlap"
msgstr ""
-#: src/sndstretch/sndstretch_xmms.c:391
+#: src/sndstretch/sndstretch_xmms.c:355
msgid "Speed"
msgstr "速度"
-#: src/sndstretch/sndstretch_xmms.c:392
+#: src/sndstretch/sndstretch_xmms.c:356
msgid "Pitch"
msgstr "音调"
-#: src/sndstretch/sndstretch_xmms.c:413
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "缩放"
+
+#: src/sndstretch/sndstretch_xmms.c:377
msgid "SndStretch - Configuration"
msgstr "SndStretch - 设置"
-#: src/song_change/song_change.c:397
+#: src/song_change/song_change.c:447
msgid "Command to run when Audacious starts a new song."
msgstr "歌曲开始播放时执行指令。"
-#: src/song_change/song_change.c:398 src/song_change/song_change.c:402
-#: src/song_change/song_change.c:406 src/song_change/song_change.c:410
+#: src/song_change/song_change.c:449 src/song_change/song_change.c:455
+#: src/song_change/song_change.c:461 src/song_change/song_change.c:467
msgid "Command:"
msgstr "指令:"
-#: src/song_change/song_change.c:401
+#: src/song_change/song_change.c:453
msgid "Command to run toward the end of a song."
msgstr "歌曲å³å°†å®Œæˆæ—¶æ‰§è¡ŒæŒ‡ä»¤ã€‚"
-#: src/song_change/song_change.c:405
+#: src/song_change/song_change.c:459
msgid "Command to run when Audacious reaches the end of the playlist."
msgstr "当Audacious播放到列表结尾时执行指令。"
-#: src/song_change/song_change.c:409
+#: src/song_change/song_change.c:465
msgid ""
"Command to run when title changes for a song (i.e. network streams titles)."
-msgstr "歌曲的标题改å˜æ—¶æ‰§è¡ŒæŒ‡ä»¤(如: 网络媒体的标题)。"
+msgstr "歌曲的标题改å˜æ—¶æ‰§è¡ŒæŒ‡ä»¤(如:网络媒体的标题)。"
-#: src/song_change/song_change.c:413
+#: src/song_change/song_change.c:471
msgid ""
"You can use the following format strings which\n"
"will be substituted before calling the command\n"
@@ -4966,10 +3381,28 @@ msgid ""
"%n or %s: Song name\n"
"%r: Rate (in bits per second)\n"
"%t: Playlist position (%02d)\n"
-"%p: Currently playing (1 or 0)"
-msgstr ""
-
-#: src/song_change/song_change.c:437
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"ä½ å¯ä»¥ä½¿ç”¨ä»¥ä¸‹çš„æ ¼å¼ç¬¦å·ï¼Œåœ¨æ‰§è¡Œå‘½ä»¤æ—¶ï¼Œ\n"
+"它们会被转æ¢ä¸ºç›¸åº”的值。\n"
+"部分符å·åœ¨end-of-playlist命令中无效)\n"
+"\n"
+"%F: 频率 (å•ä½ï¼šHz)\n"
+"%c: 声é“æ•°\n"
+"%f: 文件å (完整路径)\n"
+"%l: 长度 (å•ä½ï¼šæ¯«ç§’)\n"
+"%n 或 %s: 歌曲å\n"
+"%r: 比率 (å•ä½ï¼š bit/秒)\n"
+"%t: 播放列表ä½ç½® (%02d)\n"
+"%p: 当å‰æ’­æ”¾æ›²ç›® (1 or 0)\n"
+"%a: 艺术家\n"
+"%b: 专辑\n"
+"%T: 音轨标题"
+
+#: src/song_change/song_change.c:498
msgid ""
"<span size='small'>Parameters passed to the shell should be encapsulated in "
"quotes. Doing otherwise is a security risk.</span>"
@@ -4977,23 +3410,19 @@ msgstr ""
"<span size='small'>传递到Shellçš„å‚数一定è¦ç”¨å¼•å·åŒ…围,å¦åˆ™ä¼šæ˜¯ä¸€ä»¶ç›¸å½“å±é™©çš„"
"事。</span>"
-#: src/song_change/song_change.c:448
+#: src/song_change/song_change.c:509
msgid "Commands"
msgstr "指令"
-#: src/song_change/song_change.c:484
+#: src/song_change/song_change.c:539
msgid "Song Change"
msgstr "歌曲改å˜"
-#: src/spectrum/spectrum.c:89
-msgid "Spectrum Analyzer"
-msgstr "光谱分æžå™¨"
-
-#: src/statusicon/statusicon.c:355
+#: src/statusicon/statusicon.c:378
msgid "About Status Icon Plugin"
msgstr "关于状æ€å›¾æ ‡æ’件"
-#: src/statusicon/statusicon.c:356
+#: src/statusicon/statusicon.c:379
msgid ""
"Status Icon Plugin\n"
"\n"
@@ -5005,84 +3434,96 @@ msgid ""
msgstr ""
"状æ€å›¾æ ‡æ’件\n"
"\n"
-"版æƒæ‰€æœ‰ (c) 2005-2007 Giacomo Lozito <james@develia.org>\n"
-"版æƒæ‰€æœ‰ (c) 2010 MichaÅ‚ Lipski <tallica@o2.pl>\n"
+"版æƒæ‰€æœ‰ (c)\n"
+"2005-2007 Giacomo Lozito <james@develia.org>\n"
+"2010 Michał Lipski <tallica@o2.pl>\n"
"\n"
"æ­¤æ’件会在系统托盘上生æˆçŠ¶æ€å›¾æ ‡ã€‚\n"
-#: src/statusicon/statusicon.c:418
+#: src/statusicon/statusicon.c:447
msgid "Status Icon Plugin - Preferences"
msgstr "状æ€å›¾æ ‡æ’件 - 首选项"
-#: src/statusicon/statusicon.c:428
+#: src/statusicon/statusicon.c:457
msgid "Right-Click Menu"
msgstr "å³é”®èœå•"
-#: src/statusicon/statusicon.c:433
+#: src/statusicon/statusicon.c:462
msgid "Small playback menu #1"
msgstr "迷你播放èœå•#1"
-#: src/statusicon/statusicon.c:436
+#: src/statusicon/statusicon.c:465
msgid "Small playback menu #2"
msgstr "迷你播放èœå•#2"
-#: src/statusicon/statusicon.c:452
+#: src/statusicon/statusicon.c:481
msgid "Mouse Scroll Action"
msgstr "鼠标滚轮动作"
-#: src/statusicon/statusicon.c:456
+#: src/statusicon/statusicon.c:485
msgid "Change volume"
-msgstr "改å˜éŸ³é‡"
+msgstr "调整音é‡"
-#: src/statusicon/statusicon.c:458
+#: src/statusicon/statusicon.c:487
msgid "Change playing song"
-msgstr "改å˜æ’­æ”¾ä¸­æ­Œæ›²"
+msgstr "改å˜æ­Œæ›²"
+
+#: src/statusicon/statusicon.c:500
+msgid "Other settings"
+msgstr "其它设置"
-#: src/stereo_plugin/stereo.c:40
+#: src/statusicon/statusicon.c:505
+msgid "Disable the popup window"
+msgstr "ç¦ç”¨å¼¹å‡ºçª—å£"
+
+#: src/statusicon/statusicon.c:512
+msgid "Close to the notification area (system tray)"
+msgstr "关闭æ示区域(系统托盘)"
+
+#: src/stereo_plugin/stereo.c:45
msgid ""
"Extra Stereo Plugin\n"
"\n"
"By Johan Levin 1999."
msgstr ""
+"Extra Stereoæ’件\n"
+"\n"
+"作者: Johan Levin 1999."
#: src/stereo_plugin/stereo.c:64
msgid "About Extra Stereo Plugin"
msgstr "About Extra Stereoæ’件"
-#: src/stereo_plugin/stereo.c:100
+#: src/stereo_plugin/stereo.c:95
msgid "Configure Extra Stereo"
msgstr "设置Extra Stereo"
-#: src/streambrowser/gui/streambrowser_win.c:62
+#: src/streambrowser/gui/streambrowser_win.c:78
msgid "Search:"
msgstr "æœç´¢ï¼š"
-#: src/streambrowser/gui/streambrowser_win.c:81
-#: src/streambrowser/gui/streambrowser_win.c:370
+#: src/streambrowser/gui/streambrowser_win.c:97
+#: src/streambrowser/gui/streambrowser_win.c:372
msgid "Add Bookmark"
msgstr "添加书签"
-#: src/streambrowser/gui/streambrowser_win.c:95
-msgid "Stream browser"
-msgstr "æµæŸ¥çœ‹å™¨"
-
-#: src/streambrowser/gui/streambrowser_win.c:319
+#: src/streambrowser/gui/streambrowser_win.c:324
msgid "Stream name"
msgstr "æµå称"
-#: src/streambrowser/gui/streambrowser_win.c:326
+#: src/streambrowser/gui/streambrowser_win.c:331
msgid "Now playing"
msgstr "正在播放"
-#: src/streambrowser/gui/streambrowser_win.c:367
+#: src/streambrowser/gui/streambrowser_win.c:369
msgid "Remove Bookmark"
msgstr "删除书签"
-#: src/streambrowser/streambrowser.c:331
+#: src/streambrowser/streambrowser.c:330
msgid "About Stream Browser"
msgstr "关于æµæŸ¥çœ‹å™¨"
-#: src/streambrowser/streambrowser.c:332
+#: src/streambrowser/streambrowser.c:331
msgid ""
"Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
"Team.\n"
@@ -5097,52 +3538,22 @@ msgid ""
"\n"
"This was a Google Summer of Code 2008 project."
msgstr ""
-
-#: src/streambrowser/streambrowser.c:357 src/streambrowser/streambrowser.c:367
-msgid "Streambrowser"
-msgstr "æµæµè§ˆå™¨"
-
-#: src/sun/about.c:30
-msgid "About the Sun Driver"
-msgstr "关于Sun驱动"
-
-#: src/sun/about.c:31
-msgid ""
-"XMMS BSD Sun Driver\n"
+"版æƒæ‰€æœ‰ (c)\n"
+"2008, Calin Crisan <ccrisan@gmail.com>åŠAudaciouså¼€å‘å°ç»„。\n"
"\n"
-"Copyright (c) 2001 CubeSoft Communications, Inc.\n"
-"Maintainer: <vedge at csoft.org>.\n"
-msgstr ""
-"XMMS BSD Sun驱动\n"
+"This is a simple stream browser that includes the most popular streaming "
+"directories.\n"
+"éžå¸¸æ„Ÿè°¢Streamtunerçš„å¼€å‘者<http://www.nongnu.org/streamtuner>,\n"
+"åŠAudacious社区全体。\n"
+"åŒæ—¶äº¦éžå¸¸æ„Ÿè°¢Tony Vroon对我的帮助和指导。\n"
"\n"
-"版æƒæ‰€æœ‰ (c) 2001 CubeSoft Communications, Inc.\n"
-"维护者: <vedge at csoft.org>.\n"
-
-#: src/sun/configure.c:199
-msgid "Audio control device:"
-msgstr "音频控制设备:"
-
-#: src/sun/configure.c:270
-msgid "Buffer size (ms):"
-msgstr ""
-
-#: src/sun/configure.c:348
-msgid "Volume controls device:"
-msgstr "音é‡æŽ§åˆ¶è®¾å¤‡ï¼š"
+"Google Summer of Code 2008 project."
-#: src/sun/configure.c:361
-msgid "XMMS uses mixer exclusively."
-msgstr "XMMS独å æ··éŸ³å™¨ã€‚"
-
-#: src/sun/configure.c:536
-msgid "Sun driver configuration"
-msgstr "Sun驱动设置"
-
-#: src/tonegen/tonegen.c:53
+#: src/tonegen/tonegen.c:48
msgid "About Tone Generator"
msgstr "关于Tone Generator"
-#: src/tonegen/tonegen.c:55
+#: src/tonegen/tonegen.c:50
msgid ""
"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
@@ -5151,36 +3562,24 @@ msgid ""
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
#, c-format
msgid "%s %.1f Hz"
msgstr ""
-#: src/tonegen/tonegen.c:105
+#: src/tonegen/tonegen.c:100
msgid "Tone Generator: "
msgstr ""
-#: src/vorbis/configure.c:31
-msgid "Override generic titles"
-msgstr "覆蓋常规标题"
-
-#: src/vorbis/configure.c:32
-msgid "Title format:"
-msgstr "标题格å¼"
-
-#: src/vorbis/configure.c:36
-msgid "Ogg Vorbis Tags"
-msgstr "Ogg Vorbis标签"
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr "关于文件I/Oæ’件"
-#: src/vorbis/configure.c:68
-msgid "Ogg Vorbis Audio Plugin Configuration"
-msgstr "Ogg Vorbis音频播放设置"
-
-#: src/vorbis/vorbis.c:549
+#: src/vorbis/vorbis.c:572
msgid "About Ogg Vorbis Audio Plugin"
msgstr "关于Ogg Vorbis音频æ’件"
-#: src/vorbis/vorbis.c:554
+#: src/vorbis/vorbis.c:577
msgid ""
"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
"\n"
@@ -5200,9 +3599,9 @@ msgid ""
msgstr ""
"Xiph.org基金会的Ogg Vorbisæ’件\n"
"\n"
-"最åˆä½œè€…:\n"
+"原作者:\n"
"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
-"Contributions from\n"
+"贡献者:\n"
"Chris Montgomery <monty@xiph.org>\n"
"Peter Alm <peter@xmms.org>\n"
"Michael Smith <msmith@labyrinth.edu.au>\n"
@@ -5230,95 +3629,1212 @@ msgid ""
"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
msgstr ""
"Sashnov Alexander <sashnov@ngs.ru>的Vortex文件播放器\n"
-"ç”±Roman Sherbakov <v_soft@microfor.ru>çš„in_vtx.dllæºç å‘展而æˆ\n"
-"vtx音ä¹æ–‡ä»¶å¯åœ¨http://vtx.microfor.ru/music.htm或者其它AY/YM音ä¹ç½‘站上找到\n"
-"Audacious上的实现由Pavel Vymetalek <pvymetalek@seznam.cz>完æˆ"
+"程åºåŸºäºŽRoman Sherbakov<v_soft@microfor.ru>çš„in_vtx.dllæºç \n"
+"vtx音ä¹æ–‡ä»¶å¯åœ¨http://vtx.microfor.ru/music.htm或者其它AY/YM音ä¹ç½‘站上找"
+"到。\n"
+"Audacious的实现由Pavel Vymetalek<pvymetalek@seznam.cz>完æˆ"
-#: src/wavpack/wavpack.c:371
+#: src/wavpack/wavpack.c:353
#, c-format
msgid "Wavpack Decoder Plugin %s"
msgstr "Wavpack解ç æ’件 %s"
-#: src/wavpack/wavpack.c:372
+#: src/wavpack/wavpack.c:354
msgid ""
"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
"Some of the plugin code was by Miles Egan\n"
"Visit the Wavpack site at http://www.wavpack.com/\n"
msgstr ""
-"版æƒæ‰€æœ‰ (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"版æƒæ‰€æœ‰ (c)\n"
+"2006 William Pitcock <nenolod -at- nenolod.net>\n"
"\n"
-"部分æ’件代ç æ¥è‡ªMiles Egan\n"
+"æ’件部分代ç æ¥è‡ªMiles Egan\n"
"登录Wavpack网站http://www.wavpack.com/\n"
-#~ msgid "PREAMP"
-#~ msgstr "å‰ç½®æ”¾å¤§å™¨"
+#~ msgid "Daemon Interface (like old headless mode)"
+#~ msgstr "Daemon模å¼"
+
+#~ msgid "About %s"
+#~ msgstr "关于 %s"
+
+#~ msgid " Error"
+#~ msgstr "错误"
+
+#~ msgid "General info"
+#~ msgstr "一般信æ¯"
+
+#~ msgid "Couldn't find pixmap file: %s"
+#~ msgstr "无法找到pixmap文件: %s"
+
+#~ msgid "Audacious-SID configuration"
+#~ msgstr "Audacious-SID设置"
+
+#~ msgid "Resolution:"
+#~ msgstr "分辨率:"
+
+#~ msgid "Samplerate:"
+#~ msgstr "å–样率:"
+
+#~ msgid "Use oversampling"
+#~ msgstr "使用超å–æ ·"
+
+#~ msgid "Factor:"
+#~ msgstr "系数:"
+
+#~ msgid "Large factors require more CPU-power"
+#~ msgstr "系数越大使用的CPU越多"
+
+#~ msgid "Oversampling:"
+#~ msgstr "超å–æ ·"
+
+#~ msgid "Audio"
+#~ msgstr "音频"
+
+#~ msgid "Force speed"
+#~ msgstr "强制速度"
+
+#~ msgid ""
+#~ "If enabled, this option \"forces\" the emulation engine to use the "
+#~ "selected clock speed/frequency. Otherwise the speed is determined from "
+#~ "played file itself."
+#~ msgstr "如果å¯ç”¨ï¼Œå°†å¼ºåˆ¶æ¨¡æ‹Ÿå™¨å¼•æ“Žä½¿ç”¨æŒ‡å®šçš„时频速度。å¦åˆ™åˆ™è‡ªå·±æ£€æµ‹ã€‚"
+
+#~ msgid ""
+#~ "PAL is the european TV standard, which uses 50Hz vertical refresh "
+#~ "frequency. Most of SID-tunes have been made for PAL computers."
+#~ msgstr ""
+#~ "PAL是欧洲的电视标准,它使用的垂直刷新率是50Hz。大部分的SID-tunes都是为PAL"
+#~ "电脑制作的。"
+
+#~ msgid ""
+#~ "NTSC is the TV standard with 60Hz vertical refresh rate (and other "
+#~ "features that differ from PAL). It is mainly used in United States, Japan "
+#~ "and certain other countries."
+#~ msgstr ""
+#~ "NTSC则是使用垂直刷新率为50Hz的电视标准(除此以外,还包å«å…¶å®ƒä¸åŒäºŽPAL的特"
+#~ "性)。主è¦åœ¨ç¾Žå›½ï¼Œæ—¥æœ¬è¿˜å…¶å®ƒçš„部分国家使用。"
+
+#~ msgid "Clock speed:"
+#~ msgstr "时频速度:"
+
+#~ msgid "Force model"
+#~ msgstr "强制型å·"
+
+#~ msgid "SID model:"
+#~ msgstr "SIDåž‹å·ï¼š"
+
+#~ msgid "SIDPlay 1 (frame-based)"
+#~ msgstr "SIDPlay 1(基于帧)"
+
+#~ msgid ""
+#~ "Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most "
+#~ "cases, though."
+#~ msgstr ""
+#~ "使用libSIDPlay 1.x模拟器,速度更快,但并ä¸å‡†ç¡®ã€‚大部分情况都工作良好。"
+
+#~ msgid "SIDPlay 2 (cycle-based)"
+#~ msgstr "SIDPlay 2(基于周期)"
+
+#~ msgid ""
+#~ "Use libSIDPlay 2.x emulation, which requires powerful CPU due to more "
+#~ "exact emulation."
+#~ msgstr "使用libSIDPlay 2.x模拟器,将使用更多CPU以获得更准确的模拟。"
+
+#~ msgid "Emulation library selection:"
+#~ msgstr "选择模拟器使用的库:"
+
+#~ msgid "Real C64 (SIDPlay 2 only)"
+#~ msgstr "Real C64 (仅SIDPlay 2å¯ç”¨ï¼‰"
+
+#~ msgid "Bank switching"
+#~ msgstr "Bank切æ¢"
+
+#~ msgid "Transparent ROM"
+#~ msgstr "é€æ˜ŽROM"
+
+#~ msgid "PlaySID environment"
+#~ msgstr "PlaySID环境"
+
+#~ msgid "Memory mode:"
+#~ msgstr "内存模å¼ï¼š"
+
+#~ msgid "Optimization mode (faster, inaccurate)"
+#~ msgstr "优化模å¼ï¼ˆæ›´å¿«ï¼Œä¸å‡†ç¡®ï¼‰"
+
+#~ msgid "reSID-emulation"
+#~ msgstr "reSID模拟"
+
+#~ msgid "SIDPlay 2 options:"
+#~ msgstr "SIDPlay2 选项:"
+
+#~ msgid "Resampling (FIR)"
+#~ msgstr "å–æ ·(FIR)"
+
+#~ msgid "reSID sampling options:"
+#~ msgstr "reSIDå–样选项:"
+
+#~ msgid "Emulate filters"
+#~ msgstr "模拟过滤器"
+
+#~ msgid "Reset values"
+#~ msgstr "é‡ç½®"
+
+#~ msgid "Export"
+#~ msgstr "导出"
+
+#~ msgid "Use"
+#~ msgstr "使用"
+
+#~ msgid "Filter curve:"
+#~ msgstr "过滤器曲线:"
+
+#~ msgid "Filters"
+#~ msgstr "过滤器"
+
+#~ msgid "Play at least for specified time"
+#~ msgstr "至少播放指定的时间"
+
+#~ msgid "Playtime:"
+#~ msgstr "播放时间:"
+
+#~ msgid "Minimum playtime:"
+#~ msgstr "最å°æ’­æ”¾æ—¶é—´ï¼š"
+
+#~ msgid "Play for specified time maximum"
+#~ msgstr "最长播放指定时间"
+
+#~ msgid "Only when song length is unknown"
+#~ msgstr "仅当歌曲长度未知"
+
+#~ msgid ""
+#~ "If enabled, the maximum playtime is applied only if song/tune length is "
+#~ "not known."
+#~ msgstr "如果å¯ç”¨ï¼Œæœ€é•¿æ’­æ”¾æ—¶é—´ä»…当歌曲长度未知时使用"
+
+#~ msgid "Maximum playtime:"
+#~ msgstr "最长播放时间:"
+
+#~ msgid "Use XSIDPLAY-compatible database"
+#~ msgstr "使用XSIDPLAY兼容的数æ®åº“"
+
+#~ msgid "DB-file:"
+#~ msgstr "æ•°æ®åº“文件:"
+
+#~ msgid "Database path and filename"
+#~ msgstr "æ•°æ®åº“文件路径åŠå称"
+
+#~ msgid "Browse for song length-database file"
+#~ msgstr "æµè§ˆ"
+
+#~ msgid "Song length database:"
+#~ msgstr "歌曲长度数æ®åº“:"
+
+#~ msgid "Songlength"
+#~ msgstr "歌曲长度"
+
+#~ msgid "Override generic Tuplez format string"
+#~ msgstr "覆盖常规Tuplezæ ¼å¼å­—串"
+
+#~ msgid "Tuplez format string for SID-files"
+#~ msgstr "SID文件Tuplezæ ¼å¼å­—串"
+
+#~ msgid "Song title format:"
+#~ msgstr "歌曲标题格å¼ï¼š"
+
+#~ msgid "Use STIL database"
+#~ msgstr "使用STILæ•°æ®åº“"
+
+#~ msgid "STIL file:"
+#~ msgstr "STIL文件:"
+
+#~ msgid ""
+#~ "Path and filename of STIL database file (STIL.txt), usually found from "
+#~ "HVSC's DOCUMENTS-subdirectory."
+#~ msgstr ""
+#~ "STILæ•°æ®åº“文件的路径åŠå称(STIL.txt)。通常å¯ä»¥åœ¨HVSC文档å­ç›®å½•ä¸‹æ‰¾åˆ°ã€‚"
+
+#~ msgid "Browse for STIL-database file"
+#~ msgstr "æµè§ˆSTILæ•°æ®åº“文件"
+
+#~ msgid "HVSC path:"
+#~ msgstr "HVSC路径:"
+
+#~ msgid "Browse for HVSC path"
+#~ msgstr "æµè§ˆHVSC路径"
+
+#~ msgid "SID Tune Information List (STIL) database:"
+#~ msgstr "SID音调信æ¯åˆ—表(STIL)数æ®åº“"
+
+#~ msgid "Cancel any changes"
+#~ msgstr "å–消所有å˜æ›´"
+
+#~ msgid "Accept and update changes"
+#~ msgstr "åŒæ„并更新"
+
+#~ msgid "Audacious-SID Fileinfo"
+#~ msgstr "Audacious-SID文件信æ¯"
+
+#~ msgid "Filename:"
+#~ msgstr "文件å:"
+
+#~ msgid "Songname:"
+#~ msgstr "歌曲å:"
+
+#~ msgid "Composer:"
+#~ msgstr "作曲家:"
+
+#~ msgid "Copyright:"
+#~ msgstr "版æƒï¼š"
+
+#~ msgid "Song Information:"
+#~ msgstr "歌曲信æ¯ï¼š"
+
+#~ msgid "Author:"
+#~ msgstr "作者:"
+
+#~ msgid "Duration:"
+#~ msgstr "æŒç»­æ—¶é—´ï¼š"
+
+#~ msgid "Sub-tune Information:"
+#~ msgstr "Sub-tuneä¿¡æ¯ï¼š"
+
+#~ msgid "Select HVSC song length database"
+#~ msgstr "选择HVSC歌曲长度数æ®åº“"
+
+#~ msgid "Select STIL-database"
+#~ msgstr "选择STILæ•°æ®åº“"
+
+#~ msgid "Select HVSC location prefix"
+#~ msgstr "选择HVSC路径å‰ç¼€"
+
+#~ msgid "Select SIDPlay2 filters file for importing"
+#~ msgstr "选择è¦å¯¼å…¥çš„SIDPlay2过滤文件"
+
+#~ msgid "Select SIDPlay2 filters file for exporting"
+#~ msgstr "选择è¦å¯¼å‡ºçš„SIDplay2过滤文件"
+
+#~ msgid "Confirm selected action"
+#~ msgstr "确认选中的动作"
+
+#~ msgid "Yes"
+#~ msgstr "是"
+
+#~ msgid "No"
+#~ msgstr "å¦"
+
+#~ msgid "Save All Playlists"
+#~ msgstr "ä¿å­˜æ‰€æœ‰æ’­æ”¾åˆ—表"
+
+#~ msgid ""
+#~ "Saves all the playlists that are open. Note that this is done "
+#~ "automatically when Audacious quits."
+#~ msgstr "ä¿å­˜æ‰€æœ‰å·²æ‰“开的播放列表(其实Audacious退出时是会自动ä¿å­˜çš„)。"
+
+#~ msgid "Opens the playlist manager."
+#~ msgstr "打开播放列表管ç†å™¨"
+
+#~ msgid "Override generic titles"
+#~ msgstr "覆蓋常规标题"
+
+#~ msgid "Title format:"
+#~ msgstr "标题格å¼"
+
+#~ msgid "Ogg Vorbis Tags"
+#~ msgstr "Ogg Vorbis标签"
+
+#~ msgid "Ogg Vorbis Audio Plugin Configuration"
+#~ msgstr "Ogg Vorbis音频播放设置"
+
+#~ msgid "Use Bitmap fonts if available"
+#~ msgstr "å°½å¯èƒ½ä½¿ç”¨ç‚¹é˜µå­—体"
+
+#~ msgid ""
+#~ "Use bitmap fonts if they are available. Bitmap fonts do not support "
+#~ "Unicode strings."
+#~ msgstr "å°½å¯èƒ½ä½¿ç”¨ç‚¹é˜µå­—体,点阵字体ä¸æ”¯æŒUnicode设置"
+
+#~ msgid "<b>_Miscellaneous</b>"
+#~ msgstr "<b>其它(_M)</b>"
+
+#~ msgid "Use two-way text scroller"
+#~ msgstr "使用åŒå‘字符滚动"
+
+#~ msgid "About "
+#~ msgstr "关于"
#~ msgid ""
-#~ "<b><big>Unable to save playlist.</big></b>\n"
#~ "\n"
-#~ "Unknown file type for '%s'.\n"
+#~ "Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "See http://www.gnu.org/licenses/lgpl.html for details.\n"
+#~ "\n"
+#~ "This plugin uses the AdPlug library, which is copyright (C) Simon Peter, "
+#~ "et al.\n"
+#~ "Linked AdPlug library version: "
#~ msgstr ""
-#~ "<b><big>无法ä¿å­˜åˆ—表。</big></b>\n"
#~ "\n"
-#~ "未知的'%s'文件类型\n"
+#~ "版æƒæ‰€æœ‰ (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n"
+#~ "\n"
+#~ "This plugin is released under the terms and conditions of the GNU LGPL.\n"
+#~ "详情请登录http://www.gnu.org/licenses/lgpl.html.\n"
+#~ "\n"
+#~ "æ­¤æ’件基于AdPlug库, 版æƒæ‰€æœ‰ (C) Simon Peter, et al.\n"
+#~ "当å‰AdPlug版本: "
+
+#~ msgid "AdPlug :: Configuration"
+#~ msgstr "AdPlug :: 设置"
+
+#~ msgid "Sound quality"
+#~ msgstr "音质"
+
+#~ msgid "Resolution"
+#~ msgstr "分辨率"
+
+#~ msgid "Channels"
+#~ msgstr "声é“"
+
+#~ msgid ""
+#~ "Setting stereo is not recommended, unless you need to. This won't add any "
+#~ "stereo effects to the sound - OPL2 is just mono - but eats up more CPU "
+#~ "power!"
+#~ msgstr ""
+#~ "设置为立体音是ä¸æŽ¨èçš„åšæ³•ï¼Œé™¤éžä½ çŸ¥é“自己在åšä»€ä¹ˆã€‚此选项ä¸ä¼šå¸¦æ¥ä»»ä½•ç«‹ä½“"
+#~ "音效果(OPL2åªèƒ½æ˜¯å•å£°é“的),相ååªä¼šå ç”¨æ›´å¤šçš„CPU!"
+
+#~ msgid "Frequency"
+#~ msgstr "频率"
+
+#~ msgid "Detect songend"
+#~ msgstr "检测歌曲结尾"
+
+#~ msgid ""
+#~ "If enabled, XMMS will detect a song's ending, stop it and advance in the "
+#~ "playlist. If disabled, XMMS won't take notice of a song's ending and loop "
+#~ "it all over again and again."
+#~ msgstr ""
+#~ "如果å¯ç”¨ï¼ŒXMMSå°†å°è¯•æµ‹è¯•æ­Œæ›²çš„结尾,并在结æŸæ—¶ï¼Œè‡ªåŠ¨æ’­æ”¾åˆ—表中的下一首歌"
+#~ "曲。\n"
+#~ "如果ç¦ç”¨ï¼ŒXMMS将因无法得知歌曲的结尾而ä¸æ–­é‡å¤æ’­æ”¾åŒä¸€é¦–歌曲。"
+
+#~ msgid "Formats"
+#~ msgstr "æ ¼å¼"
+
+#~ msgid "Format selection"
+#~ msgstr "æ ¼å¼é€‰æ‹©"
+
+#~ msgid "Format"
+#~ msgstr "æ ¼å¼"
+
+#~ msgid "Extension"
+#~ msgstr "åŽç¼€"
+
+#~ msgid ""
+#~ "Selected file types will be recognized and played back by this plugin. "
+#~ "Deselected types will be ignored to make room for other plugins to play "
+#~ "these files."
+#~ msgstr ""
+#~ "被选中文件类型会被识别并被此æ’件播放。\n"
+#~ "未选中的,则会被忽略并由其它æ’件播放"
+
+#~ msgid "AdPlug :: File Info"
+#~ msgstr "AdPlug :: 文件信æ¯"
+
+#~ msgid "Author: "
+#~ msgstr "作者:"
+
+#~ msgid "File Type: "
+#~ msgstr "文件类型:"
+
+#~ msgid "Subsongs: "
+#~ msgstr "å­æ­Œæ›²ï¼š"
+
+#~ msgid "Instruments: "
+#~ msgstr "ä¹å™¨ï¼š"
+
+#~ msgid "Orders: "
+#~ msgstr "顺åºï¼š"
+
+#~ msgid "Patterns: "
+#~ msgstr "格调:"
+
+#~ msgid "Song"
+#~ msgstr "歌曲"
+
+#~ msgid "Instrument name"
+#~ msgstr "ä¹å™¨å"
+
+#~ msgid "Song message"
+#~ msgstr "歌曲信æ¯"
+
+#~ msgid "Subsong selection"
+#~ msgstr "å­æ­Œæ›²é€‰é¡¹"
+
+#~ msgid "Order: "
+#~ msgstr "顺åºï¼š"
-#~ msgid "GTK Foobar-like Interface"
-#~ msgstr "基于GTKçš„ç±»Foobarç•Œé¢"
+#~ msgid "Pattern: "
+#~ msgstr "格调:"
-#~ msgid "Load List"
-#~ msgstr "加载列表"
+#~ msgid "Row: "
+#~ msgstr "行:"
-#~ msgid "Save List"
-#~ msgstr "ä¿å­˜åˆ—表"
+#~ msgid "Speed: "
+#~ msgstr "速度:"
-#~ msgid "About RoarAudio Plugin"
-#~ msgstr "关于RoarAudioæ’件"
+#~ msgid "Timer: "
+#~ msgstr "计时:"
-#~ msgid "RoarAudio Audacious Plugin..."
-#~ msgstr "RoarAudio Audaciousæ’件..."
+#~ msgid "Select Playlist"
+#~ msgstr "选择播放列表"
-#~ msgid "RoarAudio Plugin - Configuration"
-#~ msgstr "RoarAudioæ’件 - 设置"
+#~ msgid "reset to current output volume"
+#~ msgstr "é‡ç½®å½“å‰è¾“出音é‡"
+
+#~ msgid "Pairing request for '%s'"
+#~ msgstr "正在为'%s'é…对请求"
+
+#~ msgid "Authorization request for %s"
+#~ msgstr "'%s'è¦æ±‚认è¯"
+
+#~ msgid "Created bonding with %s"
+#~ msgstr "正在绑定%s"
+
+#~ msgid "Removed bonding with %s"
+#~ msgstr "正在解除%s"
+
+#~ msgid "Device has been switched off"
+#~ msgstr "设备已关闭"
+
+#~ msgid "Device has been made non-discoverable"
+#~ msgstr "设备ä¸å¯è¿žæŽ¥"
+
+#~ msgid "Device has been made connectable"
+#~ msgstr "设备å¯è¿žæŽ¥"
+
+#~ msgid "Device has been made discoverable"
+#~ msgstr "设备无法æ¢å¤"
+
+#~ msgid "Device has been made limited discoverable"
+#~ msgstr "设备部分å¯æ¢å¤"
+
+#~ msgid "Device has been switched into pairing mode"
+#~ msgstr "设备已切转é…对模å¼"
+
+#~ msgid "Bluetooth headset support plugin"
+#~ msgstr "è“牙耳机支æŒæ’件"
+
+#~ msgid ""
+#~ "Bluetooth headset support\n"
+#~ "Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
+#~ "This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and "
+#~ "the Audacious team\n"
+#~ " \n"
+#~ "In order to use the AVRCP you need the uinput module loaded into the "
+#~ "kernel\n"
+#~ "The headset keys will be recognized as normal mutimedia keys and \n"
+#~ "can be configured using the Audacious Global Hotkey plugin or ohter "
+#~ "tools \n"
+#~ "provided by your window manager\n"
+#~ msgstr ""
+#~ "Bluetooth耳机支æŒ\n"
+#~ "版æƒæ‰€æœ‰ (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
+#~ "GSoC 2008 Project - éžå¸¸æ„Ÿè°¢æˆ‘的导师Tony VroonåŠAudaciouså¼€å‘å°ç»„\n"
+#~ " \n"
+#~ "è¦ä½¿ç”¨AVRCP,你必需为内核加载uinput模å—。\n"
+#~ "耳机上的键将会被识别为一般的多媒体键,\n"
+#~ "ä½ å¯ä»¥é€šè¿‡Audacious全局热键æ’件或窗å£ç®¡ç†å™¨æ供的工具进行é…置。\n"
-#~ msgid "Server Type:"
-#~ msgstr "æœåŠ¡å™¨ç±»åž‹ï¼š"
+#~ msgid "Producer"
+#~ msgstr "生产商"
-#~ msgid "Host or Path:"
-#~ msgstr "主机或路径:"
+#~ msgid "Available Headsets"
+#~ msgstr "å¯ç”¨è€³æœº"
-#~ msgid "<b>Host:</b>"
-#~ msgstr "<b>Host:</b>"
+#~ msgid "Current Headset"
+#~ msgstr "当å‰è€³æœº"
-#~ msgid "Server & Network"
-#~ msgstr "æœåŠ¡å™¨ä¸Žç½‘络"
+#~ msgid "_Connect"
+#~ msgstr "连接(_C)"
-#~ msgid "Proxy Address"
-#~ msgstr "代ç†æœåŠ¡å™¨è®¾ç½®"
+#~ msgid "Class"
+#~ msgstr "类型"
-#~ msgid "<b>Proxy</b>"
-#~ msgstr "<b>代ç†æœåŠ¡å™¨</b>"
+#~ msgid "Address:"
+#~ msgstr "地å€ï¼š"
-#~ msgid "Proxy"
-#~ msgstr "代ç†æœåŠ¡å™¨"
+#~ msgid "Bonding finish!"
+#~ msgstr "绑定完æˆï¼"
-#~ msgid "Player Name:"
-#~ msgstr "播放器å称:"
+#~ msgid "No devices found!"
+#~ msgstr "未找到设备ï¼"
+
+#~ msgid "Scanning..."
+#~ msgstr "正在扫æ..."
+
+#~ msgid "Pairing..."
+#~ msgstr "正在é…对..."
+
+#~ msgid "Rescan"
+#~ msgstr "é‡æ–°æ‰«æ"
+
+#~ msgid "Playback->Play"
+#~ msgstr "回放->播放"
+
+#~ msgid "Playback->Stop"
+#~ msgstr "回放->åœæ­¢"
+
+#~ msgid "Playback->Pause"
+#~ msgstr "回放->æš‚åœ"
+
+#~ msgid "Playback->Prev"
+#~ msgstr "回放->å‰ä¸€é¦–"
+
+#~ msgid "Playback->Next"
+#~ msgstr "回放->下一首"
+
+#~ msgid "Playback->Eject"
+#~ msgstr "回放->弹出"
+
+#~ msgid "Playlist->Repeat"
+#~ msgstr "列表->é‡å¤"
+
+#~ msgid "Playlist->Shuffle"
+#~ msgstr "列表->éšæœº"
+
+#~ msgid "Volume->Up_5"
+#~ msgstr "音é‡->+5"
+
+#~ msgid "Volume->Down_5"
+#~ msgstr "音é‡->-5"
+
+#~ msgid "Volume->Up_10"
+#~ msgstr "音é‡->+10"
+
+#~ msgid "Volume->Down_10"
+#~ msgstr "音é‡->-10"
+
+#~ msgid "Volume->Mute"
+#~ msgstr "音é‡->é™éŸ³"
+
+#~ msgid "Window->Main"
+#~ msgstr "窗å£->主界é¢"
+
+#~ msgid "Window->Playlist"
+#~ msgstr "窗å£->播放列表"
+
+#~ msgid "Window->Equalizer"
+#~ msgstr "窗å£->å‡è¡¡å™¨"
+
+#~ msgid "Window->JumpToFile"
+#~ msgstr "窗å£->跳到文件"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open device file %s , skipping this "
+#~ "device; check that the file exists and that you have read permission for "
+#~ "it\n"
+#~ msgstr ""
+#~ "event-device-plugin: 无法打开设备文件 %s,忽略此设备;请检查文件是å¦å­˜åœ¨åŠ"
+#~ "你是å¦å¯¹å…¶æœ‰è¯»å–æƒé™\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to create a io_channel for device file %s ,"
+#~ "skipping this device\n"
+#~ msgstr "event-device-plugin: 无法为设备文件 %s 创建io_channel,忽略此设备\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open /proc/bus/input/devices , automatic "
+#~ "detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 无法打开/proc/bus/input/devices, 自动检测event设备无"
+#~ "法工作。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to open a io_channel for /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 无法为/proc/bus/input/devices打开io_channel,自动检测"
+#~ "event设备无法工作。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: an error occurred while reading /proc/bus/input/"
+#~ "devices , automatic detection of event devices won't work.\n"
+#~ msgstr ""
+#~ "event-device-plugin: 读å–/proc/bus/input/devicesæ—¶å‘生错误,自动检测event"
+#~ "设备无法工作。\n"
+
+#~ msgid "event-device-plugin: device %s not found in /dev/input , skipping.\n"
+#~ msgstr "event-device-plugin: /dev/input中ä¸å­˜åœ¨è®¾å¤‡%s,已忽略。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to load config file %s , default settings "
+#~ "will be used.\n"
+#~ msgstr "event-device-plugin: 无法加载é…置文件 %s , 将使用默认设置。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: incomplete information in config file for device \"%s"
+#~ "\" , skipping.\n"
+#~ msgstr "event-device-plugin: 设备\"%s\"在é…置文件中的信æ¯ä¸å®Œæ•´ï¼Œå·²å¿½ç•¥ã€‚\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_active value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: é…置文件,无法å–得设备\"%s\" is_active的值, 已忽略.\n"
+
+#~ msgid ""
+#~ "event-device-plugin: unable to access local directory %s , settings will "
+#~ "not be saved.\n"
+#~ msgstr "event-device-plugin: 无法访问目录 %s , 设置无法ä¿å­˜ã€‚\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get filename value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: é…置文件,无法å–得设备\"%s\"的文件å, 已忽略。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get phys value for device "
+#~ "\"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: é…置文件, 无法å–得设备\"%s\"çš„phys值,已忽略。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unable to get is_custom value for "
+#~ "device \"%s\", skipping it.\n"
+#~ msgstr ""
+#~ "event-device-plugin: é…置文件,无法å–得设备\"%s\" is_custon的值, 已忽"
+#~ "略。\n"
+
+#~ msgid ""
+#~ "event-device-plugin: configuration, unexpected value for device \"%s\", "
+#~ "skipping it.\n"
+#~ msgstr "event-device-plugin: é…置文件, 设备\"%s\"的值éžæ³•, 已忽略。\n"
+
+#~ msgid "Detected"
+#~ msgstr "检测到"
+
+#~ msgid "Custom"
+#~ msgstr "自定"
+
+#~ msgid "Not Detected"
+#~ msgstr "未检测到"
+
+#~ msgid "Information"
+#~ msgstr "ä¿¡æ¯"
+
+#~ msgid ""
+#~ "Cannot open bindings window for a not-detected device.\n"
+#~ "Ensure that the device has been correctly plugged in."
+#~ msgstr ""
+#~ "无法为未检测到的设备打开绑定窗å£ã€‚\n"
+#~ "请é‡æ–°ç¡®è®¤è®¾å¤‡å·²æ­£ç¡®è¿žæŽ¥ã€‚"
+
+#~ msgid ""
+#~ "Unable to open selected device.\n"
+#~ "Please check read permissions on device file."
+#~ msgstr ""
+#~ "无法打开选中的设备。\n"
+#~ "请检查设备文件的æƒé™ã€‚"
+
+#~ msgid "EvDev-Plug - Add custom device"
+#~ msgstr "EvDev-Plug - 添加自定义设备"
+
+#~ msgid ""
+#~ "EvDev-Plug tries to automatically detect and update information about\n"
+#~ "event devices available on the system.\n"
+#~ "However, if auto-detect doesn't work for your system, or you have event\n"
+#~ "devices in a non-standard location (currently they're only searched in\n"
+#~ "/dev/input/ ), you may want to add a custom device, explicitly "
+#~ "specifying\n"
+#~ "name and device file."
+#~ msgstr ""
+#~ "EvDev-Plug正在å°è¯•è‡ªåŠ¨æ£€æµ‹å’Œæ›´æ–°ç³»ç»Ÿä¸Šå¯ç”¨çš„event设备信æ¯\n"
+#~ "如果自动检测失败,或者你的event设备ä¸åœ¨æ ‡å‡†ä½ç½®ï¼ˆçŽ°åœ¨åªåœ¨/dev/input/中æœ"
+#~ "索,\n"
+#~ "ä½ å°±è¦æ‰‹åŠ¨æ·»åŠ è®¾å¤‡ï¼Œå¹¶æ˜Žç¡®æŒ‡å®šå称åŠè®¾å¤‡æ–‡ä»¶ã€‚"
+
+#~ msgid "Device name:"
+#~ msgstr "设备å:"
+
+#~ msgid "Device file:"
+#~ msgstr "设备文件:"
+
+#~ msgid "(custom)"
+#~ msgstr "(定制)"
+
+#~ msgid ""
+#~ "Please specify both name and filename.\n"
+#~ "Filename must be specified with absolute path."
+#~ msgstr ""
+#~ "请指定å称åŠæ–‡ä»¶å。\n"
+#~ "文件å必需为ç»å¯¹è·¯å¾„。"
+
+#~ msgid ""
+#~ "Do you want to remove the existing configuration for selected device?\n"
+#~ msgstr "ä½ è¦åˆ é™¤é€‰ä¸­è®¾å¤‡çŽ°æœ‰çš„é…置文件å—?\n"
+
+#~ msgid "Do you want to remove the selected custom device?\n"
+#~ msgstr "ä½ è¦åˆ é™¤é€‰ä¸­çš„自定义设备å—?\n"
+
+#~ msgid "EvDev-Plug - Configuration"
+#~ msgstr "EvDev-Plug - 设置"
+
+#~ msgid "Active"
+#~ msgstr "已激活"
+
+#~ msgid "Status"
+#~ msgstr "状æ€"
+
+#~ msgid "Device Name"
+#~ msgstr "设备å"
+
+#~ msgid "Device File"
+#~ msgstr "设备文件"
+
+#~ msgid "Device Address"
+#~ msgstr "设备地å€"
+
+#~ msgid "_Bindings"
+#~ msgstr "绑定(_B)"
+
+#~ msgid ""
+#~ "Press a key of your device to bind it;\n"
+#~ "if no key is pressed in five seconds, this window\n"
+#~ "will close without binding changes."
+#~ msgstr ""
+#~ "请在设备上按下你è¦ç»‘定的键;如果5秒内未无æ“作,窗å£å°†è‡ªåŠ¨å…³é—­å¹¶å–消绑定。"
+
+#~ msgid "EvDev-Plug - Bindings Configuration"
+#~ msgstr "EvDev-Plug - 绑定设置"
+
+#~ msgid "<b>Name: </b>"
+#~ msgstr "<b>å称:</b>"
+
+#~ msgid "<b>Filename: </b>"
+#~ msgstr "<b>文件å:</b>"
+
+#~ msgid "<b>Phys.Address: </b>"
+#~ msgstr "<b>物ç†åœ°å€ï¼š</b>"
+
+#~ msgid "EvDev-Plug - about"
+#~ msgstr "EvDev-Plug - 关于"
+
+#~ msgid ""
+#~ "\n"
+#~ "player remote control via event devices\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "written by Giacomo Lozito\n"
+#~ msgstr ""
+#~ "\n"
+#~ "event设备远程控制播放器\n"
+#~ "http://www.develia.org/projects.php?p=audacious#evdevplug\n"
+#~ "\n"
+#~ "作者: Giacomo Lozito\n"
+
+#~ msgid "This LADSPA plugin has no user controls"
+#~ msgstr "LADSPAæ’件未被其它人所用"
+
+#~ msgid "Name"
+#~ msgstr "åå­—"
+
+#~ msgid "UID"
+#~ msgstr "UID"
+
+#~ msgid "Running plugins"
+#~ msgstr "è¿è¡Œä¸­çš„æ’件"
+
+#~ msgid "Add"
+#~ msgstr "添加"
+
+#~ msgid "Remove"
+#~ msgstr "删除"
+
+#~ msgid "LADSPA Plugin Catalog"
+#~ msgstr "LDASPAæ’件分类"
+
+#~ msgid "About LIRC Audacious Plugin"
+#~ msgstr "关于LIRC Audaciousæ’件"
+
+#~ msgid "LIRC Plugin "
+#~ msgstr "LIRCæ’件"
+
+#~ msgid ""
+#~ "\n"
+#~ "A simple plugin that lets you control\n"
+#~ "Audacious using the LIRC remote control daemon\n"
+#~ "\n"
+#~ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+#~ "from the XMMS LIRC plugin by:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "You can get LIRC information at:\n"
+#~ "http://lirc.org"
+#~ msgstr ""
+#~ "\n"
+#~ "让你能够通过LIRC控制Audaciousçš„å°æ’件。\n"
+#~ "ç”±Tony Vroon <chainsaw@gentoo.org>用XMMS LIRCæ’件为Audacious进行移æ¤ã€‚\n"
+#~ "XMMS LIRCæ’件作者:\n"
+#~ "Carl van Schaik <carl@leg.uct.ac.za>\n"
+#~ "Christoph Bartelmus <xmms@bartelmus.de>\n"
+#~ "Andrew O. Shadoura <bugzilla@tut.by>\n"
+#~ "ä½ å¯ä»¥åœ¨http://lirc.org上找到更多关于LIRCçš„ä¿¡æ¯"
+
+#~ msgid "LIRC plugin settings"
+#~ msgstr "LIRCæ’件设置"
+
+#~ msgid "Reconnect to LIRC server"
+#~ msgstr "é‡æ–°è¿žæŽ¥åˆ°LIRCæœåŠ¡å™¨"
+
+#~ msgid "Timeout before reconnecting (seconds): "
+#~ msgstr "超时åŽå°è¯•é‡æ–°è¿žæŽ¥(秒):"
+
+#~ msgid "Reconnect"
+#~ msgstr "é‡æ–°è¿žæŽ¥"
+
+#~ msgid "Connection"
+#~ msgstr "连接"
+
+#~ msgid "%s: could not init LIRC support\n"
+#~ msgstr "%s: 无法åˆå§‹åŒ–LIRCæœåŠ¡\n"
+
+#~ msgid ""
+#~ "%s: could not read LIRC config file\n"
+#~ "%s: please read the documentation of LIRC\n"
+#~ "%s: how to create a proper config file\n"
+#~ msgstr ""
+#~ "%s: 未能读å–LIRC的设置文件\n"
+#~ "%s: 请阅读LIRC相关文档\n"
+#~ "%s: 并创建正确的设置文件\n"
+
+#~ msgid "%s: trying to reconnect...\n"
+#~ msgstr "%s: æ­£å°è¯•é‡æ–°è¿žæŽ¥...\n"
+
+#~ msgid "%s: unknown command \"%s\"\n"
+#~ msgstr "%s: 未知指令 \"%s\"\n"
+
+#~ msgid "%s: disconnected from LIRC\n"
+#~ msgstr "%s: 已从LIRC上断开连接\n"
+
+#~ msgid "%s: will try reconnect every %d seconds...\n"
+#~ msgstr "%s: å°è¯•æ¯%d秒é‡æ–°è¿žæŽ¥ä¸€æ¬¡...\n"
+
+#~ msgid "ModPlug Configuration"
+#~ msgstr "ModPlug设置"
+
+#~ msgid "Mono (downmix)"
+#~ msgstr "å•éŸ³é“(downmix)"
+
+#~ msgid "Nearest (fastest)"
+#~ msgstr "最接近(最快)"
+
+#~ msgid "Linear (fast)"
+#~ msgstr "线性(快速)"
+
+#~ msgid "Spline (good quality)"
+#~ msgstr "Spline(高质é‡)"
+
+#~ msgid "8-tap Fir (extremely high quality)"
+#~ msgstr "8-tap Fir(最高质é‡)"
+
+#~ msgid "Sampling Rate"
+#~ msgstr "å–样率"
+
+#~ msgid "Depth"
+#~ msgstr "深度"
+
+#~ msgid "Delay"
+#~ msgstr "延时"
+
+#~ msgid "Reverb"
+#~ msgstr "ä½™å“"
+
+#~ msgid "Amount"
+#~ msgstr "总é‡"
+
+#~ msgid "Range"
+#~ msgstr "范围"
+
+#~ msgid "Bass Boost"
+#~ msgstr "低音增强"
+
+#~ msgid ""
+#~ "Note: Setting the preamp\n"
+#~ "too high may cause clipping\n"
+#~ "(annoying clicks and pops)!"
+#~ msgstr "注æ„: å‰ç½®æ”¾å¤§å™¨çš„值太高会导致削波!"
+
+#~ msgid "Effects"
+#~ msgstr "音效"
+
+#~ msgid "Use Filename as Song Title"
+#~ msgstr "用文件å作为歌曲标题"
+
+#~ msgid "Fast Playlist Info"
+#~ msgstr "快速播放列表信æ¯"
+
+#~ msgid "Noise Reduction"
+#~ msgstr "é™å™ª"
+
+#~ msgid "Play Amiga MOD"
+#~ msgstr "播放Amiga MOD"
+
+#~ msgid "Don't loop"
+#~ msgstr "ä¸è¦å¾ªçŽ¯"
+
+#~ msgid "Loop"
+#~ msgstr "循环"
+
+#~ msgid "time(s)"
+#~ msgstr "时间(s)"
+
+#~ msgid "Loop forever"
+#~ msgstr "æ— é™å¾ªçŽ¯"
+
+#~ msgid "Looping"
+#~ msgstr "循环"
+
+#~ msgid "MOD Info"
+#~ msgstr "MODä¿¡æ¯"
+
+#~ msgid ""
+#~ "Filename:\n"
+#~ "Title:\n"
+#~ "Type:\n"
+#~ "Length:\n"
+#~ "Speed:\n"
+#~ "Tempo:\n"
+#~ "Samples:\n"
+#~ "Instruments:\n"
+#~ "Patterns:\n"
+#~ "Channels:"
+#~ msgstr ""
+#~ "文件å:\n"
+#~ "标题:\n"
+#~ "类型:\n"
+#~ "长度:\n"
+#~ "速度:\n"
+#~ "节å¥:\n"
+#~ "å–æ ·:\n"
+#~ "ä¹å™¨:\n"
+#~ "格调:\n"
+#~ "声é“:"
+
+#~ msgid "Samples"
+#~ msgstr "å–æ ·"
+
+#~ msgid "Instruments"
+#~ msgstr "ä¹å™¨"
+
+#~ msgid "Message"
+#~ msgstr "ä¿¡æ¯"
+
+#~ msgid "Modplug Input Plugin for Audacious ver"
+#~ msgstr "Audaciousçš„Modplug输入æ’件"
+
+#~ msgid ""
+#~ "\n"
+#~ "Modplug sound engine written by Olivier Lapicque.\n"
+#~ "XMMS interface for Modplug by Kenton Varda.\n"
+#~ "(c)2000 Olivier Lapicque and Kenton Varda.\n"
+#~ "Updates and maintenance by Konstanty Bialkowski.\n"
+#~ "Ported to BMP by Theofilos Intzoglou."
+#~ msgstr ""
+#~ "\n"
+#~ "Modplug声音引擎作者:Olivier Lapicque。\n"
+#~ "Modplugçš„XMMS接å£ä½œè€…是:Kenton Varda.\n"
+#~ "版æƒæ‰€æœ‰ (c) 2000 Olivier LapicqueåŠKenton Varda.\n"
+#~ "æ›´æ–°åŠç»´æŠ¤ï¼šKonstanty Bialkowski.\n"
+#~ "BMP的移æ¤ï¼šTheofilos Intzoglou."
+
+#~ msgid "About Modplug"
+#~ msgstr "关于Modplug"
+
+#~ msgid "Show separators in playlist"
+#~ msgstr "在播放列表中显示分隔符"
+
+#~ msgid "Show window manager decoration"
+#~ msgstr "显示窗å£ç®¡ç†å™¨çš„装饰"
+
+#~ msgid "This enables the window manager to show decorations for windows."
+#~ msgstr "此选项将å…许显示窗å£ç®¡ç†å™¨çš„装饰"
+
+#~ msgid ""
+#~ "If selected, the file information text in the main window will scroll "
+#~ "back and forth. If not selected, the text will only scroll in one "
+#~ "direction."
+#~ msgstr "如果å¯ç”¨ï¼Œä¸»ç•Œé¢ä¸Šçš„文件信æ¯å°†æ¥å›žæ»šåŠ¨ï¼Œå¦åˆ™åªèƒ½å‘一个方å‘滚动。"
+
+#~ msgid "Disable inline gtk theme"
+#~ msgstr "ç¦ç”¨å†…部gtk主题"
+
+#~ msgid "Random skin on play"
+#~ msgstr "å¯åŠ¨æ—¶éšæœºé€‰æ‹©ä¸»é¢˜"
+
+#~ msgid "Allow loading incomplete skins"
+#~ msgstr "å…许加载ä¸å®Œæ•´çš„主题"
+
+#~ msgid ""
+#~ "If selected, audacious won't refuse loading broken skins. Use only if "
+#~ "your favourite skin doesn't work"
+#~ msgstr ""
+#~ "如果å¯ç”¨ï¼Œaudaciouså°†å…许加载破æŸçš„主题。如果你喜欢的主题无法使用,å¯è¯•è¯•"
+#~ "å¯ç”¨æ­¤é€‰é¡¹"
+
+#~ msgid "Color Adjustment"
+#~ msgstr "颜色调整"
+
+#~ msgid ""
+#~ "Audacious allows you to alter the color balance of the skinned UI. The "
+#~ "sliders below will allow you to do this."
+#~ msgstr "Audaciouså…许你修改主题界é¢çš„颜色平衡。调整滑动æ¡å³å¯"
+
+#~ msgid "Blue"
+#~ msgstr "è“"
+
+#~ msgid "Green"
+#~ msgstr "绿"
+
+#~ msgid "Red"
+#~ msgstr "红"
+
+#~ msgid "Color adjustment ..."
+#~ msgstr "颜色调整..."
+
+#~ msgid "Disable 'GUI Scaling'"
+#~ msgstr "ç¦ç”¨â€œç•Œé¢ç¼©æ”¾â€"
+
+#~ msgid "Enable 'GUI Scaling'"
+#~ msgstr "å¯ç”¨â€œç•Œé¢ç¼©æ”¾â€"
+
+#~ msgid "DoubleSize"
+#~ msgstr "åŒå€å¤§å°"
+
+#~ msgid "Easy Move"
+#~ msgstr "简易移动"
+
+#~ msgid "Spectrum Analyzer"
+#~ msgstr "光谱分æžå™¨"
+
+#~ msgid "Can't jump to time when no track is being played.\n"
+#~ msgstr "未开始æ’放时无法跳到时间。\n"
+
+#~ msgid "minutes:seconds"
+#~ msgstr "分:秒"
+
+#~ msgid "Track length:"
+#~ msgstr "音轨长度"
+
+#~ msgid "Error writing playlist \"%s\": %s"
+#~ msgstr "写入播放列表\"%s\"æ—¶å‘生错误: %s"
+
+#~ msgid "%s already exist. Continue?"
+#~ msgstr "%s已存在,è¦ç»§ç»­å—?"
+
+#~ msgid "Show/hide infoarea"
+#~ msgstr "显示/éšè—ä¿¡æ¯åŒºåŸŸ"
+
+#~ msgid "Show main menu"
+#~ msgstr "显示主èœå•"
+
+#~ msgid "Show/hide main menu"
+#~ msgstr "显示/éšè—主èœå•"
+
+#~ msgid "Show/hide statusbar"
+#~ msgstr "显示/éšè—状æ€æ "
+
+#~ msgid "Import Playlist ..."
+#~ msgstr "导入播放列表..."
+
+#~ msgid "Export Playlist ..."
+#~ msgstr "导出播放列表..."
+
+#~ msgid "Refresh"
+#~ msgstr "刷新"
+
+#~ msgid "Refresh Selected"
+#~ msgstr "刷新已选中的"
+
+#~ msgid "Refreshes metadata associated with selected entries."
+#~ msgstr "刷新已选中的歌曲信æ¯"
+
+#~ msgid "Edit title"
+#~ msgstr "编辑标题"
+
+#~ msgid "Edit the playlist title."
+#~ msgstr "æ ¹æ®æ’­æ”¾åˆ—表标题"
+
+#~ msgid "By Formatted Title"
+#~ msgstr "按标题"
+
+#~ msgid "Components"
+#~ msgstr "组件"
+
+#~ msgid "Upload selected track(s)"
+#~ msgstr "上传选中的文件"
+
+#~ msgid "MTP device handler"
+#~ msgstr "MTP设备å¥æŸ„"
+
+#~ msgid "Show main player window"
+#~ msgstr "显示主界é¢"
+
+#~ msgid "Ignore"
+#~ msgstr "忽略"
+
+#~ msgid ""
+#~ "Audacious has been started with all of its windows hidden.\n"
+#~ "You may want to show the player window again to control Audacious; "
+#~ "otherwise, you'll have to control it remotely via audtool or enabled "
+#~ "plugins (such as the statusicon plugin)."
+#~ msgstr ""
+#~ "Audaciouså¯åŠ¨æ—¶å·²ç»éšè—所有的窗å£ã€‚\n"
+#~ "ä½ å¯èƒ½å¸Œæœ›é€šè¿‡æ’­æ”¾çª—å£æ¥æŽ§åˆ¶Audaciousï¼›å¦åˆ™ä½ åªèƒ½é€šè¿‡audtool或其它æ’件"
+#~ "(如:状æ€å›¾æ ‡æ’件)进行控制。"
+
+#~ msgid "Always ignore, show/hide is controlled remotely"
+#~ msgstr "总是忽略,显示/éšè—远程控制状æ€"
+
+#~ msgid "Audacious - broken GTK engine usage warning"
+#~ msgstr "Audacious - ç ´æŸçš„GTK引擎警告"
+
+#~ msgid ""
+#~ "<big><b>Broken GTK engine in use</b></big>\n"
+#~ "\n"
+#~ "Audacious has detected that you are using a broken GTK engine.\n"
+#~ "\n"
+#~ "The theme engine you are using, <i>%s</i>, is incompatible with some of "
+#~ "the features used by modern skins. The incompatible features have been "
+#~ "disabled for this session.\n"
+#~ "\n"
+#~ "To use these features, please consider using a different GTK theme engine."
+#~ msgstr ""
+#~ "<big><b>正在使用æŸåçš„GTK引擎</b></big>\n"
+#~ "\n"
+#~ "Audacious检测到你正在使用一个已ç»æŸåçš„GTK引擎。\n"
+#~ "\n"
+#~ "你正在使用的GTK引擎<i>%s</i>, 与现在主题的部分特性并ä¸å…¼å®¹ã€‚当å‰ä¼šè¯å·²ç¦ç”¨"
+#~ "ä¸å…¼å®¹éƒ¨åˆ†çš„特性。\n"
+#~ " \n"
+#~ "è¦ä½¿ç”¨æ­¤ç‰¹æ€§ï¼Œè¯·è€ƒè™‘使用其它的GTK引擎。"
-#~ msgid "<b>Player</b>"
-#~ msgstr "<b>播放器</b>"
+#~ msgid "Do not display this warning again"
+#~ msgstr "ä¸è¦å†æ示"
-#~ msgid "<b>Current Song</b>"
-#~ msgstr "<b>当å‰æ­Œæ›²</b>"
+#~ msgid "Save as Static Playlist"
+#~ msgstr "ä¿å­˜åˆ°é™æ€æ’­æ”¾åˆ—表"
-#~ msgid "Meta Data"
-#~ msgstr "元数æ®"
+#~ msgid "Use Relative Path"
+#~ msgstr "使用相对路径"
-#~ msgid "Randomize List"
-#~ msgstr "打乱列表"
+#~ msgid "Load Playlist"
+#~ msgstr "加载播放列表"
-#~ msgid "Randomizes the playlist."
-#~ msgstr "打乱播放列表"
+#~ msgid "Save Playlist"
+#~ msgstr "ä¿å­˜æ’­æ”¾åˆ—表"
-#~ msgid "Audacious standard menu"
-#~ msgstr "Audacious标准èœå•"
+#~ msgid "Skinned Interface"
+#~ msgstr "主题化界é¢"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..37b7448
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,3517 @@
+# Chinese translations for audacious-plugins package.
+# Copyright (C) 2011 THE audacious-plugins'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the audacious-plugins package.
+# Ruei-Yuan Lu <RueiYuan.Lu@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: audacious-plugins 3.1\n"
+"Report-Msgid-Bugs-To: http://redmine.audacious-media-player.org/\n"
+"POT-Creation-Date: 2011-12-29 19:29-0500\n"
+"PO-Revision-Date: 2011-11-10 11:53+0800\n"
+"Last-Translator: Ruei-Yuan Lu <RueiYuan.Lu@gmail.com>\n"
+"Language-Team: Chinese (traditional)\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: src/aac/libmp4.c:256
+#, c-format
+msgid ""
+"Using libfaad2-%s for decoding.\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+msgstr ""
+"使用 libfaad2-%s 進行解碼。\n"
+"FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+"Copyright (c) 2005-2006 Audacious team"
+
+#: src/aac/libmp4.c:261
+msgid "About MP4 AAC decoder plugin"
+msgstr "關於 MP4 AAC 解碼器外掛"
+
+#: src/alarm/alarm.c:312
+msgid "About Alarm"
+msgstr "關於鬧é˜"
+
+#: src/alarm/alarm.c:313
+msgid ""
+"A plugin that can be used to start playing at a certain time.\n"
+"\n"
+"Originally written by Adam Feakin and Daniel Stodden."
+msgstr ""
+
+#: src/alarm/interface.c:33
+msgid "Alarm"
+msgstr "鬧é˜"
+
+#: src/alarm/interface.c:40
+msgid "This is your wakeup call."
+msgstr ""
+
+#: src/alarm/interface.c:55 src/alarm/interface.c:1213
+msgid "OK"
+msgstr "確èª"
+
+#: src/alarm/interface.c:214
+msgid "Alarm Settings"
+msgstr "鬧é˜è¨­å®š"
+
+#: src/alarm/interface.c:229 src/alarm/interface.c:401
+#: src/alarm/interface.c:773
+msgid "Time"
+msgstr "時間"
+
+#: src/alarm/interface.c:270
+msgid "hours"
+msgstr "å°æ™‚"
+
+#: src/alarm/interface.c:331
+msgid "h"
+msgstr ""
+
+#: src/alarm/interface.c:361
+msgid "minutes"
+msgstr "分é˜"
+
+#: src/alarm/interface.c:379
+msgid "Quiet after:"
+msgstr "多久後éœéŸ³:"
+
+#: src/alarm/interface.c:389
+msgid "Alarm at (default):"
+msgstr "鈴響於 (é è¨­)"
+
+#: src/alarm/interface.c:409
+msgid "Choose the days for the alarm to come on"
+msgstr "é¸æ“‡æƒ³è¦åœ¨å“ªå¹¾å¤©å•Ÿç”¨é¬§é˜"
+
+#: src/alarm/interface.c:437 src/alarm/interface.c:485
+#: src/alarm/interface.c:533 src/alarm/interface.c:581
+#: src/alarm/interface.c:629 src/alarm/interface.c:677
+#: src/alarm/interface.c:725 src/bs2b/plugin.c:198 src/OSS/configure.c:153
+#: src/skins/ui_equalizer.c:1104 src/skins/ui_manager.c:447
+#: src/skins/ui_manager.c:468
+msgid "Default"
+msgstr "é è¨­"
+
+#: src/alarm/interface.c:763
+msgid "Day"
+msgstr "æ—¥å­"
+
+#: src/alarm/interface.c:783
+msgid "Tuesday"
+msgstr "星期二"
+
+#: src/alarm/interface.c:794
+msgid "Wednesday"
+msgstr "星期三"
+
+#: src/alarm/interface.c:805
+msgid "Thursday"
+msgstr "星期四"
+
+#: src/alarm/interface.c:816
+msgid "Friday"
+msgstr "星期五"
+
+#: src/alarm/interface.c:827
+msgid "Saturday"
+msgstr "星期六"
+
+#: src/alarm/interface.c:838
+msgid "Sunday"
+msgstr "星期日"
+
+#: src/alarm/interface.c:848
+msgid "Monday"
+msgstr "星期一"
+
+#: src/alarm/interface.c:859
+msgid "Days"
+msgstr "週排程"
+
+#: src/alarm/interface.c:875
+msgid "Fading"
+msgstr "淡出"
+
+#: src/alarm/interface.c:912
+msgid "seconds"
+msgstr "秒"
+
+#: src/alarm/interface.c:920 src/alarm/interface.c:1035
+msgid "Volume"
+msgstr "音é‡"
+
+#: src/alarm/interface.c:946
+msgid "Current"
+msgstr "ç›®å‰éŸ³é‡"
+
+#: src/alarm/interface.c:954
+msgid "Start at"
+msgstr "åˆå§‹éŸ³é‡"
+
+#: src/alarm/interface.c:982 src/alarm/interface.c:1026
+msgid "%"
+msgstr ""
+
+#: src/alarm/interface.c:998
+msgid "Final"
+msgstr "最終音é‡"
+
+#: src/alarm/interface.c:1051
+msgid "Additional Command"
+msgstr "é¡å¤–命令"
+
+#: src/alarm/interface.c:1077
+msgid "enable"
+msgstr "啟用"
+
+#: src/alarm/interface.c:1085
+msgid "Playlist (optional)"
+msgstr "播放清單 (é¸ç”¨)"
+
+#: src/alarm/interface.c:1111
+msgid "Browse..."
+msgstr "ç€è¦½..."
+
+#: src/alarm/interface.c:1119 src/alarm/interface.c:1283
+msgid "Reminder"
+msgstr "æ醒"
+
+#: src/alarm/interface.c:1136
+msgid "Use reminder"
+msgstr "æ醒命令"
+
+#: src/alarm/interface.c:1152 src/sndstretch/sndstretch_xmms.c:358
+msgid "Options"
+msgstr "é¸é …"
+
+#: src/alarm/interface.c:1160
+msgid "What do these options mean?"
+msgstr "這些é¸é …代表什麼æ„æ€ï¼Ÿ"
+
+#: src/alarm/interface.c:1188
+msgid ""
+"\n"
+"Time\n"
+" Alarm at: \n"
+" The time for the alarm to come on.\n"
+"\n"
+" Quiet After: \n"
+" Stop alarm after this amount of time.\n"
+" (if the wakeup dialog is not closed)\n"
+"\n"
+"\n"
+"Days\n"
+" Day:\n"
+" Select the days for the alarm to activate.\n"
+"\n"
+" Time:\n"
+" Choose the time for the alarm on each day,\n"
+" or select the toggle button to use the default\n"
+" time.\n"
+"\n"
+"\n"
+"Volume\n"
+" Fading: \n"
+" Fade the volume up to the chosen volume \n"
+" for this amount of time.\n"
+"\n"
+" Start at: \n"
+" Start fading from this volume.\n"
+"\n"
+" Final: \n"
+" The volume to stop fading at. If the fading\n"
+" time is 0 then set volume to this and start\n"
+" playing.\n"
+"\n"
+"\n"
+"Options:\n"
+" Additional Command:\n"
+" Run this command at the alarm time.\n"
+"\n"
+" Playlist: \n"
+" Load this playlist for playing songs from \n"
+" (must have .m3u extension). If no playlist\n"
+" is given then the songs which are currently\n"
+" in the list will be used.\n"
+" The URL of an mp3/ogg stream can also be\n"
+" entered here, but loading of playlists from\n"
+" URLs is not currently supported by xmms.\n"
+"\n"
+" Reminder:\n"
+" Display a reminder when the alarm goes off,\n"
+" type the reminder in the box and turn on the\n"
+" toggle button if you want it to be shown.\n"
+msgstr ""
+"\n"
+"時間\n"
+" 鈴響於: \n"
+" 鬧é˜åœ¨æŒ‡å®šæ™‚間鈴響。\n"
+"\n"
+" 多久後éœéŸ³: \n"
+" 經éŽæŒ‡å®šé•·åº¦çš„時間後åœæ­¢éˆ´éŸ¿ã€‚\n"
+" (如果喚醒的å°è©±è¦–窗沒有被關掉的話)\n"
+"\n"
+"\n"
+"週排程\n"
+" æ—¥å­:\n"
+" é¸æ“‡å“ªå¹¾å¤©è¦å•Ÿç”¨é¬§é˜ã€‚\n"
+"\n"
+" 時間:\n"
+" 設定å„天的鈴響時間,\n"
+" 或者按切æ›éˆ•é¸æ“‡é è¨­å€¼ã€‚\n"
+"\n"
+"\n"
+"音é‡\n"
+" 淡出: \n"
+" 在時間內將音é‡æ高到一定程度。\n"
+"\n"
+" åˆå§‹éŸ³é‡: \n"
+" 音é‡è®ŠåŒ–的起始值。\n"
+"\n"
+" 最終音é‡: \n"
+" 音é‡è®ŠåŒ–的終點值。若淡出時間為 0\n"
+" 則直接使用最終音é‡ã€‚\n"
+"\n"
+"\n"
+"é¸é …:\n"
+" é¡å¤–命令:\n"
+" 在鈴響時間執行此命令。\n"
+"\n"
+" 播放清單: \n"
+" 載入此播放清單以播放音樂\n"
+" (必須為 .m3u 副檔å)。 若無指定播放清單\n"
+" 則使用目å‰æ¸…單中的歌曲。\n"
+" 你也å¯ä»¥åœ¨é€™è£¡è¼¸å…¥ mp3/ogg 串æµçš„ URL,\n"
+" 但從 URL 載入播放清單目å‰å°šæœªè¢« xmms 支æ´ã€‚\n"
+"\n"
+" æ醒:\n"
+" 在鈴響éŽå¾Œé¡¯ç¤ºæ醒,\n"
+" 在文字輸入欄ä½ä¸­è¼¸å…¥ä½ æƒ³è¦çš„æ醒訊æ¯ã€‚\n"
+
+#: src/alarm/interface.c:1190 src/skins/ui_manager.c:382
+msgid "Help"
+msgstr "說明"
+
+#: src/alarm/interface.c:1222 src/cdaudio-ng/configure.c:249
+#: src/crystalizer/crystalizer.c:130 src/echo_plugin/gui.c:125
+#: src/jack/configure.c:148 src/null/null.c:108 src/stereo_plugin/stereo.c:125
+msgid "Cancel"
+msgstr "å–消"
+
+#: src/alarm/interface.c:1290
+msgid "Your reminder for today is.."
+msgstr "您今天的æ醒"
+
+#: src/alarm/interface.c:1315
+msgid "Thankyou"
+msgstr "è¬è¬"
+
+#: src/alsa/config.c:210
+msgid "Default PCM device"
+msgstr "é è¨­ PCM è£ç½®"
+
+#: src/alsa/config.c:235
+msgid "Default mixer device"
+msgstr "é è¨­æ··éŸ³å™¨è£ç½®"
+
+#: src/alsa/config.c:438
+msgid "ALSA Output Plugin Preferences"
+msgstr "ALSA 輸出外掛å好設定"
+
+#: src/alsa/config.c:445
+msgid "PCM device:"
+msgstr "PCM è£ç½®:"
+
+#: src/alsa/config.c:447 src/OSS/configure.c:237
+msgid "Mixer device:"
+msgstr "混音器è£ç½®:"
+
+#: src/alsa/config.c:449
+msgid "Mixer element:"
+msgstr "混音器元件:"
+
+#: src/alsa/config.c:452
+msgid "Work around drain hangup"
+msgstr "處ç†æ¬ è¼‰éŽ–æ­»"
+
+#: src/alsa/plugin.c:59
+msgid "About ALSA Output Plugin"
+msgstr "關於 ALSA 輸出外掛"
+
+#: src/alsa/plugin.c:81
+msgid "ALSA error"
+msgstr "ALSA 錯誤"
+
+#: src/amidi-plug/amidi-plug.c:326
+msgid ""
+"You have not selected any sequencer ports for MIDI playback. You can do so "
+"in the MIDI plugin preferences."
+msgstr ""
+"您尚未é¸æ“‡ä»»ä½•ç”¨æ–¼æ’­æ”¾ MIDI 的編曲機連接埠。請到 MIDI 外掛å好設定中設定。"
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:35
+msgid "ALSA Backend "
+msgstr "ALSA 後端"
+
+#: src/amidi-plug/backend-alsa/b-alsa.c:37
+msgid ""
+"This backend sends MIDI events to a group of user-chosen ALSA sequencer "
+"ports. The ALSA sequencer interface is very versatile, it can provide ports "
+"for audio cards hardware synthesizers (i.e. emu10k1) but also for software "
+"synths, external devices, etc.\n"
+"This backend does not produce audio, MIDI events are handled directly from "
+"devices/programs behind the ALSA ports; in example, MIDI events sent to the "
+"hardware synth will be directly played.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"é€™å€‹å¾Œç«¯æœƒå‚³é€ MIDI 事件到一組由使用者指定的 ALSA 編曲機連接埠。ALSA 編曲機介"
+"é¢æœ‰å¾ˆå¤šåŠŸèƒ½ï¼Œå®ƒä¸ä½†å¯ä»¥æ供連接埠給音效å¡ä¸Šçš„硬體編曲機 (如 emu10k1) é‚„å¯ä»¥"
+"給軟體åˆæˆå™¨èˆ‡å¤–接è£ç½®ç­‰ã€‚\n"
+"\n"
+"這個後端本身並ä¸ç”¢ç”ŸéŸ³æ•ˆï¼ŒMIDI 事件直接由 ALSA 連接埠後的è£ç½®æˆ–程å¼ä¾†è™•ç†ï¼›èˆ‰"
+"例來說,MIDI 事件被é€åˆ°ç¡¬é«”åˆæˆå™¨ä»¥å¾Œå°‡æœƒè¢«ç›´æŽ¥æ’­æ”¾ã€‚\n"
+"\n"
+"作者:Giacomo Lozito"
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:38
+msgid "FluidSynth Backend "
+msgstr "FluidSynth 後端"
+
+#: src/amidi-plug/backend-fluidsynth/b-fluidsynth.c:40
+msgid ""
+"This backend produces audio by sending MIDI events to FluidSynth, a real-"
+"time software synthesizer based on the SoundFont2 specification (www."
+"fluidsynth.org).\n"
+"Produced audio can be manipulated via player effect plugins and is processed "
+"by chosen ouput plugin.\n"
+"Backend written by Giacomo Lozito."
+msgstr ""
+"這個後端會將 MIDI 事件傳é€çµ¦ FluidSynth 並產生音效,FluidSynth 是一個基於 "
+"SoundFont2 è¦æ ¼ (www.fluidsynth.org) çš„å³æ™‚軟體åˆæˆå™¨ã€‚\n"
+"\n"
+"產生的音效會被播放器的特效外掛與輸出外掛影響。\n"
+"\n"
+"作者:Giacomo Lozito"
+
+#: src/amidi-plug/i_configure-alsa.c:228
+msgid "ALSA BACKEND CONFIGURATION"
+msgstr "ALSA 後端設定"
+
+#: src/amidi-plug/i_configure-alsa.c:331
+msgid "Port"
+msgstr "連接埠"
+
+#: src/amidi-plug/i_configure-alsa.c:333
+msgid "Client name"
+msgstr "客戶端å稱"
+
+#: src/amidi-plug/i_configure-alsa.c:335
+msgid "Port name"
+msgstr "連接埠å稱"
+
+#: src/amidi-plug/i_configure-alsa.c:346
+msgid "ALSA output ports"
+msgstr "ALSA 輸出埠"
+
+#: src/amidi-plug/i_configure-alsa.c:399
+msgid "Soundcard: "
+msgstr "音效å¡:"
+
+#: src/amidi-plug/i_configure-alsa.c:401
+msgid "Mixer control: "
+msgstr "混音器控制器:"
+
+#: src/amidi-plug/i_configure-alsa.c:413
+msgid "Mixer settings"
+msgstr "混音器設定"
+
+#: src/amidi-plug/i_configure-alsa.c:429
+msgid "ALSA Backend not loaded or not available"
+msgstr "ALSA 後端未載入或ä¸å­˜åœ¨"
+
+#: src/amidi-plug/i_configure-alsa.c:448
+msgid ""
+"<span size=\"smaller\">ALSA\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">ALSA\n"
+"後端</span>"
+
+#: src/amidi-plug/i_configure-ap.c:59
+msgid "AMIDI-Plug - backend information"
+msgstr "AMIDI-Plug - 後端資訊"
+
+#: src/amidi-plug/i_configure-ap.c:196
+msgid "AMIDI-PLUG PREFERENCES"
+msgstr "AMIDI-PLUG å好設定"
+
+#: src/amidi-plug/i_configure-ap.c:223
+msgid "Backend selection"
+msgstr "é¸æ“‡å¾Œç«¯"
+
+#: src/amidi-plug/i_configure-ap.c:227
+msgid "Available backends"
+msgstr "å¯ç”¨çš„後端"
+
+#: src/amidi-plug/i_configure-ap.c:257
+msgid "Playback settings"
+msgstr "播放設定"
+
+#: src/amidi-plug/i_configure-ap.c:262
+msgid "Transpose: "
+msgstr "移調: "
+
+#: src/amidi-plug/i_configure-ap.c:271
+msgid "Drum shift: "
+msgstr "鼓移: "
+
+#: src/amidi-plug/i_configure-ap.c:289
+msgid "Advanced settings"
+msgstr "進階設定"
+
+#: src/amidi-plug/i_configure-ap.c:293
+msgid "pre-calculate length of MIDI files in playlist"
+msgstr "事先計算在播放清單中 MIDI 檔的長度"
+
+#: src/amidi-plug/i_configure-ap.c:298
+msgid "extract comments from MIDI file (if available)"
+msgstr "æå– MIDI 檔的備註資料 (è‹¥å¯ç”¨çš„話)"
+
+#: src/amidi-plug/i_configure-ap.c:303
+msgid "extract lyrics from MIDI file (if available)"
+msgstr "æå– MIDI 檔的歌詞資料 (è‹¥å¯ç”¨çš„話)"
+
+#: src/amidi-plug/i_configure-ap.c:333
+msgid ""
+"<span size=\"smaller\">AMIDI\n"
+"Plug</span>"
+msgstr ""
+
+#: src/amidi-plug/i_configure.c:76
+msgid "AMIDI-Plug - select file"
+msgstr "AMIDI-Plug - é¸æ“‡æª”案"
+
+#: src/amidi-plug/i_configure.c:129
+msgid "AMIDI-Plug - configuration"
+msgstr "AMIDI-Plug - 設定"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:55
+msgid "AMIDI-Plug - select SoundFont file"
+msgstr "AMIDI-Plug - é¸æ“‡ SoundFont 檔案"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:270
+msgid "FLUIDSYNTH BACKEND CONFIGURATION"
+msgstr "FLUIDSYNTH 後端設定"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:313
+msgid "SoundFont settings"
+msgstr "SoundFont 設定"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:345
+msgid "Filename"
+msgstr "檔案å稱"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:349
+msgid "Size (bytes)"
+msgstr "å¤§å° (ä½å…ƒçµ„)"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:398
+msgid "Load SF on player start"
+msgstr "播放器啟動時載入 SF 檔"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:402
+msgid "Load SF on first midifile play"
+msgstr "在第一次播放 MIDI 檔案時載入 SF 檔"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:417
+msgid "Synthesizer settings"
+msgstr "åˆæˆå™¨è¨­å®š"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:426
+msgid "gain"
+msgstr "增益"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:432
+#: src/amidi-plug/i_configure-fluidsynth.c:460
+#: src/amidi-plug/i_configure-fluidsynth.c:488
+#: src/amidi-plug/i_configure-fluidsynth.c:519
+msgid "use default"
+msgstr "使用é è¨­å€¼"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:435
+#: src/amidi-plug/i_configure-fluidsynth.c:463
+msgid "value:"
+msgstr "數值:"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:454
+msgid "poliphony"
+msgstr "複調"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:482
+msgid "reverb"
+msgstr "迴響"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:491
+#: src/amidi-plug/i_configure-fluidsynth.c:522
+msgid "yes"
+msgstr "是"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:493
+#: src/amidi-plug/i_configure-fluidsynth.c:524
+msgid "no"
+msgstr "å¦"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:513
+msgid "chorus"
+msgstr "åˆå”±"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:544
+msgid "sample rate"
+msgstr "å–樣率"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:550
+msgid "22050 Hz "
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:553
+msgid "44100 Hz "
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:556
+msgid "96000 Hz "
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:559
+msgid "custom "
+msgstr "自訂"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:568
+msgid "Hz "
+msgstr ""
+
+#: src/amidi-plug/i_configure-fluidsynth.c:621
+msgid "FluidSynth Backend not loaded or not available"
+msgstr "FluidSynth 後端未載入或ä¸å¯ç”¨"
+
+#: src/amidi-plug/i_configure-fluidsynth.c:640
+msgid ""
+"<span size=\"smaller\">FluidSynth\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">FluidSynth\n"
+" 後端</span>"
+
+
+#: src/amidi-plug/i_configure-timidity.c:39
+msgid "TIMIDITY BACKEND CONFIGURATION"
+msgstr "TIMIDITY 後端設定"
+
+#: src/amidi-plug/i_configure-timidity.c:64
+msgid "TiMidity Backend not loaded or not available"
+msgstr "TiMidity 後端未載入或ä¸å¯ç”¨"
+
+#: src/amidi-plug/i_configure-timidity.c:83
+msgid ""
+"<span size=\"smaller\">TiMidity\n"
+"backend</span>"
+msgstr ""
+"<span size=\"smaller\">TiMidity\n"
+" 後端</span>"
+
+
+
+#: src/amidi-plug/i_fileinfo.c:169
+msgid "Name:"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:193
+msgid "<span size=\"smaller\"> MIDI Info </span>"
+msgstr "<span size=\"smaller\"> MIDI 資訊 </span>"
+
+#: src/amidi-plug/i_fileinfo.c:205
+msgid "Format:"
+msgstr "æ ¼å¼:"
+
+#: src/amidi-plug/i_fileinfo.c:208
+msgid "Length (msec):"
+msgstr "長度 (毫秒):"
+
+#: src/amidi-plug/i_fileinfo.c:211
+msgid "Num of Tracks:"
+msgstr "音軌編號:"
+
+#: src/amidi-plug/i_fileinfo.c:216
+msgid "variable"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:217
+msgid "BPM:"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:223
+msgid "BPM (wavg):"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:226
+msgid "Time Div:"
+msgstr ""
+
+#: src/amidi-plug/i_fileinfo.c:237
+msgid "<span size=\"smaller\"> MIDI Comments and Lyrics </span>"
+msgstr "<span size=\"smaller\"> MIDI 備註與歌詞 </span>"
+
+#: src/amidi-plug/i_fileinfo.c:288
+msgid "* no comments available in this MIDI file *"
+msgstr "* 這個 MIDI 檔ä¸åŒ…å«å‚™è¨»è³‡æ–™ *"
+
+#: src/amidi-plug/i_fileinfo.c:301
+msgid "* no lyrics available in this MIDI file *"
+msgstr "* 這個 MIDI 檔ä¸åŒ…å«æ­Œè©žè³‡æ–™ *"
+
+#: src/amidi-plug/i_fileinfo.c:349
+msgid " (invalid UTF-8)"
+msgstr " (無效的 UTF-8 字串)"
+
+#: src/amidi-plug/i_utils.c:43
+msgid "AMIDI-Plug - about"
+msgstr "關於 - AMIDI-Plug"
+
+#: src/amidi-plug/i_utils.c:68
+msgid ""
+"\n"
+"AMIDI-Plug "
+msgstr ""
+
+#: src/amidi-plug/i_utils.c:69
+msgid ""
+"\n"
+"modular MIDI music player\n"
+"http://www.develia.org/projects.php?p=amidiplug\n"
+"\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"\n"
+"special thanks to...\n"
+"\n"
+"Clemens Ladisch and Jaroslav Kysela\n"
+"for their cool programs aplaymidi and amixer; those\n"
+"were really useful, along with alsa-lib docs, in order\n"
+"to learn more about the ALSA API\n"
+"\n"
+"Alfredo Spadafina\n"
+"for the nice midi keyboard logo\n"
+"\n"
+"Tony Vroon\n"
+"for the good help with alpha testing\n"
+"\n"
+msgstr ""
+
+#: src/aosd/aosd_style.c:75
+msgid "Rectangle"
+msgstr "矩形"
+
+#: src/aosd/aosd_style.c:79
+msgid "Rounded Rectangle"
+msgstr "圓角矩形"
+
+#: src/aosd/aosd_style.c:83
+msgid "Concave Rectangle"
+msgstr "角è½å‡¹é™·çš„矩形"
+
+#: src/aosd/aosd_style.c:87
+msgid "None"
+msgstr "ç„¡"
+
+#: src/aosd/aosd_trigger.c:78
+msgid "Playback Start"
+msgstr "開始播放"
+
+#: src/aosd/aosd_trigger.c:79
+msgid "Triggers OSD when a playlist entry is played."
+msgstr "當播放清單中的項目被播放時觸發 OSD"
+
+#: src/aosd/aosd_trigger.c:83
+msgid "Title Change"
+msgstr "標題變更"
+
+#: src/aosd/aosd_trigger.c:84
+msgid ""
+"Triggers OSD when, during playback, the song title changes but the filename "
+"is the same. This is mostly useful to display title changes in internet "
+"streams."
+msgstr ""
+"當播放中歌曲標題改變但檔åä¸è®Šæ™‚觸發 OSD。這å°é¡¯ç¤ºç¶²è·¯ä¸²æµçš„標題很有用。"
+
+#: src/aosd/aosd_trigger.c:90
+msgid "Volume Change"
+msgstr "音é‡æ”¹è®Š"
+
+#: src/aosd/aosd_trigger.c:91
+msgid "Triggers OSD when volume is changed."
+msgstr "當音é‡æ”¹è®Šæ™‚觸發 OSD"
+
+#: src/aosd/aosd_trigger.c:95
+msgid "Pause On"
+msgstr "æš«åœæ’­æ”¾"
+
+#: src/aosd/aosd_trigger.c:96
+msgid "Triggers OSD when playback is paused."
+msgstr "當播放暫åœæ™‚觸發 OSD"
+
+#: src/aosd/aosd_trigger.c:100
+msgid "Pause Off"
+msgstr "解除暫åœ"
+
+#: src/aosd/aosd_trigger.c:101
+msgid "Triggers OSD when playback is unpaused."
+msgstr "當解除暫åœæ™‚觸發 OSD"
+
+#: src/aosd/aosd_ui.c:179
+msgid "Placement"
+msgstr "放置ä½ç½®"
+
+#: src/aosd/aosd_ui.c:218
+msgid "Relative X offset:"
+msgstr "X 軸相å°ä½ç§»:"
+
+#: src/aosd/aosd_ui.c:227
+msgid "Relative Y offset:"
+msgstr "Y 軸相å°ä½ç§»:"
+
+#: src/aosd/aosd_ui.c:236
+msgid "Max OSD width:"
+msgstr "最大 OSD 寬度:"
+
+#: src/aosd/aosd_ui.c:249
+msgid "Multi-Monitor options"
+msgstr "多螢幕é¸é …"
+
+#: src/aosd/aosd_ui.c:253
+msgid "Display OSD using:"
+msgstr "顯示 OSD:"
+
+#: src/aosd/aosd_ui.c:264
+msgid "all monitors"
+msgstr "所有螢幕"
+
+#: src/aosd/aosd_ui.c:267
+#, c-format
+msgid "monitor %i"
+msgstr "螢幕 %i"
+
+#: src/aosd/aosd_ui.c:322
+msgid "Timing (ms)"
+msgstr "計時 (毫秒)"
+
+#: src/aosd/aosd_ui.c:327
+msgid "Display:"
+msgstr "顯示:"
+
+#: src/aosd/aosd_ui.c:332
+msgid "Fade in:"
+msgstr "æ·¡å…¥:"
+
+#: src/aosd/aosd_ui.c:337
+msgid "Fade out:"
+msgstr "淡出:"
+
+#: src/aosd/aosd_ui.c:418
+msgid "Fonts"
+msgstr "å­—åž‹"
+
+#: src/aosd/aosd_ui.c:426
+#, c-format
+msgid "Font %i:"
+msgstr "å­—åž‹ %i:"
+
+#: src/aosd/aosd_ui.c:443
+msgid "Shadow"
+msgstr "é™°å½±"
+
+#: src/aosd/aosd_ui.c:478
+msgid "Internationalization"
+msgstr "國際化"
+
+#: src/aosd/aosd_ui.c:484
+msgid "Disable UTF-8 conversion of text (in aosd)"
+msgstr "關閉文字的 UTF-8 è½‰æ› (僅在 asod)"
+
+#: src/aosd/aosd_ui.c:502
+msgid "Select Skin File"
+msgstr "é¸æ“‡é¢æ¿æª”案"
+
+#: src/aosd/aosd_ui.c:613
+msgid "Render Style"
+msgstr "呈ç¾æ¨£å¼"
+
+#: src/aosd/aosd_ui.c:629
+msgid "Colors"
+msgstr "é¡è‰²"
+
+#: src/aosd/aosd_ui.c:642
+#, c-format
+msgid "Color %i:"
+msgstr "é¡è‰² %i:"
+
+#: src/aosd/aosd_ui.c:662
+msgid "Custom Skin"
+msgstr "自訂é¢æ¿"
+
+#: src/aosd/aosd_ui.c:668
+msgid "Skin file:"
+msgstr "é¢æ¿æª”案:"
+
+#: src/aosd/aosd_ui.c:671
+msgid "Browse"
+msgstr "ç€è¦½"
+
+#: src/aosd/aosd_ui.c:773
+msgid "Enable trigger"
+msgstr "啟用觸發器"
+
+#: src/aosd/aosd_ui.c:800
+msgid "Event"
+msgstr "事件"
+
+#: src/aosd/aosd_ui.c:828
+msgid "Composite manager detected"
+msgstr "å·²åµæ¸¬åˆ°åˆæˆç‰¹æ•ˆç®¡ç†ç¨‹å¼"
+
+#: src/aosd/aosd_ui.c:835
+msgid ""
+"Composite manager not detected;\n"
+"unless you know that you have one running, please activate a composite "
+"manager otherwise the OSD won't work properly"
+msgstr ""
+"未åµæ¸¬åˆ°åˆæˆç‰¹æ•ˆç®¡ç†ç¨‹å¼ï¼›\n"
+"除éžæ‚¨ç¢ºå®šå·²ç¶“執行,å¦å‰‡ OSD 將無法正確啟用。"
+
+#: src/aosd/aosd_ui.c:843
+msgid "Composite manager not required for fake transparency"
+msgstr "å‡çš„é€æ˜Žç‰¹æ•ˆä¸éœ€è¦ Composite manager"
+
+#: src/aosd/aosd_ui.c:881
+msgid "Transparency"
+msgstr "é€æ˜Ž"
+
+#: src/aosd/aosd_ui.c:887
+msgid "Fake transparency"
+msgstr "å‡çš„é€æ˜Žç‰¹æ•ˆ"
+
+#: src/aosd/aosd_ui.c:889
+msgid "Real transparency (requires X Composite Ext.)"
+msgstr "真的é€æ˜Žç‰¹æ•ˆ (éœ€è¦ X Composite 延伸功能)"
+
+#: src/aosd/aosd_ui.c:931
+msgid "Composite extension not loaded"
+msgstr "Composite 延伸功能未載入"
+
+#: src/aosd/aosd_ui.c:939
+msgid "Composite extension not available"
+msgstr "Composite 延伸功能ä¸å­˜åœ¨"
+
+#: src/aosd/aosd_ui.c:958
+#, c-format
+msgid "<span font_desc='%s'>Audacious OSD</span>"
+msgstr ""
+
+#: src/aosd/aosd_ui.c:1039
+msgid "Audacious OSD - configuration"
+msgstr "Audacious OSD - 設定"
+
+#: src/aosd/aosd_ui.c:1060
+msgid "Test"
+msgstr "測試"
+
+#: src/aosd/aosd_ui.c:1075
+msgid "Position"
+msgstr "ä½ç½®"
+
+#: src/aosd/aosd_ui.c:1080
+msgid "Animation"
+msgstr "å‹•ç•«"
+
+#: src/aosd/aosd_ui.c:1085
+msgid "Text"
+msgstr "文字"
+
+#: src/aosd/aosd_ui.c:1090
+msgid "Decoration"
+msgstr "è£é£¾"
+
+#: src/aosd/aosd_ui.c:1095
+msgid "Trigger"
+msgstr "觸發"
+
+#: src/aosd/aosd_ui.c:1100 src/cdaudio-ng/configure.c:171
+msgid "Misc"
+msgstr "雜項"
+
+#: src/aosd/aosd_ui.c:1137
+msgid "Audacious OSD - about"
+msgstr "關於 - Audacious OSD"
+
+#: src/aosd/aosd_ui.c:1167
+msgid ""
+"\n"
+"Audacious OSD "
+msgstr ""
+
+#: src/aosd/aosd_ui.c:1168
+msgid ""
+"\n"
+"http://www.develia.org/projects.php?p=audacious#aosd\n"
+"written by Giacomo Lozito\n"
+"< james@develia.org >\n"
+"\n"
+"On-Screen-Display is based on Ghosd library\n"
+"written by Evan Martin\n"
+"http://neugierig.org/software/ghosd/\n"
+"\n"
+msgstr ""
+
+#: src/blur_scope/config.c:73
+msgid "Blur Scope: Color selection"
+msgstr ""
+
+#: src/blur_scope/config.c:83 src/jack/configure.c:106
+msgid "Options:"
+msgstr "é¸é …:"
+
+#: src/bs2b/plugin.c:157
+msgid "Bauer stereophonic-to-binaural Preferences"
+msgstr ""
+
+#: src/bs2b/plugin.c:168
+msgid "Feed level:"
+msgstr ""
+
+#: src/bs2b/plugin.c:182
+msgid "Cut frequency:"
+msgstr ""
+
+#: src/bs2b/plugin.c:196
+msgid "Presets:"
+msgstr "樣å¼"
+
+#: src/cdaudio-ng/cdaudio-ng.c:242
+msgid "About Audio CD Plugin"
+msgstr "關於音樂 CD 外掛"
+
+#: src/cdaudio-ng/cdaudio-ng.c:243
+msgid ""
+"Copyright (c) 2007, by Calin Crisan <ccrisan@gmail.com> and The Audacious "
+"Team.\n"
+"\n"
+"Many thanks to libcdio developers <http://www.gnu.org/software/libcdio/>\n"
+"\tand to libcddb developers <http://libcddb.sourceforge.net/>.\n"
+"\n"
+"Also thank you Tony Vroon for mentoring & guiding me.\n"
+"\n"
+"This was a Google Summer of Code 2007 project.\n"
+"\n"
+"Copyright 2009 John Lindgren"
+msgstr ""
+
+#: src/cdaudio-ng/cdaudio-ng.c:552
+msgid "Audio CD"
+msgstr "音樂 CD"
+
+#: src/cdaudio-ng/cdaudio-ng.c:924
+msgid "Drive is empty."
+msgstr "光碟機是空的。"
+
+#: src/cdaudio-ng/cdaudio-ng.c:926
+msgid "Unsupported disk type."
+msgstr "未支æ´çš„光碟類型"
+
+#: src/cdaudio-ng/configure.c:148
+msgid "CD Audio Plugin Configuration"
+msgstr "CD 音訊外掛設定"
+
+#: src/cdaudio-ng/configure.c:160
+msgid "Digital audio extraction"
+msgstr "數ä½éŸ³è¨Š"
+
+#: src/cdaudio-ng/configure.c:165
+msgid "Title information"
+msgstr "歌曲資訊"
+
+#: src/cdaudio-ng/configure.c:176
+msgid "Disc speed:"
+msgstr "光碟機讀å–速度:"
+
+#: src/cdaudio-ng/configure.c:184
+msgid "Use cd-text if available"
+msgstr "å¯ä»¥çš„話使用 CD-TEXT"
+
+#: src/cdaudio-ng/configure.c:191
+msgid "Use CDDB if available"
+msgstr "å¯ä»¥çš„話使用 CDDB"
+
+#: src/cdaudio-ng/configure.c:197
+msgid "Server: "
+msgstr "伺æœå™¨: "
+
+#: src/cdaudio-ng/configure.c:201
+msgid "Path: "
+msgstr "路徑: "
+
+#: src/cdaudio-ng/configure.c:205
+msgid "Port: "
+msgstr "連接埠: "
+
+#: src/cdaudio-ng/configure.c:218
+msgid "Use HTTP instead of CDDBP"
+msgstr "使用 HTTP è€Œéž CDDBP"
+
+#: src/cdaudio-ng/configure.c:230
+msgid "Override default device: "
+msgstr "覆載é è¨­è£ç½®: "
+
+#: src/cdaudio-ng/configure.c:244 src/crystalizer/crystalizer.c:123
+#: src/echo_plugin/gui.c:118 src/jack/configure.c:141 src/null/null.c:107
+#: src/stereo_plugin/stereo.c:118
+msgid "Ok"
+msgstr "確èª"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Play CD"
+msgstr "播放 CD"
+
+#: src/cd-menu-items/cd-menu-items.c:34
+msgid "Add CD"
+msgstr "加入 CD"
+
+#: src/compressor/plugin.c:63
+msgid "About Dynamic Range Compression Plugin"
+msgstr "關於動態範åœå£“縮外掛"
+
+#: src/compressor/plugin.c:95
+msgid "Dynamic Range Compressor Preferences"
+msgstr "動態範åœå£“縮å好設定"
+
+#: src/compressor/plugin.c:107
+msgid "Center volume:"
+msgstr "中央音é‡:"
+
+#: src/compressor/plugin.c:120
+msgid "Dynamic range:"
+msgstr "動態範åœ:"
+
+#: src/console/configure.c:136
+msgid "Game Console Music Decoder"
+msgstr "éŠæˆ²ä¸»æ©ŸéŸ³æ¨‚解碼器"
+
+#: src/console/configure.c:153
+msgid "General"
+msgstr "一般"
+
+#: src/console/configure.c:155 src/skins/ui_manager.c:176
+msgid "Playback"
+msgstr "播放"
+
+#: src/console/configure.c:170
+msgid "Bass:"
+msgstr "低音"
+
+#: src/console/configure.c:174 src/console/configure.c:185
+#: src/console/configure.c:206
+msgid "secs"
+msgstr "秒"
+
+#: src/console/configure.c:181
+msgid "Treble:"
+msgstr "高音"
+
+#: src/console/configure.c:202
+msgid "Default song length:"
+msgstr "é è¨­æ­Œæ›²é•·åº¦:"
+
+#: src/console/configure.c:208
+msgid "Resampling"
+msgstr "é‡å–樣"
+
+#: src/console/configure.c:214
+msgid "Enable audio resampling"
+msgstr "啟用è²éŸ³é‡å–樣"
+
+#: src/console/configure.c:229
+msgid "Resampling rate:"
+msgstr "é‡å–樣率"
+
+#: src/console/configure.c:233
+msgid "Hz"
+msgstr ""
+
+#: src/console/configure.c:244
+msgid "SPC"
+msgstr ""
+
+#: src/console/configure.c:245
+msgid "Ignore length from SPC tags"
+msgstr "忽略 SPC 標籤裡記錄的長度"
+
+#: src/console/configure.c:246
+msgid "Increase reverb"
+msgstr "增加回音"
+
+#: src/console/configure.c:271
+msgid ""
+"The default song length, expressed in seconds, is used for songs that do not "
+"provide length information (i.e. looping tracks)."
+msgstr ""
+"é è¨­çš„歌曲長度,以秒表示。用於沒有æ供長度資訊的歌曲 (åƒæœƒç„¡é™æ’­æ”¾çš„音軌)"
+
+#: src/console/plugin.c:33
+msgid "About the Game Console Music Decoder"
+msgstr "關於éŠæˆ²ä¸»æ©ŸéŸ³æ¨‚解碼器"
+
+#: src/console/plugin.c:34
+msgid ""
+"Console music decoder engine based on Game_Music_Emu 0.5.2.\n"
+"Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n"
+"Audacious implementation by: William Pitcock <nenolod@dereferenced.org>, \n"
+" Shay Green <gblargg@gmail.com>\n"
+msgstr ""
+
+#: src/crossfade/plugin.c:60
+msgid "About Crossfade"
+msgstr "關於 Crossfade"
+
+#: src/crossfade/plugin.c:92
+msgid "Crossfade Preferences"
+msgstr "Crossfade å好設定"
+
+#: src/crossfade/plugin.c:104
+msgid "Overlap (in seconds):"
+msgstr "é‡ç–Š (秒):"
+
+#: src/crossfade/plugin.c:135 src/crossfade/plugin.c:141
+msgid "Crossfade Error"
+msgstr "Crossfade 錯誤"
+
+#: src/crossfade/plugin.c:135
+msgid ""
+"Crossfading failed because the songs had a different number of channels."
+msgstr "因為歌曲間的è²é“數ä¸åŒï¼Œç„¡æ³•ä½¿ç”¨ Crossfade。"
+
+#: src/crossfade/plugin.c:143
+msgid ""
+"Crossfading failed because the songs had different sample rates.\n"
+"\n"
+"You can use the Sample Rate Converter effect to resample the songs to the "
+"same rate."
+msgstr ""
+
+#: src/crystalizer/crystalizer.c:100
+msgid "Configure Crystalizer"
+msgstr ""
+
+#: src/crystalizer/crystalizer.c:102 src/stereo_plugin/stereo.c:97
+msgid "Effect intensity:"
+msgstr "效果強度:"
+
+#: src/crystalizer/crystalizer.c:136 src/echo_plugin/gui.c:131
+#: src/stereo_plugin/stereo.c:131
+msgid "Apply"
+msgstr "套用"
+
+#: src/echo_plugin/gui.c:15
+msgid ""
+"Echo Plugin\n"
+"By Johan Levin 1999.\n"
+"\n"
+"Surround echo by Carl van Schaik 1999"
+msgstr ""
+
+#: src/echo_plugin/gui.c:27
+msgid "About Echo Plugin"
+msgstr "關於回音外掛"
+
+#: src/echo_plugin/gui.c:67
+msgid "Configure Echo"
+msgstr "設定回音"
+
+#: src/echo_plugin/gui.c:83
+msgid "Delay: (ms)"
+msgstr "延é²: (毫秒)"
+
+#: src/echo_plugin/gui.c:88
+msgid "Feedback: (%)"
+msgstr "å饋: (%)"
+
+#: src/echo_plugin/gui.c:93
+msgid "Volume: (%)"
+msgstr "音é‡: (%)"
+
+#: src/ffaudio/ffaudio-core.c:798
+#, c-format
+msgid ""
+"Multi-format audio decoding plugin for Audacious based on\n"
+"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
+"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
+"\n"
+"Audacious plugin by:\n"
+" William Pitcock <nenolod@nenolod.net>,\n"
+" Matti Hämäläinen <ccr@tnsp.org>\n"
+"\n"
+"libavcodec %s (%s)\n"
+"libavformat %s (%s)\n"
+"libavutil %s (%s)\n"
+msgstr ""
+
+#: src/ffaudio/ffaudio-core.c:812
+msgid "About FFaudio Plugin"
+msgstr ""
+
+#: src/filewriter/filewriter.c:166
+msgid "About FileWriter-Plugin"
+msgstr ""
+
+#: src/filewriter/filewriter.c:461
+msgid "File Writer Configuration"
+msgstr "檔案輸出設定"
+
+#: src/filewriter/filewriter.c:473
+msgid "Output file format:"
+msgstr "輸出檔案格å¼:"
+
+#: src/filewriter/filewriter.c:491
+msgid "Configure"
+msgstr "設定"
+
+#: src/filewriter/filewriter.c:506
+msgid "Save into original directory"
+msgstr "儲存到原始資料夾"
+
+#: src/filewriter/filewriter.c:511
+msgid "Save into custom directory"
+msgstr "儲存到自訂資料夾"
+
+#: src/filewriter/filewriter.c:521
+msgid "Output file folder:"
+msgstr "輸出檔案資料夾:"
+
+#: src/filewriter/filewriter.c:525
+msgid "Pick a folder"
+msgstr "é¸æ“‡ä¸€å€‹è³‡æ–™å¤¾"
+
+#: src/filewriter/filewriter.c:544
+msgid "Get filename from:"
+msgstr "檔å來æº:"
+
+#: src/filewriter/filewriter.c:547
+msgid "original file tags"
+msgstr "原始檔案標籤"
+
+#: src/filewriter/filewriter.c:553
+msgid "original filename"
+msgstr "原始檔å"
+
+#: src/filewriter/filewriter.c:563
+msgid "Don't strip file name extension"
+msgstr "ä¸è¦åŽ»æŽ‰å‰¯æª”å"
+
+#: src/filewriter/filewriter.c:578
+msgid "Prepend track number to filename"
+msgstr "在檔åå‰é¢åŠ ä¸ŠéŸ³è»Œè™Ÿç¢¼"
+
+#: src/filewriter/mp3.c:38 src/filewriter/mp3.c:765
+msgid "Auto"
+msgstr "自動"
+
+#: src/filewriter/mp3.c:38
+msgid "Joint Stereo"
+msgstr "è¯åˆç«‹é«”è²"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Stereo"
+msgstr "ç«‹é«”è²"
+
+#: src/filewriter/mp3.c:39 src/mpg123/mpg123.c:191
+msgid "Mono"
+msgstr "å–®è²é“"
+
+#: src/filewriter/mp3.c:706
+msgid "MP3 Configuration"
+msgstr "MP3 設定"
+
+#: src/filewriter/mp3.c:729
+msgid "Algorithm Quality:"
+msgstr "演算法å“質:"
+
+#: src/filewriter/mp3.c:754
+msgid "Output Samplerate:"
+msgstr "輸出å–樣率:"
+
+#: src/filewriter/mp3.c:782
+msgid "(Hz)"
+msgstr ""
+
+#: src/filewriter/mp3.c:789
+msgid "Bitrate / Compression ratio:"
+msgstr "ä½å…ƒçŽ‡ / 壓縮比率:"
+
+#: src/filewriter/mp3.c:813
+msgid "Bitrate (kbps):"
+msgstr "ä½å…ƒçŽ‡ (kbps):"
+
+#: src/filewriter/mp3.c:846
+msgid "Compression ratio:"
+msgstr "壓縮比率:"
+
+#: src/filewriter/mp3.c:870
+msgid "Audio Mode:"
+msgstr "音訊模å¼:"
+
+#: src/filewriter/mp3.c:895
+msgid "Misc:"
+msgstr "雜項:"
+
+#: src/filewriter/mp3.c:906
+msgid "Enforce strict ISO complience"
+msgstr "強制嚴格相容於 ISO"
+
+#: src/filewriter/mp3.c:917
+msgid "Error protection"
+msgstr "錯誤ä¿è­·"
+
+#: src/filewriter/mp3.c:929 src/filewriter/vorbis.c:247
+msgid "Quality"
+msgstr "å“質"
+
+#: src/filewriter/mp3.c:939
+msgid "Enable VBR/ABR"
+msgstr "啟用 VBR/ABR"
+
+#: src/filewriter/mp3.c:949
+msgid "Type:"
+msgstr "é¡žåž‹:"
+
+#: src/filewriter/mp3.c:982
+msgid "VBR Options:"
+msgstr "VBR é¸é …:"
+
+#: src/filewriter/mp3.c:998
+msgid "Minimum bitrate (kbps):"
+msgstr "最å°ä½å…ƒçŽ‡ (kbps):"
+
+#: src/filewriter/mp3.c:1025
+msgid "Maximum bitrate (kbps):"
+msgstr "最大ä½å…ƒçŽ‡ (kbps):"
+
+#: src/filewriter/mp3.c:1048
+msgid "Strictly enforce minimum bitrate"
+msgstr "強制使用最å°ä½å…ƒçŽ‡"
+
+#: src/filewriter/mp3.c:1060
+msgid "ABR Options:"
+msgstr "ABR é¸é …:"
+
+#: src/filewriter/mp3.c:1070
+msgid "Average bitrate (kbps):"
+msgstr "å¹³å‡ä½å…ƒçŽ‡ (kbps):"
+
+#: src/filewriter/mp3.c:1098
+msgid "VBR quality level:"
+msgstr "VBR å“質等級:"
+
+#: src/filewriter/mp3.c:1117
+msgid "Don't write Xing VBR header"
+msgstr "ä¸è¦å¯«å…¥ Xing VBR 檔頭"
+
+#: src/filewriter/mp3.c:1131
+msgid "VBR/ABR"
+msgstr ""
+
+#: src/filewriter/mp3.c:1141
+msgid "Frame params:"
+msgstr "音框åƒæ•¸:"
+
+#: src/filewriter/mp3.c:1153
+msgid "Mark as copyright"
+msgstr "標示為版權"
+
+#: src/filewriter/mp3.c:1164
+msgid "Mark as original"
+msgstr "標示為原創"
+
+#: src/filewriter/mp3.c:1176
+msgid "ID3 params:"
+msgstr "ID3 åƒæ•¸:"
+
+#: src/filewriter/mp3.c:1187
+msgid "Force addition of version 2 tag"
+msgstr "強制加入第二版標籤"
+
+#: src/filewriter/mp3.c:1197
+msgid "Only add v1 tag"
+msgstr "åªåŠ å…¥ç¬¬ä¸€ç‰ˆæ¨™ç±¤"
+
+#: src/filewriter/mp3.c:1204
+msgid "Only add v2 tag"
+msgstr "åªåŠ å…¥ç¬¬äºŒç‰ˆæ¨™ç±¤"
+
+#: src/filewriter/mp3.c:1225
+msgid "Tags"
+msgstr "標籤"
+
+#: src/filewriter/vorbis.c:240
+msgid "Vorbis Encoder Configuration"
+msgstr "Vorbis 編碼器設定"
+
+#: src/filewriter/vorbis.c:260
+msgid "Quality level (0 - 10):"
+msgstr "å“質等級 (0 - 10):"
+
+#: src/flacng/plugin.c:380
+msgid "About FLAC Audio Plugin"
+msgstr "關於 FLAC 音訊外掛"
+
+#: src/flacng/plugin.c:381
+msgid ""
+"\n"
+"\n"
+"Original code by\n"
+"Ralf Ertzinger <ralf@skytale.net>\n"
+"\n"
+"http://www.skytale.net/projects/bmp-flac2/"
+msgstr ""
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:303
+msgid "About Gnome Shortcut Plugin"
+msgstr ""
+
+#: src/gnomeshortcuts/gnomeshortcuts.c:304
+msgid ""
+"Gnome Shortcut Plugin\n"
+"Let's you control the player with Gnome's shortcuts.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+msgstr ""
+
+#: src/gtkui/columns.c:36
+msgid "Entry number"
+msgstr "項目編號"
+
+#: src/gtkui/columns.c:36 src/search-tool/search-tool.c:43
+msgid "Title"
+msgstr "標題"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:42
+msgid "Artist"
+msgstr "è—人"
+
+#: src/gtkui/columns.c:37
+msgid "Year"
+msgstr "年份"
+
+#: src/gtkui/columns.c:37 src/search-tool/search-tool.c:43
+msgid "Album"
+msgstr "專輯"
+
+#: src/gtkui/columns.c:37
+msgid "Track"
+msgstr "音軌"
+
+#: src/gtkui/columns.c:37
+msgid "Queue position"
+msgstr "佇列ä½ç½®"
+
+#: src/gtkui/columns.c:38
+msgid "Length"
+msgstr "長度"
+
+#: src/gtkui/columns.c:38
+msgid "File path"
+msgstr "檔案路徑"
+
+#: src/gtkui/columns.c:38
+msgid "File name"
+msgstr "檔案å稱"
+
+#: src/gtkui/columns.c:38
+msgid "Custom title"
+msgstr "自訂標題"
+
+#: src/gtkui/columns.c:39
+msgid "Bitrate"
+msgstr "ä½å…ƒçŽ‡"
+
+#: src/gtkui/columns.c:278
+msgid "Choose Columns"
+msgstr "é¸æ“‡æ¬„ä½"
+
+#: src/gtkui/columns.c:292
+msgid "Available:"
+msgstr "å¯ç”¨çš„:"
+
+#: src/gtkui/columns.c:326
+msgid "Chosen:"
+msgstr "å·²é¸æ“‡:"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Left"
+msgstr "嵌入左方"
+
+#: src/gtkui/layout.c:122
+msgid "Dock at Right"
+msgstr "嵌入å³æ–¹"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Top"
+msgstr "嵌入頂端"
+
+#: src/gtkui/layout.c:123
+msgid "Dock at Bottom"
+msgstr "嵌入底端"
+
+#: src/gtkui/layout.c:123
+msgid "Undock"
+msgstr "解除嵌入"
+
+#: src/gtkui/layout.c:123 src/ladspa/plugin.c:644
+msgid "Disable"
+msgstr "關閉"
+
+#: src/gtkui/menus.c:131
+msgid "_Open Files ..."
+msgstr "開啟檔案(_O) ..."
+
+#: src/gtkui/menus.c:132
+msgid "Open _URL ..."
+msgstr "é–‹å•Ÿ _URL ..."
+
+#: src/gtkui/menus.c:133
+msgid "_Add Files ..."
+msgstr "加入檔案(_A) ... "
+
+#: src/gtkui/menus.c:134
+msgid "Add U_RL ..."
+msgstr "加入 U_RL ..."
+
+#: src/gtkui/menus.c:136
+msgid "A_bout ..."
+msgstr "關於(_B) ..."
+
+#: src/gtkui/menus.c:137
+msgid "_Preferences ..."
+msgstr "å好設定(_P) ..."
+
+#: src/gtkui/menus.c:138 src/skins/ui_manager.c:406
+msgid "_Quit"
+msgstr "離開(_Q)"
+
+#: src/gtkui/menus.c:141
+msgid "_Play"
+msgstr "播放(_P)"
+
+#: src/gtkui/menus.c:142
+msgid "Paus_e"
+msgstr "æš«åœ(_E)"
+
+#: src/gtkui/menus.c:143
+msgid "_Stop"
+msgstr "åœæ­¢(_S)"
+
+#: src/gtkui/menus.c:144
+msgid "Pre_vious"
+msgstr "上一個(_V)"
+
+#: src/gtkui/menus.c:145
+msgid "_Next"
+msgstr "下一個(_N)"
+
+#: src/gtkui/menus.c:147
+msgid "_Repeat"
+msgstr "é‡è¤‡"
+
+#: src/gtkui/menus.c:148
+msgid "S_huffle"
+msgstr "隨機"
+
+#: src/gtkui/menus.c:149
+msgid "N_o Playlist Advance"
+msgstr "ä¸è¦åˆ‡æ›æ’­æ”¾æ¸…å–®"
+
+#: src/gtkui/menus.c:150
+msgid "Stop _After This Song"
+msgstr "播放完目å‰æ­Œæ›²å¾Œåœæ­¢"
+
+#: src/gtkui/menus.c:152 src/gtkui/menus.c:212
+msgid "Song _Info ..."
+msgstr "歌曲資訊(_I) ..."
+
+#: src/gtkui/menus.c:153
+msgid "Jump to _Time ..."
+msgstr "跳至時間(_T) ..."
+
+#: src/gtkui/menus.c:154
+msgid "_Jump to Song ..."
+msgstr "跳至歌曲(_J) ..."
+
+#: src/gtkui/menus.c:157
+msgid "By Track _Number"
+msgstr "音軌編號(_N)"
+
+#: src/gtkui/menus.c:158
+msgid "By _Title"
+msgstr "標題(_T)"
+
+#: src/gtkui/menus.c:159
+msgid "By _Artist"
+msgstr "è—人(_A)"
+
+#: src/gtkui/menus.c:160
+msgid "By A_lbum"
+msgstr "專輯(_L)"
+
+#: src/gtkui/menus.c:161
+msgid "By Release _Date"
+msgstr "發行日期(_D)"
+
+#: src/gtkui/menus.c:162
+msgid "By _File Path"
+msgstr "檔案路徑(_F)"
+
+#: src/gtkui/menus.c:163
+msgid "By _Custom Title"
+msgstr "自訂標題(_C)"
+
+#: src/gtkui/menus.c:165
+msgid "R_everse Order"
+msgstr "åå‘é †åº(_E)"
+
+#: src/gtkui/menus.c:166
+msgid "_Random Order"
+msgstr "隨機順åº(_R)"
+
+#: src/gtkui/menus.c:169 src/gtkui/menus.c:214
+msgid "_Refresh"
+msgstr "é‡æ–°æ•´ç†(_R)"
+
+#: src/gtkui/menus.c:170
+msgid "Remove _Unavailable Files"
+msgstr "移除ä¸å­˜åœ¨çš„檔案(_U)"
+
+#: src/gtkui/menus.c:172
+msgid "_Sort"
+msgstr "排åº(_S)"
+
+#: src/gtkui/menus.c:174
+msgid "_New"
+msgstr "新增(_N)"
+
+#: src/gtkui/menus.c:175 src/gtkui/menus.c:225
+msgid "_Close"
+msgstr "關閉(_C)"
+
+#: src/gtkui/menus.c:177
+msgid "_Import ..."
+msgstr "匯入(_I) ..."
+
+#: src/gtkui/menus.c:178
+msgid "_Export ..."
+msgstr "匯出 (_E) ..."
+
+#: src/gtkui/menus.c:180
+msgid "_Playlist Manager ..."
+msgstr "播放清單管ç†(_P) ..."
+
+#: src/gtkui/menus.c:181
+msgid "_Queue Manager ..."
+msgstr "佇列管ç†(_Q) ..."
+
+#: src/gtkui/menus.c:184
+msgid "Volume _Up"
+msgstr "æ高音é‡(_U)"
+
+#: src/gtkui/menus.c:185
+msgid "Volume _Down"
+msgstr "é™ä½ŽéŸ³é‡(_D)"
+
+#: src/gtkui/menus.c:187
+msgid "_Equalizer"
+msgstr "等化器(_E)"
+
+#: src/gtkui/menus.c:189
+msgid "E_ffects"
+msgstr "特效(_F)"
+
+#: src/gtkui/menus.c:192
+msgid "_Interface"
+msgstr "介é¢(_I)"
+
+#: src/gtkui/menus.c:193
+msgid "_Visualizations"
+msgstr "視覺化(_V)"
+
+#: src/gtkui/menus.c:195
+msgid "Show _Menu Bar"
+msgstr "顯示é¸å–®åˆ—(_M)"
+
+#: src/gtkui/menus.c:196
+msgid "Show I_nfo Bar"
+msgstr "顯示資訊列(_N)"
+
+#: src/gtkui/menus.c:197
+msgid "Show _Status Bar"
+msgstr "顯示狀態列(_S)"
+
+#: src/gtkui/menus.c:199
+msgid "Show Column _Headers"
+msgstr "顯示欄ä½æ¨™é ­(_H)"
+
+#: src/gtkui/menus.c:200
+msgid "Choose _Columns ..."
+msgstr "é¸æ“‡æ¬„ä½ (_C) ..."
+
+#: src/gtkui/menus.c:201
+msgid "Scrol_l on Song Change"
+msgstr "切æ›æ­Œæ›²æ™‚æ²å‹•(_L)"
+
+#: src/gtkui/menus.c:204
+msgid "_File"
+msgstr "檔案(_F)"
+
+#: src/gtkui/menus.c:205
+msgid "_Playback"
+msgstr "播放(_P)"
+
+#: src/gtkui/menus.c:206
+msgid "P_laylist"
+msgstr "播放清單(_L)"
+
+#: src/gtkui/menus.c:207 src/gtkui/menus.c:221
+msgid "_Services"
+msgstr "æœå‹™(_S)"
+
+#: src/gtkui/menus.c:208
+msgid "_Output"
+msgstr "輸出(_O)"
+
+#: src/gtkui/menus.c:209
+msgid "_View"
+msgstr "檢視(_V)"
+
+#: src/gtkui/menus.c:213
+msgid "_Queue/Unqueue"
+msgstr "排入/移出佇列(_Q)"
+
+#: src/gtkui/menus.c:216
+msgid "Cu_t"
+msgstr "剪下(_T)"
+
+#: src/gtkui/menus.c:217
+msgid "_Copy"
+msgstr "複製(_C)"
+
+#: src/gtkui/menus.c:218
+msgid "_Paste"
+msgstr "貼上(_P)"
+
+#: src/gtkui/menus.c:219
+msgid "Select _All"
+msgstr "é¸æ“‡å…¨éƒ¨(_A)"
+
+#: src/gtkui/menus.c:224
+msgid "_Rename"
+msgstr "é‡æ–°å‘½å(_R)"
+
+#: src/gtkui/ui_gtk.c:95
+msgid "GTK Interface"
+msgstr "GTK 介é¢"
+
+#: src/gtkui/ui_gtk.c:156 src/skins/ui_main.c:303
+#, c-format
+msgid "%s - Audacious"
+msgstr ""
+
+#: src/gtkui/ui_gtk.c:162
+msgid "Buffering ..."
+msgstr "ç·©è¡ä¸­ ..."
+
+#: src/gtkui/ui_gtk.c:165 src/skins/ui_main.c:305 src/skins/ui_main.c:1504
+msgid "Audacious"
+msgstr ""
+
+#: src/gtkui/ui_gtk.c:216 src/skins/plugin.c:190
+msgid "Error"
+msgstr "錯誤"
+
+#: src/gtkui/ui_statusbar.c:105 src/skins/ui_main.c:460
+msgid "mono"
+msgstr "å–®è²é“"
+
+#: src/gtkui/ui_statusbar.c:107 src/skins/ui_main.c:459
+msgid "stereo"
+msgstr "ç«‹é«”è²"
+
+#: src/gtkui/ui_statusbar.c:109
+#, c-format
+msgid "%d channel"
+msgid_plural "%d channels"
+msgstr[0] ""
+
+#: src/gtkui/ui_statusbar.c:124
+#, c-format
+msgid "%d kbps"
+msgstr ""
+
+#: src/hotkey/gui.c:71
+msgid "Previous Track"
+msgstr "上一個音軌"
+
+#: src/hotkey/gui.c:72 src/skins/ui_manager.c:178 src/skins/ui_manager.c:179
+msgid "Play"
+msgstr "播放"
+
+#: src/hotkey/gui.c:73
+msgid "Pause/Resume"
+msgstr "æš«åœ/回復"
+
+#: src/hotkey/gui.c:74 src/skins/ui_manager.c:184 src/skins/ui_manager.c:185
+msgid "Stop"
+msgstr "åœæ­¢"
+
+#: src/hotkey/gui.c:75
+msgid "Next Track"
+msgstr "下一個音軌"
+
+#: src/hotkey/gui.c:76
+msgid "Forward 5 Seconds"
+msgstr "快轉五秒"
+
+#: src/hotkey/gui.c:77
+msgid "Rewind 5 Seconds"
+msgstr "倒轉五秒"
+
+#: src/hotkey/gui.c:78
+msgid "Mute"
+msgstr "éœéŸ³"
+
+#: src/hotkey/gui.c:79
+msgid "Volume Up"
+msgstr "æ高音é‡"
+
+#: src/hotkey/gui.c:80
+msgid "Volume Down"
+msgstr "é™ä½ŽéŸ³é‡"
+
+#: src/hotkey/gui.c:81 src/skins/ui_manager.c:415 src/skins/ui_manager.c:416
+msgid "Jump to File"
+msgstr "跳至檔案"
+
+#: src/hotkey/gui.c:82
+msgid "Toggle Player Windows"
+msgstr "切æ›é¡¯ç¤ºæ’­æ”¾å™¨è¦–窗"
+
+#: src/hotkey/gui.c:83
+msgid "Show On-Screen-Display"
+msgstr "顯示 OSD"
+
+#: src/hotkey/gui.c:84
+msgid "Toggle Repeat"
+msgstr "切æ›é‡è¤‡æ’­æ”¾"
+
+#: src/hotkey/gui.c:85
+msgid "Toggle Shuffle"
+msgstr "切æ›éš¨æ©Ÿæ’­æ”¾"
+
+#: src/hotkey/gui.c:95
+msgid "(none)"
+msgstr "(ç„¡)"
+
+#: src/hotkey/gui.c:232
+msgid ""
+"It is not recommended to bind the primary mouse buttons without "
+"modificators.\n"
+"\n"
+"Do you want to continue?"
+msgstr ""
+
+#: src/hotkey/gui.c:234
+msgid "Binding mouse buttons"
+msgstr "ç¶å®šæ»‘鼠按鈕"
+
+#: src/hotkey/gui.c:384
+msgid "Global Hotkey Plugin Configuration"
+msgstr "全域熱éµå¤–掛設定"
+
+#: src/hotkey/gui.c:400
+msgid ""
+"Press a key combination inside a text field.\n"
+"You can also bind mouse buttons."
+msgstr ""
+"請在輸入欄ä½ä¸­æŒ‰ä¸‹æƒ³è¦çš„按éµçµ„åˆã€‚\n"
+"你也å¯ä»¥ç¶å®šæ»‘鼠按鈕。"
+
+#: src/hotkey/gui.c:405
+msgid "Hotkeys:"
+msgstr "熱éµ:"
+
+#: src/hotkey/gui.c:424
+msgid "<b>Action:</b>"
+msgstr "<b>動作:</b>"
+
+#: src/hotkey/gui.c:432
+msgid "<b>Key Binding:</b>"
+msgstr "<b>按éµç¶å®š:</b>"
+
+#: src/hotkey/gui.c:663
+msgid "About Global Hotkey Plugin"
+msgstr "關於全域熱éµå¤–掛"
+
+#: src/hotkey/gui.c:664
+msgid ""
+"Global Hotkey Plugin\n"
+"Control the player with global key combinations or multimedia keys.\n"
+"\n"
+"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n"
+"\n"
+"Contributers include:\n"
+"Copyright (C) 2006-2007 Vladimir Paskov <vlado.paskov@gmail.com>\n"
+"Copyright (C) 2000-2002 Ville Syrjälä <syrjala@sci.fi>\n"
+"\t\t\tBryn Davies <curious@ihug.com.au>\n"
+"\t\t\tJonathan A. Davis <davis@jdhouse.org>\n"
+"\t\t\tJeremy Tan <nsx@nsx.homeip.net>\n"
+"\n"
+msgstr ""
+
+#: src/jack/configure.c:66
+msgid "Connect to all available jack ports"
+msgstr ""
+
+#: src/jack/configure.c:73
+msgid "Connect only the output ports"
+msgstr ""
+
+#: src/jack/configure.c:80
+msgid "Connect to no ports"
+msgstr ""
+
+#: src/jack/configure.c:98
+msgid "jack Plugin configuration"
+msgstr ""
+
+#: src/jack/configure.c:116
+msgid "Connection mode:"
+msgstr ""
+
+#: src/jack/configure.c:128
+msgid "Enable debug printing"
+msgstr ""
+
+#: src/jack/jack.c:435
+msgid ""
+"XMMS jack Driver 0.17\n"
+"\n"
+"xmms-jack.sf.net\n"
+"Chris Morgan<cmorgan@alum.wpi.edu>\n"
+"\n"
+"Audacious port by\n"
+"Giacomo Lozito from develia.org"
+msgstr ""
+
+#: src/jack/jack.c:440
+msgid "About JACK Output Plugin 0.17"
+msgstr ""
+
+#: src/ladspa/plugin.c:415
+msgid "About LADSPA Host"
+msgstr ""
+
+#: src/ladspa/plugin.c:516
+#, c-format
+msgid "%s Settings"
+msgstr "%s 設定"
+
+#: src/ladspa/plugin.c:584
+msgid "LADSPA Host Settings"
+msgstr "LADSPA 主控端設定"
+
+#: src/ladspa/plugin.c:593
+msgid "Module paths:"
+msgstr "模組路徑:"
+
+#: src/ladspa/plugin.c:598
+msgid ""
+"<small>Separate multiple paths with a colon.\n"
+"These paths are searched in addition to LADSPA_PATH.\n"
+"After adding new paths, press Enter to scan for new plugins.</small>"
+msgstr ""
+"<small>用逗點å€éš”ä¸åŒçš„路徑。\n"
+"系統除了 LADSPA_PATH 之外也會æœå°‹é€™äº›è·¯å¾‘。\n"
+"加入新路徑之後請按 Enter 掃æ新的外掛。</small>"
+
+#: src/ladspa/plugin.c:614
+msgid "Available plugins:"
+msgstr "å¯ç”¨çš„外掛:"
+
+#: src/ladspa/plugin.c:626
+msgid "Enable"
+msgstr "啟用"
+
+#: src/ladspa/plugin.c:632
+msgid "Enabled plugins:"
+msgstr "啟用外掛:"
+
+#: src/ladspa/plugin.c:647
+msgid "Settings"
+msgstr "設定"
+
+#: src/lyricwiki/lyricwiki.c:267
+msgid ""
+"\n"
+"Looking for lyrics..."
+msgstr ""
+"\n"
+"尋找歌詞中 ..."
+
+#: src/lyricwiki/lyricwiki.c:304
+msgid ""
+"\n"
+"Connecting to lyrics.wikia.com..."
+msgstr ""
+"\n"
+"連線到 lyrics.wikia.com..."
+
+#: src/lyricwiki/lyricwiki.c:377
+msgid ""
+"\n"
+"No lyrics were found."
+msgstr ""
+"\n"
+"找ä¸åˆ°æ­Œè©žã€‚"
+
+#: src/metronom/metronom.c:86
+msgid "About Metronom"
+msgstr ""
+
+#: src/metronom/metronom.c:87
+msgid ""
+"A Tact Generator by Martin Strauss <mys@faveve.uni-stuttgart.de>\n"
+"\n"
+"To use it, add a URL: tact://beats*num/den\n"
+"e.g. tact://77 to play 77 beats per minute\n"
+"or tact://60*3/4 to play 60 bpm in 3/4 tacts"
+msgstr ""
+
+#: src/metronom/metronom.c:144
+#, c-format
+msgid "Tact generator: %d bpm"
+msgstr ""
+
+#: src/metronom/metronom.c:146
+#, c-format
+msgid "Tact generator: %d bpm %d/%d"
+msgstr ""
+
+#: src/mixer/plugin.c:64
+msgid "About Channel Mixer"
+msgstr ""
+
+#: src/mixer/plugin.c:93
+msgid "Channel Mixer Settings"
+msgstr "è²é“混音器設定:"
+
+#: src/mixer/plugin.c:102
+msgid "Output channels:"
+msgstr "輸出è²é“數目:"
+
+#: src/mixer/plugin.c:112
+msgid "Changes take effect at the next song change."
+msgstr "下一首歌播放時æ‰æœƒç”Ÿæ•ˆã€‚"
+
+#: src/mpg123/mpg123.c:191
+msgid "Surround"
+msgstr "環繞"
+
+#: src/mtp_up/mtp.c:336
+msgid "Upload in progress..."
+msgstr "上傳處ç†ä¸­..."
+
+#: src/mtp_up/mtp.c:348
+msgid "Upload to MTP Device"
+msgstr "上傳至 MTP è£ç½®"
+
+#: src/mtp_up/mtp.c:349
+msgid "Disconnect MTP Device"
+msgstr "從 MTP è£ç½®é›¢ç·š"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Stopped"
+msgstr "å·²åœæ­¢"
+
+#: src/notify/libnotify-aosd_event.c:48
+msgid "Audacious is not playing."
+msgstr ""
+
+#: src/null/null.c:64
+msgid "Null output plugin "
+msgstr "ç„¡è²è¼¸å‡ºå¤–掛"
+
+#: src/null/null.c:65
+msgid ""
+" by Christian Birchinger <joker@netswarm.net>\n"
+"based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"
+msgstr ""
+
+#: src/null/null.c:68
+msgid "About Null Output"
+msgstr ""
+
+#: src/null/null.c:89
+msgid "Null output preferences"
+msgstr "ç„¡è²è¼¸å‡ºå好設定"
+
+#: src/null/null.c:100
+msgid "Run in real time"
+msgstr "以å³æ™‚優先權執行"
+
+#: src/oss4/configure.c:81
+msgid "1. Default device"
+msgstr "1. é è¨­è£ç½®"
+
+#: src/oss4/configure.c:138
+msgid "OSS4 Output Plugin Preferences"
+msgstr "OSS4 輸出外掛å好設定"
+
+#: src/oss4/configure.c:150 src/OSS/configure.c:194
+msgid "Audio device:"
+msgstr "音訊è£ç½®:"
+
+#: src/oss4/configure.c:178 src/OSS/configure.c:217 src/OSS/configure.c:260
+msgid "Use alternate device:"
+msgstr "使用替代è£ç½®:"
+
+#: src/oss4/configure.c:193
+msgid "Save volume between sessions"
+msgstr "儲存ä¸åŒå·¥ä½œéšŽæ®µçš„音é‡"
+
+#: src/oss4/configure.c:197
+msgid "Enable format conversions made by the OSS software."
+msgstr ""
+
+#: src/oss4/configure.c:201
+msgid "Enable exclusive mode to prevent virtual mixing."
+msgstr ""
+
+#: src/oss4/plugin.c:51
+msgid "About OSS4 Plugin"
+msgstr "關於 OSS4 外掛"
+
+#: src/oss4/utils.c:211
+msgid "OSS4 error"
+msgstr "OSS4 錯誤"
+
+#: src/OSS/configure.c:137
+#, c-format
+msgid "Default (%s)"
+msgstr "é è¨­ (%s)"
+
+#: src/OSS/configure.c:178
+msgid "OSS Driver configuration"
+msgstr "OSS 驅動程å¼è¨­å®š"
+
+#: src/OSS/configure.c:281
+msgid "Devices"
+msgstr "è£ç½®"
+
+#: src/OSS/configure.c:283
+msgid "Buffering:"
+msgstr "ç·©è¡ä¸­:"
+
+#: src/OSS/configure.c:296
+msgid "Pre-buffer (percent):"
+msgstr "é ç·©è¡ (百分比):"
+
+#: src/OSS/configure.c:307
+msgid "Buffering"
+msgstr "ç·©è¡ä¸­"
+
+#: src/OSS/configure.c:308
+msgid "Mixer Settings:"
+msgstr "混音器設定:"
+
+#: src/OSS/configure.c:314
+msgid "Volume controls Master not PCM"
+msgstr "音é‡æŽ§åˆ¶èª¿æ•´ä¸»éŸ³é‡è€Œä¸æ˜¯ PCM"
+
+#: src/OSS/configure.c:320
+msgid "Mixer"
+msgstr "混音器"
+
+#: src/OSS/OSS.c:41
+msgid "About OSS Driver"
+msgstr "關於 OSS 驅動"
+
+#: src/pulse_audio/pulse_audio.c:669
+msgid "About Audacious PulseAudio Output Plugin"
+msgstr "關於 Audacious PulseAudio 輸出外掛"
+
+#: src/resample/plugin.c:89
+msgid "About Sample Rate Converter Plugin"
+msgstr ""
+
+#: src/resample/plugin.c:144
+msgid "Sample Rate Converter Preferences"
+msgstr ""
+
+#: src/resample/plugin.c:156
+msgid "Rate mappings:"
+msgstr "å–樣率映射:"
+
+#: src/resample/plugin.c:179
+msgid "All others:"
+msgstr "其他:"
+
+#: src/resample/plugin.c:191
+msgid "Method:"
+msgstr "演算法:"
+
+#: src/scrobbler/configure.c:123 src/scrobbler/configure.c:198
+msgid "Change password"
+msgstr "變更密碼"
+
+#: src/scrobbler/configure.c:144
+msgid "<b>Services</b>"
+msgstr "<b>æœå‹™</b>"
+
+#: src/scrobbler/configure.c:166
+msgid "Username:"
+msgstr "使用者å稱:"
+
+#: src/scrobbler/configure.c:172
+msgid "Password:"
+msgstr "密碼:"
+
+#: src/scrobbler/configure.c:180
+msgid "Scrobbler URL:"
+msgstr ""
+
+#: src/scrobbler/configure.c:212
+msgid "<b>Last.FM</b>"
+msgstr ""
+
+#: src/scrobbler/configure.c:239
+msgid "Scrobbler"
+msgstr ""
+
+#: src/scrobbler/plugin.c:194
+msgid ""
+"Audacious AudioScrobbler Plugin\n"
+"\n"
+"Originally created by Audun Hove <audun@nlc.no> and Pipian <pipian@pipian."
+"com>\n"
+msgstr ""
+
+#: src/scrobbler/plugin.c:196
+msgid "About Scrobbler Plugin"
+msgstr ""
+
+#: src/sdlout/plugin.c:58
+msgid "About SDL Output Plugin"
+msgstr ""
+
+#: src/sdlout/plugin.c:78
+msgid "SDL error"
+msgstr ""
+
+#: src/search-tool/search-tool.c:42
+msgid "Genre"
+msgstr "é¡žåž‹"
+
+#: src/search-tool/search-tool.c:96 src/search-tool/search-tool.c:106
+msgid "Library"
+msgstr "媒體櫃"
+
+#: src/search-tool/search-tool.c:591
+msgid "_Create Playlist"
+msgstr "建立播放清單(_C)"
+
+#: src/search-tool/search-tool.c:598
+msgid "_Add to Playlist"
+msgstr "加入至播放清單(_A):"
+
+#: src/search-tool/search-tool.c:641
+msgid "Search library"
+msgstr "æœå°‹åª’體櫃"
+
+#: src/search-tool/search-tool.c:645
+msgid ""
+"To import your music library into Audacious, choose a folder and then click "
+"the \"refresh\" icon."
+msgstr ""
+"è¦å°‡æ‚¨çš„媒體櫃匯入至 Audacious,請é¸æ“‡ç›®æ¨™è³‡æ–™å¤¾ä¸¦ä¸”按下 \"é‡æ–°æ•´ç†\" 圖示。"
+
+#: src/search-tool/search-tool.c:653
+msgid "Please wait ..."
+msgstr "è«‹ç¨å€™ ..."
+
+#: src/search-tool/search-tool.c:675
+msgid "Choose Folder"
+msgstr "é¸æ“‡è³‡æ–™å¤¾"
+
+#: src/skins/plugin.c:167
+msgid "About Skinned GUI"
+msgstr ""
+
+#: src/skins/plugin.c:168
+msgid ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
+msgstr ""
+
+#: src/skins/skins_cfg.c:207
+msgid "_Player:"
+msgstr "播放器(_P):"
+
+#: src/skins/skins_cfg.c:208
+msgid "Select main player window font:"
+msgstr "é¸æ“‡æ’­æ”¾å™¨ä¸»è¦–窗字型:"
+
+#: src/skins/skins_cfg.c:210
+msgid "_Playlist:"
+msgstr "播放清單(_P):"
+
+#: src/skins/skins_cfg.c:211
+msgid "Select playlist font:"
+msgstr "é¸æ“‡æ’­æ”¾æ¸…單字型:"
+
+#: src/skins/skins_cfg.c:215
+msgid "<b>_Fonts</b>"
+msgstr "<b>å­—åž‹(_F)</b>"
+
+#: src/skins/skins_cfg.c:218
+msgid "Use bitmap fonts (supports ASCII only)"
+msgstr "使用點陣字型 (åªæ”¯æ´ ASCII)"
+
+#: src/skins/skins_cfg.c:220
+msgid "Scroll song title in both directions"
+msgstr "é›™å‘æ²å‹•æ­Œæ›²æ¨™é¡Œ"
+
+#: src/skins/skins_cfg.c:298
+msgid "<b>_Skin</b>"
+msgstr "<b>é¢æ¿</b>"
+
+#: src/skins/skins_cfg.c:345
+msgid "Interface Preferences"
+msgstr "介é¢å好設定"
+
+#: src/skins/ui_equalizer.c:330
+msgid "Preamp"
+msgstr "å‰ç½®æ”¾å¤§"
+
+#: src/skins/ui_equalizer.c:334
+msgid "31 Hz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:335
+msgid "63 Hz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:335
+msgid "125 Hz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:335
+msgid "250 Hz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:335
+msgid "500 Hz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:335
+msgid "1 kHz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:336
+msgid "2 kHz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:336
+msgid "4 kHz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:336
+msgid "8 kHz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:336
+msgid "16 kHz"
+msgstr ""
+
+#: src/skins/ui_equalizer.c:379
+msgid "Audacious Equalizer"
+msgstr "Audacious 等化器"
+
+#: src/skins/ui_equalizer.c:887
+msgid "Presets"
+msgstr "樣å¼"
+
+#: src/skins/ui_equalizer.c:968 src/skins/ui_manager.c:442
+msgid "Load preset"
+msgstr "載入樣å¼"
+
+#: src/skins/ui_equalizer.c:985
+msgid "Load auto-preset"
+msgstr "讀å–自動載入樣å¼"
+
+#: src/skins/ui_equalizer.c:1015 src/skins/ui_equalizer.c:1033
+#: src/skins/ui_equalizer.c:1049
+msgid "Load equalizer preset"
+msgstr "載入等化器樣å¼"
+
+#: src/skins/ui_equalizer.c:1068 src/skins/ui_manager.c:463
+msgid "Save preset"
+msgstr "儲存樣å¼"
+
+#: src/skins/ui_equalizer.c:1084
+msgid "Save auto-preset"
+msgstr "儲存自動載入樣å¼"
+
+#: src/skins/ui_equalizer.c:1114 src/skins/ui_equalizer.c:1150
+msgid "Save equalizer preset"
+msgstr "儲存等化器樣å¼"
+
+#: src/skins/ui_equalizer.c:1169 src/skins/ui_manager.c:478
+msgid "Delete preset"
+msgstr "刪除樣å¼"
+
+#: src/skins/ui_equalizer.c:1186
+msgid "Delete auto-preset"
+msgstr "刪除自動載入樣å¼"
+
+#: src/skins/ui_main.c:444
+msgid "kbps"
+msgstr ""
+
+#: src/skins/ui_main.c:452
+msgid "kHz"
+msgstr ""
+
+#: src/skins/ui_main.c:459
+msgid "surround"
+msgstr "環繞"
+
+#: src/skins/ui_main.c:807
+#, c-format
+msgid "Seek to %d:%-2.2d / %d:%-2.2d"
+msgstr ""
+
+#: src/skins/ui_main.c:828
+#, c-format
+msgid "Volume: %d%%"
+msgstr "音é‡: %d%%"
+
+#: src/skins/ui_main.c:851
+#, c-format
+msgid "Balance: %d%% left"
+msgstr "平衡: %d%% åå·¦"
+
+#: src/skins/ui_main.c:853
+msgid "Balance: center"
+msgstr "平衡: 中間"
+
+#: src/skins/ui_main.c:855
+#, c-format
+msgid "Balance: %d%% right"
+msgstr "平衡: %d%% åå³"
+
+#: src/skins/ui_main.c:981
+msgid "Options Menu"
+msgstr ""
+
+#: src/skins/ui_main.c:985
+msgid "Disable 'Always On Top'"
+msgstr "關閉置頂"
+
+#: src/skins/ui_main.c:987
+msgid "Enable 'Always On Top'"
+msgstr "啟用置頂"
+
+#: src/skins/ui_main.c:990
+msgid "File Info Box"
+msgstr ""
+
+#: src/skins/ui_main.c:995
+msgid "Visualization Menu"
+msgstr "視覺化é¸å–®"
+
+#: src/skins/ui_main.c:1653
+msgid "Single mode."
+msgstr ""
+
+#: src/skins/ui_main.c:1655
+msgid "Playlist mode."
+msgstr ""
+
+#: src/skins/ui_main.c:1677
+msgid "Stopping after song."
+msgstr ""
+
+#: src/skins/ui_main.c:1679
+msgid "Not stopping after song."
+msgstr ""
+
+#: src/skins/ui_manager.c:67 src/skins/ui_manager.c:68
+msgid "Autoscroll Songname"
+msgstr "自動æ²å‹•æ­Œå"
+
+#: src/skins/ui_manager.c:70 src/skins/ui_manager.c:71
+msgid "Stop after Current Song"
+msgstr "播放完目å‰æ­Œæ›²å¾Œåœæ­¢"
+
+#: src/skins/ui_manager.c:73 src/skins/ui_manager.c:74
+msgid "Peaks"
+msgstr "峰值"
+
+#: src/skins/ui_manager.c:76 src/skins/ui_manager.c:77
+msgid "Repeat"
+msgstr "é‡è¤‡"
+
+#: src/skins/ui_manager.c:79 src/skins/ui_manager.c:80
+msgid "Shuffle"
+msgstr "隨機"
+
+#: src/skins/ui_manager.c:82 src/skins/ui_manager.c:83
+msgid "No Playlist Advance"
+msgstr "ä¸è¦åˆ‡æ›æ’­æ”¾æ¸…å–®"
+
+#: src/skins/ui_manager.c:85 src/skins/ui_manager.c:86
+msgid "Show Player"
+msgstr "顯示播放器"
+
+#: src/skins/ui_manager.c:88 src/skins/ui_manager.c:89
+msgid "Show Playlist Editor"
+msgstr "顯示播放清單編輯器"
+
+#: src/skins/ui_manager.c:91 src/skins/ui_manager.c:92
+msgid "Show Equalizer"
+msgstr "顯示等化器"
+
+#: src/skins/ui_manager.c:94 src/skins/ui_manager.c:95
+msgid "Always on Top"
+msgstr "æ°¸é åœ¨æœ€ä¸Šå±¤"
+
+#: src/skins/ui_manager.c:97 src/skins/ui_manager.c:98
+msgid "Put on All Workspaces"
+msgstr "在所有工作å€é¡¯ç¤º"
+
+#: src/skins/ui_manager.c:100 src/skins/ui_manager.c:101
+msgid "Roll up Player"
+msgstr "æ²èµ·æ’­æ”¾å™¨"
+
+#: src/skins/ui_manager.c:103 src/skins/ui_manager.c:104
+msgid "Roll up Playlist Editor"
+msgstr "æ²èµ·æ’­æ”¾æ¸…單編輯器"
+
+#: src/skins/ui_manager.c:106 src/skins/ui_manager.c:107
+msgid "Roll up Equalizer"
+msgstr "æ²èµ·ç­‰åŒ–器"
+
+#: src/skins/ui_manager.c:115
+msgid "Analyzer"
+msgstr "分æžå„€"
+
+#: src/skins/ui_manager.c:116
+msgid "Scope"
+msgstr "示波器"
+
+#: src/skins/ui_manager.c:117
+msgid "Voiceprint"
+msgstr "è²ç´‹"
+
+#: src/skins/ui_manager.c:118
+msgid "Off"
+msgstr "關閉"
+
+#: src/skins/ui_manager.c:122 src/skins/ui_manager.c:139
+#: src/skins/ui_manager.c:145
+msgid "Normal"
+msgstr "標準"
+
+#: src/skins/ui_manager.c:123 src/skins/ui_manager.c:140
+msgid "Fire"
+msgstr "ç«ç„°"
+
+#: src/skins/ui_manager.c:124
+msgid "Vertical Lines"
+msgstr "åž‚ç›´ç·šæ¢"
+
+#: src/skins/ui_manager.c:128
+msgid "Lines"
+msgstr "ç·šæ¢"
+
+#: src/skins/ui_manager.c:129
+msgid "Bars"
+msgstr "棒狀"
+
+#: src/skins/ui_manager.c:133
+msgid "Dot Scope"
+msgstr "點狀"
+
+#: src/skins/ui_manager.c:134
+msgid "Line Scope"
+msgstr "ç·šç‹€"
+
+#: src/skins/ui_manager.c:135
+msgid "Solid Scope"
+msgstr "實心"
+
+#: src/skins/ui_manager.c:141
+msgid "Ice"
+msgstr "冰霜"
+
+#: src/skins/ui_manager.c:146
+msgid "Smooth"
+msgstr "平滑"
+
+#: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
+msgid "Slowest"
+msgstr "最慢"
+
+#: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
+msgid "Slow"
+msgstr "æ…¢"
+
+#: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
+msgid "Medium"
+msgstr "中等"
+
+#: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
+msgid "Fast"
+msgstr "å¿«"
+
+#: src/skins/ui_manager.c:154 src/skins/ui_manager.c:162
+msgid "Fastest"
+msgstr "最快"
+
+#: src/skins/ui_manager.c:166
+msgid "Time Elapsed"
+msgstr "經éŽæ™‚é–“"
+
+#: src/skins/ui_manager.c:167
+msgid "Time Remaining"
+msgstr "剩餘時間"
+
+#: src/skins/ui_manager.c:181 src/skins/ui_manager.c:182
+msgid "Pause"
+msgstr "æš«åœ"
+
+#: src/skins/ui_manager.c:187 src/skins/ui_manager.c:188
+msgid "Previous"
+msgstr "上一個"
+
+#: src/skins/ui_manager.c:190 src/skins/ui_manager.c:191
+msgid "Next"
+msgstr "下一個"
+
+#: src/skins/ui_manager.c:196
+msgid "Visualization"
+msgstr "視覺化"
+
+#: src/skins/ui_manager.c:197
+msgid "Visualization Mode"
+msgstr "視覺化模å¼"
+
+#: src/skins/ui_manager.c:198
+msgid "Analyzer Mode"
+msgstr "分æžå„€æ¨¡å¼"
+
+#: src/skins/ui_manager.c:199
+msgid "Scope Mode"
+msgstr "示波器模å¼"
+
+#: src/skins/ui_manager.c:200
+msgid "Voiceprint Mode"
+msgstr "è²ç´‹æ¨¡å¼"
+
+#: src/skins/ui_manager.c:201
+msgid "WindowShade VU Mode"
+msgstr "百葉窗音é‡è¨ˆæ¨¡å¼"
+
+#: src/skins/ui_manager.c:202
+msgid "Analyzer Falloff"
+msgstr "分æžå„€é™·è½"
+
+#: src/skins/ui_manager.c:203
+msgid "Peaks Falloff"
+msgstr "峰值陷è½"
+
+#: src/skins/ui_manager.c:208
+msgid "Playlist"
+msgstr "播放清單"
+
+#: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
+msgid "New Playlist"
+msgstr "新增播放清單"
+
+#: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
+msgid "Select Next Playlist"
+msgstr "é¸æ“‡ä¸‹ä¸€å€‹æ’­æ”¾æ¸…å–®"
+
+#: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
+msgid "Select Previous Playlist"
+msgstr "é¸æ“‡ä¸Šä¸€å€‹æ’­æ”¾æ¸…å–®"
+
+#: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
+msgid "Delete Playlist"
+msgstr "刪除播放清單"
+
+#: src/skins/ui_manager.c:222
+msgid "Import Playlist"
+msgstr "匯入播放清單"
+
+#: src/skins/ui_manager.c:223
+msgid "Loads a playlist file into the selected playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:226
+msgid "Export Playlist"
+msgstr "匯出播放清單"
+
+#: src/skins/ui_manager.c:227
+msgid "Saves the selected playlist."
+msgstr "儲存é¸æ“‡çš„播放清單。"
+
+#: src/skins/ui_manager.c:229
+msgid "Refresh List"
+msgstr "é‡æ•´æ¸…å–®"
+
+#: src/skins/ui_manager.c:230
+msgid "Refreshes metadata associated with a playlist entry."
+msgstr ""
+
+#: src/skins/ui_manager.c:233
+msgid "Playlist Manager"
+msgstr "播放清單管ç†"
+
+#: src/skins/ui_manager.c:234
+msgid "Queue Manager"
+msgstr "佇列管ç†"
+
+#: src/skins/ui_manager.c:237
+msgid "View"
+msgstr "檢視"
+
+#: src/skins/ui_manager.c:238
+msgid "Interface"
+msgstr "介é¢"
+
+#: src/skins/ui_manager.c:239
+msgid "Interface Preferences ..."
+msgstr "介é¢å好設定 ..."
+
+#: src/skins/ui_manager.c:243
+msgid "Add Internet Address..."
+msgstr "加入網路ä½å€..."
+
+#: src/skins/ui_manager.c:244
+msgid "Adds a remote track to the playlist."
+msgstr "加入一個é ç«¯éŸ³è»Œåˆ°æ’­æ”¾æ¸…單。"
+
+#: src/skins/ui_manager.c:247
+msgid "Add Files..."
+msgstr "加入檔案..."
+
+#: src/skins/ui_manager.c:248
+msgid "Adds files to the playlist."
+msgstr "加入檔案到播放清單。"
+
+#: src/skins/ui_manager.c:253
+msgid "Search and Select"
+msgstr "æœå°‹ä¸¦é¸æ“‡"
+
+#: src/skins/ui_manager.c:254
+msgid ""
+"Searches the playlist and selects playlist entries based on specific "
+"criteria."
+msgstr ""
+
+#: src/skins/ui_manager.c:257
+msgid "Invert Selection"
+msgstr "åå‘é¸æ“‡"
+
+#: src/skins/ui_manager.c:258
+msgid "Inverts the selected and unselected entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:261
+msgid "Select All"
+msgstr "é¸æ“‡å…¨éƒ¨"
+
+#: src/skins/ui_manager.c:262
+msgid "Selects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:265
+msgid "Select None"
+msgstr "å–消é¸æ“‡"
+
+#: src/skins/ui_manager.c:266
+msgid "Deselects all of the playlist entries."
+msgstr ""
+
+#: src/skins/ui_manager.c:271
+msgid "Remove All"
+msgstr "全部移除"
+
+#: src/skins/ui_manager.c:272
+msgid "Removes all entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:275
+msgid "Clear Queue"
+msgstr "清除佇列"
+
+#: src/skins/ui_manager.c:276
+msgid "Clears the queue associated with this playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:279
+msgid "Remove Unavailable Files"
+msgstr "移除ä¸å­˜åœ¨çš„檔案"
+
+#: src/skins/ui_manager.c:280
+msgid "Removes unavailable files from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:283
+msgid "Remove Duplicates"
+msgstr "移除é‡è¤‡çš„é …ç›®"
+
+#: src/skins/ui_manager.c:285 src/skins/ui_manager.c:317
+#: src/skins/ui_manager.c:347
+msgid "By Title"
+msgstr "標題"
+
+#: src/skins/ui_manager.c:286
+msgid "Removes duplicate entries from the playlist by title."
+msgstr ""
+
+#: src/skins/ui_manager.c:289 src/skins/ui_manager.c:329
+#: src/skins/ui_manager.c:359
+msgid "By Filename"
+msgstr "檔案å稱"
+
+#: src/skins/ui_manager.c:290
+msgid "Removes duplicate entries from the playlist by filename."
+msgstr ""
+
+#: src/skins/ui_manager.c:293 src/skins/ui_manager.c:333
+#: src/skins/ui_manager.c:363
+msgid "By Path + Filename"
+msgstr "路徑 + 檔案å稱"
+
+#: src/skins/ui_manager.c:294
+msgid "Removes duplicate entries from the playlist by their full path."
+msgstr ""
+
+#: src/skins/ui_manager.c:297
+msgid "Remove Unselected"
+msgstr "移除未é¸æ“‡çš„é …ç›®"
+
+#: src/skins/ui_manager.c:298
+msgid "Remove unselected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:301
+msgid "Remove Selected"
+msgstr "移除é¸æ“‡çš„é …ç›®"
+
+#: src/skins/ui_manager.c:302
+msgid "Remove selected entries from the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:307
+msgid "Randomize List"
+msgstr "清單隨機排åº"
+
+#: src/skins/ui_manager.c:308
+msgid "Randomizes the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:311
+msgid "Reverse List"
+msgstr "清單åå‘排åº"
+
+#: src/skins/ui_manager.c:312
+msgid "Reverses the playlist."
+msgstr ""
+
+#: src/skins/ui_manager.c:315
+msgid "Sort List"
+msgstr "排åºæ¸…å–®"
+
+#: src/skins/ui_manager.c:318 src/skins/ui_manager.c:348
+msgid "Sorts the list by title."
+msgstr ""
+
+#: src/skins/ui_manager.c:321 src/skins/ui_manager.c:351
+msgid "By Album"
+msgstr "專輯"
+
+#: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
+msgid "Sorts the list by album."
+msgstr ""
+
+#: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
+msgid "By Artist"
+msgstr "è—人"
+
+#: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
+msgid "Sorts the list by artist."
+msgstr ""
+
+#: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
+msgid "Sorts the list by filename."
+msgstr ""
+
+#: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
+msgid "Sorts the list by full pathname."
+msgstr ""
+
+#: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
+msgid "By Date"
+msgstr "日期"
+
+#: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
+msgid "Sorts the list by modification time."
+msgstr ""
+
+#: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
+msgid "By Track Number"
+msgstr "音軌編號"
+
+#: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
+msgid "Sorts the list by track number."
+msgstr ""
+
+#: src/skins/ui_manager.c:345
+msgid "Sort Selected"
+msgstr "排åºé¸æ“‡çš„é …ç›®"
+
+#: src/skins/ui_manager.c:381
+msgid "File"
+msgstr "檔案"
+
+#: src/skins/ui_manager.c:384
+msgid "Plugin Services"
+msgstr "外掛æœå‹™"
+
+#: src/skins/ui_manager.c:386 src/skins/ui_manager.c:389
+msgid "View Track Details"
+msgstr "檢視音軌詳細資料"
+
+#: src/skins/ui_manager.c:387 src/skins/ui_manager.c:390
+msgid "View track details"
+msgstr "檢視音軌詳細資料"
+
+#: src/skins/ui_manager.c:392 src/skins/ui_manager.c:393
+msgid "About Audacious"
+msgstr "關於 Audacious"
+
+#: src/skins/ui_manager.c:395
+msgid "Play File"
+msgstr "播放檔案"
+
+#: src/skins/ui_manager.c:396
+msgid "Load and play a file"
+msgstr "載入並播放檔案"
+
+#: src/skins/ui_manager.c:398
+msgid "Play Location"
+msgstr "播放ä½å€"
+
+#: src/skins/ui_manager.c:399
+msgid "Play media from the selected location"
+msgstr "從é¸å®šçš„ä½å€æ’­æ”¾åª’é«”"
+
+#: src/skins/ui_manager.c:401
+msgid "Plugin services"
+msgstr "外掛æœå‹™"
+
+#: src/skins/ui_manager.c:403
+msgid "Preferences"
+msgstr "å好設定"
+
+#: src/skins/ui_manager.c:404
+msgid "Open preferences window"
+msgstr "é–‹å•Ÿå好設定視窗"
+
+#: src/skins/ui_manager.c:407
+msgid "Quit Audacious"
+msgstr "離開 Audacious"
+
+#: src/skins/ui_manager.c:409 src/skins/ui_manager.c:410
+msgid "Set A-B"
+msgstr "設定 A-B"
+
+#: src/skins/ui_manager.c:412 src/skins/ui_manager.c:413
+msgid "Clear A-B"
+msgstr "清除 A-B"
+
+#: src/skins/ui_manager.c:418 src/skins/ui_manager.c:419
+msgid "Jump to Time"
+msgstr "跳至時間"
+
+#: src/skins/ui_manager.c:421
+msgid "Queue Toggle"
+msgstr "切æ›ä½‡åˆ—"
+
+#: src/skins/ui_manager.c:422
+msgid "Enables/disables the entry in the playlist's queue."
+msgstr ""
+
+#: src/skins/ui_manager.c:425
+msgid "Copy"
+msgstr "複製"
+
+#: src/skins/ui_manager.c:427
+msgid "Cut"
+msgstr "剪下"
+
+#: src/skins/ui_manager.c:429
+msgid "Paste"
+msgstr "貼上"
+
+#: src/skins/ui_manager.c:436
+msgid "Load"
+msgstr "載入"
+
+#: src/skins/ui_manager.c:437
+msgid "Import"
+msgstr "匯入"
+
+#: src/skins/ui_manager.c:438
+msgid "Save"
+msgstr "儲存"
+
+#: src/skins/ui_manager.c:439
+msgid "Delete"
+msgstr "刪除"
+
+#: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
+#: src/skins/ui_manager.c:477
+msgid "Preset"
+msgstr "樣å¼"
+
+#: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
+#: src/skins/ui_manager.c:480
+msgid "Auto-load preset"
+msgstr "自動載入樣å¼"
+
+#: src/skins/ui_manager.c:445
+msgid "Load auto-load preset"
+msgstr "讀å–自動載入樣å¼"
+
+#: src/skins/ui_manager.c:448
+msgid "Load default preset into equalizer"
+msgstr "載入é è¨­ç­‰åŒ–器樣å¼"
+
+#: src/skins/ui_manager.c:450
+msgid "Zero"
+msgstr "歸零"
+
+#: src/skins/ui_manager.c:451
+msgid "Set equalizer preset levels to zero"
+msgstr "將等化器é‡ç½®"
+
+#: src/skins/ui_manager.c:453
+msgid "From file"
+msgstr "從檔案"
+
+#: src/skins/ui_manager.c:454
+msgid "Load preset from file"
+msgstr "從檔案載入樣å¼"
+
+#: src/skins/ui_manager.c:456
+msgid "From WinAMP EQF file"
+msgstr "從 WinAMP EQF 檔"
+
+#: src/skins/ui_manager.c:457
+msgid "Load preset from WinAMP EQF file"
+msgstr "從 WinAMP EQF 檔載入樣å¼"
+
+#: src/skins/ui_manager.c:459
+msgid "WinAMP Presets"
+msgstr "WinAMP 樣å¼"
+
+#: src/skins/ui_manager.c:460
+msgid "Import WinAMP presets"
+msgstr "匯入 WinAMP 樣å¼"
+
+#: src/skins/ui_manager.c:466
+msgid "Save auto-load preset"
+msgstr "儲存自動載入樣å¼"
+
+#: src/skins/ui_manager.c:469
+msgid "Save default preset"
+msgstr "儲存é è¨­æ¨£å¼"
+
+#: src/skins/ui_manager.c:471
+msgid "To file"
+msgstr "至檔案"
+
+#: src/skins/ui_manager.c:472
+msgid "Save preset to file"
+msgstr "儲存樣å¼åˆ°æª”案"
+
+#: src/skins/ui_manager.c:474
+msgid "To WinAMP EQF file"
+msgstr "至 WinAMP EQF 檔"
+
+#: src/skins/ui_manager.c:475
+msgid "Save preset to WinAMP EQF file"
+msgstr "儲存樣å¼åˆ° WinAMP EQF 檔"
+
+#: src/skins/ui_manager.c:481
+msgid "Delete auto-load preset"
+msgstr "刪除自動載入樣å¼"
+
+#: src/skins/ui_playlist.c:248
+msgid "Search entries in active playlist"
+msgstr ""
+
+#: src/skins/ui_playlist.c:256
+msgid ""
+"Select entries in playlist by filling one or more fields. Fields use regular "
+"expressions syntax, case-insensitive. If you don't know how regular "
+"expressions work, simply insert a literal portion of what you're searching "
+"for."
+msgstr ""
+
+#: src/skins/ui_playlist.c:264
+msgid "Title: "
+msgstr "標題: "
+
+#: src/skins/ui_playlist.c:271
+msgid "Album: "
+msgstr "專輯: "
+
+#: src/skins/ui_playlist.c:278
+msgid "Artist: "
+msgstr "è—人: "
+
+#: src/skins/ui_playlist.c:285
+msgid "Filename: "
+msgstr "檔å: "
+
+#: src/skins/ui_playlist.c:293
+msgid "Clear previous selection before searching"
+msgstr ""
+
+#: src/skins/ui_playlist.c:296
+msgid "Automatically toggle queue for matching entries"
+msgstr ""
+
+#: src/skins/ui_playlist.c:299
+msgid "Create a new playlist with matching entries"
+msgstr ""
+
+#: src/skins/ui_playlist.c:765
+msgid "Audacious Playlist Editor"
+msgstr ""
+
+#: src/skins/ui_playlist.c:812
+#, c-format
+msgid "%s (%d of %d)"
+msgstr ""
+
+#: src/skins/ui_skinselector.c:162
+msgid "Archived Winamp 2.x skin"
+msgstr "壓縮的 Winamp 2.x é¢æ¿"
+
+#: src/skins/ui_skinselector.c:167
+msgid "Unarchived Winamp 2.x skin"
+msgstr "未壓縮的 Winamp 2.x skin"
+
+#: src/skins/util.c:774
+#, c-format
+msgid "Could not create directory (%s): %s\n"
+msgstr "無法建立資料夾 (%s): %s\n"
+
+#: src/sndfile/plugin.c:456
+msgid "About sndfile plugin"
+msgstr ""
+
+#: src/sndstretch/sndstretch_xmms.c:155
+msgid "About SndStretch"
+msgstr "關於 SndStretch"
+
+#: src/sndstretch/sndstretch_xmms.c:308
+msgid "Volume corr."
+msgstr "修正音é‡"
+
+#: src/sndstretch/sndstretch_xmms.c:309
+msgid "Short Overlap"
+msgstr "短暫é‡ç–Š"
+
+#: src/sndstretch/sndstretch_xmms.c:355
+msgid "Speed"
+msgstr "速度"
+
+#: src/sndstretch/sndstretch_xmms.c:356
+msgid "Pitch"
+msgstr "音高"
+
+#: src/sndstretch/sndstretch_xmms.c:357
+msgid "Scale"
+msgstr "音階"
+
+#: src/sndstretch/sndstretch_xmms.c:377
+msgid "SndStretch - Configuration"
+msgstr "SndStretch - 設定"
+
+#: src/song_change/song_change.c:437
+msgid "Command to run when Audacious starts a new song."
+msgstr "當 Audacious 開始播放新的歌曲時執行的指令。"
+
+#: src/song_change/song_change.c:439 src/song_change/song_change.c:445
+#: src/song_change/song_change.c:451 src/song_change/song_change.c:457
+msgid "Command:"
+msgstr "命令:"
+
+#: src/song_change/song_change.c:443
+msgid "Command to run toward the end of a song."
+msgstr "æ¯ç•¶ä¸€é¦–歌曲播放完時執行命令"
+
+#: src/song_change/song_change.c:449
+msgid "Command to run when Audacious reaches the end of the playlist."
+msgstr "æ¯ç•¶ Audacious 播放é”到清單尾端時執行命令"
+
+#: src/song_change/song_change.c:455
+msgid ""
+"Command to run when title changes for a song (i.e. network streams titles)."
+msgstr "當一首歌的標題改變時執行命令。(網路串æµçš„標題)"
+
+#: src/song_change/song_change.c:461
+msgid ""
+"You can use the following format strings which\n"
+"will be substituted before calling the command\n"
+"(not all are useful for the end-of-playlist command).\n"
+"\n"
+"%F: Frequency (in hertz)\n"
+"%c: Number of channels\n"
+"%f: filename (full path)\n"
+"%l: length (in milliseconds)\n"
+"%n or %s: Song name\n"
+"%r: Rate (in bits per second)\n"
+"%t: Playlist position (%02d)\n"
+"%p: Currently playing (1 or 0)\n"
+"%a: Artist\n"
+"%b: Album\n"
+"%T: Track title"
+msgstr ""
+"ä½ å¯ä»¥åœ¨å‘½ä»¤ä¸­ä½¿ç”¨ä¸‹åˆ—çš„æ ¼å¼å­—串。\n"
+"它們會在執行命令å‰è¢«å¯¦éš›å€¼å–代。\n"
+"(ä¸æ˜¯å…¨éƒ¨éƒ½èƒ½åœ¨æ’­æ”¾æ¸…å–®çµæŸå‘½ä»¤ä¸­ä½¿ç”¨)\n"
+"\n"
+"%F: 頻率 (赫茲)\n"
+"%c: è²é“數目\n"
+"%f: 檔å (完整路徑)\n"
+"%l: 長度 (毫秒)\n"
+"%n 或 %s: 歌曲å稱\n"
+"%r: ä½å…ƒçŽ‡ (bps)\n"
+"%t: 播放清單ä½ç½® (%02d)\n"
+"%p: 播放中 (1 或 0)\n"
+"%a: è—人\n"
+"%b: 專輯\n"
+"%T: 音軌標題"
+
+#: src/song_change/song_change.c:488
+msgid ""
+"<span size='small'>Parameters passed to the shell should be encapsulated in "
+"quotes. Doing otherwise is a security risk.</span>"
+msgstr ""
+"<span size='small'>傳給 shell çš„åƒæ•¸æ‡‰è©²ç”¨é›™å¼•è™ŸåŒ…起來,å¦å‰‡æœƒæœ‰å®‰å…¨é¢¨éšªã€‚</"
+"span>"
+
+#: src/song_change/song_change.c:499
+msgid "Commands"
+msgstr "命令"
+
+#: src/song_change/song_change.c:529
+msgid "Song Change"
+msgstr ""
+
+#: src/statusicon/statusicon.c:379
+msgid "About Status Icon Plugin"
+msgstr "關於狀態圖示外掛"
+
+#: src/statusicon/statusicon.c:380
+msgid ""
+"Status Icon Plugin\n"
+"\n"
+"Copyright 2005-2007 Giacomo Lozito <james@develia.org>\n"
+"Copyright 2010 Michał Lipski <tallica@o2.pl>\n"
+"\n"
+"This plugin provides a status icon, placed in\n"
+"the system tray area of the window manager.\n"
+msgstr ""
+
+#: src/statusicon/statusicon.c:451
+msgid "Status Icon Plugin - Preferences"
+msgstr "狀態圖示外掛 - å好設定"
+
+#: src/statusicon/statusicon.c:461
+msgid "Right-Click Menu"
+msgstr "å³éµé¸å–®"
+
+#: src/statusicon/statusicon.c:466
+msgid "Small playback menu #1"
+msgstr "å°åž‹æ’­æ”¾é¸å–® #1"
+
+#: src/statusicon/statusicon.c:469
+msgid "Small playback menu #2"
+msgstr "å°åž‹æ’­æ”¾é¸å–® #2"
+
+#: src/statusicon/statusicon.c:485
+msgid "Mouse Scroll Action"
+msgstr "滑鼠滾輪動作"
+
+#: src/statusicon/statusicon.c:489
+msgid "Change volume"
+msgstr "調整音é‡"
+
+#: src/statusicon/statusicon.c:491
+msgid "Change playing song"
+msgstr "切æ›æ’­æ”¾æ­Œæ›²"
+
+#: src/statusicon/statusicon.c:504
+msgid "Other settings"
+msgstr "其他設定"
+
+#: src/statusicon/statusicon.c:509
+msgid "Disable the popup window"
+msgstr "關閉彈出å¼è¦–窗"
+
+#: src/statusicon/statusicon.c:516
+msgid "Close to the notification area (system tray)"
+msgstr "關閉視窗時縮到通知å€åŸŸ (系統列)"
+
+#: src/statusicon/statusicon.c:524
+msgid "Advance in playlist when scrolling upward"
+msgstr "以與滑鼠滾輪的åæ–¹å‘切æ›æ­Œæ›²"
+
+#: src/stereo_plugin/stereo.c:45
+msgid ""
+"Extra Stereo Plugin\n"
+"\n"
+"By Johan Levin 1999."
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:64
+msgid "About Extra Stereo Plugin"
+msgstr ""
+
+#: src/stereo_plugin/stereo.c:95
+msgid "Configure Extra Stereo"
+msgstr ""
+
+#: src/tonegen/tonegen.c:49
+msgid "About Tone Generator"
+msgstr ""
+
+#: src/tonegen/tonegen.c:51
+msgid ""
+"Sinus tone generator by Haavard Kvaalen <havardk@xmms.org>\n"
+"Modified by Daniel J. Peng <danielpeng@bigfoot.com>\n"
+"\n"
+"To use it, add a URL: tone://frequency1;frequency2;frequency3;...\n"
+"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"
+msgstr ""
+
+#: src/tonegen/tonegen.c:101
+#, c-format
+msgid "%s %.1f Hz"
+msgstr ""
+
+#: src/tonegen/tonegen.c:101
+msgid "Tone Generator: "
+msgstr ""
+
+#: src/unix-io/gtk.c:34
+msgid "About File I/O Plugin"
+msgstr ""
+
+#: src/vorbis/vorbis.c:573
+msgid "About Ogg Vorbis Audio Plugin"
+msgstr "關於 Ogg Vorbis 音訊外掛"
+
+#: src/vorbis/vorbis.c:578
+msgid ""
+"Ogg Vorbis Plugin by the Xiph.org Foundation\n"
+"\n"
+"Original code by\n"
+"Tony Arcieri <bascule@inferno.tusculum.edu>\n"
+"Contributions from\n"
+"Chris Montgomery <monty@xiph.org>\n"
+"Peter Alm <peter@xmms.org>\n"
+"Michael Smith <msmith@labyrinth.edu.au>\n"
+"Jack Moffitt <jack@icecast.org>\n"
+"Jorn Baayen <jorn@nl.linux.org>\n"
+"Haavard Kvaalen <havardk@xmms.org>\n"
+"Gian-Carlo Pascutto <gcp@sjeng.org>\n"
+"Eugene Zagidullin <e.asphyx@gmail.com>\n"
+"\n"
+"Visit the Xiph.org Foundation at http://www.xiph.org/\n"
+msgstr ""
+
+#: src/vtx/about.c:14
+msgid "About Vortex Player"
+msgstr ""
+
+#: src/vtx/about.c:15
+msgid ""
+"Vortex file format player by Sashnov Alexander <sashnov@ngs.ru>\n"
+"Founded on original source in_vtx.dll by Roman Sherbakov <v_soft@microfor."
+"ru>\n"
+"\n"
+"Music in vtx format can be found at http://vtx.microfor.ru/music.htm\n"
+"and other AY/YM music sites.\n"
+"\n"
+"Audacious implementation by Pavel Vymetalek <pvymetalek@seznam.cz>"
+msgstr ""
+
+#: src/wavpack/wavpack.c:353
+#, c-format
+msgid "Wavpack Decoder Plugin %s"
+msgstr ""
+
+#: src/wavpack/wavpack.c:354
+msgid ""
+"Copyright (c) 2006 William Pitcock <nenolod -at- nenolod.net>\n"
+"\n"
+"Some of the plugin code was by Miles Egan\n"
+"Visit the Wavpack site at http://www.wavpack.com/\n"
+msgstr ""
+
+#~ msgid "Close"
+#~ msgstr "關閉"
+
+#~ msgid "Sorry"
+#~ msgstr "抱歉"
+
+#~ msgid "Warning"
+#~ msgstr "警告"
+
+#~ msgid "Jump to Playlist Start"
+#~ msgstr "跳至播放清單開頭"
+
+#~ msgid "Stream name"
+#~ msgstr "串æµå稱"
+
+#~ msgid "About Stream Browser"
+#~ msgstr "關於串æµç€è¦½å™¨"
diff --git a/src/CoreAudio/Makefile b/src/CoreAudio/Makefile
deleted file mode 100644
index 9c3de06..0000000
--- a/src/CoreAudio/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-PLUGIN = CoreAudio${PLUGIN_SUFFIX}
-
-SRCS = about.c \
- configure.c \
- coreaudio.c \
- init.c \
- audio.c \
- convert.c \
- dbconvert.c \
- mixer.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} -I../.. ${GTK_CFLAGS} ${GLIB_CFLAGS}
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/CoreAudio/about.c b/src/CoreAudio/about.c
deleted file mode 100644
index 5be8b50..0000000
--- a/src/CoreAudio/about.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#include "coreaudio.h"
-
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-
-void osx_about(void)
-{
- static GtkWidget *dialog = NULL;
-
- audgui_simple_message(&dialog, GTK_MESSAGE_INFO,
- "About CoreAudio Plugin",
- "Audacious CoreAudio Plugin\n\n "
- "This program is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
- "the Free Software Foundation; either version 2 of the License, or\n"
- "(at your option) any later version.\n"
- "\n"
- "This program is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- "GNU General Public License for more details.\n"
- "\n"
- "You should have received a copy of the GNU General Public License\n"
- "along with this program; if not, write to the Free Software\n"
- "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
- "USA.");
-}
diff --git a/src/CoreAudio/audio.c b/src/CoreAudio/audio.c
deleted file mode 100644
index 7c0e47d..0000000
--- a/src/CoreAudio/audio.c
+++ /dev/null
@@ -1,678 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2001 Peter Alm, Mikael Alm, Olle Hallnas,
- * Thomas Nilsson and 4Front Technologies
- * Copyright (C) 1999-2001 Haavard Kvaalen
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#include "coreaudio.h"
-#include <errno.h>
-#include <CoreAudio/CoreAudio.h>
-
-AudioDeviceID device_id;
-AudioStreamBasicDescription device_format;
-AudioStreamBasicDescription streamDesc;
-
-//static gint fd = 0;
-static float *buffer;
-gboolean playing_flag;
-static gboolean prebuffer, unpause, do_pause, remove_prebuffer;
-static gint device_buffer_size;
-static gint buffer_size, prebuffer_size;//, blk_size;
-static gint buffer_index = 0;
-static gint output_time_offset = 0;
-static guint64 written = 0, output_total = 0;
-static gint flush;
-static gchar *device_name;
-
-gint sample_multiplier, sample_size;
-
-gboolean paused;
-
-static int (*osx_convert_func) (void **data, int length);
-
-float left_volume, right_volume;
-float base_pitch = 0.0;
-float user_pitch = 0.0;
-int output_buf_length; // length of data in output buffer
-short output_buf[OUTPUT_BUFSIZE]; /* buffer used to hold main output to dbfsd */
-short cue_buf[OUTPUT_BUFSIZE]; /* buffer used to hold cue output to dbfsd */
-short conv_buf[OUTPUT_BUFSIZE]; /* buffer used to hold format converted input */
-
-/*
- * The format of the data from the input plugin
- * This will never change during a song.
- */
-struct format_info input;
-
-
-/*
- * The format we get from the effect plugin.
- * This will be different from input if the effect plugin does
- * some kind of format conversion.
- */
-struct format_info effect;
-
-
-/*
- * The format of the data we actually send to the soundcard.
- * This might be different from effect if we need to resample or do
- * some other format conversion.
- */
-struct format_info output;
-
-
-static int osx_calc_bitrate(int osx_fmt, int rate, int channels)
-{
- int bitrate = rate * channels;
-
- // for now we know output is stereo
- // fix this later
-
- if (osx_fmt == FMT_U16_BE || osx_fmt == FMT_U16_LE ||
- osx_fmt == FMT_S16_BE || osx_fmt == FMT_S16_LE)
- {
- bitrate *= 2;
- }
-
- return bitrate;
-}
-
-static gboolean osx_format_is_neutral(gint fmt)
-{
- gboolean ret = FALSE;
-
- switch (fmt)
- {
- case FMT_U16_NE:
- case FMT_S16_NE:
- case FMT_U8:
- case FMT_S8:
- ret = TRUE;
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-static int osx_get_format(gint fmt)
-{
- int format = 0;
-
- switch (fmt)
- {
- case FMT_U16_NE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_U16_BE;
-#else
- format = FMT_U16_LE;
-#endif
- break;
- case FMT_S16_NE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_S16_BE;
-#else
- format = FMT_S16_LE;
-#endif
- break;
- default:
- format = fmt;
- break;
- }
-
- return format;
-}
-
-static int osx_get_conv_format(gint fmt)
-{
- int format = 0;
-
- switch (fmt)
- {
- case FMT_U16_LE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_U16_BE;
-#else
- format = FMT_U16_LE;
-#endif
- break;
- case FMT_U16_BE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_U16_LE;
-#else
- format = FMT_U16_BE;
-#endif
- break;
- case FMT_S16_LE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_S16_BE;
-#else
- format = FMT_S16_LE;
-#endif
- break;
- case FMT_S16_BE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_S16_LE;
-#else
- format = FMT_S16_BE;
-#endif
- break;
- case FMT_U16_NE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_U16_BE;
-#else
- format = FMT_U16_LE;
-#endif
- break;
- case FMT_S16_NE:
-#ifdef WORDS_BIGENDIAN
- format = FMT_S16_BE;
-#else
- format = FMT_S16_LE;
-#endif
- break;
- default:
- format = fmt;
- break;
- }
-
- return format;
-}
-
-
-OSStatus play_callback(AudioDeviceID inDevice, const AudioTimeStamp * inNow, const AudioBufferList * inInputData, const AudioTimeStamp * inInputTime, AudioBufferList * outOutputData, const AudioTimeStamp * inOutputTime, void * inClientData)
-{
- int i;
- long m, n, o;
- float * dest, tempfloat;
- float * src;
- int src_size_bytes;
- int src_size_float;
- int num_output_samples;
- int used_samples;
-
- src_size_bytes = outOutputData->mBuffers[0].mDataByteSize;
- src_size_float = src_size_bytes / sizeof(float);
-
- num_output_samples = MIN(buffer_index,src_size_float);
-
- //printf("play_callback(): num_output_samples %d, index %d\n",num_output_samples,buffer_index);
-
- // if we are prebuffering, zero the buffer
- if (prebuffer && (buffer_index < prebuffer_size))
- {
- //printf("prebuffering... %d samples left\n",prebuffer_size-buffer_index);
- num_output_samples = 0;
- }
- else
- {
- prebuffer = FALSE;
- }
-
- src = buffer;
- dest = outOutputData->mBuffers[0].mData;
-
- // copy available data to buffer and apply volume to each channel
- for (i = 0; i < num_output_samples/2; i++)
- {
- //tempfloat = *src;
- *dest = (*src) * left_volume;
- src++;
- dest++;
-
- *dest = (*src) * right_volume;
- src++;
- dest++;
- }
-
- // if less than a buffer's worth of data is ready, zero remainder of output buffer
- if (num_output_samples != src_size_float)
- {
- //printf("zeroing %d samples",(src_size_float - num_output_samples));
-
- dest = (float*)outOutputData->mBuffers[0].mData + num_output_samples;
-
- memset(dest,0,(src_size_float - num_output_samples) * sizeof(float));
- }
-
- // move unwritten data to beginning of buffer
- {
- dest = buffer;
-
- for (i = num_output_samples; i < buffer_index; i++)
- {
- *dest = *src;
- dest++;
- src++;
- }
-
- output_total += num_output_samples;
- buffer_index -= num_output_samples;
- }
-
-
- if (flush != -1)
- {
- osx_set_audio_params();
- output_time_offset = flush;
- written = ((guint64)flush * input.bps) / (1000 * sample_size);
- buffer_index = 0;
- output_total = 0;
-
- flush = -1;
- prebuffer = TRUE;
- }
-
- //printf("\n");
-
- return 0;
-}
-
-
-static void osx_setup_format(gint fmt, int rate, int nch)
-{
- //printf("osx_setup_format(): fmt %d, rate %d, nch %d\n",fmt,rate,nch);
-
- effect.format.xmms = osx_get_format(fmt);
- effect.frequency = rate;
- effect.channels = nch;
- effect.bps = osx_calc_bitrate(fmt, rate, nch);
-
- output.format.osx = osx_get_format(fmt);
- output.frequency = rate;
- output.channels = nch;
-
- osx_set_audio_params();
-
- output.bps = osx_calc_bitrate(output.format.osx, output.frequency,output.channels);
-}
-
-
-gint osx_get_written_time(void)
-{
- gint retval;
-
- if (!playing_flag)
- {
- retval = 0;
- }
- else
- {
- retval = (written * sample_size * 1000) / effect.bps;
- retval = (int)((float)retval / user_pitch);
- }
-
- //printf("osx_get_written_time(): written time is %d\n",retval);
-
- return retval;
-}
-
-
-gint osx_get_output_time(void)
-{
- gint retval;
-
- retval = output_time_offset + ((output_total * sample_size * 1000) / output.bps);
- retval = (int)((float)retval / user_pitch);
-
- //printf("osx_get_output_time(): time is %d\n",retval);
-
- return retval;
-}
-
-
-gint osx_playing(void)
-{
- gint retval;
-
- retval = 0;
-
- if (!playing_flag)
- {
- retval = 0;
- }
- else
- {
- if (buffer_index == 0)
- {
- retval = FALSE;
- }
- else
- {
- retval = TRUE;
- }
- }
-
- //printf("osx_playing(): playing is now %d\n",playing_flag);
-
- return retval;
-}
-
-
-gint osx_free(void)
-{
- gint bytes_free;
-
- if (remove_prebuffer && prebuffer)
- {
- prebuffer = FALSE;
- remove_prebuffer = FALSE;
- }
-
- if (prebuffer)
- {
- remove_prebuffer = TRUE;
- }
-
- // get number of free samples
- bytes_free = buffer_size - buffer_index;
-
- // adjust for mono
- if (input.channels == 1)
- {
- bytes_free /= 2;
- }
-
- // adjust by pitch conversion;
- bytes_free = (int)((float)bytes_free * base_pitch * user_pitch);
-
- // convert from number of samples to number of bytes
- bytes_free *= sample_size;
-
- return bytes_free;
-}
-
-
-void osx_write(gpointer ptr, int length)
-{
- int count, offset = 0;
- int error;
- float tempfloat;
- float * dest;
- short * src, * tempbuf;
- int i;
- int num_samples;
-
- //printf("oss_write(): lenght: %d \n",length);
-
- remove_prebuffer = FALSE;
-
- // //printf("written is now %d\n",(gint)written);
-
- // get number of samples
- num_samples = length / sample_size;
-
- // update amount of samples received
- written += num_samples;
-
- if (osx_convert_func != NULL)
- osx_convert_func(&ptr, length);
-
- // step through audio
- while (num_samples > 0)
- {
- // get # of samples to write to the buffer
- count = MIN(num_samples, osx_free()/sample_size);
-
- src = ptr+offset;
-
- if (dbconvert((char*)src,count * sample_size) == -1)
- {
- //printf("dbconvert error %d\n",errno);
- }
- else
- {
- src = output_buf;
- dest = (float*)(buffer + buffer_index);
-
- //printf("output_buf_length is %d\n",output_buf_length);
-
- for (i = 0; i < output_buf_length; i++)
- {
- tempfloat = ((float)*src)/32768.0;
- *dest = tempfloat;
- dest++;
- src++;
- }
-
- buffer_index += output_buf_length;
- }
-
- if (buffer_index > buffer_size)
- {
- //printf("BUFFER_INDEX > BUFFER_SIZE!!!!\n");
- exit(0);
- }
-
- num_samples -= count;
- offset += count;
- }
-
- //printf("buffer_index is now %d\n\n",buffer_index);
-}
-
-
-void osx_close(void)
-{
- //printf("osx_close(): playing_flag is %d\n",playing_flag);
-
- if (!playing_flag)
- {
- return;
- }
-
- playing_flag = 0;
-
- // close audio device
- AudioDeviceStop(device_id, play_callback);
- AudioDeviceRemoveIOProc(device_id, play_callback);
-
- g_free(device_name);
-
- //printf("osx_close(): playing_flag is now %d\n",playing_flag);
-
- /* Free audio buffer */
- g_free(buffer);
-}
-
-void osx_flush(gint time)
-{
- //printf("osx_flush(): %d\n",time);
-
- flush = time;
-
- while (flush != -1)
- {
- g_usleep(10000);
- }
-}
-
-
-void osx_pause(short p)
-{
- if (p == TRUE)
- AudioDeviceStop(device_id, play_callback);
- else
- AudioDeviceStart(device_id, play_callback);
-
- paused = p;
-}
-
-
-void osx_set_audio_params(void)
-{
- int stereo_multiplier, format_multiplier;
- int frag, stereo, ret;
- struct timeval tv;
- fd_set set;
-
- //printf("osx_set_audio_params(): fmt %d, freq %d, nch %d\n",output.format.osx,output.frequency,output.channels);
-
- // set audio format
-
- // set num channels
-
- switch (input.channels)
- {
- case 1: stereo_multiplier = 2; break;
- case 2: stereo_multiplier = 1; break;
- default: stereo_multiplier = 1; break;
- }
-
- switch (input.format.xmms)
- {
- case FMT_U8:
- case FMT_S8:
- format_multiplier = 2;
- sample_size = 1;
- break;
- case FMT_S16_LE:
- case FMT_S16_BE:
- case FMT_S16_NE:
- format_multiplier = 1;
- sample_size = 2;
- break;
- default: format_multiplier = 1; break;
- }
-
- sample_multiplier = stereo_multiplier * format_multiplier;
-
- base_pitch = input.frequency / device_format.mSampleRate;
-
- //printf("sample multiplier is now %d, base pitch %.2f\n",sample_multiplier,base_pitch);
-}
-
-
-gint osx_open(gint fmt, gint rate, gint nch)
-{
- char s[32];
- long m;
- long size;
- char device_name[128];
-
- //printf("\nosx_open(): fmt %d, rate %d, nch %d\n",fmt,rate,nch);
-
- // init conversion variables
- base_pitch = 1.0;
- user_pitch = 1.0;
-
- // open audio device
-
- size = sizeof(device_id);
-
- if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device_id))
- {
- //printf("failed to open default audio device");
- return -1;
- }
-
- //printf("opened audio device\n");
-
- size = 128;
-
- if (AudioDeviceGetProperty(device_id,1,0,kAudioDevicePropertyDeviceName,&size,device_name))
- {
- //printf("could not get device name\n");
- return -1;
- }
-
- //printf("device name is: \"%s\"\n",device_name);
-
- size = sizeof(device_format);
-
- if (AudioDeviceGetProperty(device_id, 0, 0, kAudioDevicePropertyStreamFormat, &size, &device_format))
- {
- //printf("failed to get audio format!\n");
- return -1;
- }
-
- //fprintf(stderr, "got format: sample rate %f, %ld channels and %ld-bit sample\n",
- // device_format.mSampleRate,device_format.mChannelsPerFrame,device_format.mBitsPerChannel);
-
- if (device_format.mFormatID != kAudioFormatLinearPCM)
- {
- //printf("audio format isn't PCM\n");
- return -1;
- }
-
- //printf("format is PCM\n");
-
- if (osx_format_is_neutral(fmt) == FALSE)
- osx_convert_func = osx_get_convert_func(fmt, osx_get_conv_format(fmt));
- else
- osx_convert_func = NULL;
-
- input.format.xmms = fmt;
- input.frequency = rate;
- input.channels = nch;
- input.bps = osx_calc_bitrate(osx_get_format(fmt),rate,nch);
-
- osx_setup_format(osx_get_format(fmt),device_format.mSampleRate,device_format.mChannelsPerFrame);
-
- //set audio buffer size
- {
- device_buffer_size = 4096 * sizeof(float);
- size = sizeof(gint);
-
- if (AudioDeviceSetProperty(device_id,0,0,0,kAudioDevicePropertyBufferSize,size,&device_buffer_size))
- {
- //printf("failed to set device buffer size\n");
- }
-
- //printf("buffer size set to %d\n",device_buffer_size);
- }
-
- buffer_size = 11 * 4096;
- prebuffer_size = 4096;
-
- buffer = (float *) g_malloc0(buffer_size*sizeof(float));
-
- //printf("created buffer of size %d, prebuffer is %d\n",buffer_size,prebuffer_size);
-
- flush = -1;
- prebuffer = TRUE;
-
- buffer_index = output_time_offset = written = output_total = 0;
-
- paused = FALSE;
-
- do_pause = FALSE;
- unpause = FALSE;
- remove_prebuffer = FALSE;
-
- playing_flag = 1;
-
- if (AudioDeviceAddIOProc(device_id, play_callback, NULL))
- {
- //printf("failed to add IO Proc callback\n");
- osx_close();
- return -1;
- }
-
- //printf("added callback\n");
-
- if (AudioDeviceStart(device_id,play_callback))
- {
- osx_close();
- //printf("failed to start audio device.\n");
- exit(0);
- }
-
- //printf("started audio device\n");
-
- return 1;
-}
diff --git a/src/CoreAudio/configure.c b/src/CoreAudio/configure.c
deleted file mode 100644
index 930da0d..0000000
--- a/src/CoreAudio/configure.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2001 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
- * Copyright (C) 1999-2001 Håvard Kvålen
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "coreaudio.h"
-#include <CoreAudio/CoreAudio.h>
-#include <audacious/plugin.h>
-#include <audacious/i18n.h>
-
-static GtkWidget *configure_win = NULL;
-static GtkWidget *mixer_usemaster_check, *buffer_size_spin, *buffer_pre_spin;
-static GtkWidget *adevice_use_alt_check, *audio_alt_device_entry;
-static GtkWidget *mdevice_use_alt_check, *mixer_alt_device_entry;
-static gint audio_device, mixer_device;
-
-static void configure_win_ok_cb(GtkWidget * w, gpointer data)
-{
- mcs_handle_t *cfgfile;
-
- osx_cfg.audio_device = audio_device;
- osx_cfg.mixer_device = mixer_device;
- osx_cfg.buffer_size =
- gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_size_spin));
- osx_cfg.prebuffer =
- gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_pre_spin));
- osx_cfg.use_master =
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mixer_usemaster_check));
- osx_cfg.use_alt_audio_device =
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(adevice_use_alt_check));
- osx_cfg.use_alt_mixer_device =
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mdevice_use_alt_check));
- g_free(osx_cfg.alt_audio_device);
- osx_cfg.alt_audio_device =
- gtk_editable_get_chars(GTK_EDITABLE(audio_alt_device_entry), 0, -1);
- g_strstrip(osx_cfg.alt_audio_device);
- g_free(osx_cfg.alt_mixer_device);
- osx_cfg.alt_mixer_device =
- gtk_editable_get_chars(GTK_EDITABLE(mixer_alt_device_entry), 0, -1);
- g_strstrip(osx_cfg.alt_mixer_device);
-
- if (osx_cfg.use_alt_audio_device)
- /* do a minimum of sanity checking */
- if (osx_cfg.alt_audio_device[0] != '/')
- osx_cfg.use_alt_audio_device = FALSE;
- if (osx_cfg.use_alt_mixer_device)
- if (osx_cfg.alt_mixer_device[0] != '/')
- osx_cfg.use_alt_mixer_device = FALSE;
-
- cfgfile = aud_cfg_db_open();
-
- aud_cfg_db_set_int(cfgfile, "OSX", "audio_device", osx_cfg.audio_device);
- aud_cfg_db_set_int(cfgfile, "OSX", "mixer_device", osx_cfg.mixer_device);
- aud_cfg_db_set_int(cfgfile, "OSX", "buffer_size", osx_cfg.buffer_size);
- aud_cfg_db_set_int(cfgfile, "OSX", "prebuffer", osx_cfg.prebuffer);
- aud_cfg_db_set_bool(cfgfile,"OSX","use_master",osx_cfg.use_master);
- aud_cfg_db_set_bool(cfgfile, "OSX", "use_alt_audio_device", osx_cfg.use_alt_audio_device);
- aud_cfg_db_set_string(cfgfile, "OSX", "alt_audio_device", osx_cfg.alt_audio_device);
- aud_cfg_db_set_bool(cfgfile, "OSX", "use_alt_mixer_device", osx_cfg.use_alt_mixer_device);
- aud_cfg_db_set_string(cfgfile, "OSX", "alt_mixer_device", osx_cfg.alt_mixer_device);
- aud_cfg_db_close(cfgfile);
-
- gtk_widget_destroy(configure_win);
-}
-
-static void configure_win_audio_dev_cb(GtkWidget * widget, gint device)
-{
- audio_device = device;
-}
-
-static void configure_win_mixer_dev_cb(GtkWidget * widget, gint device)
-{
- mixer_device = device;
-}
-
-static void audio_device_toggled(GtkToggleButton * widget, gpointer data)
-{
- gboolean use_alt_audio_device = gtk_toggle_button_get_active(widget);
- gtk_widget_set_sensitive(GTK_WIDGET(data), !use_alt_audio_device);
- gtk_widget_set_sensitive(audio_alt_device_entry, use_alt_audio_device);
-}
-
-static void mixer_device_toggled(GtkToggleButton * widget, gpointer data)
-{
- gboolean use_alt_device = gtk_toggle_button_get_active(widget);
- gtk_widget_set_sensitive(GTK_WIDGET(data), !use_alt_device);
- gtk_widget_set_sensitive(mixer_alt_device_entry, use_alt_device);
-}
-
-static void scan_devices(gchar * type, GtkWidget * option_menu, GtkSignalFunc sigfunc)
-{
- GtkWidget *menu, *item;
- FILE *file;
- UInt32 size,len,i;
- AudioDeviceID * devicelist;
- char device_name[128];
-
- menu = gtk_menu_new();
-
- if (AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices,&size,NULL))
- {
- item = gtk_menu_item_new_with_label("Default");
- gtk_signal_connect(GTK_OBJECT(item), "activate", sigfunc, (gpointer) 0);
- gtk_widget_show(item);
- gtk_menu_append(GTK_MENU(menu), item);
- }
- else
- {
- devicelist = (AudioDeviceID*) malloc(size);
-
- if (AudioHardwareGetProperty(kAudioHardwarePropertyDevices,&size,devicelist))
- return;
-
- for (i = 0; i < size/sizeof(AudioDeviceID); i++)
- {
- len = 128;
- AudioDeviceGetProperty(devicelist[i],1,0,kAudioDevicePropertyDeviceName,&len,device_name);
-
- item = gtk_menu_item_new_with_label(device_name);
- gtk_signal_connect(GTK_OBJECT(item), "activate", sigfunc, (gpointer) 0);
- gtk_widget_show(item);
- gtk_menu_append(GTK_MENU(menu), item);
-
- }
- }
-
- gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu);
-}
-
-void osx_configure(void)
-{
- GtkWidget *vbox, *notebook;
- GtkWidget *dev_vbox, *adevice_frame, *adevice_box, *adevice;
- GtkWidget *mdevice_frame, *mdevice_box, *mdevice;
- GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
- GtkWidget *buffer_size_box, *buffer_size_label;
- GtkObject *buffer_size_adj, *buffer_pre_adj;
- GtkWidget *buffer_pre_box, *buffer_pre_label;
- GtkWidget *audio_alt_box, *mixer_alt_box;
- GtkWidget *bbox, *ok, *cancel;
- GtkWidget *mixer_table, *mixer_frame;
-
- if (configure_win)
- {
- gtk_window_present(GTK_WINDOW(configure_win));
- return;
- }
-
- configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_signal_connect(GTK_OBJECT(configure_win), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &configure_win);
- gtk_window_set_title(GTK_WINDOW(configure_win), "CoreAudio Plugin Configuration");
- gtk_window_set_policy(GTK_WINDOW(configure_win), FALSE, FALSE, FALSE);
- gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_MOUSE);
- gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
-
-
- vbox = gtk_vbox_new(FALSE, 10);
- gtk_container_add(GTK_CONTAINER(configure_win), vbox);
-
- notebook = gtk_notebook_new();
- gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
-
- dev_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(dev_vbox), 5);
-
- adevice_frame = gtk_frame_new("Audio device:");
- gtk_box_pack_start(GTK_BOX(dev_vbox), adevice_frame, FALSE, FALSE, 0);
-
- adevice_box = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(adevice_box), 5);
- gtk_container_add(GTK_CONTAINER(adevice_frame), adevice_box);
-
- adevice = gtk_option_menu_new();
- gtk_box_pack_start(GTK_BOX(adevice_box), adevice, TRUE, TRUE, 0);
-
- scan_devices("Audio devices:", adevice, configure_win_audio_dev_cb);
-
- audio_device = osx_cfg.audio_device;
- gtk_option_menu_set_history(GTK_OPTION_MENU(adevice), osx_cfg.audio_device);
-
- gtk_box_pack_start(GTK_BOX(dev_vbox), mdevice_frame, FALSE, FALSE, 0);
-
- mdevice_box = gtk_vbox_new(FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(mdevice_box), 5);
- gtk_container_add(GTK_CONTAINER(mdevice_frame), mdevice_box);
-
- mdevice = gtk_option_menu_new();
- gtk_box_pack_start(GTK_BOX(mdevice_box), mdevice, TRUE, TRUE, 0);
-
- scan_devices("Mixers:", mdevice, configure_win_mixer_dev_cb);
-
- mixer_device = osx_cfg.mixer_device;
- gtk_option_menu_set_history(GTK_OPTION_MENU(mdevice), osx_cfg.mixer_device);
- mixer_alt_box = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start_defaults(GTK_BOX(mdevice_box), mixer_alt_box);
- mdevice_use_alt_check = gtk_check_button_new_with_label("Use alternate device:");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mdevice_use_alt_check), osx_cfg.use_alt_mixer_device);
- gtk_signal_connect(GTK_OBJECT(mdevice_use_alt_check), "toggled", mixer_device_toggled, mdevice);
- gtk_box_pack_start(GTK_BOX(mixer_alt_box), mdevice_use_alt_check, FALSE, FALSE, 0);
- mixer_alt_device_entry = gtk_entry_new();
-
- if (osx_cfg.alt_mixer_device != NULL)
- gtk_entry_set_text(GTK_ENTRY(mixer_alt_device_entry), osx_cfg.alt_mixer_device);
- else
- gtk_entry_set_text(GTK_ENTRY(mixer_alt_device_entry), "/dev/mixer");
-
- gtk_box_pack_start_defaults(GTK_BOX(mixer_alt_box), mixer_alt_device_entry);
-
- if (osx_cfg.use_alt_mixer_device)
- gtk_widget_set_sensitive(mdevice, FALSE);
- else
- gtk_widget_set_sensitive(mixer_alt_device_entry, FALSE);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dev_vbox, gtk_label_new("Devices"));
-
-
- buffer_frame = gtk_frame_new("Buffering:");
- gtk_container_set_border_width(GTK_CONTAINER(buffer_frame), 5);
-
- buffer_vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(buffer_frame), buffer_vbox);
-
- buffer_table = gtk_table_new(2, 1, TRUE);
- gtk_container_set_border_width(GTK_CONTAINER(buffer_table), 5);
- gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
-
- buffer_size_box = gtk_hbox_new(FALSE, 5);
- gtk_table_attach_defaults(GTK_TABLE(buffer_table), buffer_size_box, 0, 1, 0, 1);
- buffer_size_label = gtk_label_new("Buffer size (ms):");
- gtk_box_pack_start(GTK_BOX(buffer_size_box), buffer_size_label, FALSE, FALSE, 0);
- buffer_size_adj = gtk_adjustment_new(osx_cfg.buffer_size, 200, 10000, 100, 100, 100);
- buffer_size_spin = gtk_spin_button_new(GTK_ADJUSTMENT(buffer_size_adj), 8, 0);
- gtk_widget_set_usize(buffer_size_spin, 60, -1);
- gtk_box_pack_start(GTK_BOX(buffer_size_box), buffer_size_spin, FALSE, FALSE, 0);
-
- buffer_pre_box = gtk_hbox_new(FALSE, 5);
- gtk_table_attach_defaults(GTK_TABLE(buffer_table), buffer_pre_box, 1, 2, 0, 1);
- buffer_pre_label = gtk_label_new("Pre-buffer (percent):");
- gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_label, FALSE, FALSE, 0);
- buffer_pre_adj = gtk_adjustment_new(osx_cfg.prebuffer, 0, 90, 1, 1, 1);
- buffer_pre_spin = gtk_spin_button_new(GTK_ADJUSTMENT(buffer_pre_adj), 1, 0);
- gtk_widget_set_usize(buffer_pre_spin, 60, -1);
- gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_spin, FALSE, FALSE, 0);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame, gtk_label_new("Buffering"));
-
-
- bbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
-
- ok = gtk_button_new_with_label("Ok");
- gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(configure_win_ok_cb), NULL);
- GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
- gtk_widget_grab_default(ok);
-
- cancel = gtk_button_new_with_label("Cancel");
- gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(configure_win));
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
-
- gtk_widget_show_all(configure_win);
-}
diff --git a/src/CoreAudio/convert.c b/src/CoreAudio/convert.c
deleted file mode 100644
index 20abfc0..0000000
--- a/src/CoreAudio/convert.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2001 Haavard Kvaalen
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "coreaudio.h"
-
-void* osx_get_convert_buffer(size_t size)
-{
- static size_t length;
- static void *buffer;
-
- if (size > 0 && size <= length)
- return buffer;
-
- length = size;
- buffer = g_realloc(buffer, size);
- return buffer;
-}
-
-static int convert_swap_endian(void **data, int length)
-{
- guint16 *ptr = *data;
- int i;
- for (i = 0; i < length; i += 2, ptr++)
- *ptr = GUINT16_SWAP_LE_BE(*ptr);
-
- return i;
-}
-
-static int convert_swap_sign_and_endian_to_native(void **data, int length)
-{
- guint16 *ptr = *data;
- int i;
- for (i = 0; i < length; i += 2, ptr++)
- *ptr = GUINT16_SWAP_LE_BE(*ptr) ^ 1 << 15;
-
- return i;
-}
-
-static int convert_swap_sign_and_endian_to_alien(void **data, int length)
-{
- guint16 *ptr = *data;
- int i;
- for (i = 0; i < length; i += 2, ptr++)
- *ptr = GUINT16_SWAP_LE_BE(*ptr ^ 1 << 15);
-
- return i;
-}
-
-static int convert_swap_sign16(void **data, int length)
-{
- gint16 *ptr = *data;
- int i;
- for (i = 0; i < length; i += 2, ptr++)
- *ptr ^= 1 << 15;
-
- return i;
-}
-
-static int convert_swap_sign8(void **data, int length)
-{
- gint8 *ptr = *data;
- int i;
- for (i = 0; i < length; i++)
- *ptr++ ^= 1 << 7;
-
- return i;
-}
-
-static int convert_to_8_native_endian(void **data, int length)
-{
- gint8 *output = *data;
- gint16 *input = *data;
- int i;
- for (i = 0; i < length / 2; i++)
- *output++ = *input++ >> 8;
-
- return i;
-}
-
-static int convert_to_8_native_endian_swap_sign(void **data, int length)
-{
- gint8 *output = *data;
- gint16 *input = *data;
- int i;
- for (i = 0; i < length / 2; i++)
- *output++ = (*input++ >> 8) ^ (1 << 7);
-
- return i;
-}
-
-
-static int convert_to_8_alien_endian(void **data, int length)
-{
- gint8 *output = *data;
- gint16 *input = *data;
- int i;
- for (i = 0; i < length / 2; i++)
- *output++ = *input++ & 0xff;
-
- return i;
-}
-
-static int convert_to_8_alien_endian_swap_sign(void **data, int length)
-{
- gint8 *output = *data;
- gint16 *input = *data;
- int i;
- for (i = 0; i < length / 2; i++)
- *output++ = (*input++ & 0xff) ^ (1 << 7);
-
- return i;
-}
-
-static int convert_to_16_native_endian(void **data, int length)
-{
- guint8 *input = *data;
- guint16 *output;
- int i;
- *data = osx_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = *input++ << 8;
-
- return i * 2;
-}
-
-static int convert_to_16_native_endian_swap_sign(void **data, int length)
-{
- guint8 *input = *data;
- guint16 *output;
- int i;
- *data = osx_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = (*input++ << 8) ^ (1 << 15);
-
- return i * 2;
-}
-
-
-static int convert_to_16_alien_endian(void **data, int length)
-{
- guint8 *input = *data;
- guint16 *output;
- int i;
- *data = osx_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = *input++;
-
- return i * 2;
-}
-
-static int convert_to_16_alien_endian_swap_sign(void **data, int length)
-{
- guint8 *input = *data;
- guint16 *output;
- int i;
- *data = osx_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = *input++ ^ (1 << 7);
-
- return i * 2;
-}
-
-int (*osx_get_convert_func(int output, int input))(void **, int)
-{
- if (output == input)
- return NULL;
-
- if ((output == FMT_U16_BE && input == FMT_U16_LE) ||
- (output == FMT_U16_LE && input == FMT_U16_BE) ||
- (output == FMT_S16_BE && input == FMT_S16_LE) ||
- (output == FMT_S16_LE && input == FMT_S16_BE))
- return convert_swap_endian;
-
- if ((output == FMT_U16_BE && input == FMT_S16_BE) ||
- (output == FMT_U16_LE && input == FMT_S16_LE) ||
- (output == FMT_S16_BE && input == FMT_U16_BE) ||
- (output == FMT_S16_LE && input == FMT_U16_LE))
- return convert_swap_sign16;
-
- if ((IS_BIG_ENDIAN &&
- ((output == FMT_U16_BE && input == FMT_S16_LE) ||
- (output == FMT_S16_BE && input == FMT_U16_LE))) ||
- (!IS_BIG_ENDIAN &&
- ((output == FMT_U16_LE && input == FMT_S16_BE) ||
- (output == FMT_S16_LE && input == FMT_U16_BE))))
- return convert_swap_sign_and_endian_to_native;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == FMT_U16_BE && input == FMT_S16_LE) ||
- (output == FMT_S16_BE && input == FMT_U16_LE))) ||
- (IS_BIG_ENDIAN &&
- ((output == FMT_U16_LE && input == FMT_S16_BE) ||
- (output == FMT_S16_LE && input == FMT_U16_BE))))
- return convert_swap_sign_and_endian_to_alien;
-
- if ((IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_U16_BE) ||
- (output == FMT_S8 && input == FMT_S16_BE))) ||
- (!IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_U16_LE) ||
- (output == FMT_S8 && input == FMT_S16_LE))))
- return convert_to_8_native_endian;
-
- if ((IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_S16_BE) ||
- (output == FMT_S8 && input == FMT_U16_BE))) ||
- (!IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_S16_LE) ||
- (output == FMT_S8 && input == FMT_U16_LE))))
- return convert_to_8_native_endian_swap_sign;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_U16_BE) ||
- (output == FMT_S8 && input == FMT_S16_BE))) ||
- (IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_U16_LE) ||
- (output == FMT_S8 && input == FMT_S16_LE))))
- return convert_to_8_alien_endian;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_S16_BE) ||
- (output == FMT_S8 && input == FMT_U16_BE))) ||
- (IS_BIG_ENDIAN &&
- ((output == FMT_U8 && input == FMT_S16_LE) ||
- (output == FMT_S8 && input == FMT_U16_LE))))
- return convert_to_8_alien_endian_swap_sign;
-
- if ((output == FMT_U8 && input == FMT_S8) ||
- (output == FMT_S8 && input == FMT_U8))
- return convert_swap_sign8;
-
- if ((IS_BIG_ENDIAN &&
- ((output == FMT_U16_BE && input == FMT_U8) ||
- (output == FMT_S16_BE && input == FMT_S8))) ||
- (!IS_BIG_ENDIAN &&
- ((output == FMT_U16_LE && input == FMT_U8) ||
- (output == FMT_S16_LE && input == FMT_S8))))
- return convert_to_16_native_endian;
-
- if ((IS_BIG_ENDIAN &&
- ((output == FMT_U16_BE && input == FMT_S8) ||
- (output == FMT_S16_BE && input == FMT_U8))) ||
- (!IS_BIG_ENDIAN &&
- ((output == FMT_U16_LE && input == FMT_S8) ||
- (output == FMT_S16_LE && input == FMT_U8))))
- return convert_to_16_native_endian_swap_sign;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == FMT_U16_BE && input == FMT_U8) ||
- (output == FMT_S16_BE && input == FMT_S8))) ||
- (IS_BIG_ENDIAN &&
- ((output == FMT_U16_LE && input == FMT_U8) ||
- (output == FMT_S16_LE && input == FMT_S8))))
- return convert_to_16_alien_endian;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == FMT_U16_BE && input == FMT_S8) ||
- (output == FMT_S16_BE && input == FMT_U8))) ||
- (IS_BIG_ENDIAN &&
- ((output == FMT_U16_LE && input == FMT_S8) ||
- (output == FMT_S16_LE && input == FMT_U8))))
- return convert_to_16_alien_endian_swap_sign;
-
- g_warning("Translation needed, but not available.\n"
- "Input: %d; Output %d.", input, output);
- return NULL;
-}
diff --git a/src/CoreAudio/coreaudio.c b/src/CoreAudio/coreaudio.c
deleted file mode 100644
index 942a131..0000000
--- a/src/CoreAudio/coreaudio.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#include <glib.h>
-
-#include "coreaudio.h"
-
-#include <audacious/plugin.h>
-#include <audacious/i18n.h>
-
-OutputPlugin osx_op =
-{
- .description = "CoreAudio Output Plugin", /* Description */
- .init = osx_init,
- .about = osx_about,
- .configure = osx_configure,
- .get_volume = osx_get_volume,
- .set_volume = osx_set_volume,
- .open_audio = osx_open,
- .write_audio = osx_write,
- .close_audio = osx_close,
- .flush = osx_flush,
- .pause = osx_pause,
- .buffer_free = osx_free,
- .buffer_playing = osx_playing,
- .output_time = osx_get_output_time,
- .written_time = osx_get_written_time,
- .probe_priority = 1,
-};
-
-OutputPlugin *coreaudio_oplist[] = { &osx_op, NULL };
-
-DECLARE_PLUGIN(coreaudio, NULL, NULL, NULL, coreaudio_oplist, NULL, NULL, NULL, NULL);
diff --git a/src/CoreAudio/coreaudio.h b/src/CoreAudio/coreaudio.h
deleted file mode 100644
index 222bfb4..0000000
--- a/src/CoreAudio/coreaudio.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#ifndef OSX_H
-#define OSX_H
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#ifdef HAVE_SYS_SOUNDCARD_H
-#include <sys/soundcard.h>
-#elif defined(HAVE_MACHINE_SOUNDCARD_H)
-#include <machine/soundcard.h>
-#endif
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <pthread.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <audacious/plugin.h>
-
-#ifdef WORDS_BIGENDIAN
-# define IS_BIG_ENDIAN TRUE
-#else
-# define IS_BIG_ENDIAN FALSE
-#endif
-
-#define OUTPUT_BUFSIZE (4096 * 8)
-
-extern OutputPlugin op;
-
-
-struct format_info
-{
- union
- {
- gint xmms;
- int osx;
- } format;
-
-
- int frequency;
- int channels;
- int bps;
-};
-
-
-typedef struct
-{
- gint audio_device;
- gint mixer_device;
- gint buffer_size;
- gint prebuffer;
- gboolean use_master;
- gboolean use_alt_audio_device, use_alt_mixer_device;
- gchar *alt_audio_device, *alt_mixer_device;
-}
-OSXConfig;
-
-extern OSXConfig osx_cfg;
-
-OutputPluginInitStatus osx_init(void);
-void osx_about(void);
-void osx_configure(void);
-
-void osx_get_volume(int *l, int *r);
-void osx_set_volume(int l, int r);
-
-int osx_playing(void);
-int osx_free(void);
-void osx_write(void *ptr, int length);
-void osx_close(void);
-void osx_flush(int time);
-void osx_pause(short p);
-int osx_open(gint fmt, int rate, int nch);
-int osx_get_output_time(void);
-int osx_get_written_time(void);
-void osx_set_audio_params(void);
-
-void* osx_get_convert_buffer(size_t size);
-int (*osx_get_convert_func(int output, int input))(void **, int);
-
-#endif
diff --git a/src/CoreAudio/dbaudiolib.h b/src/CoreAudio/dbaudiolib.h
deleted file mode 100644
index fad79f1..0000000
--- a/src/CoreAudio/dbaudiolib.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-
- Definitions for dbaudiolib.c
-
- Author: Bob Dean
- Copyright (c) 1999
-
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public Licensse 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
- */
-
-#ifndef __DB_AUDIOLIB_H_
-#define __DB_AUDIOLIB_H_
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <glib.h>
-/* #include <dbchannel.h> */
-
-#define DBAUDIOLIB_VERSION "0.9.8";
-
-
- /* DBAudioLib Error Codes */
- /* when possible the actual system error code is left in errno, since it
- more specifically describes the error */
-
- enum {
- ERROR_BASE = 50000,
- ERROR_NOT_IMPLEMENTED, /* user tried to access functionality that has not yet been implemented. */
- ERROR_BAD_CHANNEL, /* unknown channel type */
- ERROR_BAD_PARAM, /* function recieved a bad parameter*/
- ERROR_NO_FREE_CHANNELS, /* all channels are in use */
- ERROR_TOO_MUCH_DATA, /* the client gave too muxh data to dbaudiolib, conversion would overrun the internal buffers */
- ERROR_BAD_SAMPLERATE, /* the samplerate provided is not supported */
- ERROR_BAD_CHANNELTYPE, /* the channeltype provided is not supported */
- ERROR_BAD_NUMCH, /* the number of audio channels (stereo or mono) is not supported */
- ERROR_BAD_FORMAT, /* the input audio format is not supported */
- ERROR_CHANNEL_IN_USE, /* the requested channel index passed to DBAudio_Init is already in use */
- ERROR_BAD_CHANNEL_ID, /* the requested channel index passed to DBAudio_Init is out of range */
- ERROR_TOO_LITTLE_DATA, /* the client gave too little data to dbaudiolib - depreciated */
- ERROR_NOT_INITIALIZED, /* attempted to use dbaudiolib without a call to DBAudio_Init first */
- ERROR_INIT_FAILURE /* some part of the init process not related to dbmix failed */
- };
-
-
- /* enumeration of sampler state */
- enum sampler_state_e {SAMPLER_OFF,
- SAMPLER_RECORD,
- SAMPLER_PLAY_SINGLE,
- SAMPLER_PLAY_LOOP,
- SAMPLER_READY};
-
- typedef enum sampler_state_e sampler_state;
-
-#define DBAUDIO_MAX_VOLUME 100
-#define DBAUDIO_INTERNAL_MAX_VOLUME 128
-#define DBAUDIO_MIN_VOLUME 0
-
-#define DBMIX_COPYRIGHT "Copyright (c) 2002 by Robert Michael S Dean"
-#define DBMIX_VERSION "v0.9.8"
-
-#define SUCCESS 0
-#define FAILURE -1
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define MONO 1
-#define STEREO 2
-
-
- /*
- * Message structure used to communicate within dbmix channels
- */
-
-#define DBMSG_NONE 0x00000000
-#define DBMSG_ALL (0xFFFFFFFF & ~DBMSG_SAMPLERLOAD & ~DBMSG_SAMPLERSAVE)
-#define DBMSG_PAUSE 0x00000001
-#define DBMSG_UNPAUSE 0x00000002
-#define DBMSG_PLAY 0x00000004
-#define DBMSG_STOP 0x00000008
-#define DBMSG_EJECT 0x00000010
-#define DBMSG_REWIND 0x00000020
-#define DBMSG_FFORWARD 0x00000040
-#define DBMSG_NEXT 0x00000080
-#define DBMSG_PREV 0x00000100
-#define DBMSG_MUTE 0x00000200
-#define DBMSG_UNMUTE 0x00000400
-#define DBMSG_SAMPLERSIZE 0x00000800
-#define DBMSG_SAMPLERSAVE 0x00001000
-#define DBMSG_SAMPLERLOAD 0x00002000
-#define DBMSG_SAMPLERREC 0x00004000
-#define DBMSG_SAMPLERSTOP 0x00008000
-#define DBMSG_SAMPLERLOOP 0x00010000
-#define DBMSG_SAMPLERONCE 0x00020000
-
- typedef struct dbfsd_msg_s
- {
- long int msg_type;
- float data;
- char * datastr;
- } dbfsd_msg;
-
- /* enumeration of the different channels types */
- enum channel_type_e {PIPE_CHANNEL, SOCKET_CHANNEL};
-
- /* DBAudioLib Prototypes for statically linked libraries */
- int DBAudio_Init(char * name, int fmt, int rte, int numch,
- enum channel_type_e type, int chindex);
- int DBAudio_Ready();
- int DBAudio_Write(char* buf, int len);
- int DBAudio_Read(char * buf, int count);
- int DBAudio_Close();
- int DBAudio_Set_Volume(int left, int right);
- int DBAudio_Get_Volume(int *left, int *right);
- int DBAudio_Pause(int value);
- char * DBAudio_Get_Version();
- char * DBAudio_Get_Channel_Name(char * name);
- int DBAudio_Set_Channel_Name(char * name);
- enum channel_type_e DBAudio_Get_Channel_Type();
- int DBAudio_Set_Channel_Type(enum channel_type_e type);
- int DBAudio_Cue_Enabled();
- int DBAudio_Set_Cue(int flag);
- int DBAudio_Get_Cue();
- int DBAudio_Set_Rate(int rte);
- int DBAudio_Get_Rate();
- int DBAudio_Set_Channels(int numch);
- int DBAudio_Get_Channels();
- int DBAudio_Set_Format(int fmt);
- int DBAudio_Get_Format();
- int DBAudio_Get_Bufsize(int input_bufsize);
- void DBAudio_perror(char *str);
- int DBAudio_Set_Message_Handler(void(*message_handler)(dbfsd_msg msg), int msg_flags);
- int DBAudio_Handle_Message_Queue();
- int DBAudio_Set_Channel_Flag(unsigned int flag);
- int DBAudio_Clear_Channel_Flag(unsigned int flag);
- unsigned int DBAudio_Get_Channel_Flags();
- int DBAudio_Set_Mute(int value);
- int DBAudio_Get_Mute();
- int DBAudio_Sampler_Record();
- int DBAudio_Sampler_Stop();
- int DBAudio_Sampler_Loop();
- int DBAudio_Sampler_Single();
- int DBAudio_Sampler_Get_Offsets(int * start_offset, int * end_offset);
- int DBAudio_Sampler_Set_Offsets(int start_offset, int end_offset);
- int DBAudio_Sampler_Get_Size(int * size);
- int DBAudio_Sampler_Save(char * filename);
- int DBAudio_Sampler_Load(char * filename);
- sampler_state DBAudio_Sampler_Get_State();
-
-/* structure to hold audiolib functions plugin style for dynamically linked
- libraries...
- As functions are added, they are placed at the end of the struct so as
- not to break clients using older versions of the library
-*/
- typedef struct
- {
- int (*DBAudio_Init)(char * name, int fmt, int rte, int numch,
- enum channel_type_e type, int chindex);
- int (*DBAudio_Ready)();
- int (*DBAudio_Write)(char* buf, int len);
- int (*DBAudio_Read)(char * buf, int count);
- int (*DBAudio_Close)();
- int (*DBAudio_Set_Volume)(int left, int right);
- int (*DBAudio_Get_Volume)(int *left, int *right);
- int (*DBAudio_Pause)(int value);
- char * (*DBAudio_Get_Version)();
- char * (*DBAudio_Get_Channel_Name)(char * name);
- int (*DBAudio_Set_Channel_Name)(char * name);
- enum channel_type_e (*DBAudio_Get_Channel_Type)();
- int (*DBAudio_Set_Channel_Type)(enum channel_type_e type);
- int (*DBAudio_Cue_Enabled)();
- int (*DBAudio_Set_Rate)(int rte);
- int (*DBAudio_Get_Rate)();
- int (*DBAudio_Set_Channels)(int numch);
- int (*DBAudio_Get_Channels)();
- int (*DBAudio_Set_Format)(int fmt);
- int (*DBAudio_Get_Format)();
- int (*DBAudio_Set_Cue)(int flag);
- int (*DBAudio_Get_Cue)();
- int (*DBAudio_Get_Bufsize)(int input_bufsize);
- void (*DBAudio_perror)(char *str);
- int (*DBAudio_Set_Message_Handler)(void(*message_handler)(dbfsd_msg msg),int msg_flags);
- int (*DBAudio_Handle_Message_Queue)();
- int (*DBAudio_Set_Channel_Flag)(unsigned int flag);
- int (*DBAudio_Clear_Channel_Flag)(unsigned int flag);
- unsigned int (* DBAudio_Get_Channel_Flags)();
- int (*DBAudio_Set_Mute)(int value);
- int (*DBAudio_Get_Mute)();
- int (*DBAudio_Sampler_Record)();
- int (*DBAudio_Sampler_Stop)();
- int (*DBAudio_Sampler_Loop)();
- int (*DBAudio_Sampler_Single)();
- int (*DBAudio_Sampler_Get_Offsets)(int * start_offset, int * end_offset);
- int (*DBAudio_Sampler_Set_Offsets)(int start_offset, int end_offset);
- int (*DBAudio_Sampler_Get_Size)(int * size);
- int (*DBAudio_Sampler_Save)(char * filename);
- int (*DBAudio_Sampler_Load)(char * filename);
- sampler_state (*DBAudio_Sampler_Get_State)();
- } DBAudioLibFunctions;
-
- DBAudioLibFunctions * DBAudio_Get_Functions();
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DB_AUDIOLIB_H_ */
diff --git a/src/CoreAudio/dbconvert.c b/src/CoreAudio/dbconvert.c
deleted file mode 100644
index f8c19c3..0000000
--- a/src/CoreAudio/dbconvert.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
-
- Author: Bob Dean
- Copyright (c) 1999 - 2004
-
- The functionality in this file is modified from DBAudio_Write.c.
- part of the DBMix project which is also released under the GPL.
- It is used here both as licensed under the GPL and additionally
- by permission of the original author (which is me).
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public Licensse 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
- */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <limits.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <sys/shm.h>
-#include <glib.h>
-#include <math.h>
-#include <string.h>
-
-#include "coreaudio.h"
-#include "dbaudiolib.h"
-
- extern int errno;
-
- extern gboolean paused;
- extern float left_volume, right_volume;
-
- extern float base_pitch;
- extern float user_pitch;
-
-
- float local_pitch;
- float sample1, sample2;
- float float_index;
-
- extern signed short output_buf[]; /* buffer used to hold main output to dbfsd */
- extern signed short cue_buf[]; /* buffer used to hold cue output to dbfsd */
- extern signed short conv_buf[]; /* buffer used to hold format converted input */
- extern int output_buf_length;
-
- int outlen;
- int sampleindex;
- int num_channels;
- int format;
-
-
- extern struct format_info input;
-
-
- /*
- dbconvert - given a buf of length len, write the data to the
- channel associated with this instance.
-
- On success, the number of bytes written is returned. Otherwise
- -1, or FAILURE, is returned, and errno is set accordingly.
-
- Hopefully this function returns values in the same fashion
- as other basic I/O functions such as read() and write()
-
- Variables:
- count is the number of bytes written during a loop iteration
- totalcount is the total number of bytes written
- left_gain and right_gain are percentages used to adjust the
- output signal volume
- tempbuf is a temporary pointer used in the volume operation
- temp_chbuf is a pointer to the buffer to be written to during
- shared memory mode.
- */
-
- int dbconvert(char* buf, int len)
- {
- int left_gain,right_gain;
- int left_cue_gain, right_cue_gain;
- signed short * tempbuf, *tempbuf2, * tempoutbuf;
- char * tempcharbuf;
- int incr_flag, count;
- int intindex;
- float buflen, gain1, gain2;
- int index1,index2, output_sample;
- int i;
- int stereo_multiplier,format_multiplier;
- int tempsize;
- int sampler_flag;
- //enum sampler_state_e local_sampler_state;
-
- /* check parameters */
- if (buf == NULL) {errno = ERROR_BAD_PARAM; return FAILURE;}
- //if (ch == NULL) {errno = ERROR_NOT_INITIALIZED; return FAILURE;}
- if (len < 0) {errno = ERROR_BAD_PARAM; return FAILURE;}
-
- //DBAudio_Handle_Message_Queue();
-
- /* remember sampler state as it may change during
- the course of the function */
-#ifdef COMPILE_SAMPLER
- local_sampler_state = ch->sampler_state;
-#endif
-
- if (paused)
- {
- //printf("convert: pauseed\n");
- return 0;
- }
-
- /* get pitch */
- local_pitch = base_pitch * user_pitch;
-
- //printf("convert: local pitch is %.2f, base %.2f user %.2f\n",local_pitch,base_pitch,user_pitch);
- buflen = len / 2.0;
-
- //printf("convert: buflen %.2f len is %d\n",buflen,len);
-
- /* calculate buffer space needed to convert the data to
- 44.1kHz 16bit stereo*/
- switch (input.channels)
- {
- case 1: stereo_multiplier = 2; break;
- case 2: stereo_multiplier = 1; break;
- default: errno = ERROR_BAD_NUMCH; return FAILURE;
- }
-
- //printf("convert: format %d, %d %d %d %d\n",input.format.xmms,FMT_U8,FMT_S8,FMT_S16_LE,FMT_S16_BE);
-
- switch (input.format.xmms)
- {
- case FMT_U8: format_multiplier = 2; break;
- case FMT_S8: format_multiplier = 2; break;
- case FMT_S16_LE: format_multiplier = 1; break;
- case FMT_S16_BE: format_multiplier = 1; break;
- case FMT_S16_NE: format_multiplier = 1; break;
- default: errno = ERROR_BAD_FORMAT; return FAILURE;
- }
-
- /* return error if the needed output space is greater than the
- output buffer */
- if (ceil((buflen * (float)stereo_multiplier *
- (float)format_multiplier) / local_pitch) > (float)(OUTPUT_BUFSIZE))
- {
- errno = ERROR_TOO_MUCH_DATA;
- return FAILURE;
- }
-
- /* init local variables */
- intindex = 0;
- incr_flag = 0;
- sampleindex = 0;
- gain1 = gain2 = 0.0;
- sample1 = sample2 = 0.0;
- sampler_flag = 0;
-
- left_gain = (int)(128.0 * left_volume);
- right_gain = (int)(128.0 * right_volume);
-
-
-#ifdef COMPILE_CUE
- left_cue_gain = ch->cue_left_gain;
- right_cue_gain = ch->cue_right_gain;
-
- /* calculate gain percentages */
- if (ch->mute == TRUE)
- {
- left_gain = right_gain = 0;
- }
- else
- {
- left_gain = ch->left_gain * sysdata->left_balance;
- right_gain = ch->right_gain * sysdata->right_balance;
-
- /* cut volume if mic is being used */
- if (sysdata->talkover_enabled && !(MIC_ENABLED))
- {
- left_gain = left_gain >> DB_TALKOVER_DIVISOR_POWER;
- right_gain = right_gain >> DB_TALKOVER_DIVISOR_POWER;
- }
- }
-#endif
-
-#ifdef COMPILE_SAMPLER
- switch (local_sampler_state)
- {
- case SAMPLER_PLAY_SINGLE:
- case SAMPLER_PLAY_LOOP:
-
- if (ch->sampler_size == 0)
- {
- ch->sampler_state = SAMPLER_OFF;
- len = 0;
- goto done;
- }
-
- /* tempsize - amount of data available in buffer to read */
- tempsize = (ch->sampler_endoffset - ch->sampler_readoffset);
-
- sampler_flag = 1;
-
- /* if we are in loop mode and loop over end of buffer,
- get data from start of buffer */
- if ((tempsize < len) && (local_sampler_state == SAMPLER_PLAY_LOOP))
- {
- /* copy portion at end of buffer */
- memcpy(conv_buf,(ch->sampler_buf + ch->sampler_readoffset),tempsize);
- /* copy portion at beginning of buffer */
- memcpy(conv_buf+tempsize,ch->sampler_buf+ch->sampler_startoffset,(len - tempsize));
- /* update variables */
- /* read offset is now amount to write, minus the overflow, plus the startoffset */
- ch->sampler_readoffset = len - tempsize + ch->sampler_startoffset;
- tempsize = len;
- }
- else
- {
- /* if we are in simgle play mode and out of data, reset state
- and exit */
- if ((tempsize <= 0) && (local_sampler_state == SAMPLER_PLAY_SINGLE))
- {
- ch->sampler_state = SAMPLER_READY;
- goto done;
- }
-
- /* get full buffers worth of data from somewhere in middle of
- sampler buffer */
- if (tempsize > len) tempsize = len;
-
- memcpy(conv_buf,(ch->sampler_buf + ch->sampler_readoffset),tempsize);
-
- ch->sampler_readoffset += tempsize;
- }
-
-
- /* update function state variables */
- buflen = (tempsize / 2);
- tempbuf = conv_buf;
-
- break;
- default:
-#endif
- {
- /* convert input data into 44.1 KHz 16 bit stereo */
- tempbuf = (signed short *) buf;
-
- /* convert mono input to stereo */
- if (input.channels == 1)
- {
- //printf("convert: data is mono\n");
-
- tempbuf2 = conv_buf;
-
- if ((input.format.xmms == FMT_U8) || (input.format.xmms == FMT_S8))
- {
- tempcharbuf = buf;
-
- for (i = 0; i < buflen*2.0; i++)
- {
- *tempbuf2 = *tempcharbuf; tempbuf2++;
- *tempbuf2 = *tempcharbuf; tempbuf2++; tempcharbuf++;
- }
- }
- else
- {
- for (i = 0; i < buflen; i++)
- {
- *tempbuf2 = *tempbuf; tempbuf2++;
- *tempbuf2 = *tempbuf; tempbuf2++; tempbuf++;
- }
- }
-
- buflen *=2.0;
- tempbuf = conv_buf;
- }
- else
- {
- //printf("convet: data is stereo\n");
- }
-
- //printf("convert: buflen %.2f\n",buflen);
-
-
- /* convert 8 bit input to 16 bit input */
- if ((input.format.xmms != FMT_S16_LE) && (input.format.xmms != FMT_S16_BE)
- && (input.format.xmms != FMT_S16_NE))
- {
- switch (input.format.xmms)
- {
- case FMT_U8:
- {
- //printf("convert: converting unsigned 8 bit\n");
-
- tempbuf2 = conv_buf;
- buflen *= 2.0;
-
- /* if data was mono, then it is already in conv_buf */
- if (input.channels == 1)
- {
- for (i = 0; i < buflen; i++)
- {
- *tempbuf = (*tempbuf2 - 127) << 8;
- tempbuf++; tempbuf2++;
- }
- }
- else
- { /* data is 8 bit stereo, and is in buf not conv_buf*/
- tempcharbuf = buf;
- for (i = 0; i < len; i++)
- {
- *tempbuf = (*tempcharbuf - 127) << 8;
- tempbuf++; tempcharbuf++;
- }
- }
-
- tempbuf = conv_buf;
- break;
- }
- case FMT_S8:
- {
- //printf("convert: converting signed 8 bit\n");
-
- tempbuf2 = conv_buf;
- buflen *= 2.0;
-
- /* if data was mono, then it is already in conv_buf */
- if (input.channels == 1)
- {
- for (i = 0; i < buflen; i++)
- {
- *tempbuf = *tempbuf2 << 8;
- tempbuf++; tempbuf2++;
- }
- }
- else
- { /* data is 8 bit stereo, and is in buf not conv_buf*/
- tempcharbuf = buf;
- for (i = 0; i < len; i++)
- {
- *tempbuf = *tempcharbuf << 8;
- tempbuf++; tempcharbuf++;
- }
- }
-
- tempbuf = conv_buf;
- break;
- }
- default:
- {
- errno = ERROR_BAD_FORMAT;
- //ch->writing = 0;
- return FAILURE;
- }
- }
- }
- } /* end default case*/
-
- //printf("convert: buflen %.2f\n",buflen);
-
-
-
-#ifdef COMPILE_SAMPLER
- } /* end switch sampler_state */
-
- /* copy buffer to sample buffer if sampler state is record */
- if (local_sampler_state == SAMPLER_RECORD)
- {
- tempsize = 0;
-
- /* get amount of data to copy */
- if ((ch->sampler_size + (buflen * 2)) > ch->sampler_bufsize)
- {
- tempsize = ch->sampler_bufsize - ch->sampler_size;
- }
- else
- {
- tempsize = (buflen * 2);
- }
-
- /* change state if buffer is full */
- if (tempsize == 0)
- {
- ch->sampler_state = SAMPLER_READY;
- }
-
- /* copy data */
- memcpy(((ch->sampler_buf) + (ch->sampler_size)),tempbuf,tempsize);
-
- /* update sampler state variables */
- ch->sampler_size += tempsize;
- ch->sampler_endoffset = ch->sampler_size;
- }
-#endif
-
- if (local_pitch == 1.0)
- {
- //printf("convert: pitch optimization buflen %.2f *2 %.2f\n",buflen,buflen*2);
- //printf("tempbuf is 0x%x, output_buf is 0x%x\n",tempbuf,output_buf);
- memcpy(output_buf,tempbuf,buflen*2);
-
- outlen = buflen*2;
- tempbuf = output_buf;
- output_buf_length = buflen;
-
- goto done;
- }
-
- /* calculate pitch shifted signal using basic linear interpolation
- the theory is this:
- you have two known samples, and want to calculate the value of a new sample
- in between them. The new sample will contain a percentage of the first sample
- and a percentage of the second sample. These percentages are porportional
- to the distance between the new sample and each of the knwon samples.
- The "position" of the new sample is determined by the float index */
-
- tempoutbuf = output_buf;
-
- while (intindex < buflen)
- {
- /* calculate sample percentages (amplitude) */
- intindex = floor(float_index);
- gain2 = float_index - intindex;
- gain1 = 1.0 - gain2;
-
- /* get index of first sample pair */
- intindex = intindex << 1;
-
- /* check incr_flag to see if we should be operatiing
- on the left or right channel sample */
- if (incr_flag)
- {
- float_index += local_pitch;
- incr_flag = 0;
- intindex++;
- }
- else
- {
- incr_flag = 1;
- }
-
- index1 = intindex;
-
- /* get the first "known" sample*/
- sample1 = tempbuf[index1];
- index2 = index1 + 2;
-
- /* get the second "known" sample */
- if (index2 < (buflen))
- {
- sample2 = tempbuf[index2];
- }
- else
- /* if index2 is beyond the length of the input buffer,
- then cheat to prevent audio pops/snaps/etc */
- {
- *tempoutbuf = sample1;
- sampleindex++;
- break;
- }
-
- /* create the new sample */
- output_sample = (((float)sample1 * gain1) + ((float)sample2 * gain2));
-
- if (output_sample > 32767) {output_sample = 32767;}
- if (output_sample < -32767) {output_sample = -32767;}
-
- *tempoutbuf = output_sample;
- tempoutbuf++;
-
- sampleindex++;
- }
-
- /* update global variables */
- outlen = (sampleindex-1) << 1;
-
- float_index = float_index - floor(float_index);
-
- tempbuf = output_buf;
-
- output_buf_length = sampleindex - 1;
-
- /* if (outlen < PIPE_BUF)
- {errno = ERROR_TOO_LITTLE_DATA; return FAILURE;} */
-
- apply_gain:
-
-
- done:
-
- //ch->writing = 0;
-
- if (sampler_flag)
- {
- return 0;
- }
- else
- {
- return len;
- }
- }
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/src/CoreAudio/init.c b/src/CoreAudio/init.c
deleted file mode 100644
index 761da8f..0000000
--- a/src/CoreAudio/init.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#include "coreaudio.h"
-#include <audacious/plugin.h>
-
-OSXConfig osx_cfg;
-
-extern float left_volume, right_volume;
-
-OutputPluginInitStatus osx_init(void)
-{
- mcs_handle_t *cfgfile;
-
- left_volume = 1.0;
- right_volume = 1.0;
-
- memset(&osx_cfg, 0, sizeof (OSXConfig));
-
- osx_cfg.audio_device = 0;
- osx_cfg.mixer_device = 0;
- osx_cfg.buffer_size = 3000;
- osx_cfg.prebuffer = 25;
- osx_cfg.use_alt_audio_device = FALSE;
- osx_cfg.alt_audio_device = NULL;
- osx_cfg.use_master=0;
-
- if ((cfgfile = aud_cfg_db_open()))
- {
- aud_cfg_db_get_int(cfgfile, "OSX", "audio_device", &osx_cfg.audio_device);
- aud_cfg_db_get_int(cfgfile, "OSX", "mixer_device", &osx_cfg.mixer_device);
- aud_cfg_db_get_int(cfgfile, "OSX", "buffer_size", &osx_cfg.buffer_size);
- aud_cfg_db_get_int(cfgfile, "OSX", "prebuffer", &osx_cfg.prebuffer);
- aud_cfg_db_get_bool(cfgfile, "OSX", "use_master", &osx_cfg.use_master);
- aud_cfg_db_get_bool(cfgfile, "OSX", "use_alt_audio_device", &osx_cfg.use_alt_audio_device);
- aud_cfg_db_get_string(cfgfile, "OSX", "alt_audio_device", &osx_cfg.alt_audio_device);
- aud_cfg_db_get_bool(cfgfile, "OSX", "use_alt_mixer_device", &osx_cfg.use_alt_mixer_device);
- aud_cfg_db_get_string(cfgfile, "OSX", "alt_mixer_device", &osx_cfg.alt_mixer_device);
- aud_cfg_db_close(cfgfile);
- }
-
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
-}
diff --git a/src/CoreAudio/mixer.c b/src/CoreAudio/mixer.c
deleted file mode 100644
index 9495b2f..0000000
--- a/src/CoreAudio/mixer.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2000 Peter Alm, Mikael Alm, Olle Hallnas, Thomas Nilsson and 4Front Technologies
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#include "coreaudio.h"
-#include <errno.h>
-#include <CoreAudio/CoreAudio.h>
-
-extern AudioDeviceID device_id;
-extern gboolean playing_flag;
-extern float left_volume, right_volume;
-
-void osx_get_volume(int *l, int *r)
-{
- *l = left_volume * 100;
- *r = right_volume * 100;
-
-#if 0
- float volume;
- UInt32 size;
- AudioDeviceID temp_device_id;
-
- size = sizeof(float);
-
- AudioDeviceGetProperty(device_id,1,0,kAudioDevicePropertyVolumeScalar,&size,&volume);
-
- volume = volume * 100;
-
- *r = volume;
- *l = volume;
-#endif
-}
-
-
-void osx_set_volume(int l, int r)
-{
- left_volume = (float)l / 100.0;
- right_volume = (float) r / 100.0;
-
-
-#if 0
- int fd, v, cmd, devs;
- gchar *devname;
-
- Boolean writeable_flag;
-
- if (AudioDeviceGetPropertyInfo(device_id,1,false,kAudioDevicePropertyVolumeScalar,NULL,&writeable_flag))
- {
- printf("could not get property info for volume write\n");
- }
- else
- {
- if (writeable_flag)
- {
- float volume;
-
- volume = l / 100.0;
- AudioDeviceSetProperty(device_id,NULL,1,0,kAudioDevicePropertyVolumeScalar,sizeof(float),&volume);
- }
- else
- {
- printf("volume property is not writeable\n");
- }
- }
-#endif
-}
-
-
diff --git a/src/OSS/Makefile b/src/OSS/Makefile
index 842f4a4..afbaba9 100644
--- a/src/OSS/Makefile
+++ b/src/OSS/Makefile
@@ -11,5 +11,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${OSS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -I.
-LIBS += ${OSS_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${OSS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -I.
+LIBS += ${OSS_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/OSS/OSS.c b/src/OSS/OSS.c
index db88577..3e2d74d 100644
--- a/src/OSS/OSS.c
+++ b/src/OSS/OSS.c
@@ -23,12 +23,13 @@
#include <glib.h>
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
#include <stdlib.h>
+#include <string.h>
OSSConfig oss_cfg;
@@ -38,7 +39,7 @@ static void oss_about (void)
audgui_simple_message (& about_dialog, GTK_MESSAGE_INFO,
_("About OSS Driver"),
- _("Audacious OSS Driver\n\n "
+ "Audacious OSS Driver\n\n "
"This program is free software; you can redistribute it and/or modify\n"
"it under the terms of the GNU General Public License as published by\n"
"the Free Software Foundation; either version 2 of the License, or\n"
@@ -52,39 +53,34 @@ static void oss_about (void)
"You should have received a copy of the GNU General Public License\n"
"along with this program; if not, write to the Free Software\n"
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
- "USA."));
+ "USA.");
}
-static OutputPluginInitStatus oss_init(void)
+static const gchar * const oss_defaults[] = {
+ "audio_device", "0",
+ "mixer_device", "0",
+ "prebuffer", "50",
+ "use_master", "FALSE",
+ "use_alt_audio_device", "FALSE",
+ "use_alt_mixer_device", "FALSE",
+ NULL};
+
+static gboolean oss_init (void)
{
- mcs_handle_t *db;
+ aud_config_set_defaults ("OSS", oss_defaults);
memset(&oss_cfg, 0, sizeof(OSSConfig));
- oss_cfg.audio_device = 0;
- oss_cfg.mixer_device = 0;
- oss_cfg.prebuffer = 50;
- oss_cfg.use_alt_audio_device = FALSE;
- oss_cfg.alt_audio_device = NULL;
- oss_cfg.use_master = 0;
-
- if ((db = aud_cfg_db_open())) {
- aud_cfg_db_get_int(db, "OSS", "audio_device", &oss_cfg.audio_device);
- aud_cfg_db_get_int(db, "OSS", "mixer_device", &oss_cfg.mixer_device);
- aud_cfg_db_get_int(db, "OSS", "prebuffer", &oss_cfg.prebuffer);
- aud_cfg_db_get_bool(db, "OSS", "use_master", &oss_cfg.use_master);
- aud_cfg_db_get_bool(db, "OSS", "use_alt_audio_device",
- &oss_cfg.use_alt_audio_device);
- aud_cfg_db_get_string(db, "OSS", "alt_audio_device",
- &oss_cfg.alt_audio_device);
- aud_cfg_db_get_bool(db, "OSS", "use_alt_mixer_device",
- &oss_cfg.use_alt_mixer_device);
- aud_cfg_db_get_string(db, "OSS", "alt_mixer_device",
- &oss_cfg.alt_mixer_device);
- aud_cfg_db_close(db);
- }
+ oss_cfg.audio_device = aud_get_int ("OSS", "audio_device");
+ oss_cfg.mixer_device = aud_get_int ("OSS", "mixer_device");
+ oss_cfg.prebuffer = aud_get_int ("OSS", "prebuffer");
+ oss_cfg.use_master = aud_get_bool ("OSS", "use_master");
+ oss_cfg.use_alt_audio_device = aud_get_bool ("OSS", "use_alt_audio_device");
+ oss_cfg.alt_audio_device = aud_get_string ("OSS", "alt_audio_device");
+ oss_cfg.use_alt_mixer_device = aud_get_bool ("OSS", "use_alt_mixer_device");
+ oss_cfg.alt_mixer_device = aud_get_string ("OSS", "alt_mixer_device");
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
+ return TRUE;
}
static void oss_cleanup(void)
@@ -100,9 +96,10 @@ static void oss_cleanup(void)
}
}
-static OutputPlugin oss_op = {
- .description = "OSS Output Plugin",
- .probe_priority = 1,
+AUD_OUTPUT_PLUGIN
+(
+ .name = "OSS 3",
+ .probe_priority = 3,
.init = oss_init,
.cleanup = oss_cleanup,
.about = oss_about,
@@ -115,12 +112,6 @@ static OutputPlugin oss_op = {
.flush = oss_flush,
.pause = oss_pause,
.buffer_free = oss_free,
- .buffer_playing = oss_playing,
.output_time = oss_get_output_time,
.written_time = oss_get_written_time,
- .tell_audio = oss_tell
-};
-
-static OutputPlugin *oss_oplist[] = { &oss_op, NULL };
-
-DECLARE_PLUGIN(OSS, NULL, NULL, NULL, oss_oplist, NULL, NULL, NULL, NULL);
+)
diff --git a/src/OSS/OSS.h b/src/OSS/OSS.h
index 04cf688..b10e6fb 100644
--- a/src/OSS/OSS.h
+++ b/src/OSS/OSS.h
@@ -34,6 +34,9 @@
#include <audacious/plugin.h>
+#define DEV_MIXER "/dev/mixer"
+#define DEV_DSP "/dev/dsp"
+
#define IS_BIG_ENDIAN (G_BYTE_ORDER == G_BIG_ENDIAN)
extern OutputPlugin op;
@@ -54,16 +57,14 @@ void oss_configure(void);
void oss_get_volume(int *l, int *r);
void oss_set_volume(int l, int r);
-int oss_playing(void);
int oss_free(void);
void oss_write(void *ptr, int length);
void oss_close(void);
void oss_flush(int time);
-void oss_pause(short p);
+void oss_pause (gboolean p);
int oss_open(gint fmt, int rate, int nch);
int oss_get_output_time(void);
int oss_get_written_time(void);
void oss_set_audio_params(void);
-void oss_tell(gint * fmt, gint * rate, gint * nch);
#endif
diff --git a/src/OSS/audio.c b/src/OSS/audio.c
index 1edf718..ea14a65 100644
--- a/src/OSS/audio.c
+++ b/src/OSS/audio.c
@@ -30,7 +30,7 @@ extern void close_mixer_device();
#include <sys/ioctl.h>
#include <sys/time.h>
-#include <audacious/audconfig.h>
+#include <audacious/misc.h>
#include "OSS.h"
@@ -184,6 +184,7 @@ oss_used(void)
return buffer_size - (rd_index - wr_index);
}
+#if 0
gint
oss_playing(void)
{
@@ -194,6 +195,7 @@ oss_playing(void)
return TRUE;
}
+#endif
gint
oss_free(void)
@@ -271,8 +273,7 @@ oss_flush(gint time)
g_usleep(10000);
}
-void
-oss_pause(short p)
+void oss_pause (gboolean p)
{
if (p == TRUE)
do_pause = TRUE;
@@ -425,7 +426,7 @@ oss_open(gint fmt, gint rate, gint nch)
oss_setup_format(fmt, rate, nch);
- buffer_size = aud_cfg->output_buffer_size * input.bps / 1000;
+ buffer_size = aud_get_int (NULL, "output_buffer_size") * input.bps / 1000;
if (buffer_size < 8192)
buffer_size = 8192;
@@ -451,10 +452,3 @@ oss_open(gint fmt, gint rate, gint nch)
return 1;
}
-
-void oss_tell(gint * fmt, gint * rate, gint * nch)
-{
- (*fmt) = input.format.xmms;
- (*rate) = input.frequency;
- (*nch) = input.channels;
-}
diff --git a/src/OSS/configure.c b/src/OSS/configure.c
index d952a65..cab3fed 100644
--- a/src/OSS/configure.c
+++ b/src/OSS/configure.c
@@ -26,8 +26,9 @@
#include <stdio.h>
#include <string.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
static GtkWidget *configure_win = NULL;
static GtkWidget *mixer_usemaster_check, *buffer_pre_spin;
@@ -38,8 +39,6 @@ static gint audio_device, mixer_device;
static void
configure_win_ok_cb(GtkWidget * w, gpointer data)
{
- mcs_handle_t *db;
-
oss_cfg.audio_device = audio_device;
oss_cfg.mixer_device = mixer_device;
oss_cfg.prebuffer =
@@ -71,33 +70,26 @@ configure_win_ok_cb(GtkWidget * w, gpointer data)
oss_cfg.use_alt_mixer_device = FALSE;
/* Save configuration */
- db = aud_cfg_db_open();
-
- aud_cfg_db_set_int(db, "OSS", "audio_device", oss_cfg.audio_device);
- aud_cfg_db_set_int(db, "OSS", "mixer_device", oss_cfg.mixer_device);
- aud_cfg_db_set_int(db, "OSS", "prebuffer", oss_cfg.prebuffer);
- aud_cfg_db_set_bool(db, "OSS", "use_master", oss_cfg.use_master);
- aud_cfg_db_set_bool(db, "OSS", "use_alt_audio_device",
- oss_cfg.use_alt_audio_device);
- aud_cfg_db_set_string(db, "OSS", "alt_audio_device",
- oss_cfg.alt_audio_device);
- aud_cfg_db_set_bool(db, "OSS", "use_alt_mixer_device",
- oss_cfg.use_alt_mixer_device);
- aud_cfg_db_set_string(db, "OSS", "alt_mixer_device",
- oss_cfg.alt_mixer_device);
- aud_cfg_db_close(db);
+ aud_set_int ("OSS", "audio_device", oss_cfg.audio_device);
+ aud_set_int ("OSS", "mixer_device", oss_cfg.mixer_device);
+ aud_set_int ("OSS", "prebuffer", oss_cfg.prebuffer);
+ aud_set_bool ("OSS", "use_master", oss_cfg.use_master);
+ aud_set_bool ("OSS", "use_alt_audio_device", oss_cfg.use_alt_audio_device);
+ aud_set_string ("OSS", "alt_audio_device", oss_cfg.alt_audio_device);
+ aud_set_bool ("OSS", "use_alt_mixer_device", oss_cfg.use_alt_mixer_device);
+ aud_set_string ("OSS", "alt_mixer_device", oss_cfg.alt_mixer_device);
}
static void
-configure_win_audio_dev_cb(GtkWidget * widget, gint device)
+configure_win_audio_dev_cb(GtkComboBox * widget, gpointer data)
{
- audio_device = device;
+ audio_device = gtk_combo_box_get_active(widget);
}
static void
-configure_win_mixer_dev_cb(GtkWidget * widget, gint device)
+configure_win_mixer_dev_cb(GtkComboBox * widget, gpointer data)
{
- mixer_device = device;
+ mixer_device = gtk_combo_box_get_active(widget);
}
static void
@@ -117,16 +109,13 @@ mixer_device_toggled(GtkToggleButton * widget, gpointer data)
}
static void
-scan_devices(gchar * type, GtkWidget * option_menu, GtkSignalFunc sigfunc)
+scan_devices(gchar * type, GtkWidget * widget)
{
- GtkWidget *menu, *item;
FILE *file;
gchar buffer[256], *temp, *tmp2;
gboolean found = FALSE;
gint index = 0;
- menu = gtk_menu_new();
-
if ((file = fopen("/dev/sndstat", "r")) ||
(file = fopen("/proc/asound/sndstat", "r")) ||
(file = fopen("/proc/asound/oss/sndstat", "r"))) {
@@ -146,15 +135,13 @@ scan_devices(gchar * type, GtkWidget * option_menu, GtkSignalFunc sigfunc)
else
tmp2 = buffer;
temp = g_strdup_printf(_("Default (%s)"), tmp2);
- item = gtk_menu_item_new_with_label(temp);
+ gtk_combo_box_text_append_text((GtkComboBoxText *) widget, temp);
g_free(temp);
}
else
- item = gtk_menu_item_new_with_label(buffer);
- g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(sigfunc), (gpointer)(long)(index++));
- gtk_widget_show(item);
- gtk_menu_append(GTK_MENU(menu), item);
+ gtk_combo_box_text_append_text((GtkComboBoxText *) widget, buffer);
+
+ ++index;
}
if (!strcasecmp(buffer, type))
found = 1;
@@ -162,14 +149,8 @@ scan_devices(gchar * type, GtkWidget * option_menu, GtkSignalFunc sigfunc)
}
fclose(file);
}
- else {
- item = gtk_menu_item_new_with_label(_("Default"));
- g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(sigfunc),
- (gpointer) 0);
- gtk_widget_show(item);
- gtk_menu_append(GTK_MENU(menu), item);
- }
- gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu);
+ else
+ gtk_combo_box_text_append_text((GtkComboBoxText *) widget, _("Default"));
}
void
@@ -179,7 +160,7 @@ oss_configure(void)
GtkWidget *dev_vbox, *adevice_frame, *adevice_box, *adevice;
GtkWidget *mdevice_frame, *mdevice_box, *mdevice;
GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
- GtkObject *buffer_pre_adj;
+ GtkAdjustment *buffer_pre_adj;
GtkWidget *buffer_pre_box, *buffer_pre_label;
GtkWidget *audio_alt_box, *mixer_alt_box;
GtkWidget *bbox, *ok, *cancel;
@@ -199,7 +180,7 @@ oss_configure(void)
GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_window_set_resizable(GTK_WINDOW(configure_win), FALSE);
gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_CENTER);
- gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
+ gtk_container_set_border_width(GTK_CONTAINER(configure_win), 10);
vbox = gtk_vbox_new(FALSE, 10);
gtk_container_add(GTK_CONTAINER(configure_win), vbox);
@@ -217,20 +198,21 @@ oss_configure(void)
gtk_container_set_border_width(GTK_CONTAINER(adevice_box), 5);
gtk_container_add(GTK_CONTAINER(adevice_frame), adevice_box);
- adevice = gtk_option_menu_new();
- gtk_box_pack_start(GTK_BOX(adevice_box), adevice, TRUE, TRUE, 0);
+ adevice = gtk_combo_box_text_new();
#if defined(HAVE_NEWPCM)
- scan_devices("Installed devices:", adevice,
- GTK_SIGNAL_FUNC(configure_win_audio_dev_cb));
+ scan_devices("Installed devices:", adevice);
#else
- scan_devices("Audio devices:", adevice,
- GTK_SIGNAL_FUNC(configure_win_audio_dev_cb));
+ scan_devices("Audio devices:", adevice);
#endif
+ g_signal_connect(G_OBJECT(adevice), "changed",
+ G_CALLBACK(configure_win_audio_dev_cb), NULL);
+
+ gtk_box_pack_start(GTK_BOX(adevice_box), adevice, TRUE, TRUE, 0);
+
audio_device = oss_cfg.audio_device;
- gtk_option_menu_set_history(GTK_OPTION_MENU(adevice),
- oss_cfg.audio_device);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(adevice), oss_cfg.audio_device);
audio_alt_box = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start_defaults(GTK_BOX(adevice_box), audio_alt_box);
+ gtk_box_pack_start(GTK_BOX(adevice_box), audio_alt_box, FALSE, FALSE, 0);
adevice_use_alt_check =
gtk_check_button_new_with_label(_("Use alternate device:"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(adevice_use_alt_check),
@@ -245,8 +227,7 @@ oss_configure(void)
oss_cfg.alt_audio_device);
else
gtk_entry_set_text(GTK_ENTRY(audio_alt_device_entry), DEV_DSP);
- gtk_box_pack_start_defaults(GTK_BOX(audio_alt_box),
- audio_alt_device_entry);
+ gtk_box_pack_start(GTK_BOX(audio_alt_box), audio_alt_device_entry, FALSE, FALSE, 0);
if (oss_cfg.use_alt_audio_device)
gtk_widget_set_sensitive(adevice, FALSE);
@@ -260,18 +241,21 @@ oss_configure(void)
gtk_container_set_border_width(GTK_CONTAINER(mdevice_box), 5);
gtk_container_add(GTK_CONTAINER(mdevice_frame), mdevice_box);
- mdevice = gtk_option_menu_new();
- gtk_box_pack_start(GTK_BOX(mdevice_box), mdevice, TRUE, TRUE, 0);
+ mdevice = gtk_combo_box_text_new();
#if defined(HAVE_NEWPCM)
- scan_devices("Installed devices:", mdevice, configure_win_mixer_dev_cb);
+ scan_devices("Installed devices:", mdevice);
#else
- scan_devices("Mixers:", mdevice, G_CALLBACK(configure_win_mixer_dev_cb));
+ scan_devices("Mixers:", mdevice);
#endif
+ g_signal_connect(G_OBJECT(mdevice), "changed",
+ G_CALLBACK(configure_win_mixer_dev_cb), NULL);
+
+ gtk_box_pack_start(GTK_BOX(mdevice_box), mdevice, TRUE, TRUE, 0);
+
mixer_device = oss_cfg.mixer_device;
- gtk_option_menu_set_history(GTK_OPTION_MENU(mdevice),
- oss_cfg.mixer_device);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(mdevice), oss_cfg.mixer_device);
mixer_alt_box = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start_defaults(GTK_BOX(mdevice_box), mixer_alt_box);
+ gtk_box_pack_start(GTK_BOX(mdevice_box), mixer_alt_box, FALSE, FALSE, 0);
mdevice_use_alt_check =
gtk_check_button_new_with_label(_("Use alternate device:"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mdevice_use_alt_check),
@@ -286,8 +270,7 @@ oss_configure(void)
oss_cfg.alt_mixer_device);
else
gtk_entry_set_text(GTK_ENTRY(mixer_alt_device_entry), DEV_MIXER);
- gtk_box_pack_start_defaults(GTK_BOX(mixer_alt_box),
- mixer_alt_device_entry);
+ gtk_box_pack_start(GTK_BOX(mixer_alt_box), mixer_alt_device_entry, FALSE, FALSE, 0);
if (oss_cfg.use_alt_mixer_device)
gtk_widget_set_sensitive(mdevice, FALSE);
@@ -313,10 +296,10 @@ oss_configure(void)
buffer_pre_label = gtk_label_new(_("Pre-buffer (percent):"));
gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_label, FALSE,
FALSE, 0);
- buffer_pre_adj = gtk_adjustment_new(oss_cfg.prebuffer, 0, 90, 1, 1, 1);
+ buffer_pre_adj = (GtkAdjustment *) gtk_adjustment_new(oss_cfg.prebuffer, 0, 90, 1, 1, 0);
buffer_pre_spin =
gtk_spin_button_new(GTK_ADJUSTMENT(buffer_pre_adj), 1, 0);
- gtk_widget_set_usize(buffer_pre_spin, 60, -1);
+ gtk_widget_set_size_request(buffer_pre_spin, 60, -1);
gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_spin, FALSE,
FALSE, 0);
@@ -338,20 +321,20 @@ oss_configure(void)
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
+ gtk_box_set_spacing(GTK_BOX(bbox), 5);
gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
g_signal_connect_swapped(G_OBJECT(cancel), "clicked",
G_CALLBACK(gtk_widget_destroy),
- GTK_OBJECT(configure_win));
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ configure_win);
+ gtk_widget_set_can_default(cancel, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
ok = gtk_button_new_from_stock(GTK_STOCK_APPLY);
g_signal_connect(G_OBJECT(ok), "clicked",
G_CALLBACK(configure_win_ok_cb), NULL);
- GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default(ok, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
gtk_widget_grab_default(ok);
diff --git a/src/aac/Makefile b/src/aac/Makefile
index ee3696c..3fdbb76 100644
--- a/src/aac/Makefile
+++ b/src/aac/Makefile
@@ -1,6 +1,7 @@
PLUGIN = aac${PLUGIN_SUFFIX}
-SRCS = libmp4.c \
+SRCS = itunes-cover.c \
+ libmp4.c \
mp4_utils.c \
aac_utils.c \
tagging_mp4.c \
@@ -17,5 +18,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${FAAD_CFLAGS} -I../.. -I. -Imp4ff -DUSE_TAGGING=1
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS} ${FAAD_LIBS} -lm
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${FAAD_CFLAGS} -I../.. -I. -Imp4ff -DUSE_TAGGING=1
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${FAAD_LIBS} -lm
diff --git a/src/aac/aac_utils.c b/src/aac/aac_utils.c
index b81b6a4..3703714 100644
--- a/src/aac/aac_utils.c
+++ b/src/aac/aac_utils.c
@@ -15,85 +15,103 @@
// Read ADTS header, the file descriptor must be at
// the begining of the aac frame not at the id3tag
-int getAacInfo(FILE *fd)
+int getAacInfo (FILE * fd)
{
- unsigned char header[ADTS_HEADER_SIZE];
- unsigned int id;
- unsigned long originPosition;
-
- originPosition = ftell(fd);
- if(fread(header, 1, ADTS_HEADER_SIZE, fd) != ADTS_HEADER_SIZE){
- fseek(fd, originPosition, SEEK_SET);
- return(-1);
- }
- if(!((header[0]==0xFF)&&((header[1]& 0xF6)==0xF0))){
- printf("Bad header\n");
- return(-1);
- }
- id = header[1]&0x08;
- if(id==0){//MPEG-4 AAC
- fseek(fd, originPosition, SEEK_SET);
- return(MPEG4_TYPE);
- }else{
- fseek(fd, originPosition, SEEK_SET);
- return(MPEG2_TYPE);
- }
- fseek(fd, originPosition, SEEK_SET);
- return(-1);
+ unsigned char header[ADTS_HEADER_SIZE];
+ unsigned int id;
+ unsigned long originPosition;
+
+ originPosition = ftell (fd);
+ if (fread (header, 1, ADTS_HEADER_SIZE, fd) != ADTS_HEADER_SIZE)
+ {
+ fseek (fd, originPosition, SEEK_SET);
+ return (-1);
+ }
+ if (!((header[0] == 0xFF) && ((header[1] & 0xF6) == 0xF0)))
+ {
+ printf ("Bad header\n");
+ return (-1);
+ }
+ id = header[1] & 0x08;
+ if (id == 0)
+ { //MPEG-4 AAC
+ fseek (fd, originPosition, SEEK_SET);
+ return (MPEG4_TYPE);
+ }
+ else
+ {
+ fseek (fd, originPosition, SEEK_SET);
+ return (MPEG2_TYPE);
+ }
+ fseek (fd, originPosition, SEEK_SET);
+ return (-1);
}
// as AAC is VBR we need to check all ADTS header
// to enable seeking...
// there is no other solution
-void checkADTSForSeeking(FILE *fd,
- unsigned long **seekTable,
- unsigned long *seekTableLength)
+void checkADTSForSeeking (FILE * fd,
+ unsigned long **seekTable, unsigned long *seekTableLength)
{
- unsigned long originPosition;
- unsigned long position;
- unsigned int frameCount, frameLength, frameInsec;
- unsigned int id=0, seconds=0;
- char header[ADTS_HEADER_SIZE];
+ unsigned long originPosition;
+ unsigned long position;
+ unsigned int frameCount, frameLength, frameInsec;
+ unsigned int /* id = 0, */ seconds = 0;
+ char header[ADTS_HEADER_SIZE];
- originPosition = ftell(fd);
+ originPosition = ftell (fd);
- for(frameCount=0,frameInsec=0;; frameCount++,frameInsec++){
- position = ftell(fd);
- if(fread(header, 1, ADTS_HEADER_SIZE, fd)!=ADTS_HEADER_SIZE){
- break;
- }
- if(!g_strncasecmp(header, "ID3", 3)){
- break;
- }
- if(!frameCount){
- id=header[1]&0x08;
- if(((*seekTable) = malloc(SEEK_TABLE_CHUNK * sizeof(unsigned long)))==0){
- printf("malloc error\n");
- return;
- }
- (*seekTableLength) = SEEK_TABLE_CHUNK;
- }
+ for (frameCount = 0, frameInsec = 0;; frameCount++, frameInsec++)
+ {
+ position = ftell (fd);
+ if (fread (header, 1, ADTS_HEADER_SIZE, fd) != ADTS_HEADER_SIZE)
+ {
+ break;
+ }
+ if (!g_strncasecmp (header, "ID3", 3))
+ {
+ break;
+ }
+ if (!frameCount)
+ {
+ /* id = header[1] & 0x08; */
+ if (((*seekTable) =
+ malloc (SEEK_TABLE_CHUNK * sizeof (unsigned long))) == 0)
+ {
+ printf ("malloc error\n");
+ return;
+ }
+ (*seekTableLength) = SEEK_TABLE_CHUNK;
+ }
- //if(id==0){//MPEG-4
- //frameLength = ((unsigned int)header[4]<<5)|((unsigned int)header[5]>>3);
- //}else{//MPEG-2
- frameLength = (((unsigned int)header[3]&0x3)<<11)|((unsigned int)header[4]<<3)|(header[5]>>5);
- //}
- if(frameInsec==43){//???
- frameInsec=0;
- }
- if(frameInsec==0){
- if(seconds == (*seekTableLength)){
- (*seekTable) = realloc((*seekTable), (seconds+SEEK_TABLE_CHUNK)*sizeof(unsigned long));
- (*seekTableLength) = seconds+SEEK_TABLE_CHUNK;
- }
- (*seekTable)[seconds] = position;
- seconds++;
+ //if(id==0){//MPEG-4
+ //frameLength = ((unsigned int)header[4]<<5)|((unsigned int)header[5]>>3);
+ //}else{//MPEG-2
+ frameLength =
+ (((unsigned int) header[3] & 0x3) << 11) | ((unsigned int) header[4] <<
+ 3) | (header[5] >> 5);
+ //}
+ if (frameInsec == 43)
+ { //???
+ frameInsec = 0;
+ }
+ if (frameInsec == 0)
+ {
+ if (seconds == (*seekTableLength))
+ {
+ (*seekTable) =
+ realloc ((*seekTable),
+ (seconds + SEEK_TABLE_CHUNK) * sizeof (unsigned long));
+ (*seekTableLength) = seconds + SEEK_TABLE_CHUNK;
+ }
+ (*seekTable)[seconds] = position;
+ seconds++;
+ }
+ if (fseek (fd, frameLength - ADTS_HEADER_SIZE, SEEK_CUR) == -1)
+ {
+ break;
+ }
}
- if(fseek(fd, frameLength-ADTS_HEADER_SIZE, SEEK_CUR)==-1){
- break;
- }
- }
- (*seekTableLength) = seconds;
- fseek(fd, originPosition, SEEK_SET);
+ (*seekTableLength) = seconds;
+ fseek (fd, originPosition, SEEK_SET);
}
diff --git a/src/aac/itunes-cover.c b/src/aac/itunes-cover.c
new file mode 100644
index 0000000..884247b
--- /dev/null
+++ b/src/aac/itunes-cover.c
@@ -0,0 +1,88 @@
+/*
+ * itunes-cover.c
+ * John Lindgren, 2010
+ *
+ * The author hereby releases this code into the public domain.
+ *
+ * Reference:
+ * http://atomicparsley.sourceforge.net/mpeg-4files.html
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <audacious/debug.h>
+#include <libaudcore/vfs.h>
+
+static const gchar * const hier[] = {"moov", "udta", "meta", "ilst", "covr",
+ "data"};
+static const gint skip[] = {0, 0, 4, 0, 0, 8};
+
+gboolean read_itunes_cover (const gchar * filename, VFSFile * file, void * *
+ data, gint64 * size)
+{
+ guchar b[8];
+ gint bsize;
+
+ /* Check for ftyp frame. */
+
+ if (vfs_fread (b, 1, 8, file) != 8)
+ return FALSE;
+ if ((bsize = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]) < 8)
+ return FALSE;
+ if (strncmp ((gchar *) b + 4, "ftyp", 4))
+ return FALSE;
+ if (vfs_fseek (file, bsize - 8, SEEK_CUR))
+ return FALSE;
+
+ AUDDBG ("Found ftyp frame, size = %d.\n", bsize);
+
+ gint64 stop = G_MAXINT64;
+ gint64 at = bsize;
+
+ /* Descend into frame hierarchy. */
+
+ for (gint h = 0; h < G_N_ELEMENTS (hier); h ++)
+ {
+ while (1)
+ {
+ if (vfs_fread (b, 1, 8, file) != 8)
+ return FALSE;
+ if ((bsize = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]) < 8
+ || at + bsize > stop)
+ return FALSE;
+ if (! strncmp ((gchar *) b + 4, hier[h], 4))
+ break;
+ if (vfs_fseek (file, bsize - 8, SEEK_CUR))
+ return FALSE;
+
+ at += bsize;
+ }
+
+ AUDDBG ("Found %s frame at %d, size = %d.\n", hier[h], (gint) at, bsize);
+
+ stop = at + bsize;
+ at += 8;
+
+ /* Skip leading bytes in some frames. */
+
+ if (skip[h])
+ {
+ if (vfs_fseek (file, skip[h], SEEK_CUR))
+ return FALSE;
+ at += skip[h];
+ }
+ }
+
+ /* We're there. */
+
+ * size = stop - at;
+ * data = g_malloc (stop - at);
+
+ if (vfs_fread (* data, 1, stop - at, file) != stop - at)
+ {
+ g_free (* data);
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/src/aac/libmp4.c b/src/aac/libmp4.c
index 5de8407..6280f53 100644
--- a/src/aac/libmp4.c
+++ b/src/aac/libmp4.c
@@ -24,111 +24,88 @@
*/
#define BUFFER_SIZE (FAAD_MIN_STREAMSIZE * 16)
-static const guchar M4A_MAGIC[11] = {0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79,
- 0x70, 0x4D, 0x34, 0x41};
-
-static void mp4_init(void);
-static void mp4_about(void);
-static gboolean mp4_play(InputPlayback * playback, const gchar * filename,
- VFSFile * file, gint start_time, gint stop_time, gboolean pause);
-static void mp4_cleanup(void);
-static gint mp4_is_our_fd(const char *, VFSFile *);
+static void mp4_about (void);
+static void mp4_cleanup (void);
+static gint mp4_is_our_fd (const char *, VFSFile *);
static const gchar *fmts[] = { "m4a", "mp4", "aac", NULL };
-static void * mp4_decode(void *);
-
-static GMutex * seek_mutex;
-static GCond * seek_cond;
-static gboolean pause_flag;
+static GMutex *seek_mutex;
+static GCond *seek_cond;
static gint seek_value;
+static gboolean stop_flag;
-typedef struct _mp4cfg
+typedef struct _mp4cfg
{
-#define FILE_UNKNOWN 0
+#define FILE_OTHER 0
#define FILE_MP4 1
#define FILE_AAC 2
- gshort file_type;
+ gshort file_type;
} Mp4Config;
static Mp4Config mp4cfg;
-void getMP4info(char*);
-int getAACTrack(mp4ff_t *);
+void getMP4info (char *);
+int getAACTrack (mp4ff_t *);
-static guint32 mp4_read_callback(void *data, void *buffer, guint32 len)
+static guint32 mp4_read_callback (void *data, void *buffer, guint32 len)
{
if (data == NULL || buffer == NULL)
return -1;
- return vfs_fread(buffer, 1, len, (VFSFile *) data);
+ return vfs_fread (buffer, 1, len, (VFSFile *) data);
}
-static guint32 mp4_seek_callback (void * data, guint64 pos)
+static guint32 mp4_seek_callback (void *data, guint64 pos)
{
g_return_val_if_fail (data != NULL, -1);
g_return_val_if_fail (pos <= G_MAXINT64, -1);
- return vfs_fseek((VFSFile *) data, pos, SEEK_SET);
+ return vfs_fseek ((VFSFile *) data, pos, SEEK_SET);
}
-static void mp4_init(void)
+static gboolean mp4_init (void)
{
- mp4cfg.file_type = FILE_UNKNOWN;
+ mp4cfg.file_type = FILE_OTHER;
seek_mutex = g_mutex_new ();
seek_cond = g_cond_new ();
+ return TRUE;
}
-static gboolean mp4_play(InputPlayback * playback, const gchar * filename,
-VFSFile * file, gint start_time, gint stop_time, gboolean pause)
-{
- seek_value = (start_time > 0) ? start_time : -1;
- pause_flag = pause;
- playback->playing = TRUE;
-
- playback->set_pb_ready(playback);
- mp4_decode(playback);
- return ! playback->error;
-}
-
-static void mp4_stop (InputPlayback * playback)
+static void mp4_stop (InputPlayback * p)
{
g_mutex_lock (seek_mutex);
- if (playback->playing)
+ if (! stop_flag)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
+ p->output->abort_write ();
g_cond_signal (seek_cond);
- g_mutex_unlock (seek_mutex);
- g_thread_join (playback->thread);
- playback->thread = NULL;
+ g_cond_wait (seek_cond, seek_mutex);
}
- else
- g_mutex_unlock (seek_mutex);
+
+ g_mutex_unlock (seek_mutex);
}
-static void mp4_pause (InputPlayback * playback, gshort p)
+static void mp4_pause (InputPlayback * p, gboolean pause)
{
g_mutex_lock (seek_mutex);
- if (playback->playing)
- {
- pause_flag = p;
- g_cond_signal (seek_cond);
- g_cond_wait (seek_cond, seek_mutex);
- }
+ if (! stop_flag)
+ p->output->pause (pause);
g_mutex_unlock (seek_mutex);
}
-static void mp4_seek (InputPlayback * playback, gulong time)
+static void mp4_seek (InputPlayback * p, gint time)
{
g_mutex_lock (seek_mutex);
- if (playback->playing)
+ if (! stop_flag)
{
seek_value = time;
+ p->output->abort_write();
g_cond_signal (seek_cond);
g_cond_wait (seek_cond, seek_mutex);
}
@@ -144,26 +121,30 @@ static void mp4_seek (InputPlayback * playback, gulong time)
/// \param num (out) number of audio frames in this ADTS frame
/// \return size of the ADTS frame in bytes
/// aac_parse_frames needs a buffer at least 8 bytes long
-int aac_parse_frame(guchar *buf, int *srate, int *num)
+int aac_parse_frame (guchar * buf, int *srate, int *num)
{
- int i = 0, sr, fl = 0;
- static int srates[] = {96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 0, 0, 0};
+ int i = 0, sr, fl = 0;
+ static int srates[] =
+ { 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000,
+ 11025, 8000, 0, 0, 0 };
- if((buf[i] != 0xFF) || ((buf[i+1] & 0xF6) != 0xF0))
- return 0;
+ if ((buf[i] != 0xFF) || ((buf[i + 1] & 0xF6) != 0xF0))
+ return 0;
/* We currently have no use for the id below.
id = (buf[i+1] >> 3) & 0x01; //id=1 mpeg2, 0: mpeg4
*/
- sr = (buf[i+2] >> 2) & 0x0F;
- if(sr > 11)
- return 0;
- *srate = srates[sr];
+ sr = (buf[i + 2] >> 2) & 0x0F;
+ if (sr > 11)
+ return 0;
+ *srate = srates[sr];
- fl = ((buf[i+3] & 0x03) << 11) | (buf[i+4] << 3) | ((buf[i+5] >> 5) & 0x07);
- *num = (buf[i+6] & 0x02) + 1;
+ fl =
+ ((buf[i + 3] & 0x03) << 11) | (buf[i + 4] << 3) | ((buf[i +
+ 5] >> 5) & 0x07);
+ *num = (buf[i + 6] & 0x02) + 1;
- return fl;
+ return fl;
}
#define PROBE_DEBUG(...)
@@ -175,14 +156,14 @@ static gint find_aac_header (guchar * data, gint length, gint * size)
{
gint offset, a, b;
- for (offset = 0; offset <= length - 8; offset ++)
+ for (offset = 0; offset <= length - 8; offset++)
{
if (data[offset] != 255)
continue;
- * size = aac_parse_frame (data + offset, & a, & b);
+ *size = aac_parse_frame (data + offset, &a, &b);
- if (* size < 8)
+ if (*size < 8)
continue;
return offset;
@@ -196,7 +177,7 @@ static gboolean parse_aac_stream (VFSFile * stream)
guchar data[8192];
gint offset, found, inner, size;
- size = 0; /* avoid bogus uninitialized variable warning */
+ size = 0; /* avoid bogus uninitialized variable warning */
if (vfs_fread (data, 1, sizeof data, stream) != sizeof data)
{
@@ -206,11 +187,11 @@ static gboolean parse_aac_stream (VFSFile * stream)
offset = 0;
- for (found = 0; found < 3; found ++)
+ for (found = 0; found < 3; found++)
{
- inner = find_aac_header (data + offset, sizeof data - offset, & size);
+ inner = find_aac_header (data + offset, sizeof data - offset, &size);
- if (! (inner == 0 || (found == 0 && inner > 0)))
+ if (!(inner == 0 || (found == 0 && inner > 0)))
{
PROBE_DEBUG ("Only %d ADTS headers.\n", found);
return FALSE;
@@ -223,37 +204,27 @@ static gboolean parse_aac_stream (VFSFile * stream)
return TRUE;
}
-static int aac_probe(unsigned char *buffer, int len)
+/* Quick search for an ADTS or ADIF header in the first <len> bytes of <buf>.
+ * Returns the byte offset of the header or <len> if none is found. */
+
+static gint aac_probe (guchar * buf, gint len)
{
- int i = 0, pos = 0;
-#ifdef DEBUG
- g_print("\nAAC_PROBE: %d bytes\n", len);
-#endif
- while(i <= len-4) {
- if(
- ((buffer[i] == 0xff) && ((buffer[i+1] & 0xf6) == 0xf0)) ||
- (buffer[i] == 'A' && buffer[i+1] == 'D' && buffer[i+2] == 'I' && buffer[i+3] == 'F')
- ) {
- pos = i;
- break;
- }
-#ifdef DEBUG
- g_print("AUDIO PAYLOAD: %x %x %x %x\n",
- buffer[i], buffer[i+1], buffer[i+2], buffer[i+3]);
-#endif
- i++;
- }
-#ifdef DEBUG
- g_print("\nAAC_PROBE: ret %d\n", pos);
-#endif
- return pos;
+ for (gint i = 0; i <= len - 4; i ++)
+ {
+ if ((buf[i] == 0xff && (buf[i + 1] & 0xf6) == 0xf0) || ! strncmp
+ ((gchar *) buf + i, "ADIF", 4))
+ return i;
+ }
+
+ return len;
}
static gboolean is_mp4_aac_file (VFSFile * handle)
{
- mp4ff_callback_t mp4_data = {.read = mp4_read_callback, .seek =
- mp4_seek_callback, .user_data = handle};
- mp4ff_t * mp4_handle = mp4ff_open_read (& mp4_data);
+ mp4ff_callback_t mp4_data = {.read = mp4_read_callback,.seek =
+ mp4_seek_callback,.user_data = handle
+ };
+ mp4ff_t *mp4_handle = mp4ff_open_read (&mp4_data);
gboolean success;
if (mp4_handle == NULL)
@@ -267,42 +238,33 @@ static gboolean is_mp4_aac_file (VFSFile * handle)
static gboolean mp4_is_our_fd (const gchar * filename, VFSFile * file)
{
- gchar magic[sizeof M4A_MAGIC];
-
- if (vfs_fread (magic, 1, sizeof magic, file) != sizeof magic)
- return FALSE;
- if (! memcmp (magic, M4A_MAGIC, sizeof magic))
- return TRUE;
-
- if (vfs_fseek (file, 0, SEEK_SET))
- return FALSE;
- if (parse_aac_stream (file))
+ if (is_mp4_aac_file (file))
return TRUE;
if (vfs_fseek (file, 0, SEEK_SET))
return FALSE;
- return is_mp4_aac_file (file);
+ return parse_aac_stream (file);
}
-static void mp4_about(void)
+static void mp4_about (void)
{
static GtkWidget *aboutbox = NULL;
if (aboutbox == NULL)
{
- gchar *about_text = g_strdup_printf(
- _("Using libfaad2-%s for decoding.\n"
- "FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
- "Copyright (c) 2005-2006 Audacious team"), FAAD2_VERSION);
+ gchar *about_text =
+ g_strdup_printf (_("Using libfaad2-%s for decoding.\n"
+ "FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com\n"
+ "Copyright (c) 2005-2006 Audacious team"), FAAD2_VERSION);
- audgui_simple_message (& aboutbox, GTK_MESSAGE_INFO,
+ audgui_simple_message (&aboutbox, GTK_MESSAGE_INFO,
_("About MP4 AAC decoder plugin"), about_text);
- g_free(about_text);
+ g_free (about_text);
}
}
-static void mp4_cleanup(void)
+static void mp4_cleanup (void)
{
g_mutex_free (seek_mutex);
g_cond_free (seek_cond);
@@ -322,18 +284,18 @@ static void calc_aac_info (VFSFile * handle, gint * length, gint * bitrate,
gint offset = 0, filled = 0;
gint found, bytes_used = 0, time_used = 0;
- decoder = NULL; /* avoid bogus uninitialized variable warning */
+ decoder = NULL; /* avoid bogus uninitialized variable warning */
- * length = -1;
- * bitrate = -1;
- * samplerate = -1;
- * channels = -1;
+ *length = -1;
+ *bitrate = -1;
+ *samplerate = -1;
+ *channels = -1;
/* look for a representative bitrate in the middle of the file */
if (size > 0 && vfs_fseek (handle, size / 2, SEEK_SET))
goto DONE;
- for (found = 0; found < 32; found ++)
+ for (found = 0; found < 32; found++)
{
if (filled < BUFFER_SIZE / 2)
{
@@ -350,13 +312,13 @@ static void calc_aac_info (VFSFile * handle, gint * length, gint * bitrate,
filled = BUFFER_SIZE;
}
- if (! initted)
+ if (!initted)
{
gint inner, a;
gulong r;
guchar ch;
- inner = find_aac_header (buffer + offset, filled, & a);
+ inner = find_aac_header (buffer + offset, filled, &a);
if (inner < 0)
{
@@ -368,7 +330,7 @@ static void calc_aac_info (VFSFile * handle, gint * length, gint * bitrate,
filled -= inner;
decoder = NeAACDecOpen ();
- inner = NeAACDecInit (decoder, buffer + offset, filled, & r, & ch);
+ inner = NeAACDecInit (decoder, buffer + offset, filled, &r, &ch);
if (inner < 0)
{
@@ -381,18 +343,18 @@ static void calc_aac_info (VFSFile * handle, gint * length, gint * bitrate,
filled -= inner;
bytes_used += inner;
- * samplerate = r;
- * channels = ch;
+ *samplerate = r;
+ *channels = ch;
initted = TRUE;
}
- if (NeAACDecDecode (decoder, & frame, buffer + offset, filled) == NULL)
+ if (NeAACDecDecode (decoder, &frame, buffer + offset, filled) == NULL)
{
PROBE_DEBUG ("Decode failed.\n");
goto DONE;
}
- if (frame.samplerate != * samplerate || frame.channels != * channels)
+ if (frame.samplerate != *samplerate || frame.channels != *channels)
{
PROBE_DEBUG ("Parameter mismatch.\n");
goto DONE;
@@ -406,53 +368,53 @@ static void calc_aac_info (VFSFile * handle, gint * length, gint * bitrate,
}
/* bits per millisecond = kilobits per second */
- * bitrate = bytes_used * 8 / time_used;
+ *bitrate = bytes_used * 8 / time_used;
if (size > 0)
- * length = size * (gint64) time_used / bytes_used;
+ *length = size * (gint64) time_used / bytes_used;
-DONE:
+ DONE:
if (initted)
NeAACDecClose (decoder);
}
-static Tuple * aac_get_tuple (const gchar * filename, VFSFile * handle)
+static Tuple *aac_get_tuple (const gchar * filename, VFSFile * handle)
{
- Tuple * tuple = tuple_new_from_filename (filename);
- gchar * temp;
+ Tuple *tuple = tuple_new_from_filename (filename);
+ gchar *temp;
gint length, bitrate, samplerate, channels;
- tuple_associate_string (tuple, FIELD_CODEC, NULL, "MPEG-2/4 AAC");
+ tuple_set_str (tuple, FIELD_CODEC, NULL, "MPEG-2/4 AAC");
- if (! vfs_is_remote (filename))
+ if (!vfs_is_remote (filename))
{
- calc_aac_info (handle, & length, & bitrate, & samplerate, & channels);
+ calc_aac_info (handle, &length, &bitrate, &samplerate, &channels);
if (length > 0)
- tuple_associate_int (tuple, FIELD_LENGTH, NULL, length);
+ tuple_set_int (tuple, FIELD_LENGTH, NULL, length);
if (bitrate > 0)
- tuple_associate_int (tuple, FIELD_BITRATE, NULL, bitrate);
+ tuple_set_int (tuple, FIELD_BITRATE, NULL, bitrate);
}
temp = vfs_get_metadata (handle, "track-name");
if (temp != NULL)
{
- tuple_associate_string (tuple, FIELD_TITLE, NULL, temp);
+ tuple_set_str (tuple, FIELD_TITLE, NULL, temp);
g_free (temp);
}
temp = vfs_get_metadata (handle, "stream-name");
if (temp != NULL)
{
- tuple_associate_string (tuple, FIELD_ALBUM, NULL, temp);
+ tuple_set_str (tuple, FIELD_ALBUM, NULL, temp);
g_free (temp);
}
temp = vfs_get_metadata (handle, "content-bitrate");
if (temp != NULL)
{
- tuple_associate_int (tuple, FIELD_BITRATE, NULL, atoi (temp) / 1000);
+ tuple_set_int (tuple, FIELD_BITRATE, NULL, atoi (temp) / 1000);
g_free (temp);
}
@@ -462,46 +424,47 @@ static Tuple * aac_get_tuple (const gchar * filename, VFSFile * handle)
static gboolean aac_title_changed (const gchar * filename, VFSFile * handle,
Tuple * tuple)
{
- const gchar * old = tuple_get_string (tuple, FIELD_TITLE, NULL);
- gchar * new = vfs_get_metadata (handle, "track-name");
+ gchar *old = tuple_get_str (tuple, FIELD_TITLE, NULL);
+ gchar *new = vfs_get_metadata (handle, "track-name");
gboolean changed = FALSE;
changed = (new != NULL && (old == NULL || strcmp (old, new)));
if (changed)
- tuple_associate_string (tuple, FIELD_TITLE, NULL, new);
+ tuple_set_str (tuple, FIELD_TITLE, NULL, new);
g_free (new);
+ str_unref(old);
return changed;
}
-static void read_and_set_string (mp4ff_t * mp4, gint (* func) (const mp4ff_t *
- mp4, gchar * * string), Tuple * tuple, gint field)
+static void read_and_set_string (mp4ff_t * mp4, gint (*func) (const mp4ff_t *
+ mp4, gchar * *string), Tuple * tuple, gint field)
{
- gchar * string = NULL;
+ gchar *string = NULL;
- func (mp4, & string);
+ func (mp4, &string);
if (string != NULL)
- tuple_associate_string (tuple, field, NULL, string);
+ tuple_set_str (tuple, field, NULL, string);
free (string);
}
-static Tuple * generate_tuple (const gchar * filename, mp4ff_t * mp4, gint track)
+static Tuple *generate_tuple (const gchar * filename, mp4ff_t * mp4, gint track)
{
- Tuple * tuple = tuple_new_from_filename (filename);
+ Tuple *tuple = tuple_new_from_filename (filename);
gint64 length;
gint scale, rate, channels, bitrate;
- gchar * year = NULL, * cd_track = NULL;
- gchar scratch [32];
+ gchar *year = NULL, *cd_track = NULL;
+ gchar scratch[32];
- tuple_associate_string (tuple, FIELD_CODEC, NULL, "MPEG-2/4 AAC");
+ tuple_set_str (tuple, FIELD_CODEC, NULL, "MPEG-2/4 AAC");
length = mp4ff_get_track_duration (mp4, track);
scale = mp4ff_time_scale (mp4, track);
if (length > 0 && scale > 0)
- tuple_associate_int (tuple, FIELD_LENGTH, NULL, length * 1000 / scale);
+ tuple_set_int (tuple, FIELD_LENGTH, NULL, length * 1000 / scale);
rate = mp4ff_get_sample_rate (mp4, track);
channels = mp4ff_get_channel_count (mp4, track);
@@ -510,13 +473,13 @@ static Tuple * generate_tuple (const gchar * filename, mp4ff_t * mp4, gint track
{
snprintf (scratch, sizeof scratch, "%d kHz, %s", rate / 1000, channels
== 1 ? "mono" : channels == 2 ? "stereo" : "surround");
- tuple_associate_string (tuple, FIELD_QUALITY, NULL, scratch);
+ tuple_set_str (tuple, FIELD_QUALITY, NULL, scratch);
}
bitrate = mp4ff_get_avg_bitrate (mp4, track);
if (bitrate > 0)
- tuple_associate_int (tuple, FIELD_BITRATE, NULL, bitrate / 1000);
+ tuple_set_int (tuple, FIELD_BITRATE, NULL, bitrate / 1000);
read_and_set_string (mp4, mp4ff_meta_get_title, tuple, FIELD_TITLE);
read_and_set_string (mp4, mp4ff_meta_get_album, tuple, FIELD_ALBUM);
@@ -524,41 +487,40 @@ static Tuple * generate_tuple (const gchar * filename, mp4ff_t * mp4, gint track
read_and_set_string (mp4, mp4ff_meta_get_comment, tuple, FIELD_COMMENT);
read_and_set_string (mp4, mp4ff_meta_get_genre, tuple, FIELD_GENRE);
- mp4ff_meta_get_date (mp4, & year);
+ mp4ff_meta_get_date (mp4, &year);
if (year != NULL)
- tuple_associate_int (tuple, FIELD_YEAR, NULL, atoi (year));
+ tuple_set_int (tuple, FIELD_YEAR, NULL, atoi (year));
free (year);
- mp4ff_meta_get_track (mp4, & cd_track);
+ mp4ff_meta_get_track (mp4, &cd_track);
if (cd_track != NULL)
- tuple_associate_int (tuple, FIELD_TRACK_NUMBER, NULL, atoi (cd_track));
+ tuple_set_int (tuple, FIELD_TRACK_NUMBER, NULL, atoi (cd_track));
free (cd_track);
return tuple;
}
-static Tuple * mp4_get_tuple (const gchar * filename, VFSFile * handle)
+static Tuple *mp4_get_tuple (const gchar * filename, VFSFile * handle)
{
mp4ff_callback_t mp4cb;
- mp4ff_t * mp4;
+ mp4ff_t *mp4;
gint track;
- Tuple * tuple;
+ Tuple *tuple;
if (parse_aac_stream (handle))
return aac_get_tuple (filename, handle);
- if (vfs_fseek (handle, 0, SEEK_SET))
- return NULL;
+ vfs_rewind (handle);
mp4cb.read = mp4_read_callback;
mp4cb.seek = mp4_seek_callback;
mp4cb.user_data = handle;
- mp4 = mp4ff_open_read (& mp4cb);
+ mp4 = mp4ff_open_read (&mp4cb);
if (mp4 == NULL)
return NULL;
@@ -576,295 +538,337 @@ static Tuple * mp4_get_tuple (const gchar * filename, VFSFile * handle)
return tuple;
}
-static int my_decode_mp4( InputPlayback *playback, char *filename, mp4ff_t *mp4file )
+static gboolean my_decode_mp4 (InputPlayback * playback, const char * filename,
+ mp4ff_t * mp4file)
{
// We are reading an MP4 file
- gint mp4track= getAACTrack(mp4file);
- NeAACDecHandle decoder;
- guchar *buffer = NULL;
- guint bufferSize = 0;
- gulong samplerate = 0;
- guchar channels = 0;
- guint numSamples;
- gulong sampleID = 1;
- guint framesize = 0;
- gboolean paused = FALSE;
+ gint mp4track = getAACTrack (mp4file);
+ NeAACDecHandle decoder;
+ NeAACDecConfigurationPtr decoder_config;
+ guchar *buffer = NULL;
+ guint bufferSize = 0;
+ gulong samplerate = 0;
+ guchar channels = 0;
+ guint numSamples;
+ gulong sampleID = 1;
+ guint framesize = 0;
if (mp4track < 0)
{
- g_print("Unsupported Audio track type\n");
+ g_print ("Unsupported Audio track type\n");
return TRUE;
}
- decoder = NeAACDecOpen();
- mp4ff_get_decoder_config(mp4file, mp4track, &buffer, &bufferSize);
- if ( !buffer ) {
- NeAACDecClose(decoder);
+ // Open decoder
+ decoder = NeAACDecOpen ();
+
+ // Configure for floating point output
+ decoder_config = NeAACDecGetCurrentConfiguration (decoder);
+ decoder_config->outputFormat = FAAD_FMT_FLOAT;
+ NeAACDecSetConfiguration (decoder, decoder_config);
+
+ mp4ff_get_decoder_config (mp4file, mp4track, &buffer, &bufferSize);
+ if (!buffer)
+ {
+ NeAACDecClose (decoder);
return FALSE;
}
- if ( NeAACDecInit2(decoder, buffer, bufferSize,
- &samplerate, &channels) < 0 ) {
- NeAACDecClose(decoder);
+ if (NeAACDecInit2 (decoder, buffer, bufferSize, &samplerate, &channels) < 0)
+ {
+ NeAACDecClose (decoder);
return FALSE;
}
- g_free(buffer);
- if( !channels ) {
- NeAACDecClose(decoder);
+ g_free (buffer);
+ if (!channels)
+ {
+ NeAACDecClose (decoder);
return FALSE;
}
- numSamples = mp4ff_num_samples(mp4file, mp4track);
+ numSamples = mp4ff_num_samples (mp4file, mp4track);
- if (! playback->output->open_audio (FMT_S16_NE, samplerate, channels))
+ if (!playback->output->open_audio (FMT_FLOAT, samplerate, channels))
{
NeAACDecClose (decoder);
- playback->playing = FALSE;
- playback->error = TRUE;
return FALSE;
}
- playback->set_tuple (playback, generate_tuple (filename, mp4file, mp4track));
- playback->set_params(playback, NULL, 0,
- mp4ff_get_avg_bitrate( mp4file, mp4track ),
- samplerate,channels);
+ playback->set_tuple (playback, generate_tuple (filename, mp4file,
+ mp4track));
+ playback->set_params (playback, mp4ff_get_avg_bitrate (mp4file, mp4track),
+ samplerate, channels);
+ playback->set_pb_ready (playback);
- while (playback->playing)
+ while (1)
{
- void* sampleBuffer;
- NeAACDecFrameInfo frameInfo;
- gint rc;
+ void *sampleBuffer;
+ NeAACDecFrameInfo frameInfo;
+ gint rc;
- buffer=NULL;
- bufferSize=0;
+ buffer = NULL;
+ bufferSize = 0;
/* If we've run to the end of the file, we're done. */
- if(sampleID >= numSamples){
+ if (sampleID >= numSamples)
+ {
/* Finish playing before we close the
output. */
- while ( playback->output->buffer_playing() ) {
- g_usleep(10000);
+ while (playback->output->buffer_playing ())
+ {
+ g_usleep (10000);
}
- playback->output->close_audio();
- NeAACDecClose(decoder);
-
- playback->playing = FALSE;
- return FALSE;
+ break;
}
- rc= mp4ff_read_sample(mp4file, mp4track,
- sampleID++, &buffer, &bufferSize);
- /*g_print(":: %d/%d\n", sampleID-1, numSamples);*/
+ rc = mp4ff_read_sample (mp4file, mp4track,
+ sampleID++, &buffer, &bufferSize);
+
+ /*g_print(":: %d/%d\n", sampleID-1, numSamples); */
/* If we can't read the file, we're done. */
- if((rc == 0) || (buffer== NULL) || (bufferSize == 0) || (bufferSize > BUFFER_SIZE)){
- g_print("MP4: read error\n");
+ if ((rc == 0) || (buffer == NULL) || (bufferSize == 0)
+ || (bufferSize > BUFFER_SIZE))
+ {
+ g_print ("MP4: read error\n");
sampleBuffer = NULL;
- playback->output->close_audio();
+ playback->output->close_audio ();
- NeAACDecClose(decoder);
+ NeAACDecClose (decoder);
return FALSE;
}
/* g_print(" :: %d/%d\n", bufferSize, BUFFER_SIZE); */
- sampleBuffer= NeAACDecDecode(decoder,
- &frameInfo,
- buffer,
- bufferSize);
+ sampleBuffer = NeAACDecDecode (decoder, &frameInfo, buffer, bufferSize);
/* If there was an error decoding, we're done. */
- if(frameInfo.error > 0){
- g_print("MP4: %s\n",
- NeAACDecGetErrorMessage(frameInfo.error));
- playback->output->close_audio();
- NeAACDecClose(decoder);
+ if (frameInfo.error > 0)
+ {
+ g_print ("MP4: %s\n", NeAACDecGetErrorMessage (frameInfo.error));
+ playback->output->close_audio ();
+ NeAACDecClose (decoder);
return FALSE;
}
- if(buffer){
- g_free(buffer);
- buffer=NULL;
- bufferSize=0;
+ if (buffer)
+ {
+ g_free (buffer);
+ buffer = NULL;
+ bufferSize = 0;
}
/* Calculate frame size from the first (non-blank) frame. This needs to
* be done before we try to seek. */
- if (! framesize)
+ if (!framesize)
{
framesize = frameInfo.samples / frameInfo.channels;
- if (! framesize)
+ if (!framesize)
continue;
}
- /* Respond to seek/pause requests. This needs to be done after we
+ /* Respond to seek/stop requests. This needs to be done after we
* calculate frame size but of course before we write any audio. */
g_mutex_lock (seek_mutex);
- if (seek_value >= 0)
+ if (stop_flag)
{
- sampleID = (gint64) seek_value * samplerate / 1000 / framesize;
- playback->output->flush (seek_value);
- seek_value = -1;
- g_cond_signal (seek_cond);
+ g_mutex_unlock (seek_mutex);
+ break;
}
- if (pause_flag != paused)
+ if (seek_value >= 0)
{
- playback->output->pause (pause_flag);
- paused = pause_flag;
+ sampleID = (gint64) seek_value *samplerate / 1000 / framesize;
+ playback->output->flush (seek_value);
+ seek_value = -1;
g_cond_signal (seek_cond);
}
- if (paused)
- {
- g_cond_wait (seek_cond, seek_mutex);
- g_mutex_unlock (seek_mutex);
- continue;
- }
-
g_mutex_unlock (seek_mutex);
- playback->output->write_audio (sampleBuffer, 2 * frameInfo.samples);
+ playback->output->write_audio (sampleBuffer,
+ sizeof (gfloat) * frameInfo.samples);
}
- playback->output->close_audio();
- NeAACDecClose(decoder);
+ g_mutex_lock (seek_mutex);
+ stop_flag = TRUE;
+ g_cond_signal (seek_cond);
+ g_mutex_unlock (seek_mutex);
+
+ playback->output->close_audio ();
+ NeAACDecClose (decoder);
return TRUE;
}
static void aac_seek (VFSFile * file, NeAACDecHandle dec, gint time, gint len,
- void * buf, gint size, gint * fill, gint * used)
+ void * buf, gint size, gint * buflen)
{
AUDDBG ("Seeking to millisecond %d of %d.\n", time, len);
+ /* == ESTIMATE BYTE OFFSET == */
+
gint64 total = vfs_fsize (file);
if (total < 0)
{
- fprintf (stderr, "aac: File size unknown; cannot seek.\n");
+ fprintf (stderr, "aac: File is not seekable.\n");
return;
}
AUDDBG ("That means byte %d of %d.\n", (gint) (total * time / len), (gint)
total);
- if (vfs_fseek (file, total * time / len, SEEK_SET) < 0)
- {
- fprintf (stderr, "aac: Error seeking in file.\n");
+ /* == SEEK == */
+
+ if (vfs_fseek (file, total * time / len, SEEK_SET))
return;
- }
- * fill = vfs_fread (buf, 1, size, file);
- * used = aac_probe (buf, * fill);
+ * buflen = vfs_fread (buf, 1, size, file);
- AUDDBG ("Used %d of %d bytes probing.\n", * used, * fill);
+ /* == FIND FRAME HEADER == */
- if (* used == * fill)
+ gint used = aac_probe (buf, * buflen);
+
+ if (used == * buflen)
{
- AUDDBG ("No data left!\n");
+ fprintf (stderr, "aac: No valid frame header found.\n");
+ * buflen = 0;
return;
}
+ if (used)
+ {
+ * buflen -= used;
+ memmove (buf, buf + used, * buflen);
+ * buflen += vfs_fread (buf + * buflen, 1, size - * buflen, file);
+ }
+
+ /* == START DECODING == */
+
guchar chan;
gulong rate;
- * used += NeAACDecInit (dec, buf + * used, * fill - * used, & rate, & chan);
- AUDDBG ("After init, used %d of %d bytes.\n", * used, * fill);
+ if ((used = NeAACDecInit (dec, buf, * buflen, & rate, & chan)))
+ {
+ * buflen -= used;
+ memmove (buf, buf + used, * buflen);
+ * buflen += vfs_fread (buf + * buflen, 1, size - * buflen, file);
+ }
}
-void my_decode_aac( InputPlayback *playback, char *filename, VFSFile *file )
+static gboolean my_decode_aac (InputPlayback * playback, const char * filename,
+ VFSFile * file)
{
- NeAACDecHandle decoder = 0;
- guchar streambuffer[BUFFER_SIZE];
- gint bufferconsumed = 0;
- gulong samplerate = 0;
- guchar channels = 0;
- gint buffervalid = 0;
- gulong ret = 0;
- gboolean remote = str_has_prefix_nocase(filename, "http:") ||
- str_has_prefix_nocase(filename, "https:");
- gboolean paused = FALSE;
- Tuple * tuple;
+ NeAACDecHandle decoder = 0;
+ NeAACDecConfigurationPtr decoder_config;
+ gulong samplerate = 0;
+ guchar channels = 0;
+ Tuple *tuple;
gint bitrate = 0;
tuple = aac_get_tuple (filename, file);
if (tuple != NULL)
{
- mowgli_object_ref (tuple);
+ tuple_ref (tuple);
playback->set_tuple (playback, tuple);
bitrate = tuple_get_int (tuple, FIELD_BITRATE, NULL);
bitrate = 1000 * MAX (0, bitrate);
}
- vfs_rewind(file);
- if((decoder = NeAACDecOpen()) == NULL){
- g_print("AAC: Open Decoder Error\n");
- vfs_fclose(file);
-
- playback->playing = FALSE;
- return;
+ vfs_rewind (file);
+ if ((decoder = NeAACDecOpen ()) == NULL)
+ {
+ g_print ("AAC: Open Decoder Error\n");
+ return FALSE;
}
- if((buffervalid = vfs_fread(streambuffer, 1, BUFFER_SIZE, file))==0){
- g_print("AAC: Error reading file\n");
- vfs_fclose(file);
- NeAACDecClose(decoder);
- playback->playing = FALSE;
- return;
- }
- if(!strncmp((char*)streambuffer, "ID3", 3)){
- if (vfs_fseek (file, 10 + (streambuffer[6] << 21) + (streambuffer[7] <<
- 14) + (streambuffer[8] << 7) + streambuffer[9], SEEK_SET))
+ decoder_config = NeAACDecGetCurrentConfiguration (decoder);
+ decoder_config->outputFormat = FAAD_FMT_FLOAT;
+ NeAACDecSetConfiguration (decoder, decoder_config);
+
+ /* == FILL BUFFER == */
+
+ guchar buf[BUFFER_SIZE];
+ gint buflen = vfs_fread (buf, 1, sizeof buf, file);
+
+ /* == SKIP ID3 TAG == */
+
+ if (buflen >= 10 && ! strncmp ((char *) buf, "ID3", 3))
+ {
+ if (vfs_fseek (file, 10 + (buf[6] << 21) + (buf[7] << 14) + (buf[8] <<
+ 7) + buf[9], SEEK_SET))
{
- playback->playing = FALSE;
- playback->error = TRUE;
- return;
+ fprintf (stderr, "aac: Failed to seek past ID3v2 tag.\n");
+ goto ERR_CLOSE_DECODER;
}
- buffervalid = vfs_fread(streambuffer, 1, BUFFER_SIZE, file);
- }
-
- bufferconsumed = aac_probe(streambuffer, buffervalid);
- if(bufferconsumed) {
- buffervalid -= bufferconsumed;
- memmove(streambuffer, &streambuffer[bufferconsumed], buffervalid);
- buffervalid += vfs_fread(&streambuffer[buffervalid], 1,
- BUFFER_SIZE-buffervalid, file);
- }
-
- bufferconsumed = NeAACDecInit(decoder,
- streambuffer,
- buffervalid,
- &samplerate,
- &channels);
-#ifdef DEBUG
- g_print("samplerate: %lu, channels: %d\n", samplerate, channels);
-#endif
- if(playback->output->open_audio(FMT_S16_NE,samplerate,channels) == FALSE){
- NeAACDecClose(decoder);
- vfs_fclose(file);
- playback->playing = FALSE;
- playback->error = TRUE;
- return;
+ buflen = vfs_fread (buf, 1, sizeof buf, file);
+ }
+
+ /* == FIND FRAME HEADER == */
+
+ gint used = aac_probe (buf, buflen);
+
+ if (used == buflen)
+ {
+ fprintf (stderr, "aac: No valid frame header found.\n");
+ goto ERR_CLOSE_DECODER;
+ }
+
+ if (used)
+ {
+ buflen -= used;
+ memmove (buf, buf + used, buflen);
+ buflen += vfs_fread (buf + buflen, 1, sizeof buf - buflen, file);
+ }
+
+ /* == START DECODING == */
+
+ if ((used = NeAACDecInit (decoder, buf, buflen, & samplerate, & channels)))
+ {
+ buflen -= used;
+ memmove (buf, buf + used, buflen);
+ buflen += vfs_fread (buf + buflen, 1, sizeof buf - buflen, file);
}
- playback->set_params (playback, NULL, 0, bitrate, samplerate, channels);
- playback->output->flush(0);
+ /* == CHECK FOR METADATA == */
- while (playback->playing && buffervalid > 0 && streambuffer != NULL)
+ if (tuple && aac_title_changed (filename, file, tuple))
{
- NeAACDecFrameInfo finfo;
- unsigned long samplesdecoded;
- char* sample_buffer = NULL;
+ tuple_ref (tuple);
+ playback->set_tuple (playback, tuple);
+ }
+
+ /* == START PLAYBACK == */
+
+ if (! playback->output->open_audio (FMT_FLOAT, samplerate, channels))
+ goto ERR_CLOSE_DECODER;
+ playback->set_params (playback, bitrate, samplerate, channels);
+ playback->set_pb_ready (playback);
+
+ /* == MAIN LOOP == */
+
+ while (1)
+ {
g_mutex_lock (seek_mutex);
+ /* == HANDLE STOP REQUESTS == */
+
+ if (stop_flag)
+ {
+ g_mutex_unlock (seek_mutex);
+ break;
+ }
+
+ /* == HANDLE SEEK REQUESTS == */
+
if (seek_value >= 0)
{
gint length = (tuple != NULL) ? tuple_get_int (tuple, FIELD_LENGTH,
@@ -872,8 +876,8 @@ void my_decode_aac( InputPlayback *playback, char *filename, VFSFile *file )
if (length > 0)
{
- aac_seek (file, decoder, seek_value, length, streambuffer,
- sizeof streambuffer, & buffervalid, & bufferconsumed);
+ aac_seek (file, decoder, seek_value, length, buf, sizeof buf,
+ & buflen);
playback->output->flush (seek_value);
}
@@ -881,129 +885,117 @@ void my_decode_aac( InputPlayback *playback, char *filename, VFSFile *file )
g_cond_signal (seek_cond);
}
- if (pause_flag != paused)
- {
- playback->output->pause (pause_flag);
- paused = pause_flag;
- g_cond_signal (seek_cond);
- }
+ g_mutex_unlock (seek_mutex);
+
+ /* == CHECK FOR END OF FILE == */
- if (paused)
+ if (! buflen)
{
- g_cond_wait (seek_cond, seek_mutex);
- g_mutex_unlock (seek_mutex);
- continue;
+ while (playback->output->buffer_playing ())
+ g_usleep (20000);
+
+ break;
}
- g_mutex_unlock (seek_mutex);
+ /* == CHECK FOR METADATA == */
- if(bufferconsumed > 0)
+ if (tuple && aac_title_changed (filename, file, tuple))
{
- buffervalid -= bufferconsumed;
- memmove(streambuffer, &streambuffer[bufferconsumed], buffervalid);
- ret = vfs_fread(&streambuffer[buffervalid], 1,
- BUFFER_SIZE-buffervalid, file);
- buffervalid += ret;
- bufferconsumed = 0;
-
- /* XXX: buffer underrun on a shoutcast stream, well this is unpleasant. --nenolod */
- if (ret == 0 && remote == TRUE)
- break;
-
- if (tuple != NULL && aac_title_changed (filename, file, tuple))
- {
- mowgli_object_ref (tuple);
- playback->set_tuple (playback, tuple);
- }
+ tuple_ref (tuple);
+ playback->set_tuple (playback, tuple);
}
- sample_buffer = NeAACDecDecode(decoder, &finfo, streambuffer, buffervalid);
+ /* == DECODE A FRAME == */
- bufferconsumed += finfo.bytesconsumed;
- samplesdecoded = finfo.samples;
+ NeAACDecFrameInfo info;
+ void * audio = NeAACDecDecode (decoder, & info, buf, buflen);
- if(finfo.error > 0 && remote != FALSE)
+ if (info.error)
{
- buffervalid--;
- memmove(streambuffer, &streambuffer[1], buffervalid);
- if(buffervalid < BUFFER_SIZE) {
- buffervalid +=
- vfs_fread(&streambuffer[buffervalid], 1, BUFFER_SIZE-buffervalid, file);
- }
- bufferconsumed = aac_probe(streambuffer, buffervalid);
- if(bufferconsumed) {
- buffervalid -= bufferconsumed;
- memmove(streambuffer, &streambuffer[bufferconsumed], buffervalid);
- bufferconsumed = 0;
+ fprintf (stderr, "aac: %s.\n", NeAACDecGetErrorMessage (info.error));
+
+ if (buflen)
+ {
+ used = 1 + aac_probe (buf + 1, buflen - 1);
+ buflen -= used;
+ memmove (buf, buf + used, buflen);
+ buflen += vfs_fread (buf + buflen, 1, sizeof buf - buflen, file);
}
+
continue;
}
- if((samplesdecoded <= 0) && !sample_buffer){
-#ifdef DEBUG
- g_print("AAC: decoded %lu samples!\n", samplesdecoded);
-#endif
- continue;
+ if ((used = info.bytesconsumed))
+ {
+ buflen -= used;
+ memmove (buf, buf + used, buflen);
+ buflen += vfs_fread (buf + buflen, 1, sizeof buf - buflen, file);
}
- playback->output->write_audio (sample_buffer, 2 * samplesdecoded);
+ /* == PLAY THE SOUND == */
+
+ if (audio && info.samples)
+ playback->output->write_audio (audio, sizeof (gfloat) * info.samples);
}
- playback->output->close_audio();
- NeAACDecClose(decoder);
- vfs_fclose(file);
- if (tuple != NULL)
- mowgli_object_unref (tuple);
+ g_mutex_lock (seek_mutex);
+ stop_flag = TRUE;
+ g_cond_signal (seek_cond);
+ g_mutex_unlock (seek_mutex);
- playback->playing = FALSE;
-}
+ playback->output->close_audio ();
+ NeAACDecClose (decoder);
-static void *mp4_decode( void *args )
-{
- mp4ff_callback_t *mp4cb = g_malloc0(sizeof(mp4ff_callback_t));
- VFSFile *mp4fh;
- mp4ff_t *mp4file;
- gboolean ret;
+ if (tuple)
+ tuple_unref (tuple);
- InputPlayback *playback = args;
- char *filename = playback->filename;
+ return TRUE;
- mp4fh = vfs_fopen (filename, "r");
+ERR_CLOSE_DECODER:
+ NeAACDecClose (decoder);
- if (mp4fh == NULL)
- return NULL;
+ if (tuple)
+ tuple_unref (tuple);
- ret = parse_aac_stream(mp4fh);
+ return FALSE;
+}
- if( ret == TRUE )
- {
- if (vfs_fseek (mp4fh, 0, SEEK_SET))
- ; /* errors here are normal for streaming */
- }
- else {
- vfs_fclose(mp4fh);
- mp4fh = vfs_fopen(filename, "rb");
- }
+static gboolean mp4_play (InputPlayback * playback, const gchar * filename,
+ VFSFile * file, gint start_time, gint stop_time, gboolean pause)
+{
+ g_return_val_if_fail (file != NULL, FALSE);
+
+ mp4ff_callback_t *mp4cb = g_malloc0 (sizeof (mp4ff_callback_t));
+ mp4ff_t *mp4file;
+ gboolean ret;
+
+ ret = parse_aac_stream (file);
+ vfs_rewind (file);
mp4cb->read = mp4_read_callback;
mp4cb->seek = mp4_seek_callback;
- mp4cb->user_data = mp4fh;
+ mp4cb->user_data = file;
- mp4file= mp4ff_open_read(mp4cb);
+ mp4file = mp4ff_open_read (mp4cb);
- if( ret == TRUE ) {
- g_free(mp4cb);
- my_decode_aac( playback, filename, mp4fh );
+ seek_value = (start_time > 0) ? start_time : -1;
+ stop_flag = FALSE;
+
+ if (ret == TRUE)
+ {
+ g_free (mp4cb);
+ return my_decode_aac (playback, filename, file);
}
- else /* I think there's a file descriptor leak here? -jlindgren */
- my_decode_mp4( playback, filename, mp4file );
- return NULL;
+ return my_decode_mp4 (playback, filename, mp4file);
}
-InputPlugin mp4_ip =
-{
- .description = "MP4 AAC decoder",
+gboolean read_itunes_cover (const gchar * filename, VFSFile * file, void * *
+ data, gint64 * size);
+
+AUD_INPUT_PLUGIN
+(
+ .name = "MP4 AAC decoder",
.init = mp4_init,
.about = mp4_about,
.play = mp4_play,
@@ -1013,9 +1005,6 @@ InputPlugin mp4_ip =
.cleanup = mp4_cleanup,
.is_our_file_from_vfs = mp4_is_our_fd,
.probe_for_tuple = mp4_get_tuple,
- .vfs_extensions = fmts,
-};
-
-InputPlugin * mp4_iplist[] = {& mp4_ip, NULL};
-
-SIMPLE_INPUT_PLUGIN (mp4, mp4_iplist)
+ .get_song_image = read_itunes_cover,
+ .extensions = fmts,
+)
diff --git a/src/aac/mp4_utils.c b/src/aac/mp4_utils.c
index af97fc6..2b1a897 100644
--- a/src/aac/mp4_utils.c
+++ b/src/aac/mp4_utils.c
@@ -2,7 +2,9 @@
* some functions for MP4 files
*/
-#include "config.h"
+#include <glib.h>
+#include <stdlib.h>
+
#include "mp4ff.h"
#include "neaacdec.h"
#include <audacious/plugin.h>
@@ -35,21 +37,22 @@ const gchar *mpeg4AudioNames[] = {
};
-gint getAACTrack(mp4ff_t *infile)
+gint getAACTrack (mp4ff_t * infile)
{
- gint i, rc, numTracks = mp4ff_total_tracks(infile);
+ gint i, rc, numTracks = mp4ff_total_tracks (infile);
for (i = 0; i < numTracks; i++)
{
guint8 *buff = NULL;
guint32 buff_size = 0;
mp4AudioSpecificConfig mp4ASC;
- mp4ff_get_decoder_config(infile, i, &buff, &buff_size);
+ mp4ff_get_decoder_config (infile, i, &buff, &buff_size);
if (buff != NULL)
{
- rc = AudioSpecificConfig(buff, buff_size, &mp4ASC);
- free(buff);
- if (rc < 0) continue;
+ rc = AudioSpecificConfig (buff, buff_size, &mp4ASC);
+ free (buff);
+ if (rc < 0)
+ continue;
return i;
}
}
diff --git a/src/aac/mp4ff/mp4atom.c b/src/aac/mp4ff/mp4atom.c
index 0eadb02..23712dd 100644
--- a/src/aac/mp4ff/mp4atom.c
+++ b/src/aac/mp4ff/mp4atom.c
@@ -1,19 +1,19 @@
/*
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
-**
+**
** 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
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
@@ -330,7 +330,6 @@ static int32_t mp4ff_read_esds(mp4ff_t *f)
static int32_t mp4ff_read_mp4a(mp4ff_t *f)
{
- uint64_t size;
int32_t i;
uint8_t atom_type = 0;
uint8_t header_size = 0;
@@ -354,7 +353,7 @@ static int32_t mp4ff_read_mp4a(mp4ff_t *f)
mp4ff_read_int16(f);
- size = mp4ff_atom_read_header(f, &atom_type, &header_size);
+ mp4ff_atom_read_header(f, &atom_type, &header_size);
if (atom_type == ATOM_ESDS)
{
mp4ff_read_esds(f);
diff --git a/src/aac/mp4ff/mp4ff_int_types.h b/src/aac/mp4ff/mp4ff_int_types.h
index 15e7fd6..7c5d27b 100644
--- a/src/aac/mp4ff/mp4ff_int_types.h
+++ b/src/aac/mp4ff/mp4ff_int_types.h
@@ -1,11 +1,7 @@
#ifndef _MP4FF_INT_TYPES_H_
#define _MP4FF_INT_TYPES_H_
-#if defined (_WIN32)
-
-#ifdef __MINGW32__
-#include <stdlib.h>
-#endif /* #ifdef __MINGW32__ */
+#if defined _WIN32 && ! defined __MINGW32__
typedef signed char int8_t;
typedef unsigned char uint8_t;
diff --git a/src/aac/tagging.h b/src/aac/tagging.h
index e2bf1bc..21f87ae 100644
--- a/src/aac/tagging.h
+++ b/src/aac/tagging.h
@@ -24,15 +24,14 @@
#include <string.h>
#include <unistd.h>
-#include "config.h"
#include "mp4ff.h"
/* XXX: We will need the same for AAC eventually */
-extern gchar *audmp4_get_artist(mp4ff_t *);
-extern gchar *audmp4_get_title(mp4ff_t *);
-extern gchar *audmp4_get_album(mp4ff_t *);
-extern gchar *audmp4_get_genre(mp4ff_t *);
-extern gint audmp4_get_year(mp4ff_t *);
+extern gchar *audmp4_get_artist (mp4ff_t *);
+extern gchar *audmp4_get_title (mp4ff_t *);
+extern gchar *audmp4_get_album (mp4ff_t *);
+extern gchar *audmp4_get_genre (mp4ff_t *);
+extern gint audmp4_get_year (mp4ff_t *);
#define GENRE_MAX 0x94
extern const char *audmp4_id3_genres[GENRE_MAX];
diff --git a/src/aac/tagging_mp4.c b/src/aac/tagging_mp4.c
index dd73ab9..a408156 100644
--- a/src/aac/tagging_mp4.c
+++ b/src/aac/tagging_mp4.c
@@ -24,50 +24,50 @@
#include "tagging.h"
-gchar *audmp4_get_artist(mp4ff_t *file)
+gchar *audmp4_get_artist (mp4ff_t * file)
{
- gchar *value;
+ gchar *value;
- mp4ff_meta_get_artist(file, &value);
+ mp4ff_meta_get_artist (file, &value);
- return value;
+ return value;
}
-gchar *audmp4_get_title(mp4ff_t *file)
+gchar *audmp4_get_title (mp4ff_t * file)
{
- gchar *value;
+ gchar *value;
- mp4ff_meta_get_title(file, &value);
+ mp4ff_meta_get_title (file, &value);
- return value;
+ return value;
}
-gchar *audmp4_get_album(mp4ff_t *file)
+gchar *audmp4_get_album (mp4ff_t * file)
{
- gchar *value;
+ gchar *value;
- mp4ff_meta_get_album(file, &value);
+ mp4ff_meta_get_album (file, &value);
- return value;
+ return value;
}
-gchar *audmp4_get_genre(mp4ff_t *file)
+gchar *audmp4_get_genre (mp4ff_t * file)
{
- gchar *value;
+ gchar *value;
- mp4ff_meta_get_genre(file, &value);
+ mp4ff_meta_get_genre (file, &value);
- return value;
+ return value;
}
-gint audmp4_get_year(mp4ff_t *file)
+gint audmp4_get_year (mp4ff_t * file)
{
- gchar *value;
+ gchar *value;
- mp4ff_meta_get_date(file, &value);
+ mp4ff_meta_get_date (file, &value);
- if (!value)
- return 0;
+ if (!value)
+ return 0;
- return atoi(value);
+ return atoi (value);
}
diff --git a/src/adplug/Makefile b/src/adplug/Makefile
index df7fdd8..21a5971 100644
--- a/src/adplug/Makefile
+++ b/src/adplug/Makefile
@@ -63,5 +63,5 @@ plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
LD = ${CXX}
CFLAGS += ${PLUGIN_CFLAGS}
CXXFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${BINIO_CFLAGS} -I../.. -I./core -Dstricmp=strcasecmp
-LIBS += ${BINIO_LIBS} ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${BINIO_CFLAGS} -I../.. -I./core -Dstricmp=strcasecmp
+LIBS += ${BINIO_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/adplug/adplug-xmms.cc b/src/adplug/adplug-xmms.cc
index dffe560..219fc77 100644
--- a/src/adplug/adplug-xmms.cc
+++ b/src/adplug/adplug-xmms.cc
@@ -23,6 +23,7 @@
#include <sstream>
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <sys/types.h>
#include <gtk/gtk.h>
#include "adplug.h"
@@ -31,14 +32,13 @@
#include "players.h"
extern "C" {
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/plugin.h>
-#include <libaudcore/tuple_formatter.h>
-#include <libaudcore/vfs_buffered_file.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
+
+#include "adplug-xmms.h"
}
@@ -62,12 +62,11 @@ extern "C" {
/***** Global variables *****/
-extern "C" InputPlugin adplug_ip;
static gboolean audio_error = FALSE;
GtkWidget *about_win = NULL;
static GMutex * control_mutex;
static GCond * control_cond;
-static gboolean pause_flag;
+static gboolean stop_flag;
// Configuration (and defaults)
static struct
@@ -86,14 +85,10 @@ static struct
CAdPlugDatabase *db;
unsigned int subsong, songlength;
int seek;
- char filename[PATH_MAX];
- char *songtitle;
- float time_ms;
+ char * filename;
GtkLabel *infobox;
GtkDialog *infodlg;
-} plr =
-{
-0, 0, 0, 0, -1, "", NULL, 0.0f, NULL, NULL};
+} plr = {0, 0, 0, 0, -1, NULL, NULL, NULL};
static InputPlayback *playback;
@@ -122,337 +117,9 @@ dbg_printf (const char *fmt, ...)
#endif
-/***** [Dialog]: Utility functions *****/
-
-static GtkWidget *
-make_framed (GtkWidget * what, const gchar * label)
-{
- GtkWidget *framebox = gtk_frame_new (label);
-
- gtk_container_add (GTK_CONTAINER (framebox), what);
- return framebox;
-}
-
-static GtkWidget *
-print_left (const gchar * text)
-{
- GtkLabel *label = GTK_LABEL (gtk_label_new (text));
-
- gtk_label_set_justify (label, GTK_JUSTIFY_LEFT);
- gtk_misc_set_padding (GTK_MISC (label), 2, 2);
- return GTK_WIDGET (label);
-}
-
-/***** Dialog boxes *****/
-
-extern "C" void
-adplug_about (void)
-{
- if (!about_win)
- {
- gchar *about_title = g_strjoin ("", _("About "), ADPLUG_NAME, NULL);
- const gchar *version_text = CAdPlug::get_version ().c_str ();
- gchar *about_text = g_strjoin ("", ADPLUG_NAME,
- _
- ("\nCopyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>\n\n"
- "This plugin is released under the terms and conditions of the GNU LGPL.\n"
- "See http://www.gnu.org/licenses/lgpl.html for details."
- "\n\nThis plugin uses the AdPlug library, which is copyright (C) Simon Peter, et al.\n"
- "Linked AdPlug library version: "),
- version_text, NULL);
- audgui_simple_message (& about_win, GTK_MESSAGE_INFO, about_title, about_text);
- g_free (about_text);
- g_free (about_title);
- }
-}
-
-static void
-close_config_box_ok (GtkButton * button, GPtrArray * rblist)
-{
- // Apply configuration settings
- conf.bit16 =
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
- (g_ptr_array_index (rblist, 0)));
- conf.stereo =
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
- (g_ptr_array_index (rblist, 1)));
-
- if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (g_ptr_array_index (rblist, 2))))
- conf.freq = 11025;
- if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (g_ptr_array_index (rblist, 3))))
- conf.freq = 22050;
- if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (g_ptr_array_index (rblist, 4))))
- conf.freq = 44100;
- if (gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON (g_ptr_array_index (rblist, 5))))
- conf.freq = 48000;
-
- conf.endless =
- !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
- (g_ptr_array_index (rblist, 6)));
-
- conf.players = *(CPlayers *) g_ptr_array_index (rblist, 7);
- delete (CPlayers *) g_ptr_array_index (rblist, 7);
-
- g_ptr_array_free (rblist, FALSE);
-}
-
-static void
-close_config_box_cancel (GtkButton * button, GPtrArray * rblist)
-{
- delete (CPlayers *) g_ptr_array_index (rblist, 7);
- g_ptr_array_free (rblist, FALSE);
-}
-
-static void
-config_fl_row_select (GtkCList * fl, gint row, gint col,
- GdkEventButton * event, CPlayers * pl)
-{
- pl->push_back ((CPlayerDesc *) gtk_clist_get_row_data (fl, row));
- pl->unique ();
-}
-
-static void
-config_fl_row_unselect (GtkCList * fl, gint row, gint col,
- GdkEventButton * event, CPlayers * pl)
-{
- pl->remove ((CPlayerDesc *) gtk_clist_get_row_data (fl, row));
-}
-
-extern "C" void
-adplug_config (void)
-{
- GtkDialog *config_dlg = GTK_DIALOG (gtk_dialog_new ());
- GtkNotebook *notebook = GTK_NOTEBOOK (gtk_notebook_new ());
- GtkTable *table;
- GtkTooltips *tooltips = gtk_tooltips_new ();
- GPtrArray *rblist = g_ptr_array_new ();
-
- gtk_window_set_title (GTK_WINDOW (config_dlg), _("AdPlug :: Configuration"));
- gtk_window_set_policy (GTK_WINDOW (config_dlg), FALSE, FALSE, TRUE); // Window is auto sized
- gtk_window_set_modal (GTK_WINDOW (config_dlg), TRUE);
- gtk_container_add (GTK_CONTAINER (config_dlg->vbox), GTK_WIDGET (notebook));
-
- // Add Ok & Cancel buttons
- {
- GtkWidget *button;
-
- button = gtk_button_new_with_label (_("Ok"));
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (close_config_box_ok), (gpointer) rblist);
- g_signal_connect_data (G_OBJECT (button), "clicked",
- G_CALLBACK (gtk_widget_destroy),
- GTK_OBJECT (config_dlg), NULL,
- (GConnectFlags) (G_CONNECT_AFTER |
- G_CONNECT_SWAPPED));
- gtk_container_add (GTK_CONTAINER (config_dlg->action_area), button);
-
- button = gtk_button_new_with_label (_("Cancel"));
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (close_config_box_cancel),
- (gpointer) rblist);
- g_signal_connect_swapped (G_OBJECT (button), "clicked",
- G_CALLBACK (gtk_widget_destroy),
- GTK_OBJECT (config_dlg));
- gtk_container_add (GTK_CONTAINER (config_dlg->action_area), button);
- }
-
- /***** Page 1: General *****/
-
- table = GTK_TABLE (gtk_table_new (1, 2, TRUE));
- gtk_table_set_row_spacings (table, 5);
- gtk_table_set_col_spacings (table, 5);
- gtk_notebook_append_page (notebook, GTK_WIDGET (table),
- print_left (_("General")));
-
- // Add "Sound quality" section
- {
- GtkTable *sqt = GTK_TABLE (gtk_table_new (2, 2, FALSE));
- GtkVBox *fvb;
- GtkRadioButton *rb;
-
- gtk_table_set_row_spacings (sqt, 5);
- gtk_table_set_col_spacings (sqt, 5);
- gtk_table_attach_defaults (table,
- make_framed (GTK_WIDGET (sqt),
- _("Sound quality")), 0, 1, 0, 1);
-
- // Add "Resolution" section
- fvb = GTK_VBOX (gtk_vbox_new (TRUE, 0));
- gtk_table_attach_defaults (sqt,
- make_framed (GTK_WIDGET (fvb), _("Resolution")),
- 0, 1, 0, 1);
- rb = GTK_RADIO_BUTTON (gtk_radio_button_new_with_label (NULL, _("8bit")));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), !conf.bit16);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- rb =
- GTK_RADIO_BUTTON (gtk_radio_button_new_with_label_from_widget
- (rb, _("16bit")));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), conf.bit16);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- g_ptr_array_add (rblist, (gpointer) rb);
-
- // Add "Channels" section
- fvb = GTK_VBOX (gtk_vbox_new (TRUE, 0));
- gtk_table_attach_defaults (sqt,
- make_framed (GTK_WIDGET (fvb), _("Channels")), 0,
- 1, 1, 2);
- rb = GTK_RADIO_BUTTON (gtk_radio_button_new_with_label (NULL, _("Mono")));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), !conf.stereo);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- rb =
- GTK_RADIO_BUTTON (gtk_radio_button_new_with_label_from_widget
- (rb, _("Stereo")));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), conf.stereo);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- gtk_tooltips_set_tip (tooltips, GTK_WIDGET (rb),
- _("Setting stereo is not recommended, unless you need to. "
- "This won't add any stereo effects to the sound - OPL2 "
- "is just mono - but eats up more CPU power!"), NULL);
- g_ptr_array_add (rblist, (gpointer) rb);
-
- // Add "Frequency" section
- fvb = GTK_VBOX (gtk_vbox_new (TRUE, 0));
- gtk_table_attach_defaults (sqt,
- make_framed (GTK_WIDGET (fvb), _("Frequency")), 1,
- 2, 0, 2);
- rb = GTK_RADIO_BUTTON (gtk_radio_button_new_with_label (NULL, "11025"));
- if (conf.freq == 11025)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), TRUE);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- g_ptr_array_add (rblist, (gpointer) rb);
- rb =
- GTK_RADIO_BUTTON (gtk_radio_button_new_with_label_from_widget
- (rb, "22050"));
- if (conf.freq == 22050)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), TRUE);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- g_ptr_array_add (rblist, (gpointer) rb);
- rb =
- GTK_RADIO_BUTTON (gtk_radio_button_new_with_label_from_widget
- (rb, "44100"));
- if (conf.freq == 44100)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), TRUE);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- g_ptr_array_add (rblist, (gpointer) rb);
- rb =
- GTK_RADIO_BUTTON (gtk_radio_button_new_with_label_from_widget
- (rb, "48000"));
- if (conf.freq == 48000)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), TRUE);
- gtk_container_add (GTK_CONTAINER (fvb), GTK_WIDGET (rb));
- g_ptr_array_add (rblist, (gpointer) rb);
- }
-
- // Add "Playback" section
- {
- GtkVBox *vb = GTK_VBOX (gtk_vbox_new (FALSE, 0));
- GtkCheckButton *cb;
-
- gtk_table_attach_defaults (table,
- make_framed (GTK_WIDGET (vb), _("Playback")), 1,
- 2, 0, 1);
-
- cb =
- GTK_CHECK_BUTTON (gtk_check_button_new_with_label (_("Detect songend")));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb), !conf.endless);
- gtk_container_add (GTK_CONTAINER (vb), GTK_WIDGET (cb));
- gtk_tooltips_set_tip (tooltips, GTK_WIDGET (cb),
- _("If enabled, XMMS will detect a song's ending, stop "
- "it and advance in the playlist. If disabled, XMMS "
- "won't take notice of a song's ending and loop it all "
- "over again and again."), NULL);
- g_ptr_array_add (rblist, (gpointer) cb);
- }
-
- /***** Page 2: Formats *****/
-
- table = GTK_TABLE (gtk_table_new (1, 1, TRUE));
- gtk_notebook_append_page (notebook, GTK_WIDGET (table),
- print_left (_("Formats")));
-
- // Add "Format selection" section
- {
- GtkHBox *vb = GTK_HBOX (gtk_hbox_new (FALSE, 0));
- gtk_table_attach_defaults (table,
- make_framed (GTK_WIDGET (vb),
- _("Format selection")), 0, 1, 0, 1);
- // Add scrollable list
- {
- const gchar *rowstr[] = { _("Format"), _("Extension") };
- GtkEventBox *eventbox = GTK_EVENT_BOX (gtk_event_box_new ());
- GtkScrolledWindow *formatswnd =
- GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL));
- GtkCList *fl = GTK_CLIST (gtk_clist_new_with_titles (2, (gchar **)rowstr));
- CPlayers::const_iterator i;
- unsigned int j;
- gtk_clist_set_selection_mode (fl, GTK_SELECTION_MULTIPLE);
-
- // Build list
- for (i = CAdPlug::getPlayers().begin (); i != CAdPlug::getPlayers().end (); i++)
- {
- gint rownum;
-
- gchar *rws[2];
- rws[0] = g_strdup ((*i)->filetype.c_str ());
- rws[1] = g_strdup ((*i)->get_extension (0));
- for (j = 1; (*i)->get_extension (j); j++)
- rws[1] = g_strjoin (", ", rws[1], (*i)->get_extension (j), NULL);
- rownum = gtk_clist_append (fl, rws);
- g_free (rws[0]);
- g_free (rws[1]);
- gtk_clist_set_row_data (fl, rownum, (gpointer) (*i));
- if (find (conf.players.begin (), conf.players.end (), *i) !=
- conf.players.end ())
- gtk_clist_select_row (fl, rownum, 0);
- }
-
- gtk_clist_columns_autosize (fl);
- gtk_scrolled_window_set_policy (formatswnd, GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gpointer pl = (gpointer) new CPlayers (conf.players);
- g_signal_connect (G_OBJECT (fl), "select-row",
- G_CALLBACK (config_fl_row_select), pl);
- g_signal_connect (G_OBJECT (fl), "unselect-row",
- G_CALLBACK (config_fl_row_unselect), pl);
- gtk_container_add (GTK_CONTAINER (formatswnd), GTK_WIDGET (fl));
- gtk_container_add (GTK_CONTAINER (eventbox), GTK_WIDGET (formatswnd));
- gtk_container_add (GTK_CONTAINER (vb), GTK_WIDGET (eventbox));
- gtk_tooltips_set_tip (tooltips, GTK_WIDGET (eventbox),
- _("Selected file types will be recognized and played "
- "back by this plugin. Deselected types will be "
- "ignored to make room for other plugins to play "
- "these files."), NULL);
- g_ptr_array_add (rblist, pl);
- }
- }
-
- // Show window
- gtk_widget_show_all (GTK_WIDGET (config_dlg));
-}
-
-static void
-add_instlist (GtkCList * instlist, const char *t1, const char *t2)
-{
- gchar *rowstr[2];
-
- rowstr[0] = g_strdup (t1);
- rowstr[1] = g_strdup (t2);
- gtk_clist_append (instlist, rowstr);
- g_free (rowstr[0]);
- g_free (rowstr[1]);
-}
-
static CPlayer *
factory (VFSFile * fd, Copl * newopl)
{
- CPlayers::const_iterator i;
-
- dbg_printf ("factory(%p<%s>,opl): ", fd,
- fd->uri != NULL ? fd->uri : "unknown");
return CAdPlug::factory (fd, newopl, conf.players);
}
@@ -461,205 +128,12 @@ void adplug_stop(InputPlayback * data);
gboolean adplug_play(InputPlayback * data, const gchar * filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause);
}
-static void
-subsong_slider (GtkAdjustment * adj)
-{
- adplug_stop (NULL);
- plr.subsong = (unsigned int) adj->value - 1;
- adplug_play (playback, playback->filename, NULL, 0, 0, FALSE);
-}
-
-static void
-close_infobox (GtkDialog * infodlg)
-{
- // Forget our references to the instance of the "currently playing song" info
- // box. But only if we're really destroying that one... ;)
- if (infodlg == plr.infodlg)
- {
- plr.infobox = NULL;
- plr.infodlg = NULL;
- }
-}
-
-extern "C" void
-adplug_info_box (const gchar *filename)
-{
- CSilentopl tmpopl;
- VFSFile *fd = vfs_buffered_file_new_from_uri (filename);
-
- if (!fd)
- return;
-
- CPlayer *p = (strcmp (filename, plr.filename) || !plr.p) ?
- factory (fd, &tmpopl) : plr.p;
-
- if (!p)
- return; // bail out if no player could be created
- if (p == plr.p && plr.infodlg)
- return; // only one info box for active song
-
- std::ostringstream infotext;
- unsigned int i;
- GtkDialog *infobox = GTK_DIALOG (gtk_dialog_new ());
- GtkButton *okay_button = GTK_BUTTON (gtk_button_new_with_label (_("Ok")));
-
- GtkVBox *box = GTK_VBOX (gtk_vbox_new (TRUE, 2));
- GtkHBox *hbox = GTK_HBOX (gtk_hbox_new (TRUE, 2));
- GtkHBox *hbox2 = GTK_HBOX (gtk_hbox_new (TRUE, 2));
-
- // Build file info box
- gtk_window_set_title (GTK_WINDOW (infobox), _("AdPlug :: File Info"));
- gtk_window_set_policy (GTK_WINDOW (infobox), FALSE, FALSE, TRUE); // Window is auto sized
-
- gtk_container_add (GTK_CONTAINER (infobox->vbox), GTK_WIDGET (box));
-// Former packer layout, for future reproduction
-// gtk_packer_set_default_border_width(packer, 2);
-
- gtk_box_set_homogeneous (GTK_BOX (hbox), FALSE);
- g_signal_connect_swapped (G_OBJECT (okay_button), "clicked",
- G_CALLBACK (gtk_widget_destroy),
- GTK_OBJECT (infobox));
- g_signal_connect (G_OBJECT (infobox), "destroy",
- G_CALLBACK (close_infobox), 0);
- gtk_container_add (GTK_CONTAINER (infobox->action_area),
- GTK_WIDGET (okay_button));
-
- // Add filename section
-// Former packer layout, for future reproduction
-// gtk_packer_add_defaults(packer, make_framed(print_left(filename), "Filename"),
-// GTK_SIDE_TOP, GTK_ANCHOR_CENTER, GTK_FILL_X);
- gtk_box_pack_end (GTK_BOX (box), GTK_WIDGET (hbox2), TRUE, TRUE, 2);
- gtk_box_pack_end (GTK_BOX (box),
- make_framed (print_left (filename), _("Filename")), TRUE,
- TRUE, 2);
-
- // Add "Song info" section
- infotext << _("Title: ") << p->gettitle () << std::endl <<
- _("Author: ") << p->getauthor () << std::endl <<
- _("File Type: ") << p->gettype () << std::endl <<
- _("Subsongs: ") << p->getsubsongs () << std::endl <<
- _("Instruments: ") << p->getinstruments ();
- if (plr.p == p)
- infotext << std::ends;
- else
- {
- infotext << std::endl << _("Orders: ") << p->getorders () << std::endl <<
- _("Patterns: ") << p->getpatterns () << std::ends;
- }
- gtk_container_add (GTK_CONTAINER (hbox),
- make_framed (print_left (infotext.str ().c_str ()),
- _("Song")));
-
- // Add "Playback info" section if currently playing
- if (plr.p == p)
- {
- plr.infobox = GTK_LABEL (gtk_label_new (""));
- gtk_label_set_justify (plr.infobox, GTK_JUSTIFY_LEFT);
- gtk_misc_set_padding (GTK_MISC (plr.infobox), 2, 2);
- gtk_container_add (GTK_CONTAINER (hbox),
- make_framed (GTK_WIDGET (plr.infobox), _("Playback")));
- }
-
-// Former packer layout, for future reproduction
-// gtk_packer_add_defaults(packer, GTK_WIDGET(hbox), GTK_SIDE_TOP,
-// GTK_ANCHOR_CENTER, GTK_FILL_X);
- gtk_box_pack_end (GTK_BOX (hbox2), GTK_WIDGET (hbox), TRUE, TRUE, 2);
-
- // Add instrument names section
- if (p->getinstruments ())
- {
- GtkScrolledWindow *instwnd =
- GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL));
- GtkCList *instnames;
- gchar tmpstr[10];
-
- {
- const gchar *rowstr[] = { "#", _("Instrument name") };
- instnames = GTK_CLIST (gtk_clist_new_with_titles (2, (gchar **)rowstr));
- }
- gtk_clist_set_column_justification (instnames, 0, GTK_JUSTIFY_RIGHT);
-
- for (i = 0; i < p->getinstruments (); i++)
- {
- sprintf (tmpstr, "%d", i + 1);
- add_instlist (instnames, tmpstr, p->getinstrument (i).c_str ());
- }
-
- gtk_clist_columns_autosize (instnames);
- gtk_scrolled_window_set_policy (instwnd, GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (instwnd), GTK_WIDGET (instnames));
-// Former packer layout, for future reproduction
-// gtk_packer_add(packer, GTK_WIDGET(instwnd), GTK_SIDE_TOP,
-// GTK_ANCHOR_CENTER, GTK_FILL_X, 0, 0, 0, 0, 50);
- gtk_box_pack_end (GTK_BOX (hbox2), GTK_WIDGET (instwnd), TRUE, TRUE, 2);
- }
-
- // Add "Song message" section
- if (!p->getdesc ().empty ())
- {
- GtkScrolledWindow *msgwnd =
- GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL));
- GtkTextView *msg = GTK_TEXT_VIEW (gtk_text_view_new ());
-
- gtk_scrolled_window_set_policy (msgwnd, GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_text_view_set_editable (msg, FALSE);
- gtk_text_view_set_wrap_mode (msg, GTK_WRAP_WORD_CHAR);
-
- gtk_text_buffer_set_text (gtk_text_view_get_buffer (msg),
- p->getdesc ().c_str (),
- p->getdesc ().length ());
- gtk_container_add (GTK_CONTAINER (msgwnd), GTK_WIDGET (msg));
-
-// Former packer layout, for future reproduction
-// gtk_packer_add(packer, make_framed(GTK_WIDGET(msgwnd), "Song message"),
-// GTK_SIDE_TOP, GTK_ANCHOR_CENTER, GTK_FILL_X, 2, 0, 0, 200, 50);
- gtk_box_pack_end (GTK_BOX (hbox2),
- make_framed (GTK_WIDGET (msgwnd), _("Song message")), TRUE,
- TRUE, 2);
- }
-
- // Add subsong slider section
- if (p == plr.p && p->getsubsongs () > 1)
- {
- GtkAdjustment *adj =
- GTK_ADJUSTMENT (gtk_adjustment_new (plr.subsong + 1, 1,
- p->getsubsongs () + 1,
- 1, 5, 1));
- GtkHScale *slider = GTK_HSCALE (gtk_hscale_new (adj));
-
- g_signal_connect (G_OBJECT (adj), "value_changed",
- G_CALLBACK (subsong_slider), NULL);
- gtk_range_set_update_policy (GTK_RANGE (slider),
- GTK_UPDATE_DISCONTINUOUS);
- gtk_scale_set_digits (GTK_SCALE (slider), 0);
-// Former packer layout, for future reproduction
-// gtk_packer_add_defaults(packer, make_framed(GTK_WIDGET(slider), "Subsong selection"),
-// GTK_SIDE_TOP, GTK_ANCHOR_CENTER, GTK_FILL_X);
- gtk_box_pack_end (GTK_BOX (hbox2),
- make_framed (GTK_WIDGET (slider), _("Subsong selection")),
- TRUE, TRUE, 2);
- }
-
- // Show dialog box
- gtk_widget_show_all (GTK_WIDGET (infobox));
- if (p == plr.p)
- { // Remember widget, so we could destroy it later
- plr.infodlg = infobox;
- }
- else // Delete temporary player
- delete p;
-}
-
/***** Main player (!! threaded !!) *****/
-extern "C" Tuple*
-adplug_get_tuple (const gchar *filename)
+extern "C" Tuple * adplug_get_tuple (const gchar * filename, VFSFile * fd)
{
Tuple * ti = NULL;
CSilentopl tmpopl;
- VFSFile *fd = vfs_buffered_file_new_from_uri (filename);
if (!fd)
return NULL;
@@ -671,79 +145,40 @@ adplug_get_tuple (const gchar *filename)
ti = tuple_new_from_filename (filename);
if (! p->getauthor().empty())
- tuple_associate_string(ti, FIELD_ARTIST, NULL, p->getauthor().c_str());
+ tuple_set_str(ti, FIELD_ARTIST, NULL, p->getauthor().c_str());
if (! p->gettitle().empty())
- tuple_associate_string(ti, FIELD_TITLE, NULL, p->gettitle().c_str());
+ tuple_set_str(ti, FIELD_TITLE, NULL, p->gettitle().c_str());
else if (! p->getdesc().empty())
- tuple_associate_string(ti, FIELD_TITLE, NULL, p->getdesc().c_str());
+ tuple_set_str(ti, FIELD_TITLE, NULL, p->getdesc().c_str());
else
- tuple_associate_string(ti, FIELD_TITLE, NULL, g_path_get_basename(filename));
- tuple_associate_string(ti, FIELD_CODEC, NULL, p->gettype().c_str());
- tuple_associate_string(ti, FIELD_QUALITY, NULL, "sequenced");
- tuple_associate_int(ti, FIELD_LENGTH, NULL, p->songlength (plr.subsong));
+ tuple_set_str(ti, FIELD_TITLE, NULL, g_path_get_basename(filename));
+ tuple_set_str(ti, FIELD_CODEC, NULL, p->gettype().c_str());
+ tuple_set_str(ti, FIELD_QUALITY, NULL, "sequenced");
+ tuple_set_int(ti, FIELD_LENGTH, NULL, p->songlength (plr.subsong));
delete p;
}
- vfs_fclose (fd);
return ti;
}
-static char* format_and_free_ti( Tuple* ti, int* length )
-{
- char* result = tuple_formatter_make_title_string(ti, aud_get_gentitle_format());
- if ( result )
- *length = tuple_get_int(ti, FIELD_LENGTH, NULL);
- tuple_free((void *) ti);
-
- return result;
-}
-
-static void
-update_infobox (void)
-{
- std::ostringstream infotext;
-
- // Recreate info string
- infotext << _("Order: ") << plr.p->getorder () << " / " << plr.p->
- getorders () << std::endl << _("Pattern: ") << plr.p->
- getpattern () << " / " << plr.p->
- getpatterns () << std::endl << _("Row: ") << plr.p->
- getrow () << std::endl << _("Speed: ") << plr.p->
- getspeed () << std::endl << _("Timer: ") << plr.p->
- getrefresh () << _("Hz") << std::ends;
-
- GDK_THREADS_ENTER ();
- gtk_label_set_text (plr.infobox, infotext.str ().c_str ());
- GDK_THREADS_LEAVE ();
-}
-
// Define sampsize macro (only usable inside play_loop()!)
#define sampsize ((bit16 ? 2 : 1) * (stereo ? 2 : 1))
-static void *
-play_loop (void *data)
+static gboolean play_loop (InputPlayback * playback, const gchar * filename,
+ VFSFile * fd)
/* Main playback thread. Takes the filename to play as argument. */
{
- InputPlayback *playback = (InputPlayback *) data;
- char *filename = (char *) playback->filename;
dbg_printf ("play_loop(\"%s\"): ", filename);
CEmuopl opl (conf.freq, conf.bit16, conf.stereo);
long toadd = 0, i, towrite;
char *sndbuf, *sndbufpos;
- int songlength = 0;
bool playing = true, // Song self-end indicator.
bit16 = conf.bit16, // Duplicate config, so it doesn't affect us if
stereo = conf.stereo; // the user changes it while we're playing.
unsigned long freq = conf.freq;
- gboolean paused = FALSE;
-
- // we use VfsBufferedFile class here because adplug does a lot of
- // probing. a short delay before probing begins is better than
- // a lot of delay during probing.
- VFSFile *fd = vfs_buffered_file_new_from_uri (playback->filename);
if (!fd)
- return (NULL);
+ return FALSE;
// Try to load module
dbg_printf ("factory, ");
@@ -751,23 +186,15 @@ play_loop (void *data)
{
dbg_printf ("error!\n");
// MessageBox("AdPlug :: Error", "File could not be opened!", "Ok");
- return (NULL);
- }
-
- // cache song title & length from tuple
- dbg_printf ("title, ");
- Tuple* ti = adplug_get_tuple(filename);
- if (ti)
- {
- plr.songtitle = format_and_free_ti( ti, &songlength );
+ return FALSE;
}
- plr.songlength = songlength;
// reset to first subsong on new file
dbg_printf ("subsong, ");
- if (strcmp (filename, plr.filename))
+ if (! plr.filename || strcmp (filename, plr.filename))
{
- strcpy (plr.filename, filename);
+ g_free (plr.filename);
+ plr.filename = g_strdup (filename);
plr.subsong = 0;
}
@@ -777,18 +204,15 @@ play_loop (void *data)
// Set XMMS main window information
dbg_printf ("xmms, ");
- playback->set_params (playback, NULL, 0, freq * sampsize * 8,
- freq, stereo ? 2 : 1);
+ playback->set_params (playback, freq * sampsize * 8, freq, stereo ? 2 : 1);
// Rewind player to right subsong
dbg_printf ("rewind, ");
plr.p->rewind (plr.subsong);
- plr.time_ms = 0;
g_mutex_lock (control_mutex);
plr.seek = -1;
- pause_flag = FALSE;
- playback->playing = TRUE;
+ stop_flag = FALSE;
playback->set_pb_ready (playback);
g_mutex_unlock (control_mutex);
@@ -798,7 +222,7 @@ play_loop (void *data)
{
g_mutex_lock (control_mutex);
- if (! playback->playing)
+ if (stop_flag)
{
g_mutex_unlock (control_mutex);
break;
@@ -807,37 +231,25 @@ play_loop (void *data)
// seek requested ?
if (plr.seek != -1)
{
+ gint time = playback->output->written_time ();
+
// backward seek ?
- if (plr.seek < plr.time_ms)
+ if (plr.seek < time)
{
plr.p->rewind (plr.subsong);
- plr.time_ms = 0.0f;
+ time = 0;
}
// seek to requested position
- while ((plr.time_ms < plr.seek) && plr.p->update ())
- plr.time_ms += 1000 / plr.p->getrefresh ();
+ while (time < plr.seek && plr.p->update ())
+ time += (gint) (1000 / plr.p->getrefresh ());
// Reset output plugin and some values
- playback->output->flush ((int) plr.time_ms);
+ playback->output->flush (time);
plr.seek = -1;
g_cond_signal (control_cond);
}
- if (pause_flag != paused)
- {
- playback->output->pause (pause_flag);
- paused = pause_flag;
- g_cond_signal (control_cond);
- }
-
- if (paused)
- {
- g_cond_wait (control_cond, control_mutex);
- g_mutex_unlock (control_mutex);
- continue;
- }
-
g_mutex_unlock (control_mutex);
// fill sound buffer
@@ -849,7 +261,6 @@ play_loop (void *data)
{
toadd += freq;
playing = plr.p->update ();
- plr.time_ms += 1000 / plr.p->getrefresh ();
}
i = MIN (towrite, (long) (toadd / plr.p->getrefresh () + 4) & ~3);
opl.update ((short *) sndbufpos, i);
@@ -859,18 +270,13 @@ play_loop (void *data)
}
playback->output->write_audio (sndbuf, SNDBUFSIZE * sampsize);
-
- // update infobox, if necessary
- if (plr.infobox)
- update_infobox ();
}
- g_mutex_lock (control_mutex);
-
- while (playback->playing && playback->output->buffer_playing ())
+ while (playback->output->buffer_playing ())
g_usleep (10000);
- playback->playing = FALSE;
+ g_mutex_lock (control_mutex);
+ stop_flag = FALSE;
g_cond_signal (control_cond); /* wake up any waiting request */
g_mutex_unlock (control_mutex);
@@ -878,15 +284,9 @@ play_loop (void *data)
dbg_printf ("free");
delete plr.p;
plr.p = 0;
- if (plr.songtitle)
- {
- free (plr.songtitle);
- plr.songtitle = NULL;
- }
free (sndbuf);
dbg_printf (".\n");
- vfs_fclose (fd);
- return (NULL);
+ return TRUE;
}
// sampsize macro not useful anymore.
@@ -925,7 +325,7 @@ adplug_play (InputPlayback * data, const gchar * filename, VFSFile * file, gint
// On new song, re-open "Song info" dialog, if open
dbg_printf ("dialog, ");
- if (plr.infobox && strcmp (filename, plr.filename))
+ if (plr.infobox && (! plr.filename || strcmp (filename, plr.filename)))
gtk_widget_destroy (GTK_WIDGET (plr.infodlg));
// open output plugin
@@ -938,48 +338,44 @@ adplug_play (InputPlayback * data, const gchar * filename, VFSFile * file, gint
return TRUE;
}
- play_loop (playback);
+ play_loop (playback, filename, file);
playback->output->close_audio ();
return FALSE;
}
-extern "C" void adplug_stop (InputPlayback * playback)
+extern "C" void adplug_stop (InputPlayback * p)
{
g_mutex_lock (control_mutex);
- if (playback->playing)
+ if (! stop_flag)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
+ p->output->abort_write ();
g_cond_signal (control_cond);
- g_mutex_unlock (control_mutex);
- g_thread_join (playback->thread);
- playback->thread = NULL;
+ g_cond_wait (control_cond, control_mutex);
}
- else
- g_mutex_unlock (control_mutex);
+
+ g_mutex_unlock (control_mutex);
}
-extern "C" void adplug_pause (InputPlayback * playback, gshort paused)
+extern "C" void adplug_pause (InputPlayback * p, gboolean pause)
{
g_mutex_lock (control_mutex);
- if (playback->playing)
- {
- pause_flag = paused;
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, control_mutex);
- }
+ if (! stop_flag)
+ p->output->pause (pause);
g_mutex_unlock (control_mutex);
}
-extern "C" void adplug_mseek (InputPlayback * data, gulong time)
+extern "C" void adplug_mseek (InputPlayback * p, gint time)
{
g_mutex_lock (control_mutex);
- if (playback->playing)
+ if (! stop_flag)
{
plr.seek = time;
+ p->output->abort_write();
g_cond_signal (control_cond);
g_cond_wait (control_cond, control_mutex);
}
@@ -991,38 +387,40 @@ extern "C" void adplug_mseek (InputPlayback * data, gulong time)
#define CFG_VERSION "AdPlug"
-extern "C" void
-adplug_init (void)
+static const gchar * const adplug_defaults[] = {
+ "16bit", "TRUE",
+ "Stereo", "FALSE",
+ "Frequency", "44100",
+ "Endless", "FALSE",
+ NULL};
+
+extern "C" gboolean adplug_init (void)
{
- dbg_printf ("adplug_init(): open, ");
- mcs_handle_t *db = aud_cfg_db_open ();
+ aud_config_set_defaults (CFG_VERSION, adplug_defaults);
- // Read configuration
- dbg_printf ("read, ");
- aud_cfg_db_get_bool (db, CFG_VERSION, "16bit", (gboolean *) & conf.bit16);
- aud_cfg_db_get_bool (db, CFG_VERSION, "Stereo", (gboolean *) & conf.stereo);
- aud_cfg_db_get_int (db, CFG_VERSION, "Frequency", (gint *) & conf.freq);
- aud_cfg_db_get_bool (db, CFG_VERSION, "Endless",
- (gboolean *) & conf.endless);
+ conf.bit16 = aud_get_bool (CFG_VERSION, "16bit");
+ conf.stereo = aud_get_bool (CFG_VERSION, "Stereo");
+ conf.freq = aud_get_int (CFG_VERSION, "Frequency");
+ conf.endless = aud_get_bool (CFG_VERSION, "Endless");
// Read file type exclusion list
dbg_printf ("exclusion, ");
{
- gchar *cfgstr = NULL, *exclude = NULL;
- gboolean cfgread;
+ gchar * cfgstr = aud_get_string (CFG_VERSION, "Exclude");
- cfgread = aud_cfg_db_get_string (db, CFG_VERSION, "Exclude", &cfgstr);
- if (cfgread) {
- exclude = (char *) malloc (strlen (cfgstr) + 2);
+ if (cfgstr[0])
+ {
+ gchar * exclude = (gchar *) malloc (strlen (cfgstr) + 2);
strcpy (exclude, cfgstr);
exclude[strlen (exclude) + 1] = '\0';
g_strdelimit (exclude, ":", '\0');
for (gchar * p = exclude; *p; p += strlen (p) + 1)
conf.players.remove (conf.players.lookup_filetype (p));
- free (exclude); free (cfgstr);
+ free (exclude);
}
+
+ g_free (cfgstr);
}
- aud_cfg_db_close (db);
// Load database from disk and hand it to AdPlug
dbg_printf ("database");
@@ -1046,25 +444,24 @@ adplug_init (void)
control_mutex = g_mutex_new ();
control_cond = g_cond_new ();
+ return TRUE;
}
extern "C" void
adplug_quit (void)
{
- dbg_printf ("adplug_quit(): open, ");
- mcs_handle_t *db = aud_cfg_db_open ();
-
// Close database
dbg_printf ("db, ");
if (plr.db)
delete plr.db;
- // Write configuration
- dbg_printf ("write, ");
- aud_cfg_db_set_bool (db, CFG_VERSION, "16bit", conf.bit16);
- aud_cfg_db_set_bool (db, CFG_VERSION, "Stereo", conf.stereo);
- aud_cfg_db_set_int (db, CFG_VERSION, "Frequency", conf.freq);
- aud_cfg_db_set_bool (db, CFG_VERSION, "Endless", conf.endless);
+ g_free (plr.filename);
+ plr.filename = NULL;
+
+ aud_set_bool (CFG_VERSION, "16bit", conf.bit16);
+ aud_set_bool (CFG_VERSION, "Stereo", conf.stereo);
+ aud_set_int (CFG_VERSION, "Frequency", conf.freq);
+ aud_set_bool (CFG_VERSION, "Endless", conf.endless);
dbg_printf ("exclude, ");
std::string exclude;
@@ -1077,13 +474,8 @@ adplug_quit (void)
exclude += ":";
exclude += (*i)->filetype;
}
- gchar *cfgval = g_strdup (exclude.c_str ());
- aud_cfg_db_set_string (db, CFG_VERSION, "Exclude", cfgval);
- free (cfgval);
- dbg_printf ("close");
- aud_cfg_db_close (db);
- dbg_printf (".\n");
+ aud_set_string (CFG_VERSION, "Exclude", exclude.c_str ());
g_mutex_free (control_mutex);
g_cond_free (control_cond);
diff --git a/src/adplug/adplug-xmms.h b/src/adplug/adplug-xmms.h
new file mode 100644
index 0000000..eb59d8c
--- /dev/null
+++ b/src/adplug/adplug-xmms.h
@@ -0,0 +1,39 @@
+/*
+ * AdPlug/XMMS - AdPlug XMMS Plugin
+ * Copyright (C) 2002, 2003 Simon Peter <dn.tlp@gmx.net>
+ *
+ * AdPlug/XMMS is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This plugin 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 Lesser General Public License for more
+ * details.
+
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this plugin; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef ADPLUG_XMMS_H
+#define ADPLUG_XMMS_H
+
+#include <glib.h>
+#include <audacious/plugin.h>
+
+gboolean adplug_init (void);
+void adplug_quit (void);
+void adplug_about (void);
+void adplug_config (void);
+void adplug_stop (InputPlayback * p);
+gboolean adplug_play (InputPlayback * p, const gchar * filename, VFSFile * file,
+ gint start_time, gint stop_time, gboolean pause);
+void adplug_pause (InputPlayback * p, gboolean pause);
+void adplug_mseek (InputPlayback * p, gint time);
+void adplug_info_box (const gchar * filename);
+Tuple * adplug_get_tuple (const gchar * filename, VFSFile * file);
+gboolean adplug_is_our_fd (const gchar * filename, VFSFile * file);
+
+#endif
diff --git a/src/adplug/core/a2m.cxx b/src/adplug/core/a2m.cxx
index 48713cb..b1ce8cb 100644
--- a/src/adplug/core/a2m.cxx
+++ b/src/adplug/core/a2m.cxx
@@ -41,8 +41,8 @@ const unsigned int
Ca2mLoader::CODESPERRANGE = ADPLUG_A2M_CODESPERRANGE,
Ca2mLoader::TERMINATE = 256,
Ca2mLoader::FIRSTCODE = ADPLUG_A2M_FIRSTCODE,
- Ca2mLoader::MAXCHAR = FIRSTCODE + COPYRANGES * CODESPERRANGE - 1,
- Ca2mLoader::SUCCMAX = MAXCHAR + 1,
+ Ca2mLoader::MAXCODE = FIRSTCODE + COPYRANGES * CODESPERRANGE - 1,
+ Ca2mLoader::SUCCMAX = MAXCODE + 1,
Ca2mLoader::TWICEMAX = ADPLUG_A2M_TWICEMAX,
Ca2mLoader::ROOT = 1, Ca2mLoader::MAXBUF = 42 * 1024,
Ca2mLoader::MAXDISTANCE = 21389, Ca2mLoader::MAXSIZE = 21389 + MAXCOPY;
@@ -73,7 +73,7 @@ Ca2mLoader::load (VFSFile * fd, const CFileProvider & fp)
int i, j, k, t;
unsigned int l;
unsigned char *org = NULL, *orgptr, flags = 0, numpats, version;
- unsigned long crc, alength;
+ unsigned long alength;
unsigned short len[9], *secdata, *secptr;
const unsigned char convfx[16] =
{ 0, 1, 2, 23, 24, 3, 5, 4, 6, 9, 17, 13, 11, 19, 7, 14 };
@@ -87,7 +87,7 @@ Ca2mLoader::load (VFSFile * fd, const CFileProvider & fp)
// read header
f->readString (id, 10);
- crc = f->readInt (4);
+ f->readInt (4);
version = f->readInt (1);
numpats = f->readInt (1);
@@ -370,7 +370,7 @@ Ca2mLoader::inittree ()
freq[i] = 1;
}
- for (i = 1; i <= MAXCHAR; i++)
+ for (i = 1; i <= MAXCODE; i++)
{
leftc[i] = 2 * i;
rghtc[i] = 2 * i + 1;
@@ -499,7 +499,7 @@ Ca2mLoader::uncompress ()
else
a = leftc[a];
ibitbuffer <<= 1;
- } while (a <= MAXCHAR);
+ } while (a <= MAXCODE);
a -= SUCCMAX;
updatemodel (a);
diff --git a/src/adplug/core/a2m.h b/src/adplug/core/a2m.h
index a85ffde..f1a20c7 100644
--- a/src/adplug/core/a2m.h
+++ b/src/adplug/core/a2m.h
@@ -59,7 +59,7 @@ private:
#define ADPLUG_A2M_TWICEMAX (2 * ADPLUG_A2M_MAXCHAR + 1)
static const unsigned int MAXFREQ, MINCOPY, MAXCOPY, COPYRANGES,
- CODESPERRANGE, TERMINATE, FIRSTCODE, MAXCHAR, SUCCMAX, TWICEMAX, ROOT,
+ CODESPERRANGE, TERMINATE, FIRSTCODE, MAXCODE, SUCCMAX, TWICEMAX, ROOT,
MAXBUF, MAXDISTANCE, MAXSIZE;
static const unsigned short bitvalue[14];
diff --git a/src/adplug/core/adl.cxx b/src/adplug/core/adl.cxx
index 5fd1ac3..e3506b5 100644
--- a/src/adplug/core/adl.cxx
+++ b/src/adplug/core/adl.cxx
@@ -2751,7 +2751,7 @@ bool
CadlPlayer::load (VFSFile * fd, const CFileProvider & fp)
{
binistream *f = fp.open (fd);
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
// file validation section
if (!f || !fp.extension (filename, ".adl"))
diff --git a/src/adplug/core/adplug.cxx b/src/adplug/core/adplug.cxx
index b0f91fa..360fd26 100644
--- a/src/adplug/core/adplug.cxx
+++ b/src/adplug/core/adplug.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2008 Simon Peter <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -199,7 +199,7 @@ CAdPlug::factory (VFSFile * fd, Copl * opl, const CPlayers & pl,
// Try a direct hit by file extension
for (i = pl.begin (); i != pl.end (); i++)
for (j = 0; (*i)->get_extension (j); j++)
- if (fp.extension (fd->uri, (*i)->get_extension (j)))
+ if (fp.extension (vfs_get_filename (fd), (*i)->get_extension (j)))
{
AdPlug_LogWrite ("Trying direct hit: %s\n", (*i)->filetype.c_str ());
vfs_rewind (fd);
diff --git a/src/adplug/core/adtrack.cxx b/src/adplug/core/adtrack.cxx
index 9ae565b..214d592 100644
--- a/src/adplug/core/adtrack.cxx
+++ b/src/adplug/core/adtrack.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2003 Simon Peter <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -55,7 +55,7 @@ CadtrackLoader::load (VFSFile * fd, const CFileProvider & fp)
unsigned char chp, octave, pnote = 0;
int i, j;
AdTrackInst myinst;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
// file validation
if (!fp.extension (filename, ".sng") || fp.filesize (f) != 36000)
diff --git a/src/adplug/core/binio_virtual.h b/src/adplug/core/binio_virtual.h
index 7ec8000..ffd499f 100644
--- a/src/adplug/core/binio_virtual.h
+++ b/src/adplug/core/binio_virtual.h
@@ -7,55 +7,37 @@
#define __BINIO_VIRTUAL__
#include <binio.h>
+#include <stdio.h>
extern "C" {
+#include <glib.h>
#include <libaudcore/vfs.h>
};
class vfsistream : public binistream {
private:
- VFSFile *fd;
+ VFSFile *fd; bool own;
public:
- vfsistream() {
- this->fd = 0;
- };
-
- ~vfsistream() {
- if (this->fd) {
- vfs_fclose(this->fd);
- this->fd = 0;
- }
- };
-
- vfsistream(VFSFile *fd) {
- this->fd = fd;
- };
-
- vfsistream(const char *file) {
- this->fd = vfs_fopen(file, "r");
- if (!this->fd)
- err |= NotFound;
- };
-
- vfsistream(std::string &file) {
- this->fd = vfs_fopen(file.c_str(), "r");
- if (!this->fd)
- err |= NotFound;
- };
+ vfsistream(VFSFile *fd = 0) { this->fd = fd; this->own = false; };
void open(const char *file) {
g_return_if_fail(!this->fd);
- this->fd = vfs_fopen(file, "r");
- if (!this->fd)
+ if ((this->fd = vfs_fopen(file, "r")))
+ this->own = true;
+ else
err |= NotFound;
};
- void open(std::string &file) {
- g_return_if_fail(!this->fd);
- this->fd = vfs_fopen(file.c_str(), "r");
- if (!this->fd)
- err |= NotFound;
+ void open(std::string &file) { open(file.c_str()); };
+
+ vfsistream(const char *file) { this->fd = 0; this->own = false; open(file); };
+ vfsistream(std::string &file) { this->fd = 0; this->own = false; open(file); };
+
+ ~vfsistream() {
+ if (this->own)
+ vfs_fclose(this->fd);
+ this->fd = 0; this->own = false;
};
Byte getByte(void) {
@@ -81,48 +63,28 @@ public:
class vfsostream : public binostream {
private:
- VFSFile *fd;
+ VFSFile *fd; bool own;
public:
- vfsostream() {
- this->fd = 0;
- };
-
- ~vfsostream() {
- if (this->fd) {
- vfs_fclose(this->fd);
- this->fd = 0;
- }
- };
-
- vfsostream(VFSFile *fd) {
- this->fd = fd;
- };
-
- vfsostream(const char *file) {
- this->fd = vfs_fopen(file, "w");
- if (!this->fd)
- err |= Denied;
- };
-
- vfsostream(std::string &file) {
- this->fd = vfs_fopen(file.c_str(), "w");
- if (!this->fd)
- err |= Denied;
- };
+ vfsostream(VFSFile *fd = 0) { this->fd = fd; this->own = false; };
void open(const char *file) {
g_return_if_fail(!this->fd);
- this->fd = vfs_fopen(file, "w");
- if (!this->fd)
+ if ((this->fd = vfs_fopen(file, "w")))
+ this->own = true;
+ else
err |= Denied;
};
- void open(std::string &file) {
- g_return_if_fail(!this->fd);
- this->fd = vfs_fopen(file.c_str(), "w");
- if (!this->fd)
- err |= Denied;
+ void open(std::string &file) { open(file.c_str()); };
+
+ vfsostream(const char *file) { this->fd = 0; this->own = false; open(file); };
+ vfsostream(std::string &file) { this->fd = 0; this->own = false; open(file); };
+
+ ~vfsostream() {
+ if (this->own)
+ vfs_fclose(this->fd);
+ this->fd = 0; this->own = false;
};
void putByte(Byte b) {
diff --git a/src/adplug/core/cff.cxx b/src/adplug/core/cff.cxx
index eb179d9..daf7b63 100644
--- a/src/adplug/core/cff.cxx
+++ b/src/adplug/core/cff.cxx
@@ -396,7 +396,10 @@ CcffLoader::cff_unpacker::unpack (unsigned char *ibuf, unsigned char *obuf)
}
for (unsigned int i = 0; i < repeat_counter * repeat_length; i++)
- output[output_length++] = output[output_length - repeat_length];
+ {
+ output[output_length] = output[output_length - repeat_length];
+ output_length++;
+ }
code_length = old_code_length;
diff --git a/src/adplug/core/d00.cxx b/src/adplug/core/d00.cxx
index 7e25c71..d084f48 100644
--- a/src/adplug/core/d00.cxx
+++ b/src/adplug/core/d00.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2007 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -66,7 +66,7 @@ Cd00Player::load (VFSFile * fd, const CFileProvider & fp)
unsigned long filesize;
int i, ver1 = 0;
char *str;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
// file validation section
checkhead = new d00header;
diff --git a/src/adplug/core/debug.h b/src/adplug/core/debug.h
index 67ef3a8..2c3fc6b 100644
--- a/src/adplug/core/debug.h
+++ b/src/adplug/core/debug.h
@@ -32,6 +32,8 @@
#ifndef H_DEBUG
#define H_DEBUG
+#define ADL_DEBUG
+
extern "C"
{
void AdPlug_LogFile(const char *filename);
diff --git a/src/adplug/core/dmo.cxx b/src/adplug/core/dmo.cxx
index 64506ae..9d39d38 100644
--- a/src/adplug/core/dmo.cxx
+++ b/src/adplug/core/dmo.cxx
@@ -55,7 +55,7 @@ CdmoLoader::load (VFSFile * fd, const CFileProvider & fp)
{
int i, j;
binistream *f;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
// check header
dmo_unpacker *unpacker = new dmo_unpacker;
@@ -63,9 +63,15 @@ CdmoLoader::load (VFSFile * fd, const CFileProvider & fp)
f = fp.open (fd);
if (!f)
+ {
+ delete unpacker;
return false;
+ }
if (!fp.extension (filename, ".dmo"))
+ {
+ delete unpacker;
return false;
+ }
f->readString ((char *) chkhdr, 16);
diff --git a/src/adplug/core/fmopl.c b/src/adplug/core/fmopl.c
index b93bc5e..81d6459 100644
--- a/src/adplug/core/fmopl.c
+++ b/src/adplug/core/fmopl.c
@@ -31,7 +31,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#define INLINE __inline
#define HAS_YM3812 1
#include <stdio.h>
@@ -244,7 +243,7 @@ static INT32 feedback2; /* connect for SLOT 2 */
/* --------------------- subroutines --------------------- */
-INLINE int Limit( int val, int max, int min ) {
+static inline int Limit( int val, int max, int min ) {
if ( val > max )
val = max;
else if ( val < min )
@@ -254,7 +253,7 @@ INLINE int Limit( int val, int max, int min ) {
}
/* status set and IRQ handling */
-INLINE void OPL_STATUS_SET(FM_OPL *OPL,int flag)
+static inline void OPL_STATUS_SET(FM_OPL *OPL,int flag)
{
/* set status flag */
OPL->status |= flag;
@@ -270,7 +269,7 @@ INLINE void OPL_STATUS_SET(FM_OPL *OPL,int flag)
}
/* status reset and IRQ handling */
-INLINE void OPL_STATUS_RESET(FM_OPL *OPL,int flag)
+static inline void OPL_STATUS_RESET(FM_OPL *OPL,int flag)
{
/* reset status flag */
OPL->status &=~flag;
@@ -286,7 +285,7 @@ INLINE void OPL_STATUS_RESET(FM_OPL *OPL,int flag)
}
/* IRQ mask set */
-INLINE void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag)
+static inline void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag)
{
OPL->statusmask = flag;
/* IRQ handling check */
@@ -295,7 +294,7 @@ INLINE void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag)
}
/* ----- key on ----- */
-INLINE void OPL_KEYON(OPL_SLOT *SLOT)
+static inline void OPL_KEYON(OPL_SLOT *SLOT)
{
/* sin wave restart */
SLOT->Cnt = 0;
@@ -306,7 +305,7 @@ INLINE void OPL_KEYON(OPL_SLOT *SLOT)
SLOT->eve = EG_AED;
}
/* ----- key off ----- */
-INLINE void OPL_KEYOFF(OPL_SLOT *SLOT)
+static inline void OPL_KEYOFF(OPL_SLOT *SLOT)
{
if( SLOT->evm > ENV_MOD_RR)
{
@@ -322,7 +321,7 @@ INLINE void OPL_KEYOFF(OPL_SLOT *SLOT)
/* ---------- calcrate Envelope Generator & Phase Generator ---------- */
/* return : envelope output */
-INLINE UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT )
+static inline UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT )
{
/* calcrate envelope generator */
if( (SLOT->evc+=SLOT->evs) >= SLOT->eve )
@@ -368,7 +367,7 @@ static void set_algorythm( OPL_CH *CH)
}
/* ---------- frequency counter for operater update ---------- */
-INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT)
+static inline void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT)
{
int ksr;
@@ -388,7 +387,7 @@ INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT)
}
/* set multi,am,vib,EG-TYP,KSR,mul */
-INLINE void set_mul(FM_OPL *OPL,int slot,int v)
+static inline void set_mul(FM_OPL *OPL,int slot,int v)
{
OPL_CH *CH = &OPL->P_CH[slot/2];
OPL_SLOT *SLOT = &CH->SLOT[slot&1];
@@ -402,7 +401,7 @@ INLINE void set_mul(FM_OPL *OPL,int slot,int v)
}
/* set ksl & tl */
-INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v)
+static inline void set_ksl_tl(FM_OPL *OPL,int slot,int v)
{
OPL_CH *CH = &OPL->P_CH[slot/2];
OPL_SLOT *SLOT = &CH->SLOT[slot&1];
@@ -418,7 +417,7 @@ INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v)
}
/* set attack rate & decay rate */
-INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v)
+static inline void set_ar_dr(FM_OPL *OPL,int slot,int v)
{
OPL_CH *CH = &OPL->P_CH[slot/2];
OPL_SLOT *SLOT = &CH->SLOT[slot&1];
@@ -435,7 +434,7 @@ INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v)
}
/* set sustain level & release rate */
-INLINE void set_sl_rr(FM_OPL *OPL,int slot,int v)
+static inline void set_sl_rr(FM_OPL *OPL,int slot,int v)
{
OPL_CH *CH = &OPL->P_CH[slot/2];
OPL_SLOT *SLOT = &CH->SLOT[slot&1];
@@ -452,7 +451,7 @@ INLINE void set_sl_rr(FM_OPL *OPL,int slot,int v)
/* operator output calcrator */
#define OP_OUT(slot,env,con) slot->wavetable[((slot->Cnt+con)/(0x1000000/SIN_ENT))&(SIN_ENT-1)][env]
/* ---------- calcrate one of channel ---------- */
-INLINE void OPL_CALC_CH( OPL_CH *CH )
+static inline void OPL_CALC_CH( OPL_CH *CH )
{
UINT32 env_out;
OPL_SLOT *SLOT;
@@ -497,7 +496,7 @@ INLINE void OPL_CALC_CH( OPL_CH *CH )
/* ---------- calcrate rythm block ---------- */
#define WHITE_NOISE_db 6.0
-INLINE void OPL_CALC_RH( OPL_CH *CH )
+static inline void OPL_CALC_RH( OPL_CH *CH )
{
UINT32 env_tam,env_sd,env_top,env_hh;
int whitenoise = (rand()&1)*(WHITE_NOISE_db/EG_STEP);
@@ -713,7 +712,7 @@ static void OPLCloseTable( void )
}
/* CSM Key Controll */
-INLINE void CSMKeyControll(OPL_CH *CH)
+static inline void CSMKeyControll(OPL_CH *CH)
{
OPL_SLOT *slot1 = &CH->SLOT[SLOT1];
OPL_SLOT *slot2 = &CH->SLOT[SLOT2];
diff --git a/src/adplug/core/hsc.cxx b/src/adplug/core/hsc.cxx
index 4d11948..578cc73 100644
--- a/src/adplug/core/hsc.cxx
+++ b/src/adplug/core/hsc.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2004 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -39,9 +39,10 @@ ChscPlayer::load (VFSFile * fd, const CFileProvider & fp)
int i;
// file validation section
- if (!f || !fp.extension (fd->uri, ".hsc") || fp.filesize (f) > 59187)
+ if (!f || !fp.extension (vfs_get_filename (fd), ".hsc") || fp.filesize (f) > 59187)
{
- AdPlug_LogWrite ("ChscPlayer::load(\"%s\"): Not a HSC file!\n", fd->uri);
+ AdPlug_LogWrite ("ChscPlayer::load(\"%s\"): Not a HSC file!\n",
+ vfs_get_filename (fd));
fp.close (f);
return false;
}
diff --git a/src/adplug/core/hsp.cxx b/src/adplug/core/hsp.cxx
index cae0675..81b983c 100644
--- a/src/adplug/core/hsp.cxx
+++ b/src/adplug/core/hsp.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2004 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -37,7 +37,7 @@ ChspLoader::load (VFSFile * fd, const CFileProvider & fp)
return false;
unsigned long i, j, orgsize, filesize;
unsigned char *cmp, *org;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
// file validation section
if (!fp.extension (filename, ".hsp"))
diff --git a/src/adplug/core/imf.cxx b/src/adplug/core/imf.cxx
index 9fc133c..863512e 100644
--- a/src/adplug/core/imf.cxx
+++ b/src/adplug/core/imf.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2006 Simon Peter <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -73,7 +73,7 @@ CimfPlayer::load (VFSFile * fd, const CFileProvider & fp)
if (strncmp (header, "ADLIB", 5) || version != 1)
{
- if (!fp.extension (fd->uri, ".imf") && !fp.extension (fd->uri, ".wlf"))
+ if (!fp.extension (vfs_get_filename (fd), ".imf") && !fp.extension (vfs_get_filename (fd), ".wlf"))
{
// It's no IMF file at all
fp.close (f);
@@ -138,7 +138,7 @@ CimfPlayer::load (VFSFile * fd, const CFileProvider & fp)
}
}
- rate = getrate (fd->uri, fp, f);
+ rate = getrate (vfs_get_filename (fd), fp, f);
fp.close (f);
rewind (0);
return true;
diff --git a/src/adplug/core/jbm.cxx b/src/adplug/core/jbm.cxx
index b43de1b..dc920d9 100644
--- a/src/adplug/core/jbm.cxx
+++ b/src/adplug/core/jbm.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2007 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -24,7 +24,7 @@
*
* This version doesn't use the binstr.h functions (coded with custom func.)
* This is my first attempt on writing a musicplayer for AdPlug, and i'm not
- * coding C++ very often..
+ * coding C++ very often..
*
* Released under the terms of the GNU General Public License.
*/
@@ -66,7 +66,7 @@ CPlayer *CjbmPlayer::factory(Copl *newopl)
bool CjbmPlayer::load(VFSFile * fd, const CFileProvider & fp)
{
binistream *f = fp.open (fd);
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
int filelen = fp.filesize(f);
int i;
@@ -97,7 +97,7 @@ bool CjbmPlayer::load(VFSFile * fd, const CFileProvider & fp)
flags = GET_WORD(m, 8);
- // Instrument datas are directly addressed with m[]
+ // Instrument datas are directly addressed with m[]
inscount = (filelen - instable) >> 4;
@@ -111,7 +111,7 @@ bool CjbmPlayer::load(VFSFile * fd, const CFileProvider & fp)
}
seqcount = (seqcount - seqtable) >> 1;
sequences = new unsigned short[seqcount];
- for (i = 0; i < seqcount; i++)
+ for (i = 0; i < seqcount; i++)
sequences[i] = GET_WORD(m, seqtable + (i<<1));
rewind(0);
@@ -289,6 +289,6 @@ void CjbmPlayer::set_opl_instrument(int channel, JBMVoice *v)
// FEEDBACK/FM mode
opl->write(0xc0 + channel, m[i+8]&15);
-
+
return;
}
diff --git a/src/adplug/core/ksm.cxx b/src/adplug/core/ksm.cxx
index 6d3d259..4346fbe 100644
--- a/src/adplug/core/ksm.cxx
+++ b/src/adplug/core/ksm.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2006 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -48,7 +48,7 @@ CksmPlayer::load (VFSFile * fd, const CFileProvider & fp)
{
binistream *f;
int i;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
char *fn = new char[filename.length () + 9];
// file validation section
@@ -56,6 +56,7 @@ CksmPlayer::load (VFSFile * fd, const CFileProvider & fp)
{
AdPlug_LogWrite ("CksmPlayer::load(,\"%s\"): File doesn't have '.ksm' "
"extension! Rejected!\n", filename.c_str ());
+ delete[]fn;
return false;
}
AdPlug_LogWrite ("*** CksmPlayer::load(,\"%s\") ***\n", filename.c_str ());
diff --git a/src/adplug/core/lds.cxx b/src/adplug/core/lds.cxx
index 39f9fbf..1580c51 100644
--- a/src/adplug/core/lds.cxx
+++ b/src/adplug/core/lds.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2004 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -96,7 +96,7 @@ CldsPlayer::load (VFSFile * fd, const CFileProvider & fp)
binistream *f;
unsigned int i, j;
SoundBank *sb;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
// file validation section (actually just an extension check)
f = fp.open (fd);
diff --git a/src/adplug/core/mid.cxx b/src/adplug/core/mid.cxx
index da918a6..6f57e06 100644
--- a/src/adplug/core/mid.cxx
+++ b/src/adplug/core/mid.cxx
@@ -1,17 +1,17 @@
/*
* Adplug - Replayer for many OPL2/OPL3 audio file formats.
* Copyright (C) 1999 - 2005 Simon Peter, <dn.tlp@gmx.net>, et al.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
- *
+ *
* This library 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
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -280,7 +280,7 @@ CmidPlayer::load (VFSFile * fd, const CFileProvider & fp)
return false;
int good;
unsigned char s[6];
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
f->readString ((char *) s, 6);
good = 0;
@@ -818,7 +818,7 @@ CmidPlayer::update ()
if (w!=0)
{
midiprintf("\n<%d>",w);
- f =
+ f =
((float)w/(float)deltas)*((float)msqtr/(float)1000000);
if (doing==1) f=0; //not playing yet. don't wait yet
}
diff --git a/src/adplug/core/mkj.cxx b/src/adplug/core/mkj.cxx
index 89caa02..6f7087e 100644
--- a/src/adplug/core/mkj.cxx
+++ b/src/adplug/core/mkj.cxx
@@ -82,7 +82,7 @@ CmkjPlayer::load (VFSFile * fd, const CFileProvider & fp)
AdPlug_LogWrite
("CmkjPlayer::load(\"%s\"): loaded file ver %.2f, %d channels,"
- " %d notes/channel.\n", fd->uri, ver, maxchannel, maxnotes);
+ " %d notes/channel.\n", vfs_get_filename (fd), ver, maxchannel, maxnotes);
fp.close (f);
rewind (0);
return true;
diff --git a/src/adplug/core/rix.cxx b/src/adplug/core/rix.cxx
index ef17c84..9df5f44 100644
--- a/src/adplug/core/rix.cxx
+++ b/src/adplug/core/rix.cxx
@@ -89,7 +89,7 @@ CrixPlayer::load (VFSFile * fd, const CFileProvider & fp)
if (!f)
return false;
unsigned long i = 0;
- std::string filename (fd->uri);
+ std::string filename (vfs_get_filename (fd));
if (stricmp (filename.substr (filename.length () - 4, 4).c_str (), ".mkf")
== 0)
diff --git a/src/adplug/core/rol.cxx b/src/adplug/core/rol.cxx
index 8e18a3c..aba8541 100644
--- a/src/adplug/core/rol.cxx
+++ b/src/adplug/core/rol.cxx
@@ -95,7 +95,7 @@ CrolPlayer::~CrolPlayer()
bool CrolPlayer::load(VFSFile *fd, const CFileProvider &fp)
{
binistream *f = fp.open(fd); if(!f) return false;
- std::string filename(fd->uri);
+ std::string filename(vfs_get_filename (fd));
char *fn = new char[filename.length()+12];
int i;
diff --git a/src/adplug/core/sa2.cxx b/src/adplug/core/sa2.cxx
index c6dd090..8a664fa 100644
--- a/src/adplug/core/sa2.cxx
+++ b/src/adplug/core/sa2.cxx
@@ -190,7 +190,7 @@ Csa2Loader::load (VFSFile * fd, const CFileProvider & fp)
AdPlug_LogWrite ("Csa2Loader::load(\"%s\"): sat_type = %x, nop = %d, "
"length = %d, restartpos = %d, activechan = %x, bpm = %d\n",
- fd->uri, sat_type, nop, length, restartpos, activechan,
+ vfs_get_filename (fd), sat_type, nop, length, restartpos, activechan,
bpm);
// track data
diff --git a/src/adplug/plugin.c b/src/adplug/plugin.c
index e1b4492..915e613 100644
--- a/src/adplug/plugin.c
+++ b/src/adplug/plugin.c
@@ -1,16 +1,6 @@
#include <audacious/plugin.h>
-void adplug_init(void);
-void adplug_quit(void);
-void adplug_about(void);
-void adplug_config(void);
-void adplug_stop(InputPlayback * data);
-gboolean adplug_play(InputPlayback * data, const gchar * filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause);
-void adplug_pause(InputPlayback * playback, gshort paused);
-void adplug_mseek (InputPlayback * playback, gulong time);
-void adplug_info_box(const gchar *filename);
-Tuple* adplug_get_tuple(const gchar *filename);
-int adplug_is_our_fd(const gchar * filename, VFSFile * fd);
+#include "adplug-xmms.h"
static const gchar *fmts[] =
{ "a2m", "adl", "amd", "bam", "cff", "cmf", "d00", "dfm", "dmo", "dro",
@@ -19,22 +9,16 @@ static const gchar *fmts[] =
"sng", "wlf", "xad", "xsm",
NULL };
-InputPlugin adplug_ip = {
- .description = "AdPlug (AdLib Sound Player)",
+AUD_INPUT_PLUGIN
+(
+ .name = "AdPlug (AdLib Sound Player)",
.init = adplug_init,
.cleanup = adplug_quit,
- .about = adplug_about,
- .configure = adplug_config,
.play = adplug_play,
.stop = adplug_stop,
.pause = adplug_pause,
.mseek = adplug_mseek,
- .file_info_box = adplug_info_box,
- .get_song_tuple = adplug_get_tuple,
+ .probe_for_tuple = adplug_get_tuple,
.is_our_file_from_vfs = adplug_is_our_fd,
- .vfs_extensions = fmts,
-};
-
-InputPlugin *adplug_iplist[] = { &adplug_ip, NULL };
-
-DECLARE_PLUGIN(adplug, NULL, NULL, adplug_iplist, NULL, NULL, NULL, NULL,NULL);
+ .extensions = fmts,
+)
diff --git a/src/alarm/Makefile b/src/alarm/Makefile
index a6dc97b..7069de6 100644
--- a/src/alarm/Makefile
+++ b/src/alarm/Makefile
@@ -9,5 +9,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PTHREAD_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${PTHREAD_LIBS}
diff --git a/src/alarm/alarm.c b/src/alarm/alarm.c
index ca1baeb..2a1cd0c 100644
--- a/src/alarm/alarm.c
+++ b/src/alarm/alarm.c
@@ -24,12 +24,7 @@
* the next time I get bored
*/
-/* this file really should get split/cleaned up sometime ;) */
-#include "config.h"
-
-#if STDC_HEADERS
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
#include <time.h>
#if TM_IN_SYS_TIME
@@ -45,17 +40,64 @@
#include <assert.h>
#include <math.h>
-#include <audacious/configdb.h>
#include <audacious/debug.h>
#include <audacious/drct.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
+#include <libaudgui/libaudgui-gtk.h>
#include "alarm.h"
+#include "config.h"
#include "interface.h"
#include "callbacks.h"
-static pthread_t start_tid; /* thread id of alarm loop */
-static pthread_t stop_tid; /* thread id of stop loop */
+static const gchar * const alarm_defaults[] = {
+ /* general */
+ "alarm_h", "6",
+ "alarm_m", "30",
+ "cmd_on", "FALSE",
+ "fading", "60",
+ "quietvol", "25",
+ "reminder_on", "FALSE",
+ "stop_h", "1",
+ "stop_m", "0",
+ "stop_on", "TRUE",
+ "volume", "80",
+
+ /* days */
+ "sun_flags", "3",
+ "sun_h", "6",
+ "sun_m", "30",
+ "mon_flags", "2",
+ "mon_h", "6",
+ "mon_m", "30",
+ "tue_flags", "2",
+ "tue_h", "6",
+ "tue_m", "30",
+ "wed_flags", "2",
+ "wed_h", "6",
+ "wed_m", "30",
+ "thu_flags", "2",
+ "thu_h", "6",
+ "thu_m", "30",
+ "fri_flags", "2",
+ "fri_h", "6",
+ "fri_m", "30",
+ "sat_flags", "2",
+ "sat_h", "6",
+ "sat_m", "30",
+ NULL};
+
+typedef struct {
+ pthread_t tid;
+ volatile gboolean is_valid;
+} alarm_thread_t;
+
+static gint timeout_source;
+static time_t play_start;
+
+static alarm_thread_t stop; /* thread id of stop loop */
static pthread_mutex_t fader_lock = PTHREAD_MUTEX_INITIALIZER;
static GeneralPlugin alarm_plugin;
@@ -128,47 +170,12 @@ static GtkWidget *alarm_dialog = NULL;
static GtkWidget *lookup_widget(GtkWidget *w, const gchar *name)
{
- GtkWidget *widget;
-
- widget = (GtkWidget*) gtk_object_get_data(GTK_OBJECT(w),
- name);
+ GtkWidget * widget = g_object_get_data ((GObject *) w, name);
g_return_val_if_fail(widget != NULL, NULL);
return widget;
}
-static void dialog_destroyed(GtkWidget *dialog, gpointer data)
-{
- AUDDBG("dialog destroyed\n");
- *(GtkObject**)data = NULL;
-}
-
-static inline gboolean dialog_visible(GtkWidget *dialog)
-{
- return(((dialog != NULL) && GTK_WIDGET_VISIBLE(dialog)));
-}
-
-/*
- * tell the user about that bug
- */
-static void alarm_warning(void)
-{
-
- static GtkWidget *warning_dialog = NULL;
-
- if(dialog_visible(warning_dialog))
- return;
-
- warning_dialog = create_warning_dialog();
-
- gtk_signal_connect(GTK_OBJECT(warning_dialog), "destroy",
- GTK_SIGNAL_FUNC(dialog_destroyed), &warning_dialog);
-
- gtk_widget_show_all(warning_dialog);
-
- return;
-}
-
/*
* the callback function that is called when the save button is
* pressed saves configuration to ~/.bmp/alarmconfig
@@ -176,32 +183,19 @@ static void alarm_warning(void)
void alarm_save(GtkButton *w, gpointer data)
{
int daynum = 0; // used to identify day number
- mcs_handle_t *conf;
-
- AUDDBG("alarm_save\n");
-
- conf = aud_cfg_db_open();
/*
* update the live values and write them out
*/
- alarm_h = alarm_conf.default_hour =
- gtk_spin_button_get_value_as_int(alarm_conf.alarm_h);
- aud_cfg_db_set_int(conf, "alarm", "alarm_h", alarm_h);
+ alarm_h = alarm_conf.default_hour = gtk_spin_button_get_value_as_int (alarm_conf.alarm_h);
+ aud_set_int ("alarm", "alarm_h", alarm_h);
- alarm_m = alarm_conf.default_min =
- gtk_spin_button_get_value_as_int(alarm_conf.alarm_m);
- aud_cfg_db_set_int(conf, "alarm", "alarm_m", alarm_m);
+ alarm_m = alarm_conf.default_min = gtk_spin_button_get_value_as_int (alarm_conf.alarm_m);
+ aud_set_int ("alarm", "alarm_m", alarm_m);
-
- stop_h =
- gtk_spin_button_get_value_as_int( alarm_conf.stop_h);
-
- stop_m =
- gtk_spin_button_get_value_as_int(alarm_conf.stop_m);
-
- stop_on =
- gtk_toggle_button_get_active(alarm_conf.stop_on);
+ stop_h = gtk_spin_button_get_value_as_int (alarm_conf.stop_h);
+ stop_m = gtk_spin_button_get_value_as_int (alarm_conf.stop_m);
+ stop_on = gtk_toggle_button_get_active (alarm_conf.stop_on);
/* days of the week */
for(; daynum < 7; daynum++)
@@ -219,210 +213,105 @@ void alarm_save(GtkButton *w, gpointer data)
alarm_conf.day[daynum].min =
gtk_spin_button_get_value_as_int(alarm_conf.day[daynum].spin_min);
- aud_cfg_db_set_int(conf, "alarm", day_flags[daynum], alarm_conf.day[daynum].flags);
- aud_cfg_db_set_int(conf, "alarm", day_h[daynum], alarm_conf.day[daynum].hour);
- aud_cfg_db_set_int(conf, "alarm", day_m[daynum], alarm_conf.day[daynum].min);
+ aud_set_int ("alarm", day_flags[daynum], alarm_conf.day[daynum].flags);
+ aud_set_int ("alarm", day_h[daynum], alarm_conf.day[daynum].hour);
+ aud_set_int ("alarm", day_m[daynum], alarm_conf.day[daynum].min);
}
/* END: days of week */
- volume =
- gtk_range_get_adjustment(alarm_conf.volume)->value;
- aud_cfg_db_set_int(conf, "alarm", "volume", volume);
+ volume = gtk_range_get_value (alarm_conf.volume);
+ aud_set_int ("alarm", "volume", volume);
- quietvol =
- gtk_range_get_adjustment(alarm_conf.quietvol)->value;
- aud_cfg_db_set_int(conf, "alarm", "quietvol", quietvol);
+ quietvol = gtk_range_get_value (alarm_conf.quietvol);
+ aud_set_int ("alarm", "quietvol", quietvol);
- fading =
- gtk_spin_button_get_value_as_int(alarm_conf.fading);
- //xmms_cfg_write_int(conf, "alarm", "fading", fading);
+ fading = gtk_spin_button_get_value_as_int (alarm_conf.fading);
- /* lets check to see if we need to show the bug warning */
- if((stop_on == TRUE) &&
- ((((stop_h * 60) + stop_m) * 60) < (fading + 65)))
- {
- AUDDBG("Displaying bug warning, stop %dh %dm, fade %d\n",
- stop_h, stop_m, fading);
- alarm_warning();
- }
- else if((stop_on == TRUE) && (fading < 10))
- {
- AUDDBG("Displaying bug warning, stop %dh %dm, fade %d\n",
- stop_h, stop_m, fading);
- alarm_warning();
- }
- else
- {
- /* write the new values */
- aud_cfg_db_set_int(conf, "alarm", "stop_h", stop_h);
- aud_cfg_db_set_int(conf, "alarm", "stop_m", stop_m);
- aud_cfg_db_set_int(conf, "alarm", "fading", fading);
- aud_cfg_db_set_bool(conf, "alarm", "stop_on", stop_on);
- }
+ /* write the new values */
+ aud_set_int ("alarm", "stop_h", stop_h);
+ aud_set_int ("alarm", "stop_m", stop_m);
+ aud_set_int ("alarm", "fading", fading);
+ aud_set_bool ("alarm", "stop_on", stop_on);
+ g_free (cmdstr);
+ cmdstr = gtk_editable_get_chars ((GtkEditable *) alarm_conf.cmdstr, 0, -1);
+ aud_set_string ("alarm", "cmdstr", cmdstr);
- g_free(cmdstr);
- cmdstr = gtk_editable_get_chars(GTK_EDITABLE(alarm_conf.cmdstr),
- 0, -1);
- aud_cfg_db_set_string(conf, "alarm", "cmdstr", cmdstr);
-
- cmd_on =
- gtk_toggle_button_get_active(alarm_conf.cmd_on);
- aud_cfg_db_set_bool(conf, "alarm", "cmd_on", cmd_on);
+ cmd_on = gtk_toggle_button_get_active (alarm_conf.cmd_on);
+ aud_set_bool ("alarm", "cmd_on", cmd_on);
- g_free(playlist);
- playlist = gtk_editable_get_chars(GTK_EDITABLE(alarm_conf.playlist),
- 0, -1);
- aud_cfg_db_set_string(conf, "alarm", "playlist", playlist);
+ g_free (playlist);
+ playlist = gtk_editable_get_chars ((GtkEditable *) alarm_conf.playlist, 0, -1);
+ aud_set_string ("alarm", "playlist", playlist);
/* reminder */
- g_free(alarm_conf.reminder_msg);
- alarm_conf.reminder_msg = gtk_editable_get_chars(GTK_EDITABLE(alarm_conf.reminder),
- 0, -1);
- aud_cfg_db_set_string(conf, "alarm", "reminder_msg", alarm_conf.reminder_msg);
-
- alarm_conf.reminder_on =
- gtk_toggle_button_get_active(alarm_conf.reminder_cb);
- aud_cfg_db_set_bool(conf, "alarm", "reminder_on", alarm_conf.reminder_on);
+ g_free (alarm_conf.reminder_msg);
+ alarm_conf.reminder_msg = gtk_editable_get_chars ((GtkEditable *) alarm_conf.reminder, 0, -1);
+ aud_set_string ("alarm", "reminder_msg", alarm_conf.reminder_msg);
- aud_cfg_db_close(conf);
+ alarm_conf.reminder_on = gtk_toggle_button_get_active (alarm_conf.reminder_cb);
+ aud_set_bool ("alarm", "reminder_on", alarm_conf.reminder_on);
}
/*
* read the current configuration from the file
*/
-static void alarm_read_config()
+static void alarm_read_config(void)
{
int daynum = 0; // used for day number
- mcs_handle_t *conf;
-
- AUDDBG("alarm_read_config\n");
- conf = aud_cfg_db_open();
+ aud_config_set_defaults ("alarm", alarm_defaults);
- if(!aud_cfg_db_get_int(conf, "alarm", "alarm_h", &alarm_h))
- alarm_h = DEFAULT_ALARM_HOUR;
- if(!aud_cfg_db_get_int(conf, "alarm", "alarm_m", &alarm_m))
- alarm_m = DEFAULT_ALARM_MIN;
+ alarm_h = aud_get_int ("alarm", "alarm_h");
+ alarm_m = aud_get_int ("alarm", "alarm_m");
/* save them here too */
alarm_conf.default_hour = alarm_h;
alarm_conf.default_min = alarm_m;
- if(!aud_cfg_db_get_int( conf, "alarm", "stop_h", &stop_h))
- stop_h = DEFAULT_STOP_HOURS;
- if(!aud_cfg_db_get_int( conf, "alarm", "stop_m", &stop_m))
- stop_m = DEFAULT_STOP_MINS;
- if(!aud_cfg_db_get_bool(conf, "alarm", "stop_on", &stop_on))
- stop_on = TRUE;
+ stop_h = aud_get_int ("alarm", "stop_h");
+ stop_m = aud_get_int ("alarm", "stop_m");
+ stop_on = aud_get_bool ("alarm", "stop_on");
- if(!aud_cfg_db_get_int(conf, "alarm", "volume", &volume))
- volume = DEFAULT_VOLUME;
- if(!aud_cfg_db_get_int(conf, "alarm", "quietvol", &quietvol))
- quietvol = DEFAULT_QUIET_VOL;
+ volume = aud_get_int ("alarm", "volume");
+ quietvol = aud_get_int ("alarm", "quietvol");
- if(!aud_cfg_db_get_int(conf, "alarm", "fading", &fading))
- fading = DEFAULT_FADING;
+ fading = aud_get_int ("alarm", "fading");
- g_free(cmdstr);
- if(!aud_cfg_db_get_string(conf, "alarm", "cmdstr", &cmdstr))
- cmdstr = g_strdup("");
- if(!aud_cfg_db_get_bool(conf, "alarm", "cmd_on", &cmd_on))
- cmd_on = FALSE;
+ g_free (cmdstr);
+ cmdstr = aud_get_string ("alarm", "cmdstr");
+ cmd_on = aud_get_bool ("alarm", "cmd_on");
- g_free(playlist);
- if(!aud_cfg_db_get_string(conf, "alarm", "playlist", &playlist))
- playlist = g_strdup("");
+ g_free (playlist);
+ playlist = aud_get_string ("alarm", "playlist");
- g_free(alarm_conf.reminder_msg);
- if(!aud_cfg_db_get_string(conf, "alarm", "reminder_msg", &alarm_conf.reminder_msg))
- alarm_conf.reminder_msg = g_strdup("");
- if(!aud_cfg_db_get_bool(conf, "alarm", "reminder_on", &alarm_conf.reminder_on))
- alarm_conf.reminder_on = FALSE;
+ g_free (alarm_conf.reminder_msg);
+ alarm_conf.reminder_msg = aud_get_string ("alarm", "reminder_msg");
+ alarm_conf.reminder_on = aud_get_bool ("alarm", "reminder_on");
/* day flags and times */
for(; daynum < 7; daynum++)
{
/* read the flags */
- if(!aud_cfg_db_get_int(conf, "alarm", day_flags[daynum], &alarm_conf.day[daynum].flags)) {
- // only turn alarm off by default on a sunday
- if(daynum != 0)
- alarm_conf.day[daynum].flags = DEFAULT_FLAGS;
- else
- alarm_conf.day[daynum].flags = DEFAULT_FLAGS | ALARM_OFF;
- }
+ alarm_conf.day[daynum].flags = aud_get_int ("alarm", day_flags[daynum]);
/* read the times */
- if(!aud_cfg_db_get_int(conf, "alarm", day_h[daynum], &alarm_conf.day[daynum].hour))
- alarm_conf.day[daynum].hour = DEFAULT_ALARM_HOUR;
-
- if(!aud_cfg_db_get_int(conf, "alarm", day_m[daynum], &alarm_conf.day[daynum].min))
- alarm_conf.day[daynum].min = DEFAULT_ALARM_MIN;
+ alarm_conf.day[daynum].hour = aud_get_int ("alarm", day_h[daynum]);
+ alarm_conf.day[daynum].min = aud_get_int ("alarm", day_m[daynum]);
}
-
- aud_cfg_db_close(conf);
- AUDDBG("END alarm_read_config\n");
}
/*
* display an about box
*/
-static void alarm_about()
+static void alarm_about(void)
{
static GtkWidget *about_dialog = NULL;
- AUDDBG("alarm_about\n");
-
- if(dialog_visible(about_dialog))
- return;
-
- about_dialog = create_about_dialog();
-
- gtk_signal_connect(GTK_OBJECT(about_dialog), "destroy",
- GTK_SIGNAL_FUNC(dialog_destroyed), &about_dialog);
-
- gtk_widget_show_all(about_dialog);
-
- return;
-}
-
-/*
- * create a playlist file selection dialog
- */
-static void alarm_playlist_browse(GtkButton *button, gpointer data)
-{
- GtkWidget *fs;
- gchar *dirname, *path;
-
- dirname = g_dirname(playlist);
- AUDDBG("dirname = %s\n", dirname);
- path = g_strdup_printf("%s/", dirname);
- AUDDBG("path = %s\n", path);
- g_free(dirname);
-
- fs = create_playlist_fileselection();
-
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(fs), path);
- g_free(path);
-
- gtk_widget_show_all(fs);
-}
-
-/*
- * save selected playlist to the corresponding text entry
- */
-void alarm_store_playlistname(GtkButton *button, gpointer data)
-{
- GtkFileSelection *fs = GTK_FILE_SELECTION(data);
- gchar *plist;
-
- AUDDBG("alarm_store_playlistname\n");
-
- plist = g_strdup(gtk_file_selection_get_filename(fs));
-
- gtk_entry_set_text(alarm_conf.playlist, plist);
- g_free(plist);
+ audgui_simple_message (& about_dialog, GTK_MESSAGE_INFO, _("About Alarm"),
+ _("A plugin that can be used to start playing at a certain time.\n\n"
+ "Originally written by Adam Feakin and Daniel Stodden."));
}
/*
@@ -433,12 +322,7 @@ static void alarm_configure(void)
int daynum = 0; // used to loop days
GtkWidget *w;
- AUDDBG("alarm_configure\n");
-
- /*
- * dont want to show more than one config window
- */
- if(dialog_visible(config_dialog))
+ if (config_dialog)
return;
alarm_read_config();
@@ -471,18 +355,18 @@ static void alarm_configure(void)
w = lookup_widget(config_dialog, "vol_scale");
alarm_conf.volume = GTK_RANGE(w);
gtk_range_set_adjustment(alarm_conf.volume,
- GTK_ADJUSTMENT(gtk_adjustment_new(volume,
- 0,
- 100, 1,
- 5, 0)));
+ GTK_ADJUSTMENT(gtk_adjustment_new(volume,
+ 0,
+ 100, 1,
+ 5, 0)));
w = lookup_widget(config_dialog, "quiet_vol_scale");
alarm_conf.quietvol = GTK_RANGE(w);
gtk_range_set_adjustment(alarm_conf.quietvol,
- GTK_ADJUSTMENT(gtk_adjustment_new(quietvol,
- 0,
- 100, 1,
- 5, 0)));
+ GTK_ADJUSTMENT(gtk_adjustment_new(quietvol,
+ 0,
+ 100, 1,
+ 5, 0)));
/* days of week */
for(; daynum < 7; daynum++)
@@ -490,7 +374,7 @@ static void alarm_configure(void)
w = lookup_widget(config_dialog, day_cb[daynum]);
alarm_conf.day[daynum].cb = GTK_CHECK_BUTTON(w);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alarm_conf.day[daynum].cb),
- !(alarm_conf.day[daynum].flags & ALARM_OFF));
+ !(alarm_conf.day[daynum].flags & ALARM_OFF));
w = lookup_widget(config_dialog, day_def[daynum]);
alarm_conf.day[daynum].cb_def = GTK_CHECK_BUTTON(w);
@@ -563,12 +447,8 @@ static void alarm_configure(void)
alarm_conf.reminder_cb = GTK_TOGGLE_BUTTON(w);
gtk_toggle_button_set_active(alarm_conf.reminder_cb, alarm_conf.reminder_on);
- w = lookup_widget(config_dialog, "playlist_browse_button");
- gtk_signal_connect(GTK_OBJECT(w), "clicked",
- GTK_SIGNAL_FUNC(alarm_playlist_browse), NULL);
-
- gtk_signal_connect(GTK_OBJECT(config_dialog), "destroy",
- GTK_SIGNAL_FUNC(dialog_destroyed), &config_dialog);
+ g_signal_connect (config_dialog, "destroy", (GCallback) gtk_widget_destroyed,
+ & config_dialog);
gtk_widget_show_all(config_dialog);
@@ -672,9 +552,9 @@ static void threadsleep(float x)
return;
}
-static inline pthread_t alarm_thread_create(void *(*start_routine)(void *), void *args, unsigned int detach)
+static inline alarm_thread_t alarm_thread_create(void *(*start_routine)(void *), void *args, unsigned int detach)
{
- pthread_t tid;
+ alarm_thread_t thrd;
pthread_attr_t attr;
pthread_attr_init(&attr);
@@ -686,9 +566,9 @@ static inline pthread_t alarm_thread_create(void *(*start_routine)(void *), void
pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
- pthread_create(&tid, &attr, start_routine, args);
+ thrd.is_valid = (pthread_create(&thrd.tid, &attr, start_routine, args) == 0);
- return(tid);
+ return thrd;
}
static void *alarm_fade(void *arg)
@@ -744,7 +624,7 @@ static void *alarm_stop_thread( void *args )
{
gint currvol;
fader fade_vols;
- pthread_t f_tid;
+ alarm_thread_t f;
AUDDBG("alarm_stop_thread\n");
@@ -756,7 +636,7 @@ static void *alarm_stop_thread( void *args )
AUDDBG("alarm_stop triggered\n");
- if (dialog_visible(alarm_dialog))
+ if (alarm_dialog)
gtk_widget_destroy(alarm_dialog);
aud_drct_get_volume_main(&currvol),
@@ -766,9 +646,9 @@ static void *alarm_stop_thread( void *args )
fade_vols.end = 0;
/* The fader thread locks the fader_mutex now */
- f_tid = alarm_thread_create(alarm_fade, &fade_vols, 0);
+ f = alarm_thread_create(alarm_fade, &fade_vols, 0);
- pthread_join(f_tid, NULL);
+ pthread_join(f.tid, NULL);
aud_drct_stop();
/* might as well set the volume to something higher than zero so we
@@ -784,46 +664,30 @@ static void *alarm_stop_thread( void *args )
void alarm_stop_cancel(GtkButton *w, gpointer data)
{
AUDDBG("alarm_stop_cancel\n");
- pthread_cancel(stop_tid);
+ if (pthread_cancel(stop.tid) == 0) {
+ stop.is_valid = FALSE;
+ }
}
/* the main alarm thread */
-static void *alarm_start_thread(void *args)
+static gboolean alarm_timeout (void * unused)
{
struct tm *currtime;
time_t timenow;
- unsigned int play_start = 0;
guint today;
- /* give it time to set start_tid to something */
- threadsleep(1);
-
- while(start_tid != 0)
- {
- /* sit around and wait for the faders to not be doing anything */
- AUDDBG("Waiting for fader to be unlocked..");
- pthread_mutex_lock(&fader_lock);
- AUDDBG("Ok\n");
- pthread_mutex_unlock(&fader_lock);
-
AUDDBG("Getting time\n");
timenow = time(NULL);
currtime = localtime(&timenow);
today = currtime->tm_wday;
AUDDBG("Today is %d\n", today);
- /* see if its time to do something */
- AUDDBG("Checking Day\n");
-
- /* Had to put something here so I put the hour string.
- ** Its only debug stuff anyway */
- AUDDBG("%s",day_h[today]);
+ /* already went off? */
+ if (timenow < play_start + 60)
+ return TRUE;
if(alarm_conf.day[today].flags & ALARM_OFF)
- {
- threadsleep(8.5);
- continue;
- }
+ return TRUE;
else
{
/* set the alarm_h and alarm_m for today, if not default */
@@ -844,10 +708,7 @@ static void *alarm_start_thread(void *args)
AUDDBG("Checking time (%d:%d)\n", currtime->tm_hour, currtime->tm_min);
if((currtime->tm_hour != alarm_h) || (currtime->tm_min != alarm_m))
- {
- threadsleep(8.5);
- continue;
- }
+ return TRUE;
if(cmd_on == TRUE)
{
@@ -858,17 +719,12 @@ static void *alarm_start_thread(void *args)
}
}
- AUDDBG("strcmp playlist, playlist is [%s]\n", playlist);
- if(strcmp(playlist, ""))
- {
- AUDDBG("playlist is not blank, aparently\n");
- GList list;
-
- list.prev = list.next = NULL;
- list.data = playlist;
+ bool_t started = FALSE;
- aud_drct_pl_clear();
- aud_drct_pl_add_list (& list, -1);
+ if (playlist[0])
+ {
+ aud_drct_pl_open (playlist);
+ started = TRUE;
}
if(fading)
@@ -880,7 +736,9 @@ static void *alarm_start_thread(void *args)
/* start playing */
play_start = time(NULL);
- aud_drct_play();
+
+ if (! started)
+ aud_drct_play ();
/* fade volume */
fade_vols.start = quietvol;
@@ -906,12 +764,10 @@ static void *alarm_start_thread(void *args)
GtkWidget *reminder_dialog;
AUDDBG("Showing reminder '%s'\n", alarm_conf.reminder_msg);
- GDK_THREADS_ENTER();
reminder_dialog = (GtkWidget*) create_reminder_dialog(alarm_conf.reminder_msg);
- gtk_signal_connect(GTK_OBJECT(reminder_dialog), "destroy",
- GTK_SIGNAL_FUNC(dialog_destroyed), &reminder_dialog);
+ g_signal_connect (reminder_dialog, "destroy", (GCallback)
+ gtk_widget_destroyed, & reminder_dialog);
gtk_widget_show_all(reminder_dialog);
- GDK_THREADS_LEAVE();
}
/* bring up the wakeup call dialog if stop_on is set TRUE, this
@@ -923,50 +779,18 @@ static void *alarm_start_thread(void *args)
*/
if(stop_on == TRUE)
{
- /* ok, so when we want to open dialogs in threaded programs
- * we use this do we?
- * anyone?
- */
- GDK_THREADS_ENTER();
- {
- AUDDBG("stop_on is true\n");
alarm_dialog = create_alarm_dialog();
- AUDDBG("created alarm dialog, %p\n", alarm_dialog);
+ g_signal_connect (alarm_dialog, "destroy", (GCallback)
+ gtk_widget_destroyed, & alarm_dialog);
- gtk_signal_connect(GTK_OBJECT(alarm_dialog), "destroy",
- GTK_SIGNAL_FUNC(dialog_destroyed), &alarm_dialog);
- AUDDBG("attached destroy signal to alarm dialog, %p\n", alarm_dialog);
gtk_widget_show_all(alarm_dialog);
- AUDDBG("dialog now showing\n");
AUDDBG("now starting stop thread\n");
- stop_tid = alarm_thread_create(alarm_stop_thread, NULL, 0);
- AUDDBG("Created wakeup dialog and started stop thread(%d)\n", (int)stop_tid);
-
- }
- GDK_THREADS_LEAVE();
-
- /* now wait for the stop thread */
- AUDDBG("Waiting for stop to stop.... (%d)", (int)stop_tid);
- pthread_join(stop_tid, NULL);
- /* loop until we are out of the starting minute */
- while(time(NULL) < (play_start + 61))
- {
- AUDDBG("Waiting until out of starting minute\n");
- threadsleep(5.0);
- }
- AUDDBG("OK\n");
- }
- /* loop until we are out of the starting minute */
- while(time(NULL) < (play_start + 61))
- {
- threadsleep(5.0);
+ stop = alarm_thread_create(alarm_stop_thread, NULL, 0);
+ AUDDBG("Created wakeup dialog and started stop thread\n");
}
- threadsleep(fading);
- }
- AUDDBG("Main thread has gone...\n");
- return NULL;
+ return TRUE;
}
/*
@@ -974,30 +798,35 @@ static void *alarm_start_thread(void *args)
* opens the config file and reads the value, creates a new
* config in memory if the file doesnt exist and sets default vals
*/
-static void alarm_init()
+static gboolean alarm_init (void)
{
AUDDBG("alarm_init\n");
alarm_conf.reminder_msg = NULL;
alarm_read_config();
- /* start the main thread running */
- start_tid = alarm_thread_create(alarm_start_thread, NULL, 1);
+ timeout_source = g_timeout_add_seconds (10, alarm_timeout, NULL);
+
+ return TRUE;
}
/*
* kill the main thread
*/
-static void alarm_cleanup()
+static void alarm_cleanup(void)
{
AUDDBG("alarm_cleanup\n");
- if (start_tid)
- pthread_cancel(start_tid);
- start_tid = 0;
- if(stop_tid)
- pthread_cancel(stop_tid);
- stop_tid = 0;
+ if (timeout_source)
+ {
+ g_source_remove (timeout_source);
+ timeout_source = 0;
+ }
+
+ if (stop.is_valid) {
+ pthread_cancel(stop.tid);
+ stop.is_valid = FALSE;
+ }
g_free(alarm_conf.reminder_msg);
alarm_conf.reminder_msg = NULL;
@@ -1007,14 +836,11 @@ static void alarm_cleanup()
cmdstr = NULL;
}
-static GeneralPlugin alarm_plugin =
-{
- .description = "Alarm "VERSION,
+AUD_GENERAL_PLUGIN
+(
+ .name = "Alarm",
.init = alarm_init,
.about = alarm_about,
.configure = alarm_configure,
.cleanup = alarm_cleanup,
-};
-
-GeneralPlugin *alarm_gplist[] = { &alarm_plugin, NULL };
-SIMPLE_GENERAL_PLUGIN(alarm, alarm_gplist);
+)
diff --git a/src/alarm/alarm.h b/src/alarm/alarm.h
index c2ff020..3cddab5 100644
--- a/src/alarm/alarm.h
+++ b/src/alarm/alarm.h
@@ -18,16 +18,6 @@
#define ALARM_OFF (1 << 0)
#define ALARM_DEFAULT (1 << 1)
-/* defaults */
-#define DEFAULT_ALARM_HOUR 06
-#define DEFAULT_ALARM_MIN 30
-#define DEFAULT_STOP_HOURS 01
-#define DEFAULT_STOP_MINS 00
-#define DEFAULT_VOLUME 80
-#define DEFAULT_FADING 60
-#define DEFAULT_QUIET_VOL 25
-#define DEFAULT_FLAGS ALARM_DEFAULT
-
typedef struct AlarmDay {
GtkCheckButton *cb;
GtkCheckButton *cb_def;
@@ -45,6 +35,3 @@ typedef struct Fader {
#endif /* __ALARM_H */
-/*
- * vi:ai:expandtab:ts=2 sts=2 shiftwidth=2:nowrap:
- */
diff --git a/src/alarm/callbacks.h b/src/alarm/callbacks.h
index da79d39..485bd70 100644
--- a/src/alarm/callbacks.h
+++ b/src/alarm/callbacks.h
@@ -14,10 +14,6 @@ alarm_stop_cancel (GtkButton *button,
gpointer user_data);
void
-alarm_store_playlistname (GtkButton *button,
- gpointer user_data);
-
-void
on_mon_def_toggled (GtkToggleButton *togglebutton,
gpointer user_data);
diff --git a/src/alarm/interface.c b/src/alarm/interface.c
index 966110d..2deac39 100644
--- a/src/alarm/interface.c
+++ b/src/alarm/interface.c
@@ -14,77 +14,9 @@
#include "callbacks.h"
#include "interface.h"
-#include "support.h"
#include <audacious/i18n.h>
-
-GtkWidget*
-create_about_dialog (void)
-{
- GtkWidget *about_dialog;
- GtkWidget *dialog_vbox2;
- GtkWidget *frame6;
- GtkWidget *label18;
- GtkWidget *dialog_action_area2;
- GtkWidget *close;
-
- about_dialog = gtk_dialog_new ();
- gtk_widget_set_name (about_dialog, "about_dialog");
- gtk_object_set_data (GTK_OBJECT (about_dialog), "about_dialog", about_dialog);
- gtk_window_set_title (GTK_WINDOW (about_dialog), _("About XMMS Alarm"));
-/*
- * GTK2 hack
- * GTK_WINDOW (about_dialog)->type = GTK_WINDOW_DIALOG;
- */
- GTK_WINDOW (about_dialog)->type = GTK_WINDOW_TOPLEVEL;
- gtk_window_set_policy (GTK_WINDOW (about_dialog), FALSE, FALSE, TRUE);
-
- dialog_vbox2 = GTK_DIALOG (about_dialog)->vbox;
- gtk_widget_set_name (dialog_vbox2, "dialog_vbox2");
- gtk_object_set_data (GTK_OBJECT (about_dialog), "dialog_vbox2", dialog_vbox2);
- gtk_widget_show (dialog_vbox2);
-
- frame6 = gtk_frame_new (_("XMMS Alarm"));
- gtk_widget_set_name (frame6, "frame6");
- gtk_widget_ref (frame6);
- gtk_object_set_data_full (GTK_OBJECT (about_dialog), "frame6", frame6,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (frame6);
- gtk_box_pack_start (GTK_BOX (dialog_vbox2), frame6, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame6), 10);
-
- label18 = gtk_label_new (_("An XMMS plugin which can be used\nto start playing at a certain time.\n\nSend all complaints to:\nAdam Feakin <adamf@snika.uklinux.net>\nDaniel Stodden <stodden@in.tum.de>\n\nhttp://www.snika.uklinux.net/xmms-alarm/"));
- gtk_widget_set_name (label18, "label18");
- gtk_widget_ref (label18);
- gtk_object_set_data_full (GTK_OBJECT (about_dialog), "label18", label18,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (label18);
- gtk_container_add (GTK_CONTAINER (frame6), label18);
- gtk_misc_set_padding (GTK_MISC (label18), 10, 20);
-
- dialog_action_area2 = GTK_DIALOG (about_dialog)->action_area;
- gtk_widget_set_name (dialog_action_area2, "dialog_action_area2");
- gtk_object_set_data (GTK_OBJECT (about_dialog), "dialog_action_area2", dialog_action_area2);
- gtk_widget_show (dialog_action_area2);
- gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area2), 10);
-
- close = gtk_button_new_with_label (_("Close"));
- gtk_widget_set_name (close, "close");
- gtk_widget_ref (close);
- gtk_object_set_data_full (GTK_OBJECT (about_dialog), "close", close,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (close);
- gtk_box_pack_start (GTK_BOX (dialog_action_area2), close, FALSE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (close, GTK_CAN_DEFAULT);
-
- gtk_signal_connect_object (GTK_OBJECT (close), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (about_dialog));
-
- gtk_widget_grab_focus (close);
- gtk_widget_grab_default (close);
- return about_dialog;
-}
+#include <audacious/gtk-compat.h>
GtkWidget*
create_alarm_dialog (void)
@@ -97,45 +29,44 @@ create_alarm_dialog (void)
alarm_dialog = gtk_dialog_new ();
gtk_widget_set_name (alarm_dialog, "alarm_dialog");
- gtk_object_set_data (GTK_OBJECT (alarm_dialog), "alarm_dialog", alarm_dialog);
+ g_object_set_data (G_OBJECT (alarm_dialog), "alarm_dialog", alarm_dialog);
gtk_window_set_title (GTK_WINDOW (alarm_dialog), _("Alarm"));
- gtk_window_set_policy (GTK_WINDOW (alarm_dialog), FALSE, FALSE, FALSE);
- dialog_vbox3 = GTK_DIALOG (alarm_dialog)->vbox;
+ dialog_vbox3 = gtk_dialog_get_content_area ((GtkDialog *) alarm_dialog);
gtk_widget_set_name (dialog_vbox3, "dialog_vbox3");
- gtk_object_set_data (GTK_OBJECT (alarm_dialog), "dialog_vbox3", dialog_vbox3);
+ g_object_set_data (G_OBJECT (alarm_dialog), "dialog_vbox3", dialog_vbox3);
gtk_widget_show (dialog_vbox3);
label19 = gtk_label_new (_("This is your wakeup call."));
gtk_widget_set_name (label19, "label19");
- gtk_widget_ref (label19);
- gtk_object_set_data_full (GTK_OBJECT (alarm_dialog), "label19", label19,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label19);
+ g_object_set_data_full (G_OBJECT (alarm_dialog), "label19", label19,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label19);
gtk_box_pack_start (GTK_BOX (dialog_vbox3), label19, FALSE, TRUE, 0);
gtk_misc_set_padding (GTK_MISC (label19), 10, 10);
- dialog_action_area3 = GTK_DIALOG (alarm_dialog)->action_area;
+ dialog_action_area3 = gtk_dialog_get_action_area ((GtkDialog *) alarm_dialog);
gtk_widget_set_name (dialog_action_area3, "dialog_action_area3");
- gtk_object_set_data (GTK_OBJECT (alarm_dialog), "dialog_action_area3", dialog_action_area3);
+ g_object_set_data (G_OBJECT (alarm_dialog), "dialog_action_area3", dialog_action_area3);
gtk_widget_show (dialog_action_area3);
gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area3), 10);
button9 = gtk_button_new_with_label (_("OK"));
gtk_widget_set_name (button9, "button9");
- gtk_widget_ref (button9);
- gtk_object_set_data_full (GTK_OBJECT (alarm_dialog), "button9", button9,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (button9);
+ g_object_set_data_full (G_OBJECT (alarm_dialog), "button9", button9,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (button9);
gtk_box_pack_start (GTK_BOX (dialog_action_area3), button9, FALSE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (button9, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button9, TRUE);
- gtk_signal_connect (GTK_OBJECT (button9), "clicked",
- GTK_SIGNAL_FUNC (alarm_stop_cancel),
+ g_signal_connect (G_OBJECT (button9), "clicked",
+ G_CALLBACK (alarm_stop_cancel),
NULL);
- gtk_signal_connect_object (GTK_OBJECT (button9), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (alarm_dialog));
+ g_signal_connect_swapped (G_OBJECT (button9), "clicked",
+ G_CALLBACK (gtk_widget_destroy),
+ G_OBJECT (alarm_dialog));
gtk_widget_grab_focus (button9);
gtk_widget_grab_default (button9);
@@ -143,108 +74,6 @@ create_alarm_dialog (void)
}
GtkWidget*
-create_playlist_fileselection (void)
-{
- GtkWidget *playlist_fileselection;
- GtkWidget *ok_button1;
- GtkWidget *cancel_button1;
-
- playlist_fileselection = gtk_file_selection_new (_("Select Playlist"));
- gtk_widget_set_name (playlist_fileselection, "playlist_fileselection");
- gtk_object_set_data (GTK_OBJECT (playlist_fileselection), "playlist_fileselection", playlist_fileselection);
- gtk_container_set_border_width (GTK_CONTAINER (playlist_fileselection), 10);
- gtk_window_set_modal (GTK_WINDOW (playlist_fileselection), TRUE);
-
- ok_button1 = GTK_FILE_SELECTION (playlist_fileselection)->ok_button;
- gtk_widget_set_name (ok_button1, "ok_button1");
- gtk_object_set_data (GTK_OBJECT (playlist_fileselection), "ok_button1", ok_button1);
- gtk_widget_show (ok_button1);
- GTK_WIDGET_SET_FLAGS (ok_button1, GTK_CAN_DEFAULT);
-
- cancel_button1 = GTK_FILE_SELECTION (playlist_fileselection)->cancel_button;
- gtk_widget_set_name (cancel_button1, "cancel_button1");
- gtk_object_set_data (GTK_OBJECT (playlist_fileselection), "cancel_button1", cancel_button1);
- gtk_widget_show (cancel_button1);
- GTK_WIDGET_SET_FLAGS (cancel_button1, GTK_CAN_DEFAULT);
-
- gtk_signal_connect (GTK_OBJECT (ok_button1), "clicked",
- GTK_SIGNAL_FUNC (alarm_store_playlistname),
- playlist_fileselection);
- gtk_signal_connect_object (GTK_OBJECT (ok_button1), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (playlist_fileselection));
- gtk_signal_connect_object (GTK_OBJECT (cancel_button1), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (playlist_fileselection));
-
- return playlist_fileselection;
-}
-
-GtkWidget*
-create_warning_dialog (void)
-{
- GtkWidget *warning_dialog;
- GtkWidget *dialog_vbox4;
- GtkWidget *frame9;
- GtkWidget *label70;
- GtkWidget *dialog_action_area4;
- GtkWidget *button10;
-
- warning_dialog = gtk_dialog_new ();
- gtk_widget_set_name (warning_dialog, "warning_dialog");
- gtk_object_set_data (GTK_OBJECT (warning_dialog), "warning_dialog", warning_dialog);
- gtk_window_set_title (GTK_WINDOW (warning_dialog), _("Sorry"));
- gtk_window_set_policy (GTK_WINDOW (warning_dialog), FALSE, FALSE, FALSE);
-
- dialog_vbox4 = GTK_DIALOG (warning_dialog)->vbox;
- gtk_widget_set_name (dialog_vbox4, "dialog_vbox4");
- gtk_object_set_data (GTK_OBJECT (warning_dialog), "dialog_vbox4", dialog_vbox4);
- gtk_widget_show (dialog_vbox4);
-
- frame9 = gtk_frame_new (_("Warning"));
- gtk_widget_set_name (frame9, "frame9");
- gtk_widget_ref (frame9);
- gtk_object_set_data_full (GTK_OBJECT (warning_dialog), "frame9", frame9,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (frame9);
- gtk_box_pack_start (GTK_BOX (dialog_vbox4), frame9, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame9), 10);
-
- label70 = gtk_label_new (_("For safety reasons the \"quiet\" time must be at least 65 seconds longer than the fading time, it must also be more than 10 seconds. This basically means that there is a bug in the code and until I find a way of really fixing it this message will appear :)\n\nYour fading settings have NOT been saved\n\n--\nAdam"));
- gtk_widget_set_name (label70, "label70");
- gtk_widget_ref (label70);
- gtk_object_set_data_full (GTK_OBJECT (warning_dialog), "label70", label70,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (label70);
- gtk_container_add (GTK_CONTAINER (frame9), label70);
- gtk_label_set_line_wrap (GTK_LABEL (label70), TRUE);
- gtk_misc_set_padding (GTK_MISC (label70), 10, 20);
-
- dialog_action_area4 = GTK_DIALOG (warning_dialog)->action_area;
- gtk_widget_set_name (dialog_action_area4, "dialog_action_area4");
- gtk_object_set_data (GTK_OBJECT (warning_dialog), "dialog_action_area4", dialog_action_area4);
- gtk_widget_show (dialog_action_area4);
- gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area4), 10);
-
- button10 = gtk_button_new_with_label (_("Oh Well"));
- gtk_widget_set_name (button10, "button10");
- gtk_widget_ref (button10);
- gtk_object_set_data_full (GTK_OBJECT (warning_dialog), "button10", button10,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (button10);
- gtk_box_pack_start (GTK_BOX (dialog_action_area4), button10, FALSE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (button10, GTK_CAN_DEFAULT);
-
- gtk_signal_connect_object (GTK_OBJECT (button10), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (warning_dialog));
-
- gtk_widget_grab_focus (button10);
- gtk_widget_grab_default (button10);
- return warning_dialog;
-}
-
-GtkWidget*
create_config_dialog (void)
{
GtkWidget *config_dialog;
@@ -253,19 +82,19 @@ create_config_dialog (void)
GtkWidget *frame10;
GtkWidget *table3;
GtkWidget *hbox21;
- GtkObject *stop_h_spin_adj;
+ GtkAdjustment *stop_h_spin_adj;
GtkWidget *stop_h_spin;
GtkWidget *label75;
GtkWidget *hbox22;
- GtkObject *alarm_h_spin_adj;
+ GtkAdjustment *alarm_h_spin_adj;
GtkWidget *alarm_h_spin;
GtkWidget *label76;
GtkWidget *hbox23;
- GtkObject *alarm_m_spin_adj;
+ GtkAdjustment *alarm_m_spin_adj;
GtkWidget *alarm_m_spin;
GtkWidget *label77;
GtkWidget *hbox24;
- GtkObject *stop_m_spin_adj;
+ GtkAdjustment *stop_m_spin_adj;
GtkWidget *stop_m_spin;
GtkWidget *label78;
GtkWidget *stop_checkb;
@@ -276,52 +105,52 @@ create_config_dialog (void)
GtkWidget *table4;
GtkWidget *hbox31;
GtkWidget *mon_def;
- GtkObject *mon_h_adj;
+ GtkAdjustment *mon_h_adj;
GtkWidget *mon_h;
GtkWidget *label89;
- GtkObject *mon_m_adj;
+ GtkAdjustment *mon_m_adj;
GtkWidget *mon_m;
GtkWidget *hbox32;
GtkWidget *tue_def;
- GtkObject *tue_h_adj;
+ GtkAdjustment *tue_h_adj;
GtkWidget *tue_h;
GtkWidget *label90;
- GtkObject *tue_m_adj;
+ GtkAdjustment *tue_m_adj;
GtkWidget *tue_m;
GtkWidget *hbox33;
GtkWidget *wed_def;
- GtkObject *wed_h_adj;
+ GtkAdjustment *wed_h_adj;
GtkWidget *wed_h;
GtkWidget *label91;
- GtkObject *wed_m_adj;
+ GtkAdjustment *wed_m_adj;
GtkWidget *wed_m;
GtkWidget *hbox34;
GtkWidget *thu_def;
- GtkObject *thu_h_adj;
+ GtkAdjustment *thu_h_adj;
GtkWidget *thu_h;
GtkWidget *label92;
- GtkObject *thu_m_adj;
+ GtkAdjustment *thu_m_adj;
GtkWidget *thu_m;
GtkWidget *hbox35;
GtkWidget *fri_def;
- GtkObject *fri_h_adj;
+ GtkAdjustment *fri_h_adj;
GtkWidget *fri_h;
GtkWidget *label93;
- GtkObject *fri_m_adj;
+ GtkAdjustment *fri_m_adj;
GtkWidget *fri_m;
GtkWidget *hbox36;
GtkWidget *sat_def;
- GtkObject *sat_h_adj;
+ GtkAdjustment *sat_h_adj;
GtkWidget *sat_h;
GtkWidget *label94;
- GtkObject *sat_m_adj;
+ GtkAdjustment *sat_m_adj;
GtkWidget *sat_m;
GtkWidget *hbox37;
GtkWidget *sun_def;
- GtkObject *sun_h_adj;
+ GtkAdjustment *sun_h_adj;
GtkWidget *sun_h;
GtkWidget *label95;
- GtkObject *sun_m_adj;
+ GtkAdjustment *sun_m_adj;
GtkWidget *sun_m;
GtkWidget *label87;
GtkWidget *label88;
@@ -337,7 +166,7 @@ create_config_dialog (void)
GtkWidget *frame11;
GtkWidget *alignment10;
GtkWidget *hbox25;
- GtkObject *fading_spin_adj;
+ GtkAdjustment *fading_spin_adj;
GtkWidget *fading_spin;
GtkWidget *label81;
GtkWidget *frame12;
@@ -378,43 +207,39 @@ create_config_dialog (void)
GtkWidget *hbox20;
GtkWidget *ok_button;
GtkWidget *cancel_button;
- GtkTooltips *tooltips;
-
- tooltips = gtk_tooltips_new ();
config_dialog = gtk_dialog_new ();
gtk_widget_set_name (config_dialog, "config_dialog");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "config_dialog", config_dialog);
+ g_object_set_data (G_OBJECT (config_dialog), "config_dialog", config_dialog);
gtk_window_set_title (GTK_WINDOW (config_dialog), _("Alarm Settings"));
- gtk_window_set_policy (GTK_WINDOW (config_dialog), FALSE, FALSE, FALSE);
- dialog_vbox5 = GTK_DIALOG (config_dialog)->vbox;
+ dialog_vbox5 = gtk_dialog_get_content_area ((GtkDialog *) config_dialog);
gtk_widget_set_name (dialog_vbox5, "dialog_vbox5");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "dialog_vbox5", dialog_vbox5);
+ g_object_set_data (G_OBJECT (config_dialog), "dialog_vbox5", dialog_vbox5);
gtk_widget_show (dialog_vbox5);
notebook1 = gtk_notebook_new ();
gtk_widget_set_name (notebook1, "notebook1");
- gtk_widget_ref (notebook1);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "notebook1", notebook1,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (notebook1);
+ g_object_set_data_full (G_OBJECT (config_dialog), "notebook1", notebook1,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (notebook1);
gtk_box_pack_start (GTK_BOX (dialog_vbox5), notebook1, TRUE, TRUE, 0);
frame10 = gtk_frame_new (_("Time"));
gtk_widget_set_name (frame10, "frame10");
- gtk_widget_ref (frame10);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame10", frame10,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame10);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame10", frame10,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame10);
gtk_container_add (GTK_CONTAINER (notebook1), frame10);
gtk_container_set_border_width (GTK_CONTAINER (frame10), 10);
table3 = gtk_table_new (2, 3, FALSE);
gtk_widget_set_name (table3, "table3");
- gtk_widget_ref (table3);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "table3", table3,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (table3);
+ g_object_set_data_full (G_OBJECT (config_dialog), "table3", table3,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (table3);
gtk_container_add (GTK_CONTAINER (frame10), table3);
gtk_container_set_border_width (GTK_CONTAINER (table3), 8);
@@ -423,20 +248,20 @@ create_config_dialog (void)
hbox21 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox21, "hbox21");
- gtk_widget_ref (hbox21);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox21", hbox21,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox21);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox21", hbox21,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox21);
gtk_table_attach (GTK_TABLE (table3), hbox21, 1, 2, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
- stop_h_spin_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 0);
+ stop_h_spin_adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 100, 1, 10, 0);
stop_h_spin = gtk_spin_button_new (GTK_ADJUSTMENT (stop_h_spin_adj), 1, 0);
gtk_widget_set_name (stop_h_spin, "stop_h_spin");
- gtk_widget_ref (stop_h_spin);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "stop_h_spin", stop_h_spin,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (stop_h_spin);
+ g_object_set_data_full (G_OBJECT (config_dialog), "stop_h_spin", stop_h_spin,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (stop_h_spin);
gtk_box_pack_start (GTK_BOX (hbox21), stop_h_spin, FALSE, FALSE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (stop_h_spin), TRUE);
@@ -444,28 +269,28 @@ create_config_dialog (void)
label75 = gtk_label_new (_("hours"));
gtk_widget_set_name (label75, "label75");
- gtk_widget_ref (label75);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label75", label75,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label75);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label75", label75,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label75);
gtk_box_pack_start (GTK_BOX (hbox21), label75, FALSE, FALSE, 0);
hbox22 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox22, "hbox22");
- gtk_widget_ref (hbox22);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox22", hbox22,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox22);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox22", hbox22,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox22);
gtk_table_attach (GTK_TABLE (table3), hbox22, 1, 2, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
- alarm_h_spin_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ alarm_h_spin_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
alarm_h_spin = gtk_spin_button_new (GTK_ADJUSTMENT (alarm_h_spin_adj), 1, 0);
gtk_widget_set_name (alarm_h_spin, "alarm_h_spin");
- gtk_widget_ref (alarm_h_spin);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "alarm_h_spin", alarm_h_spin,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (alarm_h_spin);
+ g_object_set_data_full (G_OBJECT (config_dialog), "alarm_h_spin", alarm_h_spin,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (alarm_h_spin);
gtk_box_pack_start (GTK_BOX (hbox22), alarm_h_spin, FALSE, FALSE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (alarm_h_spin), TRUE);
@@ -474,29 +299,29 @@ create_config_dialog (void)
label76 = gtk_label_new (":");
gtk_widget_set_name (label76, "label76");
- gtk_widget_ref (label76);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label76", label76,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label76);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label76", label76,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label76);
gtk_box_pack_start (GTK_BOX (hbox22), label76, FALSE, FALSE, 0);
gtk_misc_set_padding (GTK_MISC (label76), 5, 0);
hbox23 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox23, "hbox23");
- gtk_widget_ref (hbox23);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox23", hbox23,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox23);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox23", hbox23,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox23);
gtk_table_attach (GTK_TABLE (table3), hbox23, 2, 3, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (GTK_FILL), 0, 0);
- alarm_m_spin_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ alarm_m_spin_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
alarm_m_spin = gtk_spin_button_new (GTK_ADJUSTMENT (alarm_m_spin_adj), 1, 0);
gtk_widget_set_name (alarm_m_spin, "alarm_m_spin");
- gtk_widget_ref (alarm_m_spin);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "alarm_m_spin", alarm_m_spin,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (alarm_m_spin);
+ g_object_set_data_full (G_OBJECT (config_dialog), "alarm_m_spin", alarm_m_spin,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (alarm_m_spin);
gtk_box_pack_start (GTK_BOX (hbox23), alarm_m_spin, FALSE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (alarm_m_spin), TRUE);
@@ -505,28 +330,28 @@ create_config_dialog (void)
label77 = gtk_label_new (_("h"));
gtk_widget_set_name (label77, "label77");
- gtk_widget_ref (label77);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label77", label77,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label77);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label77", label77,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label77);
gtk_box_pack_start (GTK_BOX (hbox23), label77, FALSE, FALSE, 0);
hbox24 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox24, "hbox24");
- gtk_widget_ref (hbox24);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox24", hbox24,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox24);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox24", hbox24,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox24);
gtk_table_attach (GTK_TABLE (table3), hbox24, 2, 3, 1, 2,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (GTK_FILL), 0, 0);
- stop_m_spin_adj = gtk_adjustment_new (0, 0, 59, 1, 10, 0);
+ stop_m_spin_adj = (GtkAdjustment *) gtk_adjustment_new (0, 0, 59, 1, 10, 0);
stop_m_spin = gtk_spin_button_new (GTK_ADJUSTMENT (stop_m_spin_adj), 1, 0);
gtk_widget_set_name (stop_m_spin, "stop_m_spin");
- gtk_widget_ref (stop_m_spin);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "stop_m_spin", stop_m_spin,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (stop_m_spin);
+ g_object_set_data_full (G_OBJECT (config_dialog), "stop_m_spin", stop_m_spin,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (stop_m_spin);
gtk_box_pack_start (GTK_BOX (hbox24), stop_m_spin, FALSE, FALSE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (stop_m_spin), TRUE);
@@ -535,17 +360,17 @@ create_config_dialog (void)
label78 = gtk_label_new (_("minutes"));
gtk_widget_set_name (label78, "label78");
- gtk_widget_ref (label78);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label78", label78,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label78);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label78", label78,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label78);
gtk_box_pack_start (GTK_BOX (hbox24), label78, FALSE, FALSE, 0);
stop_checkb = gtk_check_button_new ();
gtk_widget_set_name (stop_checkb, "stop_checkb");
- gtk_widget_ref (stop_checkb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "stop_checkb", stop_checkb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (stop_checkb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "stop_checkb", stop_checkb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (stop_checkb);
gtk_table_attach (GTK_TABLE (table3), stop_checkb, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_FILL),
@@ -553,9 +378,9 @@ create_config_dialog (void)
label79 = gtk_label_new (_("Quiet after:"));
gtk_widget_set_name (label79, "label79");
- gtk_widget_ref (label79);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label79", label79,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label79);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label79", label79,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label79);
gtk_container_add (GTK_CONTAINER (stop_checkb), label79);
gtk_label_set_justify (GTK_LABEL (label79), GTK_JUSTIFY_LEFT);
@@ -563,9 +388,9 @@ create_config_dialog (void)
label80 = gtk_label_new (_("Alarm at (default):"));
gtk_widget_set_name (label80, "label80");
- gtk_widget_ref (label80);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label80", label80,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label80);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label80", label80,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label80);
gtk_table_attach (GTK_TABLE (table3), label80, 0, 1, 0, 1,
(GtkAttachOptions) (GTK_FILL),
@@ -575,35 +400,35 @@ create_config_dialog (void)
label71 = gtk_label_new (_("Time"));
gtk_widget_set_name (label71, "label71");
- gtk_widget_ref (label71);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label71", label71,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label71);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label71", label71,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label71);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label71);
frame15 = gtk_frame_new (_("Choose the days for the alarm to come on"));
gtk_widget_set_name (frame15, "frame15");
- gtk_widget_ref (frame15);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame15", frame15,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame15);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame15", frame15,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame15);
gtk_container_add (GTK_CONTAINER (notebook1), frame15);
gtk_container_set_border_width (GTK_CONTAINER (frame15), 10);
table4 = gtk_table_new (8, 2, FALSE);
gtk_widget_set_name (table4, "table4");
- gtk_widget_ref (table4);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "table4", table4,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (table4);
+ g_object_set_data_full (G_OBJECT (config_dialog), "table4", table4,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (table4);
gtk_container_add (GTK_CONTAINER (frame15), table4);
gtk_container_set_border_width (GTK_CONTAINER (table4), 5);
hbox31 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox31, "hbox31");
- gtk_widget_ref (hbox31);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox31", hbox31,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox31);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox31", hbox31,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox31);
gtk_table_attach (GTK_TABLE (table4), hbox31, 1, 2, 1, 2,
(GtkAttachOptions) (GTK_FILL),
@@ -611,37 +436,37 @@ create_config_dialog (void)
mon_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (mon_def, "mon_def");
- gtk_widget_ref (mon_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "mon_def", mon_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (mon_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "mon_def", mon_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (mon_def);
gtk_box_pack_start (GTK_BOX (hbox31), mon_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mon_def), TRUE);
- mon_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ mon_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
mon_h = gtk_spin_button_new (GTK_ADJUSTMENT (mon_h_adj), 1, 0);
gtk_widget_set_name (mon_h, "mon_h");
- gtk_widget_ref (mon_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "mon_h", mon_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (mon_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "mon_h", mon_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (mon_h);
gtk_box_pack_start (GTK_BOX (hbox31), mon_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (mon_h), TRUE);
label89 = gtk_label_new (":");
gtk_widget_set_name (label89, "label89");
- gtk_widget_ref (label89);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label89", label89,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label89);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label89", label89,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label89);
gtk_box_pack_start (GTK_BOX (hbox31), label89, FALSE, FALSE, 0);
- mon_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ mon_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
mon_m = gtk_spin_button_new (GTK_ADJUSTMENT (mon_m_adj), 1, 0);
gtk_widget_set_name (mon_m, "mon_m");
- gtk_widget_ref (mon_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "mon_m", mon_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (mon_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "mon_m", mon_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (mon_m);
gtk_box_pack_start (GTK_BOX (hbox31), mon_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (mon_m), TRUE);
@@ -649,9 +474,9 @@ create_config_dialog (void)
hbox32 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox32, "hbox32");
- gtk_widget_ref (hbox32);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox32", hbox32,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox32);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox32", hbox32,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox32);
gtk_table_attach (GTK_TABLE (table4), hbox32, 1, 2, 2, 3,
(GtkAttachOptions) (GTK_FILL),
@@ -659,37 +484,37 @@ create_config_dialog (void)
tue_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (tue_def, "tue_def");
- gtk_widget_ref (tue_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "tue_def", tue_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (tue_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "tue_def", tue_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (tue_def);
gtk_box_pack_start (GTK_BOX (hbox32), tue_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tue_def), TRUE);
- tue_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ tue_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
tue_h = gtk_spin_button_new (GTK_ADJUSTMENT (tue_h_adj), 1, 0);
gtk_widget_set_name (tue_h, "tue_h");
- gtk_widget_ref (tue_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "tue_h", tue_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (tue_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "tue_h", tue_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (tue_h);
gtk_box_pack_start (GTK_BOX (hbox32), tue_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (tue_h), TRUE);
label90 = gtk_label_new (":");
gtk_widget_set_name (label90, "label90");
- gtk_widget_ref (label90);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label90", label90,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label90);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label90", label90,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label90);
gtk_box_pack_start (GTK_BOX (hbox32), label90, FALSE, FALSE, 0);
- tue_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ tue_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
tue_m = gtk_spin_button_new (GTK_ADJUSTMENT (tue_m_adj), 1, 0);
gtk_widget_set_name (tue_m, "tue_m");
- gtk_widget_ref (tue_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "tue_m", tue_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (tue_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "tue_m", tue_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (tue_m);
gtk_box_pack_start (GTK_BOX (hbox32), tue_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (tue_m), TRUE);
@@ -697,9 +522,9 @@ create_config_dialog (void)
hbox33 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox33, "hbox33");
- gtk_widget_ref (hbox33);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox33", hbox33,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox33);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox33", hbox33,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox33);
gtk_table_attach (GTK_TABLE (table4), hbox33, 1, 2, 3, 4,
(GtkAttachOptions) (GTK_FILL),
@@ -707,37 +532,37 @@ create_config_dialog (void)
wed_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (wed_def, "wed_def");
- gtk_widget_ref (wed_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "wed_def", wed_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (wed_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "wed_def", wed_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (wed_def);
gtk_box_pack_start (GTK_BOX (hbox33), wed_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wed_def), TRUE);
- wed_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ wed_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
wed_h = gtk_spin_button_new (GTK_ADJUSTMENT (wed_h_adj), 1, 0);
gtk_widget_set_name (wed_h, "wed_h");
- gtk_widget_ref (wed_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "wed_h", wed_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (wed_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "wed_h", wed_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (wed_h);
gtk_box_pack_start (GTK_BOX (hbox33), wed_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wed_h), TRUE);
label91 = gtk_label_new (":");
gtk_widget_set_name (label91, "label91");
- gtk_widget_ref (label91);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label91", label91,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label91);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label91", label91,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label91);
gtk_box_pack_start (GTK_BOX (hbox33), label91, FALSE, FALSE, 0);
- wed_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ wed_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
wed_m = gtk_spin_button_new (GTK_ADJUSTMENT (wed_m_adj), 1, 0);
gtk_widget_set_name (wed_m, "wed_m");
- gtk_widget_ref (wed_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "wed_m", wed_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (wed_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "wed_m", wed_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (wed_m);
gtk_box_pack_start (GTK_BOX (hbox33), wed_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wed_m), TRUE);
@@ -745,9 +570,9 @@ create_config_dialog (void)
hbox34 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox34, "hbox34");
- gtk_widget_ref (hbox34);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox34", hbox34,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox34);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox34", hbox34,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox34);
gtk_table_attach (GTK_TABLE (table4), hbox34, 1, 2, 4, 5,
(GtkAttachOptions) (GTK_FILL),
@@ -755,37 +580,37 @@ create_config_dialog (void)
thu_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (thu_def, "thu_def");
- gtk_widget_ref (thu_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "thu_def", thu_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (thu_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "thu_def", thu_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (thu_def);
gtk_box_pack_start (GTK_BOX (hbox34), thu_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (thu_def), TRUE);
- thu_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ thu_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
thu_h = gtk_spin_button_new (GTK_ADJUSTMENT (thu_h_adj), 1, 0);
gtk_widget_set_name (thu_h, "thu_h");
- gtk_widget_ref (thu_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "thu_h", thu_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (thu_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "thu_h", thu_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (thu_h);
gtk_box_pack_start (GTK_BOX (hbox34), thu_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (thu_h), TRUE);
label92 = gtk_label_new (":");
gtk_widget_set_name (label92, "label92");
- gtk_widget_ref (label92);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label92", label92,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label92);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label92", label92,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label92);
gtk_box_pack_start (GTK_BOX (hbox34), label92, FALSE, FALSE, 0);
- thu_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ thu_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
thu_m = gtk_spin_button_new (GTK_ADJUSTMENT (thu_m_adj), 1, 0);
gtk_widget_set_name (thu_m, "thu_m");
- gtk_widget_ref (thu_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "thu_m", thu_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (thu_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "thu_m", thu_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (thu_m);
gtk_box_pack_start (GTK_BOX (hbox34), thu_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (thu_m), TRUE);
@@ -793,9 +618,9 @@ create_config_dialog (void)
hbox35 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox35, "hbox35");
- gtk_widget_ref (hbox35);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox35", hbox35,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox35);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox35", hbox35,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox35);
gtk_table_attach (GTK_TABLE (table4), hbox35, 1, 2, 5, 6,
(GtkAttachOptions) (GTK_FILL),
@@ -803,37 +628,37 @@ create_config_dialog (void)
fri_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (fri_def, "fri_def");
- gtk_widget_ref (fri_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "fri_def", fri_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (fri_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "fri_def", fri_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (fri_def);
gtk_box_pack_start (GTK_BOX (hbox35), fri_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fri_def), TRUE);
- fri_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ fri_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
fri_h = gtk_spin_button_new (GTK_ADJUSTMENT (fri_h_adj), 1, 0);
gtk_widget_set_name (fri_h, "fri_h");
- gtk_widget_ref (fri_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "fri_h", fri_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (fri_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "fri_h", fri_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (fri_h);
gtk_box_pack_start (GTK_BOX (hbox35), fri_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fri_h), TRUE);
label93 = gtk_label_new (":");
gtk_widget_set_name (label93, "label93");
- gtk_widget_ref (label93);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label93", label93,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label93);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label93", label93,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label93);
gtk_box_pack_start (GTK_BOX (hbox35), label93, FALSE, FALSE, 0);
- fri_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ fri_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
fri_m = gtk_spin_button_new (GTK_ADJUSTMENT (fri_m_adj), 1, 0);
gtk_widget_set_name (fri_m, "fri_m");
- gtk_widget_ref (fri_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "fri_m", fri_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (fri_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "fri_m", fri_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (fri_m);
gtk_box_pack_start (GTK_BOX (hbox35), fri_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fri_m), TRUE);
@@ -841,9 +666,9 @@ create_config_dialog (void)
hbox36 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox36, "hbox36");
- gtk_widget_ref (hbox36);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox36", hbox36,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox36);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox36", hbox36,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox36);
gtk_table_attach (GTK_TABLE (table4), hbox36, 1, 2, 6, 7,
(GtkAttachOptions) (GTK_FILL),
@@ -851,37 +676,37 @@ create_config_dialog (void)
sat_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (sat_def, "sat_def");
- gtk_widget_ref (sat_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sat_def", sat_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sat_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sat_def", sat_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sat_def);
gtk_box_pack_start (GTK_BOX (hbox36), sat_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sat_def), TRUE);
- sat_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ sat_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
sat_h = gtk_spin_button_new (GTK_ADJUSTMENT (sat_h_adj), 1, 0);
gtk_widget_set_name (sat_h, "sat_h");
- gtk_widget_ref (sat_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sat_h", sat_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sat_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sat_h", sat_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sat_h);
gtk_box_pack_start (GTK_BOX (hbox36), sat_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (sat_h), TRUE);
label94 = gtk_label_new (":");
gtk_widget_set_name (label94, "label94");
- gtk_widget_ref (label94);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label94", label94,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label94);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label94", label94,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label94);
gtk_box_pack_start (GTK_BOX (hbox36), label94, FALSE, FALSE, 0);
- sat_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ sat_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
sat_m = gtk_spin_button_new (GTK_ADJUSTMENT (sat_m_adj), 1, 0);
gtk_widget_set_name (sat_m, "sat_m");
- gtk_widget_ref (sat_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sat_m", sat_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sat_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sat_m", sat_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sat_m);
gtk_box_pack_start (GTK_BOX (hbox36), sat_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (sat_m), TRUE);
@@ -889,9 +714,9 @@ create_config_dialog (void)
hbox37 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox37, "hbox37");
- gtk_widget_ref (hbox37);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox37", hbox37,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox37);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox37", hbox37,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox37);
gtk_table_attach (GTK_TABLE (table4), hbox37, 1, 2, 7, 8,
(GtkAttachOptions) (GTK_FILL),
@@ -899,37 +724,37 @@ create_config_dialog (void)
sun_def = gtk_check_button_new_with_label (_("Default"));
gtk_widget_set_name (sun_def, "sun_def");
- gtk_widget_ref (sun_def);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sun_def", sun_def,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sun_def);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sun_def", sun_def,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sun_def);
gtk_box_pack_start (GTK_BOX (hbox37), sun_def, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sun_def), TRUE);
- sun_h_adj = gtk_adjustment_new (6, 0, 23, 1, 10, 0);
+ sun_h_adj = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0);
sun_h = gtk_spin_button_new (GTK_ADJUSTMENT (sun_h_adj), 1, 0);
gtk_widget_set_name (sun_h, "sun_h");
- gtk_widget_ref (sun_h);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sun_h", sun_h,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sun_h);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sun_h", sun_h,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sun_h);
gtk_box_pack_start (GTK_BOX (hbox37), sun_h, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (sun_h), TRUE);
label95 = gtk_label_new (":");
gtk_widget_set_name (label95, "label95");
- gtk_widget_ref (label95);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label95", label95,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label95);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label95", label95,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label95);
gtk_box_pack_start (GTK_BOX (hbox37), label95, FALSE, FALSE, 0);
- sun_m_adj = gtk_adjustment_new (30, 0, 59, 1, 10, 0);
+ sun_m_adj = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0);
sun_m = gtk_spin_button_new (GTK_ADJUSTMENT (sun_m_adj), 1, 0);
gtk_widget_set_name (sun_m, "sun_m");
- gtk_widget_ref (sun_m);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sun_m", sun_m,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sun_m);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sun_m", sun_m,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sun_m);
gtk_box_pack_start (GTK_BOX (hbox37), sun_m, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (sun_m), TRUE);
@@ -937,9 +762,9 @@ create_config_dialog (void)
label87 = gtk_label_new (_("Day"));
gtk_widget_set_name (label87, "label87");
- gtk_widget_ref (label87);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label87", label87,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label87);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label87", label87,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label87);
gtk_table_attach (GTK_TABLE (table4), label87, 0, 1, 0, 1,
(GtkAttachOptions) (0),
@@ -947,9 +772,9 @@ create_config_dialog (void)
label88 = gtk_label_new (_("Time"));
gtk_widget_set_name (label88, "label88");
- gtk_widget_ref (label88);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label88", label88,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label88);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label88", label88,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label88);
gtk_table_attach (GTK_TABLE (table4), label88, 1, 2, 0, 1,
(GtkAttachOptions) (0),
@@ -957,9 +782,9 @@ create_config_dialog (void)
tue_cb = gtk_check_button_new_with_label (_("Tuesday"));
gtk_widget_set_name (tue_cb, "tue_cb");
- gtk_widget_ref (tue_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "tue_cb", tue_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (tue_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "tue_cb", tue_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (tue_cb);
gtk_table_attach (GTK_TABLE (table4), tue_cb, 0, 1, 2, 3,
(GtkAttachOptions) (0),
@@ -968,9 +793,9 @@ create_config_dialog (void)
wed_cb = gtk_check_button_new_with_label (_("Wednesday"));
gtk_widget_set_name (wed_cb, "wed_cb");
- gtk_widget_ref (wed_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "wed_cb", wed_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (wed_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "wed_cb", wed_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (wed_cb);
gtk_table_attach (GTK_TABLE (table4), wed_cb, 0, 1, 3, 4,
(GtkAttachOptions) (0),
@@ -979,9 +804,9 @@ create_config_dialog (void)
thu_cb = gtk_check_button_new_with_label (_("Thursday"));
gtk_widget_set_name (thu_cb, "thu_cb");
- gtk_widget_ref (thu_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "thu_cb", thu_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (thu_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "thu_cb", thu_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (thu_cb);
gtk_table_attach (GTK_TABLE (table4), thu_cb, 0, 1, 4, 5,
(GtkAttachOptions) (0),
@@ -990,9 +815,9 @@ create_config_dialog (void)
fri_cb = gtk_check_button_new_with_label (_("Friday"));
gtk_widget_set_name (fri_cb, "fri_cb");
- gtk_widget_ref (fri_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "fri_cb", fri_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (fri_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "fri_cb", fri_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (fri_cb);
gtk_table_attach (GTK_TABLE (table4), fri_cb, 0, 1, 5, 6,
(GtkAttachOptions) (0),
@@ -1001,9 +826,9 @@ create_config_dialog (void)
sat_cb = gtk_check_button_new_with_label (_("Saturday"));
gtk_widget_set_name (sat_cb, "sat_cb");
- gtk_widget_ref (sat_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sat_cb", sat_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sat_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sat_cb", sat_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sat_cb);
gtk_table_attach (GTK_TABLE (table4), sat_cb, 0, 1, 6, 7,
(GtkAttachOptions) (0),
@@ -1012,9 +837,9 @@ create_config_dialog (void)
sun_cb = gtk_check_button_new_with_label (_("Sunday"));
gtk_widget_set_name (sun_cb, "sun_cb");
- gtk_widget_ref (sun_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "sun_cb", sun_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (sun_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "sun_cb", sun_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (sun_cb);
gtk_table_attach (GTK_TABLE (table4), sun_cb, 0, 1, 7, 8,
(GtkAttachOptions) (0),
@@ -1022,9 +847,9 @@ create_config_dialog (void)
mon_cb = gtk_check_button_new_with_label (_("Monday"));
gtk_widget_set_name (mon_cb, "mon_cb");
- gtk_widget_ref (mon_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "mon_cb", mon_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (mon_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "mon_cb", mon_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (mon_cb);
gtk_table_attach (GTK_TABLE (table4), mon_cb, 0, 1, 1, 2,
(GtkAttachOptions) (0),
@@ -1033,52 +858,52 @@ create_config_dialog (void)
label72 = gtk_label_new (_("Days"));
gtk_widget_set_name (label72, "label72");
- gtk_widget_ref (label72);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label72", label72,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label72);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label72", label72,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label72);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label72);
vbox8 = gtk_vbox_new (FALSE, 0);
gtk_widget_set_name (vbox8, "vbox8");
- gtk_widget_ref (vbox8);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "vbox8", vbox8,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (vbox8);
+ g_object_set_data_full (G_OBJECT (config_dialog), "vbox8", vbox8,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (vbox8);
gtk_container_add (GTK_CONTAINER (notebook1), vbox8);
frame11 = gtk_frame_new (_("Fading"));
gtk_widget_set_name (frame11, "frame11");
- gtk_widget_ref (frame11);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame11", frame11,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame11);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame11", frame11,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame11);
gtk_box_pack_start (GTK_BOX (vbox8), frame11, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (frame11), 10);
alignment10 = gtk_alignment_new (0, 0.5, 0.1, 1);
gtk_widget_set_name (alignment10, "alignment10");
- gtk_widget_ref (alignment10);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "alignment10", alignment10,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (alignment10);
+ g_object_set_data_full (G_OBJECT (config_dialog), "alignment10", alignment10,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (alignment10);
gtk_container_add (GTK_CONTAINER (frame11), alignment10);
gtk_container_set_border_width (GTK_CONTAINER (alignment10), 8);
hbox25 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox25, "hbox25");
- gtk_widget_ref (hbox25);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox25", hbox25,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox25);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox25", hbox25,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox25);
gtk_container_add (GTK_CONTAINER (alignment10), hbox25);
- fading_spin_adj = gtk_adjustment_new (120, 0, 3600, 1, 10, 10);
+ fading_spin_adj = (GtkAdjustment *) gtk_adjustment_new (120, 0, 3600, 1, 10, 0);
fading_spin = gtk_spin_button_new (GTK_ADJUSTMENT (fading_spin_adj), 1, 0);
gtk_widget_set_name (fading_spin, "fading_spin");
- gtk_widget_ref (fading_spin);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "fading_spin", fading_spin,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (fading_spin);
+ g_object_set_data_full (G_OBJECT (config_dialog), "fading_spin", fading_spin,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (fading_spin);
gtk_box_pack_start (GTK_BOX (hbox25), fading_spin, TRUE, TRUE, 0);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fading_spin), TRUE);
@@ -1086,52 +911,51 @@ create_config_dialog (void)
label81 = gtk_label_new (_("seconds"));
gtk_widget_set_name (label81, "label81");
- gtk_widget_ref (label81);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label81", label81,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label81);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label81", label81,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label81);
gtk_box_pack_start (GTK_BOX (hbox25), label81, FALSE, TRUE, 0);
frame12 = gtk_frame_new (_("Volume"));
gtk_widget_set_name (frame12, "frame12");
- gtk_widget_ref (frame12);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame12", frame12,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame12);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame12", frame12,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame12);
gtk_box_pack_start (GTK_BOX (vbox8), frame12, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (frame12), 10);
vbox9 = gtk_vbox_new (FALSE, 10);
gtk_widget_set_name (vbox9, "vbox9");
- gtk_widget_ref (vbox9);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "vbox9", vbox9,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (vbox9);
+ g_object_set_data_full (G_OBJECT (config_dialog), "vbox9", vbox9,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (vbox9);
gtk_container_add (GTK_CONTAINER (frame12), vbox9);
gtk_container_set_border_width (GTK_CONTAINER (vbox9), 8);
alignment11 = gtk_alignment_new (1, 0.5, 0.1, 1);
gtk_widget_set_name (alignment11, "alignment11");
- gtk_widget_ref (alignment11);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "alignment11", alignment11,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (alignment11);
+ g_object_set_data_full (G_OBJECT (config_dialog), "alignment11", alignment11,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (alignment11);
gtk_box_pack_end (GTK_BOX (vbox9), alignment11, FALSE, FALSE, 0);
current_button = gtk_button_new_with_label (_("Current"));
gtk_widget_set_name (current_button, "current_button");
- gtk_widget_ref (current_button);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "current_button", current_button,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (current_button);
+ g_object_set_data_full (G_OBJECT (config_dialog), "current_button", current_button,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (current_button);
gtk_container_add (GTK_CONTAINER (alignment11), current_button);
- gtk_tooltips_set_tip (tooltips, current_button, _("reset to current output volume"), NULL);
label82 = gtk_label_new (_("Start at"));
gtk_widget_set_name (label82, "label82");
- gtk_widget_ref (label82);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label82", label82,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label82);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label82", label82,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label82);
gtk_box_pack_start (GTK_BOX (vbox9), label82, FALSE, FALSE, 0);
gtk_label_set_justify (GTK_LABEL (label82), GTK_JUSTIFY_LEFT);
@@ -1139,17 +963,17 @@ create_config_dialog (void)
hbox26 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox26, "hbox26");
- gtk_widget_ref (hbox26);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox26", hbox26,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox26);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox26", hbox26,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox26);
gtk_box_pack_start (GTK_BOX (vbox9), hbox26, TRUE, TRUE, 0);
quiet_vol_scale = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (20, 0, 100, 1, 5, 0)));
gtk_widget_set_name (quiet_vol_scale, "quiet_vol_scale");
- gtk_widget_ref (quiet_vol_scale);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "quiet_vol_scale", quiet_vol_scale,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (quiet_vol_scale);
+ g_object_set_data_full (G_OBJECT (config_dialog), "quiet_vol_scale", quiet_vol_scale,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (quiet_vol_scale);
gtk_box_pack_start (GTK_BOX (hbox26), quiet_vol_scale, TRUE, TRUE, 0);
gtk_scale_set_value_pos (GTK_SCALE (quiet_vol_scale), GTK_POS_RIGHT);
@@ -1157,25 +981,25 @@ create_config_dialog (void)
label83 = gtk_label_new (_("%"));
gtk_widget_set_name (label83, "label83");
- gtk_widget_ref (label83);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label83", label83,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label83);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label83", label83,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label83);
gtk_box_pack_start (GTK_BOX (hbox26), label83, FALSE, FALSE, 0);
hseparator2 = gtk_hseparator_new ();
gtk_widget_set_name (hseparator2, "hseparator2");
- gtk_widget_ref (hseparator2);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hseparator2", hseparator2,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hseparator2);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hseparator2", hseparator2,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hseparator2);
gtk_box_pack_start (GTK_BOX (vbox9), hseparator2, TRUE, TRUE, 0);
label84 = gtk_label_new (_("Final"));
gtk_widget_set_name (label84, "label84");
- gtk_widget_ref (label84);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label84", label84,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label84);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label84", label84,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label84);
gtk_box_pack_start (GTK_BOX (vbox9), label84, FALSE, FALSE, 0);
gtk_label_set_justify (GTK_LABEL (label84), GTK_JUSTIFY_LEFT);
@@ -1183,17 +1007,17 @@ create_config_dialog (void)
hbox27 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox27, "hbox27");
- gtk_widget_ref (hbox27);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox27", hbox27,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox27);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox27", hbox27,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox27);
gtk_box_pack_start (GTK_BOX (vbox9), hbox27, TRUE, TRUE, 0);
vol_scale = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (80, 0, 100, 1, 5, 0)));
gtk_widget_set_name (vol_scale, "vol_scale");
- gtk_widget_ref (vol_scale);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "vol_scale", vol_scale,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (vol_scale);
+ g_object_set_data_full (G_OBJECT (config_dialog), "vol_scale", vol_scale,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (vol_scale);
gtk_box_pack_start (GTK_BOX (hbox27), vol_scale, TRUE, TRUE, 0);
gtk_scale_set_value_pos (GTK_SCALE (vol_scale), GTK_POS_RIGHT);
@@ -1201,152 +1025,152 @@ create_config_dialog (void)
label85 = gtk_label_new (_("%"));
gtk_widget_set_name (label85, "label85");
- gtk_widget_ref (label85);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label85", label85,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label85);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label85", label85,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label85);
gtk_box_pack_start (GTK_BOX (hbox27), label85, FALSE, TRUE, 0);
gtk_label_set_justify (GTK_LABEL (label85), GTK_JUSTIFY_FILL);
label73 = gtk_label_new (_("Volume"));
gtk_widget_set_name (label73, "label73");
- gtk_widget_ref (label73);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label73", label73,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label73);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label73", label73,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label73);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label73);
vbox10 = gtk_vbox_new (FALSE, 0);
gtk_widget_set_name (vbox10, "vbox10");
- gtk_widget_ref (vbox10);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "vbox10", vbox10,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (vbox10);
+ g_object_set_data_full (G_OBJECT (config_dialog), "vbox10", vbox10,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (vbox10);
gtk_container_add (GTK_CONTAINER (notebook1), vbox10);
frame13 = gtk_frame_new (_("Additional Command"));
gtk_widget_set_name (frame13, "frame13");
- gtk_widget_ref (frame13);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame13", frame13,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame13);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame13", frame13,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame13);
gtk_box_pack_start (GTK_BOX (vbox10), frame13, FALSE, FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (frame13), 10);
hbox28 = gtk_hbox_new (FALSE, 5);
gtk_widget_set_name (hbox28, "hbox28");
- gtk_widget_ref (hbox28);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox28", hbox28,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox28);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox28", hbox28,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox28);
gtk_container_add (GTK_CONTAINER (frame13), hbox28);
gtk_container_set_border_width (GTK_CONTAINER (hbox28), 8);
cmd_entry = gtk_entry_new ();
gtk_widget_set_name (cmd_entry, "cmd_entry");
- gtk_widget_ref (cmd_entry);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cmd_entry", cmd_entry,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (cmd_entry);
+ g_object_set_data_full (G_OBJECT (config_dialog), "cmd_entry", cmd_entry,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (cmd_entry);
gtk_box_pack_start (GTK_BOX (hbox28), cmd_entry, TRUE, TRUE, 0);
cmd_checkb = gtk_check_button_new_with_label (_("enable"));
gtk_widget_set_name (cmd_checkb, "cmd_checkb");
- gtk_widget_ref (cmd_checkb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cmd_checkb", cmd_checkb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (cmd_checkb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "cmd_checkb", cmd_checkb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (cmd_checkb);
gtk_box_pack_start (GTK_BOX (hbox28), cmd_checkb, FALSE, FALSE, 0);
frame14 = gtk_frame_new (_("Playlist (optional)"));
gtk_widget_set_name (frame14, "frame14");
- gtk_widget_ref (frame14);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame14", frame14,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame14);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame14", frame14,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame14);
gtk_box_pack_start (GTK_BOX (vbox10), frame14, FALSE, FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (frame14), 10);
hbox29 = gtk_hbox_new (FALSE, 5);
gtk_widget_set_name (hbox29, "hbox29");
- gtk_widget_ref (hbox29);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox29", hbox29,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox29);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox29", hbox29,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox29);
gtk_container_add (GTK_CONTAINER (frame14), hbox29);
gtk_container_set_border_width (GTK_CONTAINER (hbox29), 8);
playlist = gtk_entry_new ();
gtk_widget_set_name (playlist, "playlist");
- gtk_widget_ref (playlist);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "playlist", playlist,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (playlist);
+ g_object_set_data_full (G_OBJECT (config_dialog), "playlist", playlist,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (playlist);
gtk_box_pack_start (GTK_BOX (hbox29), playlist, TRUE, TRUE, 0);
playlist_browse_button = gtk_button_new_with_label (_("Browse..."));
gtk_widget_set_name (playlist_browse_button, "playlist_browse_button");
- gtk_widget_ref (playlist_browse_button);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "playlist_browse_button", playlist_browse_button,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (playlist_browse_button);
+ g_object_set_data_full (G_OBJECT (config_dialog), "playlist_browse_button", playlist_browse_button,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (playlist_browse_button);
gtk_box_pack_start (GTK_BOX (hbox29), playlist_browse_button, FALSE, FALSE, 0);
frame18 = gtk_frame_new (_("Reminder"));
gtk_widget_set_name (frame18, "frame18");
- gtk_widget_ref (frame18);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame18", frame18,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame18);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame18", frame18,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame18);
gtk_box_pack_start (GTK_BOX (vbox10), frame18, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (frame18), 10);
hbox38 = gtk_hbox_new (FALSE, 0);
gtk_widget_set_name (hbox38, "hbox38");
- gtk_widget_ref (hbox38);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox38", hbox38,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox38);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox38", hbox38,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox38);
gtk_container_add (GTK_CONTAINER (frame18), hbox38);
reminder_cb = gtk_check_button_new_with_label (_("Use reminder"));
gtk_widget_set_name (reminder_cb, "reminder_cb");
- gtk_widget_ref (reminder_cb);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "reminder_cb", reminder_cb,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (reminder_cb);
+ g_object_set_data_full (G_OBJECT (config_dialog), "reminder_cb", reminder_cb,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (reminder_cb);
gtk_box_pack_start (GTK_BOX (hbox38), reminder_cb, FALSE, FALSE, 0);
reminder_text = gtk_entry_new ();
gtk_widget_set_name (reminder_text, "reminder_text");
- gtk_widget_ref (reminder_text);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "reminder_text", reminder_text,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (reminder_text);
+ g_object_set_data_full (G_OBJECT (config_dialog), "reminder_text", reminder_text,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (reminder_text);
gtk_box_pack_start (GTK_BOX (hbox38), reminder_text, TRUE, TRUE, 5);
label74 = gtk_label_new (_("Options"));
gtk_widget_set_name (label74, "label74");
- gtk_widget_ref (label74);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label74", label74,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label74);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label74", label74,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label74);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), label74);
frame16 = gtk_frame_new (_("What do these options mean?"));
gtk_widget_set_name (frame16, "frame16");
- gtk_widget_ref (frame16);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "frame16", frame16,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame16);
+ g_object_set_data_full (G_OBJECT (config_dialog), "frame16", frame16,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame16);
gtk_container_add (GTK_CONTAINER (notebook1), frame16);
gtk_container_set_border_width (GTK_CONTAINER (frame16), 10);
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_set_name (scrolledwindow1, "scrolledwindow1");
- gtk_widget_ref (scrolledwindow1);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "scrolledwindow1", scrolledwindow1,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (scrolledwindow1);
+ g_object_set_data_full (G_OBJECT (config_dialog), "scrolledwindow1", scrolledwindow1,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (scrolledwindow1);
gtk_container_add (GTK_CONTAINER (frame16), scrolledwindow1);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
@@ -1355,9 +1179,9 @@ create_config_dialog (void)
text1buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (text1));
gtk_text_buffer_get_iter_at_offset (text1buffer, &iter, 0);
gtk_widget_set_name (text1, "text1");
- gtk_widget_ref (text1);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "text1", text1,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (text1);
+ g_object_set_data_full (G_OBJECT (config_dialog), "text1", text1,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (text1);
gtk_container_add (GTK_CONTAINER (scrolledwindow1), text1);
gtk_text_buffer_insert (text1buffer, &iter,
@@ -1365,81 +1189,80 @@ create_config_dialog (void)
label86 = gtk_label_new (_("Help"));
gtk_widget_set_name (label86, "label86");
- gtk_widget_ref (label86);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "label86", label86,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (label86);
+ g_object_set_data_full (G_OBJECT (config_dialog), "label86", label86,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (label86);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 4), label86);
- dialog_action_area5 = GTK_DIALOG (config_dialog)->action_area;
+ dialog_action_area5 = gtk_dialog_get_action_area ((GtkDialog *) config_dialog);
gtk_widget_set_name (dialog_action_area5, "dialog_action_area5");
- gtk_object_set_data (GTK_OBJECT (config_dialog), "dialog_action_area5", dialog_action_area5);
+ g_object_set_data (G_OBJECT (config_dialog), "dialog_action_area5", dialog_action_area5);
gtk_widget_show (dialog_action_area5);
gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area5), 10);
hbox20 = gtk_hbox_new (TRUE, 5);
gtk_widget_set_name (hbox20, "hbox20");
- gtk_widget_ref (hbox20);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "hbox20", hbox20,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (hbox20);
+ g_object_set_data_full (G_OBJECT (config_dialog), "hbox20", hbox20,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (hbox20);
gtk_box_pack_start (GTK_BOX (dialog_action_area5), hbox20, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (hbox20), 10);
ok_button = gtk_button_new_with_label (_("OK"));
gtk_widget_set_name (ok_button, "ok_button");
- gtk_widget_ref (ok_button);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "ok_button", ok_button,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (ok_button);
+ g_object_set_data_full (G_OBJECT (config_dialog), "ok_button", ok_button,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (ok_button);
gtk_box_pack_start (GTK_BOX (hbox20), ok_button, FALSE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (ok_button, TRUE);
cancel_button = gtk_button_new_with_label (_("Cancel"));
gtk_widget_set_name (cancel_button, "cancel_button");
- gtk_widget_ref (cancel_button);
- gtk_object_set_data_full (GTK_OBJECT (config_dialog), "cancel_button", cancel_button,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (cancel_button);
+ g_object_set_data_full (G_OBJECT (config_dialog), "cancel_button", cancel_button,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (cancel_button);
gtk_box_pack_start (GTK_BOX (hbox20), cancel_button, FALSE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (cancel_button, TRUE);
- gtk_signal_connect (GTK_OBJECT (mon_def), "toggled",
- GTK_SIGNAL_FUNC (on_mon_def_toggled),
+ g_signal_connect (G_OBJECT (mon_def), "toggled",
+ G_CALLBACK (on_mon_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (tue_def), "toggled",
- GTK_SIGNAL_FUNC (on_tue_def_toggled),
+ g_signal_connect (G_OBJECT (tue_def), "toggled",
+ G_CALLBACK (on_tue_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (wed_def), "toggled",
- GTK_SIGNAL_FUNC (on_wed_def_toggled),
+ g_signal_connect (G_OBJECT (wed_def), "toggled",
+ G_CALLBACK (on_wed_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (thu_def), "toggled",
- GTK_SIGNAL_FUNC (on_thu_def_toggled),
+ g_signal_connect (G_OBJECT (thu_def), "toggled",
+ G_CALLBACK (on_thu_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (fri_def), "toggled",
- GTK_SIGNAL_FUNC (on_fri_def_toggled),
+ g_signal_connect (G_OBJECT (fri_def), "toggled",
+ G_CALLBACK (on_fri_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (sat_def), "toggled",
- GTK_SIGNAL_FUNC (on_sat_def_toggled),
+ g_signal_connect (G_OBJECT (sat_def), "toggled",
+ G_CALLBACK (on_sat_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (sun_def), "toggled",
- GTK_SIGNAL_FUNC (on_sun_def_toggled),
+ g_signal_connect (G_OBJECT (sun_def), "toggled",
+ G_CALLBACK (on_sun_def_toggled),
NULL);
- gtk_signal_connect (GTK_OBJECT (current_button), "clicked",
- GTK_SIGNAL_FUNC (alarm_current_volume),
+ g_signal_connect (G_OBJECT (current_button), "clicked",
+ G_CALLBACK (alarm_current_volume),
NULL);
- gtk_signal_connect (GTK_OBJECT (ok_button), "clicked",
- GTK_SIGNAL_FUNC (alarm_save),
+ g_signal_connect (G_OBJECT (ok_button), "clicked",
+ G_CALLBACK (alarm_save),
NULL);
- gtk_signal_connect_object (GTK_OBJECT (ok_button), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (config_dialog));
- gtk_signal_connect_object (GTK_OBJECT (cancel_button), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (config_dialog));
+ g_signal_connect_swapped (G_OBJECT (ok_button), "clicked",
+ G_CALLBACK (gtk_widget_destroy),
+ G_OBJECT (config_dialog));
+ g_signal_connect_swapped (G_OBJECT (cancel_button), "clicked",
+ G_CALLBACK (gtk_widget_destroy),
+ G_OBJECT (config_dialog));
gtk_widget_grab_default (ok_button);
- gtk_object_set_data (GTK_OBJECT (config_dialog), "tooltips", tooltips);
return config_dialog;
}
@@ -1456,51 +1279,50 @@ create_reminder_dialog (gchar *reminder_msg)
reminder_dialog = gtk_dialog_new ();
gtk_widget_set_name (reminder_dialog, "reminder_dialog");
- gtk_object_set_data (GTK_OBJECT (reminder_dialog), "reminder_dialog", reminder_dialog);
+ g_object_set_data (G_OBJECT (reminder_dialog), "reminder_dialog", reminder_dialog);
gtk_window_set_title (GTK_WINDOW (reminder_dialog), _("Reminder"));
- gtk_window_set_policy (GTK_WINDOW (reminder_dialog), TRUE, TRUE, FALSE);
- dialog_vbox6 = GTK_DIALOG (reminder_dialog)->vbox;
+ dialog_vbox6 = gtk_dialog_get_content_area ((GtkDialog *) reminder_dialog);
gtk_widget_set_name (dialog_vbox6, "dialog_vbox6");
- gtk_object_set_data (GTK_OBJECT (reminder_dialog), "dialog_vbox6", dialog_vbox6);
+ g_object_set_data (G_OBJECT (reminder_dialog), "dialog_vbox6", dialog_vbox6);
gtk_widget_show (dialog_vbox6);
frame19 = gtk_frame_new (_("Your reminder for today is.."));
gtk_widget_set_name (frame19, "frame19");
- gtk_widget_ref (frame19);
- gtk_object_set_data_full (GTK_OBJECT (reminder_dialog), "frame19", frame19,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (frame19);
+ g_object_set_data_full (G_OBJECT (reminder_dialog), "frame19", frame19,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (frame19);
gtk_box_pack_start (GTK_BOX (dialog_vbox6), frame19, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (frame19), 10);
reminder_entry = gtk_entry_new ();
gtk_widget_set_name (reminder_entry, "reminder_entry");
- gtk_widget_ref (reminder_entry);
- gtk_object_set_data_full (GTK_OBJECT (reminder_dialog), "reminder_entry", reminder_entry,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (reminder_entry);
+ g_object_set_data_full (G_OBJECT (reminder_dialog), "reminder_entry", reminder_entry,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (reminder_entry);
gtk_container_add (GTK_CONTAINER (frame19), reminder_entry);
- gtk_entry_set_editable (GTK_ENTRY (reminder_entry), FALSE);
+ gtk_editable_set_editable ((GtkEditable *) reminder_entry, FALSE);
gtk_entry_set_text (GTK_ENTRY (reminder_entry), reminder_msg);
- dialog_action_area6 = GTK_DIALOG (reminder_dialog)->action_area;
+ dialog_action_area6 = gtk_dialog_get_action_area ((GtkDialog *) reminder_dialog);
gtk_widget_set_name (dialog_action_area6, "dialog_action_area6");
- gtk_object_set_data (GTK_OBJECT (reminder_dialog), "dialog_action_area6", dialog_action_area6);
+ g_object_set_data (G_OBJECT (reminder_dialog), "dialog_action_area6", dialog_action_area6);
gtk_widget_show (dialog_action_area6);
gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area6), 10);
button11 = gtk_button_new_with_label (_("Thankyou"));
gtk_widget_set_name (button11, "button11");
- gtk_widget_ref (button11);
- gtk_object_set_data_full (GTK_OBJECT (reminder_dialog), "button11", button11,
- (GtkDestroyNotify) gtk_widget_unref);
+ g_object_ref (button11);
+ g_object_set_data_full (G_OBJECT (reminder_dialog), "button11", button11,
+ (GDestroyNotify) g_object_unref);
gtk_widget_show (button11);
gtk_box_pack_start (GTK_BOX (dialog_action_area6), button11, FALSE, FALSE, 0);
- gtk_signal_connect_object (GTK_OBJECT (button11), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT(reminder_dialog));
+ g_signal_connect_swapped (G_OBJECT (button11), "clicked",
+ G_CALLBACK (gtk_widget_destroy),
+ G_OBJECT(reminder_dialog));
return reminder_dialog;
}
diff --git a/src/alarm/interface.h b/src/alarm/interface.h
index 958a6a2..3e8ca17 100644
--- a/src/alarm/interface.h
+++ b/src/alarm/interface.h
@@ -2,10 +2,7 @@
* DO NOT EDIT THIS FILE - it is generated by Glade.
*/
-GtkWidget* create_about_dialog (void);
GtkWidget* create_alarm_dialog (void);
-GtkWidget* create_playlist_fileselection (void);
-GtkWidget* create_warning_dialog (void);
GtkWidget* create_config_dialog (void);
GtkWidget* create_reminder_dialog (gchar *reminder_msg);
diff --git a/src/alarm/support.h b/src/alarm/support.h
deleted file mode 100644
index 7cf17cd..0000000
--- a/src/alarm/support.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * needed for glade
- */
-
-/*
- * vi:ai:expandtab:ts=2 sts=2 shiftwidth=2:nowrap:
- */
diff --git a/src/albumart/Makefile b/src/albumart/Makefile
new file mode 100644
index 0000000..fe066cd
--- /dev/null
+++ b/src/albumart/Makefile
@@ -0,0 +1,12 @@
+PLUGIN = albumart${PLUGIN_SUFFIX}
+
+SRCS = albumart.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
+
+CFLAGS += ${PLUGIN_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} -I../.. ${GTK_CFLAGS}
+LIBS += ${GTK_LIBS}
diff --git a/src/albumart/albumart.c b/src/albumart/albumart.c
new file mode 100644
index 0000000..632a985
--- /dev/null
+++ b/src/albumart/albumart.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2011 William Pitcock <nenolod@dereferenced.org>.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <audacious/plugin.h>
+#include <gtk/gtk.h>
+
+#include <audacious/debug.h>
+#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
+#include <audacious/playlist.h>
+#include <libaudcore/hook.h>
+#include <libaudgui/libaudgui.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+static gint width;
+static gint height;
+
+static void draw_albumart(GtkWidget *widget, cairo_t *cr)
+{
+ GdkPixbuf *album = NULL;
+
+ if (aud_drct_get_playing() && album == NULL)
+ {
+ album = audgui_pixbuf_for_current ();
+ g_return_if_fail (album != NULL);
+ if (gdk_pixbuf_get_width(album) > width ||
+ gdk_pixbuf_get_height(album) > height)
+ audgui_pixbuf_scale_within(&album, width < height ? width : height);
+ }
+
+ if (album != NULL)
+ {
+ double x = (width - gdk_pixbuf_get_width(album)) / 2;
+ double y = (height - gdk_pixbuf_get_height(album)) / 2;
+
+ gdk_cairo_set_source_pixbuf(cr, album, x, y);
+ cairo_paint_with_alpha(cr, 1.0);
+ }
+
+#if ! GTK_CHECK_VERSION (3, 0, 0)
+ cairo_destroy(cr);
+#endif
+
+ if (album != NULL)
+ g_object_unref(album);
+}
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+static gboolean draw_event (GtkWidget * widget, cairo_t * cr, gpointer unused)
+{
+#else
+static gboolean expose_event (GtkWidget * widget, GdkEventExpose * event, gpointer unused)
+{
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
+#endif
+
+ draw_albumart(widget, cr);
+
+ return TRUE;
+}
+
+static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event)
+{
+ width = event->width;
+ height = event->height;
+ gtk_widget_queue_draw(widget);
+
+ return TRUE;
+}
+
+static void playback_start (gpointer data, GtkWidget *area)
+{
+ gtk_widget_queue_draw(area);
+}
+
+static /* GtkWidget * */ gpointer get_widget (void)
+{
+ GtkWidget *area = gtk_drawing_area_new();
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+ g_signal_connect(area, "draw", (GCallback) draw_event, NULL);
+#else
+ g_signal_connect(area, "expose-event", (GCallback) expose_event, NULL);
+#endif
+ g_signal_connect(area, "configure-event", (GCallback) configure_event, NULL);
+
+ hook_associate("playback begin", (HookFunction) playback_start, area);
+
+ gtk_widget_set_size_request(area, 128, 128);
+
+ return area;
+}
+
+static void cleanup(void)
+{
+ hook_dissociate("playback begin", (HookFunction) playback_start);
+}
+
+AUD_GENERAL_PLUGIN
+(
+ .name = "Album Art",
+ .cleanup = cleanup,
+ .get_widget = get_widget
+)
diff --git a/src/alsa/Makefile b/src/alsa/Makefile
index 2a97887..00fe207 100644
--- a/src/alsa/Makefile
+++ b/src/alsa/Makefile
@@ -9,6 +9,6 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
-CFLAGS += -std=gnu99 ${PLUGIN_CFLAGS} ${GTK_CFLAGS} ${ALSA_CFLAGS}
-CPPFLAGS += -I../..
-LIBS += ${GTK_LIBS} ${ALSA_LIBS}
+CFLAGS += ${PLUGIN_CFLAGS}
+CPPFLAGS += ${PTHREAD_CFLAGS} ${GTK_CFLAGS} ${ALSA_CFLAGS} -I../..
+LIBS += ${PTHREAD_LIBS} ${GTK_LIBS} ${ALSA_LIBS}
diff --git a/src/alsa/alsa.c b/src/alsa/alsa.c
index 9bcb12e..35481b6 100755..100644
--- a/src/alsa/alsa.c
+++ b/src/alsa/alsa.c
@@ -1,6 +1,6 @@
/*
* ALSA Output Plugin for Audacious
- * Copyright 2009-2010 John Lindgren
+ * Copyright 2009-2011 John Lindgren
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -48,8 +48,9 @@
#include <alsa/asoundlib.h>
#include <glib.h>
-#include <audacious/audconfig.h>
#include <audacious/debug.h>
+#include <audacious/misc.h>
+#include <audacious/plugin.h>
#include "alsa.h"
@@ -82,7 +83,7 @@ static int alsa_period; /* milliseconds */
static int64_t alsa_written; /* frames */
static char alsa_prebuffer, alsa_paused;
-static int alsa_paused_time; /* milliseconds */
+static int alsa_paused_delay; /* frames */
static int poll_pipe[2];
static int poll_count;
@@ -155,8 +156,9 @@ static void * pump (void * unused)
pthread_mutex_lock (& alsa_mutex);
pthread_cond_broadcast (& alsa_cond); /* signal thread started */
- gboolean workaround = FALSE;
- gint slept = 0;
+ char failed = 0;
+ char workaround = 0;
+ int slept = 0;
while (! pump_quit)
{
@@ -184,6 +186,8 @@ static void * pump (void * unused)
CHECK_VAL_RECOVER (written, snd_pcm_writei, alsa_handle, (char *)
alsa_buffer + alsa_buffer_data_start, length);
+ failed = 0;
+
written = snd_pcm_frames_to_bytes (alsa_handle, written);
alsa_buffer_data_start += written;
alsa_buffer_data_length -= written;
@@ -204,17 +208,8 @@ static void * pump (void * unused)
if (slept > 4)
{
- static gboolean warned = FALSE;
- if (! warned)
- {
- fprintf (stderr, "\n** WARNING **\nAudacious has detected that "
- "your ALSA device has a broken timer. A workaround\nis being "
- "used to prevent CPU overload. Please report this problem to "
- "your\nLinux distributor or to the ALSA developers.\n\n");
- warned = TRUE;
- }
-
- workaround = TRUE;
+ AUDDBG ("Activating timer workaround.\n");
+ workaround = 1;
}
if (workaround && slept)
@@ -230,9 +225,16 @@ static void * pump (void * unused)
}
pthread_mutex_lock (& alsa_mutex);
+ continue;
+
+ FAILED:
+ if (failed)
+ break;
+
+ failed = 1;
+ CHECK (snd_pcm_prepare, alsa_handle);
}
-FAILED:
pthread_mutex_unlock (& alsa_mutex);
return NULL;
}
@@ -276,17 +278,11 @@ FAILED:
return delay;
}
-static int get_output_time (void)
-{
- return (int64_t) (alsa_written - snd_pcm_bytes_to_frames (alsa_handle,
- alsa_buffer_data_length) - get_delay ()) * 1000 / alsa_rate;
-}
-
-OutputPluginInitStatus alsa_init (void)
+int alsa_init (void)
{
alsa_handle = NULL;
alsa_initted = 0;
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
+ return 1;
}
void alsa_soft_init (void)
@@ -375,7 +371,8 @@ int alsa_open_audio (int aud_format, int rate, int channels)
alsa_channels = channels;
alsa_rate = rate;
- unsigned int useconds = 1000 * MIN (1000, aud_cfg->output_buffer_size / 2);
+ int total_buffer = aud_get_int (NULL, "output_buffer_size");
+ unsigned int useconds = 1000 * MIN (1000, total_buffer / 2);
int direction = 0;
CHECK_NOISY (snd_pcm_hw_params_set_buffer_time_near, alsa_handle, params,
& useconds, & direction);
@@ -389,8 +386,7 @@ int alsa_open_audio (int aud_format, int rate, int channels)
CHECK_NOISY (snd_pcm_hw_params, alsa_handle, params);
- int soft_buffer = MAX (aud_cfg->output_buffer_size / 2,
- aud_cfg->output_buffer_size - hard_buffer);
+ int soft_buffer = MAX (total_buffer / 2, total_buffer - hard_buffer);
AUDDBG ("Buffer: hardware %d ms, software %d ms, period %d ms.\n",
hard_buffer, soft_buffer, alsa_period);
@@ -403,7 +399,7 @@ int alsa_open_audio (int aud_format, int rate, int channels)
alsa_written = 0;
alsa_prebuffer = 1;
alsa_paused = 0;
- alsa_paused_time = 0;
+ alsa_paused_delay = 0;
if (! poll_setup ())
goto FAILED;
@@ -567,8 +563,17 @@ int alsa_written_time (void)
int alsa_output_time (void)
{
pthread_mutex_lock (& alsa_mutex);
- int time = (alsa_prebuffer || alsa_paused) ? alsa_paused_time :
- get_output_time ();
+
+ int64_t frames = alsa_written - snd_pcm_bytes_to_frames (alsa_handle,
+ alsa_buffer_data_length);
+
+ if (alsa_prebuffer || alsa_paused)
+ frames -= alsa_paused_delay;
+ else
+ frames -= get_delay ();
+
+ int time = frames * 1000 / alsa_rate;
+
pthread_mutex_unlock (& alsa_mutex);
return time;
}
@@ -587,7 +592,7 @@ FAILED:
alsa_written = (int64_t) time * alsa_rate / 1000;
alsa_prebuffer = 1;
- alsa_paused_time = time;
+ alsa_paused_delay = 0;
pthread_cond_broadcast (& alsa_cond); /* interrupt period wait */
@@ -596,7 +601,7 @@ FAILED:
pthread_mutex_unlock (& alsa_mutex);
}
-void alsa_pause (short pause)
+void alsa_pause (int pause)
{
AUDDBG ("%sause.\n", pause ? "P" : "Unp");
pthread_mutex_lock (& alsa_mutex);
@@ -606,7 +611,7 @@ void alsa_pause (short pause)
if (! alsa_prebuffer)
{
if (pause)
- alsa_paused_time = get_output_time ();
+ alsa_paused_delay = get_delay ();
CHECK (snd_pcm_pause, alsa_handle, pause);
}
@@ -688,6 +693,16 @@ void alsa_get_volume (int * left, int * right)
CHECK (snd_mixer_selem_get_playback_volume, alsa_mixer_element,
SND_MIXER_SCHN_MONO, & left_l);
right_l = left_l;
+
+ if (snd_mixer_selem_has_playback_switch (alsa_mixer_element))
+ {
+ int on = 0;
+ CHECK (snd_mixer_selem_get_playback_switch, alsa_mixer_element,
+ SND_MIXER_SCHN_MONO, & on);
+
+ if (! on)
+ left_l = right_l = 0;
+ }
}
else
{
@@ -695,6 +710,20 @@ void alsa_get_volume (int * left, int * right)
SND_MIXER_SCHN_FRONT_LEFT, & left_l);
CHECK (snd_mixer_selem_get_playback_volume, alsa_mixer_element,
SND_MIXER_SCHN_FRONT_RIGHT, & right_l);
+
+ if (snd_mixer_selem_has_playback_switch (alsa_mixer_element))
+ {
+ int left_on = 0, right_on = 0;
+ CHECK (snd_mixer_selem_get_playback_switch, alsa_mixer_element,
+ SND_MIXER_SCHN_FRONT_LEFT, & left_on);
+ CHECK (snd_mixer_selem_get_playback_switch, alsa_mixer_element,
+ SND_MIXER_SCHN_FRONT_RIGHT, & right_on);
+
+ if (! left_on)
+ left_l = 0;
+ if (! right_on)
+ right_l = 0;
+ }
}
FAILED:
diff --git a/src/alsa/alsa.h b/src/alsa/alsa.h
index 890a98f..93900ad 100644
--- a/src/alsa/alsa.h
+++ b/src/alsa/alsa.h
@@ -20,12 +20,8 @@
#ifndef AUDACIOUS_ALSA_H
#define AUDACIOUS_ALSA_H
-#include "../../config.h"
-
#include <stdio.h>
-#include <audacious/plugin.h>
-
#define ERROR(...) fprintf (stderr, "alsa: " __VA_ARGS__)
#define ERROR_NOISY alsa_error
@@ -54,7 +50,7 @@ do { \
} while (0)
/* alsa.c */
-OutputPluginInitStatus alsa_init (void);
+int alsa_init (void);
void alsa_soft_init (void);
void alsa_cleanup (void);
int alsa_open_audio (gint aud_format, int rate, int channels);
@@ -67,7 +63,7 @@ void alsa_set_written_time (int time);
int alsa_written_time (void);
int alsa_output_time (void);
void alsa_flush (int time);
-void alsa_pause (short pause);
+void alsa_pause (int pause);
void alsa_open_mixer (void);
void alsa_close_mixer (void);
void alsa_get_volume (int * left, int * right);
diff --git a/src/alsa/config.c b/src/alsa/config.c
index e7723d7..b07d218 100644
--- a/src/alsa/config.c
+++ b/src/alsa/config.c
@@ -20,12 +20,13 @@
#include <alsa/asoundlib.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
#include "alsa.h"
+#include "config.h"
char * alsa_config_pcm = NULL, * alsa_config_mixer = NULL,
* alsa_config_mixer_element = NULL;
@@ -69,7 +70,6 @@ static int list_has_member (GtkListStore * list, const char * text)
static void get_defined_devices (const char * type, int capture, void (* found)
(const char * name, const char * description))
{
-#ifdef HAVE_SND_DEVICE_NAME_HINT
void * * hints = NULL;
int count;
@@ -95,7 +95,6 @@ static void get_defined_devices (const char * type, int capture, void (* found)
FAILED:
if (hints != NULL)
snd_device_name_free_hint (hints);
-#endif
}
static char * get_card_description (int card)
@@ -277,24 +276,37 @@ static void mixer_element_list_fill (void)
get_mixer_elements (alsa_config_mixer, mixer_element_found);
}
-static void guess_mixer_element (void)
+static void fill_lists (void)
{
- static const char * guesses[] = {"PCM", "Wave", "Master"};
- int count;
+ if (! pcm_list)
+ {
+ pcm_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ pcm_list_fill ();
+ }
- if (alsa_config_mixer_element != NULL)
+ if (! mixer_list)
{
- if (list_has_member (mixer_element_list, alsa_config_mixer_element))
- return;
+ mixer_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ mixer_list_fill ();
+ }
- free (alsa_config_mixer_element);
- alsa_config_mixer_element = NULL;
+ if (! mixer_element_list)
+ {
+ mixer_element_list = gtk_list_store_new (1, G_TYPE_STRING);
+ mixer_element_list_fill ();
}
+}
- for (count = 0; count < G_N_ELEMENTS (guesses); count ++)
+static void guess_mixer_element (void)
+{
+ fill_lists ();
+
+ static const char * guesses[] = {"Master", "PCM", "Wave"};
+ for (int count = 0; count < G_N_ELEMENTS (guesses); count ++)
{
if (list_has_member (mixer_element_list, guesses[count]))
{
+ free (alsa_config_mixer_element);
alsa_config_mixer_element = strdup (guesses[count]);
return;
}
@@ -303,70 +315,56 @@ static void guess_mixer_element (void)
ERROR_NOISY ("No suitable mixer element found.\n");
}
+static const gchar * const alsa_defaults[] = {
+ "pcm", "default",
+ "mixer", "default",
+ "drain-workaround", "TRUE",
+ NULL};
+
void alsa_config_load (void)
{
- mcs_handle_t * database = aud_cfg_db_open ();
+ aud_config_set_defaults ("alsa", alsa_defaults);
- pcm_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- mixer_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- mixer_element_list = gtk_list_store_new (1, G_TYPE_STRING);
+ alsa_config_pcm = aud_get_string ("alsa", "pcm");
+ alsa_config_mixer = aud_get_string ("alsa", "mixer");
+ alsa_config_mixer_element = aud_get_string ("alsa", "mixer-element");
+ alsa_config_drain_workaround = aud_get_bool ("alsa", "drain-workaround");
- pcm_list_fill ();
- aud_cfg_db_get_string (database, "alsa", "pcm", & alsa_config_pcm);
+ if (! alsa_config_mixer_element[0])
+ guess_mixer_element ();
+}
- if (alsa_config_pcm == NULL)
- alsa_config_pcm = strdup ("default");
- else if (strcmp (alsa_config_pcm, "default") && ! list_has_member (pcm_list,
- alsa_config_pcm))
+void alsa_config_save (void)
+{
+ if (pcm_list)
{
- free (alsa_config_pcm);
- alsa_config_pcm = strdup ("default");
+ g_object_unref (pcm_list);
+ pcm_list = NULL;
}
- mixer_list_fill ();
- aud_cfg_db_get_string (database, "alsa", "mixer",
- & alsa_config_mixer);
-
- if (alsa_config_mixer == NULL)
- alsa_config_mixer = strdup ("default");
- else if (strcmp (alsa_config_mixer, "default") && ! list_has_member
- (mixer_list, alsa_config_mixer))
+ if (mixer_list)
{
- free (alsa_config_mixer);
- alsa_config_mixer = strdup ("default");
+ g_object_unref (mixer_list);
+ mixer_list = NULL;
}
- mixer_element_list_fill ();
- aud_cfg_db_get_string (database, "alsa", "mixer-element",
- & alsa_config_mixer_element);
- guess_mixer_element ();
-
- aud_cfg_db_get_bool (database, "alsa", "drain-workaround", &
- alsa_config_drain_workaround);
-
- aud_cfg_db_close (database);
-}
-
-void alsa_config_save (void)
-{
- mcs_handle_t * database = aud_cfg_db_open ();
+ if (mixer_element_list)
+ {
+ g_object_unref (mixer_element_list);
+ mixer_element_list = NULL;
+ }
- g_object_unref (pcm_list);
- g_object_unref (mixer_list);
- g_object_unref (mixer_element_list);
-
- aud_cfg_db_set_string (database, "alsa", "pcm", alsa_config_pcm);
- aud_cfg_db_set_string (database, "alsa", "mixer", alsa_config_mixer);
- aud_cfg_db_set_string (database, "alsa", "mixer-element",
- alsa_config_mixer_element);
- aud_cfg_db_set_bool (database, "alsa", "drain-workaround",
- alsa_config_drain_workaround);
+ aud_set_string ("alsa", "pcm", alsa_config_pcm);
+ aud_set_string ("alsa", "mixer", alsa_config_mixer);
+ aud_set_string ("alsa", "mixer-element", alsa_config_mixer_element);
+ aud_set_bool ("alsa", "drain-workaround", alsa_config_drain_workaround);
free (alsa_config_pcm);
+ alsa_config_pcm = NULL;
free (alsa_config_mixer);
+ alsa_config_mixer = NULL;
free (alsa_config_mixer_element);
-
- aud_cfg_db_close (database);
+ alsa_config_mixer_element = NULL;
}
static GtkWidget * combo_new (const char * title, GtkListStore * list,
@@ -546,6 +544,7 @@ void alsa_configure (void)
return;
}
+ fill_lists ();
create_window ();
combo_select_by_text (pcm_combo, pcm_list, alsa_config_pcm);
combo_select_by_text (mixer_combo, mixer_list, alsa_config_mixer);
diff --git a/src/alsa/plugin.c b/src/alsa/plugin.c
index 812f209..1fa495e 100644
--- a/src/alsa/plugin.c
+++ b/src/alsa/plugin.c
@@ -22,15 +22,17 @@
#include <gtk/gtk.h>
#include <audacious/i18n.h>
+#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
#include "alsa.h"
+#include "config.h"
-static OutputPlugin plugin =
-{
- .description = "ALSA Output Plugin",
- .probe_priority = 2,
+AUD_OUTPUT_PLUGIN
+(
+ .name = "ALSA",
+ .probe_priority = 5,
.init = alsa_init,
.cleanup = alsa_cleanup,
.open_audio = alsa_open_audio,
@@ -48,11 +50,7 @@ static OutputPlugin plugin =
.get_volume = alsa_get_volume,
.about = alsa_about,
.configure = alsa_configure,
-};
-
-static OutputPlugin * list[] = {& plugin, NULL};
-
-SIMPLE_OUTPUT_PLUGIN (alsa, list)
+)
void alsa_about (void)
{
@@ -82,7 +80,7 @@ static int show_error (void * message)
audgui_simple_message (& window, GTK_MESSAGE_ERROR, _("ALSA error"),
message);
- free (message);
+ g_free (message);
return 0;
}
diff --git a/src/amidi-plug/Makefile b/src/amidi-plug/Makefile
index f6d2e9b..2af7276 100644
--- a/src/amidi-plug/Makefile
+++ b/src/amidi-plug/Makefile
@@ -19,6 +19,6 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PANGO_CFLAGS} ${GMODULE_CFLAGS} ${MOWGLI_CFLAGS} \
- -DAMIDIPLUGBACKENDDIR=\"${plugindir}/${AMIDIPLUG_BACKEND_DIR}\" -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${PANGO_LIBS} ${GMODULE_LIBS} -lpthread ./pcfg/libpcfg.a
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PANGO_CFLAGS} ${GMODULE_CFLAGS} \
+ -DAMIDIPLUGBACKENDDIR=\"${plugindir}/${AMIDIPLUG_BACKEND_DIR}\" ${PTHREAD_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${PANGO_LIBS} ${GMODULE_LIBS} ${PTHREAD_LIBS} ./pcfg/libpcfg.a ${GLIB_LIBS}
diff --git a/src/amidi-plug/amidi-plug.c b/src/amidi-plug/amidi-plug.c
index c7c2f87..ec19db1 100644
--- a/src/amidi-plug/amidi-plug.c
+++ b/src/amidi-plug/amidi-plug.c
@@ -19,14 +19,40 @@
*/
#include <audacious/drct.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
-#include <libaudcore/eventqueue.h>
+#include <libaudcore/hook.h>
#include "amidi-plug.h"
-InputPlugin *amidiplug_iplist[] = { &amidiplug_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN (amidi-plug, amidiplug_iplist)
+static void amidiplug_play_loop (InputPlayback * playback);
+
+static gboolean amidiplug_play (InputPlayback * playback, const gchar *
+ filename_uri, VFSFile * file, gint start_time, gint stop_time, gboolean pause);
+static void amidiplug_pause (InputPlayback * playback, gboolean paused);
+static void amidiplug_mseek (InputPlayback * playback, gint time);
+static Tuple * amidiplug_get_song_tuple (const gchar * filename_uri, VFSFile *
+ file);
+
+AUD_INPUT_PLUGIN
+(
+ .name = "AMIDI-Plug (MIDI Player)",
+ .init = amidiplug_init,
+ .about = amidiplug_aboutbox,
+ .configure = amidiplug_configure,
+ .play = amidiplug_play,
+ .stop = amidiplug_stop,
+ .pause = amidiplug_pause,
+ .mseek = amidiplug_mseek,
+ .get_time = amidiplug_get_time,
+ .get_volume = amidiplug_get_volume,
+ .set_volume = amidiplug_set_volume,
+ .cleanup = amidiplug_cleanup,
+ .probe_for_tuple = amidiplug_get_song_tuple,
+ .file_info_box = amidiplug_file_info_box,
+ .is_our_file_from_vfs = amidiplug_is_our_file_from_vfs,
+ .extensions = amidiplug_vfs_extensions,
+)
static GMutex * init_mutex;
static gboolean initted;
@@ -40,10 +66,11 @@ static GCond * audio_control_cond;
static gboolean audio_stop_flag, audio_pause_flag;
static gint audio_seek_time;
-static void amidiplug_init (void)
+static gboolean amidiplug_init (void)
{
init_mutex = g_mutex_new ();
initted = FALSE;
+ return TRUE;
}
static void soft_init (void)
@@ -151,24 +178,9 @@ static void amidiplug_stop( InputPlayback * playback )
amidiplug_playing_status = AMIDIPLUG_STOP;
g_cond_signal (control_cond);
g_mutex_unlock( amidiplug_playing_mutex );
-
- g_thread_join (playback->thread);
- playback->thread = NULL;
-
- /* kill the sequencer (while it may have been already killed if coming
- from pause, it's safe to do anyway since it checks for multiple calls) */
- if ( backend.gmodule != NULL )
- backend.seq_off();
-
- /* call seq_stop */
- if ( backend.gmodule != NULL )
- backend.seq_stop();
-
- /* free midi data (if it has not been freed yet) */
- i_midi_free( &midifile );
}
-static void amidiplug_pause (InputPlayback * playback, gshort paused)
+static void amidiplug_pause (InputPlayback * playback, gboolean paused)
{
g_mutex_lock (amidiplug_playing_mutex);
amidiplug_playing_status = paused ? AMIDIPLUG_PAUSE : AMIDIPLUG_PLAY;
@@ -177,7 +189,7 @@ static void amidiplug_pause (InputPlayback * playback, gshort paused)
g_mutex_unlock (amidiplug_playing_mutex);
}
-static void amidiplug_mseek (InputPlayback * playback, gulong time)
+static void amidiplug_mseek (InputPlayback * playback, gint time)
{
g_mutex_lock (amidiplug_playing_mutex);
amidiplug_playing_status = AMIDIPLUG_SEEK;
@@ -252,26 +264,17 @@ static gint amidiplug_set_volume( gint l , gint r )
}
-static Tuple * amidiplug_get_song_tuple( const gchar *filename_uri )
+static Tuple * amidiplug_get_song_tuple (const gchar * filename_uri, VFSFile *
+ file)
{
/* song title, get it from the filename */
Tuple *tuple = tuple_new_from_filename(filename_uri);
- gchar *title, *filename = g_filename_from_uri(filename_uri, NULL, NULL);
midifile_t mf;
soft_init ();
- if (filename != NULL)
- title = g_path_get_basename(filename);
- else
- title = g_strdup(filename_uri);
-
- tuple_associate_string(tuple, FIELD_TITLE, NULL, title);
- g_free(title);
- g_free(filename);
-
if ( i_midi_parse_from_filename( filename_uri , &mf ) )
- tuple_associate_int(tuple, FIELD_LENGTH, NULL, mf.length / 1000);
+ tuple_set_int(tuple, FIELD_LENGTH, NULL, mf.length / 1000);
i_midi_free( &mf );
@@ -279,13 +282,13 @@ static Tuple * amidiplug_get_song_tuple( const gchar *filename_uri )
}
-static void amidiplug_play( InputPlayback * playback )
+static gboolean amidiplug_play (InputPlayback * playback, const gchar *
+ filename_uri, VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
- gchar * filename_uri = playback->filename;
- gchar * filename = NULL;
+ g_return_val_if_fail (file != NULL, FALSE);
+
gint port_count = 0;
gint au_samplerate = -1, au_bitdepth = -1, au_channels = -1;
- Tuple *tu;
soft_init ();
@@ -298,7 +301,7 @@ static void amidiplug_play( InputPlayback * playback )
AMIDIPLUG_MESSAGE_WARN , NULL , TRUE );
*/
amidiplug_playing_status = AMIDIPLUG_ERR;
- return;
+ return FALSE;
}
/* get information about audio from backend, if available */
@@ -320,21 +323,14 @@ static void amidiplug_play( InputPlayback * playback )
port_count = backend.seq_get_port_count();
if ( port_count < 1 )
{
- event_queue ("interface show error", _("You have not selected any "
- "sequencer ports for MIDI playback. You can do so in the MIDI plugin "
- "preferences."));
+ aud_interface_show_error (_("You have not selected any sequencer ports for "
+ "MIDI playback. You can do so in the MIDI plugin preferences."));
amidiplug_playing_status = AMIDIPLUG_ERR;
- return;
+ return FALSE;
}
DEBUGMSG( "PLAY requested, opening file: %s\n" , filename_uri );
- midifile.file_pointer = VFS_FOPEN( filename_uri , "rb" );
- if (!midifile.file_pointer)
- {
- g_warning( "Cannot open %s\n" , filename_uri );
- amidiplug_playing_status = AMIDIPLUG_ERR;
- return;
- }
+ midifile.file_pointer = file;
midifile.file_name = g_strdup(filename_uri);
switch( i_midi_file_read_id( &midifile ) )
@@ -385,20 +381,10 @@ static void amidiplug_play( InputPlayback * playback )
i_midi_setget_length( &midifile );
DEBUGMSG( "PLAY requested, song length calculated: %i msec\n" , (gint)(midifile.length / 1000) );
-
- /* our length is in microseconds, but the player wants milliseconds */
- filename = g_filename_from_uri( filename_uri , NULL , NULL );
- if ( !filename ) filename = g_strdup( filename_uri );
- tu = amidiplug_get_song_tuple(filename_uri);
-
- playback->set_tuple( playback , tu );
- playback->set_params( playback , NULL , 0 ,
- au_bitdepth * au_samplerate * au_channels / 8 ,
- au_samplerate , au_channels );
- g_free( filename );
+ playback->set_params (playback, au_bitdepth * au_samplerate * au_channels
+ / 8, au_samplerate, au_channels);
/* done with file */
- VFS_FCLOSE( midifile.file_pointer );
midifile.file_pointer = NULL;
/* play play play! */
@@ -408,7 +394,6 @@ static void amidiplug_play( InputPlayback * playback )
g_mutex_unlock( amidiplug_playing_mutex );
seek_time = -1;
- playback->playing = TRUE;
playback->set_pb_ready(playback);
amidiplug_play_loop(playback);
break;
@@ -425,12 +410,7 @@ static void amidiplug_play( InputPlayback * playback )
if (! backend.autonomous_audio)
playback->output->close_audio ();
- if ( midifile.file_pointer )
- {
- /* done with file */
- VFS_FCLOSE( midifile.file_pointer );
- midifile.file_pointer = NULL;
- }
+ return TRUE;
}
static void * audio_loop (void * arg)
@@ -482,8 +462,7 @@ static void * audio_loop (void * arg)
g_mutex_unlock (audio_control_mutex);
if (backend.seq_output (& buffer, & buffer_size))
- playback->pass_audio (playback, FMT_S16_NE, 2, buffer_size, buffer,
- NULL);
+ playback->output->write_audio (buffer, buffer_size);
}
g_free (buffer);
@@ -495,7 +474,7 @@ static void audio_start (InputPlayback * playback)
audio_stop_flag = FALSE;
audio_pause_flag = FALSE;
audio_seek_time = -1;
- audio_thread = g_thread_create (audio_loop, playback, TRUE, NULL);
+ audio_thread = g_thread_create (audio_loop, (void *) playback, TRUE, NULL);
}
static void audio_seek (gint time)
@@ -546,10 +525,8 @@ static void do_pause (gboolean pause)
}
}
-
-gpointer amidiplug_play_loop( gpointer arg )
+static void amidiplug_play_loop (InputPlayback * playback)
{
- InputPlayback *playback = arg;
gint j = 0;
gboolean rewind = TRUE, paused = FALSE, stopped = FALSE;
@@ -730,7 +707,9 @@ gpointer amidiplug_play_loop( gpointer arg )
}
}
- return NULL;
+ backend.seq_off ();
+ backend.seq_stop ();
+ i_midi_free (& midifile);
}
diff --git a/src/amidi-plug/amidi-plug.h b/src/amidi-plug/amidi-plug.h
index 9496d8c..9022f25 100644
--- a/src/amidi-plug/amidi-plug.h
+++ b/src/amidi-plug/amidi-plug.h
@@ -59,41 +59,16 @@ amidiplug_cfg_ap_t amidiplug_cfg_ap =
static const gchar * const amidiplug_vfs_extensions[] = {"mid", "midi", "rmi",
"rmid", NULL};
-gpointer amidiplug_play_loop( gpointer );
void amidiplug_skipto( gint );
-static void amidiplug_init( void );
+static gboolean amidiplug_init (void);
static void amidiplug_cleanup( void );
static void amidiplug_aboutbox( void );
static void amidiplug_configure( void );
static gint amidiplug_is_our_file_from_vfs( const gchar * , VFSFile * );
-static void amidiplug_play( InputPlayback * );
static void amidiplug_stop( InputPlayback * );
-static void amidiplug_pause( InputPlayback *, gshort );
-static void amidiplug_mseek (InputPlayback * playback, gulong time);
static gint amidiplug_get_time( InputPlayback * );
static gint amidiplug_get_volume( gint * , gint * );
static gint amidiplug_set_volume( gint , gint );
-static Tuple *amidiplug_get_song_tuple( const gchar * );
static void amidiplug_file_info_box( const gchar * );
-InputPlugin amidiplug_ip =
-{
- .description = "AMIDI-Plug " AMIDIPLUG_VERSION " (MIDI Player)", /* description */
- .init = amidiplug_init, /* init */
- .about = amidiplug_aboutbox, /* aboutbox */
- .configure = amidiplug_configure, /* configure */
- .play_file = amidiplug_play, /* play_file */
- .stop = amidiplug_stop, /* stop */
- .pause = amidiplug_pause, /* pause */
- .mseek = amidiplug_mseek, /* seek */
- .get_time = amidiplug_get_time, /* get_time */
- .get_volume = amidiplug_get_volume, /* get_volume */
- .set_volume = amidiplug_set_volume, /* set_volume */
- .cleanup = amidiplug_cleanup, /* cleanup */
- .get_song_tuple = amidiplug_get_song_tuple, /* get_song_info */
- .file_info_box = amidiplug_file_info_box, /* file_info_box */
- .is_our_file_from_vfs = amidiplug_is_our_file_from_vfs, /* is_our_file_from_vfs */
- .vfs_extensions = amidiplug_vfs_extensions /* vfs_extensions */
-};
-
#endif /* !_I_AMIDIPLUG_H */
diff --git a/src/amidi-plug/backend-alsa/Makefile b/src/amidi-plug/backend-alsa/Makefile
index 22bab09..d53b453 100644
--- a/src/amidi-plug/backend-alsa/Makefile
+++ b/src/amidi-plug/backend-alsa/Makefile
@@ -9,4 +9,4 @@ plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}/${AMIDIPLUG_BACKEND_DIR}
CFLAGS += ${PLUGIN_CFLAGS} ${ALSA_CFLAGS}
CPPFLAGS += ${PLUGIN_CPPFLAGS} ${ALSA_CFLAGS} ${GLIB_CFLAGS} -I../../..
-LIBS += ${ALSA_LIBS} ${GLIB_LIBS} ../pcfg/libpcfg.a
+LIBS += ${ALSA_LIBS} ../pcfg/libpcfg.a ${GLIB_LIBS}
diff --git a/src/amidi-plug/backend-alsa/b-alsa.c b/src/amidi-plug/backend-alsa/b-alsa.c
index e5be233..7b69d8d 100644
--- a/src/amidi-plug/backend-alsa/b-alsa.c
+++ b/src/amidi-plug/backend-alsa/b-alsa.c
@@ -333,6 +333,8 @@ gint sequencer_output( gpointer * buffer , gint * len )
gint sequencer_output_shut( guint max_tick , gint skip_offset )
{
+ g_return_val_if_fail (sc.seq != NULL, 0);
+
gint i = 0 , c = 0;
/* time to shutdown playback! */
/* send "ALL SOUNDS OFF" to all channels on all ports */
diff --git a/src/amidi-plug/backend-fluidsynth/Makefile b/src/amidi-plug/backend-fluidsynth/Makefile
index 04826a9..8213f84 100644
--- a/src/amidi-plug/backend-fluidsynth/Makefile
+++ b/src/amidi-plug/backend-fluidsynth/Makefile
@@ -9,4 +9,4 @@ plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}/${AMIDIPLUG_BACKEND_DIR}
CFLAGS += ${PLUGIN_CFLAGS} ${FLUIDSYNTH_CFLAGS}
CPPFLAGS += ${PLUGIN_CPPFLAGS} ${FLUIDSYNTH_CFLAGS} ${GLIB_CFLAGS} -I../../..
-LIBS += ${FLUIDSYNTH_LIBS} ${GLIB_LIBS} ../pcfg/libpcfg.a
+LIBS += ${FLUIDSYNTH_LIBS} ../pcfg/libpcfg.a ${GLIB_LIBS}
diff --git a/src/amidi-plug/i_backend.h b/src/amidi-plug/i_backend.h
index 9fc338f..3c92943 100644
--- a/src/amidi-plug/i_backend.h
+++ b/src/amidi-plug/i_backend.h
@@ -48,7 +48,7 @@ typedef struct
gint (*audio_info_get)( gint * , gint * , gint * );
gint (*audio_volume_get)( gint * , gint * );
gint (*audio_volume_set)( gint , gint );
- gint (*seq_start)( gchar * );
+ gint (* seq_start) (const gchar * filename);
gint (*seq_stop)( void );
gint (*seq_on)( void );
gint (*seq_off)( void );
diff --git a/src/amidi-plug/i_configure-alsa.c b/src/amidi-plug/i_configure-alsa.c
index b0605a1..2896b36 100644
--- a/src/amidi-plug/i_configure-alsa.c
+++ b/src/amidi-plug/i_configure-alsa.c
@@ -256,7 +256,6 @@ void i_configure_gui_tab_alsa( GtkWidget * alsa_page_alignment ,
GtkCellRenderer *mixer_card_cmb_text_rndr, *mixer_ctl_cmb_text_rndr;
GtkWidget *mixer_card_cmb_evbox, *mixer_card_cmb, *mixer_card_label;
GtkWidget *mixer_ctl_cmb_evbox, *mixer_ctl_cmb, *mixer_ctl_label;
- GtkTooltips *tips;
amidiplug_cfg_alsa_t * alsacfg = amidiplug_cfg_backend->alsa;
@@ -272,9 +271,6 @@ void i_configure_gui_tab_alsa( GtkWidget * alsa_page_alignment ,
if ( strlen( alsacfg->alsa_seq_wports ) > 0 )
portstring_from_cfg = g_strsplit( alsacfg->alsa_seq_wports , "," , 0 );
- tips = gtk_tooltips_new();
- g_object_set_data_full( G_OBJECT(alsa_page_alignment) , "tt" , tips , g_object_unref );
-
/* it's legit to assume that this can't fail,
since the module is present in the backend_list */
alsa_module = g_module_open( alsa_module_pathfilename , 0 );
@@ -425,26 +421,6 @@ void i_configure_gui_tab_alsa( GtkWidget * alsa_page_alignment ,
free_card_list( scards_h );
free_port_list( wports_h );
g_module_close( alsa_module );
-
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , port_lv ,
- _("* Select ALSA output ports *\n"
- "MIDI events will be sent to the ports selected here. In example, if your "
- "audio card provides a hardware synth and you want to play MIDI with it, "
- "you'll probably want to select the wavetable synthesizer ports.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , mixer_card_cmb_evbox ,
- _("* Select ALSA mixer card *\n"
- "The ALSA backend outputs directly through ALSA, it doesn't use effect "
- "and ouput plugins from the player. During playback, the player volume"
- "slider will manipulate the mixer control you select here. "
- "If you're using wavetable synthesizer ports, you'll probably want to "
- "select the Synth control here.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , mixer_ctl_cmb_evbox ,
- _("* Select ALSA mixer control *\n"
- "The ALSA backend outputs directly through ALSA, it doesn't use effect "
- "and ouput plugins from the player. During playback, the player volume "
- "slider will manipulate the mixer control you select here. "
- "If you're using wavetable synthesizer ports, you'll probably want to "
- "select the Synth control here.") , "" );
}
else
{
diff --git a/src/amidi-plug/i_configure-ap.c b/src/amidi-plug/i_configure-ap.c
index abb0649..b44924e 100644
--- a/src/amidi-plug/i_configure-ap.c
+++ b/src/amidi-plug/i_configure-ap.c
@@ -18,6 +18,9 @@
*
*/
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
#include "i_configure-ap.h"
#include "amidi-plug-icon.xpm"
@@ -67,7 +70,8 @@ void i_configure_ev_backendlv_info( gpointer backend_lv )
gtk_label_set_markup( GTK_LABEL(title_label) , longname_title );
g_free( longname_title ); g_free( longname );
gtk_container_add( GTK_CONTAINER(title_frame) , title_label );
- gtk_box_pack_start( GTK_BOX(GTK_DIALOG(bidialog)->vbox) , title_frame , FALSE , FALSE , 0 );
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *)
+ bidialog), title_frame, FALSE, FALSE, 0);
filename_frame = gtk_frame_new( NULL );
filename_entry = gtk_entry_new();
@@ -77,7 +81,8 @@ void i_configure_ev_backendlv_info( gpointer backend_lv )
gtk_entry_set_has_frame( GTK_ENTRY(filename_entry) , FALSE );
g_free( filename );
gtk_container_add( GTK_CONTAINER(filename_frame) , filename_entry );
- gtk_box_pack_start( GTK_BOX(GTK_DIALOG(bidialog)->vbox) , filename_frame , FALSE , FALSE , 0 );
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *)
+ bidialog), filename_frame, FALSE, FALSE, 0);
description_frame = gtk_frame_new( NULL );
description_label = gtk_label_new( description );
@@ -85,7 +90,8 @@ void i_configure_ev_backendlv_info( gpointer backend_lv )
gtk_label_set_line_wrap( GTK_LABEL(description_label) , TRUE );
g_free( description );
gtk_container_add( GTK_CONTAINER(description_frame) , description_label );
- gtk_box_pack_start( GTK_BOX(GTK_DIALOG(bidialog)->vbox) , description_frame , TRUE , TRUE , 0 );
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *)
+ bidialog), description_frame, FALSE, FALSE, 0);
gtk_widget_show_all( bidialog );
gtk_window_set_focus( GTK_WINDOW(bidialog) , NULL );
@@ -183,12 +189,8 @@ void i_configure_gui_tab_ap( GtkWidget * ap_page_alignment ,
GtkTreeIter backend_lv_iter_selected;
GtkTreeSelection *backend_lv_sel;
GtkTreeIter iter;
- GtkTooltips *tips;
GSList * backend_list = backend_list_p;
- tips = gtk_tooltips_new();
- g_object_set_data_full( G_OBJECT(ap_page_alignment) , "tt" , tips , g_object_unref );
-
ap_page_vbox = gtk_vbox_new( FALSE , 0 );
title_widget = i_configure_gui_draw_title( _("AMIDI-PLUG PREFERENCES") );
@@ -315,50 +317,6 @@ void i_configure_gui_tab_ap( GtkWidget * ap_page_alignment ,
gtk_box_pack_start( GTK_BOX(content_vbox) , settings_vbox , TRUE , TRUE , 0 );
gtk_box_pack_start( GTK_BOX(ap_page_vbox) , content_vbox , TRUE , TRUE , 2 );
gtk_container_add( GTK_CONTAINER(ap_page_alignment) , ap_page_vbox );
-
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , backend_lv ,
- _("* Backend selection *\n"
- "AMIDI-Plug works with backends, in a modular fashion; here you should "
- "select your backend; that is, the way MIDI events are going to be handled "
- "and played.\nIf you have a hardware synthesizer on your audio card, and ALSA "
- "supports it, you'll want to use the ALSA backend. It can also be "
- "used with anything that provides an interface to the ALSA sequencer, including "
- "software synths or external devices.\nIf you want to rely on a software "
- "synthesizer and/or want to pipe audio into effect and output plugins of the "
- "player you'll want to use the good FluidSynth backend.\nPress the info "
- "button to read specific information about each backend.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settplay_transpose_spinbt ,
- _("* Transpose function *\n"
- "This option allows you to play the midi file transposed in a different key, "
- "by shifting of the desired number of semitones all its notes (excepting those "
- "on midi channel 10, reserved for percussions). Especially useful if you wish "
- "to sing or play along with another instrument.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settplay_drumshift_spinbt ,
- _("* Drumshift function *\n"
- "This option allows you to shift notes on midi channel 10 (the standard "
- "percussions channel) of the desired number of semitones. This results in "
- "different drumset and percussions being used during midi playback, so if "
- "you wish to enhance (or reduce, or alter) percussion sounds, try to play "
- "with this value.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settadva_precalc_checkbt ,
- _("* Pre-calculate MIDI length *\n"
- "If this option is enabled, AMIDI-Plug will calculate the MIDI file "
- "length as soon as the player requests it, instead of doing that only "
- "when the MIDI file is being played. In example, MIDI length "
- "will be calculated straight after adding MIDI files in a playlist. "
- "Disable this option if you want faster playlist loading (when a lot "
- "of MIDI files are added), enable it to display more information "
- "in the playlist straight after loading.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settadva_extractcomm_checkbt ,
- _("* Extract comments from MIDI files *\n"
- "Some MIDI files contain text comments (author, copyright, instrument notes, "
- "etc.). If this option is enabled, AMIDI-Plug will extract and display comments "
- "(if available) in the file information dialog.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settadva_extractlyr_checkbt ,
- _("* Extract lyrics from MIDI files *\n"
- "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug "
- "will extract and display song lyrics (if available) in the file "
- "information dialog.") , "" );
}
diff --git a/src/amidi-plug/i_configure-fluidsynth.c b/src/amidi-plug/i_configure-fluidsynth.c
index 9959da8..be6fbdd 100644
--- a/src/amidi-plug/i_configure-fluidsynth.c
+++ b/src/amidi-plug/i_configure-fluidsynth.c
@@ -18,6 +18,9 @@
*
*/
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
#include "i_configure-fluidsynth.h"
#include "backend-fluidsynth/b-fluidsynth-config.h"
@@ -45,7 +48,7 @@ void i_configure_ev_toggle_default( GtkToggleButton *togglebutton , gpointer hbo
void i_configure_ev_sflist_add( gpointer sfont_lv )
{
GtkWidget *parent_window = gtk_widget_get_toplevel( sfont_lv );
- if ( GTK_WIDGET_TOPLEVEL(parent_window) )
+ if (gtk_widget_is_toplevel (parent_window))
{
GtkTreeSelection *listsel = gtk_tree_view_get_selection( GTK_TREE_VIEW(sfont_lv) );
GtkTreeIter itersel, iterapp;
@@ -171,7 +174,7 @@ void i_configure_ev_sfload_commit( gpointer sfload_radiobt )
void i_configure_ev_sygain_commit( gpointer gain_spinbt )
{
amidiplug_cfg_fsyn_t * fsyncfg = amidiplug_cfg_backend->fsyn;
- if ( GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(gain_spinbt)) )
+ if (gtk_widget_get_sensitive (gain_spinbt))
fsyncfg->fsyn_synth_gain = (gint)(gtk_spin_button_get_value(GTK_SPIN_BUTTON(gain_spinbt)) * 10);
else
fsyncfg->fsyn_synth_gain = -1;
@@ -181,7 +184,7 @@ void i_configure_ev_sygain_commit( gpointer gain_spinbt )
void i_configure_ev_sypoly_commit( gpointer poly_spinbt )
{
amidiplug_cfg_fsyn_t * fsyncfg = amidiplug_cfg_backend->fsyn;
- if ( GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(poly_spinbt)) )
+ if (gtk_widget_get_sensitive (poly_spinbt))
fsyncfg->fsyn_synth_poliphony = (gint)(gtk_spin_button_get_value(GTK_SPIN_BUTTON(poly_spinbt)));
else
fsyncfg->fsyn_synth_poliphony = -1;
@@ -191,7 +194,7 @@ void i_configure_ev_sypoly_commit( gpointer poly_spinbt )
void i_configure_ev_syreverb_commit( gpointer reverb_yes_radiobt )
{
amidiplug_cfg_fsyn_t * fsyncfg = amidiplug_cfg_backend->fsyn;
- if ( GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(reverb_yes_radiobt)) )
+ if (gtk_widget_get_sensitive (reverb_yes_radiobt))
{
if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(reverb_yes_radiobt) ) )
fsyncfg->fsyn_synth_reverb = 1;
@@ -206,7 +209,7 @@ void i_configure_ev_syreverb_commit( gpointer reverb_yes_radiobt )
void i_configure_ev_sychorus_commit( gpointer chorus_yes_radiobt )
{
amidiplug_cfg_fsyn_t * fsyncfg = amidiplug_cfg_backend->fsyn;
- if ( GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(chorus_yes_radiobt)) )
+ if (gtk_widget_get_sensitive (chorus_yes_radiobt))
{
if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(chorus_yes_radiobt) ) )
fsyncfg->fsyn_synth_chorus = 1;
@@ -261,7 +264,6 @@ void i_configure_gui_tab_fsyn( GtkWidget * fsyn_page_alignment ,
GtkWidget *content_vbox; /* this vbox will contain the various frames for config sections */
GSList * backend_list = backend_list_p;
gboolean fsyn_module_ok = FALSE;
- gchar * fsyn_module_pathfilename;
fsyn_page_vbox = gtk_vbox_new( FALSE , 0 );
@@ -277,7 +279,6 @@ void i_configure_gui_tab_fsyn( GtkWidget * fsyn_page_alignment ,
if ( !strcmp( mn->name , "fluidsynth" ) )
{
fsyn_module_ok = TRUE;
- fsyn_module_pathfilename = mn->filename;
break;
}
backend_list = backend_list->next;
@@ -305,13 +306,9 @@ void i_configure_gui_tab_fsyn( GtkWidget * fsyn_page_alignment ,
GtkWidget *synth_reverb_value_option[2], *synth_reverb_defcheckbt;
GtkWidget *synth_chorus_frame, *synth_chorus_hbox, *synth_chorus_value_hbox;
GtkWidget *synth_chorus_value_option[2], *synth_chorus_defcheckbt;
- GtkTooltips *tips;
amidiplug_cfg_fsyn_t * fsyncfg = amidiplug_cfg_backend->fsyn;
- tips = gtk_tooltips_new();
- g_object_set_data_full( G_OBJECT(fsyn_page_alignment) , "tt" , tips , g_object_unref );
-
/* soundfont settings */
soundfont_frame = gtk_frame_new( _("SoundFont settings") );
soundfont_vbox = gtk_vbox_new( FALSE , 2 );
@@ -616,83 +613,6 @@ void i_configure_gui_tab_fsyn( GtkWidget * fsyn_page_alignment ,
G_CALLBACK(i_configure_ev_sychorus_commit) , synth_chorus_value_option[0] );
g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" ,
G_CALLBACK(i_configure_ev_sysamplerate_commit) , synth_samplerate_option[3] );
-
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , soundfont_file_lv ,
- _("* Select SoundFont files *\n"
- "In order to play MIDI with FluidSynth, you need to specify at "
- "least one valid SoundFont file here (use absolute paths). The "
- "loading order is from the top (first) to the bottom (last).") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , soundfont_load_option[0] ,
- _("* Load SoundFont on player start *\n"
- "Depending on your system speed, SoundFont loading in FluidSynth will "
- "require up to a few seconds. This is a one-time task (the soundfont "
- "will stay loaded until it is changed or the backend is unloaded) that "
- "can be done at player start, or before the first MIDI file is played "
- "(the latter is a better choice if you don't use your player to listen "
- "MIDI files only).") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , soundfont_load_option[1] ,
- _("* Load SoundFont on first midifile play *\n"
- "Depending on your system speed, SoundFont loading in FluidSynth will "
- "require up to a few seconds. This is a one-time task (the soundfont "
- "will stay loaded until it is changed or the backend is unloaded) that "
- "can be done at player start, or before the first MIDI file is played "
- "(the latter is a better choice if you don't use your player to listen "
- "MIDI files only).") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_gain_value_spin ,
- _("* Synthesizer gain *\n"
- "From FluidSynth docs: the gain is applied to the final or master output "
- "of the synthesizer; it is set to a low value by default to avoid the "
- "saturation of the output when random MIDI files are played.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_poly_value_spin ,
- _("* Synthesizer polyphony *\n"
- "From FluidSynth docs: the polyphony defines how many voices can be played "
- "in parallel; the number of voices is not necessarily equivalent to the "
- "number of notes played simultaneously; indeed, when a note is struck on a "
- "specific MIDI channel, the preset on that channel may create several voices, "
- "for example, one for the left audio channel and one for the right audio "
- "channels; the number of voices activated depends on the number of instrument "
- "zones that fall in the correspond to the velocity and key of the played "
- "note.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_reverb_value_option[0] ,
- _("* Synthesizer reverb *\n"
- "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
- "activated; note that when the reverb module is active, the amount of "
- "signal sent to the reverb module depends on the \"reverb send\" generator "
- "defined in the SoundFont.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_reverb_value_option[1] ,
- _("* Synthesizer reverb *\n"
- "From FluidSynth docs: when set to \"yes\" the reverb effects module is "
- "activated; note that when the reverb module is active, the amount of "
- "signal sent to the reverb module depends on the \"reverb send\" generator "
- "defined in the SoundFont.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_chorus_value_option[0] ,
- _("* Synthesizer chorus *\n"
- "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
- "activated; note that when the chorus module is active, the amount of "
- "signal sent to the chorus module depends on the \"chorus send\" generator "
- "defined in the SoundFont.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_chorus_value_option[1] ,
- _("* Synthesizer chorus *\n"
- "From FluidSynth docs: when set to \"yes\" the chorus effects module is "
- "activated; note that when the chorus module is active, the amount of "
- "signal sent to the chorus module depends on the \"chorus send\" generator "
- "defined in the SoundFont.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_samplerate_option[0] ,
- _("* Synthesizer samplerate *\n"
- "The sample rate of the audio generated by the synthesizer. You can also specify "
- "a custom value in the interval 22050Hz-96000Hz.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_samplerate_option[1] ,
- _("* Synthesizer samplerate *\n"
- "The sample rate of the audio generated by the synthesizer. You can also specify "
- "a custom value in the interval 22050Hz-96000Hz.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_samplerate_option[2] ,
- _("* Synthesizer samplerate *\n"
- "The sample rate of the audio generated by the synthesizer. You can also specify "
- "a custom value in the interval 22050Hz-96000Hz.") , "" );
- gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , synth_samplerate_option[3] ,
- _("* Synthesizer samplerate *\n"
- "The sample rate of the audio generated by the synthesizer. You can also specify "
- "a custom value in the interval 22050Hz-96000Hz.") , "" );
}
else
{
diff --git a/src/amidi-plug/i_configure.c b/src/amidi-plug/i_configure.c
index d0d9df0..40f87fe 100644
--- a/src/amidi-plug/i_configure.c
+++ b/src/amidi-plug/i_configure.c
@@ -18,7 +18,10 @@
*
*/
+#include <gtk/gtk.h>
+
#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
#include <audacious/misc.h>
#include <audacious/plugin.h>
@@ -68,7 +71,7 @@ void i_configure_ev_browse_for_entry( GtkWidget * target_entry )
{
GtkWidget *parent_window = gtk_widget_get_toplevel( target_entry );
GtkFileChooserAction act = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(target_entry),"fc-act"));
- if ( GTK_WIDGET_TOPLEVEL(parent_window) )
+ if (gtk_widget_is_toplevel (parent_window))
{
GtkWidget *browse_dialog = gtk_file_chooser_dialog_new( _("AMIDI-Plug - select file") ,
GTK_WINDOW(parent_window) , act ,
@@ -128,12 +131,10 @@ void i_configure_gui( void )
g_signal_connect( G_OBJECT(configwin) , "destroy" ,
G_CALLBACK(gtk_widget_destroyed) , &configwin );
button_ok = gtk_button_new_from_stock( GTK_STOCK_OK );
- if ( g_signal_lookup( "ap-commit" , GTK_WIDGET_TYPE(button_ok) ) == 0 )
- {
- g_signal_new( "ap-commit" , GTK_WIDGET_TYPE(button_ok) ,
- G_SIGNAL_ACTION , 0 , NULL , NULL ,
- g_cclosure_marshal_VOID__VOID , G_TYPE_NONE , 0 );
- }
+
+ if (! g_signal_lookup ("ap-commit", G_OBJECT_TYPE (button_ok)))
+ g_signal_new ("ap-commit", G_OBJECT_TYPE (button_ok), G_SIGNAL_ACTION, 0,
+ NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
g_signal_connect (button_ok, "clicked", (GCallback) commit_cb, NULL);
@@ -380,8 +381,5 @@ void i_configure_cfg_ap_save( void )
gchar * i_configure_cfg_get_file( void )
{
- gchar * config_datadir = (gchar*)aud_util_get_localdir();
- gchar * config_pathfilename = g_build_filename( config_datadir , "amidi-plug.conf" , NULL );
- g_free( config_datadir );
- return config_pathfilename;
+ return g_build_filename (aud_get_path (AUD_PATH_USER_DIR), "amidi-plug.conf", NULL);
}
diff --git a/src/aosd/Makefile b/src/aosd/Makefile
index de51ef5..2eb224b 100644
--- a/src/aosd/Makefile
+++ b/src/aosd/Makefile
@@ -15,5 +15,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PANGO_CFLAGS} ${CAIRO_CFLAGS} ${PANGOCAIRO_CFLAGS} ${XRENDER_CFLAGS} ${XCOMPOSITE_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PANGO_CFLAGS} ${CAIRO_CFLAGS} ${PANGOCAIRO_CFLAGS} ${XRENDER_CFLAGS} ${XCOMPOSITE_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${PANGO_LIBS} ${CAIRO_LIBS} ${PANGOCAIRO_LIBS} ${XRENDER_LIBS} ${XCOMPOSITE_LIBS}
diff --git a/src/aosd/aosd.c b/src/aosd/aosd.c
index eadad27..4b97476 100644
--- a/src/aosd/aosd.c
+++ b/src/aosd/aosd.c
@@ -25,9 +25,14 @@
#include "aosd_trigger.h"
#include <audacious/i18n.h>
-
-GeneralPlugin *aosd_gplist[] = { &aosd_gp, NULL };
-SIMPLE_GENERAL_PLUGIN(aosd, aosd_gplist);
+AUD_GENERAL_PLUGIN
+(
+ .name = "Audacious OSD",
+ .init = aosd_init,
+ .about = aosd_about,
+ .configure = aosd_configure,
+ .cleanup = aosd_cleanup
+)
aosd_cfg_t * global_config = NULL;
gboolean plugin_is_active = FALSE;
@@ -36,8 +41,7 @@ gboolean plugin_is_active = FALSE;
/* ***************** */
/* plug-in functions */
-void
-aosd_init ( void )
+gboolean aosd_init (void)
{
plugin_is_active = TRUE;
g_log_set_handler( NULL , G_LOG_LEVEL_WARNING , g_log_default_handler , NULL );
@@ -49,7 +53,7 @@ aosd_init ( void )
aosd_trigger_start( &global_config->osd->trigger );
- return;
+ return TRUE;
}
diff --git a/src/aosd/aosd.h b/src/aosd/aosd.h
index 48202fc..70ab1f0 100644
--- a/src/aosd/aosd.h
+++ b/src/aosd/aosd.h
@@ -28,18 +28,9 @@
#include <glib.h>
#include <audacious/plugin.h>
-void aosd_init ( void );
+gboolean aosd_init (void);
void aosd_cleanup ( void );
void aosd_configure ( void );
void aosd_about ( void );
-GeneralPlugin aosd_gp =
-{
- .description= "Audacious OSD " AOSD_VERSION_PLUGIN,
- .init = aosd_init,
- .about = aosd_about,
- .configure = aosd_configure,
- .cleanup = aosd_cleanup
-};
-
#endif /* !_I_AOSD_H */
diff --git a/src/aosd/aosd_cfg.c b/src/aosd/aosd_cfg.c
index e1803f0..e027db9 100644
--- a/src/aosd/aosd_cfg.c
+++ b/src/aosd/aosd_cfg.c
@@ -22,8 +22,9 @@
#include "aosd_style.h"
#include <glib.h>
#include <stdlib.h>
+#include <string.h>
-#include <audacious/configdb.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
static gint
@@ -218,84 +219,77 @@ aosd_cfg_debug ( aosd_cfg_t * cfg )
}
#endif
+static const gchar * const aosd_defaults[] = {
+ "position_placement", "1", /* AOSD_POSITION_PLACEMENT_TOPLEFT */
+ "position_offset_x", "0",
+ "position_offset_y", "0",
+ "position_maxsize_width", "0",
+ "position_multimon_id", "-1",
+ "animation_timing_display", "3000",
+ "animation_timing_fadein", "300",
+ "animation_timing_fadeout", "300",
+ "text_fonts_name_0", "Sans 26",
+ "text_fonts_color_0", "65535,65535,65535,65535",
+ "text_fonts_draw_shadow_0", "TRUE",
+ "text_fonts_shadow_color_0", "0,0,0,32767",
+ "text_utf8conv_disable", "FALSE",
+ "decoration_code", "0",
+ "decoration_color_0", "0,0,65535,32767",
+ "decoration_color_1", "65535,65535,65535,65535",
+ "trigger_active", "0",
+ "transparency_mode", "0",
+ NULL};
gint
aosd_cfg_load ( aosd_cfg_t * cfg )
{
- mcs_handle_t *cfgfile = aud_cfg_db_open();
gint i = 0;
gint max_numcol;
gchar *trig_active_str;
/* position */
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "position_placement" , &(cfg->osd->position.placement) ) )
- cfg->osd->position.placement = AOSD_POSITION_PLACEMENT_TOPLEFT;
-
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "position_offset_x" , &(cfg->osd->position.offset_x) ) )
- cfg->osd->position.offset_x = 0;
-
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "position_offset_y" , &(cfg->osd->position.offset_y) ) )
- cfg->osd->position.offset_y = 0;
-
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "position_maxsize_width" , &(cfg->osd->position.maxsize_width) ) )
- cfg->osd->position.maxsize_width = 0;
-
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "position_multimon_id" , &(cfg->osd->position.multimon_id) ) )
- cfg->osd->position.multimon_id = -1;
+ cfg->osd->position.placement = aud_get_int ("aosd", "position_placement");
+ cfg->osd->position.offset_x = aud_get_int ("aosd", "position_offset_x");
+ cfg->osd->position.offset_y = aud_get_int ("aosd", "position_offset_y");
+ cfg->osd->position.maxsize_width = aud_get_int ("aosd", "position_maxsize_width");
+ cfg->osd->position.multimon_id = aud_get_int ("aosd", "position_multimon_id");
/* animation */
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "animation_timing_display" , &(cfg->osd->animation.timing_display) ) )
- cfg->osd->animation.timing_display = 3000;
-
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "animation_timing_fadein" , &(cfg->osd->animation.timing_fadein) ) )
- cfg->osd->animation.timing_fadein = 300;
-
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "animation_timing_fadeout" , &(cfg->osd->animation.timing_fadeout) ) )
- cfg->osd->animation.timing_fadeout = 300;
+ cfg->osd->animation.timing_display = aud_get_int ("aosd", "animation_timing_display");
+ cfg->osd->animation.timing_fadein = aud_get_int ("aosd", "animation_timing_fadein");
+ cfg->osd->animation.timing_fadeout = aud_get_int ("aosd", "animation_timing_fadeout");
/* text */
for ( i = 0 ; i < AOSD_TEXT_FONTS_NUM ; i++ )
{
gchar *color_str = NULL;
gchar *key_str = NULL;
+
key_str = g_strdup_printf( "text_fonts_name_%i" , i );
- if ( !aud_cfg_db_get_string( cfgfile , "aosd" , key_str , &(cfg->osd->text.fonts_name[i]) ) )
- cfg->osd->text.fonts_name[i] = g_strdup( "Sans 26" );
+ cfg->osd->text.fonts_name[i] = aud_get_string ("aosd", key_str);
g_free( key_str );
+
key_str = g_strdup_printf( "text_fonts_color_%i" , i );
- if ( !aud_cfg_db_get_string( cfgfile , "aosd" , key_str , &color_str ) )
- color_str = g_strdup( "65535,65535,65535,65535" ); /* white , alpha 100% */
+ color_str = aud_get_string ("aosd", key_str);
aosd_cfg_util_str_to_color( color_str , &(cfg->osd->text.fonts_color[i]) );
g_free( key_str );
g_free( color_str );
+
key_str = g_strdup_printf( "text_fonts_draw_shadow_%i" , i );
- if ( !aud_cfg_db_get_bool( cfgfile , "aosd" , key_str , &(cfg->osd->text.fonts_draw_shadow[i]) ) )
- cfg->osd->text.fonts_draw_shadow[i] = TRUE;
+ cfg->osd->text.fonts_draw_shadow[i] = aud_get_bool ("aosd", key_str);
g_free( key_str );
+
key_str = g_strdup_printf( "text_fonts_shadow_color_%i" , i );
- if ( !aud_cfg_db_get_string( cfgfile , "aosd" , key_str , &color_str ) )
- color_str = g_strdup( "0,0,0,32767" ); /* black , alpha 50% */
+ color_str = aud_get_string ("aosd", key_str);
aosd_cfg_util_str_to_color( color_str , &(cfg->osd->text.fonts_shadow_color[i]) );
g_free( key_str );
g_free( color_str );
}
- if ( !aud_cfg_db_get_bool( cfgfile , "aosd" ,
- "text_utf8conv_disable" , &(cfg->osd->text.utf8conv_disable) ) )
- cfg->osd->text.utf8conv_disable = FALSE;
+ cfg->osd->text.utf8conv_disable = aud_get_bool ("aosd", "text_utf8conv_disable");
/* decoration */
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "decoration_code" , &(cfg->osd->decoration.code) ) )
- cfg->osd->decoration.code = aosd_deco_style_get_first_code();
+ cfg->osd->decoration.code = aud_get_int ("aosd", "decoration_code");
/* TODO not implemented yet
if ( !aud_cfg_db_get_string( cfgfile , "aosd" ,
@@ -311,36 +305,15 @@ aosd_cfg_load ( aosd_cfg_t * cfg )
gchar *color_str = NULL;
aosd_color_t color;
key_str = g_strdup_printf( "decoration_color_%i" , i );
- if ( !aud_cfg_db_get_string( cfgfile , "aosd" , key_str , &color_str ) )
- {
- /* we have different default values for the decoration colors */
- switch ( i )
- {
- case 0:
- color_str = g_strdup( "0,0,65535,32767" ); /* blue , alpha 50% */
- break;
- case 1:
- color_str = g_strdup( "65535,65535,65535,65535" ); /* white , alpha 100% */
- break;
- case 2:
- color_str = g_strdup( "51400,51400,51400,65535" ); /* gray , alpha 100% */
- break;
- default:
- color_str = g_strdup( "51400,51400,51400,65535" ); /* gray , alpha 100% */
- break;
- }
- }
+ color_str = aud_get_string ("aosd", key_str);
aosd_cfg_util_str_to_color( color_str , &color );
g_array_insert_val( cfg->osd->decoration.colors , i , color );
}
/* trigger */
- if ( !aud_cfg_db_get_string( cfgfile , "aosd" , "trigger_active" , &trig_active_str ) )
- {
- gint trig_active_defval = 0;
- g_array_append_val( cfg->osd->trigger.active , trig_active_defval );
- }
- else if ( strcmp("x",trig_active_str) )
+ trig_active_str = aud_get_string ("aosd", "trigger_active");
+
+ if (strcmp (trig_active_str, "x"))
{
gchar **trig_active_strv = g_strsplit( trig_active_str , "," , 0 );
gint j = 0;
@@ -353,12 +326,10 @@ aosd_cfg_load ( aosd_cfg_t * cfg )
g_strfreev( trig_active_strv );
}
- /* miscellanous */
- if ( !aud_cfg_db_get_int( cfgfile , "aosd" ,
- "transparency_mode" , &(cfg->osd->misc.transparency_mode) ) )
- cfg->osd->misc.transparency_mode = AOSD_MISC_TRANSPARENCY_FAKE;
+ g_free (trig_active_str);
- aud_cfg_db_close( cfgfile );
+ /* miscellanous */
+ cfg->osd->misc.transparency_mode = aud_get_int ("aosd", "transparency_mode");
/* the config object has been filled with information */
cfg->set = TRUE;
@@ -370,7 +341,6 @@ aosd_cfg_load ( aosd_cfg_t * cfg )
gint
aosd_cfg_save ( aosd_cfg_t * cfg )
{
- mcs_handle_t *cfgfile = aud_cfg_db_open();
gint i = 0;
gint max_numcol;
GString *string = g_string_new( "" );
@@ -379,67 +349,52 @@ aosd_cfg_save ( aosd_cfg_t * cfg )
return -1;
/* position */
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "position_placement" , cfg->osd->position.placement );
-
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "position_offset_x" , cfg->osd->position.offset_x );
-
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "position_offset_y" , cfg->osd->position.offset_y );
-
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "position_maxsize_width" , cfg->osd->position.maxsize_width );
-
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "position_multimon_id" , cfg->osd->position.multimon_id );
+ aud_set_int ("aosd", "position_placement", cfg->osd->position.placement);
+ aud_set_int ("aosd", "position_offset_x", cfg->osd->position.offset_x);
+ aud_set_int ("aosd", "position_offset_y", cfg->osd->position.offset_y);
+ aud_set_int ("aosd", "position_maxsize_width", cfg->osd->position.maxsize_width);
+ aud_set_int ("aosd", "position_multimon_id", cfg->osd->position.multimon_id);
/* animation */
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "animation_timing_display" , cfg->osd->animation.timing_display );
-
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "animation_timing_fadein" , cfg->osd->animation.timing_fadein );
-
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "animation_timing_fadeout" , cfg->osd->animation.timing_fadeout );
+ aud_set_int ("aosd", "animation_timing_display", cfg->osd->animation.timing_display);
+ aud_set_int ("aosd", "animation_timing_fadein", cfg->osd->animation.timing_fadein);
+ aud_set_int ("aosd", "animation_timing_fadeout", cfg->osd->animation.timing_fadeout);
/* text */
for ( i = 0 ; i < AOSD_TEXT_FONTS_NUM ; i++ )
{
gchar *color_str = NULL;
gchar *key_str = NULL;
+
key_str = g_strdup_printf( "text_fonts_name_%i" , i );
- aud_cfg_db_set_string( cfgfile , "aosd" ,
- key_str , cfg->osd->text.fonts_name[i] );
+ aud_set_string ("aosd", key_str, cfg->osd->text.fonts_name[i]);
g_free( key_str );
+
key_str = g_strdup_printf( "text_fonts_color_%i" , i );
aosd_cfg_util_color_to_str( cfg->osd->text.fonts_color[i] , &color_str );
- aud_cfg_db_set_string( cfgfile , "aosd" ,
- key_str , color_str );
+ aud_set_string ("aosd", key_str, color_str);
g_free( key_str );
g_free( color_str );
+
key_str = g_strdup_printf( "text_fonts_draw_shadow_%i" , i );
- aud_cfg_db_set_bool( cfgfile , "aosd" ,
- key_str , cfg->osd->text.fonts_draw_shadow[i] );
+ aud_set_bool ("aosd", key_str, cfg->osd->text.fonts_draw_shadow[i]);
g_free( key_str );
+
key_str = g_strdup_printf( "text_fonts_shadow_color_%i" , i );
aosd_cfg_util_color_to_str( cfg->osd->text.fonts_shadow_color[i] , &color_str );
- aud_cfg_db_set_string( cfgfile , "aosd" ,
- key_str , color_str );
+ aud_set_string ("aosd", key_str, color_str);
g_free( key_str );
g_free( color_str );
}
- aud_cfg_db_set_bool( cfgfile , "aosd" ,
- "text_utf8conv_disable" , cfg->osd->text.utf8conv_disable );
+ aud_set_bool ("aosd", "text_utf8conv_disable", cfg->osd->text.utf8conv_disable);
/* decoration */
- aud_cfg_db_set_int( cfgfile , "aosd" ,
+ aud_set_int ("aosd" ,
"decoration_code" , cfg->osd->decoration.code );
/* TODO skip this since it's not implemented yet
- aud_cfg_db_set_string( cfgfile , "aosd" ,
+ aud_set_string ("aosd" ,
"decoration_skin_file" , cfg->osd->decoration.skin_file ); */
/* decoration - colors */
@@ -451,8 +406,7 @@ aosd_cfg_save ( aosd_cfg_t * cfg )
aosd_color_t color = g_array_index( cfg->osd->decoration.colors , aosd_color_t , i );
key_str = g_strdup_printf( "decoration_color_%i" , i );
aosd_cfg_util_color_to_str( color , &color_str );
- aud_cfg_db_set_string( cfgfile , "aosd" ,
- key_str , color_str );
+ aud_set_string ("aosd", key_str, color_str);
g_free( key_str );
g_free( color_str );
}
@@ -464,14 +418,11 @@ aosd_cfg_save ( aosd_cfg_t * cfg )
g_string_truncate( string , string->len - 1 );
else
g_string_assign( string , "x" );
- aud_cfg_db_set_string( cfgfile , "aosd" , "trigger_active" , string->str );
+ aud_set_string ("aosd", "trigger_active", string->str);
g_string_free( string , TRUE );
/* miscellaneous */
- aud_cfg_db_set_int( cfgfile , "aosd" ,
- "transparency_mode" , cfg->osd->misc.transparency_mode );
-
- aud_cfg_db_close( cfgfile );
+ aud_set_int ("aosd", "transparency_mode", cfg->osd->misc.transparency_mode);
return 0;
}
diff --git a/src/aosd/aosd_trigger.c b/src/aosd/aosd_trigger.c
index 9da06a7..491f856 100644
--- a/src/aosd/aosd_trigger.c
+++ b/src/aosd/aosd_trigger.c
@@ -19,6 +19,7 @@
*/
#include <glib.h>
+#include <string.h>
#include <audacious/drct.h>
#include <audacious/i18n.h>
@@ -140,7 +141,6 @@ aosd_trigger_start ( aosd_cfg_osd_trigger_t * cfg_trigger )
}
/* When called, this hook will display the text of the user pointer
or the current playing song, if NULL */
- hook_register("aosd toggle");
hook_associate( "aosd toggle" , aosd_trigger_func_hook_cb , NULL );
return;
}
@@ -186,7 +186,7 @@ aosd_trigger_func_pb_start_onoff(gboolean turn_on)
static void
aosd_trigger_func_pb_start_cb(gpointer hook_data, gpointer user_data)
{
- gchar *title = aud_drct_pl_get_title(aud_drct_pl_get_pos());
+ char * title = aud_drct_get_title ();
if (title != NULL)
{
@@ -200,8 +200,8 @@ aosd_trigger_func_pb_start_cb(gpointer hook_data, gpointer user_data)
g_free(utf8_title_markup);
}
g_free(utf8_title);
+ str_unref (title);
}
- return;
}
typedef struct
@@ -245,10 +245,8 @@ aosd_trigger_func_pb_titlechange_cb ( gpointer plentry_gp , gpointer prevs_gp )
aosd_pb_titlechange_prevs_t *prevs = prevs_gp;
gint playlist = aud_playlist_get_playing();
gint pl_entry = aud_playlist_get_position(playlist);
- const gchar * pl_entry_filename = aud_playlist_entry_get_filename (playlist,
- pl_entry);
- const gchar * pl_entry_title = aud_playlist_entry_get_title (playlist,
- pl_entry, FALSE);
+ gchar * pl_entry_filename = aud_playlist_entry_get_filename (playlist, pl_entry);
+ gchar * pl_entry_title = aud_playlist_entry_get_title (playlist, pl_entry, FALSE);
/* same filename but title changed, useful to detect http stream song changes */
@@ -291,6 +289,9 @@ aosd_trigger_func_pb_titlechange_cb ( gpointer plentry_gp , gpointer prevs_gp )
g_free(prevs->filename);
prevs->filename = g_strdup(pl_entry_filename);
}
+
+ str_unref (pl_entry_filename);
+ str_unref (pl_entry_title);
}
}
@@ -387,7 +388,6 @@ aosd_trigger_func_pb_pauseoff_cb ( gpointer unused1 , gpointer unused2 )
{
gint active = aud_playlist_get_active();
gint pos = aud_playlist_get_position(active);
- const gchar * title;
gchar *utf8_title, *utf8_title_markup;
gint time_cur, time_tot;
gint time_cur_m, time_cur_s, time_tot_m, time_tot_s;
@@ -399,14 +399,13 @@ aosd_trigger_func_pb_pauseoff_cb ( gpointer unused1 , gpointer unused2 )
time_tot_s = time_tot % 60;
time_tot_m = (time_tot - time_tot_s) / 60;
- title = aud_playlist_entry_get_title (active, pos, FALSE);
- utf8_title = aosd_trigger_utf8convert( title );
+ utf8_title = aud_playlist_entry_get_title (active, pos, FALSE);
utf8_title_markup = g_markup_printf_escaped(
"<span font_desc='%s'>%s (%i:%02i/%i:%02i)</span>" ,
global_config->osd->text.fonts_name[0] , utf8_title , time_cur_m , time_cur_s , time_tot_m , time_tot_s );
aosd_osd_display( utf8_title_markup , global_config->osd , FALSE );
g_free( utf8_title_markup );
- g_free( utf8_title );
+ str_unref (utf8_title);
return;
}
@@ -423,7 +422,7 @@ aosd_trigger_func_hook_cb ( gpointer markup_text , gpointer unused )
aosd_osd_display( markup_text , global_config->osd , FALSE );
} else {
/* Display currently playing song */
- aosd_trigger_func_pb_start_cb ( GINT_TO_POINTER(aud_drct_pl_get_pos()), NULL );
+ aosd_trigger_func_pb_start_cb (NULL, NULL);
}
return;
}
diff --git a/src/aosd/aosd_ui.c b/src/aosd/aosd_ui.c
index edb6962..6c6252e 100644
--- a/src/aosd/aosd_ui.c
+++ b/src/aosd/aosd_ui.c
@@ -18,17 +18,16 @@
*
*/
+#include <gtk/gtk.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
+
#include "aosd_ui.h"
#include "aosd_style.h"
#include "aosd_trigger.h"
#include "aosd_cfg.h"
#include "aosd_osd.h"
#include "aosd_common.h"
-#include <audacious/i18n.h>
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-
extern aosd_cfg_t * global_config;
extern gboolean plugin_is_active;
@@ -85,13 +84,25 @@ aosd_callback_list_free ( GList * list )
static gboolean
aosd_cb_configure_position_expose ( GtkWidget * darea ,
+#if GTK_CHECK_VERSION (3, 0, 0)
+ cairo_t * cr ,
+#else
GdkEventExpose * event ,
+#endif
gpointer coord_gp )
{
gint coord = GPOINTER_TO_INT(coord_gp);
- gdk_draw_rectangle( GDK_DRAWABLE(darea->window) ,
- darea->style->black_gc , TRUE ,
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+ cairo_set_source_rgb ( cr , 0 , 0 , 0 );
+ cairo_rectangle ( cr , (coord % 3) * 10 , (coord / 3) * 16 , 20 , 8 );
+ cairo_fill ( cr );
+#else
+ gdk_draw_rectangle( GDK_DRAWABLE(gtk_widget_get_window (darea)) ,
+ gtk_widget_get_style (darea)->black_gc , TRUE ,
(coord % 3) * 10 , (coord / 3) * 16 , 20 , 8 );
+#endif
+
return FALSE;
}
@@ -182,8 +193,13 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg , GList ** cb_list )
pos_placement_bt_darea[i] = gtk_drawing_area_new();
gtk_widget_set_size_request( pos_placement_bt_darea[i] , 40 , 40 );
gtk_container_add( GTK_CONTAINER(pos_placement_bt[i]) , pos_placement_bt_darea[i] );
+#if GTK_CHECK_VERSION (3, 0, 0)
+ g_signal_connect( G_OBJECT(pos_placement_bt_darea[i]) , "draw" ,
+ G_CALLBACK(aosd_cb_configure_position_expose) , GINT_TO_POINTER(i) );
+#else
g_signal_connect( G_OBJECT(pos_placement_bt_darea[i]) , "expose-event" ,
G_CALLBACK(aosd_cb_configure_position_expose) , GINT_TO_POINTER(i) );
+#endif
gtk_table_attach( GTK_TABLE(pos_placement_table) , pos_placement_bt[i] ,
(i % 3) , (i % 3) + 1 , (i / 3) , (i / 3) + 1 ,
GTK_FILL , GTK_FILL , 0 , 0 );
@@ -235,14 +251,25 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg , GList ** cb_list )
gtk_container_set_border_width( GTK_CONTAINER(pos_multimon_hbox) , 6 );
gtk_container_add( GTK_CONTAINER(pos_multimon_frame), pos_multimon_hbox );
pos_multimon_label = gtk_label_new( _("Display OSD using:") );
- pos_multimon_combobox = gtk_combo_box_new_text();
- gtk_combo_box_append_text( GTK_COMBO_BOX(pos_multimon_combobox) , _("all monitors") );
+#if GTK_CHECK_VERSION (3, 0, 0)
+ #define CBT_NEW gtk_combo_box_text_new
+ #define CBT_ADD(widget, text) \
+ gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(widget) , NULL , text )
+#else
+ #define CBT_NEW gtk_combo_box_new_text
+ #define CBT_ADD(widget, text) \
+ gtk_combo_box_append_text( GTK_COMBO_BOX(widget) , text )
+#endif
+ pos_multimon_combobox = CBT_NEW();
+ CBT_ADD( pos_multimon_combobox , _("all monitors") );
for ( i = 0 ; i < monitors_num ; i++ )
{
gchar *mon_str = g_strdup_printf( _("monitor %i") , i + 1 );
- gtk_combo_box_append_text( GTK_COMBO_BOX(pos_multimon_combobox) , mon_str );
+ CBT_ADD( pos_multimon_combobox , mon_str );
g_free( mon_str );
}
+#undef CBT_NEW
+#undef CBT_ADD
gtk_combo_box_set_active( GTK_COMBO_BOX(pos_multimon_combobox) , (cfg->osd->position.multimon_id + 1) );
aosd_callback_list_add( cb_list , pos_multimon_combobox , aosd_cb_configure_position_multimon_commit );
gtk_box_pack_start( GTK_BOX(pos_multimon_hbox) , pos_multimon_label , FALSE , FALSE , 0 );
diff --git a/src/aosd/aosd_ui.c.old b/src/aosd/aosd_ui.c.old
deleted file mode 100644
index daba09d..0000000
--- a/src/aosd/aosd_ui.c.old
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#include "aosd_ui.h"
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
-
-
-gint
-aosd_display_osd ( void )
-{
- GtkWidget *osd_win;
- GtkWidget *osd_darea;
- PangoLayout *osd_layout;
- PangoFontDescription *osd_fontdesc;
- GdkPixmap *osd_darea_pixmap, *osd_darea_bitmap;
- GdkGC *osd_darea_gc;
- GdkColor fg_color, bg_color, bitmap_color;
- GdkColormap *bitmap_colormap;
- gint max_width = 0, border_width = 1;
- gint width = 0, height = 0;
- gint off_x = 0, off_y = 0;
- PangoAlignment osd_alignment = PANGO_ALIGN_CENTER;
- gboolean translucent_bg = TRUE;
-
- osd_win = gtk_window_new( GTK_WINDOW_POPUP );
- gtk_widget_add_events( osd_win , GDK_ENTER_NOTIFY_MASK );
- gtk_widget_realize( osd_win );
-
- osd_darea = gtk_drawing_area_new();
- gtk_container_add( GTK_CONTAINER(osd_win) , osd_darea );
- gtk_widget_show( osd_darea );
-
- osd_fontdesc = pango_font_description_from_string("Courier,Mono 28");
-
- osd_layout = gtk_widget_create_pango_layout( osd_darea , "AUDACIOUS OSD 0.1 by Giacomo" );
- pango_layout_set_ellipsize( osd_layout , PANGO_ELLIPSIZE_NONE );
- pango_layout_set_justify( osd_layout , FALSE );
- pango_layout_set_alignment( osd_layout , osd_alignment );
- pango_layout_set_font_description( osd_layout , osd_fontdesc );
-
- max_width = gdk_screen_get_width( gdk_screen_get_default() ) - 8;
- pango_layout_set_width( osd_layout , PANGO_SCALE * max_width );
- pango_layout_get_pixel_size( osd_layout , &width , &height );
-
- off_x = border_width * 2;
- off_y = border_width * 2;
-
- if ( osd_alignment == PANGO_ALIGN_CENTER )
- off_x -= max_width/2 - width/2;
- else if ( osd_alignment == PANGO_ALIGN_RIGHT )
- off_x -= max_width - width;
-
- width += border_width * 4;
- height += border_width * 4;
-
- gtk_widget_set_size_request( osd_darea , width , height );
- gtk_widget_realize( osd_darea );
-
- osd_darea_pixmap = gdk_pixmap_new( GDK_DRAWABLE(osd_darea->window) , width , height , -1 );
-
- osd_darea_gc = gdk_gc_new( GDK_DRAWABLE(osd_darea_pixmap) );
- gdk_gc_copy( osd_darea_gc , osd_darea->style->fg_gc[GTK_STATE_NORMAL] );
-
- gdk_color_parse( "Blue" , &fg_color ); /* TODO pass color as function param */
- gdk_color_parse( "White" , &bg_color ); /* TODO pass color as function param */
-
- gdk_gc_set_rgb_fg_color( osd_darea_gc , &bg_color );
- gdk_draw_rectangle( GDK_DRAWABLE(osd_darea_pixmap) , osd_darea_gc , TRUE ,
- 0 , 0 , width , height );
- gdk_gc_set_rgb_fg_color( osd_darea_gc , &fg_color );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_pixmap) , osd_darea_gc , off_x , off_y , osd_layout );
- g_object_unref( osd_darea_gc );
-
- osd_darea_bitmap = gdk_pixmap_new( GDK_DRAWABLE(osd_darea->window) , width , height , 1 );
- osd_darea_gc = gdk_gc_new( GDK_DRAWABLE(osd_darea_bitmap) );
-
- /* gdk will complain if we don't pass a colormap to osd_darea_gc */
- gdk_gc_set_colormap( osd_darea_gc , gdk_colormap_get_system() );
-
- bitmap_color.pixel = 0;
- gdk_gc_set_foreground( osd_darea_gc , &bitmap_color );
-
- if ( translucent_bg == TRUE )
- {
- gint w = 2, h = 2;
- GdkPixmap *stipple_bitmap;
-
- stipple_bitmap = gdk_pixmap_new( NULL , w , h , 1 );
- bitmap_color.pixel = 0; gdk_gc_set_foreground( osd_darea_gc , &bitmap_color );
- gdk_draw_rectangle( GDK_DRAWABLE(stipple_bitmap) , osd_darea_gc , TRUE , 0 , 0 , w , h );
- bitmap_color.pixel = 1; gdk_gc_set_foreground( osd_darea_gc , &bitmap_color );
- gdk_draw_point( GDK_DRAWABLE(stipple_bitmap) , osd_darea_gc , 0 , 0 );
- gdk_draw_point( GDK_DRAWABLE(stipple_bitmap) , osd_darea_gc , 1 , 1 );
- bitmap_color.pixel = 0; gdk_gc_set_foreground( osd_darea_gc , &bitmap_color );
- gdk_draw_rectangle( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc , TRUE ,
- 0 , 0 , width , height );
- gdk_gc_set_stipple( osd_darea_gc , stipple_bitmap );
- gdk_gc_set_fill( osd_darea_gc , GDK_STIPPLED );
- bitmap_color.pixel = 1; gdk_gc_set_foreground( osd_darea_gc , &bitmap_color );
- gdk_draw_rectangle( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc , TRUE ,
- 0 , 0 , width , height );
- gdk_gc_set_fill( osd_darea_gc , GDK_SOLID );
- }
- else
- gdk_draw_rectangle( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc , TRUE ,
- 0 , 0 , width , height );
-
- bitmap_color.pixel = 1;
- gdk_gc_set_foreground( osd_darea_gc , &bitmap_color );
-
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x , off_y , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x + border_width , off_y , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x + border_width , off_y + border_width , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x , off_y + border_width , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x - border_width , off_y + border_width , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x - border_width , off_y , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x - border_width , off_y - border_width , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x , off_y - border_width , osd_layout );
- gdk_draw_layout( GDK_DRAWABLE(osd_darea_bitmap) , osd_darea_gc ,
- off_x + border_width , off_y - border_width , osd_layout );
-
- g_object_unref( osd_darea_gc );
-
- gdk_window_set_back_pixmap( GDK_WINDOW(osd_darea->window) , osd_darea_pixmap , FALSE );
- gdk_window_shape_combine_mask( GDK_WINDOW(osd_win->window) , osd_darea_bitmap , 0 , 0 );
-
- gtk_widget_show( osd_win );
-
- pango_font_description_free( osd_fontdesc );
- g_object_unref( osd_layout );
- return 0;
-}
diff --git a/src/asx/Makefile b/src/asx/Makefile
new file mode 100644
index 0000000..cfe4945
--- /dev/null
+++ b/src/asx/Makefile
@@ -0,0 +1,11 @@
+PLUGIN = asx${PLUGIN_SUFFIX}
+SRCS = asx.c util.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${CONTAINER_PLUGIN_DIR}
+
+CFLAGS += ${PLUGIN_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/asx/asx.c b/src/asx/asx.c
new file mode 100644
index 0000000..2f0f244
--- /dev/null
+++ b/src/asx/asx.c
@@ -0,0 +1,99 @@
+/*
+ * Audacious: A cross-platform multimedia player
+ * Copyright (c) 2006 William Pitcock, Tony Vroon, George Averill,
+ * Giacomo Lozito, Derek Pomery and Yoshiki Yazawa.
+ * Copyright (c) 2011 John Lindgren
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+
+#include <audacious/misc.h>
+#include <audacious/plugin.h>
+#include <libaudcore/audstrings.h>
+
+#include "util.h"
+
+static gboolean playlist_load_asx (const gchar * filename, VFSFile * file,
+ gchar * * title, Index * filenames, Index * tuples)
+{
+ gint i;
+ gchar line_key[16];
+ gchar * line;
+
+ INIFile * inifile = open_ini_file (file);
+
+ * title = NULL;
+
+ for (i = 1; ; i++) {
+ g_snprintf(line_key, sizeof(line_key), "Ref%d", i);
+ if ((line = read_ini_string(inifile, "Reference", line_key)))
+ {
+ gchar *uri;
+
+ uri = aud_construct_uri(line, filename);
+ g_free(line);
+
+ if (!g_ascii_strncasecmp("http://", uri, 7))
+ uri = str_replace_fragment(uri, strlen(uri), "http://", "mms://");
+
+ if (uri != NULL)
+ index_append (filenames, str_get (uri));
+
+ g_free (uri);
+ }
+ else
+ break;
+ }
+
+ close_ini_file(inifile);
+ return TRUE;
+}
+
+static gboolean playlist_save_asx (const gchar * filename, VFSFile * file,
+ const gchar * title, Index * filenames, Index * tuples)
+{
+ gint entries = index_count (filenames);
+ gint count;
+
+ vfs_fprintf(file, "[Reference]\r\n");
+
+ for (count = 0; count < entries; count ++)
+ {
+ const gchar * filename = index_get (filenames, count);
+ gchar *fn;
+
+ if (vfs_is_remote (filename))
+ fn = g_strdup (filename);
+ else
+ fn = g_filename_from_uri (filename, NULL, NULL);
+
+ vfs_fprintf (file, "Ref%d=%s\r\n", 1 + count, fn);
+ g_free(fn);
+ }
+
+ return TRUE;
+}
+
+static const gchar * const asx_exts[] = {"asx", NULL};
+
+AUD_PLAYLIST_PLUGIN
+(
+ .name = "ASXv1/ASXv2 Playlist Format",
+ .extensions = asx_exts,
+ .load = playlist_load_asx,
+ .save = playlist_save_asx
+)
diff --git a/src/asx/util.c b/src/asx/util.c
new file mode 100644
index 0000000..32445d5
--- /dev/null
+++ b/src/asx/util.c
@@ -0,0 +1,243 @@
+/* Audacious - Cross-platform multimedia player
+ * Copyright (C) 2005-2011 Audacious development team
+ *
+ * Based on BMP:
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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; under version 3 of the License.
+ *
+ * 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, see <http://www.gnu.org/licenses>.
+ *
+ * The Audacious team does not consider modular code linking to
+ * Audacious or using our public API to be a derived work.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <libaudcore/vfs.h>
+
+#include "util.h"
+
+static void strip_string(GString *string)
+{
+ while (string->len > 0 && string->str[0] == ' ')
+ g_string_erase(string, 0, 1);
+
+ while (string->len > 0 && string->str[string->len - 1] == ' ')
+ g_string_erase(string, string->len - 1, 1);
+}
+
+static void strip_lower_string(GString *string)
+{
+ gchar *lower;
+ strip_string(string);
+
+ lower = g_ascii_strdown(string->str, -1);
+ g_free(string->str);
+ string->str = lower;
+}
+
+static void close_ini_file_free_value(gpointer value)
+{
+ g_free((gchar *)value);
+}
+
+static void close_ini_file_free_section(gpointer section)
+{
+ g_hash_table_destroy((GHashTable *)section);
+}
+
+INIFile * open_ini_file (VFSFile * file)
+{
+ GHashTable *ini_file = NULL;
+ GHashTable *section = NULL;
+ GString *section_name, *key_name, *value;
+ gpointer section_hash, key_hash;
+ gsize off = 0;
+
+ gint64 filesize = vfs_fsize (file);
+ if (filesize < 1)
+ return NULL;
+
+ gchar * buffer = g_malloc (filesize);
+ filesize = vfs_fread (buffer, 1, filesize, file);
+
+ section_name = g_string_new("");
+ key_name = g_string_new(NULL);
+ value = g_string_new(NULL);
+
+ ini_file =
+ g_hash_table_new_full(NULL, NULL, NULL, close_ini_file_free_section);
+ section =
+ g_hash_table_new_full(NULL, NULL, NULL, close_ini_file_free_value);
+ /* make a nameless section which should store all entries that are not
+ * embedded in a section */
+ section_hash = GINT_TO_POINTER(g_string_hash(section_name));
+ g_hash_table_insert(ini_file, section_hash, section);
+
+ while (off < filesize)
+ {
+ /* ignore the following characters */
+ if (buffer[off] == '\r' || buffer[off] == '\n' || buffer[off] == ' '
+ || buffer[off] == '\t')
+ {
+ if (buffer[off] == '\n')
+ {
+ g_string_free(key_name, TRUE);
+ g_string_free(value, TRUE);
+ key_name = g_string_new(NULL);
+ value = g_string_new(NULL);
+ }
+
+ off++;
+ continue;
+ }
+
+ /* if we encounter a possible section statement */
+ if (buffer[off] == '[')
+ {
+ g_string_free(section_name, TRUE);
+ section_name = g_string_new(NULL);
+ off++;
+
+ if (off >= filesize)
+ goto return_sequence;
+
+ while (buffer[off] != ']')
+ {
+ /* if the section statement has not been closed before a
+ * linebreak */
+ if (buffer[off] == '\n')
+ break;
+
+ g_string_append_c(section_name, buffer[off]);
+ off++;
+ if (off >= filesize)
+ goto return_sequence;
+ }
+ if (buffer[off] == '\n')
+ continue;
+ if (buffer[off] == ']')
+ {
+ off++;
+ if (off >= filesize)
+ goto return_sequence;
+
+ strip_lower_string(section_name);
+ section_hash = GINT_TO_POINTER(g_string_hash(section_name));
+
+ /* if this section already exists, we don't make a new one,
+ * but reuse the old one */
+ if (g_hash_table_lookup(ini_file, section_hash) != NULL)
+ section = g_hash_table_lookup(ini_file, section_hash);
+ else
+ {
+ section =
+ g_hash_table_new_full(NULL, NULL, NULL,
+ close_ini_file_free_value);
+ g_hash_table_insert(ini_file, section_hash, section);
+ }
+
+ continue;
+ }
+ }
+
+ if (buffer[off] == '=')
+ {
+ off++;
+ if (off >= filesize)
+ goto return_sequence;
+
+ while (buffer[off] != '\n' && buffer[off] != '\r')
+ {
+ g_string_append_c(value, buffer[off]);
+ off++;
+ if (off >= filesize)
+ break;
+ }
+
+ strip_lower_string(key_name);
+ key_hash = GINT_TO_POINTER(g_string_hash(key_name));
+ strip_string(value);
+
+ if (key_name->len > 0 && value->len > 0)
+ g_hash_table_insert(section, key_hash, g_strdup(value->str));
+ }
+ else
+ {
+ g_string_append_c(key_name, buffer[off]);
+ off++;
+ if (off >= filesize)
+ goto return_sequence;
+ }
+ }
+
+ return_sequence:
+ g_string_free(section_name, TRUE);
+ g_string_free(key_name, TRUE);
+ g_string_free(value, TRUE);
+ g_free(buffer);
+ return ini_file;
+}
+
+/**
+ * Frees the memory allocated for inifile.
+ */
+void close_ini_file(INIFile *inifile)
+{
+ g_return_if_fail(inifile);
+ g_hash_table_destroy(inifile);
+}
+
+/**
+ * Returns a string that corresponds to correct section and key in inifile.
+ *
+ * Returns NULL if value was not found in inifile. Otherwise returns a copy
+ * of string pointed by "section" and "key". Returned string should be freed
+ * after use.
+ */
+gchar *read_ini_string(INIFile *inifile, const gchar *section, const gchar *key)
+{
+ GString *section_string;
+ GString *key_string;
+ gchar *value = NULL;
+ gpointer section_hash, key_hash;
+ GHashTable *section_table;
+
+ g_return_val_if_fail(inifile, NULL);
+
+ section_string = g_string_new(section);
+ key_string = g_string_new(key);
+ value = NULL;
+
+ strip_lower_string(section_string);
+ strip_lower_string(key_string);
+ section_hash = GINT_TO_POINTER(g_string_hash(section_string));
+ key_hash = GINT_TO_POINTER(g_string_hash(key_string));
+ section_table = g_hash_table_lookup(inifile, section_hash);
+
+ if (section_table)
+ {
+ value =
+ g_strdup(g_hash_table_lookup
+ (section_table, GINT_TO_POINTER(key_hash)));
+ }
+
+ g_string_free(section_string, TRUE);
+ g_string_free(key_string, TRUE);
+
+ g_return_val_if_fail(value, NULL);
+ return value;
+}
diff --git a/src/gtkui/util.h b/src/asx/util.h
index f88f93f..3644c26 100644
--- a/src/gtkui/util.h
+++ b/src/asx/util.h
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2008 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
*
* Based on BMP:
* Copyright (C) 2003-2004 BMP development team
@@ -23,12 +23,17 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UTIL_H
-#define AUDACIOUS_UTIL_H
+#ifndef UTIL_H
+#define UTIL_H
-#include <gtk/gtk.h>
+#include <glib.h>
+#include <libaudcore/vfs.h>
-GtkWidget * make_filebrowser (const gchar * title, gboolean save);
-void check_set(GtkActionGroup * action_group, const gchar * action_name, gboolean is_on);
+typedef GHashTable INIFile;
-#endif /* AUDACIOUS_UTIL_H */
+INIFile * open_ini_file (VFSFile * file);
+void close_ini_file(INIFile *key_file);
+gchar *read_ini_string(INIFile *key_file, const gchar *section,
+ const gchar *key);
+
+#endif
diff --git a/src/audpl/Makefile b/src/audpl/Makefile
new file mode 100644
index 0000000..8405370
--- /dev/null
+++ b/src/audpl/Makefile
@@ -0,0 +1,10 @@
+PLUGIN = audpl${PLUGIN_SUFFIX}
+
+SRCS = audpl.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${CONTAINER_PLUGIN_DIR}
+
+CFLAGS += ${PLUGIN_CFLAGS}
diff --git a/src/audpl/audpl.c b/src/audpl/audpl.c
new file mode 100644
index 0000000..1789d64
--- /dev/null
+++ b/src/audpl/audpl.c
@@ -0,0 +1,225 @@
+/*
+ * Audacious playlist format plugin
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <audacious/plugin.h>
+#include <libaudcore/audstrings.h>
+
+typedef struct {
+ VFSFile * file;
+ char * cur;
+ int len;
+ char buf[65536];
+} ReadState;
+
+static bool_t read_key_raw (ReadState * state, char * * keyp, char * * valp)
+{
+ char * newline = memchr (state->cur, '\n', state->len);
+
+ if (! newline)
+ {
+ memmove (state->buf, state->cur, state->len);
+ state->cur = state->buf;
+ state->len += vfs_fread (state->buf + state->len, 1,
+ sizeof state->buf - state->len, state->file);
+
+ newline = memchr (state->cur, '\n', state->len);
+
+ if (! newline)
+ return FALSE;
+ }
+
+ * newline = 0;
+
+ char * equals = strchr (state->cur, '=');
+
+ if (! equals)
+ return FALSE;
+
+ * equals = 0;
+
+ * keyp = state->cur;
+ * valp = equals + 1;
+
+ state->len -= newline + 1 - state->cur;
+ state->cur = newline + 1;
+
+ return TRUE;
+}
+
+static bool_t read_key (ReadState * state, char * * keyp, char * * valp)
+{
+ if (! read_key_raw (state, keyp, valp))
+ return FALSE;
+
+ if (strcmp (* keyp, "uri"))
+ str_decode_percent (* valp, -1, * valp);
+
+ return TRUE;
+}
+
+static bool_t write_key_raw (VFSFile * file, const char * key, const char * val)
+{
+ int keylen = strlen (key);
+ int vallen = strlen (val);
+ char buf[keylen + vallen + 2];
+
+ memcpy (buf, key, keylen);
+ buf[keylen] = '=';
+ memcpy (buf + keylen + 1, val, vallen);
+ buf[keylen + vallen + 1] = '\n';
+
+ return (vfs_fwrite (buf, 1, keylen + vallen + 2, file) == keylen + vallen + 2);
+}
+
+static bool_t write_key (VFSFile * file, const char * key, const char * val)
+{
+ if (! strcmp (key, "uri"))
+ return write_key_raw (file, key, val);
+
+ char buf[3 * strlen (val) + 1];
+ str_encode_percent (val, -1, buf);
+ return write_key_raw (file, key, buf);
+}
+
+static bool_t audpl_load (const char * path, VFSFile * file, char * * title,
+ Index * filenames, Index * tuples)
+{
+ ReadState * state = malloc (sizeof (ReadState));
+ state->file = file;
+ state->cur = state->buf;
+ state->len = 0;
+
+ char * key, * val;
+
+ if (! read_key (state, & key, & val) || strcmp (key, "title"))
+ {
+ free (state);
+ return FALSE;
+ }
+
+ * title = str_get (val);
+
+ bool_t readed = read_key (state, & key, & val);
+
+ while (readed && ! strcmp (key, "uri"))
+ {
+ char * uri = str_get (val);
+ Tuple * tuple = NULL;
+
+ while ((readed = read_key (state, & key, & val)) && strcmp (key, "uri"))
+ {
+ if (! tuple)
+ tuple = tuple_new_from_filename (uri);
+
+ if (! strcmp (key, "empty"))
+ continue;
+
+ int field = tuple_field_by_name (key);
+ TupleValueType type = tuple_field_get_type (field);
+
+ if (field < 0)
+ break;
+
+ if (type == TUPLE_STRING)
+ tuple_set_str (tuple, field, NULL, val);
+ else if (type == TUPLE_INT)
+ tuple_set_int (tuple, field, NULL, atoi (val));
+ }
+
+ index_append (filenames, uri);
+ index_append (tuples, tuple);
+ }
+
+ free (state);
+ return TRUE;
+}
+
+static bool_t audpl_save (const char * path, VFSFile * file,
+ const char * title, Index * filenames, Index * tuples)
+{
+ if (! write_key (file, "title", title))
+ return FALSE;
+
+ int count = index_count (filenames);
+
+ for (int i = 0; i < count; i ++)
+ {
+ if (! write_key (file, "uri", index_get (filenames, i)))
+ return FALSE;
+
+ const Tuple * tuple = tuples ? index_get (tuples, i) : NULL;
+
+ if (tuple)
+ {
+ int keys = 0;
+
+ for (int f = 0; f < TUPLE_FIELDS; f ++)
+ {
+ if (f == FIELD_FILE_PATH || f == FIELD_FILE_NAME || f == FIELD_FILE_EXT)
+ continue;
+
+ TupleValueType type = tuple_get_value_type (tuple, f, NULL);
+
+ if (type == TUPLE_STRING)
+ {
+ char * str = tuple_get_str (tuple, f, NULL);
+
+ if (! write_key (file, tuple_field_get_name (f), str))
+ {
+ str_unref (str);
+ return FALSE;
+ }
+
+ str_unref (str);
+ keys ++;
+ }
+ else if (type == TUPLE_INT)
+ {
+ char buf[32];
+ snprintf (buf, sizeof buf, "%d", tuple_get_int (tuple, f, NULL));
+
+ if (! write_key (file, tuple_field_get_name (f), buf))
+ return FALSE;
+
+ keys ++;
+ }
+ }
+
+ /* distinguish between an empty tuple and no tuple at all */
+ if (! keys && ! write_key (file, "empty", "1"))
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static const char * const audpl_exts[] = {"audpl", NULL};
+
+AUD_PLAYLIST_PLUGIN
+(
+ .name = "Audacious playlist format",
+ .extensions = audpl_exts,
+ .load = audpl_load,
+ .save = audpl_save
+)
diff --git a/src/bluetooth/Makefile b/src/bluetooth/Makefile
deleted file mode 100644
index d95fb51..0000000
--- a/src/bluetooth/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-PLUGIN = bluetooth${PLUGIN_SUFFIX}
-
-SRCS = bluetooth.c gui.c marshal.c scan_gui.c agent.c
-include ../../buildsys.mk
-include ../../extra.mk
-
-pre-depend: marshal.h
-
-marshal.h:
- glib-genmarshal --prefix=marshal --header marshal.list > $@
-marshal.c:
- glib-genmarshal --prefix=marshal --body marshal.list > $@
-
-plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${DBUS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${DBUS_GLIB_CFLAGS} ${PANGO_CFLAGS} -I../../intl -I../.. ${BLUEZ_CFLAGS}
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${PANGO_LIBS} ${BLUEZ_LIBS}
-
diff --git a/src/bluetooth/agent.c b/src/bluetooth/agent.c
deleted file mode 100644
index 8f4f1bc..0000000
--- a/src/bluetooth/agent.c
+++ /dev/null
@@ -1,1029 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu <paula.stanciu@gmail.com>
- * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
- * Copyright (C) 2006-2007 Bastien Nocera <hadess@hadess.net>
- *
- *
- * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#include <glib/gprintf.h>
-#include "bluetooth.h"
-#include "agent.h"
-#include "gui.h"
-
-#define PASSKEY_AGENT_PATH "/org/bluez/passkey_agent"
-#define AUTH_AGENT_PATH "/org/bluez/auth_agent"
-
-static GtkWidget *agent_window = NULL;
-static GtkWidget *window_box = NULL;
-static GtkWidget *top_box = NULL;
-static GtkWidget *middle_box = NULL;
-static GtkWidget *bottom_box = NULL;
-static GtkWidget *pair_label = NULL;
-static GtkWidget *device_label = NULL;
-static GtkWidget *passkey_entry = NULL;
-static GtkWidget *ok_button = NULL;
-static GtkWidget *cancel_button = NULL;
-static const char* passkey;
-static GList *adapter_list = NULL;
-DBusGProxy *pair_obj = NULL;
-
-static DBusGConnection *connection;
-
-struct adapter_data {
- char *path;
- int attached;
- char *old_mode;
-};
-
-void ok_button_call()
-{
- passkey = gtk_entry_get_text(GTK_ENTRY(passkey_entry));
- printf("Key entered : %s\n",passkey);
-}
-
-void cancel_button_call()
-{
- gtk_widget_destroy (agent_window);
- agent_window = NULL;
-}
-
-void gui_agent()
-{
- if (!agent_window)
- {
- agent_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (agent_window, "destroy",G_CALLBACK (gtk_widget_destroyed), &agent_window);
- window_box = gtk_vbox_new(FALSE,2);
- top_box = gtk_vbox_new(FALSE,2);
- middle_box = gtk_hbox_new(FALSE,2);
- bottom_box = gtk_hbox_new(FALSE,2);
-
- gtk_container_add(GTK_CONTAINER(agent_window),window_box);
- gtk_container_add(GTK_CONTAINER(window_box),top_box);
- gtk_container_set_border_width (GTK_CONTAINER(middle_box), 20);
- gtk_container_add(GTK_CONTAINER(window_box),middle_box);
- gtk_container_add(GTK_CONTAINER(window_box),bottom_box);
-
- pair_label = gtk_label_new_with_mnemonic("Enter passkey for pairing");
- device_label = gtk_label_new_with_mnemonic(((DeviceData*)(selected_dev->data))->name);
-
- gtk_container_add(GTK_CONTAINER(top_box),pair_label);
- gtk_container_add(GTK_CONTAINER(top_box),device_label);
-
- passkey_entry = gtk_entry_new();
- gtk_container_add(GTK_CONTAINER(middle_box),passkey_entry);
-
- ok_button = gtk_button_new_with_mnemonic("OK");
- cancel_button = gtk_button_new_with_mnemonic("Cancel");
- gtk_container_add(GTK_CONTAINER(bottom_box),ok_button);
- g_signal_connect(ok_button,"clicked",G_CALLBACK(ok_button_call),NULL);
-
- gtk_container_add(GTK_CONTAINER(bottom_box),cancel_button);
- g_signal_connect(cancel_button,"clicked",G_CALLBACK (cancel_button_call),NULL);
-
-
- gtk_window_set_title(GTK_WINDOW(agent_window),"Pairing passkey request");
- if (!GTK_WIDGET_VISIBLE (agent_window))
- gtk_widget_show_all (agent_window);
- else
- {
- gtk_widget_destroy (agent_window);
- agent_window = NULL;
- }
-
- }
-
-
-}
-static DBusGConnection *connection;
-
-static int volatile registered_passkey = 0;
-static int volatile registered_auth = 0;
-
-static gboolean auto_authorize = FALSE;
-
-typedef enum {
- AGENT_ERROR_REJECT
-} AgentError;
-
-#define AGENT_ERROR (agent_error_quark())
-
-#define AGENT_ERROR_TYPE (agent_error_get_type())
-
-static GQuark agent_error_quark(void)
-{
- static GQuark quark = 0;
- if (!quark)
- quark = g_quark_from_static_string("agent");
-
- return quark;
-}
-
-#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-
-static GType agent_error_get_type(void)
-{
- static GType etype = 0;
- if (etype == 0) {
- static const GEnumValue values[] = {
- ENUM_ENTRY(AGENT_ERROR_REJECT, "Rejected"),
- { 0, 0, 0 }
- };
-
- etype = g_enum_register_static("agent", values);
- }
-
- return etype;
-}
-
-static GList *input_list = NULL;
-
-struct input_data {
- char *path;
- char *address;
- char *service;
- char *uuid;
- DBusGMethodInvocation *context;
-};
-
-static gint input_compare(gconstpointer a, gconstpointer b)
-{
- struct input_data *a_data = (struct input_data *) a;
- struct input_data *b_data = (struct input_data *) b;
-
- return g_ascii_strcasecmp(a_data->address, b_data->address);
-}
-
-static void input_free(struct input_data *input)
-{
-
- input_list = g_list_remove(input_list, input);
-
- g_free(input->uuid);
- g_free(input->service);
- g_free(input->address);
- g_free(input->path);
- g_free(input);
-
- // if (g_list_length(input_list) == 0)
- // disable_blinking();
-}
-
-static void passkey_callback(gint response, gpointer user_data)
-{
- struct input_data *input = user_data;
-
- if (response == GTK_RESPONSE_ACCEPT) {
- const char *passkey;
- /*!!!!!!!!! hardcoded passkey !!!!!!!!!!!!! to modify*/
- passkey ="0000";
- dbus_g_method_return(input->context, passkey);
- } else {
- GError *error;
- error = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT,
- "Pairing request rejected");
- printf("passkey error\n");
- dbus_g_method_return_error(input->context, error);
- }
-
- input_free(input);
- printf("return\n");
- }
-
-
-static void passkey_dialog(const char *path, const char *address,
- const gchar *device, DBusGMethodInvocation *context)
-{
- struct input_data *input;
-
- input = g_try_malloc0(sizeof(*input));
- if (!input)
- return;
-
- input->path = g_strdup(path);
- input->address = g_strdup(address);
-
- input->context = context;
-
- passkey_callback(GTK_RESPONSE_ACCEPT,input);
-
-
-}
-
-static void confirm_dialog(const char *path, const char *address,
- const char *value, const gchar *device,
- DBusGMethodInvocation *context)
-{
- printf("confirm dialog \n");
- struct input_data *input;
-
- input = g_try_malloc0(sizeof(*input));
- if (!input)
- return;
-
- input->path = g_strdup(path);
- input->address = g_strdup(address);
-
- input->context = context;
- // g_signal_connect(G_OBJECT(dialog), "response",
- // G_CALLBACK(confirm_callback), input);
-
- //enable_blinking();
-}
-
-static void auth_dialog(const char *path, const char *address,
- const char *service, const char *uuid, const gchar *device,
- const gchar *profile, DBusGMethodInvocation *context)
-{
- struct input_data *input;
-
- input = g_try_malloc0(sizeof(*input));
- if (!input)
- return;
-
- input->path = g_strdup(path);
- input->address = g_strdup(address);
- input->service = g_strdup(service);
- input->uuid = g_strdup(uuid);
-
- input->context = context;
-
-
- /* translators: Whether to grant access to a particular service
- * to the device mentioned */
-
- /* g_signal_connect(G_OBJECT(dialog), "response",
- G_CALLBACK(auth_callback), input);
-
- enable_blinking();
- */
-}
-
-typedef struct {
- GObject parent;
-} PasskeyAgent;
-
-typedef struct {
- GObjectClass parent;
-} PasskeyAgentClass;
-
-static GObjectClass *passkey_agent_parent;
-
-G_DEFINE_TYPE(PasskeyAgent, passkey_agent, G_TYPE_OBJECT)
-
-#define PASSKEY_AGENT_OBJECT_TYPE (passkey_agent_get_type())
-
-#define PASSKEY_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- PASSKEY_AGENT_OBJECT_TYPE, PasskeyAgent))
-
-static void passkey_agent_finalize(GObject *obj)
-{
- passkey_agent_parent->finalize(obj);
-}
-
-static void passkey_agent_init(PasskeyAgent *obj)
-{
- g_printf("passkeyagent init\n");
-}
-
-static void passkey_agent_class_init(PasskeyAgentClass *klass)
-{
- GObjectClass *gobject_class;
-
- passkey_agent_parent = g_type_class_peek_parent(klass);
-
- gobject_class = G_OBJECT_CLASS(klass);
- gobject_class->finalize = passkey_agent_finalize;
-}
-
-static PasskeyAgent *passkey_agent_new(const char *path)
-{
- PasskeyAgent *agent;
-
- agent = g_object_new(PASSKEY_AGENT_OBJECT_TYPE, NULL);
-
- dbus_g_connection_register_g_object(connection, path, G_OBJECT(agent));
- g_printf("new passkey agent \n");
- return agent;
-}
-static gboolean passkey_agent_request(PasskeyAgent *agent,
- const char *path, const char *address,
- DBusGMethodInvocation *context)
-{
- printf("passkey_agent request\n");
- DBusGProxy *object;
- const char *adapter = NULL, *name = NULL;
- gchar *device, *line;
-
- object = dbus_g_proxy_new_for_name(connection, "org.bluez",
- path, "org.bluez.Adapter");
-
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &adapter, G_TYPE_INVALID);
-
- dbus_g_proxy_call(object, "GetRemoteName", NULL,
- G_TYPE_STRING, address, G_TYPE_INVALID,
- G_TYPE_STRING, &name, G_TYPE_INVALID);
-
- if (name) {
- if (g_strrstr(name, address))
- device = g_strdup(name);
- else
- device = g_strdup_printf("%s (%s)", name, address);
- } else
- device = g_strdup(address);
-
- passkey_dialog(path, address, device, context);
- /* translators: this is a popup telling you a particular device
- * has asked for pairing */
- line = g_strdup_printf(_("Pairing request for '%s'"), device);
- g_free(device);
-
- /*show_notification(adapter ? adapter : _("Bluetooth device"),
- line, _("Enter passkey"), 0,
- G_CALLBACK(notification_closed));
- */
- g_free(line);
-
- return TRUE;
-}
-
-static gboolean passkey_agent_confirm(PasskeyAgent *agent,
- const char *path, const char *address,
- const char *value, DBusGMethodInvocation *context)
-{
- printf("passkey agent confirm \n");
- DBusGProxy *object;
- const char *adapter = NULL, *name = NULL;
- gchar *device, *line;
-
- object = dbus_g_proxy_new_for_name(connection, "org.bluez",
- path, "org.bluez.Adapter");
-
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &adapter, G_TYPE_INVALID);
-
- dbus_g_proxy_call(object, "GetRemoteName", NULL,
- G_TYPE_STRING, address, G_TYPE_INVALID,
- G_TYPE_STRING, &name, G_TYPE_INVALID);
-
- if (name) {
- if (g_strrstr(name, address))
- device = g_strdup(name);
- else
- device = g_strdup_printf("%s (%s)", name, address);
- } else
- device = g_strdup(address);
-
- confirm_dialog(path, address, value, device, context);
-
- line = g_strdup_printf(_("Pairing request for '%s'"), device);
- g_free(device);
-
- /*show_notification(adapter ? adapter : _("Bluetooth device"),
- line, _("Confirm pairing"), 0,
- G_CALLBACK(notification_closed));
- */
- g_free (line);
-
- return TRUE;
-}
-
-static gboolean passkey_agent_cancel(PasskeyAgent *agent,
- const char *path, const char *address, GError **error)
-{
- printf("passkey agent cancel \n");
- GList *list;
- GError *result;
- struct input_data *input;
-
- input = g_try_malloc0(sizeof(*input));
- if (!input)
- return FALSE;
-
- input->path = g_strdup(path);
- input->address = g_strdup(address);
-
- list = g_list_find_custom(input_list, input, input_compare);
-
- g_free(input->address);
- g_free(input->path);
- g_free(input);
-
- if (!list || !list->data)
- return FALSE;
-
- input = list->data;
-
- //close_notification();
-
- result = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT,
- "Agent callback canceled");
-
- dbus_g_method_return_error(input->context, result);
-
- input_free(input);
-
- return TRUE;
-}
-
-static gboolean passkey_agent_release(PasskeyAgent *agent, GError **error)
-{
- printf("pass agent release \n");
- registered_passkey = 0;
-
- return TRUE;
-}
-
-#include "passkey-agent-glue.h"
-
-typedef struct {
- GObject parent;
-} AuthAgent;
-
-typedef struct {
- GObjectClass parent;
-} AuthAgentClass;
-
-static GObjectClass *auth_agent_parent;
-
-G_DEFINE_TYPE(AuthAgent, auth_agent, G_TYPE_OBJECT)
-
-#define AUTH_AGENT_OBJECT_TYPE (auth_agent_get_type())
-
-#define AUTH_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- AUTH_AGENT_OBJECT_TYPE, AuthAgent))
-
-static void auth_agent_finalize(GObject *obj)
-{
- auth_agent_parent->finalize(obj);
-}
-
-static void auth_agent_init(AuthAgent *obj)
-{
-}
-
-static void auth_agent_class_init(AuthAgentClass *klass)
-{
- GObjectClass *gobject_class;
-
- auth_agent_parent = g_type_class_peek_parent(klass);
-
- gobject_class = G_OBJECT_CLASS(klass);
- gobject_class->finalize = auth_agent_finalize;
-}
-
-static AuthAgent *auth_agent_new(const char *path)
-{
- AuthAgent *agent;
-
- agent = g_object_new(AUTH_AGENT_OBJECT_TYPE, NULL);
-
- dbus_g_connection_register_g_object(connection, path, G_OBJECT(agent));
-
- return agent;
-}
-
-static gboolean auth_agent_authorize(PasskeyAgent *agent,
- const char *path, const char *address, const char *service,
- const char *uuid, DBusGMethodInvocation *context)
-{
- printf("auth agent authorize \n");
- DBusGProxy *object;
- const char *adapter = NULL, *name = NULL;
- gchar *device, *profile, *line;
-
- if (auto_authorize == TRUE) {
- dbus_g_method_return(context);
- return TRUE;
- }
-
- object = dbus_g_proxy_new_for_name(connection, "org.bluez",
- path, "org.bluez.Adapter");
-
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &adapter, G_TYPE_INVALID);
-
- dbus_g_proxy_call(object, "GetRemoteName", NULL,
- G_TYPE_STRING, address, G_TYPE_INVALID,
- G_TYPE_STRING, &name, G_TYPE_INVALID);
-
- object = dbus_g_proxy_new_for_name(connection, "org.bluez",
- service, "org.bluez.Service");
-
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &profile, G_TYPE_INVALID);
-
- if (name) {
- if (g_strrstr(name, address))
- device = g_strdup(name);
- else
- device = g_strdup_printf("%s (%s)", name, address);
- } else
- device = g_strdup(address);
-
- auth_dialog(path, address, service, uuid, device, profile, context);
-
- line = g_strdup_printf(_("Authorization request for %s"), device);
- g_free(device);
-
- /*show_notification(adapter ? adapter : _("Bluetooth device"),
- line, _("Check authorization"), 0,
- G_CALLBACK(notification_closed));
- */
- g_free(line);
-
- return TRUE;
-}
-
-static gboolean auth_agent_cancel(PasskeyAgent *agent,
- const char *path, const char *address, const char *service,
- const char *uuid, DBusGMethodInvocation *context)
-{
- GList *list;
- GError *result;
- struct input_data *input;
-
- input = g_try_malloc0(sizeof(*input));
- if (!input)
- return FALSE;
-
- input->path = g_strdup(path);
- input->address = g_strdup(address);
- input->service = g_strdup(service);
- input->uuid = g_strdup(uuid);
-
- list = g_list_find_custom(input_list, input, input_compare);
-
- g_free(input->uuid);
- g_free(input->service);
- g_free(input->address);
- g_free(input->path);
- g_free(input);
-
- if (!list || !list->data)
- return FALSE;
-
- input = list->data;
-
- //close_notification();
-
- result = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT,
- "Agent callback canceled");
-
- dbus_g_method_return_error(input->context, result);
-
- input_free(input);
-
- return TRUE;
-}
-
-static gboolean auth_agent_release(PasskeyAgent *agent, GError **error)
-{
- registered_auth = 0;
-
- return TRUE;
-}
-
-#include "auth-agent-glue.h"
-
-int register_agents(void)
-{
- DBusGProxy *object;
- GError *error = NULL;
-
- if (registered_passkey && registered_auth)
- return 0;
-
- object = dbus_g_proxy_new_for_name(connection, "org.bluez",
- "/org/bluez", "org.bluez.Security");
-
- if (!registered_passkey) {
-
- dbus_g_proxy_call(object, "RegisterDefaultPasskeyAgent",
- &error, G_TYPE_STRING, PASSKEY_AGENT_PATH,
- G_TYPE_INVALID, G_TYPE_INVALID);
-
- if (error != NULL) {
- g_error_free(error);
- return -1;
- }
-
- registered_passkey = 1;
- }
-
- if (!registered_auth) {
- dbus_g_proxy_call(object, "RegisterDefaultAuthorizationAgent",
- &error, G_TYPE_STRING, AUTH_AGENT_PATH,
- G_TYPE_INVALID, G_TYPE_INVALID);
-
- if (error != NULL) {
- g_error_free(error);
- return -1;
- }
-
- registered_auth = 1;
- }
-
- return 0;
-}
-
-void unregister_agents(void)
-{
- registered_passkey = 0;
- registered_auth = 0;
-}
-
-int setup_agents(DBusGConnection *conn)
-{
- printf("setup agents\n");
- void *agent;
-
- connection = dbus_g_connection_ref(conn);
-
- dbus_g_object_type_install_info(PASSKEY_AGENT_OBJECT_TYPE,
- &dbus_glib_passkey_agent_object_info);
-
- dbus_g_object_type_install_info(AUTH_AGENT_OBJECT_TYPE,
- &dbus_glib_auth_agent_object_info);
-
- dbus_g_error_domain_register(AGENT_ERROR, "org.bluez.Error",
- AGENT_ERROR_TYPE);
-
- agent = passkey_agent_new(PASSKEY_AGENT_PATH);
-
- agent = auth_agent_new(AUTH_AGENT_PATH);
-
- return 0;
-}
-
-void cleanup_agents(void)
-{
- printf("clean up agents \n");
- unregister_agents();
-
- dbus_g_connection_unref(connection);
-}
-
-void show_agents(void)
-{
- printf("show_agents\n");
- //close_notification();
-
- // g_list_foreach(input_list, show_dialog, NULL);
-
- // disable_blinking();
-}
-
-void set_auto_authorize(gboolean value)
-{
- auto_authorize = value;
-}
-
-static void bonding_created(DBusGProxy *object,
- const char *address, gpointer user_data)
-{
-
-
- const char *adapter = NULL, *name = NULL;
- gchar *device, *text;
-
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &adapter, G_TYPE_INVALID);
-
- dbus_g_proxy_call(object, "GetRemoteName", NULL,
- G_TYPE_STRING, address, G_TYPE_INVALID,
- G_TYPE_STRING, &name, G_TYPE_INVALID);
- mcs_handle_t *cfgfile = aud_cfg_db_open();
- aud_cfg_db_set_string(cfgfile,"BLUETOOTH_PLUGIN","bonded", address);
- aud_cfg_db_close(cfgfile);
-
- if (name) {
- if (g_strrstr(name, address))
- device = g_strdup(name);
- else
- device = g_strdup_printf("%s (%s)", name, address);
- } else
- device = g_strdup(address);
- bonded_dev = g_strdup_printf(address);
-
-
- text = g_strdup_printf(_("Created bonding with %s"), device);
- bonding_finish = 1;
- g_free(device);
-
- g_printf("%s\n",text);
- g_free(text);
-}
-
-static void bonding_removed(DBusGProxy *object,
- const char *address, gpointer user_data)
-{
- const char *adapter = NULL, *name = NULL;
- gchar *device, *text;
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &adapter, G_TYPE_INVALID);
-
- dbus_g_proxy_call(object, "GetRemoteName", NULL,
- G_TYPE_STRING, address, G_TYPE_INVALID,
- G_TYPE_STRING, &name, G_TYPE_INVALID);
-
- if (name) {
- if (g_strrstr(name, address))
- device = g_strdup(name);
- else
- device = g_strdup_printf("%s (%s)", name, address);
- } else
- device = g_strdup(address);
-
- text = g_strdup_printf(_("Removed bonding with %s"), device);
- mcs_handle_t *cfgfile = aud_cfg_db_open();
- aud_cfg_db_set_string(cfgfile,"BLUETOOTH_PLUGIN","bonded","no");
- aud_cfg_db_close(cfgfile);
-
- g_free(device);
- printf("bonding removed\n");
-
-// show_notification(adapter ? adapter : _("Bluetooth device"),
-// text, NULL, 6000, NULL);
-
- g_free(text);
- bonding_finish =0;
-}
-
-
-static void trust_added(DBusGProxy *object,
- const char *address, gpointer user_data)
-{
-}
-
-static void trust_removed(DBusGProxy *object,
- const char *address, gpointer user_data)
-{
-}
-
-static void set_new_mode(struct adapter_data *adapter, const char *mode)
-{
- g_free(adapter->old_mode);
-
- adapter->old_mode = g_strdup(mode);
-}
-
-static void mode_changed(DBusGProxy *object,
- const char *mode, gpointer user_data)
-{
- struct adapter_data *adapter = (struct adapter_data *) user_data;
- const char *adapter_name = NULL;
- const char *text;
-
- if (g_str_equal(mode, "off") == TRUE) {
- set_new_mode(adapter, mode);
- return;
- }
- if (g_str_equal(adapter->old_mode, "off")
- && g_str_equal(mode, "connectable")) {
- set_new_mode(adapter, mode);
- return;
- }
-
-
- if (g_str_equal(mode, "off") != FALSE) {
- text = N_("Device has been switched off");
- } else if (g_str_equal(mode, "connectable") != FALSE
- && g_str_equal(adapter->old_mode, "discoverable") != FALSE) {
- text = N_("Device has been made non-discoverable");
- } else if (g_str_equal(mode, "connectable") != FALSE) {
- text = N_("Device has been made connectable");
- } else if (g_str_equal (mode, "discoverable") != FALSE) {
- text = N_("Device has been made discoverable");
- } else if (g_str_equal(mode, "limited") != FALSE) {
- text = N_("Device has been made limited discoverable");
- } else if (g_str_equal(mode, "pairing") != FALSE) {
- text = N_("Device has been switched into pairing mode");
- } else {
- set_new_mode(adapter, mode);
- return;
- }
-
- dbus_g_proxy_call(object, "GetName", NULL, G_TYPE_INVALID,
- G_TYPE_STRING, &adapter_name, G_TYPE_INVALID);
-
- /*show_notification(adapter_name ? adapter_name : _("Bluetooth device"),
- _(text), NULL, 3000, NULL);
- */
-
- set_new_mode(adapter, mode);
-}
-/*
-static void adapter_free(gpointer data, gpointer user_data)
-{
- struct adapter_data *adapter = data;
-
- adapter_list = g_list_remove(adapter_list, adapter);
-
- g_free(adapter->path);
- g_free(adapter->old_mode);
- g_free(adapter);
-}
-
-static void adapter_disable(gpointer data, gpointer user_data)
-{
- struct adapter_data *adapter = data;
-
- adapter->attached = 0;
-}
-*/
-
-static gint adapter_compare(gconstpointer a, gconstpointer b)
-{
- const struct adapter_data *adapter = a;
- const char *path = b;
-
- return g_ascii_strcasecmp(adapter->path, path);
-}
-/*
-static void adapter_count(gpointer data, gpointer user_data)
-{
- struct adapter_data *adapter = data;
- int *count = user_data;
-
- if (adapter->attached)
- (*count)++;
-}
-
-*/
-
-
-void add_bonding(){
- DBusGProxy *object;
-
- object = dbus_g_proxy_new_for_name(bus, "org.bluez",
- "/org/bluez/passkey", "org.bluez.Adapter");
-
- dbus_g_proxy_add_signal(object, "BondingCreated",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "BondingCreated",
- G_CALLBACK(bonding_created), NULL, NULL);
-
- dbus_g_proxy_add_signal(object, "BondingRemoved",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "BondingRemoved",
- G_CALLBACK(bonding_removed), NULL, NULL);
-}
-static void add_adapter(const char *path)
-{
- GList *list;
- DBusGProxy *object;
- struct adapter_data *adapter;
- const char *old_mode;
-
- list = g_list_find_custom(adapter_list, path, adapter_compare);
- if (list && list->data) {
- struct adapter_data *adapter = list->data;
-
- adapter->attached = 1;
- return;
- }
-
- adapter = g_try_malloc0(sizeof(*adapter));
- if (!adapter)
- return;
-
- adapter->path = g_strdup(path);
- adapter->attached = 1;
-
- adapter_list = g_list_append(adapter_list, adapter);
-
-
- object = dbus_g_proxy_new_for_name(bus, "org.bluez",
- path, "org.bluez.Adapter");
-
- dbus_g_proxy_add_signal(object, "ModeChanged",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "ModeChanged",
- G_CALLBACK(mode_changed), adapter, NULL);
-
- dbus_g_proxy_add_signal(object, "BondingCreated",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "BondingCreated",
- G_CALLBACK(bonding_created), NULL, NULL);
-
- dbus_g_proxy_add_signal(object, "BondingRemoved",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "BondingRemoved",
- G_CALLBACK(bonding_removed), NULL, NULL);
-
- dbus_g_proxy_add_signal(object, "TrustAdded",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "TrustAdded",
- G_CALLBACK(trust_added), NULL, NULL);
-
- dbus_g_proxy_add_signal(object, "TrustRemoved",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "TrustRemoved",
- G_CALLBACK(trust_removed), NULL, NULL);
-
- old_mode = NULL;
- dbus_g_proxy_call(object, "GetMode", NULL,
- G_TYPE_INVALID, G_TYPE_STRING,
- &old_mode, G_TYPE_INVALID);
- if (old_mode != NULL)
- set_new_mode(adapter, old_mode);
- register_agents();
-}
-
-static void adapter_added(DBusGProxy *object,
- const char *path, gpointer user_data)
-{
- printf("adapter added\n");
- register_agents();
-
- add_adapter(path);
-}
-
-static void adapter_removed(DBusGProxy *object,
- const char *path, gpointer user_data)
-{
- GList *list;
-
- list = g_list_find_custom(adapter_list, path, adapter_compare);
- if (list && list->data) {
- struct adapter_data *adapter = list->data;
-
- adapter->attached = 0;
- }
-
-}
-
-
-static int setup_manager(void)
-{
- DBusGProxy *object;
- GError *error = NULL;
- const gchar **array = NULL;
-
- object = dbus_g_proxy_new_for_name(bus, "org.bluez",
- "/org/bluez", "org.bluez.Manager");
-
- dbus_g_proxy_add_signal(object, "AdapterAdded",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "AdapterAdded",
- G_CALLBACK(adapter_added), NULL, NULL);
-
- dbus_g_proxy_add_signal(object, "AdapterRemoved",
- G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal(object, "AdapterRemoved",
- G_CALLBACK(adapter_removed), NULL, NULL);
-
- dbus_g_proxy_call(object, "ListAdapters", &error,
- G_TYPE_INVALID, G_TYPE_STRV, &array, G_TYPE_INVALID);
-
- if (error == NULL) {
- while (*array) {
- printf("add adapter\n");
- add_adapter(*array);
- array++;
- }
- } else
- g_error_free(error);
-
- return 0;
-}
-
-
-void run_agents()
-{
- bonding_finish =0;
- setup_agents(bus);
- //to add the bounding signals
-// register_agents();
- setup_manager();
-
-}
-
diff --git a/src/bluetooth/agent.h b/src/bluetooth/agent.h
deleted file mode 100644
index 3a48f82..0000000
--- a/src/bluetooth/agent.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu <paula.stanciu@gmail.com>
- * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
- * Copyright (C) 2006-2007 Bastien Nocera <hadess@hadess.net>
- *
- *
- * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <dbus/dbus-glib.h>
-gint bonding_finish;
-void run_agents(void);
-int setup_agents(DBusGConnection *conn);
-void cleanup_agents(void);
-
-int register_agents(void);
-void unregister_agents(void);
-
-void show_agents(void);
-void set_auto_authorize(gboolean value);
diff --git a/src/bluetooth/auth-agent-glue.h b/src/bluetooth/auth-agent-glue.h
deleted file mode 100644
index da0f936..0000000
--- a/src/bluetooth/auth-agent-glue.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/* Generated by dbus-binding-tool; do not edit! */
-
-
-#ifndef __dbus_glib_marshal_auth_agent_MARSHAL_H__
-#define __dbus_glib_marshal_auth_agent_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* BOOLEAN:STRING,STRING,STRING,STRING,POINTER (/tmp/dbus-binding-tool-c-marshallers.9NIBEU:1) */
-extern void dbus_glib_marshal_auth_agent_BOOLEAN__STRING_STRING_STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_auth_agent_BOOLEAN__STRING_STRING_STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_STRING_STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer arg_4,
- gpointer arg_5,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__STRING_STRING_STRING_STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gboolean v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 6);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__STRING_STRING_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- g_marshal_value_peek_string (param_values + 4),
- g_marshal_value_peek_pointer (param_values + 5),
- data2);
-
- g_value_set_boolean (return_value, v_return);
-}
-
-/* NONE:STRING,STRING,STRING,STRING,POINTER (/tmp/dbus-binding-tool-c-marshallers.9NIBEU:2) */
-extern void dbus_glib_marshal_auth_agent_VOID__STRING_STRING_STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_auth_agent_VOID__STRING_STRING_STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING_STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer arg_4,
- gpointer arg_5,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING_STRING_STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 6);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- g_marshal_value_peek_string (param_values + 4),
- g_marshal_value_peek_pointer (param_values + 5),
- data2);
-}
-#define dbus_glib_marshal_auth_agent_NONE__STRING_STRING_STRING_STRING_POINTER dbus_glib_marshal_auth_agent_VOID__STRING_STRING_STRING_STRING_POINTER
-
-/* BOOLEAN:POINTER (/tmp/dbus-binding-tool-c-marshallers.9NIBEU:3) */
-extern void dbus_glib_marshal_auth_agent_BOOLEAN__POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_auth_agent_BOOLEAN__POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gboolean v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 2);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__POINTER) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_pointer (param_values + 1),
- data2);
-
- g_value_set_boolean (return_value, v_return);
-}
-
-G_END_DECLS
-
-#endif /* __dbus_glib_marshal_auth_agent_MARSHAL_H__ */
-
-#include <dbus/dbus-glib.h>
-static const DBusGMethodInfo dbus_glib_auth_agent_methods[] = {
- { (GCallback) auth_agent_authorize, dbus_glib_marshal_auth_agent_NONE__STRING_STRING_STRING_STRING_POINTER, 0 },
- { (GCallback) auth_agent_cancel, dbus_glib_marshal_auth_agent_BOOLEAN__STRING_STRING_STRING_STRING_POINTER, 87 },
- { (GCallback) auth_agent_release, dbus_glib_marshal_auth_agent_BOOLEAN__POINTER, 171 },
-};
-
-const DBusGObjectInfo dbus_glib_auth_agent_object_info = {
- 0,
- dbus_glib_auth_agent_methods,
- 3,
-"org.bluez.AuthorizationAgent\0Authorize\0A\0adapter\0I\0s\0address\0I\0s\0service\0I\0s\0uuid\0I\0s\0\0org.bluez.AuthorizationAgent\0Cancel\0S\0adapter\0I\0s\0address\0I\0s\0service\0I\0s\0uuid\0I\0s\0\0org.bluez.AuthorizationAgent\0Release\0S\0\0\0",
-"\0",
-"\0"
-};
-
diff --git a/src/bluetooth/bluetooth.c b/src/bluetooth/bluetooth.c
deleted file mode 100644
index 0d17184..0000000
--- a/src/bluetooth/bluetooth.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include <glib/gstdio.h>
-#include <errno.h>
-#include <string.h>
-#include "bluetooth.h"
-#include "marshal.h"
-#include "gui.h"
-#include "scan_gui.h"
-#include "agent.h"
-#include <audacious/plugin.h>
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-#define DEBUG 1
-GList * current_device = NULL;
-gint config = 0;
-gint devices_no = 0;
-gboolean pcmdev_modified = FALSE;
-GStaticMutex mutex = G_STATIC_MUTEX_INIT;
-static gchar *current_address=NULL;
-static GThread *connect_th;
-void bluetooth_init ( void );
-void bluetooth_cleanup ( void );
-void bt_cfg(void);
-void bt_about(void);
-static void remote_device_found(DBusGProxy *object, char *address, const unsigned int class, const int rssi, gpointer user_data);
-static void discovery_started(DBusGProxy *object, gpointer user_data);
-static void remote_name_updated(DBusGProxy *object, const char *address, char *name, gpointer user_data);
-static void print_results(void);
-static void discovery_completed(DBusGProxy *object, gpointer user_data);
-void discover_devices(void);
-void disconnect_dbus_signals(void);
-/*static void show_restart_dialog(void); */
-static void remove_bonding(gchar* device);
-GeneralPlugin bluetooth_gp =
-{
- .description = "Bluetooth audio support",
- .init = bluetooth_init,
- .about = bt_about,
- .configure = bt_cfg,
- .cleanup = bluetooth_cleanup
-};
-GeneralPlugin *bluetooth_gplist[] = { &bluetooth_gp, NULL };
-DECLARE_PLUGIN(bluetooth_gp, NULL, NULL, NULL, NULL, NULL, bluetooth_gplist, NULL, NULL)
-
-void bluetooth_init ( void )
-{
- bonded_dev = NULL;
- discover_finish = 0;
- pcmdev_modified = FALSE;
- audio_devices = NULL;
- bus = NULL;
- obj = NULL;
- gchar* bonded_addr = NULL;
- discover_devices();
- mcs_handle_t *cfgfile ;
- cfgfile = aud_cfg_db_open();
- if(!aud_cfg_db_get_string(cfgfile, "BLUETOOTH_PLUGIN", "bonded",
- &bonded_addr)) {
- aud_cfg_db_close(cfgfile);
- return;
- }
- if(bonded_addr!=NULL && g_strcmp0(bonded_addr,"no")!=0)
- {
- remove_bonding(bonded_addr);
- }
- free(bonded_addr);
- aud_cfg_db_close(cfgfile);
-
-}
-
-void bluetooth_cleanup ( void )
-{
- if (config ==1 )
- {
- close_window();
- config =0;
- }
- if (bonded_dev) {
- printf("bluetooth: exit\n");
- remove_bonding(bonded_dev);
- }
- if(discover_finish == 2) {
- dbus_g_connection_flush (bus);
- dbus_g_connection_unref(bus);
- disconnect_dbus_signals();
-
- }
- if (pcmdev_modified) {
- /* switching back to default pcm device at cleanup */
- mcs_handle_t *cfgfile = aud_cfg_db_open();
- aud_cfg_db_set_string(cfgfile,"alsa","pcm", "default");
- aud_cfg_db_close(cfgfile);
- }
-}
-
-void bt_about( void )
-{
- static GtkWidget *dialog = NULL;
-
- audgui_simple_message(&dialog, GTK_MESSAGE_INFO, _("Bluetooth headset support plugin"),
- _("Bluetooth headset support\n"
- "Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com\n"
- "This was a GSoC 2008 Project - Many thanks to my mentor Tony Vroon and the Audacious team\n \n"
- "In order to use the AVRCP you need the uinput module loaded into the kernel\n"
- "The headset keys will be recognized as normal mutimedia keys and \n"
- "can be configured using the Audacious Global Hotkey plugin or ohter tools \n"
- "provided by your window manager\n"
- ));
-}
-
-void bt_cfg(void)
-{
- printf("bt_cfg\n");
- config =1;
- if(discover_finish == 2){
- if (devices_no == 0){
- printf("no devs!\n");
- show_scan(0);
- show_no_devices();
- }else
- results_ui();
- }
- else show_scan(0);
- printf("end of bt_cfg\n");
-}
-
-void disconnect_dbus_signals()
-{
- dbus_g_proxy_disconnect_signal(obj, "RemoteDeviceFound", G_CALLBACK(remote_device_found), bus);
- dbus_g_proxy_disconnect_signal(obj, "DiscoveryStarted", G_CALLBACK(discovery_started), bus);
- dbus_g_proxy_disconnect_signal(obj, "DiscoveryCompleted", G_CALLBACK(discovery_completed), bus);
- dbus_g_proxy_disconnect_signal(obj, "RemoteNameUpdated", G_CALLBACK(remote_name_updated), NULL);
-
-}
-
-void clean_devices_list()
-{
- g_list_free(audio_devices);
- dbus_g_connection_flush (bus);
- dbus_g_connection_unref(bus);
- audio_devices = NULL;
- //g_list_free(current_device);
-}
-static void remove_bonding(gchar *device)
-{
- printf("remove_bonding call\n");
- dbus_g_object_register_marshaller(marshal_VOID__STRING_UINT_INT, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID);
- dbus_g_proxy_call(obj,"RemoveBonding",NULL,G_TYPE_STRING,device,G_TYPE_INVALID,G_TYPE_INVALID);
-
-}
-void refresh_call(void)
-{
- printf("refresh function called\n");
- disconnect_dbus_signals();
- clean_devices_list();
- if(discover_finish == 0 ||discover_finish== 2){
- discover_finish = 0;
-
- discover_devices();
- close_window();
- show_scan(0);
- }
- else
- printf("Scanning please wait!\n");
-}
-
-gpointer connect_call_th(void)
-{
- //I will have to enable the audio service if necessary
- run_agents();
- dbus_g_object_register_marshaller(marshal_VOID__STRING_UINT_INT, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID);
- dbus_g_proxy_call(obj,"CreateBonding",NULL,G_TYPE_STRING,current_address,G_TYPE_INVALID,G_TYPE_INVALID);
-
-return NULL;
-}
-
-void connect_call(void)
-{
- close_call();
- close_window();
- show_scan(1);
- current_address = g_strdup(((DeviceData*)(selected_dev->data))->address);
- connect_th = g_thread_create((GThreadFunc)connect_call_th,NULL,TRUE,NULL) ;
-}
-
-
-void play_call()
-{
-
- FILE *file;
- FILE *temp_file;
- gint prev=0;
- char line[128];
- const gchar *home;
- gchar *device_line;
- gchar *file_name="";
- gchar *temp_file_name;
- home = g_get_home_dir();
- file_name = g_strconcat(home,"/.asoundrc",NULL);
- temp_file_name = g_strconcat(home,"/temp_bt",NULL);
- file = fopen(file_name,"r");
- temp_file = fopen(temp_file_name,"w");
- device_line = g_strdup_printf("device %s\n",current_address);
- if ( file != NULL )
- {
- while ( fgets ( line, sizeof line, file ) != NULL )
- {
- if(!(strcmp(line,"pcm.audacious_bt{\n"))){
- fputs(line,temp_file);
- fgets ( line, sizeof line, file ); /* type bluetooth */
- fputs(line,temp_file);
- fgets ( line, sizeof line, file ); /* device MAC */
- fputs(device_line,temp_file);
- prev = 1;
- } else
- fputs(line,temp_file);
- }
-
- fclose (file);
- }
- if(!prev){
- fputs("pcm.audacious_bt{\n",temp_file);
- fputs("type bluetooth\n",temp_file);
- fputs(device_line,temp_file);
- fputs("}\n",temp_file);
- prev = 0;
- }
-
- fclose(temp_file);
- int err = rename(temp_file_name,file_name);
- printf("rename error : %d",err);
- perror("zz");
- g_free(device_line);
- g_free(file_name);
- g_free(temp_file_name);
- pcmdev_modified = TRUE;
- mcs_handle_t *cfgfile = aud_cfg_db_open();
- aud_cfg_db_set_string(cfgfile,"alsa","pcm", "audacious_bt");
- aud_cfg_db_close(cfgfile);
-
- printf("play callback\n");
- close_window();
- aud_output_plugin_cleanup();
-// aud_drct_stop();
- aud_drct_play();
-
-
-}
-/*static void show_restart_dialog()
-{
- static GtkWidget *window = NULL;
- GtkWidget *dialog;
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_OK,
- "Please restart the player to apply the bluetooth audio settings!");
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-}
-*/
-static void remote_device_found(DBusGProxy *object, char *address, const unsigned int class, const int rssi, gpointer user_data)
-{
- int found_in_list=FALSE;
- g_static_mutex_lock(&mutex);
- current_device = audio_devices;
- if((class & 0x200404)==0x200404)
- {
- while(current_device != NULL)
- {
- if(g_str_equal(address,((DeviceData*)(current_device->data))->address))
- {
- found_in_list = TRUE;
- break;
- }
- current_device=g_list_next(current_device);
- }
- if(!found_in_list)
- {
- DeviceData *dev= g_new0(DeviceData, 1);
- dev->class = class;
- dev->address = g_strdup(address);
- dev->name = NULL;
- audio_devices=g_list_prepend(audio_devices, dev);
- }
- }
- g_static_mutex_unlock(&mutex);
-}
-
-static void discovery_started(DBusGProxy *object, gpointer user_data)
-{
- g_print("Signal: DiscoveryStarted()\n");
- discover_finish = 1;
-}
-
-static void remote_name_updated(DBusGProxy *object, const char *address, char *name, gpointer user_data)
-{
- g_static_mutex_lock(&mutex);
- current_device=audio_devices;
- while(current_device != NULL)
- {
- if(g_str_equal(address,((DeviceData*)(current_device->data))->address))
- {
- ((DeviceData*)(current_device->data))->name=g_strdup(name);
- break;
- }
- current_device=g_list_next(current_device);
- }
- g_static_mutex_unlock(&mutex);
-}
-
-static void print_results()
-{
- int i=0;
- g_print("Final Scan results:\n");
- devices_no = g_list_length(audio_devices);
- g_print("Number of audio devices: %d \n",devices_no);
- if(devices_no==0 ) {
- if(config ==1) show_no_devices();
- } else {
- current_device=audio_devices;
- while(current_device != NULL)
- {
- g_print("Device %d: Name: %s, Class: 0x%x, Address: %s\n",++i,
- ((DeviceData*)(current_device->data))-> name,
- ((DeviceData*)(current_device->data))-> class,
- ((DeviceData*)(current_device->data))-> address);
- current_device=g_list_next(current_device);
- }
- destroy_scan_window();
- if(config==1) {
- destroy_scan_window();
- results_ui();
- }
- // refresh_tree();
- }
-}
-
-
-
-static void discovery_completed(DBusGProxy *object, gpointer user_data)
-{
- g_print("Signal: DiscoveryCompleted()\n");
- discover_finish =2;
- print_results();
-}
-
-
-
-void discover_devices(void)
-{
- GError *error = NULL;
- // g_type_init();
- /* g_log_set_always_fatal (G_LOG_LEVEL_WARNING); */ /* too invasive */
- bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
- if (error != NULL)
- {
- g_printerr("Connecting to system bus failed: %s\n", error->message);
- g_error_free(error);
- return;
- }
- obj = dbus_g_proxy_new_for_name(bus, "org.bluez", "/org/bluez/hci0", "org.bluez.Adapter");
- printf("bluetooth plugin - start discovery \n");
- dbus_g_object_register_marshaller(marshal_VOID__STRING_UINT_INT, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID);
-
- dbus_g_proxy_add_signal(obj, "RemoteDeviceFound", G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(obj, "RemoteDeviceFound", G_CALLBACK(remote_device_found), bus, NULL);
-
- dbus_g_proxy_add_signal(obj, "DiscoveryStarted", G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(obj, "DiscoveryStarted", G_CALLBACK(discovery_started), bus, NULL);
-
- dbus_g_proxy_add_signal(obj, "DiscoveryCompleted", G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(obj, "DiscoveryCompleted", G_CALLBACK(discovery_completed), bus, NULL);
-
- dbus_g_object_register_marshaller(marshal_VOID__STRING_STRING, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-
- dbus_g_proxy_add_signal(obj, "RemoteNameUpdated", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(obj, "RemoteNameUpdated", G_CALLBACK(remote_name_updated), NULL, NULL);
-
- dbus_g_proxy_call(obj, "DiscoverDevices", &error, G_TYPE_INVALID, G_TYPE_INVALID);
- if (error != NULL)
- {
- g_printerr("Failed to discover devices: %s\n", error->message);
- g_error_free(error);
- }
-
-}
diff --git a/src/bluetooth/bluetooth.h b/src/bluetooth/bluetooth.h
deleted file mode 100644
index 29163ea..0000000
--- a/src/bluetooth/bluetooth.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include <config.h>
-#include <glib.h>
-#include <sys/types.h>
-#include <audacious/plugin.h>
-#include <audacious/ui_plugin_menu.h>
-#include <audacious/i18n.h>
-#include <gtk/gtk.h>
-#include <audacious/util.h>
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-#include <glib-object.h>
-#include <stdio.h>
-#include <audacious/configdb.h>
-#include <audacious/i18n.h>
-#include <audacious/util.h>
-#include "gui.h"
-typedef struct {
- guint class;
- gchar* address;
- gchar* name;
-}DeviceData;
-
-
-
-void refresh_call(void);
-void connect_call(void);
-void play_call(void);
-GList * audio_devices;
-gint discover_finish ;
-DBusGConnection * bus;
-DBusGProxy * obj;
-gchar *bonded_dev;
-GMutex *bonded_dev_mutex;
-
diff --git a/src/bluetooth/dbus-glue.h b/src/bluetooth/dbus-glue.h
deleted file mode 100644
index 02c382f..0000000
--- a/src/bluetooth/dbus-glue.h
+++ /dev/null
@@ -1,813 +0,0 @@
-/* Generated by dbus-binding-tool; do not edit! */
-
-#include <glib/gtypes.h>
-#include <glib/gerror.h>
-#include <dbus/dbus-glib.h>
-
-G_BEGIN_DECLS
-
-#ifndef DBUS_GLIB_CLIENT_WRAPPERS_manager
-#define DBUS_GLIB_CLIENT_WRAPPERS_manager
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-manager_default_adapter (DBusGProxy *proxy, char ** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "DefaultAdapter", error, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*manager_default_adapter_reply) (DBusGProxy *proxy, char * OUT_arg0, GError *error, gpointer userdata);
-
-static void
-manager_default_adapter_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg0, G_TYPE_INVALID);
- (*(manager_default_adapter_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-manager_default_adapter_async (DBusGProxy *proxy, manager_default_adapter_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "DefaultAdapter", manager_default_adapter_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-manager_find_adapter (DBusGProxy *proxy, const char * IN_pattern, char ** OUT_arg1, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "FindAdapter", error, G_TYPE_STRING, IN_pattern, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg1, G_TYPE_INVALID);
-}
-
-typedef void (*manager_find_adapter_reply) (DBusGProxy *proxy, char * OUT_arg1, GError *error, gpointer userdata);
-
-static void
-manager_find_adapter_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg1;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg1, G_TYPE_INVALID);
- (*(manager_find_adapter_reply)data->cb) (proxy, OUT_arg1, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-manager_find_adapter_async (DBusGProxy *proxy, const char * IN_pattern, manager_find_adapter_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "FindAdapter", manager_find_adapter_async_callback, stuff, g_free, G_TYPE_STRING, IN_pattern, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-manager_list_adapters (DBusGProxy *proxy, char *** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "ListAdapters", error, G_TYPE_INVALID, G_TYPE_STRV, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*manager_list_adapters_reply) (DBusGProxy *proxy, char * *OUT_arg0, GError *error, gpointer userdata);
-
-static void
-manager_list_adapters_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char ** OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRV, &OUT_arg0, G_TYPE_INVALID);
- (*(manager_list_adapters_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-manager_list_adapters_async (DBusGProxy *proxy, manager_list_adapters_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "ListAdapters", manager_list_adapters_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-#endif /* defined DBUS_GLIB_CLIENT_WRAPPERS_manager */
-
-#ifndef DBUS_GLIB_CLIENT_WRAPPERS_security
-#define DBUS_GLIB_CLIENT_WRAPPERS_security
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-security_register_default_passkey_agent (DBusGProxy *proxy, const char * IN_path, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "RegisterDefaultPasskeyAgent", error, G_TYPE_STRING, IN_path, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*security_register_default_passkey_agent_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-security_register_default_passkey_agent_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(security_register_default_passkey_agent_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-security_register_default_passkey_agent_async (DBusGProxy *proxy, const char * IN_path, security_register_default_passkey_agent_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "RegisterDefaultPasskeyAgent", security_register_default_passkey_agent_async_callback, stuff, g_free, G_TYPE_STRING, IN_path, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-security_unregister_default_passkey_agent (DBusGProxy *proxy, const char * IN_path, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "UnregisterDefaultPasskeyAgent", error, G_TYPE_STRING, IN_path, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*security_unregister_default_passkey_agent_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-security_unregister_default_passkey_agent_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(security_unregister_default_passkey_agent_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-security_unregister_default_passkey_agent_async (DBusGProxy *proxy, const char * IN_path, security_unregister_default_passkey_agent_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "UnregisterDefaultPasskeyAgent", security_unregister_default_passkey_agent_async_callback, stuff, g_free, G_TYPE_STRING, IN_path, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-security_register_passkey_agent (DBusGProxy *proxy, const char * IN_path, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "RegisterPasskeyAgent", error, G_TYPE_STRING, IN_path, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*security_register_passkey_agent_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-security_register_passkey_agent_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(security_register_passkey_agent_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-security_register_passkey_agent_async (DBusGProxy *proxy, const char * IN_path, const char * IN_address, security_register_passkey_agent_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "RegisterPasskeyAgent", security_register_passkey_agent_async_callback, stuff, g_free, G_TYPE_STRING, IN_path, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-security_unregister_passkey_agent (DBusGProxy *proxy, const char * IN_path, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "UnregisterPasskeyAgent", error, G_TYPE_STRING, IN_path, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*security_unregister_passkey_agent_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-security_unregister_passkey_agent_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(security_unregister_passkey_agent_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-security_unregister_passkey_agent_async (DBusGProxy *proxy, const char * IN_path, const char * IN_address, security_unregister_passkey_agent_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "UnregisterPasskeyAgent", security_unregister_passkey_agent_async_callback, stuff, g_free, G_TYPE_STRING, IN_path, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-#endif /* defined DBUS_GLIB_CLIENT_WRAPPERS_security */
-
-#ifndef DBUS_GLIB_CLIENT_WRAPPERS_adapter
-#define DBUS_GLIB_CLIENT_WRAPPERS_adapter
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_get_address (DBusGProxy *proxy, char ** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "GetAddress", error, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_get_address_reply) (DBusGProxy *proxy, char * OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_get_address_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_get_address_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_get_address_async (DBusGProxy *proxy, adapter_get_address_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "GetAddress", adapter_get_address_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_get_mode (DBusGProxy *proxy, char ** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "GetMode", error, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_get_mode_reply) (DBusGProxy *proxy, char * OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_get_mode_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_get_mode_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_get_mode_async (DBusGProxy *proxy, adapter_get_mode_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "GetMode", adapter_get_mode_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_get_name (DBusGProxy *proxy, char ** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "GetName", error, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_get_name_reply) (DBusGProxy *proxy, char * OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_get_name_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_get_name_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_get_name_async (DBusGProxy *proxy, adapter_get_name_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "GetName", adapter_get_name_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_get_major_class (DBusGProxy *proxy, char ** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "GetMajorClass", error, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_get_major_class_reply) (DBusGProxy *proxy, char * OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_get_major_class_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_get_major_class_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_get_major_class_async (DBusGProxy *proxy, adapter_get_major_class_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "GetMajorClass", adapter_get_major_class_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_get_minor_class (DBusGProxy *proxy, char ** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "GetMinorClass", error, G_TYPE_INVALID, G_TYPE_STRING, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_get_minor_class_reply) (DBusGProxy *proxy, char * OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_get_minor_class_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char * OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRING, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_get_minor_class_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_get_minor_class_async (DBusGProxy *proxy, adapter_get_minor_class_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "GetMinorClass", adapter_get_minor_class_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_list_remote_devices (DBusGProxy *proxy, char *** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "ListRemoteDevices", error, G_TYPE_INVALID, G_TYPE_STRV, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_list_remote_devices_reply) (DBusGProxy *proxy, char * *OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_list_remote_devices_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char ** OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRV, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_list_remote_devices_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_list_remote_devices_async (DBusGProxy *proxy, adapter_list_remote_devices_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "ListRemoteDevices", adapter_list_remote_devices_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_list_connections (DBusGProxy *proxy, char *** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "ListConnections", error, G_TYPE_INVALID, G_TYPE_STRV, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_list_connections_reply) (DBusGProxy *proxy, char * *OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_list_connections_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char ** OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRV, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_list_connections_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_list_connections_async (DBusGProxy *proxy, adapter_list_connections_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "ListConnections", adapter_list_connections_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_list_bondings (DBusGProxy *proxy, char *** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "ListBondings", error, G_TYPE_INVALID, G_TYPE_STRV, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_list_bondings_reply) (DBusGProxy *proxy, char * *OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_list_bondings_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char ** OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRV, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_list_bondings_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_list_bondings_async (DBusGProxy *proxy, adapter_list_bondings_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "ListBondings", adapter_list_bondings_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_list_trusts (DBusGProxy *proxy, char *** OUT_arg0, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "ListTrusts", error, G_TYPE_INVALID, G_TYPE_STRV, OUT_arg0, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_list_trusts_reply) (DBusGProxy *proxy, char * *OUT_arg0, GError *error, gpointer userdata);
-
-static void
-adapter_list_trusts_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- char ** OUT_arg0;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_STRV, &OUT_arg0, G_TYPE_INVALID);
- (*(adapter_list_trusts_reply)data->cb) (proxy, OUT_arg0, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_list_trusts_async (DBusGProxy *proxy, adapter_list_trusts_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "ListTrusts", adapter_list_trusts_async_callback, stuff, g_free, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_disconnect_remote_device (DBusGProxy *proxy, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "DisconnectRemoteDevice", error, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_disconnect_remote_device_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-adapter_disconnect_remote_device_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(adapter_disconnect_remote_device_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_disconnect_remote_device_async (DBusGProxy *proxy, const char * IN_address, adapter_disconnect_remote_device_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "DisconnectRemoteDevice", adapter_disconnect_remote_device_async_callback, stuff, g_free, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_create_bonding (DBusGProxy *proxy, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "CreateBonding", error, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_create_bonding_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-adapter_create_bonding_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(adapter_create_bonding_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_create_bonding_async (DBusGProxy *proxy, const char * IN_address, adapter_create_bonding_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "CreateBonding", adapter_create_bonding_async_callback, stuff, g_free, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_remove_bonding (DBusGProxy *proxy, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "RemoveBonding", error, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_remove_bonding_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-adapter_remove_bonding_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(adapter_remove_bonding_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_remove_bonding_async (DBusGProxy *proxy, const char * IN_address, adapter_remove_bonding_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "RemoveBonding", adapter_remove_bonding_async_callback, stuff, g_free, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_set_trusted (DBusGProxy *proxy, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "SetTrusted", error, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_set_trusted_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-adapter_set_trusted_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(adapter_set_trusted_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_set_trusted_async (DBusGProxy *proxy, const char * IN_address, adapter_set_trusted_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "SetTrusted", adapter_set_trusted_async_callback, stuff, g_free, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-gboolean
-adapter_remove_trust (DBusGProxy *proxy, const char * IN_address, GError **error)
-
-{
- return dbus_g_proxy_call (proxy, "RemoveTrust", error, G_TYPE_STRING, IN_address, G_TYPE_INVALID, G_TYPE_INVALID);
-}
-
-typedef void (*adapter_remove_trust_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
-
-static void
-adapter_remove_trust_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
-{
- DBusGAsyncData *data = (DBusGAsyncData*) user_data;
- GError *error = NULL;
- dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
- (*(adapter_remove_trust_reply)data->cb) (proxy, error, data->userdata);
- return;
-}
-
-static
-#ifdef G_HAVE_INLINE
-inline
-#endif
-DBusGProxyCall*
-adapter_remove_trust_async (DBusGProxy *proxy, const char * IN_address, adapter_remove_trust_reply callback, gpointer userdata)
-
-{
- DBusGAsyncData *stuff;
- stuff = g_new (DBusGAsyncData, 1);
- stuff->cb = G_CALLBACK (callback);
- stuff->userdata = userdata;
- return dbus_g_proxy_begin_call (proxy, "RemoveTrust", adapter_remove_trust_async_callback, stuff, g_free, G_TYPE_STRING, IN_address, G_TYPE_INVALID);
-}
-#endif /* defined DBUS_GLIB_CLIENT_WRAPPERS_adapter */
-
-G_END_DECLS
diff --git a/src/bluetooth/gui.c b/src/bluetooth/gui.c
deleted file mode 100644
index 64a1adc..0000000
--- a/src/bluetooth/gui.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include "gui.h"
-#include "bluetooth.h"
-
-static GtkWidget *window = NULL;
-static GtkTreeModel *model;
-static GtkWidget *mainbox;
-static GtkWidget *hbox_top;
-static GtkWidget *hbox_bottom;
-static GtkWidget *box_about;
-static GtkWidget *box_about_left;
-static GtkWidget *box_about_right;
-static GtkWidget *headset_frame;
-static GtkWidget *about_frame;
-static GtkWidget *refresh;
-static GtkWidget *connect_button;
-static GtkWidget *close_button;
-static GtkWidget *treeview;
-static GtkWidget *label_p;
-static GtkWidget *label_c;
-static GtkWidget *label_a;
-static GtkWidget *label_prod;
-static GtkWidget *label_class;
-static GtkWidget *label_address;
-static GList * dev = NULL;
-gchar *status = NULL;
-enum{
- COLUMN_PRODUCER,
- NUM_COLUMNS
-};
-
-static GtkTreeModel * create_model(void)
-{
- GtkListStore *store;
- GtkTreeIter iter;
- /* create list store */
- store = gtk_list_store_new(NUM_COLUMNS,
- G_TYPE_STRING);
- dev = audio_devices;
- if(dev == NULL) {
- /*if we are scanning for devices now then print the Scanning message,
- * else we print the "no devices found message */
- if(discover_finish == 1)
- /*we are scanning*/
- status = g_strdup_printf("Scanning");
- else
- status = g_strdup_printf("No devices found!");
- /* add the status to the list */
- gtk_list_store_append(store,&iter);
- gtk_list_store_set(store,&iter, COLUMN_PRODUCER,status,-1);
- return GTK_TREE_MODEL(store);
- }
- while(dev != NULL)
- {
- gtk_list_store_append(store,&iter);
- gtk_list_store_set(store,&iter, COLUMN_PRODUCER,
- ((DeviceData*)(dev->data))-> name,-1);
- dev = g_list_next(dev);
- }
-
- return GTK_TREE_MODEL(store);
-}
-static GtkTreeModel * rebuild_model(void)
-{
-
- GtkListStore *store;
- GtkTreeIter iter;
- gint dev_no=0;
- GList *dev;
- if(!window)
- return NULL;
- /* create list store */
- store = gtk_list_store_new(NUM_COLUMNS,
- G_TYPE_STRING);
-
- /*add inf to test_data from audio_devices */
- dev_no = g_list_length(audio_devices);
- dev = audio_devices;
- if(dev == NULL || discover_finish == 0) {
- /*if we are scanning for devices now then print the Scanning message,
- * else we print the "no devices found message */
- printf("discover: %d\n",discover_finish);
- if(discover_finish == 1) {
- /*we are scanning*/
- status = g_strdup_printf("Scanning");
- } else
- status = g_strdup_printf("No devices found!");
- /* add the status to the list */
- gtk_list_store_append(store,&iter);
- gtk_list_store_set(store,&iter, COLUMN_PRODUCER,status,-1);
- gtk_label_set_text(GTK_LABEL(label_prod),status);
- return GTK_TREE_MODEL(store);
- }
-
- /* add data to the list store */
- while(dev != NULL)
- {
- gtk_list_store_append(store,&iter);
- gtk_list_store_set(store,&iter, COLUMN_PRODUCER,
- ((DeviceData*)(dev->data))-> name,-1);
- dev = g_list_next(dev);
- }
- /*set the labels */
- /* temp = g_strdup_printf("0x%x",((DeviceData*)(dev->data))->class); */
- gtk_label_set_text(GTK_LABEL(label_prod),((DeviceData*)(dev->data))->name);
- /* gtk_label_set_text(GTK_LABEL(label_class),temp); */
- gtk_label_set_text(GTK_LABEL(label_address),((DeviceData*)(dev->data))->address);
- /* g_free(temp); */
- return GTK_TREE_MODEL(store);
-
-}
-
-
-void refresh_tree()
-{
- if(!window)
- return;
- model = rebuild_model();
- gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),GTK_TREE_MODEL(model));
-}
-
-
-static void add_columns(GtkTreeView *treeview)
-{
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- // GtkTreeModel *model = gtk_tree_view_get_model (treeview);
-
- /* column for producer */
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("Producer"),
- renderer,
- "text",
- COLUMN_PRODUCER,
- NULL);
- gtk_tree_view_column_set_sort_column_id (column,COLUMN_PRODUCER);
- gtk_tree_view_append_column (treeview, column);
-
-}
-
-void close_call(void){
- printf("close callback \n");
- gtk_widget_destroy (window);
- window = NULL;
-}
-void select_row(GtkWidget *treeview){
-
- GtkTreeIter iter;
- gint sel;
- gchar *temp;
- gint i;
- printf("select\n");
- GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview));
- if(gtk_tree_selection_get_selected (selection, NULL,&iter)){
- GtkTreePath *path;
- path = gtk_tree_model_get_path (model, &iter);
- sel = gtk_tree_path_get_indices (path)[0];
- printf("i=%d\n",sel);
- selected_dev = audio_devices;
- for(i=0;i<sel;i++)
- selected_dev = g_list_next(dev);
- if(dev != NULL) {
- temp = g_strdup_printf("0x%x",((DeviceData*)(selected_dev->data))->class);
- gtk_label_set_text(GTK_LABEL(label_prod),((DeviceData*)(selected_dev->data))->name);
- gtk_label_set_text(GTK_LABEL(label_class),temp);
- gtk_label_set_text(GTK_LABEL(label_address),((DeviceData*)(selected_dev->data))->address);
- gtk_tree_path_free (path);
- g_free(temp);
- }else
- gtk_label_set_text(GTK_LABEL(label_prod),status);
- g_free(status);
- gtk_widget_set_sensitive(connect_button,TRUE);
- }
-}
-
-void refresh_resultsui(){
- gtk_widget_destroy (window);
- window = NULL;
-selected_dev = NULL;
- refresh_call();
-}
-
-
-void results_ui()
-{
- gchar *temp;
- if (!window)
- {
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (window, "destroy",G_CALLBACK (gtk_widget_destroyed), &window);
-
- mainbox = gtk_vbox_new(FALSE,4);
- gtk_container_set_border_width (GTK_CONTAINER (mainbox), 4);
- gtk_container_add (GTK_CONTAINER (window), mainbox);
-
- hbox_top = gtk_hbox_new(FALSE,4);
- gtk_container_set_border_width (GTK_CONTAINER(hbox_top), 4);
- gtk_container_add (GTK_CONTAINER (mainbox), hbox_top);
-
- hbox_bottom = gtk_hbox_new(FALSE,4);
- gtk_container_set_border_width (GTK_CONTAINER (hbox_bottom), 4);
- gtk_container_add (GTK_CONTAINER (mainbox), hbox_bottom);
-
- headset_frame = gtk_frame_new(_("Available Headsets"));
- gtk_container_add (GTK_CONTAINER (hbox_top), headset_frame);
-
- about_frame = gtk_frame_new(_("Current Headset"));
- gtk_container_add(GTK_CONTAINER(hbox_top),about_frame);
-
- refresh = gtk_button_new_with_mnemonic (_("_Refresh"));
- g_signal_connect (refresh, "clicked",G_CALLBACK (refresh_resultsui), NULL);
- gtk_container_add(GTK_CONTAINER(hbox_bottom),refresh);
-
- connect_button = gtk_button_new_with_mnemonic(_("_Connect"));
- g_signal_connect(connect_button,"clicked",G_CALLBACK (connect_call), NULL);
- gtk_container_add(GTK_CONTAINER(hbox_bottom),connect_button);
- gtk_widget_set_sensitive(connect_button,FALSE);
-
-
- close_button = gtk_button_new_with_mnemonic(_("_Close"));
- g_signal_connect(close_button,"clicked",G_CALLBACK (close_call),NULL);
- gtk_container_add(GTK_CONTAINER(hbox_bottom),close_button);
- /* create tree model */
- model = create_model ();
-
- /* create tree view */
- treeview = gtk_tree_view_new_with_model (model);
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
- gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),GTK_SELECTION_SINGLE);
- g_object_unref (model);
- gtk_container_add (GTK_CONTAINER (headset_frame), treeview);
- /* add columns to the tree view */
- add_columns (GTK_TREE_VIEW (treeview));
-
- g_signal_connect(treeview,"cursor-changed",G_CALLBACK(select_row),treeview);
-
-
- box_about = gtk_hbox_new(FALSE,4);
- gtk_container_set_border_width (GTK_CONTAINER (box_about), 4);
- gtk_container_add (GTK_CONTAINER (about_frame), box_about);
-
- /*about box left - vbox */
-
- box_about_left = gtk_vbox_new(FALSE,4);
- gtk_container_set_border_width (GTK_CONTAINER (box_about_left), 4);
- gtk_container_add (GTK_CONTAINER (box_about), box_about_left);
-
- /*about box right - vbox */
- box_about_right = gtk_vbox_new(TRUE,4);
- gtk_container_set_border_width (GTK_CONTAINER (box_about_right), 4);
- gtk_container_add (GTK_CONTAINER (box_about), box_about_right);
-
- /* Left labels */
- label_p = gtk_label_new(_("Name:"));
- gtk_container_add(GTK_CONTAINER(box_about_left),label_p);
-
- label_c = gtk_label_new(_("Class"));
- gtk_container_add(GTK_CONTAINER(box_about_left),label_c);
-
-
- label_a = gtk_label_new(_("Address:"));
- gtk_container_add(GTK_CONTAINER(box_about_left),label_a);
-
-
- /*right labels */
- label_prod = gtk_label_new(" ");
- gtk_container_add(GTK_CONTAINER(box_about_right),label_prod);
-
- label_class = gtk_label_new(" ");
- gtk_container_add(GTK_CONTAINER(box_about_right),label_class);
-
-
- label_address = gtk_label_new(" ");
- gtk_container_add(GTK_CONTAINER(box_about_right),label_address);
-
- dev = audio_devices;
- if(dev != NULL) {
- temp = g_strdup_printf("0x%x",((DeviceData*)(dev->data))->class);
- gtk_label_set_text(GTK_LABEL(label_prod),((DeviceData*)(dev->data))->name);
- gtk_label_set_text(GTK_LABEL(label_class),temp);
- gtk_label_set_text(GTK_LABEL(label_address),((DeviceData*)(dev->data))->address);
- g_free(temp);
- }
-
- gtk_window_set_default_size (GTK_WINDOW (window), 460, 150);
- if (!GTK_WIDGET_VISIBLE (window))
- gtk_widget_show_all (window);
- else
- {
- gtk_widget_destroy (window);
- window = NULL;
- }
- // return window;
- }
- // return window;
-}
-
diff --git a/src/bluetooth/gui.h b/src/bluetooth/gui.h
deleted file mode 100644
index 53894bb..0000000
--- a/src/bluetooth/gui.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include <gtk/gtk.h>
-#include <glib.h>
-
-GList *selected_dev ;
-void refresh_tree(void);
-void results_ui();
-void close_call(void);
-
-
diff --git a/src/bluetooth/marshal.list b/src/bluetooth/marshal.list
deleted file mode 100644
index 247a13c..0000000
--- a/src/bluetooth/marshal.list
+++ /dev/null
@@ -1,2 +0,0 @@
-VOID:STRING,UINT,INT
-VOID:STRING,STRING
diff --git a/src/bluetooth/passkey-agent-glue.h b/src/bluetooth/passkey-agent-glue.h
deleted file mode 100644
index e6d5fad..0000000
--- a/src/bluetooth/passkey-agent-glue.h
+++ /dev/null
@@ -1,264 +0,0 @@
-/* Generated by dbus-binding-tool; do not edit! */
-
-
-#ifndef __dbus_glib_marshal_passkey_agent_MARSHAL_H__
-#define __dbus_glib_marshal_passkey_agent_MARSHAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v) g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v) g_value_get_int (v)
-#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-#define g_marshal_value_peek_long(v) g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-#define g_marshal_value_peek_float(v) g_value_get_float (v)
-#define g_marshal_value_peek_double(v) g_value_get_double (v)
-#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v) g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v) g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- * Do not access GValues directly in your code. Instead, use the
- * g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* BOOLEAN:STRING,STRING,POINTER (/tmp/dbus-binding-tool-c-marshallers.70BCEU:1) */
-extern void dbus_glib_marshal_passkey_agent_BOOLEAN__STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_passkey_agent_BOOLEAN__STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__STRING_STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gboolean v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_pointer (param_values + 3),
- data2);
-
- g_value_set_boolean (return_value, v_return);
-}
-
-/* NONE:STRING,STRING,POINTER (/tmp/dbus-binding-tool-c-marshallers.70BCEU:2) */
-extern void dbus_glib_marshal_passkey_agent_VOID__STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_passkey_agent_VOID__STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 4);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_pointer (param_values + 3),
- data2);
-}
-#define dbus_glib_marshal_passkey_agent_NONE__STRING_STRING_POINTER dbus_glib_marshal_passkey_agent_VOID__STRING_STRING_POINTER
-
-/* NONE:STRING,STRING,STRING,POINTER (/tmp/dbus-binding-tool-c-marshallers.70BCEU:3) */
-extern void dbus_glib_marshal_passkey_agent_VOID__STRING_STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_passkey_agent_VOID__STRING_STRING_STRING_POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING_POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer arg_3,
- gpointer arg_4,
- gpointer data2);
- register GMarshalFunc_VOID__STRING_STRING_STRING_POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
-
- g_return_if_fail (n_param_values == 5);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_VOID__STRING_STRING_STRING_POINTER) (marshal_data ? marshal_data : cc->callback);
-
- callback (data1,
- g_marshal_value_peek_string (param_values + 1),
- g_marshal_value_peek_string (param_values + 2),
- g_marshal_value_peek_string (param_values + 3),
- g_marshal_value_peek_pointer (param_values + 4),
- data2);
-}
-#define dbus_glib_marshal_passkey_agent_NONE__STRING_STRING_STRING_POINTER dbus_glib_marshal_passkey_agent_VOID__STRING_STRING_STRING_POINTER
-
-/* BOOLEAN:POINTER (/tmp/dbus-binding-tool-c-marshallers.70BCEU:4) */
-extern void dbus_glib_marshal_passkey_agent_BOOLEAN__POINTER (GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data);
-void
-dbus_glib_marshal_passkey_agent_BOOLEAN__POINTER (GClosure *closure,
- GValue *return_value G_GNUC_UNUSED,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint G_GNUC_UNUSED,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER) (gpointer data1,
- gpointer arg_1,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__POINTER callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
- gboolean v_return;
-
- g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 2);
-
- if (G_CCLOSURE_SWAP_DATA (closure))
- {
- data1 = closure->data;
- data2 = g_value_peek_pointer (param_values + 0);
- }
- else
- {
- data1 = g_value_peek_pointer (param_values + 0);
- data2 = closure->data;
- }
- callback = (GMarshalFunc_BOOLEAN__POINTER) (marshal_data ? marshal_data : cc->callback);
-
- v_return = callback (data1,
- g_marshal_value_peek_pointer (param_values + 1),
- data2);
-
- g_value_set_boolean (return_value, v_return);
-}
-
-G_END_DECLS
-
-#endif /* __dbus_glib_marshal_passkey_agent_MARSHAL_H__ */
-
-#include <dbus/dbus-glib.h>
-static const DBusGMethodInfo dbus_glib_passkey_agent_methods[] = {
- { (GCallback) passkey_agent_request, dbus_glib_marshal_passkey_agent_NONE__STRING_STRING_POINTER, 0 },
- { (GCallback) passkey_agent_confirm, dbus_glib_marshal_passkey_agent_NONE__STRING_STRING_STRING_POINTER, 68 },
- { (GCallback) passkey_agent_cancel, dbus_glib_marshal_passkey_agent_BOOLEAN__STRING_STRING_POINTER, 133 },
- { (GCallback) passkey_agent_release, dbus_glib_marshal_passkey_agent_BOOLEAN__POINTER, 187 },
-};
-
-const DBusGObjectInfo dbus_glib_passkey_agent_object_info = {
- 0,
- dbus_glib_passkey_agent_methods,
- 4,
-"org.bluez.PasskeyAgent\0Request\0A\0path\0I\0s\0address\0I\0s\0arg2\0O\0F\0N\0s\0\0org.bluez.PasskeyAgent\0Confirm\0A\0path\0I\0s\0address\0I\0s\0value\0I\0s\0\0org.bluez.PasskeyAgent\0Cancel\0S\0path\0I\0s\0address\0I\0s\0\0org.bluez.PasskeyAgent\0Release\0S\0\0\0",
-"\0",
-"\0"
-};
-
diff --git a/src/bluetooth/scan_gui.c b/src/bluetooth/scan_gui.c
deleted file mode 100644
index 9039631..0000000
--- a/src/bluetooth/scan_gui.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include "scan_gui.h"
-#include "bluetooth.h"
-#include "agent.h"
-static GtkWidget *window = NULL;
-static GtkWidget *winbox;
-static GtkWidget *scanbox;
-static GtkWidget *buttonsbox;
-static GtkWidget *progressbox;
-static GtkWidget *bluetooth_img;
-static GtkWidget *scan_label;
-static GtkWidget *progress_bar;
-static GtkWidget *rescan_buttton;
-static GtkWidget *close_button;
-static gint usage=0;
-void show_pairing_ok(void);
-gpointer progress()
-{
-
- for(;;){
- if(window){
- gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progress_bar));
- }
- sleep(1);
- if(usage == 0){
- if(discover_finish == 2 ) {
- if(window){
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar),1);
- gtk_widget_set_sensitive(rescan_buttton,TRUE);
- }
- return 0;
- }
- }else
- {
- if(bonding_finish == 1 ) {
- if(window){
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar),1);
- show_pairing_ok();
- gtk_widget_set_sensitive(rescan_buttton,TRUE);
-
- }
- return 0;
- }
- }
- }
- return 0;
-}
-
-void show_pairing_ok()
-{
- if(window ){
- gtk_label_set_text(GTK_LABEL(scan_label),_("Bonding finish!"));
- }
-}
-
-void show_no_devices()
-{
- if(window ){
- gtk_label_set_text(GTK_LABEL(scan_label),_("No devices found!"));
- }
-}
-void destroy_scan_window()
-{
- gtk_widget_hide(window);
-}
-void close_window(void)
-{
- printf("scan_gui close callback \n");
- gtk_widget_destroy (window);
- window = NULL;
-}
-void show_scan(gint use)
-{
- GThread *th1;
- gchar *filename;
- usage = use;
- /*
- * 0 - discovery
- * 1 - pairing
- */
- if (!window)
- {
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- g_signal_connect (window, "destroy",G_CALLBACK (gtk_widget_destroyed), &window);
-
- winbox = gtk_vbox_new(FALSE,2);
- gtk_container_set_border_width (GTK_CONTAINER (winbox), 2);
- gtk_container_add (GTK_CONTAINER (window), winbox);
-
- scanbox = gtk_hbox_new(FALSE,2);
- gtk_container_set_border_width(GTK_CONTAINER(scanbox),2);
- gtk_container_add(GTK_CONTAINER(winbox),scanbox);
-
- progressbox = gtk_vbox_new(FALSE,2);
- gtk_container_set_border_width(GTK_CONTAINER(progressbox),4);
- gtk_container_add(GTK_CONTAINER(winbox),progressbox);
- filename = DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "blue.png";
- bluetooth_img = gtk_image_new_from_file(filename);
- gtk_image_set_pixel_size(GTK_IMAGE(bluetooth_img),-1);
- gtk_container_add(GTK_CONTAINER(scanbox),bluetooth_img);
- if(usage == 0){
- scan_label = gtk_label_new_with_mnemonic(_("Scanning..."));
- }else
- {
- scan_label = gtk_label_new_with_mnemonic(_("Pairing..."));
- }
-
- gtk_container_add(GTK_CONTAINER(scanbox),scan_label);
-
- progress_bar = gtk_progress_bar_new();
- gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progress_bar));
- gtk_container_add(GTK_CONTAINER(progressbox),progress_bar);
- th1 = g_thread_create((GThreadFunc)progress, NULL,TRUE,NULL);
- buttonsbox = gtk_hbox_new(FALSE,2);
- gtk_container_set_border_width(GTK_CONTAINER(buttonsbox),2);
- gtk_container_add(GTK_CONTAINER(progressbox),buttonsbox);
- /* I have to modify the rescan button with a play one
- * and treat the case when the bounding is not ok
- */
- if(usage == 0){
- rescan_buttton = gtk_button_new_with_mnemonic(_("Rescan"));
- g_signal_connect(rescan_buttton,"clicked",G_CALLBACK (refresh_call),NULL);
- gtk_widget_set_sensitive(rescan_buttton,FALSE);
- }else{
- rescan_buttton = gtk_button_new_with_mnemonic(_("Play"));
- g_signal_connect(rescan_buttton,"clicked",G_CALLBACK (play_call),NULL);
- gtk_widget_set_sensitive(rescan_buttton,FALSE);
- }
-
-
-
- close_button = gtk_button_new_with_mnemonic(_("Close"));
- gtk_container_add(GTK_CONTAINER(buttonsbox),rescan_buttton);
- gtk_container_add(GTK_CONTAINER(buttonsbox),close_button);
- g_signal_connect(close_button,"clicked",G_CALLBACK (close_window),NULL);
-
- gtk_window_set_default_size (GTK_WINDOW (window), 60, 40);
- gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
- if (!GTK_WIDGET_VISIBLE (window))
- gtk_widget_show_all (window);
- else
- {
- gtk_widget_destroy (window);
- g_free(filename);
- window = NULL;
- }
-
- }
-
-}
diff --git a/src/bluetooth/scan_gui.h b/src/bluetooth/scan_gui.h
deleted file mode 100644
index 8c11b9c..0000000
--- a/src/bluetooth/scan_gui.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Audacious Bluetooth headset suport plugin
- *
- * Copyright (c) 2008 Paula Stanciu paula.stanciu@gmail.com
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <alsa/asoundlib.h>
-#include <alsa/pcm_plugin.h>
-#include <audacious/plugin.h>
-#include <audacious/i18n.h>
-
-
-void show_scan(gint use);
-void show_no_devices();
-void destroy_scan_window();
-void close_window();
diff --git a/src/blur_scope/Makefile b/src/blur_scope/Makefile
index 1728a9d..8e78b1e 100644
--- a/src/blur_scope/Makefile
+++ b/src/blur_scope/Makefile
@@ -9,5 +9,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += -std=c99 ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} -I../..
+LIBS += ${GTK_LIBS}
diff --git a/src/blur_scope/blur_scope.c b/src/blur_scope/blur_scope.c
index 0f6c233..b288d48 100644
--- a/src/blur_scope/blur_scope.c
+++ b/src/blur_scope/blur_scope.c
@@ -1,4 +1,8 @@
-/* BMP - Cross-platform multimedia player
+/*
+ * Blur Scope plugin for Audacious
+ * Copyright (C) 2010-2011 John Lindgren
+ *
+ * Based on BMP - Cross-platform multimedia player:
* Copyright (C) 2003-2004 BMP development team.
*
* Based on XMMS:
@@ -19,242 +23,182 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include "config.h"
-
-#include <glib.h>
#include <gtk/gtk.h>
#include <string.h>
-#include <audacious/configdb.h>
-#include <audacious/i18n.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include "blur_scope.h"
-static GtkWidget *area = NULL;
-static gboolean config_read = FALSE;
+#define D_WIDTH 64
+#define D_HEIGHT 32
-static void bscope_init(void);
+static gboolean bscope_init (void);
static void bscope_cleanup(void);
-static void bscope_playback_stop(void);
-static void bscope_render_pcm(gint16 data[2][512]);
-/* static GtkWidget * bscope_get_widget (void); */
-static void * bscope_get_widget (void);
-
-BlurScopeConfig bscope_cfg;
+static void bscope_clear (void);
+static void bscope_render (const gfloat * data);
+static void /* GtkWidget */ * bscope_get_widget (void);
-enum { SCOPE_TOGGLE, SCOPE_CLOSE };
-
-VisPlugin bscope_vp = {
- .description = "Blur Scope", /* description */
- .num_pcm_chs_wanted = 1, /* Number of PCM channels wanted */
- .num_freq_chs_wanted = 0, /* Number of freq channels wanted */
+AUD_VIS_PLUGIN
+(
+ .name = "Blur Scope", /* description */
.init = bscope_init, /* init */
.cleanup = bscope_cleanup, /* cleanup */
.configure = bscope_configure, /* configure */
- .playback_stop = bscope_playback_stop, /* playback_stop */
- .render_pcm = bscope_render_pcm, /* render_pcm */
+ .clear = bscope_clear,
+ .render_mono_pcm = bscope_render,
.get_widget = bscope_get_widget,
-};
-
-VisPlugin *bscope_vplist[] = { &bscope_vp, NULL };
+)
-DECLARE_PLUGIN(bscope, NULL, NULL, NULL, NULL, NULL, NULL, bscope_vplist,NULL);
+static GtkWidget * area = NULL;
+static gint width, height, stride, image_size;
+static guint32 * image = NULL, * corner = NULL;
-#define D_WIDTH 256
-#define D_HEIGHT 128
-#define min(x,y) ((x)<(y)?(x):(y))
-gint width = D_WIDTH;
-gint height = D_HEIGHT;
-gint bpl = (D_WIDTH + 2);
+static const gchar * const bscope_defaults[] = {
+ "color", "16727935", /* 0xFF3F7F */
+ NULL};
-static GStaticMutex rgb_buf_mutex = G_STATIC_MUTEX_INIT;
-static guchar *rgb_buf = NULL;
-static GdkRgbCmap *cmap = NULL;
+gint color;
-inline static void
-draw_pixel_8(guchar * buffer, gint x, gint y, guchar c)
+static gboolean bscope_init (void)
{
- if (buffer == NULL)
- return;
+ aud_config_set_defaults ("BlurScope", bscope_defaults);
+ color = aud_get_int ("BlurScope", "color");
- buffer[((y + 1) * bpl) + (x + 1)] = c;
+ return TRUE;
}
-inline static void
-bscope_resize_video(gint w, gint h)
+static void bscope_cleanup (void)
{
- g_static_mutex_lock(&rgb_buf_mutex);
-
- width = w;
- height = h;
- bpl = (width + 2);
-
- if (rgb_buf != NULL) {
- g_free(rgb_buf);
- rgb_buf = NULL;
- }
+ aud_set_int ("BlurScope", "color", color);
- rgb_buf = g_malloc0((w + 2) * (h + 2));
-
- g_static_mutex_unlock(&rgb_buf_mutex);
+ g_free (image);
+ image = NULL;
}
-gboolean
-bscope_reconfigure(GtkWidget *widget, GdkEventConfigure *event, gpointer unused)
+static void bscope_resize (gint w, gint h)
{
- bscope_resize_video(event->width, event->height);
-
- return FALSE;
+ width = w;
+ height = h;
+ stride = width + 2;
+ image_size = (stride << 2) * (height + 2);
+ image = g_realloc (image, image_size);
+ memset (image, 0, image_size);
+ corner = image + stride + 1;
}
-void
-bscope_read_config(void)
+static void bscope_draw_to_cairo (cairo_t * cr)
{
- mcs_handle_t *db;
-
- if (!config_read) {
- bscope_cfg.color = 0xFF3F7F;
- db = aud_cfg_db_open();
-
- if (db) {
- aud_cfg_db_get_int(db, "BlurScope", "color",
- (int *) &bscope_cfg.color);
- aud_cfg_db_close(db);
- }
- config_read = TRUE;
- }
+ cairo_surface_t * surf = cairo_image_surface_create_for_data ((guchar *)
+ image, CAIRO_FORMAT_RGB24, width, height, stride << 2);
+ cairo_set_source_surface (cr, surf, 0, 0);
+ cairo_paint (cr);
+ cairo_surface_destroy (surf);
}
-
-void
-bscope_blur_8(guchar * ptr, gint w, gint h, gint bpl_)
+static void bscope_draw (void)
{
- register guint i, sum;
- register guchar *iptr;
-
- iptr = ptr + bpl_ + 1;
- i = bpl_ * h;
- while (i--) {
- sum = (iptr[-bpl_] + iptr[-1] + iptr[1] + iptr[bpl_]) >> 2;
- if (sum > 2)
- sum -= 2;
- *(iptr++) = sum;
- }
-}
+ if (! area || ! gtk_widget_get_window (area))
+ return;
-void
-generate_cmap(void)
-{
- guint32 colors[256], i, red, blue, green;
-
- red = (guint32) (bscope_cfg.color / 0x10000);
- green = (guint32) ((bscope_cfg.color % 0x10000) / 0x100);
- blue = (guint32) (bscope_cfg.color % 0x100);
- for (i = 255; i > 0; i--) {
- colors[i] =
- (((guint32) (i * red / 256) << 16) |
- ((guint32) (i * green / 256) << 8) |
- ((guint32) (i * blue / 256)));
- }
- colors[0] = 0;
- if (cmap) {
- gdk_rgb_cmap_free(cmap);
- }
- cmap = gdk_rgb_cmap_new(colors, 256);
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (area));
+ bscope_draw_to_cairo (cr);
+ cairo_destroy (cr);
}
-static void
-bscope_init(void)
+static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event)
{
- bscope_read_config();
- generate_cmap();
+ bscope_resize (event->width, event->height);
+ return TRUE;
}
-static gboolean bscope_draw (void)
+#if GTK_CHECK_VERSION (3, 0, 0)
+static gboolean draw_cb (GtkWidget * widget, cairo_t * cr)
{
- if (area == NULL || area->window == NULL)
- return TRUE;
-
- gdk_draw_indexed_image (area->window, area->style->white_gc, 0, 0, width,
- height, GDK_RGB_DITHER_NONE, rgb_buf + bpl + 1, width + 2, cmap);
+ bscope_draw_to_cairo (cr);
return TRUE;
}
-
-/* static GtkWidget * bscope_get_widget (void) */
-static void * bscope_get_widget (void)
+#else
+static gboolean expose_event (GtkWidget * widget)
{
- if (area == NULL)
- {
- area = gtk_drawing_area_new ();
- gtk_widget_set_size_request (area, D_WIDTH, D_HEIGHT);
- bscope_resize_video (D_WIDTH, D_HEIGHT);
-
- g_signal_connect (area, "expose-event", (GCallback) bscope_draw, NULL);
- g_signal_connect (area, "configure-event", (GCallback)
- bscope_reconfigure, NULL);
- g_signal_connect (area, "destroy", (GCallback) gtk_widget_destroyed,
- & area);
- }
-
- return area;
+ bscope_draw ();
+ return TRUE;
}
+#endif
-static void
-bscope_cleanup(void)
+static void /* GtkWidget */ * bscope_get_widget (void)
{
- if (cmap) {
- gdk_rgb_cmap_free(cmap);
- cmap = NULL;
- }
+ area = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (area, D_WIDTH, D_HEIGHT);
+ bscope_resize (D_WIDTH, D_HEIGHT);
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+ g_signal_connect (area, "draw", (GCallback) draw_cb, NULL);
+#else
+ g_signal_connect (area, "expose-event", (GCallback) expose_event, NULL);
+#endif
+ g_signal_connect (area, "configure-event", (GCallback) configure_event, NULL);
+ g_signal_connect (area, "destroy", (GCallback) gtk_widget_destroyed, & area);
- area = NULL;
+ return area;
}
-static void
-bscope_playback_stop(void)
+static void bscope_clear (void)
{
- g_return_if_fail (rgb_buf != NULL);
- memset (rgb_buf, 0, (width + 2) * (height + 2));
+ g_return_if_fail (image != NULL);
+ memset (image, 0, image_size);
bscope_draw ();
}
-static inline void
-draw_vert_line(guchar * buffer, gint x, gint y1, gint y2)
+static void bscope_blur (void)
{
- int y;
- if (y1 < y2) {
- for (y = y1 + 1; y <= y2; y++)
- draw_pixel_8(buffer, x, y, 0xFF);
- }
- else if (y2 < y1) {
- for (y = y2; y < y1; y++)
- draw_pixel_8(buffer, x, y, 0xFF);
+ for (gint y = 0; y < height; y ++)
+ {
+ guint32 * p = corner + stride * y;
+ guint32 * end = p + width;
+ guint32 * plast = p - stride;
+ guint32 * pnext = p + stride;
+
+ /* We do a quick and dirty average of four color values, first masking
+ * off the lowest two bits. Over a large area, this masking has the net
+ * effect of subtracting 1.5 from each value, which by a happy chance
+ * is just right for a gradual fade effect. */
+ for (; p < end; p ++)
+ * p = ((* plast ++ & 0xFCFCFC) + (p[-1] & 0xFCFCFC) + (p[1] &
+ 0xFCFCFC) + (* pnext ++ & 0xFCFCFC)) >> 2;
}
- else
- draw_pixel_8(buffer, x, y1, 0xFF);
}
-static void
-bscope_render_pcm(gint16 data[2][512])
+static inline void draw_vert_line (gint x, guint y1, gint y2)
{
- gint i, y, prev_y;
+ gint y, h;
+
+ if (y1 < y2) {y = y1 + 1; h = y2 - y1;}
+ else if (y2 < y1) {y = y2; h = y1 - y2;}
+ else {y = y1; h = 1;}
- g_static_mutex_lock(&rgb_buf_mutex);
+ guint32 * p = corner + y * stride + x;
- bscope_blur_8(rgb_buf, width, height, bpl);
- prev_y = (height / 2) + (data[0][0] >> 9);
+ for (; h --; p += stride)
+ * p = color;
+}
+
+static void bscope_render (const gfloat * data)
+{
+ bscope_blur ();
+
+ gint prev_y = (0.5 + data[0]) * height;
prev_y = CLAMP (prev_y, 0, height - 1);
- for (i = 0; i < width; i++) {
- y = (height / 2) + (data[0][i * 512 / width] >> 9);
+
+ for (gint i = 0; i < width; i ++)
+ {
+ gint y = (0.5 + data[i * 512 / width]) * height;
y = CLAMP (y, 0, height - 1);
- draw_vert_line(rgb_buf, i, prev_y, y);
+ draw_vert_line (i, prev_y, y);
prev_y = y;
}
bscope_draw ();
-
- g_static_mutex_unlock(&rgb_buf_mutex);
-
- return;
}
diff --git a/src/blur_scope/blur_scope.h b/src/blur_scope/blur_scope.h
index 238976c..cc09deb 100644
--- a/src/blur_scope/blur_scope.h
+++ b/src/blur_scope/blur_scope.h
@@ -1,15 +1,33 @@
+/*
+ * Blur Scope plugin for Audacious
+ * Copyright (C) 2010 John Lindgren
+ *
+ * Based on BMP - Cross-platform multimedia player:
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
#ifndef BLUR_SCOPE_H
#define BLUR_SCOPE_H
void bscope_configure(void);
-void bscope_read_config(void);
-
-typedef struct {
- guint32 color;
-} BlurScopeConfig;
-
-extern BlurScopeConfig bscope_cfg;
-void generate_cmap(void);
+extern gint color;
#endif
diff --git a/src/blur_scope/config.c b/src/blur_scope/config.c
index 229fff1..b22d87b 100644
--- a/src/blur_scope/config.c
+++ b/src/blur_scope/config.c
@@ -1,14 +1,35 @@
-#include "config.h"
+/*
+ * Blur Scope plugin for Audacious
+ * Copyright (C) 2010-2011 John Lindgren
+ *
+ * Based on BMP - Cross-platform multimedia player:
+ * Copyright (C) 2003-2004 BMP development team.
+ *
+ * Based on XMMS:
+ * Copyright (C) 1998-2003 XMMS development team.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
-#include <glib.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
-#include <audacious/plugin.h>
#include "blur_scope.h"
-
+#include "config.h"
static GtkWidget *configure_win = NULL;
static GtkWidget *vbox, *options_frame, *options_vbox;
@@ -18,39 +39,24 @@ static GtkWidget *bbox, *ok, *cancel;
static void
configure_ok(GtkWidget * w, gpointer data)
{
- mcs_handle_t *db;
- gdouble color[3];
-
- gtk_color_selection_get_color(GTK_COLOR_SELECTION(options_colorpicker),
- color);
- bscope_cfg.color =
- ((guint32) (255.0 * color[0]) << 16) |
- ((guint32) (255.0 * color[1]) << 8) | ((guint32) (255.0 * color[2]));
- db = aud_cfg_db_open();
- aud_cfg_db_set_int(db, "BlurScope", "color", bscope_cfg.color);
- aud_cfg_db_close(db);
- generate_cmap();
gtk_widget_destroy(configure_win);
}
static void
configure_cancel(GtkWidget * w, gpointer data)
{
- bscope_cfg.color = GPOINTER_TO_UINT(data);
- generate_cmap();
+ color = GPOINTER_TO_UINT(data);
gtk_widget_destroy(configure_win);
}
static void
color_changed(GtkWidget * w, gpointer data)
{
- gdouble color[3];
- gtk_color_selection_get_color(GTK_COLOR_SELECTION(options_colorpicker),
- color);
- bscope_cfg.color =
- ((guint32) (255.0 * color[0]) << 16) |
- ((guint32) (255.0 * color[1]) << 8) | ((guint32) (255.0 * color[2]));
- generate_cmap();
+ GdkColor c;
+ gtk_color_selection_get_current_color ((GtkColorSelection *)
+ options_colorpicker, & c);
+ color = (((guint32) c.red << 8) & 0xff0000) | ((guint32) c.green & 0xff00) |
+ ((guint32) c.blue >> 8);
}
void
@@ -58,15 +64,9 @@ bscope_configure(void)
{
/* FIXME: convert to GtkColorSelectionDialog */
- gdouble color[3];
if (configure_win)
return;
- bscope_read_config();
- color[0] = ((gdouble) (bscope_cfg.color / 0x10000)) / 256;
- color[1] = ((gdouble) ((bscope_cfg.color % 0x10000) / 0x100)) / 256;
- color[2] = ((gdouble) (bscope_cfg.color % 0x100)) / 256;
-
configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width(GTK_CONTAINER(configure_win), 10);
gtk_window_set_title(GTK_WINDOW(configure_win),
@@ -87,8 +87,12 @@ bscope_configure(void)
gtk_container_set_border_width(GTK_CONTAINER(options_vbox), 5);
options_colorpicker = gtk_color_selection_new();
- gtk_color_selection_set_color(GTK_COLOR_SELECTION(options_colorpicker),
- color);
+
+ GdkColor c = {.red = (color & 0xff0000) >> 8, .green = color & 0xff00, .blue
+ = (color & 0xff) << 8};
+ gtk_color_selection_set_current_color ((GtkColorSelection *)
+ options_colorpicker, & c);
+
g_signal_connect(G_OBJECT(options_colorpicker), "color_changed",
G_CALLBACK(color_changed), NULL);
@@ -105,20 +109,19 @@ bscope_configure(void)
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
g_signal_connect(G_OBJECT(cancel), "clicked",
G_CALLBACK(configure_cancel),
- GUINT_TO_POINTER(bscope_cfg.color));
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+ GUINT_TO_POINTER(color));
+ gtk_widget_set_can_default (cancel, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
gtk_widget_show(cancel);
ok = gtk_button_new_from_stock(GTK_STOCK_OK);
g_signal_connect(G_OBJECT(ok), "clicked", G_CALLBACK(configure_ok), NULL);
- GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (ok, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
gtk_widget_show(ok);
diff --git a/src/bs2b/Makefile b/src/bs2b/Makefile
index 79b1826..4120498 100644
--- a/src/bs2b/Makefile
+++ b/src/bs2b/Makefile
@@ -8,6 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CXXFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${BS2B_CFLAGS}
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS} ${BS2B_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${BS2B_CFLAGS}-I../..
+LIBS += ${GTK_LIBS} ${BS2B_LIBS}
diff --git a/src/bs2b/plugin.c b/src/bs2b/plugin.c
index 5cd6937..4a0234d 100644
--- a/src/bs2b/plugin.c
+++ b/src/bs2b/plugin.c
@@ -3,6 +3,7 @@
* Copyright (C) 2009, Sebastian Pipping <sebastian@pipping.org>
* Copyright (C) 2009, Tony Vroon <chainsaw@gentoo.org>
* Copyright (C) 2010, John Lindgren <john.lindgren@tds.net>
+ * Copyright (C) 2011, Michał Lipski <tallica@o2.pl>
*
* 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
@@ -18,25 +19,47 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <audacious/gtk-compat.h>
#include <audacious/plugin.h>
+#include <audacious/i18n.h>
+#include <libaudgui/libaudgui.h>
+#include <libaudgui/libaudgui-gtk.h>
+#include <audacious/misc.h>
#include <bs2b.h>
-#define AB_EFFECT_LEVEL BS2B_DEFAULT_CLEVEL
static t_bs2bdp bs2b = NULL;
static gint bs2b_channels;
+static GtkWidget *config_window, *feed_slider, *fcut_slider;
+static const gchar * const bs2b_defaults[] = {
+ "feed", "45",
+ "fcut", "700",
+ NULL};
+
+#define feed_level aud_get_int("bs2b", "feed")
+#define fcut_level aud_get_int("bs2b", "fcut")
-void init() {
+gboolean init()
+{
+ aud_config_set_defaults("bs2b", bs2b_defaults);
bs2b = bs2b_open();
- if (bs2b == NULL) {
- return;
- }
- bs2b_set_level(bs2b, AB_EFFECT_LEVEL);
+
+ if (bs2b == NULL)
+ return FALSE;
+
+ bs2b_set_level_feed(bs2b, feed_level);
+ bs2b_set_level_fcut(bs2b, fcut_level);
+
+ return TRUE;
}
-static void cleanup() {
- if (bs2b == NULL) {
+static void cleanup()
+{
+ if (bs2b == NULL)
return;
- }
+
bs2b_close(bs2b);
bs2b = NULL;
}
@@ -81,10 +104,130 @@ static gint bs2b_output_to_decoder_time (gint time)
return time;
}
-static EffectPlugin audaciousBs2b = {
- .description = "Bauer stereophonic-to-binaural 1.1",
+static void feed_value_changed(GtkRange *range, gpointer data)
+{
+ aud_set_int("bs2b", "feed", gtk_range_get_value(range));
+ bs2b_set_level_feed(bs2b, feed_level);
+}
+
+static gchar *feed_format_value(GtkScale *scale, gdouble value)
+{
+ return g_strdup_printf("%.1f dB", (float) value / 10);
+}
+
+static void fcut_value_changed(GtkRange *range, gpointer data)
+{
+ aud_set_int("bs2b", "fcut", gtk_range_get_value(range));
+ bs2b_set_level_fcut(bs2b, fcut_level);
+}
+
+static gchar *fcut_format_value(GtkScale *scale, gdouble value)
+{
+ return g_strdup_printf("%d Hz, %dµs", (int) value, bs2b_level_delay((int) value));
+}
+
+static void preset_button_clicked(GtkButton *button, gpointer data)
+{
+ gint clevel = GPOINTER_TO_INT(data);
+ gtk_range_set_value(GTK_RANGE(feed_slider), clevel >> 16);
+ gtk_range_set_value(GTK_RANGE(fcut_slider), clevel & 0xffff);
+}
+
+static GtkWidget *preset_button(const gchar *label, gint clevel)
+{
+ GtkWidget *button = gtk_button_new_with_label(label);
+ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ g_signal_connect(button, "clicked", (GCallback)
+ preset_button_clicked, GINT_TO_POINTER(clevel));
+
+ return button;
+}
+
+static void configure (void)
+{
+ if (config_window == NULL)
+ {
+ GtkWidget *vbox, *hbox, *button;
+
+ config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint ((GtkWindow *) config_window,
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable ((GtkWindow *) config_window, FALSE);
+ gtk_window_set_title ((GtkWindow *) config_window,
+ _("Bauer stereophonic-to-binaural Preferences"));
+ gtk_container_set_border_width ((GtkContainer *) config_window, 6);
+ g_signal_connect (config_window, "destroy", (GCallback)
+ gtk_widget_destroyed, & config_window);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add ((GtkContainer *) config_window, vbox);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Feed level:")), TRUE, FALSE, 0);
+
+ feed_slider = gtk_hscale_new_with_range(BS2B_MINFEED, BS2B_MAXFEED, 1.0);
+ gtk_range_set_value (GTK_RANGE(feed_slider), feed_level);
+ gtk_widget_set_size_request (feed_slider, 200, -1);
+ gtk_box_pack_start ((GtkBox *) hbox, feed_slider, FALSE, FALSE, 0);
+ g_signal_connect (feed_slider, "value-changed", (GCallback) feed_value_changed,
+ NULL);
+ g_signal_connect (feed_slider, "format-value", (GCallback) feed_format_value,
+ NULL);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX(hbox), gtk_label_new(_("Cut frequency:")), TRUE, FALSE, 0);
+
+ fcut_slider = gtk_hscale_new_with_range(BS2B_MINFCUT, BS2B_MAXFCUT, 1.0);
+ gtk_range_set_value (GTK_RANGE(fcut_slider), fcut_level);
+ gtk_widget_set_size_request (fcut_slider, 200, -1);
+ gtk_box_pack_start ((GtkBox *) hbox, fcut_slider, FALSE, FALSE, 0);
+ g_signal_connect (fcut_slider, "value-changed", (GCallback) fcut_value_changed,
+ NULL);
+ g_signal_connect (fcut_slider, "format-value", (GCallback) fcut_format_value,
+ NULL);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
+
+ gtk_box_pack_start ((GtkBox *) hbox, gtk_label_new(_("Presets:")), TRUE, FALSE, 0);
+
+ button = preset_button(_("Default"), BS2B_DEFAULT_CLEVEL);
+ gtk_box_pack_start ((GtkBox *) hbox, button, TRUE, FALSE, 0);
+
+ button = preset_button("C. Moy", BS2B_CMOY_CLEVEL);
+ gtk_box_pack_start ((GtkBox *) hbox, button, TRUE, FALSE, 0);
+
+ button = preset_button("J. Meier", BS2B_JMEIER_CLEVEL);
+ gtk_box_pack_start ((GtkBox *) hbox, button, TRUE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
+
+ button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+ gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0);
+ gtk_widget_set_can_default (button, TRUE);
+ gtk_widget_grab_default (button);
+ g_signal_connect_swapped (button, "clicked", (GCallback)
+ gtk_widget_destroy, config_window);
+
+ audgui_destroy_on_escape (config_window);
+
+ gtk_widget_show_all (vbox);
+ }
+
+ gtk_window_present ((GtkWindow *) config_window);
+}
+
+AUD_EFFECT_PLUGIN
+(
+ .name = "Bauer stereophonic-to-binaural",
.init = init,
.cleanup = cleanup,
+ .configure = configure,
.start = bs2b_start,
.process = bs2b_process,
.flush = bs2b_flush,
@@ -92,7 +235,4 @@ static EffectPlugin audaciousBs2b = {
.decoder_to_output_time = bs2b_decoder_to_output_time,
.output_to_decoder_time = bs2b_output_to_decoder_time,
.preserves_format = TRUE,
-};
-
-static EffectPlugin * plugins[] = { &audaciousBs2b, NULL };
-SIMPLE_EFFECT_PLUGIN(audaciousBs2b, plugins);
+)
diff --git a/src/cairo-spectrum/Makefile b/src/cairo-spectrum/Makefile
new file mode 100644
index 0000000..42aa591
--- /dev/null
+++ b/src/cairo-spectrum/Makefile
@@ -0,0 +1,12 @@
+PLUGIN = cairo-spectrum${PLUGIN_SUFFIX}
+
+SRCS = cairo-spectrum.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
+
+CFLAGS += ${PLUGIN_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} -I../.. ${GTK_CFLAGS}
+LIBS += -lm ${GTK_LIBS}
diff --git a/src/cairo-spectrum/cairo-spectrum.c b/src/cairo-spectrum/cairo-spectrum.c
new file mode 100644
index 0000000..bee2abb
--- /dev/null
+++ b/src/cairo-spectrum/cairo-spectrum.c
@@ -0,0 +1,293 @@
+/*
+ * Copyright (c) 2011 William Pitcock <nenolod@dereferenced.org>.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <audacious/plugin.h>
+#include <gtk/gtk.h>
+
+#include <audacious/debug.h>
+#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
+#include <audacious/playlist.h>
+#include <libaudcore/hook.h>
+#include <libaudgui/libaudgui.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+#include <math.h>
+
+#define MAX_BANDS (256)
+#define VIS_DELAY 2 /* delay before falloff in frames */
+#define VIS_FALLOFF 2 /* falloff in pixels per frame */
+
+static GtkWidget * spect_widget = NULL;
+static gfloat xscale[MAX_BANDS + 1];
+static gint width, height, bands;
+static gint bars[MAX_BANDS + 1];
+static gint delay[MAX_BANDS + 1];
+
+static void calculate_bands(gint bands_)
+{
+ gint i;
+
+ for (i = 0; i < bands_; i++)
+ xscale[i] = powf(257., ((gfloat) i / (gfloat) bands_)) - 1;
+}
+
+static void render_cb (gfloat * freq)
+{
+ g_return_if_fail (spect_widget);
+
+ calculate_bands(bands);
+
+ for (gint i = 0; i < bands; i ++)
+ {
+ gint a = ceil (xscale[i]);
+ gint b = floor (xscale[i + 1]);
+ gfloat n = 0;
+
+ if (b < a)
+ n += freq[b] * (xscale[i + 1] - xscale[i]);
+ else
+ {
+ if (a > 0)
+ n += freq[a - 1] * (a - xscale[i]);
+ for (; a < b; a ++)
+ n += freq[a];
+ if (b < 256)
+ n += freq[b] * (xscale[i + 1] - b);
+ }
+
+ /* 40 dB range */
+ gint x = 20 * log10 (n * 100);
+ x = CLAMP (x, 0, 40);
+
+ bars[i] -= MAX (0, VIS_FALLOFF - delay[i]);
+
+ if (delay[i])
+ delay[i]--;
+
+ if (x > bars[i])
+ {
+ bars[i] = x;
+ delay[i] = VIS_DELAY;
+ }
+ }
+
+ gtk_widget_queue_draw (spect_widget);
+}
+
+static void rgb_to_hsv (gfloat r, gfloat g, gfloat b, gfloat * h, gfloat * s, gfloat * v)
+{
+ gfloat max, min;
+
+ max = r;
+ if (g > max)
+ max = g;
+ if (b > max)
+ max = b;
+
+ min = r;
+ if (g < min)
+ min = g;
+ if (b < min)
+ min = b;
+
+ * v = max;
+
+ if (max == min)
+ {
+ * h = 0;
+ * s = 0;
+ return;
+ }
+
+ if (r == max)
+ * h = 1 + (g - b) / (max - min);
+ else if (g == max)
+ * h = 3 + (b - r) / (max - min);
+ else
+ * h = 5 + (r - g) / (max - min);
+
+ * s = (max - min) / max;
+}
+
+static void hsv_to_rgb (gfloat h, gfloat s, gfloat v, gfloat * r, gfloat * g, gfloat * b)
+{
+ for (; h >= 2; h -= 2)
+ {
+ gfloat * p = r;
+ r = g;
+ g = b;
+ b = p;
+ }
+
+ if (h < 1)
+ {
+ * r = 1;
+ * g = 0;
+ * b = 1 - h;
+ }
+ else
+ {
+ * r = 1;
+ * g = h - 1;
+ * b = 0;
+ }
+
+ * r = v * (1 - s * (1 - * r));
+ * g = v * (1 - s * (1 - * g));
+ * b = v * (1 - s * (1 - * b));
+}
+
+static void get_color (GtkWidget * widget, gint i, gfloat * r, gfloat * g, gfloat * b)
+{
+ GdkColor * c = (gtk_widget_get_style (widget))->base + GTK_STATE_SELECTED;
+ gfloat h, s, v, n;
+
+ rgb_to_hsv (c->red / 65535.0, c->green / 65535.0, c->blue / 65535.0, & h, & s, & v);
+
+ if (s < 0.1) /* monochrome theme? use blue instead */
+ {
+ h = 5;
+ s = 0.75;
+ }
+
+ n = i / (gfloat) (bands - 1);
+ s = 1 - 0.9 * n;
+ v = 0.75 + 0.25 * n;
+
+ hsv_to_rgb (h, s, v, r, g, b);
+}
+
+static void draw_background (GtkWidget * area, cairo_t * cr)
+{
+#if 0
+ GdkColor * c = (gtk_widget_get_style (area))->bg;
+#endif
+ GtkAllocation alloc;
+ gtk_widget_get_allocation (area, & alloc);
+
+#if 0
+ gdk_cairo_set_source_color(cr, c);
+#endif
+ cairo_rectangle(cr, 0, 0, alloc.width, alloc.height);
+ cairo_fill (cr);
+}
+
+#if 0
+static void draw_grid (GtkWidget * area, cairo_t * cr)
+{
+ GdkColor * c = (gtk_widget_get_style (area))->bg;
+ GtkAllocation alloc;
+ gtk_widget_get_allocation (area, & alloc);
+ gint i;
+ gfloat base_s = (height / 40);
+
+ for (i = 1; i < 41; i++)
+ {
+ gdk_cairo_set_source_color(cr, c);
+ cairo_move_to(cr, 0.0, i * base_s);
+ cairo_line_to(cr, alloc.width, i * base_s);
+ cairo_stroke(cr);
+ }
+}
+#endif
+
+static void draw_visualizer (GtkWidget *widget, cairo_t *cr)
+{
+ gfloat base_s = (height / 40);
+
+ for (gint i = 0; i <= bands; i++)
+ {
+ gint x = ((width / bands) * i) + 2;
+ gfloat r, g, b;
+
+ get_color (widget, i, & r, & g, & b);
+ cairo_set_source_rgb (cr, r, g, b);
+ cairo_rectangle (cr, x + 1, height - (bars[i] * base_s), (width / bands) - 1, (bars[i] * base_s));
+ cairo_fill (cr);
+ }
+}
+
+static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event)
+{
+ width = event->width;
+ height = event->height;
+ gtk_widget_queue_draw(widget);
+
+ bands = width / 10;
+ bands = CLAMP(bands, 12, MAX_BANDS);
+ calculate_bands(bands);
+
+ return TRUE;
+}
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+static gboolean draw_event (GtkWidget * widget, cairo_t * cr, GtkWidget * area)
+{
+#else
+static gboolean expose_event (GtkWidget * widget, GdkEventExpose * event, GtkWidget * area)
+{
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
+#endif
+
+ draw_background (widget, cr);
+ draw_visualizer (widget, cr);
+#if 0
+ draw_grid (widget, cr);
+#endif
+
+#if ! GTK_CHECK_VERSION (3, 0, 0)
+ cairo_destroy (cr);
+#endif
+
+ return TRUE;
+}
+
+static gboolean destroy_event (void)
+{
+ aud_vis_func_remove ((VisFunc) render_cb);
+ spect_widget = NULL;
+ return TRUE;
+}
+
+static /* GtkWidget * */ gpointer get_widget(void)
+{
+ GtkWidget *area = gtk_drawing_area_new();
+ spect_widget = area;
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+ g_signal_connect(area, "draw", (GCallback) draw_event, NULL);
+#else
+ g_signal_connect(area, "expose-event", (GCallback) expose_event, NULL);
+#endif
+ g_signal_connect(area, "configure-event", (GCallback) configure_event, NULL);
+ g_signal_connect(area, "destroy", (GCallback) destroy_event, NULL);
+
+ aud_vis_func_add (AUD_VIS_TYPE_FREQ, (VisFunc) render_cb);
+
+ return area;
+}
+
+AUD_VIS_PLUGIN
+(
+ .name = "Cairo Spectrum",
+ .get_widget = get_widget
+)
diff --git a/src/cd-menu-items/Makefile b/src/cd-menu-items/Makefile
index cb9e455..ce8dac1 100644
--- a/src/cd-menu-items/Makefile
+++ b/src/cd-menu-items/Makefile
@@ -7,6 +7,6 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-CPPFLAGS += -I../..
-CFLAGS += ${PLUGIN_CFLAGS} ${GTK_CFLAGS}
+CPPFLAGS += -I../.. ${GTK_CFLAGS}
+CFLAGS += ${PLUGIN_CFLAGS}
LIBS += ${GTK_LIBS}
diff --git a/src/cd-menu-items/cd-menu-items.c b/src/cd-menu-items/cd-menu-items.c
index 1337bc5..8fadc9d 100644
--- a/src/cd-menu-items/cd-menu-items.c
+++ b/src/cd-menu-items/cd-menu-items.c
@@ -1,6 +1,6 @@
/*
* cd-menu-items.c
- * Copyright 2009 John Lindgren
+ * Copyright 2009-2011 John Lindgren
*
* This file is part of Audacious.
*
@@ -21,7 +21,6 @@
#include "config.h"
-#include <glib.h>
#include <gtk/gtk.h>
#include <audacious/drct.h>
@@ -33,51 +32,34 @@
#define N_MENUS 3
static const gchar * titles[N_ITEMS] = {N_("Play CD"), N_("Add CD")};
-static const gint menus[N_MENUS] = {AUDACIOUS_MENU_MAIN,
- AUDACIOUS_MENU_PLAYLIST_ADD, AUDACIOUS_MENU_PLAYLIST_RCLICK};
+static const gint menus[N_MENUS] = {AUD_MENU_MAIN, AUD_MENU_PLAYLIST_ADD,
+ AUD_MENU_PLAYLIST_RCLICK};
-static GtkWidget * items[N_ITEMS * N_MENUS];
+static void cd_play (void) {aud_drct_pl_open ("cdda://"); }
+static void cd_add (void) {aud_drct_pl_add ("cdda://", -1); }
+static MenuFunc funcs[N_ITEMS] = {cd_play, cd_add};
-static void cd_play (void)
+static gboolean cd_init (void)
{
- aud_drct_pl_open ("cdda://");
-}
+ for (gint m = 0; m < N_MENUS; m ++)
+ for (gint i = 0; i < N_ITEMS; i ++)
+ aud_plugin_menu_add (menus[m], funcs[i], _(titles[i]),
+ GTK_STOCK_CDROM);
-static void cd_add (void)
-{
- aud_drct_pl_add ("cdda://", -1);
-}
-
-static void (* funcs[N_ITEMS]) (void) = {cd_play, cd_add};
-
-static void cd_init (void)
-{
- gint mcount, icount;
- GtkWidget * menu, * item;
-
- for (mcount = 0; mcount < N_MENUS; mcount ++)
- {
- menu = aud_get_plugin_menu (menus[mcount]);
-
- for (icount = 0; icount < N_ITEMS; icount ++)
- {
- item = gtk_image_menu_item_new_with_label (_(titles[icount]));
- gtk_image_menu_item_set_image ((GtkImageMenuItem *) item,
- gtk_image_new_from_stock (GTK_STOCK_CDROM, GTK_ICON_SIZE_MENU));
- gtk_widget_show (item);
- items[N_ITEMS * mcount + icount] = item;
- gtk_menu_shell_append ((GtkMenuShell *) menu, item);
- g_signal_connect (item, "activate", (GCallback) funcs[icount], NULL);
- }
- }
+ return TRUE;
}
void cd_cleanup (void)
{
- gint count;
-
- for (count = 0; count < N_ITEMS * N_MENUS; count ++)
- gtk_widget_destroy (items[count]);
+ for (gint m = 0; m < N_MENUS; m ++)
+ for (gint i = 0; i < N_ITEMS; i ++)
+ aud_plugin_menu_remove (menus[m], funcs[i]);
}
-DECLARE_PLUGIN (cd-menu-items, cd_init, cd_cleanup)
+AUD_GENERAL_PLUGIN
+(
+ .name = "Audio CD Menu Items",
+ .enabled_by_default = TRUE,
+ .init = cd_init,
+ .cleanup = cd_cleanup,
+)
diff --git a/src/cdaudio-ng/Makefile b/src/cdaudio-ng/Makefile
index 187c1ae..2257313 100644
--- a/src/cdaudio-ng/Makefile
+++ b/src/cdaudio-ng/Makefile
@@ -9,5 +9,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${CDIO_CFLAGS} ${CDDB_CFLAGS} ${ARCH_DEFINES} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${CDIO_LIBS} ${CDDB_LIBS} ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${CDIO_CFLAGS} ${CDDB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${CDIO_LIBS} ${CDDB_LIBS}
diff --git a/src/cdaudio-ng/cdaudio-ng.c b/src/cdaudio-ng/cdaudio-ng.c
index f24cf74..dade98b 100644
--- a/src/cdaudio-ng/cdaudio-ng.c
+++ b/src/cdaudio-ng/cdaudio-ng.c
@@ -36,14 +36,12 @@
#include <glib.h>
-#include <audacious/audconfig.h>
-#include <audacious/configdb.h>
#include <audacious/debug.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <audacious/plugin.h>
-#include <libaudcore/eventqueue.h>
+#include <libaudcore/hook.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -65,75 +63,55 @@ typedef struct
}
trackinfo_t;
-typedef struct
-{
- gint startlsn;
- gint endlsn;
- gint currlsn;
- gint seektime; /* milliseconds */
- InputPlayback * pplayback;
- GThread * thread;
-}
-dae_params_t;
-
static GMutex *mutex;
-static GCond *control_cond;
+static gint seek_time;
+static gboolean stop_flag;
/* lock mutex to read / set these variables */
cdng_cfg_t cdng_cfg;
static gint firsttrackno = -1;
static gint lasttrackno = -1;
-static CdIo_t *pcdio = NULL;
+static gint n_audio_tracks;
+static cdrom_drive_t *pcdrom_drive = NULL;
static trackinfo_t *trackinfo = NULL;
-static volatile gboolean pause_flag = FALSE;
-static gint playing_track = -1;
-static dae_params_t *pdae_params = NULL;
static gint monitor_source = 0;
/* read / set these variables in main thread only */
-static void cdaudio_init (void);
+static gboolean cdaudio_init (void);
static void cdaudio_about (void);
static void cdaudio_configure (void);
-static gint cdaudio_is_our_file (const gchar * filename);
-static void cdaudio_play_file (InputPlayback * pinputplayback);
+static gint cdaudio_is_our_file (const gchar * filename, VFSFile * file);
+static gboolean cdaudio_play (InputPlayback * p, const gchar * name, VFSFile *
+ file, gint start, gint stop, gboolean pause);
static void cdaudio_stop (InputPlayback * pinputplayback);
-static void cdaudio_pause (InputPlayback * pinputplayback, gshort paused);
-static void cdaudio_seek (InputPlayback * pinputplayback, gint time);
-static gint cdaudio_get_time (InputPlayback * pinputplayback);
-static gint cdaudio_get_volume (gint * l, gint * r);
-static gint cdaudio_set_volume (gint l, gint r);
+static void cdaudio_pause (InputPlayback * p, gboolean paused);
+static void cdaudio_mseek (InputPlayback * p, gint time);
static void cdaudio_cleanup (void);
-static Tuple *create_tuple_from_trackinfo_and_filename (const gchar * filename);
-static void dae_play_loop (dae_params_t * pdae_params);
+static Tuple * make_tuple (const gchar * filename, VFSFile * file);
static void scan_cd (void);
static void refresh_trackinfo (gboolean warning);
static gint calculate_track_length (gint startlsn, gint endlsn);
static gint find_trackno_from_filename (const gchar * filename);
+static const gchar * const schemes[] = {"cdda", NULL};
-static InputPlugin inputplugin = {
- .description = "Audio CD Plugin",
+AUD_INPUT_PLUGIN
+(
+ .name = "Audio CD Support",
.init = cdaudio_init,
.about = cdaudio_about,
.configure = cdaudio_configure,
- .is_our_file = cdaudio_is_our_file,
- .play_file = cdaudio_play_file,
+ .is_our_file_from_vfs = cdaudio_is_our_file,
+ .play = cdaudio_play,
.stop = cdaudio_stop,
.pause = cdaudio_pause,
- .seek = cdaudio_seek,
- .get_time = cdaudio_get_time,
- .get_volume = cdaudio_get_volume,
- .set_volume = cdaudio_set_volume,
+ .mseek = cdaudio_mseek,
.cleanup = cdaudio_cleanup,
- .get_song_tuple = create_tuple_from_trackinfo_and_filename,
+ .probe_for_tuple = make_tuple,
+ .schemes = schemes,
.have_subtune = TRUE,
-};
-
-InputPlugin *cdaudio_iplist[] = { &inputplugin, NULL };
-
-SIMPLE_INPUT_PLUGIN (cdaudio, cdaudio_iplist)
-
+)
static void cdaudio_error (const gchar * message_format, ...)
{
@@ -144,26 +122,27 @@ static void cdaudio_error (const gchar * message_format, ...)
msg = g_markup_vprintf_escaped (message_format, args);
va_end (args);
- event_queue_with_data_free ("interface show error", msg);
+ aud_interface_show_error (msg);
+ g_free (msg);
}
/* main thread only */
static void purge_playlist (gint playlist)
{
gint length = aud_playlist_entry_count (playlist);
- gint count;
- const gchar *filename;
- for (count = 0; count < length; count++)
+ for (gint count = 0; count < length; count ++)
{
- filename = aud_playlist_entry_get_filename (playlist, count);
+ gchar * filename = aud_playlist_entry_get_filename (playlist, count);
- if (cdaudio_is_our_file (filename))
+ if (cdaudio_is_our_file (filename, NULL))
{
aud_playlist_entry_delete (playlist, count, 1);
count--;
length--;
}
+
+ str_unref (filename);
}
}
@@ -211,72 +190,47 @@ static void trigger_monitor (void)
#endif
}
+static const gchar * const cdaudio_defaults[] = {
+ "use_cdtext", "TRUE",
+ "use_cddb", "TRUE",
+ "cddbserver", "freedb.org",
+ "cddbport", "8880",
+ "cddbhttp", "FALSE",
+ "disc_speed", "2",
+ NULL};
+
/* main thread only */
-static void cdaudio_init ()
+static gboolean cdaudio_init (void)
{
- mcs_handle_t *db;
-
mutex = g_mutex_new ();
- control_cond = g_cond_new ();
-
- cdng_cfg.use_dae = TRUE;
- cdng_cfg.use_cdtext = TRUE;
- cdng_cfg.use_cddb = TRUE;
- cdng_cfg.cddb_port = CDDA_DEFAULT_CDDB_PORT;
- cdng_cfg.cddb_http = FALSE;
- cdng_cfg.disc_speed = DEFAULT_DISC_SPEED;
- cdng_cfg.use_proxy = FALSE;
- cdng_cfg.proxy_port = CDDA_DEFAULT_PROXY_PORT;
-
- if ((db = aud_cfg_db_open ()) == NULL)
- {
- cdaudio_error ("Failed to read configuration.");
- return;
- }
- aud_cfg_db_get_bool (db, "CDDA", "use_dae", &cdng_cfg.use_dae);
- aud_cfg_db_get_bool (db, "CDDA", "use_cdtext", &cdng_cfg.use_cdtext);
- aud_cfg_db_get_bool (db, "CDDA", "use_cddb", &cdng_cfg.use_cddb);
- aud_cfg_db_get_string (db, "CDDA", "device", &cdng_cfg.device);
- aud_cfg_db_get_string (db, "CDDA", "cddbserver", &cdng_cfg.cddb_server);
- aud_cfg_db_get_string (db, "CDDA", "cddbpath", &cdng_cfg.cddb_path);
- aud_cfg_db_get_int (db, "CDDA", "cddbport", &cdng_cfg.cddb_port);
- aud_cfg_db_get_bool (db, "CDDA", "cddbhttp", &cdng_cfg.cddb_http);
- aud_cfg_db_get_int (db, "CDDA", "disc_speed", & cdng_cfg.disc_speed);
- cdng_cfg.disc_speed = CLAMP (cdng_cfg.disc_speed, MIN_DISC_SPEED,
- MAX_DISC_SPEED);
- aud_cfg_db_get_bool (db, "audacious", "use_proxy", &cdng_cfg.use_proxy);
- aud_cfg_db_get_string (db, "audacious", "proxy_host", &cdng_cfg.proxy_host);
- aud_cfg_db_get_int (db, "audacious", "proxy_port", &cdng_cfg.proxy_port);
- aud_cfg_db_get_string (db, "audacious", "proxy_user",
- &cdng_cfg.proxy_username);
- aud_cfg_db_get_string (db, "audacious", "proxy_pass",
- &cdng_cfg.proxy_password);
-
- if (cdng_cfg.device == NULL)
- cdng_cfg.device = g_strdup ("");
- if (cdng_cfg.cddb_server == NULL)
- cdng_cfg.cddb_server = g_strdup (CDDA_DEFAULT_CDDB_SERVER);
- if (cdng_cfg.cddb_path == NULL)
- cdng_cfg.cddb_path = g_strdup ("");
- if (cdng_cfg.proxy_host == NULL)
- cdng_cfg.proxy_host = g_strdup ("");
- if (cdng_cfg.proxy_username == NULL)
- cdng_cfg.proxy_username = g_strdup ("");
- if (cdng_cfg.proxy_password == NULL)
- cdng_cfg.proxy_password = g_strdup ("");
-
- aud_cfg_db_close (db);
+ aud_config_set_defaults ("CDDA", cdaudio_defaults);
+
+ cdng_cfg.use_cdtext = aud_get_bool ("CDDA", "use_cdtext");
+ cdng_cfg.use_cddb = aud_get_bool ("CDDA", "use_cddb");
+ cdng_cfg.device = aud_get_string ("CDDA", "device");
+ cdng_cfg.cddb_server = aud_get_string ("CDDA", "cddbserver");
+ cdng_cfg.cddb_path = aud_get_string ("CDDA", "cddbpath");
+ cdng_cfg.cddb_port = aud_get_int ("CDDA", "cddbport");
+ cdng_cfg.cddb_http = aud_get_bool ("CDDA", "cddbhttp");
+ cdng_cfg.disc_speed = aud_get_int ("CDDA", "disc_speed");
+ cdng_cfg.disc_speed = CLAMP (cdng_cfg.disc_speed, MIN_DISC_SPEED, MAX_DISC_SPEED);
+
+ cdng_cfg.use_proxy = aud_get_bool (NULL, "use_proxy");
+ cdng_cfg.proxy_host = aud_get_string (NULL, "proxy_host");
+ cdng_cfg.proxy_port = aud_get_int (NULL, "proxy_port");
+ cdng_cfg.proxy_username = aud_get_string (NULL, "proxy_user");
+ cdng_cfg.proxy_password = aud_get_string (NULL, "proxy_pass");
if (!cdio_init ())
{
cdaudio_error ("Failed to initialize cdio subsystem.");
- return;
+ return FALSE;
}
libcddb_init ();
- aud_uri_set_plugin ("cdda://", &inputplugin);
+ return TRUE;
}
/* main thread only */
@@ -301,7 +255,7 @@ static void cdaudio_configure ()
}
/* thread safe (mutex may be locked) */
-static gint cdaudio_is_our_file (const gchar * filename)
+static gint cdaudio_is_our_file (const gchar * filename, VFSFile * file)
{
return !strncmp (filename, "cdda://", 7);
}
@@ -328,10 +282,9 @@ static void cdaudio_set_fullinfo (trackinfo_t * t,
}
/* play thread only */
-static void cdaudio_play_file (InputPlayback * pinputplayback)
+static gboolean cdaudio_play (InputPlayback * p, const gchar * name, VFSFile *
+ file, gint start, gint stop, gboolean pause)
{
- gint trackno;
-
g_mutex_lock (mutex);
if (trackinfo == NULL)
@@ -340,245 +293,169 @@ static void cdaudio_play_file (InputPlayback * pinputplayback)
if (trackinfo == NULL)
{
- pinputplayback->error = TRUE;
- goto UNLOCK;
+ERR:
+ g_mutex_unlock (mutex);
+ return FALSE;
}
}
- trackno = find_trackno_from_filename (pinputplayback->filename);
+ gint trackno = find_trackno_from_filename (name);
- if (trackno == -1)
+ if (trackno < 0)
{
- cdaudio_error ("Invalid URI %s.", pinputplayback->filename);
- pinputplayback->error = TRUE;
- goto UNLOCK;
+ cdaudio_error ("Invalid URI %s.", name);
+ goto ERR;
}
if (trackno < firsttrackno || trackno > lasttrackno)
{
cdaudio_error ("Track %d not found.", trackno);
- pinputplayback->error = TRUE;
- goto UNLOCK;
+ goto ERR;
}
- pinputplayback->set_params (pinputplayback, NULL, 0, 1411200, 44100, 2);
- pinputplayback->playing = TRUE;
- playing_track = trackno;
- pause_flag = FALSE;
-
- if (cdng_cfg.use_dae)
+ /* don't play any data tracks */
+ if (!cdda_track_audiop (pcdrom_drive, trackno))
{
- if (pinputplayback->output->open_audio (FMT_S16_LE, 44100, 2) == 0)
- {
- cdaudio_error ("Failed to open audio output.");
- pinputplayback->error = TRUE;
- goto UNLOCK;
- }
-
- pdae_params = (dae_params_t *) g_new (dae_params_t, 1);
- pdae_params->startlsn = trackinfo[trackno].startlsn;
- pdae_params->endlsn = trackinfo[trackno].endlsn;
- pdae_params->pplayback = pinputplayback;
- pdae_params->seektime = -1;
- pdae_params->currlsn = trackinfo[trackno].startlsn;
- pdae_params->thread = g_thread_self ();
- pinputplayback->set_pb_ready (pinputplayback);
+ cdaudio_error ("Track %d is a data track.\n", trackno);
+ goto ERR;
+ }
- dae_play_loop (pdae_params);
+ gint startlsn = trackinfo[trackno].startlsn;
+ gint endlsn = trackinfo[trackno].endlsn;
- g_free (pdae_params);
- }
- else
+ if (! p->output->open_audio (FMT_S16_LE, 44100, 2))
{
- msf_t startmsf, endmsf;
- cdio_lsn_to_msf (trackinfo[trackno].startlsn, &startmsf);
- cdio_lsn_to_msf (trackinfo[trackno].endlsn, &endmsf);
- if (cdio_audio_play_msf (pcdio, &startmsf, &endmsf) !=
- DRIVER_OP_SUCCESS)
- {
- cdaudio_error ("Failed to play analog audio CD.");
- goto UNLOCK;
- }
+ cdaudio_error ("Failed to open audio output.");
+ goto ERR;
}
- UNLOCK:
- g_mutex_unlock (mutex);
-}
+ seek_time = (start > 0) ? start : -1;
+ stop_flag = FALSE;
-/* main thread only */
-static void cdaudio_stop (InputPlayback * playback)
-{
- g_mutex_lock (mutex);
+ if (stop >= 0)
+ endlsn = MIN (endlsn, startlsn + stop * 75 / 1000);
- if (!playback->playing)
- goto UNLOCK;
+ if (pause)
+ p->output->pause (TRUE);
- playback->playing = FALSE;
+ p->set_params (p, 1411200, 44100, 2);
+ p->set_pb_ready (p);
- if (cdng_cfg.use_dae)
- {
- g_cond_signal (control_cond);
- g_mutex_unlock (mutex);
- g_thread_join (playback->thread);
- playback->thread = NULL;
- return;
- }
- else
- {
- if (cdio_audio_stop (pcdio) != DRIVER_OP_SUCCESS)
- cdaudio_error ("Cannot stop analog CD.");
- }
-
- UNLOCK:
g_mutex_unlock (mutex);
-}
-/* main thread only */
-static void cdaudio_pause (InputPlayback * pinputplayback, gshort paused)
-{
- g_mutex_lock (mutex);
-
- pause_flag = paused;
+ gint buffer_size = aud_get_int (NULL, "output_buffer_size");
+ gint sectors = CLAMP (buffer_size / 2, 50, 250) * cdng_cfg.disc_speed * 75 / 1000;
+ guchar buffer[2352 * sectors];
+ gint currlsn = startlsn;
+ gint retry_count = 0, skip_count = 0;
- if (cdng_cfg.use_dae)
- {
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, mutex);
- }
- else
+ while (1)
{
- if (paused)
+ g_mutex_lock (mutex);
+
+ if (stop_flag)
{
- if (cdio_audio_pause (pcdio) != DRIVER_OP_SUCCESS)
- cdaudio_error ("Cannot pause analog CD.");
+ g_mutex_unlock (mutex);
+ goto CLOSE;
}
- else
+
+ if (seek_time >= 0)
{
- if (cdio_audio_resume (pcdio) != DRIVER_OP_SUCCESS)
- cdaudio_error ("Cannot resume analog CD.");
+ p->output->flush (seek_time);
+ currlsn = startlsn + (seek_time * 75 / 1000);
+ seek_time = -1;
}
- }
- g_mutex_unlock (mutex);
-}
+ g_mutex_unlock (mutex);
-/* main thread only */
-static void cdaudio_seek (InputPlayback * playback, gint time)
-{
- g_mutex_lock (mutex);
+ sectors = MIN (sectors, endlsn + 1 - currlsn);
+ if (sectors < 1)
+ break;
- if (cdng_cfg.use_dae)
- {
- if (pdae_params == NULL)
- goto UNLOCK;
+ if (cdio_read_audio_sectors (pcdrom_drive->p_cdio, buffer, currlsn, sectors) ==
+ DRIVER_OP_SUCCESS)
+ {
+ retry_count = 0;
+ skip_count = 0;
+ }
+ else if (sectors > 16)
+ {
+ warn ("Read failed; reducing read size.\n");
+ sectors /= 2;
+ continue;
+ }
+ else if (retry_count < MAX_RETRIES)
+ {
+ warn ("Read failed; retrying.\n");
+ retry_count ++;
+ continue;
+ }
+ else if (skip_count < MAX_SKIPS)
+ {
+ warn ("Read failed; skipping.\n");
+ currlsn = MIN (currlsn + 75, endlsn + 1);
+ skip_count ++;
+ continue;
+ }
+ else
+ {
+ cdaudio_error ("Too many read errors; giving up.");
+ break;
+ }
- pdae_params->seektime = time * 1000;
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, mutex);
- }
- else
- {
- gint newstartlsn = trackinfo[playing_track].startlsn + time * 75;
- msf_t startmsf, endmsf;
- cdio_lsn_to_msf (newstartlsn, &startmsf);
- cdio_lsn_to_msf (trackinfo[playing_track].endlsn, &endmsf);
-
- if (cdio_audio_play_msf (pcdio, &startmsf, &endmsf) !=
- DRIVER_OP_SUCCESS)
- cdaudio_error ("Failed to play analog CD");
+ p->output->write_audio (buffer, 2352 * sectors);
+ currlsn += sectors;
}
- UNLOCK:
+ while (p->output->buffer_playing ())
+ g_usleep (20000);
+
+ g_mutex_lock (mutex);
+ stop_flag = FALSE;
g_mutex_unlock (mutex);
+
+CLOSE:
+ p->output->close_audio ();
+ return TRUE;
}
/* main thread only */
-static gint cdaudio_get_time (InputPlayback * playback)
+static void cdaudio_stop (InputPlayback * p)
{
- int time;
-
g_mutex_lock (mutex);
- time = 0;
-
- if (!playback->playing)
- goto UNLOCK;
-
- if (cdng_cfg.use_dae)
- time = -1;
- else
+ if (! stop_flag)
{
- cdio_subchannel_t subchannel;
- if (cdio_audio_read_subchannel (pcdio, &subchannel) !=
- DRIVER_OP_SUCCESS)
- {
- cdaudio_error ("Failed to read analog CD subchannel.");
- goto UNLOCK;
- }
- gint currlsn = cdio_msf_to_lsn (&subchannel.abs_addr);
-
- time = calculate_track_length
- (trackinfo[playing_track].startlsn, currlsn);
+ stop_flag = TRUE;
+ p->output->abort_write();
}
- UNLOCK:
g_mutex_unlock (mutex);
- return time;
}
/* main thread only */
-static gint cdaudio_get_volume (gint * l, gint * r)
+static void cdaudio_pause (InputPlayback * p, gboolean pause)
{
g_mutex_lock (mutex);
- if (cdng_cfg.use_dae)
- {
- g_mutex_unlock (mutex);
- return FALSE;
- }
- else
- {
- cdio_audio_volume_t volume;
- if (cdio_audio_get_volume (pcdio, &volume) != DRIVER_OP_SUCCESS)
- {
- cdaudio_error ("Failed to retrieve analog CD volume.");
-
- g_mutex_unlock (mutex);
- return FALSE;
- }
- *l = volume.level[0];
- *r = volume.level[1];
+ if (! stop_flag)
+ p->output->pause (pause);
- g_mutex_unlock (mutex);
- return TRUE;
- }
+ g_mutex_unlock (mutex);
}
/* main thread only */
-static gint cdaudio_set_volume (gint l, gint r)
+static void cdaudio_mseek (InputPlayback * p, gint time)
{
g_mutex_lock (mutex);
- if (cdng_cfg.use_dae)
+ if (! stop_flag)
{
- g_mutex_unlock (mutex);
- return FALSE;
+ seek_time = time;
+ p->output->abort_write();
}
- else
- {
- cdio_audio_volume_t volume = { {l, r, 0, 0}
- };
- if (cdio_audio_set_volume (pcdio, &volume) != DRIVER_OP_SUCCESS)
- {
- cdaudio_error ("cdaudio-ng: failed to set analog cd volume");
- g_mutex_unlock (mutex);
- return FALSE;
- }
-
- g_mutex_unlock (mutex);
- return TRUE;
- }
+ g_mutex_unlock (mutex);
}
/* main thread only */
@@ -592,10 +469,10 @@ static void cdaudio_cleanup (void)
monitor_source = 0;
}
- if (pcdio != NULL)
+ if (pcdrom_drive != NULL)
{
- cdio_destroy (pcdio);
- pcdio = NULL;
+ cdda_close (pcdrom_drive);
+ pcdrom_drive = NULL;
}
if (trackinfo != NULL)
{
@@ -607,17 +484,14 @@ static void cdaudio_cleanup (void)
// todo: destroy the gui
- mcs_handle_t *db = aud_cfg_db_open ();
- aud_cfg_db_set_bool (db, "CDDA", "use_dae", cdng_cfg.use_dae);
- aud_cfg_db_set_int (db, "CDDA", "disc_speed", cdng_cfg.disc_speed);
- aud_cfg_db_set_bool (db, "CDDA", "use_cdtext", cdng_cfg.use_cdtext);
- aud_cfg_db_set_bool (db, "CDDA", "use_cddb", cdng_cfg.use_cddb);
- aud_cfg_db_set_string (db, "CDDA", "cddbserver", cdng_cfg.cddb_server);
- aud_cfg_db_set_string (db, "CDDA", "cddbpath", cdng_cfg.cddb_path);
- aud_cfg_db_set_int (db, "CDDA", "cddbport", cdng_cfg.cddb_port);
- aud_cfg_db_set_bool (db, "CDDA", "cddbhttp", cdng_cfg.cddb_http);
- aud_cfg_db_set_string (db, "CDDA", "device", cdng_cfg.device);
- aud_cfg_db_close (db);
+ aud_set_bool ("CDDA", "use_cdtext", cdng_cfg.use_cdtext);
+ aud_set_bool ("CDDA", "use_cddb", cdng_cfg.use_cddb);
+ aud_set_string ("CDDA", "device", cdng_cfg.device);
+ aud_set_string ("CDDA", "cddbserver", cdng_cfg.cddb_server);
+ aud_set_string ("CDDA", "cddbpath", cdng_cfg.cddb_path);
+ aud_set_int ("CDDA", "cddbport", cdng_cfg.cddb_port);
+ aud_set_bool ("CDDA", "cddbhttp", cdng_cfg.cddb_http);
+ aud_set_int ("CDDA", "disc_speed", cdng_cfg.disc_speed);
g_free (cdng_cfg.device);
g_free (cdng_cfg.cddb_server);
@@ -628,11 +502,10 @@ static void cdaudio_cleanup (void)
g_mutex_unlock (mutex);
g_mutex_free (mutex);
- g_cond_free (control_cond);
}
/* thread safe */
-static Tuple *create_tuple_from_trackinfo_and_filename (const gchar * filename)
+static Tuple * make_tuple (const gchar * filename, VFSFile * file)
{
Tuple *tuple = NULL;
gint trackno;
@@ -647,11 +520,16 @@ static Tuple *create_tuple_from_trackinfo_and_filename (const gchar * filename)
if (!strcmp (filename, "cdda://"))
{
tuple = tuple_new_from_filename (filename);
- tuple->nsubtunes = 1 + lasttrackno - firsttrackno;
- tuple->subtunes = g_malloc (sizeof *tuple->subtunes * tuple->nsubtunes);
+ gint subtunes[n_audio_tracks];
+ gint i = 0;
+
+ /* only add the audio tracks to the playlist */
for (trackno = firsttrackno; trackno <= lasttrackno; trackno++)
- tuple->subtunes[trackno - firsttrackno] = trackno;
+ if (cdda_track_audiop (pcdrom_drive, trackno))
+ subtunes[i ++] = trackno;
+
+ tuple_set_subtunes (tuple, n_audio_tracks, subtunes);
goto DONE;
}
@@ -664,27 +542,34 @@ static Tuple *create_tuple_from_trackinfo_and_filename (const gchar * filename)
goto DONE;
}
+ if (!cdda_track_audiop (pcdrom_drive, trackno))
+ {
+ warn ("Track %d is a data track.\n", trackno);
+ goto DONE;
+ }
+
tuple = tuple_new_from_filename (filename);
+ tuple_set_format (tuple, _("Audio CD"), 2, 44100, 1411);
if (strlen (trackinfo[trackno].performer))
{
- tuple_associate_string (tuple, FIELD_ARTIST, NULL,
+ tuple_set_str (tuple, FIELD_ARTIST, NULL,
trackinfo[trackno].performer);
}
if (strlen (trackinfo[0].name))
{
- tuple_associate_string (tuple, FIELD_ALBUM, NULL,
+ tuple_set_str (tuple, FIELD_ALBUM, NULL,
trackinfo[0].name);
}
if (strlen (trackinfo[trackno].name))
{
- tuple_associate_string (tuple, FIELD_TITLE, NULL,
+ tuple_set_str (tuple, FIELD_TITLE, NULL,
trackinfo[trackno].name);
}
- tuple_associate_int (tuple, FIELD_TRACK_NUMBER, NULL, trackno);
+ tuple_set_int (tuple, FIELD_TRACK_NUMBER, NULL, trackno);
- tuple_associate_int (tuple, FIELD_LENGTH, NULL,
+ tuple_set_int (tuple, FIELD_LENGTH, NULL,
calculate_track_length (trackinfo[trackno].
startlsn,
trackinfo[trackno].
@@ -692,7 +577,7 @@ static Tuple *create_tuple_from_trackinfo_and_filename (const gchar * filename)
if (strlen (trackinfo[trackno].genre))
{
- tuple_associate_string (tuple, FIELD_GENRE, NULL,
+ tuple_set_str (tuple, FIELD_GENRE, NULL,
trackinfo[trackno].genre);
}
@@ -701,120 +586,17 @@ static Tuple *create_tuple_from_trackinfo_and_filename (const gchar * filename)
return tuple;
}
-/* play thread only, mutex must be locked */
-static void do_seek (void)
-{
- pdae_params->pplayback->output->flush (pdae_params->seektime);
- pdae_params->currlsn =
- pdae_params->startlsn + (pdae_params->seektime * 75 / 1000);
- cdio_lseek (pcdio, pdae_params->currlsn * CDIO_CD_FRAMESIZE_RAW, SEEK_SET);
- pdae_params->seektime = -1;
-}
-
-/* play thread only, mutex must be locked */
-/* unlocks mutex temporarily */
-static void dae_play_loop (dae_params_t * pdae_params)
-{
- InputPlayback * playback = pdae_params->pplayback;
- gboolean paused = FALSE;
- gint sectors = CLAMP (aud_cfg->output_buffer_size / 2, 50, 250) *
- cdng_cfg.disc_speed * 75 / 1000;
- void * buffer = g_malloc (2352 * sectors);
- gint retry_count = 0, skip_count = 0;
- gint count;
-
- while (playback->playing)
- {
- if (pdae_params->seektime >= 0)
- {
- do_seek ();
- g_cond_signal (control_cond);
- }
-
- if (pause_flag != paused)
- {
- playback->output->pause (pause_flag);
- paused = pause_flag;
- g_cond_signal (control_cond);
- }
-
- if (paused)
- {
- g_cond_wait (control_cond, mutex);
- continue;
- }
-
- sectors = MIN (sectors, pdae_params->endlsn + 1 - pdae_params->currlsn);
-
- if (sectors < 1)
- break;
-
- if (cdio_read_audio_sectors (pcdio, buffer, pdae_params->currlsn,
- sectors) == DRIVER_OP_SUCCESS)
- {
- retry_count = 0;
- skip_count = 0;
- }
- else if (sectors > 16)
- {
- /* warn ("Read failed; reducing read size.\n"); */
- sectors /= 2;
- continue;
- }
- else if (retry_count < MAX_RETRIES)
- {
- warn ("Read failed; retrying.\n");
- retry_count ++;
- continue;
- }
- else if (skip_count < MAX_SKIPS)
- {
- warn ("Read failed; skipping.\n");
- pdae_params->currlsn = MIN (pdae_params->currlsn + 75,
- pdae_params->endlsn + 1);
- skip_count ++;
- continue;
- }
- else
- {
- cdaudio_error ("Too many read errors; giving up.");
- break;
- }
-
- g_mutex_unlock (mutex);
-
- for (count = 0; count < sectors; count ++)
- playback->pass_audio (playback, FMT_S16_LE, 2, 2352, (gchar *)
- buffer + 2352 * count, NULL);
-
- g_mutex_lock (mutex);
-
- pdae_params->currlsn += sectors;
- }
-
- if (playback->playing)
- {
- while (playback->output->buffer_playing ())
- g_usleep (20000);
-
- playback->playing = FALSE;
- }
-
- playback->output->close_audio ();
- g_free (buffer);
-}
-
/* mutex must be locked */
static void open_cd (void)
{
AUDDBG ("Opening CD drive.\n");
- g_return_if_fail (pcdio == NULL);
+ g_return_if_fail (pcdrom_drive == NULL);
/* find an available, audio capable, cd drive */
if (cdng_cfg.device != NULL && strlen (cdng_cfg.device) > 0)
{
- pcdio = cdio_open (cdng_cfg.device, DRIVER_UNKNOWN);
- if (pcdio == NULL)
+ pcdrom_drive = cdda_identify (cdng_cfg.device, 1, NULL);
+ if (pcdrom_drive == NULL)
{
cdaudio_error ("Failed to open CD device \"%s\".", cdng_cfg.device);
return;
@@ -827,8 +609,8 @@ static void open_cd (void)
if (ppcd_drives != NULL && *ppcd_drives != NULL)
{ /* we have at least one audio capable cd drive */
- pcdio = cdio_open (*ppcd_drives, DRIVER_UNKNOWN);
- if (pcdio == NULL)
+ pcdrom_drive = cdda_identify (*ppcd_drives, 1, NULL);
+ if (pcdrom_drive == NULL)
{
cdaudio_error ("Failed to open CD.");
return;
@@ -838,7 +620,7 @@ static void open_cd (void)
}
else
{
- cdaudio_error ("No audio capable CD drive found.\n");
+ cdaudio_error ("No audio capable CD drive found.");
return;
}
@@ -851,22 +633,33 @@ static void open_cd (void)
static void scan_cd (void)
{
AUDDBG ("Scanning CD drive.\n");
- g_return_if_fail (pcdio != NULL);
+ g_return_if_fail (pcdrom_drive != NULL);
g_return_if_fail (trackinfo == NULL);
gint trackno;
- if (cdio_set_speed (pcdio, cdng_cfg.disc_speed) != DRIVER_OP_SUCCESS)
+ /* general track initialization */
+
+ /* skip endianness detection (because it only affects cdda_read, and we use
+ * cdio_read_audio_sectors instead) */
+ pcdrom_drive->bigendianp = 0;
+
+ /* finish initialization of drive/disc (performs disc TOC sanitization) */
+ if (cdda_open (pcdrom_drive) != 0)
+ {
+ cdaudio_error ("Failed to finish initializing opened CD drive.");
+ goto ERR;
+ }
+
+ if (cdda_speed_set (pcdrom_drive, cdng_cfg.disc_speed) != DRIVER_OP_SUCCESS)
warn ("Cannot set drive speed.\n");
- /* general track initialization */
- cdrom_drive_t *pcdrom_drive = cdio_cddap_identify_cdio (pcdio, 1, NULL); // todo : check return / NULL
firsttrackno = cdio_get_first_track_num (pcdrom_drive->p_cdio);
lasttrackno = cdio_get_last_track_num (pcdrom_drive->p_cdio);
if (firsttrackno == CDIO_INVALID_TRACK || lasttrackno == CDIO_INVALID_TRACK)
{
cdaudio_error ("Failed to retrieve first/last track number.");
- goto ERROR;
+ goto ERR;
}
AUDDBG ("first track is %d and last track is %d\n", firsttrackno,
lasttrackno);
@@ -874,25 +667,29 @@ static void scan_cd (void)
trackinfo = (trackinfo_t *) g_new (trackinfo_t, (lasttrackno + 1));
cdaudio_set_fullinfo (&trackinfo[0],
- cdio_get_track_lsn (pcdrom_drive->p_cdio, 0),
- cdio_get_track_last_lsn (pcdrom_drive->p_cdio,
- CDIO_CDROM_LEADOUT_TRACK),
+ cdda_track_firstsector (pcdrom_drive, 0),
+ cdda_track_lastsector (pcdrom_drive, lasttrackno),
"", "", "");
+ n_audio_tracks = 0;
+
for (trackno = firsttrackno; trackno <= lasttrackno; trackno++)
{
cdaudio_set_fullinfo (&trackinfo[trackno],
- cdio_get_track_lsn (pcdrom_drive->p_cdio,
- trackno),
- cdio_get_track_last_lsn (pcdrom_drive->p_cdio,
- trackno), "", "", "");
+ cdda_track_firstsector (pcdrom_drive, trackno),
+ cdda_track_lastsector (pcdrom_drive, trackno),
+ "", "", "");
if (trackinfo[trackno].startlsn == CDIO_INVALID_LSN
|| trackinfo[trackno].endlsn == CDIO_INVALID_LSN)
{
cdaudio_error ("Cannot read start/end LSN for track %d.", trackno);
- goto ERROR;
+ goto ERR;
}
+
+ /* count how many tracks are audio tracks */
+ if (cdda_track_audiop (pcdrom_drive, trackno))
+ n_audio_tracks++;
}
/* get trackinfo[0] cdtext information (the disc) */
@@ -1000,15 +797,17 @@ static void scan_cd (void)
pcddb_disc = cddb_disc_new ();
- lba = cdio_get_track_lba (pcdio, CDIO_CDROM_LEADOUT_TRACK);
+ lba = cdio_get_track_lba (pcdrom_drive->p_cdio,
+ CDIO_CDROM_LEADOUT_TRACK);
cddb_disc_set_length (pcddb_disc, FRAMES_TO_SECONDS (lba));
for (trackno = firsttrackno; trackno <= lasttrackno; trackno++)
{
pcddb_track = cddb_track_new ();
cddb_track_set_frame_offset (pcddb_track,
- cdio_get_track_lba (pcdio,
- trackno));
+ cdio_get_track_lba (
+ pcdrom_drive->p_cdio,
+ trackno));
cddb_disc_add_track (pcddb_disc, pcddb_track);
}
@@ -1095,7 +894,7 @@ static void scan_cd (void)
return;
- ERROR:
+ ERR:
g_free (trackinfo);
trackinfo = NULL;
}
@@ -1105,15 +904,19 @@ static void refresh_trackinfo (gboolean warning)
{
trigger_monitor ();
- if (pcdio == NULL)
+ if (pcdrom_drive == NULL)
{
open_cd ();
- if (pcdio == NULL)
+ if (pcdrom_drive == NULL)
return;
}
- int mode = cdio_get_discmode (pcdio);
+ int mode = cdio_get_discmode (pcdrom_drive->p_cdio);
+#ifdef _WIN32 /* cdio_get_discmode reports the wrong disk type sometimes */
+ if (mode == CDIO_DISC_MODE_NO_INFO || mode == CDIO_DISC_MODE_ERROR)
+#else
if (mode != CDIO_DISC_MODE_CD_DA && mode != CDIO_DISC_MODE_CD_MIXED)
+#endif
{
if (warning)
{
@@ -1128,7 +931,7 @@ static void refresh_trackinfo (gboolean warning)
return;
}
- if (trackinfo == NULL || cdio_get_media_changed (pcdio))
+ if (trackinfo == NULL || cdio_get_media_changed (pcdrom_drive->p_cdio))
{
g_free (trackinfo);
trackinfo = NULL;
diff --git a/src/cdaudio-ng/cdaudio-ng.h b/src/cdaudio-ng/cdaudio-ng.h
index 8b2778d..a9d77ab 100644
--- a/src/cdaudio-ng/cdaudio-ng.h
+++ b/src/cdaudio-ng/cdaudio-ng.h
@@ -20,13 +20,8 @@
#define CDAUDIO_NG_H
#define DEF_STRING_LEN 256
-#define CDDA_DUMMYPATH "cdda://"
-#define CDDA_DEFAULT_CDDB_SERVER "freedb.org"
-#define CDDA_DEFAULT_CDDB_PORT 8880
-#define CDDA_DEFAULT_PROXY_PORT 8080
#define MIN_DISC_SPEED 2
-#define DEFAULT_DISC_SPEED 2
#define MAX_DISC_SPEED 24
#endif // CDAUDIO_NG_H
diff --git a/src/cdaudio-ng/configure.c b/src/cdaudio-ng/configure.c
index 7efc6f7..333c01b 100644
--- a/src/cdaudio-ng/configure.c
+++ b/src/cdaudio-ng/configure.c
@@ -38,8 +38,6 @@ static void configure_values_to_gui (void)
{
gchar portstr[16];
- /*gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usedaecheckbutton), cdng_cfg.use_dae); */
-
gtk_spin_button_set_value ((GtkSpinButton *) disc_speed_button,
cdng_cfg.disc_speed);
@@ -70,8 +68,6 @@ static void configure_values_to_gui (void)
static void configure_gui_to_values (void)
{
- /*usedae = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(usedaecheckbutton)); */
-
cdng_cfg.disc_speed = gtk_spin_button_get_value ((GtkSpinButton *)
disc_speed_button);
@@ -121,9 +117,6 @@ static void checkbutton_toggled (GtkWidget * widget, gpointer data)
(void) widget;
(void) data;
- /* gtk_widget_set_sensitive (disc_speed_button, gtk_toggle_button_get_active
- ((GtkToggleButton *) usedaecheckbutton)); */
-
gtk_widget_set_sensitive (cddbserverentry,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(usecddbcheckbutton)));
@@ -180,13 +173,6 @@ void configure_create_gui ()
misctable = gtk_table_new (2, 2, TRUE);
gtk_container_add (GTK_CONTAINER (miscframe), misctable);
-
- /*
- usedaecheckbutton = gtk_check_button_new_with_label(_("Use digital audio extraction"));
- g_signal_connect(G_OBJECT(usedaecheckbutton), "toggled", G_CALLBACK(checkbutton_toggled), NULL);
- gtk_table_attach_defaults(GTK_TABLE(daetable), usedaecheckbutton, 0, 2, 0, 1);
- */
-
gtk_table_attach_defaults ((GtkTable *) daetable, gtk_label_new (_("Disc "
"speed:")), 0, 1, 0, 1);
disc_speed_button = gtk_spin_button_new_with_range (MIN_DISC_SPEED,
diff --git a/src/cdaudio-ng/configure.h b/src/cdaudio-ng/configure.h
index f6b77e2..b8fe8df 100644
--- a/src/cdaudio-ng/configure.h
+++ b/src/cdaudio-ng/configure.h
@@ -4,8 +4,6 @@
typedef struct cdng_cfg_t
{
-
- gboolean use_dae;
gboolean use_cdtext;
gboolean use_cddb;
gchar *device;
diff --git a/src/compressor/compressor.c b/src/compressor/compressor.c
index 327cf16..91c194b 100644
--- a/src/compressor/compressor.c
+++ b/src/compressor/compressor.c
@@ -25,13 +25,13 @@
#include "compressor.h"
-/* What is a "normal" target volume? Replay Gain stuff claims to use 89 dB, but
- * what does that translate to in our PCM range? Does anybody even know? */
-float compressor_target = 0.5, compressor_range = 0.5;
+double compressor_center, compressor_range;
+/* Response time adjustments. Maybe this should be adjustable. Or maybe that
+ * would just be confusing. I don't know. */
#define CHUNK_TIME 0.2 /* seconds */
-#define CHUNKS 15
-#define DECAY 0.05
+#define CHUNKS 5
+#define DECAY 0.3
static float * buffer, * output, * peaks;
static int output_size;
@@ -60,25 +60,30 @@ static void buffer_append (float * * data, int * length)
* length -= writable;
}
-static inline float FMAX (float a, float b)
-{
- return a > b ? a : b;
-}
+/* I used to find the maximum sample and take that as the peak, but that doesn't
+ * work well on badly clipped tracks. Now, I use the highly sophisticated
+ * method of averaging the absolute value of the samples and multiplying by 6, a
+ * number proved by experiment (on exactly three files) to best approximate the
+ * actual peak. */
static float calc_peak (float * data, int length)
{
- gfloat peak = 0.0;
+ if (! length)
+ return 0;
+
+ float sum = 0;
- while (length --)
- peak = FMAX (peak, * data ++);
+ float * end = data + length;
+ while (data < end)
+ sum += fabsf (* data ++);
- return peak;
+ return sum / length * 6;
}
static void do_ramp (float * data, int length, float peak_a, float peak_b)
{
- float a = powf (peak_a / compressor_target, compressor_range - 1);
- float b = powf (peak_b / compressor_target, compressor_range - 1);
+ float a = powf (peak_a / compressor_center, compressor_range - 1);
+ float b = powf (peak_b / compressor_center, compressor_range - 1);
int count;
for (count = 0; count < length; count ++)
@@ -111,6 +116,11 @@ static void reset (void)
#define IN_RING(i) ((ring_at + i) % CHUNKS)
#define GET_PEAK(i) peaks[IN_RING (i)]
+static inline float FMAX (float a, float b)
+{
+ return a > b ? a : b;
+}
+
static void do_compress (float * * data, int * samples, char finish)
{
int count;
@@ -175,7 +185,7 @@ static void do_compress (float * * data, int * samples, char finish)
* samples = output_filled;
}
-void compressor_init (void)
+int compressor_init (void)
{
compressor_config_load ();
@@ -183,6 +193,8 @@ void compressor_init (void)
output = NULL;
output_size = 0;
peaks = NULL;
+
+ return 1;
}
void compressor_cleanup (void)
diff --git a/src/compressor/compressor.h b/src/compressor/compressor.h
index 0312508..e0b4015 100644
--- a/src/compressor/compressor.h
+++ b/src/compressor/compressor.h
@@ -17,12 +17,12 @@
* the use of this software.
*/
-extern float compressor_target, compressor_range;
+extern double compressor_center, compressor_range;
void compressor_config_load (void);
void compressor_config_save (void);
-void compressor_init (void);
+int compressor_init (void);
void compressor_cleanup (void);
void compressor_start (int * channels, int * rate);
void compressor_process (float * * data, int * samples);
diff --git a/src/compressor/plugin.c b/src/compressor/plugin.c
index 975fcdb..a2ddedd 100644
--- a/src/compressor/plugin.c
+++ b/src/compressor/plugin.c
@@ -21,40 +21,48 @@
#include "config.h"
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
#include "compressor.h"
-void compressor_config_load (void)
-{
- mcs_handle_t * database = aud_cfg_db_open ();
+/* What is a "normal" volume? Replay Gain stuff claims to use 89 dB, but what
+ * does that translate to in our PCM range? Does anybody even know? */
+static const gchar * const compressor_defaults[] = {
+ "center", "0.5",
+ "range", "0.5",
+ NULL};
- aud_cfg_db_get_float (database, "compressor", "target", & compressor_target);
- aud_cfg_db_get_float (database, "compressor", "range", & compressor_range);
+static GtkWidget * about_window = NULL;
+static GtkWidget * config_window = NULL;
- aud_cfg_db_close (database);
+void compressor_config_load (void)
+{
+ aud_config_set_defaults ("compressor", compressor_defaults);
+ compressor_center = aud_get_double ("compressor", "center");
+ compressor_range = aud_get_double ("compressor", "range");
}
void compressor_config_save (void)
{
- mcs_handle_t * database = aud_cfg_db_open ();
-
- aud_cfg_db_set_float (database, "compressor", "target", compressor_target);
- aud_cfg_db_set_float (database, "compressor", "range", compressor_range);
+ if (about_window != NULL)
+ gtk_widget_destroy (about_window);
+ if (config_window != NULL)
+ gtk_widget_destroy (config_window);
- aud_cfg_db_close (database);
+ aud_set_double ("compressor", "center", compressor_center);
+ aud_set_double ("compressor", "range", compressor_range);
}
static void compressor_about (void)
{
- static GtkWidget * window = NULL;
-
- audgui_simple_message (& window, GTK_MESSAGE_INFO, _("About Dynamic Range "
- "Compression Plugin"), "Dynamic Range Compression Plugin for Audacious\n"
+ audgui_simple_message (& about_window, GTK_MESSAGE_INFO, _("About Dynamic "
+ "Range Compression Plugin"),
+ "Dynamic Range Compression Plugin for Audacious\n"
"Copyright 2010 John Lindgren\n\n"
"Redistribution and use in source and binary forms, with or without "
"modification, are permitted provided that the following conditions are "
@@ -71,42 +79,40 @@ static void compressor_about (void)
static void value_changed (GtkRange * range, void * data)
{
- * (float *) data = gtk_range_get_value (range);
+ * (double *) data = gtk_range_get_value (range);
}
static void compressor_configure (void)
{
- static GtkWidget * window = NULL;
-
- if (window == NULL)
+ if (config_window == NULL)
{
GtkWidget * vbox, * hbox, * slider, * button;
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint ((GtkWindow *) window,
+ config_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint ((GtkWindow *) config_window,
GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_window_set_resizable ((GtkWindow *) window, FALSE);
- gtk_window_set_title ((GtkWindow *) window, _("Dynamic Range "
+ gtk_window_set_resizable ((GtkWindow *) config_window, FALSE);
+ gtk_window_set_title ((GtkWindow *) config_window, _("Dynamic Range "
"Compressor Preferences"));
- gtk_container_set_border_width ((GtkContainer *) window, 6);
- g_signal_connect (window, "destroy", (GCallback) gtk_widget_destroyed,
- & window);
+ gtk_container_set_border_width ((GtkContainer *) config_window, 6);
+ g_signal_connect (config_window, "destroy", (GCallback)
+ gtk_widget_destroyed, & config_window);
vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_add ((GtkContainer *) window, vbox);
+ gtk_container_add ((GtkContainer *) config_window, vbox);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
- gtk_box_pack_start ((GtkBox *) hbox, gtk_label_new (_("Target "
+ gtk_box_pack_start ((GtkBox *) hbox, gtk_label_new (_("Center "
"volume:")), FALSE, FALSE, 0);
slider = gtk_hscale_new_with_range (0.1, 1.0, 0.1);
- gtk_range_set_value ((GtkRange *) slider, compressor_target);
+ gtk_range_set_value ((GtkRange *) slider, compressor_center);
gtk_widget_set_size_request (slider, 100, -1);
gtk_box_pack_start ((GtkBox *) hbox, slider, FALSE, FALSE, 0);
g_signal_connect (slider, "value-changed", (GCallback) value_changed,
- & compressor_target);
+ & compressor_center);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
@@ -126,24 +132,22 @@ static void compressor_configure (void)
button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0);
-#if GTK_CHECK_VERSION (2, 18, 0)
gtk_widget_set_can_default (button, TRUE);
-#endif
gtk_widget_grab_default (button);
g_signal_connect_swapped (button, "clicked", (GCallback)
- gtk_widget_destroy, window);
+ gtk_widget_destroy, config_window);
- audgui_destroy_on_escape (window);
+ audgui_destroy_on_escape (config_window);
gtk_widget_show_all (vbox);
}
- gtk_window_present ((GtkWindow *) window);
+ gtk_window_present ((GtkWindow *) config_window);
}
-EffectPlugin compressor_plugin =
-{
- .description = "Dynamic Range Compressor",
+AUD_EFFECT_PLUGIN
+(
+ .name = "Dynamic Range Compressor",
.init = compressor_init,
.cleanup = compressor_cleanup,
.about = compressor_about,
@@ -155,8 +159,4 @@ EffectPlugin compressor_plugin =
.decoder_to_output_time = compressor_decoder_to_output_time,
.output_to_decoder_time = compressor_output_to_decoder_time,
.preserves_format = TRUE,
-};
-
-EffectPlugin * compressor_list[] = {& compressor_plugin, NULL};
-
-SIMPLE_EFFECT_PLUGIN (compressor, compressor_list)
+)
diff --git a/src/console/Audacious_Driver.cxx b/src/console/Audacious_Driver.cxx
index d95ad0e..548d76e 100644
--- a/src/console/Audacious_Driver.cxx
+++ b/src/console/Audacious_Driver.cxx
@@ -8,6 +8,7 @@
#include "config.h"
#include <math.h>
+#include <string.h>
extern "C" {
#include <libaudcore/audstrings.h>
@@ -21,6 +22,7 @@ extern "C" {
static GMutex *seek_mutex = NULL;
static GCond *seek_cond = NULL;
static gint seek_value = -1;
+static gboolean stop_flag = FALSE;
static const gint fade_threshold = 10 * 1000;
static const gint fade_length = 8 * 1000;
@@ -71,9 +73,9 @@ ConsoleFileHandler::ConsoleFileHandler(const gchar *path, VFSFile *fd)
m_type = 0;
m_track = -1;
- m_path = filename_split_subtune(path, &m_track);
- if (m_path == NULL)
- return;
+ const gchar * sub;
+ uri_parse (path, NULL, NULL, & sub, & m_track);
+ m_path = g_strndup (path, sub - path);
m_track -= 1;
@@ -158,26 +160,24 @@ static Tuple * get_track_ti(const gchar *path, const track_info_t *info, const g
if (ti != NULL)
{
gint length;
- tuple_associate_string(ti, FIELD_ARTIST, NULL, info->author);
- tuple_associate_string(ti, FIELD_ALBUM, NULL, info->game);
- tuple_associate_string(ti, -1, "game", info->game);
- tuple_associate_string(ti, FIELD_TITLE, NULL, info->song ? info->song : g_path_get_basename(path));
- tuple_associate_string(ti, FIELD_COPYRIGHT, NULL, info->copyright);
- tuple_associate_string(ti, -1, "console", info->system);
- tuple_associate_string(ti, FIELD_CODEC, NULL, info->system);
- tuple_associate_string(ti, FIELD_QUALITY, NULL, "sequenced");
- tuple_associate_string(ti, -1, "dumper", info->dumper);
- tuple_associate_string(ti, FIELD_COMMENT, NULL, info->comment);
+ tuple_set_str(ti, FIELD_ARTIST, NULL, info->author);
+ tuple_set_str(ti, FIELD_ALBUM, NULL, info->game);
+ tuple_set_str(ti, -1, "game", info->game);
+ tuple_set_str(ti, FIELD_TITLE, NULL, (info->song && info->song[0]) ? info->song : g_path_get_basename(path));
+ tuple_set_str(ti, FIELD_COPYRIGHT, NULL, info->copyright);
+ tuple_set_str(ti, -1, "console", info->system);
+ tuple_set_str(ti, FIELD_CODEC, NULL, info->system);
+ tuple_set_str(ti, FIELD_QUALITY, NULL, "sequenced");
+ tuple_set_str(ti, -1, "dumper", info->dumper);
+ tuple_set_str(ti, FIELD_COMMENT, NULL, info->comment);
if (track >= 0)
{
- tuple_associate_int(ti, FIELD_TRACK_NUMBER, NULL, track + 1);
- tuple_associate_int(ti, FIELD_SUBSONG_ID, NULL, track + 1);
- tuple_associate_int(ti, FIELD_SUBSONG_NUM, NULL, info->track_count);
+ tuple_set_int(ti, FIELD_TRACK_NUMBER, NULL, track + 1);
+ tuple_set_int(ti, FIELD_SUBSONG_ID, NULL, track + 1);
+ tuple_set_int(ti, FIELD_SUBSONG_NUM, NULL, info->track_count);
}
else
- {
- ti->nsubtunes = info->track_count;
- }
+ tuple_set_subtunes (ti, info->track_count, NULL);
length = info->length;
if (length <= 0)
@@ -186,7 +186,7 @@ static Tuple * get_track_ti(const gchar *path, const track_info_t *info, const g
length = audcfg.loop_length * 1000;
else if (length >= fade_threshold)
length += fade_length;
- tuple_associate_int(ti, FIELD_LENGTH, NULL, length);
+ tuple_set_int(ti, FIELD_LENGTH, NULL, length);
}
return ti;
@@ -209,32 +209,17 @@ extern "C" Tuple * console_probe_for_tuple(const gchar *filename, VFSFile *fd)
return NULL;
}
-extern "C" Tuple * console_get_file_tuple(const gchar *filename)
-{
- ConsoleFileHandler fh(filename);
-
- if (!fh.m_type)
- return NULL;
-
- if (!fh.load(gme_info_only))
- {
- track_info_t info;
- if (!log_err(fh.m_emu->track_info(&info, fh.m_track < 0 ? 0 : fh.m_track)))
- return get_track_ti(fh.m_path, &info, fh.m_track);
- }
-
- return NULL;
-}
-
-extern "C" void console_play_file(InputPlayback *playback)
+extern "C" gboolean console_play(InputPlayback *playback, const gchar *filename,
+ VFSFile *file, gint start_time, gint stop_time, gboolean pause)
{
gint length, end_delay, sample_rate;
track_info_t info;
+ gboolean error = FALSE;
// identify file
- ConsoleFileHandler fh(playback->filename);
+ ConsoleFileHandler fh(filename);
if (!fh.m_type)
- return;
+ return FALSE;
if (fh.m_track < 0)
fh.m_track = 0;
@@ -250,7 +235,7 @@ extern "C" void console_play_file(InputPlayback *playback)
// create emulator and load file
if (fh.load(sample_rate))
- return;
+ return FALSE;
// stereo echo depth
gme_set_stereo_depth(fh.m_emu, 1.0 / 100 * audcfg.echo);
@@ -282,19 +267,22 @@ extern "C" void console_play_file(InputPlayback *playback)
if (ti != NULL)
{
length = tuple_get_int(ti, FIELD_LENGTH, NULL);
- tuple_free(ti);
- playback->set_params(playback, NULL, 0, fh.m_emu->voice_count() * 1000, sample_rate, 2);
+ tuple_unref(ti);
+ playback->set_params(playback, fh.m_emu->voice_count() * 1000, sample_rate, 2);
}
}
// start track
if (log_err(fh.m_emu->start_track(fh.m_track)))
- return;
+ return FALSE;
log_warning(fh.m_emu);
if (!playback->output->open_audio(FMT_S16_NE, sample_rate, 2))
- return;
+ return FALSE;
+
+ if (pause)
+ playback->output->pause(TRUE);
// set fade time
if (length <= 0)
@@ -303,18 +291,18 @@ extern "C" void console_play_file(InputPlayback *playback)
length -= fade_length / 2;
fh.m_emu->set_fade(length, fade_length);
- playback->playing = 1;
+ stop_flag = FALSE;
end_delay = 0;
playback->set_pb_ready(playback);
- while (playback->playing)
+ while (!stop_flag)
{
/* Perform seek, if requested */
g_mutex_lock(seek_mutex);
if (seek_value >= 0)
{
- playback->output->flush(seek_value * 1000);
- fh.m_emu->seek(seek_value * 1000);
+ playback->output->flush(seek_value);
+ fh.m_emu->seek(seek_value);
seek_value = -1;
g_cond_signal(seek_cond);
}
@@ -327,7 +315,7 @@ extern "C" void console_play_file(InputPlayback *playback)
{
// TODO: remove delay once host doesn't cut the end of track off
if (!--end_delay)
- playback->playing = 0;
+ stop_flag = TRUE;
memset(buf, 0, sizeof(buf));
}
else
@@ -344,32 +332,56 @@ extern "C" void console_play_file(InputPlayback *playback)
// stop playing
playback->output->close_audio();
- playback->playing = 0;
+ stop_flag = TRUE;
+
+ return !error;
}
-extern "C" void console_seek(InputPlayback *data, gint time)
+extern "C" void console_seek(InputPlayback *playback, gint time)
{
g_mutex_lock(seek_mutex);
- seek_value = time;
- g_cond_wait(seek_cond, seek_mutex);
+
+ if (!stop_flag)
+ {
+ seek_value = time;
+ playback->output->abort_write();
+ g_cond_signal(seek_cond);
+ g_cond_wait(seek_cond, seek_mutex);
+ }
+
g_mutex_unlock(seek_mutex);
}
extern "C" void console_stop(InputPlayback *playback)
{
- playback->playing = 0;
+ g_mutex_lock(seek_mutex);
+
+ if (!stop_flag)
+ {
+ stop_flag = TRUE;
+ playback->output->abort_write();
+ g_cond_signal(seek_cond);
+ }
+
+ g_mutex_unlock (seek_mutex);
}
-extern "C" void console_pause(InputPlayback * playback, gshort p)
+extern "C" void console_pause(InputPlayback * playback, gboolean pause)
{
- playback->output->pause(p);
+ g_mutex_lock(seek_mutex);
+
+ if (!stop_flag)
+ playback->output->pause(pause);
+
+ g_mutex_unlock(seek_mutex);
}
-extern "C" void console_init(void)
+extern "C" gboolean console_init (void)
{
console_cfg_load();
seek_mutex = g_mutex_new();
seek_cond = g_cond_new();
+ return TRUE;
}
extern "C" void console_cleanup(void)
diff --git a/src/console/Ay_Apu.cxx b/src/console/Ay_Apu.cxx
index 9dc5bb2..8204abf 100644
--- a/src/console/Ay_Apu.cxx
+++ b/src/console/Ay_Apu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Ay_Apu.h"
@@ -123,8 +123,8 @@ void Ay_Apu::write_data_( int addr, int data )
if ( (unsigned) addr >= 14 )
{
- #ifdef dprintf
- dprintf( "Wrote to I/O port %02X\n", (int) addr );
+ #ifdef debug_printf
+ debug_printf( "Wrote to I/O port %02X\n", (int) addr );
#endif
}
@@ -220,7 +220,7 @@ void Ay_Apu::run_until( blip_time_t final_end_time )
end_time = final_end_time;
//if ( !(regs [12] | regs [11]) )
- // dprintf( "Used envelope period 0\n" );
+ // debug_printf( "Used envelope period 0\n" );
}
else if ( !volume )
{
@@ -250,7 +250,7 @@ void Ay_Apu::run_until( blip_time_t final_end_time )
ntime = start_time + old_noise_delay;
noise_lfsr = old_noise_lfsr;
//if ( (regs [6] & 0x1F) == 0 )
- // dprintf( "Used noise period 0\n" );
+ // debug_printf( "Used noise period 0\n" );
}
// The following efficiently handles several cases (least demanding first):
diff --git a/src/console/Ay_Apu.h b/src/console/Ay_Apu.h
index 3195693..42395e3 100644
--- a/src/console/Ay_Apu.h
+++ b/src/console/Ay_Apu.h
@@ -1,6 +1,6 @@
// AY-3-8910 sound chip emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef AY_APU_H
#define AY_APU_H
diff --git a/src/console/Ay_Cpu.cxx b/src/console/Ay_Cpu.cxx
index 6ff7156..1598d01 100644
--- a/src/console/Ay_Cpu.cxx
+++ b/src/console/Ay_Cpu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
/*
Last validated with zexall 2006.11.21 5:26 PM
@@ -805,8 +805,6 @@ possibly_out_of_time:
//////////////////////////////////////// CB prefix
{
case 0xCB:
- unsigned data2;
- data2 = INSTR( 1 );
pc++;
switch ( data )
{
@@ -1252,7 +1250,7 @@ possibly_out_of_time:
case 0x4F: // LD R,A
SET_R( rg.a );
- dprintf( "LD R,A not supported\n" );
+ debug_printf( "LD R,A not supported\n" );
warning = true;
goto loop;
@@ -1262,7 +1260,7 @@ possibly_out_of_time:
case 0x5F: // LD A,R
rg.a = GET_R();
- dprintf( "LD A,R not supported\n" );
+ debug_printf( "LD A,R not supported\n" );
warning = true;
ld_ai_common:
flags = (flags & C01) | SZ28( rg.a ) | (r.iff2 << 2 & V04);
@@ -1285,7 +1283,7 @@ possibly_out_of_time:
goto loop;
default:
- dprintf( "Opcode $ED $%02X not supported\n", data );
+ debug_printf( "Opcode $ED $%02X not supported\n", data );
warning = true;
goto loop;
}
@@ -1545,7 +1543,7 @@ possibly_out_of_time:
}
default:
- dprintf( "Opcode $%02X $CB $%02X not supported\n", opcode, data2 );
+ debug_printf( "Opcode $%02X $CB $%02X not supported\n", opcode, data2 );
warning = true;
goto loop;
}
@@ -1634,7 +1632,7 @@ possibly_out_of_time:
}
default:
- dprintf( "Unnecessary DD/FD prefix encountered\n" );
+ debug_printf( "Unnecessary DD/FD prefix encountered\n" );
warning = true;
pc--;
goto loop;
@@ -1643,7 +1641,7 @@ possibly_out_of_time:
}
}
- dprintf( "Unhandled main opcode: $%02X\n", opcode );
+ debug_printf( "Unhandled main opcode: $%02X\n", opcode );
assert( false );
halt:
diff --git a/src/console/Ay_Cpu.h b/src/console/Ay_Cpu.h
index 07241d5..2f4d351 100644
--- a/src/console/Ay_Cpu.h
+++ b/src/console/Ay_Cpu.h
@@ -1,6 +1,6 @@
// Z80 CPU emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef AY_CPU_H
#define AY_CPU_H
diff --git a/src/console/Ay_Emu.cxx b/src/console/Ay_Emu.cxx
index fbaa4d2..0ee592e 100644
--- a/src/console/Ay_Emu.cxx
+++ b/src/console/Ay_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Ay_Emu.h"
@@ -116,7 +116,8 @@ struct Ay_File : Gme_Info_
static Music_Emu* new_ay_emu () { return BLARGG_NEW Ay_Emu ; }
static Music_Emu* new_ay_file() { return BLARGG_NEW Ay_File; }
-gme_type_t_ const gme_ay_type [1] = {{ "ZX Spectrum", 0, &new_ay_emu, &new_ay_file, "AY", 1 }};
+static gme_type_t_ const gme_ay_type_ = { "ZX Spectrum", 0, &new_ay_emu, &new_ay_file, "AY", 1 };
+gme_type_t const gme_ay_type = &gme_ay_type_;
// Setup
@@ -208,9 +209,9 @@ blargg_err_t Ay_Emu::start_track_( int track )
set_warning( "Missing file data" );
len = file.end - in;
}
- //dprintf( "addr: $%04X, len: $%04X\n", addr, len );
+ //debug_printf( "addr: $%04X, len: $%04X\n", addr, len );
if ( addr < ram_start && addr >= 0x400 ) // several tracks use low data
- dprintf( "Block addr in ROM\n" );
+ debug_printf( "Block addr in ROM\n" );
memcpy( mem.ram + addr, in, len );
if ( file.end - blocks < 8 )
@@ -241,7 +242,7 @@ blargg_err_t Ay_Emu::start_track_( int track )
};
memcpy( mem.ram, passive, sizeof passive );
unsigned play_addr = get_be16( more_data + 4 );
- //dprintf( "Play: $%04X\n", play_addr );
+ //debug_printf( "Play: $%04X\n", play_addr );
if ( play_addr )
{
memcpy( mem.ram, active, sizeof active );
@@ -314,7 +315,7 @@ void Ay_Emu::cpu_out_misc( cpu_time_t time, unsigned addr, int data )
}
}
- dprintf( "Unmapped OUT: $%04X <- $%02X\n", addr, data );
+ debug_printf( "Unmapped OUT: $%04X <- $%02X\n", addr, data );
return;
enable_cpc:
@@ -355,7 +356,7 @@ int ay_cpu_in( Ay_Cpu*, unsigned addr )
if ( (addr & 0xFF) == 0xFE )
return 0xFF; // other values break some beeper tunes
- dprintf( "Unmapped IN : $%04X\n", addr );
+ debug_printf( "Unmapped IN : $%04X\n", addr );
return 0xFF;
}
@@ -367,7 +368,7 @@ blargg_err_t Ay_Emu::run_clocks( blip_time_t& duration, int )
while ( time() < duration )
{
- cpu::run( min( duration, next_play ) );
+ cpu::run( min( duration, (blip_time_t) next_play ) );
if ( time() >= next_play )
{
@@ -380,8 +381,8 @@ blargg_err_t Ay_Emu::run_clocks( blip_time_t& duration, int )
r.iff1 = r.iff2 = 0;
- mem.ram [--r.sp] = r.pc >> 8;
- mem.ram [--r.sp] = r.pc;
+ mem.ram [--r.sp] = uint8_t (r.pc >> 8);
+ mem.ram [--r.sp] = uint8_t (r.pc);
r.pc = 0x38;
cpu::adjust_time( 12 );
if ( r.im == 2 )
diff --git a/src/console/Ay_Emu.h b/src/console/Ay_Emu.h
index ba8445d..8cd2231 100644
--- a/src/console/Ay_Emu.h
+++ b/src/console/Ay_Emu.h
@@ -1,6 +1,6 @@
// Sinclair Spectrum AY music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef AY_EMU_H
#define AY_EMU_H
diff --git a/src/console/Blip_Buffer.cxx b/src/console/Blip_Buffer.cxx
index 710bf0d..2b88cd4 100644
--- a/src/console/Blip_Buffer.cxx
+++ b/src/console/Blip_Buffer.cxx
@@ -27,7 +27,7 @@ int const silent_buf_size = 1; // size used for Silent_Blip_Buffer
Blip_Buffer::Blip_Buffer()
{
- factor_ = UINT_MAX;
+ factor_ = (blip_ulong)-1 / 2;
offset_ = 0;
buffer_ = 0;
buffer_size_ = 0;
@@ -85,7 +85,7 @@ Blip_Buffer::blargg_err_t Blip_Buffer::set_sample_rate( long new_rate, int msec
}
// start with maximum length that resampled time can represent
- long new_size = (ULONG_MAX >> BLIP_BUFFER_ACCURACY) - blip_buffer_extra_ - 64;
+ long new_size = (UINT_MAX >> BLIP_BUFFER_ACCURACY) - blip_buffer_extra_ - 64;
if ( msec != blip_max_length )
{
long s = (new_rate * (msec + 1) + 999) / 1000;
@@ -233,18 +233,32 @@ static void gen_sinc( float* out, int count, double oversample, double treble, d
double const to_angle = PI / 2 / maxh / oversample;
for ( int i = 0; i < count; i++ )
{
- double angle = ((i - count) * 2 + 1) * to_angle;
- double c = rolloff * cos( (maxh - 1.0) * angle ) - cos( maxh * angle );
- double cos_nc_angle = cos( maxh * cutoff * angle );
- double cos_nc1_angle = cos( (maxh * cutoff - 1.0) * angle );
- double cos_angle = cos( angle );
+ double angle = ((i - count) * 2 + 1) * to_angle;
+ double angle_maxh = angle * maxh;
+ double angle_maxh_mid = angle_maxh * cutoff;
- c = c * pow_a_n - rolloff * cos_nc1_angle + cos_nc_angle;
- double d = 1.0 + rolloff * (rolloff - cos_angle - cos_angle);
- double b = 2.0 - cos_angle - cos_angle;
- double a = 1.0 - cos_angle - cos_nc_angle + cos_nc1_angle;
+ double y = maxh;
- out [i] = (float) ((a * d + c * b) / (b * d)); // a / b + c / d
+ // 0 to Fs/2*cutoff, flat
+ if ( angle_maxh_mid ) // unstable at t=0
+ y *= sin( angle_maxh_mid ) / angle_maxh_mid;
+
+ // Fs/2*cutoff to Fs/2, logarithmic rolloff
+ double cosa = cos( angle );
+ double den = 1 + rolloff * (rolloff - cosa - cosa);
+
+ // Becomes unstable when rolloff is near 1.0 and t is near 0,
+ // which is the only time den becomes small
+ if ( den > 1e-13 )
+ {
+ double num =
+ (cos( angle_maxh - angle ) * rolloff - cos( angle_maxh )) * pow_a_n -
+ cos( angle_maxh_mid - angle ) * rolloff + cos( angle_maxh_mid );
+
+ y = y * cutoff + num / den;
+ }
+
+ out [i] = (float) y;
}
}
@@ -263,7 +277,7 @@ void blip_eq_t::generate( float* out, int count ) const
// apply (half of) hamming window
double to_fraction = PI / (count - 1);
for ( int i = count; i--; )
- out [i] *= 0.54 - 0.46 * cos( i * to_fraction );
+ out [i] *= 0.54f - 0.46f * (float) cos( i * to_fraction );
}
void Blip_Synth_::adjust_impulse()
@@ -281,7 +295,7 @@ void Blip_Synth_::adjust_impulse()
}
if ( p == p2 )
error /= 2; // phase = 0.5 impulse uses same half for both sides
- impulses [size - blip_res + p] += error;
+ impulses [size - blip_res + p] += (short) error;
//printf( "error: %ld\n", error );
}
diff --git a/src/console/Blip_Buffer.h b/src/console/Blip_Buffer.h
index deaa2e1..4cc526d 100644
--- a/src/console/Blip_Buffer.h
+++ b/src/console/Blip_Buffer.h
@@ -6,13 +6,12 @@
// internal
#include <limits.h>
- #if INT_MAX >= 0x7FFFFFFF
- typedef int blip_long;
- typedef unsigned int blip_ulong;
- #else
- typedef long blip_long;
- typedef unsigned long blip_ulong;
+ #if INT_MAX < 0x7FFFFFFF
+ #error "int must be at least 32 bits"
#endif
+
+ typedef int blip_long;
+ typedef unsigned blip_ulong;
// Time unit at source clock rate
typedef blip_long blip_time_t;
@@ -121,7 +120,9 @@ private:
friend class Blip_Reader;
};
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+ #include "config.h"
+#endif
// Number of bits in resample ratio fraction. Higher values give a more accurate ratio
// but reduce maximum buffer size.
diff --git a/src/console/Classic_Emu.cxx b/src/console/Classic_Emu.cxx
index 063444f..9b68a44 100644
--- a/src/console/Classic_Emu.cxx
+++ b/src/console/Classic_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Classic_Emu.h"
@@ -40,7 +40,7 @@ void Classic_Emu::set_equalizer_( equalizer_t const& eq )
Music_Emu::set_equalizer_( eq );
update_eq( eq.treble );
if ( buf )
- buf->bass_freq( equalizer().bass );
+ buf->bass_freq( (int) equalizer().bass );
}
blargg_err_t Classic_Emu::set_sample_rate_( long rate )
@@ -176,9 +176,9 @@ void Rom_Data_::set_addr_( long addr, int unit )
if ( 0 )
{
- dprintf( "addr: %X\n", addr );
- dprintf( "file_size: %d\n", file_size_ );
- dprintf( "rounded: %d\n", rounded );
- dprintf( "mask: $%X\n", mask );
+ debug_printf( "addr: %X\n", addr );
+ debug_printf( "file_size: %d\n", file_size_ );
+ debug_printf( "rounded: %d\n", rounded );
+ debug_printf( "mask: $%X\n", mask );
}
}
diff --git a/src/console/Classic_Emu.h b/src/console/Classic_Emu.h
index 8cd822c..d0cfda2 100644
--- a/src/console/Classic_Emu.h
+++ b/src/console/Classic_Emu.h
@@ -1,6 +1,6 @@
// Common aspects of emulators which use Blip_Buffer for sound output
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef CLASSIC_EMU_H
#define CLASSIC_EMU_H
diff --git a/src/console/Data_Reader.cxx b/src/console/Data_Reader.cxx
index 196e0b4..5bbfbf5 100644
--- a/src/console/Data_Reader.cxx
+++ b/src/console/Data_Reader.cxx
@@ -122,7 +122,7 @@ blargg_err_t Remaining_Reader::read( void* out, long count )
{
long first = read_first( out, count );
long second = count - first;
- if ( second <= 0 )
+ if ( !second )
return 0;
return in->read( (char*) out + first, second );
}
diff --git a/src/console/Data_Reader.h b/src/console/Data_Reader.h
index 00b53b9..acf571f 100644
--- a/src/console/Data_Reader.h
+++ b/src/console/Data_Reader.h
@@ -116,7 +116,7 @@ private:
// Invokes callback function to read data. Size of data must be specified in advance.
class Callback_Reader : public Data_Reader {
public:
- typedef const char* (*callback_t)( void* data, void* out, long count );
+ typedef const char* (*callback_t)( void* data, void* out, int count );
Callback_Reader( callback_t, long size, void* data = 0 );
public:
long read_avail( void*, long );
diff --git a/src/console/Dual_Resampler.cxx b/src/console/Dual_Resampler.cxx
index 8644517..090b0ac 100644
--- a/src/console/Dual_Resampler.cxx
+++ b/src/console/Dual_Resampler.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Dual_Resampler.h"
diff --git a/src/console/Dual_Resampler.h b/src/console/Dual_Resampler.h
index 61beb8a..e3194fe 100644
--- a/src/console/Dual_Resampler.h
+++ b/src/console/Dual_Resampler.h
@@ -1,6 +1,6 @@
// Combination of Fir_Resampler and Blip_Buffer mixing. Used by Sega FM emulators.
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef DUAL_RESAMPLER_H
#define DUAL_RESAMPLER_H
diff --git a/src/console/Effects_Buffer.cxx b/src/console/Effects_Buffer.cxx
index e1953dc..181b11e 100644
--- a/src/console/Effects_Buffer.cxx
+++ b/src/console/Effects_Buffer.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Effects_Buffer.h"
@@ -415,8 +415,8 @@ void Effects_Buffer::mix_mono_enhanced( blip_sample_t* out_, blargg_long count )
reverb_buf [(reverb_pos + chans.reverb_delay_r) & reverb_mask];
fixed_t reverb_level = chans.reverb_level;
- reverb_buf [reverb_pos] = FMUL( new_reverb_l, reverb_level );
- reverb_buf [reverb_pos + 1] = FMUL( new_reverb_r, reverb_level );
+ reverb_buf [reverb_pos] = (blip_sample_t) FMUL( new_reverb_l, reverb_level );
+ reverb_buf [reverb_pos + 1] = (blip_sample_t) FMUL( new_reverb_r, reverb_level );
reverb_pos = (reverb_pos + 2) & reverb_mask;
int sum3_s = BLIP_READER_READ( center );
@@ -486,8 +486,8 @@ void Effects_Buffer::mix_enhanced( blip_sample_t* out_, blargg_long count )
BLIP_READER_NEXT( r1, bass );
fixed_t reverb_level = chans.reverb_level;
- reverb_buf [reverb_pos] = FMUL( new_reverb_l, reverb_level );
- reverb_buf [reverb_pos + 1] = FMUL( new_reverb_r, reverb_level );
+ reverb_buf [reverb_pos] = (blip_sample_t) FMUL( new_reverb_l, reverb_level );
+ reverb_buf [reverb_pos + 1] = (blip_sample_t) FMUL( new_reverb_r, reverb_level );
reverb_pos = (reverb_pos + 2) & reverb_mask;
int sum3_s = BLIP_READER_READ( center );
diff --git a/src/console/Effects_Buffer.h b/src/console/Effects_Buffer.h
index eb0aa67..061f74a 100644
--- a/src/console/Effects_Buffer.h
+++ b/src/console/Effects_Buffer.h
@@ -1,6 +1,6 @@
// Multi-channel effects buffer with panning, echo and reverb
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef EFFECTS_BUFFER_H
#define EFFECTS_BUFFER_H
diff --git a/src/console/Fir_Resampler.cxx b/src/console/Fir_Resampler.cxx
index 4e0a463..f2c905a 100644
--- a/src/console/Fir_Resampler.cxx
+++ b/src/console/Fir_Resampler.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Fir_Resampler.h"
diff --git a/src/console/Fir_Resampler.h b/src/console/Fir_Resampler.h
index 339dfce..aed8749 100644
--- a/src/console/Fir_Resampler.h
+++ b/src/console/Fir_Resampler.h
@@ -1,6 +1,6 @@
// Finite impulse response (FIR) resampler with adjustable FIR size
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef FIR_RESAMPLER_H
#define FIR_RESAMPLER_H
diff --git a/src/console/Gb_Apu.cxx b/src/console/Gb_Apu.cxx
index 932ebb8..866594d 100644
--- a/src/console/Gb_Apu.cxx
+++ b/src/console/Gb_Apu.cxx
@@ -271,7 +271,7 @@ void Gb_Apu::write_register( blip_time_t time, unsigned addr, int data )
}
else
{
- //dprintf( "APU powered on\n" );
+ //debug_printf( "APU powered on\n" );
}
}
}
diff --git a/src/console/Gb_Cpu.cxx b/src/console/Gb_Cpu.cxx
index b1f22bd..6980aaf 100644
--- a/src/console/Gb_Cpu.cxx
+++ b/src/console/Gb_Cpu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Gb_Cpu.h"
diff --git a/src/console/Gb_Cpu.h b/src/console/Gb_Cpu.h
index 953fbaf..9d623e0 100644
--- a/src/console/Gb_Cpu.h
+++ b/src/console/Gb_Cpu.h
@@ -1,7 +1,7 @@
// Nintendo Game Boy CPU emulator
// Treats every instruction as taking 4 cycles
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef GB_CPU_H
#define GB_CPU_H
diff --git a/src/console/Gb_Oscs.h b/src/console/Gb_Oscs.h
index c44933e..d7f88ea 100644
--- a/src/console/Gb_Oscs.h
+++ b/src/console/Gb_Oscs.h
@@ -21,7 +21,7 @@ struct Gb_Osc
int last_amp;
int volume;
int length;
- bool enabled;
+ int enabled;
void reset();
void clock_length();
diff --git a/src/console/Gbs_Emu.cxx b/src/console/Gbs_Emu.cxx
index c7ec224..c3a0153 100644
--- a/src/console/Gbs_Emu.cxx
+++ b/src/console/Gbs_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Gbs_Emu.h"
@@ -99,7 +99,8 @@ struct Gbs_File : Gme_Info_
static Music_Emu* new_gbs_emu () { return BLARGG_NEW Gbs_Emu ; }
static Music_Emu* new_gbs_file() { return BLARGG_NEW Gbs_File; }
-gme_type_t_ const gme_gbs_type [1] = {{ "Game Boy", 0, &new_gbs_emu, &new_gbs_file, "GBS", 1 }};
+static gme_type_t_ const gme_gbs_type_ = { "Game Boy", 0, &new_gbs_emu, &new_gbs_file, "GBS", 1 };
+gme_type_t const gme_gbs_type = &gme_gbs_type_;
// Setup
@@ -150,7 +151,7 @@ void Gbs_Emu::set_bank( int n )
{
// TODO: what is the correct behavior? Current Game & Watch Gallery
// rip requires that this have no effect or set to bank 1.
- //dprintf( "Selected ROM bank 0\n" );
+ //debug_printf( "Selected ROM bank 0\n" );
return;
//n = 1;
}
@@ -211,11 +212,11 @@ blargg_err_t Gbs_Emu::start_track_( int track )
for ( int i = 0; i < (int) sizeof sound_data; i++ )
apu.write_register( 0, i + apu.start_addr, sound_data [i] );
- cpu::reset( rom.unmapped() );
-
unsigned load_addr = get_le16( header_.load_addr );
- cpu::rst_base = load_addr;
rom.set_addr( load_addr );
+ cpu::rst_base = load_addr;
+
+ cpu::reset( rom.unmapped() );
cpu::map_code( ram_addr, 0x10000 - ram_addr, ram );
cpu::map_code( 0, bank_size, rom.at_addr( 0 ) );
@@ -264,13 +265,13 @@ blargg_err_t Gbs_Emu::run_clocks( blip_time_t& duration, int )
}
else if ( cpu::r.pc > 0xFFFF )
{
- dprintf( "PC wrapped around\n" );
+ debug_printf( "PC wrapped around\n" );
cpu::r.pc &= 0xFFFF;
}
else
{
set_warning( "Emulation error (illegal/unsupported instruction)" );
- dprintf( "Bad opcode $%.2x at $%.4x\n",
+ debug_printf( "Bad opcode $%.2x at $%.4x\n",
(int) *cpu::get_code( cpu::r.pc ), (int) cpu::r.pc );
cpu::r.pc = (cpu::r.pc + 1) & 0xFFFF;
cpu_time += 6;
diff --git a/src/console/Gbs_Emu.h b/src/console/Gbs_Emu.h
index 93fe691..f3318dc 100644
--- a/src/console/Gbs_Emu.h
+++ b/src/console/Gbs_Emu.h
@@ -1,6 +1,6 @@
// Nintendo Game Boy GBS music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef GBS_EMU_H
#define GBS_EMU_H
diff --git a/src/console/Gme_File.cxx b/src/console/Gme_File.cxx
index 6821c3a..17edc9f 100644
--- a/src/console/Gme_File.cxx
+++ b/src/console/Gme_File.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Gme_File.h"
@@ -18,7 +18,7 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
#include "blargg_source.h"
-const char gme_wrong_file_type [] = "Wrong file type for this emulator";
+const char* const gme_wrong_file_type = "Wrong file type for this emulator";
void Gme_File::clear_playlist()
{
diff --git a/src/console/Gme_File.h b/src/console/Gme_File.h
index a535633..a327ceb 100644
--- a/src/console/Gme_File.h
+++ b/src/console/Gme_File.h
@@ -1,6 +1,6 @@
// Common interface to game music file loading and information
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef GME_FILE_H
#define GME_FILE_H
@@ -12,6 +12,38 @@
// Error returned if file is wrong type
//extern const char gme_wrong_file_type []; // declared in gme.h
+struct gme_type_t_
+{
+ const char* system; /* name of system this music file type is generally for */
+ int track_count; /* non-zero for formats with a fixed number of tracks */
+ Music_Emu* (*new_emu)(); /* Create new emulator for this type (useful in C++ only) */
+ Music_Emu* (*new_info)(); /* Create new info reader for this type */
+
+ /* internal */
+ const char* extension_;
+ int flags_;
+};
+
+struct track_info_t
+{
+ long track_count;
+
+ /* times in milliseconds; -1 if unknown */
+ long length;
+ long intro_length;
+ long loop_length;
+
+ /* empty string if not available */
+ char system [256];
+ char game [256];
+ char song [256];
+ char author [256];
+ char copyright [256];
+ char comment [256];
+ char dumper [256];
+};
+enum { gme_max_field = 255 };
+
struct Gme_File {
public:
// File loading
diff --git a/src/console/Gym_Emu.cxx b/src/console/Gym_Emu.cxx
index b0a595c..c286dea 100644
--- a/src/console/Gym_Emu.cxx
+++ b/src/console/Gym_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Gym_Emu.h"
@@ -161,7 +161,8 @@ struct Gym_File : Gme_Info_
static Music_Emu* new_gym_emu () { return BLARGG_NEW Gym_Emu ; }
static Music_Emu* new_gym_file() { return BLARGG_NEW Gym_File; }
-gme_type_t_ const gme_gym_type [1] = {{ "Sega Genesis", 1, &new_gym_emu, &new_gym_file, "GYM", 0 }};
+static gme_type_t_ const gme_gym_type_ = { "Sega Genesis", 1, &new_gym_emu, &new_gym_file, "GYM", 0 };
+gme_type_t const gme_gym_type = &gme_gym_type_;
// Setup
@@ -203,7 +204,7 @@ void Gym_Emu::mute_voices_( int mask )
{
Music_Emu::mute_voices_( mask );
fm.mute_voices( mask );
- dac_muted = mask & 0x40;
+ dac_muted = (mask & 0x40) != 0;
apu.output( (mask & 0x80) ? 0 : &blip_buf );
}
diff --git a/src/console/Gym_Emu.h b/src/console/Gym_Emu.h
index 05419ea..f2e1323 100644
--- a/src/console/Gym_Emu.h
+++ b/src/console/Gym_Emu.h
@@ -1,7 +1,7 @@
// Sega Genesis/Mega Drive GYM music file emulator
// Includes with PCM timing recovery to improve sample quality.
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef GYM_EMU_H
#define GYM_EMU_H
diff --git a/src/console/Hes_Apu.cxx b/src/console/Hes_Apu.cxx
index 2238912..63c2b70 100644
--- a/src/console/Hes_Apu.cxx
+++ b/src/console/Hes_Apu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Hes_Apu.h"
@@ -158,7 +158,7 @@ void Hes_Osc::run_until( synth_t& synth_, blip_time_t end_time )
//period = 0x1000 * 2;
period = 1;
//if ( !(volume_0 | volume_1) )
- // dprintf( "Used period 0\n" );
+ // debug_printf( "Used period 0\n" );
}
// maintain phase when silent
@@ -295,7 +295,7 @@ void Hes_Apu::write_data( blip_time_t time, int addr, int data )
case 0x809:
if ( !(data & 0x80) && (data & 0x03) != 0 )
- dprintf( "HES LFO not supported\n" );
+ debug_printf( "HES LFO not supported\n" );
}
}
}
diff --git a/src/console/Hes_Apu.h b/src/console/Hes_Apu.h
index 6f8e965..1e54605 100644
--- a/src/console/Hes_Apu.h
+++ b/src/console/Hes_Apu.h
@@ -1,5 +1,6 @@
// Turbo Grafx 16 (PC Engine) PSG sound chip emulator
+// Game_Music_Emu 0.5.5
#ifndef HES_APU_H
#define HES_APU_H
diff --git a/src/console/Hes_Cpu.cxx b/src/console/Hes_Cpu.cxx
index a1dc3d5..8acdd94 100644
--- a/src/console/Hes_Cpu.cxx
+++ b/src/console/Hes_Cpu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Hes_Cpu.h"
@@ -148,7 +148,7 @@ loop:
/*
static long count;
if ( count == 1844 ) Debugger();
- if ( s.base != correct ) dprintf( "%ld\n", count );
+ if ( s.base != correct ) debug_printf( "%ld\n", count );
count++;
*/
}
@@ -741,7 +741,7 @@ possibly_out_of_time:
ARITH_ADDR_MODES( 0x65 ) // ADC
adc_imm: {
if ( status & st_d )
- dprintf( "Decimal mode not supported\n" );
+ debug_printf( "Decimal mode not supported\n" );
fint16 carry = c >> 8 & 1;
fint16 ov = (a ^ 0x80) + carry + (BOOST::int8_t) data; // sign-extend
status &= ~st_v;
@@ -1085,7 +1085,7 @@ possibly_out_of_time:
goto loop;
}
delayed_cli:
- dprintf( "Delayed CLI not supported\n" ); // TODO: implement
+ debug_printf( "Delayed CLI not supported\n" ); // TODO: implement
goto loop;
}
@@ -1100,7 +1100,7 @@ possibly_out_of_time:
s_time += delta;
if ( s_time < 0 )
goto loop;
- dprintf( "Delayed SEI not supported\n" ); // TODO: implement
+ debug_printf( "Delayed SEI not supported\n" ); // TODO: implement
goto loop;
}
@@ -1145,7 +1145,7 @@ possibly_out_of_time:
goto loop;
case 0x54: // CSL
- dprintf( "CSL not supported\n" );
+ debug_printf( "CSL not supported\n" );
illegal_encountered = true;
goto loop;
@@ -1154,10 +1154,10 @@ possibly_out_of_time:
case 0xF4: { // SET
//fuint16 operand = GET_MSB();
- dprintf( "SET not handled\n" );
- switch ( data )
- {
- }
+ debug_printf( "SET not handled\n" );
+ //switch ( data )
+ //{
+ //}
illegal_encountered = true;
goto loop;
}
@@ -1233,7 +1233,7 @@ possibly_out_of_time:
default:
assert( (unsigned) opcode <= 0xFF );
- dprintf( "Illegal opcode $%02X at $%04X\n", (int) opcode, (int) pc - 1 );
+ debug_printf( "Illegal opcode $%02X at $%04X\n", (int) opcode, (int) pc - 1 );
illegal_encountered = true;
goto loop;
}
diff --git a/src/console/Hes_Cpu.h b/src/console/Hes_Cpu.h
index 536e732..cf3af87 100644
--- a/src/console/Hes_Cpu.h
+++ b/src/console/Hes_Cpu.h
@@ -1,6 +1,6 @@
// PC Engine CPU emulator for use with HES music files
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef HES_CPU_H
#define HES_CPU_H
diff --git a/src/console/Hes_Emu.cxx b/src/console/Hes_Emu.cxx
index a737e43..9a32b68 100644
--- a/src/console/Hes_Emu.cxx
+++ b/src/console/Hes_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Hes_Emu.h"
@@ -132,7 +132,9 @@ struct Hes_File : Gme_Info_
static Music_Emu* new_hes_emu () { return BLARGG_NEW Hes_Emu ; }
static Music_Emu* new_hes_file() { return BLARGG_NEW Hes_File; }
-gme_type_t_ const gme_hes_type [1] = {{ "PC Engine", 256, &new_hes_emu, &new_hes_file, "HES", 1 }};
+static gme_type_t_ const gme_hes_type_ = { "PC Engine", 256, &new_hes_emu, &new_hes_file, "HES", 1 };
+gme_type_t const gme_hes_type = &gme_hes_type_;
+
// Setup
@@ -271,12 +273,12 @@ void Hes_Emu::cpu_write_vdp( int addr, int data )
}
else
{
- dprintf( "VDP not supported: $%02X <- $%02X\n", vdp.latch, data );
+ debug_printf( "VDP not supported: $%02X <- $%02X\n", vdp.latch, data );
}
break;
case 3:
- dprintf( "VDP MSB not supported: $%02X <- $%02X\n", vdp.latch, data );
+ debug_printf( "VDP MSB not supported: $%02X <- $%02X\n", vdp.latch, data );
break;
}
}
@@ -323,7 +325,7 @@ void Hes_Emu::cpu_write_( hes_addr_t addr, int data )
run_until( time );
irq.disables = data;
if ( (data & 0xF8) && (data & 0xF8) != 0xF8 ) // flag questionable values
- dprintf( "Int mask: $%02X\n", data );
+ debug_printf( "Int mask: $%02X\n", data );
break;
case 0x1403:
@@ -342,7 +344,7 @@ void Hes_Emu::cpu_write_( hes_addr_t addr, int data )
return;
default:
- dprintf( "unmapped write $%04X <- $%02X\n", addr, data );
+ debug_printf( "unmapped write $%04X <- $%02X\n", addr, data );
return;
#endif
}
@@ -366,14 +368,14 @@ int Hes_Emu::cpu_read_( hes_addr_t addr )
case 0x0002:
case 0x0003:
- dprintf( "VDP read not supported: %d\n", addr );
+ debug_printf( "VDP read not supported: %d\n", addr );
return 0;
case 0x0C01:
//return timer.enabled; // TODO: remove?
case 0x0C00:
run_until( time );
- dprintf( "Timer count read\n" );
+ debug_printf( "Timer count read\n" );
return (unsigned) (timer.count - 1) / timer_base;
case 0x1402:
@@ -394,7 +396,7 @@ int Hes_Emu::cpu_read_( hes_addr_t addr )
break;
default:
- dprintf( "unmapped read $%04X\n", addr );
+ debug_printf( "unmapped read $%04X\n", addr );
#endif
}
diff --git a/src/console/Hes_Emu.h b/src/console/Hes_Emu.h
index 9951eb6..d17983c 100644
--- a/src/console/Hes_Emu.h
+++ b/src/console/Hes_Emu.h
@@ -1,6 +1,6 @@
// TurboGrafx-16/PC Engine HES music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef HES_EMU_H
#define HES_EMU_H
diff --git a/src/console/Kss_Cpu.cxx b/src/console/Kss_Cpu.cxx
index 37c4a72..bc08cc3 100644
--- a/src/console/Kss_Cpu.cxx
+++ b/src/console/Kss_Cpu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
/*
Last validated with zexall 2006.11.14 2:19 PM
@@ -839,8 +839,6 @@ possibly_out_of_time:
//////////////////////////////////////// CB prefix
{
case 0xCB:
- unsigned data2;
- data2 = instr [1];
pc++;
switch ( data )
{
@@ -1289,7 +1287,7 @@ possibly_out_of_time:
case 0x4F: // LD R,A
SET_R( rg.a );
- dprintf( "LD R,A not supported\n" );
+ debug_printf( "LD R,A not supported\n" );
warning = true;
goto loop;
@@ -1299,7 +1297,7 @@ possibly_out_of_time:
case 0x5F: // LD A,R
rg.a = GET_R();
- dprintf( "LD A,R not supported\n" );
+ debug_printf( "LD A,R not supported\n" );
warning = true;
ld_ai_common:
flags = (flags & C01) | SZ28( rg.a ) | (r.iff2 << 2 & V04);
@@ -1322,7 +1320,7 @@ possibly_out_of_time:
goto loop;
default:
- dprintf( "Opcode $ED $%02X not supported\n", data );
+ debug_printf( "Opcode $ED $%02X not supported\n", data );
warning = true;
goto loop;
}
@@ -1583,7 +1581,7 @@ possibly_out_of_time:
}
default:
- dprintf( "Opcode $%02X $CB $%02X not supported\n", opcode, data2 );
+ debug_printf( "Opcode $%02X $CB $%02X not supported\n", opcode, data2 );
warning = true;
goto loop;
}
@@ -1672,7 +1670,7 @@ possibly_out_of_time:
}
default:
- dprintf( "Unnecessary DD/FD prefix encountered\n" );
+ debug_printf( "Unnecessary DD/FD prefix encountered\n" );
warning = true;
pc--;
goto loop;
@@ -1681,7 +1679,7 @@ possibly_out_of_time:
}
}
- dprintf( "Unhandled main opcode: $%02X\n", opcode );
+ debug_printf( "Unhandled main opcode: $%02X\n", opcode );
assert( false );
hit_idle_addr:
diff --git a/src/console/Kss_Cpu.h b/src/console/Kss_Cpu.h
index 6297d10..28a2fc0 100644
--- a/src/console/Kss_Cpu.h
+++ b/src/console/Kss_Cpu.h
@@ -1,6 +1,6 @@
// Z80 CPU emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef KSS_CPU_H
#define KSS_CPU_H
diff --git a/src/console/Kss_Emu.cxx b/src/console/Kss_Emu.cxx
index 41027b0..3b84509 100644
--- a/src/console/Kss_Emu.cxx
+++ b/src/console/Kss_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Kss_Emu.h"
@@ -101,7 +101,9 @@ struct Kss_File : Gme_Info_
static Music_Emu* new_kss_emu () { return BLARGG_NEW Kss_Emu ; }
static Music_Emu* new_kss_file() { return BLARGG_NEW Kss_File; }
-gme_type_t_ const gme_kss_type [1] = {{ "MSX", 256, &new_kss_emu, &new_kss_file, "KSS", 0x03 }};
+static gme_type_t_ const gme_kss_type_ = { "MSX", 256, &new_kss_emu, &new_kss_file, "KSS", 0x03 };
+gme_type_t const gme_kss_type = &gme_kss_type_;
+
// Setup
@@ -228,9 +230,9 @@ blargg_err_t Kss_Emu::start_track_( int track )
bank_count = max_banks;
set_warning( "Bank data missing" );
}
- //dprintf( "load_size : $%X\n", load_size );
- //dprintf( "bank_size : $%X\n", bank_size );
- //dprintf( "bank_count: %d (%d claimed)\n", bank_count, header_.bank_mode & 0x7F );
+ //debug_printf( "load_size : $%X\n", load_size );
+ //debug_printf( "bank_size : $%X\n", bank_size );
+ //debug_printf( "bank_count: %d (%d claimed)\n", bank_count, header_.bank_mode & 0x7F );
ram [idle_addr] = 0xFF;
cpu::reset( unmapped_write, unmapped_read );
@@ -299,7 +301,7 @@ void Kss_Emu::cpu_write( unsigned addr, int data )
return;
}
- dprintf( "LD ($%04X),$%02X\n", addr, data );
+ debug_printf( "LD ($%04X),$%02X\n", addr, data );
}
void kss_cpu_write( Kss_Cpu* cpu, unsigned addr, int data )
@@ -356,17 +358,17 @@ void kss_cpu_out( Kss_Cpu* cpu, cpu_time_t time, unsigned addr, int data )
#endif
}
- dprintf( "OUT $%04X,$%02X\n", addr, data );
+ debug_printf( "OUT $%04X,$%02X\n", addr, data );
}
int kss_cpu_in( Kss_Cpu*, cpu_time_t, unsigned addr )
{
//Kss_Emu& emu = STATIC_CAST(Kss_Emu&,*cpu);
- switch ( addr & 0xFF )
- {
- }
+ //switch ( addr & 0xFF )
+ //{
+ //}
- dprintf( "IN $%04X\n", addr );
+ debug_printf( "IN $%04X\n", addr );
return 0;
}
diff --git a/src/console/Kss_Emu.h b/src/console/Kss_Emu.h
index 4d8463a..1d6ae47 100644
--- a/src/console/Kss_Emu.h
+++ b/src/console/Kss_Emu.h
@@ -1,6 +1,6 @@
// MSX computer KSS music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef KSS_EMU_H
#define KSS_EMU_H
diff --git a/src/console/Kss_Scc_Apu.cxx b/src/console/Kss_Scc_Apu.cxx
index 1660ac3..cfccce6 100644
--- a/src/console/Kss_Scc_Apu.cxx
+++ b/src/console/Kss_Scc_Apu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Kss_Scc_Apu.h"
diff --git a/src/console/Kss_Scc_Apu.h b/src/console/Kss_Scc_Apu.h
index 03a6a10..5c65461 100644
--- a/src/console/Kss_Scc_Apu.h
+++ b/src/console/Kss_Scc_Apu.h
@@ -1,6 +1,6 @@
// Konami SCC sound chip emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef KSS_SCC_APU_H
#define KSS_SCC_APU_H
diff --git a/src/console/M3u_Playlist.cxx b/src/console/M3u_Playlist.cxx
index 0a1475d..6be6190 100644
--- a/src/console/M3u_Playlist.cxx
+++ b/src/console/M3u_Playlist.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "M3u_Playlist.h"
#include "Music_Emu.h"
@@ -52,9 +52,9 @@ blargg_err_t Gme_File::load_m3u( const char* path ) { return load_m3u_( playlist
blargg_err_t Gme_File::load_m3u( Data_Reader& in ) { return load_m3u_( playlist.load( in ) ); }
-gme_err_t gme_load_m3u( Music_Emu* me, const char* path ) { return me->load_m3u( path ); }
+BLARGG_EXPORT gme_err_t gme_load_m3u( Music_Emu* me, const char* path ) { return me->load_m3u( path ); }
-gme_err_t gme_load_m3u_data( Music_Emu* me, const void* data, long size )
+BLARGG_EXPORT gme_err_t gme_load_m3u_data( Music_Emu* me, const void* data, long size )
{
Mem_File_Reader in( data, size );
return me->load_m3u( in );
diff --git a/src/console/M3u_Playlist.h b/src/console/M3u_Playlist.h
index eda0dc8..266a065 100644
--- a/src/console/M3u_Playlist.h
+++ b/src/console/M3u_Playlist.h
@@ -1,6 +1,6 @@
// M3U playlist file parser, with support for subtrack information
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef M3U_PLAYLIST_H
#define M3U_PLAYLIST_H
diff --git a/src/console/Makefile b/src/console/Makefile
index 959a36c..e0451e3 100644
--- a/src/console/Makefile
+++ b/src/console/Makefile
@@ -42,6 +42,7 @@ SRCS = Ay_Apu.cxx \
Spc_Cpu.cxx \
Spc_Dsp.cxx \
Spc_Emu.cxx \
+ Spc_Filter.cxx \
Vfs_File.cxx \
Vgm_Emu.cxx \
Vgm_Emu_Impl.cxx \
@@ -61,5 +62,5 @@ LD = ${CXX}
CFLAGS += ${PLUGIN_CFLAGS}
CXXFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lz ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lz
diff --git a/src/console/Multi_Buffer.cxx b/src/console/Multi_Buffer.cxx
index ecd8f8a..57f93b3 100644
--- a/src/console/Multi_Buffer.cxx
+++ b/src/console/Multi_Buffer.cxx
@@ -114,7 +114,7 @@ long Stereo_Buffer::read_samples( blip_sample_t* out, long count )
if ( count )
{
int bufs_used = stereo_added | was_stereo;
- //dprintf( "%X\n", bufs_used );
+ //debug_printf( "%X\n", bufs_used );
if ( bufs_used <= 1 )
{
mix_mono( out, count );
diff --git a/src/console/Multi_Buffer.h b/src/console/Multi_Buffer.h
index a39cca1..82c8b3a 100644
--- a/src/console/Multi_Buffer.h
+++ b/src/console/Multi_Buffer.h
@@ -126,10 +126,7 @@ class Silent_Buffer : public Multi_Buffer {
channel_t chan;
public:
Silent_Buffer();
- blargg_err_t set_sample_rate( long rate, int msec = blip_default_length )
- {
- return Multi_Buffer::set_sample_rate( rate, msec );
- }
+ blargg_err_t set_sample_rate( long rate, int msec = blip_default_length );
void clock_rate( long ) { }
void bass_freq( int ) { }
void clear() { }
@@ -147,6 +144,11 @@ inline blargg_err_t Multi_Buffer::set_sample_rate( long rate, int msec )
return 0;
}
+inline blargg_err_t Silent_Buffer::set_sample_rate( long rate, int msec )
+{
+ return Multi_Buffer::set_sample_rate( rate, msec );
+}
+
inline int Multi_Buffer::samples_per_frame() const { return samples_per_frame_; }
inline long Multi_Buffer::sample_rate() const { return sample_rate_; }
diff --git a/src/console/Music_Emu.cxx b/src/console/Music_Emu.cxx
index 602a19d..e237318 100644
--- a/src/console/Music_Emu.cxx
+++ b/src/console/Music_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Music_Emu.h"
@@ -147,7 +147,7 @@ blargg_err_t Music_Emu::start_track( int track )
for ( long end = max_initial_silence * stereo * sample_rate(); emu_time < end; )
{
fill_buf();
- if ( buf_remain | emu_track_ended_ )
+ if ( buf_remain | (int) emu_track_ended_ )
break;
}
@@ -340,7 +340,7 @@ blargg_err_t Music_Emu::play( long out_count, sample_t* out )
assert( emu_time >= out_time );
// prints nifty graph of how far ahead we are when searching for silence
- //dprintf( "%*s \n", int ((emu_time - out_time) * 7 / sample_rate()), "*" );
+ //debug_printf( "%*s \n", int ((emu_time - out_time) * 7 / sample_rate()), "*" );
long pos = 0;
if ( silence_count )
@@ -404,6 +404,7 @@ blargg_err_t Gme_Info_::set_sample_rate_( long ) { return 0; }
void Gme_Info_::pre_load() { Gme_File::pre_load(); } // skip Music_Emu
void Gme_Info_::post_load_() { Gme_File::post_load_(); } // skip Music_Emu
void Gme_Info_::set_equalizer_( equalizer_t const& ){ check( false ); }
+void Gme_Info_::enable_accuracy_( bool ) { check( false ); }
void Gme_Info_::mute_voices_( int ) { check( false ); }
void Gme_Info_::set_tempo_( double ) { }
blargg_err_t Gme_Info_::start_track_( int ) { return "Use full emulator for playback"; }
diff --git a/src/console/Music_Emu.h b/src/console/Music_Emu.h
index 573403c..c9bed00 100644
--- a/src/console/Music_Emu.h
+++ b/src/console/Music_Emu.h
@@ -1,6 +1,6 @@
// Common interface to game music file emulators
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef MUSIC_EMU_H
#define MUSIC_EMU_H
@@ -82,6 +82,10 @@ public:
// on others this has no effect. Should be called only once *before* set_sample_rate().
virtual void set_buffer( Multi_Buffer* ) { }
+ // Enables/disables accurate emulation options, if any are supported. Might change
+ // equalizer settings.
+ void enable_accuracy( bool enable = true );
+
// Sound equalization (treble/bass)
// Frequency equalizer parameters (see gme.txt)
@@ -111,7 +115,8 @@ protected:
void remute_voices();
virtual blargg_err_t set_sample_rate_( long sample_rate ) = 0;
- virtual void set_equalizer_( equalizer_t const& ) { };
+ virtual void set_equalizer_( equalizer_t const& ) { }
+ virtual void enable_accuracy_( bool enable ) { }
virtual void mute_voices_( int mask ) = 0;
virtual void set_tempo_( double ) = 0;
virtual blargg_err_t start_track_( int ) = 0; // tempo is set before this
@@ -160,7 +165,7 @@ private:
void emu_play( long count, sample_t* out );
Multi_Buffer* effects_buffer;
- friend Music_Emu* gme_new_emu( gme_type_t, long );
+ friend Music_Emu* gme_new_emu( gme_type_t, int );
friend void gme_set_stereo_depth( Music_Emu*, double );
};
@@ -169,6 +174,7 @@ struct Gme_Info_ : Music_Emu
{
virtual blargg_err_t set_sample_rate_( long sample_rate );
virtual void set_equalizer_( equalizer_t const& );
+ virtual void enable_accuracy_( bool );
virtual void mute_voices_( int mask );
virtual void set_tempo_( double );
virtual blargg_err_t start_track_( int );
@@ -189,6 +195,7 @@ inline int Music_Emu::current_track() const { return current_track_; }
inline bool Music_Emu::track_ended() const { return track_ended_; }
inline const Music_Emu::equalizer_t& Music_Emu::equalizer() const { return equalizer_; }
+inline void Music_Emu::enable_accuracy( bool b ) { enable_accuracy_( b ); }
inline void Music_Emu::set_tempo_( double t ) { tempo_ = t; }
inline void Music_Emu::remute_voices() { mute_voices( mute_mask_ ); }
inline void Music_Emu::ignore_silence( bool b ) { ignore_silence_ = b; }
@@ -197,7 +204,7 @@ inline blargg_err_t Music_Emu::start_track_( int ) { return 0; }
inline void Music_Emu::set_voice_names( const char* const* names )
{
// Intentional removal of const, so users don't have to remember obscure const in middle
- voice_names_ = (const char**) names;
+ voice_names_ = const_cast<const char**> (names);
}
inline void Music_Emu::mute_voices_( int ) { }
diff --git a/src/console/Nes_Apu.cxx b/src/console/Nes_Apu.cxx
index 8daf5d0..68edb44 100644
--- a/src/console/Nes_Apu.cxx
+++ b/src/console/Nes_Apu.cxx
@@ -385,7 +385,7 @@ int Nes_Apu::read_status( nes_time_t time )
irq_changed();
}
- //dprintf( "%6d/%d Read $4015->$%02X\n", frame_delay, frame, result );
+ //debug_printf( "%6d/%d Read $4015->$%02X\n", frame_delay, frame, result );
return result;
}
diff --git a/src/console/Nes_Cpu.cxx b/src/console/Nes_Cpu.cxx
index 480b4aa..864e0dd 100644
--- a/src/console/Nes_Cpu.cxx
+++ b/src/console/Nes_Cpu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Nes_Cpu.h"
@@ -921,7 +921,7 @@ imm##op:
goto loop;
status &= ~st_i;
handle_cli: {
- //dprintf( "CLI at %d\n", TIME );
+ //debug_printf( "CLI at %d\n", TIME );
this->r.status = status; // update externally-visible I flag
blargg_long delta = s.base - irq_time_;
if ( delta <= 0 )
@@ -944,7 +944,7 @@ imm##op:
// TODO: implement
delayed_cli:
- dprintf( "Delayed CLI not emulated\n" );
+ debug_printf( "Delayed CLI not emulated\n" );
goto loop;
}
@@ -960,7 +960,7 @@ imm##op:
if ( s_time < 0 )
goto loop;
- dprintf( "Delayed SEI not emulated\n" );
+ debug_printf( "Delayed SEI not emulated\n" );
goto loop;
}
diff --git a/src/console/Nes_Cpu.h b/src/console/Nes_Cpu.h
index 9428670..694296f 100644
--- a/src/console/Nes_Cpu.h
+++ b/src/console/Nes_Cpu.h
@@ -1,6 +1,6 @@
// NES 6502 CPU emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef NES_CPU_H
#define NES_CPU_H
diff --git a/src/console/Nes_Fme7_Apu.cxx b/src/console/Nes_Fme7_Apu.cxx
index 05a245d..62594fc 100644
--- a/src/console/Nes_Fme7_Apu.cxx
+++ b/src/console/Nes_Fme7_Apu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Nes_Fme7_Apu.h"
@@ -46,7 +46,7 @@ void Nes_Fme7_Apu::run_until( blip_time_t end_time )
{
int mode = regs [7] >> index;
int vol_mode = regs [010 + index];
- int volume = amp_table [vol_mode & 0x0f];
+ int volume = amp_table [vol_mode & 0x0F];
Blip_Buffer* const osc_output = oscs [index].output;
if ( !osc_output )
@@ -55,9 +55,9 @@ void Nes_Fme7_Apu::run_until( blip_time_t end_time )
// check for unsupported mode
#ifndef NDEBUG
- if ( (mode & 011) <= 001 && vol_mode & 0x1f )
- dprintf( "FME7 used unimplemented sound mode: %02X, vol_mode: %02X\n",
- mode, vol_mode & 0x1f );
+ if ( (mode & 011) <= 001 && vol_mode & 0x1F )
+ debug_printf( "FME7 used unimplemented sound mode: %02X, vol_mode: %02X\n",
+ mode, vol_mode & 0x1F );
#endif
if ( (mode & 001) | (vol_mode & 0x10) )
@@ -65,7 +65,7 @@ void Nes_Fme7_Apu::run_until( blip_time_t end_time )
// period
int const period_factor = 16;
- unsigned period = (regs [index * 2 + 1] & 0x0f) * 0x100 * period_factor +
+ unsigned period = (regs [index * 2 + 1] & 0x0F) * 0x100 * period_factor +
regs [index * 2] * period_factor;
if ( period < 50 ) // around 22 kHz
{
diff --git a/src/console/Nes_Fme7_Apu.h b/src/console/Nes_Fme7_Apu.h
index 0764b57..9709489 100644
--- a/src/console/Nes_Fme7_Apu.h
+++ b/src/console/Nes_Fme7_Apu.h
@@ -1,6 +1,6 @@
// Sunsoft FME-7 sound emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef NES_FME7_APU_H
#define NES_FME7_APU_H
@@ -30,9 +30,9 @@ public:
void load_state( fme7_apu_state_t const& );
// Mask and addresses of registers
- enum { addr_mask = 0xe000 };
- enum { data_addr = 0xe000 };
- enum { latch_addr = 0xc000 };
+ enum { addr_mask = 0xE000 };
+ enum { data_addr = 0xE000 };
+ enum { latch_addr = 0xC000 };
// (addr & addr_mask) == latch_addr
void write_latch( int );
@@ -97,8 +97,8 @@ inline void Nes_Fme7_Apu::write_data( blip_time_t time, int data )
{
if ( (unsigned) latch >= reg_count )
{
- #ifdef dprintf
- dprintf( "FME7 write to %02X (past end of sound registers)\n", (int) latch );
+ #ifdef debug_printf
+ debug_printf( "FME7 write to %02X (past end of sound registers)\n", (int) latch );
#endif
return;
}
diff --git a/src/console/Nsf_Emu.cxx b/src/console/Nsf_Emu.cxx
index 9a6ee18..6e58164 100644
--- a/src/console/Nsf_Emu.cxx
+++ b/src/console/Nsf_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Nsf_Emu.h"
@@ -127,7 +127,9 @@ struct Nsf_File : Gme_Info_
static Music_Emu* new_nsf_emu () { return BLARGG_NEW Nsf_Emu ; }
static Music_Emu* new_nsf_file() { return BLARGG_NEW Nsf_File; }
-gme_type_t_ const gme_nsf_type [1] = {{ "Nintendo NES", 0, &new_nsf_emu, &new_nsf_file, "NSF", 1 }};
+static gme_type_t_ const gme_nsf_type_ = { "Nintendo NES", 0, &new_nsf_emu, &new_nsf_file, "NSF", 1 };
+gme_type_t const gme_nsf_type = &gme_nsf_type_;
+
// Setup
@@ -440,7 +442,7 @@ void Nsf_Emu::cpu_write_misc( nes_addr_t addr, int data )
// memory mapper?
if ( addr == 0xFFF8 ) return;
- dprintf( "write_unmapped( 0x%04X, 0x%02X )\n", (unsigned) addr, (unsigned) data );
+ debug_printf( "write_unmapped( 0x%04X, 0x%02X )\n", (unsigned) addr, (unsigned) data );
}
#endif
}
@@ -488,7 +490,7 @@ blargg_err_t Nsf_Emu::run_clocks( blip_time_t& duration, int )
set_time( 0 );
while ( time() < duration )
{
- nes_time_t end = min( next_play, duration );
+ nes_time_t end = min( (blip_time_t) next_play, duration );
end = min( end, time() + 32767 ); // allows CPU to use 16-bit time delta
if ( cpu::run( end ) )
{
diff --git a/src/console/Nsf_Emu.h b/src/console/Nsf_Emu.h
index e06b917..6b21352 100644
--- a/src/console/Nsf_Emu.h
+++ b/src/console/Nsf_Emu.h
@@ -1,6 +1,6 @@
// Nintendo NES/Famicom NSF music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef NSF_EMU_H
#define NSF_EMU_H
diff --git a/src/console/Nsfe_Emu.cxx b/src/console/Nsfe_Emu.cxx
index 2c83bd3..eb8cdad 100644
--- a/src/console/Nsfe_Emu.cxx
+++ b/src/console/Nsfe_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Nsfe_Emu.h"
@@ -135,7 +135,7 @@ blargg_err_t Nsfe_Info::load( Data_Reader& in, Nsf_Emu* nsf_emu )
blargg_long size = get_le32( block_header [0] );
blargg_long tag = get_le32( block_header [1] );
- //dprintf( "tag: %c%c%c%c\n", char(tag), char(tag>>8), char(tag>>16), char(tag>>24) );
+ //debug_printf( "tag: %c%c%c%c\n", char(tag), char(tag>>8), char(tag>>16), char(tag>>24) );
switch ( tag )
{
@@ -297,7 +297,9 @@ struct Nsfe_File : Gme_Info_
static Music_Emu* new_nsfe_emu () { return BLARGG_NEW Nsfe_Emu ; }
static Music_Emu* new_nsfe_file() { return BLARGG_NEW Nsfe_File; }
-gme_type_t_ const gme_nsfe_type [1] = {{ "Nintendo NES", 0, &new_nsfe_emu, &new_nsfe_file, "NSFE", 1 }};
+static gme_type_t_ const gme_nsfe_type_ = { "Nintendo NES", 0, &new_nsfe_emu, &new_nsfe_file, "NSFE", 1 };
+gme_type_t const gme_nsfe_type = &gme_nsfe_type_;
+
blargg_err_t Nsfe_Emu::load_( Data_Reader& in )
{
diff --git a/src/console/Nsfe_Emu.h b/src/console/Nsfe_Emu.h
index 561c3be..7971e47 100644
--- a/src/console/Nsfe_Emu.h
+++ b/src/console/Nsfe_Emu.h
@@ -1,6 +1,6 @@
// Nintendo NES/Famicom NSFE music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef NSFE_EMU_H
#define NSFE_EMU_H
diff --git a/src/console/Sap_Apu.cxx b/src/console/Sap_Apu.cxx
index 23fa907..fa9bc4b 100644
--- a/src/console/Sap_Apu.cxx
+++ b/src/console/Sap_Apu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Sap_Apu.h"
@@ -66,7 +66,7 @@ Sap_Apu_Impl::Sap_Apu_Impl()
blargg_ulong rev = n & 1;
for ( int i = 1; i < poly5_len; i++ )
rev |= (n >> i & 1) << (poly5_len - i);
- dprintf( "poly5: 0x%08lX\n", rev );
+ debug_printf( "poly5: 0x%08lX\n", rev );
}
}
@@ -114,7 +114,7 @@ inline void Sap_Apu::calc_periods()
period = (period - 6) * divider;
if ( (osc [-1].regs [1] & 0x1F) > 0x10 )
- dprintf( "Use of slave channel in 16-bit mode not supported\n" );
+ debug_printf( "Use of slave channel in 16-bit mode not supported\n" );
}
}
osc->period = period;
diff --git a/src/console/Sap_Apu.h b/src/console/Sap_Apu.h
index c71ce31..a573499 100644
--- a/src/console/Sap_Apu.h
+++ b/src/console/Sap_Apu.h
@@ -1,6 +1,6 @@
// Atari POKEY sound chip emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef SAP_APU_H
#define SAP_APU_H
diff --git a/src/console/Sap_Cpu.cxx b/src/console/Sap_Cpu.cxx
index 10dc606..35e1b51 100644
--- a/src/console/Sap_Cpu.cxx
+++ b/src/console/Sap_Cpu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Sap_Cpu.h"
@@ -889,7 +889,7 @@ imm##op:
goto loop;
}
delayed_cli:
- dprintf( "Delayed CLI not emulated\n" );
+ debug_printf( "Delayed CLI not emulated\n" );
goto loop;
}
@@ -904,7 +904,7 @@ imm##op:
s_time += delta;
if ( s_time < 0 )
goto loop;
- dprintf( "Delayed SEI not emulated\n" );
+ debug_printf( "Delayed SEI not emulated\n" );
goto loop;
}
@@ -945,7 +945,7 @@ handle_brk:
goto idle_done;
pc++;
result_ = 4;
- dprintf( "BRK executed\n" );
+ debug_printf( "BRK executed\n" );
interrupt:
{
diff --git a/src/console/Sap_Cpu.h b/src/console/Sap_Cpu.h
index 433a4e3..bde219f 100644
--- a/src/console/Sap_Cpu.h
+++ b/src/console/Sap_Cpu.h
@@ -1,6 +1,6 @@
// Atari 6502 CPU emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef SAP_CPU_H
#define SAP_CPU_H
diff --git a/src/console/Sap_Emu.cxx b/src/console/Sap_Emu.cxx
index f02e948..2631554 100644
--- a/src/console/Sap_Emu.cxx
+++ b/src/console/Sap_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Sap_Emu.h"
@@ -23,13 +23,13 @@ long const base_scanline_period = 114;
Sap_Emu::Sap_Emu()
{
set_type( gme_sap_type );
-
+
static const char* const names [Sap_Apu::osc_count * 2] = {
"Wave 1", "Wave 2", "Wave 3", "Wave 4",
"Wave 5", "Wave 6", "Wave 7", "Wave 8",
};
set_voice_names( names );
-
+
static int const types [Sap_Apu::osc_count * 2] = {
wave_type | 1, wave_type | 2, wave_type | 3, wave_type | 0,
wave_type | 5, wave_type | 6, wave_type | 7, wave_type | 4,
@@ -68,7 +68,7 @@ static int from_dec( byte const* in, byte const* end )
{
if ( in >= end )
return -1;
-
+
int n = 0;
while ( in < end )
{
@@ -104,10 +104,10 @@ static blargg_err_t parse_info( byte const* in, long size, Sap_Emu::info_t* out
out->author [0] = 0;
out->name [0] = 0;
out->copyright [0] = 0;
-
+
if ( size < 16 || memcmp( in, "SAP\x0D\x0A", 5 ) )
return gme_wrong_file_type;
-
+
byte const* file_end = in + size - 5;
in += 5;
while ( in < file_end && (in [0] != 0xFF || in [1] != 0xFF) )
@@ -115,14 +115,14 @@ static blargg_err_t parse_info( byte const* in, long size, Sap_Emu::info_t* out
byte const* line_end = in;
while ( line_end < file_end && *line_end != 0x0D )
line_end++;
-
+
char const* tag = (char const*) in;
while ( in < line_end && *in > ' ' )
in++;
int tag_len = (char const*) in - tag;
-
+
while ( in < line_end && *in <= ' ' ) in++;
-
+
if ( tag_len <= 0 )
{
// skip line
@@ -158,10 +158,10 @@ static blargg_err_t parse_info( byte const* in, long size, Sap_Emu::info_t* out
case 'C':
case 'B':
break;
-
+
case 'D':
return "Digimusic not supported";
-
+
default:
return "Unsupported player type";
}
@@ -188,14 +188,14 @@ static blargg_err_t parse_info( byte const* in, long size, Sap_Emu::info_t* out
{
parse_string( in, line_end, sizeof out->copyright, out->copyright );
}
-
+
in = line_end + 2;
}
-
+
if ( in [0] != 0xFF || in [1] != 0xFF )
return "ROM data missing";
out->rom_data = in + 2;
-
+
return 0;
}
@@ -215,16 +215,16 @@ blargg_err_t Sap_Emu::track_info_( track_info_t* out, int ) const
struct Sap_File : Gme_Info_
{
Sap_Emu::info_t info;
-
+
Sap_File() { set_type( gme_sap_type ); }
-
+
blargg_err_t load_mem_( byte const* begin, long size )
{
RETURN_ERR( parse_info( begin, size, &info ) );
set_track_count( info.track_count );
return 0;
}
-
+
blargg_err_t track_info_( track_info_t* out, int ) const
{
copy_sap_fields( info, out );
@@ -235,14 +235,16 @@ struct Sap_File : Gme_Info_
static Music_Emu* new_sap_emu () { return BLARGG_NEW Sap_Emu ; }
static Music_Emu* new_sap_file() { return BLARGG_NEW Sap_File; }
-gme_type_t_ const gme_sap_type [1] = {{ "Atari XL", 0, &new_sap_emu, &new_sap_file, "SAP", 1 }};
+static gme_type_t_ const gme_sap_type_ = { "Atari XL", 0, &new_sap_emu, &new_sap_file, "SAP", 1 };
+gme_type_t const gme_sap_type = &gme_sap_type_;
+
// Setup
blargg_err_t Sap_Emu::load_mem_( byte const* in, long size )
{
file_end = in + size;
-
+
info.warning = 0;
info.type = 'B';
info.stereo = false;
@@ -251,12 +253,12 @@ blargg_err_t Sap_Emu::load_mem_( byte const* in, long size )
info.music_addr = -1;
info.fastplay = 312;
RETURN_ERR( parse_info( in, size, &info ) );
-
+
set_warning( info.warning );
set_track_count( info.track_count );
set_voice_count( Sap_Apu::osc_count << info.stereo );
apu_impl.volume( gain() );
-
+
return setup_buffer( 1773447 );
}
@@ -310,7 +312,7 @@ inline void Sap_Emu::call_init( int track )
r.a = track;
run_routine( info.init_addr );
break;
-
+
case 'C':
r.a = 0x70;
r.x = info.music_addr&0xFF;
@@ -326,7 +328,7 @@ inline void Sap_Emu::call_init( int track )
blargg_err_t Sap_Emu::start_track_( int track )
{
RETURN_ERR( Classic_Emu::start_track_( track ) );
-
+
memset( &mem, 0, sizeof mem );
byte const* in = info.rom_data;
@@ -334,7 +336,7 @@ blargg_err_t Sap_Emu::start_track_( int track )
{
unsigned start = get_le16( in );
unsigned end = get_le16( in + 2 );
- //dprintf( "Block $%04X-$%04X\n", start, end );
+ //debug_printf( "Block $%04X-$%04X\n", start, end );
in += 4;
if ( end < start )
{
@@ -347,22 +349,22 @@ blargg_err_t Sap_Emu::start_track_( int track )
set_warning( "Invalid file data block" );
break;
}
-
+
memcpy( mem.ram + start, in, len );
in += len;
if ( file_end - in >= 2 && in [0] == 0xFF && in [1] == 0xFF )
in += 2;
}
-
+
apu.reset( &apu_impl );
apu2.reset( &apu_impl );
cpu::reset( mem.ram );
time_mask = 0; // disables sound during init
call_init( track );
time_mask = -1;
-
+
next_play = play_period();
-
+
return 0;
}
@@ -378,7 +380,7 @@ void Sap_Emu::cpu_write_( sap_addr_t addr, int data )
apu.write_data( time() & time_mask, addr, data );
return;
}
-
+
if ( (addr ^ (Sap_Apu::start_addr + 0x10)) <= (Sap_Apu::end_addr - Sap_Apu::start_addr) &&
info.stereo )
{
@@ -388,7 +390,7 @@ void Sap_Emu::cpu_write_( sap_addr_t addr, int data )
}
if ( (addr & ~0x0010) != 0xD20F || data != 0x03 )
- dprintf( "Unmapped write $%04X <- $%02X\n", addr, data );
+ debug_printf( "Unmapped write $%04X <- $%02X\n", addr, data );
}
inline void Sap_Emu::call_play()
@@ -398,7 +400,7 @@ inline void Sap_Emu::call_play()
case 'B':
cpu_jsr( info.play_addr );
break;
-
+
case 'C':
cpu_jsr( info.play_addr + 6 );
break;
@@ -412,7 +414,7 @@ blargg_err_t Sap_Emu::run_clocks( blip_time_t& duration, int )
{
if ( cpu::run( duration ) || r.pc > idle_addr )
return "Emulation error (illegal instruction)";
-
+
if ( r.pc == idle_addr )
{
if ( next_play <= duration )
@@ -428,7 +430,7 @@ blargg_err_t Sap_Emu::run_clocks( blip_time_t& duration, int )
}
}
}
-
+
duration = time();
next_play -= duration;
check( next_play >= 0 );
@@ -437,6 +439,6 @@ blargg_err_t Sap_Emu::run_clocks( blip_time_t& duration, int )
apu.end_frame( duration );
if ( info.stereo )
apu2.end_frame( duration );
-
+
return 0;
}
diff --git a/src/console/Sap_Emu.h b/src/console/Sap_Emu.h
index 4878faa..2187944 100644
--- a/src/console/Sap_Emu.h
+++ b/src/console/Sap_Emu.h
@@ -1,6 +1,6 @@
// Atari XL/XE SAP music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef SAP_EMU_H
#define SAP_EMU_H
diff --git a/src/console/Sms_Oscs.h b/src/console/Sms_Oscs.h
index acbdf88..2a896fe 100644
--- a/src/console/Sms_Oscs.h
+++ b/src/console/Sms_Oscs.h
@@ -4,6 +4,7 @@
#ifndef SMS_OSCS_H
#define SMS_OSCS_H
+#include "blargg_common.h"
#include "Blip_Buffer.h"
struct Sms_Osc
diff --git a/src/console/Snes_Spc.cxx b/src/console/Snes_Spc.cxx
index db04070..186a30f 100644
--- a/src/console/Snes_Spc.cxx
+++ b/src/console/Snes_Spc.cxx
@@ -1,6 +1,6 @@
// SPC emulation support: init, sample buffering, reset, SPC loading
-// snes_spc 0.9.0. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Snes_Spc.h"
diff --git a/src/console/Snes_Spc.h b/src/console/Snes_Spc.h
index 93a593c..188a2c2 100644
--- a/src/console/Snes_Spc.h
+++ b/src/console/Snes_Spc.h
@@ -1,6 +1,6 @@
// SNES SPC-700 APU emulator
-// snes_spc 0.9.0
+// Game_Music_Emu 0.5.5
#ifndef SNES_SPC_H
#define SNES_SPC_H
@@ -66,10 +66,7 @@ public:
// Sets tempo, where tempo_unit = normal, tempo_unit / 2 = half speed, etc.
enum { tempo_unit = 0x100 };
void set_tempo( int );
-
- enum { gain_unit = Spc_Dsp::gain_unit };
- void set_gain( int gain );
-
+
// SPC music files
// Loads SPC data into emulator
@@ -108,6 +105,22 @@ public:
#endif
public:
+ // TODO: document
+ struct regs_t
+ {
+ int pc;
+ int a;
+ int x;
+ int y;
+ int psw;
+ int sp;
+ };
+ regs_t& smp_regs() { return m.cpu_regs; }
+
+ uint8_t* smp_ram() { return m.ram.ram; }
+
+ void run_until( time_t t ) { run_until_( t ); }
+public:
BLARGG_DISABLE_NOTHROW
typedef BOOST::uint16_t uint16_t;
@@ -146,15 +159,7 @@ private:
uint8_t smp_regs [2] [reg_count];
- struct
- {
- int pc;
- int a;
- int x;
- int y;
- int psw;
- int sp;
- } cpu_regs;
+ regs_t cpu_regs;
rel_time_t dsp_time;
time_t spc_time;
@@ -271,8 +276,6 @@ inline void Snes_Spc::write_port( time_t t, int port, int data )
run_until_( t ) [0x10 + port] = data;
}
-inline void Snes_Spc::set_gain( int gain ) { dsp.set_gain( gain ); }
-
inline void Snes_Spc::mute_voices( int mask ) { dsp.mute_voices( mask ); }
inline void Snes_Spc::disable_surround( bool disable ) { dsp.disable_surround( disable ); }
diff --git a/src/console/Spc_Cpu.cxx b/src/console/Spc_Cpu.cxx
index 489f9c4..22fa92b 100644
--- a/src/console/Spc_Cpu.cxx
+++ b/src/console/Spc_Cpu.cxx
@@ -1,6 +1,6 @@
// Core SPC emulation: CPU, timers, SMP registers, memory
-// snes_spc 0.9.0. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Snes_Spc.h"
@@ -176,7 +176,7 @@ inline void Snes_Spc::dsp_write( int data, rel_time_t time )
if ( REGS [r_dspaddr] <= 0x7F )
dsp.write( REGS [r_dspaddr], data );
else if ( !SPC_MORE_ACCURACY )
- dprintf( "SPC wrote to DSP register > $7F\n" );
+ debug_printf( "SPC wrote to DSP register > $7F\n" );
}
@@ -277,8 +277,9 @@ static unsigned char const glitch_probs [3] [256] =
};
#endif
-// divided into multiple functions to keep rarely-used functionality separate
-// so often-used functionality can be optimized better by compiler
+// Read/write handlers are divided into multiple functions to keep rarely-used
+// functionality separate so often-used functionality can be optimized better
+// by compiler.
// If write isn't preceded by read, data has this added to it
int const no_read_before_write = 0x2000;
@@ -302,7 +303,7 @@ void Snes_Spc::cpu_write_smp_reg_( int data, rel_time_t time, int addr )
t->next_time == time + TIMER_MUL( t, 1 ) &&
((period - 1) | ~0x0F) & period )
{
- //dprintf( "SPC pathological timer target write\n" );
+ //debug_printf( "SPC pathological timer target write\n" );
// If the period is 3, 5, or 9, there's a probability this behavior won't occur,
// based on the previous period
@@ -331,7 +332,7 @@ void Snes_Spc::cpu_write_smp_reg_( int data, rel_time_t time, int addr )
case r_t1out:
case r_t2out:
if ( !SPC_MORE_ACCURACY )
- dprintf( "SPC wrote to counter %d\n", (int) addr - r_t0out );
+ debug_printf( "SPC wrote to counter %d\n", (int) addr - r_t0out );
if ( data < no_read_before_write / 2 )
run_timer( &m.timers [addr - r_t0out], time - 1 )->counter = 0;
@@ -345,7 +346,7 @@ void Snes_Spc::cpu_write_smp_reg_( int data, rel_time_t time, int addr )
case r_test:
if ( (uint8_t) data != 0x0A )
- dprintf( "SPC wrote to test register\n" );
+ debug_printf( "SPC wrote to test register\n" );
break;
case r_control:
diff --git a/src/console/Spc_Cpu.h b/src/console/Spc_Cpu.h
index c501bd7..7394475 100644
--- a/src/console/Spc_Cpu.h
+++ b/src/console/Spc_Cpu.h
@@ -1,4 +1,4 @@
-// snes_spc 0.9.0. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
/* Copyright (C) 2004-2007 Shay Green. This module is free software; you
can redistribute it and/or modify it under the terms of the GNU Lesser
@@ -16,7 +16,7 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
#if SPC_MORE_ACCURACY
#define SUSPICIOUS_OPCODE( name ) ((void) 0)
#else
- #define SUSPICIOUS_OPCODE( name ) dprintf( "SPC: suspicious opcode: " name "\n" )
+ #define SUSPICIOUS_OPCODE( name ) debug_printf( "SPC: suspicious opcode: " name "\n" )
#endif
#define CPU_READ( time, offset, addr )\
@@ -1184,7 +1184,7 @@ loop:
{
addr &= 0xFFFF;
SET_PC( addr );
- dprintf( "SPC: PC wrapped around\n" );
+ debug_printf( "SPC: PC wrapped around\n" );
goto loop;
}
}
@@ -1205,7 +1205,7 @@ stop:
// Uncache registers
if ( GET_PC() >= 0x10000 )
- dprintf( "SPC: PC wrapped around\n" );
+ debug_printf( "SPC: PC wrapped around\n" );
m.cpu_regs.pc = (uint16_t) GET_PC();
m.cpu_regs.sp = ( uint8_t) GET_SP();
m.cpu_regs.a = ( uint8_t) a;
diff --git a/src/console/Spc_Dsp.cxx b/src/console/Spc_Dsp.cxx
index b1ac41a..65f83fe 100644
--- a/src/console/Spc_Dsp.cxx
+++ b/src/console/Spc_Dsp.cxx
@@ -1,7 +1,4 @@
-// snes_spc 0.9.0. http://www.slack.net/~ant/
-
-// TODO: we can remove this as soon as the reverb problem is fixed. -- mf0102
-#include "configure.h"
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Spc_Dsp.h"
@@ -592,9 +589,8 @@ skip_brr:
// Echo out
if ( !(REG(flg) & 0x20) )
{
- unsigned shift = audcfg.inc_spc_reverb ? 14 : 16;
- int l = (echo_out_l >> 7) + ((echo_in_l * (int8_t) REG(efb)) >> shift);
- int r = (echo_out_r >> 7) + ((echo_in_r * (int8_t) REG(efb)) >> shift);
+ int l = (echo_out_l >> 7) + ((echo_in_l * (int8_t) REG(efb)) >> 14);
+ int r = (echo_out_r >> 7) + ((echo_in_r * (int8_t) REG(efb)) >> 14);
// just to help pass more validation tests
#if SPC_MORE_ACCURACY
@@ -610,8 +606,8 @@ skip_brr:
}
// Sound out
- int l = (((main_out_l * mvoll + echo_in_l * (int8_t) REG(evoll)) >> 14) * m.gain) >> 8;
- int r = (((main_out_r * mvolr + echo_in_r * (int8_t) REG(evolr)) >> 14) * m.gain) >> 8;
+ int l = (main_out_l * mvoll + echo_in_l * (int8_t) REG(evoll)) >> 14;
+ int r = (main_out_r * mvolr + echo_in_r * (int8_t) REG(evolr)) >> 14;
CLAMP16( l );
CLAMP16( r );
@@ -645,7 +641,6 @@ void Spc_Dsp::mute_voices( int mask )
void Spc_Dsp::init( void* ram_64k )
{
m.ram = (uint8_t*) ram_64k;
- set_gain( gain_unit );
mute_voices( 0 );
disable_surround( false );
set_output( 0, 0 );
diff --git a/src/console/Spc_Dsp.h b/src/console/Spc_Dsp.h
index b2e9d40..bc0efe5 100644
--- a/src/console/Spc_Dsp.h
+++ b/src/console/Spc_Dsp.h
@@ -1,12 +1,12 @@
// Fast SNES SPC-700 DSP emulator (about 3x speed of accurate one)
-// snes_spc 0.9.0
+// Game_Music_Emu 0.5.5
#ifndef SPC_DSP_H
#define SPC_DSP_H
#include "blargg_common.h"
-class Spc_Dsp {
+struct Spc_Dsp {
public:
typedef BOOST::uint8_t uint8_t;
@@ -51,10 +51,7 @@ public:
// If true, prevents channels and global volumes from being phase-negated
void disable_surround( bool disable = true );
-
- enum { gain_unit = 0x100 };
- void set_gain( int gain );
-
+
// State
// Resets DSP and uses supplied values to initialize registers
@@ -140,7 +137,6 @@ private:
// non-emulation state
uint8_t* ram; // 64K shared RAM between DSP and SMP
int mute_mask;
- int gain;
int surround_threshold;
sample_t* out;
sample_t* out_end;
@@ -204,8 +200,6 @@ inline void Spc_Dsp::write( int addr, int data )
}
}
-inline void Spc_Dsp::set_gain( int gain ) { m.gain = gain; }
-
inline void Spc_Dsp::disable_surround( bool disable )
{
m.surround_threshold = disable ? 0 : -0x4000;
diff --git a/src/console/Spc_Emu.cxx b/src/console/Spc_Emu.cxx
index d25c4f0..e652e7e 100644
--- a/src/console/Spc_Emu.cxx
+++ b/src/console/Spc_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Spc_Emu.h"
@@ -19,6 +19,8 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
#include "blargg_source.h"
+// TODO: support Spc_Filter's bass
+
Spc_Emu::Spc_Emu()
{
set_type( gme_spc_type );
@@ -54,7 +56,7 @@ static void get_spc_xid6( byte const* begin, long size, track_info_t* out )
byte const* in = begin + 8;
if ( end - in > info_size )
{
- dprintf( "Extra data after SPC xid6 info\n" );
+ debug_printf( "Extra data after SPC xid6 info\n" );
end = in + info_size;
}
@@ -114,7 +116,7 @@ static void get_spc_xid6( byte const* begin, long size, track_info_t* out )
default:
if ( id < 0x01 || (id > 0x07 && id < 0x10) ||
(id > 0x14 && id < 0x30) || id > 0x36 )
- dprintf( "Unknown SPC xid6 block: %X\n", (int) id );
+ debug_printf( "Unknown SPC xid6 block: %X\n", (int) id );
break;
}
if ( field )
@@ -134,7 +136,7 @@ static void get_spc_xid6( byte const* begin, long size, track_info_t* out )
{
// ...but some files have no padding
in = unaligned;
- dprintf( "SPC info tag wasn't properly padded to align\n" );
+ debug_printf( "SPC info tag wasn't properly padded to align\n" );
break;
}
}
@@ -241,14 +243,16 @@ struct Spc_File : Gme_Info_
static Music_Emu* new_spc_emu () { return BLARGG_NEW Spc_Emu ; }
static Music_Emu* new_spc_file() { return BLARGG_NEW Spc_File; }
-gme_type_t_ const gme_spc_type [1] = {{ "Super Nintendo", 1, &new_spc_emu, &new_spc_file, "SPC", 0 }};
+static gme_type_t_ const gme_spc_type_ = { "Super Nintendo", 1, &new_spc_emu, &new_spc_file, "SPC", 0 };
+gme_type_t const gme_spc_type = &gme_spc_type_;
+
// Setup
blargg_err_t Spc_Emu::set_sample_rate_( long sample_rate )
{
RETURN_ERR( apu.init() );
- apu.set_gain( (int) (gain() * Snes_Spc::gain_unit) );
+ enable_accuracy( false );
if ( sample_rate != native_sample_rate )
{
RETURN_ERR( resampler.buffer_size( native_sample_rate / 20 * 2 ) );
@@ -257,6 +261,12 @@ blargg_err_t Spc_Emu::set_sample_rate_( long sample_rate )
return 0;
}
+void Spc_Emu::enable_accuracy_( bool b )
+{
+ Music_Emu::enable_accuracy_( b );
+ filter.enable( b );
+}
+
void Spc_Emu::mute_voices_( int m )
{
Music_Emu::mute_voices_( m );
@@ -276,17 +286,29 @@ blargg_err_t Spc_Emu::load_mem_( byte const* in, long size )
// Emulation
-void Spc_Emu::set_tempo_( double t ) { apu.set_tempo( (int) (t * Snes_Spc::tempo_unit) ); }
+void Spc_Emu::set_tempo_( double t )
+{
+ apu.set_tempo( (int) (t * apu.tempo_unit) );
+}
blargg_err_t Spc_Emu::start_track_( int track )
{
RETURN_ERR( Music_Emu::start_track_( track ) );
resampler.clear();
+ filter.clear();
RETURN_ERR( apu.load_spc( file_data, file_size ) );
+ filter.set_gain( (int) (gain() * SPC_Filter::gain_unit) );
apu.clear_echo();
return 0;
}
+blargg_err_t Spc_Emu::play_and_filter( long count, sample_t out [] )
+{
+ RETURN_ERR( apu.play( count, out ) );
+ filter.run( out, count );
+ return 0;
+}
+
blargg_err_t Spc_Emu::skip_( long count )
{
if ( sample_rate() != native_sample_rate )
@@ -298,7 +320,10 @@ blargg_err_t Spc_Emu::skip_( long count )
// TODO: shouldn't skip be adjusted for the 64 samples read afterwards?
if ( count > 0 )
+ {
RETURN_ERR( apu.skip( count ) );
+ filter.clear();
+ }
// eliminate pop due to resampler
const int resampler_latency = 64;
@@ -309,7 +334,7 @@ blargg_err_t Spc_Emu::skip_( long count )
blargg_err_t Spc_Emu::play_( long count, sample_t* out )
{
if ( sample_rate() == native_sample_rate )
- return apu.play( count, out );
+ return play_and_filter( count, out );
long remain = count;
while ( remain > 0 )
@@ -318,7 +343,7 @@ blargg_err_t Spc_Emu::play_( long count, sample_t* out )
if ( remain > 0 )
{
long n = resampler.max_write();
- RETURN_ERR( apu.play( n, resampler.buffer() ) );
+ RETURN_ERR( play_and_filter( n, resampler.buffer() ) );
resampler.write( n );
}
}
diff --git a/src/console/Spc_Emu.h b/src/console/Spc_Emu.h
index 44b54c3..ab034ad 100644
--- a/src/console/Spc_Emu.h
+++ b/src/console/Spc_Emu.h
@@ -1,12 +1,13 @@
// Super Nintendo SPC music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef SPC_EMU_H
#define SPC_EMU_H
#include "Fir_Resampler.h"
#include "Music_Emu.h"
#include "Snes_Spc.h"
+#include "Spc_Filter.h"
class Spc_Emu : public Music_Emu {
public:
@@ -65,11 +66,15 @@ protected:
blargg_err_t skip_( long );
void mute_voices_( int );
void set_tempo_( double );
+ void enable_accuracy_( bool );
private:
byte const* file_data;
long file_size;
Fir_Resampler<24> resampler;
+ SPC_Filter filter;
Snes_Spc apu;
+
+ blargg_err_t play_and_filter( long count, sample_t out [] );
};
inline void Spc_Emu::disable_surround( bool b ) { apu.disable_surround( b ); }
diff --git a/src/console/Spc_Filter.cxx b/src/console/Spc_Filter.cxx
new file mode 100644
index 0000000..9b7ace9
--- /dev/null
+++ b/src/console/Spc_Filter.cxx
@@ -0,0 +1,83 @@
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
+
+#include "Spc_Filter.h"
+
+#include <string.h>
+
+/* Copyright (C) 2007 Shay Green. This module is free software; you
+can redistribute it and/or modify it under the terms of the GNU Lesser
+General Public License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version. This
+module 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 Lesser General Public License for more
+details. You should have received a copy of the GNU Lesser General Public
+License along with this module; if not, write to the Free Software Foundation,
+Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#include "blargg_source.h"
+
+void SPC_Filter::clear() { memset( ch, 0, sizeof ch ); }
+
+SPC_Filter::SPC_Filter()
+{
+ enabled = true;
+ gain = gain_unit;
+ bass = bass_norm;
+ clear();
+}
+
+void SPC_Filter::run( short* io, int count )
+{
+ require( (count & 1) == 0 ); // must be even
+
+ int const gain = this->gain;
+ if ( enabled )
+ {
+ int const bass = this->bass;
+ chan_t* c = &ch [2];
+ do
+ {
+ // cache in registers
+ int sum = (--c)->sum;
+ int pp1 = c->pp1;
+ int p1 = c->p1;
+
+ for ( int i = 0; i < count; i += 2 )
+ {
+ // Low-pass filter (two point FIR with coeffs 0.25, 0.75)
+ int f = io [i] + p1;
+ p1 = io [i] * 3;
+
+ // High-pass filter ("leaky integrator")
+ int delta = f - pp1;
+ pp1 = f;
+ int s = sum >> (gain_bits + 2);
+ sum += (delta * gain) - (sum >> bass);
+
+ // Clamp to 16 bits
+ if ( (short) s != s )
+ s = (s >> 31) ^ 0x7FFF;
+
+ io [i] = (short) s;
+ }
+
+ c->p1 = p1;
+ c->pp1 = pp1;
+ c->sum = sum;
+ ++io;
+ }
+ while ( c != ch );
+ }
+ else if ( gain != gain_unit )
+ {
+ short* const end = io + count;
+ while ( io < end )
+ {
+ int s = (*io * gain) >> gain_bits;
+ if ( (short) s != s )
+ s = (s >> 31) ^ 0x7FFF;
+ *io++ = (short) s;
+ }
+ }
+}
diff --git a/src/console/Spc_Filter.h b/src/console/Spc_Filter.h
new file mode 100644
index 0000000..9de56b1
--- /dev/null
+++ b/src/console/Spc_Filter.h
@@ -0,0 +1,53 @@
+// Simple low-pass and high-pass filter to better match sound output of a SNES
+
+// Game_Music_Emu 0.5.5
+#ifndef SPC_FILTER_H
+#define SPC_FILTER_H
+
+#include "blargg_common.h"
+
+struct SPC_Filter {
+public:
+
+ // Filters count samples of stereo sound in place. Count must be a multiple of 2.
+ typedef short sample_t;
+ void run( sample_t* io, int count );
+
+// Optional features
+
+ // Clears filter to silence
+ void clear();
+
+ // Sets gain (volume), where gain_unit is normal. Gains greater than gain_unit
+ // are fine, since output is clamped to 16-bit sample range.
+ enum { gain_unit = 0x100 };
+ void set_gain( int gain );
+
+ // Enables/disables filtering (when disabled, gain is still applied)
+ void enable( bool b );
+
+ // Sets amount of bass (logarithmic scale)
+ enum { bass_none = 0 };
+ enum { bass_norm = 8 }; // normal amount
+ enum { bass_max = 31 };
+ void set_bass( int bass );
+
+public:
+ SPC_Filter();
+ BLARGG_DISABLE_NOTHROW
+private:
+ enum { gain_bits = 8 };
+ int gain;
+ int bass;
+ bool enabled;
+ struct chan_t { int p1, pp1, sum; };
+ chan_t ch [2];
+};
+
+inline void SPC_Filter::enable( bool b ) { enabled = b; }
+
+inline void SPC_Filter::set_gain( int g ) { gain = g; }
+
+inline void SPC_Filter::set_bass( int b ) { bass = b; }
+
+#endif
diff --git a/src/console/Vfs_File.cxx b/src/console/Vfs_File.cxx
index 1a47686..618c0a7 100644
--- a/src/console/Vfs_File.cxx
+++ b/src/console/Vfs_File.cxx
@@ -1,54 +1,71 @@
+#include <stdio.h>
+
#include "Vfs_File.h"
-Vfs_File_Reader::Vfs_File_Reader() : file_( 0 ), owned_file_( 0 ) { }
+extern "C" {
+#include "libaudcore/vfs.h"
+}
-Vfs_File_Reader::~Vfs_File_Reader() { close(); }
+struct reader_private {
+ VFSFile * file, * owned_file;
+};
-void Vfs_File_Reader::reset( VFSFile* f )
+Vfs_File_Reader::Vfs_File_Reader ()
{
- close();
- file_ = f;
+ p = new struct reader_private;
+ p->file = 0;
+ p->owned_file = 0;
+}
+
+Vfs_File_Reader::~Vfs_File_Reader ()
+{
+ close ();
+ delete p;
+}
+
+void Vfs_File_Reader::reset (/* VFSFile * */ void * file)
+{
+ close ();
+ p->file = (VFSFile *) file;
}
Vfs_File_Reader::error_t Vfs_File_Reader::open( const char* path )
{
close();
- file_ = owned_file_ = vfs_fopen( path, "rb" );
- if ( !file_ )
+ p->file = p->owned_file = vfs_fopen (path, "r");
+ if (! p->file)
return "Couldn't open file";
return 0;
}
long Vfs_File_Reader::size() const
{
- return vfs_fsize (file_);
+ return vfs_fsize (p->file);
}
-long Vfs_File_Reader::read_avail( void* p, long s )
+long Vfs_File_Reader::read_avail (void * buf, long size)
{
- return (long) vfs_fread( p, 1, s, file_ );
+ return (long) vfs_fread (buf, 1, size, p->file);
}
long Vfs_File_Reader::tell() const
{
- return vfs_ftell( file_ );
+ return vfs_ftell (p->file);
}
Vfs_File_Reader::error_t Vfs_File_Reader::seek( long n )
{
- if ( n == 0 ) // optimization
- vfs_rewind( file_ );
- else if ( vfs_fseek( file_, n, SEEK_SET ) != 0 )
+ if (vfs_fseek (p->file, n, SEEK_SET) < 0)
return eof_error;
return 0;
}
void Vfs_File_Reader::close()
{
- file_ = 0;
- if ( owned_file_ )
+ p->file = 0;
+ if (p->owned_file)
{
- vfs_fclose( owned_file_ );
- owned_file_ = 0;
+ vfs_fclose (p->owned_file);
+ p->owned_file = 0;
}
}
diff --git a/src/console/Vfs_File.h b/src/console/Vfs_File.h
index 6b29afb..2675583 100644
--- a/src/console/Vfs_File.h
+++ b/src/console/Vfs_File.h
@@ -5,15 +5,11 @@
#include "Data_Reader.h"
-extern "C" {
-#include <audacious/plugin.h>
-}
-
class Vfs_File_Reader : public File_Reader {
public:
- void reset( VFSFile* ); // use already-open file and doesn't close it in close()
+ // use already-open file and doesn't close it in close()
+ void reset (/* VFSFile * */ void * file);
error_t open( const char* path );
- VFSFile* file() const { return file_; }
void close();
public:
@@ -24,8 +20,7 @@ public:
long tell() const;
error_t seek( long );
private:
- VFSFile* file_;
- VFSFile* owned_file_;
+ struct reader_private * p;
};
#endif
diff --git a/src/console/Vgm_Emu.cxx b/src/console/Vgm_Emu.cxx
index bfe509a..6a7cb98 100644
--- a/src/console/Vgm_Emu.cxx
+++ b/src/console/Vgm_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Vgm_Emu.h"
@@ -177,7 +177,7 @@ struct Vgm_File : Gme_Info_
long gd3_offset = get_le32( h.gd3_offset ) - 0x2C;
long remain = file_size - Vgm_Emu::header_size - gd3_offset;
byte gd3_h [gd3_header_size];
- if ( gd3_offset > 0 || remain >= gd3_header_size )
+ if ( gd3_offset > 0 && remain >= gd3_header_size )
{
RETURN_ERR( in.skip( gd3_offset ) );
RETURN_ERR( in.read( gd3_h, sizeof gd3_h ) );
@@ -203,8 +203,12 @@ struct Vgm_File : Gme_Info_
static Music_Emu* new_vgm_emu () { return BLARGG_NEW Vgm_Emu ; }
static Music_Emu* new_vgm_file() { return BLARGG_NEW Vgm_File; }
-gme_type_t_ const gme_vgm_type [1] = {{ "Sega SMS/Genesis", 1, &new_vgm_emu, &new_vgm_file, "VGM", 1 }};
-gme_type_t_ const gme_vgz_type [1] = {{ "Sega SMS/Genesis", 1, &new_vgm_emu, &new_vgm_file, "VGZ", 1 }};
+static gme_type_t_ const gme_vgm_type_ = { "Sega SMS/Genesis", 1, &new_vgm_emu, &new_vgm_file, "VGM", 1 };
+gme_type_t const gme_vgm_type = &gme_vgm_type_;
+
+static gme_type_t_ const gme_vgz_type_ = { "Sega SMS/Genesis", 1, &new_vgm_emu, &new_vgm_file, "VGZ", 1 };
+gme_type_t const gme_vgz_type = &gme_vgz_type_;
+
// Setup
@@ -214,8 +218,8 @@ void Vgm_Emu::set_tempo_( double t )
{
vgm_rate = (long) (44100 * t + 0.5);
blip_time_factor = (long) floor( double (1L << blip_time_bits) / vgm_rate * psg_rate + 0.5 );
- //dprintf( "blip_time_factor: %ld\n", blip_time_factor );
- //dprintf( "vgm_rate: %ld\n", vgm_rate );
+ //debug_printf( "blip_time_factor: %ld\n", blip_time_factor );
+ //debug_printf( "vgm_rate: %ld\n", vgm_rate );
// TODO: remove? calculates vgm_rate more accurately (above differs at most by one Hz only)
//blip_time_factor = (long) floor( double (1L << blip_time_bits) * psg_rate / 44100 / t + 0.5 );
//vgm_rate = (long) floor( double (1L << blip_time_bits) * psg_rate / blip_time_factor + 0.5 );
diff --git a/src/console/Vgm_Emu.h b/src/console/Vgm_Emu.h
index bcb784d..bcfa506 100644
--- a/src/console/Vgm_Emu.h
+++ b/src/console/Vgm_Emu.h
@@ -1,6 +1,6 @@
// Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro VGM music file emulator
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef VGM_EMU_H
#define VGM_EMU_H
diff --git a/src/console/Vgm_Emu_Impl.cxx b/src/console/Vgm_Emu_Impl.cxx
index a2d7c93..5a9b724 100644
--- a/src/console/Vgm_Emu_Impl.cxx
+++ b/src/console/Vgm_Emu_Impl.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Vgm_Emu.h"
@@ -244,7 +244,7 @@ int Vgm_Emu_Impl::play_frame( blip_time_t blip_time, int sample_count, sample_t*
int pairs = min_pairs;
while ( (pairs = to_fm_time( vgm_time )) < min_pairs )
vgm_time++;
- //dprintf( "pairs: %d, min_pairs: %d\n", pairs, min_pairs );
+ //debug_printf( "pairs: %d, min_pairs: %d\n", pairs, min_pairs );
if ( ym2612.enabled() )
{
diff --git a/src/console/Vgm_Emu_Impl.h b/src/console/Vgm_Emu_Impl.h
index 4d387d0..8a73c32 100644
--- a/src/console/Vgm_Emu_Impl.h
+++ b/src/console/Vgm_Emu_Impl.h
@@ -1,6 +1,6 @@
// Low-level parts of Vgm_Emu
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef VGM_EMU_IMPL_H
#define VGM_EMU_IMPL_H
diff --git a/src/console/Ym2612_Emu.cxx b/src/console/Ym2612_Emu.cxx
index 41ebb09..390fdfc 100644
--- a/src/console/Ym2612_Emu.cxx
+++ b/src/console/Ym2612_Emu.cxx
@@ -1,4 +1,4 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
// Based on Gens 2.10 ym2612.c
diff --git a/src/console/Ym2612_Emu.h b/src/console/Ym2612_Emu.h
index 383ac72..314b339 100644
--- a/src/console/Ym2612_Emu.h
+++ b/src/console/Ym2612_Emu.h
@@ -1,6 +1,6 @@
// YM2612 FM sound chip emulator interface
-// Game_Music_Emu 0.5.2
+// Game_Music_Emu 0.5.5
#ifndef YM2612_EMU_H
#define YM2612_EMU_H
diff --git a/src/console/blargg_common.h b/src/console/blargg_common.h
index ba6cc4c..ed218a8 100644
--- a/src/console/blargg_common.h
+++ b/src/console/blargg_common.h
@@ -15,6 +15,13 @@
#ifndef BLARGG_COMMON_H
#define BLARGG_COMMON_H
+// BLARGG_RESTRICT: equivalent to restrict, where supported
+#if __GNUC__ >= 3 || _MSC_VER >= 1100
+ #define BLARGG_RESTRICT __restrict
+#else
+ #define BLARGG_RESTRICT
+#endif
+
// STATIC_CAST(T,expr): Used in place of static_cast<T> (expr)
#ifndef STATIC_CAST
#define STATIC_CAST(T,expr) ((T) (expr))
@@ -54,10 +61,11 @@ public:
};
#ifndef BLARGG_DISABLE_NOTHROW
- #if __cplusplus < 199711
- #define BLARGG_THROWS( spec )
- #else
+ // throw spec mandatory in ISO C++ if operator new can return NULL
+ #if __cplusplus >= 199711 || __GNUC__ >= 3
#define BLARGG_THROWS( spec ) throw spec
+ #else
+ #define BLARGG_THROWS( spec )
#endif
#define BLARGG_DISABLE_NOTHROW \
void* operator new ( size_t s ) BLARGG_THROWS(()) { return malloc( s ); }\
@@ -68,6 +76,7 @@ public:
#define BLARGG_NEW new (std::nothrow)
#endif
+// BLARGG_4CHAR('a','b','c','d') = 'abcd' (four character integer constant)
#define BLARGG_4CHAR( a, b, c, d ) \
((a&0xFF)*0x1000000L + (b&0xFF)*0x10000L + (c&0xFF)*0x100L + (d&0xFF))
@@ -76,7 +85,7 @@ public:
#ifdef _MSC_VER
// MSVC6 (_MSC_VER < 1300) fails for use of __LINE__ when /Zl is specified
#define BOOST_STATIC_ASSERT( expr ) \
- void blargg_failed_( int (*arg) [2 / !!(expr) - 1] )
+ void blargg_failed_( int (*arg) [2 / (int) !!(expr) - 1] )
#else
// Some other compilers fail when declaring same function multiple times in class,
// so differentiate them by line
@@ -110,18 +119,17 @@ public:
#endif
// blargg_long/blargg_ulong = at least 32 bits, int if it's big enough
-#include <limits.h>
-#if INT_MAX >= 0x7FFFFFFF
- typedef int blargg_long;
-#else
+#if INT_MAX < 0x7FFFFFFF || LONG_MAX == 0x7FFFFFFF
typedef long blargg_long;
+#else
+ typedef int blargg_long;
#endif
-#if UINT_MAX >= 0xFFFFFFFF
- typedef unsigned blargg_ulong;
-#else
+#if UINT_MAX < 0xFFFFFFFF || ULONG_MAX == 0xFFFFFFFF
typedef unsigned long blargg_ulong;
+#else
+ typedef unsigned blargg_ulong;
#endif
// BOOST::int8_t etc.
@@ -171,5 +179,18 @@ public:
};
#endif
+#if __GNUC__ >= 3
+ #define BLARGG_DEPRECATED __attribute__ ((deprecated))
+#else
+ #define BLARGG_DEPRECATED
+#endif
+
+// Use in place of "= 0;" for a pure virtual, since these cause calls to std C++ lib.
+// During development, BLARGG_PURE( x ) expands to = 0;
+// virtual int func() BLARGG_PURE( { return 0; } )
+#ifndef BLARGG_PURE
+ #define BLARGG_PURE( def ) def
+#endif
+
#endif
#endif
diff --git a/src/console/blargg_endian.h b/src/console/blargg_endian.h
index 6716556..ba09e06 100644
--- a/src/console/blargg_endian.h
+++ b/src/console/blargg_endian.h
@@ -1,20 +1,20 @@
// CPU Byte Order Utilities
-// Game_Music_Emu 0.5.2
#ifndef BLARGG_ENDIAN
#define BLARGG_ENDIAN
#include "blargg_common.h"
// BLARGG_CPU_CISC: Defined if CPU has very few general-purpose registers (< 16)
-#if defined (_M_IX86) || defined (_M_IA64) || defined (__i486__) || \
- defined (__x86_64__) || defined (__ia64__) || defined (__i386__)
+#if defined (__i386__) || defined (__x86_64__) || defined (_M_IX86) || defined (_M_X64)
#define BLARGG_CPU_X86 1
#define BLARGG_CPU_CISC 1
#endif
-#if defined (__powerpc__) || defined (__ppc__) || defined (__POWERPC__) || defined (__powerc)
+#if defined (__powerpc__) || defined (__ppc__) || defined (__ppc64__) || \
+ defined (__POWERPC__) || defined (__powerc)
#define BLARGG_CPU_POWERPC 1
+ #define BLARGG_CPU_RISC 1
#endif
// BLARGG_BIG_ENDIAN, BLARGG_LITTLE_ENDIAN: Determined automatically, otherwise only
@@ -36,10 +36,10 @@
#endif
#if defined (MSB_FIRST) || defined (__BIG_ENDIAN__) || defined (WORDS_BIGENDIAN) || \
- defined (__mips__) || defined (__sparc__) || BLARGG_CPU_POWERPC || \
+ defined (__sparc__) || BLARGG_CPU_POWERPC || \
(defined (BIG_ENDIAN) && BIG_ENDIAN+0 != 4321)
#define BLARGG_BIG_ENDIAN 1
-#else
+#elif !defined (__mips__)
// No endian specified; assume little-endian, since it's most common
#define BLARGG_LITTLE_ENDIAN 1
#endif
@@ -64,45 +64,60 @@ inline void blargg_verify_byte_order()
#endif
}
-inline unsigned get_le16( void const* p ) {
- return ((unsigned char const*) p) [1] * 0x100u +
- ((unsigned char const*) p) [0];
+inline unsigned get_le16( void const* p )
+{
+ return (unsigned) ((unsigned char const*) p) [1] << 8 |
+ (unsigned) ((unsigned char const*) p) [0];
}
-inline unsigned get_be16( void const* p ) {
- return ((unsigned char const*) p) [0] * 0x100u +
- ((unsigned char const*) p) [1];
+
+inline unsigned get_be16( void const* p )
+{
+ return (unsigned) ((unsigned char const*) p) [0] << 8 |
+ (unsigned) ((unsigned char const*) p) [1];
}
-inline blargg_ulong get_le32( void const* p ) {
- return ((unsigned char const*) p) [3] * 0x01000000u +
- ((unsigned char const*) p) [2] * 0x00010000u +
- ((unsigned char const*) p) [1] * 0x00000100u +
- ((unsigned char const*) p) [0];
+
+inline blargg_ulong get_le32( void const* p )
+{
+ return (blargg_ulong) ((unsigned char const*) p) [3] << 24 |
+ (blargg_ulong) ((unsigned char const*) p) [2] << 16 |
+ (blargg_ulong) ((unsigned char const*) p) [1] << 8 |
+ (blargg_ulong) ((unsigned char const*) p) [0];
}
-inline blargg_ulong get_be32( void const* p ) {
- return ((unsigned char const*) p) [0] * 0x01000000u +
- ((unsigned char const*) p) [1] * 0x00010000u +
- ((unsigned char const*) p) [2] * 0x00000100u +
- ((unsigned char const*) p) [3];
+
+inline blargg_ulong get_be32( void const* p )
+{
+ return (blargg_ulong) ((unsigned char const*) p) [0] << 24 |
+ (blargg_ulong) ((unsigned char const*) p) [1] << 16 |
+ (blargg_ulong) ((unsigned char const*) p) [2] << 8 |
+ (blargg_ulong) ((unsigned char const*) p) [3];
}
-inline void set_le16( void* p, unsigned n ) {
+
+inline void set_le16( void* p, unsigned n )
+{
((unsigned char*) p) [1] = (unsigned char) (n >> 8);
((unsigned char*) p) [0] = (unsigned char) n;
}
-inline void set_be16( void* p, unsigned n ) {
+
+inline void set_be16( void* p, unsigned n )
+{
((unsigned char*) p) [0] = (unsigned char) (n >> 8);
((unsigned char*) p) [1] = (unsigned char) n;
}
-inline void set_le32( void* p, blargg_ulong n ) {
- ((unsigned char*) p) [3] = (unsigned char) (n >> 24);
- ((unsigned char*) p) [2] = (unsigned char) (n >> 16);
- ((unsigned char*) p) [1] = (unsigned char) (n >> 8);
+
+inline void set_le32( void* p, blargg_ulong n )
+{
((unsigned char*) p) [0] = (unsigned char) n;
+ ((unsigned char*) p) [1] = (unsigned char) (n >> 8);
+ ((unsigned char*) p) [2] = (unsigned char) (n >> 16);
+ ((unsigned char*) p) [3] = (unsigned char) (n >> 24);
}
-inline void set_be32( void* p, blargg_ulong n ) {
- ((unsigned char*) p) [0] = (unsigned char) (n >> 24);
- ((unsigned char*) p) [1] = (unsigned char) (n >> 16);
- ((unsigned char*) p) [2] = (unsigned char) (n >> 8);
+
+inline void set_be32( void* p, blargg_ulong n )
+{
((unsigned char*) p) [3] = (unsigned char) n;
+ ((unsigned char*) p) [2] = (unsigned char) (n >> 8);
+ ((unsigned char*) p) [1] = (unsigned char) (n >> 16);
+ ((unsigned char*) p) [0] = (unsigned char) (n >> 24);
}
#if BLARGG_NONPORTABLE
@@ -117,30 +132,41 @@ inline void set_be32( void* p, blargg_ulong n ) {
#define GET_BE32( addr ) (*(BOOST::uint32_t*) (addr))
#define SET_BE16( addr, data ) (void) (*(BOOST::uint16_t*) (addr) = (data))
#define SET_BE32( addr, data ) (void) (*(BOOST::uint32_t*) (addr) = (data))
- #endif
-
- #if BLARGG_CPU_POWERPC && defined (__MWERKS__)
- // PowerPC has special byte-reversed instructions
- // to do: assumes that PowerPC is running in big-endian mode
- // to do: implement for other compilers which don't support these macros
- #define GET_LE16( addr ) (__lhbrx( (addr), 0 ))
- #define GET_LE32( addr ) (__lwbrx( (addr), 0 ))
- #define SET_LE16( addr, data ) (__sthbrx( (data), (addr), 0 ))
- #define SET_LE32( addr, data ) (__stwbrx( (data), (addr), 0 ))
+
+ #if BLARGG_CPU_POWERPC
+ // PowerPC has special byte-reversed instructions
+ #if defined (__MWERKS__)
+ #define GET_LE16( addr ) (__lhbrx( addr, 0 ))
+ #define GET_LE32( addr ) (__lwbrx( addr, 0 ))
+ #define SET_LE16( addr, in ) (__sthbrx( in, addr, 0 ))
+ #define SET_LE32( addr, in ) (__stwbrx( in, addr, 0 ))
+ #elif defined (__GNUC__)
+ #define GET_LE16( addr ) ({unsigned short ppc_lhbrx_; __asm__ volatile( "lhbrx %0,0,%1" : "=r" (ppc_lhbrx_) : "r" (addr) : "memory" ); ppc_lhbrx_;})
+ #define GET_LE32( addr ) ({unsigned short ppc_lwbrx_; __asm__ volatile( "lwbrx %0,0,%1" : "=r" (ppc_lwbrx_) : "r" (addr) : "memory" ); ppc_lwbrx_;})
+ #define SET_LE16( addr, in ) ({__asm__ volatile( "sthbrx %0,0,%1" : : "r" (in), "r" (addr) : "memory" );})
+ #define SET_LE32( addr, in ) ({__asm__ volatile( "stwbrx %0,0,%1" : : "r" (in), "r" (addr) : "memory" );})
+ #endif
+ #endif
#endif
#endif
#ifndef GET_LE16
#define GET_LE16( addr ) get_le16( addr )
- #define GET_LE32( addr ) get_le32( addr )
#define SET_LE16( addr, data ) set_le16( addr, data )
+#endif
+
+#ifndef GET_LE32
+ #define GET_LE32( addr ) get_le32( addr )
#define SET_LE32( addr, data ) set_le32( addr, data )
#endif
#ifndef GET_BE16
#define GET_BE16( addr ) get_be16( addr )
- #define GET_BE32( addr ) get_be32( addr )
#define SET_BE16( addr, data ) set_be16( addr, data )
+#endif
+
+#ifndef GET_BE32
+ #define GET_BE32( addr ) get_be32( addr )
#define SET_BE32( addr, data ) set_be32( addr, data )
#endif
diff --git a/src/console/blargg_source.h b/src/console/blargg_source.h
index 945bf34..b011777 100644
--- a/src/console/blargg_source.h
+++ b/src/console/blargg_source.h
@@ -1,4 +1,8 @@
-// Included at the beginning of library source files, after all other #include lines
+/* Included at the beginning of library source files, after all other #include lines.
+Sets up helpful macros and services used in my source code. They don't need
+module an annoying module prefix on their names since they are defined after
+all other #include lines. */
+
#ifndef BLARGG_SOURCE_H
#define BLARGG_SOURCE_H
@@ -16,10 +20,10 @@
// Like printf() except output goes to debug log file. Might be defined to do
// nothing (not even evaluate its arguments).
-// void dprintf( const char* format, ... );
-inline void blargg_dprintf_( const char*, ... ) { }
-#undef dprintf
-#define dprintf (1) ? (void) 0 : blargg_dprintf_
+// void debug_printf( const char* format, ... );
+static inline void blargg_dprintf_( const char*, ... ) { }
+#undef debug_printf
+#define debug_printf (1) ? (void) 0 : blargg_dprintf_
// If enabled, evaluate expr and if false, make debug log entry with source file
// and line. Meant for finding situations that should be examined further, but that
@@ -42,9 +46,25 @@ inline void blargg_dprintf_( const char*, ... ) { }
#undef min
#undef max
+#define DEF_MIN_MAX( type ) \
+ static inline type min( type x, type y ) { if ( x < y ) return x; return y; }\
+ static inline type max( type x, type y ) { if ( y < x ) return x; return y; }
+
+DEF_MIN_MAX( int )
+DEF_MIN_MAX( unsigned )
+DEF_MIN_MAX( long )
+DEF_MIN_MAX( unsigned long )
+DEF_MIN_MAX( float )
+DEF_MIN_MAX( double )
+
+#undef DEF_MIN_MAX
+
+/*
// using const references generates crappy code, and I am currenly only using these
// for built-in types, so they take arguments by value
+// TODO: remove
+inline int min( int x, int y )
template<class T>
inline T min( T x, T y )
{
@@ -60,17 +80,29 @@ inline T max( T x, T y )
return y;
return x;
}
+*/
// TODO: good idea? bad idea?
#undef byte
#define byte byte_
typedef unsigned char byte;
+// Setup compiler defines useful for exporting required public API symbols in gme.cpp
+#ifndef BLARGG_EXPORT
+ #if defined (_WIN32) && defined(BLARGG_BUILD_DLL)
+ #define BLARGG_EXPORT __declspec(dllexport)
+ #elif defined (LIBGME_VISIBILITY)
+ #define BLARGG_EXPORT __attribute__((visibility ("default")))
+ #else
+ #define BLARGG_EXPORT
+ #endif
+#endif
+
// deprecated
#define BLARGG_CHECK_ALLOC CHECK_ALLOC
#define BLARGG_RETURN_ERR RETURN_ERR
-// BLARGG_SOURCE_BEGIN: If defined, #included, allowing redefition of dprintf and check
+// BLARGG_SOURCE_BEGIN: If defined, #included, allowing redefition of debug_printf and check
#ifdef BLARGG_SOURCE_BEGIN
#include BLARGG_SOURCE_BEGIN
#endif
diff --git a/src/console/configure.c b/src/console/configure.c
index d0365a7..5caf75b 100644
--- a/src/console/configure.c
+++ b/src/console/configure.c
@@ -13,52 +13,51 @@
#include <glib.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#define CON_CFGID "console"
-AudaciousConsoleConfig audcfg = {
- 180,
- FALSE,
- 32000,
- 0,
- 0,
- FALSE,
- 0,
- FALSE
-};
+AudaciousConsoleConfig audcfg;
+static const gchar * const console_defaults[] = {
+ "loop_length", "180",
+ "resample", "FALSE",
+ "resample_rate", "32000",
+ "treble", "0",
+ "bass", "0",
+ "ignore_spc_length", "FALSE",
+ "echo", "0",
+ "inc_spc_reverb", "FALSE",
+ NULL};
// TODO: add UI for echo
-void console_cfg_load( void )
+void console_cfg_load (void)
{
- mcs_handle_t *db = aud_cfg_db_open();
- aud_cfg_db_get_int(db, CON_CFGID, "loop_length", &audcfg.loop_length);
- aud_cfg_db_get_bool(db, CON_CFGID, "resample", &audcfg.resample);
- aud_cfg_db_get_int(db, CON_CFGID, "resample_rate", &audcfg.resample_rate);
- aud_cfg_db_get_int(db, CON_CFGID, "treble", &audcfg.treble);
- aud_cfg_db_get_int(db, CON_CFGID, "bass", &audcfg.bass);
- aud_cfg_db_get_bool(db, CON_CFGID, "ignore_spc_length", &audcfg.ignore_spc_length);
- aud_cfg_db_get_int(db, CON_CFGID, "echo", &audcfg.echo);
- aud_cfg_db_get_bool(db, CON_CFGID, "inc_spc_reverb", &audcfg.inc_spc_reverb);
- aud_cfg_db_close(db);
-}
+ aud_config_set_defaults (CON_CFGID, console_defaults);
+ audcfg.loop_length = aud_get_int (CON_CFGID, "loop_length");
+ audcfg.resample = aud_get_bool (CON_CFGID, "resample");
+ audcfg.resample_rate = aud_get_int (CON_CFGID, "resample_rate");
+ audcfg.treble = aud_get_int (CON_CFGID, "treble");
+ audcfg.bass = aud_get_int (CON_CFGID, "bass");
+ audcfg.ignore_spc_length = aud_get_bool (CON_CFGID, "ignore_spc_length");
+ audcfg.echo = aud_get_int (CON_CFGID, "echo");
+ audcfg.inc_spc_reverb = aud_get_bool (CON_CFGID, "inc_spc_reverb");
+}
-void console_cfg_save( void )
+void console_cfg_save (void)
{
- mcs_handle_t *db = aud_cfg_db_open();
- aud_cfg_db_set_int(db, CON_CFGID, "loop_length", audcfg.loop_length);
- aud_cfg_db_set_bool(db, CON_CFGID, "resample", audcfg.resample);
- aud_cfg_db_set_int(db, CON_CFGID, "resample_rate", audcfg.resample_rate);
- aud_cfg_db_set_int(db, CON_CFGID, "treble", audcfg.treble);
- aud_cfg_db_set_int(db, CON_CFGID, "bass", audcfg.bass);
- aud_cfg_db_set_bool(db, CON_CFGID, "ignore_spc_length", audcfg.ignore_spc_length);
- aud_cfg_db_set_int(db, CON_CFGID, "echo", audcfg.echo);
- aud_cfg_db_set_bool(db, CON_CFGID, "inc_spc_reverb", audcfg.inc_spc_reverb);
- aud_cfg_db_close(db);
+ aud_set_int (CON_CFGID, "loop_length", audcfg.loop_length);
+ aud_set_bool (CON_CFGID, "resample", audcfg.resample);
+ aud_set_int (CON_CFGID, "resample_rate", audcfg.resample_rate);
+ aud_set_int (CON_CFGID, "treble", audcfg.treble);
+ aud_set_int (CON_CFGID, "bass", audcfg.bass);
+ aud_set_bool (CON_CFGID, "ignore_spc_length", audcfg.ignore_spc_length);
+ aud_set_int (CON_CFGID, "echo", audcfg.echo);
+ aud_set_bool (CON_CFGID, "inc_spc_reverb", audcfg.inc_spc_reverb);
}
@@ -268,11 +267,9 @@ void console_cfg_ui(void)
gtk_container_add( GTK_CONTAINER(hbuttonbox) , button_ok );
gtk_box_pack_start( GTK_BOX(configwin_vbox) , hbuttonbox , FALSE , FALSE , 0 );
-#if GTK_CHECK_VERSION (2, 12, 0)
gtk_widget_set_tooltip_text( configwin_gen_playback_deflen_spbt ,
_("The default song length, expressed in seconds, is used for songs "
"that do not provide length information (i.e. looping tracks)."));
-#endif
gtk_widget_show_all( configwin );
}
diff --git a/src/console/gb_cpu_io.h b/src/console/gb_cpu_io.h
index ada99ea..8bd69aa 100644
--- a/src/console/gb_cpu_io.h
+++ b/src/console/gb_cpu_io.h
@@ -10,9 +10,9 @@ int Gbs_Emu::cpu_read( gb_addr_t addr )
result = apu.read_register( clock(), addr );
#ifndef NDEBUG
else if ( unsigned (addr - 0x8000) < 0x2000 || unsigned (addr - 0xE000) < 0x1F00 )
- dprintf( "Read from unmapped memory $%.4x\n", (unsigned) addr );
+ debug_printf( "Read from unmapped memory $%.4x\n", (unsigned) addr );
else if ( unsigned (addr - 0xFF01) < 0xFF80 - 0xFF01 )
- dprintf( "Unhandled I/O read 0x%4X\n", (unsigned) addr );
+ debug_printf( "Unhandled I/O read 0x%4X\n", (unsigned) addr );
#endif
return result;
}
@@ -38,7 +38,7 @@ void Gbs_Emu::cpu_write( gb_addr_t addr, int data )
ram [offset] = 0xFF;
//if ( addr == 0xFFFF )
- // dprintf( "Wrote interrupt mask\n" );
+ // debug_printf( "Wrote interrupt mask\n" );
}
}
else if ( (addr ^ 0x2000) <= 0x2000 - 1 )
@@ -48,7 +48,7 @@ void Gbs_Emu::cpu_write( gb_addr_t addr, int data )
#ifndef NDEBUG
else if ( unsigned (addr - 0x8000) < 0x2000 || unsigned (addr - 0xE000) < 0x1F00 )
{
- dprintf( "Wrote to unmapped memory $%.4x\n", (unsigned) addr );
+ debug_printf( "Wrote to unmapped memory $%.4x\n", (unsigned) addr );
}
#endif
}
@@ -59,7 +59,7 @@ void Gbs_Emu::cpu_write( gb_addr_t addr, int data )
#define CPU_READ_FAST_( emu, addr, time, out ) \
{\
out = READ_PROG( addr );\
- if ( unsigned (addr - Gb_Apu::start_addr) <= Gb_Apu::register_count )\
+ if ( unsigned (addr - Gb_Apu::start_addr) < Gb_Apu::register_count )\
out = emu->apu.read_register( emu->cpu_time - time * clocks_per_instr, addr );\
else\
check( out == emu->cpu_read( addr ) );\
diff --git a/src/console/gme.cxx b/src/console/gme.cxx
index d6cebfa..35266de 100644
--- a/src/console/gme.cxx
+++ b/src/console/gme.cxx
@@ -1,7 +1,8 @@
-// Game_Music_Emu 0.5.2. http://www.slack.net/~ant/
+// Game_Music_Emu 0.5.5. http://www.slack.net/~ant/
#include "Music_Emu.h"
+#include "gme_types.h"
#if !GME_DISABLE_STEREO_DEPTH
#include "Effects_Buffer.h"
#endif
@@ -22,33 +23,51 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
#include "blargg_source.h"
-#ifndef GME_TYPE_LIST
-
-// Default list of all supported game music types (copy this to blargg_config.h
-// if you want to modify it)
-#define GME_TYPE_LIST \
- gme_ay_type,\
- gme_gbs_type,\
- gme_gym_type,\
- gme_hes_type,\
- gme_kss_type,\
- gme_nsf_type,\
- gme_nsfe_type,\
- gme_sap_type,\
- gme_spc_type,\
- gme_vgm_type,\
- gme_vgz_type
-
+BLARGG_EXPORT gme_type_t const* gme_type_list()
+{
+ static gme_type_t const gme_type_list_ [] = {
+#ifdef GME_TYPE_LIST
+ GME_TYPE_LIST,
+#else
+ #ifdef USE_GME_AY
+ gme_ay_type,
+ #endif
+ #ifdef USE_GME_GBS
+ gme_gbs_type,
+ #endif
+ #ifdef USE_GME_GYM
+ gme_gym_type,
+ #endif
+ #ifdef USE_GME_HES
+ gme_hes_type,
+ #endif
+ #ifdef USE_GME_KSS
+ gme_kss_type,
+ #endif
+ #ifdef USE_GME_NSF
+ gme_nsf_type,
+ #endif
+ #ifdef USE_GME_NSFE
+ gme_nsfe_type,
+ #endif
+ #ifdef USE_GME_SAP
+ gme_sap_type,
+ #endif
+ #ifdef USE_GME_SPC
+ gme_spc_type,
+ #endif
+ #ifdef USE_GME_VGM
+ gme_vgm_type,
+ gme_vgz_type,
+ #endif
#endif
+ 0
+ };
-static gme_type_t const gme_type_list_ [] = { GME_TYPE_LIST, 0 };
-
-gme_type_t const* gme_type_list()
-{
return gme_type_list_;
}
-const char* gme_identify_header( void const* header )
+BLARGG_EXPORT const char* gme_identify_header( void const* header )
{
switch ( get_be32( header ) )
{
@@ -77,7 +96,7 @@ static void to_uppercase( const char* in, int len, char* out )
*out = 0; // extension too long
}
-gme_type_t gme_identify_extension( const char* extension_ )
+BLARGG_EXPORT gme_type_t gme_identify_extension( const char* extension_ )
{
char const* end = strrchr( extension_, '.' );
if ( end )
@@ -86,13 +105,13 @@ gme_type_t gme_identify_extension( const char* extension_ )
char extension [6];
to_uppercase( extension_, sizeof extension, extension );
- for ( gme_type_t const* types = gme_type_list_; *types; types++ )
+ for ( gme_type_t const* types = gme_type_list(); *types; types++ )
if ( !strcmp( extension, (*types)->extension_ ) )
return *types;
return 0;
}
-gme_err_t gme_identify_file( const char* path, gme_type_t* type_out )
+BLARGG_EXPORT gme_err_t gme_identify_file( const char* path, gme_type_t* type_out )
{
*type_out = gme_identify_extension( path );
// TODO: don't examine header if file has extension?
@@ -107,7 +126,7 @@ gme_err_t gme_identify_file( const char* path, gme_type_t* type_out )
return 0;
}
-gme_err_t gme_open_data( void const* data, long size, Music_Emu** out, long sample_rate )
+BLARGG_EXPORT gme_err_t gme_open_data( void const* data, long size, Music_Emu** out, int sample_rate )
{
require( (data || !size) && out );
*out = 0;
@@ -131,7 +150,7 @@ gme_err_t gme_open_data( void const* data, long size, Music_Emu** out, long samp
return err;
}
-gme_err_t gme_open_file( const char* path, Music_Emu** out, long sample_rate )
+BLARGG_EXPORT gme_err_t gme_open_file( const char* path, Music_Emu** out, int sample_rate )
{
require( path && out );
*out = 0;
@@ -168,7 +187,7 @@ gme_err_t gme_open_file( const char* path, Music_Emu** out, long sample_rate )
return err;
}
-Music_Emu* gme_new_emu( gme_type_t type, long rate )
+BLARGG_EXPORT Music_Emu* gme_new_emu( gme_type_t type, int rate )
{
if ( type )
{
@@ -201,34 +220,107 @@ Music_Emu* gme_new_emu( gme_type_t type, long rate )
return 0;
}
-gme_err_t gme_load_file( Music_Emu* me, const char* path ) { return me->load_file( path ); }
+BLARGG_EXPORT gme_err_t gme_load_file( Music_Emu* me, const char* path ) { return me->load_file( path ); }
-gme_err_t gme_load_data( Music_Emu* me, void const* data, long size )
+BLARGG_EXPORT gme_err_t gme_load_data( Music_Emu* me, void const* data, long size )
{
Mem_File_Reader in( data, size );
return me->load( in );
}
-gme_err_t gme_load_custom( Music_Emu* me, gme_reader_t func, long size, void* data )
+BLARGG_EXPORT gme_err_t gme_load_custom( Music_Emu* me, gme_reader_t func, long size, void* data )
{
Callback_Reader in( func, size, data );
return me->load( in );
}
-void gme_delete( Music_Emu* me ) { delete me; }
+BLARGG_EXPORT void gme_delete( Music_Emu* me ) { delete me; }
-gme_type_t gme_type( Music_Emu const* me ) { return me->type(); }
+BLARGG_EXPORT gme_type_t gme_type( Music_Emu const* me ) { return me->type(); }
-const char* gme_warning( Music_Emu* me ) { return me->warning(); }
+BLARGG_EXPORT const char* gme_warning( Music_Emu* me ) { return me->warning(); }
-int gme_track_count( Music_Emu const* me ) { return me->track_count(); }
+BLARGG_EXPORT int gme_track_count( Music_Emu const* me ) { return me->track_count(); }
+
+struct gme_info_t_ : gme_info_t
+{
+ track_info_t info;
+
+ BLARGG_DISABLE_NOTHROW
+};
+
+BLARGG_EXPORT gme_err_t gme_track_info( Music_Emu const* me, gme_info_t** out, int track )
+{
+ *out = NULL;
+
+ gme_info_t_* info = BLARGG_NEW gme_info_t_;
+ CHECK_ALLOC( info );
+
+ gme_err_t err = me->track_info( &info->info, track );
+ if ( err )
+ {
+ gme_free_info( info );
+ return err;
+ }
+
+ #define COPY(name) info->name = info->info.name;
+
+ COPY( length );
+ COPY( intro_length );
+ COPY( loop_length );
+
+ info->i4 = -1;
+ info->i5 = -1;
+ info->i6 = -1;
+ info->i7 = -1;
+ info->i8 = -1;
+ info->i9 = -1;
+ info->i10 = -1;
+ info->i11 = -1;
+ info->i12 = -1;
+ info->i13 = -1;
+ info->i14 = -1;
+ info->i15 = -1;
+
+ info->s7 = "";
+ info->s8 = "";
+ info->s9 = "";
+ info->s10 = "";
+ info->s11 = "";
+ info->s12 = "";
+ info->s13 = "";
+ info->s14 = "";
+ info->s15 = "";
+
+ COPY( system );
+ COPY( game );
+ COPY( song );
+ COPY( author );
+ COPY( copyright );
+ COPY( comment );
+ COPY( dumper );
+
+ #undef COPY
+
+ info->play_length = info->length;
+ if ( info->play_length <= 0 )
+ {
+ info->play_length = info->intro_length + 2 * info->loop_length; // intro + 2 loops
+ if ( info->play_length <= 0 )
+ info->play_length = 150 * 1000; // 2.5 minutes
+ }
+
+ *out = info;
+
+ return 0;
+}
-const char* gme_track_info( Music_Emu const* me, track_info_t* out, int track )
+BLARGG_EXPORT void gme_free_info( gme_info_t* info )
{
- return me->track_info( out, track );
+ delete STATIC_CAST(gme_info_t_*,info);
}
-void gme_set_stereo_depth( Music_Emu* me, double depth )
+BLARGG_EXPORT void gme_set_stereo_depth( Music_Emu* me, double depth )
{
#if !GME_DISABLE_STEREO_DEPTH
if ( me->effects_buffer )
@@ -236,21 +328,49 @@ void gme_set_stereo_depth( Music_Emu* me, double depth )
#endif
}
-void* gme_user_data ( Music_Emu const* me ) { return me->user_data(); }
-void gme_set_user_data ( Music_Emu* me, void* new_user_data ) { me->set_user_data( new_user_data ); }
-void gme_set_user_cleanup(Music_Emu* me, gme_user_cleanup_t func ) { me->set_user_cleanup( func ); }
+BLARGG_EXPORT void* gme_user_data ( Music_Emu const* me ) { return me->user_data(); }
+BLARGG_EXPORT void gme_set_user_data ( Music_Emu* me, void* new_user_data ) { me->set_user_data( new_user_data ); }
+BLARGG_EXPORT void gme_set_user_cleanup(Music_Emu* me, gme_user_cleanup_t func ) { me->set_user_cleanup( func ); }
+
+BLARGG_EXPORT gme_err_t gme_start_track ( Music_Emu* me, int index ) { return me->start_track( index ); }
+BLARGG_EXPORT gme_err_t gme_play ( Music_Emu* me, int n, short* p ) { return me->play( n, p ); }
+BLARGG_EXPORT void gme_set_fade ( Music_Emu* me, int start_msec ) { me->set_fade( start_msec ); }
+BLARGG_EXPORT int gme_track_ended ( Music_Emu const* me ) { return me->track_ended(); }
+BLARGG_EXPORT int gme_tell ( Music_Emu const* me ) { return me->tell(); }
+BLARGG_EXPORT gme_err_t gme_seek ( Music_Emu* me, int msec ) { return me->seek( msec ); }
+BLARGG_EXPORT int gme_voice_count ( Music_Emu const* me ) { return me->voice_count(); }
+BLARGG_EXPORT void gme_ignore_silence ( Music_Emu* me, int disable ) { me->ignore_silence( disable != 0 ); }
+BLARGG_EXPORT void gme_set_tempo ( Music_Emu* me, double t ) { me->set_tempo( t ); }
+BLARGG_EXPORT void gme_mute_voice ( Music_Emu* me, int index, int mute ) { me->mute_voice( index, mute != 0 ); }
+BLARGG_EXPORT void gme_mute_voices ( Music_Emu* me, int mask ) { me->mute_voices( mask ); }
+BLARGG_EXPORT void gme_enable_accuracy( Music_Emu* me, int enabled ) { me->enable_accuracy( enabled ); }
+BLARGG_EXPORT void gme_clear_playlist ( Music_Emu* me ) { me->clear_playlist(); }
+BLARGG_EXPORT int gme_type_multitrack( gme_type_t t ) { return t->track_count != 1; }
+
+BLARGG_EXPORT void gme_set_equalizer ( Music_Emu* me, gme_equalizer_t const* eq )
+{
+ Music_Emu::equalizer_t e = me->equalizer();
+ e.treble = eq->treble;
+ e.bass = eq->bass;
+ me->set_equalizer( e );
+}
+
+BLARGG_EXPORT void gme_equalizer( Music_Emu const* me, gme_equalizer_t* out )
+{
+ gme_equalizer_t e = { };
+ e.treble = me->equalizer().treble;
+ e.bass = me->equalizer().bass;
+ *out = e;
+}
+
+BLARGG_EXPORT const char* gme_voice_name( Music_Emu const* me, int i )
+{
+ assert( (unsigned) i < (unsigned) me->voice_count() );
+ return me->voice_names() [i];
+}
-gme_err_t gme_start_track ( Music_Emu* me, int index ) { return me->start_track( index ); }
-gme_err_t gme_play ( Music_Emu* me, long n, short* p ) { return me->play( n, p ); }
-void gme_set_fade ( Music_Emu* me, long start_msec ) { me->set_fade( start_msec ); }
-int gme_track_ended ( Music_Emu const* me ) { return me->track_ended(); }
-long gme_tell ( Music_Emu const* me ) { return me->tell(); }
-gme_err_t gme_seek ( Music_Emu* me, long msec ) { return me->seek( msec ); }
-int gme_voice_count ( Music_Emu const* me ) { return me->voice_count(); }
-void gme_ignore_silence ( Music_Emu* me, int disable ) { me->ignore_silence( disable != 0 ); }
-void gme_set_tempo ( Music_Emu* me, double t ) { me->set_tempo( t ); }
-void gme_mute_voice ( Music_Emu* me, int index, int mute ) { me->mute_voice( index, mute != 0 ); }
-void gme_mute_voices ( Music_Emu* me, int mask ) { me->mute_voices( mask ); }
-void gme_set_equalizer ( Music_Emu* me, gme_equalizer_t const* eq ) { me->set_equalizer( *eq ); }
-gme_equalizer_t gme_equalizer( Music_Emu const* me ) { return me->equalizer(); }
-const char** gme_voice_names ( Music_Emu const* me ) { return me->voice_names(); }
+BLARGG_EXPORT const char* gme_type_system( gme_type_t type )
+{
+ assert( type );
+ return type->system;
+}
diff --git a/src/console/gme.h b/src/console/gme.h
index 3f610b0..2fc442e 100644
--- a/src/console/gme.h
+++ b/src/console/gme.h
@@ -1,6 +1,6 @@
/* Game music emulator library C interface (also usable from C++) */
-/* Game_Music_Emu 0.5.2 */
+/* Game_Music_Emu 0.5.5 */
#ifndef GME_H
#define GME_H
@@ -18,7 +18,7 @@ typedef struct Music_Emu Music_Emu;
/******** Basic operations ********/
/* Create emulator and load game music file/data into it. Sets *out to new emulator. */
-gme_err_t gme_open_file( const char* path, Music_Emu** out, long sample_rate );
+gme_err_t gme_open_file( const char path [], Music_Emu** out, int sample_rate );
/* Number of tracks available */
int gme_track_count( Music_Emu const* );
@@ -27,7 +27,7 @@ int gme_track_count( Music_Emu const* );
gme_err_t gme_start_track( Music_Emu*, int index );
/* Generate 'count' 16-bit signed samples info 'out'. Output is in stereo. */
-gme_err_t gme_play( Music_Emu*, long count, short* out );
+gme_err_t gme_play( Music_Emu*, int count, short out [] );
/* Finish using emulator and free memory */
void gme_delete( Music_Emu* );
@@ -37,16 +37,16 @@ void gme_delete( Music_Emu* );
/* Set time to start fading track out. Once fade ends track_ended() returns true.
Fade time can be changed while track is playing. */
-void gme_set_fade( Music_Emu*, long start_msec );
+void gme_set_fade( Music_Emu*, int start_msec );
/* True if a track has reached its end */
int gme_track_ended( Music_Emu const* );
/* Number of milliseconds (1000 = one second) played since beginning of track */
-long gme_tell( Music_Emu const* );
+int gme_tell( Music_Emu const* );
/* Seek to new time in track. Seeking backwards or far forward can take a while. */
-gme_err_t gme_seek( Music_Emu*, long msec );
+gme_err_t gme_seek( Music_Emu*, int msec );
/******** Informational ********/
@@ -60,35 +60,44 @@ Warning is also cleared when loading a file and starting a track. */
const char* gme_warning( Music_Emu* );
/* Load m3u playlist file (must be done after loading music) */
-gme_err_t gme_load_m3u( Music_Emu*, const char* path );
+gme_err_t gme_load_m3u( Music_Emu*, const char path [] );
/* Clear any loaded m3u playlist and any internal playlist that the music format
supports (NSFE for example). */
void gme_clear_playlist( Music_Emu* );
-/* Get information for a particular track (length, name, author, etc.) */
-typedef struct track_info_t track_info_t;
-gme_err_t gme_track_info( Music_Emu const*, track_info_t* out, int track );
+/* Gets information for a particular track (length, name, author, etc.).
+Must be freed after use. */
+typedef struct gme_info_t gme_info_t;
+gme_err_t gme_track_info( Music_Emu const*, gme_info_t** out, int track );
-struct track_info_t
+/* Frees track information */
+void gme_free_info( gme_info_t* );
+
+struct gme_info_t
{
- long track_count;
-
/* times in milliseconds; -1 if unknown */
- long length;
- long intro_length;
- long loop_length;
+ int length; /* total length, if file specifies it */
+ int intro_length; /* length of song up to looping section */
+ int loop_length; /* length of looping section */
+
+ /* Length if available, otherwise intro_length+loop_length*2 if available,
+ otherwise a default of 150000 (2.5 minutes). */
+ int play_length;
+
+ int i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15; /* reserved */
- /* empty string if not available */
- char system [256];
- char game [256];
- char song [256];
- char author [256];
- char copyright [256];
- char comment [256];
- char dumper [256];
+ /* empty string ("") if not available */
+ const char* system;
+ const char* game;
+ const char* song;
+ const char* author;
+ const char* copyright;
+ const char* comment;
+ const char* dumper;
+
+ const char *s7,*s8,*s9,*s10,*s11,*s12,*s13,*s14,*s15; /* reserved */
};
-enum { gme_max_field = 255 };
/******** Advanced playback ********/
@@ -108,8 +117,8 @@ void gme_set_tempo( Music_Emu*, double tempo );
/* Number of voices used by currently loaded file */
int gme_voice_count( Music_Emu const* );
-/* Names of voices */
-const char** gme_voice_names( Music_Emu const* );
+/* Name of voice i, from 0 to gme_voice_count() - 1 */
+const char* gme_voice_name( Music_Emu const*, int i );
/* Mute/unmute voice i, where voice 0 is first voice */
void gme_mute_voice( Music_Emu*, int index, int mute );
@@ -122,54 +131,61 @@ void gme_mute_voices( Music_Emu*, int muting_mask );
typedef struct gme_equalizer_t
{
double treble; /* -50.0 = muffled, 0 = flat, +5.0 = extra-crisp */
- long bass; /* 1 = full bass, 90 = average, 16000 = almost no bass */
+ double bass; /* 1 = full bass, 90 = average, 16000 = almost no bass */
+
+ double d2,d3,d4,d5,d6,d7,d8,d9; /* reserved */
} gme_equalizer_t;
/* Get current frequency equalizater parameters */
-gme_equalizer_t gme_equalizer( Music_Emu const* );
+void gme_equalizer( Music_Emu const*, gme_equalizer_t* out );
/* Change frequency equalizer parameters */
void gme_set_equalizer( Music_Emu*, gme_equalizer_t const* eq );
+/* Enables/disables most accurate sound emulation options */
+void gme_enable_accuracy( Music_Emu*, int enabled );
/******** Game music types ********/
+/* Music file type identifier. Can also hold NULL. */
+typedef const struct gme_type_t_* gme_type_t;
+
/* Emulator type constants for each supported file type */
-extern struct gme_type_t_ const gme_ay_type [], gme_gbs_type [], gme_gym_type [],
- gme_hes_type [], gme_kss_type [], gme_nsf_type [], gme_nsfe_type [],
- gme_sap_type [], gme_spc_type [], gme_vgm_type [], gme_vgz_type [];
-typedef struct gme_type_t_ const* gme_type_t;
+extern const gme_type_t
+ gme_ay_type,
+ gme_gbs_type,
+ gme_gym_type,
+ gme_hes_type,
+ gme_kss_type,
+ gme_nsf_type,
+ gme_nsfe_type,
+ gme_sap_type,
+ gme_spc_type,
+ gme_vgm_type,
+ gme_vgz_type;
/* Type of this emulator */
gme_type_t gme_type( Music_Emu const* );
-/* gme_type_t is a pointer to this structure. For example, gme_nsf_type->system is
-"Nintendo NES" and gme_nsf_type->new_emu() is equilvant to new Nsf_Emu (in C++). */
-struct gme_type_t_
-{
- const char* system; /* name of system this music file type is generally for */
- int track_count; /* non-zero for formats with a fixed number of tracks */
- Music_Emu* (*new_emu)(); /* Create new emulator for this type (useful in C++ only) */
- Music_Emu* (*new_info)(); /* Create new info reader for this type */
-
- /* internal */
- const char* extension_;
- int flags_;
-};
-
/* Pointer to array of all music types, with NULL entry at end. Allows a player linked
to this library to support new music types without having to be updated. */
gme_type_t const* gme_type_list();
+/* Name of game system for this music file type */
+const char* gme_type_system( gme_type_t );
+
+/* True if this music file type supports multiple tracks */
+int gme_type_multitrack( gme_type_t );
+
/******** Advanced file loading ********/
/* Error returned if file type is not supported */
-extern const char gme_wrong_file_type [];
+extern const char* const gme_wrong_file_type;
/* Same as gme_open_file(), but uses file data already in memory. Makes copy of data. */
-gme_err_t gme_open_data( void const* data, long size, Music_Emu** out, long sample_rate );
+gme_err_t gme_open_data( void const* data, long size, Music_Emu** out, int sample_rate );
/* Determine likely game music type based on first four bytes of file. Returns
string containing proper file suffix (i.e. "NSF", "SPC", etc.) or "" if
@@ -177,25 +193,25 @@ file header is not recognized. */
const char* gme_identify_header( void const* header );
/* Get corresponding music type for file path or extension passed in. */
-gme_type_t gme_identify_extension( const char* path_or_extension );
+gme_type_t gme_identify_extension( const char path_or_extension [] );
/* Determine file type based on file's extension or header (if extension isn't recognized).
Sets *type_out to type, or 0 if unrecognized or error. */
-gme_err_t gme_identify_file( const char* path, gme_type_t* type_out );
+gme_err_t gme_identify_file( const char path [], gme_type_t* type_out );
/* Create new emulator and set sample rate. Returns NULL if out of memory. If you only need
track information, pass gme_info_only for sample_rate. */
-Music_Emu* gme_new_emu( gme_type_t, long sample_rate );
+Music_Emu* gme_new_emu( gme_type_t, int sample_rate );
/* Load music file into emulator */
-gme_err_t gme_load_file( Music_Emu*, const char* path );
+gme_err_t gme_load_file( Music_Emu*, const char path [] );
/* Load music file from memory into emulator. Makes a copy of data passed. */
gme_err_t gme_load_data( Music_Emu*, void const* data, long size );
/* Load music file using custom data reader function that will be called to
read file data. Most emulators load the entire file in one read call. */
-typedef gme_err_t (*gme_reader_t)( void* your_data, void* out, long count );
+typedef gme_err_t (*gme_reader_t)( void* your_data, void* out, int count );
gme_err_t gme_load_custom( Music_Emu*, gme_reader_t, long file_size, void* your_data );
/* Load m3u playlist file from memory (must be done after loading music) */
diff --git a/src/console/gme_types.h b/src/console/gme_types.h
new file mode 100644
index 0000000..06226f4
--- /dev/null
+++ b/src/console/gme_types.h
@@ -0,0 +1,21 @@
+#ifndef GME_TYPES_H
+#define GME_TYPES_H
+
+/*
+ * This is a default gme_types.h for use when *not* using
+ * CMake. If CMake is in use gme_types.h.in will be
+ * processed instead.
+ */
+#define USE_GME_AY
+#define USE_GME_GBS
+#define USE_GME_GYM
+#define USE_GME_HES
+#define USE_GME_KSS
+#define USE_GME_NSF
+#define USE_GME_NSFE
+#define USE_GME_SAP
+#define USE_GME_SPC
+/* VGM and VGZ are a package deal */
+#define USE_GME_VGM
+
+#endif /* GME_TYPES_H */
diff --git a/src/console/hes_cpu_io.h b/src/console/hes_cpu_io.h
index b3d71da..ce60ce8 100644
--- a/src/console/hes_cpu_io.h
+++ b/src/console/hes_cpu_io.h
@@ -44,7 +44,7 @@ inline byte const* Hes_Emu::cpu_set_mmr( int page, int bank )
default:
if ( bank != 0xFF )
- dprintf( "Unmapped bank $%02X\n", bank );
+ debug_printf( "Unmapped bank $%02X\n", bank );
return rom.unmapped();
}
diff --git a/src/console/nes_cpu_io.h b/src/console/nes_cpu_io.h
index 4bae379..68ce9b6 100644
--- a/src/console/nes_cpu_io.h
+++ b/src/console/nes_cpu_io.h
@@ -34,7 +34,7 @@ int Nsf_Emu::cpu_read( nes_addr_t addr )
result = addr >> 8; // simulate open bus
if ( addr != 0x2002 )
- dprintf( "Read unmapped $%.4X\n", (unsigned) addr );
+ debug_printf( "Read unmapped $%.4X\n", (unsigned) addr );
exit:
return result;
diff --git a/src/console/plugin.c b/src/console/plugin.c
index 9418dc8..8fd5708 100644
--- a/src/console/plugin.c
+++ b/src/console/plugin.c
@@ -17,12 +17,12 @@
#include "configure.h"
Tuple * console_probe_for_tuple(const gchar *filename, VFSFile *fd);
-Tuple * console_get_file_tuple(const gchar *filename);
-void console_play_file(InputPlayback *playback);
+gboolean console_play(InputPlayback *playback, const gchar *filename,
+ VFSFile *file, gint start_time, gint stop_time, gboolean pause);
void console_seek(InputPlayback *data, gint time);
void console_stop(InputPlayback *playback);
-void console_pause(InputPlayback * playback, gshort p);
-void console_init(void);
+void console_pause(InputPlayback * playback, gboolean pause);
+gboolean console_init (void);
void console_cleanup(void);
static void console_aboutbox (void)
@@ -44,23 +44,18 @@ static const gchar *gme_fmts[] = {
"vgm", "vgz", NULL
};
-static InputPlugin console_ip =
-{
- .description = "Game Console Music Decoder",
+AUD_INPUT_PLUGIN
+(
+ .name = "Game Console Music Decoder",
.init = console_init,
.cleanup = console_cleanup,
.about = console_aboutbox,
.configure = console_cfg_ui,
- .play_file = console_play_file,
+ .play = console_play,
.stop = console_stop,
.pause = console_pause,
- .seek = console_seek,
- .vfs_extensions = gme_fmts,
- .get_song_tuple = console_get_file_tuple,
+ .mseek = console_seek,
+ .extensions = gme_fmts,
.probe_for_tuple = console_probe_for_tuple,
.have_subtune = TRUE
-};
-
-static InputPlugin *console_iplist[] = { &console_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN(console, console_iplist);
+)
diff --git a/src/console/sap_cpu_io.h b/src/console/sap_cpu_io.h
index 8c2f6dd..d009d0d 100644
--- a/src/console/sap_cpu_io.h
+++ b/src/console/sap_cpu_io.h
@@ -20,7 +20,7 @@ void Sap_Emu::cpu_write( sap_addr_t addr, int data )
int Sap_Emu::cpu_read( sap_addr_t addr )
{
if ( (addr & 0xF900) == 0xD000 )
- dprintf( "Unmapped read $%04X\n", addr );
+ debug_printf( "Unmapped read $%04X\n", addr );
return mem.ram [addr];
}
#endif
diff --git a/src/crossfade/crossfade.c b/src/crossfade/crossfade.c
index 1aa1410..d26ebd6 100644
--- a/src/crossfade/crossfade.c
+++ b/src/crossfade/crossfade.c
@@ -34,7 +34,7 @@ enum
STATE_STOPPING,
};
-int crossfade_length = 3; /* seconds */
+int crossfade_length; /* seconds */
static char state = STATE_OFF;
static int current_channels = 0, current_rate = 0;
@@ -60,10 +60,11 @@ static void reset (void)
output_size = 0;
}
-void crossfade_init (void)
+int crossfade_init (void)
{
AUDDBG ("Init.\n");
crossfade_config_load ();
+ return 1;
}
void crossfade_cleanup (void)
diff --git a/src/crossfade/crossfade.h b/src/crossfade/crossfade.h
index bdda1e3..e1ed7cb 100644
--- a/src/crossfade/crossfade.h
+++ b/src/crossfade/crossfade.h
@@ -24,7 +24,7 @@ void crossfade_config_save (void);
void crossfade_show_channels_message (void);
void crossfade_show_rate_message (void);
-void crossfade_init (void);
+int crossfade_init (void);
void crossfade_cleanup (void);
void crossfade_start (int * channels, int * rate);
void crossfade_process (float * * data, int * samples);
diff --git a/src/crossfade/plugin.c b/src/crossfade/plugin.c
index c3602b9..d3a15ef 100644
--- a/src/crossfade/plugin.c
+++ b/src/crossfade/plugin.c
@@ -19,8 +19,9 @@
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -28,27 +29,36 @@
#include "config.h"
#include "crossfade.h"
+static GtkWidget * about_window = NULL;
+static GtkWidget * config_window = NULL;
+static GtkWidget * error_window = NULL;
+
+static const gchar * const crossfade_defaults[] = {
+ "length", "3",
+ NULL};
+
void crossfade_config_load (void)
{
- mcs_handle_t * database = aud_cfg_db_open ();
-
- aud_cfg_db_get_int (database, "crossfade", "length", & crossfade_length);
- aud_cfg_db_close (database);
+ aud_config_set_defaults ("crossfade", crossfade_defaults);
+ crossfade_length = aud_get_int ("crossfade", "length");
}
void crossfade_config_save (void)
{
- mcs_handle_t * database = aud_cfg_db_open ();
-
- aud_cfg_db_set_int (database, "crossfade", "length", crossfade_length);
- aud_cfg_db_close (database);
+ if (about_window != NULL)
+ gtk_widget_destroy (about_window);
+ if (config_window != NULL)
+ gtk_widget_destroy (config_window);
+ if (error_window != NULL)
+ gtk_widget_destroy (error_window);
+
+ aud_set_int ("crossfade", "length", crossfade_length);
}
static void crossfade_about (void)
{
- static GtkWidget * window = NULL;
-
- audgui_simple_message (& window, GTK_MESSAGE_INFO, _("About Crossfade"),
+ audgui_simple_message (& about_window, GTK_MESSAGE_INFO, _("About "
+ "Crossfade"),
"Crossfade Plugin for Audacious\n"
"Copyright 2010 John Lindgren\n\n"
"Redistribution and use in source and binary forms, with or without "
@@ -71,23 +81,22 @@ static void value_changed (GtkRange * range, void * data)
static void crossfade_configure (void)
{
- static GtkWidget * window = NULL;
-
- if (window == NULL)
+ if (config_window == NULL)
{
GtkWidget * vbox, * hbox, * slider, * button;
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint ((GtkWindow *) window,
+ config_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint ((GtkWindow *) config_window,
GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_window_set_resizable ((GtkWindow *) window, FALSE);
- gtk_window_set_title ((GtkWindow *) window, _("Crossfade Preferences"));
- gtk_container_set_border_width ((GtkContainer *) window, 6);
- g_signal_connect (window, "destroy", (GCallback) gtk_widget_destroyed,
- & window);
+ gtk_window_set_resizable ((GtkWindow *) config_window, FALSE);
+ gtk_window_set_title ((GtkWindow *) config_window, _("Crossfade "
+ "Preferences"));
+ gtk_container_set_border_width ((GtkContainer *) config_window, 6);
+ g_signal_connect (config_window, "destroy", (GCallback)
+ gtk_widget_destroyed, & config_window);
vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_add ((GtkContainer *) window, vbox);
+ gtk_container_add ((GtkContainer *) config_window, vbox);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
@@ -107,42 +116,38 @@ static void crossfade_configure (void)
button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0);
-#if GTK_CHECK_VERSION (2, 18, 0)
gtk_widget_set_can_default (button, TRUE);
-#endif
gtk_widget_grab_default (button);
g_signal_connect_swapped (button, "clicked", (GCallback)
- gtk_widget_destroy, window);
+ gtk_widget_destroy, config_window);
- audgui_destroy_on_escape (window);
+ audgui_destroy_on_escape (config_window);
gtk_widget_show_all (vbox);
}
- gtk_window_present ((GtkWindow *) window);
+ gtk_window_present ((GtkWindow *) config_window);
}
void crossfade_show_channels_message (void)
{
- static GtkWidget * window = NULL;
-
- audgui_simple_message (& window, GTK_MESSAGE_ERROR, _("Crossfade Error"),
- _("Crossfading failed because the songs had a different number of channels."));
+ audgui_simple_message (& error_window, GTK_MESSAGE_ERROR,
+ _("Crossfade Error"), _("Crossfading failed because the songs had a "
+ "different number of channels."));
}
void crossfade_show_rate_message (void)
{
- static GtkWidget * window = NULL;
-
- audgui_simple_message (& window, GTK_MESSAGE_ERROR, _("Crossfade Error"),
+ audgui_simple_message (& error_window, GTK_MESSAGE_ERROR, _("Crossfade "
+ "Error"),
_("Crossfading failed because the songs had different sample rates.\n\n"
"You can use the Sample Rate Converter effect to resample the songs to "
"the same rate."));
}
-EffectPlugin crossfade_plugin =
-{
- .description = "Crossfade",
+AUD_EFFECT_PLUGIN
+(
+ .name = "Crossfade",
.init = crossfade_init,
.cleanup = crossfade_cleanup,
.about = crossfade_about,
@@ -155,8 +160,4 @@ EffectPlugin crossfade_plugin =
.output_to_decoder_time = crossfade_output_to_decoder_time,
.order = 5, /* must be after resample */
-};
-
-EffectPlugin * crossfade_list[] = {& crossfade_plugin, NULL};
-
-SIMPLE_EFFECT_PLUGIN (crossfade, crossfade_list)
+)
diff --git a/src/crystalizer/Makefile b/src/crystalizer/Makefile
index af10cbe..9d18ad2 100644
--- a/src/crystalizer/Makefile
+++ b/src/crystalizer/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/crystalizer/crystalizer.c b/src/crystalizer/crystalizer.c
index 9967f4c..34ee729 100644
--- a/src/crystalizer/crystalizer.c
+++ b/src/crystalizer/crystalizer.c
@@ -22,11 +22,12 @@
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
-static void init(void);
+static gboolean init (void);
static void configure(void);
static void cryst_start (gint * channels, gint * rate);
static void cryst_process (gfloat * * data, gint * samples);
@@ -35,11 +36,11 @@ static void cryst_finish (gfloat * * data, gint * samples);
static gint cryst_decoder_to_output_time (gint time);
static gint cryst_output_to_decoder_time (gint time);
-EffectPlugin crystalizer_ep =
-{
- .description = "Crystalizer", /* Description */
- .init = init,
- .configure = configure,
+AUD_EFFECT_PLUGIN
+(
+ .name = "Crystalizer", /* Description */
+ .init = init,
+ .configure = configure,
.start = cryst_start,
.process = cryst_process,
.flush = cryst_flush,
@@ -47,36 +48,31 @@ EffectPlugin crystalizer_ep =
.decoder_to_output_time = cryst_decoder_to_output_time,
.output_to_decoder_time = cryst_output_to_decoder_time,
.preserves_format = TRUE,
-};
+)
static GtkWidget *conf_dialog = NULL;
static gdouble value;
static gint cryst_channels;
static gfloat * cryst_prev;
-EffectPlugin *crystalizer_eplist[] = { &crystalizer_ep, NULL };
-
-DECLARE_PLUGIN(crystalizer, NULL, NULL, NULL, NULL, crystalizer_eplist, NULL, NULL, NULL);
+static const gchar * const cryst_defaults[] = {
+ "intensity", "1",
+ NULL};
-static void init(void)
+static gboolean init (void)
{
- mcs_handle_t *db;
- db = aud_cfg_db_open();
- if (!aud_cfg_db_get_double(db, "crystalizer", "intensity", &value))
- value = 1.0;
- aud_cfg_db_close(db);
+ aud_config_set_defaults ("crystalizer", cryst_defaults);
+ value = aud_get_double ("crystalizer", "intensity");
+
+ return TRUE;
}
/* conf dialog stuff stolen from stereo plugin --nenolod */
-static void conf_ok_cb(GtkButton * button, gpointer data)
+static void conf_ok_cb (GtkButton * button, GtkAdjustment * adj)
{
- mcs_handle_t *db;
-
- value = *(gdouble *) data;
+ value = gtk_adjustment_get_value (adj);
+ aud_set_double ("crystalizer", "intensity", value);
- db = aud_cfg_db_open();
- aud_cfg_db_set_double(db, "crystalizer", "intensity", value);
- aud_cfg_db_close(db);
gtk_widget_destroy(conf_dialog);
}
@@ -85,67 +81,63 @@ static void conf_cancel_cb(GtkButton * button, gpointer data)
gtk_widget_destroy(conf_dialog);
}
-static void conf_apply_cb(GtkButton *button, gpointer data)
+static void conf_apply_cb (GtkButton * button, GtkAdjustment * adj)
{
- value = *(gdouble *) data;
+ value = gtk_adjustment_get_value (adj);
}
static void configure(void)
{
GtkWidget *hbox, *label, *scale, *button, *bbox;
- GtkObject *adjustment;
+ GtkAdjustment * adjustment;
if (conf_dialog != NULL)
return;
conf_dialog = gtk_dialog_new();
- g_signal_connect(GTK_OBJECT(conf_dialog), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed), &conf_dialog);
+ g_signal_connect (conf_dialog, "destroy", (GCallback)
+ gtk_widget_destroyed, & conf_dialog);
gtk_window_set_title(GTK_WINDOW(conf_dialog), _("Configure Crystalizer"));
label = gtk_label_new(_("Effect intensity:"));
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(conf_dialog)->vbox), label,
- TRUE, TRUE, 0);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area
+ ((GtkDialog *) conf_dialog), label, TRUE, TRUE, 0);
gtk_widget_show(label);
hbox = gtk_hbox_new(FALSE, 10);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(conf_dialog)->vbox), hbox,
- TRUE, TRUE, 10);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area
+ ((GtkDialog *) conf_dialog), hbox, TRUE, TRUE, 10);
gtk_widget_show(hbox);
- adjustment = gtk_adjustment_new(value, 0.0, 15.0 + 1.0, 0.1, 1.0, 1.0);
+ adjustment = (GtkAdjustment *) gtk_adjustment_new (value, 0, 15 + 1,
+ 0.1, 1, 1);
scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
gtk_box_pack_start(GTK_BOX(hbox), scale, TRUE, TRUE, 10);
gtk_widget_show(scale);
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX((GTK_DIALOG(conf_dialog)->action_area)),
- bbox, TRUE, TRUE, 0);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_action_area ((GtkDialog *)
+ conf_dialog), bbox, TRUE, TRUE, 0);
button = gtk_button_new_with_label(_("Ok"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- g_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_ok_cb),
- &GTK_ADJUSTMENT(adjustment)->value);
+ g_signal_connect (button, "clicked", (GCallback) conf_ok_cb, adjustment);
gtk_widget_grab_default(button);
gtk_widget_show(button);
button = gtk_button_new_with_label(_("Cancel"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- g_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_cancel_cb), NULL);
+ g_signal_connect (button, "clicked", (GCallback) conf_cancel_cb, NULL);
gtk_widget_show(button);
button = gtk_button_new_with_label(_("Apply"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- g_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_apply_cb),
- &GTK_ADJUSTMENT(adjustment)->value);
+ g_signal_connect (button, "clicked", (GCallback) conf_apply_cb,
+ adjustment);
gtk_widget_show(button);
gtk_widget_show(bbox);
diff --git a/src/cue/Makefile b/src/cue/Makefile
index badba11..70213dc 100644
--- a/src/cue/Makefile
+++ b/src/cue/Makefile
@@ -7,6 +7,6 @@ include ../../extra.mk
plugindir := ${plugindir}/${CONTAINER_PLUGIN_DIR}
-CPPFLAGS += -std=gnu99 ${PLUGIN_CPPFLAGS} ${CUE_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${CUE_CFLAGS} ${GLIB_CFLAGS}
CFLAGS += ${PLUGIN_CFLAGS}
-LIBS += ${CUE_LIBS}
+LIBS += ${CUE_LIBS} ${GLIB_LIBS}
diff --git a/src/cue/cue.c b/src/cue/cue.c
index 909a049..ac48f84 100644
--- a/src/cue/cue.c
+++ b/src/cue/cue.c
@@ -1,7 +1,7 @@
/*
* Audacious: A cross-platform multimedia player
* Copyright (c) 2009 William Pitcock <nenolod@dereferenced.org>
- * Copyright (c) 2010 John Lindgren <john.lindgren@tds.net>
+ * Copyright (c) 2010-2011 John Lindgren <john.lindgren@tds.net>
*
* 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
@@ -18,25 +18,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-/* #define AUD_DEBUG 1 */
-
-#include <glib.h>
-#include <string.h>
#include <glib.h>
-#include <glib/gprintf.h>
-#include <stdlib.h>
#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
-
-#include <audacious/debug.h>
#include <audacious/misc.h>
-#include <audacious/playlist.h>
#include <audacious/plugin.h>
+#include <libaudcore/audstrings.h>
#include <libcue/libcue.h>
@@ -67,47 +54,51 @@ tuple_attach_cdtext(Tuple *tuple, Track *track, gint tuple_type, gint pti)
if (text == NULL)
return;
- tuple_associate_string(tuple, tuple_type, NULL, text);
+ tuple_set_str(tuple, tuple_type, NULL, text);
}
-static void playlist_load_cue (const gchar * cue_filename, gint at)
+static gboolean playlist_load_cue (const gchar * cue_filename, VFSFile * file,
+ gchar * * title, Index * filenames, Index * tuples)
{
- void * buffer;
- gint64 size;
- vfs_file_get_contents (cue_filename, & buffer, & size);
- if (buffer == NULL)
- return;
-
- buffer = g_realloc (buffer, size + 1);
- ((gchar *) buffer)[size] = 0;
+ gint64 size = vfs_fsize (file);
+ gchar * buffer = g_malloc (size + 1);
+ size = vfs_fread (buffer, 1, size, file);
+ buffer[size] = 0;
- Cd * cd = cue_parse_string (buffer);
+ gchar * text = str_to_utf8 (buffer);
g_free (buffer);
+ g_return_val_if_fail (text, FALSE);
+
+ * title = NULL;
+
+ Cd * cd = cue_parse_string (text);
+ g_free (text);
if (cd == NULL)
- return;
+ return FALSE;
gint tracks = cd_get_ntrack (cd);
if (tracks == 0)
- return;
-
- struct index * filenames = index_new ();
- struct index * tuples = index_new ();
+ return FALSE;
Track * current = cd_get_track (cd, 1);
- g_return_if_fail (current != NULL);
- gchar * filename = aud_construct_uri (track_get_filename (current),
+ g_return_val_if_fail (current != NULL, FALSE);
+ gchar * track_filename = track_get_filename (current);
+ g_return_val_if_fail (track_filename != NULL, FALSE);
+ gchar * filename = aud_construct_uri (track_filename,
cue_filename);
Tuple * base_tuple = NULL;
+ gboolean base_tuple_scanned = FALSE;
for (gint track = 1; track <= tracks; track ++)
{
- g_return_if_fail (current != NULL);
- g_return_if_fail (filename != NULL);
+ g_return_val_if_fail (current != NULL, FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
- if (base_tuple == NULL)
+ if (base_tuple == NULL && ! base_tuple_scanned)
{
- InputPlugin * decoder = aud_file_find_decoder (filename, TRUE);
+ base_tuple_scanned = TRUE;
+ PluginHandle * decoder = aud_file_find_decoder (filename, FALSE);
if (decoder != NULL)
base_tuple = aud_file_read_tuple (filename, decoder);
}
@@ -121,67 +112,52 @@ static void playlist_load_cue (const gchar * cue_filename, gint at)
Tuple * tuple = (base_tuple != NULL) ? tuple_copy (base_tuple) :
tuple_new_from_filename (filename);
- tuple_associate_int (tuple, FIELD_TRACK_NUMBER, NULL, track);
+ tuple_set_int (tuple, FIELD_TRACK_NUMBER, NULL, track);
gint begin = (gint64) track_get_start (current) * 1000 / 75;
- tuple_associate_int (tuple, FIELD_SEGMENT_START, NULL, begin);
+ tuple_set_int (tuple, FIELD_SEGMENT_START, NULL, begin);
if (last_track)
{
if (base_tuple != NULL && tuple_get_value_type (base_tuple,
FIELD_LENGTH, NULL) == TUPLE_INT)
- tuple_associate_int (tuple, FIELD_LENGTH, NULL, tuple_get_int
+ tuple_set_int (tuple, FIELD_LENGTH, NULL, tuple_get_int
(base_tuple, FIELD_LENGTH, NULL) - begin);
}
else
{
gint length = (gint64) track_get_length (current) * 1000 / 75;
- tuple_associate_int (tuple, FIELD_LENGTH, NULL, length);
- tuple_associate_int (tuple, FIELD_SEGMENT_END, NULL, begin + length);
+ tuple_set_int (tuple, FIELD_LENGTH, NULL, length);
+ tuple_set_int (tuple, FIELD_SEGMENT_END, NULL, begin + length);
}
for (gint i = 0; i < G_N_ELEMENTS (pti_map); i ++)
tuple_attach_cdtext (tuple, current, pti_map[i].tuple_type,
pti_map[i].pti);
- index_append (filenames, filename);
+ index_append (filenames, str_get (filename));
index_append (tuples, tuple);
current = next;
+ g_free (filename);
filename = next_filename;
if (last_track && base_tuple != NULL)
{
- tuple_free (base_tuple);
+ tuple_unref (base_tuple);
base_tuple = NULL;
+ base_tuple_scanned = FALSE;
}
}
- aud_playlist_entry_insert_batch (aud_playlist_get_active (), at, filenames,
- tuples);
+ return TRUE;
}
-static void
-playlist_save_cue(const gchar *filename, gint pos)
-{
- AUDDBG("todo\n");
-}
-
-PlaylistContainer plc_cue = {
- .name = "cue Playlist Format",
- .ext = "cue",
- .plc_read = playlist_load_cue,
- .plc_write = playlist_save_cue,
-};
-
-static void init(void)
-{
- aud_playlist_container_register(&plc_cue);
-}
-
-static void cleanup(void)
-{
- aud_playlist_container_unregister(&plc_cue);
-}
+static const gchar * const cue_exts[] = {"cue", NULL};
-DECLARE_PLUGIN(cue, init, cleanup, NULL, NULL, NULL, NULL, NULL, NULL);
+AUD_PLAYLIST_PLUGIN
+(
+ .name = "Cue Sheet Support",
+ .extensions = cue_exts,
+ .load = playlist_load_cue
+)
diff --git a/src/daap/Makefile b/src/daap/Makefile
deleted file mode 100644
index 4a2022e..0000000
--- a/src/daap/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-PLUGIN = libdaap${PLUGIN_SUFFIX}
-
-SRCS = daap.c
-
-SUBDIRS = xmms2-daap
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${TRANSPORT_PLUGIN_DIR}
-
-#For the moment i'm hardcoding it but it will be configurable
-#MDNS_LIBS=-ldns_sd
-MDNS_LIBS=-lavahi-glib -lavahi-common -lavahi-client
-#MDNS_LIBS=
-
-INC = -I../.. -I./xmms2-daap
-WARN = -Wall -pedantic -std=c99
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${PICFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${INC} ${WARN} ${GCC42_CFLAGS}
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MDNS_LIBS} ./xmms2-daap/xmms2-daap.a
diff --git a/src/daap/daap.c b/src/daap/daap.c
deleted file mode 100644
index 2b11c86..0000000
--- a/src/daap/daap.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/* Audacious DAAP transport plugin
- * Copyright (c) 2007 Cristi Magherusan <majeru@gentoo.ro>
- *
- * With inspiration and code from David Hammerton's tunesbrowser
- *
- * 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 Softmcware
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-
-#include <audacious/plugin.h>
-#include <audacious/discovery.h>
-
-#include "xmms2-daap/daap_cmd.h"
-#include "xmms2-daap/daap_util.h"
-#include "xmms2-daap/daap_mdns_browse.h"
-#define DEFAULT_DAAP_PORT 3689
-#define DEBUG 1
-typedef struct {
- gchar *host;
- guint port;
-
- GIOChannel *channel;
-
-} daap_data_t;
-
-typedef struct {
- gboolean logged_in;
- guint session_id;
- guint revision_id;
- guint request_id;
-} daap_login_data_t;
-
-typedef struct{
- daap_data_t *daap_data;
- gchar *url;
- int fd;
- guint pos;
- gulong length;
-}
-daap_handle_t;
-
-
-
-static GHashTable *login_sessions = NULL;
-
-gboolean daap_initialized=FALSE;
-
-GMutex * mutex_init = NULL;
-
-GMutex * mutex_discovery = NULL;
-
-GList * daap_servers = NULL;
-
-guint request_id=0;
-
-
-
- static gboolean
-get_data_from_url (const gchar *url, gchar **host, guint *port, gchar **cmd)
-{
- const gchar *port_ptr, *cmd_ptr, *end_ptr, *stripped;
-
- stripped = url + sizeof (gchar) * strlen ("daap://");
-
- end_ptr = stripped + sizeof (gchar) * strlen (stripped);
-
- if (stripped == end_ptr) {
- g_print("DAAP: Empty URL\n");
- return FALSE;
- }
-
- port_ptr = strstr (stripped, ":");
- if (port && port_ptr && (port_ptr + 1) != end_ptr) {
- *port = strtol (port_ptr + 1, (gchar **) NULL, 10);
- if (*port == 0) {
- *port = DEFAULT_DAAP_PORT;
- }
- } else if (port) {
- *port = DEFAULT_DAAP_PORT;
- }
-
- cmd_ptr = strstr (stripped, "/");
- if (cmd && cmd_ptr && (cmd_ptr + 1) != end_ptr) {
- *cmd = g_strdup (cmd_ptr);
- } else if (cmd) {
- /* cmd wanted but not found */
- g_print("DAAP: No file requested\n");
- } else if (!cmd && cmd_ptr && (cmd_ptr + 1) != end_ptr) {
- /* cmd not wanted but found */
- g_print("DAAP: No such directory\n");
- return FALSE;
- }
-
- if (port_ptr) {
- *host = g_strndup (stripped, port_ptr - stripped);
- } else if (cmd_ptr) {
- *host = g_strndup (stripped, cmd_ptr - stripped);
- } else {
- *host = g_strdup (stripped);
- }
-
- return TRUE;
-}
-
-
-
- static gboolean
-daap_init (daap_handle_t *handle)
-{
- gint dbid;
- GSList *dbid_list = NULL;
- daap_data_t *data;
- daap_login_data_t *login_data;
- guint filesize;
- gchar *command=NULL;
- gchar *hash;
-
- data = g_new0 (daap_data_t, 1);
-
- if (!get_data_from_url (handle->url, &(data->host), &(data->port), &command))
- return FALSE;
-
- hash = g_strdup_printf ("%s:%u", data->host, data->port);
-
- login_data = g_hash_table_lookup (login_sessions, hash);
- if (!login_data)
- {
-#if DEBUG
- g_print ("creating login data for %s\n", hash);
-#endif
- login_data = g_new0 (daap_login_data_t, 1);
-
- login_data->request_id = 1;
- login_data->logged_in = TRUE;
-
- login_data->session_id = daap_command_login (data->host, data->port,
- login_data->request_id);
- if(login_data->session_id==0)
- return FALSE;
-
- g_hash_table_insert (login_sessions, hash, login_data);
- }
-
- login_data->revision_id = daap_command_update (data->host, data->port,
- login_data->session_id,
- login_data->request_id);
- dbid_list = daap_command_db_list (data->host, data->port,
- login_data->session_id,
- login_data->revision_id,
- login_data->request_id);
- if (!dbid_list) {
- return FALSE;
- }
-
- /* XXX: see XXX in the browse function above */
- dbid = ((cc_item_record_t *) dbid_list->data)->dbid;
- /* want to request a stream, but don't read the data yet */
- data->channel = daap_command_init_stream (data->host, data->port,
- login_data->session_id,
- login_data->revision_id,
- login_data->request_id, dbid,
- command,&filesize);
- if (!data->channel) {
- return FALSE;
- }
-
- login_data->request_id++;
-
- handle->daap_data=data;
- handle->length=filesize;
- handle->pos=0;
- g_slist_foreach (dbid_list, (GFunc) cc_item_record_free, NULL);
- g_slist_free (dbid_list);
- g_free (command);
-
- return TRUE;
-}
-
-
-
-
-
-
-
- GList*
-daap_get_tracks_from_server (gchar *host, guint port)
-{
- GList * output=NULL;
- GSList *dbid_list = NULL;
- GSList *song_list = NULL, *song_el;
- cc_item_record_t *db_data;
- daap_login_data_t *login_data;
- gchar *hash;
-
- hash = g_strdup_printf ("%s:%u", host, port);
-
- login_data = g_hash_table_lookup (login_sessions, hash);
-
- if (!login_data) {
- login_data = g_new0 (daap_login_data_t, 1);
-
- login_data->session_id = daap_command_login (host, port, 0);
-
- login_data->revision_id = daap_command_update (host, port,
- login_data->session_id,
- 0);
-
- login_data->request_id = 1;
- login_data->logged_in = TRUE;
-
- g_hash_table_insert (login_sessions, hash, login_data);
- } else {
- login_data->revision_id = daap_command_update (host, port,
- login_data->session_id,
- 0);
- }
-
- dbid_list = daap_command_db_list (host, port, login_data->session_id,
- login_data->revision_id, 0);
- if (!dbid_list) {
- return NULL;
- }
-
- /* XXX i've never seen more than one db per server out in the wild,
- * let's hope that never changes *wink*
- * just use the first db in the list */
- db_data = (cc_item_record_t *) dbid_list->data;
- song_list = daap_command_song_list (host, port, login_data->session_id,
- login_data->revision_id,
- 0, db_data->dbid);
-
- g_slist_foreach (dbid_list, (GFunc) cc_item_record_free, NULL);
- g_slist_free (dbid_list);
-
- if (!song_list) {
- return NULL;
- }
-
- for (song_el = song_list; song_el; song_el = g_slist_next (song_el))
- output=g_list_prepend(output, g_memdup(song_el->data,sizeof(cc_item_record_t)));
-
-
- g_slist_foreach (song_list, (GFunc) cc_item_record_free, NULL);
- g_slist_free (song_list);
-
- return g_list_reverse(output);
-}
-
-
-GList * daap_discovery_get_devices_impl(void)
-{
- discovery_device_t * current_device=NULL;
- GList * returned_devices=NULL;
- GSList * daap_found_devices=NULL,
- * current_server=NULL;
-
- if(mutex_discovery==NULL)
- return NULL;
-
- g_mutex_lock(mutex_discovery);
- g_print ("caut\n");
- daap_found_devices = daap_mdns_get_server_list ();
- current_server=daap_found_devices;
-
- for (; current_server; current_server = g_slist_next (current_server))
- {
- current_device = g_new0(discovery_device_t,1);
- daap_mdns_server_t *serv=current_server->data;
- current_device->device_name =
- g_strdup_printf("%s(%s)",serv->server_name, serv->mdns_hostname);
-
- current_device->device_address =
- g_strdup_printf(
- "%s:%d",
- serv->address,
- serv->port
- );
- current_device->device_playlist=
- daap_get_tracks_from_server(
- serv->mdns_hostname,
- serv->port
- );
- returned_devices = g_list_prepend(returned_devices,current_device);
-#if DEBUG
- g_print("DAAP: Found device %s at address %s\n", current_device->device_name ,current_device->device_address );
-#endif
- }
- g_slist_free(daap_found_devices);
- g_mutex_unlock(mutex_discovery);
- return g_list_reverse(returned_devices);
-}
-
-
-
-
-VFSFile * daap_vfs_fopen_impl(const gchar * path, const gchar * mode)
-{
- VFSFile *file=NULL;
- daap_handle_t *handle = g_new0(daap_handle_t, 1);
- handle->url=g_strdup(path);
-
- if (!path || !mode)
- return NULL;
-
- if( !daap_init(handle) )
- {
-#if DEBUG /*this isn't a fatal error, we can try again later*/
- g_print("Error while initializing DAAP !!!\n");
-#endif
- return NULL;
- }
-#if DEBUG
- g_print("DAAP was initialized succesfully\n");
-#endif
- file=g_new0(VFSFile, 1);
- handle->fd=g_io_channel_unix_get_fd(handle->daap_data->channel);
-
- if (handle->fd < 0)
- {
- g_print("vfs_fopen got a negative FD \n");
- g_free(file);
- file = NULL;
- }
- else
- file->handle=(void*)handle;
- return file;
-}
-
-gint daap_vfs_fclose_impl(VFSFile * file)
-{
- gint ret=0;
- daap_handle_t * handle = (daap_handle_t *)file->handle;
- if (file == NULL)
- return -1;
-
- if (file->handle)
- {
- if(g_io_channel_shutdown(handle->daap_data->channel,TRUE,NULL)!=G_IO_STATUS_NORMAL)
- ret = -1;
- else
- {
- g_io_channel_unref(handle->daap_data->channel);
- ret=0;
- }
- g_free(file->handle);
- file->handle=NULL;
- }
- return ret;
-
-return -1;
-}
-
-size_t daap_vfs_fread_impl(gpointer ptr, size_t size, size_t nmemb, VFSFile * file)
-{
- daap_handle_t *handle= (daap_handle_t *)file->handle;
- size_t ret=0;
-if (file == NULL)
- return 0;
-if( g_io_channel_read_chars (handle->daap_data->channel,ptr,size*nmemb,&ret,NULL)==G_IO_STATUS_NORMAL)
- {
- handle->pos+=(size*nmemb);
- return ret;
- }
-else
- return 0;
-}
-
-size_t daap_vfs_fwrite_impl(gconstpointer ptr, size_t size, size_t nmemb, VFSFile * file)
-{
- return -1;
-}
-
-gint daap_vfs_getc_impl(VFSFile * file)
-{
-guchar ret=EOF;
-daap_handle_t *handle = (daap_handle_t *)file->handle;
-int status=g_io_channel_read_chars (handle->daap_data->channel,(void*)&ret,1,NULL,NULL);
-if(status==G_IO_STATUS_NORMAL)
- {
- g_print ("fgetc OK\n");
- handle->pos++;
- return ret;
- }
-else
-{
-g_print ("fgetc failed\n");
- return EOF;
-}
-}
-
-gint daap_vfs_fseek_impl(VFSFile * file, glong offset, gint whence)
-{
- return -1;
-}
-
-gint daap_vfs_ungetc_impl(gint c, VFSFile * stream)
-{
-return c;
-}
-
-void daap_vfs_rewind_impl(VFSFile * stream)
-{
- return;
-}
-
-glong daap_vfs_ftell_impl(VFSFile * stream)
-{
- daap_handle_t *handle=stream->handle;
- return handle->pos;
-}
-
-gboolean daap_vfs_feof_impl(VFSFile * file)
-{
- daap_handle_t *handle=file->handle;
- off_t at = daap_vfs_ftell_impl(file);
- return (gboolean) (at >= handle->length) ? TRUE : FALSE;
-}
-
-gint daap_vfs_truncate_impl(VFSFile * file, glong size)
-{
- return -1;
-}
-off_t daap_vfs_fsize_impl(VFSFile * file)
-{
-return 0;
-}
-
-gchar *daap_vfs_metadata_impl(VFSFile * file, const gchar * field)
-{
-daap_handle_t *handle;
-g_print("Requested metadata: '%s' \n",field);
-
-if(file && file->handle)
- handle = (daap_handle_t *)file->handle;
-else
- return NULL;
-
-/*if (!g_ascii_strncasecmp(field, "stream-name", 11))
- return handle->url;
-if (!g_ascii_strncasecmp(field, "track-name",10))
- return handle->url;
-*/
-
-if (!g_ascii_strncasecmp(field, "content-type", 12))
- return g_strdup("audio/mpeg");
-return NULL;
-
-}
-
-VFSConstructor daap_const = {
- "daap://",
- daap_vfs_fopen_impl,
- daap_vfs_fclose_impl,
- daap_vfs_fread_impl,
- daap_vfs_fwrite_impl,
- daap_vfs_getc_impl,
- daap_vfs_ungetc_impl,
- daap_vfs_fseek_impl,
- daap_vfs_rewind_impl,
- daap_vfs_ftell_impl,
- daap_vfs_feof_impl,
- daap_vfs_truncate_impl,
- daap_vfs_fsize_impl,
- daap_vfs_metadata_impl
-};
-
-static void init(void)
-{
- mutex_init = g_mutex_new();
- mutex_discovery = g_mutex_new();
- vfs_register_transport(&daap_const);
- daap_mdns_initialize ();
- if (!login_sessions)
- login_sessions = g_hash_table_new (g_str_hash, g_str_equal);
-
-
-}
-static void cleanup(void)
-{
- g_mutex_free (mutex_init);
- g_mutex_free (mutex_discovery);
- daap_mdns_destroy ();
-}
-DECLARE_PLUGIN(daap, init, cleanup, NULL, NULL, NULL, NULL, NULL, NULL)
diff --git a/src/daap/xmms2-daap/Makefile b/src/daap/xmms2-daap/Makefile
deleted file mode 100644
index 0ee9dc7..0000000
--- a/src/daap/xmms2-daap/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-STATIC_LIB_NOINST = xmms2-daap.a
-
-SRCS = cc_handlers.c \
- daap_conn.c \
- daap_cmd.c \
- daap_md5.c \
- daap_util.c \
- daap_mdns_dnssd.c \
- daap_mdns_avahi.c \
- daap_mdns_dummy.c
-# daap_xform.c
-
-include ../../../buildsys.mk
-include ../../../extra.mk
-
-#For the moment i'm hardcoding it but it will be configurable
-#MDNS_IMPL=DAAP_MDNS_DNSSD
-MDNS_IMPL=DAAP_MDNS_AVAHI
-#MDNS_IMPL=DAAP_MDNS_DUMMY
-
-WARN = -Wall -std=c99
-DEFINES = -D${MDNS_IMPL} -D_POSIX_SOURCE
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GLIB_CFLAGS} ${PICFLAGS} ${WARN} ${DEFINES}
-LIBS += ${GLIB_LIBS}
diff --git a/src/daap/xmms2-daap/cc_handlers.c b/src/daap/xmms2-daap/cc_handlers.c
deleted file mode 100644
index 48dff36..0000000
--- a/src/daap/xmms2-daap/cc_handlers.c
+++ /dev/null
@@ -1,892 +0,0 @@
-/** @file cc_handlers.c
- * Functions for parsing DAAP content code data.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#define _GNU_SOURCE
-#include <string.h>
-
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#include "cc_handlers.h"
-#include "daap_conn.h"
-
-#define DMAP_BYTES_REMAINING ((gint) (data_end - current_data))
-
-static void
-endian_swap_int16 (gint16 *i)
-{
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- gint16 tmp;
- tmp = (gint16) (((*i >> 8) & 0x00FF) |
- ((*i << 8) & 0xFF00));
- *i = tmp;
-#endif
-}
-
-static void
-endian_swap_int32 (gint32 *i)
-{
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- gint32 tmp;
- tmp = (gint32) (((*i >> 24) & 0x000000FF) |
- ((*i >> 8) & 0x0000FF00) |
- ((*i << 8) & 0x00FF0000) |
- ((*i << 24) & 0xFF000000));
- *i = tmp;
-#endif
-}
-
-static void
-endian_swap_int64 (gint64 *i)
-{
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- gint64 tmp;
- tmp = (gint64) ( ((*i >> 40) & 0x00000000000000FF) |
- ((*i >> 32) & 0x000000000000FF00) |
- ((*i >> 24) & 0x0000000000FF0000) |
- ((*i >> 8) & 0x00000000FF000000) |
- G_GINT64_CONSTANT ((*i << 8) & 0x000000FF00000000) |
- G_GINT64_CONSTANT ((*i << 24) & 0x0000FF0000000000) |
- G_GINT64_CONSTANT ((*i << 32) & 0x00FF000000000000) |
- G_GINT64_CONSTANT ((*i << 40) & 0xFF00000000000000));
- *i = tmp;
-#endif
-}
-
-static gint
-grab_data_string (gchar **container, gchar *data, gint str_len)
-{
- gint offset = 0;
-
- if (0 != str_len) {
- *container = (gchar *) malloc (sizeof (gchar) * (str_len+1));
-
- memcpy (*container, data + DMAP_CC_SZ + DMAP_INT_SZ, str_len);
- (*container)[str_len] = '\0';
-
- offset += str_len;
- }
-
- return offset;
-}
-
-static gint
-grab_data_version (gint16 *cont_upper, gint16 *cont_lower, gchar *data)
-{
- gint offset = DMAP_CC_SZ;
-
- memcpy (cont_lower, data + offset, DMAP_INT_SZ);
- endian_swap_int16 (cont_lower);
- offset += DMAP_INT_SZ;
-
- memcpy (cont_upper, data + offset, DMAP_INT_SZ);
- endian_swap_int16 (cont_upper);
- offset += DMAP_INT_SZ;
-
- return offset;
-}
-
-static gint
-grab_data (void *container, gchar *data, content_type ct)
-{
- gint offset;
- gint data_size;
-
- offset = DMAP_CC_SZ;
- memcpy (&data_size, data + offset, DMAP_INT_SZ);
- endian_swap_int32 ((gint32 *)&data_size);
- offset += DMAP_INT_SZ;
-
- switch (ct) {
- case DMAP_CTYPE_BYTE:
- case DMAP_CTYPE_UNSIGNEDBYTE:
- memcpy (container, data + offset, DMAP_BYTE_SZ);
- offset += DMAP_BYTE_SZ;
- break;
- case DMAP_CTYPE_SHORT:
- case DMAP_CTYPE_UNSIGNEDSHORT:
- memcpy (container, data + offset, DMAP_SHORT_SZ);
- endian_swap_int16 (container);
- offset += DMAP_SHORT_SZ;
- break;
- case DMAP_CTYPE_INT:
- case DMAP_CTYPE_UNSIGNEDINT:
- memcpy (container, data + offset, DMAP_INT_SZ);
- endian_swap_int32 (container);
- offset += DMAP_INT_SZ;
- break;
- case DMAP_CTYPE_LONG:
- case DMAP_CTYPE_UNSIGNEDLONG:
- memcpy (container, data + offset, DMAP_LONG_SZ);
- endian_swap_int64 (container);
- offset += DMAP_LONG_SZ;
- break;
- case DMAP_CTYPE_STRING:
- offset += grab_data_string ((gchar **) container, data, data_size);
- break;
- case DMAP_CTYPE_DATE:
- memcpy (container, data + offset, DMAP_INT_SZ);
- endian_swap_int32 (container);
- offset += DMAP_INT_SZ;
- break;
- default:
- g_print ("Warning: Unrecognized content type (%d).\n", ct);
- break;
- }
-
- return offset;
-}
-
-static gint
-cc_handler_mtco (cc_data_t *fields, gchar *current_data)
-{
- gint offset = grab_data (&(fields->n_rec_matches), current_data, DMAP_CTYPE_INT);
- return offset;
-}
-
-static gint
-cc_handler_mrco (cc_data_t *fields, gchar *current_data)
-{
- gint offset = grab_data (&(fields->n_ret_items), current_data, DMAP_CTYPE_INT);
- return offset;
-}
-
-static gint
-cc_handler_muty (cc_data_t *fields, gchar *current_data)
-{
- gint offset = grab_data (&(fields->updt_type), current_data, DMAP_CTYPE_BYTE);
- return offset;
-}
-
-static gint
-cc_handler_mstt (cc_data_t *fields, gchar *current_data)
-{
- gint offset = grab_data (&(fields->status), current_data, DMAP_CTYPE_INT);
- return offset;
-}
-
-static gint
-cc_handler_mlit (cc_data_t *fields, gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_item_record_t *item_fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- item_fields = g_malloc0 (sizeof (cc_item_record_t));
-
- while (current_data < data_end && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','i','i','d'):
- offset += grab_data (&(item_fields->dbid), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','p','e','r'):
- offset += grab_data (&(item_fields->persistent_id), current_data,
- DMAP_CTYPE_LONG);
- break;
- case CC_TO_INT ('m','i','n','m'):
- offset += grab_data (&(item_fields->iname), current_data,
- DMAP_CTYPE_STRING);
- break;
-
- /* song list specific */
- case CC_TO_INT ('m','i','k','d'):
- offset += grab_data (&(item_fields->item_kind), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('a','s','d','k'):
- offset += grab_data (&(item_fields->song_data_kind), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('a','s','u','l'):
- offset += grab_data (&(item_fields->song_data_url), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','a','l'):
- offset += grab_data (&(item_fields->song_data_album),
- current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','a','r'):
- offset += grab_data (&(item_fields->song_data_artist),
- current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','b','r'):
- offset += grab_data (&(item_fields->song_bitrate), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','s','c','m'):
- offset += grab_data (&(item_fields->song_comment), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','d','a'):
- offset += grab_data (&(item_fields->song_date), current_data,
- DMAP_CTYPE_DATE);
- break;
- case CC_TO_INT ('a','s','d','m'):
- offset += grab_data (&(item_fields->song_date_mod), current_data,
- DMAP_CTYPE_DATE);
- break;
- case CC_TO_INT ('a','s','g','n'):
- offset += grab_data (&(item_fields->song_genre), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','f','m'):
- offset += grab_data (&(item_fields->song_format), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','d','t'):
- offset += grab_data (&(item_fields->song_description), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','s','r'):
- offset += grab_data (&(item_fields->sample_rate), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('a','s','s','z'):
- offset += grab_data (&(item_fields->song_size), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('a','s','s','t'):
- offset += grab_data (&(item_fields->song_start_time), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('a','s','s','p'):
- offset += grab_data (&(item_fields->song_stop_time), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('a','s','t','m'):
- offset += grab_data (&(item_fields->song_total_time), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('a','s','y','r'):
- offset += grab_data (&(item_fields->song_year), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','s','t','n'):
- offset += grab_data (&(item_fields->song_track_no), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','s','c','p'):
- offset += grab_data (&(item_fields->song_composer), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('a','s','t','c'):
- offset += grab_data (&(item_fields->song_track_count), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','s','d','c'):
- offset += grab_data (&(item_fields->song_disc_count), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','s','d','n'):
- offset += grab_data (&(item_fields->song_disc_no), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','s','c','o'):
- offset += grab_data (&(item_fields->song_compilation), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('a','s','b','t'):
- offset += grab_data (&(item_fields->song_bpm), current_data,
- DMAP_CTYPE_SHORT);
- break;
- case CC_TO_INT ('a','g','r','p'):
- offset += grab_data (&(item_fields->song_grouping), current_data,
- DMAP_CTYPE_STRING);
- break;
- case CC_TO_INT ('m','c','t','i'):
- offset += grab_data (&(item_fields->container_id), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','u','d','l'):
- offset += grab_data (&(item_fields->deleted_id), current_data,
- DMAP_CTYPE_INT);
- break;
-
- /* db list specific */
- case CC_TO_INT ('m','i','m','c'):
- offset += grab_data (&(item_fields->db_n_items), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','c','t','c'):
- offset += grab_data (&(item_fields->db_n_playlist), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('a','e','S','P'):
- offset += grab_data (&(item_fields->is_smart_pl), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('a','b','p','l'):
- offset += grab_data (&(item_fields->is_base_pl), current_data,
- DMAP_CTYPE_BYTE);
- break;
-
- /* exit conditions */
- case CC_TO_INT ('m','l','i','t'):
- do_break = TRUE;
- break;
- default:
- g_print ("Warning: Unrecognized content code "
- "or end of data: %s\n", current_data);
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- fields->record_list = g_slist_prepend (fields->record_list, item_fields);
-
- return (gint) (current_data - data);
-}
-
-static gint
-cc_handler_mlcl (cc_data_t *fields, gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- current_data = data + 8;
- data_end = data + data_len;
-
- while (current_data < data_end && !do_break) {
- if (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3]) ==
- CC_TO_INT ('m','l','i','t')) {
-
- offset += cc_handler_mlit (fields, current_data,
- DMAP_BYTES_REMAINING);
- } else {
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return (gint)(current_data - data);
-}
-
-static cc_data_t *
-cc_handler_adbs (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- case CC_TO_INT ('m','u','t','y'):
- offset += cc_handler_muty (fields, current_data);
- break;
- case CC_TO_INT ('m','t','c','o'):
- offset += cc_handler_mtco (fields, current_data);
- break;
- case CC_TO_INT ('m','r','c','o'):
- offset += cc_handler_mrco (fields, current_data);
- break;
- case CC_TO_INT ('m','l','c','l'):
- offset += cc_handler_mlcl (fields, current_data,
- DMAP_BYTES_REMAINING);
- break;
- default:
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-static cc_data_t *
-cc_handler_msrv (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- case CC_TO_INT ('a','p','r','o'):
- offset += grab_data_version (&(fields->daap_proto_major),
- &(fields->daap_proto_minor),
- current_data);
- break;
- case CC_TO_INT ('m','p','r','o'):
- offset += grab_data_version (&(fields->dmap_proto_major),
- &(fields->dmap_proto_minor),
- current_data);
- break;
- case CC_TO_INT ('m','s','t','m'):
- offset += grab_data (&(fields->timeout_interval), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','s','i','x'):
- offset += grab_data (&(fields->has_indexing), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','e','x'):
- offset += grab_data (&(fields->has_extensions), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','u','p'):
- offset += grab_data (&(fields->has_update), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','a','l'):
- offset += grab_data (&(fields->has_autologout), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','l','r'):
- offset += grab_data (&(fields->login_required), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','q','y'):
- offset += grab_data (&(fields->has_queries), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','r','s'):
- offset += grab_data (&(fields->has_resolve), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','b','r'):
- offset += grab_data (&(fields->has_browsing), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','p','i'):
- offset += grab_data (&(fields->has_persistent), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','a','s'):
- offset += grab_data (&(fields->auth_type), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('m','s','a','u'):
- offset += grab_data (&(fields->auth_method), current_data,
- DMAP_CTYPE_BYTE);
- break;
- case CC_TO_INT ('a','e','S','V'):
- offset += grab_data (&(fields->sharing_version), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','s','d','c'):
- offset += grab_data (&(fields->db_count), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','i','n','m'):
- offset += grab_data (&(fields->server_name), current_data,
- DMAP_CTYPE_STRING);
- break;
- default:
- g_print ("Warning: Unrecognized content code "
- "or end of data: %s\n",
- current_data);
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-static cc_data_t *
-cc_handler_mccr (gchar *data, gint data_len)
-{
- /* not implemented */
- return NULL;
-}
-
-static cc_data_t *
-cc_handler_mlog (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- case CC_TO_INT ('m','l','i','d'):
- offset += grab_data (&(fields->session_id), current_data, DMAP_CTYPE_INT);
- break;
- default:
- g_print ("Unrecognized content code or end of data: %s\n",
- current_data);
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-static cc_data_t *
-cc_handler_mupd (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','u','s','r'):
- offset += grab_data (&(fields->revision_id), current_data,
- DMAP_CTYPE_INT);
- break;
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- default:
- g_print ("Unrecognized content code or end of data: %s\n",
- current_data);
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-static cc_data_t *
-cc_handler_avdb (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- case CC_TO_INT ('m','u','t','y'):
- offset += cc_handler_muty (fields, current_data);
- break;
- case CC_TO_INT ('m','t','c','o'):
- offset += cc_handler_mtco (fields, current_data);
- break;
- case CC_TO_INT ('m','r','c','o'):
- offset += cc_handler_mrco (fields, current_data);
- break;
- case CC_TO_INT ('m','l','c','l'):
- offset += cc_handler_mlcl (fields, current_data,
- DMAP_BYTES_REMAINING);
- break;
- default:
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-static cc_data_t *
-cc_handler_apso (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- case CC_TO_INT ('m','u','t','y'):
- offset += cc_handler_muty (fields, current_data);
- break;
- case CC_TO_INT ('m','t','c','o'):
- offset += cc_handler_mtco (fields, current_data);
- break;
- case CC_TO_INT ('m','r','c','o'):
- offset += cc_handler_mrco (fields, current_data);
- break;
- case CC_TO_INT ('m','l','c','l'):
- offset += cc_handler_mlcl (fields, current_data,
- DMAP_BYTES_REMAINING);
- break;
- default:
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-static cc_data_t *
-cc_handler_aply (gchar *data, gint data_len)
-{
- gint offset = 0;
- gboolean do_break = FALSE;
- gchar *current_data, *data_end;
- cc_data_t *fields;
-
- current_data = data + 8;
- data_end = data + data_len;
-
- fields = cc_data_new ();
-
- while ((current_data < data_end) && !do_break) {
- switch (CC_TO_INT (current_data[0], current_data[1],
- current_data[2], current_data[3])) {
- case CC_TO_INT ('m','s','t','t'):
- offset += cc_handler_mstt (fields, current_data);
- break;
- case CC_TO_INT ('m','u','t','y'):
- offset += cc_handler_muty (fields, current_data);
- break;
- case CC_TO_INT ('m','t','c','o'):
- offset += cc_handler_mtco (fields, current_data);
- break;
- case CC_TO_INT ('m','r','c','o'):
- offset += cc_handler_mrco (fields, current_data);
- break;
- case CC_TO_INT ('m','l','c','l'):
- offset += cc_handler_mlcl (fields, current_data,
- DMAP_BYTES_REMAINING);
- break;
- default:
- do_break = TRUE;
- break;
- }
-
- current_data += offset;
- offset = 0;
- }
-
- return fields;
-}
-
-cc_data_t *
-cc_data_new ()
-{
- cc_data_t *retval;
-
- retval = g_malloc0 (sizeof (cc_data_t));
- retval->record_list = NULL;
-
- return retval;
-}
-
-void
-cc_data_free (cc_data_t *fields)
-{
- if (NULL != fields->server_name) g_free (fields->server_name);
-
- g_slist_foreach (fields->record_list,
- (GFunc) cc_item_record_free,
- NULL);
- g_slist_free (fields->record_list);
-
- g_free (fields);
-}
-
-void
-cc_item_record_free (cc_item_record_t *item)
-{
- if (NULL != item->iname) g_free (item->iname);
- if (NULL != item->song_data_url) g_free (item->song_data_url);
- if (NULL != item->song_data_album) g_free (item->song_data_album);
- if (NULL != item->song_data_artist) g_free (item->song_data_artist);
- if (NULL != item->song_comment) g_free (item->song_comment);
- if (NULL != item->song_description) g_free (item->song_description);
- if (NULL != item->song_genre) g_free (item->song_genre);
- if (NULL != item->song_format) g_free (item->song_format);
- if (NULL != item->song_composer) g_free (item->song_composer);
- if (NULL != item->song_grouping) g_free (item->song_grouping);
-
- g_free (item);
-}
-
-GSList *
-cc_record_list_deep_copy (GSList *record_list) {
- GSList *retval = NULL;
- cc_item_record_t *record, *data;
-
- for (; record_list; record_list = g_slist_next (record_list)) {
- data = record_list->data;
- record = g_malloc0 (sizeof (cc_item_record_t));
- if (!record) {
- g_print ("memory allocation failed for cc_record_list_deep_copy\n");
- return NULL;
- }
-
- record->item_kind = data->item_kind;
- record->song_data_kind = data->song_data_kind;
- record->song_compilation = data->song_compilation;
- record->is_smart_pl = data->is_smart_pl;
- record->is_base_pl = data->is_base_pl;
-
- record->song_bitrate = data->song_bitrate;
- record->song_year = data->song_year;
- record->song_track_no = data->song_track_no;
- record->song_track_count = data->song_track_count;
- record->song_disc_count = data->song_disc_count;
- record->song_disc_no = data->song_disc_no;
- record->song_bpm = data->song_bpm;
-
- record->dbid = data->dbid;
- record->sample_rate = data->sample_rate;
- record->song_size = data->song_size;
- record->song_start_time = data->song_start_time;
- record->song_stop_time = data->song_stop_time;
- record->song_total_time = data->song_total_time;
- record->song_date = data->song_date;
- record->song_date_mod = data->song_date_mod;
- record->container_id = data->container_id;
-
- record->deleted_id = data->deleted_id;
-
- record->persistent_id = data->persistent_id;
-
- record->iname = g_strdup (data->iname);
- record->song_data_url = g_strdup (data->song_data_url);
- record->song_data_album = g_strdup (data->song_data_album);
- record->song_data_artist = g_strdup (data->song_data_artist);
- record->song_comment = g_strdup (data->song_comment);
- record->song_description = g_strdup (data->song_description);
- record->song_genre = g_strdup (data->song_genre);
- record->song_format = g_strdup (data->song_format);
- record->song_composer = g_strdup (data->song_composer);
- record->song_grouping = g_strdup (data->song_grouping);
-
- /* db list specific */
- record->db_n_items = data->db_n_items;
- record->db_n_playlist = data->db_n_playlist;
-
- retval = g_slist_prepend (retval, record);
- }
-
- return retval;
-}
-
-cc_data_t *
-cc_handler (gchar *data, gint data_len)
-{
- cc_data_t *retval;
-
- switch (CC_TO_INT (data[0],data[1],data[2],data[3])) {
- case CC_TO_INT ('a','d','b','s'):
- retval = cc_handler_adbs (data, data_len);
- break;
- case CC_TO_INT ('m','s','r','v'):
- retval = cc_handler_msrv (data, data_len);
- break;
- case CC_TO_INT ('m','c','c','r'):
- retval = cc_handler_mccr (data, data_len);
- break;
- case CC_TO_INT ('m','l','o','g'):
- retval = cc_handler_mlog (data, data_len);
- break;
- case CC_TO_INT ('m','u','p','d'):
- retval = cc_handler_mupd (data, data_len);
- break;
- case CC_TO_INT ('a','v','d','b'):
- retval = cc_handler_avdb (data, data_len);
- break;
- case CC_TO_INT ('a','p','s','o'):
- retval = cc_handler_apso (data, data_len);
- break;
- case CC_TO_INT ('a','p','l','y'):
- retval = cc_handler_aply (data, data_len);
- break;
- default:
- retval = NULL;
- break;
- }
-
- return retval;
-}
-
diff --git a/src/daap/xmms2-daap/cc_handlers.h b/src/daap/xmms2-daap/cc_handlers.h
deleted file mode 100644
index f0d65b5..0000000
--- a/src/daap/xmms2-daap/cc_handlers.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/** @file cc_handlers.h
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#ifndef CC_HANDLERS_H
-#define CC_HANDLERS_H
-
-#include <glib.h>
-
-#define CC_TO_INT(a,b,c,d) ((gint) ((a << 24) | \
- (b << 16) | \
- (c << 8) | \
- (d ) ))
-
-#define DMAP_CC_SZ (sizeof (gchar) * 4)
-#define DMAP_BYTE_SZ sizeof (gint8)
-#define DMAP_SHORT_SZ sizeof (gint16)
-#define DMAP_INT_SZ sizeof (gint32)
-#define DMAP_LONG_SZ sizeof (gint64)
-#define DMAP_VERSION_SZ sizeof (gint16)
-
-#define DMAP_UNKNOWN_CC -1
-
-typedef enum {
- DMAP_CTYPE_BYTE = 1,
- /* unconfirmed */
- DMAP_CTYPE_UNSIGNEDBYTE = 2,
-
- DMAP_CTYPE_SHORT = 3,
- /* unconfirmed */
- DMAP_CTYPE_UNSIGNEDSHORT = 4,
-
- DMAP_CTYPE_INT = 5,
- /* unconfirmed */
- DMAP_CTYPE_UNSIGNEDINT = 6,
-
- DMAP_CTYPE_LONG = 7,
- /* unconfirmed */
- DMAP_CTYPE_UNSIGNEDLONG = 8,
-
- DMAP_CTYPE_STRING = 9,
- DMAP_CTYPE_DATE = 10,
- DMAP_CTYPE_VERSION = 11,
- DMAP_CTYPE_LIST = 12,
-} content_type;
-
-typedef struct {
- /* items common to more than one type */
- gint8 updt_type;
-
- gint32 n_rec_matches;
- gint32 n_ret_items;
- gint32 status;
-
- GSList *record_list;
-
- /* msrv - server info */
- gint8 has_indexing;
- gint8 has_extensions;
- gint8 has_update;
- gint8 has_autologout;
- gint8 has_queries;
- gint8 has_resolve;
- gint8 has_browsing;
- gint8 has_persistent;
- gint8 auth_type;
- gint8 auth_method;
- gint8 login_required;
-
- gint16 daap_proto_major;
- gint16 daap_proto_minor;
- gint16 dmap_proto_major;
- gint16 dmap_proto_minor;
-
- gint32 timeout_interval;
- gint32 sharing_version;
- gint32 db_count;
-
- gchar *server_name;
-
- /* mccr - content codes */
- /* none */
-
- /* mlog - login */
- guint32 session_id;
-
- /* mupd - update */
- guint32 revision_id;
-
- /* avdb - db list */
- /* none */
-
- /* apso - items in playlist */
- /* none */
-
- /* aply - playlist list */
- /* none */
-
-} cc_data_t;
-
-/* mlit -- used in a item listing */
-typedef struct {
- gint8 item_kind;
- gint8 song_data_kind;
- gint8 song_compilation;
- gint8 is_smart_pl;
- gint8 is_base_pl;
-
- gint16 song_bitrate;
- gint16 song_year;
- gint16 song_track_no;
- gint16 song_track_count;
- gint16 song_disc_count;
- gint16 song_disc_no;
- gint16 song_bpm;
-
- gint32 dbid;
- gint32 sample_rate;
- gint32 song_size;
- gint32 song_start_time;
- gint32 song_stop_time;
- gint32 song_total_time;
- gint32 song_date;
- gint32 song_date_mod;
- gint32 container_id;
-
- gint32 deleted_id;
-
- guint64 persistent_id;
-
- gchar *iname;
- gchar *song_data_url;
- gchar *song_data_album;
- gchar *song_data_artist;
- gchar *song_comment;
- gchar *song_description;
- gchar *song_genre;
- gchar *song_format;
- gchar *song_composer;
- gchar *song_grouping;
-
- /* db list specific */
- gint32 db_n_items;
- gint32 db_n_playlist;
-
-} cc_item_record_t;
-
-cc_data_t *
-cc_data_new ();
-
-void
-cc_data_free (cc_data_t *fields);
-
-void
-cc_item_record_free (cc_item_record_t *item);
-
-GSList *
-cc_record_list_deep_copy (GSList *record_list);
-
-cc_data_t *
-cc_handler (gchar *data, gint data_len);
-
-#endif
diff --git a/src/daap/xmms2-daap/daap_cmd.c b/src/daap/xmms2-daap/daap_cmd.c
deleted file mode 100644
index f48e822..0000000
--- a/src/daap/xmms2-daap/daap_cmd.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/** @file daap_cmd.c
- * Wrapper functions for issuing DAAP commands.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#include "daap_cmd.h"
-#include "daap_conn.h"
-
-static cc_data_t *
-daap_request_data (GIOChannel *chan, const gchar *path, gchar *host, guint request_id);
-static gboolean
-daap_request_stream (GIOChannel *chan, gchar *path, gchar *host,
- guint request_id, guint *size);
-static gchar *
-daap_url_append_meta (gchar *url, GSList *meta_list);
-
-guint
-daap_command_login (gchar *host, gint port, guint request_id ) {
- GIOChannel *chan;
- cc_data_t *cc_data;
-
- guint session_id = 0;
-
- chan = daap_open_connection (host, port);
- if (!chan) {
- g_print("Connection to server failed! "
- "Please make sure the url is of the form:\n"
- "daap://ip[:port]/[song]");
- return 0;
- }
-
- cc_data = daap_request_data (chan, "/login", host, request_id);
- if (cc_data) {
- session_id = cc_data->session_id;
- cc_data_free (cc_data);
- }
-
- g_io_channel_shutdown (chan, TRUE, NULL);
- g_io_channel_unref (chan);
-
- return session_id;
-}
-
-guint
-daap_command_update (gchar *host, gint port, guint session_id, guint request_id)
-{
- GIOChannel *chan;
- gchar *request;
- cc_data_t *cc_data;
- guint revision_id = 0;
-
- chan = daap_open_connection (host, port);
- if (!chan) {
- return 0;
- }
-
- request = g_strdup_printf ("/update?session-id=%d", session_id);
-
- cc_data = daap_request_data (chan, request, host, request_id);
- if (cc_data) {
- revision_id = cc_data->revision_id;
- cc_data_free (cc_data);
- }
-
- g_free (request);
- g_io_channel_shutdown (chan, TRUE, NULL);
- g_io_channel_unref (chan);
-
- return revision_id;
-}
-
-gboolean
-daap_command_logout (gchar *host, gint port, guint session_id, guint request_id)
-{
- GIOChannel *chan;
- gchar *request;
-
- chan = daap_open_connection (host, port);
- if (!chan) {
- return FALSE;
- }
-
- request = g_strdup_printf ("/logout?session-id=%d", session_id);
-
- /* there is no cc_data generated, so we don't need to store it anywhere */
- daap_request_data (chan, request, host, request_id);
-
- g_free (request);
- g_io_channel_shutdown (chan, TRUE, NULL);
- g_io_channel_unref (chan);
-
- return TRUE;
-}
-
-GSList *
-daap_command_db_list (gchar *host, gint port, guint session_id,
- guint revision_id, guint request_id)
-{
- GIOChannel *chan;
- gchar *request;
- cc_data_t *cc_data;
- GSList *db_id_list = NULL;
-
- chan = daap_open_connection (host, port);
- if (!chan) {
- return NULL;
- }
-
- request = g_strdup_printf ("/databases?session-id=%d&revision-id=%d",
- session_id, revision_id);
-
- cc_data = daap_request_data (chan, request, host, request_id);
- g_free (request);
- if (cc_data) {
- db_id_list = cc_record_list_deep_copy (cc_data->record_list);
- cc_data_free (cc_data);
- }
-
- g_io_channel_shutdown (chan, TRUE, NULL);
- g_io_channel_unref (chan);
-
- return db_id_list;
-}
-
-GSList *
-daap_command_song_list (gchar *host, gint port, guint session_id,
- guint revision_id, guint request_id, gint db_id)
-{
- GIOChannel *chan;
- gchar *request;
- cc_data_t *cc_data;
-
- GSList * song_list;
- GSList * meta_items = NULL;
-
- chan = daap_open_connection (host, port);
- if (!chan) {
- return NULL;
- }
-
- meta_items = g_slist_prepend (meta_items, g_strdup ("dmap.itemid"));
- meta_items = g_slist_prepend (meta_items, g_strdup ("dmap.itemname"));
- meta_items = g_slist_prepend (meta_items, g_strdup ("daap.songartist"));
- meta_items = g_slist_prepend (meta_items, g_strdup ("daap.songformat"));
- meta_items = g_slist_prepend (meta_items, g_strdup ("daap.songtracknumber"));
- meta_items = g_slist_prepend (meta_items, g_strdup ("daap.songalbum"));
-
- request = g_strdup_printf ("/databases/%d/items?"
- "session-id=%d&revision-id=%d",
- db_id, session_id, revision_id);
-
- if (meta_items) {
- request = daap_url_append_meta (request, meta_items);
- }
-
- cc_data = daap_request_data (chan, request, host, request_id);
- song_list = cc_record_list_deep_copy (cc_data->record_list);
-
- g_free (request);
- cc_data_free (cc_data);
- g_io_channel_shutdown (chan, TRUE, NULL);
- g_io_channel_unref (chan);
- g_slist_foreach (meta_items, (GFunc) g_free, NULL);
- g_slist_free (meta_items);
-
- return song_list;
-}
-
-GIOChannel *
-daap_command_init_stream (gchar *host, gint port, guint session_id,
- guint revision_id, guint request_id,
- gint dbid, gchar *song, guint *filesize)
-{
- GIOChannel *chan;
- gchar *request;
- gboolean ok;
-
- chan = daap_open_connection (host, port);
- if (!chan) {
- return NULL;
- }
-
- request = g_strdup_printf ("/databases/%d/items%s"
- "?session-id=%d",
- dbid, song, session_id);
-
- ok = daap_request_stream (chan, request, host, request_id, filesize);
- g_free (request);
-
- if (!ok) {
- return NULL;
- }
-
- return chan;
-}
-
-static cc_data_t *
-daap_request_data (GIOChannel *chan, const gchar *path, gchar *host, guint request_id)
-{
- guint status;
- gchar *request, *header = NULL;
- cc_data_t *retval;
-
- request = daap_generate_request (path, host, request_id);
- daap_send_request (chan, request);
- g_free (request);
-
- daap_receive_header (chan, &header);
- if (!header) {
- return NULL;
- }
-
- status = get_server_status (header);
-
- switch (status) {
- case UNKNOWN_SERVER_STATUS:
- case HTTP_BAD_REQUEST:
- case HTTP_FORBIDDEN:
- case HTTP_NO_CONTENT:
- case HTTP_NOT_FOUND:
- retval = NULL;
- break;
- case HTTP_OK:
- default:
- retval = daap_handle_data (chan, header);
- break;
- }
- g_free (header);
-
- return retval;
-}
-
-static gboolean
-daap_request_stream (GIOChannel *chan, gchar *path, gchar *host,
- guint request_id, guint *size)
-{
- guint status;
- gchar *request, *header = NULL;
-
- request = daap_generate_request (path, host, request_id);
- daap_send_request (chan, request);
- g_free (request);
-
- daap_receive_header (chan, &header);
- if (!header) {
- return FALSE;
- }
-
- status = get_server_status (header);
- if (HTTP_OK != status) {
- g_free (header);
- return FALSE;
- }
-
- *size = get_data_length (header);
-
- g_free (header);
-
- return TRUE;
-}
-
-static gchar *
-daap_url_append_meta (gchar *url, GSList *meta_list)
-{
- gchar * tmpurl;
-
- tmpurl = url;
- url = g_strdup_printf ("%s&meta=%s", url, (gchar *) meta_list->data);
- g_free (tmpurl);
- meta_list = g_slist_next (meta_list);
-
- for ( ; meta_list != NULL; meta_list = g_slist_next (meta_list)) {
- tmpurl = url;
- url = g_strdup_printf ("%s,%s", url, (gchar *) meta_list->data);
- g_free (tmpurl);
- }
-
- return url;
-}
-
diff --git a/src/daap/xmms2-daap/daap_cmd.h b/src/daap/xmms2-daap/daap_cmd.h
deleted file mode 100644
index 5a53b28..0000000
--- a/src/daap/xmms2-daap/daap_cmd.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/** @file daap_cmd.h
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#ifndef DAAP_CMD_H
-#define DAAP_CMD_H
-
-#include "cc_handlers.h"
-
-/**
- * Log into a DAAP server.
- * Issue the command necessary for logging in.
- *
- * @param host host IP of server
- * @param port port that the server uses on host
- * @param request_id the request id
- * @return a session id for use in further commands
- */
-guint
-daap_command_login (gchar *host, gint port, guint request_id);
-
-/**
- * Update the DAAP server status.
- * Issue the command necessary for updating the connection to a DAAP server.
- *
- * @param host host IP of server
- * @param port port that the server uses on host
- * @param session_id the id of the current session
- * @param request_id the request id
- * @return a revision id for use in further commands
- */
-guint
-daap_command_update (gchar *host, gint port, guint session_id, guint request_id);
-
-/**
- * Log out of a DAAP server.
- * Issue the command necessary for logging out.
- *
- * @param host host IP of server
- * @param port port that the server uses on host
- * @param session_id the id of the current session
- * @param request_id the request id
- * @return TRUE on success, FALSE otherwise
- */
-gboolean
-daap_command_logout (gchar *host, gint port, guint session_id, guint request_id);
-
-/**
- * Get a list of databases.
- * Issue the command for fetching a list of song databases on the server.
- *
- * @param host host IP of server
- * @param port port that the server uses on host
- * @param session_id the id of the current session
- * @param revision_id the id of the current revision
- * @param request_id the request id
- * @return a list of database ids
- */
-GSList *
-daap_command_db_list (gchar *host, gint port, guint session_id,
- guint revision_id, guint request_id);
-
-/**
- * Get a list of songs in a database.
- * Issue the command for fetching a list of songs in a database on the server.
- *
- * @param host host IP of server
- * @param port port that the server uses on host
- * @param session_id the id of the current session
- * @param revision_id the id of the current revision
- * @param request_id the request id
- * @param db_id the database id
- * @return a list of songs in the database
- */
-GSList *
-daap_command_song_list (gchar *host, gint port, guint session_id,
- guint revision_id, guint request_id, gint db_id);
-
-/**
- * Begin streaming a song.
- * Issue the command for streaming a song on the server.
- * NOTE: This command only _begins_ the stream; unlike the other command
- * functions, this one does not close the socket/channel, this must be done
- * manually after reading the data.
- *
- * @param host host IP of server
- * @param port port that the server uses on host
- * @param session_id the id of the current session
- * @param revision_id the id of the current revision
- * @param request_id the request id
- * @param dbid the database id
- * @param song a string containing the id and file type of the song to stream
- * @param filesize a pointer to an integer that stores the content length
- * @return: a GIOChannel corresponding to streaming song data
- */
-GIOChannel *
-daap_command_init_stream (gchar *host, gint port, guint session_id,
- guint revision_id, guint request_id,
- gint dbid, gchar *song, guint *filesize);
-
-#endif
diff --git a/src/daap/xmms2-daap/daap_conn.c b/src/daap/xmms2-daap/daap_conn.c
deleted file mode 100644
index 45bce9e..0000000
--- a/src/daap/xmms2-daap/daap_conn.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/** @file daap_conn.c
- * Manages the connection to a DAAP server.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-
-
-
-
-
-#include "cc_handlers.h"
-#include "daap_md5.h"
-#include "daap_conn.h"
-#include "daap_util.h"
-
-
- GIOChannel *
-daap_open_connection (gchar *host, gint port)
-{
- gint ai_status;
- gint sockfd;
- struct sockaddr_in server;
- struct addrinfo *ai_hint, *ai_result;
- GIOChannel *sock_chan;
- GError *err = NULL;
-
- sockfd = socket (AF_INET, SOCK_STREAM, 0);
- if (sockfd == -1) {
- return NULL;
- }
-
- sock_chan = g_io_channel_unix_new (sockfd);
- if (!g_io_channel_get_close_on_unref (sock_chan)) {
- g_io_channel_set_close_on_unref (sock_chan, TRUE);
- }
-
- g_io_channel_set_flags (sock_chan, G_IO_FLAG_NONBLOCK, &err);
- if (NULL != err) {
- g_print ("Error setting nonblock flag: %s\n", err->message);
- g_io_channel_unref (sock_chan);
- return NULL;
- }
-
- /* call getaddrinfo() to convert a hostname to ip */
-
- ai_hint = g_new0 (struct addrinfo, 1);
- /* FIXME sometime in the future, we probably want to append
- * " | {A,P}F_INET6" for IPv6 support */
- ai_hint->ai_family = AF_INET;
- ai_hint->ai_protocol = PF_INET;
-
- while ((ai_status = getaddrinfo (host, NULL, ai_hint, &ai_result))) {
- if (ai_status != EAI_AGAIN) {
- g_print ("Error with getaddrinfo(): %s", gai_strerror (ai_status));
- g_io_channel_unref (sock_chan);
- return NULL;
- }
- }
-
- memset (&server, 0, sizeof (struct sockaddr_in));
-
- server.sin_addr = ((struct sockaddr_in *) ai_result->ai_addr)->sin_addr;
- server.sin_family = AF_INET;
- server.sin_port = htons (port);
-
- g_free (ai_hint);
- freeaddrinfo (ai_result);
-
- while (42) {
- fd_set fds;
- struct timeval tmout;
- gint sret;
- gint err = 0;
- guint errsize = sizeof (err);
-
- tmout.tv_sec = 3;
- tmout.tv_usec = 0;
-
- sret = connect (sockfd,
- (struct sockaddr *) &server,
- sizeof (struct sockaddr_in));
-
- if (sret == 0) {
- break;
- } else if (sret == -1 && errno != EINPROGRESS) {
- g_print ("connect says: %s", strerror (errno));
- g_io_channel_unref (sock_chan);
- return NULL;
- }
-
- FD_ZERO (&fds);
- FD_SET (sockfd, &fds);
-
- sret = select (sockfd + 1, NULL, &fds, NULL, &tmout);
- if (sret <= 0 ) {
- g_io_channel_unref (sock_chan);
- return NULL;
- }
-
- /** Haha, lol lol ololo sockets in POSIX */
- if (getsockopt (sockfd, SOL_SOCKET, SO_ERROR, &err, &errsize) < 0) {
- g_io_channel_unref (sock_chan);
- return NULL;
- }
-
- if (err != 0) {
- g_print ("Connect call failed!");
- g_io_channel_unref (sock_chan);
- return NULL;
- }
-
- if (FD_ISSET (sockfd, &fds)) {
- break;
- }
- }
-
- g_io_channel_set_encoding (sock_chan, NULL, &err);
- if (NULL != err) {
- g_print ("Error setting encoding: %s\n", err->message);
- g_io_channel_unref (sock_chan);
- return NULL;
- }
-
- return sock_chan;
-}
-
-gchar *
-daap_generate_request (const gchar *path, gchar *host, gint request_id)
-{
- gchar *req;
- gint8 hash[33];
-
- memset (hash, 0, 33);
-
- daap_hash_generate (DAAP_VERSION, (guchar *) path, 2, (guchar *) hash,
- request_id);
-
- req = g_strdup_printf ("GET %s %s\r\n"
- "Host: %s\r\n"
- "Accept: */*\r\n"
- "User-Agent: %s\r\n"
- "Accept-Language: en-us, en;q=5.0\r\n"
- "Client-DAAP-Access-Index: 2\r\n"
- "Client-DAAP-Version: 3.0\r\n"
- "Client-DAAP-Validation: %s\r\n"
- "Client-DAAP-Request-ID: %d\r\n"
- "Connection: close\r\n"
- "\r\n",
- path, HTTP_VER_STRING, host,
- USER_AGENT, hash, request_id);
- return req;
-}
-
-void
-daap_send_request (GIOChannel *sock_chan, gchar *request)
-{
- gint n_bytes_to_send;
-
- n_bytes_to_send = strlen (request);
-
- write_buffer_to_channel (sock_chan, request, n_bytes_to_send);
-}
-
-void
-daap_receive_header (GIOChannel *sock_chan, gchar **header)
-{
- guint n_total_bytes_recvd = 0;
- gsize linelen;
- gchar *response, *recv_line;
- GIOStatus io_stat;
- GError *err = NULL;
-
- if (NULL != header) {
- *header = NULL;
- }
-
- response = (gchar *) g_malloc0 (sizeof (gchar) * MAX_HEADER_LENGTH);
- if (NULL == response) {
- g_print ("Error: couldn't allocate memory for response.\n");
- return;
- }
-
- /* read data from the io channel one line at a time, looking for
- * the end of the header */
- do {
- io_stat = g_io_channel_read_line (sock_chan, &recv_line, &linelen,
- NULL, &err);
- if (io_stat == G_IO_STATUS_ERROR) {
- g_print ("Error reading from channel: %s\n", err->message);
- break;
- }
-
- if (NULL != recv_line) {
- memcpy (response+n_total_bytes_recvd, recv_line, linelen);
- n_total_bytes_recvd += linelen;
-
- if (strcmp (recv_line, "\r\n") == 0) {
- g_free (recv_line);
- if (NULL != header) {
- *header = (gchar *) g_malloc0 (sizeof (gchar) *
- n_total_bytes_recvd);
- if (NULL == *header) {
- g_print ("error: couldn't allocate header\n");
- break;
- }
- memcpy (*header, response, n_total_bytes_recvd);
- }
- break;
- }
-
- g_free (recv_line);
- }
-
- if (io_stat == G_IO_STATUS_EOF) {
- break;
- }
-
- if (n_total_bytes_recvd >= MAX_HEADER_LENGTH) {
- g_print ("Warning: Maximum header size reached without finding "
- "end of header; bailing.\n");
- break;
- }
- } while (TRUE);
-
- g_free (response);
-
- if (sock_chan) {
- g_io_channel_flush (sock_chan, &err);
- if (NULL != err) {
- g_print ("Error flushing buffer: %s\n", err->message);
- return;
- }
- }
-}
-
-cc_data_t *
-daap_handle_data (GIOChannel *sock_chan, gchar *header)
-{
- cc_data_t * retval;
- gint response_length;
- gchar *response_data;
-
- response_length = get_data_length (header);
-
- if (BAD_CONTENT_LENGTH == response_length) {
- g_print ("warning: Header does not contain a \""CONTENT_LENGTH
- "\" parameter.\n");
- return NULL;
- } else if (0 == response_length) {
- g_print ("warning: "CONTENT_LENGTH" is zero, most likely the result of "
- "a bad request.\n");
- return NULL;
- }
-
- response_data = (gchar *) g_malloc0 (sizeof (gchar) * response_length);
- if (NULL == response_data) {
- g_print ("error: could not allocate response memory\n");
- return NULL;
- }
-
- read_buffer_from_channel (sock_chan, response_data, response_length);
-
- retval = cc_handler (response_data, response_length);
- g_free (response_data);
-
- return retval;
-}
-
-gint
-get_data_length (gchar *header)
-{
- gint len;
- gchar *content_length;
-
- content_length = strstr (header, CONTENT_LENGTH);
- if (NULL == content_length) {
- len = BAD_CONTENT_LENGTH;
- } else {
- content_length += strlen (CONTENT_LENGTH);
- len = atoi (content_length);
- }
-
- return len;
-}
-
-gint
-get_server_status (gchar *header)
-{
- gint status;
- gchar *server_status;
-
- server_status = strstr (header, HTTP_VER_STRING);
- if (NULL == server_status) {
- status = UNKNOWN_SERVER_STATUS;
- } else {
- server_status += strlen (HTTP_VER_STRING" ");
- status = atoi (server_status);
- }
-
- return status;
-}
-
diff --git a/src/daap/xmms2-daap/daap_conn.h b/src/daap/xmms2-daap/daap_conn.h
deleted file mode 100644
index 903ae0c..0000000
--- a/src/daap/xmms2-daap/daap_conn.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/** @file daap_conn.h
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#ifndef DAAP_CONN_H
-#define DAAP_CONN_H
-
-#define MAX_REQUEST_LENGTH 1024
-#define MAX_HEADER_LENGTH (1024 * 16)
-
-#define BAD_CONTENT_LENGTH -1
-
-#define DAAP_VERSION 3
-
-#define HTTP_OK 200
-#define HTTP_NO_CONTENT 204
-#define HTTP_BAD_REQUEST 400
-#define HTTP_FORBIDDEN 403
-#define HTTP_NOT_FOUND 404
-#define UNKNOWN_SERVER_STATUS -1
-
-#define DAAP_URL_PREFIX "daap://"
-#define HTTP_VER_STRING "HTTP/1.1"
-#define CONTENT_LENGTH "Content-Length: "
-#define CONTENT_TYPE "Content-Type: "
-/* TODO does this work ok? */
-#define USER_AGENT "Audacious"
-/*#define USER_AGENT "iTunes/4.6 (Windows; N)"*/
-
-GIOChannel *
-daap_open_connection (gchar *host, gint port);
-
-gchar *
-daap_generate_request (const gchar *path, gchar *host, gint request_id);
-
-void
-daap_send_request (GIOChannel *sock_chan, gchar *request);
-
-void
-daap_receive_header (GIOChannel *sock_chan, gchar **header);
-
-cc_data_t *
-daap_handle_data (GIOChannel *sock_chan, gchar *header);
-
-void
-daap_stream_data (GIOChannel *input, GIOChannel *output, gchar *header);
-
-gint
-get_data_length (gchar *header);
-
-gint
-get_server_status (gchar *header);
-
-#endif
diff --git a/src/daap/xmms2-daap/daap_md5.c b/src/daap/xmms2-daap/daap_md5.c
deleted file mode 100644
index aaf8c12..0000000
--- a/src/daap/xmms2-daap/daap_md5.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/** @file daap_md5.c
- *
- * Implementation of DAAP (iTunes Music Sharing) hashing, parsing, connection
- * Slightly modified for use in XMMS2
- *
- * Copyright (C) 2004,2005 Charles Schmidt <cschmidt2@emich.edu>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include "daap_md5.h"
-
-/* hashing - based on/copied from libopendaap
- * Copyright (c) 2004 David Hammerton
- */
-
-typedef struct {
- guint32 buf[4];
- guint32 bits[2];
- unsigned char in[64];
- int version;
-} MD5_CTX;
-
-/*
-* This code implements the MD5 message-digest algorithm.
-* The algorithm is due to Ron Rivest. This code was
-* written by Colin Plumb in 1993, no copyright is claimed.
-* This code is in the public domain; do with it what you wish.
-*
-* Equivalent code is available from RSA Data Security, Inc.
-* This code has been tested against that, and is equivalent,
-* except that you don't need to include two pages of legalese
-* with every copy.
-*
-* To compute the message digest of a chunk of bytes, declare an MD5Context
-* structure, pass it to OpenDaap_MD5Init, call OpenDaap_MD5Update as needed
-* on buffers full of bytes, and then call OpenDaap_MD5Final, which will fill
-* a supplied 16-byte array with the digest.
-*/
-static void
-MD5Transform (guint32 buf[4],
- guint32 const in[16],
- gint version);
-/* for some reason we still have to reverse bytes on bigendian machines
- * I don't really know why... but otherwise it fails..
- * Any MD5 gurus out there know why???
- */
-#if 0 //ndef WORDS_BIGENDIAN /* was: HIGHFIRST */
-#define byteReverse (buf, len) /* Nothing */
-#else
-static void
-byteReverse (unsigned char *buf,
- unsigned longs);
-
-#ifndef ASM_MD5
-/*
-* Note: this code is harmless on little-endian machines.
-*/
-static void
-byteReverse (unsigned char *buf,
- unsigned longs)
-{
- guint32 t;
- do {
- t = (guint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(guint32 *) buf = t;
- buf += 4;
- } while (--longs);
-}
-#endif /* ! ASM_MD5 */
-#endif /* #if 0 */
-
-static void
-OpenDaap_MD5Init (MD5_CTX *ctx,
- gint version)
-{
- memset (ctx, 0, sizeof (MD5_CTX));
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
-
- ctx->bits[0] = 0;
- ctx->bits[1] = 0;
-
- ctx->version = version;
-}
-
-static void
-OpenDaap_MD5Update (MD5_CTX *ctx,
- unsigned char const *buf,
- unsigned int len)
-{
- guint32 t;
-
- /* Update bitcount */
-
- t = ctx->bits[0];
- if ((ctx->bits[0] = t + ((guint32) len << 3)) < t)
- ctx->bits[1]++; /* Carry from low to high */
- ctx->bits[1] += len >> 29;
-
- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
-
- /* Handle any leading odd-sized chunks */
-
- if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
-
- t = 64 - t;
- if (len < t) {
- memcpy (p, buf, len);
- return;
- }
- memcpy (p, buf, t);
- byteReverse (ctx->in, 16);
- MD5Transform (ctx->buf, (guint32 *) ctx->in, ctx->version);
- buf += t;
- len -= t;
- }
- /* Process data in 64-byte chunks */
-
- while (len >= 64) {
- memcpy (ctx->in, buf, 64);
- byteReverse (ctx->in, 16);
- MD5Transform (ctx->buf, (guint32 *) ctx->in, ctx->version);
- buf += 64;
- len -= 64;
- }
-
- /* Handle any remaining bytes of data. */
-
- memcpy (ctx->in, buf, len);
-
-}
-
-static void
-OpenDaap_MD5Final (MD5_CTX *ctx,
- unsigned char digest[16])
-{
- unsigned count;
- unsigned char *p;
-
- /* Compute number of bytes mod 64 */
- count = (ctx->bits[0] >> 3) & 0x3F;
-
- /* Set the first char of padding to 0x80. This is safe since there is
- always at least one byte free */
- p = ctx->in + count;
- *p++ = 0x80;
-
- /* Bytes of padding needed to make 64 bytes */
- count = 64 - 1 - count;
-
- /* Pad out to 56 mod 64 */
- if (count < 8) {
- /* Two lots of padding: Pad the first block to 64 bytes */
- memset (p, 0, count);
- byteReverse (ctx->in, 16);
- MD5Transform (ctx->buf, (guint32 *) ctx->in, ctx->version);
-
- /* Now fill the next block with 56 bytes */
- memset (ctx->in, 0, 56);
- } else {
- /* Pad block to 56 bytes */
- memset (p, 0, count - 8);
- }
- byteReverse (ctx->in, 14);
-
- /* Append length in bits and transform */
- ((guint32 *) ctx->in)[14] = ctx->bits[0];
- ((guint32 *) ctx->in)[15] = ctx->bits[1];
-
- MD5Transform (ctx->buf, (guint32 *) ctx->in, ctx->version);
- byteReverse ((unsigned char *) ctx->buf, 4);
- memcpy (digest, ctx->buf, 16);
- memset (ctx, 0, sizeof (ctx)); /* In case it's sensitive */
-
- return;
-}
-
-#ifndef ASM_MD5
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1 (z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
-( w += f (x, y, z) + data, w = w<<s | w>>(32-s), w += x )
-
-/*
-* The core of the MD5 algorithm, this alters an existing MD5 hash to reflect
-* the addition of 16 longwords of new data. OpenDaap_MD5Update blocks the
-* data and converts bytes into longwords for this routine.
-*/
-static void
-MD5Transform (guint32 buf[4],
- guint32 const in[16],
- gint version)
-{
- guint32 a, b, c, d;
-
- a = buf[0];
- b = buf[1];
- c = buf[2];
- d = buf[3];
-
- MD5STEP (F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP (F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP (F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP (F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP (F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP (F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP (F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP (F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP (F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP (F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP (F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP (F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP (F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP (F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP (F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP (F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP (F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP (F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP (F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP (F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP (F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP (F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP (F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP (F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP (F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP (F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP (F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-
- if (version == 1) {
- MD5STEP (F2, b, c, d, a, in[8] + 0x445a14ed, 20);
- } else {
- MD5STEP (F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- }
- MD5STEP (F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP (F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP (F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP (F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP (F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP (F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP (F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP (F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP (F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP (F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP (F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP (F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP (F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP (F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP (F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP (F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP (F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP (F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP (F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP (F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP (F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP (F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP (F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP (F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP (F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP (F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP (F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP (F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP (F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP (F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP (F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP (F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP (F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP (F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP (F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP (F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
- buf[0] += a;
- buf[1] += b;
- buf[2] += c;
- buf[3] += d;
-}
-
-#endif
-
-
-
-
-
-static int staticHashDone = 0;
-static unsigned char staticHash_42[256*65] = {0};
-static unsigned char staticHash_45[256*65] = {0};
-
-static const char hexchars[] = "0123456789ABCDEF";
-static char ac[] = "Dpqzsjhiu!3114!Bqqmf!Dpnqvufs-!Jod/"; /* +1 */
-static gboolean ac_unfudged = FALSE;
-
-static void
-DigestToString (const unsigned char *digest,
- char *string)
-{
- int i;
- for (i = 0; i < 16; i++) {
- unsigned char tmp = digest[i];
- string[i*2+1] = hexchars[tmp & 0x0f];
- string[i*2] = hexchars[(tmp >> 4) & 0x0f];
- }
-}
-
-static void
-GenerateStatic_42 () {
- MD5_CTX ctx;
- unsigned char *p = staticHash_42;
- int i;
- unsigned char buf[16];
-
- for (i = 0; i < 256; i++) {
- OpenDaap_MD5Init (&ctx, 0);
-
-#define MD5_STRUPDATE(str) OpenDaap_MD5Update(&ctx, (unsigned char const *)str, strlen (str))
-
- if ((i & 0x80) != 0)
- MD5_STRUPDATE ("Accept-Language");
- else
- MD5_STRUPDATE ("user-agent");
-
- if ((i & 0x40) != 0)
- MD5_STRUPDATE ("max-age");
- else
- MD5_STRUPDATE ("Authorization");
-
- if ((i & 0x20) != 0)
- MD5_STRUPDATE ("Client-DAAP-Version");
- else
- MD5_STRUPDATE ("Accept-Encoding");
-
- if ((i & 0x10) != 0)
- MD5_STRUPDATE ("daap.protocolversion");
- else
- MD5_STRUPDATE ("daap.songartist");
-
- if ((i & 0x08) != 0)
- MD5_STRUPDATE ("daap.songcomposer");
- else
- MD5_STRUPDATE ("daap.songdatemodified");
-
- if ((i & 0x04) != 0)
- MD5_STRUPDATE ("daap.songdiscnumber");
- else
- MD5_STRUPDATE ("daap.songdisabled");
-
- if ((i & 0x02) != 0)
- MD5_STRUPDATE ("playlist-item-spec");
- else
- MD5_STRUPDATE ("revision-number");
-
- if ((i & 0x01) != 0)
- MD5_STRUPDATE ("session-id");
- else
- MD5_STRUPDATE ("content-codes");
-#undef MD5_STRUPDATE
-
- OpenDaap_MD5Final (&ctx, buf);
- DigestToString (buf, (char *)p);
- p += 65;
- }
-}
-
-static void GenerateStatic_45 ()
-{
- MD5_CTX ctx;
- unsigned char *p = staticHash_45;
- int i;
- unsigned char buf[16];
-
- for (i = 0; i < 256; i++) {
- OpenDaap_MD5Init (&ctx, 1);
-
-#define MD5_STRUPDATE(str) OpenDaap_MD5Update(&ctx, (unsigned char const *)str, strlen (str))
-
- if ((i & 0x40) != 0)
- MD5_STRUPDATE ("eqwsdxcqwesdc");
- else
- MD5_STRUPDATE ("op[;lm,piojkmn");
-
- if ((i & 0x20) != 0)
- MD5_STRUPDATE ("876trfvb 34rtgbvc");
- else
- MD5_STRUPDATE ("=-0ol.,m3ewrdfv");
-
- if ((i & 0x10) != 0)
- MD5_STRUPDATE ("87654323e4rgbv ");
- else
- MD5_STRUPDATE ("1535753690868867974342659792");
-
- if ((i & 0x08) != 0)
- MD5_STRUPDATE ("Song Name");
- else
- MD5_STRUPDATE ("DAAP-CLIENT-ID:");
-
- if ((i & 0x04) != 0)
- MD5_STRUPDATE ("111222333444555");
- else
- MD5_STRUPDATE ("4089961010");
-
- if ((i & 0x02) != 0)
- MD5_STRUPDATE ("playlist-item-spec");
- else
- MD5_STRUPDATE ("revision-number");
-
- if ((i & 0x01) != 0)
- MD5_STRUPDATE ("session-id");
- else
- MD5_STRUPDATE ("content-codes");
-
- if ((i & 0x80) != 0)
- MD5_STRUPDATE ("IUYHGFDCXWEDFGHN");
- else
- MD5_STRUPDATE ("iuytgfdxwerfghjm");
-
-#undef MD5_STRUPDATE
-
- OpenDaap_MD5Final (&ctx, buf);
- DigestToString (buf, (char *)p);
- p += 65;
- }
-}
-
-void
-daap_hash_generate (short version_major,
- const guchar *url,
- guchar hash_select,
- guchar *out,
- gint request_id)
-{
- unsigned char buf[16];
- MD5_CTX ctx;
- int i;
-
- unsigned char *hashTable = (version_major == 3) ?
- staticHash_45 : staticHash_42;
-
- if (!staticHashDone) {
- GenerateStatic_42 ();
- GenerateStatic_45 ();
- staticHashDone = 1;
- }
-
- OpenDaap_MD5Init (&ctx, (version_major == 3) ? 1 : 0);
-
- OpenDaap_MD5Update (&ctx, url, strlen ((const gchar*)url));
- if (ac_unfudged == FALSE) {
- for (i = 0; i < strlen (ac); i++) {
- ac[i] = ac[i]-1;
- }
- ac_unfudged = TRUE;
- }
- OpenDaap_MD5Update (&ctx, (const guchar*)ac, strlen (ac));
-
- OpenDaap_MD5Update (&ctx, &hashTable[hash_select * 65], 32);
-
- if (request_id && version_major == 3) {
- char scribble[20];
- sprintf (scribble, "%u", request_id);
- OpenDaap_MD5Update (&ctx, (const guchar*)scribble, strlen (scribble));
- }
-
- OpenDaap_MD5Final (&ctx, buf);
- DigestToString (buf, (char *)out);
-
- return;
-}
diff --git a/src/daap/xmms2-daap/daap_md5.h b/src/daap/xmms2-daap/daap_md5.h
deleted file mode 100644
index df75495..0000000
--- a/src/daap/xmms2-daap/daap_md5.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/** @file daap_md5.h
- *
- * Header for DAAP (iTunes Music Sharing) hashing, connection
- * Slightly modified for use in XMMS2
- *
- * Copyright (C) 2004,2005 Charles Schmidt <cschmidt2@emich.edu>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef DAAP_MD5_H
-#define DAAP_MD5_H
-
-#include <glib.h>
-
-void
-daap_hash_generate (short version_major,
- const guchar *url,
- guchar hash_select,
- guchar *out,
- gint request_id);
-
-#endif
-
diff --git a/src/daap/xmms2-daap/daap_mdns_avahi.c b/src/daap/xmms2-daap/daap_mdns_avahi.c
deleted file mode 100644
index a323f38..0000000
--- a/src/daap/xmms2-daap/daap_mdns_avahi.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/** @file daap_mdns_browse.c
- * Browser for DAAP servers shared via mDNS.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-#ifdef DAAP_MDNS_AVAHI
-#include "daap_mdns_browse.h"
-
-#include <string.h>
-#include <glib.h>
-
-#include <avahi-client/client.h>
-#include <avahi-client/lookup.h>
-
-#include <avahi-common/malloc.h>
-#include <avahi-common/error.h>
-#include <avahi-common/timeval.h>
-
-#include <avahi-glib/glib-watch.h>
-#include <avahi-glib/glib-malloc.h>
-
-#define ADDR_LEN (3 * 4 + 3 + 1) /* standard dotted-quad fmt */
-
-typedef struct {
- AvahiClient *client;
- GMainLoop *mainloop;
-} browse_callback_userdata_t;
-
-static GSList *g_server_list = NULL;
-static GStaticMutex serv_list_mut = G_STATIC_MUTEX_INIT;
-static AvahiGLibPoll *gl_poll = NULL;
-static AvahiClient *client = NULL;
-static AvahiServiceBrowser *browser = NULL;
-
-static GSList *
-daap_mdns_serv_remove (GSList *serv_list, gchar *addr, guint port)
-{
- GSList *first = serv_list;
- daap_mdns_server_t *serv;
-
- for ( ; serv_list != NULL; serv_list = g_slist_next (serv_list)) {
- serv = (daap_mdns_server_t *) serv_list->data;
- if ( (port == serv->port) && (!strcmp (addr, serv->address)) ) {
- serv_list = g_slist_remove (first, serv);
-
- g_free (serv->server_name);
- g_free (serv->mdns_hostname);
- g_free (serv->address);
- g_free (serv);
-
- return serv_list;
- }
- }
- return NULL;
-}
-
-static void
-daap_mdns_resolve_cb (AvahiServiceResolver *resolv,
- AvahiIfIndex iface,
- AvahiProtocol proto,
- AvahiResolverEvent event,
- const gchar *name,
- const gchar *type,
- const gchar *domain,
- const gchar *hostname,
- const AvahiAddress *addr,
- guint16 port,
- AvahiStringList *text,
- AvahiLookupResultFlags flags,
- void *userdata)
-{
- gboolean *remove = userdata;
- gchar ad[ADDR_LEN];
- daap_mdns_server_t *server;
-
- if (!resolv) {
- return;
- }
-
- switch (event) {
- case AVAHI_RESOLVER_FOUND:
- server = (daap_mdns_server_t *)
- g_malloc0 (sizeof (daap_mdns_server_t));
- avahi_address_snprint (ad, sizeof (ad), addr);
-
- server->server_name = g_strdup (name);
- server->address = g_strdup (ad);
- server->mdns_hostname = g_strdup (hostname);
- server->port = port;
-
- if (*remove) {
- g_static_mutex_lock (&serv_list_mut);
- g_server_list = daap_mdns_serv_remove (g_server_list, ad, port);
- g_static_mutex_unlock (&serv_list_mut);
- } else {
- g_static_mutex_lock (&serv_list_mut);
- g_server_list = g_slist_prepend (g_server_list, server);
- g_static_mutex_unlock (&serv_list_mut);
- }
- g_free (remove);
-
- break;
-
- case AVAHI_RESOLVER_FAILURE:
- break;
-
- default:
- break;
- }
-
- avahi_service_resolver_free (resolv);
-}
-
-static void
-daap_mdns_browse_cb (AvahiServiceBrowser *browser,
- AvahiIfIndex iface,
- AvahiProtocol proto,
- AvahiBrowserEvent event,
- const gchar *name,
- const gchar *type,
- const gchar *domain,
- AvahiLookupResultFlags flags,
- void *userdata)
-{
- gboolean ok = FALSE;
- gboolean *b = g_malloc (sizeof (gboolean));
-
- AvahiClient *client = ((browse_callback_userdata_t *) userdata)->client;
-
- if (!browser) {
- return;
- }
-
- switch (event) {
- case AVAHI_BROWSER_NEW:
- *b = FALSE;
- ok = (gboolean)
- avahi_service_resolver_new (client, iface, proto, name, type,
- domain, AVAHI_PROTO_UNSPEC, 0,
- daap_mdns_resolve_cb, b);
- break;
-
- case AVAHI_BROWSER_REMOVE:
- *b = TRUE;
- ok = (gboolean)
- avahi_service_resolver_new (client, iface, proto, name, type,
- domain, AVAHI_PROTO_UNSPEC, 0,
- daap_mdns_resolve_cb, b);
- break;
-
- case AVAHI_BROWSER_CACHE_EXHAUSTED:
- break;
-
- case AVAHI_BROWSER_ALL_FOR_NOW:
- break;
-
- default:
- break;
- }
-}
-
-static void
-daap_mdns_client_cb (AvahiClient *client,
- AvahiClientState state,
- void * userdata)
-{
- if (!client) {
- return;
- }
-
- switch (state) {
- case AVAHI_CLIENT_FAILURE:
- break;
- default:
- break;
- }
-}
-
-static void
-daap_mdns_timeout (AvahiTimeout *to, void *userdata)
-{
-}
-
-static gboolean
-daap_mdns_timeout_glib (void *userdata)
-{
- return FALSE;
-}
-
-gboolean
-daap_mdns_initialize ()
-{
- const AvahiPoll *av_poll;
-
- GMainLoop *ml = NULL;
-
- gboolean ok = TRUE;
- gint errval;
- struct timeval tv;
- browse_callback_userdata_t *browse_userdata;
-
- if (gl_poll) {
- ok = FALSE;
- goto fail;
- }
-
- browse_userdata = g_malloc0 (sizeof (browse_callback_userdata_t));
-
- avahi_set_allocator (avahi_glib_allocator ());
-
- ml = g_main_loop_new (NULL, FALSE);
-
- gl_poll = avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);
- av_poll = avahi_glib_poll_get (gl_poll);
-
- avahi_elapse_time (&tv, 2000, 0);
- av_poll->timeout_new (av_poll, &tv, daap_mdns_timeout, NULL);
- g_timeout_add (5000, daap_mdns_timeout_glib, ml);
-
- client = avahi_client_new (av_poll, 0, daap_mdns_client_cb, ml, &errval);
- if (!client) {
- ok = FALSE;
- goto fail;
- }
-
- browse_userdata->client = client;
- browse_userdata->mainloop = ml;
-
- browser = avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
- AVAHI_PROTO_UNSPEC, "_daap._tcp", NULL,
- 0, daap_mdns_browse_cb,
- browse_userdata);
- if (!browser) {
- ok = FALSE;
- goto fail;
- }
-
-fail:
- return ok;
-}
-
-GSList *
-daap_mdns_get_server_list ()
-{
- GSList * l;
- g_static_mutex_lock (&serv_list_mut);
- l = g_slist_copy (g_server_list);
- g_static_mutex_unlock (&serv_list_mut);
- return l;
-}
-
-void
-daap_mdns_destroy ()
-{
- /* FIXME: deinit avahi */
-}
-#endif
-
diff --git a/src/daap/xmms2-daap/daap_mdns_browse.h b/src/daap/xmms2-daap/daap_mdns_browse.h
deleted file mode 100644
index da124c6..0000000
--- a/src/daap/xmms2-daap/daap_mdns_browse.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/** @file daap_mdns_browse.h
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#ifndef DAAP_MDNS_BROWSE_H
-#define DAAP_MDNS_BROWSE_H
-
-#include <glib.h>
-
-typedef struct {
- gchar *server_name;
- gchar *address;
- gchar *mdns_hostname;
- guint16 port;
-} daap_mdns_server_t;
-
-gboolean
-daap_mdns_initialize ();
-
-GSList *
-daap_mdns_get_server_list ();
-
-void
-daap_mdns_destroy ();
-
-#endif
diff --git a/src/daap/xmms2-daap/daap_mdns_dnssd.c b/src/daap/xmms2-daap/daap_mdns_dnssd.c
deleted file mode 100644
index f2e1c0b..0000000
--- a/src/daap/xmms2-daap/daap_mdns_dnssd.c
+++ /dev/null
@@ -1,419 +0,0 @@
-/** XMMS2 transform for accessing DAAP music shares.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-#ifdef DAAP_MDNS_DNSSD
-
-#include <glib.h>
-#include <dns_sd.h>
-#include <string.h>
-
-#include "daap_mdns_browse.h"
-
-typedef struct GMDNS_t GMDNS;
-typedef struct GMDNSServer_t GMDNSServer;
-typedef struct GMDNSUserData_t GMDNSUserData;
-
-typedef void (*GMDNSFunc)(GMDNS *, gint, GMDNSServer *, gpointer);
-
-struct GMDNS_t {
- GMutex *mutex;
- GSList *service_list;
-
- GMDNSFunc callback;
- gpointer user_data;
- GMDNSUserData *browse_ud;
-};
-
-struct GMDNSUserData_t {
- GMDNS *mdns;
- GMDNSServer *server;
- GPollFD *fd;
- GSource *source;
-
- DNSServiceRef client;
-};
-
-struct GMDNSServer_t {
- gchar *mdnsname;
- gchar *hostname;
- gchar *address;
- GHashTable *txtvalues;
- guint16 port;
-};
-
-enum {
- G_MDNS_SERVER_ADD,
- G_MDNS_SERVER_REMOVE
-};
-
-static void g_mdns_user_data_destroy (GMDNSUserData *ud);
-static void g_mdns_server_destroy (GMDNSServer *server);
-static gboolean g_mdns_poll_add (GMDNS *mdns, GMDNSUserData *ud, DNSServiceRef client);
-
-static GMDNS *g_mdns;
-
-static void
-qr_reply (DNSServiceRef sdRef,
- DNSServiceFlags flags,
- uint32_t ifIndex,
- DNSServiceErrorType errorCode,
- const char *fullname,
- uint16_t rrtype,
- uint16_t rrclass,
- uint16_t rdlen,
- const void *rdata,
- uint32_t ttl,
- void *context)
-{
- GMDNSUserData *ud = context;
- gchar addr[1000];
- const guchar *rd = (guchar *)rdata;
-
- g_return_if_fail (ud);
- g_return_if_fail (rrtype == kDNSServiceType_A);
-
- g_snprintf (addr, 1000, "%d.%d.%d.%d", rd[0], rd[1], rd[2], rd[3]);
-
- ud->server->address = g_strdup (addr);
-
- g_print ("adding server %s %s", ud->server->mdnsname, ud->server->address);
- g_mutex_lock (ud->mdns->mutex);
- ud->mdns->service_list = g_slist_prepend (ud->mdns->service_list, ud->server);
- g_mutex_unlock (ud->mdns->mutex);
-
- if (ud->mdns->callback) {
- ud->mdns->callback (ud->mdns, G_MDNS_SERVER_ADD, ud->server, ud->mdns->user_data);
- }
- g_mdns_user_data_destroy (ud);
-}
-
-
-static void
-resolve_reply (DNSServiceRef client,
- DNSServiceFlags flags,
- uint32_t ifIndex,
- DNSServiceErrorType errorCode,
- const char *fullname,
- const char *hosttarget,
- uint16_t opaqueport,
- uint16_t txtLen,
- const char *txtRecord,
- void *context)
-{
- GMDNSUserData *ud = context;
- GMDNSUserData *ud2;
- DNSServiceErrorType err;
- gint i;
- union { guint16 s; guchar b[2]; } portu = { opaqueport };
-
- g_return_if_fail (ud);
-
- ud->server->port = ((guint16) portu.b[0]) << 8 | portu.b[1];
- ud->server->hostname = g_strdup (hosttarget);
- ud->server->txtvalues = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_free);
-
- for (i = 0; i < TXTRecordGetCount (txtLen, txtRecord); i++) {
- gchar key[256];
- const void *txt_value;
- gchar *value;
- guint8 vallen;
-
- err = TXTRecordGetItemAtIndex (txtLen, txtRecord, i, 256, key, &vallen, &txt_value);
- if (err != kDNSServiceErr_NoError) {
- g_warning ("error parsing TXT records!");
- }
-
- value = g_malloc (vallen + 1);
- g_strlcpy (value, txt_value, vallen + 1);
- g_hash_table_insert (ud->server->txtvalues, g_strdup (key), value);
- }
-
- ud2 = g_new0 (GMDNSUserData, 1);
-
- err = DNSServiceQueryRecord (&ud2->client, 0,
- kDNSServiceInterfaceIndexAny,
- ud->server->hostname,
- kDNSServiceType_A,
- kDNSServiceClass_IN,
- qr_reply, ud2);
-
- if (err != kDNSServiceErr_NoError) {
- g_warning ("Error from QueryRecord!");
- }
-
- g_mdns_poll_add (ud->mdns, ud2, ud2->client);
- ud2->server = ud->server;
-
- g_mdns_user_data_destroy (ud);
-}
-
-
-static void
-browse_reply (DNSServiceRef client,
- DNSServiceFlags flags,
- uint32_t ifIndex,
- DNSServiceErrorType errorCode,
- const char *replyName,
- const char *replyType,
- const char *replyDomain,
- void *context)
-{
- DNSServiceErrorType err;
- GMDNSServer *server;
- GMDNSUserData *ud = context;
- GMDNSUserData *ud2;
- gboolean remove = (flags & kDNSServiceFlagsAdd) ? FALSE : TRUE;
-
- if (!remove) {
- server = g_new0 (GMDNSServer, 1);
- server->mdnsname = g_strdup (replyName);
- ud2 = g_new0 (GMDNSUserData, 1);
- err = DNSServiceResolve (&ud2->client, 0, kDNSServiceInterfaceIndexAny,
- server->mdnsname,
- "_daap._tcp", "local",
- (DNSServiceResolveReply)resolve_reply, ud2);
-
- if (err != kDNSServiceErr_NoError) {
- g_warning ("Couldn't do ServiceResolv");
- g_free (server->mdnsname);
- g_free (server);
- return;
- }
-
- ud2->server = server;
-
- g_mdns_poll_add (ud->mdns, ud2, ud2->client);
- } else {
- GSList *n, *nxt;
- g_mutex_lock (ud->mdns->mutex);
- for (n = ud->mdns->service_list; n; n = nxt) {
- nxt = g_slist_next (n);
- GMDNSServer *server = n->data;
- if (strcmp (server->mdnsname, replyName) == 0) {
- n = ud->mdns->service_list = g_slist_remove (ud->mdns->service_list, server);
- g_mutex_unlock (ud->mdns->mutex);
- if (ud->mdns->callback)
- ud->mdns->callback (ud->mdns, G_MDNS_SERVER_REMOVE, server, ud->mdns->user_data);
- g_mdns_server_destroy (server);
- g_mutex_lock (ud->mdns->mutex);
- }
- }
- g_mutex_unlock (ud->mdns->mutex);
- }
-
-}
-
-static void
-g_mdns_server_destroy (GMDNSServer *server)
-{
- g_return_if_fail (server);
- if (server->hostname)
- g_free (server->hostname);
- if (server->mdnsname)
- g_free (server->mdnsname);
- if (server->address)
- g_free (server->address);
- if (server->txtvalues)
- g_hash_table_destroy (server->txtvalues);
-
- g_free (server);
-}
-
-static gboolean
-g_mdns_source_prepare (GSource *source, gint *timeout_)
-{
- /* No timeout here */
- return FALSE;
-}
-
-static gboolean
-g_mdns_source_check (GSource *source)
-{
- /* Maybe check for errors here? */
- return TRUE;
-}
-
-static gboolean
-g_mdns_source_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data)
-{
- GMDNSUserData *ud = user_data;
- DNSServiceErrorType err;
-
- if ((ud->fd->revents & G_IO_ERR) || (ud->fd->revents & G_IO_HUP)) {
- return FALSE;
- } else if (ud->fd->revents & G_IO_IN) {
- err = DNSServiceProcessResult (ud->client);
- if (err != kDNSServiceErr_NoError) {
- g_warning ("DNSServiceProcessResult returned error");
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static GSourceFuncs g_mdns_poll_funcs = {
- g_mdns_source_prepare,
- g_mdns_source_check,
- g_mdns_source_dispatch,
- NULL
-};
-
-static void
-g_mdns_user_data_destroy (GMDNSUserData *ud)
-{
- g_return_if_fail (ud);
-
- g_source_remove_poll (ud->source, ud->fd);
- g_free (ud->fd);
- g_source_destroy (ud->source);
- DNSServiceRefDeallocate (ud->client);
- g_free (ud);
-}
-
-static gboolean
-g_mdns_poll_add (GMDNS *mdns, GMDNSUserData *ud, DNSServiceRef client)
-{
- ud->fd = g_new0 (GPollFD, 1);
- ud->fd->fd = DNSServiceRefSockFD (client);
- ud->client = client;
- ud->mdns = mdns;
-
- if (ud->fd->fd == -1) {
- g_free (ud->fd);
- g_free (ud);
- return FALSE;
- }
-
- ud->fd->events = G_IO_IN | G_IO_HUP | G_IO_ERR;
-
- ud->source = g_source_new (&g_mdns_poll_funcs, sizeof (GSource));
- g_source_set_callback (ud->source,
- (GSourceFunc) g_mdns_source_dispatch,
- ud, NULL);
- g_source_add_poll (ud->source, ud->fd);
- g_source_attach (ud->source, NULL);
-
- return TRUE;
-}
-
-/**
- * Browse for a service. The callback will be called
- * when it's fully resloved and queried
- */
-static gboolean
-g_mdns_browse (GMDNS *mdns,
- gchar *service,
- GMDNSFunc callback,
- gpointer user_data)
-{
- DNSServiceErrorType err;
- DNSServiceRef client;
- GMDNSUserData *ud;
-
- g_return_val_if_fail (!mdns->browse_ud, FALSE);
-
- ud = g_new0 (GMDNSUserData, 1);
-
- err = DNSServiceBrowse (&client, 0, kDNSServiceInterfaceIndexAny,
- service, 0, browse_reply, ud);
-
- if (err != kDNSServiceErr_NoError) {
- g_warning ("Couldn't setup mDNS poller, error = %d",err);
- return FALSE;
- }
-
- g_mdns_poll_add (mdns, ud, client);
-
- mdns->callback = callback;
- mdns->user_data = user_data;
- mdns->browse_ud = ud;
-
- return TRUE;
-}
-
-/**
- * Remove updates for browsing. Make sure to
- * call this before you initialize a new browsing
- */
-static gboolean
-g_mdns_stop_browsing (GMDNS *mdns)
-{
- g_return_val_if_fail (mdns, FALSE);
-
- g_mdns_user_data_destroy (mdns->browse_ud);
- mdns->callback = NULL;
- mdns->user_data = NULL;
-
- return TRUE;
-}
-
-/**
- * Return the full list of services
- * the list is threadsafe but not the entries
- * so it might be removed while you using it.
- */
-GSList *
-daap_mdns_get_server_list ()
-{
- GSList *ret=NULL, *n;
- daap_mdns_server_t *server;
-
- g_mutex_lock (g_mdns->mutex);
- for (n = g_mdns->service_list; n; n = g_slist_next (n)) {
- GMDNSServer *s = n->data;
- server = g_new0 (daap_mdns_server_t, 1);
- server->mdns_hostname = s->mdnsname;
- server->server_name = s->hostname;
- server->port = s->port;
- server->address = s->address;
- ret = g_slist_append (ret, server);
- }
- g_mutex_unlock (g_mdns->mutex);
-
- return ret;
-}
-
-/**
- * Free resources held by GMDNS
- */
-void
-daap_mdns_destroy ()
-{
- GSList *n;
- g_return_if_fail (g_mdns);
-
- g_mdns_stop_browsing (g_mdns);
-
- g_mutex_lock (g_mdns->mutex);
- for (n = g_mdns->service_list; n; n = g_slist_next (n)) {
- g_mdns_server_destroy (n->data);
- }
- g_mutex_unlock (g_mdns->mutex);
- g_mutex_free (g_mdns->mutex);
-
- g_free (g_mdns);
-}
-
-gboolean
-daap_mdns_initialize ()
-{
- g_mdns = g_new0 (GMDNS, 1);
- g_mdns->mutex = g_mutex_new ();
- return g_mdns_browse (g_mdns, "_daap._tcp", NULL, NULL);
-}
-#endif
diff --git a/src/daap/xmms2-daap/daap_mdns_dummy.c b/src/daap/xmms2-daap/daap_mdns_dummy.c
deleted file mode 100644
index b321259..0000000
--- a/src/daap/xmms2-daap/daap_mdns_dummy.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/** XMMS2 transform for accessing DAAP music shares.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-#ifdef AVAHI_MDNS_DUMMY
-#include <glib.h>
-
-#include "daap_mdns_browse.h"
-
-gboolean
-daap_mdns_initialize ()
-{
- return FALSE;
-}
-
-GSList *
-daap_mdns_get_server_list ()
-{
- return NULL;
-}
-
-void
-daap_mdns_destroy ()
-{
-}
-#endif
diff --git a/src/daap/xmms2-daap/daap_util.c b/src/daap/xmms2-daap/daap_util.c
deleted file mode 100644
index 4c1b66b..0000000
--- a/src/daap/xmms2-daap/daap_util.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/** @file daap_util.c
- * Miscellaneous utility functions.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#include "daap_util.h"
-
-void
-write_buffer_to_channel (GIOChannel *chan, gchar *buf, gint bufsize)
-{
- guint total_sent_bytes = 0;
- gsize sent_bytes;
- GIOStatus io_stat;
- GError *err = NULL;
-
- do {
- io_stat = g_io_channel_write_chars (chan,
- buf + total_sent_bytes,
- bufsize - total_sent_bytes,
- &sent_bytes,
- &err);
- if (io_stat == G_IO_STATUS_ERROR) {
- if (NULL != err) {
- g_print ("Error writing to channel: %s\n", err->message);
- }
- break;
- }
-
- bufsize -= sent_bytes;
- total_sent_bytes += sent_bytes;
- } while (bufsize > 0);
-
- g_io_channel_flush (chan, &err);
- if (NULL != err) {
- g_print ("warning: error flushing channel: %s\n", err->message);
- }
-}
-
-gint
-read_buffer_from_channel (GIOChannel *chan, gchar *buf, gint bufsize)
-{
- guint n_total_bytes_read = 0;
- gsize read_bytes;
- GIOStatus io_stat;
- GError *err = NULL;
-
- do {
- io_stat = g_io_channel_read_chars (chan,
- buf + n_total_bytes_read,
- bufsize - n_total_bytes_read,
- &read_bytes,
- &err);
- if (io_stat == G_IO_STATUS_ERROR) {
- g_print ("warning: error reading from channel: %s\n", err->message);
- }
- n_total_bytes_read += read_bytes;
-
- if (io_stat == G_IO_STATUS_EOF) {
- break;
- }
- } while (bufsize > n_total_bytes_read);
-
- return n_total_bytes_read;
-}
-
diff --git a/src/daap/xmms2-daap/daap_util.h b/src/daap/xmms2-daap/daap_util.h
deleted file mode 100644
index f81b412..0000000
--- a/src/daap/xmms2-daap/daap_util.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/** @file daap_util.h
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-#ifndef DAAP_UTIL_H
-#define DAAP_UTIL_H
-
-gint
-read_buffer_from_channel (GIOChannel *chan, gchar *buf, gint bufsize);
-
-void
-write_buffer_to_channel (GIOChannel *chan, gchar *buf, gint bufsize);
-
-#endif
diff --git a/src/daap/xmms2-daap/daap_xform.c b/src/daap/xmms2-daap/daap_xform.c
deleted file mode 100644
index 930d405..0000000
--- a/src/daap/xmms2-daap/daap_xform.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/** @file daap_xform.c
- * XMMS2 transform for accessing DAAP music shares.
- *
- * Copyright (C) 2006-2007 XMMS2 Team
- *
- * 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.
- */
-
-/* XXX as of the current implementation, there is no method of logging out
- * of the servers.
- */
-
-#include "xmms/xmms_xformplugin.h"
-#include "xmms/xmms_log.h"
-
-#include "daap_cmd.h"
-#include "daap_util.h"
-#include "daap_mdns_browse.h"
-
-#include <stdlib.h>
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#define DEFAULT_DAAP_PORT 3689
-
-/*
- * Type definitions
- */
-
-typedef struct {
- gchar *host;
- guint port;
-
- GIOChannel *channel;
-
- xmms_error_t status;
-} xmms_daap_data_t;
-
-typedef struct {
- gboolean logged_in;
-
- guint session_id;
- guint revision_id;
- guint request_id;
-} xmms_daap_login_data_t;
-
-static GHashTable *login_sessions = NULL;
-
-/*
- * Function prototypes
- */
-
-static gboolean
-xmms_daap_plugin_setup (xmms_xform_plugin_t *xform_plugin);
-static gboolean
-xmms_daap_init (xmms_xform_t *xform);
-static void
-xmms_daap_destroy (xmms_xform_t *xform);
-static gint
-xmms_daap_read (xmms_xform_t *xform, void *buffer,
- gint len, xmms_error_t *error);
-static gboolean
-xmms_daap_browse (xmms_xform_t *xform, const gchar *url, xmms_error_t *error);
-
-/*
- * Plugin header
- */
-XMMS_XFORM_PLUGIN ("daap",
- "DAAP access plugin",
- "SoC",
- "Accesses iTunes (DAAP) music shares",
- xmms_daap_plugin_setup);
-
-
-/**
- * Extract hostname, port and command from an url.
- * daap://hostname:port/command
- */
-static gboolean
-get_data_from_url (const gchar *url, gchar **host, guint *port, gchar **cmd, xmms_error_t *err)
-{
- const gchar *port_ptr, *cmd_ptr, *end_ptr, *stripped;
-
- stripped = url + sizeof (gchar) * strlen ("daap://");
-
- end_ptr = stripped + sizeof (gchar) * strlen (stripped);
-
- if (stripped == end_ptr) {
- xmms_error_set (err, XMMS_ERROR_INVAL, "Empty URL");
- return FALSE;
- }
-
- port_ptr = strstr (stripped, ":");
- if (port && port_ptr && (port_ptr + 1) != end_ptr) {
- *port = strtol (port_ptr + 1, (gchar **) NULL, 10);
- if (*port == 0) {
- *port = DEFAULT_DAAP_PORT;
- }
- } else if (port) {
- *port = DEFAULT_DAAP_PORT;
- }
-
- cmd_ptr = strstr (stripped, "/");
- if (cmd && cmd_ptr && (cmd_ptr + 1) != end_ptr) {
- *cmd = g_strdup (cmd_ptr);
- } else if (cmd) {
- /* cmd wanted but not found */
- xmms_error_set (err, XMMS_ERROR_INVAL, "No file requested");
- } else if (!cmd && cmd_ptr && (cmd_ptr + 1) != end_ptr) {
- /* cmd not wanted but found */
- xmms_error_set (err, XMMS_ERROR_NOENT, "No such directory");
- return FALSE;
- }
-
- if (port_ptr) {
- *host = g_strndup (stripped, port_ptr - stripped);
- } else if (cmd_ptr) {
- *host = g_strndup (stripped, cmd_ptr - stripped);
- } else {
- *host = g_strdup (stripped);
- }
-
- return TRUE;
-}
-
-
-static gboolean
-xmms_daap_plugin_setup (xmms_xform_plugin_t *xform_plugin)
-{
- xmms_xform_methods_t methods;
-
- XMMS_XFORM_METHODS_INIT (methods);
- methods.init = xmms_daap_init;
- methods.destroy = xmms_daap_destroy;
- methods.read = xmms_daap_read;
- methods.browse = xmms_daap_browse;
-
- xmms_xform_plugin_methods_set (xform_plugin, &methods);
-
- xmms_xform_plugin_indata_add (xform_plugin,
- XMMS_STREAM_TYPE_MIMETYPE,
- "application/x-url",
- XMMS_STREAM_TYPE_URL,
- "daap://*",
- XMMS_STREAM_TYPE_END);
-
- daap_mdns_initialize ();
-
- if (!login_sessions) {
- login_sessions = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- return TRUE;
-}
-
-
-/**
- * Add a song to the browsing list.
- */
-static void
-daap_add_song_to_list (xmms_xform_t *xform, cc_item_record_t *song)
-{
- gchar *songurl;
-
- songurl = g_strdup_printf ("%u.%s", song->dbid, song->song_format);
- xmms_xform_browse_add_entry (xform, songurl, 0);
- g_free (songurl);
-
- if (song->iname) {
- xmms_xform_browse_add_entry_property_str (xform, "title",
- song->iname);
- }
-
- if (song->song_data_artist) {
- xmms_xform_browse_add_entry_property_str (xform, "artist",
- song->song_data_artist);
- }
-
- if (song->song_data_album) {
- xmms_xform_browse_add_entry_property_str (xform, "album",
- song->song_data_album);
- }
-
- xmms_xform_browse_add_entry_property_int (xform, "tracknr",
- song->song_track_no);
-}
-
-
-/**
- * Scan a daap server for songs.
- */
-static gboolean
-daap_get_urls_from_server (xmms_xform_t *xform, gchar *host, guint port,
- xmms_error_t *err)
-{
- GSList *dbid_list = NULL;
- GSList *song_list = NULL, *song_el;
- cc_item_record_t *db_data;
- xmms_daap_login_data_t *login_data;
- gchar *hash;
-
- hash = g_strdup_printf ("%s:%u", host, port);
-
- login_data = g_hash_table_lookup (login_sessions, hash);
-
- if (!login_data) {
- login_data = g_new0 (xmms_daap_login_data_t, 1);
-
- login_data->session_id = daap_command_login (host, port, 0, err);
- if (xmms_error_iserror (err)) {
- return FALSE;
- }
-
- login_data->revision_id = daap_command_update (host, port,
- login_data->session_id,
- 0);
-
- login_data->request_id = 1;
- login_data->logged_in = TRUE;
-
- g_hash_table_insert (login_sessions, hash, login_data);
- } else {
- login_data->revision_id = daap_command_update (host, port,
- login_data->session_id,
- 0);
- }
-
- dbid_list = daap_command_db_list (host, port, login_data->session_id,
- login_data->revision_id, 0);
- if (!dbid_list) {
- return FALSE;
- }
-
- /* XXX i've never seen more than one db per server out in the wild,
- * let's hope that never changes *wink*
- * just use the first db in the list */
- db_data = (cc_item_record_t *) dbid_list->data;
- song_list = daap_command_song_list (host, port, login_data->session_id,
- login_data->revision_id,
- 0, db_data->dbid);
-
- g_slist_foreach (dbid_list, (GFunc) cc_item_record_free, NULL);
- g_slist_free (dbid_list);
-
- if (!song_list) {
- return FALSE;
- }
-
- for (song_el = song_list; song_el; song_el = g_slist_next (song_el)) {
- daap_add_song_to_list (xform, song_el->data);
- }
-
- g_slist_foreach (song_list, (GFunc) cc_item_record_free, NULL);
- g_slist_free (song_list);
-
- return TRUE;
-}
-
-
-/*
- * Member functions
- */
-
-static gboolean
-xmms_daap_init (xmms_xform_t *xform)
-{
- gint dbid;
- GSList *dbid_list = NULL;
- xmms_daap_data_t *data;
- xmms_daap_login_data_t *login_data;
- xmms_error_t err;
- const gchar *url;
- const gchar *metakey;
- gchar *command, *hash;
- guint filesize;
-
- g_return_val_if_fail (xform, FALSE);
-
- url = xmms_xform_indata_get_str (xform, XMMS_STREAM_TYPE_URL);
-
- g_return_val_if_fail (url, FALSE);
-
- data = g_new0 (xmms_daap_data_t, 1);
-
- xmms_error_reset (&err);
-
- if (!get_data_from_url (url, &(data->host), &(data->port), &command, &err)) {
- return FALSE;
- }
-
- hash = g_strdup_printf ("%s:%u", data->host, data->port);
-
- login_data = g_hash_table_lookup (login_sessions, hash);
- if (!login_data) {
- XMMS_DBG ("creating login data for %s", hash);
- login_data = g_new0 (xmms_daap_login_data_t, 1);
-
- login_data->request_id = 1;
- login_data->logged_in = TRUE;
-
- login_data->session_id = daap_command_login (data->host, data->port,
- login_data->request_id,
- &err);
- if (xmms_error_iserror (&err)) {
- return FALSE;
- }
-
- g_hash_table_insert (login_sessions, hash, login_data);
- }
-
- login_data->revision_id = daap_command_update (data->host, data->port,
- login_data->session_id,
- login_data->request_id);
- dbid_list = daap_command_db_list (data->host, data->port,
- login_data->session_id,
- login_data->revision_id,
- login_data->request_id);
- if (!dbid_list) {
- return FALSE;
- }
-
- /* XXX: see XXX in the browse function above */
- dbid = ((cc_item_record_t *) dbid_list->data)->dbid;
- /* want to request a stream, but don't read the data yet */
- data->channel = daap_command_init_stream (data->host, data->port,
- login_data->session_id,
- login_data->revision_id,
- login_data->request_id, dbid,
- command, &filesize);
- if (! data->channel) {
- return FALSE;
- }
- login_data->request_id++;
-
- metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_SIZE;
- xmms_xform_metadata_set_int (xform, metakey, filesize);
-
- xmms_xform_private_data_set (xform, data);
-
- xmms_xform_outdata_type_add (xform,
- XMMS_STREAM_TYPE_MIMETYPE,
- "application/octet-stream",
- XMMS_STREAM_TYPE_END);
-
- g_slist_foreach (dbid_list, (GFunc) cc_item_record_free, NULL);
- g_slist_free (dbid_list);
- g_free (command);
-
- return TRUE;
-}
-
-static void
-xmms_daap_destroy (xmms_xform_t *xform)
-{
- xmms_daap_data_t *data;
-
- data = xmms_xform_private_data_get (xform);
-
- g_io_channel_shutdown (data->channel, TRUE, NULL);
- g_io_channel_unref (data->channel);
-
- g_free (data->host);
- g_free (data);
-}
-
-static gint
-xmms_daap_read (xmms_xform_t *xform, void *buffer, gint len, xmms_error_t *error)
-{
- xmms_daap_data_t *data;
- gsize read_bytes = 0;
- GIOStatus status;
-
- data = xmms_xform_private_data_get (xform);
-
- /* request is performed, header is stripped. now read the data. */
- while (read_bytes == 0) {
- status = g_io_channel_read_chars (data->channel, buffer, len,
- &read_bytes, NULL);
- if (status == G_IO_STATUS_EOF || status == G_IO_STATUS_ERROR) {
- break;
- }
- }
-
- return read_bytes;
-}
-
-
-static gboolean
-xmms_daap_browse (xmms_xform_t *xform, const gchar *url, xmms_error_t *error)
-{
- gboolean ret = FALSE;
-
- if (g_strcasecmp (url, "daap://") == 0) {
-
- GSList *sl = daap_mdns_get_server_list ();
-
- for (; sl; sl = g_slist_next (sl)) {
- daap_mdns_server_t *mdns_serv;
- gchar *str;
-
- mdns_serv = sl->data;
-
- str = g_strdup_printf ("%s:%d", mdns_serv->address,
- mdns_serv->port);
- xmms_xform_browse_add_entry (xform, str, XMMS_XFORM_BROWSE_FLAG_DIR);
- g_free (str);
-
- xmms_xform_browse_add_entry_property_str (xform, "servername",
- mdns_serv->server_name);
-
- xmms_xform_browse_add_entry_property_str (xform, "ip",
- mdns_serv->address);
-
- xmms_xform_browse_add_entry_property_str (xform, "name",
- mdns_serv->mdns_hostname);
-
- xmms_xform_browse_add_entry_property_int (xform, "port",
- mdns_serv->port);
-
- /* TODO implement the machinery to allow for this */
- // val = xmms_object_cmd_value_int_new (mdns_serv->need_auth);
- // xmms_xform_browse_add_entry_property (xform, "passworded", val);
- // val = xmms_object_cmd_value_int_new (mdns_serv->version);
- // xmms_xform_browse_add_entry_property (xform, "version", val);
- }
-
- ret = TRUE;
-
- g_slist_free (sl);
- } else {
- gchar *host;
- guint port;
-
- if (get_data_from_url (url, &host, &port, NULL, error)) {
- ret = daap_get_urls_from_server (xform, host, port, error);
- g_free (host);
- }
- }
-
- return ret;
-}
diff --git a/src/daap/xmms2-daap/wscript b/src/daap/xmms2-daap/wscript
deleted file mode 100644
index 4065c39..0000000
--- a/src/daap/xmms2-daap/wscript
+++ /dev/null
@@ -1,36 +0,0 @@
-from waftools.plugin import plugin
-from Params import g_platform
-
-def plugin_configure(conf):
- # Set the default fallthrough, if no "intelligent" backend is found.
- conf.env['XMMS_DAAP_BACKEND'] = 'dummy'
-
- # First look for Avahi mdns support
- if (conf.check_pkg("avahi-glib", destvar='avahiglib') and
- conf.check_pkg("avahi-client", destvar='avahiclient')):
- # Avahi found
- conf.env['XMMS_DAAP_BACKEND'] = 'avahi'
- elif conf.check_header('dns_sd.h'):
- # We might have dnssd support. If we're not on OSX, check for the
- # presence of the lib.
- if g_platform == 'darwin':
- conf.env['XMMS_DAAP_BACKEND'] = 'dnssd'
- elif conf.check_library2('dns_sd', uselib='dnssd', mandatory=0):
- conf.env['XMMS_DAAP_BACKEND'] = 'dnssd'
- return True
-
-def plugin_build(bld, obj):
- daap_backend = bld.env_of_name('default')['XMMS_DAAP_BACKEND']
- obj.source.append("daap_mdns_%s.c" % daap_backend)
- if daap_backend == 'avahi':
- obj.uselib += ' avahiglib avahiclient'
- elif daap_backend == 'dnssd':
- obj.uselib += ' dnssd'
- if g_platform == 'win32':
- obj.uselib += ' socket'
-
-configure, build = plugin('daap', configure=plugin_configure,
- extra_libs=['curl'], build=plugin_build,
- source="""daap_xform.c daap_cmd.c daap_conn.c
- daap_util.c daap_md5.c cc_handlers.c
- """.split())
diff --git a/src/dockalbumart/Makefile b/src/dockalbumart/Makefile
deleted file mode 100644
index d116494..0000000
--- a/src/dockalbumart/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-PLUGIN = dockalbumart${PLUGIN_SUFFIX}
-
-SRCS = dockalbumart.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/dockalbumart/audacious_player.xpm b/src/dockalbumart/audacious_player.xpm
deleted file mode 100644
index 54dd171..0000000
--- a/src/dockalbumart/audacious_player.xpm
+++ /dev/null
@@ -1,176 +0,0 @@
-/* XPM */
-static char * audacious_player_xpm[] = {
-"48 48 125 2",
-" c None",
-". c #000000",
-"+ c #090909",
-"@ c #313131",
-"# c #505050",
-"$ c #5A5A5A",
-"% c #4F4F4F",
-"& c #0D0D0D",
-"* c #5C5C5C",
-"= c #A8A8A8",
-"- c #D6D6D6",
-"; c #D9D9D9",
-"> c #D5D5D5",
-", c #A5A5A5",
-"' c #595959",
-") c #0B0B0B",
-"! c #060606",
-"~ c #6A6A6A",
-"{ c #CCCCCC",
-"] c #CBCBCB",
-"^ c #696969",
-"/ c #2B2B2B",
-"( c #BABABA",
-"_ c #B8B8B8",
-": c #2A2A2A",
-"< c #484848",
-"[ c #D4D4D4",
-"} c #D3D3D3",
-"| c #474747",
-"1 c #494949",
-"2 c #D7D7D7",
-"3 c #2D2D2D",
-"4 c #2E2E2E",
-"5 c #080808",
-"6 c #BBBBBB",
-"7 c #C5C5C5",
-"8 c #A3A3A3",
-"9 c #949494",
-"0 c #6E6E6E",
-"a c #4D4D4D",
-"b c #858585",
-"c c #C6C6C6",
-"d c #BEBEBE",
-"e c #6C6C6C",
-"f c #777777",
-"g c #030303",
-"h c #515151",
-"i c #6B6B6B",
-"j c #CDCDCD",
-"k c #A7A7A7",
-"l c #141414",
-"m c #0E0E0E",
-"n c #5E5E5E",
-"o c #9A9A9A",
-"p c #393939",
-"q c #626262",
-"r c #ACACAC",
-"s c #717171",
-"t c #3E3E3E",
-"u c #5F5F5F",
-"v c #040404",
-"w c #BCBCBC",
-"x c #AFAFAF",
-"y c #121212",
-"z c #D8D8D8",
-"A c #333333",
-"B c #8C8C8C",
-"C c #3D3D3D",
-"D c #ABABAB",
-"E c #7B7B7B",
-"F c #373737",
-"G c #111111",
-"H c #606060",
-"I c #3B3B3B",
-"J c #919191",
-"K c #424242",
-"L c #585858",
-"M c #656565",
-"N c #7C7C7C",
-"O c #676767",
-"P c #020202",
-"Q c #6D6D6D",
-"R c #5D5D5D",
-"S c #353535",
-"T c #2C2C2C",
-"U c #1F1F1F",
-"V c #878787",
-"W c #5B5B5B",
-"X c #525252",
-"Y c #272727",
-"Z c #A2A2A2",
-"` c #404040",
-" . c #1A1A1A",
-".. c #303030",
-"+. c #343434",
-"@. c #A9A9A9",
-"#. c #B9B9B9",
-"$. c #666666",
-"%. c #808080",
-"&. c #7E7E7E",
-"*. c #181818",
-"=. c #969696",
-"-. c #212121",
-";. c #1B1B1B",
-">. c #C9C9C9",
-",. c #7F7F7F",
-"'. c #464646",
-"). c #070707",
-"!. c #3F3F3F",
-"~. c #959595",
-"{. c #D0D0D0",
-"]. c #CACACA",
-"^. c #757575",
-"/. c #444444",
-"(. c #636363",
-"_. c #C8C8C8",
-":. c #7D7D7D",
-"<. c #C4C4C4",
-"[. c #0F0F0F",
-"}. c #868686",
-"|. c #848484",
-"1. c #1E1E1E",
-"2. c #C2C2C2",
-"3. c #BFBFBF",
-"4. c #747474",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . + @ # $ $ % @ + . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . & * = - ; ; ; ; ; ; > , ' ) . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . ! ~ { ; ; ; ; ; ; ; ; ; ; ; ; ] ^ ! . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . / ( ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; _ : . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . < [ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; } | . . . . . . . . . . . . . ",
-". . . . . . . . . . . . 1 2 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 2 | . . . . . . . . . . . . ",
-". . . . . . . . . . . 3 [ ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; } 4 . . . . . . . . . . . ",
-". . . . . . . . . . 5 6 ; ; ; ; ; ; ; 7 8 9 0 a | $ b c ; ; ; ; ; ; ; ; d 5 . . . . . . . . . . ",
-". . . . . . . . . . e ; ; ; ; ; ; ; f g . . . . . . . g h 7 ; ; ; ; ; ; ; i . . . . . . . . . . ",
-". . . . . . . . . & j ; ; ; ; ; ; k . . . . . . . . . . . l ( ; ; ; ; ; ; j m . . . . . . . . . ",
-". . . . . . . . . n ; ; ; ; ; ; ; o . . . . . . . . . . . . p ; ; ; ; ; ; ; q . . . . . . . . . ",
-". . . . . . . . . r ; ; ; ; ; ; ; ; s t $ u u # v . . . . . . w ; ; ; ; ; ; x . . . . . . . . . ",
-". . . . . . . . y z ; ; ; ; ; ; ; ; ; ; ; ; ; z A . . . . . . B ; ; ; ; ; ; z y . . . . . . . . ",
-". . . . . . . . C ; ; ; ; ; ; ; ; ; ; - D E F G . . . . . . . H ; ; ; ; ; ; ; I . . . . . . . . ",
-". . . . . . . . $ ; ; ; ; ; ; ; ; ; J y . . . . . . . . . . . K ; ; ; ; ; ; ; L . . . . . . . . ",
-". . . . . . . . M ; ; ; ; ; ; ; ; N . . . . . . . . . . . . . C ; ; ; ; ; ; ; O . . . . . . . . ",
-". . . . . . . . O ; ; ; ; ; ; ; , P . . . . . . . . . . . . . Q ; ; ; ; ; ; ; ^ . . . . . . . . ",
-". . . . . . . . R ; ; ; ; ; ; ; S . . . . . T ( ( U . . . . . V ; ; ; ; ; ; ; W . . . . . . . . ",
-". . . . . . . . K ; ; ; ; ; ; ; / . . . . . X ; 2 Y . . . . . Z ; ; ; ; ; ; ; ` . . . . . . . . ",
-". . . . . . . . .; ; ; ; ; ; ; ... . . . . g p +.. . . . . . @.; ; ; ; ; ; ; .. . . . . . . . ",
-". . . . . . . . . #.; ; ; ; ; ; $.. . . . . . . . . . . . . . %.; ; ; ; ; ; w . . . . . . . . . ",
-". . . . . . . . . Q ; ; ; ; ; ; 6 ! . . . . . . . . . . . . . &.; ; ; ; ; ; s . . . . . . . . . ",
-". . . . . . . . . *.[ ; ; ; ; ; ; =.) . . . . . g -.+ . . . ;.>.; ; ; ; ; [ .. . . . . . . . . ",
-". . . . . . . . . . ,.; ; ; ; ; ; ; ( '.).. !.~.{.; ].^./.(._.; ; ; ; ; ; :.. . . . . . . . . . ",
-". . . . . . . . . . m c ; ; ; ; ; ; ; ; {.<.; ; ; ; ; ; ; ; ; ; ; ; ; ; _.[.. . . . . . . . . . ",
-". . . . . . . . . . . t z ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; z t . . . . . . . . . . . ",
-". . . . . . . . . . . . H ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; n . . . . . . . . . . . . ",
-". . . . . . . . . . . . . q z ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; z u . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . K >.; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; _.` . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . y }.- ; ; ; ; ; ; ; ; ; ; ; ; - |.G . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . 1.f 2.; ; ; ; ; ; ; ; 3.4.;.. . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . -.1 M 4.4.M 1 U . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
diff --git a/src/dockalbumart/dockalbumart.c b/src/dockalbumart/dockalbumart.c
deleted file mode 100644
index 4790eef..0000000
--- a/src/dockalbumart/dockalbumart.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * dockalbumart: An audacious plugin to change the MacOS dock tile to the
- * album art.
- * dockalbumart.c: Plugin implementation
- *
- * Copyright (c) 2007 William Pitcock <nenolod -at- sacredspiral.co.uk>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice is present in all copies.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <glib.h>
-#include <audacious/i18n.h>
-
-#include <Carbon/Carbon.h>
-
-#include <audacious/plugin.h>
-
-#include "audacious_player.xpm"
-
-extern gchar *fileinfo_recursive_get_image(const gchar* path, const gchar* file_name, gint depth);
-
-/* utility functions */
-static void
-dock_set_icon_from_pixbuf(const GdkPixbuf *in)
-{
- GdkPixbuf *pixbuf;
- CGColorSpaceRef colorspace;
- CGDataProviderRef data_provider;
- CGImageRef image;
- gpointer data;
- gint rowstride, pixbuf_width, pixbuf_height;
- gboolean has_alpha;
-
- pixbuf = gdk_pixbuf_scale_simple(in, 128, 128, GDK_INTERP_BILINEAR);
-
- data = gdk_pixbuf_get_pixels(pixbuf);
- pixbuf_width = gdk_pixbuf_get_width(pixbuf);
- pixbuf_height = gdk_pixbuf_get_height(pixbuf);
- rowstride = gdk_pixbuf_get_rowstride(pixbuf);
- has_alpha = gdk_pixbuf_get_has_alpha(pixbuf);
-
- /* create the colourspace for the CGImage. */
- colorspace = CGColorSpaceCreateDeviceRGB();
- data_provider = CGDataProviderCreateWithData(NULL, data, pixbuf_height * rowstride, NULL);
- image = CGImageCreate(pixbuf_width, pixbuf_height, 8,
- has_alpha ? 32 : 24, rowstride, colorspace,
- has_alpha ? kCGImageAlphaLast : 0,
- data_provider, NULL, FALSE,
- kCGRenderingIntentDefault);
-
- /* release the colourspace and data provider, we have what we want. */
- CGDataProviderRelease(data_provider);
- CGColorSpaceRelease(colorspace);
-
- /* set the dock tile images */
- SetApplicationDockTileImage(image);
-
- /* and release */
- CGImageRelease(image);
- g_object_unref(pixbuf);
-}
-
-static void
-pixbuf_find_and_load(Tuple *tuple)
-{
- GdkPixbuf *out;
- gchar *tmp;
- const gchar *file_path, *file_name;
-
- file_name = tuple_get_string(tuple, FIELD_FILE_NAME, NULL);
- file_path = tuple_get_string(tuple, FIELD_FILE_PATH, NULL);
-
- if (file_name != NULL && file_path != NULL)
- {
- tmp = fileinfo_recursive_get_image(file_path, file_name, 0);
- if (tmp)
- {
- GdkPixbuf *new = gdk_pixbuf_new_from_file(tmp, NULL);
- dock_set_icon_from_pixbuf(new);
- g_object_unref(new);
- }
- else
- {
- GdkPixbuf *new = gdk_pixbuf_new_from_xpm_data((const gchar **) audacious_player_xpm);
- dock_set_icon_from_pixbuf(new);
- g_object_unref(new);
- }
- }
-}
-
-/* trigger functions */
-
-static void
-dockart_trigger_func_pb_start_cb(gpointer plentry_p, gpointer unused)
-{
- PlaylistEntry *entry = (PlaylistEntry *) plentry_p;
- Tuple *tuple;
-
- if (entry == NULL)
- return;
-
- tuple = entry->tuple;
-
- if (tuple == NULL)
- return;
-
- pixbuf_find_and_load(tuple);
-}
-
-static void
-dockart_trigger_func_pb_end_cb(gpointer plentry_p, gpointer unused)
-{
- GdkPixbuf *new;
-
- new = gdk_pixbuf_new_from_xpm_data((const gchar **) audacious_player_xpm);
- dock_set_icon_from_pixbuf(new);
- g_object_unref(new);
-}
-
-static void
-dockart_init(void)
-{
- hook_associate("playback begin", dockart_trigger_func_pb_start_cb, NULL);
- hook_associate("playback end", dockart_trigger_func_pb_end_cb, NULL);
-}
-
-static void
-dockart_cleanup(void)
-{
- GdkPixbuf *new;
-
- hook_dissociate("playback begin", dockart_trigger_func_pb_start_cb);
- hook_dissociate("playback end", dockart_trigger_func_pb_end_cb);
-
- /* reset dock tile */
- new = gdk_pixbuf_new_from_xpm_data((const gchar **) audacious_player_xpm);
- dock_set_icon_from_pixbuf(new);
- g_object_unref(new);
-}
-
-GeneralPlugin dockart_gp =
-{
- .description = "Dock Album Art",
- .init = dockart_init,
- .cleanup = dockart_cleanup
-};
-
-GeneralPlugin *dockart_gplist[] = { &dockart_gp, NULL };
-SIMPLE_GENERAL_PLUGIN(dockart, dockart_gplist);
diff --git a/src/echo_plugin/Makefile b/src/echo_plugin/Makefile
index 5218f78..898f42a 100644
--- a/src/echo_plugin/Makefile
+++ b/src/echo_plugin/Makefile
@@ -9,5 +9,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/echo_plugin/echo.c b/src/echo_plugin/echo.c
index 168f657..cf7b3e5 100644
--- a/src/echo_plugin/echo.c
+++ b/src/echo_plugin/echo.c
@@ -4,14 +4,14 @@
#include <string.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include "echo.h"
-static void init(void);
+static gboolean init (void);
static void cleanup(void);
#define MAX_SRATE 50000
@@ -21,19 +21,25 @@ static void cleanup(void);
#define BUFFER_SHORTS (BUFFER_SAMPLES * MAX_CHANNELS)
#define BUFFER_BYTES (BUFFER_SHORTS * BYTES_PS)
+static const gchar * const echo_defaults[] = {
+ "delay", "500",
+ "feedback", "50",
+ "volume", "50",
+ NULL};
+
static gfloat *buffer = NULL;
-gint echo_delay = 500, echo_feedback = 50, echo_volume = 50;
+gint echo_delay, echo_feedback, echo_volume;
static int w_ofs;
-static void init(void)
+static gboolean init (void)
{
- mcs_handle_t *cfg;
+ aud_config_set_defaults ("echo_plugin", echo_defaults);
+
+ echo_delay = aud_get_int ("echo_plugin", "delay");
+ echo_feedback = aud_get_int ("echo_plugin", "feedback");
+ echo_volume = aud_get_int ("echo_plugin", "volume");
- cfg = aud_cfg_db_open();
- aud_cfg_db_get_int(cfg, "echo_plugin", "delay", &echo_delay);
- aud_cfg_db_get_int(cfg, "echo_plugin", "feedback", &echo_feedback);
- aud_cfg_db_get_int(cfg, "echo_plugin", "volume", &echo_volume);
- aud_cfg_db_close(cfg);
+ return TRUE;
}
static void cleanup(void)
@@ -112,9 +118,9 @@ static void echo_finish(gfloat **d, gint *samples)
echo_process(d, samples);
}
-EffectPlugin echo_ep =
-{
- .description = "Echo Plugin", /* Description */
+AUD_EFFECT_PLUGIN
+(
+ .name = "Echo",
.init = init,
.cleanup = cleanup,
.about = echo_about,
@@ -125,8 +131,4 @@ EffectPlugin echo_ep =
.finish = echo_finish,
.decoder_to_output_time = echo_decoder_to_output_time,
.output_to_decoder_time = echo_output_to_decoder_time
-};
-
-EffectPlugin *echo_eplist[] = { &echo_ep, NULL };
-
-SIMPLE_EFFECT_PLUGIN(echo, echo_eplist);
+)
diff --git a/src/echo_plugin/gui.c b/src/echo_plugin/gui.c
index 6c0a873..5396de9 100644
--- a/src/echo_plugin/gui.c
+++ b/src/echo_plugin/gui.c
@@ -2,7 +2,8 @@
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <audacious/i18n.h>
#include <libaudgui/libaudgui.h>
@@ -16,7 +17,7 @@ N_("Echo Plugin\n"
"Surround echo by Carl van Schaik 1999");
static GtkWidget *conf_dialog = NULL;
-static GtkObject *echo_delay_adj, *echo_feedback_adj, *echo_volume_adj;
+static GtkAdjustment * echo_delay_adj, * echo_feedback_adj, * echo_volume_adj;
void echo_about (void)
{
@@ -28,16 +29,13 @@ void echo_about (void)
static void apply_changes(void)
{
- mcs_handle_t *cfg;
- echo_delay = GTK_ADJUSTMENT(echo_delay_adj)->value;
- echo_feedback = GTK_ADJUSTMENT(echo_feedback_adj)->value;
- echo_volume = GTK_ADJUSTMENT(echo_volume_adj)->value;
-
- cfg = aud_cfg_db_open();
- aud_cfg_db_set_int(cfg, "echo_plugin", "delay", echo_delay);
- aud_cfg_db_set_int(cfg, "echo_plugin", "feedback", echo_feedback);
- aud_cfg_db_set_int(cfg, "echo_plugin", "volume", echo_volume);
- aud_cfg_db_close(cfg);
+ echo_delay = gtk_adjustment_get_value (echo_delay_adj);
+ echo_feedback = gtk_adjustment_get_value (echo_feedback_adj);
+ echo_volume = gtk_adjustment_get_value (echo_volume_adj);
+
+ aud_set_int ("echo_plugin", "delay", echo_delay);
+ aud_set_int ("echo_plugin", "feedback", echo_feedback);
+ aud_set_int ("echo_plugin", "volume", echo_volume);
}
static void conf_ok_cb(GtkButton * button, gpointer data)
@@ -64,19 +62,22 @@ void echo_configure(void)
return;
conf_dialog = gtk_dialog_new();
- gtk_signal_connect(GTK_OBJECT(conf_dialog), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed), &conf_dialog);
+ g_signal_connect (conf_dialog, "destroy", (GCallback) gtk_widget_destroyed,
+ & conf_dialog);
gtk_window_set_title(GTK_WINDOW(conf_dialog), _("Configure Echo"));
- echo_delay_adj = gtk_adjustment_new(echo_delay, 0, MAX_DELAY + 100, 10, 100, 100);
- echo_feedback_adj = gtk_adjustment_new(echo_feedback, 0, 100 + 10, 2, 10, 10);
- echo_volume_adj = gtk_adjustment_new(echo_volume, 0, 100 + 10, 2, 10, 10);
+ echo_delay_adj = (GtkAdjustment *) gtk_adjustment_new (echo_delay, 0,
+ MAX_DELAY + 100, 10, 100, 100);
+ echo_feedback_adj = (GtkAdjustment *) gtk_adjustment_new (echo_feedback, 0,
+ 100 + 10, 2, 10, 10);
+ echo_volume_adj = (GtkAdjustment *) gtk_adjustment_new (echo_volume, 0, 100
+ + 10, 2, 10, 10);
table = gtk_table_new(2, 3, FALSE);
gtk_table_set_col_spacings(GTK_TABLE(table), 5);
gtk_container_set_border_width(GTK_CONTAINER(table), 5);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(conf_dialog)->vbox), table,
- TRUE, TRUE, 5);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *)
+ conf_dialog), table, TRUE, TRUE, 5);
gtk_widget_show(table);
label = gtk_label_new(_("Delay: (ms)"));
@@ -95,50 +96,42 @@ void echo_configure(void)
gtk_widget_show(label);
hscale = gtk_hscale_new(GTK_ADJUSTMENT(echo_delay_adj));
- gtk_widget_set_usize(hscale, 400, 35);
gtk_scale_set_digits(GTK_SCALE(hscale), 0);
gtk_table_attach_defaults(GTK_TABLE(table), hscale, 1, 2, 0, 1);
gtk_widget_show(hscale);
hscale = gtk_hscale_new(GTK_ADJUSTMENT(echo_feedback_adj));
- gtk_widget_set_usize(hscale, 400, 35);
gtk_scale_set_digits(GTK_SCALE(hscale), 0);
gtk_table_attach_defaults(GTK_TABLE(table), hscale, 1, 2, 1, 2);
gtk_widget_show(hscale);
hscale = gtk_hscale_new(GTK_ADJUSTMENT(echo_volume_adj));
- gtk_widget_set_usize(hscale, 400, 35);
gtk_scale_set_digits(GTK_SCALE(hscale), 0);
gtk_table_attach_defaults(GTK_TABLE(table), hscale, 1, 2, 2, 3);
gtk_widget_show(hscale);
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX((GTK_DIALOG(conf_dialog)->action_area)),
- bbox, TRUE, TRUE, 0);
-
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_action_area ((GtkDialog *)
+ conf_dialog), bbox, TRUE, TRUE, 0);
button = gtk_button_new_with_label(_("Ok"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_ok_cb), NULL);
+ g_signal_connect (button, "clicked", (GCallback) conf_ok_cb, NULL);
gtk_widget_grab_default(button);
gtk_widget_show(button);
button = gtk_button_new_with_label(_("Cancel"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_cancel_cb), NULL);
+ g_signal_connect (button, "clicked", (GCallback) conf_cancel_cb, NULL);
gtk_widget_show(button);
button = gtk_button_new_with_label(_("Apply"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_apply_cb), NULL);
+ g_signal_connect (button, "clicked", (GCallback) conf_apply_cb, NULL);
gtk_widget_show(button);
gtk_widget_show(bbox);
diff --git a/src/evdev-plug/Makefile b/src/evdev-plug/Makefile
deleted file mode 100644
index 66ed4ee..0000000
--- a/src/evdev-plug/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-PLUGIN = evdev-plug${PLUGIN_SUFFIX}
-
-SRCS = ed.c \
- ed_bindings_store.c \
- ed_internals.c \
- ed_ui.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/evdev-plug/ed.c b/src/evdev-plug/ed.c
deleted file mode 100644
index a2c2c94..0000000
--- a/src/evdev-plug/ed.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#include "ed.h"
-#include "ed_types.h"
-#include "ed_internals.h"
-#include "ed_actions.h"
-#include "ed_ui.h"
-#include "ed_common.h"
-
-#include <audacious/drct.h>
-#include <audacious/i18n.h>
-#include <libaudcore/hook.h>
-
-GeneralPlugin *evdevplug_gplist[] = { &ed_gp, NULL };
-SIMPLE_GENERAL_PLUGIN(evdev-plug, evdevplug_gplist);
-
-GList *ed_device_listening_list = NULL;
-gboolean plugin_is_active = FALSE;
-
-/* action callbacks */
-void ed_action_pb_play ( gpointer );
-void ed_action_pb_stop ( gpointer );
-void ed_action_pb_pause ( gpointer );
-void ed_action_pb_prev ( gpointer );
-void ed_action_pb_next ( gpointer );
-void ed_action_pb_eject ( gpointer );
-void ed_action_vol_up5 ( gpointer );
-void ed_action_vol_down5 ( gpointer );
-void ed_action_vol_up10 ( gpointer );
-void ed_action_vol_down10 ( gpointer );
-void ed_action_vol_mute ( gpointer );
-void ed_action_win_main ( gpointer );
-void ed_action_win_playlist ( gpointer );
-void ed_action_win_equalizer ( gpointer );
-void ed_action_win_jtf ( gpointer );
-void ed_action_pl_repeat ( gpointer );
-void ed_action_pl_shuffle ( gpointer );
-
-/* map action codes to ed_action_t objects */
-ed_action_t player_actions[] =
-{
- [ED_ACTION_PB_PLAY] = { N_("Playback->Play") , ed_action_pb_play },
- [ED_ACTION_PB_STOP] = { N_("Playback->Stop") , ed_action_pb_stop },
- [ED_ACTION_PB_PAUSE] = { N_("Playback->Pause") , ed_action_pb_pause },
- [ED_ACTION_PB_PREV] = { N_("Playback->Prev") , ed_action_pb_prev },
- [ED_ACTION_PB_NEXT] = { N_("Playback->Next") , ed_action_pb_next },
- [ED_ACTION_PB_EJECT] = { N_("Playback->Eject") , ed_action_pb_eject },
-
- [ED_ACTION_PL_REPEAT] = { N_("Playlist->Repeat") , ed_action_pl_repeat },
- [ED_ACTION_PL_SHUFFLE] = { N_("Playlist->Shuffle") , ed_action_pl_shuffle },
-
- [ED_ACTION_VOL_UP5] = { N_("Volume->Up_5") , ed_action_vol_up5 },
- [ED_ACTION_VOL_DOWN5] = { N_("Volume->Down_5") , ed_action_vol_down5 },
- [ED_ACTION_VOL_UP10] = { N_("Volume->Up_10") , ed_action_vol_up10 },
- [ED_ACTION_VOL_DOWN10] = { N_("Volume->Down_10") , ed_action_vol_down10 },
- [ED_ACTION_VOL_MUTE] = { N_("Volume->Mute") , ed_action_vol_mute },
-
- [ED_ACTION_WIN_MAIN] = { N_("Window->Main") , ed_action_win_main },
- [ED_ACTION_WIN_PLAYLIST] = { N_("Window->Playlist") , ed_action_win_playlist },
- [ED_ACTION_WIN_EQUALIZER] = { N_("Window->Equalizer") , ed_action_win_equalizer },
- [ED_ACTION_WIN_JTF] = { N_("Window->JumpToFile") , ed_action_win_jtf }
-};
-
-
-
-/* ***************** */
-/* plug-in functions */
-
-void
-ed_init ( void )
-{
- g_log_set_handler( NULL , G_LOG_LEVEL_WARNING , g_log_default_handler , NULL );
-
- plugin_is_active = TRUE; /* go! */
-
- /* read event devices and bindings from user
- configuration and start listening for active ones */
- ed_device_start_listening_from_config();
-
- return;
-}
-
-
-void
-ed_cleanup ( void )
-{
- /* shut down all devices being listened */
- ed_device_stop_listening_all( TRUE );
-
- plugin_is_active = FALSE; /* stop! */
-
- return;
-}
-
-
-void
-ed_config ( void )
-{
- ed_ui_config_show();
-}
-
-
-void
-ed_about ( void )
-{
- ed_ui_about_show();
-}
-
-
-
-/* ************** */
-/* player actions */
-
-void
-ed_action_call ( gint code , gpointer param )
-{
- DEBUGMSG( "Calling action; code %i ( %s )\n" , code , player_actions[code].desc );
-
- /* activate callback for requested action */
- player_actions[code].callback( param );
-}
-
-
-void
-ed_action_pb_play ( gpointer param )
-{
- aud_drct_play();
-}
-
-void
-ed_action_pb_stop ( gpointer param )
-{
- aud_drct_stop();
-}
-
-void
-ed_action_pb_pause ( gpointer param )
-{
- if (aud_drct_get_playing() || aud_drct_get_paused())
- aud_drct_pause();
- else
- aud_drct_play();
-}
-
-void
-ed_action_pb_prev ( gpointer param )
-{
- aud_drct_pl_prev();
-}
-
-void
-ed_action_pb_next ( gpointer param )
-{
- aud_drct_pl_next();
-}
-
-void
-ed_action_pb_eject ( gpointer param )
-{
- hook_call ("filebrowser show", GINT_TO_POINTER (TRUE));
-}
-
-void
-ed_action_pl_repeat ( gpointer param )
-{
- aud_drct_pl_repeat_toggle();
-}
-
-void
-ed_action_pl_shuffle ( gpointer param )
-{
- aud_drct_pl_shuffle_toggle();
-}
-
-void
-ed_action_vol_up5 ( gpointer param )
-{
- gint vl, vr;
- aud_drct_get_volume( &vl , &vr );
- aud_drct_set_volume( CLAMP(vl + 5, 0, 100) , CLAMP(vr + 5, 0, 100) );
-}
-
-void
-ed_action_vol_down5 ( gpointer param )
-{
- gint vl, vr;
- aud_drct_get_volume( &vl , &vr );
- aud_drct_set_volume( CLAMP(vl - 5, 0, 100) , CLAMP(vr - 5, 0, 100) );
-}
-
-void
-ed_action_vol_up10 ( gpointer param )
-{
- gint vl, vr;
- aud_drct_get_volume( &vl , &vr );
- aud_drct_set_volume( CLAMP(vl + 10, 0, 100) , CLAMP(vr + 10, 0, 100) );
-}
-
-void
-ed_action_vol_down10 ( gpointer param )
-{
- gint vl, vr;
- aud_drct_get_volume( &vl , &vr );
- aud_drct_set_volume( CLAMP(vl - 10, 0, 100) , CLAMP(vr - 10, 0, 100) );
-}
-
-void
-ed_action_vol_mute ( gpointer param )
-{
- static gint vl = -1;
- static gint vr = -1;
-
- if ( vl == -1 ) /* no previous memory of volume before mute action */
- {
- aud_drct_get_volume( &vl , &vr ); /* memorize volume before mute */
- aud_drct_set_volume( 0 , 0 ); /* mute */
- }
- else /* memorized volume values exist */
- {
- gint vl_now = 0;
- gint vr_now = 0;
-
- aud_drct_get_volume( &vl_now , &vr_now );
- if (( vl_now == 0 ) && ( vr_now == 0 ))
- {
- /* the volume is still muted, restore the old values */
- aud_drct_set_volume( vl , vr );
- vl = -1; vr = -1; /* reset these for next use */
- }
- else
- {
- /* the volume has been raised with other commands, act as if there wasn't a previous memory */
- aud_drct_get_volume( &vl , &vr ); /* memorize volume before mute */
- aud_drct_set_volume( 0 , 0 ); /* mute */
- }
- }
-}
-
-void
-ed_action_win_main ( gpointer param )
-{
- hook_call ("interface toggle visibility", NULL);
-}
-
-void
-ed_action_win_playlist ( gpointer param )
-{
-#if 0
- aud_drct_pl_win_toggle( !aud_drct_pl_win_is_visible () );
-#endif
-}
-
-void
-ed_action_win_equalizer ( gpointer param )
-{
-#if 0
- aud_drct_eq_win_toggle( !aud_drct_eq_win_is_visible () );
-#endif
-}
-
-void
-ed_action_win_jtf ( gpointer param )
-{
- hook_call ("interface show jump to track", NULL);
-}
diff --git a/src/evdev-plug/ed.h b/src/evdev-plug/ed.h
deleted file mode 100644
index 36f4c9c..0000000
--- a/src/evdev-plug/ed.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_H
-#define _I_ED_H 1
-
-#include "ed_common.h"
-#include <glib.h>
-#include <audacious/plugin.h>
-
-void ed_init ( void );
-void ed_cleanup ( void );
-void ed_config ( void );
-void ed_about ( void );
-
-GeneralPlugin ed_gp =
-{
- .description = "EvDev-Plug " ED_VERSION_PLUGIN,
- .init = ed_init,
- .about = ed_about,
- .configure = ed_config,
- .cleanup = ed_cleanup
-};
-
-#endif /* !_I_ED_H */
diff --git a/src/evdev-plug/ed_actions.h b/src/evdev-plug/ed_actions.h
deleted file mode 100644
index f4d3411..0000000
--- a/src/evdev-plug/ed_actions.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_ACTIONS_H
-#define _I_ED_ACTIONS_H 1
-
-#include "ed_common.h"
-#include <glib.h>
-
-/* ed_action_t object structure */
-typedef struct
-{
- const gchar * desc;
- void (*callback)( gpointer );
-}
-ed_action_t;
-
-/* action codes */
-enum
-{
- ED_ACTION_PB_PLAY = 0,
- ED_ACTION_PB_STOP = 1,
- ED_ACTION_PB_PAUSE = 2,
- ED_ACTION_PB_PREV = 3,
- ED_ACTION_PB_NEXT = 4,
- ED_ACTION_PB_EJECT = 5,
-
- ED_ACTION_PL_REPEAT = 10,
- ED_ACTION_PL_SHUFFLE = 11,
-
- ED_ACTION_VOL_UP5 = 20,
- ED_ACTION_VOL_DOWN5 = 21,
- ED_ACTION_VOL_UP10 = 22,
- ED_ACTION_VOL_DOWN10 = 23,
- ED_ACTION_VOL_MUTE = 24,
-
- ED_ACTION_WIN_MAIN = 30,
- ED_ACTION_WIN_PLAYLIST = 31,
- ED_ACTION_WIN_EQUALIZER = 32,
- ED_ACTION_WIN_JTF = 33
-};
-
-void ed_action_call ( gint , gpointer );
-
-#endif /* !_I_ED_ACTIONS_H */
diff --git a/src/evdev-plug/ed_bindings_store.c b/src/evdev-plug/ed_bindings_store.c
deleted file mode 100644
index 7b29127..0000000
--- a/src/evdev-plug/ed_bindings_store.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#include "ed_bindings_store.h"
-#include "ed_common.h"
-#include <stdlib.h>
-
-
-/* currently, the bindings store is implemented as a string-based Hash Table;
- however, a change of implementation would only require to re-write the
- public API defined in this source file;
- the rest of the code in EvDev-Plug doesn't care about the
- implementation at all, and access it in a transparent fashion */
-
-
-gpointer
-ed_bindings_store_new ( void )
-{
- GHashTable *hashtable = g_hash_table_new_full( g_str_hash , g_str_equal , g_free , NULL );
- return hashtable;
-}
-
-
-/* associate a triplet ev_type:ev_code:ev_value
- (identifying an input event) to an action code in our bindings store;
- bindings store should keep its own copy of ed_inputevent_t objects! */
-gint
-ed_bindings_store_insert ( gpointer hashtable_gp ,
- ed_inputevent_t * inputev ,
- gint action_code )
-{
- gchar *input_str;
- input_str = g_strdup_printf( "%i:%i:%i" , inputev->type , inputev->code , inputev->value );
- g_hash_table_insert( (GHashTable*)hashtable_gp , input_str , GINT_TO_POINTER(action_code) );
-
- DEBUGMSG( "storing code %i -> event: %i:%i:%i\n" ,
- action_code , inputev->type, inputev->code, inputev->value );
- return 0;
-}
-
-
-typedef struct
-{
- ed_bindings_store_foreach_func callback;
- gpointer data1;
- gpointer data2;
-}
-hashfunc_foreach_container_t;
-
-static void
-hashfunc_foreach( gpointer key , gpointer value , gpointer container_gp )
-{
- hashfunc_foreach_container_t *container = container_gp;
- ed_inputevent_t inputev;
- gchar **toks;
-
- /* convert key (it's a string in the "type:code:value" form) back to ed_inputevent_t object */
- toks = g_strsplit( (gchar*)key , ":" , 3 );
- inputev.type = atoi( toks[0] );
- inputev.code = atoi( toks[1] );
- inputev.value = atoi( toks[2] );
- g_strfreev( toks );
-
- container->callback( &inputev , GPOINTER_TO_INT(value) , container->data1 , container->data2 );
- return;
-}
-
-void
-ed_bindings_store_foreach ( gpointer hashtable_gp ,
- ed_bindings_store_foreach_func callback ,
- gpointer user_data1 ,
- gpointer user_data2 )
-{
- hashfunc_foreach_container_t *container = g_malloc(sizeof(hashfunc_foreach_container_t));
- container->callback = callback;
- container->data1 = user_data1;
- container->data2 = user_data2;
- g_hash_table_foreach( (GHashTable*)hashtable_gp , hashfunc_foreach , container );
- g_free( container );
-}
-
-
-guint
-ed_bindings_store_size ( gpointer hashtable_gp )
-{
- return g_hash_table_size( (GHashTable*)hashtable_gp );
-}
-
-
-gboolean
-ed_bindings_store_lookup( gpointer hashtable_gp ,
- ed_inputevent_t * inputev ,
- gint * action_code )
-{
- gpointer p;
- gchar *input_str;
-
- input_str = g_strdup_printf( "%i:%i:%i" , inputev->type , inputev->code , inputev->value );
-
- if ( g_hash_table_lookup_extended( (GHashTable*)hashtable_gp , input_str , NULL , &p ) == TRUE )
- {
- *action_code = GPOINTER_TO_INT(p);
- g_free( input_str );
- return TRUE;
- }
- else
- {
- g_free( input_str );
- return FALSE;
- }
-}
-
-
-gint
-ed_bindings_store_delete ( gpointer hashtable_gp )
-{
- if ( hashtable_gp != NULL )
- g_hash_table_destroy( hashtable_gp );
- return 0;
-}
diff --git a/src/evdev-plug/ed_bindings_store.h b/src/evdev-plug/ed_bindings_store.h
deleted file mode 100644
index d911a88..0000000
--- a/src/evdev-plug/ed_bindings_store.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_BINDINGS_STORE_H
-#define _I_ED_BINDINGS_STORE_H 1
-
-#include "ed_types.h"
-#include "ed_common.h"
-#include <glib.h>
-
-typedef void (*ed_bindings_store_foreach_func)( ed_inputevent_t * , gint , gpointer , gpointer );
-
-gpointer ed_bindings_store_new ( void );
-gint ed_bindings_store_insert ( gpointer , ed_inputevent_t * , gint );
-void ed_bindings_store_foreach ( gpointer , ed_bindings_store_foreach_func , gpointer , gpointer );
-guint ed_bindings_store_size ( gpointer );
-gboolean ed_bindings_store_lookup( gpointer , ed_inputevent_t * , gint * );
-gint ed_bindings_store_delete ( gpointer );
-
-#endif /* !_I_ED_BINDINGS_STORE_H */
diff --git a/src/evdev-plug/ed_common.h b/src/evdev-plug/ed_common.h
deleted file mode 100644
index 3266bb1..0000000
--- a/src/evdev-plug/ed_common.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_COMMON_H
-#define _I_ED_COMMON_H 1
-
-#ifdef DEBUG
-#include <stdio.h>
-#define DEBUGMSG(...) { fprintf(stderr, "evdev-plug(%s:%s:%d): ", __FILE__, __FUNCTION__, (int) __LINE__); fprintf(stderr, __VA_ARGS__); }
-#else
-#define DEBUGMSG(...)
-#endif /* DEBUG */
-
-#include "../../config.h"
-
-#define ED_VERSION_PLUGIN "0.2p1"
-#define ED_VERSION_CONFIG "0"
-
-#define PLAYER_LOCALRC_FILE "evdev-plug.conf"
-
-#endif /* !_I_ED_COMMON_H */
diff --git a/src/evdev-plug/ed_internals.c b/src/evdev-plug/ed_internals.c
deleted file mode 100644
index c12555a..0000000
--- a/src/evdev-plug/ed_internals.c
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#include "ed_types.h"
-#include "ed_internals.h"
-#include "ed_actions.h"
-#include "ed_bindings_store.h"
-#include "ed_common.h"
-
-#include <stdint.h>
-#include <stdio.h>
-#include <linux/input.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <regex.h>
-/* for variadic */
-#include <stdarg.h>
-#include <glib.h>
-#include <glib/gstdio.h>
-
-#include <audacious/i18n.h>
-#include <audacious/misc.h>
-
-static gboolean ed_device_giofunc ( GIOChannel * , GIOCondition , gpointer );
-
-static gint ed_util_get_data_from_keyfile( GKeyFile * , gchar * , ... );
-static gpointer ed_util_get_bindings_from_keyfile( GKeyFile * , gchar * );
-
-extern GList *ed_device_listening_list;
-
-
-/* ***************** */
-/* internals */
-
-ed_device_info_t *
-ed_device_info_new ( gchar * device_name , gchar * device_filename ,
- gchar * device_phys , gint device_is_custom )
-{
- ed_device_info_t *info = g_malloc(sizeof(ed_device_info_t));
- info->name = g_strdup(device_name);
- info->filename = g_strdup(device_filename);
- info->phys = g_strdup(device_phys);
- info->is_custom = device_is_custom;
- info->is_active = FALSE;
- info->bindings = NULL;
- info->reg = 0;
- return info;
-}
-
-
-gint
-ed_device_info_delete ( ed_device_info_t * info )
-{
- g_free( info->phys );
- g_free( info->filename );
- g_free( info->name );
- g_free( info );
- return 0;
-}
-
-
-ed_device_t *
-ed_device_new ( gchar * device_name , gchar * device_filename ,
- gchar * device_phys , gint device_is_custom )
-{
- ed_device_t *event_device;
- GIOChannel *iochan;
- gint fd;
-
- fd = g_open( device_filename , O_RDONLY , 0 );
- if ( fd < 0 )
- {
- /* an error occurred */
- g_warning( _("event-device-plugin: unable to open device file %s , skipping this device; check that "
- "the file exists and that you have read permission for it\n") , device_filename );
- return NULL;
- }
-
- iochan = g_io_channel_unix_new( fd );
- if ( iochan == NULL )
- {
- /* an error occurred */
- g_warning( _("event-device-plugin: unable to create a io_channel for device file %s ,"
- "skipping this device\n") , device_filename );
- close( fd );
- return NULL;
- }
- g_io_channel_set_encoding( iochan , NULL , NULL ); /* binary data */
-
- event_device = g_malloc(sizeof(ed_device_t));
- event_device->fd = fd;
- event_device->iochan = iochan;
- event_device->is_listening = FALSE;
- event_device->info = ed_device_info_new(
- device_name , device_filename , device_phys , device_is_custom );
-
- return event_device;
-}
-
-
-gint
-ed_device_delete ( ed_device_t * event_device )
-{
- if ( event_device->is_listening )
- ed_device_stop_listening( event_device );
-
- g_io_channel_shutdown( event_device->iochan , TRUE , NULL );
- g_io_channel_unref( event_device->iochan );
- close( event_device->fd );
-
- ed_device_info_delete( event_device->info );
- g_free( event_device );
-
- return 0;
-}
-
-
-gboolean
-ed_inputevent_check_equality( ed_inputevent_t *iev1 , ed_inputevent_t *iev2 )
-{
- if (( iev1 == NULL ) || ( iev2 == NULL ))
- {
- if (( iev1 == NULL ) && ( iev2 == NULL ))
- return TRUE;
- else
- return FALSE;
- }
-
- if ( ( iev1->code == iev2->code ) &&
- ( iev1->type == iev2->type ) &&
- ( iev1->value == iev2->value ) )
- return TRUE;
- else
- return FALSE;
-}
-
-
-gboolean
-ed_device_info_check_equality( ed_device_info_t *info1 , ed_device_info_t *info2 )
-{
- if (( info1 == NULL ) || ( info2 == NULL ))
- {
- if (( info1 == NULL ) && ( info2 == NULL ))
- return TRUE;
- else
- return FALSE;
- }
-
- if ( ( strcmp(info1->name,info2->name) == 0 ) &&
- ( strcmp(info1->filename,info2->filename) == 0 ) &&
- ( strcmp(info1->phys,info2->phys) == 0 ) &&
- ( info1->is_custom == info2->is_custom ) )
- return TRUE;
- else
- return FALSE;
-}
-
-
-gint
-ed_device_start_listening ( ed_device_t * event_device )
-{
- if ( g_list_find( ed_device_listening_list , event_device ) != NULL )
- {
- DEBUGMSG( "called start listening for device \"%s\" ( %s - %s ) but device listening is already active!\n" ,
- event_device->info->name , event_device->info->filename , event_device->info->phys );
- return -1; /* device listening is already active, do nothing */
- }
- else
- {
- DEBUGMSG( "start listening for device \"%s\" ( %s - %s )\n" ,
- event_device->info->name , event_device->info->filename , event_device->info->phys );
- /* add a watch that checks if there's data to read */
- event_device->iochan_sid = g_io_add_watch( event_device->iochan , G_IO_IN ,
- (GIOFunc)ed_device_giofunc , event_device );
-
- /* add event_device to the list */
- ed_device_listening_list = g_list_append( ed_device_listening_list , event_device );
- event_device->is_listening = TRUE;
- return 0;
- }
-}
-
-
-gint
-ed_device_stop_listening ( ed_device_t * event_device )
-{
- if ( ( g_list_find( ed_device_listening_list , event_device ) != NULL ) &&
- ( event_device->is_listening == TRUE ) )
- {
- DEBUGMSG( "stop listening for device \"%s\" ( %s - %s )\n" ,
- event_device->info->name , event_device->info->filename , event_device->info->phys );
- g_source_remove( event_device->iochan_sid );
- ed_device_listening_list = g_list_remove( ed_device_listening_list , event_device );
- event_device->is_listening = FALSE;
- return 0;
- }
- else
- {
- DEBUGMSG( "called stop listening for device \"%s\" ( %s - %s ) but device listening is not active!\n" ,
- event_device->info->name , event_device->info->filename , event_device->info->phys );
- return -1;
- }
-}
-
-
-gint
-ed_device_stop_listening_from_info ( ed_device_info_t * info )
-{
- GList *list_iter = ed_device_listening_list;
- while ( list_iter != NULL )
- {
- ed_device_t *dev = list_iter->data;
- if ( ed_device_info_check_equality( dev->info , info ) == TRUE )
- {
- ed_device_stop_listening( dev );
- return 0;
- }
- list_iter = g_list_next( list_iter );
- }
- return -1;
-}
-
-
-void
-ed_device_stop_listening_all ( gboolean delete_bindings )
-{
- /* convenience function that stops listening for all
- devices and also deletes bindings if requested */
- GList *list_iter = ed_device_listening_list;
- while ( list_iter != NULL )
- {
- ed_device_t *dev = list_iter->data;
-
- if (( delete_bindings == TRUE ) && ( dev->info->bindings != NULL ))
- ed_bindings_store_delete( dev->info->bindings );
-
- ed_device_delete( dev );
-
- list_iter = g_list_next( list_iter );
- }
-}
-
-
-gboolean
-ed_device_check_listening_from_info ( ed_device_info_t * info )
-{
- /* note: this must not alter the reg parameter of info */
- GList *list_iter = ed_device_listening_list;
- while ( list_iter != NULL )
- {
- ed_device_t *dev = list_iter->data;
- if ( ed_device_info_check_equality( dev->info , info ) == TRUE )
- return TRUE;
- list_iter = g_list_next( list_iter );
- }
- return FALSE;
-}
-
-
-static gboolean
-ed_device_giofunc ( GIOChannel * iochan , GIOCondition cond , gpointer event_device )
-{
- switch ( cond )
- {
- case G_IO_IN:
- {
- gsize rb = 0;
- struct input_event inputev;
-
- if ( g_io_channel_read_chars( iochan , (gchar*)&inputev ,
- sizeof(struct input_event) , &rb , NULL ) == G_IO_STATUS_NORMAL )
- {
- if ( rb == sizeof(struct input_event) )
- {
- gint action_code = -1;
- ed_device_t *dev = event_device;
-
- DEBUGMSG( "event (%d,%d,%d) intercepted for device \"%s\" ( %s - %s )\n" ,
- inputev.type , inputev.code , inputev.value ,
- dev->info->name , dev->info->filename , dev->info->phys );
-
- if ( dev->info->bindings != NULL )
- {
- ed_inputevent_t ev;
- ev.type = inputev.type;
- ev.code = inputev.code;
- ev.value = inputev.value;
-
- /* lookup event type/code/value in the binding tree for this device */
- if ( ed_bindings_store_lookup( dev->info->bindings , &ev , &action_code ) == TRUE )
- {
- /* this has been binded to an action, call the corresponding action */
- DEBUGMSG( "found action code %i for event (%d,%d,%d)\n" ,
- action_code , inputev.type , inputev.code , inputev.value );
- ed_action_call( action_code , NULL );
- }
- }
- }
- }
- break;
- }
- default:
- ;
- }
-
- return TRUE;
-}
-
-
-GList *
-ed_device_get_list_from_system ( void )
-{
- GIOChannel *iochan;
- gchar *buffer;
- gsize buffer_len;
- gint fd = -1;
-
- fd = g_open( "/proc/bus/input/devices" , O_RDONLY , 0 );
- if ( fd < 0 )
- {
- /* an error occurred */
- g_warning( _("event-device-plugin: unable to open /proc/bus/input/devices , automatic "
- "detection of event devices won't work.\n") );
- return NULL;
- }
-
- iochan = g_io_channel_unix_new( fd );
- if ( iochan == NULL )
- {
- /* an error occurred */
- g_warning( _("event-device-plugin: unable to open a io_channel for /proc/bus/input/devices , "
- "automatic detection of event devices won't work.\n") );
- close( fd );
- return NULL;
- }
- g_io_channel_set_encoding( iochan , "UTF-8" , NULL ); /* utf-8 text */
-
- if ( g_io_channel_read_to_end( iochan , &buffer , &buffer_len , NULL ) != G_IO_STATUS_NORMAL )
- {
- /* an error occurred */
- g_warning( _("event-device-plugin: an error occurred while reading /proc/bus/input/devices , "
- "automatic detection of event devices won't work.\n") );
- g_io_channel_shutdown( iochan , TRUE , NULL );
- g_io_channel_unref( iochan );
- close( fd );
- return NULL;
- }
- else
- {
- regex_t preg;
- gint search_offset = 0;
- GList *system_devices_list = NULL;
-
- /* we don't need these anymore */
- g_io_channel_shutdown( iochan , TRUE , NULL );
- g_io_channel_unref( iochan );
- close( fd );
-
- /* parse content of /proc/bus/input/devices */
- regcomp( &preg,
- "I:[^\n]*\nN: Name=\"([^\n]*)\"\nP: Phys=([^\n]*)\n([^\n]+\n)*H: Handlers=[^\n]*(event[0-9]+)[^\n]*\n" ,
- REG_ICASE | REG_EXTENDED );
-
- while ( search_offset > -1 )
- {
- size_t nmatch = 5;
- regmatch_t submatch[5];
-
- if ( regexec( &preg , &buffer[search_offset] , nmatch , submatch , 0 ) == 0 )
- {
- GString *device_name = NULL;
- GString *device_phys = NULL;
- GString *device_file = NULL;
-
- if ( submatch[1].rm_so != -1 ) /* check validity of name sub-expression */
- {
- device_name = g_string_new( "" );
- g_string_append_len( device_name ,
- &buffer[(search_offset + submatch[1].rm_so)] ,
- submatch[1].rm_eo - submatch[1].rm_so );
- }
-
- if ( submatch[2].rm_so != -1 ) /* check validity of physicalport sub-expression */
- {
- device_phys = g_string_new( "" );
- g_string_append_len( device_phys ,
- &buffer[(search_offset + submatch[2].rm_so)] ,
- submatch[2].rm_eo - submatch[2].rm_so );
- }
-
- if ( submatch[4].rm_so != -1 ) /* check validity of filename sub-expression */
- {
- device_file = g_string_new( "" );
- GString *device_test = g_string_new( "" );
- g_string_append_len( device_file ,
- &buffer[(search_offset + submatch[4].rm_so)] ,
- submatch[4].rm_eo - submatch[4].rm_so );
-
- /* let's check if the filename actually exists in /dev */
- g_string_printf( device_test , "/dev/input/%s" , (char*)device_file->str );
- if ( !g_file_test( device_test->str , G_FILE_TEST_EXISTS ) )
- {
- /* it doesn't exist, mark as invalid device by nullifying device_file*/
- g_warning( _("event-device-plugin: device %s not found in /dev/input , skipping.\n") , (char*)device_file );
- g_string_free( device_file , TRUE );
- device_file = NULL;
- }
- else
- {
- /* it does exist, mark as valid device by using the full path in device_file*/
- g_string_assign( device_file , device_test->str );
- }
- g_string_free( device_test , TRUE );
- }
-
- if (( device_name != NULL ) && ( device_phys != NULL ) && ( device_file != NULL ))
- {
- /* add item to the list */
- ed_device_info_t *info = ed_device_info_new(
- device_name->str , device_file->str , device_phys->str , 0 );
- info->reg = 0;
- DEBUGMSG( "device found, name:\"%s\" , file \"%s\" , phys \"%s\"\n" ,
- info->name , info->filename , info->phys );
- system_devices_list = g_list_append( system_devices_list , info );
- }
-
- if ( device_name != NULL )
- g_string_free( device_name , TRUE );
- if ( device_phys != NULL )
- g_string_free( device_phys , TRUE );
- if ( device_file != NULL )
- g_string_free( device_file , TRUE );
-
- search_offset += submatch[0].rm_eo; /* update offset for further search */
- }
- else
- {
- /* no more valid devices found */
- search_offset = -1;
- }
- }
- regfree( &preg );
- return system_devices_list;
- }
-}
-
-
-GList *
-ed_device_get_list_from_config ( void )
-{
- GKeyFile *keyfile = NULL;
- GList *config_devices_list = NULL;
- gboolean is_loaded = FALSE;
- gchar **device_names = NULL;
- gsize device_names_num = 0;
- gchar *config_pathfilename = NULL;
- gchar *config_datadir = NULL;
- gint i = 0;
-
- config_datadir = (gchar*)aud_util_get_localdir();
- config_pathfilename = g_build_filename( config_datadir , PLAYER_LOCALRC_FILE , NULL );
- g_free( config_datadir );
- keyfile = g_key_file_new();
- is_loaded = g_key_file_load_from_file( keyfile , config_pathfilename , G_KEY_FILE_NONE , NULL );
- g_free( config_pathfilename );
-
- if ( is_loaded != TRUE )
- {
- g_warning( _("event-device-plugin: unable to load config file %s , default settings will be used.\n") ,
- PLAYER_LOCALRC_FILE );
- g_key_file_free( keyfile );
- return NULL;
- }
-
- /* remove ___plugin___ group that contains plugin settings */
- g_key_file_remove_group( keyfile , "___plugin___" , NULL );
-
- /* the other groups are devices; check them and run active ones */
- device_names = g_key_file_get_groups( keyfile , &device_names_num );
- while ( device_names[i] != NULL )
- {
- gint device_is_custom = 0;
- gchar *device_file = NULL;
- gchar *device_phys = NULL;
- gboolean device_is_active = FALSE;
- gint result = 0;
-
- result = ed_util_get_data_from_keyfile(
- keyfile , device_names[i] ,
- ED_CONFIG_INFO_FILENAME , &device_file ,
- ED_CONFIG_INFO_PHYS , &device_phys ,
- ED_CONFIG_INFO_ISCUSTOM , &device_is_custom ,
- ED_CONFIG_INFO_ISACTIVE , &device_is_active ,
- ED_CONFIG_INFO_END );
-
- if ( result == 0 )
- {
- /* all information succesfully retrieved from config, create a ed_device_info_t */
- ed_device_info_t *info;
-
- info = ed_device_info_new( device_names[i] , device_file ,
- device_phys , device_is_custom );
-
- /* pick bindings for this device */
- info->bindings = ed_util_get_bindings_from_keyfile( keyfile , device_names[i] );
- info->is_active = device_is_active;
-
- /* add this device to the config list */
- config_devices_list = g_list_append( config_devices_list , info );
- /* free information from config file, info has its own copies */
- g_free( device_file ); g_free( device_phys );
- }
- else
- {
- g_warning( _("event-device-plugin: incomplete information in config file for device \"%s\""
- " , skipping.\n") , device_names[i] );
- }
-
- i++; /* on with next */
- }
-
- g_strfreev( device_names );
- g_key_file_free( keyfile );
- return config_devices_list;
-}
-
-
-void
-ed_device_free_list ( GList * system_devices_list )
-{
- GList *list_iter = system_devices_list;
- while ( list_iter != NULL )
- {
- ed_device_info_delete( (ed_device_info_t*)list_iter->data );
- list_iter = g_list_next( list_iter );
- }
- g_list_free( system_devices_list );
- return;
-}
-
-
-void
-ed_device_start_listening_from_config ( void )
-{
- GKeyFile *keyfile = NULL;
- gboolean is_loaded = FALSE;
- gchar **device_names = NULL;
- gsize device_names_num = 0;
- gchar *config_pathfilename = NULL;
- gchar *config_datadir = NULL;
- GList *system_devices_list = NULL;
- gint i = 0;
-
- config_datadir = (gchar*)aud_util_get_localdir();
- config_pathfilename = g_build_filename( config_datadir , PLAYER_LOCALRC_FILE , NULL );
- g_free( config_datadir );
- keyfile = g_key_file_new();
- is_loaded = g_key_file_load_from_file( keyfile , config_pathfilename , G_KEY_FILE_NONE , NULL );
- g_free( config_pathfilename );
-
- if ( is_loaded != TRUE )
- {
- g_warning( _("event-device-plugin: unable to load config file %s , default settings will be used.\n") ,
- PLAYER_LOCALRC_FILE );
- g_key_file_free( keyfile );
- return;
- }
-
- system_devices_list = ed_device_get_list_from_system();
-
- /* remove ___plugin___ group that contains plugin settings */
- g_key_file_remove_group( keyfile , "___plugin___" , NULL );
-
- /* check available devices and run active ones */
- device_names = g_key_file_get_groups( keyfile , &device_names_num );
- while ( device_names[i] != NULL )
- {
- GError *gerr = NULL;
- gboolean is_active;
-
- is_active = g_key_file_get_boolean( keyfile , device_names[i] , "is_active" , &gerr );
- if ( gerr != NULL )
- {
- g_warning( _("event-device-plugin: configuration, unable to get is_active value for device \"%s\""
- ", skipping it.\n") , device_names[i] );
- g_clear_error( &gerr );
- }
-
- if ( is_active == TRUE ) /* only care about active devices at this time, ignore others */
- {
- gint is_custom = 0;
- gchar *device_file = NULL;
- gchar *device_phys = NULL;
- gint result = 0;
-
- result = ed_util_get_data_from_keyfile(
- keyfile , device_names[i] ,
- ED_CONFIG_INFO_FILENAME , &device_file ,
- ED_CONFIG_INFO_PHYS , &device_phys ,
- ED_CONFIG_INFO_ISCUSTOM , &is_custom ,
- ED_CONFIG_INFO_END );
-
- if ( result != 0 )
- {
- /* something wrong, skip this device */
- i++; continue;
- }
-
- /* unless this is a custom device, perform a device check */
- if ( is_custom != 1 )
- {
- /* not a custom device, check it against system_devices_list
- to see if its information should be updated or if it's not plugged at all */
- gint check_result = ed_device_check(
- system_devices_list , device_names[i] , &device_file , &device_phys );
-
- if ( check_result == ED_DEVCHECK_OK )
- {
- /* ok, we have an active not-custom device and it has been successfully
- checked too; create a ed_device_t item for it */
- ed_device_t *dev = ed_device_new ( device_names[i] , device_file , device_phys , 0 );
- g_free( device_file ); g_free( device_phys ); /* not needed anymore */
- if ( dev != NULL )
- {
- dev->info->bindings = ed_util_get_bindings_from_keyfile( keyfile , device_names[i] );
- ed_device_start_listening ( dev );
- }
- }
-
- /* note: if check_result == ED_DEVCHECK_ABSENT, we simply skip this device */
- }
- else
- {
- /* ok, we have an active custom device; create a ed_device_t item for it */
- ed_device_t *dev = ed_device_new ( device_names[i] , device_file , device_phys , 1 );
- g_free( device_file ); g_free( device_phys ); /* not needed anymore */
- if ( dev != NULL )
- {
- dev->info->bindings = ed_util_get_bindings_from_keyfile( keyfile , device_names[i] );
- ed_device_start_listening ( dev );
- }
- }
- }
-
- /* on with next device name */
- i++;
- }
-
- g_strfreev( device_names );
- ed_device_free_list( system_devices_list );
- g_key_file_free( keyfile );
- return;
-}
-
-
-/* this function checks that a given event device (with device_name,
- device_phys and device_file) exists in system_devices_list; device_phys
- and device_file must be dynamically-allocated string, they could
- be freed and reallocated if their information needs to be updated;
- it returns an integer, its value represents the performed operations */
-gint
-ed_device_check ( GList * system_devices_list ,
- gchar * device_name ,
- gchar ** device_file ,
- gchar ** device_phys )
-{
- /* first, search in the list for a device, named device_name,
- that has not been found in a previous ed_device_check
- made with the same system_devices_list (info->reg == 0) */
- GList *list_iter = system_devices_list;
-
- while ( list_iter != NULL )
- {
- ed_device_info_t *info = list_iter->data;
-
- if ( ( info->reg == 0 ) && ( strcmp( device_name , info->name ) == 0 ) )
- {
- /* found a device, check if it has the same physical address */
- if ( strcmp( *device_phys , info->phys ) == 0 )
- {
- /* good, same device name and same physical
- address; update device_file if necessary */
- if ( strcmp( *device_file , info->filename ) != 0 )
- {
- g_free( *device_file );
- *device_file = g_strdup( info->filename );
- }
- /* now mark it as "found" so it won't be searched in next
- ed_device_check made with the same system_devices_list*/
- info->reg = 1;
- /* everything done */
- return ED_DEVCHECK_OK;
- }
- else
- {
- /* device found, but physical address is not the one from *device_phys; try to
- search further in system_devices_list for a device with same name and address */
- GList *list_iter2 = g_list_next(list_iter);
- while ( list_iter2 != NULL )
- {
- ed_device_info_t *info2 = list_iter2->data;
- if ( ( info2->reg == 0 ) &&
- ( strcmp( device_name , info2->name ) == 0 ) &&
- ( strcmp( *device_phys , info2->phys ) == 0 ) )
- {
- /* found a device with the same name and address,
- so let's use it; update device_file if necessary */
- if ( strcmp( *device_file , info2->filename ) != 0 )
- {
- g_free( *device_file );
- *device_file = g_strdup( info2->filename );
- }
- /* now mark it as "found" so it won't be searched in next
- ed_device_check made with the same system_devices_list */
- info2->reg = 1;
- /* everything done */
- return ED_DEVCHECK_OK;
- }
- list_iter2 = g_list_next(list_iter2);
- }
-
- /* if we get to this point, it means that there isn't any device named
- device_name with physical address equal to *device_phys ; there is only
- one (or more) device named device_name but with different physical
- address; we'll use the first of those (alas the current content of info) */
- g_free( *device_phys ); /* free outdated device_phys */
- *device_phys = g_strdup( info->phys ); /* update it with the new one */
-
- /* update device_file if necessary */
- if ( strcmp( *device_file , info->filename ) != 0 )
- {
- g_free( *device_file );
- *device_file = g_strdup( info->filename );
- }
-
- /* now mark it as "found" so it won't be searched in next
- ed_device_check made with the same system_devices_list*/
- info->reg = 1;
- /* everything done */
- return ED_DEVCHECK_OK;
- }
- }
-
- list_iter = g_list_next(list_iter);
- }
-
- /* the entire system_devices_list was searched,
- but no device named device_name was found */
- return ED_DEVCHECK_ABSENT;
-}
-
-
-
-/* config */
-static void
-ed_config_save_from_list_bindings_foreach ( ed_inputevent_t * iev ,
- gint action_code ,
- gpointer keyfile ,
- gpointer info_gp )
-{
- gint int_list[4];
- gchar *keyname;
- ed_device_info_t *info = info_gp;
- keyname = g_strdup_printf( "b%i" , info->reg );
- int_list[0] = action_code;
- int_list[1] = iev->type;
- int_list[2] = iev->code;
- int_list[3] = iev->value;
- g_key_file_set_integer_list( keyfile , info->name , keyname , int_list , 4 );
- g_free( keyname );
- info->reg++;
- return;
-}
-
-gint
-ed_config_save_from_list ( GList * config_devices_list )
-{
- GKeyFile *keyfile;
- GList *iter_list = NULL;
- gchar *keyfile_str = NULL;
- gsize keyfile_str_len = 0;
- GIOChannel *iochan;
- gchar *config_pathfilename = NULL;
- gchar *config_datadir = NULL;
-
- config_datadir = (gchar*)aud_util_get_localdir();
- config_pathfilename = g_build_filename( config_datadir , PLAYER_LOCALRC_FILE , NULL );
-
- keyfile = g_key_file_new();
-
- g_key_file_set_string( keyfile , "___plugin___" , "config_ver" , ED_VERSION_CONFIG );
-
- iter_list = config_devices_list;
- while ( iter_list != NULL )
- {
- ed_device_info_t *info = iter_list->data;
- g_key_file_set_string( keyfile , info->name , "filename" , info->filename );
- g_key_file_set_string( keyfile , info->name , "phys" , info->phys );
- g_key_file_set_boolean( keyfile , info->name , "is_active" , info->is_active );
- g_key_file_set_integer( keyfile , info->name , "is_custom" , info->is_custom );
- /* use the info->reg field as a counter to list actions */
- info->reg = 0; /* init the counter */
- if ( info->bindings != NULL )
- ed_bindings_store_foreach( info->bindings ,
- ed_config_save_from_list_bindings_foreach , keyfile , info );
- iter_list = g_list_next( iter_list );
- }
-
- keyfile_str = g_key_file_to_data( keyfile , &keyfile_str_len , NULL );
- if ( g_file_test( config_datadir , G_FILE_TEST_IS_DIR ) == TRUE )
- {
- iochan = g_io_channel_new_file( config_pathfilename , "w" , NULL );
- g_io_channel_set_encoding( iochan , "UTF-8" , NULL );
- g_io_channel_write_chars( iochan , keyfile_str , keyfile_str_len , NULL , NULL );
- g_io_channel_shutdown( iochan , TRUE , NULL );
- g_io_channel_unref( iochan );
- }
- else
- {
- g_warning( _("event-device-plugin: unable to access local directory %s , settings will not be saved.\n") ,
- config_datadir );
- }
-
- g_free( keyfile_str );
- g_free( config_datadir );
- g_key_file_free( keyfile );
- return 0;
-}
-
-
-/* utils */
-
-
-/* this picks information from a keyfile, using device_name
- as group name; information must be requested by passing
- a ed_config_info_t value and a corresponding container;
- list of requested information must be terminated with
- ED_CONFIG_INFO_END; returns 0 if everything is found,
- returns negative values if some information is missing */
-static gint
-ed_util_get_data_from_keyfile( GKeyFile * keyfile , gchar * device_name , ... )
-{
- GError *gerr = NULL;
- gboolean is_failed = FALSE;
- ed_config_info_t info_code = ED_CONFIG_INFO_END;
- GList *temp_stringstore = NULL;
- va_list ap;
-
- /* when we get a string value from g_key_file_get_string, we temporarily
- store its container in temp_stringstore; if subsequent information
- requests in the iteraton fails, we free the information in previous
- container and nullify its content;
- this way, user will get complete information (return value 0) or
- absent information (all string containers nullified, return value -1) */
-
- va_start( ap, device_name );
-
- while ( ( is_failed == FALSE ) &&
- ( ( info_code = va_arg( ap , ed_config_info_t ) ) != ED_CONFIG_INFO_END ) )
- {
- switch ( info_code )
- {
- case ED_CONFIG_INFO_FILENAME:
- {
- gchar **device_file = va_arg( ap , gchar ** );
- *device_file = g_key_file_get_string( keyfile , device_name , "filename" , &gerr );
- if ( gerr != NULL )
- {
- g_clear_error( &gerr );
- g_warning( _("event-device-plugin: configuration, unable to get filename value for device \"%s\""
- ", skipping it.\n") , device_name );
- is_failed = TRUE;
- }
- else
- temp_stringstore = g_list_append( temp_stringstore , device_file );
- break;
- }
-
- case ED_CONFIG_INFO_PHYS:
- {
- gchar **device_phys = va_arg( ap , gchar ** );
- *device_phys = g_key_file_get_string( keyfile , device_name , "phys" , &gerr );
- if ( gerr != NULL )
- {
- g_clear_error( &gerr );
- g_warning( _("event-device-plugin: configuration, unable to get phys value for device \"%s\""
- ", skipping it.\n") , device_name );
- is_failed = TRUE;
- }
- else
- temp_stringstore = g_list_append( temp_stringstore , device_phys );
- break;
- }
-
- case ED_CONFIG_INFO_ISCUSTOM:
- {
- gint *is_custom = va_arg( ap , gint * );
- *is_custom = g_key_file_get_integer( keyfile , device_name , "is_custom" , &gerr );
- if ( gerr != NULL )
- {
- g_clear_error( &gerr );
- g_warning( _("event-device-plugin: configuration, unable to get is_custom value for device \"%s\""
- ", skipping it.\n") , device_name );
- is_failed = TRUE;
- }
- break;
- }
-
- case ED_CONFIG_INFO_ISACTIVE:
- {
- gboolean *is_active = va_arg( ap , gboolean * );
- *is_active = g_key_file_get_boolean( keyfile , device_name , "is_active" , &gerr );
- if ( gerr != NULL )
- {
- g_clear_error( &gerr );
- g_warning( _("event-device-plugin: configuration, unable to get is_active value for device \"%s\""
- ", skipping it.\n") , device_name );
- is_failed = TRUE;
- }
- break;
- }
-
- default:
- {
- /* unexpected value in info_code, skipping */
- g_warning( _("event-device-plugin: configuration, unexpected value for device \"%s\""
- ", skipping it.\n") , device_name );
- is_failed = TRUE;
- }
- }
- }
-
- va_end( ap );
-
- if ( is_failed == FALSE )
- {
- /* temp_stringstore is not needed anymore,
- do not change pointed containers */
- g_list_free( temp_stringstore );
- return 0;
- }
- else
- {
- /* temp_stringstore is not needed anymore,
- nullify pointed containers and free content */
- GList *list_iter = temp_stringstore;
- while ( list_iter != NULL )
- {
- gchar **container = list_iter->data;
- g_free( *container );
- *container = NULL;
- list_iter = g_list_next( list_iter );
- }
- g_list_free( temp_stringstore );
- return -1;
- }
-}
-
-
-/* this does just what its name says :) */
-static gpointer
-ed_util_get_bindings_from_keyfile( GKeyFile * keyfile , gchar * device_name )
-{
- ed_inputevent_t *iev = g_malloc(sizeof(ed_inputevent_t));
- gpointer bindings = ed_bindings_store_new();
- gchar **keys;
- gint j = 0;
-
- /* now get bindings for this device */
- keys = g_key_file_get_keys( keyfile , device_name , NULL , NULL );
- while ( keys[j] != NULL )
- {
- /* in the config file, only bindings start with the 'b' character */
- if ( keys[j][0] == 'b' )
- {
- gsize ilist_len = 0;
- gint *ilist;
- ilist = g_key_file_get_integer_list( keyfile ,
- device_name , keys[j] , &ilist_len , NULL );
- if ( ilist_len > 3 )
- {
- gint action_code = (gint)ilist[0];
- iev->type = (guint)ilist[1];
- iev->code = (guint)ilist[2];
- iev->value = (gint)ilist[3];
- ed_bindings_store_insert( bindings , iev , action_code );
- }
- g_free( ilist );
- }
- j++;
- }
-
- g_strfreev( keys );
- g_free( iev );
-
- if ( ed_bindings_store_size( bindings ) == 0 )
- {
- ed_bindings_store_delete( bindings );
- bindings = NULL;
- }
-
- return bindings;
-}
diff --git a/src/evdev-plug/ed_internals.h b/src/evdev-plug/ed_internals.h
deleted file mode 100644
index 2c7c424..0000000
--- a/src/evdev-plug/ed_internals.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_INTERNALS_H
-#define _I_ED_INTERNALS_H 1
-
-#include "ed_types.h"
-#include "ed_common.h"
-#include <glib.h>
-
-#define ED_DEVCHECK_OK 0
-#define ED_DEVCHECK_ABSENT 1
-
-typedef enum
-{
- ED_CONFIG_INFO_END = -1,
- ED_CONFIG_INFO_FILENAME = 0,
- ED_CONFIG_INFO_PHYS,
- ED_CONFIG_INFO_ISCUSTOM,
- ED_CONFIG_INFO_ISACTIVE
-}
-ed_config_info_t;
-
-ed_device_t * ed_device_new ( gchar * , gchar * , gchar * , gint );
-gint ed_device_delete ( ed_device_t * );
-
-ed_device_info_t * ed_device_info_new ( gchar * , gchar * , gchar * , gint );
-gint ed_device_info_delete ( ed_device_info_t * );
-
-gint ed_device_start_listening ( ed_device_t * );
-void ed_device_start_listening_from_config ( void );
-gint ed_device_stop_listening ( ed_device_t * );
-gint ed_device_stop_listening_from_info ( ed_device_info_t * );
-void ed_device_stop_listening_all ( gboolean );
-gboolean ed_device_check_listening_from_info ( ed_device_info_t * );
-
-gboolean ed_inputevent_check_equality( ed_inputevent_t * , ed_inputevent_t * );
-gboolean ed_device_info_check_equality( ed_device_info_t * , ed_device_info_t * );
-
-/* these function return a GList of ed_device_info_t items */
-GList * ed_device_get_list_from_system ( void );
-GList * ed_device_get_list_from_config ( void );
-void ed_device_free_list ( GList * );
-
-gint ed_device_check ( GList * , gchar * , gchar ** , gchar ** );
-
-gint ed_config_save_from_list ( GList * );
-
-#endif /* !_I_ED_INTERNALS_H */
diff --git a/src/evdev-plug/ed_types.h b/src/evdev-plug/ed_types.h
deleted file mode 100644
index 5bc69df..0000000
--- a/src/evdev-plug/ed_types.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_TYPES_H
-#define _I_ED_TYPES_H 1
-
-#include "ed_common.h"
-#include <glib.h>
-
-typedef struct
-{
- gchar * name;
- gchar * filename;
- gchar * phys;
-
- gint reg;
-
- gint is_custom;
- gboolean is_active;
-
- gpointer * bindings;
-}
-ed_device_info_t;
-
-typedef struct
-{
- gint fd;
-
- GIOChannel * iochan;
- guint iochan_sid;
- gboolean is_listening;
-
- ed_device_info_t * info;
-}
-ed_device_t;
-
-typedef struct
-{
- guint type;
- guint code;
- gint value;
-}
-ed_inputevent_t;
-
-#endif /* !_I_ED_TYPES_H */
diff --git a/src/evdev-plug/ed_ui.c b/src/evdev-plug/ed_ui.c
deleted file mode 100644
index 19d379d..0000000
--- a/src/evdev-plug/ed_ui.c
+++ /dev/null
@@ -1,1541 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#include "ed_ui.h"
-#include "ed_types.h"
-#include "ed_internals.h"
-#include "ed_actions.h"
-#include "ed_bindings_store.h"
-#include "ed_common.h"
-#include <stdlib.h>
-#include <string.h>
-#include <linux/input.h>
-
-#include <audacious/i18n.h>
-#include <gtk/gtk.h>
-
-
-static void cfg_ui_bindings_show ( ed_device_t * , GtkTreeRowReference * );
-
-extern ed_action_t player_actions[];
-extern gboolean plugin_is_active;
-
-static GtkWidget *cfg_win = NULL;
-
-enum
-{
- DEVLIST_COL_ISACTIVE = 0,
- DEVLIST_COL_NAME,
- DEVLIST_COL_FILENAME,
- DEVLIST_COL_PHYS,
- DEVLIST_COL_ISAVAILABLE,
- DEVLIST_COL_BINDINGS,
- DEVLIST_NUMCOLS
-};
-
-enum
-{
- DEVLIST_ISAVAILABLE_NOTDET = 0,
- DEVLIST_ISAVAILABLE_DET,
- DEVLIST_ISAVAILABLE_CUSTOM
-};
-
-
-
-static void
-cfg_device_lv_populate( GtkListStore * store )
-{
- /* store is logically divided in three families of devices,
- depending on the ISAVAILABLE value;
- DEVLIST_ISAVAILABLE_NOTDET -> not detected devices: these are not-custom
- devices that are present in configuration file but they do not seem
- to be plugged at the moment, cause they're not in system_devices_list;
- DEVLIST_ISAVAILABLE_DET -> detected devices: these are not-custom devices that
- are currently plugged, no matter whether they are in configuration or not;
- DEVLIST_ISAVAILABLE_CUSTOM -> custom devices: defined by user in configuration
- file, these are not checked against system_devices_list;
- */
-
- GList *system_devices_list = NULL;
- GList *config_devices_list = NULL;
- GList *list_iter = NULL;
-
- system_devices_list = ed_device_get_list_from_system();
- config_devices_list = ed_device_get_list_from_config();
-
- /* first, for each not-custom device in config_devices_list,
- perform a search in system_devices_list */
- list_iter = config_devices_list;
- while ( list_iter != NULL )
- {
- ed_device_info_t *info_from_cfg = list_iter->data;
- if ( info_from_cfg->is_custom == 0 ) /* only try to detect not-custom devices */
- {
- /* note: if device is found, filename and phys in info_from_cfg could be updated by the
- check; the found device will be marked as "found" in system_devices_list too */
- if ( ed_device_check( system_devices_list ,
- info_from_cfg->name , &(info_from_cfg->filename) , &(info_from_cfg->phys) ) == ED_DEVCHECK_OK )
- {
- info_from_cfg->reg = 1; /* mark our device from config as "found" */
- }
- }
- list_iter = g_list_next( list_iter );
- }
-
- /* at this point, we have three logical groups:
- #1 - not-custom devices in config_devices_list, marked as "found" -> DEVLIST_ISAVAILABLE_DET
- #2 - not-custom devices in config_devices_list, not-marked -> DEVLIST_ISAVAILABLE_NOTDET
- #3 - custom devices in config_devices_list -> DEVLIST_ISAVAILABLE_CUSTOM
- #1bis - plus, we pick not-marked devices from system_devices_list, which
- are plugged devices that are not present in config_devices_list -> DEVLIST_ISAVAILABLE_DET
- */
-
- /* let's start to fill the store with items from group #1 (DEVLIST_ISAVAILABLE_DET) */
- list_iter = config_devices_list;
- while ( list_iter != NULL )
- {
- ed_device_info_t *info_from_cfg = list_iter->data;
- if (( info_from_cfg->reg == 1 ) && ( info_from_cfg->is_custom == 0 ))
- {
- GtkTreeIter iter;
- gtk_list_store_append( store , &iter );
- gtk_list_store_set( store , &iter ,
- DEVLIST_COL_ISACTIVE , info_from_cfg->is_active ,
- DEVLIST_COL_NAME , info_from_cfg->name ,
- DEVLIST_COL_FILENAME , info_from_cfg->filename ,
- DEVLIST_COL_PHYS , info_from_cfg->phys ,
- DEVLIST_COL_ISAVAILABLE , DEVLIST_ISAVAILABLE_DET ,
- DEVLIST_COL_BINDINGS , info_from_cfg->bindings ,
- -1 );
- }
- list_iter = g_list_next( list_iter );
- }
-
- /* add items from group #1bis (DEVLIST_ISAVAILABLE_DET) */
- list_iter = system_devices_list;
- while ( list_iter != NULL )
- {
- ed_device_info_t *info_from_sys = list_iter->data;
- if ( info_from_sys->reg == 0 )
- {
- GtkTreeIter iter;
- gtk_list_store_append( store , &iter );
- gtk_list_store_set( store , &iter ,
- DEVLIST_COL_ISACTIVE , info_from_sys->is_active ,
- DEVLIST_COL_NAME , info_from_sys->name ,
- DEVLIST_COL_FILENAME , info_from_sys->filename ,
- DEVLIST_COL_PHYS , info_from_sys->phys ,
- DEVLIST_COL_ISAVAILABLE , DEVLIST_ISAVAILABLE_DET ,
- DEVLIST_COL_BINDINGS , info_from_sys->bindings ,
- -1 );
- }
- list_iter = g_list_next( list_iter );
- }
-
- /* add items from group #2 (DEVLIST_ISAVAILABLE_NOTDET) */
- list_iter = config_devices_list;
- while ( list_iter != NULL )
- {
- ed_device_info_t *info_from_cfg = list_iter->data;
- if (( info_from_cfg->reg == 0 ) && ( info_from_cfg->is_custom == 0 ))
- {
- GtkTreeIter iter;
- gtk_list_store_append( store , &iter );
- gtk_list_store_set( store , &iter ,
- DEVLIST_COL_ISACTIVE , info_from_cfg->is_active ,
- DEVLIST_COL_NAME , info_from_cfg->name ,
- DEVLIST_COL_FILENAME , info_from_cfg->filename ,
- DEVLIST_COL_PHYS , info_from_cfg->phys ,
- DEVLIST_COL_ISAVAILABLE , DEVLIST_ISAVAILABLE_NOTDET ,
- DEVLIST_COL_BINDINGS , info_from_cfg->bindings ,
- -1 );
- }
- list_iter = g_list_next( list_iter );
- }
-
- /* add items from group #3 (DEVLIST_ISAVAILABLE_CUSTOM) */
- list_iter = config_devices_list;
- while ( list_iter != NULL )
- {
- ed_device_info_t *info_from_cfg = list_iter->data;
- if ( info_from_cfg->is_custom == 1 )
- {
- GtkTreeIter iter;
- gtk_list_store_append( store , &iter );
- gtk_list_store_set( store , &iter ,
- DEVLIST_COL_ISACTIVE , info_from_cfg->is_active ,
- DEVLIST_COL_NAME , info_from_cfg->name ,
- DEVLIST_COL_FILENAME , info_from_cfg->filename ,
- DEVLIST_COL_PHYS , info_from_cfg->phys ,
- DEVLIST_COL_ISAVAILABLE , DEVLIST_ISAVAILABLE_CUSTOM ,
- DEVLIST_COL_BINDINGS , info_from_cfg->bindings ,
- -1 );
- }
- list_iter = g_list_next( list_iter );
- }
-
- /* delete lists; bindings objects are not deleted,
- they must be accessible from liststore for customization
- and they'll be deleted when the config win is destroyed */
- ed_device_free_list( config_devices_list );
- ed_device_free_list( system_devices_list );
- return;
-}
-
-
-static void
-cfg_device_lv_celldatafunc_isavailable( GtkTreeViewColumn * col , GtkCellRenderer * renderer ,
- GtkTreeModel * model , GtkTreeIter * iter , gpointer data )
-{
- guint is_available = 0;
- gtk_tree_model_get( model , iter , DEVLIST_COL_ISAVAILABLE , &is_available , -1 );
- switch (is_available)
- {
- case DEVLIST_ISAVAILABLE_DET:
- g_object_set( renderer , "text" , _("Detected") ,
- "foreground" , "Green" , "foreground-set" , TRUE ,
- "background" , "Black" , "background-set" , TRUE , NULL );
- break;
- case DEVLIST_ISAVAILABLE_CUSTOM:
- g_object_set( renderer , "text" , _("Custom") ,
- "foreground" , "Yellow" , "foreground-set" , TRUE ,
- "background" , "Black" , "background-set" , TRUE , NULL );
- break;
- case DEVLIST_ISAVAILABLE_NOTDET:
- default:
- g_object_set( renderer , "text" , _("Not Detected") ,
- "foreground" , "Orange" , "foreground-set" , TRUE ,
- "background" , "Black" , "background-set" , TRUE , NULL );
- break;
- }
- return;
-}
-
-
-static void
-cfg_device_lv_changetoggle ( GtkCellRendererToggle * toggle ,
- gchar * path_str , gpointer cfg_device_lv )
-{
- GtkTreeModel *model = gtk_tree_view_get_model( GTK_TREE_VIEW(cfg_device_lv) );
- GtkTreeIter iter;
- GtkTreePath *path = gtk_tree_path_new_from_string( path_str );
- gboolean toggled;
-
- gtk_tree_model_get_iter( model , &iter , path );
- gtk_tree_model_get( model , &iter , DEVLIST_COL_ISACTIVE , &toggled , -1 );
-
- toggled ^= 1;
- gtk_list_store_set( GTK_LIST_STORE(model), &iter , DEVLIST_COL_ISACTIVE , toggled , -1 );
-
- gtk_tree_path_free( path );
- return;
-}
-
-
-static void
-cfg_config_cb_bindings_show ( gpointer cfg_device_lv )
-{
- GtkTreeSelection *sel;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- /* check if a row is selected */
- sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(cfg_device_lv) );
- if ( gtk_tree_selection_get_selected( sel , &model , &iter ) == TRUE )
- {
- /* check availability and active status */
- guint is_available = 0;
- gboolean is_active = FALSE;
-
- gtk_tree_model_get( model , &iter ,
- DEVLIST_COL_ISACTIVE , &is_active ,
- DEVLIST_COL_ISAVAILABLE , &is_available ,
- -1 );
-
- if ( is_available == DEVLIST_ISAVAILABLE_NOTDET )
- {
- /* do not open bindings window for a not-detected device */
- ed_ui_message_show( _("Information") ,
- _("Cannot open bindings window for a not-detected device.\n"
- "Ensure that the device has been correctly plugged in.") ,
- cfg_win );
- return;
- }
- else
- {
- /* ok, create a ed_device_t item from selected row information */
- ed_device_t *dev;
- gchar *device_name = NULL, *device_file = NULL, *device_phys = NULL;
- gpointer bindings = NULL;
-
- gtk_tree_model_get( model , &iter ,
- DEVLIST_COL_NAME , &device_name ,
- DEVLIST_COL_FILENAME , &device_file ,
- DEVLIST_COL_PHYS , &device_phys ,
- DEVLIST_COL_BINDINGS , &bindings ,
- -1 );
-
- dev = ed_device_new(
- device_name , device_file , device_phys ,
- ( is_available == DEVLIST_ISAVAILABLE_CUSTOM ? 1 : 0 ) );
- g_free( device_name ); g_free( device_file ); g_free( device_phys );
-
- if ( dev != NULL )
- {
- GtkTreePath *path;
- GtkTreeRowReference *rowref;
-
- dev->info->bindings = bindings;
-
- path = gtk_tree_model_get_path( model , &iter );
- rowref = gtk_tree_row_reference_new( model , path );
- gtk_tree_path_free( path );
- /* show bindings window for device "dev"; also pass to the bindings window
- the GtkTreeRowReference (it keeps track of the model too) for selected row;
- if changes are committed in the bindings window, the row reference will be
- needed to update the treemodel with the new bindings information */
- cfg_ui_bindings_show( dev , rowref );
- }
- else
- {
- /* something went wrong */
- ed_ui_message_show( _("Error") ,
- _("Unable to open selected device.\n"
- "Please check read permissions on device file.") ,
- cfg_win );
- }
- }
- }
-}
-
-
-static void
-cfg_config_cb_addcustom_show ( gpointer cfg_device_lv )
-{
- GtkWidget *addc_dlg;
- GtkWidget *addc_data_frame, *addc_data_vbox;
- GtkWidget *addc_data_label;
- GtkWidget *addc_data_table;
- GtkWidget *addc_data_name_label, *addc_data_name_entry;
- GtkWidget *addc_data_file_label, *addc_data_file_entry;
- gint result;
- gboolean task_done = FALSE;
-
- addc_dlg = gtk_dialog_new_with_buttons( _("EvDev-Plug - Add custom device") ,
- GTK_WINDOW(cfg_win) , GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT ,
- GTK_STOCK_CANCEL , GTK_RESPONSE_REJECT , GTK_STOCK_OK , GTK_RESPONSE_ACCEPT , NULL );
-
- addc_data_frame = gtk_frame_new( NULL );
- gtk_container_add( GTK_CONTAINER(GTK_DIALOG(addc_dlg)->vbox) , addc_data_frame );
- addc_data_vbox = gtk_vbox_new( FALSE , 5 );
- gtk_container_set_border_width( GTK_CONTAINER(addc_data_vbox) , 5 );
- gtk_container_add( GTK_CONTAINER(addc_data_frame) , addc_data_vbox );
-
- addc_data_label = gtk_label_new( "" );
- gtk_label_set_text( GTK_LABEL(addc_data_label) ,
- _("EvDev-Plug tries to automatically detect and update information about\n"
- "event devices available on the system.\n"
- "However, if auto-detect doesn't work for your system, or you have event\n"
- "devices in a non-standard location (currently they're only searched in\n"
- "/dev/input/ ), you may want to add a custom device, explicitly specifying\n"
- "name and device file.") );
- gtk_box_pack_start( GTK_BOX(addc_data_vbox) , addc_data_label , FALSE , FALSE , 0 );
-
- addc_data_name_label = gtk_label_new( _("Device name:") );
- gtk_misc_set_alignment( GTK_MISC(addc_data_name_label) , 0 , 0.5 );
- addc_data_name_entry = gtk_entry_new();
-
- addc_data_file_label = gtk_label_new( _("Device file:") );
- gtk_misc_set_alignment( GTK_MISC(addc_data_file_label) , 0 , 0.5 );
- addc_data_file_entry = gtk_entry_new();
-
- addc_data_table = gtk_table_new( 2 , 2 , FALSE );
- gtk_table_set_col_spacings( GTK_TABLE(addc_data_table) , 2 );
- gtk_table_set_row_spacings( GTK_TABLE(addc_data_table) , 2 );
- gtk_table_attach( GTK_TABLE(addc_data_table) , addc_data_name_label , 0 , 1 , 0 , 1 ,
- GTK_FILL , GTK_EXPAND | GTK_FILL , 0 , 0 );
- gtk_table_attach( GTK_TABLE(addc_data_table) , addc_data_name_entry , 1 , 2 , 0 , 1 ,
- GTK_EXPAND | GTK_FILL , GTK_EXPAND | GTK_FILL , 0 , 0 );
- gtk_table_attach( GTK_TABLE(addc_data_table) , addc_data_file_label , 0 , 1 , 1 , 2 ,
- GTK_FILL , GTK_EXPAND | GTK_FILL , 0 , 0 );
- gtk_table_attach( GTK_TABLE(addc_data_table) , addc_data_file_entry , 1 , 2 , 1 , 2 ,
- GTK_EXPAND | GTK_FILL , GTK_EXPAND | GTK_FILL , 0 , 0 );
- gtk_box_pack_start( GTK_BOX(addc_data_vbox) , addc_data_table , TRUE , TRUE , 0 );
-
- gtk_widget_show_all( addc_dlg );
-
- while ( task_done == FALSE )
- {
- result = gtk_dialog_run( GTK_DIALOG(addc_dlg) );
- if ( result == GTK_RESPONSE_ACCEPT )
- {
- const gchar *name = gtk_entry_get_text( GTK_ENTRY(addc_data_name_entry) );
- const gchar *file = gtk_entry_get_text( GTK_ENTRY(addc_data_file_entry) );
- if ( ( strcmp( name , "" ) != 0 ) &&
- ( strcmp( name , "___plugin___" ) != 0 ) &&
- ( strcmp( file , "" ) != 0 ) &&
- ( file[0] == '/' ) )
- {
- GtkTreeModel *model = gtk_tree_view_get_model( GTK_TREE_VIEW(cfg_device_lv) );
- GtkTreeIter iter;
-
- gtk_list_store_append( GTK_LIST_STORE(model) , &iter );
- gtk_list_store_set( GTK_LIST_STORE(model) , &iter ,
- DEVLIST_COL_ISACTIVE , FALSE ,
- DEVLIST_COL_NAME , name ,
- DEVLIST_COL_FILENAME , file ,
- DEVLIST_COL_PHYS , _("(custom)") ,
- DEVLIST_COL_ISAVAILABLE , DEVLIST_ISAVAILABLE_CUSTOM ,
- DEVLIST_COL_BINDINGS , NULL , -1 );
- task_done = TRUE;
- }
- else
- {
- ed_ui_message_show( _("Information") ,
- _("Please specify both name and filename.\n"
- "Filename must be specified with absolute path.") ,
- addc_dlg );
- }
- }
- else
- task_done = TRUE;
- }
-
- gtk_widget_destroy( addc_dlg );
-}
-
-
-static void
-cfg_config_cb_remove ( gpointer cfg_device_lv )
-{
- GtkTreeSelection *sel;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- /* check if a row is selected */
- sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(cfg_device_lv) );
- if ( gtk_tree_selection_get_selected( sel , &model , &iter ) == TRUE )
- {
- guint is_available = 0;
- gtk_tree_model_get( model , &iter , DEVLIST_COL_ISAVAILABLE , &is_available , -1 );
- switch ( is_available )
- {
- case DEVLIST_ISAVAILABLE_NOTDET:
- {
- /* if remove is called on a not-detected device,
- it allows to remove existing configuration for it */
- GtkWidget *yesno_dlg = gtk_message_dialog_new( GTK_WINDOW(cfg_win) ,
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT , GTK_MESSAGE_QUESTION ,
- GTK_BUTTONS_YES_NO ,
- _("Do you want to remove the existing configuration for selected device?\n") );
- if ( gtk_dialog_run( GTK_DIALOG(yesno_dlg) ) == GTK_RESPONSE_YES )
- {
- gpointer bindings = NULL;
- gtk_tree_model_get( model , &iter , DEVLIST_COL_BINDINGS , &bindings , -1 );
- if ( bindings != NULL ) ed_bindings_store_delete( bindings );
- gtk_list_store_remove( GTK_LIST_STORE(model) , &iter );
- }
- gtk_widget_destroy( yesno_dlg );
- break;
- }
-
- case DEVLIST_ISAVAILABLE_CUSTOM:
- {
- /* if remove is called on a custom device,
- it allows to remove it along with its configuration */
- GtkWidget *yesno_dlg = gtk_message_dialog_new( GTK_WINDOW(cfg_win) ,
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT , GTK_MESSAGE_QUESTION ,
- GTK_BUTTONS_YES_NO ,
- _("Do you want to remove the selected custom device?\n") );
- if ( gtk_dialog_run( GTK_DIALOG(yesno_dlg) ) == GTK_RESPONSE_YES )
- {
- gpointer bindings = NULL;
- gtk_tree_model_get( model , &iter , DEVLIST_COL_BINDINGS , &bindings , -1 );
- if ( bindings != NULL ) ed_bindings_store_delete( bindings );
- gtk_list_store_remove( GTK_LIST_STORE(model) , &iter );
- }
- gtk_widget_destroy( yesno_dlg );
- break;
- }
-
- case DEVLIST_ISAVAILABLE_DET:
- default:
- {
- /* do nothing for detected devices */
- break;
- }
- }
- }
-}
-
-
-static gboolean
-cfg_config_cb_bindings_commit_foreach ( GtkTreeModel * model ,
- GtkTreePath * path ,
- GtkTreeIter * iter ,
- gpointer config_device_list_p )
-{
- gchar *device_name = NULL;
- gchar *device_file = NULL;
- gchar *device_phys = NULL;
- gboolean is_active = FALSE;
- guint is_available = 0;
- gpointer bindings = NULL;
- ed_device_info_t *info;
- GList **config_device_list = config_device_list_p;
-
- gtk_tree_model_get( model , iter ,
- DEVLIST_COL_ISACTIVE , &is_active ,
- DEVLIST_COL_NAME , &device_name ,
- DEVLIST_COL_FILENAME , &device_file ,
- DEVLIST_COL_PHYS , &device_phys ,
- DEVLIST_COL_ISAVAILABLE , &is_available ,
- DEVLIST_COL_BINDINGS , &bindings , -1 );
-
- info = ed_device_info_new( device_name , device_file , device_phys ,
- ( is_available == DEVLIST_ISAVAILABLE_CUSTOM ? 1 : 0 ) );
- info->bindings = bindings;
- info->is_active = is_active;
-
- *config_device_list = g_list_append( *config_device_list , info );
- return FALSE;
-}
-
-
-static gboolean
-cfg_config_cb_bindings_delbindings_foreach ( GtkTreeModel * model ,
- GtkTreePath * path ,
- GtkTreeIter * iter ,
- gpointer data )
-{
- gpointer bindings = NULL;
- gtk_tree_model_get( model , iter , DEVLIST_COL_BINDINGS , &bindings , -1 );
- if ( bindings != NULL )
- ed_bindings_store_delete( bindings );
- return FALSE;
-}
-
-
-static void
-cfg_config_cb_commit ( gpointer cfg_device_lv )
-{
- GList *config_device_list = NULL;
- GtkTreeModel *model;
-
- model = gtk_tree_view_get_model( GTK_TREE_VIEW(cfg_device_lv) );
- /* fill config_device_list with information from the treeview */
- gtk_tree_model_foreach( model , cfg_config_cb_bindings_commit_foreach , &config_device_list );
- /* ok, now we have a list of ed_device_info_t objects */
-
- /* commit changes in configuration file */
- ed_config_save_from_list( config_device_list );
-
- /* not needed anymore */
- ed_device_free_list( config_device_list );
-
- /* free bindings stored in the liststore */
- gtk_tree_model_foreach( model , cfg_config_cb_bindings_delbindings_foreach , NULL );
-
- if ( plugin_is_active == TRUE )
- {
- /* restart device listening according to the (possibly changed) config file */
- ed_device_start_listening_from_config();
- }
-
- gtk_widget_destroy( cfg_win );
-}
-
-
-static void
-cfg_config_cb_cancel ( gpointer cfg_device_lv )
-{
- GtkTreeModel *model;
- model = gtk_tree_view_get_model( GTK_TREE_VIEW(cfg_device_lv) );
-
- /* free bindings stored in the liststore */
- gtk_tree_model_foreach( model , cfg_config_cb_bindings_delbindings_foreach , NULL );
-
- if ( plugin_is_active == TRUE )
- {
- /* restart device listening according to the (unchanged) config file */
- ed_device_start_listening_from_config();
- }
-
- gtk_widget_destroy( cfg_win );
-}
-
-
-void
-ed_ui_config_show( void )
-{
- GtkWidget *cfg_vbox;
- GtkWidget *cfg_device_lv, *cfg_device_lv_frame, *cfg_device_lv_sw;
- GtkTreeViewColumn *cfg_device_lv_col_name, *cfg_device_lv_col_filename, *cfg_device_lv_col_phys;
- GtkTreeViewColumn *cfg_device_lv_col_isactive, *cfg_device_lv_col_isavailable;
- GtkCellRenderer *cfg_device_lv_rndr_text, *cfg_device_lv_rndr_toggle;
- GtkCellRenderer *cfg_device_lv_rndr_textphys, *cfg_device_lv_rndr_isavailable;
- GtkListStore *device_store;
- GtkWidget *cfg_bbar_hbbox;
- GtkWidget *cfg_bbar_bt_bind, *cfg_bbar_bt_addc, *cfg_bbar_bt_remc;
- GtkWidget *cfg_bbar_bt_cancel, *cfg_bbar_bt_ok;
- GdkGeometry cfg_win_hints;
-
- if ( cfg_win != NULL )
- {
- gtk_window_present( GTK_WINDOW(cfg_win) );
- return;
- }
-
- /* IMPORTANT: stop listening for all devices when config window is opened */
- ed_device_stop_listening_all( TRUE );
-
- cfg_win = gtk_window_new( GTK_WINDOW_TOPLEVEL );
- gtk_window_set_type_hint( GTK_WINDOW(cfg_win), GDK_WINDOW_TYPE_HINT_DIALOG );
- gtk_window_set_position( GTK_WINDOW(cfg_win), GTK_WIN_POS_CENTER );
- gtk_window_set_title( GTK_WINDOW(cfg_win), _("EvDev-Plug - Configuration") );
- gtk_container_set_border_width( GTK_CONTAINER(cfg_win), 10 );
- g_signal_connect( G_OBJECT(cfg_win) , "destroy" ,
- G_CALLBACK(gtk_widget_destroyed) , &cfg_win );
- cfg_win_hints.min_width = -1;
- cfg_win_hints.min_height = 300;
- gtk_window_set_geometry_hints( GTK_WINDOW(cfg_win) , GTK_WIDGET(cfg_win) ,
- &cfg_win_hints , GDK_HINT_MIN_SIZE );
-
- cfg_vbox = gtk_vbox_new( FALSE , 0 );
- gtk_container_add( GTK_CONTAINER(cfg_win) , cfg_vbox );
-
- /* current liststore model
- ----------------------------------------------
- G_TYPE_BOOLEAN -> device listening on/off
- G_TYPE_STRING -> device name
- G_TYPE_STRING -> device filename
- G_TYPE_STRING -> device physical port
- G_TYPE_UINT -> device is available
- G_TYPE_POINTER -> device bindings
- ----------------------------------------------
- */
- device_store = gtk_list_store_new(
- DEVLIST_NUMCOLS , G_TYPE_BOOLEAN , G_TYPE_STRING ,
- G_TYPE_STRING , G_TYPE_STRING , G_TYPE_UINT , G_TYPE_POINTER );
- cfg_device_lv_populate( device_store );
-
- cfg_device_lv_frame = gtk_frame_new( NULL );
- cfg_device_lv = gtk_tree_view_new_with_model( GTK_TREE_MODEL(device_store) );
- g_object_unref( device_store );
-
- cfg_device_lv_rndr_text = gtk_cell_renderer_text_new();
- cfg_device_lv_rndr_toggle = gtk_cell_renderer_toggle_new();
- cfg_device_lv_rndr_isavailable = gtk_cell_renderer_text_new();
- cfg_device_lv_rndr_textphys = gtk_cell_renderer_text_new();
- g_object_set( G_OBJECT(cfg_device_lv_rndr_textphys) ,
- "ellipsize-set" , TRUE , "ellipsize" , PANGO_ELLIPSIZE_END , NULL );
-
- cfg_device_lv_col_isactive = gtk_tree_view_column_new_with_attributes(
- _("Active") , cfg_device_lv_rndr_toggle , "active" , DEVLIST_COL_ISACTIVE , NULL );
- gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(cfg_device_lv_col_isactive) , FALSE );
- gtk_tree_view_append_column( GTK_TREE_VIEW(cfg_device_lv), cfg_device_lv_col_isactive );
- cfg_device_lv_col_isavailable = gtk_tree_view_column_new();
- gtk_tree_view_column_set_title( cfg_device_lv_col_isavailable , _("Status") );
- gtk_tree_view_column_pack_start( cfg_device_lv_col_isavailable , cfg_device_lv_rndr_isavailable , TRUE );
- gtk_tree_view_column_set_cell_data_func(
- cfg_device_lv_col_isavailable , cfg_device_lv_rndr_isavailable ,
- (GtkTreeCellDataFunc)cfg_device_lv_celldatafunc_isavailable ,
- NULL , NULL );
- gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(cfg_device_lv_col_isavailable) , FALSE );
- gtk_tree_view_append_column( GTK_TREE_VIEW(cfg_device_lv), cfg_device_lv_col_isavailable );
- cfg_device_lv_col_name = gtk_tree_view_column_new_with_attributes(
- _("Device Name") , cfg_device_lv_rndr_text , "text" , DEVLIST_COL_NAME , NULL );
- gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(cfg_device_lv_col_name) , FALSE );
- gtk_tree_view_append_column( GTK_TREE_VIEW(cfg_device_lv), cfg_device_lv_col_name );
- cfg_device_lv_col_filename = gtk_tree_view_column_new_with_attributes(
- _("Device File") , cfg_device_lv_rndr_text , "text" , DEVLIST_COL_FILENAME , NULL );
- gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(cfg_device_lv_col_filename) , FALSE );
- gtk_tree_view_append_column( GTK_TREE_VIEW(cfg_device_lv), cfg_device_lv_col_filename );
- cfg_device_lv_col_phys = gtk_tree_view_column_new_with_attributes(
- _("Device Address") , cfg_device_lv_rndr_textphys , "text" , DEVLIST_COL_PHYS , NULL );
- gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(cfg_device_lv_col_phys) , TRUE );
- gtk_tree_view_column_set_resizable( GTK_TREE_VIEW_COLUMN(cfg_device_lv_col_phys) , TRUE );
- gtk_tree_view_append_column( GTK_TREE_VIEW(cfg_device_lv), cfg_device_lv_col_phys );
- cfg_device_lv_sw = gtk_scrolled_window_new( NULL , NULL );
- gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(cfg_device_lv_sw) ,
- GTK_POLICY_NEVER , GTK_POLICY_ALWAYS );
-
- gtk_container_add( GTK_CONTAINER(cfg_device_lv_sw) , cfg_device_lv );
- gtk_container_add( GTK_CONTAINER(cfg_device_lv_frame) , cfg_device_lv_sw );
- gtk_box_pack_start( GTK_BOX(cfg_vbox) , cfg_device_lv_frame , TRUE , TRUE , 0 );
-
- gtk_box_pack_start( GTK_BOX(cfg_vbox) , gtk_hseparator_new() , FALSE , FALSE , 4 );
-
- /* button bar */
- cfg_bbar_hbbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout( GTK_BUTTON_BOX(cfg_bbar_hbbox) , GTK_BUTTONBOX_START );
- cfg_bbar_bt_bind = gtk_button_new_with_mnemonic( _("_Bindings") );
- gtk_button_set_image( GTK_BUTTON(cfg_bbar_bt_bind) ,
- gtk_image_new_from_stock( GTK_STOCK_PREFERENCES , GTK_ICON_SIZE_BUTTON ) );
- cfg_bbar_bt_addc = gtk_button_new_from_stock( GTK_STOCK_ADD );
- cfg_bbar_bt_remc = gtk_button_new_from_stock( GTK_STOCK_REMOVE );
- /*cfg_bbar_bt_refresh = gtk_button_new_from_stock( GTK_STOCK_REFRESH );*/
- cfg_bbar_bt_cancel = gtk_button_new_from_stock( GTK_STOCK_CANCEL );
- cfg_bbar_bt_ok = gtk_button_new_from_stock( GTK_STOCK_OK );
- gtk_container_add( GTK_CONTAINER(cfg_bbar_hbbox) , cfg_bbar_bt_bind );
- gtk_container_add( GTK_CONTAINER(cfg_bbar_hbbox) , cfg_bbar_bt_addc );
- gtk_container_add( GTK_CONTAINER(cfg_bbar_hbbox) , cfg_bbar_bt_remc );
- /*gtk_container_add( GTK_CONTAINER(cfg_bbar_hbbox) , cfg_bbar_bt_refresh );*/
- gtk_container_add( GTK_CONTAINER(cfg_bbar_hbbox) , cfg_bbar_bt_cancel );
- gtk_container_add( GTK_CONTAINER(cfg_bbar_hbbox) , cfg_bbar_bt_ok );
- gtk_button_box_set_child_secondary( GTK_BUTTON_BOX(cfg_bbar_hbbox) , cfg_bbar_bt_cancel , TRUE );
- gtk_button_box_set_child_secondary( GTK_BUTTON_BOX(cfg_bbar_hbbox) , cfg_bbar_bt_ok , TRUE );
- gtk_box_pack_start( GTK_BOX(cfg_vbox) , cfg_bbar_hbbox , FALSE , FALSE , 0 );
-
- g_signal_connect( cfg_device_lv_rndr_toggle , "toggled" ,
- G_CALLBACK(cfg_device_lv_changetoggle) , cfg_device_lv );
- g_signal_connect_swapped( G_OBJECT(cfg_bbar_bt_bind) , "clicked" ,
- G_CALLBACK(cfg_config_cb_bindings_show) , cfg_device_lv );
- g_signal_connect_swapped( G_OBJECT(cfg_bbar_bt_addc) , "clicked" ,
- G_CALLBACK(cfg_config_cb_addcustom_show) , cfg_device_lv );
- g_signal_connect_swapped( G_OBJECT(cfg_bbar_bt_remc) , "clicked" ,
- G_CALLBACK(cfg_config_cb_remove) , cfg_device_lv );
- g_signal_connect_swapped( G_OBJECT(cfg_bbar_bt_cancel) , "clicked" ,
- G_CALLBACK(cfg_config_cb_cancel) , cfg_device_lv );
- g_signal_connect_swapped( G_OBJECT(cfg_bbar_bt_ok) , "clicked" ,
- G_CALLBACK(cfg_config_cb_commit) , cfg_device_lv );
-
- gtk_widget_show_all( cfg_win );
-}
-
-
-
-/* bindings window */
-
-static void cfg_bindbox_new_empty_row( GtkTable * , GtkWidget * , gboolean );
-
-enum
-{
- BINDLIST_COL_COMBO_ACTION = 0,
- BINDLIST_COL_BT_ASSIGN,
- BINDLIST_COL_LABEL_EVCODE,
- BINDLIST_COL_BT_DELETE,
- BINDLIST_NUMCOLS
-};
-
-
-static gboolean
-cfg_bindbox_assign_binding_timeout_func ( gpointer bindings_win )
-{
- GtkWidget *trigger_dlg = g_object_get_data( G_OBJECT(bindings_win) , "trigger-win" );
- if ( trigger_dlg != NULL )
- gtk_dialog_response( GTK_DIALOG(trigger_dlg) , GTK_RESPONSE_CANCEL );
-
- return FALSE;
-}
-
-
-static gboolean
-cfg_bindbox_assign_binding_input_func ( GIOChannel * iochan ,
- GIOCondition cond ,
- gpointer bindings_win )
-{
- switch ( cond )
- {
- case G_IO_IN:
- {
- gsize rb = 0;
- struct input_event inputev;
- g_io_channel_read_chars( iochan , (gchar*)&inputev ,
- sizeof(struct input_event) , &rb , NULL );
- if ( rb == sizeof(struct input_event) )
- {
- GtkWidget *trigger_dlg = g_object_get_data( G_OBJECT(bindings_win) , "trigger-win" );
- if ( trigger_dlg == NULL )
- {
- /* the trigger-dialog window is not open; ignore input */
- return TRUE;
- }
- else
- {
- /* currently, only care about events of type 'key' and 'absolute'
- TODO: should we handle some other event type as well? */
- switch ( inputev.type )
- {
- case EV_KEY:
- case EV_ABS:
- {
- /* the trigger-dialog window is open; record input and
- store it in a container managed by the trigger-dialog itself */
- ed_inputevent_t *dinputev = g_malloc(sizeof(ed_inputevent_t));
- dinputev->type = inputev.type;
- dinputev->code = inputev.code;
- dinputev->value = inputev.value;
- g_object_set_data( G_OBJECT(trigger_dlg) , "trigger-data" , dinputev );
- gtk_dialog_response( GTK_DIALOG(trigger_dlg) , GTK_RESPONSE_OK );
- break;
- }
- }
- }
- }
- }
-
- default:
- ;
- }
- return TRUE;
-}
-
-
-static gboolean
-cfg_bindbox_assign_binding_checkdups( GtkWidget * table , ed_inputevent_t * inputev )
-{
- /* check if inputev is already assigned in table */
- GList *children = GTK_TABLE(table)->children;
- for ( ; children != NULL ; children = g_list_next(children) )
- {
- GtkTableChild *child = children->data;
-
- if ( child->top_attach + 1 == GTK_TABLE(table)->nrows )
- continue; /* skip last empty row */
-
- if ( child->left_attach == BINDLIST_COL_LABEL_EVCODE )
- {
- /* it's a label, pick its inputevent */
- ed_inputevent_t * iev = g_object_get_data( G_OBJECT(child->widget) , "inputevent" );
- if ( ( iev != NULL ) && ( ed_inputevent_check_equality( inputev , iev ) == TRUE ) )
- return TRUE; /* a duplicate was found */
- }
- }
- return FALSE;
-}
-
-
-static void
-cfg_bindbox_assign_binding ( GtkButton * assign_button , gpointer bindings_win )
-{
- GtkWidget *trigger_dlg;
- GtkWidget *trigger_dlg_frame;
- GtkWidget *trigger_dlg_label;
- guint timeout_sid = 0;
- gint res = 0;
-
- /* create a not-decorated window to inform the user about what's going on */
- trigger_dlg = gtk_dialog_new();
- gtk_widget_set_name( trigger_dlg , "trigger_dlg" );
- trigger_dlg_label = gtk_label_new( _("Press a key of your device to bind it;\n"
- "if no key is pressed in five seconds, this window\n"
- "will close without binding changes.") );
- gtk_widget_hide( GTK_WIDGET(GTK_DIALOG(trigger_dlg)->action_area) );
- gtk_misc_set_padding( GTK_MISC(trigger_dlg_label) , 10 , 10 );
- trigger_dlg_frame = gtk_frame_new( NULL );
- gtk_container_add( GTK_CONTAINER(trigger_dlg_frame) , trigger_dlg_label );
- gtk_container_add( GTK_CONTAINER(GTK_DIALOG(trigger_dlg)->vbox) , trigger_dlg_frame );
- gtk_window_set_position( GTK_WINDOW(trigger_dlg) , GTK_WIN_POS_CENTER );
- gtk_window_set_decorated( GTK_WINDOW(trigger_dlg) , FALSE );
- gtk_window_set_transient_for( GTK_WINDOW(trigger_dlg) ,
- GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(assign_button))) );
- gtk_dialog_set_has_separator( GTK_DIALOG(trigger_dlg) , FALSE );
- gtk_widget_show_all( trigger_dlg );
-
- /* close the trigger-window if no input is received in 5 seconds */
- timeout_sid = g_timeout_add( 5000 , cfg_bindbox_assign_binding_timeout_func , bindings_win );
-
- g_object_set_data( G_OBJECT(bindings_win) , "trigger-win" , trigger_dlg ); /* enable trigger-listening */
- res = gtk_dialog_run( GTK_DIALOG(trigger_dlg) );
- g_object_set_data( G_OBJECT(bindings_win) , "trigger-win" , NULL ); /* stop trigger-listening */
- switch ( res )
- {
- case GTK_RESPONSE_OK:
- {
- ed_inputevent_t *dinputev = g_object_get_data( G_OBJECT(trigger_dlg) , "trigger-data" );
- GtkWidget *label = g_object_get_data( G_OBJECT(assign_button) , "label" );
- GtkWidget *table = g_object_get_data( G_OBJECT(bindings_win) , "table" );
- gchar *input_str;
-
- /* we got a new input event; ensure that this has not been assigned to an action already */
- if ( cfg_bindbox_assign_binding_checkdups( table , dinputev ) == TRUE )
- {
- /* this input event has been already used */
- g_free( dinputev );
- g_source_remove( timeout_sid );
- ed_ui_message_show( _("Information") ,
- _("This input event has been already assigned.\n\n"
- "It's not possible to assign multiple actions to the same input event "
- "(although it's possible to assign the same action to multiple events).") ,
- bindings_win );
- }
- else
- {
- /* if this is the last row ("Assign" button) , create a new empty row */
- if ( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(assign_button),"last")) == 1 )
- {
- cfg_bindbox_new_empty_row( GTK_TABLE(table) , bindings_win , TRUE );
- /* so, the current row is not the last one anymore;
- remove its "last" mark and enable its delete button */
- g_object_set_data( G_OBJECT(assign_button) , "last" , GINT_TO_POINTER(0) );
- gtk_widget_set_sensitive( GTK_WIDGET(g_object_get_data(G_OBJECT(assign_button),"delbt")) , TRUE );
- }
-
- g_object_set_data_full( G_OBJECT(label) , "inputevent" , dinputev , g_free );
- input_str = g_strdup_printf( "%i:%i:%i" , dinputev->type , dinputev->code , dinputev->value );
- gtk_label_set_text( GTK_LABEL(label) , input_str );
- g_free( input_str );
- g_source_remove( timeout_sid );
- }
-
- break;
- }
-
- default:
- {
- break; /* nothing should be changed */
- }
- }
-
- gtk_widget_destroy( trigger_dlg );
-}
-
-
-static void
-cfg_bindbox_delete_row( GtkButton * delete_button , gpointer bindings_win )
-{
- GtkTable *oldtable, *newtable;
- GtkWidget *table_sw, *table_vp;
- GList *children = NULL;
- gint drow = 0;
-
- /* here comes the drawback of using GtkTable to display
- a list-like set of widgets :) deletion can be a complex task */
-
- /* first, get the row number of the row that should be deleted
- (this can't be the last one cause it has the delete button disabled) */
- oldtable = g_object_get_data( G_OBJECT(bindings_win) , "table" );
- children = oldtable->children;
- while ( children != NULL )
- {
- GtkTableChild *child = children->data;
- if ( child->widget == (GtkWidget*)delete_button )
- drow = child->top_attach;
- children = g_list_next( children );
- }
-
- /* now, a simple trick: create a new GtkTable and move all
- of the widgets there, excepting those positioned in row "drow" */
- newtable = (GtkTable*)gtk_table_new( oldtable->nrows - 1 , oldtable->ncols , FALSE );
-
- children = oldtable->children;
- while ( children != NULL )
- {
- GtkTableChild *child = children->data;
- if ( child->top_attach < drow )
- {
- GtkWidget *widget = child->widget;
- guint widget_row = child->top_attach;
- guint widget_col = child->left_attach;
- g_object_ref( widget );
- gtk_container_remove( GTK_CONTAINER(oldtable) , widget );
- gtk_table_attach( GTK_TABLE(newtable) , widget ,
- widget_col , widget_col + 1 , widget_row , widget_row + 1 ,
- (widget_col == BINDLIST_COL_LABEL_EVCODE ? GTK_EXPAND | GTK_FILL : GTK_FILL ) , GTK_FILL , 0 , 0 );
- /* gtk_container_remove() changed the structure used to iterate; restart */
- children = oldtable->children;
- }
- else if ( child->top_attach > drow )
- {
- GtkWidget *widget = child->widget;
- guint widget_row = child->top_attach;
- guint widget_col = child->left_attach;
- g_object_ref( widget );
- gtk_container_remove( GTK_CONTAINER(oldtable) , widget );
- gtk_table_attach( GTK_TABLE(newtable) , widget ,
- widget_col , widget_col + 1 , widget_row - 1 , widget_row ,
- (widget_col == BINDLIST_COL_LABEL_EVCODE ? GTK_EXPAND | GTK_FILL : GTK_FILL ) , GTK_FILL , 0 , 0 );
- /* gtk_container_remove() changed the structure used to iterate; restart */
- children = oldtable->children;
- }
- else
- children = g_list_next(children);
- }
-
- /* now, replace the old GtkTable with the new one */
- table_sw = g_object_get_data( G_OBJECT(bindings_win) , "tablesw" );
- table_vp = gtk_bin_get_child( GTK_BIN(table_sw) ); /* get the viewport */
- gtk_widget_destroy( GTK_WIDGET(oldtable) ); /* destroy old GtkTable */
- gtk_container_add( GTK_CONTAINER(table_vp) , GTK_WIDGET(newtable) );
- g_object_set_data( G_OBJECT(bindings_win) , "table" , newtable ); /* update table in bindings_win */
- gtk_widget_show_all( GTK_WIDGET(newtable) );
- return;
-}
-
-
-/* the three structure types defined below
- are only used in cfg_bindbox_populate process */
-typedef struct
-{
- GtkWidget *combobox;
- gint action_code;
-}
-combosas_helper_t;
-
-typedef struct
-{
- gint action_code;
- ed_inputevent_t * inputev;
-}
-popul_binding_t;
-
-typedef struct
-{
- gint id;
- popul_binding_t *bindings;
-}
-popul_container_binding_t;
-
-static gboolean
-cfg_bindbox_populate_foreach_combosas ( GtkTreeModel * model ,
- GtkTreePath * path ,
- GtkTreeIter * iter ,
- gpointer combosas_helper_gp )
-{
- gint action_code = 0;
- combosas_helper_t *combosas_helper = combosas_helper_gp;
- gtk_tree_model_get( model , iter , 1 , &action_code , -1 );
- if ( action_code == combosas_helper->action_code )
- {
- gtk_combo_box_set_active_iter( GTK_COMBO_BOX(combosas_helper->combobox) , iter );
- return TRUE;
- }
- return FALSE;
-}
-
-static void
-cfg_bindbox_populate_foreach ( ed_inputevent_t * sinputev ,
- gint action_code ,
- gpointer popul_container_gp ,
- gpointer none )
-{
- ed_inputevent_t *inputev;
- popul_container_binding_t *popul_container = popul_container_gp;
-
- /* make a copy of the ed_inputevent_t object "sinputev" */
- inputev = g_malloc(sizeof(ed_inputevent_t));
- inputev->type = sinputev->type;
- inputev->code = sinputev->code;
- inputev->value = sinputev->value;
-
- popul_container->bindings[popul_container->id].inputev = inputev;
- popul_container->bindings[popul_container->id].action_code = action_code;
-
- popul_container->id++;
- return;
-}
-
-static int
-cfg_bindbox_populate_qsortfunc( const void * p_binding_a , const void * p_binding_b )
-{
- return ((popul_binding_t*)p_binding_a)->action_code - ((popul_binding_t*)p_binding_b)->action_code;
-}
-
-static void
-cfg_bindbox_populate( GtkWidget * bind_table , GtkWidget * bindings_win , gpointer bindings )
-{
- if ( bindings != NULL )
- {
- guint bindings_num = ed_bindings_store_size( bindings );
- popul_binding_t *popul_binding = (popul_binding_t*)calloc( bindings_num , sizeof(popul_binding_t) );
- popul_container_binding_t *popul_container = g_malloc(sizeof(popul_container_binding_t));
- gint i = 0;
-
- popul_container->bindings = popul_binding;
- popul_container->id = 0;
-
- ed_bindings_store_foreach( bindings ,
- (ed_bindings_store_foreach_func)cfg_bindbox_populate_foreach , popul_container , NULL );
-
- /* ok, now we have a popul_binding array, reorder it using action_codes */
- qsort( popul_binding , bindings_num , sizeof(popul_binding_t) , cfg_bindbox_populate_qsortfunc );
-
- /* attach to table each popul_binding */
- for ( i = 0 ; i < bindings_num ; i++ )
- {
- GList *children = GTK_TABLE(bind_table)->children;
- for ( ; children != NULL ; children = g_list_next(children) )
- {
- GtkTableChild *child = children->data;
- if ( ( (child->top_attach + 1) == GTK_TABLE(bind_table)->nrows ) &&
- ( child->left_attach == BINDLIST_COL_BT_ASSIGN ) &&
- ( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(child->widget),"last")) == 1 ) )
- {
- /* ok, this child->widget is the last assign button */
- GtkWidget *combobox = g_object_get_data(G_OBJECT(child->widget),"combobox");
- GtkWidget *label = g_object_get_data(G_OBJECT(child->widget),"label");
- GtkWidget *delbt = g_object_get_data(G_OBJECT(child->widget),"delbt");
- GtkTreeModel *combomodel;
- combosas_helper_t *combosas_helper;
- gchar *input_str;
-
- combomodel = gtk_combo_box_get_model( GTK_COMBO_BOX(combobox) );
- combosas_helper = g_malloc(sizeof(combosas_helper_t));
- combosas_helper->combobox = combobox;
- combosas_helper->action_code = popul_binding[i].action_code;
- gtk_tree_model_foreach( combomodel , cfg_bindbox_populate_foreach_combosas , combosas_helper );
- g_free( combosas_helper );
-
- g_object_set_data_full( G_OBJECT(label) , "inputevent" , popul_binding[i].inputev , g_free );
- input_str = g_strdup_printf( "%i:%i:%i" ,
- popul_binding[i].inputev->type ,
- popul_binding[i].inputev->code ,
- popul_binding[i].inputev->value );
- gtk_label_set_text( GTK_LABEL(label) , input_str );
- g_free( input_str );
-
- /* so, the current row wont' be the last one anymore;
- remove its "last" mark and enable its delete button */
- g_object_set_data( G_OBJECT(child->widget) , "last" , GINT_TO_POINTER(0) );
- gtk_widget_set_sensitive( delbt , TRUE );
- cfg_bindbox_new_empty_row( GTK_TABLE(bind_table) , bindings_win , TRUE );
-
- }
- }
- DEBUGMSG( "populating bindings window: code %i -> event %d:%d:%d\n" ,
- popul_binding[i].action_code , popul_binding[i].inputev->type,
- popul_binding[i].inputev->code, popul_binding[i].inputev->value );
- }
- g_free( popul_binding );
- g_free( popul_container );
- }
- return;
-}
-
-
-static void
-cfg_bindbox_new_empty_row( GtkTable * bind_table , GtkWidget * bindings_win , gboolean resize_table )
-{
- GtkWidget *action_combobox;
- GtkCellRenderer *action_combobox_rndr;
- GtkWidget *assign_button;
- GtkWidget *assign_label;
- GtkWidget *delete_button;
-
- /* add one row to the table */
- if ( resize_table == TRUE )
- gtk_table_resize( bind_table , bind_table->nrows + 1 , bind_table->ncols );
-
- /* action combobox */
- action_combobox = gtk_combo_box_new_with_model(
- GTK_TREE_MODEL(g_object_get_data(G_OBJECT(bindings_win),"action_store")) );
- action_combobox_rndr = gtk_cell_renderer_text_new();
- gtk_cell_layout_pack_start( GTK_CELL_LAYOUT(action_combobox) , action_combobox_rndr , TRUE );
- gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT(action_combobox) ,
- action_combobox_rndr , "text" , 0 , NULL );
- gtk_combo_box_set_active( GTK_COMBO_BOX(action_combobox) , 0 );
-
- gtk_table_attach( bind_table , action_combobox ,
- BINDLIST_COL_COMBO_ACTION , BINDLIST_COL_COMBO_ACTION + 1 ,
- bind_table->nrows - 1 , bind_table->nrows ,
- GTK_FILL , GTK_FILL , 0 , 0 );
-
- /* assign button */
- assign_button = gtk_button_new();
- gtk_button_set_image( GTK_BUTTON(assign_button) ,
- gtk_image_new_from_stock( GTK_STOCK_EXECUTE , GTK_ICON_SIZE_BUTTON ) );
- g_object_set_data( G_OBJECT(assign_button) , "last" , GINT_TO_POINTER(1) );
- g_signal_connect( G_OBJECT(assign_button) , "clicked" ,
- G_CALLBACK(cfg_bindbox_assign_binding) , bindings_win );
-
- gtk_table_attach( bind_table , assign_button ,
- BINDLIST_COL_BT_ASSIGN , BINDLIST_COL_BT_ASSIGN + 1 ,
- bind_table->nrows - 1 , bind_table->nrows ,
- GTK_FILL , GTK_FILL , 0 , 0 );
-
- /* assigned-code label */
- assign_label = gtk_label_new( "" );
- gtk_misc_set_alignment( GTK_MISC(assign_label) , 0 , 0.5 );
- gtk_misc_set_padding( GTK_MISC(assign_label) , 10 , 0 );
- g_object_set_data_full( G_OBJECT(assign_label) , "inputevent" , NULL , g_free );
-
- gtk_table_attach( bind_table , assign_label ,
- BINDLIST_COL_LABEL_EVCODE , BINDLIST_COL_LABEL_EVCODE +1 ,
- bind_table->nrows - 1 , bind_table->nrows ,
- GTK_EXPAND | GTK_FILL , GTK_FILL , 0 , 0 );
-
- /* delete button */
- delete_button = gtk_button_new();
- gtk_button_set_image( GTK_BUTTON(delete_button) ,
- gtk_image_new_from_stock( GTK_STOCK_DELETE , GTK_ICON_SIZE_BUTTON ) );
- g_signal_connect( G_OBJECT(delete_button) , "clicked" ,
- G_CALLBACK(cfg_bindbox_delete_row) , bindings_win );
- gtk_widget_set_sensitive( delete_button , FALSE );
-
- gtk_table_attach( bind_table , delete_button ,
- BINDLIST_COL_BT_DELETE , BINDLIST_COL_BT_DELETE + 1 ,
- bind_table->nrows - 1 , bind_table->nrows ,
- GTK_FILL , GTK_FILL , 0 , 0 );
-
- /* data for assign button */
- g_object_set_data( G_OBJECT(assign_button) , "combobox" , action_combobox );
- g_object_set_data( G_OBJECT(assign_button) , "label" , assign_label );
- g_object_set_data( G_OBJECT(assign_button) , "delbt" , delete_button );
-
- gtk_widget_show_all( GTK_WIDGET(bind_table) );
- return;
-}
-
-
-static void
-cfg_bindings_cb_destroy ( GtkObject * bindings_win , gpointer dev_gp )
-{
- ed_device_t *dev = dev_gp;
- /* bindings window is going to be destroyed;
- deactivate device listening and free the ed_device_t object */
- g_source_remove( dev->iochan_sid );
- ed_device_delete( dev );
-
- /* the rowreference is no longer needed as well */
- gtk_tree_row_reference_free(
- (GtkTreeRowReference*)g_object_get_data(G_OBJECT(bindings_win),"rowref") );
- return;
-}
-
-
-static void
-cfg_bindings_cb_commit ( gpointer bindings_win )
-{
- GtkTreeRowReference *rowref = g_object_get_data(G_OBJECT(bindings_win),"rowref");
- if ( gtk_tree_row_reference_valid( rowref ) == TRUE )
- {
- GtkTreeModel *model = gtk_tree_row_reference_get_model( rowref );
- GtkTreePath *path = gtk_tree_row_reference_get_path( rowref );
- GtkTreeIter iter;
- GtkTable *table;
- gpointer new_bindings = NULL, old_bindings = NULL;
-
- /****************************************************************************/
- table = g_object_get_data( G_OBJECT(bindings_win) , "table" );
- if ( table->nrows > 1 )
- {
- /* bindings defined */
- GList *children = table->children;
- gint *array_actioncode;
- ed_inputevent_t **array_inputevent;
- gint i = 0;
-
- array_actioncode = calloc( table->nrows - 1 , sizeof(gint) );
- array_inputevent = calloc( table->nrows - 1 , sizeof(ed_inputevent_t*) );
-
- for ( ; children != NULL ; children = g_list_next( children ) )
- {
- /* pick information from relevant table cells and put them in arrays */
- GtkTableChild *child = children->data;
-
- if ( ( child->top_attach + 1 ) == table->nrows )
- continue; /* skip last empty row */
-
- if ( child->left_attach == BINDLIST_COL_COMBO_ACTION )
- {
- GtkTreeModel *combomodel = gtk_combo_box_get_model( GTK_COMBO_BOX(child->widget) );
- GtkTreeIter comboiter;
- gint actioncode = 0;
-
- gtk_combo_box_get_active_iter( GTK_COMBO_BOX(child->widget) , &comboiter );
- gtk_tree_model_get( combomodel , &comboiter , 1 , &actioncode , -1 ); /* pick the action code */
- array_actioncode[child->top_attach] = actioncode;
- }
- else if ( child->left_attach == BINDLIST_COL_LABEL_EVCODE )
- {
- ed_inputevent_t *inputevent = g_object_get_data( G_OBJECT(child->widget) , "inputevent" );
- array_inputevent[child->top_attach] = inputevent;
- }
- }
-
- /* ok, now copy data from arrays to the bindings store */
- new_bindings = ed_bindings_store_new(); /* new bindings store object */
-
- for ( i = 0 ; i < ( table->nrows - 1 ) ; i++ )
- ed_bindings_store_insert( new_bindings , array_inputevent[i] , array_actioncode[i] );
-
- g_free( array_actioncode ); g_free( array_inputevent ); /* not needed anymore */
- }
- else
- {
- /* no bindings defined */
- new_bindings = NULL;
- }
- /****************************************************************************/
-
- /* pick old bindings store and delete it */
- gtk_tree_model_get_iter( model , &iter , path );
- gtk_tree_model_get( model , &iter, DEVLIST_COL_BINDINGS , &old_bindings , -1 );
- if ( old_bindings != NULL )
- ed_bindings_store_delete( old_bindings );
- /* replace it with new one */
- gtk_list_store_set( GTK_LIST_STORE(model) , &iter , DEVLIST_COL_BINDINGS , new_bindings , -1 );
- /* everything done! */
- }
- gtk_widget_destroy( GTK_WIDGET(bindings_win) );
-}
-
-
-#define action_store_add(x) { gtk_list_store_append(action_store,&iter); gtk_list_store_set(action_store,&iter,0,_(player_actions[x].desc),1,x,-1); }
-
-static void
-cfg_ui_bindings_show ( ed_device_t * dev , GtkTreeRowReference * rowref )
-{
- GtkWidget *bindings_win;
- GdkGeometry bindings_win_hints;
- GtkWidget *bindings_vbox;
- GtkWidget *bindings_info_table, *bindings_info_frame;
- GtkWidget *bindings_info_label_name_p, *bindings_info_label_name_c;
- GtkWidget *bindings_info_label_file_p, *bindings_info_label_file_c;
- GtkWidget *bindings_info_label_phys_p, *bindings_info_label_phys_c;
- GtkWidget *bindings_bind_frame, *bindings_bind_table, *bindings_bind_table_sw;
- GtkWidget *bindings_bbar_hbbox, *bindings_bbar_bt_cancel, *bindings_bbar_bt_ok;
- GtkListStore *action_store;
- GtkTreeIter iter;
- static gboolean style_added = FALSE;
-
- if ( !style_added )
- {
- /* this is used by trigger dialogs, calling it once is enough */
- gtk_rc_parse_string( "style \"noaaborder\" { GtkDialog::action-area-border = 0 }\n"
- "widget \"trigger_dlg\" style \"noaaborder\"\n" );
- style_added = TRUE;
- }
-
- bindings_win = gtk_window_new( GTK_WINDOW_TOPLEVEL );
- gtk_window_set_type_hint( GTK_WINDOW(bindings_win), GDK_WINDOW_TYPE_HINT_DIALOG );
- gtk_window_set_position( GTK_WINDOW(bindings_win), GTK_WIN_POS_CENTER );
- gtk_window_set_transient_for( GTK_WINDOW(bindings_win), GTK_WINDOW(cfg_win) );
- gtk_window_set_modal( GTK_WINDOW(bindings_win) , TRUE );
- gtk_window_set_title( GTK_WINDOW(bindings_win), _("EvDev-Plug - Bindings Configuration") );
- gtk_container_set_border_width( GTK_CONTAINER(bindings_win), 10 );
- bindings_win_hints.min_width = 400;
- bindings_win_hints.min_height = 400;
- gtk_window_set_geometry_hints( GTK_WINDOW(bindings_win) , GTK_WIDGET(bindings_win) ,
- &bindings_win_hints , GDK_HINT_MIN_SIZE );
-
- g_object_set_data( G_OBJECT(bindings_win) , "rowref" , rowref );
- g_object_set_data( G_OBJECT(bindings_win) , "trigger-win" , NULL );
-
- bindings_vbox = gtk_vbox_new( FALSE , 4 );
- gtk_container_add( GTK_CONTAINER(bindings_win) , bindings_vbox );
-
- /* action combobox model
- column 0 -> action desc
- column 1 -> action code */
- action_store = gtk_list_store_new( 2 , G_TYPE_STRING , G_TYPE_INT );
- action_store_add( ED_ACTION_PB_PLAY );
- action_store_add( ED_ACTION_PB_STOP );
- action_store_add( ED_ACTION_PB_PAUSE );
- action_store_add( ED_ACTION_PB_PREV );
- action_store_add( ED_ACTION_PB_NEXT );
- action_store_add( ED_ACTION_PB_EJECT );
- action_store_add( ED_ACTION_PL_REPEAT );
- action_store_add( ED_ACTION_PL_SHUFFLE );
- action_store_add( ED_ACTION_VOL_UP5 );
- action_store_add( ED_ACTION_VOL_DOWN5 );
- action_store_add( ED_ACTION_VOL_UP10 );
- action_store_add( ED_ACTION_VOL_DOWN10 );
- action_store_add( ED_ACTION_VOL_MUTE );
- action_store_add( ED_ACTION_WIN_MAIN );
- action_store_add( ED_ACTION_WIN_PLAYLIST );
- action_store_add( ED_ACTION_WIN_EQUALIZER );
- action_store_add( ED_ACTION_WIN_JTF );
- g_object_set_data_full( G_OBJECT(bindings_win) , "action_store" , action_store , g_object_unref );
-
- /* info table */
- bindings_info_table = gtk_table_new( 3 , 2 , FALSE );
- gtk_container_set_border_width( GTK_CONTAINER(bindings_info_table), 4 );
- bindings_info_label_name_p = gtk_label_new( "" );
- gtk_label_set_markup( GTK_LABEL(bindings_info_label_name_p) , _("<b>Name: </b>") );
- gtk_misc_set_alignment( GTK_MISC(bindings_info_label_name_p) , 0 , 0.5 );
- bindings_info_label_name_c = gtk_label_new( dev->info->name );
- gtk_misc_set_alignment( GTK_MISC(bindings_info_label_name_c) , 0 , 0.5 );
- gtk_table_attach( GTK_TABLE(bindings_info_table) , bindings_info_label_name_p , 0 , 1 , 0 , 1 ,
- GTK_FILL , GTK_FILL | GTK_EXPAND , 0 , 0 );
- gtk_table_attach( GTK_TABLE(bindings_info_table) , bindings_info_label_name_c , 1 , 2 , 0 , 1 ,
- GTK_FILL , GTK_FILL | GTK_EXPAND , 0 , 0 );
- bindings_info_label_file_p = gtk_label_new( "" );
- gtk_label_set_markup( GTK_LABEL(bindings_info_label_file_p) , _("<b>Filename: </b>") );
- gtk_misc_set_alignment( GTK_MISC(bindings_info_label_file_p) , 0 , 0.5 );
- bindings_info_label_file_c = gtk_label_new( dev->info->filename );
- gtk_misc_set_alignment( GTK_MISC(bindings_info_label_file_c) , 0 , 0.5 );
- gtk_table_attach( GTK_TABLE(bindings_info_table) , bindings_info_label_file_p , 0 , 1 , 1 , 2 ,
- GTK_FILL , GTK_FILL | GTK_EXPAND , 0 , 0 );
- gtk_table_attach( GTK_TABLE(bindings_info_table) , bindings_info_label_file_c , 1 , 2 , 1 , 2 ,
- GTK_FILL , GTK_FILL | GTK_EXPAND , 0 , 0 );
- bindings_info_label_phys_p = gtk_label_new( "" );
- gtk_label_set_markup( GTK_LABEL(bindings_info_label_phys_p) , _("<b>Phys.Address: </b>") );
- gtk_misc_set_alignment( GTK_MISC(bindings_info_label_phys_p) , 0 , 0.5 );
- bindings_info_label_phys_c = gtk_label_new( dev->info->phys );
- gtk_misc_set_alignment( GTK_MISC(bindings_info_label_phys_c) , 0 , 0.5 );
- gtk_table_attach( GTK_TABLE(bindings_info_table) , bindings_info_label_phys_p , 0 , 1 , 2 , 3 ,
- GTK_FILL , GTK_FILL | GTK_EXPAND , 0 , 0 );
- gtk_table_attach( GTK_TABLE(bindings_info_table) , bindings_info_label_phys_c , 1 , 2 , 2 , 3 ,
- GTK_FILL , GTK_FILL | GTK_EXPAND , 0 , 0 );
- bindings_info_frame = gtk_frame_new( NULL );
- gtk_container_add( GTK_CONTAINER(bindings_info_frame) , bindings_info_table );
- gtk_box_pack_start( GTK_BOX(bindings_vbox) , bindings_info_frame , FALSE , FALSE , 0 );
-
- /* bindings boxlist */
- bindings_bind_table = gtk_table_new( 1 , BINDLIST_NUMCOLS , FALSE );
- cfg_bindbox_new_empty_row( GTK_TABLE(bindings_bind_table) , bindings_win , FALSE );
- cfg_bindbox_populate( bindings_bind_table , bindings_win , dev->info->bindings );
- bindings_bind_table_sw = gtk_scrolled_window_new( NULL , NULL );
- gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(bindings_bind_table_sw) ,
- GTK_POLICY_NEVER , GTK_POLICY_ALWAYS );
- bindings_bind_frame = gtk_frame_new( NULL );
- gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW(bindings_bind_table_sw) ,
- bindings_bind_table );
- gtk_container_add( GTK_CONTAINER(bindings_bind_frame) , bindings_bind_table_sw );
- gtk_box_pack_start( GTK_BOX(bindings_vbox) , bindings_bind_frame , TRUE , TRUE , 0 );
- g_object_set_data( G_OBJECT(bindings_win) , "table" , bindings_bind_table );
- g_object_set_data( G_OBJECT(bindings_win) , "tablesw" , bindings_bind_table_sw );
-
- gtk_box_pack_start( GTK_BOX(bindings_vbox) , gtk_hseparator_new() , FALSE , FALSE , 0 );
-
- /* button bar */
- bindings_bbar_hbbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout( GTK_BUTTON_BOX(bindings_bbar_hbbox) , GTK_BUTTONBOX_START );
- bindings_bbar_bt_cancel = gtk_button_new_from_stock( GTK_STOCK_CANCEL );
- bindings_bbar_bt_ok = gtk_button_new_from_stock( GTK_STOCK_OK );
- gtk_container_add( GTK_CONTAINER(bindings_bbar_hbbox) , bindings_bbar_bt_cancel );
- gtk_container_add( GTK_CONTAINER(bindings_bbar_hbbox) , bindings_bbar_bt_ok );
- gtk_button_box_set_child_secondary( GTK_BUTTON_BOX(bindings_bbar_hbbox) , bindings_bbar_bt_cancel , TRUE );
- gtk_button_box_set_child_secondary( GTK_BUTTON_BOX(bindings_bbar_hbbox) , bindings_bbar_bt_ok , TRUE );
- gtk_box_pack_start( GTK_BOX(bindings_vbox) , bindings_bbar_hbbox , FALSE , FALSE , 0 );
-
- /* activate device listening */
- dev->iochan_sid = g_io_add_watch( dev->iochan , G_IO_IN ,
- (GIOFunc)cfg_bindbox_assign_binding_input_func , bindings_win );
-
- /* signals */
- g_signal_connect( G_OBJECT(bindings_win) , "destroy" ,
- G_CALLBACK(cfg_bindings_cb_destroy) , dev );
- g_signal_connect_swapped( G_OBJECT(bindings_bbar_bt_cancel) , "clicked" ,
- G_CALLBACK(gtk_widget_destroy) , bindings_win );
- g_signal_connect_swapped( G_OBJECT(bindings_bbar_bt_ok) , "clicked" ,
- G_CALLBACK(cfg_bindings_cb_commit) , bindings_win );
-
- gtk_widget_show_all( bindings_win );
-}
-
-
-
-/* about box */
-void
-ed_ui_about_show( void )
-{
- static GtkWidget *about_win = NULL;
- GtkWidget *about_vbox;
- GtkWidget *logoandinfo_vbox;
- GtkWidget *info_tv, *info_tv_sw, *info_tv_frame;
- GtkWidget *bbar_bbox, *bbar_bt_ok;
- GtkTextBuffer *info_tb;
- GdkGeometry abount_win_hints;
- gchar *info_tb_content = NULL;
-
- if ( about_win != NULL )
- {
- gtk_window_present( GTK_WINDOW(about_win) );
- return;
- }
-
- about_win = gtk_window_new( GTK_WINDOW_TOPLEVEL );
- gtk_window_set_type_hint( GTK_WINDOW(about_win), GDK_WINDOW_TYPE_HINT_DIALOG );
- gtk_window_set_position( GTK_WINDOW(about_win), GTK_WIN_POS_CENTER );
- gtk_window_set_title( GTK_WINDOW(about_win), _("EvDev-Plug - about") );
- abount_win_hints.min_width = 420;
- abount_win_hints.min_height = 200;
- gtk_window_set_geometry_hints( GTK_WINDOW(about_win) , GTK_WIDGET(about_win) ,
- &abount_win_hints , GDK_HINT_MIN_SIZE );
- /* gtk_window_set_resizable( GTK_WINDOW(about_win) , FALSE ); */
- gtk_container_set_border_width( GTK_CONTAINER(about_win) , 10 );
- g_signal_connect( G_OBJECT(about_win) , "destroy" , G_CALLBACK(gtk_widget_destroyed) , &about_win );
-
- about_vbox = gtk_vbox_new( FALSE , 0 );
- gtk_container_add( GTK_CONTAINER(about_win) , about_vbox );
-
- logoandinfo_vbox = gtk_vbox_new( TRUE , 2 );
-
- /* TODO make a logo or make someone do it! :)
- logo_pixbuf = gdk_pixbuf_new_from_xpm_data( (const gchar **)evdev_plug_logo_xpm );
- logo_image = gtk_image_new_from_pixbuf( logo_pixbuf );
- g_object_unref( logo_pixbuf );
-
- logo_frame = gtk_frame_new( NULL );
- gtk_container_add( GTK_CONTAINER(logo_frame) , logo_image );
- gtk_box_pack_start( GTK_BOX(logoandinfo_vbox) , logo_frame , TRUE , TRUE , 0 ); */
-
- info_tv = gtk_text_view_new();
- info_tb = gtk_text_view_get_buffer( GTK_TEXT_VIEW(info_tv) );
- gtk_text_view_set_editable( GTK_TEXT_VIEW(info_tv) , FALSE );
- gtk_text_view_set_cursor_visible( GTK_TEXT_VIEW(info_tv) , FALSE );
- gtk_text_view_set_justification( GTK_TEXT_VIEW(info_tv) , GTK_JUSTIFY_LEFT );
- gtk_text_view_set_left_margin( GTK_TEXT_VIEW(info_tv) , 10 );
-
- info_tb_content = g_strjoin( NULL , "\nEvDev-Plug " , ED_VERSION_PLUGIN ,
- _("\nplayer remote control via event devices\n"
- "http://www.develia.org/projects.php?p=audacious#evdevplug\n\n"
- "written by Giacomo Lozito\n") ,
- "< james@develia.org >\n\n" , NULL );
- gtk_text_buffer_set_text( info_tb , info_tb_content , -1 );
- g_free( info_tb_content );
-
- info_tv_sw = gtk_scrolled_window_new( NULL , NULL );
- gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(info_tv_sw) ,
- GTK_POLICY_NEVER , GTK_POLICY_ALWAYS );
- gtk_container_add( GTK_CONTAINER(info_tv_sw) , info_tv );
- info_tv_frame = gtk_frame_new( NULL );
- gtk_container_add( GTK_CONTAINER(info_tv_frame) , info_tv_sw );
- gtk_box_pack_start( GTK_BOX(logoandinfo_vbox) , info_tv_frame , TRUE , TRUE , 0 );
-
- gtk_box_pack_start( GTK_BOX(about_vbox) , logoandinfo_vbox , TRUE , TRUE , 0 );
-
- /* horizontal separator and buttons */
- gtk_box_pack_start( GTK_BOX(about_vbox) , gtk_hseparator_new() , FALSE , FALSE , 4 );
- bbar_bbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout( GTK_BUTTON_BOX(bbar_bbox) , GTK_BUTTONBOX_END );
- bbar_bt_ok = gtk_button_new_from_stock( GTK_STOCK_OK );
- g_signal_connect_swapped( G_OBJECT(bbar_bt_ok) , "clicked" ,
- G_CALLBACK(gtk_widget_destroy) , about_win );
- gtk_container_add( GTK_CONTAINER(bbar_bbox) , bbar_bt_ok );
- gtk_box_pack_start( GTK_BOX(about_vbox) , bbar_bbox , FALSE , FALSE , 0 );
-
- gtk_widget_show_all( about_win );
-}
-
-
-
-/* message box */
-void
-ed_ui_message_show ( gchar * title , gchar * message , gpointer parent_win_gp )
-{
- GtkWidget *message_win;
- GtkWindow *parent_win = NULL;
-
- if (( parent_win_gp != NULL ) && ( GTK_WIDGET_TOPLEVEL(GTK_WIDGET(parent_win_gp)) ))
- parent_win = GTK_WINDOW(parent_win_gp);
-
- message_win = gtk_message_dialog_new(
- parent_win ,
- ( parent_win != NULL ? GTK_DIALOG_DESTROY_WITH_PARENT : 0 ) ,
- GTK_MESSAGE_INFO , GTK_BUTTONS_CLOSE , "%s", message );
- gtk_window_set_title( GTK_WINDOW(message_win) , title );
-
- gtk_dialog_run( GTK_DIALOG(message_win) );
- gtk_widget_destroy( message_win );
-}
diff --git a/src/evdev-plug/ed_ui.h b/src/evdev-plug/ed_ui.h
deleted file mode 100644
index ced1e21..0000000
--- a/src/evdev-plug/ed_ui.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-*
-* Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007
-*
-* 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.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-*/
-
-#ifndef _I_ED_UI_H
-#define _I_ED_UI_H 1
-
-#include "ed_common.h"
-#include <glib.h>
-
-void ed_ui_config_show( void );
-void ed_ui_about_show( void );
-void ed_ui_message_show ( gchar * , gchar * , gpointer );
-
-#endif /* !_I_ED_UI_H */
diff --git a/src/ffaudio/Makefile b/src/ffaudio/Makefile
index 7987616..53690e7 100644
--- a/src/ffaudio/Makefile
+++ b/src/ffaudio/Makefile
@@ -1,7 +1,6 @@
PLUGIN = ffaudio${PLUGIN_SUFFIX}
-SRCS = ffaudio-audvfs.c \
- ffaudio-core.c
+SRCS = ffaudio-core.c ffaudio-io.c
include ../../buildsys.mk
include ../../extra.mk
@@ -9,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${SIMD_CFLAGS} ${FFMPEG_CFLAGS} -I../.. -std=c99 ${GCC42_CFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${FFMPEG_CFLAGS} -I../.. -std=c99 ${GCC42_CFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${FFMPEG_LIBS} -laudtag
diff --git a/src/ffaudio/ffaudio-audvfs.c b/src/ffaudio/ffaudio-audvfs.c
deleted file mode 100644
index 134b0cb..0000000
--- a/src/ffaudio/ffaudio-audvfs.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Audacious FFaudio Plugin
- * Copyright © 2009 William Pitcock <nenolod@dereferenced.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "ffaudio-stdinc.h"
-
-#include <libavutil/avstring.h>
-
-static int audvfs_read(URLContext *h, unsigned char *buf, int size)
-{
- VFSFile *file;
- file = h->priv_data;
- return vfs_fread(buf, 1, size, file);
-}
-
-#if CHECK_LIBAVFORMAT_VERSION (52, 68, 0)
-static int audvfs_write (URLContext * h, const unsigned char * buf, int size)
-#else
-static int audvfs_write (URLContext * h, unsigned char * buf, int size)
-#endif
-{
- VFSFile *file;
- file = h->priv_data;
- return vfs_fwrite(buf, 1, size, file);
-}
-
-/* XXX: use llseek */
-static int64_t audvfs_seek(URLContext *h, int64_t pos, int whence)
-{
- int64_t res, siz;
- VFSFile *file;
- file = h->priv_data;
- siz = vfs_fsize(file);
-
- if (whence == AVSEEK_SIZE)
- return siz;
-
- if (whence == SEEK_SET && pos > siz)
- return AVERROR(EPIPE);
-
- if (vfs_fseek(file, pos, whence) == 0)
- {
- if (whence == SEEK_SET)
- res = pos;
- else
- res = vfs_ftell(file);
- } else
- res = AVERROR(EPIPE);
-
- return res;
-}
-
-static int audvfs_close(URLContext *h)
-{
- VFSFile *file;
- file = h->priv_data;
- return vfs_fclose(file);
-}
-
-static int audvfsptr_open(URLContext *h, const char *filename, int flags)
-{
- VFSFile *p;
-
- av_strstart(filename, "audvfsptr:", &filename);
-
- p = (VFSFile *) strtoul(filename, NULL, 16);
- h->priv_data = vfs_dup(p);
- vfs_rewind(p);
-
- return 0;
-}
-
-URLProtocol audvfsptr_protocol = {
- .name = "audvfsptr",
- .url_open = audvfsptr_open,
- .url_read = audvfs_read,
- .url_write = audvfs_write,
- .url_seek = audvfs_seek,
- .url_close = audvfs_close,
-};
-
diff --git a/src/ffaudio/ffaudio-core.c b/src/ffaudio/ffaudio-core.c
index e215adf..f68e59d 100644
--- a/src/ffaudio/ffaudio-core.c
+++ b/src/ffaudio/ffaudio-core.c
@@ -2,6 +2,7 @@
* Audacious FFaudio Plugin
* Copyright © 2009 William Pitcock <nenolod@dereferenced.org>
* Matti Hämäläinen <ccr@tnsp.org>
+ * Copyright © 2011 John Lindgren <john.lindgren@tds.net>
*
* 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
@@ -18,6 +19,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+/*
+ * NOTE: Using libav with this code is entirely unsupported. Do so at your own
+ * risk. Any bugs filed against this plugin on systems using libav will be rejected
+ * by us.
+ */
+
#undef FFAUDIO_DOUBLECHECK /* Doublecheck probing result for debugging purposes */
#undef FFAUDIO_NO_BLACKLIST /* Don't blacklist any recognized codecs/formats */
#define FFAUDIO_USE_AUDTAG /* Use Audacious tagging library */
@@ -31,37 +38,52 @@
#ifdef FFAUDIO_USE_AUDTAG
#include <audacious/audtag.h>
#endif
-
-/***********************************************************************************
- * Plugin glue. *
- ***********************************************************************************/
+#include <libaudcore/audstrings.h>
static GMutex *ctrl_mutex = NULL;
static GCond *ctrl_cond = NULL;
static gint64 seek_value = -1;
+static gboolean stop_flag = FALSE;
-static void
-ffaudio_init(void)
+static GStaticMutex data_mutex = G_STATIC_MUTEX_INIT;
+static GHashTable * extension_dict = NULL;
+
+/* str_unref() may be a macro */
+static void str_unref_cb (void * str)
{
- avcodec_init();
- av_register_all();
+ str_unref (str);
+}
- AUDDBG("registering audvfsptr protocol\n");
-#if CHECK_LIBAVFORMAT_VERSION (52, 69, 0)
- av_register_protocol2 (& audvfsptr_protocol, sizeof audvfsptr_protocol);
-#else
- av_register_protocol (& audvfsptr_protocol);
-#endif
+static gint lockmgr (void * * mutexp, enum AVLockOp op)
+{
+ switch (op)
+ {
+ case AV_LOCK_CREATE:
+ * mutexp = g_mutex_new ();
+ break;
+ case AV_LOCK_OBTAIN:
+ g_mutex_lock (* mutexp);
+ break;
+ case AV_LOCK_RELEASE:
+ g_mutex_unlock (* mutexp);
+ break;
+ case AV_LOCK_DESTROY:
+ g_mutex_free (* mutexp);
+ break;
+ }
+
+ return 0;
+}
+
+static gboolean ffaudio_init (void)
+{
+ av_register_all();
+ av_lockmgr_register (lockmgr);
- AUDDBG("creating seek mutex/cond\n");
ctrl_mutex = g_mutex_new();
ctrl_cond = g_cond_new();
-#ifdef FFAUDIO_USE_AUDTAG
- tag_init();
-#endif
-
- AUDDBG("initialization completed\n");
+ return TRUE;
}
static void
@@ -70,135 +92,237 @@ ffaudio_cleanup(void)
AUDDBG("cleaning up\n");
g_mutex_free(ctrl_mutex);
g_cond_free(ctrl_cond);
+
+ if (extension_dict)
+ g_hash_table_destroy (extension_dict);
+
+ av_lockmgr_register (NULL);
}
-static gboolean
-ffaudio_codec_is_seekable(AVCodec *codec)
+static const gchar * ffaudio_strerror (gint error)
{
- /*
- * Blacklist certain codecs from seeking, which have problems. Codecs which have
- * problems with seeking should have bugs reported to upstream FFmpeg. --nenolod
- */
- switch (codec->id) {
-#ifndef FFAUDIO_NO_BLACKLIST
- case CODEC_ID_MUSEPACK8:
- AUDDBG("codec is blacklisted from seeking\n");
- return FALSE;
-#endif
- default:
- return TRUE;
- }
+ static gchar buf[256];
+ return (! av_strerror (error, buf, sizeof buf)) ? buf : "unknown error";
}
-static gint
-ffaudio_probe(const gchar *filename, VFSFile *file)
+static GHashTable * create_extension_dict (void)
{
- AVCodec *codec = NULL;
- AVCodecContext *c = NULL;
- AVFormatContext *ic = NULL;
- gint i, ret;
- gchar uribuf[64];
-
- AUDDBG("probing for %s, filehandle %p\n", filename, file);
+ GHashTable * dict = g_hash_table_new_full (g_str_hash, g_str_equal,
+ str_unref_cb, NULL);
- g_snprintf(uribuf, sizeof(uribuf), "audvfsptr:%p", (void *) file);
- if ((ret = av_open_input_file(&ic, uribuf, NULL, 0, NULL)) < 0) {
- AUDDBG("ic is NULL, ret %d/%s\n", ret, strerror(-ret));
- return 0;
- }
+ AVInputFormat * f;
+ for (f = av_iformat_next (NULL); f; f = av_iformat_next (f))
+ {
+ if (! f->extensions)
+ continue;
- AUDDBG("file opened, %p\n", ic);
+ gchar * exts = g_ascii_strdown (f->extensions, -1);
- for (i = 0; i < ic->nb_streams; i++)
- {
- c = ic->streams[i]->codec;
- if (c->codec_type == CODEC_TYPE_AUDIO)
+ gchar * parse, * next;
+ for (parse = exts; parse; parse = next)
{
- av_find_stream_info(ic);
- codec = avcodec_find_decoder(c->codec_id);
- if (codec != NULL)
- break;
+ next = strchr (parse, ',');
+ if (next)
+ {
+ * next = 0;
+ next ++;
+ }
+
+ g_hash_table_insert (dict, str_get(parse), f);
}
+
+ g_free (exts);
}
- if (codec == NULL)
+ return dict;
+}
+
+static AVInputFormat * get_format_by_extension (const gchar * name)
+{
+ const gchar * ext0, * sub;
+ uri_parse (name, NULL, & ext0, & sub, NULL);
+
+ if (ext0 == sub)
+ return NULL;
+
+ gchar * ext = g_ascii_strdown (ext0 + 1, sub - ext0 - 1);
+
+ AUDDBG ("Get format by extension: %s\n", name);
+ g_static_mutex_lock (& data_mutex);
+
+ if (! extension_dict)
+ extension_dict = create_extension_dict ();
+
+ AVInputFormat * f = g_hash_table_lookup (extension_dict, ext);
+ g_static_mutex_unlock (& data_mutex);
+
+ if (f)
+ AUDDBG ("Format %s.\n", f->name);
+ else
+ AUDDBG ("Format unknown.\n");
+
+ g_free (ext);
+ return f;
+}
+
+static AVInputFormat * get_format_by_content (const gchar * name, VFSFile * file)
+{
+ AUDDBG ("Get format by content: %s\n", name);
+
+ AVInputFormat * f = NULL;
+
+ guchar buf[16384 + AVPROBE_PADDING_SIZE];
+ gint size = 16;
+ gint filled = 0;
+ gint target = 100;
+ gint score = 0;
+
+ while (1)
{
- av_close_input_file(ic);
- return 0;
+ if (filled < size)
+ filled += vfs_fread (buf + filled, 1, size - filled, file);
+ if (filled < size)
+ break;
+
+ memset (buf + size, 0, AVPROBE_PADDING_SIZE);
+ AVProbeData d = {name, buf, size};
+ score = target;
+
+ f = av_probe_input_format2 (& d, TRUE, & score);
+ if (f)
+ break;
+
+ if (size < 16384)
+ size *= 4;
+ else if (target > 10)
+ target = 10;
+ else
+ break;
}
-#ifdef FFAUDIO_DOUBLECHECK
- AUDDBG("got codec %s, doublechecking\n", codec->name);
+ if (f)
+ AUDDBG ("Format %s, buffer size %d, score %d.\n", f->name, size, score);
+ else
+ AUDDBG ("Format unknown.\n");
- av_find_stream_info(ic);
+ if (vfs_fseek (file, 0, SEEK_SET) < 0)
+ ; /* ignore errors here */
- codec = avcodec_find_decoder(c->codec_id);
+ return f;
+}
- if (codec == NULL)
+static AVInputFormat * get_format (const gchar * name, VFSFile * file)
+{
+ AVInputFormat * f = get_format_by_extension (name);
+ return f ? f : get_format_by_content (name, file);
+}
+
+static AVFormatContext * open_input_file (const gchar * name, VFSFile * file)
+{
+ AVInputFormat * f = get_format (name, file);
+
+ if (! f)
{
- av_close_input_file(ic);
- return 0;
+ fprintf (stderr, "ffaudio: Unknown format for %s.\n", name);
+ return NULL;
+ }
+
+ AVFormatContext * c = avformat_alloc_context ();
+ AVIOContext * io = io_context_new (file);
+ c->pb = io;
+
+ gint ret = avformat_open_input (& c, name, f, NULL);
+
+ if (ret < 0)
+ {
+ fprintf (stderr, "ffaudio: avformat_open_input failed for %s: %s.\n", name, ffaudio_strerror (ret));
+ io_context_free (io);
+ return NULL;
}
+
+ return c;
+}
+
+static void close_input_file (AVFormatContext * c)
+{
+ AVIOContext * io = c->pb;
+
+#if CHECK_LIBAVFORMAT_VERSION (53, 24, 1)
+ avformat_close_input (&c);
+#else
+ av_close_input_file (c);
#endif
- AUDDBG("probe success for %s\n", codec->name);
- av_close_input_file(ic);
+ io_context_free (io);
+}
- return 1;
+static gboolean
+ffaudio_codec_is_seekable(AVCodec *codec)
+{
+ /*
+ * Blacklist certain codecs from seeking, which have problems. Codecs which have
+ * problems with seeking should have bugs reported to upstream FFmpeg. --nenolod
+ */
+ switch (codec->id) {
+#ifndef FFAUDIO_NO_BLACKLIST
+ case CODEC_ID_MUSEPACK8:
+ AUDDBG("codec is blacklisted from seeking\n");
+ return FALSE;
+#endif
+ default:
+ return TRUE;
+ }
+}
+
+static gboolean ffaudio_probe (const gchar * filename, VFSFile * file)
+{
+ if (! file)
+ return FALSE;
+
+ return get_format (filename, file) ? TRUE : FALSE;
}
typedef struct {
TupleValueType ttype; /* Tuple field value type */
- gint field; /* Tuple field constant or if -1, use prim_key as field key */
- gchar *prim_key; /* Primary FFmpeg metadata key, matches any with this suffix */
- gchar *alt_keys[5]; /* Fallback keys, strict (but case-insensitive) matching */
+ gint field; /* Tuple field constant */
+ gchar *keys[5]; /* Keys to match (case-insensitive), ended by NULL */
} ffaudio_meta_t;
static const ffaudio_meta_t metaentries[] = {
- { TUPLE_STRING, FIELD_ARTIST, "author", { "hor", NULL } },
- { TUPLE_STRING, FIELD_TITLE, "title", { "le", NULL } },
- { TUPLE_STRING, FIELD_ALBUM, "album", { "WM/AlbumTitle", NULL } },
- { TUPLE_STRING, FIELD_PERFORMER, "performer", { NULL } },
- { TUPLE_STRING, FIELD_COPYRIGHT, "copyright", { NULL } },
- { TUPLE_STRING, FIELD_GENRE, "genre", { "WM/Genre", NULL } },
- { TUPLE_STRING, FIELD_COMMENT, "comment", { NULL } },
- { TUPLE_STRING, -1, "lyrics", { "WM/Lyrics", NULL } },
- { TUPLE_INT, FIELD_YEAR, "year", { "WM/Year", NULL } },
- { TUPLE_INT, FIELD_TRACK_NUMBER, "track", { "WM/TrackNumber", NULL } },
+ {TUPLE_STRING, FIELD_ARTIST, {"author", "hor", "artist", NULL}},
+ {TUPLE_STRING, FIELD_TITLE, {"title", "le", NULL}},
+ {TUPLE_STRING, FIELD_ALBUM, {"album", "WM/AlbumTitle", NULL}},
+ {TUPLE_STRING, FIELD_PERFORMER, {"performer", NULL}},
+ {TUPLE_STRING, FIELD_COPYRIGHT, {"copyright", NULL}},
+ {TUPLE_STRING, FIELD_GENRE, {"genre", "WM/Genre", NULL}},
+ {TUPLE_STRING, FIELD_COMMENT, {"comment", NULL}},
+ {TUPLE_STRING, FIELD_COMPOSER, {"composer", NULL}},
+ {TUPLE_INT, FIELD_YEAR, {"year", "WM/Year", "date", NULL}},
+ {TUPLE_INT, FIELD_TRACK_NUMBER, {"track", "WM/TrackNumber", NULL}},
};
static const gint n_metaentries = sizeof(metaentries) / sizeof(metaentries[0]);
-#ifndef FFAUDIO_USE_AUDTAG
static void
ffaudio_get_meta(Tuple *tuple, AVFormatContext *ic, const ffaudio_meta_t *m)
{
- AVMetadataTag *tag = NULL;
+ if (! ic->metadata)
+ return;
- if (ic->metadata != NULL)
- {
- tag = av_metadata_get(ic->metadata, m->prim_key, NULL, AV_METADATA_IGNORE_SUFFIX);
- if (tag == NULL) {
- gint i;
- for (i = 0; tag == NULL && m->alt_keys[i] != NULL; i++)
- tag = av_metadata_get(ic->metadata, m->alt_keys[i], NULL, 0);
- }
- }
+ AVDictionaryEntry *tag = NULL;
+
+ for (gint i = 0; ! tag && m->keys[i]; i ++)
+ tag = av_dict_get (ic->metadata, m->keys[i], NULL, 0);
if (tag != NULL)
{
- const gchar *key_name = (m->field < 0) ? m->prim_key : NULL;
- gchar *tmp;
-
switch (m->ttype) {
case TUPLE_STRING:
- tmp = str_to_utf8(tag->value);
- tuple_associate_string(tuple, m->field, key_name, tmp);
- g_free(tmp);
+ tuple_set_str (tuple, m->field, NULL, tag->value);
break;
case TUPLE_INT:
- tuple_associate_int(tuple, m->field, key_name, atoi(tag->value));
+ tuple_set_int (tuple, m->field, NULL, atoi(tag->value));
break;
default:
@@ -206,26 +330,23 @@ ffaudio_get_meta(Tuple *tuple, AVFormatContext *ic, const ffaudio_meta_t *m)
}
}
}
-#endif
static void
ffaudio_get_tuple_data(Tuple *tuple, AVFormatContext *ic, AVCodecContext *c, AVCodec *codec)
{
if (ic != NULL)
{
-#ifndef FFAUDIO_USE_AUDTAG
gint i;
for (i = 0; i < n_metaentries; i++)
ffaudio_get_meta(tuple, ic, &metaentries[i]);
-#endif
- tuple_associate_int(tuple, FIELD_LENGTH, NULL, ic->duration / 1000);
- tuple_associate_int(tuple, FIELD_BITRATE, NULL, ic->bit_rate / 1000);
+ tuple_set_int(tuple, FIELD_LENGTH, NULL, ic->duration / 1000);
+ tuple_set_int(tuple, FIELD_BITRATE, NULL, ic->bit_rate / 1000);
}
if (codec != NULL && codec->long_name != NULL)
{
- tuple_associate_string(tuple, FIELD_CODEC, NULL, codec->long_name);
+ tuple_set_str(tuple, FIELD_CODEC, NULL, codec->long_name);
}
}
@@ -233,23 +354,20 @@ static Tuple * read_tuple (const gchar * filename, VFSFile * file)
{
AVCodec *codec = NULL;
AVCodecContext *c = NULL;
- AVFormatContext *ic = NULL;
AVStream *s = NULL;
gint i;
- gchar uribuf[64];
- snprintf (uribuf, sizeof uribuf, "audvfsptr:%p", (void *) file);
-
- if (av_open_input_file(&ic, uribuf, NULL, 0, NULL) < 0)
+ AVFormatContext * ic = open_input_file (filename, file);
+ if (! ic)
return NULL;
for (i = 0; i < ic->nb_streams; i++)
{
s = ic->streams[i];
c = s->codec;
- if (c->codec_type == CODEC_TYPE_AUDIO)
+ if (c->codec_type == AVMEDIA_TYPE_AUDIO)
{
- av_find_stream_info(ic);
+ avformat_find_stream_info (ic, NULL);
codec = avcodec_find_decoder(c->codec_id);
if (codec != NULL)
break;
@@ -258,35 +376,37 @@ static Tuple * read_tuple (const gchar * filename, VFSFile * file)
Tuple *tuple = tuple_new_from_filename(filename);
ffaudio_get_tuple_data(tuple, ic, c, codec);
- av_close_input_file (ic);
+ close_input_file (ic);
return tuple;
}
-#ifdef FFAUDIO_USE_AUDTAG
static Tuple *
ffaudio_probe_for_tuple(const gchar *filename, VFSFile *fd)
{
+ if (! fd)
+ return NULL;
+
Tuple * t = read_tuple (filename, fd);
if (t == NULL)
return NULL;
- if (! vfs_fseek (fd, 0, SEEK_SET))
- tag_tuple_read (t, fd);
+#ifdef FFAUDIO_USE_AUDTAG
+ vfs_rewind(fd);
+ tag_tuple_read(t, fd);
+#endif
return t;
}
+#ifdef FFAUDIO_USE_AUDTAG
static gboolean ffaudio_write_tag (const Tuple * tuple, VFSFile * file)
{
- gchar *file_uri = g_ascii_strdown(file->uri, -4);
+ if (! file)
+ return FALSE;
- if (g_str_has_suffix(file_uri, ".ape"))
- {
- g_free(file_uri);
+ if (str_has_suffix_nocase (vfs_get_filename (file), ".ape"))
return tag_tuple_write(tuple, file, TAG_TYPE_APE);
- }
- g_free(file_uri);
return tag_tuple_write(tuple, file, TAG_TYPE_NONE);
}
@@ -295,37 +415,31 @@ static gboolean ffaudio_write_tag (const Tuple * tuple, VFSFile * file)
static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
- if (file == NULL)
+ AUDDBG ("Playing %s.\n", filename);
+ if (! file)
return FALSE;
AVCodec *codec = NULL;
AVCodecContext *c = NULL;
- AVFormatContext *ic = NULL;
AVStream *s = NULL;
AVPacket pkt = {.data = NULL};
- guint8 *outbuf = NULL, *resbuf = NULL;
gint i, stream_id, errcount;
- gint in_sample_size, out_sample_size, chunk_size;
- ReSampleContext *resctx = NULL;
- gboolean codec_opened = FALSE, do_resampling = FALSE;
+ gboolean codec_opened = FALSE;
gint out_fmt;
-#ifndef FFAUDIO_USE_AUDTAG
- Tuple *tuple;
-#endif
gboolean seekable;
+ gboolean error = FALSE;
- gchar uribuf[64];
- snprintf (uribuf, sizeof uribuf, "audvfsptr:%p", (void *) file);
- if (av_open_input_file(&ic, uribuf, NULL, 0, NULL) < 0)
- return FALSE;
+ AVFormatContext * ic = open_input_file (filename, file);
+ if (! ic)
+ return FALSE;
for (i = 0; i < ic->nb_streams; i++)
{
s = ic->streams[i];
c = s->codec;
- if (c->codec_type == CODEC_TYPE_AUDIO)
+ if (c->codec_type == AVMEDIA_TYPE_AUDIO)
{
- av_find_stream_info(ic);
+ avformat_find_stream_info (ic, NULL);
codec = avcodec_find_decoder(c->codec_id);
stream_id = i;
if (codec != NULL)
@@ -334,51 +448,26 @@ static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
}
if (codec == NULL)
+ {
+ fprintf (stderr, "ffaudio: No codec found for %s.\n", filename);
goto error_exit;
+ }
AUDDBG("got codec %s for stream index %d, opening\n", codec->name, stream_id);
- if (avcodec_open(c, codec) < 0)
+ if (avcodec_open2 (c, codec, NULL) < 0)
goto error_exit;
codec_opened = TRUE;
- /* Determine if audio conversion or resampling is needed */
-#if CHECK_LIBAVCODEC_VERSION (52, 94, 3)
- in_sample_size = av_get_bits_per_sample_fmt (c->sample_fmt) / 8;
- out_sample_size = av_get_bits_per_sample_fmt (SAMPLE_FMT_S16) / 8;
-#else
- in_sample_size = av_get_bits_per_sample_format (c->sample_fmt) / 8;
- out_sample_size = av_get_bits_per_sample_format (SAMPLE_FMT_S16) / 8;
-#endif
-
- chunk_size = out_sample_size * c->channels * (c->sample_rate / 50);
-
switch (c->sample_fmt) {
case SAMPLE_FMT_U8: out_fmt = FMT_U8; break;
case SAMPLE_FMT_S16: out_fmt = FMT_S16_NE; break;
case SAMPLE_FMT_S32: out_fmt = FMT_S32_NE; break;
case SAMPLE_FMT_FLT: out_fmt = FMT_FLOAT; break;
- default: do_resampling = TRUE; break;
- }
-
- if (do_resampling)
- {
- /* Initialize resampling context */
- out_fmt = FMT_S16_NE;
-
- AUDDBG("resampling needed chn=%d, rate=%d, fmt=%d -> chn=%d, rate=%d, fmt=S16NE\n",
- c->channels, c->sample_rate, c->sample_fmt,
- c->channels, c->sample_rate);
-
- resctx = av_audio_resample_init(
- c->channels, c->channels,
- c->sample_rate, c->sample_rate,
- SAMPLE_FMT_S16, c->sample_fmt,
- 16, 10, 0, 0.8);
-
- if (resctx == NULL)
- goto error_exit;
+ default:
+ fprintf (stderr, "ffaudio: Unsupported audio format %d\n", (int) c->sample_fmt);
+ goto error_exit;
}
/* Open audio output */
@@ -386,31 +475,22 @@ static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
if (playback->output->open_audio(out_fmt, c->sample_rate, c->channels) <= 0)
{
- playback->error = TRUE;
+ error = TRUE;
goto error_exit;
}
playback->set_gain_from_playlist(playback);
- /* Allocate output buffer aligned to 16 byte boundary */
- outbuf = av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
- resbuf = av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
-
AUDDBG("setting parameters\n");
-#ifndef FFAUDIO_USE_AUDTAG
- tuple = tuple_new_from_filename(playback->filename);
- ffaudio_get_tuple_data(tuple, ic, c, codec);
- playback->set_tuple(playback, tuple);
-#endif
if (pause)
playback->output->pause(TRUE);
- playback->set_params(playback, NULL, 0, ic->bit_rate, c->sample_rate, c->channels);
+ playback->set_params(playback, ic->bit_rate, c->sample_rate, c->channels);
g_mutex_lock(ctrl_mutex);
- playback->playing = TRUE;
+ stop_flag = FALSE;
seek_value = (start_time > 0) ? start_time : -1;
playback->set_pb_ready(playback);
errcount = 0;
@@ -418,7 +498,7 @@ static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
g_mutex_unlock(ctrl_mutex);
- while (playback->playing && (stop_time < 0 ||
+ while (!stop_flag && (stop_time < 0 ||
playback->output->written_time () < stop_time))
{
AVPacket tmp;
@@ -471,11 +551,8 @@ static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
/* Decode and play packet/frame */
memcpy(&tmp, &pkt, sizeof(tmp));
- while (tmp.size > 0 && playback->playing)
+ while (tmp.size > 0 && !stop_flag)
{
- gint len, out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- guint8 *outbuf_p;
-
/* Check for seek request and bail out if we have one */
g_mutex_lock(ctrl_mutex);
if (seek_value != -1)
@@ -493,63 +570,25 @@ static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
}
g_mutex_unlock(ctrl_mutex);
- /* Decode whatever we can of the frame data */
-#if (LIBAVCODEC_VERSION_MAJOR <= 52) && (LIBAVCODEC_VERSION_MINOR <= 25)
- len = avcodec_decode_audio2(c, (gint16 *)outbuf, &out_size, tmp.data, tmp.size);
-#else
- len = avcodec_decode_audio3(c, (gint16 *)outbuf, &out_size, &tmp);
-#endif
+ AVFrame * frame = avcodec_alloc_frame ();
+ int decoded = 0;
+ int len = avcodec_decode_audio4 (c, frame, & decoded, & tmp);
+
if (len < 0)
{
- AUDDBG("codec failure, breaking out of loop\n");
+ fprintf (stderr, "ffaudio: decode_audio() failed, code %d\n", len);
break;
}
tmp.size -= len;
tmp.data += len;
- if (out_size <= 0)
+ if (! decoded)
continue;
- /* Perform audio resampling if necessary */
- if (do_resampling)
- {
- out_size = audio_resample(resctx,
- (gint16 *)resbuf, (gint16 *)outbuf,
- out_size / in_sample_size) * out_sample_size;
- outbuf_p = resbuf;
- }
- else
- outbuf_p = outbuf;
-
- /* Output audio in small blocks */
- while (out_size > 0 && playback->playing && (stop_time < 0 ||
- playback->output->written_time () < stop_time))
- {
- gint writeoff = MIN (chunk_size, out_size);
-
- playback->output->write_audio((gint16 *)outbuf_p, writeoff);
-
- outbuf_p += writeoff;
- out_size -= writeoff;
-
- /* Check for seek request and bail out if we have one */
- g_mutex_lock(ctrl_mutex);
- if (seek_value != -1)
- {
- if (!seekable)
- {
- seek_value = -1;
- g_cond_signal(ctrl_cond);
- }
- else
- {
- g_mutex_unlock(ctrl_mutex);
- break;
- }
- }
- g_mutex_unlock(ctrl_mutex);
- }
+ playback->output->write_audio (frame->data[0], FMT_SIZEOF (out_fmt)
+ * c->channels * frame->nb_samples);
+ av_free (frame);
}
if (pkt.data)
@@ -558,7 +597,7 @@ static gboolean ffaudio_play (InputPlayback * playback, const gchar * filename,
g_mutex_lock(ctrl_mutex);
- while (playback->playing && playback->output->buffer_playing())
+ while (!stop_flag && playback->output->buffer_playing())
g_usleep(20000);
playback->output->close_audio();
@@ -570,30 +609,26 @@ error_exit:
AUDDBG("decode loop finished, shutting down\n");
- playback->playing = FALSE;
+ stop_flag = TRUE;
- av_free(outbuf);
- av_free(resbuf);
- if (resctx != NULL)
- audio_resample_close(resctx);
if (pkt.data)
av_free_packet(&pkt);
if (codec_opened)
avcodec_close(c);
if (ic != NULL)
- av_close_input_file(ic);
+ close_input_file(ic);
AUDDBG("exiting thread\n");
- return ! playback->error;
+ return ! error;
}
static void ffaudio_stop(InputPlayback * playback)
{
g_mutex_lock(ctrl_mutex);
- if (playback->playing)
+ if (!stop_flag)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
playback->output->abort_write();
g_cond_signal(ctrl_cond);
}
@@ -601,21 +636,21 @@ static void ffaudio_stop(InputPlayback * playback)
g_mutex_unlock (ctrl_mutex);
}
-static void ffaudio_pause(InputPlayback * playback, gshort pause)
+static void ffaudio_pause(InputPlayback * playback, gboolean pause)
{
g_mutex_lock(ctrl_mutex);
- if (playback->playing)
+ if (!stop_flag)
playback->output->pause(pause);
g_mutex_unlock(ctrl_mutex);
}
-static void ffaudio_seek (InputPlayback * playback, gulong time)
+static void ffaudio_seek (InputPlayback * playback, gint time)
{
g_mutex_lock(ctrl_mutex);
- if (playback->playing)
+ if (!stop_flag)
{
seek_value = time;
playback->output->abort_write();
@@ -657,10 +692,21 @@ static const gchar *ffaudio_fmts[] = {
/* Handle OGG streams (FLAC/Vorbis etc.) */
"ogg",
+ /* Speex */
+ "spx",
+
/* end of table */
NULL
};
+static gchar * version_string (gint version)
+{
+ gint major = version >> 16;
+ gint minor = (version >> 8) & 0xff;
+ gint micro = version & 0xff;
+ return g_strdup_printf ("%d.%d.%d", major, minor, micro);
+}
+
static void
ffaudio_about(void)
{
@@ -668,40 +714,53 @@ ffaudio_about(void)
if (aboutbox == NULL)
{
+ gchar * avcodec_local = version_string (avcodec_version ());
+ gchar * avcodec_build = version_string (LIBAVCODEC_VERSION_INT);
+ gchar * avformat_local = version_string (avformat_version ());
+ gchar * avformat_build = version_string (LIBAVFORMAT_VERSION_INT);
+ gchar * avutil_local = version_string (avutil_version ());
+ gchar * avutil_build = version_string (LIBAVUTIL_VERSION_INT);
+
gchar *description = g_strdup_printf(
_("Multi-format audio decoding plugin for Audacious based on\n"
"FFmpeg multimedia framework (http://www.ffmpeg.org/)\n"
"Copyright (c) 2000-2009 Fabrice Bellard, et al.\n"
"\n"
- "FFmpeg libavformat %d.%d.%d, libavcodec %d.%d.%d\n"
- "\n"
"Audacious plugin by:\n"
" William Pitcock <nenolod@nenolod.net>,\n"
- " Matti Hämäläinen <ccr@tnsp.org>\n"),
- LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO,
- LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, LIBAVCODEC_VERSION_MICRO);
+ " Matti Hämäläinen <ccr@tnsp.org>\n"
+ "\n"
+ "libavcodec %s (%s)\n"
+ "libavformat %s (%s)\n"
+ "libavutil %s (%s)\n"),
+ avcodec_local, avcodec_build, avformat_local, avformat_build, avutil_local, avutil_build);
audgui_simple_message (& aboutbox, GTK_MESSAGE_INFO,
_("About FFaudio Plugin"), description);
g_free(description);
+ g_free (avcodec_local);
+ g_free (avcodec_build);
+ g_free (avformat_local);
+ g_free (avformat_build);
+ g_free (avutil_local);
+ g_free (avutil_build);
}
}
-InputPlugin ffaudio_ip = {
+AUD_INPUT_PLUGIN
+(
.init = ffaudio_init,
.cleanup = ffaudio_cleanup,
.is_our_file_from_vfs = ffaudio_probe,
-#ifdef FFAUDIO_USE_AUDTAG
.probe_for_tuple = ffaudio_probe_for_tuple,
-#endif
.play = ffaudio_play,
.stop = ffaudio_stop,
.pause = ffaudio_pause,
.mseek = ffaudio_seek,
.about = ffaudio_about,
- .description = "FFaudio Plugin",
- .vfs_extensions = ffaudio_fmts,
+ .name = "FFmpeg Support",
+ .extensions = ffaudio_fmts,
#ifdef FFAUDIO_USE_AUDTAG
.update_song_tuple = ffaudio_write_tag,
#endif
@@ -709,8 +768,4 @@ InputPlugin ffaudio_ip = {
/* FFMPEG probing takes forever on network files, so try everything else
* first. -jlindgren */
.priority = 10,
-};
-
-static InputPlugin *ffaudio_iplist[] = { &ffaudio_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN (ffaudio, ffaudio_iplist)
+)
diff --git a/src/mpg123/id3skip.c b/src/ffaudio/ffaudio-io.c
index 1eb8117..f1e9653 100644
--- a/src/mpg123/id3skip.c
+++ b/src/ffaudio/ffaudio-io.c
@@ -1,6 +1,6 @@
/*
- * id3skip.c
- * Copyright 2010 John Lindgren
+ * ffaudio-io.c
+ * Copyright 2011 John Lindgren
*
* This file is part of Audacious.
*
@@ -19,39 +19,34 @@
* using our public API to be a derived work.
*/
-#include <string.h>
-
#include <glib.h>
-#pragma pack(push) /* must be byte-aligned */
-#pragma pack(1)
-struct id3_header
-{
- gchar magic[3];
- guchar version;
- guchar revision;
- guchar flags;
- guint32 size;
-};
-#pragma pack(pop)
+#include "ffaudio-stdinc.h"
+
+#define IOBUF 4096
-static guint32 unsyncsafe (guint32 x)
+static gint read_cb (void * file, guchar * buf, gint size)
{
- return (x & 0x7f) | ((x & 0x7f00) >> 1) | ((x & 0x7f0000) >> 2) | ((x &
- 0x7f000000) >> 3);
+ return vfs_fread (buf, 1, size, file);
}
-gint id3_header_size (const guchar * data, gint size)
+static gint64 seek_cb (void * file, gint64 offset, gint whence)
{
- struct id3_header header;
-
- if (size < sizeof (struct id3_header))
- return 0;
-
- memcpy (& header, data, sizeof (struct id3_header));
+ if (whence == AVSEEK_SIZE)
+ return vfs_fsize (file);
+ if (vfs_fseek (file, offset, whence & ~(gint) AVSEEK_FORCE))
+ return -1;
+ return vfs_ftell (file);
+}
- if (memcmp (header.magic, "ID3", 3))
- return 0;
+AVIOContext * io_context_new (VFSFile * file)
+{
+ guchar * buf = av_malloc (IOBUF);
+ return avio_alloc_context (buf, IOBUF, 0, file, read_cb, NULL, seek_cb);
+}
- return sizeof (struct id3_header) + unsyncsafe (GUINT32_FROM_BE (header.size));
+void io_context_free (AVIOContext * io)
+{
+ av_free (io->buffer);
+ av_free (io);
}
diff --git a/src/ffaudio/ffaudio-stdinc.h b/src/ffaudio/ffaudio-stdinc.h
index 6384b7c..996acbe 100644
--- a/src/ffaudio/ffaudio-stdinc.h
+++ b/src/ffaudio/ffaudio-stdinc.h
@@ -27,14 +27,11 @@
#include <libavcodec/avcodec.h>
#include <libavutil/avutil.h>
-#define VERSION_INT(maj, min, mic) ((maj) * 1000000 + (min) * 1000 + (mic))
-#define CHECK_LIBAVCODEC_VERSION(maj, min, mic) (VERSION_INT \
- (LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, LIBAVCODEC_VERSION_MICRO) \
- >= VERSION_INT (maj, min, mic))
-#define CHECK_LIBAVFORMAT_VERSION(maj, min, mic) (VERSION_INT \
- (LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, \
- LIBAVFORMAT_VERSION_MICRO) >= VERSION_INT (maj, min, mic))
+#define CHECK_LIBAVCODEC_VERSION(a, b, c) (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT (a, b, c))
+#define CHECK_LIBAVFORMAT_VERSION(a, b, c) (LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT (a, b, c))
+#define CHECK_LIBAVUTIL_VERSION(a, b, c) (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT (a, b, c))
-URLProtocol audvfsptr_protocol;
+AVIOContext * io_context_new (VFSFile * file);
+void io_context_free (AVIOContext * context);
#endif
diff --git a/src/filewriter/Makefile b/src/filewriter/Makefile
index c3e54c8..0b23ecd 100644
--- a/src/filewriter/Makefile
+++ b/src/filewriter/Makefile
@@ -13,5 +13,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GLIB_CFLAGS} ${GTK_CFLAGS} ${MOWGLI_CFLAGS} ${FILEWRITER_CFLAGS} ${OGG_VORBIS_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GLIB_CFLAGS} ${GTK_CFLAGS} ${FILEWRITER_CFLAGS} ${OGG_VORBIS_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${FILEWRITER_LIBS}
diff --git a/src/filewriter/filewriter.c b/src/filewriter/filewriter.c
index 5ca3752..91b15de 100644
--- a/src/filewriter/filewriter.c
+++ b/src/filewriter/filewriter.c
@@ -20,11 +20,13 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <audacious/configdb.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+
+#include <audacious/gtk-compat.h>
#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <libaudcore/audstrings.h>
-#include <libaudcore/tuple_formatter.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -55,7 +57,7 @@ enum fileext_t
FILEEXT_MAX
};
-static gint fileext = WAV;
+static gint fileext;
static const gchar *fileext_str[FILEEXT_MAX] =
{
"wav",
@@ -73,57 +75,24 @@ static const gchar *fileext_str[FILEEXT_MAX] =
static FileWriter *plugin;
static GtkWidget *saveplace_hbox, *saveplace;
-static gboolean save_original = TRUE;
+static gboolean save_original;
static GtkWidget *filenamefrom_hbox, *filenamefrom_label, *filenamefrom_toggle;
-static gboolean filenamefromtags = TRUE;
+static gboolean filenamefromtags;
static GtkWidget *use_suffix_toggle = NULL;
-static gboolean use_suffix = FALSE;
+static gboolean use_suffix;
static GtkWidget *prependnumber_toggle;
-static gboolean prependnumber = FALSE;
+static gboolean prependnumber;
-static gchar *file_path = NULL;
+static gchar *file_path;
VFSFile *output_file = NULL;
-const Tuple *tuple = NULL;
+Tuple *tuple = NULL;
static gint64 samples_written;
-static OutputPluginInitStatus file_init(void);
-static void file_about(void);
-static gint file_open(gint fmt, gint rate, gint nch);
-static void file_write(void *ptr, gint length);
-static gint file_write_output(void *ptr, gint length);
-static void file_close(void);
-static void file_flush(gint time);
-static void file_pause(short p);
-static gint file_playing(void);
-static gint file_get_time (void);
-static void file_configure(void);
-
-OutputPlugin file_op =
-{
- .description = "FileWriter Plugin",
- .probe_priority = 0,
- .init = file_init,
- .about = file_about,
- .configure = file_configure,
- .open_audio = file_open,
- .write_audio = file_write,
- .close_audio = file_close,
- .flush = file_flush,
- .pause = file_pause,
- .buffer_playing = file_playing,
- .output_time = file_get_time,
- .written_time = file_get_time,
-};
-
-OutputPlugin *file_oplist[] = { &file_op, NULL };
-
-SIMPLE_OUTPUT_PLUGIN (filewriter, file_oplist)
-
FileWriter *plugins[FILEEXT_MAX] = {
&wav_plugin,
#ifdef FILEWRITER_MP3
@@ -145,31 +114,48 @@ static void set_plugin(void)
plugin = plugins[fileext];
}
-static OutputPluginInitStatus file_init(void)
+static gint file_write_output (void * data, gint length)
+{
+ return vfs_fwrite (data, 1, length, output_file);
+}
+
+static const gchar * const filewriter_defaults[] = {
+ "fileext", "0", /* WAV */
+ "filenamefromtags", "TRUE",
+ "prependnumber", "FALSE",
+ "save_original", "TRUE",
+ "use_suffix", "FALSE",
+ NULL};
+
+static gboolean file_init (void)
{
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
- aud_cfg_db_get_int(db, FILEWRITER_CFGID, "fileext", &fileext);
- aud_cfg_db_get_string(db, FILEWRITER_CFGID, "file_path", &file_path);
- aud_cfg_db_get_bool(db, FILEWRITER_CFGID, "save_original", &save_original);
- aud_cfg_db_get_bool(db, FILEWRITER_CFGID, "use_suffix", &use_suffix);
- aud_cfg_db_get_bool(db, FILEWRITER_CFGID, "filenamefromtags", &filenamefromtags);
- aud_cfg_db_get_bool(db, FILEWRITER_CFGID, "prependnumber", &prependnumber);
- aud_cfg_db_close(db);
-
- if (file_path == NULL)
+ aud_config_set_defaults ("filewriter", filewriter_defaults);
+
+ fileext = aud_get_int ("filewriter", "fileext");
+ filenamefromtags = aud_get_bool ("filewriter", "filenamefromtags");
+ file_path = aud_get_string ("filewriter", "file_path");
+ prependnumber = aud_get_bool ("filewriter", "prependnumber");
+ save_original = aud_get_bool ("filewriter", "save_original");
+ use_suffix = aud_get_bool ("filewriter", "use_suffix");
+
+ if (! file_path[0])
{
- g_return_val_if_fail (getenv ("HOME") != NULL, OUTPUT_PLUGIN_INIT_FAIL);
+ g_return_val_if_fail (getenv ("HOME") != NULL, FALSE);
file_path = g_filename_to_uri (getenv ("HOME"), NULL, NULL);
- g_return_val_if_fail (file_path != NULL, OUTPUT_PLUGIN_INIT_FAIL);
+ g_return_val_if_fail (file_path != NULL, FALSE);
}
set_plugin();
if (plugin->init)
plugin->init(&file_write_output);
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
+ return TRUE;
+}
+
+static void file_cleanup (void)
+{
+ g_free (file_path);
+ file_path = NULL;
}
void file_about (void)
@@ -178,7 +164,7 @@ void file_about (void)
audgui_simple_message (& dialog, GTK_MESSAGE_INFO,
_("About FileWriter-Plugin"),
- _("FileWriter-Plugin\n\n"
+ "FileWriter-Plugin\n\n"
"This program is free software; you can redistribute it and/or modify\n"
"it under the terms of the GNU General Public License as published by\n"
"the Free Software Foundation; either version 2 of the License, or\n"
@@ -192,7 +178,7 @@ void file_about (void)
"You should have received a copy of the GNU General Public License\n"
"along with this program; if not, write to the Free Software\n"
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
- "USA."));
+ "USA.");
}
static VFSFile * safe_create (const gchar * filename)
@@ -243,19 +229,22 @@ static gint file_open(gint fmt, gint rate, gint nch)
if (filenamefromtags)
{
- gchar *utf8 = tuple_formatter_make_title_string(tuple, aud_get_gentitle_format());
-
+ gchar * utf8 = aud_playlist_entry_get_title (playlist, pos, FALSE);
string_replace_char (utf8, '/', ' ');
- filename = string_encode_percent (utf8, FALSE);
- g_free (utf8);
+
+ gchar buf[3 * strlen (utf8) + 1];
+ str_encode_percent (utf8, -1, buf);
+ str_unref (utf8);
+
+ filename = g_strdup (buf);
}
else
{
- const gchar * original = strrchr (aud_playlist_entry_get_filename
- (playlist, pos), '/');
-
+ temp = aud_playlist_entry_get_filename (playlist, pos);
+ gchar * original = strrchr (temp, '/');
g_return_val_if_fail (original != NULL, 0);
filename = g_strdup (original + 1);
+ str_unref (temp);
if (!use_suffix)
if ((temp = strrchr(filename, '.')) != NULL)
@@ -275,7 +264,9 @@ static gint file_open(gint fmt, gint rate, gint nch)
if (save_original)
{
- directory = g_strdup (aud_playlist_entry_get_filename (playlist, pos));
+ temp = aud_playlist_entry_get_filename (playlist, pos);
+ directory = g_strdup (temp);
+ str_unref (temp);
temp = strrchr (directory, '/');
g_return_val_if_fail (temp != NULL, 0);
temp[1] = 0;
@@ -318,9 +309,8 @@ static void file_write(void *ptr, gint length)
samples_written += length / FMT_SIZEOF (input.format);
}
-static gint file_write_output(void *ptr, gint length)
+static void file_drain (void)
{
- return vfs_fwrite(ptr, 1, length, output_file);
}
static void file_close(void)
@@ -331,23 +321,36 @@ static void file_close(void)
if (output_file != NULL)
vfs_fclose(output_file);
output_file = NULL;
+
+ if (tuple)
+ {
+ tuple_unref (tuple);
+ tuple = NULL;
+ }
}
static void file_flush(gint time)
{
- file_close();
- file_open(input.format, input.frequency, input.channels);
-
samples_written = time * (gint64) input.channels * input.frequency / 1000;
}
-static void file_pause(short p)
+static void file_set_written_time (gint time)
{
+ /* Guesswork:
+ * If time = 0, we are starting a new song and need to open a new file. If
+ * time > 0, we have already done this, and we are just setting the time
+ * counter. */
+ if (! time)
+ {
+ file_close ();
+ file_open (input.format, input.frequency, input.channels);
+ }
+
+ samples_written = time * (gint64) input.channels * input.frequency / 1000;
}
-static gint file_playing(void)
+static void file_pause (gboolean p)
{
- return 0;
}
static gint file_get_time (void)
@@ -357,8 +360,6 @@ static gint file_get_time (void)
static void configure_ok_cb(gpointer data)
{
- mcs_handle_t *db;
-
fileext = gtk_combo_box_get_active(GTK_COMBO_BOX(fileext_combo));
g_free (file_path);
@@ -370,15 +371,12 @@ static void configure_ok_cb(gpointer data)
prependnumber =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prependnumber_toggle));
- db = aud_cfg_db_open();
- aud_cfg_db_set_int(db, FILEWRITER_CFGID, "fileext", fileext);
- aud_cfg_db_set_string(db, FILEWRITER_CFGID, "file_path", file_path);
- aud_cfg_db_set_bool(db, FILEWRITER_CFGID, "save_original", save_original);
- aud_cfg_db_set_bool(db, FILEWRITER_CFGID, "filenamefromtags", filenamefromtags);
- aud_cfg_db_set_bool(db, FILEWRITER_CFGID, "use_suffix", use_suffix);
- aud_cfg_db_set_bool(db, FILEWRITER_CFGID, "prependnumber", prependnumber);
-
- aud_cfg_db_close(db);
+ aud_set_int ("filewriter", "fileext", fileext);
+ aud_set_bool ("filewriter", "filenamefromtags", filenamefromtags);
+ aud_set_string ("filewriter", "file_path", file_path);
+ aud_set_bool ("filewriter", "prependnumber", prependnumber);
+ aud_set_bool ("filewriter", "save_original", save_original);
+ aud_set_bool ("filewriter", "use_suffix", use_suffix);
gtk_widget_destroy(configure_win);
if (path_dirbrowser)
@@ -449,18 +447,15 @@ static void configure_destroy(void)
static void file_configure(void)
{
- GtkTooltips *use_suffix_tooltips;
-
if (!configure_win)
{
configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_type_hint(GTK_WINDOW(configure_win), GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_signal_connect(GTK_OBJECT(configure_win), "destroy",
- GTK_SIGNAL_FUNC(configure_destroy), NULL);
- gtk_signal_connect(GTK_OBJECT(configure_win), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed),
- &configure_win);
+ g_signal_connect (configure_win, "destroy", (GCallback)
+ configure_destroy, NULL);
+ g_signal_connect (configure_win, "destroy", (GCallback)
+ gtk_widget_destroyed, & configure_win);
gtk_window_set_title(GTK_WINDOW(configure_win),
_("File Writer Configuration"));
@@ -478,16 +473,16 @@ static void file_configure(void)
fileext_label = gtk_label_new(_("Output file format:"));
gtk_box_pack_start(GTK_BOX(fileext_hbox), fileext_label, FALSE, FALSE, 0);
- fileext_combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text(GTK_COMBO_BOX(fileext_combo), "WAV");
+ fileext_combo = gtk_combo_box_text_new ();
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) fileext_combo, "WAV");
#ifdef FILEWRITER_MP3
- gtk_combo_box_append_text(GTK_COMBO_BOX(fileext_combo), "MP3");
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) fileext_combo, "MP3");
#endif
#ifdef FILEWRITER_VORBIS
- gtk_combo_box_append_text(GTK_COMBO_BOX(fileext_combo), "Vorbis");
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) fileext_combo, "Vorbis");
#endif
#ifdef FILEWRITER_FLAC
- gtk_combo_box_append_text(GTK_COMBO_BOX(fileext_combo), "FLAC");
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) fileext_combo, "FLAC");
#endif
gtk_box_pack_start(GTK_BOX(fileext_hbox), fileext_combo, FALSE, FALSE, 0);
gtk_combo_box_set_active(GTK_COMBO_BOX(fileext_combo), fileext);
@@ -514,13 +509,11 @@ static void file_configure(void)
saveplace = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(saveplace),
_("Save into custom directory"));
- g_signal_connect(G_OBJECT(saveplace), "toggled", G_CALLBACK(saveplace_custom_cb), NULL);
- gtk_box_pack_start(GTK_BOX(saveplace_hbox), saveplace, FALSE, FALSE, 0);
-
if (!save_original)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(saveplace), TRUE);
-
+ g_signal_connect(G_OBJECT(saveplace), "toggled", G_CALLBACK(saveplace_custom_cb), NULL);
+ gtk_box_pack_start(GTK_BOX(saveplace_hbox), saveplace, FALSE, FALSE, 0);
path_hbox = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(configure_vbox), path_hbox, FALSE, FALSE, 0);
@@ -570,9 +563,6 @@ static void file_configure(void)
use_suffix_toggle = gtk_check_button_new_with_label(_("Don't strip file name extension"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(use_suffix_toggle), use_suffix);
gtk_box_pack_start(GTK_BOX(configure_vbox), use_suffix_toggle, FALSE, FALSE, 0);
- use_suffix_tooltips = gtk_tooltips_new();
- gtk_tooltips_set_tip(use_suffix_tooltips, use_suffix_toggle, _("If enabled, the extension from the original filename will not be stripped before adding the new file extension to the end."), NULL);
- gtk_tooltips_enable(use_suffix_tooltips);
if (filenamefromtags)
gtk_widget_set_sensitive(use_suffix_toggle, FALSE);
@@ -594,23 +584,40 @@ static void file_configure(void)
configure_bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(configure_bbox),
GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(configure_bbox), 5);
gtk_box_pack_start(GTK_BOX(configure_vbox), configure_bbox,
FALSE, FALSE, 0);
configure_cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- gtk_signal_connect_object(GTK_OBJECT(configure_cancel), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(configure_win));
+ g_signal_connect_swapped (configure_cancel, "clicked", (GCallback)
+ gtk_widget_destroy, configure_win);
gtk_box_pack_start(GTK_BOX(configure_bbox), configure_cancel,
TRUE, TRUE, 0);
configure_ok = gtk_button_new_from_stock(GTK_STOCK_OK);
- gtk_signal_connect(GTK_OBJECT(configure_ok), "clicked",
- GTK_SIGNAL_FUNC(configure_ok_cb), NULL);
+ g_signal_connect (configure_ok, "clicked", (GCallback) configure_ok_cb,
+ NULL);
gtk_box_pack_start(GTK_BOX(configure_bbox), configure_ok,
TRUE, TRUE, 0);
gtk_widget_show_all(configure_win);
}
}
+
+AUD_OUTPUT_PLUGIN
+(
+ .name = "FileWriter",
+ .init = file_init,
+ .cleanup = file_cleanup,
+ .about = file_about,
+ .configure = file_configure,
+ .probe_priority = 0,
+ .open_audio = file_open,
+ .close_audio = file_close,
+ .write_audio = file_write,
+ .drain = file_drain,
+ .written_time = file_get_time,
+ .output_time = file_get_time,
+ .pause = file_pause,
+ .flush = file_flush,
+ .set_written_time = file_set_written_time,
+)
diff --git a/src/filewriter/filewriter.h b/src/filewriter/filewriter.h
index bffdf81..41beb74 100644
--- a/src/filewriter/filewriter.h
+++ b/src/filewriter/filewriter.h
@@ -32,7 +32,6 @@
#include <audacious/plugin.h>
#include <audacious/i18n.h>
-
struct format_info {
gint format;
int frequency;
@@ -43,7 +42,7 @@ extern struct format_info input;
extern VFSFile *output_file;
extern guint64 offset;
-extern const Tuple * tuple;
+extern Tuple * tuple;
typedef gint (*write_output_callback)(void *ptr, gint length);
diff --git a/src/filewriter/flac.c b/src/filewriter/flac.c
index 1250043..c00354a 100644
--- a/src/filewriter/flac.c
+++ b/src/filewriter/flac.c
@@ -26,6 +26,7 @@
#include <FLAC/all.h>
#include <stdlib.h>
+
static gint flac_open(void);
static void flac_write(gpointer data, gint length);
static void flac_close(void);
@@ -72,16 +73,38 @@ static FLAC__StreamEncoderTellStatus flac_tell_cb(const FLAC__StreamEncoder *enc
return FLAC__STREAM_ENCODER_TELL_STATUS_OK;
}
-#define INSERT_VORBIS_COMMENT(t, keyword) \
- if (t) \
- { \
- gchar *scratch = g_strdup_printf(keyword, t); \
- comment_entry.length = strlen(scratch); \
- comment_entry.entry = (guchar *) scratch; \
- FLAC__metadata_object_vorbiscomment_insert_comment(meta, \
- meta->data.vorbis_comment.num_comments, comment_entry, TRUE); \
- g_free(scratch); \
- }
+static void insert_vorbis_comment (FLAC__StreamMetadata * meta,
+ const char * name, const Tuple * tuple, int field)
+{
+ TupleValueType type = tuple_field_get_type (field);
+ if (tuple_get_value_type (tuple, field, NULL) != type)
+ return;
+
+ char * temp;
+
+ switch (type)
+ {
+ case TUPLE_INT:;
+ int ival = tuple_get_int (tuple, field, NULL);
+ temp = g_strdup_printf ("%s=%d", name, ival);
+ break;
+ case TUPLE_STRING:;
+ char * sval = tuple_get_str (tuple, field, NULL);
+ temp = g_strdup_printf ("%s=%s", name, sval);
+ str_unref (sval);
+ default:
+ return;
+ }
+
+ FLAC__StreamMetadata_VorbisComment_Entry comment;
+ comment.length = strlen (temp);
+ comment.entry = (unsigned char *) temp;
+
+ FLAC__metadata_object_vorbiscomment_insert_comment (meta,
+ meta->data.vorbis_comment.num_comments, comment, TRUE);
+
+ g_free (temp);
+}
static gint flac_open(void)
{
@@ -95,18 +118,16 @@ static gint flac_open(void)
if (tuple)
{
FLAC__StreamMetadata *meta;
- FLAC__StreamMetadata_VorbisComment_Entry comment_entry;
-
meta = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
- INSERT_VORBIS_COMMENT(tuple_get_string(tuple, FIELD_TITLE, NULL), "title=%s");
- INSERT_VORBIS_COMMENT(tuple_get_string(tuple, FIELD_ARTIST, NULL), "artist=%s");
- INSERT_VORBIS_COMMENT(tuple_get_string(tuple, FIELD_ALBUM, NULL), "album=%s");
- INSERT_VORBIS_COMMENT(tuple_get_string(tuple, FIELD_GENRE, NULL), "genre=%s");
- INSERT_VORBIS_COMMENT(tuple_get_string(tuple, FIELD_COMMENT, NULL), "comment=%s");
- INSERT_VORBIS_COMMENT(tuple_get_string(tuple, FIELD_DATE, NULL), "date=%s");
- INSERT_VORBIS_COMMENT(tuple_get_int(tuple, FIELD_YEAR, NULL), "year=%d");
- INSERT_VORBIS_COMMENT(tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL), "tracknumber=%d");
+ insert_vorbis_comment (meta, "title", tuple, FIELD_TITLE);
+ insert_vorbis_comment (meta, "artist", tuple, FIELD_ARTIST);
+ insert_vorbis_comment (meta, "album", tuple, FIELD_ALBUM);
+ insert_vorbis_comment (meta, "genre", tuple, FIELD_GENRE);
+ insert_vorbis_comment (meta, "comment", tuple, FIELD_COMMENT);
+ insert_vorbis_comment (meta, "date", tuple, FIELD_DATE);
+ insert_vorbis_comment (meta, "year", tuple, FIELD_YEAR);
+ insert_vorbis_comment (meta, "tracknumber", tuple, FIELD_TRACK_NUMBER);
FLAC__stream_encoder_set_metadata(flac_encoder, &meta, 1);
}
diff --git a/src/filewriter/mp3.c b/src/filewriter/mp3.c
index e1b323f..5a11715 100644
--- a/src/filewriter/mp3.c
+++ b/src/filewriter/mp3.c
@@ -28,8 +28,15 @@
#include <lame/lame.h>
-#include <audacious/configdb.h>
#include <audacious/debug.h>
+#include <audacious/misc.h>
+#include <audacious/gtk-compat.h>
+
+#define MODES 4
+enum {MODE_AUTO = 4, MODE_JOINT = 1, MODE_STEREO = 0, MODE_MONO = 3};
+static const gint modes[MODES] = {MODE_AUTO, MODE_JOINT, MODE_STEREO, MODE_MONO};
+static const gchar * const mode_names[MODES] = {N_("Auto"), N_("Joint Stereo"),
+ N_("Stereo"), N_("Mono")};
static void mp3_init(write_output_callback write_output_func);
static void mp3_configure(void);
@@ -52,32 +59,25 @@ static GtkWidget *configure_win = NULL;
static GtkWidget *configure_bbox, *configure_ok, *configure_cancel;
static GtkWidget *alg_quality_spin;
static GtkWidget *alg_quality_hbox;
-static GtkObject *alg_quality_adj;
+static GtkAdjustment * alg_quality_adj;
static GtkWidget *vbox, *notebook;
static GtkWidget *quality_vbox, *quality_hbox1, *alg_quality_frame;
static GtkWidget *enc_quality_frame, *enc_quality_label1, *enc_quality_label2;
-static GtkWidget *enc_radio1, *enc_radio2, *bitrate_option_menu, *bitrate_menu,
- *bitrate_menu_item;
+static GtkWidget * enc_radio1, * enc_radio2;
static GtkWidget *compression_spin;
-static GtkObject *compression_adj;
-static GtkWidget *mode_hbox, *mode_option_menu, *mode_menu, *mode_frame,
- *mode_menu_item;
-static GtkWidget *samplerate_hbox, *samplerate_option_menu, *samplerate_menu,
- *samplerate_label, *samplerate_frame, *samplerate_menu_item;
+static GtkAdjustment * compression_adj;
+static GtkWidget * mode_hbox, * mode_frame;
+static GtkWidget * samplerate_hbox, * samplerate_label, * samplerate_frame;
static GtkWidget *misc_frame, *misc_vbox, *enforce_iso_toggle,
*error_protection_toggle;
-static GtkTooltips *quality_tips, *vbr_tips, *tags_tips;
static GtkWidget *vbr_vbox, *vbr_toggle, *vbr_options_vbox, *vbr_type_frame,
*vbr_type_hbox, *vbr_type_radio1, *vbr_type_radio2;
-static GtkWidget *abr_frame, *abr_option_menu, *abr_menu, *abr_menu_item,
- *abr_hbox, *abr_label;
+static GtkWidget * abr_frame, * abr_hbox, * abr_label;
static GtkWidget *vbr_frame, *vbr_options_vbox2;
-static GtkWidget *vbr_options_hbox1, *vbr_min_option_menu, *vbr_min_menu,
- *vbr_min_menu_item, *vbr_min_label;
-static GtkWidget *vbr_options_hbox2, *vbr_max_option_menu, *vbr_max_menu,
- *vbr_max_menu_item, *vbr_max_label, *enforce_min_toggle;
+static GtkWidget * vbr_options_hbox1, * vbr_min_label;
+static GtkWidget * vbr_options_hbox2, * vbr_max_label, * enforce_min_toggle;
static GtkWidget *vbr_options_hbox3, *vbr_quality_spin, *vbr_quality_label;
-static GtkObject *vbr_quality_adj;
+static GtkAdjustment * vbr_quality_adj;
static GtkWidget *xing_header_toggle;
static GtkWidget *tags_vbox, *tags_frames_frame, *tags_frames_hbox,
*tags_copyright_toggle, *tags_original_toggle;
@@ -89,28 +89,6 @@ static GtkWidget *enc_quality_vbox, *hbox1, *hbox2;
static unsigned long numsamples = 0;
static int inside;
-static gint vbr_on = 0;
-static gint vbr_type = 0;
-static gint vbr_min_val = 32;
-static gint vbr_max_val = 320;
-static gint enforce_min_val = 0;
-static gint vbr_quality_val = 4;
-static gint abr_val = 128;
-static gint toggle_xing_val = 1;
-static gint mark_original_val = 1;
-static gint mark_copyright_val = 0;
-static gint force_v2_val = 0;
-static gint only_v1_val = 0;
-static gint only_v2_val = 0;
-static gint algo_quality_val = 5;
-static gint out_samplerate_val = 0;
-static gint bitrate_val = 128;
-static gfloat compression_val = 11;
-static gint enc_toggle_val = 0;
-static gint audio_mode_val = 4;
-static gint enforce_iso_val = 0;
-static gint error_protect_val = 0;
-
static gint available_samplerates[] =
{ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 } ;
@@ -137,12 +115,12 @@ static gint write_buffer_size;
static void free_lameid3(lameid3_t *p)
{
- g_free(p->track_name);
- g_free(p->album_name);
- g_free(p->performer);
- g_free(p->genre);
- g_free(p->year);
- g_free(p->track_number);
+ str_unref (p->track_name);
+ str_unref (p->album_name);
+ str_unref (p->performer);
+ str_unref (p->genre);
+ str_unref (p->year);
+ str_unref (p->track_number);
p->track_name = NULL;
p->album_name = NULL;
@@ -157,41 +135,63 @@ static void lame_debugf(const char *format, va_list ap)
(void) vfprintf(stdout, format, ap);
}
+static const gchar * const mp3_defaults[] = {
+ "vbr_on", "0",
+ "vbr_type", "0",
+ "vbr_min_val", "32",
+ "vbr_max_val", "320",
+ "enforce_min_val", "0",
+ "vbr_quality_val", "4",
+ "abr_val", "128",
+ "toggle_xing_val", "1",
+ "mark_original_val", "1",
+ "mark_copyright_val", "0",
+ "force_v2_val", "0",
+ "only_v1_val", "0",
+ "only_v2_val", "0",
+ "algo_quality_val", "5",
+ "out_samplerate_val", "0",
+ "bitrate_val", "128",
+ "compression_val", "11",
+ "enc_toggle_val", "0",
+ "audio_mode_val", "4", /* MODE_AUTO */
+ "enforce_iso_val", "0",
+ "error_protect_val", "0",
+ NULL};
+
+static gint vbr_on, vbr_type, vbr_min_val, vbr_max_val, enforce_min_val,
+ vbr_quality_val, abr_val, toggle_xing_val, mark_original_val,
+ mark_copyright_val, force_v2_val, only_v1_val, only_v2_val, algo_quality_val,
+ out_samplerate_val, bitrate_val;
+static gfloat compression_val;
+static gint enc_toggle_val, audio_mode_val, enforce_iso_val, error_protect_val;
+
static void mp3_init(write_output_callback write_output_func)
{
- mcs_handle_t *db = aud_cfg_db_open();
- aud_cfg_db_get_int(db, "filewriter_mp3", "vbr_on", &vbr_on);
- aud_cfg_db_get_int(db, "filewriter_mp3", "vbr_type", &vbr_type);
- aud_cfg_db_get_int(db, "filewriter_mp3", "vbr_min_val", &vbr_min_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "vbr_max_val", &vbr_max_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "enforce_min_val",
- &enforce_min_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "vbr_quality_val",
- &vbr_quality_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "abr_val", &abr_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "toggle_xing_val",
- &toggle_xing_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "mark_original_val",
- &mark_original_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "mark_copyright_val",
- &mark_copyright_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "force_v2_val", &force_v2_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "only_v1_val", &only_v1_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "only_v2_val", &only_v2_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "algo_quality_val",
- &algo_quality_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "out_samplerate_val",
- &out_samplerate_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "bitrate_val", &bitrate_val);
- aud_cfg_db_get_float(db, "filewriter_mp3", "compression_val",
- &compression_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "enc_toggle_val", &enc_toggle_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "audio_mode_val", &audio_mode_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "enforce_iso_val",
- &enforce_iso_val);
- aud_cfg_db_get_int(db, "filewriter_mp3", "error_protect_val",
- &error_protect_val);
- aud_cfg_db_close(db);
+ aud_config_set_defaults ("filewriter_mp3", mp3_defaults);
+
+ vbr_on = aud_get_int ("filewriter_mp3", "vbr_on");
+ vbr_type = aud_get_int ("filewriter_mp3", "vbr_type");
+ vbr_min_val = aud_get_int ("filewriter_mp3", "vbr_min_val");
+ vbr_max_val = aud_get_int ("filewriter_mp3", "vbr_max_val");
+ enforce_min_val = aud_get_int ("filewriter_mp3", "enforce_min_val");
+ vbr_quality_val = aud_get_int ("filewriter_mp3", "vbr_quality_val");
+ abr_val = aud_get_int ("filewriter_mp3", "abr_val");
+ toggle_xing_val = aud_get_int ("filewriter_mp3", "toggle_xing_val");
+ mark_original_val = aud_get_int ("filewriter_mp3", "mark_original_val");
+ mark_copyright_val = aud_get_int ("filewriter_mp3", "mark_copyright_val");
+ force_v2_val = aud_get_int ("filewriter_mp3", "force_v2_val");
+ only_v1_val = aud_get_int ("filewriter_mp3", "only_v1_val");
+ only_v2_val = aud_get_int ("filewriter_mp3", "only_v2_val");
+ algo_quality_val = aud_get_int ("filewriter_mp3", "algo_quality_val");
+ out_samplerate_val = aud_get_int ("filewriter_mp3", "out_samplerate_val");
+ bitrate_val = aud_get_int ("filewriter_mp3", "bitrate_val");
+ compression_val = aud_get_double ("filewriter_mp3", "compression_val");
+ enc_toggle_val = aud_get_int ("filewriter_mp3", "enc_toggle_val");
+ audio_mode_val = aud_get_int ("filewriter_mp3", "audio_mode_val");
+ enforce_iso_val = aud_get_int ("filewriter_mp3", "enforce_iso_val");
+ error_protect_val = aud_get_int ("filewriter_mp3", "error_protect_val");
+
if (write_output_func)
write_output=write_output_func;
}
@@ -209,28 +209,22 @@ static gint mp3_open(void)
if (tuple) {
/* XXX write UTF-8 even though libmp3lame does id3v2.3. --yaz */
- lameid3.track_name =
- g_strdup(tuple_get_string(tuple, FIELD_TITLE, NULL));
+ lameid3.track_name = tuple_get_str (tuple, FIELD_TITLE, NULL);
id3tag_set_title(gfp, lameid3.track_name);
- lameid3.performer =
- g_strdup(tuple_get_string(tuple, FIELD_ARTIST, NULL));
+ lameid3.performer = tuple_get_str (tuple, FIELD_ARTIST, NULL);
id3tag_set_artist(gfp, lameid3.performer);
- lameid3.album_name =
- g_strdup(tuple_get_string(tuple, FIELD_ALBUM, NULL));
+ lameid3.album_name = tuple_get_str (tuple, FIELD_ALBUM, NULL);
id3tag_set_album(gfp, lameid3.album_name);
- lameid3.genre =
- g_strdup(tuple_get_string(tuple, FIELD_GENRE, NULL));
+ lameid3.genre = tuple_get_str (tuple, FIELD_GENRE, NULL);
id3tag_set_genre(gfp, lameid3.genre);
- lameid3.year =
- g_strdup_printf("%d", tuple_get_int(tuple, FIELD_YEAR, NULL));
+ lameid3.year = str_printf ("%d", tuple_get_int (tuple, FIELD_YEAR, NULL));
id3tag_set_year(gfp, lameid3.year);
- lameid3.track_number =
- g_strdup_printf("%d", tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL));
+ lameid3.track_number = str_printf ("%d", tuple_get_int (tuple, FIELD_TRACK_NUMBER, NULL));
id3tag_set_track(gfp, lameid3.track_number);
if (force_v2_val) {
@@ -396,7 +390,7 @@ static void mp3_close(void)
/* Configuration */
/*****************/
-/* Various Singal-Fuctions */
+/* Various Signal-Fuctions */
static void algo_qual(GtkAdjustment * adjustment, gpointer user_data)
{
@@ -407,28 +401,31 @@ static void algo_qual(GtkAdjustment * adjustment, gpointer user_data)
}
-static void samplerate_activate(GtkMenuItem * menuitem, gpointer user_data)
+static void samplerate_changed (GtkComboBox * combo)
{
+ gint i = gtk_combo_box_get_active (combo) - 1;
- out_samplerate_val = GPOINTER_TO_INT(user_data);
-
+ if (i >= 0 && i < G_N_ELEMENTS (available_samplerates))
+ out_samplerate_val = available_samplerates[i];
+ else
+ out_samplerate_val = 0;
}
-static void bitrate_activate(GtkMenuItem * menuitem, gpointer user_data)
+static void bitrate_changed (GtkComboBox * combo)
{
+ gint i = gtk_combo_box_get_active (combo);
- bitrate_val = GPOINTER_TO_INT(user_data);
-
+ if (i >= 0 && i < G_N_ELEMENTS (available_bitrates))
+ bitrate_val = available_bitrates[i];
+ else
+ bitrate_val = 128;
}
static void compression_change(GtkAdjustment * adjustment,
gpointer user_data)
{
-
- compression_val =
- gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON
- (compression_spin));
-
+ compression_val = gtk_spin_button_get_value ((GtkSpinButton *)
+ compression_spin);
}
static void encoding_toggle(GtkToggleButton * togglebutton,
@@ -439,11 +436,14 @@ static void encoding_toggle(GtkToggleButton * togglebutton,
}
-static void mode_activate(GtkMenuItem * menuitem, gpointer user_data)
+static void mode_changed (GtkComboBox * combo)
{
+ gint i = gtk_combo_box_get_active (combo);
- audio_mode_val = GPOINTER_TO_INT(user_data);
-
+ if (i >= 0 && i < MODES)
+ audio_mode_val = modes[i];
+ else
+ audio_mode_val = MODE_AUTO;
}
static void toggle_enforce_iso(GtkToggleButton * togglebutton,
@@ -514,18 +514,24 @@ static void vbr_abr_toggle(GtkToggleButton * togglebutton,
}
}
-static void vbr_min_activate(GtkMenuItem * menuitem, gpointer user_data)
+static void vbr_min_changed (GtkComboBox * combo)
{
+ gint i = gtk_combo_box_get_active (combo);
- vbr_min_val = GPOINTER_TO_INT(user_data);
-
+ if (i >= 0 && i < G_N_ELEMENTS (available_bitrates))
+ vbr_min_val = available_bitrates[i];
+ else
+ vbr_min_val = 32;
}
-static void vbr_max_activate(GtkMenuItem * menuitem, gpointer user_data)
+static void vbr_max_changed (GtkComboBox * combo)
{
+ gint i = gtk_combo_box_get_active (combo);
- vbr_max_val = GPOINTER_TO_INT(user_data);
-
+ if (i >= 0 && i < G_N_ELEMENTS (available_bitrates))
+ vbr_max_val = available_bitrates[i];
+ else
+ vbr_max_val = 320;
}
static void toggle_enforce_min(GtkToggleButton * togglebutton,
@@ -549,11 +555,14 @@ static void vbr_qual(GtkAdjustment * adjustment, gpointer user_data)
}
-static void abr_activate(GtkMenuItem * menuitem, gpointer user_data)
+static void abr_changed (GtkComboBox * combo)
{
+ gint i = gtk_combo_box_get_active (combo);
- abr_val = GPOINTER_TO_INT(user_data);
-
+ if (i >= 0 && i < G_N_ELEMENTS (available_bitrates))
+ abr_val = available_bitrates[i];
+ else
+ abr_val = 128;
}
static void toggle_xing(GtkToggleButton * togglebutton, gpointer user_data)
@@ -649,42 +658,30 @@ static void id3_only_version(GtkToggleButton * togglebutton,
static void configure_ok_cb(gpointer data)
{
- mcs_handle_t *db;
-
if (vbr_min_val > vbr_max_val)
vbr_max_val = vbr_min_val;
- db = aud_cfg_db_open();
-
- aud_cfg_db_set_int(db, "filewriter_mp3", "vbr_on", vbr_on);
- aud_cfg_db_set_int(db, "filewriter_mp3", "vbr_type", vbr_type);
- aud_cfg_db_set_int(db, "filewriter_mp3", "vbr_min_val", vbr_min_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "vbr_max_val", vbr_max_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "enforce_min_val", enforce_min_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "vbr_quality_val", vbr_quality_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "abr_val", abr_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "toggle_xing_val", toggle_xing_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "mark_original_val",
- mark_original_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "mark_copyright_val",
- mark_copyright_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "force_v2_val", force_v2_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "only_v1_val", only_v1_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "only_v2_val", only_v2_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "algo_quality_val",
- algo_quality_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "out_samplerate_val",
- out_samplerate_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "bitrate_val", bitrate_val);
- aud_cfg_db_set_float(db, "filewriter_mp3", "compression_val",
- compression_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "enc_toggle_val", enc_toggle_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "audio_mode_val", audio_mode_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "enforce_iso_val", enforce_iso_val);
- aud_cfg_db_set_int(db, "filewriter_mp3", "error_protect_val",
- error_protect_val);
- aud_cfg_db_close(db);
-
+ aud_set_int ("filewriter_mp3", "vbr_on", vbr_on);
+ aud_set_int ("filewriter_mp3", "vbr_type", vbr_type);
+ aud_set_int ("filewriter_mp3", "vbr_min_val", vbr_min_val);
+ aud_set_int ("filewriter_mp3", "vbr_max_val", vbr_max_val);
+ aud_set_int ("filewriter_mp3", "enforce_min_val", enforce_min_val);
+ aud_set_int ("filewriter_mp3", "vbr_quality_val", vbr_quality_val);
+ aud_set_int ("filewriter_mp3", "abr_val", abr_val);
+ aud_set_int ("filewriter_mp3", "toggle_xing_val", toggle_xing_val);
+ aud_set_int ("filewriter_mp3", "mark_original_val", mark_original_val);
+ aud_set_int ("filewriter_mp3", "mark_copyright_val", mark_copyright_val);
+ aud_set_int ("filewriter_mp3", "force_v2_val", force_v2_val);
+ aud_set_int ("filewriter_mp3", "only_v1_val", only_v1_val);
+ aud_set_int ("filewriter_mp3", "only_v2_val", only_v2_val);
+ aud_set_int ("filewriter_mp3", "algo_quality_val", algo_quality_val);
+ aud_set_int ("filewriter_mp3", "out_samplerate_val", out_samplerate_val);
+ aud_set_int ("filewriter_mp3", "bitrate_val", bitrate_val);
+ aud_set_double ("filewriter_mp3", "compression_val", compression_val);
+ aud_set_int ("filewriter_mp3", "enc_toggle_val", enc_toggle_val);
+ aud_set_int ("filewriter_mp3", "audio_mode_val", audio_mode_val);
+ aud_set_int ("filewriter_mp3", "enforce_iso_val", enforce_iso_val);
+ aud_set_int ("filewriter_mp3", "error_protect_val", error_protect_val);
gtk_widget_destroy(configure_win);
}
@@ -703,15 +700,12 @@ static void mp3_configure(void)
configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_type_hint(GTK_WINDOW(configure_win), GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_signal_connect(GTK_OBJECT(configure_win), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed),
- &configure_win);
+ g_signal_connect (configure_win, "destroy", (GCallback)
+ gtk_widget_destroyed, & configure_win);
gtk_window_set_title(GTK_WINDOW(configure_win),
_("MP3 Configuration"));
gtk_window_set_position(GTK_WINDOW(configure_win),
GTK_WIN_POS_MOUSE);
- gtk_window_set_policy(GTK_WINDOW(configure_win), FALSE, TRUE,
- FALSE);
gtk_container_set_border_width(GTK_CONTAINER(configure_win), 5);
vbox = gtk_vbox_new(FALSE, 5);
@@ -726,8 +720,6 @@ static void mp3_configure(void)
quality_vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(quality_vbox), 5);
- quality_tips = gtk_tooltips_new();
-
quality_hbox1 = gtk_hbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(quality_vbox), quality_hbox1, FALSE,
FALSE, 0);
@@ -746,18 +738,13 @@ static void mp3_configure(void)
gtk_container_add(GTK_CONTAINER(alg_quality_frame),
alg_quality_hbox);
- alg_quality_adj = gtk_adjustment_new(5, 0, 9, 1, 1, 1);
+ alg_quality_adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 9, 1, 1, 0);
alg_quality_spin =
gtk_spin_button_new(GTK_ADJUSTMENT(alg_quality_adj), 8, 0);
- gtk_widget_set_usize(alg_quality_spin, 20, 28);
gtk_box_pack_start(GTK_BOX(alg_quality_hbox), alg_quality_spin,
TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(alg_quality_adj), "value-changed",
- GTK_SIGNAL_FUNC(algo_qual), NULL);
-
- gtk_tooltips_set_tip(GTK_TOOLTIPS(quality_tips), alg_quality_spin,
- _("best/slowest:0;\nworst/fastest:9;\nrecommended:2;\ndefault:5;"),
- "");
+ g_signal_connect (alg_quality_adj, "value-changed", (GCallback)
+ algo_qual, NULL);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(alg_quality_spin),
algo_quality_val);
@@ -773,40 +760,30 @@ static void mp3_configure(void)
gtk_container_set_border_width(GTK_CONTAINER(samplerate_hbox), 10);
gtk_container_add(GTK_CONTAINER(samplerate_frame),
samplerate_hbox);
- samplerate_option_menu = gtk_option_menu_new();
- samplerate_menu = gtk_menu_new();
- samplerate_menu_item = gtk_menu_item_new_with_label(_("Auto"));
- gtk_signal_connect(GTK_OBJECT(samplerate_menu_item), "activate",
- GTK_SIGNAL_FUNC(samplerate_activate),
- GINT_TO_POINTER(0));
- gtk_menu_append(GTK_MENU(samplerate_menu), samplerate_menu_item);
-
- for (i = 0; i < sizeof(available_samplerates)/sizeof(gint); i++)
+
+ GtkWidget * combo = gtk_combo_box_text_new ();
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, _("Auto"));
+ if (! out_samplerate_val)
+ gtk_combo_box_set_active ((GtkComboBox *) combo, 0);
+
+ for (i = 0; i < G_N_ELEMENTS (available_samplerates); i ++)
{
- gchar *string = g_strdup_printf("%d", available_samplerates[i]);
- samplerate_menu_item = gtk_menu_item_new_with_label(string);
- gtk_signal_connect(GTK_OBJECT(samplerate_menu_item), "activate",
- GTK_SIGNAL_FUNC(samplerate_activate),
- GINT_TO_POINTER(available_samplerates[i]));
- gtk_menu_append(GTK_MENU(samplerate_menu), samplerate_menu_item);
- g_free(string);
+ gchar buf[10];
+ snprintf (buf, sizeof buf, "%d", available_samplerates[i]);
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, buf);
+
+ if (out_samplerate_val == available_samplerates[i])
+ gtk_combo_box_set_active ((GtkComboBox *) combo, 1 + i);
}
- gtk_option_menu_set_menu(GTK_OPTION_MENU(samplerate_option_menu),
- samplerate_menu);
- gtk_widget_set_usize(samplerate_option_menu, 75, 28);
- gtk_box_pack_start(GTK_BOX(samplerate_hbox),
- samplerate_option_menu, FALSE, FALSE, 0);
+ gtk_box_pack_start ((GtkBox *) samplerate_hbox, combo, FALSE, FALSE, 0);
+ g_signal_connect (combo, "changed", (GCallback) samplerate_changed, NULL);
+
samplerate_label = gtk_label_new(_("(Hz)"));
gtk_misc_set_alignment(GTK_MISC(samplerate_label), 0, 0.5);
gtk_box_pack_start(GTK_BOX(samplerate_hbox), samplerate_label,
FALSE, FALSE, 0);
- for (i = 0; i < sizeof(available_samplerates)/sizeof(gint); i++)
- if (out_samplerate_val == available_samplerates[i])
- gtk_option_menu_set_history(GTK_OPTION_MENU
- (samplerate_option_menu), i+1);
-
/* Encoder Quality */
enc_quality_frame = gtk_frame_new(_("Bitrate / Compression ratio:"));
@@ -815,8 +792,6 @@ static void mp3_configure(void)
gtk_box_pack_start(GTK_BOX(quality_vbox), enc_quality_frame, FALSE,
FALSE, 0);
-
- /* yaz new code */
// vbox sorrounding hbox1 and hbox2
enc_quality_vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(enc_quality_vbox), 10);
@@ -839,29 +814,21 @@ static void mp3_configure(void)
gtk_box_pack_start(GTK_BOX(hbox1), enc_quality_label1, FALSE, FALSE, 0);
// bitrate menu
- bitrate_option_menu = gtk_option_menu_new();
- bitrate_menu = gtk_menu_new();
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
- {
- gchar *string = g_strdup_printf("%d", available_bitrates[i]);
- bitrate_menu_item = gtk_menu_item_new_with_label(string);
- gtk_signal_connect(GTK_OBJECT(bitrate_menu_item), "activate",
- GTK_SIGNAL_FUNC(bitrate_activate),
- GINT_TO_POINTER(available_bitrates[i]));
- gtk_menu_append(GTK_MENU(bitrate_menu), bitrate_menu_item);
- g_free(string);
- }
+ combo = gtk_combo_box_text_new ();
- gtk_option_menu_set_menu(GTK_OPTION_MENU(bitrate_option_menu),
- bitrate_menu);
- gtk_widget_set_usize(bitrate_option_menu, 80, 28);
- gtk_box_pack_end(GTK_BOX(hbox1), bitrate_option_menu, FALSE, FALSE, 0);
+ for (i = 0; i < G_N_ELEMENTS (available_bitrates); i ++)
+ {
+ gchar buf[10];
+ snprintf (buf, sizeof buf, "%d", available_bitrates[i]);
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, buf);
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
if (bitrate_val == available_bitrates[i])
- gtk_option_menu_set_history(GTK_OPTION_MENU
- (bitrate_option_menu), i);
+ gtk_combo_box_set_active ((GtkComboBox *) combo, i);
+ }
+
+ gtk_box_pack_start ((GtkBox *) hbox1, combo, FALSE, FALSE, 0);
+ g_signal_connect (combo, "changed", (GCallback) bitrate_changed, NULL);
// hbox2 for compression ratio
hbox2 = gtk_hbox_new(FALSE, 5);
@@ -880,29 +847,23 @@ static void mp3_configure(void)
gtk_box_pack_start(GTK_BOX(hbox2), enc_quality_label2, FALSE, FALSE, 0);
// comp-ratio spin
- compression_adj = gtk_adjustment_new(11, 0, 100, 1, 1, 1);
+ compression_adj = (GtkAdjustment *) gtk_adjustment_new (11, 0, 100, 1,
+ 1, 0);
compression_spin =
gtk_spin_button_new(GTK_ADJUSTMENT(compression_adj), 8, 0);
- gtk_widget_set_usize(compression_spin, 40, 28);
- gtk_container_add(GTK_CONTAINER(hbox2), compression_spin);
gtk_box_pack_end(GTK_BOX(hbox2), compression_spin, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(compression_adj), "value-changed",
- GTK_SIGNAL_FUNC(compression_change), NULL);
+ g_signal_connect (compression_adj, "value-changed", (GCallback)
+ compression_change, NULL);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(compression_spin),
compression_val);
// radio button signale connect
- gtk_signal_connect(GTK_OBJECT(enc_radio1), "toggled",
- GTK_SIGNAL_FUNC(encoding_toggle),
- GINT_TO_POINTER(0));
- gtk_signal_connect(GTK_OBJECT(enc_radio2), "toggled",
- GTK_SIGNAL_FUNC(encoding_toggle),
- GINT_TO_POINTER(1));
-
- /* end of yaz new code */
-
+ g_signal_connect (enc_radio1, "toggled", (GCallback) encoding_toggle,
+ GINT_TO_POINTER (0));
+ g_signal_connect (enc_radio2, "toggled", (GCallback) encoding_toggle,
+ GINT_TO_POINTER (1));
/* Audio Mode */
@@ -914,54 +875,21 @@ static void mp3_configure(void)
mode_hbox = gtk_hbox_new(TRUE, 10);
gtk_container_set_border_width(GTK_CONTAINER(mode_hbox), 10);
gtk_container_add(GTK_CONTAINER(mode_frame), mode_hbox);
- mode_option_menu = gtk_option_menu_new();
- mode_menu = gtk_menu_new();
- mode_menu_item = gtk_menu_item_new_with_label(_("Auto"));
- gtk_signal_connect(GTK_OBJECT(mode_menu_item), "activate",
- GTK_SIGNAL_FUNC(mode_activate),
- GINT_TO_POINTER(4));
- gtk_menu_append(GTK_MENU(mode_menu), mode_menu_item);
- mode_menu_item = gtk_menu_item_new_with_label(_("Joint-Stereo"));
- gtk_signal_connect(GTK_OBJECT(mode_menu_item), "activate",
- GTK_SIGNAL_FUNC(mode_activate),
- GINT_TO_POINTER(1));
- gtk_menu_append(GTK_MENU(mode_menu), mode_menu_item);
- mode_menu_item = gtk_menu_item_new_with_label(_("Stereo"));
- gtk_signal_connect(GTK_OBJECT(mode_menu_item), "activate",
- GTK_SIGNAL_FUNC(mode_activate),
- GINT_TO_POINTER(0));
- gtk_menu_append(GTK_MENU(mode_menu), mode_menu_item);
- mode_menu_item = gtk_menu_item_new_with_label(_("Mono"));
- gtk_signal_connect(GTK_OBJECT(mode_menu_item), "activate",
- GTK_SIGNAL_FUNC(mode_activate),
- GINT_TO_POINTER(3));
- gtk_menu_append(GTK_MENU(mode_menu), mode_menu_item);
- gtk_option_menu_set_menu(GTK_OPTION_MENU(mode_option_menu),
- mode_menu);
- gtk_widget_set_usize(mode_option_menu, 50, 28);
- gtk_box_pack_start(GTK_BOX(mode_hbox), mode_option_menu, TRUE,
- TRUE, 2);
- switch (audio_mode_val) {
-
- case 4:
- gtk_option_menu_set_history(GTK_OPTION_MENU(mode_option_menu),
- 0);
- break;
- case 1:
- gtk_option_menu_set_history(GTK_OPTION_MENU(mode_option_menu),
- 1);
- break;
- case 0:
- gtk_option_menu_set_history(GTK_OPTION_MENU(mode_option_menu),
- 2);
- break;
- case 3:
- gtk_option_menu_set_history(GTK_OPTION_MENU(mode_option_menu),
- 3);
- break;
+ combo = gtk_combo_box_text_new ();
+
+ for (i = 0; i < MODES; i ++)
+ {
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo,
+ _(mode_names[i]));
+
+ if (audio_mode_val == modes[i])
+ gtk_combo_box_set_active ((GtkComboBox *) combo, i);
}
+ gtk_box_pack_start ((GtkBox *) mode_hbox, combo, FALSE, FALSE, 0);
+ g_signal_connect (combo, "changed", (GCallback) mode_changed, NULL);
+
/* Misc */
misc_frame = gtk_frame_new(_("Misc:"));
@@ -978,8 +906,8 @@ static void mp3_configure(void)
(_("Enforce strict ISO complience"));
gtk_box_pack_start(GTK_BOX(misc_vbox), enforce_iso_toggle, TRUE,
TRUE, 2);
- gtk_signal_connect(GTK_OBJECT(enforce_iso_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_enforce_iso), NULL);
+ g_signal_connect (enforce_iso_toggle, "toggled", (GCallback)
+ toggle_enforce_iso, NULL);
if (enforce_iso_val == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
@@ -989,18 +917,13 @@ static void mp3_configure(void)
gtk_check_button_new_with_label(_("Error protection"));
gtk_box_pack_start(GTK_BOX(misc_vbox), error_protection_toggle,
TRUE, TRUE, 2);
- gtk_signal_connect(GTK_OBJECT(error_protection_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_error_protect), NULL);
+ g_signal_connect (error_protection_toggle, "toggled", (GCallback)
+ toggle_error_protect, NULL);
if (error_protect_val == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
(error_protection_toggle), TRUE);
- gtk_tooltips_set_tip(GTK_TOOLTIPS(quality_tips),
- error_protection_toggle,
- _("Adds 16 bit checksum to every frame"), "");
-
-
/* Add the Notebook */
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), quality_vbox,
gtk_label_new(_("Quality")));
@@ -1011,15 +934,11 @@ static void mp3_configure(void)
vbr_vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbr_vbox), 5);
- vbr_tips = gtk_tooltips_new();
-
/* Toggle VBR */
vbr_toggle = gtk_check_button_new_with_label(_("Enable VBR/ABR"));
- gtk_widget_set_usize(vbr_toggle, 60, 30);
gtk_box_pack_start(GTK_BOX(vbr_vbox), vbr_toggle, FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(vbr_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_vbr), NULL);
+ g_signal_connect (vbr_toggle, "toggled", (GCallback) toggle_vbr, NULL);
vbr_options_vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(vbr_vbox), vbr_options_vbox);
@@ -1037,8 +956,6 @@ static void mp3_configure(void)
gtk_container_add(GTK_CONTAINER(vbr_type_frame), vbr_type_hbox);
vbr_type_radio1 = gtk_radio_button_new_with_label(NULL, "VBR");
- gtk_tooltips_set_tip(GTK_TOOLTIPS(vbr_tips), vbr_type_radio1,
- _("Variable bitrate"), "");
gtk_box_pack_start(GTK_BOX(vbr_type_hbox), vbr_type_radio1, TRUE,
TRUE, 2);
if (vbr_type == 0)
@@ -1049,18 +966,16 @@ static void mp3_configure(void)
gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON
(vbr_type_radio1),
"ABR");
- gtk_tooltips_set_tip(GTK_TOOLTIPS(vbr_tips), vbr_type_radio2,
- _("Average bitrate"), "");
gtk_box_pack_start(GTK_BOX(vbr_type_hbox), vbr_type_radio2, TRUE,
TRUE, 2);
if (vbr_type == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
(vbr_type_radio2), TRUE);
- gtk_signal_connect(GTK_OBJECT(vbr_type_radio1), "toggled",
- GTK_SIGNAL_FUNC(vbr_abr_toggle), "VBR");
- gtk_signal_connect(GTK_OBJECT(vbr_type_radio2), "toggled",
- GTK_SIGNAL_FUNC(vbr_abr_toggle), "ABR");
+ g_signal_connect (vbr_type_radio1, "toggled", (GCallback)
+ vbr_abr_toggle, "VBR");
+ g_signal_connect (vbr_type_radio2, "toggled", (GCallback)
+ vbr_abr_toggle, "ABR");
/* VBR Options */
@@ -1085,30 +1000,21 @@ static void mp3_configure(void)
gtk_box_pack_start(GTK_BOX(vbr_options_hbox1), vbr_min_label, TRUE,
TRUE, 0);
- vbr_min_option_menu = gtk_option_menu_new();
- vbr_min_menu = gtk_menu_new();
+ combo = gtk_combo_box_text_new ();
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
+ for (i = 0; i < G_N_ELEMENTS (available_bitrates); i ++)
{
- gchar *string = g_strdup_printf("%d", available_bitrates[i]);
- vbr_min_menu_item = gtk_menu_item_new_with_label(string);
- gtk_signal_connect(GTK_OBJECT(vbr_min_menu_item), "activate",
- GTK_SIGNAL_FUNC(vbr_min_activate),
- GINT_TO_POINTER(available_bitrates[i]));
- gtk_menu_append(GTK_MENU(vbr_min_menu), vbr_min_menu_item);
- g_free(string);
- }
+ gchar buf[10];
+ snprintf (buf, sizeof buf, "%d", available_bitrates[i]);
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, buf);
- gtk_option_menu_set_menu(GTK_OPTION_MENU(vbr_min_option_menu),
- vbr_min_menu);
- gtk_widget_set_usize(vbr_min_option_menu, 40, 25);
- gtk_box_pack_start(GTK_BOX(vbr_options_hbox1), vbr_min_option_menu,
- TRUE, TRUE, 2);
-
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
if (vbr_min_val == available_bitrates[i])
- gtk_option_menu_set_history(GTK_OPTION_MENU
- (vbr_min_option_menu), i);
+ gtk_combo_box_set_active ((GtkComboBox *) combo, i);
+ }
+
+ gtk_box_pack_start ((GtkBox *) vbr_options_hbox1, combo, FALSE, FALSE,
+ 0);
+ g_signal_connect (combo, "changed", (GCallback) vbr_min_changed, NULL);
vbr_options_hbox2 = gtk_hbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbr_options_hbox2),
@@ -1121,41 +1027,29 @@ static void mp3_configure(void)
gtk_box_pack_start(GTK_BOX(vbr_options_hbox2), vbr_max_label, TRUE,
TRUE, 0);
- vbr_max_option_menu = gtk_option_menu_new();
- vbr_max_menu = gtk_menu_new();
+ combo = gtk_combo_box_text_new ();
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
+ for (i = 0; i < G_N_ELEMENTS (available_bitrates); i ++)
{
- gchar *string = g_strdup_printf("%d", available_bitrates[i]);
- vbr_max_menu_item = gtk_menu_item_new_with_label(string);
- gtk_signal_connect(GTK_OBJECT(vbr_max_menu_item), "activate",
- GTK_SIGNAL_FUNC(vbr_max_activate),
- GINT_TO_POINTER(available_bitrates[i]));
- gtk_menu_append(GTK_MENU(vbr_max_menu), vbr_max_menu_item);
- g_free(string);
- }
-
- gtk_option_menu_set_menu(GTK_OPTION_MENU(vbr_max_option_menu),
- vbr_max_menu);
- gtk_widget_set_usize(vbr_max_option_menu, 40, 25);
- gtk_box_pack_start(GTK_BOX(vbr_options_hbox2), vbr_max_option_menu,
- TRUE, TRUE, 2);
+ gchar buf[10];
+ snprintf (buf, sizeof buf, "%d", available_bitrates[i]);
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, buf);
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
if (vbr_max_val == available_bitrates[i])
- gtk_option_menu_set_history(GTK_OPTION_MENU
- (vbr_max_option_menu), i);
+ gtk_combo_box_set_active ((GtkComboBox *) combo, i);
+ }
+
+ gtk_box_pack_start ((GtkBox *) vbr_options_hbox2, combo, FALSE, FALSE,
+ 0);
+ g_signal_connect (combo, "changed", (GCallback) vbr_max_changed, NULL);
enforce_min_toggle =
gtk_check_button_new_with_label
(_("Strictly enforce minimum bitrate"));
- gtk_tooltips_set_tip(GTK_TOOLTIPS(vbr_tips), enforce_min_toggle,
- _("For use with players that do not support low bitrate mp3 (Apex AD600-A DVD/mp3 player)"),
- "");
gtk_box_pack_start(GTK_BOX(vbr_options_vbox2), enforce_min_toggle,
FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(enforce_min_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_enforce_min), NULL);
+ g_signal_connect (enforce_min_toggle, "toggled", (GCallback)
+ toggle_enforce_min, NULL);
if (enforce_min_val == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
@@ -1177,30 +1071,21 @@ static void mp3_configure(void)
gtk_misc_set_alignment(GTK_MISC(abr_label), 0, 0.5);
gtk_box_pack_start(GTK_BOX(abr_hbox), abr_label, TRUE, TRUE, 0);
- abr_option_menu = gtk_option_menu_new();
- abr_menu = gtk_menu_new();
+ combo = gtk_combo_box_text_new ();
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
+ for (i = 0; i < G_N_ELEMENTS (available_bitrates); i ++)
{
- gchar *string = g_strdup_printf("%d", available_bitrates[i]);
- abr_menu_item = gtk_menu_item_new_with_label(string);
- gtk_signal_connect(GTK_OBJECT(abr_menu_item), "activate",
- GTK_SIGNAL_FUNC(abr_activate),
- GINT_TO_POINTER(available_bitrates[i]));
- gtk_menu_append(GTK_MENU(abr_menu), abr_menu_item);
- g_free(string);
- }
+ gchar buf[10];
+ snprintf (buf, sizeof buf, "%d", available_bitrates[i]);
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) combo, buf);
- gtk_option_menu_set_menu(GTK_OPTION_MENU(abr_option_menu),
- abr_menu);
- gtk_widget_set_usize(abr_option_menu, 40, 25);
- gtk_box_pack_start(GTK_BOX(abr_hbox), abr_option_menu, TRUE, TRUE,
- 2);
-
- for (i = 0; i < sizeof(available_bitrates)/sizeof(gint); i++)
if (abr_val == available_bitrates[i])
- gtk_option_menu_set_history(GTK_OPTION_MENU(abr_option_menu),
- i);
+ gtk_combo_box_set_active ((GtkComboBox *) combo, i);
+ }
+
+ gtk_box_pack_start ((GtkBox *) abr_hbox, combo, FALSE, FALSE,
+ 0);
+ g_signal_connect (combo, "changed", (GCallback) abr_changed, NULL);
/* Quality Level */
@@ -1215,17 +1100,13 @@ static void mp3_configure(void)
gtk_box_pack_start(GTK_BOX(vbr_options_hbox3), vbr_quality_label,
TRUE, TRUE, 0);
- vbr_quality_adj = gtk_adjustment_new(4, 0, 9, 1, 1, 1);
+ vbr_quality_adj = (GtkAdjustment *) gtk_adjustment_new (4, 0, 9, 1, 1, 0);
vbr_quality_spin =
gtk_spin_button_new(GTK_ADJUSTMENT(vbr_quality_adj), 8, 0);
- gtk_widget_set_usize(vbr_quality_spin, 20, -1);
gtk_box_pack_start(GTK_BOX(vbr_options_hbox3), vbr_quality_spin,
TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(vbr_quality_adj), "value-changed",
- GTK_SIGNAL_FUNC(vbr_qual), NULL);
-
- gtk_tooltips_set_tip(GTK_TOOLTIPS(vbr_tips), vbr_quality_spin,
- _("highest:0;\nlowest:9;\ndefault:4;"), "");
+ g_signal_connect (vbr_quality_adj, "value-changed", (GCallback)
+ vbr_qual, NULL);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(vbr_quality_spin),
vbr_quality_val);
@@ -1236,8 +1117,8 @@ static void mp3_configure(void)
gtk_check_button_new_with_label(_("Don't write Xing VBR header"));
gtk_box_pack_start(GTK_BOX(vbr_options_vbox), xing_header_toggle,
FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(xing_header_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_xing), NULL);
+ g_signal_connect (xing_header_toggle, "toggled", (GCallback)
+ toggle_xing, NULL);
if (toggle_xing_val == 0)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
@@ -1255,8 +1136,6 @@ static void mp3_configure(void)
tags_vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(tags_vbox), 5);
- tags_tips = gtk_tooltips_new();
-
/* Frame Params */
tags_frames_frame = gtk_frame_new(_("Frame params:"));
@@ -1274,8 +1153,8 @@ static void mp3_configure(void)
gtk_check_button_new_with_label(_("Mark as copyright"));
gtk_box_pack_start(GTK_BOX(tags_frames_hbox),
tags_copyright_toggle, FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(tags_copyright_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_copyright), NULL);
+ g_signal_connect (tags_copyright_toggle, "toggled", (GCallback)
+ toggle_copyright, NULL);
if (mark_copyright_val == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
@@ -1285,8 +1164,8 @@ static void mp3_configure(void)
gtk_check_button_new_with_label(_("Mark as original"));
gtk_box_pack_start(GTK_BOX(tags_frames_hbox), tags_original_toggle,
FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(tags_original_toggle), "toggled",
- GTK_SIGNAL_FUNC(toggle_original), NULL);
+ g_signal_connect (tags_original_toggle, "toggled", (GCallback)
+ toggle_original, NULL);
if (mark_original_val == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
@@ -1308,8 +1187,8 @@ static void mp3_configure(void)
(_("Force addition of version 2 tag"));
gtk_box_pack_start(GTK_BOX(tags_id3_vbox), tags_force_id3v2_toggle,
FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(tags_force_id3v2_toggle), "toggled",
- GTK_SIGNAL_FUNC(force_v2_toggle), NULL);
+ g_signal_connect (tags_force_id3v2_toggle, "toggled", (GCallback)
+ force_v2_toggle, NULL);
tags_id3_hbox = gtk_hbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(tags_id3_vbox), tags_id3_hbox);
@@ -1318,15 +1197,15 @@ static void mp3_configure(void)
gtk_check_button_new_with_label(_("Only add v1 tag"));
gtk_box_pack_start(GTK_BOX(tags_id3_hbox), tags_only_v1_toggle,
FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(tags_only_v1_toggle), "toggled",
- GTK_SIGNAL_FUNC(id3_only_version), "v1");
+ g_signal_connect (tags_only_v1_toggle, "toggled", (GCallback)
+ id3_only_version, "v1");
tags_only_v2_toggle =
gtk_check_button_new_with_label(_("Only add v2 tag"));
gtk_box_pack_start(GTK_BOX(tags_id3_hbox), tags_only_v2_toggle,
FALSE, FALSE, 2);
- gtk_signal_connect(GTK_OBJECT(tags_only_v2_toggle), "toggled",
- GTK_SIGNAL_FUNC(id3_only_version), "v2");
+ g_signal_connect (tags_only_v2_toggle, "toggled", (GCallback)
+ id3_only_version, "v2");
if (force_v2_val == 1)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
@@ -1355,25 +1234,20 @@ static void mp3_configure(void)
configure_bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(configure_bbox),
GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(configure_bbox), 5);
gtk_box_pack_start(GTK_BOX(vbox), configure_bbox, FALSE, FALSE, 0);
configure_cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- gtk_signal_connect_object(GTK_OBJECT(configure_cancel), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(configure_win));
- GTK_WIDGET_SET_FLAGS(configure_cancel, GTK_CAN_DEFAULT);
+ g_signal_connect_swapped (configure_cancel, "clicked", (GCallback)
+ gtk_widget_destroy, configure_win);
gtk_box_pack_start(GTK_BOX(configure_bbox), configure_cancel, TRUE,
TRUE, 0);
configure_ok = gtk_button_new_from_stock(GTK_STOCK_OK);
- gtk_signal_connect(GTK_OBJECT(configure_ok), "clicked",
- GTK_SIGNAL_FUNC(configure_ok_cb), NULL);
- GTK_WIDGET_SET_FLAGS(configure_ok, GTK_CAN_DEFAULT);
+ g_signal_connect (configure_ok, "clicked", (GCallback) configure_ok_cb,
+ NULL);
gtk_box_pack_start(GTK_BOX(configure_bbox), configure_ok, TRUE,
TRUE, 0);
gtk_widget_show(configure_ok);
- gtk_widget_grab_default(configure_ok);
/* Set States */
diff --git a/src/filewriter/vorbis.c b/src/filewriter/vorbis.c
index 6ec91c3..2b48ff4 100644
--- a/src/filewriter/vorbis.c
+++ b/src/filewriter/vorbis.c
@@ -27,7 +27,8 @@
#include <stdlib.h>
#include <stdint.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
static void vorbis_init(write_output_callback write_output_func);
static void vorbis_configure(void);
@@ -46,8 +47,6 @@ FileWriter vorbis_plugin =
.format_required = FMT_FLOAT,
};
-static float v_base_quality = 0.5;
-
static ogg_stream_state os;
static ogg_page og;
static ogg_packet op;
@@ -57,18 +56,33 @@ static vorbis_block vb;
static vorbis_info vi;
static vorbis_comment vc;
+static const gchar * const vorbis_defaults[] = {
+ "base_quality", "0.5",
+ NULL};
+
+static gdouble v_base_quality;
+
static void vorbis_init(write_output_callback write_output_func)
{
- mcs_handle_t *db = aud_cfg_db_open();
+ aud_config_set_defaults ("filewriter_vorbis", vorbis_defaults);
- aud_cfg_db_get_float(db, "filewriter_vorbis", "base_quality", &v_base_quality);
-
- aud_cfg_db_close(db);
+ v_base_quality = aud_get_double ("filewriter_vorbis", "base_quality");
if (write_output_func)
write_output=write_output_func;
}
+static void add_string_from_tuple (vorbis_comment * vc, const char * name,
+ const Tuple * tuple, gint field)
+{
+ gchar * val = tuple_get_str (tuple, field, NULL);
+ if (! val)
+ return;
+
+ vorbis_comment_add_tag (vc, name, val);
+ str_unref (val);
+}
+
static gint vorbis_open(void)
{
ogg_packet header;
@@ -82,22 +96,15 @@ static gint vorbis_open(void)
if (tuple)
{
- const gchar *scratch;
gchar tmpstr[32];
gint scrint;
- if ((scratch = tuple_get_string(tuple, FIELD_TITLE, NULL)))
- vorbis_comment_add_tag(&vc, "title", (gchar *) scratch);
- if ((scratch = tuple_get_string(tuple, FIELD_ARTIST, NULL)))
- vorbis_comment_add_tag(&vc, "artist", (gchar *) scratch);
- if ((scratch = tuple_get_string(tuple, FIELD_ALBUM, NULL)))
- vorbis_comment_add_tag(&vc, "album", (gchar *) scratch);
- if ((scratch = tuple_get_string(tuple, FIELD_GENRE, NULL)))
- vorbis_comment_add_tag(&vc, "genre", (gchar *) scratch);
- if ((scratch = tuple_get_string(tuple, FIELD_DATE, NULL)))
- vorbis_comment_add_tag(&vc, "date", (gchar *) scratch);
- if ((scratch = tuple_get_string(tuple, FIELD_COMMENT, NULL)))
- vorbis_comment_add_tag(&vc, "comment", (gchar *) scratch);
+ add_string_from_tuple (& vc, "title", tuple, FIELD_TITLE);
+ add_string_from_tuple (& vc, "artist", tuple, FIELD_ARTIST);
+ add_string_from_tuple (& vc, "album", tuple, FIELD_ALBUM);
+ add_string_from_tuple (& vc, "genre", tuple, FIELD_GENRE);
+ add_string_from_tuple (& vc, "date", tuple, FIELD_DATE);
+ add_string_from_tuple (& vc, "comment", tuple, FIELD_COMMENT);
if ((scrint = tuple_get_int(tuple, FIELD_TRACK_NUMBER, NULL)))
{
@@ -205,23 +212,16 @@ static void vorbis_close(void)
/* configuration stuff */
static GtkWidget *configure_win = NULL;
static GtkWidget *quality_frame, *quality_vbox, *quality_hbox1, *quality_spin, *quality_label;
-static GtkObject *quality_adj;
+static GtkAdjustment * quality_adj;
static void quality_change(GtkAdjustment *adjustment, gpointer user_data)
{
- if (gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(quality_spin)))
- v_base_quality = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(quality_spin)) / 10;
- else
- v_base_quality = 0.0;
+ v_base_quality = gtk_spin_button_get_value ((GtkSpinButton *) quality_spin) / 10;
}
static void configure_ok_cb(gpointer data)
{
- mcs_handle_t *db = aud_cfg_db_open();
-
- aud_cfg_db_set_float(db, "filewrite_vorbis", "base_quality", v_base_quality);
-
- aud_cfg_db_close(db);
+ aud_set_double ("filewrite_vorbis", "base_quality", v_base_quality);
gtk_widget_hide(configure_win);
}
@@ -261,7 +261,7 @@ static void vorbis_configure(void)
gtk_misc_set_alignment(GTK_MISC(quality_label), 0, 0.5);
gtk_box_pack_start(GTK_BOX(quality_hbox1), quality_label, TRUE, TRUE, 0);
- quality_adj = gtk_adjustment_new(5, 0, 10, 0.1, 1, 1);
+ quality_adj = (GtkAdjustment *) gtk_adjustment_new (5, 0, 10, 0.1, 1, 0);
quality_spin = gtk_spin_button_new(GTK_ADJUSTMENT(quality_adj), 1, 2);
gtk_box_pack_start(GTK_BOX(quality_hbox1), quality_spin, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(quality_adj), "value-changed", G_CALLBACK(quality_change), NULL);
@@ -271,17 +271,16 @@ static void vorbis_configure(void)
/* buttons */
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_hide), GTK_OBJECT(configure_win));
+ g_signal_connect_swapped (button, "clicked", (GCallback)
+ gtk_widget_hide, configure_win);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
button = gtk_button_new_from_stock(GTK_STOCK_OK);
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(configure_ok_cb), NULL);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_widget_grab_default(button);
}
gtk_widget_show_all(configure_win);
diff --git a/src/flacng/AUTHORS b/src/flacng/AUTHORS
deleted file mode 100644
index 319d8be..0000000
--- a/src/flacng/AUTHORS
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * A FLAC decoder plugin for the Audacious Media Player
- * Copyright (C) 2005 Ralf Ertzinger
- *
- * 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.
- */
-
-Ralf Ertzinger <ralf@skytale.net>
-
-Thanks to Hendrik Scholz <http://www.wormulon.net> for testing the FreeBSD
-side
-
-William Pitcock <nenolod@sacredspiral.co.uk>
- - tuple builder
- - full transition to InputPlayback API
- - full vorbiscomment support
diff --git a/src/flacng/Makefile b/src/flacng/Makefile
index 028cbc5..17313b3 100644
--- a/src/flacng/Makefile
+++ b/src/flacng/Makefile
@@ -1,9 +1,9 @@
PLUGIN = flacng${PLUGIN_SUFFIX}
-SRCS = plugin.c \
- tools.c \
+SRCS = plugin.c \
+ tools.c \
seekable_stream_callbacks.c \
- flac_compat112.c
+ metadata.c
include ../../buildsys.mk
include ../../extra.mk
@@ -11,5 +11,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${LIBFLAC_CFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${LIBFLAC_LIBS} ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${LIBFLAC_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${LIBFLAC_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/flacng/README b/src/flacng/README
deleted file mode 100644
index b1e16fb..0000000
--- a/src/flacng/README
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * A FLAC decoder plugin for the Audacious Media Player
- * Copyright (C) 2005 Ralf Ertzinger
- *
- * 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.
- */
-
-INTRODUCTION
-============
-
-This is an input plugin for the Audacious Media Player enabling the playback
-of FLAC compressed audio files.
-
-The Audacious Media Player (http://www.audacious-media-player.org) is a port of
-the XMMS audio player to GTK2.
-
-FLAC (http://flac.sourceforge.net/) is an Open Source lossless audio
-codec developed by Josh Coalson.
-
-
-
-STATUS
-======
-
-This plugin is to be considered of alpha quality. Use at your own risk.
-
-
-OK, let's be brief with this and first list the things that do _not_ work
-at the current time.
-
-- No display of bitrate
-- Visualizer plugins do not work with FLAC streams (*)
-- No OGGFlac streams (*)
-- Maximum of 2 channels (Stereo) (*)
-- No configuration options at all (*)
-
-Still interested? Good.
-The items marked with a (*) above can be fixed, this just takes some code
-that has not been written yet (har har).
-The FLAC decoder does not emit the current bitrate, so you'll have to
-settle for "VBR", which is true enough.
-As for configuration options, so far I have not found anything worth
-configuring, maybe you can think of something.
-
-Nonetheless.
-
-Given all the restrictions above, when presented with a 8/16/24 bit, stereo
-not-packed-in-ogg FLAC stream, this plugin will do it's best to produce
-some sound out of it. This may even work. It may, on the other hand, crash
-your machine and eat your data.
-
-Did I mention that the code is alpha quality?
-
-
-
-HOW TO BUILD
-============
-
-You will need the following to compile the code:
-
-1) A working compiler environment (if you do not know what this means
- you probably do not want to use this code now, anyway)
-
-2) The Audacious media player, including development header files
-
-3) The FLAC libraries, including development header files
-
-If you have all this the rest is easy.
-Unpack the tar ball, change into the directory created and
-issue "configure" (without the quotes). This will try and find the
-necessary stuff on your system. When it finishes successfully, type
-"make". This will build the plugin library.
-To enable debugging messages (and you probably want those at this
-point) use "configure --debug"
-
-To install the plugin in your home directory (no special permissions
-needed, ideal for testing) use "make localinstall" (you can use
-"make localremove" to remove the plugin again). To install the plugin
-for all users use "make install" instead.
-
-
-
-TESTING
-=======
-
-After successful installation start Audacious (preferrably from the command
-line so you can see error or debug messages) and look in the configuration
-panel under plugins. The FLAC plugin ought to appear there, looking
-like "FLAC audio plugin". Now add a FLAC file to
-the playlist and try it.
-
-
-
-BUGS
-====
-
-Sure. Tons of 'em. Report to <ralf@skytale.net> for the time being.
diff --git a/src/flacng/flac_compat.h b/src/flacng/flac_compat.h
deleted file mode 100644
index e122f3e..0000000
--- a/src/flacng/flac_compat.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "flac_compat112.h"
-#include "flac_compat113.h"
-#include "flac_compat114.h"
diff --git a/src/flacng/flac_compat112.c b/src/flacng/flac_compat112.c
deleted file mode 100644
index e8727ad..0000000
--- a/src/flacng/flac_compat112.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * A FLAC decoder plugin for the Audacious Media Player
- * Copyright (C) 2005 Ralf Ertzinger
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <FLAC/all.h>
-#include "flac_compat112.h"
-
-#if !defined(FLAC_API_VERSION_CURRENT)
-
-FLAC__SeekableStreamDecoderState FLAC__stream_decoder_init_stream(
- FLAC__SeekableStreamDecoder* decoder,
- FLAC__SeekableStreamDecoderReadCallback read_callback,
- FLAC__SeekableStreamDecoderSeekCallback seek_callback,
- FLAC__SeekableStreamDecoderTellCallback tell_callback,
- FLAC__SeekableStreamDecoderLengthCallback length_callback,
- FLAC__SeekableStreamDecoderEofCallback eof_callback,
- FLAC__SeekableStreamDecoderWriteCallback write_callback,
- FLAC__SeekableStreamDecoderMetadataCallback metadata_callback,
- FLAC__SeekableStreamDecoderErrorCallback error_callback,
- void * client_data) {
-
- FLAC__seekable_stream_decoder_set_read_callback(decoder, read_callback);
- FLAC__seekable_stream_decoder_set_seek_callback(decoder, seek_callback);
- FLAC__seekable_stream_decoder_set_tell_callback(decoder, tell_callback);
- FLAC__seekable_stream_decoder_set_length_callback(decoder, length_callback);
- FLAC__seekable_stream_decoder_set_eof_callback(decoder, eof_callback);
- FLAC__seekable_stream_decoder_set_write_callback(decoder, write_callback);
- FLAC__seekable_stream_decoder_set_metadata_callback(decoder, metadata_callback);
- FLAC__seekable_stream_decoder_set_error_callback(decoder, error_callback);
- FLAC__seekable_stream_decoder_set_client_data(decoder, client_data);
-
- return FLAC__seekable_stream_decoder_init(decoder);
-}
-
-#endif
diff --git a/src/flacng/flac_compat112.h b/src/flacng/flac_compat112.h
deleted file mode 100644
index 8498797..0000000
--- a/src/flacng/flac_compat112.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef FLAC_COMPAT112_H
-#define FLAC_COMPAT112_H
-
-#if !defined(FLAC_API_VERSION_CURRENT)
-
-/* Basic stream decoder type */
-#define FLAC__StreamDecoder FLAC__SeekableStreamDecoder
-
-/* Stream decoder functions */
-#define FLAC__StreamDecoderReadStatus FLAC__SeekableStreamDecoderReadStatus
-#define FLAC__StreamDecoderSeekStatus FLAC__SeekableStreamDecoderSeekStatus
-#define FLAC__StreamDecoderTellStatus FLAC__SeekableStreamDecoderTellStatus
-#define FLAC__StreamDecoderLengthStatus FLAC__SeekableStreamDecoderLengthStatus
-#define FLAC__stream_decoder_new FLAC__seekable_stream_decoder_new
-#define FLAC__stream_decoder_set_metadata_respond FLAC__seekable_stream_decoder_set_metadata_respond
-#define FLAC__stream_decoder_process_single FLAC__seekable_stream_decoder_process_single
-#define FLAC__stream_decoder_seek_absolute FLAC__seekable_stream_decoder_seek_absolute
-#define FLAC__stream_decoder_get_state FLAC__seekable_stream_decoder_get_state
-#define FLAC__stream_decoder_flush FLAC__seekable_stream_decoder_flush
-#define FLAC__stream_decoder_reset FLAC__seekable_stream_decoder_reset
-#define FLAC__stream_decoder_process_until_end_of_metadata FLAC__seekable_stream_decoder_process_until_end_of_metadata
-#define FLAC__stream_decoder_delete FLAC__seekable_stream_decoder_delete
-#define FLAC__StreamDecoderInitStatusString FLAC__SeekableStreamDecoderStateString
-#define FLAC__StreamDecoderStateString FLAC__SeekableStreamDecoderStateString
-
-/* Constants and types */
-#define FLAC__StreamDecoderInitStatus FLAC__SeekableStreamDecoderState
-#define FLAC__STREAM_DECODER_SEEK_STATUS_ERROR FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR
-#define FLAC__STREAM_DECODER_SEEK_STATUS_OK FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK
-#define FLAC__STREAM_DECODER_TELL_STATUS_ERROR FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR
-#define FLAC__STREAM_DECODER_TELL_STATUS_OK FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK
-#define FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR
-#define FLAC__STREAM_DECODER_LENGTH_STATUS_OK FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK
-#define FLAC__STREAM_DECODER_INIT_STATUS_OK FLAC__SEEKABLE_STREAM_DECODER_OK
-#define FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK
-#define FLAC__STREAM_DECODER_END_OF_STREAM FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM
-
-FLAC__SeekableStreamDecoderState FLAC__stream_decoder_init_stream(
- FLAC__SeekableStreamDecoder* decoder,
- FLAC__SeekableStreamDecoderReadCallback read_callback,
- FLAC__SeekableStreamDecoderSeekCallback seek_callback,
- FLAC__SeekableStreamDecoderTellCallback tell_callback,
- FLAC__SeekableStreamDecoderLengthCallback length_callback,
- FLAC__SeekableStreamDecoderEofCallback eof_callback,
- FLAC__SeekableStreamDecoderWriteCallback write_callback,
- FLAC__SeekableStreamDecoderMetadataCallback metadata_callback,
- FLAC__SeekableStreamDecoderErrorCallback error_callback,
- void * client_data);
-
-#endif
-
-#endif
diff --git a/src/flacng/flac_compat113.h b/src/flacng/flac_compat113.h
deleted file mode 100644
index e5304a0..0000000
--- a/src/flacng/flac_compat113.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef FLAC_COMPAT113_H
-#define FLAC_COMPAT113_H
-
-#if defined(FLAC_API_VERSION_CURRENT) && FLAC_API_VERSION_CURRENT == 7
-#endif
-
-#endif
diff --git a/src/flacng/flac_compat114.h b/src/flacng/flac_compat114.h
deleted file mode 100644
index c78f134..0000000
--- a/src/flacng/flac_compat114.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef FLAC_COMPAT114_H
-#define FLAC_COMPAT114_H
-
-#if defined(FLAC_API_VERSION_CURRENT) && FLAC_API_VERSION_CURRENT == 8
-#endif
-
-#endif
diff --git a/src/flacng/flacng.h b/src/flacng/flacng.h
index aef1d7d..8deaa25 100644
--- a/src/flacng/flacng.h
+++ b/src/flacng/flacng.h
@@ -25,7 +25,7 @@
#include <audacious/i18n.h>
#include <FLAC/all.h>
-#define ERROR(...) do { \
+#define FLACNG_ERROR(...) do { \
printf("flacng: " __VA_ARGS__); \
} while (0)
@@ -60,45 +60,37 @@ struct frame_info {
guint channels;
};
-/*
- * Information about the stream content, from the metadata
- */
-struct stream_comment {
- gchar* artist;
- gchar* album;
- gchar* title;
- gchar* tracknumber;
- gchar* genre;
- gchar* date;
- gchar* comment;
-};
-
-/*
- * Replaygain information, from the metadata
- */
-struct stream_replaygain {
- gboolean has_rg;
- gchar* track_gain;
- gchar* track_peak;
- gchar* album_gain;
- gchar* album_peak;
-};
-
-
typedef struct callback_info {
- GMutex* mutex;
- FLAC__StreamMetadata *metadata;
gint32* output_buffer;
gint32* write_pointer;
guint buffer_free;
guint buffer_used;
VFSFile* fd;
struct stream_info stream;
- struct stream_comment comment;
- struct stream_replaygain replaygain;
gboolean metadata_changed;
struct frame_info frame;
gint bitrate;
} callback_info;
+/* metadata.c */
+gboolean flac_update_song_tuple(const Tuple *tuple, VFSFile *fd);
+gboolean flac_get_image(const gchar *filename, VFSFile *fd, void **data, gint64 *length);
+Tuple *flac_probe_for_tuple(const gchar *filename, VFSFile *fd);
+
+/* seekable_stream_callbacks.c */
+FLAC__StreamDecoderReadStatus read_callback(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
+FLAC__StreamDecoderSeekStatus seek_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
+FLAC__StreamDecoderTellStatus tell_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
+FLAC__bool eof_callback(const FLAC__StreamDecoder *decoder, void *client_data);
+FLAC__StreamDecoderLengthStatus length_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
+FLAC__StreamDecoderWriteStatus write_callback(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
+void error_callback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
+void metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
+
+/* tools.c */
+callback_info* init_callback_info(void);
+void clean_callback_info(callback_info* info);
+void reset_info(callback_info* info);
+gboolean read_metadata(FLAC__StreamDecoder* decoder, callback_info* info);
+
#endif
diff --git a/src/flacng/metadata.c b/src/flacng/metadata.c
new file mode 100644
index 0000000..fdbe214
--- /dev/null
+++ b/src/flacng/metadata.c
@@ -0,0 +1,451 @@
+/*
+ * A FLAC decoder plugin for the Audacious Media Player
+ * Copyright (C) 2005 Ralf Ertzinger
+ * Copyright (C) 2010 John Lindgren
+ * Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string.h>
+#include <audacious/debug.h>
+
+#include "flacng.h"
+
+static size_t read_cb(void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle)
+{
+ size_t read;
+
+ if (handle == NULL)
+ {
+ FLACNG_ERROR("Trying to read data from an uninitialized file!\n");
+ return -1;
+ }
+
+ read = vfs_fread(ptr, size, nmemb, handle);
+
+ switch (read)
+ {
+ case -1:
+ FLACNG_ERROR("Error while reading from stream!\n");
+ return -1;
+
+ case 0:
+ AUDDBG("Stream reached EOF\n");
+ return 0;
+
+ default:
+ return read;
+ }
+}
+
+static size_t write_cb(const void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle)
+{
+ return vfs_fwrite(ptr, size, nmemb, handle);
+}
+
+static int seek_cb(FLAC__IOHandle handle, FLAC__int64 offset, int whence)
+{
+ if (vfs_fseek(handle, offset, whence) != 0)
+ {
+ FLACNG_ERROR("Could not seek to %lld!\n", (long long)offset);
+ return -1;
+ }
+
+ return 0;
+}
+
+static FLAC__int64 tell_cb(FLAC__IOHandle handle)
+{
+ guint64 offset;
+
+ if ((offset = vfs_ftell(handle)) == -1)
+ {
+ FLACNG_ERROR("Could not tell current position!\n");
+ return -1;
+ }
+
+ AUDDBG ("Current position: %d\n", (gint) offset);
+ return offset;
+}
+
+static int eof_cb(FLAC__IOHandle handle)
+{
+ return vfs_feof(handle);
+}
+
+static FLAC__IOCallbacks io_callbacks = {
+ read_cb,
+ write_cb,
+ seek_cb,
+ tell_cb,
+ eof_cb,
+ NULL
+};
+
+static void insert_str_tuple_to_vc (FLAC__StreamMetadata * vc_block,
+ const Tuple * tuple, gint tuple_name, gchar * field_name)
+{
+ FLAC__StreamMetadata_VorbisComment_Entry entry;
+ gchar *str;
+ gchar *val = tuple_get_str(tuple, tuple_name, NULL);
+
+ if (val == NULL)
+ return;
+
+ str = g_strdup_printf("%s=%s", field_name, val);
+ entry.entry = (FLAC__byte *) str;
+ entry.length = strlen(str);
+ FLAC__metadata_object_vorbiscomment_insert_comment(vc_block,
+ vc_block->data.vorbis_comment.num_comments, entry, true);
+ g_free(str);
+ str_unref(val);
+}
+
+static void insert_int_tuple_to_vc (FLAC__StreamMetadata * vc_block,
+ const Tuple * tuple, gint tuple_name, gchar * field_name)
+{
+ FLAC__StreamMetadata_VorbisComment_Entry entry;
+ gchar *str;
+ gint val = tuple_get_int(tuple, tuple_name, NULL);
+
+ if (val <= 0)
+ return;
+
+ if (FIELD_TRACK_NUMBER == tuple_name)
+ str = g_strdup_printf("%s=%.2d", field_name, val);
+ else
+ str = g_strdup_printf("%s=%d", field_name, val);
+
+ entry.entry = (FLAC__byte *) str;
+ entry.length = strlen(str);
+ FLAC__metadata_object_vorbiscomment_insert_comment(vc_block,
+ vc_block->data.vorbis_comment.num_comments, entry, true);
+ g_free(str);
+}
+
+gboolean flac_update_song_tuple(const Tuple *tuple, VFSFile *fd)
+{
+ AUDDBG("Update song tuple.\n");
+
+ FLAC__Metadata_Iterator *iter;
+ FLAC__Metadata_Chain *chain;
+ FLAC__StreamMetadata *vc_block;
+ FLAC__Metadata_ChainStatus status;
+
+ chain = FLAC__metadata_chain_new();
+ g_return_val_if_fail(chain != NULL, FALSE);
+
+ if (!FLAC__metadata_chain_read_with_callbacks(chain, fd, io_callbacks))
+ goto ERR;
+
+ iter = FLAC__metadata_iterator_new();
+ g_return_val_if_fail(iter != NULL, FALSE);
+
+ FLAC__metadata_iterator_init(iter, chain);
+
+ while (FLAC__metadata_iterator_next(iter))
+ if (FLAC__metadata_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_VORBIS_COMMENT)
+ {
+ FLAC__metadata_iterator_delete_block(iter, true);
+ break;
+ }
+
+ vc_block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
+
+ insert_str_tuple_to_vc(vc_block, tuple, FIELD_TITLE, "TITLE");
+ insert_str_tuple_to_vc(vc_block, tuple, FIELD_ARTIST, "ARTIST");
+ insert_str_tuple_to_vc(vc_block, tuple, FIELD_ALBUM, "ALBUM");
+ insert_str_tuple_to_vc(vc_block, tuple, FIELD_GENRE, "GENRE");
+ insert_str_tuple_to_vc(vc_block, tuple, FIELD_COMMENT, "COMMENT");
+
+ insert_int_tuple_to_vc(vc_block, tuple, FIELD_YEAR, "DATE");
+ insert_int_tuple_to_vc(vc_block, tuple, FIELD_TRACK_NUMBER, "TRACKNUMBER");
+
+ FLAC__metadata_iterator_insert_block_after(iter, vc_block);
+
+ FLAC__metadata_iterator_delete(iter);
+ FLAC__metadata_chain_sort_padding(chain);
+
+ if (!FLAC__metadata_chain_write_with_callbacks(chain, TRUE, fd, io_callbacks))
+ goto ERR;
+
+ FLAC__metadata_chain_delete(chain);
+ return TRUE;
+
+ERR:
+ status = FLAC__metadata_chain_status(chain);
+ FLAC__metadata_chain_delete(chain);
+
+ FLACNG_ERROR("An error occured: %s\n", FLAC__Metadata_ChainStatusString[status]);
+ return FALSE;
+}
+
+gboolean flac_get_image(const gchar *filename, VFSFile *fd, void **data, gint64 *length)
+{
+ AUDDBG("Probe for song image.\n");
+
+ FLAC__Metadata_Iterator *iter;
+ FLAC__Metadata_Chain *chain;
+ FLAC__StreamMetadata *metadata = NULL;
+ FLAC__Metadata_ChainStatus status;
+ gboolean has_image = FALSE;
+
+ chain = FLAC__metadata_chain_new();
+ g_return_val_if_fail(chain != NULL, FALSE);
+
+ if (!FLAC__metadata_chain_read_with_callbacks(chain, fd, io_callbacks))
+ goto ERR;
+
+ iter = FLAC__metadata_iterator_new();
+ g_return_val_if_fail(iter != NULL, FALSE);
+
+ FLAC__metadata_iterator_init(iter, chain);
+
+ while (FLAC__metadata_iterator_next(iter))
+ if (FLAC__metadata_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_PICTURE)
+ break;
+
+ if (FLAC__metadata_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_PICTURE)
+ {
+ metadata = FLAC__metadata_iterator_get_block(iter);
+
+ if (metadata->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER)
+ {
+ AUDDBG("FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER found.");
+
+ *data = g_memdup(metadata->data.picture.data, metadata->data.picture.data_length);
+ *length = metadata->data.picture.data_length;
+ has_image = TRUE;
+ }
+ }
+
+ FLAC__metadata_iterator_delete(iter);
+ FLAC__metadata_chain_delete(chain);
+
+ return has_image;
+
+ERR:
+ status = FLAC__metadata_chain_status(chain);
+ FLAC__metadata_chain_delete(chain);
+
+ FLACNG_ERROR("An error occured: %s\n", FLAC__Metadata_ChainStatusString[status]);
+ return FALSE;
+}
+
+static void parse_gain_text(const gchar *text, gint *value, gint *unit)
+{
+ gint sign = 1;
+
+ *value = 0;
+ *unit = 1;
+
+ if (*text == '-')
+ {
+ sign = -1;
+ text++;
+ }
+
+ while (*text >= '0' && *text <= '9')
+ {
+ *value = *value * 10 + (*text - '0');
+ text++;
+ }
+
+ if (*text == '.')
+ {
+ text++;
+
+ while (*text >= '0' && *text <= '9' && *value < G_MAXINT / 10)
+ {
+ *value = *value * 10 + (*text - '0');
+ *unit = *unit * 10;
+ text++;
+ }
+ }
+
+ *value = *value * sign;
+}
+
+static void set_gain_info(Tuple *tuple, gint field, gint unit_field, const gchar *text)
+{
+ gint value, unit;
+
+ parse_gain_text(text, &value, &unit);
+
+ if (tuple_get_value_type(tuple, unit_field, NULL) == TUPLE_INT)
+ value = value * (gint64) tuple_get_int(tuple, unit_field, NULL) / unit;
+ else
+ tuple_set_int(tuple, unit_field, NULL, unit);
+
+ tuple_set_int(tuple, field, NULL, value);
+}
+
+static void add_text (Tuple * tuple, gint field, const gchar * value)
+{
+ gchar * cur = tuple_get_str (tuple, field, NULL);
+ if (cur)
+ {
+ gchar * both = g_strconcat (cur, ", ", value, NULL);
+ tuple_set_str (tuple, field, NULL, both);
+ g_free(both);
+ }
+ else
+ tuple_set_str (tuple, field, NULL, value);
+
+ str_unref(cur);
+}
+
+static void parse_comment (Tuple * tuple, const gchar * key, const gchar * value)
+{
+ AUDDBG ("Found key %s <%s>\n", key, value);
+
+ const struct {
+ const gchar * key;
+ int field;
+ } tfields[] = {
+ {"ARTIST", FIELD_ARTIST},
+ {"ALBUM", FIELD_ALBUM},
+ {"TITLE", FIELD_TITLE},
+ {"COMMENT", FIELD_COMMENT},
+ {"GENRE", FIELD_GENRE}};
+
+ for (gint i = 0; i < G_N_ELEMENTS (tfields); i ++)
+ {
+ if (! strcasecmp (key, tfields[i].key))
+ {
+ add_text (tuple, tfields[i].field, value);
+ return;
+ }
+ }
+
+ if (! strcasecmp (key, "TRACKNUMBER"))
+ tuple_set_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(value));
+ else if (! strcasecmp (key, "DATE"))
+ tuple_set_int(tuple, FIELD_YEAR, NULL, atoi(value));
+ else if (! strcasecmp (key, "REPLAYGAIN_TRACK_GAIN"))
+ set_gain_info(tuple, FIELD_GAIN_TRACK_GAIN, FIELD_GAIN_GAIN_UNIT, value);
+ else if (! strcasecmp (key, "REPLAYGAIN_TRACK_PEAK"))
+ set_gain_info(tuple, FIELD_GAIN_TRACK_PEAK, FIELD_GAIN_PEAK_UNIT, value);
+ else if (! strcasecmp (key, "REPLAYGAIN_ALBUM_GAIN"))
+ set_gain_info(tuple, FIELD_GAIN_ALBUM_GAIN, FIELD_GAIN_GAIN_UNIT, value);
+ else if (! strcasecmp (key, "REPLAYGAIN_ALBUM_PEAK"))
+ set_gain_info(tuple, FIELD_GAIN_ALBUM_PEAK, FIELD_GAIN_PEAK_UNIT, value);
+}
+
+Tuple *flac_probe_for_tuple(const gchar *filename, VFSFile *fd)
+{
+ AUDDBG("Probe for tuple.\n");
+
+ Tuple *tuple = NULL;
+ FLAC__Metadata_Iterator *iter;
+ FLAC__Metadata_Chain *chain;
+ FLAC__StreamMetadata *metadata = NULL;
+ FLAC__Metadata_ChainStatus status;
+ FLAC__StreamMetadata_VorbisComment_Entry *entry;
+ gchar *key;
+ gchar *value;
+
+ tuple = tuple_new_from_filename(filename);
+
+ tuple_set_str(tuple, FIELD_CODEC, NULL, "Free Lossless Audio Codec (FLAC)");
+ tuple_set_str(tuple, FIELD_QUALITY, NULL, "lossless");
+
+ chain = FLAC__metadata_chain_new();
+ g_return_val_if_fail(chain != NULL, FALSE);
+
+ if (!FLAC__metadata_chain_read_with_callbacks(chain, fd, io_callbacks))
+ goto ERR;
+
+ iter = FLAC__metadata_iterator_new();
+ g_return_val_if_fail(iter != NULL, FALSE);
+
+ FLAC__metadata_iterator_init(iter, chain);
+
+ do
+ {
+ switch (FLAC__metadata_iterator_get_block_type(iter))
+ {
+ case FLAC__METADATA_TYPE_VORBIS_COMMENT:
+
+ if (FLAC__metadata_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_VORBIS_COMMENT)
+ {
+ metadata = FLAC__metadata_iterator_get_block(iter);
+
+ AUDDBG("Vorbis comment contains %d fields\n", metadata->data.vorbis_comment.num_comments);
+ AUDDBG("Vendor string: %s\n", metadata->data.vorbis_comment.vendor_string.entry);
+
+ entry = metadata->data.vorbis_comment.comments;
+
+ for (gint i = 0; i < metadata->data.vorbis_comment.num_comments; i++, entry++)
+ {
+ if (FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(*entry, &key, &value) == false)
+ AUDDBG("Could not parse comment\n");
+ else
+ {
+ parse_comment(tuple, key, value);
+ g_free(key);
+ g_free(value);
+ }
+ }
+ }
+ break;
+
+ case FLAC__METADATA_TYPE_STREAMINFO:
+ metadata = FLAC__metadata_iterator_get_block(iter);
+
+ /* Calculate the stream length (milliseconds) */
+ if (metadata->data.stream_info.sample_rate == 0)
+ {
+ FLACNG_ERROR("Invalid sample rate for stream!\n");
+ tuple_set_int(tuple, FIELD_LENGTH, NULL, -1);
+ }
+ else
+ {
+ tuple_set_int(tuple, FIELD_LENGTH, NULL,
+ (metadata->data.stream_info.total_samples / metadata->data.stream_info.sample_rate) * 1000);
+ AUDDBG("Stream length: %d seconds\n", tuple_get_int(tuple, FIELD_LENGTH, NULL));
+ }
+
+ gsize size = vfs_fsize(fd);
+
+ if (size == -1 || metadata->data.stream_info.total_samples == 0)
+ tuple_set_int(tuple, FIELD_BITRATE, NULL, 0);
+ else
+ {
+ gint bitrate = 8 * size *
+ (gint64) metadata->data.stream_info.sample_rate / metadata->data.stream_info.total_samples;
+
+ tuple_set_int(tuple, FIELD_BITRATE, NULL, (bitrate + 500) / 1000);
+ }
+ break;
+
+ default:
+ ;
+ }
+ } while (FLAC__metadata_iterator_next(iter));
+
+ FLAC__metadata_iterator_delete(iter);
+ FLAC__metadata_chain_delete(chain);
+
+ return tuple;
+
+ERR:
+ status = FLAC__metadata_chain_status(chain);
+ FLAC__metadata_chain_delete(chain);
+
+ FLACNG_ERROR("An error occured: %s\n", FLAC__Metadata_ChainStatusString[status]);
+ return tuple;
+}
diff --git a/src/flacng/plugin.c b/src/flacng/plugin.c
index 8a1dc8a..381c643 100644
--- a/src/flacng/plugin.c
+++ b/src/flacng/plugin.c
@@ -1,7 +1,7 @@
/*
* A FLAC decoder plugin for the Audacious Media Player
* Copyright (C) 2005 Ralf Ertzinger
- * Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
+ * Copyright (C) 2010-2011 Michał Lipski <tallica@o2.pl>
*
* 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
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#include <string.h>
+
#include <audacious/debug.h>
#include <audacious/i18n.h>
#include <libaudgui/libaudgui.h>
@@ -25,68 +27,29 @@
#include "flacng.h"
-#include "tools.h"
-#include "seekable_stream_callbacks.h"
-#include "version.h"
-
-FLAC__StreamDecoder *test_decoder;
FLAC__StreamDecoder *main_decoder;
-callback_info *test_info;
callback_info *main_info;
-gboolean plugin_initialized = FALSE;
static GMutex *seek_mutex;
static GCond *seek_cond;
static gint seek_value;
+static gboolean stop_flag = FALSE;
-static void flac_init(void)
+static gboolean flac_init (void)
{
FLAC__StreamDecoderInitStatus ret;
- /* Callback structure and decoder for file test purposes */
-
- if ((test_info = init_callback_info()) == NULL)
- {
- ERROR("Could not initialize the test callback structure!\n");
- return;
- }
-
- if ((test_decoder = FLAC__stream_decoder_new()) == NULL)
- {
- ERROR("Could not create the test FLAC decoder instance!\n");
- return;
- }
-
- FLAC__stream_decoder_set_metadata_respond(test_decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT);
-
- if (FLAC__STREAM_DECODER_INIT_STATUS_OK != (ret = FLAC__stream_decoder_init_stream(
- test_decoder,
- read_callback,
- seek_callback,
- tell_callback,
- length_callback,
- eof_callback,
- write_callback,
- metadata_callback,
- error_callback,
- test_info)))
- {
- ERROR("Could not initialize the test FLAC decoder: %s(%d)\n",
- FLAC__StreamDecoderInitStatusString[ret], ret);
- return;
- }
-
/* Callback structure and decoder for main decoding loop */
if ((main_info = init_callback_info()) == NULL)
{
- ERROR("Could not initialize the main callback structure!\n");
- return;
+ FLACNG_ERROR("Could not initialize the main callback structure!\n");
+ return FALSE;
}
if ((main_decoder = FLAC__stream_decoder_new()) == NULL)
{
- ERROR("Could not create the main FLAC decoder instance!\n");
- return;
+ FLACNG_ERROR("Could not create the main FLAC decoder instance!\n");
+ return FALSE;
}
if (FLAC__STREAM_DECODER_INIT_STATUS_OK != (ret = FLAC__stream_decoder_init_stream(
@@ -101,16 +64,16 @@ static void flac_init(void)
error_callback,
main_info)))
{
- ERROR("Could not initialize the main FLAC decoder: %s(%d)\n",
+ FLACNG_ERROR("Could not initialize the main FLAC decoder: %s(%d)\n",
FLAC__StreamDecoderInitStatusString[ret], ret);
- return;
+ return FALSE;
}
seek_mutex = g_mutex_new();
seek_cond = g_cond_new();
AUDDBG("Plugin initialized.\n");
- plugin_initialized = TRUE;
+ return TRUE;
}
static void flac_cleanup(void)
@@ -120,11 +83,6 @@ static void flac_cleanup(void)
FLAC__stream_decoder_delete(main_decoder);
clean_callback_info(main_info);
-
- FLAC__stream_decoder_delete(test_decoder);
- clean_callback_info(test_info);
-
- plugin_initialized = FALSE;
}
gboolean flac_is_our_fd(const gchar *filename, VFSFile *fd)
@@ -165,7 +123,7 @@ static void squeeze_audio(gint32* src, void* dst, guint count, guint res)
break;
default:
- ERROR("Can not convert to %d bps\n", res);
+ FLACNG_ERROR("Can not convert to %d bps\n", res);
}
}
@@ -180,25 +138,22 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
struct stream_info stream_info;
guint sample_count;
gpointer play_buffer = NULL;
-
- if (!plugin_initialized)
- {
- ERROR("Plugin not initialized!\n");
- return FALSE;
- }
+ gboolean error = FALSE;
main_info->fd = file;
if (read_metadata(main_decoder, main_info) == FALSE)
{
- ERROR("Could not prepare file for playing!\n");
+ FLACNG_ERROR("Could not prepare file for playing!\n");
+ error = TRUE;
goto ERR_NO_CLOSE;
}
if (main_info->stream.channels > MAX_SUPPORTED_CHANNELS)
{
- ERROR("This number of channels (%d) is currently not supported, stream not handled by this plugin.\n",
+ FLACNG_ERROR("This number of channels (%d) is currently not supported, stream not handled by this plugin.\n",
main_info->stream.channels);
+ error = TRUE;
goto ERR_NO_CLOSE;
}
@@ -207,14 +162,16 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
main_info->stream.bits_per_sample != 24 &&
main_info->stream.bits_per_sample != 32)
{
- ERROR("This number of bits (%d) is currently not supported, stream not handled by this plugin.\n",
+ FLACNG_ERROR("This number of bits (%d) is currently not supported, stream not handled by this plugin.\n",
main_info->stream.bits_per_sample);
+ error = TRUE;
goto ERR_NO_CLOSE;
}
if ((play_buffer = g_malloc0(BUFFER_SIZE_BYTE)) == NULL)
{
- ERROR("Could not allocate conversion buffer\n");
+ FLACNG_ERROR("Could not allocate conversion buffer\n");
+ error = TRUE;
goto ERR_NO_CLOSE;
}
@@ -222,7 +179,7 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
(main_info->stream.bits_per_sample), main_info->stream.samplerate,
main_info->stream.channels))
{
- ERROR("Could not open output plugin!\n");
+ error = TRUE;
goto ERR_NO_CLOSE;
}
@@ -230,9 +187,9 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
playback->output->pause (TRUE);
seek_value = (start_time > 0) ? start_time : -1;
- playback->playing = TRUE;
+ stop_flag = FALSE;
- playback->set_params(playback, NULL, 0, main_info->bitrate,
+ playback->set_params(playback, main_info->bitrate,
main_info->stream.samplerate, main_info->stream.channels);
playback->set_pb_ready(playback);
@@ -242,15 +199,32 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
playback->set_gain_from_playlist(playback);
- while (playback->playing)
+ while (1)
{
- if (stop_time >= 0 && playback->output->written_time () >= stop_time)
- goto DRAIN;
+ g_mutex_lock(seek_mutex);
+
+ if (stop_flag)
+ {
+ g_mutex_unlock(seek_mutex);
+ break;
+ }
+
+ if (seek_value >= 0)
+ {
+ playback->output->flush (seek_value);
+ FLAC__stream_decoder_seek_absolute (main_decoder, (gint64)
+ seek_value * main_info->stream.samplerate / 1000);
+ seek_value = -1;
+ g_cond_signal(seek_cond);
+ }
+
+ g_mutex_unlock(seek_mutex);
/* Try to decode a single frame of audio */
if (FLAC__stream_decoder_process_single(main_decoder) == FALSE)
{
- ERROR("Error while decoding!\n");
+ FLACNG_ERROR("Error while decoding!\n");
+ error = TRUE;
goto CLEANUP;
}
@@ -260,15 +234,17 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
/* Samplerate and channels are important */
if (stream_info.samplerate != main_info->stream.samplerate)
{
- ERROR("Samplerate changed midstream (now: %d, was: %d). This is not supported yet.\n",
+ FLACNG_ERROR("Samplerate changed midstream (now: %d, was: %d). This is not supported yet.\n",
main_info->stream.samplerate, stream_info.samplerate);
+ error = TRUE;
goto CLEANUP;
}
if (stream_info.channels != main_info->stream.channels)
{
- ERROR("Number of channels changed midstream (now: %d, was: %d). This is not supported yet.\n",
+ FLACNG_ERROR("Number of channels changed midstream (now: %d, was: %d). This is not supported yet.\n",
main_info->stream.channels, stream_info.channels);
+ error = TRUE;
goto CLEANUP;
}
@@ -278,31 +254,20 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
/* Compare the frame metadata to the current stream metadata */
if (main_info->stream.samplerate != main_info->frame.samplerate)
{
- ERROR("Frame samplerate mismatch (stream: %d, frame: %d)!\n",
+ FLACNG_ERROR("Frame samplerate mismatch (stream: %d, frame: %d)!\n",
main_info->stream.samplerate, main_info->frame.samplerate);
+ error = TRUE;
goto CLEANUP;
}
if (main_info->stream.channels != main_info->frame.channels)
{
- ERROR("Frame channel mismatch (stream: %d, frame: %d)!\n",
+ FLACNG_ERROR("Frame channel mismatch (stream: %d, frame: %d)!\n",
main_info->stream.channels, main_info->frame.channels);
+ error = TRUE;
goto CLEANUP;
}
- g_mutex_lock(seek_mutex);
-
- if (seek_value >= 0)
- {
- playback->output->flush (seek_value);
- FLAC__stream_decoder_seek_absolute (main_decoder, (gint64)
- seek_value * main_info->stream.samplerate / 1000);
- seek_value = -1;
- g_cond_signal(seek_cond);
- }
-
- g_mutex_unlock(seek_mutex);
-
/*
* If the frame decoded was an audio frame we now
* have data in main_info->output_buffer
@@ -317,10 +282,10 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
read_pointer = main_info->output_buffer;
elements_left = main_info->buffer_used;
- while (playback->playing && elements_left != 0)
+ while (!stop_flag && elements_left != 0)
{
if (stop_time >= 0 && playback->output->written_time () >= stop_time)
- goto DRAIN;
+ goto CLEANUP;
sample_count = MIN(OUTPUT_BLOCK_SIZE, elements_left);
@@ -343,18 +308,15 @@ static gboolean flac_play (InputPlayback * playback, const gchar * filename,
{
/* Yes. Drain the output buffer and stop playing. */
AUDDBG("End of stream reached, draining output buffer\n");
-
-DRAIN:
- while (playback->output->buffer_playing() && playback->playing)
- g_usleep(20000);
-
goto CLEANUP;
}
}
CLEANUP:
+ while (playback->output->buffer_playing())
+ g_usleep(20000);
+
g_mutex_lock(seek_mutex);
- playback->playing = FALSE;
g_cond_signal(seek_cond); /* wake up any waiting request */
g_mutex_unlock(seek_mutex);
@@ -363,24 +325,22 @@ CLEANUP:
AUDDBG("Audio device closed.\n");
ERR_NO_CLOSE:
- if (play_buffer)
- g_free(play_buffer);
-
+ g_free(play_buffer);
reset_info(main_info);
if (FLAC__stream_decoder_flush(main_decoder) == FALSE)
- ERROR("Could not flush decoder state!\n");
+ FLACNG_ERROR("Could not flush decoder state!\n");
- return ! playback->error;
+ return ! error;
}
static void flac_stop(InputPlayback *playback)
{
g_mutex_lock(seek_mutex);
- if (playback->playing)
+ if (!stop_flag)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
playback->output->abort_write();
g_cond_signal(seek_cond);
}
@@ -388,21 +348,21 @@ static void flac_stop(InputPlayback *playback)
g_mutex_unlock (seek_mutex);
}
-static void flac_pause(InputPlayback *playback, gshort pause)
+static void flac_pause(InputPlayback *playback, gboolean pause)
{
g_mutex_lock(seek_mutex);
- if (playback->playing)
+ if (!stop_flag)
playback->output->pause(pause);
g_mutex_unlock(seek_mutex);
}
-static void flac_seek (InputPlayback * playback, gulong time)
+static void flac_seek (InputPlayback * playback, gint time)
{
g_mutex_lock(seek_mutex);
- if (playback->playing)
+ if (!stop_flag)
{
seek_value = time;
playback->output->abort_write();
@@ -413,202 +373,22 @@ static void flac_seek (InputPlayback * playback, gulong time)
g_mutex_unlock(seek_mutex);
}
-static Tuple *flac_probe_for_tuple(const gchar *filename, VFSFile *fd)
-{
- AUDDBG("Probe for tuple.\n");
- Tuple *tuple = NULL;
-
- g_mutex_lock(test_info->mutex);
-
- test_info->fd = fd;
-
- if (read_metadata(test_decoder, test_info))
- tuple = get_tuple_from_file(filename, test_info);
- else
- ERROR("Could not read metadata tuple for file <%s>\n", filename);
-
- reset_info(test_info);
- g_mutex_unlock(test_info->mutex);
-
- return tuple;
-}
-
static void flac_aboutbox(void)
{
- static GtkWidget* about_window;
- gchar *about_text;
-
- if (about_window) {
- gtk_window_present(GTK_WINDOW(about_window));
- return;
- }
-
- about_text = g_strjoin("", _("FLAC Audio Plugin "), _VERSION,
- _("\n\nOriginal code by\n"
- "Ralf Ertzinger <ralf@skytale.net>\n"
- "\n"
- "http://www.skytale.net/projects/bmp-flac2/"), NULL);
-
- audgui_simple_message (& about_window, GTK_MESSAGE_INFO,
- _("About FLAC Audio Plugin"), about_text);
-
- g_free(about_text);
-}
-
-static void insert_str_tuple_to_vc (FLAC__StreamMetadata * vc_block,
- const Tuple * tuple, gint tuple_name, gchar * field_name)
-{
- FLAC__StreamMetadata_VorbisComment_Entry entry;
- gchar *str;
- gchar *val = (gchar *) tuple_get_string(tuple, tuple_name, NULL);
-
- if (val == NULL)
- return;
-
- str = g_strdup_printf("%s=%s", field_name, val);
- entry.entry = (FLAC__byte *) str;
- entry.length = strlen(str);
- FLAC__metadata_object_vorbiscomment_replace_comment(vc_block, entry, false, true);
- g_free(str);
-}
-
-static void insert_int_tuple_to_vc (FLAC__StreamMetadata * vc_block,
- const Tuple * tuple, gint tuple_name, gchar * field_name)
-{
- FLAC__StreamMetadata_VorbisComment_Entry entry;
- gchar *str;
- gint val = tuple_get_int(tuple, tuple_name, NULL);
-
- if (val <= 0)
- return;
-
- if (FIELD_TRACK_NUMBER == tuple_name)
- str = g_strdup_printf("%s=%.2d", field_name, val);
- else
- str = g_strdup_printf("%s=%d", field_name, val);
-
- entry.entry = (FLAC__byte *) str;
- entry.length = strlen(str);
- FLAC__metadata_object_vorbiscomment_replace_comment(vc_block, entry, false, true);
- g_free(str);
-}
-
-gboolean flac_update_song_tuple (const Tuple * tuple, VFSFile * fd)
-{
- AUDDBG("Update song tuple.\n");
- FLAC__Metadata_SimpleIterator *iter;
- FLAC__StreamMetadata *vc_block;
- gchar *filename;
- FLAC__bool ret;
-
- if (fd != NULL)
- filename = g_filename_from_uri(fd->uri, NULL, NULL);
- else
- return FALSE;
-
- iter = FLAC__metadata_simple_iterator_new();
- g_return_val_if_fail(iter != NULL, FALSE);
-
- ret = FLAC__metadata_simple_iterator_init(iter, filename, false, false);
-
- if (!ret)
- {
- FLAC__metadata_simple_iterator_delete(iter);
- return FALSE;
- }
-
- while (FLAC__metadata_simple_iterator_get_block_type(iter) != FLAC__METADATA_TYPE_VORBIS_COMMENT)
- {
- if (!FLAC__metadata_simple_iterator_next(iter))
- break;
- }
-
- if (FLAC__metadata_simple_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_VORBIS_COMMENT)
- vc_block = FLAC__metadata_simple_iterator_get_block(iter);
- else
- vc_block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
-
- insert_str_tuple_to_vc(vc_block, tuple, FIELD_TITLE, "TITLE");
- insert_str_tuple_to_vc(vc_block, tuple, FIELD_ARTIST, "ARTIST");
- insert_str_tuple_to_vc(vc_block, tuple, FIELD_ALBUM, "ALBUM");
- insert_str_tuple_to_vc(vc_block, tuple, FIELD_GENRE, "GENRE");
- insert_str_tuple_to_vc(vc_block, tuple, FIELD_COMMENT, "COMMENT");
-
- insert_int_tuple_to_vc(vc_block, tuple, FIELD_YEAR, "DATE");
- insert_int_tuple_to_vc(vc_block, tuple, FIELD_TRACK_NUMBER, "TRACKNUMBER");
-
- if (FLAC__metadata_simple_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_VORBIS_COMMENT)
- ret = FLAC__metadata_simple_iterator_set_block(iter, vc_block, true);
- else
- ret = FLAC__metadata_simple_iterator_insert_block_after(iter, vc_block, true);
-
- FLAC__metadata_simple_iterator_delete(iter);
- FLAC__metadata_object_delete(vc_block);
-
- if (!ret)
- return FALSE;
- else
- return TRUE;
-}
-
-#ifdef FLAC__METADATA_TYPE_PICTURE
-static gboolean flac_get_image(const gchar *filename, VFSFile *fd, void **data, gint *length)
-{
- AUDDBG("Probe for song image.\n");
-
- FLAC__Metadata_SimpleIterator *iter;
- FLAC__StreamMetadata *metadata = NULL;
- FLAC__bool ret;
- gboolean has_image = FALSE;
-
- if (fd != NULL)
- filename = g_filename_from_uri(fd->uri, NULL, NULL);
- else
- return FALSE;
+ static GtkWidget * window = NULL;
- iter = FLAC__metadata_simple_iterator_new();
- g_return_val_if_fail(iter != NULL, FALSE);
-
- ret = FLAC__metadata_simple_iterator_init(iter, filename, false, false);
-
- if (!ret)
- goto CLEANUP;
-
- while (FLAC__metadata_simple_iterator_get_block_type(iter) != FLAC__METADATA_TYPE_PICTURE)
- {
- if (!FLAC__metadata_simple_iterator_next(iter))
- break;
- }
-
- if (FLAC__metadata_simple_iterator_get_block_type(iter) == FLAC__METADATA_TYPE_PICTURE)
- {
- metadata = FLAC__metadata_simple_iterator_get_block(iter);
-
- if (metadata->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER)
- {
- AUDDBG("FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER found.");
-
- *data = g_memdup(metadata->data.picture.data, metadata->data.picture.data_length);
- *length = (guint32) metadata->data.picture.data_length;
- has_image = TRUE;
- goto CLEANUP;
- }
- }
-
-CLEANUP:
- FLAC__metadata_simple_iterator_delete(iter);
-
- if (metadata)
- FLAC__metadata_object_delete(metadata);
-
- return has_image;
+ audgui_simple_message(& window, GTK_MESSAGE_INFO, _("About FLAC Audio Plugin"),
+ _("\n\nOriginal code by\n"
+ "Ralf Ertzinger <ralf@skytale.net>\n\n"
+ "http://www.skytale.net/projects/bmp-flac2/")
+);
}
-#endif
static const gchar *flac_fmts[] = { "flac", "fla", NULL };
-InputPlugin flac_ip = {
- .description = "FLACng Audio Plugin",
+AUD_INPUT_PLUGIN
+(
+ .name = "FLAC",
.init = flac_init,
.cleanup = flac_cleanup,
.about = flac_aboutbox,
@@ -618,14 +398,8 @@ InputPlugin flac_ip = {
.mseek = flac_seek,
.probe_for_tuple = flac_probe_for_tuple,
.is_our_file_from_vfs = flac_is_our_fd,
- .vfs_extensions = flac_fmts,
+ .extensions = flac_fmts,
.update_song_tuple = flac_update_song_tuple,
-#ifdef FLAC__METADATA_TYPE_PICTURE
.get_song_image = flac_get_image,
-#endif
.priority = 1
-};
-
-InputPlugin *flac_iplist[] = { &flac_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN (flacng, flac_iplist)
+)
diff --git a/src/flacng/seekable_stream_callbacks.c b/src/flacng/seekable_stream_callbacks.c
index a6ccf59..7afacbf 100644
--- a/src/flacng/seekable_stream_callbacks.c
+++ b/src/flacng/seekable_stream_callbacks.c
@@ -1,6 +1,7 @@
/*
* A FLAC decoder plugin for the Audacious Media Player
* Copyright (C) 2005 Ralf Ertzinger
+ * Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
*
* 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
@@ -24,8 +25,6 @@
#include <audacious/debug.h>
#include "flacng.h"
-#include "tools.h"
-#include "seekable_stream_callbacks.h"
FLAC__StreamDecoderReadStatus read_callback(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
{
@@ -34,7 +33,7 @@ FLAC__StreamDecoderReadStatus read_callback(const FLAC__StreamDecoder *decoder,
if (info->fd == NULL)
{
- ERROR("Trying to read data from an uninitialized file!\n");
+ FLACNG_ERROR("Trying to read data from an uninitialized file!\n");
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
}
@@ -47,7 +46,7 @@ FLAC__StreamDecoderReadStatus read_callback(const FLAC__StreamDecoder *decoder,
switch (read)
{
case -1:
- ERROR("Error while reading from stream!\n");
+ FLACNG_ERROR("Error while reading from stream!\n");
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
case 0:
@@ -65,7 +64,7 @@ FLAC__StreamDecoderSeekStatus seek_callback(const FLAC__StreamDecoder *decoder,
if (vfs_fseek(info->fd, offset, SEEK_SET) != 0)
{
- ERROR("Could not seek to %lld!\n", (long long)offset);
+ FLACNG_ERROR("Could not seek to %lld!\n", (long long)offset);
return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
}
@@ -78,7 +77,7 @@ FLAC__StreamDecoderTellStatus tell_callback(const FLAC__StreamDecoder *decoder,
if ((*offset = vfs_ftell(info->fd)) == -1)
{
- ERROR("Could not tell current position!\n");
+ FLACNG_ERROR("Could not tell current position!\n");
return FLAC__STREAM_DECODER_TELL_STATUS_ERROR;
}
@@ -127,7 +126,7 @@ FLAC__StreamDecoderWriteStatus write_callback(const FLAC__StreamDecoder *decoder
*/
if (info->buffer_free < (frame->header.blocksize * frame->header.channels))
{
- ERROR("BUG! Too much data decoded from stream!\n");
+ FLACNG_ERROR("BUG! Too much data decoded from stream!\n");
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
}
@@ -136,7 +135,7 @@ FLAC__StreamDecoderWriteStatus write_callback(const FLAC__StreamDecoder *decoder
frame->header.bits_per_sample != 24 &&
frame->header.bits_per_sample != 32)
{
- ERROR("Unsupported bitrate found in stream: %d!\n", frame->header.bits_per_sample);
+ FLACNG_ERROR("Unsupported bitrate found in stream: %d!\n", frame->header.bits_per_sample);
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
}
@@ -164,92 +163,37 @@ FLAC__StreamDecoderWriteStatus write_callback(const FLAC__StreamDecoder *decoder
void error_callback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
{
- ERROR("FLAC decoder error callback was called: %d\n", status);
+ FLACNG_ERROR("FLAC decoder error callback was called: %d\n", status);
}
void metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
{
callback_info *info = (callback_info*) client_data;
- gint i;
- FLAC__StreamMetadata *metadata_copy;
- FLAC__StreamMetadata_VorbisComment_Entry *entry;
- gchar *key;
- gchar *value;
gsize size;
- switch (metadata->type)
+ if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO)
{
- case FLAC__METADATA_TYPE_STREAMINFO:
- /* Basic stream information. Sample rate, channels and stuff */
- AUDDBG("FLAC__METADATA_TYPE_STREAMINFO found.\n");
-
- info->stream.samples = metadata->data.stream_info.total_samples;
- AUDDBG("total_samples=%lld\n", (long long) metadata->data.stream_info.total_samples);
-
- info->stream.bits_per_sample = metadata->data.stream_info.bits_per_sample;
- AUDDBG("bits_per_sample=%d\n", metadata->data.stream_info.bits_per_sample);
-
- info->stream.channels = metadata->data.stream_info.channels;
- AUDDBG("channels=%d\n", metadata->data.stream_info.channels);
-
- info->stream.samplerate = metadata->data.stream_info.sample_rate;
- AUDDBG("sample_rate=%d\n", metadata->data.stream_info.sample_rate);
-
- size = vfs_fsize(info->fd);
-
- if (size == -1 || info->stream.samples == 0)
- info->bitrate = 0;
- else
- info->bitrate = 8 * size * (gint64) info->stream.samplerate / info->stream.samples;
-
- AUDDBG("bitrate=%d\n", info->bitrate);
-
- info->metadata_changed = TRUE;
- break;
-
- case FLAC__METADATA_TYPE_VORBIS_COMMENT:
- /*
- * We will possibly need to modify some of the entries
- * in the metadata field, so we make a copy of it
- * first.
- * The original structure must not be modified.
- */
- metadata_copy = FLAC__metadata_object_clone(metadata);
-
- /* A vorbis type comment field. */
- AUDDBG("FLAC__METADATA_TYPE_VORBIS_COMMENT found.\n");
- AUDDBG("Vorbis comment contains %d fields\n", metadata_copy->data.vorbis_comment.num_comments);
- AUDDBG("Vendor string: %s\n", metadata_copy->data.vorbis_comment.vendor_string.entry);
-
- /* Enumerate the comment entries */
- entry = metadata_copy->data.vorbis_comment.comments;
-
- for (i = 0; i < metadata_copy->data.vorbis_comment.num_comments; i++, entry++)
- {
- /*
- * Try and parse the comment.
- * If FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair() succeeds,
- * it allocates memory for the key and value which we have to take
- * care of.
- */
- if (FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(*entry, &key, &value) == false)
- AUDDBG("Could not parse comment\n");
- else
- {
- add_comment(info, key, value);
- g_free(key);
- g_free(value);
- }
- }
-
- /* Free our metadata copy */
- FLAC__metadata_object_delete(metadata_copy);
-
- info->metadata_changed = TRUE;
- break;
+ info->stream.samples = metadata->data.stream_info.total_samples;
+ AUDDBG("total_samples=%lld\n", (long long) metadata->data.stream_info.total_samples);
- default:
- break;
+ info->stream.bits_per_sample = metadata->data.stream_info.bits_per_sample;
+ AUDDBG("bits_per_sample=%d\n", metadata->data.stream_info.bits_per_sample);
+
+ info->stream.channels = metadata->data.stream_info.channels;
+ AUDDBG("channels=%d\n", metadata->data.stream_info.channels);
+
+ info->stream.samplerate = metadata->data.stream_info.sample_rate;
+ AUDDBG("sample_rate=%d\n", metadata->data.stream_info.sample_rate);
+
+ size = vfs_fsize(info->fd);
+
+ if (size == -1 || info->stream.samples == 0)
+ info->bitrate = 0;
+ else
+ info->bitrate = 8 * size * (gint64) info->stream.samplerate / info->stream.samples;
+
+ AUDDBG("bitrate=%d\n", info->bitrate);
+
+ info->metadata_changed = TRUE;
}
- return;
}
diff --git a/src/flacng/seekable_stream_callbacks.h b/src/flacng/seekable_stream_callbacks.h
deleted file mode 100644
index 3c32d96..0000000
--- a/src/flacng/seekable_stream_callbacks.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * A FLAC decoder plugin for the Audacious Media Player
- * Copyright (C) 2005 Ralf Ertzinger
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#ifndef CALLBACKS_H
-#define CALLBACKS_H
-
-#include "flac_compat.h"
-
-FLAC__StreamDecoderReadStatus read_callback(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-FLAC__StreamDecoderSeekStatus seek_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
-FLAC__StreamDecoderTellStatus tell_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
-FLAC__bool eof_callback(const FLAC__StreamDecoder *decoder, void *client_data);
-FLAC__StreamDecoderLengthStatus length_callback(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
-FLAC__StreamDecoderWriteStatus write_callback(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
-void error_callback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
-void metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
-
-#endif
diff --git a/src/flacng/tools.c b/src/flacng/tools.c
index 56d6ff1..bcdaca3 100644
--- a/src/flacng/tools.c
+++ b/src/flacng/tools.c
@@ -24,7 +24,7 @@
#include <audacious/debug.h>
-#include "tools.h"
+#include "flacng.h"
callback_info *init_callback_info(void)
{
@@ -32,20 +32,18 @@ callback_info *init_callback_info(void)
if ((info = g_slice_new0(callback_info)) == NULL)
{
- ERROR("Could not allocate memory for callback structure!");
+ FLACNG_ERROR("Could not allocate memory for callback structure!");
return NULL;
}
if ((info->output_buffer = g_malloc0(BUFFER_SIZE_BYTE)) == NULL)
{
- ERROR("Could not allocate memory for output buffer!");
+ FLACNG_ERROR("Could not allocate memory for output buffer!");
return NULL;
}
reset_info(info);
- info->mutex = g_mutex_new();
-
AUDDBG("Playback buffer allocated for %d samples, %d bytes\n", BUFFER_SIZE_SAMP, BUFFER_SIZE_BYTE);
return info;
@@ -53,7 +51,6 @@ callback_info *init_callback_info(void)
void clean_callback_info(callback_info *info)
{
- g_mutex_free(info->mutex);
g_free(info->output_buffer);
g_slice_free(callback_info, info);
}
@@ -68,21 +65,6 @@ void reset_info(callback_info *info)
memset(&(info->stream), 0, sizeof(info->stream));
memset(&(info->frame), 0, sizeof(info->frame));
- g_free(info->comment.artist);
- g_free(info->comment.album);
- g_free(info->comment.title);
- g_free(info->comment.tracknumber);
- g_free(info->comment.genre);
- g_free(info->comment.comment);
- g_free(info->comment.date);
- memset(&(info->comment), 0, sizeof(info->comment));
-
- g_free(info->replaygain.track_gain);
- g_free(info->replaygain.track_peak);
- g_free(info->replaygain.album_gain);
- g_free(info->replaygain.album_peak);
- memset(&(info->replaygain), 0, sizeof(info->replaygain));
-
info->metadata_changed = FALSE;
}
@@ -95,7 +77,7 @@ gboolean read_metadata(FLAC__StreamDecoder *decoder, callback_info *info)
/* Reset the decoder */
if (FLAC__stream_decoder_reset(decoder) == false)
{
- ERROR("Could not reset the decoder!\n");
+ FLACNG_ERROR("Could not reset the decoder!\n");
return FALSE;
}
@@ -111,211 +93,3 @@ gboolean read_metadata(FLAC__StreamDecoder *decoder, callback_info *info)
return TRUE;
}
-
-static void parse_gain_text(const gchar *text, gint *value, gint *unit)
-{
- gint sign = 1;
-
- *value = 0;
- *unit = 1;
-
- if (*text == '-')
- {
- sign = -1;
- text++;
- }
-
- while (*text >= '0' && *text <= '9')
- {
- *value = *value * 10 + (*text - '0');
- text++;
- }
-
- if (*text == '.')
- {
- text++;
-
- while (*text >= '0' && *text <= '9' && *value < G_MAXINT / 10)
- {
- *value = *value * 10 + (*text - '0');
- *unit = *unit * 10;
- text++;
- }
- }
-
- *value = *value * sign;
-}
-
-static void set_gain_info(Tuple *tuple, gint field, gint unit_field, const gchar *text)
-{
- gint value, unit;
-
- parse_gain_text(text, &value, &unit);
-
- if (tuple_get_value_type(tuple, unit_field, NULL) == TUPLE_INT)
- value = value * (gint64) tuple_get_int(tuple, unit_field, NULL) / unit;
- else
- tuple_associate_int(tuple, unit_field, NULL, unit);
-
- tuple_associate_int(tuple, field, NULL, value);
-}
-
-Tuple* get_tuple_from_file(const gchar *filename, callback_info *info)
-{
- Tuple *tuple;
-
- tuple = tuple_new_from_filename(filename);
-
- tuple_associate_string(tuple, FIELD_CODEC, NULL, "Free Lossless Audio Codec (FLAC)");
- tuple_associate_string(tuple, FIELD_QUALITY, NULL, "lossless");
-
- tuple_associate_string(tuple, FIELD_ARTIST, NULL, info->comment.artist);
- tuple_associate_string(tuple, FIELD_TITLE, NULL, info->comment.title);
- tuple_associate_string(tuple, FIELD_ALBUM, NULL, info->comment.album);
- tuple_associate_string(tuple, FIELD_GENRE, NULL, info->comment.genre);
- tuple_associate_string(tuple, FIELD_COMMENT, NULL, info->comment.comment);
-
- if (info->comment.tracknumber != NULL)
- tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(info->comment.tracknumber));
-
- if (info->comment.date != NULL)
- tuple_associate_int(tuple, FIELD_YEAR, NULL, atoi(info->comment.date));
-
- /* Calculate the stream length (milliseconds) */
- if (info->stream.samplerate == 0)
- {
- ERROR("Invalid sample rate for stream!\n");
- tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1);
- }
- else
- {
- tuple_associate_int(tuple, FIELD_LENGTH, NULL, (info->stream.samples / info->stream.samplerate) * 1000);
- AUDDBG("Stream length: %d seconds\n", tuple_get_int(tuple, FIELD_LENGTH, NULL));
- }
-
- if (info->bitrate > 0)
- tuple_associate_int(tuple, FIELD_BITRATE, NULL, (info->bitrate + 500) / 1000);
-
-
- if (info->replaygain.has_rg)
- {
- if (info->replaygain.album_gain != NULL)
- set_gain_info(tuple, FIELD_GAIN_ALBUM_GAIN, FIELD_GAIN_GAIN_UNIT,
- info->replaygain.album_gain);
-
- if (info->replaygain.album_peak != NULL)
- set_gain_info(tuple, FIELD_GAIN_ALBUM_PEAK, FIELD_GAIN_PEAK_UNIT,
- info->replaygain.album_peak);
-
- if (info->replaygain.track_gain != NULL)
- set_gain_info(tuple, FIELD_GAIN_TRACK_GAIN, FIELD_GAIN_GAIN_UNIT,
- info->replaygain.track_gain);
-
- if (info->replaygain.track_peak != NULL)
- set_gain_info(tuple, FIELD_GAIN_TRACK_PEAK, FIELD_GAIN_PEAK_UNIT,
- info->replaygain.track_peak);
- }
-
- return tuple;
-}
-
-void add_comment(callback_info *info, gchar *key, gchar *value)
-{
- gchar **destination = NULL;
- gboolean rg = FALSE;
-
- if (strcasecmp(key, "ARTIST") == 0)
- {
- AUDDBG("Found key ARTIST <%s>\n", value);
- destination = &(info->comment.artist);
- }
-
- if (strcasecmp(key, "ALBUM") == 0)
- {
- AUDDBG("Found key ALBUM <%s>\n", value);
- destination = &(info->comment.album);
- }
-
- if (strcasecmp(key, "TITLE") == 0)
- {
- AUDDBG("Found key TITLE <%s>\n", value);
- destination = &(info->comment.title);
- }
-
- if (strcasecmp(key, "TRACKNUMBER") == 0)
- {
- AUDDBG("Found key TRACKNUMBER <%s>\n", value);
- destination = &(info->comment.tracknumber);
- }
-
- if (strcasecmp(key, "COMMENT") == 0)
- {
- AUDDBG("Found key COMMENT <%s>\n", value);
- destination = &(info->comment.comment);
- }
-
- if (strcasecmp(key, "DATE") == 0)
- {
- AUDDBG("Found key DATE <%s>\n", value);
- destination = &(info->comment.date);
- }
-
- if (strcasecmp(key, "GENRE") == 0)
- {
- AUDDBG("Found key GENRE <%s>\n", value);
- destination = &(info->comment.genre);
- }
-
-#if 0
- if (strcasecmp(key, "REPLAYGAIN_REFERENCE_LOUDNESS") == 0)
- {
- AUDDBG("Found key REPLAYGAIN_REFERENCE_LOUDNESS <%s>\n", value);
- destination = &(info->replaygain.ref_loud);
- rg = TRUE;
- }
-#endif
-
- if (strcasecmp(key, "REPLAYGAIN_TRACK_GAIN") == 0)
- {
- AUDDBG("Found key REPLAYGAIN_TRACK_GAIN <%s>\n", value);
- destination = &(info->replaygain.track_gain);
- rg = TRUE;
- }
-
- if (strcasecmp(key, "REPLAYGAIN_TRACK_PEAK") == 0)
- {
- AUDDBG("Found key REPLAYGAIN_TRACK_PEAK <%s>\n", value);
- destination = &(info->replaygain.track_peak);
- rg = TRUE;
- }
-
- if (strcasecmp(key, "REPLAYGAIN_ALBUM_GAIN") == 0)
- {
- AUDDBG("Found key REPLAYGAIN_ALBUM_GAIN <%s>\n", value);
- destination = &(info->replaygain.album_gain);
- rg = TRUE;
- }
-
- if (strcasecmp(key, "REPLAYGAIN_ALBUM_PEAK") == 0)
- {
- AUDDBG("Found key REPLAYGAIN_ALBUM_PEAK <%s>\n", value);
- destination = &(info->replaygain.album_peak);
- rg = TRUE;
- }
-
- if (destination != NULL)
- {
- g_free(*destination);
-
- if ((*destination = g_strdup(value)) == NULL)
- {
- ERROR("Could not allocate memory for comment!\n");
- return;
- }
- }
-
- if (rg)
- info->replaygain.has_rg = TRUE;
-
- return;
-}
diff --git a/src/flacng/tools.h b/src/flacng/tools.h
deleted file mode 100644
index 5b668c2..0000000
--- a/src/flacng/tools.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * A FLAC decoder plugin for the Audacious Media Player
- * Copyright (C) 2005 Ralf Ertzinger
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-#ifndef _TOOLS_H
-#define _TOOLS_H
-
-#include <glib.h>
-#include <FLAC/all.h>
-#include "flacng.h"
-#include "flac_compat.h"
-
-callback_info* init_callback_info(void);
-void clean_callback_info(callback_info* info);
-void reset_info(callback_info* info);
-Tuple *get_tuple_from_file(const gchar *filename, callback_info *info);
-void add_comment(callback_info* info, gchar* key, gchar* value);
-gboolean read_metadata(FLAC__StreamDecoder* decoder, callback_info* info);
-
-#endif
diff --git a/src/flacng/version.h b/src/flacng/version.h
deleted file mode 100644
index c1aa68a..0000000
--- a/src/flacng/version.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef VERSION_H
-#define VERSION_H
-
-#define _VERSION "0.012 (Magnesium)"
-
-#endif
diff --git a/src/gio/Makefile b/src/gio/Makefile
index 3eaae28..b3b7551 100644
--- a/src/gio/Makefile
+++ b/src/gio/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${TRANSPORT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${GIO_LIBS}
diff --git a/src/gio/gio.c b/src/gio/gio.c
index d3ee58f..712e3d1 100644
--- a/src/gio/gio.c
+++ b/src/gio/gio.c
@@ -1,5 +1,6 @@
/* Audacious
* Copyright (c) 2009 William Pitcock
+ * Copyright (c) 2011 Michał Lipski
*
* 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
@@ -35,20 +36,42 @@ typedef struct {
GSList *stream_stack;
} VFSGIOHandle;
-static GVfs *gvfs = NULL;
-
-VFSFile *
+void *
gio_vfs_fopen_impl(const gchar *path, const gchar *mode)
{
- VFSFile *file;
VFSGIOHandle *handle;
GError *error = NULL;
+ gchar *scheme;
+ static const gchar *const *schemes = NULL;
+ gboolean supported = FALSE;
+ guint num;
if (path == NULL || mode == NULL)
- return NULL;
+ return NULL;
+
+ if (schemes == NULL)
+ schemes = g_vfs_get_supported_uri_schemes(g_vfs_get_default());
+
+ num = g_strv_length((gchar **) schemes);
+
+ if (num == 0)
+ return NULL;
handle = g_slice_new0(VFSGIOHandle);
- handle->file = g_vfs_get_file_for_uri(gvfs, path);
+ handle->file = g_file_new_for_uri(path);
+ scheme = g_file_get_uri_scheme(handle->file);
+
+ for (gint i = 0; schemes[i]; i++)
+ if (strcmp(schemes[i], scheme) == 0)
+ {
+ supported = TRUE;
+ break;
+ }
+
+ g_free(scheme);
+
+ if (!supported)
+ goto CLEANUP;
if (*mode == 'r')
{
@@ -63,48 +86,38 @@ gio_vfs_fopen_impl(const gchar *path, const gchar *mode)
else
{
g_warning("UNSUPPORTED ACCESS MODE: %s", mode);
- g_object_unref(handle->file);
- g_slice_free(VFSGIOHandle, handle);
- return NULL;
+ goto CLEANUP;
}
if (handle->istream == NULL && handle->ostream == NULL)
{
g_warning("Could not open %s for reading or writing: %s", path, error->message);
- g_object_unref(handle->file);
- g_slice_free(VFSGIOHandle, handle);
g_error_free(error);
- return NULL;
+ goto CLEANUP;
}
- file = g_new(VFSFile, 1);
- file->handle = handle;
+ return handle;
- return file;
+CLEANUP:
+ g_object_unref(handle->file);
+ g_slice_free(VFSGIOHandle, handle);
+ return NULL;
}
gint
gio_vfs_fclose_impl(VFSFile * file)
{
gint ret = 0;
+ VFSGIOHandle *handle = vfs_get_handle(file);
- g_return_val_if_fail(file != NULL, -1);
-
- if (file->handle)
- {
- VFSGIOHandle *handle = (VFSGIOHandle *) file->handle;
-
- if (handle->istream)
- g_object_unref(handle->istream);
+ if (handle->istream)
+ g_object_unref(handle->istream);
- if (handle->ostream)
- g_object_unref(handle->ostream);
+ if (handle->ostream)
+ g_object_unref(handle->ostream);
- g_object_unref(handle->file);
- g_slice_free(VFSGIOHandle, handle);
-
- file->handle = NULL;
- }
+ g_object_unref(handle->file);
+ g_slice_free(VFSGIOHandle, handle);
return ret;
}
@@ -112,16 +125,11 @@ gio_vfs_fclose_impl(VFSFile * file)
gint64 gio_vfs_fread_impl (void * ptr, gint64 size, gint64 nmemb, VFSFile *
file)
{
- VFSGIOHandle *handle;
+ VFSGIOHandle *handle = vfs_get_handle(file);
goffset count = 0;
gsize realsize = (size * nmemb);
gsize ret, bytes_read;
- g_return_val_if_fail(file != NULL, EOF);
- g_return_val_if_fail(file->handle != NULL, EOF);
-
- handle = (VFSGIOHandle *) file->handle;
-
/* handle ungetc() *grumble* --nenolod */
if (handle->stream_stack != NULL)
{
@@ -153,14 +161,9 @@ gint64 gio_vfs_fread_impl (void * ptr, gint64 size, gint64 nmemb, VFSFile *
gint64 gio_vfs_fwrite_impl (const void * ptr, gint64 size, gint64 nmemb,
VFSFile * file)
{
- VFSGIOHandle *handle;
+ VFSGIOHandle *handle = vfs_get_handle(file);
gsize ret;
- g_return_val_if_fail(file != NULL, EOF);
- g_return_val_if_fail(file->handle != NULL, EOF);
-
- handle = (VFSGIOHandle *) file->handle;
-
ret = g_output_stream_write(G_OUTPUT_STREAM(handle->ostream), ptr, size * nmemb, NULL, NULL);
return (size > 0) ? ret / size : 0;
}
@@ -169,12 +172,7 @@ gint
gio_vfs_getc_impl(VFSFile *file)
{
guchar buf;
- VFSGIOHandle *handle;
-
- g_return_val_if_fail(file != NULL, EOF);
- g_return_val_if_fail(file->handle != NULL, EOF);
-
- handle = (VFSGIOHandle *) file->handle;
+ VFSGIOHandle *handle = vfs_get_handle(file);
if (handle->stream_stack != NULL)
{
@@ -191,12 +189,8 @@ gio_vfs_getc_impl(VFSFile *file)
gint
gio_vfs_ungetc_impl(gint c, VFSFile * file)
{
- VFSGIOHandle *handle;
-
- g_return_val_if_fail(file != NULL, EOF);
- g_return_val_if_fail(file->handle != NULL, EOF);
+ VFSGIOHandle *handle = vfs_get_handle(file);
- handle = (VFSGIOHandle *) file->handle;
handle->stream_stack = g_slist_prepend(handle->stream_stack, GINT_TO_POINTER(c));
if (handle->stream_stack != NULL)
return c;
@@ -209,14 +203,9 @@ gio_vfs_fseek_impl(VFSFile * file,
gint64 offset,
gint whence)
{
- VFSGIOHandle *handle;
+ VFSGIOHandle *handle = vfs_get_handle(file);
GSeekType seektype;
- g_return_val_if_fail(file != NULL, -1);
- g_return_val_if_fail(file->handle != NULL, -1);
-
- handle = (VFSGIOHandle *) file->handle;
-
if (!g_seekable_can_seek(handle->seekable))
return -1;
@@ -245,20 +234,13 @@ gio_vfs_fseek_impl(VFSFile * file,
void
gio_vfs_rewind_impl(VFSFile * file)
{
- g_return_if_fail(file != NULL);
-
- file->base->vfs_fseek_impl(file, 0, SEEK_SET);
+ gio_vfs_fseek_impl(file, 0, SEEK_SET);
}
gint64
gio_vfs_ftell_impl(VFSFile * file)
{
- VFSGIOHandle *handle;
-
- g_return_val_if_fail(file != NULL, -1);
- g_return_val_if_fail(file->handle != NULL, -1);
-
- handle = (VFSGIOHandle *) file->handle;
+ VFSGIOHandle *handle = vfs_get_handle(file);
return (glong) (g_seekable_tell(handle->seekable) - g_slist_length(handle->stream_stack));
}
@@ -276,27 +258,18 @@ gboolean gio_vfs_feof_impl (VFSFile * file)
gint gio_vfs_ftruncate_impl (VFSFile * file, gint64 size)
{
- VFSGIOHandle *handle;
-
- g_return_val_if_fail(file != NULL, -1);
-
- handle = (VFSGIOHandle *) file->handle;
-
+ VFSGIOHandle *handle = vfs_get_handle(file);
return g_seekable_truncate (handle->seekable, size, NULL, NULL) ? 0 : -1;
}
-off_t
+gint64
gio_vfs_fsize_impl(VFSFile * file)
{
GFileInfo *info;
- VFSGIOHandle *handle;
+ VFSGIOHandle *handle = vfs_get_handle(file);
GError *error = NULL;
- goffset size;
-
- g_return_val_if_fail(file != NULL, -1);
- g_return_val_if_fail(file->handle != NULL, -1);
+ gint64 size;
- handle = (VFSGIOHandle *) file->handle;
info = g_file_query_info(handle->file, G_FILE_ATTRIBUTE_STANDARD_SIZE, G_FILE_QUERY_INFO_NONE, NULL, &error);
if (info == NULL)
@@ -312,43 +285,26 @@ gio_vfs_fsize_impl(VFSFile * file)
return size;
}
-static void init(void)
-{
- gint i;
- const gchar * const *schemes;
-
- gvfs = g_vfs_get_default();
- schemes = g_vfs_get_supported_uri_schemes(gvfs);
-
- for (i = 0; schemes[i] != NULL; i++) {
- VFSConstructor *c;
- if (!g_ascii_strcasecmp(schemes[i], "http") || !g_ascii_strcasecmp(schemes[i], "file") || !g_ascii_strcasecmp(schemes[i], "cdda"))
- continue;
-
- c = g_slice_new0(VFSConstructor);
- c->uri_id = g_strdup_printf("%s://", schemes[i]);
- c->vfs_fopen_impl = gio_vfs_fopen_impl;
- c->vfs_fclose_impl = gio_vfs_fclose_impl;
- c->vfs_fread_impl = gio_vfs_fread_impl;
- c->vfs_fwrite_impl = gio_vfs_fwrite_impl;
- c->vfs_getc_impl = gio_vfs_getc_impl;
- c->vfs_ungetc_impl = gio_vfs_ungetc_impl;
- c->vfs_fseek_impl = gio_vfs_fseek_impl;
- c->vfs_rewind_impl = gio_vfs_rewind_impl;
- c->vfs_ftell_impl = gio_vfs_ftell_impl;
- c->vfs_feof_impl = gio_vfs_feof_impl;
- c->vfs_ftruncate_impl = gio_vfs_ftruncate_impl;
- c->vfs_fsize_impl = gio_vfs_fsize_impl;
- vfs_register_transport(c);
- }
-}
-
-static void cleanup(void)
-{
- g_object_unref(gvfs);
-#if 0
- vfs_unregister_transport(&file_const);
-#endif
-}
-
-DECLARE_PLUGIN(gio, init, cleanup, NULL, NULL, NULL, NULL, NULL, NULL);
+static const gchar * const gio_schemes[] = {"ftp", "sftp", "smb", NULL};
+
+static VFSConstructor constructor = {
+ .vfs_fopen_impl = gio_vfs_fopen_impl,
+ .vfs_fclose_impl = gio_vfs_fclose_impl,
+ .vfs_fread_impl = gio_vfs_fread_impl,
+ .vfs_fwrite_impl = gio_vfs_fwrite_impl,
+ .vfs_getc_impl = gio_vfs_getc_impl,
+ .vfs_ungetc_impl = gio_vfs_ungetc_impl,
+ .vfs_fseek_impl = gio_vfs_fseek_impl,
+ .vfs_rewind_impl = gio_vfs_rewind_impl,
+ .vfs_ftell_impl = gio_vfs_ftell_impl,
+ .vfs_feof_impl = gio_vfs_feof_impl,
+ .vfs_ftruncate_impl = gio_vfs_ftruncate_impl,
+ .vfs_fsize_impl = gio_vfs_fsize_impl
+};
+
+AUD_TRANSPORT_PLUGIN
+(
+ .name = "GIO Support",
+ .schemes = gio_schemes,
+ .vtable = & constructor
+)
diff --git a/src/gnomeshortcuts/Makefile b/src/gnomeshortcuts/Makefile
index 2ed1f1d..41cda39 100644
--- a/src/gnomeshortcuts/Makefile
+++ b/src/gnomeshortcuts/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${MOWGLI_CFLAGS} ${GLIB_CFLAGS} ${DBUS_CFLAGS} -I../.. -I..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${DBUS_CFLAGS} -I../.. -I..
LIBS += ${GLIB_LIBS} ${DBUS_LIBS} ${GTK_LIBS}
diff --git a/src/gnomeshortcuts/gnomeshortcuts.c b/src/gnomeshortcuts/gnomeshortcuts.c
index 6c3e786..01a7c00 100644
--- a/src/gnomeshortcuts/gnomeshortcuts.c
+++ b/src/gnomeshortcuts/gnomeshortcuts.c
@@ -34,7 +34,7 @@
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
-static void init (void);
+static gboolean init (void);
static void about (void);
static void cleanup (void);
void gnome_remote_init();
@@ -43,16 +43,13 @@ void gnome_remote_uninit();
static gboolean loaded = FALSE;
static DBusGProxy *media_player_keys_proxy = NULL;
-static GeneralPlugin audaciousgnomeshortcuts =
-{
- .description = "Gnome Shortcuts",
+AUD_GENERAL_PLUGIN
+(
+ .name = "Gnome Shortcuts",
.init = init,
.about = about,
.cleanup = cleanup
-};
-
-GeneralPlugin *gnomeshortcuts_gplist[] = { &audaciousgnomeshortcuts, NULL };
-SIMPLE_GENERAL_PLUGIN(gnomeshortcuts, gnomeshortcuts_gplist);
+)
#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
@@ -91,7 +88,7 @@ static void
on_media_player_key_pressed (DBusGProxy *proxy, const gchar *application, const gchar *key)
{
if (strcmp ("Audacious", application) == 0) {
- gint current_volume, old_volume;
+ gint current_volume /* , old_volume */ ;
static gint volume_static = 0;
gboolean play, mute;
@@ -100,7 +97,7 @@ on_media_player_key_pressed (DBusGProxy *proxy, const gchar *application, const
/* get current volume */
aud_drct_get_volume_main (&current_volume);
- old_volume = current_volume;
+ /* old_volume = current_volume; */
if (current_volume)
{
/* volume is not mute */
@@ -309,10 +306,11 @@ static void about (void)
"Copyright (C) 2007-2008 Sascha Hlusiak <contact@saschahlusiak.de>\n\n"));
}
-static void init (void)
+static gboolean init (void)
{
gnome_remote_init();
loaded = TRUE;
+ return TRUE;
}
static void cleanup (void)
diff --git a/src/gntui/Makefile b/src/gntui/Makefile
deleted file mode 100644
index 0731f3f..0000000
--- a/src/gntui/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-PLUGIN = gntui${PLUGIN_SUFFIX}
-
-SRCS = gntui.c \
- fileselector.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-
-GNT_CFLAGS = `pkg-config --cflags gnt`
-GNT_LIBS = `pkg-config --libs gnt`
-
-CFLAGS += ${PLUGIN_CFLAGS} ${BEEP_DEFINES}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GLIB_CFLAGS} ${GNT_CFLAGS} -I../..
-LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS} ${GNT_LIBS}
diff --git a/src/gntui/README b/src/gntui/README
deleted file mode 100644
index 9ab02ff..0000000
--- a/src/gntui/README
+++ /dev/null
@@ -1,17 +0,0 @@
-General:
-Alt+a shows Actions window (later there'll be prefs win, plugins menu, etc.)
-Alt+r begins window resize (arrows to set size, escape to finish)
-Alt+m begins window move (arrows to move, escape to finish)
-Alt+w brings window list
-Alt+q Quits
-
-Playlist:
-Spacebar starts playback of selected item
-Up/Down arrows move selection
-
-Main window:
-z Previous
-x Play
-c Pause
-v Stop
-b Next
diff --git a/src/gntui/fileselector.c b/src/gntui/fileselector.c
deleted file mode 100644
index 5cf34c8..0000000
--- a/src/gntui/fileselector.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Audacious GNT interface
- * Copyright (C) 2009 Tomasz Moń <desowin@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include <audacious/plugin.h>
-#include <glib/gi18n.h>
-#include <gnt/gntfilesel.h>
-#include <gnt/gntbox.h>
-#include "fileselector.h"
-
-static GntWidget * window = NULL;
-
-static void
-file_add_cb(GntWidget *widget, GntFileSel **selector)
-{
- gchar *file = gnt_file_sel_get_selected_file(*selector);
- gchar *uri = g_filename_to_uri((const gchar *) file, NULL, NULL);
- gchar *path = g_path_get_dirname(file);
- gint playlist = aud_playlist_get_active();
-
- g_free(file);
-
- g_free(aud_cfg->filesel_path);
- aud_cfg->filesel_path = path;
-
- if (uri == NULL)
- return;
-
- aud_drct_pl_add_url_string (uri);
-
- gnt_widget_destroy(GNT_WIDGET(*selector));
- *selector = NULL;
-}
-
-static void
-file_open_cb(GntWidget *widget, GntFileSel **selector)
-{
- gint playlist = aud_playlist_get_active();
-
- aud_playlist_entry_delete(playlist, 0, aud_playlist_entry_count(playlist));
- aud_playlist_set_playing(playlist);
-
- file_add_cb(widget, selector);
-}
-
-static void
-cancel_cb(GntWidget *widget, GntFileSel **selector)
-{
- gnt_widget_destroy(GNT_WIDGET(*selector));
- *selector = NULL;
-}
-
-void
-run_fileselector(gboolean play_button)
-{
- if (window != NULL) {
- gnt_window_present(window);
- return;
- }
-
- window = gnt_file_sel_new();
- gnt_box_set_title(GNT_BOX(window),
- play_button ? _("Open Files") : _("Add Files"));
-
- if (aud_cfg->filesel_path)
- gnt_file_sel_set_current_location(GNT_FILE_SEL(window),
- aud_cfg->filesel_path);
-
- gnt_file_sel_set_must_exist(GNT_FILE_SEL(window), TRUE);
-
- g_signal_connect(G_OBJECT(GNT_FILE_SEL(window)->select), "activate",
- G_CALLBACK(play_button ? file_open_cb : file_add_cb),
- &window);
- g_signal_connect(G_OBJECT(GNT_FILE_SEL(window)->cancel), "activate",
- G_CALLBACK(cancel_cb), &window);
-
- gnt_widget_show(window);
-}
-
-void
-open_files()
-{
- run_fileselector(TRUE);
-}
-
-void
-add_files()
-{
- run_fileselector(FALSE);
-}
-
-void
-hide_fileselector()
-{
- gnt_widget_destroy(window);
- window = NULL;
-}
diff --git a/src/gntui/fileselector.h b/src/gntui/fileselector.h
deleted file mode 100644
index edd9375..0000000
--- a/src/gntui/fileselector.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Audacious GNT interface
- * Copyright (C) 2009 Tomasz Moń <desowin@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#ifndef GNTUI_FILESELECTOR_H
-#define GNTUI_FILESELECTOR_H
-
-#include <glib.h>
-
-void run_fileselector(gboolean play_button);
-void open_files();
-void add_files();
-void hide_fileselector();
-
-#endif /* GNTUI_FILESELECTOR_H */
diff --git a/src/gntui/gntui.c b/src/gntui/gntui.c
deleted file mode 100644
index d9f3e8b..0000000
--- a/src/gntui/gntui.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* Audacious GNT interface
- * Copyright (C) 2009 Tomasz Moń <desowin@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-#include <glib/gi18n.h>
-#include <glib.h>
-#include <audacious/plugin.h>
-#include <gnt/gnt.h>
-#include <gnt/gntbox.h>
-#include <gnt/gntwindow.h>
-#include <gnt/gntlabel.h>
-#include <gnt/gntbutton.h>
-#include "fileselector.h"
-
-static GntWidget *window = NULL;
-static GntWidget *playback_hbox = NULL;
-static GntWidget *status_widget = NULL;
-static GntWidget *time_widget = NULL;
-static GntWidget *title_widget = NULL;
-static GntWidget *playlist_widget = NULL;
-
-static gint update_song_timeout_source = 0;
-
-static gchar *playing_status()
-{
- if (aud_drct_get_playing())
- {
- if (!aud_drct_get_paused())
- {
- return ("|>");
- }
- else
- {
- return ("||");
- }
- }
- else
- {
- return ("[]");
- }
-}
-
-static void fill_playlist()
-{
- gint playlist = aud_playlist_get_active();
- gint pos = aud_playlist_get_position(playlist);
- gint i, count;
-
- count = aud_playlist_entry_count(playlist);
-
- gnt_tree_remove_all(GNT_TREE(playlist_widget));
-
- g_object_set_data(G_OBJECT(playlist_widget), "playlist", GINT_TO_POINTER(playlist));
- for (i = 0; i < count; i++) {
- GntTreeRow * row;
- gint length = aud_playlist_entry_get_length(playlist, i) / 1000;
- gchar * len = g_strdup_printf("%02i:%02i", length / 60, length % 60);
-
- row = gnt_tree_create_row(GNT_TREE(playlist_widget),
- aud_playlist_entry_get_title(playlist, i),
- len, NULL);
- gnt_tree_add_row_after(GNT_TREE(playlist_widget),
- GINT_TO_POINTER(i+1),
- row,
- NULL,
- GINT_TO_POINTER(i));
-
- g_free(len);
- }
-
- gnt_tree_set_selected(GNT_TREE(playlist_widget), GINT_TO_POINTER(pos+1));
-}
-
-static gboolean update_song_time(gpointer data)
-{
- gint time = aud_drct_get_output_time() / 1000;
- gchar *text;
-
- text = g_strdup_printf("[%02i:%02i]", time / 60, time % 60);
- gnt_label_set_text(GNT_LABEL(time_widget), text);
- g_free(text);
-
- return TRUE;
-}
-
-static void update_playback_status()
-{
- const gchar *text = playing_status();
-
- gnt_label_set_text(GNT_LABEL(status_widget), text);
-}
-
-static void update_playback_title()
-{
- gint playlist = aud_playlist_get_active();
- gint pos = aud_playlist_get_position(playlist);
- const gchar *title = aud_playlist_entry_get_title(playlist, pos);
-
- if (title == NULL)
- title = "";
-
- gnt_label_set_text(GNT_LABEL(title_widget), title);
-}
-
-static void set_song_info(gpointer hook_data, gpointer user_data)
-{
- update_song_time(NULL);
- update_playback_title();
-}
-
-static gboolean mainwin_keypress_cb(GntWidget *widget, const char *text, gpointer data)
-{
- g_return_val_if_fail(text != NULL, FALSE);
-
- switch (text[0]) {
- case 'z':
- aud_drct_pl_prev();
- update_playback_title();
- break;
- case 'x':
- aud_drct_play();
- break;
- case 'c':
- aud_drct_pause();
- break;
- case 'v':
- aud_drct_stop();
- break;
- case 'b':
- aud_drct_pl_next();
- update_playback_title();
- break;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-static gboolean playlist_keypress_cb(GntTree *widget, const gchar * text, gpointer data)
-{
- if (text != NULL && text[0] == ' ' && text[1] == 0) {
- gint playlist = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "playlist"));
- gint pos = GPOINTER_TO_INT(gnt_tree_get_selection_data(widget)) - 1;
-
- aud_playlist_set_position(playlist, pos);
-
- if (!aud_drct_get_playing())
- aud_drct_play();
-
- return TRUE;
- }
- return FALSE;
-}
-
-static void gntui_mainwin_show()
-{
- if (window) {
- gnt_window_present(window);
- return;
- }
-
- window = gnt_window_box_new(FALSE, TRUE);
- gnt_box_set_title(GNT_BOX(window), "Audacious2");
- gnt_box_set_fill(GNT_BOX(window), TRUE);
- gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_TOP);
-
- playback_hbox = gnt_hbox_new(FALSE);
- gnt_box_add_widget(GNT_BOX(window), playback_hbox);
-
- status_widget = gnt_label_new("[]");
- gnt_box_add_widget(GNT_BOX(playback_hbox), status_widget);
- GNT_WIDGET_UNSET_FLAGS(status_widget, GNT_WIDGET_GROW_X);
-
- time_widget = gnt_label_new("[00:00]");
- gnt_box_add_widget(GNT_BOX(playback_hbox), time_widget);
- GNT_WIDGET_UNSET_FLAGS(time_widget, GNT_WIDGET_GROW_X);
-
- title_widget = gnt_label_new("");
- gnt_box_add_widget(GNT_BOX(playback_hbox), title_widget);
-
- playlist_widget = gnt_tree_new();
- g_object_set(G_OBJECT(playlist_widget), "columns", 2, NULL);
- gnt_tree_set_search_column(GNT_TREE(playlist_widget), 0);
- //TODO: gnt_tree_set_search_function
- gnt_tree_set_show_title(GNT_TREE(playlist_widget), FALSE);
- fill_playlist();
- gnt_tree_adjust_columns(GNT_TREE(playlist_widget));
- gnt_box_add_widget(GNT_BOX(window), playlist_widget);
-
- g_signal_connect(G_OBJECT(playlist_widget), "key_pressed",
- G_CALLBACK(playlist_keypress_cb), NULL);
- g_signal_connect(G_OBJECT(window), "key_pressed",
- G_CALLBACK(mainwin_keypress_cb), NULL);
-
- set_song_info(NULL, NULL);
-
- gnt_widget_show(window);
- gnt_window_present(window);
-}
-
-static void ui_playback_begin(gpointer hook_data, gpointer user_data)
-{
- update_playback_status();
- set_song_info(NULL, NULL);
-
- /* update song info 4 times a second */
- update_song_timeout_source = g_timeout_add(250, update_song_time, NULL);
-}
-
-static void ui_playback_stop(gpointer hook_data, gpointer user_data)
-{
- if (update_song_timeout_source)
- {
- g_source_remove(update_song_timeout_source);
- update_song_timeout_source = 0;
- }
-
- update_playback_status();
- set_song_info(NULL, NULL);
-}
-
-static void ui_playback_end(gpointer hook_data, gpointer user_data)
-{
- set_song_info(NULL, NULL);
-}
-
-static void ui_playlist_update(gpointer hook_data, gpointer user_data)
-{
- gnt_tree_remove_all(GNT_TREE(playlist_widget));
- fill_playlist();
-}
-
-static void show_error_message(const gchar * markup)
-{
- GntWidget *win;
- GntWidget *button;
-
- /* TODO: strip markup */
- win = gnt_vwindow_new(FALSE);
- gnt_box_add_widget(GNT_BOX(win), gnt_label_new(markup));
- gnt_box_set_title(GNT_BOX(win), "Error");
- gnt_box_set_alignment(GNT_BOX(win), GNT_ALIGN_MID);
-
- button = gnt_button_new("Close");
- g_signal_connect_swapped(G_OBJECT(button), "activate",
- G_CALLBACK(gnt_widget_destroy), win);
- gnt_box_add_widget(GNT_BOX(win), button);
-
- gnt_widget_show(win);
- gnt_window_present(win);
-}
-
-static gboolean ui_initialize(InterfaceCbs * cbs)
-{
- gnt_init();
-
- gntui_mainwin_show();
-
- gnt_register_action(_("Audacious2"), gntui_mainwin_show);
- gnt_register_action(_("Add Files"), add_files);
- gnt_register_action(_("Open Files"), open_files);
-
- hook_associate("title change", set_song_info, NULL);
- hook_associate("playback begin", ui_playback_begin, NULL);
- hook_associate("playback stop", ui_playback_stop, NULL);
- hook_associate("playback end", ui_playback_end, NULL);
- hook_associate("playlist update", ui_playlist_update, NULL);
-
- cbs->run_filebrowser = run_fileselector;
- cbs->hide_filebrowser = hide_fileselector;
- cbs->show_error = show_error_message;
-
- gnt_main();
-
- return TRUE;
-}
-
-
-static gboolean ui_finalize(void)
-{
- hook_dissociate("title change", set_song_info);
- hook_dissociate("playback begin", ui_playback_begin);
- hook_dissociate("playback stop", ui_playback_stop);
- hook_dissociate("playback end", ui_playback_end);
- hook_dissociate("playlist update", ui_playlist_update);
-
- if (update_song_timeout_source)
- {
- g_source_remove(update_song_timeout_source);
- update_song_timeout_source = 0;
- }
-
- gnt_quit();
-
- return TRUE;
-}
-
-Interface gntui_interface = {
- .id = "gntui",
- .desc = N_("gnt interface"),
- .init = ui_initialize,
- .fini = ui_finalize,
-};
-
-SIMPLE_INTERFACE_PLUGIN("gntui", &gntui_interface);
diff --git a/src/gtkui/Makefile b/src/gtkui/Makefile
index 80ccce1..30ea9b0 100644
--- a/src/gtkui/Makefile
+++ b/src/gtkui/Makefile
@@ -1,26 +1,20 @@
PLUGIN = gtkui${PLUGIN_SUFFIX}
-SRCS = gtkui_cfg.c \
+SRCS = columns.c \
+ layout.c \
+ menus.c \
ui_infoarea.c \
ui_gtk.c \
- ui_manager.c \
ui_playlist_widget.c \
- ui_playlist_model.c \
ui_playlist_notebook.c \
ui_statusbar.c \
- util.c \
- playlist_util.c \
- actions.c
+ playlist_util.c
include ../../buildsys.mk
include ../../extra.mk
-# These override variables in buildsys.mk and so must come after it.
-PACKAGE = audacious
-DATA = ui/player.ui
-
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-CFLAGS += -std=gnu99 ${PLUGIN_CFLAGS} ${BEEP_DEFINES}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PANGO_CFLAGS} ${CAIRO_CFLAGS} ${PANGOCAIRO_CFLAGS} ${XRENDER_CFLAGS} ${XCOMPOSITE_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${PANGO_LIBS} ${CAIRO_LIBS} ${PANGOCAIRO_LIBS} ${XRENDER_LIBS} ${XCOMPOSITE_LIBS} ${MOWGLI_LIBS} -laudgui -lm
+CFLAGS += ${PLUGIN_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} -I../.. ${GTK_CFLAGS}
+LIBS += -lm ${GTK_LIBS}
diff --git a/src/gtkui/actions-mainwin.h b/src/gtkui/actions-mainwin.h
deleted file mode 100644
index c19699b..0000000
--- a/src/gtkui/actions-mainwin.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef AUDACIOUS_ACTIONS_MAINWIN_H
-#define AUDACIOUS_ACTIONS_MAINWIN_H
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-/* actions below are handled in mainwin.c */
-
-
-/* toggle actions */
-void action_anamode_peaks(GtkToggleAction *);
-void action_autoscroll_songname(GtkToggleAction *);
-void action_playback_noplaylistadvance(GtkToggleAction *);
-void action_playback_repeat(GtkToggleAction *);
-void action_playback_shuffle(GtkToggleAction *);
-void action_stop_after_current_song(GtkToggleAction *);
-void action_view_always_on_top(GtkToggleAction *);
-void action_view_scaled(GtkToggleAction *);
-void action_view_easymove(GtkToggleAction *);
-void action_view_on_all_workspaces(GtkToggleAction *);
-void action_roll_up_equalizer(GtkToggleAction *);
-void action_roll_up_player(GtkToggleAction *);
-void action_roll_up_playlist_editor(GtkToggleAction *);
-void action_show_equalizer(GtkToggleAction *);
-void action_show_player(GtkToggleAction *);
-void action_show_playlist_editor(GtkToggleAction *);
-void action_view_playlist(GtkToggleAction *);
-void action_view_infoarea(GtkToggleAction *);
-void action_view_menu(GtkToggleAction *);
-void action_view_statusbar(GtkToggleAction *);
-
-/* radio actions (one for each radio action group) */
-void action_anafoff(GtkAction *, GtkRadioAction *);
-void action_anamode(GtkAction *, GtkRadioAction *);
-void action_anatype(GtkAction *, GtkRadioAction *);
-void action_peafoff(GtkAction *, GtkRadioAction *);
-void action_scomode(GtkAction *, GtkRadioAction *);
-void action_vismode(GtkAction *, GtkRadioAction *);
-void action_vprmode(GtkAction *, GtkRadioAction *);
-void action_wshmode(GtkAction *, GtkRadioAction *);
-void action_viewtime(GtkAction *, GtkRadioAction *);
-
-/* normal actions */
-void action_about_audacious(void);
-void action_ab_clear(void);
-void action_ab_set(void);
-void action_jump_to_file(void);
-void action_jump_to_playlist_start(void);
-void action_jump_to_time(void);
-void action_play_file(void);
-void action_play_location(void);
-void action_playback_next(void);
-void action_playback_pause(void);
-void action_playback_play(void);
-void action_playback_previous(void);
-void action_playback_stop(void);
-void action_preferences(void);
-void action_quit(void);
-void action_current_track_info(void);
-#endif /* AUDACIOUS_ACTIONS_MAINWIN_H */
diff --git a/src/gtkui/actions-playlist.h b/src/gtkui/actions-playlist.h
deleted file mode 100644
index 3fd9881..0000000
--- a/src/gtkui/actions-playlist.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef AUDACIOUS_ACTIONS_PLAYLIST_H
-#define AUDACIOUS_ACTIONS_PLAYLIST_H
-
-void action_playlist_load_list(void);
-void action_playlist_save_list(void);
-void action_playlist_save_default_list(void);
-void action_playlist_save_all_playlists(void);
-void action_playlist_refresh_list(void);
-void action_open_list_manager(void);
-
-void action_playlist_prev(void);
-void action_playlist_new(void);
-void action_playlist_next(void);
-void action_playlist_delete(void);
-
-void action_playlist_search_and_select(void);
-void action_playlist_invert_selection(void);
-void action_playlist_select_all(void);
-void action_playlist_select_none(void);
-
-void action_playlist_clear_queue(void);
-void action_playlist_remove_unavailable(void);
-void action_playlist_remove_dupes_by_title(void);
-void action_playlist_remove_dupes_by_filename(void);
-void action_playlist_remove_dupes_by_full_path(void);
-void action_playlist_remove_all(void);
-void action_playlist_remove_selected(void);
-void action_playlist_remove_unselected(void);
-
-void action_playlist_copy(void);
-void action_playlist_cut(void);
-void action_playlist_paste(void);
-
-void action_playlist_add_url(void);
-void action_playlist_add_files(void);
-
-void action_playlist_track_info(void);
-void action_queue_toggle(void);
-
-void playlist_sort_track (void);
-void playlist_sort_title (void);
-void playlist_sort_artist (void);
-void playlist_sort_album (void);
-void playlist_sort_path (void);
-void playlist_reverse (void);
-void playlist_randomize (void);
-
-#endif /* AUDACIOUS_ACTIONS_PLAYLIST_H */
diff --git a/src/gtkui/actions.c b/src/gtkui/actions.c
deleted file mode 100644
index 43ec609..0000000
--- a/src/gtkui/actions.c
+++ /dev/null
@@ -1,774 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2010 Audacious development team.
- *
- * BMP - Cross-platform multimedia player
- * Copyright (C) 2003-2004 BMP development team.
- *
- * Based on XMMS:
- * Copyright (C) 1998-2003 XMMS development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib/gprintf.h>
-#include <gtk/gtk.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-
-/* GDK including */
-#include <gtk/gtk.h>
-
-#if defined(USE_REGEX_ONIGURUMA)
-#include <onigposix.h>
-#elif defined(USE_REGEX_PCRE)
-#include <pcreposix.h>
-#else
-#include <regex.h>
-#endif
-
-#include <audacious/audconfig.h>
-#include <audacious/drct.h>
-#include <audacious/misc.h>
-#include <audacious/playlist.h>
-#include <libaudcore/audstrings.h>
-#include <libaudcore/hook.h>
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-
-#include "ui_gtk.h"
-#include "util.h"
-#include "playlist_util.h"
-#include "gtkui_cfg.h"
-#include "ui_infoarea.h"
-#include "ui_statusbar.h"
-
-static GtkWidget *mainwin_jtt = NULL;
-
-static int ab_position_a = -1;
-static int ab_position_b = -1;
-
-/* toggleactionentries actions */
-
-void action_playback_noplaylistadvance(GtkToggleAction * action)
-{
- aud_cfg->no_playlist_advance = gtk_toggle_action_get_active(action);
-}
-
-void action_playback_repeat(GtkToggleAction * action)
-{
- aud_cfg->repeat = gtk_toggle_action_get_active(action);
-}
-
-void action_playback_shuffle(GtkToggleAction * action)
-{
- aud_cfg->shuffle = gtk_toggle_action_get_active(action);
-}
-
-void action_stop_after_current_song (GtkToggleAction * action)
-{
- gboolean active = gtk_toggle_action_get_active (action);
-
- if (active != aud_cfg->stopaftersong)
- {
- aud_cfg->stopaftersong = active;
- hook_call ("toggle stop after song", NULL);
- }
-}
-
-void action_view_playlist(GtkToggleAction *action)
-{
- config.playlist_visible = gtk_toggle_action_get_active (action);
- setup_panes ();
-}
-
-void action_view_infoarea(GtkToggleAction *action)
-{
- config.infoarea_visible = gtk_toggle_action_get_active (action);
-
- if (config.infoarea_visible && ! infoarea)
- {
- infoarea = ui_infoarea_new ();
- gtk_box_pack_end ((GtkBox *) vbox, infoarea, FALSE, FALSE, 0);
- gtk_box_reorder_child(GTK_BOX(vbox), infoarea, -1);
-
- gtk_widget_show (infoarea);
- }
-
- if (! config.infoarea_visible && infoarea)
- {
- gtk_widget_destroy (infoarea);
- infoarea = NULL;
- }
-
- setup_panes ();
-}
-
-void action_view_menu(GtkToggleAction *action)
-{
- config.menu_visible = gtk_toggle_action_get_active (action);
-
- if (config.menu_visible)
- gtk_widget_show (menu);
- else
- gtk_widget_hide (menu);
-
- setup_panes ();
-}
-
-void action_view_statusbar(GtkToggleAction *action)
-{
- config.statusbar_visible = gtk_toggle_action_get_active(action);
-
- if (config.statusbar_visible && !statusbar)
- {
- statusbar = ui_statusbar_new();
- gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, FALSE, 3);
-
- if (infoarea != NULL)
- gtk_box_reorder_child(GTK_BOX(vbox), infoarea, -1);
-
- gtk_widget_show_all(statusbar);
- }
-
- if (!config.statusbar_visible && statusbar)
- {
- gtk_widget_destroy(statusbar);
- statusbar = NULL;
- }
-
- setup_panes();
-}
-
-/* actionentries actions */
-
-void action_about_audacious(void)
-{
- audgui_show_about_window();
-}
-
-void action_play_file(void)
-{
- audgui_run_filebrowser(TRUE);
-}
-
-void action_play_location(void)
-{
- audgui_show_add_url_window (TRUE);
-}
-
-void action_ab_set(void)
-{
- if (aud_drct_get_length() > 0)
- {
- if (ab_position_a == -1)
- {
- ab_position_a = aud_drct_get_time();
- ab_position_b = -1;
- /* info-text: Loop-Point A position set */
- }
- else if (ab_position_b == -1)
- {
- int time = aud_drct_get_time();
- if (time > ab_position_a)
- ab_position_b = time;
- /* release info text */
- }
- else
- {
- ab_position_a = aud_drct_get_time();
- ab_position_b = -1;
- /* info-text: Loop-Point A position reset */
- }
- }
-}
-
-void action_ab_clear(void)
-{
- ab_position_a = -1;
- ab_position_b = -1;
- /* release info text */
-}
-
-void action_current_track_info(void)
-{
- audgui_infowin_show_current();
-}
-
-void action_jump_to_file(void)
-{
- audgui_jump_to_track();
-}
-
-void action_jump_to_playlist_start(void)
-{
- aud_drct_pl_set_pos(0);
-}
-
-static void mainwin_jump_to_time_cb(GtkWidget * widget, GtkWidget * entry)
-{
- guint min = 0, sec = 0, params;
- gint time;
-
- params = sscanf(gtk_entry_get_text(GTK_ENTRY(entry)), "%u:%u", &min, &sec);
-
- if (params == 2)
- time = (min * 60) + sec;
- else if (params == 1)
- time = min;
- else
- return;
-
- aud_drct_seek (1000 * time);
- gtk_widget_destroy(mainwin_jtt);
-}
-
-
-void mainwin_jump_to_time(void)
-{
- GtkWidget *vbox, *hbox_new, *hbox_total;
- GtkWidget *time_entry, *label, *bbox, *jump, *cancel;
- GtkWidget *dialog;
- guint tindex;
- gchar time_str[10];
-
- if (!aud_drct_get_playing())
- {
- dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Can't jump to time when no track is being played.\n"));
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
- return;
- }
-
- if (mainwin_jtt)
- {
- gtk_window_present(GTK_WINDOW(mainwin_jtt));
- return;
- }
-
- mainwin_jtt = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(mainwin_jtt), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- gtk_window_set_title(GTK_WINDOW(mainwin_jtt), _("Jump to Time"));
- gtk_window_set_position(GTK_WINDOW(mainwin_jtt), GTK_WIN_POS_CENTER);
-
- g_signal_connect(mainwin_jtt, "destroy", G_CALLBACK(gtk_widget_destroyed), &mainwin_jtt);
- gtk_container_set_border_width(GTK_CONTAINER(mainwin_jtt), 10);
-
- vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_add(GTK_CONTAINER(mainwin_jtt), vbox);
-
- hbox_new = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), hbox_new, TRUE, TRUE, 5);
-
- time_entry = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(hbox_new), time_entry, FALSE, FALSE, 5);
- g_signal_connect(time_entry, "activate", G_CALLBACK(mainwin_jump_to_time_cb), time_entry);
-
- gtk_widget_set_size_request(time_entry, 70, -1);
- label = gtk_label_new(_("minutes:seconds"));
- gtk_box_pack_start(GTK_BOX(hbox_new), label, FALSE, FALSE, 5);
-
- hbox_total = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), hbox_total, TRUE, TRUE, 5);
- gtk_widget_show(hbox_total);
-
- /* FIXME: Disable display of current track length. It's not
- updated when track changes */
-#if 0
- label = gtk_label_new(_("Track length:"));
- gtk_box_pack_start(GTK_BOX(hbox_total), label, FALSE, FALSE, 5);
-
- len = aud_playlist_get_current_length() / 1000;
- g_snprintf(time_str, sizeof(time_str), "%u:%2.2u", len / 60, len % 60);
- label = gtk_label_new(time_str);
-
- gtk_box_pack_start(GTK_BOX(hbox_total), label, FALSE, FALSE, 10);
-#endif
-
- bbox = gtk_hbutton_box_new();
- gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 0);
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing(GTK_BOX(bbox), 5);
-
- cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
- gtk_container_add(GTK_CONTAINER(bbox), cancel);
- g_signal_connect_swapped(cancel, "clicked", G_CALLBACK(gtk_widget_destroy), mainwin_jtt);
-
- jump = gtk_button_new_from_stock(GTK_STOCK_JUMP_TO);
- GTK_WIDGET_SET_FLAGS(jump, GTK_CAN_DEFAULT);
- gtk_container_add(GTK_CONTAINER(bbox), jump);
- g_signal_connect(jump, "clicked", G_CALLBACK(mainwin_jump_to_time_cb), time_entry);
-
- tindex = aud_drct_get_time() / 1000;
- g_snprintf(time_str, sizeof(time_str), "%u:%2.2u", tindex / 60, tindex % 60);
- gtk_entry_set_text(GTK_ENTRY(time_entry), time_str);
-
- gtk_editable_select_region(GTK_EDITABLE(time_entry), 0, strlen(time_str));
-
- gtk_widget_show_all(mainwin_jtt);
-
- gtk_widget_grab_focus(time_entry);
- gtk_widget_grab_default(jump);
-}
-
-void action_jump_to_time(void)
-{
- mainwin_jump_to_time();
-}
-
-void action_playback_next(void)
-{
- aud_drct_pl_next();
-}
-
-void action_playback_previous(void)
-{
- aud_drct_pl_prev();
-}
-
-void action_playback_play(void)
-{
- if (ab_position_a != -1)
- aud_drct_seek(ab_position_a);
- else if (aud_drct_get_playing () && aud_drct_get_paused ())
- aud_drct_pause();
- else
- {
- aud_playlist_set_playing (aud_playlist_get_active ());
- aud_drct_play();
- }
-}
-
-void action_playback_pause(void)
-{
- aud_drct_pause();
-}
-
-void action_playback_stop(void)
-{
- aud_drct_stop();
-}
-
-void action_preferences(void)
-{
- show_preferences_window(TRUE);
-}
-
-void action_quit(void)
-{
- aud_drct_quit();
-}
-
-void action_playlist_track_info(void)
-{
- gint playlist = aud_playlist_get_active();
-
- if (aud_playlist_selected_count(playlist) == 0)
- audgui_infowin_show_current ();
- else
- {
- gint entries = aud_playlist_entry_count(playlist);
- gint count;
-
- for (count = 0; count < entries; count++)
- {
- if (aud_playlist_entry_get_selected(playlist, count))
- break;
- }
-
- audgui_infowin_show (playlist, count);
- }
-}
-
-void action_queue_toggle(void)
-{
- gint playlist = aud_playlist_get_active ();
- gint focus = treeview_get_focus (playlist_get_treeview (playlist));
- gint at;
-
- if (focus < 0)
- return;
-
- if ((at = aud_playlist_queue_find_entry (playlist, focus)) < 0)
- aud_playlist_queue_insert (playlist, -1, focus);
- else
- aud_playlist_queue_delete (playlist, at, 1);
-}
-
-void action_playlist_clear_queue(void)
-{
- gint playlist = aud_playlist_get_active();
- aud_playlist_queue_delete(playlist, 0, aud_playlist_queue_count(playlist));
-}
-
-void action_playlist_remove_unavailable(void)
-{
- aud_playlist_remove_failed(aud_playlist_get_active());
-}
-
-void action_playlist_remove_dupes_by_title(void)
-{
- aud_playlist_remove_duplicates_by_scheme(aud_playlist_get_active(), PLAYLIST_SORT_TITLE);
-}
-
-void action_playlist_remove_dupes_by_filename(void)
-{
- aud_playlist_remove_duplicates_by_scheme(aud_playlist_get_active(), PLAYLIST_SORT_FILENAME);
-}
-
-void action_playlist_remove_dupes_by_full_path(void)
-{
- aud_playlist_remove_duplicates_by_scheme(aud_playlist_get_active(), PLAYLIST_SORT_PATH);
-}
-
-void action_playlist_remove_all(void)
-{
- gint playlist = aud_playlist_get_active();
-
- aud_playlist_entry_delete(playlist, 0, aud_playlist_entry_count(playlist));
-}
-
-void action_playlist_remove_selected (GtkAction * act)
-{
- treeview_remove_selected (playlist_get_treeview (aud_playlist_get_active ()));
-}
-
-void action_playlist_remove_unselected(void)
-{
- gint playlist = aud_playlist_get_active();
- gint entries = aud_playlist_entry_count(playlist);
- gint count;
-
- for (count = 0; count < entries; count++)
- aud_playlist_entry_set_selected(playlist, count, !aud_playlist_entry_get_selected(playlist, count));
-
- aud_playlist_delete_selected(playlist);
- aud_playlist_select_all(playlist, TRUE);
-}
-
-void action_playlist_add_files(void)
-{
- audgui_run_filebrowser(FALSE);
-}
-
-void action_playlist_add_url(void)
-{
- audgui_show_add_url_window (FALSE);
-}
-
-void action_playlist_new(void)
-{
- gint playlist = aud_playlist_count();
-
- aud_playlist_insert(playlist);
- aud_playlist_set_active(playlist);
-}
-
-void action_playlist_prev (void)
-{
- if (aud_playlist_get_active ())
- aud_playlist_set_active (aud_playlist_get_active () - 1);
- else
- aud_playlist_set_active (aud_playlist_count () - 1);
-}
-
-void action_playlist_next (void)
-{
- aud_playlist_set_active ((aud_playlist_get_active () + 1) %
- aud_playlist_count ());
-}
-
-void action_playlist_delete(void)
-{
- audgui_confirm_playlist_delete (aud_playlist_get_active ());
-}
-
-static gchar *playlist_file_selection_save(const gchar * title, const gchar * default_filename)
-{
- GtkWidget *dialog;
- gchar *filename;
-
- g_return_val_if_fail(title != NULL, NULL);
-
- dialog = make_filebrowser(title, TRUE);
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), aud_cfg->playlist_path);
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), default_filename);
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- else
- filename = NULL;
-
- gtk_widget_destroy(dialog);
- return filename;
-}
-
-static void show_playlist_save_error(GtkWindow * parent, const gchar * filename)
-{
- GtkWidget *dialog;
-
- g_return_if_fail(GTK_IS_WINDOW(parent));
- g_return_if_fail(filename);
-
- dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Error writing playlist \"%s\": %s"), filename, strerror(errno));
-
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
-}
-
-static gboolean show_playlist_overwrite_prompt(GtkWindow * parent, const gchar * filename)
-{
- GtkWidget *dialog;
- gint result;
-
- g_return_val_if_fail(GTK_IS_WINDOW(parent), FALSE);
- g_return_val_if_fail(filename != NULL, FALSE);
-
- dialog = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("%s already exist. Continue?"), filename);
-
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
- result = gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
-
- return (result == GTK_RESPONSE_YES);
-}
-
-static void playlistwin_save_playlist(const gchar * filename)
-{
- str_replace_in(&aud_cfg->playlist_path, g_path_get_dirname(filename));
-
- if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
- if (!show_playlist_overwrite_prompt(NULL, filename))
- return;
-
- if (!aud_playlist_save(aud_playlist_get_active(), filename))
- show_playlist_save_error(NULL, filename);
-}
-
-void action_playlist_save_list(void)
-{
- const gchar *default_filename = aud_playlist_get_filename(aud_playlist_get_active());
-
- gchar *dot = NULL, *basename = NULL;
- gchar * filename = playlist_file_selection_save (_("Export Playlist"),
- default_filename);
-
- if (filename)
- {
- /* Default extension */
- basename = g_path_get_basename(filename);
- dot = strrchr(basename, '.');
- if (dot == NULL || dot == basename)
- {
- gchar *oldname = filename;
- filename = g_strconcat(oldname, ".xspf", NULL);
-
- g_free(oldname);
- }
- g_free(basename);
-
- playlistwin_save_playlist(filename);
- g_free(filename);
- }
-}
-
-void action_playlist_save_default_list(void)
-{
-#if 0
- Playlist *playlist = aud_playlist_get_active();
-
- playlist_save(playlist, aud_paths[BMP_PATH_PLAYLIST_FILE]);
-#endif
-}
-
-static void playlistwin_load_playlist(const gchar * filename)
-{
- gint playlist = aud_playlist_get_active();
-
- g_return_if_fail(filename != NULL);
-
- str_replace_in(&aud_cfg->playlist_path, g_path_get_dirname(filename));
-
- aud_playlist_entry_delete(playlist, 0, aud_playlist_entry_count(playlist));
- aud_playlist_insert_playlist(playlist, 0, filename);
- aud_playlist_set_filename(playlist, filename);
-
- if (aud_playlist_get_title(playlist) == NULL)
- aud_playlist_set_title(playlist, filename);
-}
-
-static gchar *playlist_file_selection_load(const gchar * title, const gchar * default_filename)
-{
- GtkWidget *dialog;
- gchar *filename;
-
- g_return_val_if_fail(title != NULL, NULL);
-
- dialog = make_filebrowser(title, FALSE);
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), aud_cfg->playlist_path);
- if (default_filename)
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), default_filename);
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
- filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- else
- filename = NULL;
-
- gtk_widget_destroy(dialog);
- return filename;
-}
-
-void action_playlist_load_list(void)
-{
- const gchar *default_filename = aud_playlist_get_filename(aud_playlist_get_active());
- gchar * filename = playlist_file_selection_load (_("Import Playlist"),
- default_filename);
-
- if (filename)
- {
- playlistwin_load_playlist(filename);
- g_free(filename);
- }
-}
-
-void action_playlist_refresh_list(void)
-{
- aud_playlist_rescan(aud_playlist_get_active());
-}
-
-void action_open_list_manager(void)
-{
- audgui_playlist_manager_ui_show(window);
-}
-
-void action_playlist_search_and_select(void)
-{
- //playlistwin_select_search();
-}
-
-void action_playlist_invert_selection(void)
-{
- g_message("implement me");
-}
-
-void action_playlist_select_none(void)
-{
- GtkTreeSelection *selection = gtk_tree_view_get_selection(playlist_get_active_treeview());
-
- gtk_widget_grab_focus(GTK_WIDGET(playlist_get_active_treeview()));
- gtk_tree_selection_unselect_all(selection);
-}
-
-void action_playlist_select_all(void)
-{
- GtkTreeSelection *selection = gtk_tree_view_get_selection(playlist_get_active_treeview());
-
- gtk_widget_grab_focus(GTK_WIDGET(playlist_get_active_treeview()));
- gtk_tree_selection_select_all(selection);
-}
-
-void action_playlist_save_all_playlists(void)
-{
- aud_save_playlists();
-}
-
-void action_playlist_copy(void)
-{
- GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- gchar *list = audgui_urilist_create_from_selected (aud_playlist_get_active());
-
- if (list == NULL)
- return;
-
- gtk_clipboard_set_text(clip, list, -1);
- g_free(list);
-}
-
-void action_playlist_cut(void)
-{
- action_playlist_copy();
- action_playlist_remove_selected(NULL);
-}
-
-void action_playlist_paste(void)
-{
- GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- gchar *list = gtk_clipboard_wait_for_text(clip);
- GtkTreeView * tree = playlist_get_treeview (aud_playlist_get_active ());
-
- if (list == NULL)
- return;
-
- treeview_add_urilist (tree, treeview_get_focus (tree), list);
- g_free (list);
-}
-
-static void playlist_sort_scheme (gint scheme)
-{
- gint list = aud_playlist_get_active ();
- aud_playlist_sort_by_scheme (list, scheme);
- treeview_refresh_selection (playlist_get_treeview (list));
-}
-
-void playlist_sort_track (void)
-{
- playlist_sort_scheme (PLAYLIST_SORT_TRACK);
-}
-
-void playlist_sort_title (void)
-{
- playlist_sort_scheme (PLAYLIST_SORT_TITLE);
-}
-
-void playlist_sort_artist (void)
-{
- playlist_sort_scheme (PLAYLIST_SORT_ARTIST);
-}
-
-void playlist_sort_album (void)
-{
- playlist_sort_scheme (PLAYLIST_SORT_ALBUM);
-}
-
-void playlist_sort_path (void)
-{
- playlist_sort_scheme (PLAYLIST_SORT_PATH);
-}
-
-void playlist_reverse (void)
-{
- gint list = aud_playlist_get_active ();
- aud_playlist_reverse (list);
- treeview_refresh_selection (playlist_get_treeview (list));
-}
-
-void playlist_randomize (void)
-{
- gint list = aud_playlist_get_active ();
- aud_playlist_randomize (list);
- treeview_refresh_selection (playlist_get_treeview (list));
-}
diff --git a/src/gtkui/columns.c b/src/gtkui/columns.c
new file mode 100644
index 0000000..f67d0cd
--- /dev/null
+++ b/src/gtkui/columns.c
@@ -0,0 +1,365 @@
+/*
+ * columns.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <libaudcore/index.h>
+#include <libaudgui/list.h>
+
+#include "config.h"
+#include "ui_playlist_notebook.h"
+#include "ui_playlist_widget.h"
+
+const gchar * const pw_col_names[PW_COLS] = {N_("Entry number"), N_("Title"),
+ N_("Artist"), N_("Year"), N_("Album"), N_("Track"), N_("Queue position"),
+ N_("Length"), N_("File path"), N_("File name"), N_("Custom title"),
+ N_("Bitrate")};
+
+gint pw_num_cols;
+gint pw_cols[PW_COLS];
+
+static const gchar * const pw_col_keys[PW_COLS] = {"number", "title", "artist",
+ "year", "album", "track", "queued", "length", "path", "filename", "custom",
+ "bitrate"};
+
+void pw_col_init (void)
+{
+ pw_num_cols = 0;
+
+ gchar * columns = aud_get_string ("gtkui", "playlist_columns");
+ gchar * * split = g_strsplit (columns, " ", -1);
+
+ for (gchar * * elem = split; * elem && pw_num_cols < PW_COLS; elem ++)
+ {
+ gint i = 0;
+ while (i < PW_COLS && strcmp (* elem, pw_col_keys[i]))
+ i ++;
+
+ if (i == PW_COLS)
+ break;
+
+ pw_cols[pw_num_cols ++] = i;
+ }
+
+ g_strfreev (split);
+ g_free (columns);
+}
+
+typedef struct {
+ gint column;
+ gboolean selected;
+} Column;
+
+static GtkWidget * window = NULL;
+static GtkWidget * chosen_list = NULL, * avail_list = NULL;
+static Index * chosen = NULL, * avail = NULL;
+
+static void get_value (void * user, gint row, gint column, GValue * value)
+{
+ g_return_if_fail (row >= 0 && row < index_count (user));
+ Column * c = index_get (user, row);
+ g_value_set_string (value, _(pw_col_names[c->column]));
+}
+
+static gboolean get_selected (void * user, gint row)
+{
+ g_return_val_if_fail (row >= 0 && row < index_count (user), FALSE);
+ return ((Column *) index_get (user, row))->selected;
+}
+
+static void set_selected (void * user, gint row, gboolean selected)
+{
+ g_return_if_fail (row >= 0 && row < index_count (user));
+ ((Column *) index_get (user, row))->selected = selected;
+}
+
+static void select_all (void * user, gboolean selected)
+{
+ gint rows = index_count (user);
+ for (gint row = 0; row < rows; row ++)
+ ((Column *) index_get (user, row))->selected = selected;
+}
+
+static void shift_rows (void * user, gint row, gint before)
+{
+ gint rows = index_count (user);
+ g_return_if_fail (row >= 0 && row < rows);
+ g_return_if_fail (before >= 0 && before <= rows);
+
+ if (before == row)
+ return;
+
+ Index * move = index_new ();
+ Index * others = index_new ();
+
+ gint begin, end;
+ if (before < row)
+ {
+ begin = before;
+ end = row + 1;
+ while (end < rows && ((Column *) index_get (user, end))->selected)
+ end ++;
+ }
+ else
+ {
+ begin = row;
+ while (begin > 0 && ((Column *) index_get (user, begin - 1))->selected)
+ begin --;
+ end = before;
+ }
+
+ for (gint i = begin; i < end; i ++)
+ {
+ Column * c = index_get (user, i);
+ index_append (c->selected ? move : others, c);
+ }
+
+ if (before < row)
+ {
+ index_merge_append (move, others);
+ index_free (others);
+ }
+ else
+ {
+ index_merge_append (others, move);
+ index_free (move);
+ move = others;
+ }
+
+ index_copy_set (move, 0, user, begin, end - begin);
+ index_free (move);
+
+ GtkWidget * list = (user == chosen) ? chosen_list : avail_list;
+ audgui_list_update_rows (list, begin, end - begin);
+ audgui_list_update_selection (list, begin, end - begin);
+}
+
+static const AudguiListCallbacks callbacks = {
+ .get_value = get_value,
+ .get_selected = get_selected,
+ .set_selected = set_selected,
+ .select_all = select_all,
+ .shift_rows = shift_rows};
+
+static void transfer (Index * source)
+{
+ Index * dest;
+ GtkWidget * source_list, * dest_list;
+ if (source == chosen)
+ {
+ dest = avail;
+ source_list = chosen_list;
+ dest_list = avail_list;
+ }
+ else
+ {
+ dest = chosen;
+ source_list = avail_list;
+ dest_list = chosen_list;
+ }
+
+ gint source_rows = index_count (source);
+ gint dest_rows = index_count (dest);
+
+ for (gint row = 0; row < source_rows; )
+ {
+ Column * c = index_get (source, row);
+ if (! c->selected)
+ {
+ row ++;
+ continue;
+ }
+
+ index_delete (source, row, 1);
+ audgui_list_delete_rows (source_list, row, 1);
+ source_rows --;
+ index_append (dest, c);
+ audgui_list_insert_rows (dest_list, dest_rows, 1);
+ dest_rows ++;
+ }
+}
+
+static void response_cb (GtkWidget * widget, gint response, void * unused)
+{
+ if (response == GTK_RESPONSE_ACCEPT)
+ {
+ gint cols = index_count (chosen);
+ g_return_if_fail (cols <= PW_COLS);
+
+ ui_playlist_notebook_empty ();
+
+ for (pw_num_cols = 0; pw_num_cols < cols; pw_num_cols ++)
+ pw_cols[pw_num_cols] = ((Column *) index_get (chosen, pw_num_cols))
+ ->column;
+
+ ui_playlist_notebook_populate ();
+ }
+
+ gtk_widget_destroy (window);
+}
+
+static void destroy_cb (void)
+{
+ window = NULL;
+ chosen_list = NULL;
+ avail_list = NULL;
+
+ gint rows = index_count (chosen);
+ for (gint row = 0; row < rows; row ++)
+ g_slice_free (Column, index_get (chosen, row));
+ index_free (chosen);
+ chosen = NULL;
+
+ rows = index_count (avail);
+ for (gint row = 0; row < rows; row ++)
+ g_slice_free (Column, index_get (avail, row));
+ index_free (avail);
+ avail = NULL;
+}
+
+void pw_col_choose (void)
+{
+ if (window)
+ {
+ gtk_window_present ((GtkWindow *) window);
+ return;
+ }
+
+ chosen = index_new ();
+ avail = index_new ();
+
+ gboolean added[PW_COLS];
+ memset (added, 0, sizeof added);
+
+ for (gint i = 0; i < pw_num_cols; i ++)
+ {
+ if (added[pw_cols[i]])
+ continue;
+ added[pw_cols[i]] = TRUE;
+ Column * column = g_slice_new (Column);
+ column->column = pw_cols[i];
+ column->selected = 0;
+ index_append (chosen, column);
+ }
+
+ for (gint i = 0; i < PW_COLS; i ++)
+ {
+ if (added[i])
+ continue;
+ Column * column = g_slice_new (Column);
+ column->column = i;
+ column->selected = 0;
+ index_append (avail, column);
+ }
+
+ window = gtk_dialog_new_with_buttons (_("Choose Columns"), NULL, 0,
+ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+ NULL);
+ gtk_window_set_default_size ((GtkWindow *) window, 400, 300);
+ g_signal_connect (window, "response", (GCallback) response_cb, NULL);
+ g_signal_connect (window, "destroy", (GCallback) destroy_cb, NULL);
+
+ GtkWidget * hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *)
+ window), hbox, TRUE, TRUE, 0);
+
+ GtkWidget * vbox = gtk_vbox_new (FALSE, 3);
+ gtk_box_pack_start ((GtkBox *) hbox, vbox, TRUE, TRUE, 0);
+
+ GtkWidget * label = gtk_label_new (_("Available:"));
+ g_object_set ((GObject *) label, "xalign", (gfloat) 0, NULL);
+ gtk_box_pack_start ((GtkBox *) vbox, label, FALSE, FALSE, 0);
+
+ GtkWidget * scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy ((GtkScrolledWindow *) scroll,
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scroll,
+ GTK_SHADOW_IN);
+ gtk_box_pack_start ((GtkBox *) vbox, scroll, TRUE, TRUE, 0);
+
+ avail_list = audgui_list_new (& callbacks, avail, index_count (avail));
+ gtk_tree_view_set_headers_visible ((GtkTreeView *) avail_list, FALSE);
+ audgui_list_add_column (avail_list, NULL, 0, G_TYPE_STRING, -1);
+ gtk_container_add ((GtkContainer *) scroll, avail_list);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) hbox, vbox, FALSE, FALSE, 0);
+
+ GtkWidget * button = gtk_button_new ();
+ gtk_container_add ((GtkContainer *) button, gtk_image_new_from_stock
+ (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_BUTTON));
+ gtk_box_pack_start ((GtkBox *) vbox, button, TRUE, FALSE, 0);
+ g_signal_connect_swapped (button, "clicked", (GCallback) transfer, avail);
+
+ button = gtk_button_new ();
+ gtk_container_add ((GtkContainer *) button, gtk_image_new_from_stock
+ (GTK_STOCK_GO_BACK, GTK_ICON_SIZE_BUTTON));
+ gtk_box_pack_start ((GtkBox *) vbox, button, TRUE, FALSE, 0);
+ g_signal_connect_swapped (button, "clicked", (GCallback) transfer, chosen);
+
+ vbox = gtk_vbox_new (FALSE, 3);
+ gtk_box_pack_start ((GtkBox *) hbox, vbox, TRUE, TRUE, 0);
+
+ label = gtk_label_new (_("Chosen:"));
+ g_object_set ((GObject *) label, "xalign", (gfloat) 0, NULL);
+ gtk_box_pack_start ((GtkBox *) vbox, label, FALSE, FALSE, 0);
+
+ scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy ((GtkScrolledWindow *) scroll,
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scroll,
+ GTK_SHADOW_IN);
+ gtk_box_pack_start ((GtkBox *) vbox, scroll, TRUE, TRUE, 0);
+
+ chosen_list = audgui_list_new (& callbacks, chosen, index_count (chosen));
+ gtk_tree_view_set_headers_visible ((GtkTreeView *) chosen_list, FALSE);
+ audgui_list_add_column (chosen_list, NULL, 0, G_TYPE_STRING, -1);
+ gtk_container_add ((GtkContainer *) scroll, chosen_list);
+
+ gtk_widget_show_all (window);
+}
+
+void pw_col_save (void)
+{
+ GString * s = g_string_new_len (NULL, 0);
+ for (gint i = 0; ; )
+ {
+ g_string_append (s, pw_col_keys[pw_cols[i]]);
+ if (++ i < pw_num_cols)
+ g_string_append_c (s, ' ');
+ else
+ break;
+ }
+
+ aud_set_string ("gtkui", "playlist_columns", s->str);
+ g_string_free (s, TRUE);
+}
+
+void pw_col_cleanup (void)
+{
+ if (window)
+ gtk_widget_destroy (window);
+}
diff --git a/src/gtkui/gtkui.h b/src/gtkui/gtkui.h
new file mode 100644
index 0000000..2609bc1
--- /dev/null
+++ b/src/gtkui/gtkui.h
@@ -0,0 +1,40 @@
+/*
+ * gtkui.h
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef GTKUI_H
+#define GTKUI_H
+
+#include <gtk/gtk.h>
+
+/* menus.c */
+GtkWidget * make_menu_bar (GtkAccelGroup * accel);
+GtkWidget * make_menu_main (GtkAccelGroup * accel);
+GtkWidget * make_menu_rclick (GtkAccelGroup * accel);
+GtkWidget * make_menu_tab (GtkAccelGroup * accel);
+
+/* ui_gtk.c */
+void show_menu (gboolean show);
+void show_infoarea (gboolean show);
+void show_statusbar (gboolean show);
+void popup_menu_rclick (guint button, guint32 time);
+void popup_menu_tab (guint button, guint32 time);
+
+#endif
diff --git a/src/gtkui/gtkui_cfg.c b/src/gtkui/gtkui_cfg.c
deleted file mode 100644
index b662a2b..0000000
--- a/src/gtkui/gtkui_cfg.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2009 Audacious development team
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include <audacious/configdb.h>
-#include <audacious/plugin.h>
-
-#include "gtkui_cfg.h"
-
-gtkui_cfg_t config;
-
-gtkui_cfg_t gtkui_default_config = {
- .player_x = MAINWIN_DEFAULT_POS_X,
- .player_y = MAINWIN_DEFAULT_POS_Y,
- .player_width = MAINWIN_DEFAULT_WIDTH,
- .player_height = MAINWIN_DEFAULT_HEIGHT,
- .save_window_position = TRUE,
- .player_visible = TRUE,
- .playlist_visible = TRUE,
- .vis_position = VIS_ON_TOP,
- .multi_column_view = FALSE,
- .playlist_width = 0,
- .playlist_height = 0,
- .infoarea_visible = TRUE,
- .menu_visible = TRUE,
- .statusbar_visible = TRUE,
-};
-
-typedef struct gtkui_cfg_boolent_t
-{
- gchar const *be_vname;
- gboolean *be_vloc;
- gboolean be_wrt;
-} gtkui_cfg_boolent;
-
-static gtkui_cfg_boolent gtkui_boolents[] = {
- {"save_window_position", &config.save_window_position, TRUE},
- {"player_visible", &config.player_visible, TRUE},
- {"multi_column_view", &config.multi_column_view, TRUE},
- {"playlist_visible", &config.playlist_visible, TRUE},
- {"infoarea_visible", &config.infoarea_visible, TRUE},
- {"menu_visible", &config.menu_visible, TRUE},
- {"statusbar_visible", &config.statusbar_visible, TRUE},
-};
-
-static gint ncfgbent = G_N_ELEMENTS(gtkui_boolents);
-
-typedef struct gtkui_cfg_nument_t
-{
- gchar const *ie_vname;
- gint *ie_vloc;
- gboolean ie_wrt;
-} gtkui_cfg_nument;
-
-static gtkui_cfg_nument gtkui_numents[] = {
- {"player_x", &config.player_x, TRUE},
- {"player_y", &config.player_y, TRUE},
- {"player_width", &config.player_width, TRUE},
- {"player_height", &config.player_height, TRUE},
- {"vis_position", & config.vis_position, TRUE},
- {"playlist_width", &config.playlist_width, TRUE},
- {"playlist_height", &config.playlist_height, TRUE},
-};
-
-static gint ncfgient = G_N_ELEMENTS(gtkui_numents);
-
-typedef struct gtkui_cfg_strent_t
-{
- gchar const *se_vname;
- gchar **se_vloc;
- gboolean se_wrt;
-} gtkui_cfg_strent;
-
-static gtkui_cfg_strent gtkui_strents[] = {
-};
-
-static gint ncfgsent = G_N_ELEMENTS(gtkui_strents);
-
-void gtkui_cfg_free()
-{
- gint i;
-
- for (i = 0; i < ncfgsent; ++i)
- {
- if (*(gtkui_strents[i].se_vloc) != NULL)
- {
- g_free(*(gtkui_strents[i].se_vloc));
- *(gtkui_strents[i].se_vloc) = NULL;
- }
- }
-}
-
-void gtkui_cfg_load()
-{
- mcs_handle_t *cfgfile = aud_cfg_db_open();
- gint i;
-
- memcpy(&config, &gtkui_default_config, sizeof(gtkui_cfg_t));
-
- for (i = 0; i < ncfgbent; ++i)
- {
- aud_cfg_db_get_bool(cfgfile, "gtkui", gtkui_boolents[i].be_vname, gtkui_boolents[i].be_vloc);
- }
-
- for (i = 0; i < ncfgient; ++i)
- {
- aud_cfg_db_get_int(cfgfile, "gtkui", gtkui_numents[i].ie_vname, gtkui_numents[i].ie_vloc);
- }
-
- for (i = 0; i < ncfgsent; ++i)
- {
- aud_cfg_db_get_string(cfgfile, "gtkui", gtkui_strents[i].se_vname, gtkui_strents[i].se_vloc);
- }
-
- aud_cfg_db_close(cfgfile);
-}
-
-
-void gtkui_cfg_save()
-{
- mcs_handle_t *cfgfile = aud_cfg_db_open();
- gint i;
-
- for (i = 0; i < ncfgsent; ++i)
- {
- if (gtkui_strents[i].se_wrt)
- aud_cfg_db_set_string(cfgfile, "gtkui", gtkui_strents[i].se_vname, *gtkui_strents[i].se_vloc);
- }
-
- for (i = 0; i < ncfgbent; ++i)
- {
- if (gtkui_boolents[i].be_wrt)
- aud_cfg_db_set_bool(cfgfile, "gtkui", gtkui_boolents[i].be_vname, *gtkui_boolents[i].be_vloc);
- }
-
- for (i = 0; i < ncfgient; ++i)
- {
- if (gtkui_numents[i].ie_wrt)
- aud_cfg_db_set_int(cfgfile, "gtkui", gtkui_numents[i].ie_vname, *gtkui_numents[i].ie_vloc);
- }
-
- aud_cfg_db_close(cfgfile);
-}
diff --git a/src/gtkui/gtkui_cfg.h b/src/gtkui/gtkui_cfg.h
deleted file mode 100644
index 3a14af3..0000000
--- a/src/gtkui/gtkui_cfg.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2009 Audacious development team
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef UI_CFG_H
-#define UI_CFG_H
-
-#include <glib.h>
-#include "util.h"
-
-#define MAINWIN_DEFAULT_WIDTH 450
-#define MAINWIN_DEFAULT_HEIGHT 150
-#define MAINWIN_DEFAULT_POS_X 100
-#define MAINWIN_DEFAULT_POS_Y 100
-
-enum {
- VIS_IN_TABS = 0,
- VIS_ON_LEFT,
- VIS_ON_RIGHT,
- VIS_ON_TOP,
- VIS_ON_BOTTOM
-};
-
-typedef struct
-{
- gint player_x, player_y;
- gint player_width, player_height;
- gint playlist_width, playlist_height;
- gboolean save_window_position;
- gboolean player_visible;
- gboolean playlist_visible;
- gint vis_position;
- gboolean multi_column_view;
- gboolean infoarea_visible;
- gboolean menu_visible;
- gboolean statusbar_visible;
-} gtkui_cfg_t;
-
-extern gtkui_cfg_t config;
-
-void gtkui_cfg_free();
-void gtkui_cfg_load();
-void gtkui_cfg_save();
-
-#endif
diff --git a/src/gtkui/layout.c b/src/gtkui/layout.c
new file mode 100644
index 0000000..aa35337
--- /dev/null
+++ b/src/gtkui/layout.c
@@ -0,0 +1,580 @@
+/*
+ * layout.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <string.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <audacious/plugins.h>
+
+#include "config.h"
+#include "layout.h"
+
+#define DEFAULT_WIDTH 300
+#define DEFAULT_HEIGHT 200
+
+enum {DOCK_LEFT, DOCK_RIGHT, DOCK_TOP, DOCK_BOTTOM, DOCKS};
+
+#define IS_VERTICAL(d) ((d) & 2)
+#define IS_AFTER(d) ((d) & 1)
+
+#define NULL_ON_DESTROY(w) g_signal_connect ((w), "destroy", (GCallback) \
+ gtk_widget_destroyed, & (w))
+
+typedef struct {
+ gchar * name;
+ GtkWidget * widget, * vbox, * paned, * window;
+ gint dock, x, y, w, h;
+} Item;
+
+static GList * items = NULL;
+
+static GtkWidget * layout = NULL;
+static GtkWidget * center = NULL;
+static GtkWidget * docks[DOCKS] = {NULL, NULL, NULL, NULL};
+static GtkWidget * menu = NULL;
+
+GtkWidget * layout_new (void)
+{
+ g_return_val_if_fail (! layout, NULL);
+ layout = gtk_alignment_new (0, 0, 1, 1);
+ NULL_ON_DESTROY (layout);
+ return layout;
+}
+
+void layout_add_center (GtkWidget * widget)
+{
+ g_return_if_fail (layout && ! center && widget);
+ center = widget;
+ gtk_container_add ((GtkContainer *) layout, center);
+ NULL_ON_DESTROY (center);
+}
+
+static void layout_move (GtkWidget * widget, gint dock);
+
+static void layout_dock_left (GtkWidget * widget)
+{
+ layout_move (widget, DOCK_LEFT);
+}
+
+static void layout_dock_right (GtkWidget * widget)
+{
+ layout_move (widget, DOCK_RIGHT);
+}
+
+static void layout_dock_top (GtkWidget * widget)
+{
+ layout_move (widget, DOCK_TOP);
+}
+
+static void layout_dock_bottom (GtkWidget * widget)
+{
+ layout_move (widget, DOCK_BOTTOM);
+}
+
+static void layout_undock (GtkWidget * widget)
+{
+ layout_move (widget, -1);
+}
+
+static void layout_disable (GtkWidget * widget)
+{
+ PluginHandle * plugin = aud_plugin_by_widget (widget);
+ g_return_if_fail (plugin);
+ aud_plugin_enable (plugin, FALSE);
+}
+
+static gboolean menu_cb (GtkWidget * widget, GdkEventButton * event)
+{
+ g_return_val_if_fail (widget && event, FALSE);
+
+ if (event->type != GDK_BUTTON_PRESS || event->button != 3)
+ return FALSE;
+
+ if (menu)
+ gtk_widget_destroy (menu);
+
+ menu = gtk_menu_new ();
+ g_signal_connect (menu, "destroy", (GCallback) gtk_widget_destroyed, & menu);
+
+ const gchar * names[6] = {N_("Dock at Left"), N_("Dock at Right"),
+ N_("Dock at Top"), N_("Dock at Bottom"), N_("Undock"), N_("Disable")};
+ void (* const funcs[6]) (GtkWidget * widget) = {layout_dock_left,
+ layout_dock_right, layout_dock_top, layout_dock_bottom, layout_undock,
+ layout_disable};
+
+ for (gint i = 0; i < 6; i ++)
+ {
+ GtkWidget * item = gtk_menu_item_new_with_label (_(names[i]));
+ gtk_menu_shell_append ((GtkMenuShell *) menu, item);
+ g_signal_connect_swapped (item, "activate", (GCallback) funcs[i], widget);
+ }
+
+ gtk_widget_show_all (menu);
+ gtk_menu_popup ((GtkMenu *) menu, NULL, NULL, NULL, NULL, event->button, event->time);
+
+ return TRUE;
+}
+
+static GtkWidget * vbox_new (GtkWidget * widget, const gchar * name)
+{
+ g_return_val_if_fail (widget && name, NULL);
+
+ GtkWidget * vbox = gtk_vbox_new (FALSE, 0);
+
+ GtkWidget * ebox = gtk_event_box_new ();
+ gtk_box_pack_start ((GtkBox *) vbox, ebox, FALSE, FALSE, 0);
+ g_signal_connect_swapped (ebox, "button-press-event", (GCallback) menu_cb,
+ widget);
+
+ GtkWidget * label = gtk_label_new (NULL);
+ gtk_misc_set_padding ((GtkMisc *) label, 3, 0);
+ gchar * markup = g_markup_printf_escaped ("<small><b>%s</b></small>", name);
+ gtk_label_set_markup ((GtkLabel *) label, markup);
+ g_free (markup);
+ gtk_misc_set_alignment ((GtkMisc *) label, 0, 0);
+ gtk_container_add ((GtkContainer *) ebox, label);
+
+ gtk_box_pack_start ((GtkBox *) vbox, widget, TRUE, TRUE, 0);
+
+ gtk_widget_show_all (vbox);
+
+ return vbox;
+}
+
+typedef struct {
+ GtkWidget * paned;
+ GtkWidget * widget;
+ gboolean vertical;
+ gint w, h;
+} RestoreSizeData;
+
+static gboolean restore_size_cb (RestoreSizeData * d)
+{
+ GtkAllocation rect;
+ gtk_widget_get_allocation (d->widget, & rect);
+ gint pos = gtk_paned_get_position ((GtkPaned *) d->paned);
+ pos -= d->vertical ? d->h - rect.height : d->w - rect.width;
+ gtk_paned_set_position ((GtkPaned *) d->paned, pos);
+
+ g_slice_free (RestoreSizeData, d);
+ return FALSE;
+}
+
+static GtkWidget * paned_new (gboolean vertical, gboolean after, gint w, gint h)
+{
+ GtkWidget * paned = vertical ? gtk_vpaned_new () : gtk_hpaned_new ();
+
+ GtkWidget * mine = gtk_alignment_new (0, 0, 1, 1);
+ GtkWidget * next = gtk_alignment_new (0, 0, 1, 1);
+ gtk_paned_pack1 ((GtkPaned *) paned, after ? next : mine, after, FALSE);
+ gtk_paned_pack2 ((GtkPaned *) paned, after ? mine : next, ! after, FALSE);
+
+ g_object_set_data ((GObject *) paned, "mine", mine);
+ g_object_set_data ((GObject *) paned, "next", next);
+
+ gtk_widget_show_all (paned);
+
+ if (vertical ? h : w)
+ {
+ if (after)
+ {
+ /* hack to set the size of the second pane */
+ RestoreSizeData * d = g_slice_new (RestoreSizeData);
+ d->paned = paned;
+ d->widget = mine;
+ d->vertical = vertical;
+ d->w = w;
+ d->h = h;
+ g_idle_add ((GSourceFunc) restore_size_cb, d);
+ }
+ else
+ gtk_paned_set_position ((GtkPaned *) paned, vertical ? h : w);
+ }
+
+ return paned;
+}
+
+static Item * item_new (const gchar * name)
+{
+ Item * item = g_slice_new (Item);
+ item->name = g_strdup (name);
+ item->widget = item->vbox = item->paned = item->window = NULL;
+ item->dock = item->x = item->y = -1;
+ item->w = DEFAULT_WIDTH;
+ item->h = DEFAULT_HEIGHT;
+
+ if (! strcmp (name, "Search Tool"))
+ {
+ item->dock = DOCK_LEFT;
+ item->w = 200;
+ }
+
+ items = g_list_append (items, item);
+ return item;
+}
+
+static gint item_by_widget (Item * item, GtkWidget * widget)
+{
+ return (item->widget != widget);
+}
+
+static gint item_by_name (Item * item, const gchar * name)
+{
+ return strcmp (item->name, name);
+}
+
+static gboolean delete_cb (GtkWidget * widget)
+{
+ layout_disable (widget);
+ return TRUE;
+}
+
+static gboolean escape_cb (GtkWidget * widget, GdkEventKey * event)
+{
+ if (event->keyval == GDK_Escape)
+ {
+ layout_disable (widget);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static GtkWidget * dock_get_parent (gint dock)
+{
+ g_return_val_if_fail (dock >= 0 && dock < DOCKS, NULL);
+
+ for (gint scan = dock; scan --; )
+ {
+ if (docks[scan])
+ return g_object_get_data ((GObject *) docks[scan], "next");
+ }
+
+ return layout;
+}
+
+static Item * item_get_prev (Item * item)
+{
+ GList * this = g_list_find (items, item);
+ g_return_val_if_fail (this, NULL);
+
+ for (GList * node = this->prev; node; node = node->prev)
+ {
+ Item * test = node->data;
+ if (test->widget && test->dock == item->dock)
+ return test;
+ }
+
+ return NULL;
+}
+
+static Item * item_get_next (Item * item)
+{
+ GList * this = g_list_find (items, item);
+ g_return_val_if_fail (this, NULL);
+
+ for (GList * node = this->next; node; node = node->next)
+ {
+ Item * test = node->data;
+ if (test->widget && test->dock == item->dock)
+ return test;
+ }
+
+ return NULL;
+}
+
+static GtkWidget * item_get_parent (Item * item)
+{
+ Item * prev = item_get_prev (item);
+ return prev ? g_object_get_data ((GObject *) prev->paned, "next") :
+ g_object_get_data ((GObject *) docks[item->dock], "mine");
+}
+
+static void item_add (Item * item)
+{
+ g_return_if_fail (item->name && item->widget && item->vbox && ! item->paned
+ && ! item->window && item->dock < DOCKS);
+
+ if (item->dock < 0)
+ {
+ item->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ NULL_ON_DESTROY (item->window);
+
+ gtk_window_set_title ((GtkWindow *) item->window, item->name);
+ g_signal_connect_swapped (item->window, "delete-event", (GCallback)
+ delete_cb, item->widget);
+ g_signal_connect_swapped (item->window, "key-press-event", (GCallback)
+ escape_cb, item->widget);
+
+ if (item->x >= 0 && item->y >= 0)
+ gtk_window_move ((GtkWindow *) item->window, item->x, item->y);
+ if (item->w > 0 && item->h > 0)
+ gtk_window_set_default_size ((GtkWindow *) item->window, item->w,
+ item->h);
+
+ gtk_container_add ((GtkContainer *) item->window, item->vbox);
+ gtk_widget_show_all (item->window);
+ }
+ else
+ {
+ /* Screwy logic to figure out where we need to add a GtkPaned and which
+ * widget goes in which pane of it. */
+ gboolean swap = FALSE;
+ Item * where = item;
+ GtkWidget * parent, * paned;
+
+ if (docks[item->dock])
+ {
+ if (! item_get_next (item))
+ {
+ swap = TRUE;
+ where = item_get_prev (item);
+ g_return_if_fail (where && ! where->paned);
+ }
+
+ parent = item_get_parent (where);
+ g_return_if_fail (parent);
+
+ paned = paned_new (! IS_VERTICAL (where->dock), FALSE, where->w,
+ where->h);
+ where->paned = paned;
+ NULL_ON_DESTROY (where->paned);
+ }
+ else
+ {
+ parent = dock_get_parent (item->dock);
+ g_return_if_fail (parent);
+
+ paned = paned_new (IS_VERTICAL (item->dock), IS_AFTER (item->dock),
+ item->w, item->h);
+ docks[item->dock] = paned;
+ NULL_ON_DESTROY (docks[item->dock]);
+ }
+
+ GtkWidget * mine = g_object_get_data ((GObject *) paned, "mine");
+ GtkWidget * next = g_object_get_data ((GObject *) paned, "next");
+ GtkWidget * child = gtk_bin_get_child ((GtkBin *) parent);
+ g_return_if_fail (mine && next && child);
+
+ g_object_ref (child);
+ gtk_container_remove ((GtkContainer *) parent, child);
+ gtk_container_add ((GtkContainer *) parent, paned);
+ gtk_container_add ((GtkContainer *) (swap ? next : mine), item->vbox);
+ gtk_container_add ((GtkContainer *) (swap ? mine : next), child);
+ g_object_unref (child);
+ }
+}
+
+static void item_remove (Item * item)
+{
+ g_return_if_fail (item->widget && item->vbox);
+
+ if (item->dock < 0)
+ {
+ g_return_if_fail (item->window);
+ gtk_container_remove ((GtkContainer *) item->window, item->vbox);
+ gtk_widget_destroy (item->window);
+ }
+ else
+ {
+ /* Screwy logic to figure out which GtkPaned we need to remove and which
+ * pane of it has the widget we need to keep. */
+ gboolean swap = FALSE;
+ Item * where = item;
+ GtkWidget * parent, * paned;
+
+ Item * prev = item_get_prev (item);
+ if (item->paned || prev)
+ {
+ if (! item->paned)
+ {
+ swap = TRUE;
+ where = item_get_prev (item);
+ g_return_if_fail (where && where->paned);
+ }
+
+ parent = item_get_parent (where);
+ g_return_if_fail (parent);
+
+ paned = where->paned;
+ }
+ else
+ {
+ parent = dock_get_parent (item->dock);
+ g_return_if_fail (parent);
+
+ paned = docks[item->dock];
+ }
+
+ GtkWidget * mine = g_object_get_data ((GObject *) paned, "mine");
+ GtkWidget * next = g_object_get_data ((GObject *) paned, "next");
+ GtkWidget * child = gtk_bin_get_child ((GtkBin *) (swap ? mine : next));
+ g_return_if_fail (mine && next && child);
+
+ g_object_ref (child);
+ gtk_container_remove ((GtkContainer *) (swap ? next : mine), item->vbox);
+ gtk_container_remove ((GtkContainer *) (swap ? mine : next), child);
+ gtk_container_remove ((GtkContainer *) parent, paned);
+ gtk_container_add ((GtkContainer *) parent, child);
+ g_object_unref (child);
+ }
+}
+
+static void size_changed_cb (GtkWidget * widget, GdkRectangle * rect, Item * item)
+{
+ item->w = rect->width;
+ item->h = rect->height;
+
+ if (item->dock < 0)
+ {
+ g_return_if_fail (item->window);
+ gtk_window_get_position ((GtkWindow *) item->window, & item->x, & item->y);
+ }
+}
+
+void layout_add (GtkWidget * widget, const gchar * name)
+{
+ g_return_if_fail (layout && center && widget && name && strlen (name) <= 256
+ && ! strchr (name, '\n'));
+
+ GList * node = g_list_find_custom (items, name, (GCompareFunc) item_by_name);
+ Item * item = node ? node->data : NULL;
+
+ if (item)
+ {
+ g_return_if_fail (! item->widget && ! item->vbox && ! item->window);
+ if (item->dock >= DOCKS)
+ item->dock = -1;
+ }
+ else
+ item = item_new (name);
+
+ item->widget = widget;
+ NULL_ON_DESTROY (item->widget);
+ item->vbox = vbox_new (widget, name);
+ NULL_ON_DESTROY (item->vbox);
+
+ g_signal_connect (item->vbox, "size-allocate", (GCallback) size_changed_cb, item);
+
+ item_add (item);
+}
+
+static void layout_move (GtkWidget * widget, gint dock)
+{
+ g_return_if_fail (layout && center && widget && dock < DOCKS);
+
+ GList * node = g_list_find_custom (items, widget, (GCompareFunc) item_by_widget);
+ g_return_if_fail (node && node->data);
+ Item * item = node->data;
+
+ g_return_if_fail (item->vbox);
+ g_object_ref (item->vbox);
+
+ item_remove (item);
+ items = g_list_remove_link (items, node);
+ item->dock = dock;
+ items = g_list_concat (items, node);
+ item_add (item);
+
+ g_object_unref (item->vbox);
+}
+
+void layout_remove (GtkWidget * widget)
+{
+ g_return_if_fail (layout && center && widget);
+
+ /* menu may hold pointers to this widget */
+ if (menu)
+ gtk_widget_destroy (menu);
+
+ GList * node = g_list_find_custom (items, widget, (GCompareFunc) item_by_widget);
+ g_return_if_fail (node && node->data);
+ Item * item = node->data;
+
+ item_remove (item);
+ g_return_if_fail (! item->widget && ! item->vbox && ! item->window);
+}
+
+void layout_save (void)
+{
+ gint i = 0;
+
+ for (GList * node = items; node; node = node->next)
+ {
+ Item * item = node->data;
+ g_return_if_fail (item && item->name);
+
+ gchar key[16], value[64];
+
+ snprintf (key, sizeof key, "item%d_name", i);
+ aud_set_string ("gtkui-layout", key, item->name);
+
+ snprintf (key, sizeof key, "item%d_pos", i);
+ snprintf (value, sizeof value, "%d,%d,%d,%d,%d", item->dock, item->x,
+ item->y, item->w, item->h);
+ aud_set_string ("gtkui-layout", key, value);
+
+ i ++;
+ }
+
+ aud_set_int ("gtkui-layout", "item_count", i);
+}
+
+void layout_load (void)
+{
+ g_return_if_fail (! items);
+
+ gint count = aud_get_int ("gtkui-layout", "item_count");
+
+ for (gint i = 0; i < count; i ++)
+ {
+ gchar key[16];
+
+ snprintf (key, sizeof key, "item%d_name", i);
+ gchar * name = aud_get_string ("gtkui-layout", key);
+ Item * item = item_new (name);
+ g_free (name);
+
+ snprintf (key, sizeof key, "item%d_pos", i);
+ gchar * pos = aud_get_string ("gtkui-layout", key);
+ sscanf (pos, "%d,%d,%d,%d,%d", & item->dock, & item->x, & item->y, & item->w, & item->h);
+ g_free (pos);
+ }
+}
+
+void layout_cleanup (void)
+{
+ for (GList * node = items; node; node = node->next)
+ {
+ Item * item = node->data;
+ g_return_if_fail (item && ! item->widget && ! item->vbox && ! item->window);
+ g_free (item->name);
+ g_slice_free (Item, item);
+ }
+
+ g_list_free (items);
+ items = NULL;
+}
diff --git a/src/gtkui/layout.h b/src/gtkui/layout.h
new file mode 100644
index 0000000..1eb4ba8
--- /dev/null
+++ b/src/gtkui/layout.h
@@ -0,0 +1,36 @@
+/*
+ * layout.h
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef AUD_GTKUI_LAYOUT_H
+#define AUD_GTKUI_LAYOUT_H
+
+#include <gtk/gtk.h>
+
+void layout_load (void);
+void layout_save (void);
+void layout_cleanup (void);
+
+GtkWidget * layout_new (void);
+void layout_add_center (GtkWidget * add);
+void layout_add (GtkWidget * add, const gchar * name);
+void layout_remove (GtkWidget * rem);
+
+#endif
diff --git a/src/gtkui/menus.c b/src/gtkui/menus.c
new file mode 100644
index 0000000..a3de8dc
--- /dev/null
+++ b/src/gtkui/menus.c
@@ -0,0 +1,340 @@
+/*
+ * menus.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <audacious/playlist.h>
+#include <libaudcore/hook.h>
+#include <libaudgui/libaudgui.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+#include "config.h"
+#include "gtkui.h"
+#include "playlist_util.h"
+#include "ui_playlist_notebook.h"
+#include "ui_playlist_widget.h"
+
+#define SHIFT GDK_SHIFT_MASK
+#define CTRL GDK_CONTROL_MASK
+#define ALT GDK_MOD1_MASK
+
+struct MenuItem {
+ const gchar * name;
+ const gchar * icon;
+ guint key;
+ GdkModifierType mod;
+
+ /* for normal items */
+ void (* func) (void);
+
+ /* for toggle items */
+ gboolean (* get) (void);
+ void (* set) (gboolean on);
+ const gchar * hook;
+
+ /* for submenus */
+ const struct MenuItem * items;
+ gint n_items;
+
+ /* for custom submenus */
+ GtkWidget * (* get_sub) (void);
+
+ /* for separators */
+ gboolean sep;
+};
+
+static void open_files (void) {audgui_run_filebrowser (TRUE); }
+static void open_url (void) {audgui_show_add_url_window (TRUE); }
+static void add_files (void) {audgui_run_filebrowser (FALSE); }
+static void add_url (void) {audgui_show_add_url_window (FALSE); }
+
+static gboolean repeat_get (void) {return aud_get_bool (NULL, "repeat"); }
+static void repeat_set (gboolean on) {aud_set_bool (NULL, "repeat", on); }
+static gboolean shuffle_get (void) {return aud_get_bool (NULL, "shuffle"); }
+static void shuffle_set (gboolean on) {aud_set_bool (NULL, "shuffle", on); }
+static gboolean no_advance_get (void) {return aud_get_bool (NULL, "no_playlist_advance"); }
+static void no_advance_set (gboolean on) {aud_set_bool (NULL, "no_playlist_advance", on); }
+static gboolean stop_after_get (void) {return aud_get_bool (NULL, "stop_after_current_song"); }
+static void stop_after_set (gboolean on) {aud_set_bool (NULL, "stop_after_current_song", on); }
+
+static void pl_sort_track (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_TRACK); }
+static void pl_sort_title (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_TITLE); }
+static void pl_sort_artist (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_ARTIST); }
+static void pl_sort_album (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_ALBUM); }
+static void pl_sort_date (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_DATE); }
+static void pl_sort_path (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_PATH); }
+static void pl_sort_custom (void) {aud_playlist_sort_by_scheme (aud_playlist_get_active (), PLAYLIST_SORT_FORMATTED_TITLE); }
+static void pl_reverse (void) {aud_playlist_reverse (aud_playlist_get_active ()); }
+static void pl_random (void) {aud_playlist_randomize (aud_playlist_get_active ()); }
+
+static void pl_new (void)
+{
+ aud_playlist_insert (-1);
+ aud_playlist_set_active (aud_playlist_count () - 1);
+}
+
+static void pl_refresh (void) {aud_playlist_rescan (aud_playlist_get_active ()); }
+static void pl_remove_failed (void) {aud_playlist_remove_failed (aud_playlist_get_active ()); }
+static void pl_close (void) {audgui_confirm_playlist_delete (aud_playlist_get_active ()); }
+static void pl_refresh_sel (void) {aud_playlist_rescan_selected (aud_playlist_get_active ()); }
+static void pl_select_all (void) {aud_playlist_select_all (aud_playlist_get_active (), TRUE); }
+static void pl_rename (void) {ui_playlist_notebook_edit_tab_title (NULL); }
+
+static GtkWidget * get_services_main (void) {return aud_get_plugin_menu (AUD_MENU_MAIN); }
+static GtkWidget * get_services_pl (void) {return aud_get_plugin_menu (AUD_MENU_PLAYLIST_RCLICK); }
+
+static void volume_up (void)
+{
+ int vol = 0;
+ aud_drct_get_volume_main (& vol);
+ aud_drct_set_volume_main (vol + 5);
+}
+
+static void volume_down (void)
+{
+ int vol = 0;
+ aud_drct_get_volume_main (& vol);
+ aud_drct_set_volume_main (vol - 5);
+}
+
+static gboolean menu_bar_get (void) {return aud_get_bool ("gtkui", "menu_visible"); }
+static gboolean info_bar_get (void) {return aud_get_bool ("gtkui", "infoarea_visible"); }
+static gboolean status_bar_get (void) {return aud_get_bool ("gtkui", "statusbar_visible"); }
+static gboolean column_headers_get (void) {return aud_get_bool ("gtkui", "playlist_headers"); }
+static gboolean autoscroll_get (void) {return aud_get_bool ("gtkui", "autoscroll"); }
+static void autoscroll_set (gboolean on) {aud_set_bool ("gtkui", "autoscroll", on); }
+
+static const struct MenuItem file_items[] = {
+ {N_("_Open Files ..."), GTK_STOCK_OPEN, 'o', CTRL, .func = open_files},
+ {N_("Open _URL ..."), GTK_STOCK_NETWORK, 'l', CTRL, .func = open_url},
+ {N_("_Add Files ..."), GTK_STOCK_ADD, 'o', SHIFT | CTRL, .func = add_files},
+ {N_("Add U_RL ..."), GTK_STOCK_NETWORK, 'l', SHIFT | CTRL, .func = add_url},
+ {.sep = TRUE},
+ {N_("A_bout ..."), GTK_STOCK_ABOUT, .func = audgui_show_about_window},
+ {N_("_Preferences ..."), GTK_STOCK_PREFERENCES, .func = aud_show_prefs_window},
+ {N_("_Quit"), GTK_STOCK_QUIT, 'q', CTRL, .func = aud_drct_quit}};
+
+static const struct MenuItem playback_items[] = {
+ {N_("_Play"), GTK_STOCK_MEDIA_PLAY, GDK_Return, CTRL, .func = aud_drct_play},
+ {N_("Paus_e"), GTK_STOCK_MEDIA_PAUSE, ',', CTRL, .func = aud_drct_pause},
+ {N_("_Stop"), GTK_STOCK_MEDIA_STOP, '.', CTRL, .func = aud_drct_stop},
+ {N_("Pre_vious"), GTK_STOCK_MEDIA_PREVIOUS, GDK_Up, ALT, .func = aud_drct_pl_prev},
+ {N_("_Next"), GTK_STOCK_MEDIA_NEXT, GDK_Down, ALT, .func = aud_drct_pl_next},
+ {.sep = TRUE},
+ {N_("_Repeat"), NULL, 'r', CTRL, .get = repeat_get, repeat_set, "set repeat"},
+ {N_("S_huffle"), NULL, 's', CTRL, .get = shuffle_get, shuffle_set, "set shuffle"},
+ {N_("N_o Playlist Advance"), NULL, 'n', CTRL, .get = no_advance_get, no_advance_set, "set no_playlist_advance"},
+ {N_("Stop _After This Song"), NULL, 'm', CTRL, .get = stop_after_get, stop_after_set, "set stop_after_current_song"},
+ {.sep = TRUE},
+ {N_("Song _Info ..."), GTK_STOCK_INFO, 'i', CTRL, .func = audgui_infowin_show_current},
+ {N_("Jump to _Time ..."), GTK_STOCK_JUMP_TO, .func = audgui_jump_to_time},
+ {N_("_Jump to Song ..."), GTK_STOCK_JUMP_TO, 'j', CTRL, .func = audgui_jump_to_track}};
+
+static const struct MenuItem sort_items[] = {
+ {N_("By Track _Number"), .func = pl_sort_track},
+ {N_("By _Title"), .func = pl_sort_title},
+ {N_("By _Artist"), .func = pl_sort_artist},
+ {N_("By A_lbum"), .func = pl_sort_album},
+ {N_("By Release _Date"), .func = pl_sort_date},
+ {N_("By _File Path"), .func = pl_sort_path},
+ {N_("By _Custom Title"), .func = pl_sort_custom},
+ {.sep = TRUE},
+ {N_("R_everse Order"), GTK_STOCK_SORT_DESCENDING, .func = pl_reverse},
+ {N_("_Random Order"), .func = pl_random}};
+
+static const struct MenuItem playlist_items[] = {
+ {N_("_Refresh"), GTK_STOCK_REFRESH, GDK_F5, .func = pl_refresh},
+ {N_("Remove _Unavailable Files"), GTK_STOCK_REMOVE, .func = pl_remove_failed},
+ {.sep = TRUE},
+ {N_("_Sort"), GTK_STOCK_SORT_ASCENDING, .items = sort_items, G_N_ELEMENTS (sort_items)},
+ {.sep = TRUE},
+ {N_("_New"), GTK_STOCK_NEW, 't', CTRL, .func = pl_new},
+ {N_("_Close"), GTK_STOCK_CLOSE, 'w', CTRL, .func = pl_close},
+ {.sep = TRUE},
+ {N_("_Import ..."), GTK_STOCK_OPEN, .func = audgui_import_playlist},
+ {N_("_Export ..."), GTK_STOCK_SAVE, .func = audgui_export_playlist},
+ {.sep = TRUE},
+ {N_("_Playlist Manager ..."), AUD_STOCK_PLAYLIST, 'p', CTRL, .func = audgui_playlist_manager},
+ {N_("_Queue Manager ..."), AUD_STOCK_QUEUETOGGLE, 'u', CTRL, .func = audgui_queue_manager_show}};
+
+static const struct MenuItem output_items[] = {
+ {N_("Volume _Up"), GTK_STOCK_GO_UP, '+', CTRL, .func = volume_up},
+ {N_("Volume _Down"), GTK_STOCK_GO_DOWN, '-', CTRL, .func = volume_down},
+ {.sep = TRUE},
+ {N_("_Equalizer"), GTK_STOCK_PREFERENCES, 'e', CTRL, .func = audgui_show_equalizer_window},
+ {.sep = TRUE},
+ {N_("E_ffects"), .get_sub = audgui_create_effects_menu}};
+
+static const struct MenuItem view_items[] = {
+ {N_("_Interface"), .get_sub = audgui_create_iface_menu},
+ {N_("_Visualizations"), .get_sub = audgui_create_vis_menu},
+ {.sep = TRUE},
+ {N_("Show _Menu Bar"), NULL, 'm', SHIFT | CTRL, .get = menu_bar_get, show_menu},
+ {N_("Show I_nfo Bar"), NULL, 'i', SHIFT | CTRL, .get = info_bar_get, show_infoarea},
+ {N_("Show _Status Bar"), NULL, 's', SHIFT | CTRL, .get = status_bar_get, show_statusbar},
+ {.sep = TRUE},
+ {N_("Show Column _Headers"), .get = column_headers_get, playlist_show_headers},
+ {N_("Choose _Columns ..."), .func = pw_col_choose},
+ {N_("Scrol_l on Song Change"), .get = autoscroll_get, autoscroll_set}};
+
+static const struct MenuItem main_items[] = {
+ {N_("_File"), .items = file_items, G_N_ELEMENTS (file_items)},
+ {N_("_Playback"), .items = playback_items, G_N_ELEMENTS (playback_items)},
+ {N_("P_laylist"), .items = playlist_items, G_N_ELEMENTS (playlist_items)},
+ {N_("_Services"), .get_sub = get_services_main},
+ {N_("_Output"), .items = output_items, G_N_ELEMENTS (output_items)},
+ {N_("_View"), .items = view_items, G_N_ELEMENTS (view_items)}};
+
+static const struct MenuItem rclick_items[] = {
+ {N_("Song _Info ..."), GTK_STOCK_INFO, 'i', ALT, .func = playlist_song_info},
+ {N_("_Queue/Unqueue"), AUD_STOCK_QUEUETOGGLE, 'q', ALT, .func = playlist_queue_toggle},
+ {N_("_Refresh"), GTK_STOCK_REFRESH, GDK_F6, .func = pl_refresh_sel},
+ {.sep = TRUE},
+ {N_("Cu_t"), GTK_STOCK_CUT, .func = playlist_cut},
+ {N_("_Copy"), GTK_STOCK_COPY, .func = playlist_copy},
+ {N_("_Paste"), GTK_STOCK_PASTE, .func = playlist_paste},
+ {N_("Select _All"), GTK_STOCK_SELECT_ALL, .func = pl_select_all},
+ {.sep = TRUE},
+ {N_("_Services"), .get_sub = get_services_pl}};
+
+static const struct MenuItem tab_items[] = {
+ {N_("_Rename"), GTK_STOCK_EDIT, GDK_F2, .func = pl_rename},
+ {N_("_Close"), GTK_STOCK_CLOSE, .func = pl_close}};
+
+static void toggled_cb (GtkCheckMenuItem * check, const struct MenuItem * item)
+{
+ if (item->get () == gtk_check_menu_item_get_active (check))
+ return;
+
+ item->set (gtk_check_menu_item_get_active (check));
+}
+
+static void hook_cb (void * data, GtkWidget * check)
+{
+ const struct MenuItem * item = g_object_get_data ((GObject *) check, "item");
+ gtk_check_menu_item_set_active ((GtkCheckMenuItem *) check, item->get ());
+}
+
+static void unhook_cb (GtkCheckMenuItem * check, const struct MenuItem * item)
+{
+ hook_dissociate_full (item->hook, (HookFunction) hook_cb, check);
+}
+
+static void populate_menu (GtkWidget * shell, const struct MenuItem * items,
+ gint n_items, GtkAccelGroup * accel)
+{
+ for (gint i = 0; i < n_items; i ++)
+ {
+ const struct MenuItem * item = & items[i];
+ GtkWidget * widget = NULL;
+
+ if (item->name && item->func) /* normal widget */
+ {
+ widget = gtk_image_menu_item_new_with_mnemonic (_(item->name));
+ g_signal_connect (widget, "activate", item->func, NULL);
+
+ if (item->icon)
+ gtk_image_menu_item_set_image ((GtkImageMenuItem *) widget,
+ gtk_image_new_from_stock (item->icon, GTK_ICON_SIZE_MENU));
+ }
+ else if (item->name && item->get && item->set) /* toggle widget */
+ {
+ widget = gtk_check_menu_item_new_with_mnemonic (_(item->name));
+ gtk_check_menu_item_set_active ((GtkCheckMenuItem *) widget,
+ item->get ());
+ g_signal_connect (widget, "toggled", (GCallback) toggled_cb,
+ (void *) item);
+
+ if (item->hook)
+ {
+ g_object_set_data ((GObject *) widget, "item", (void *) item);
+ hook_associate (item->hook, (HookFunction) hook_cb, widget);
+ g_signal_connect (widget, "destroy", (GCallback) unhook_cb,
+ (void *) item);
+ }
+ }
+ else if (item->name && (item->items || item->get_sub)) /* submenu */
+ {
+ widget = gtk_image_menu_item_new_with_mnemonic (_(item->name));
+
+ if (item->icon)
+ gtk_image_menu_item_set_image ((GtkImageMenuItem *) widget,
+ gtk_image_new_from_stock (item->icon, GTK_ICON_SIZE_MENU));
+
+ GtkWidget * sub;
+
+ if (item->get_sub)
+ sub = item->get_sub ();
+ else
+ {
+ sub = gtk_menu_new ();
+ populate_menu (sub, item->items, item->n_items, accel);
+ }
+
+ gtk_menu_item_set_submenu ((GtkMenuItem *) widget, sub);
+ }
+ else if (item->sep) /* separator */
+ widget = gtk_separator_menu_item_new ();
+
+ if (! widget)
+ continue;
+
+ if (item->key)
+ gtk_widget_add_accelerator (widget, "activate", accel, item->key,
+ item->mod, GTK_ACCEL_VISIBLE);
+
+ gtk_widget_show (widget);
+ gtk_menu_shell_append ((GtkMenuShell *) shell, widget);
+ }
+}
+
+GtkWidget * make_menu_bar (GtkAccelGroup * accel)
+{
+ GtkWidget * bar = gtk_menu_bar_new ();
+ populate_menu (bar, main_items, G_N_ELEMENTS (main_items), accel);
+ return bar;
+}
+
+GtkWidget * make_menu_main (GtkAccelGroup * accel)
+{
+ GtkWidget * shell = gtk_menu_new ();
+ populate_menu (shell, main_items, G_N_ELEMENTS (main_items), accel);
+ return shell;
+}
+
+GtkWidget * make_menu_rclick (GtkAccelGroup * accel)
+{
+ GtkWidget * shell = gtk_menu_new ();
+ populate_menu (shell, rclick_items, G_N_ELEMENTS (rclick_items), accel);
+ return shell;
+}
+
+GtkWidget * make_menu_tab (GtkAccelGroup * accel)
+{
+ GtkWidget * shell = gtk_menu_new ();
+ populate_menu (shell, tab_items, G_N_ELEMENTS (tab_items), accel);
+ return shell;
+}
diff --git a/src/gtkui/playlist_util.c b/src/gtkui/playlist_util.c
index b8d42fd..65e8681 100644
--- a/src/gtkui/playlist_util.c
+++ b/src/gtkui/playlist_util.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2010 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
* Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
*
* This program is free software; you can redistribute it and/or modify
@@ -18,195 +18,24 @@
* Audacious or using our public API to be a derived work.
*/
-#include <glib.h>
#include <gtk/gtk.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
+#include <audacious/drct.h>
#include <audacious/playlist.h>
-#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
+#include <libaudgui/list.h>
#include "playlist_util.h"
-#include "ui_playlist_model.h"
#include "ui_playlist_notebook.h"
-#include "ui_playlist_widget.h"
-GtkTreeView *playlist_get_treeview_from_page(GtkWidget *page)
-{
- if (!page)
- return NULL;
-
- return GTK_TREE_VIEW(g_object_get_data(G_OBJECT(page), "treeview"));
-}
-
-GtkTreeView *playlist_get_treeview(gint playlist)
+GtkWidget * playlist_get_treeview (gint playlist)
{
GtkWidget *page = gtk_notebook_get_nth_page(UI_PLAYLIST_NOTEBOOK, playlist);
if (!page)
return NULL;
- return GTK_TREE_VIEW(g_object_get_data(G_OBJECT(page), "treeview"));
-}
-
-GtkTreeView *playlist_get_active_treeview(void)
-{
- return playlist_get_treeview(aud_playlist_get_active());
-}
-
-GtkTreeView *playlist_get_playing_treeview(void)
-{
- return playlist_get_treeview(aud_playlist_get_playing());
-}
-
-gint playlist_get_playlist_from_treeview(GtkTreeView *treeview)
-{
- g_return_val_if_fail(treeview != NULL, -1);
-
- GtkTreeModel *tree_model = gtk_tree_view_get_model(treeview);
- UiPlaylistModel *model = UI_PLAYLIST_MODEL(tree_model);
-
- return model->playlist;
-}
-
-static inline void _gtk_tree_selection_select_path(GtkTreePath *path, GtkTreeSelection *sel)
-{
- gtk_tree_selection_select_path(sel, path);
-}
-
-void playlist_set_selected(GtkTreeView *treeview, GtkTreePath *path)
-{
- GtkTreeSelection *sel = gtk_tree_view_get_selection(treeview);
-
- gtk_tree_selection_unselect_all(sel);
- gtk_tree_selection_select_path(sel, path);
- gtk_tree_view_set_cursor(treeview, path, NULL, FALSE);
-}
-
-void playlist_set_selected_list(GtkTreeView *treeview, GList *list, gint distance)
-{
- GtkTreeSelection *sel = gtk_tree_view_get_selection(treeview);
- GtkTreePath *path;
- gint pos;
-
- gtk_tree_selection_unselect_all(sel);
-
- if (distance == 0)
- {
- gtk_tree_view_set_cursor(treeview, g_list_first(list)->data, NULL, FALSE);
- g_list_foreach(list, (GFunc) _gtk_tree_selection_select_path, sel);
- return;
- }
-
- for (GList *target = g_list_first(list); target; target = target->next)
- {
- if (!target->data)
- continue;
-
- pos = playlist_get_index_from_path(target->data) + distance;
- path = gtk_tree_path_new_from_indices(pos, -1);
-
- if (path)
- {
- gtk_tree_selection_select_path(sel, path);
-
- if (target->prev == NULL)
- gtk_tree_view_set_cursor(treeview, path, NULL, FALSE);
-
- gtk_tree_path_free(path);
- }
- }
-}
-
-void playlist_scroll_to_row (GtkTreeView * tree, gint row)
-{
- UiPlaylistModel * model = (UiPlaylistModel *) gtk_tree_view_get_model (tree);
-
- aud_playlist_select_all (model->playlist, FALSE);
- if (row >= 0)
- aud_playlist_entry_set_selected (model->playlist, row, TRUE);
- treeview_set_focus (tree, row);
-}
-
-GList *playlist_get_selected_list(GtkTreeView *treeview)
-{
- GtkTreeModel *treemodel;
- GtkTreeSelection *sel;
-
- g_return_val_if_fail(treeview != NULL, NULL);
-
- treemodel = gtk_tree_view_get_model(treeview);
-
- sel = gtk_tree_view_get_selection(treeview);
- g_return_val_if_fail(sel != NULL, NULL);
-
- return gtk_tree_selection_get_selected_rows(sel, &treemodel);
-}
-
-gint playlist_get_selected_length(GtkTreeView *treeview)
-{
- GList *list = playlist_get_selected_list(treeview);
- gint selected_length;
-
- selected_length = g_list_length(list);
-
- g_list_foreach(list, (GFunc) gtk_tree_path_free, NULL);
- g_list_free(list);
-
- return selected_length;
-}
-
-GtkTreePath *playlist_get_first_selected_path(GtkTreeView *treeview)
-{
- GList *list;
- GtkTreePath *path;
-
- if (! (list = playlist_get_selected_list (treeview)))
- return NULL;
-
- path = gtk_tree_path_copy(list->data);
-
- g_list_foreach(list, (GFunc) gtk_tree_path_free, NULL);
- g_list_free(list);
-
- return path;
-}
-
-gint playlist_get_first_selected_index(GtkTreeView *treeview)
-{
- GtkTreePath *path = playlist_get_first_selected_path(treeview);
-
- if (! path)
- return -1;
-
- gint selected = playlist_get_index_from_path(path);
- gtk_tree_path_free(path);
-
- return selected;
-}
-
-gint playlist_get_index_from_path(GtkTreePath * path)
-{
- gint *pos;
-
- g_return_val_if_fail(path != NULL, -1);
-
- if (!(pos = gtk_tree_path_get_indices(path)))
- return -1;
-
- return pos[0];
-}
-
-void playlist_select_range (gint list, gint top, gint length)
-{
- gint count;
-
- aud_playlist_select_all (list, FALSE);
-
- for (count = 0; count < length; count ++)
- aud_playlist_entry_set_selected (list, top + count, TRUE);
+ return g_object_get_data ((GObject *) page, "treeview");
}
gint playlist_count_selected_in_range (gint list, gint top, gint length)
@@ -223,162 +52,97 @@ gint playlist_count_selected_in_range (gint list, gint top, gint length)
return selected;
}
-void playlist_selected_to_indexes (gint list, struct index * * namesp,
- struct index * * tuplesp)
+gint playlist_get_focus (gint list)
{
- gint entries = aud_playlist_entry_count (list);
- gint count;
- const Tuple * tuple;
-
- * namesp = index_new ();
- * tuplesp = index_new ();
-
- for (count = 0; count < entries; count ++)
- {
- if (! aud_playlist_entry_get_selected (list, count))
- continue;
-
- index_append (* namesp, g_strdup (aud_playlist_entry_get_filename (list,
- count)));
+ GtkWidget * tree = playlist_get_treeview (list);
+ g_return_val_if_fail (tree, -1);
- if ((tuple = aud_playlist_entry_get_tuple (list, count, FALSE)))
- mowgli_object_ref ((Tuple *) tuple);
-
- index_append (* tuplesp, (Tuple *) tuple);
- }
+ return audgui_list_get_focus (tree);
}
-gint treeview_get_focus (GtkTreeView * tree)
+void playlist_song_info (void)
{
- GtkTreePath * path;
- gint focus = -1;
+ gint list = aud_playlist_get_active ();
+ gint focus = playlist_get_focus (list);
- gtk_tree_view_get_cursor (tree, & path, NULL);
- if (path)
- {
- focus = gtk_tree_path_get_indices (path)[0];
- gtk_tree_path_free (path);
- }
-
- return focus;
-}
-
-void treeview_set_focus (GtkTreeView * tree, gint focus)
-{
- UiPlaylistModel * model = (UiPlaylistModel *) gtk_tree_view_get_model (tree);
+ if (focus < 0)
+ return;
- if (aud_playlist_update_pending ())
- {
- model->focus_changed = TRUE;
- model->focus = focus;
- }
- else
- {
- ui_playlist_widget_block_updates ((GtkWidget *) tree, TRUE);
- treeview_set_focus_now (tree, focus);
- ui_playlist_widget_block_updates ((GtkWidget *) tree, FALSE);
- }
+ audgui_infowin_show (list, focus);
}
-void treeview_set_focus_now (GtkTreeView * tree, gint focus)
+void playlist_queue_toggle (void)
{
- UiPlaylistModel * model = (UiPlaylistModel *) gtk_tree_view_get_model (tree);
- GtkTreePath * path;
+ gint list = aud_playlist_get_active ();
+ gint focus = playlist_get_focus (list);
if (focus < 0)
- {
- if (! aud_playlist_entry_count (model->playlist))
- return;
- focus = 0;
- }
-
- path = gtk_tree_path_new_from_indices (focus, -1);
- gtk_tree_view_set_cursor (tree, path, NULL, FALSE);
- gtk_tree_view_scroll_to_cell (tree, path, NULL, FALSE, 0, 0);
- gtk_tree_path_free (path);
-
- /* set_cursor changes selection; undo it */
- treeview_refresh_selection_now (tree);
-}
+ return;
-void treeview_refresh_selection (GtkTreeView * tree)
-{
- UiPlaylistModel * model = (UiPlaylistModel *) gtk_tree_view_get_model (tree);
+ gint at = aud_playlist_queue_find_entry (list, focus);
- if (aud_playlist_update_pending ())
- model->selection_changed = TRUE;
+ if (at < 0)
+ aud_playlist_queue_insert (list, -1, focus);
else
- {
- ui_playlist_widget_block_updates ((GtkWidget *) tree, TRUE);
- treeview_refresh_selection_now (tree);
- ui_playlist_widget_block_updates ((GtkWidget *) tree, FALSE);
- }
+ aud_playlist_queue_delete (list, at, 1);
}
-void treeview_refresh_selection_now (GtkTreeView * tree)
+void playlist_delete_selected (void)
{
- UiPlaylistModel * model = (UiPlaylistModel *) gtk_tree_view_get_model (tree);
- GtkTreeSelection * sel = gtk_tree_view_get_selection (tree);
- gint entries = aud_playlist_entry_count (model->playlist);
- GtkTreeIter iter;
- gint count;
+ gint list = aud_playlist_get_active ();
+ gint focus = playlist_get_focus (list);
+ focus -= playlist_count_selected_in_range (list, 0, focus);
- if (! entries)
- return;
+ aud_drct_pl_delete_selected (list);
- gtk_tree_model_get_iter_first ((GtkTreeModel *) model, & iter);
+ if (aud_playlist_selected_count (list)) /* song changed? */
+ return;
- for (count = 0; count < entries; count ++)
+ if (focus == aud_playlist_entry_count (list))
+ focus --;
+ if (focus >= 0)
{
- if (aud_playlist_entry_get_selected (model->playlist, count))
- gtk_tree_selection_select_iter (sel, & iter);
- else
- gtk_tree_selection_unselect_iter (sel, & iter);
-
- gtk_tree_model_iter_next ((GtkTreeModel *) model, & iter);
+ aud_playlist_entry_set_selected (list, focus, TRUE);
+ playlist_set_focus (list, focus);
}
}
-void treeview_add_indexes (GtkTreeView * tree, gint row, struct index * names,
- struct index * tuples)
+void playlist_copy (void)
{
- gint playlist = ((UiPlaylistModel *) gtk_tree_view_get_model
- (tree))->playlist;
- gint entries = aud_playlist_entry_count (playlist);
- gint new;
-
- if (row < 0)
- row = entries;
+ gchar * text = audgui_urilist_create_from_selected (aud_playlist_get_active ());
+ if (! text)
+ return;
- aud_playlist_entry_insert_batch (playlist, row, names, tuples);
- new = aud_playlist_entry_count (playlist);
- playlist_select_range (playlist, row, new - entries);
- treeview_set_focus (tree, MIN (row, new - 1));
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), text, -1);
+ g_free (text);
}
-void treeview_add_urilist (GtkTreeView * tree, gint row, const gchar * list)
+void playlist_cut (void)
{
- gint playlist = ((UiPlaylistModel *) gtk_tree_view_get_model
- (tree))->playlist;
- gint entries = aud_playlist_entry_count (playlist);
- gint new;
+ playlist_copy ();
+ playlist_delete_selected ();
+}
- if (row < 0)
- row = entries;
+void playlist_paste (void)
+{
+ gchar * text = gtk_clipboard_wait_for_text (gtk_clipboard_get
+ (GDK_SELECTION_CLIPBOARD));
+ if (! text)
+ return;
- audgui_urilist_insert (playlist, row, list);
- new = aud_playlist_entry_count (playlist);
- playlist_select_range (playlist, row, new - entries);
- treeview_set_focus (tree, MIN (row, new - 1));
+ gint list = aud_playlist_get_active ();
+ audgui_urilist_insert (list, playlist_get_focus (list), text);
+ g_free (text);
}
-void treeview_remove_selected (GtkTreeView * tree)
+void playlist_shift (gint offset)
{
- gint list = ((UiPlaylistModel *) gtk_tree_view_get_model (tree))->playlist;
- gint focus = treeview_get_focus (tree);
+ gint list = aud_playlist_get_active ();
+ gint focus = playlist_get_focus (list);
- focus -= playlist_count_selected_in_range (list, 0, focus);
- aud_playlist_delete_selected (list);
- treeview_set_focus (tree, (focus < aud_playlist_entry_count (list)) ? focus
- : focus - 1);
+ if (focus < 0 || ! aud_playlist_entry_get_selected (list, focus))
+ return;
+
+ focus += aud_playlist_shift (list, focus, offset);
+ playlist_set_focus (list, focus);
}
diff --git a/src/gtkui/playlist_util.h b/src/gtkui/playlist_util.h
index 46a9af6..6cb071d 100644
--- a/src/gtkui/playlist_util.h
+++ b/src/gtkui/playlist_util.h
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2010 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
* Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
*
* This program is free software; you can redistribute it and/or modify
@@ -21,37 +21,19 @@
#ifndef __PLAYLISTUTIL_H__
#define __PLAYLISTUTIL_H__
-void playlist_set_selected(GtkTreeView *treeview, GtkTreePath *path);
-void playlist_set_selected_list(GtkTreeView *treeview, GList *list, gint distance);
-GtkTreeView *playlist_get_treeview_from_page(GtkWidget *page);
-GtkTreeView *playlist_get_treeview(gint playlist);
-GtkTreeView *playlist_get_active_treeview(void);
-GtkTreeView *playlist_get_playing_treeview(void);
-gint playlist_get_playlist_from_treeview(GtkTreeView *treeview);
-void playlist_scroll_to_row(GtkTreeView *treeview, gint position);
-GList *playlist_get_selected_list(GtkTreeView *treeview);
-gint playlist_get_selected_length(GtkTreeView *treeview);
-gint playlist_get_first_selected_index(GtkTreeView *treeview);
-GtkTreePath *playlist_get_first_selected_path(GtkTreeView *treeview);
-gint playlist_get_index_from_path(GtkTreePath * path);
+GtkWidget * playlist_get_treeview (gint playlist);
-void playlist_select_range (gint list, gint top, gint length);
gint playlist_count_selected_in_range (gint list, gint top, gint length);
-void playlist_selected_to_indexes (gint list, struct index * * namesp,
- struct index * * tuplesp);
-
-gint treeview_get_focus (GtkTreeView * tree);
-
-/* these also refresh selection */
-void treeview_set_focus (GtkTreeView * tree, gint focus);
-void treeview_set_focus_now (GtkTreeView * tree, gint focus);
-
-void treeview_refresh_selection (GtkTreeView * tree);
-void treeview_refresh_selection_now (GtkTreeView * tree);
-
-void treeview_add_indexes (GtkTreeView * tree, gint row, struct index * names,
- struct index * tuples);
-void treeview_add_urilist (GtkTreeView * tree, gint row, const gchar * list);
-void treeview_remove_selected (GtkTreeView * tree);
+gint playlist_get_focus (gint list);
+void playlist_song_info (void);
+void playlist_queue_toggle (void);
+void playlist_delete_selected (void);
+void playlist_copy (void);
+void playlist_cut (void);
+void playlist_paste (void);
+void playlist_shift (gint offset);
+
+/* ui_playlist_notebook.c */
+void playlist_set_focus (gint list, gint row);
#endif
diff --git a/src/gtkui/ui/player.ui b/src/gtkui/ui/player.ui
deleted file mode 100644
index c191a28..0000000
--- a/src/gtkui/ui/player.ui
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="mainwin-menus">
- <menu action="file">
- <menuitem action="play file" />
- <menuitem action="play location" />
- <menuitem action="playlist add files" />
- <menuitem action="playlist add url" />
- <separator />
- <menuitem action="preferences" />
- <menuitem action="quit" />
- </menu>
-
- <menu action="playback">
- <menuitem action="playback repeat" />
- <menuitem action="playback shuffle" />
- <menuitem action="playback no playlist advance" />
- <menuitem action="stop after current song" />
- <separator />
- <menuitem action="playback play" />
- <menuitem action="playback pause" />
- <menuitem action="playback stop" />
- <menuitem action="playback previous" />
- <menuitem action="playback next" />
- <separator />
- <menuitem action="jump to playlist start" />
- <separator />
- <menuitem action="ab set" />
- <menuitem action="ab clear" />
- <separator />
- <menuitem action="jump to file" />
- <menuitem action="jump to time" />
- <separator />
- <menuitem action="current track info" />
- </menu>
- <menu action="playlist">
- <separator />
- <menu action="playlist sort">
- <menuitem action="playlist sort track" />
- <menuitem action="playlist sort title" />
- <menuitem action="playlist sort artist" />
- <menuitem action="playlist sort album" />
- <menuitem action="playlist sort path" />
- <separator />
- <menuitem action="playlist reverse" />
- </menu>
- <menuitem action="playlist randomize" />
- <separator />
- <menuitem action="playlist refresh" />
- <separator />
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save all" />
- <separator />
- <menuitem action="playlist manager" />
- </menu>
- <menu action="plugins-menu" />
-
- <menu action="output">
- <menuitem action="effects menu" />
- <separator />
- <menuitem action="equalizer show" />
- </menu>
-
- <menu action="view">
- <menuitem action="iface menu" />
- <separator />
- <menuitem action="view menu" />
- <menuitem action="view playlists" />
- <menuitem action="view infoarea" />
- <menuitem action="view statusbar" />
- </menu>
-
- <menu action="help">
- <menuitem action="about audacious" />
- </menu>
- </menubar>
-
- <menubar name="playlist-menus">
- <menu action="dummy" name="playlist-rightclick-menu">
- <menuitem action="playlist track info" />
- <separator />
- <menuitem action="playlist copy"/>
- <menuitem action="playlist cut"/>
- <menuitem action="playlist paste"/>
- <separator/>
- <menuitem action="playlist select none" />
- <menuitem action="playlist select all" />
- <separator/>
- <menuitem action="playlist remove selected" />
- <menuitem action="playlist remove unselected" />
- <menuitem action="playlist remove all" />
- <separator />
- <menuitem action="queue toggle" />
- <separator />
- <menuitem action="plugins-menu" />
- </menu>
- </menubar>
-</ui>
diff --git a/src/gtkui/ui_gtk.c b/src/gtkui/ui_gtk.c
index bab1bbf..7867e1f 100644
--- a/src/gtkui/ui_gtk.c
+++ b/src/gtkui/ui_gtk.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2010 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
*
* 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
@@ -17,354 +17,238 @@
* Audacious or using our public API to be a derived work.
*/
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
-#include <audacious/audconfig.h>
#include <audacious/debug.h>
#include <audacious/drct.h>
-#include <audacious/interface.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
#include <audacious/playlist.h>
#include <audacious/plugin.h>
+#include <audacious/plugins.h>
+#include <audacious/misc.h>
#include <libaudcore/hook.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
#include "config.h"
-#include "gtkui_cfg.h"
-#include "ui_gtk.h"
+#include "gtkui.h"
+#include "layout.h"
#include "ui_playlist_notebook.h"
-#include "ui_manager.h"
+#include "ui_playlist_widget.h"
#include "ui_infoarea.h"
#include "ui_statusbar.h"
#include "playlist_util.h"
-#include "actions-mainwin.h"
-#include "actions-playlist.h"
-#if ! GTK_CHECK_VERSION (2, 18, 0)
-#define gtk_widget_set_can_focus(w, t) do {if (t) GTK_WIDGET_SET_FLAGS ((w), GTK_CAN_FOCUS); else GTK_WIDGET_UNSET_FLAGS ((w), GTK_CAN_FOCUS);} while (0)
-#endif
+static const gchar * const gtkui_defaults[] = {
+ "infoarea_visible", "TRUE",
+ "menu_visible", "TRUE",
+ "player_visible", "TRUE",
+ "statusbar_visible", "TRUE",
+
+ "autoscroll", "TRUE",
+ "playlist_columns", "title artist album queued length",
+ "playlist_headers", "TRUE",
+
+ "player_x", "-1",
+ "player_y", "-1",
+ "player_width", "760",
+ "player_height", "460",
-gboolean multi_column_view;
+ /* hidden settings */
+ "always_on_top", "FALSE",
+ "save_window_position", "TRUE",
+ "show_song_titles", "TRUE",
+ "custom_playlist_colors", "FALSE",
+ NULL};
-static GtkWidget *label_time;
-static GtkWidget *slider;
+static PluginHandle * search_tool;
-#if GTK_CHECK_VERSION (2, 12, 0)
-#define HAVE_VOLUME
static GtkWidget *volume;
static gboolean volume_slider_is_moving = FALSE;
static guint update_volume_timeout_source = 0;
static gulong volume_change_handler_id;
-#endif
-static GtkWidget *visualizer = NULL;
-GtkWidget *playlist_box;
-GtkWidget *window; /* the main window */
-GtkWidget *vbox; /* the main vertical box */
-GtkWidget *menu;
-GtkWidget *infoarea = NULL;
-GtkWidget *statusbar = NULL;
+static GtkAccelGroup * accel;
+
+static GtkWidget * button_play, * button_pause, * button_stop, * slider,
+ * label_time, * button_shuffle, * button_repeat, * search_button;
+static GtkWidget * window, * vbox_outer, * vbox, * menu_box, * menu, * infoarea, * statusbar;
+static GtkWidget * menu_main, * menu_rclick, * menu_tab;
static GtkWidget * error_win = NULL;
-static gulong slider_change_handler_id;
static gboolean slider_is_moving = FALSE;
-static gint slider_position;
+static guint delayed_title_change_source = 0;
static guint update_song_timeout_source = 0;
-extern GtkWidget *ui_playlist_notebook_tab_title_editing;
-
-static gboolean _ui_initialize(InterfaceCbs * cbs);
-static gboolean _ui_finalize(void);
-
-Interface gtkui_interface = {
- .id = "gtkui",
- .desc = N_("GTK Interface"),
- .init = _ui_initialize,
- .fini = _ui_finalize,
-};
-
-SIMPLE_INTERFACE_PLUGIN("gtkui", &gtkui_interface);
+static gboolean init (void);
+static void cleanup (void);
+static void ui_show (gboolean show);
+static gboolean ui_is_shown (void);
+static gboolean ui_is_focused (void);
+static void ui_show_error (const gchar * text);
+
+AUD_IFACE_PLUGIN
+(
+ .name = N_("GTK Interface"),
+ .init = init,
+ .cleanup = cleanup,
+ .show = ui_show,
+ .is_shown = ui_is_shown,
+ .is_focused = ui_is_focused,
+ .show_error = ui_show_error,
+ .show_filebrowser = audgui_run_filebrowser,
+ .show_jump_to_track = audgui_jump_to_track,
+ .run_gtk_plugin = (void *) layout_add,
+ .stop_gtk_plugin = (void *) layout_remove,
+)
static void save_window_size (void)
{
- gtk_window_get_position ((GtkWindow *) window, & config.player_x,
- & config.player_y);
+ gint x, y, w, h;
+ gtk_window_get_position ((GtkWindow *) window, & x, & y);
+ gtk_window_get_size ((GtkWindow *) window, & w, & h);
- if (gtk_window_get_resizable ((GtkWindow *) window))
- gtk_window_get_size ((GtkWindow *) window, & config.player_width,
- & config.player_height);
+ aud_set_int ("gtkui", "player_x", x);
+ aud_set_int ("gtkui", "player_y", y);
+ aud_set_int ("gtkui", "player_width", w);
+ aud_set_int ("gtkui", "player_height", h);
}
-static void shrink_window (void)
+static gboolean window_delete()
{
- GtkRequisition r;
+ gboolean handle = FALSE;
+
+ hook_call("window close", &handle);
- gtk_widget_size_request (window, & r);
- gtk_window_resize ((GtkWindow *) window, r.width, r.height);
- gtk_window_set_resizable ((GtkWindow *) window, FALSE);
+ if (handle)
+ return TRUE;
+
+ aud_drct_quit ();
+ return TRUE;
}
-static void unshrink_window (void)
+static void button_open_pressed()
{
- gtk_window_resize ((GtkWindow *) window, config.player_width,
- config.player_height);
- gtk_window_set_resizable ((GtkWindow *) window, TRUE);
+ audgui_run_filebrowser(TRUE);
}
-static void container_remove_reversed (GtkWidget * w, GtkWidget * c)
+static void button_add_pressed()
{
- gtk_container_remove ((GtkContainer *) c, w);
+ audgui_run_filebrowser(FALSE);
}
-void setup_panes (void)
+static gboolean title_change_cb (void)
{
- static GtkWidget * panes = NULL;
- GtkWidget * a, * b;
-
- save_window_size ();
-
- if (panes)
- {
- gtk_container_foreach ((GtkContainer *) panes, (GtkCallback)
- container_remove_reversed, panes);
- gtk_widget_destroy (panes);
- }
-
- gtk_container_foreach ((GtkContainer *) playlist_box, (GtkCallback)
- container_remove_reversed, playlist_box);
-
- if (config.vis_position == VIS_ON_LEFT || config.vis_position == VIS_ON_TOP)
- {
- a = (config.vis_position == VIS_IN_TABS) ? NULL : visualizer;
- b = config.playlist_visible ? (GtkWidget *) UI_PLAYLIST_NOTEBOOK : NULL;
- }
- else
- {
- a = config.playlist_visible ? (GtkWidget *) UI_PLAYLIST_NOTEBOOK : NULL;
- b = (config.vis_position == VIS_IN_TABS) ? NULL : visualizer;
- }
-
- if (! a)
- {
- a = b;
- b = NULL;
- }
-
- if (! a)
- {
- shrink_window ();
- return;
- }
-
- unshrink_window ();
-
- if (! b)
+ if (delayed_title_change_source)
{
- gtk_box_pack_start ((GtkBox *) playlist_box, a, TRUE, TRUE, 0);
- gtk_widget_show (a);
- return;
+ g_source_remove (delayed_title_change_source);
+ delayed_title_change_source = 0;
}
- panes = (config.vis_position == VIS_ON_LEFT || config.vis_position ==
- VIS_ON_RIGHT) ? gtk_hpaned_new () : gtk_vpaned_new ();
- gtk_box_pack_start ((GtkBox *) playlist_box, panes, TRUE, TRUE, 0);
- g_signal_connect ((GObject *) panes, "destroy", (GCallback)
- gtk_widget_destroyed, & panes);
-
- gtk_paned_add1 ((GtkPaned *) panes, a);
- gtk_paned_add2 ((GtkPaned *) panes, b);
- gtk_widget_show (panes);
- gtk_widget_show (a);
- gtk_widget_show (b);
-}
-
-static void ui_run_gtk_plugin(GtkWidget *parent, const gchar *name)
-{
- GtkWidget *label;
-
- g_return_if_fail(parent != NULL);
- g_return_if_fail(name != NULL);
-
- if (visualizer) /* only one at a time */
- return;
-
- visualizer = parent;
- g_object_ref ((GObject *) visualizer);
-
- if (config.vis_position == VIS_IN_TABS)
+ if (aud_drct_get_playing () && aud_get_bool ("gtkui", "show_song_titles"))
{
- label = gtk_label_new(name);
- gtk_notebook_append_page(UI_PLAYLIST_NOTEBOOK, parent, label);
+ if (aud_drct_get_ready ())
+ {
+ gchar * title = aud_drct_get_title ();
+ gchar * title_s = g_strdup_printf (_("%s - Audacious"), title);
+ gtk_window_set_title ((GtkWindow *) window, title_s);
+ g_free (title_s);
+ str_unref (title);
+ }
+ else
+ gtk_window_set_title ((GtkWindow *) window, _("Buffering ..."));
}
else
- setup_panes ();
-}
-
-static void ui_stop_gtk_plugin(GtkWidget *parent)
-{
- if (parent != visualizer) /* only one at a time */
- return;
-
- g_object_unref ((GObject *) visualizer);
- visualizer = NULL;
-
- if (config.vis_position == VIS_IN_TABS)
- gtk_notebook_remove_page(UI_PLAYLIST_NOTEBOOK, gtk_notebook_page_num
- (UI_PLAYLIST_NOTEBOOK, parent));
- else
- setup_panes ();
-}
+ gtk_window_set_title ((GtkWindow *) window, _("Audacious"));
-static gboolean window_delete()
-{
- aud_drct_quit ();
- return TRUE;
+ return FALSE;
}
-void show_preferences_window(gboolean show)
+static void ui_show (gboolean show)
{
- /* static GtkWidget * * prefswin = NULL; */
- static void * * prefswin = NULL;
+ aud_set_bool ("gtkui", "player_visible", show);
if (show)
{
- if ((prefswin != NULL) && (*prefswin != NULL))
+ if (aud_get_bool ("gtkui", "save_window_position") && ! gtk_widget_get_visible (window))
{
- gtk_window_present(GTK_WINDOW(*prefswin));
- return;
+ gint x = aud_get_int ("gtkui", "player_x");
+ gint y = aud_get_int ("gtkui", "player_y");
+ gtk_window_move ((GtkWindow *) window, x, y);
}
- prefswin = gtkui_interface.ops->create_prefs_window();
-
- gtk_widget_show_all(*prefswin);
+ gtk_window_present ((GtkWindow *) window);
}
- else
+ else if (gtk_widget_get_visible (window))
{
- if ((prefswin != NULL) && (*prefswin != NULL))
+ if (aud_get_bool ("gtkui", "save_window_position"))
{
- gtkui_interface.ops->destroy_prefs_window();
+ gint x, y;
+ gtk_window_get_position ((GtkWindow *) window, & x, & y);
+ aud_set_int ("gtkui", "player_x", x);
+ aud_set_int ("gtkui", "player_y", y);
}
- }
-}
-
-static void button_open_pressed()
-{
- audgui_run_filebrowser(TRUE);
-}
-
-static void button_add_pressed()
-{
- audgui_run_filebrowser(FALSE);
-}
-
-static void button_play_pressed()
-{
- action_playback_play ();
-}
-
-static void button_pause_pressed()
-{
- action_playback_pause ();
-}
-
-static void button_stop_pressed()
-{
- action_playback_stop ();
-}
-static void button_previous_pressed()
-{
- action_playback_previous ();
-}
-
-static void button_next_pressed()
-{
- action_playback_next ();
-}
-
-static void title_change_cb (void)
-{
- if (aud_drct_get_playing ())
- {
- gchar * title = aud_drct_get_title ();
- gchar * title_s = g_strdup_printf (_("%s - Audacious"), title);
- gtk_window_set_title ((GtkWindow *) window, title_s);
- g_free (title_s);
- g_free (title);
+ gtk_widget_hide (window);
}
- else
- gtk_window_set_title ((GtkWindow *) window, _("Audacious"));
-
- ui_playlist_notebook_add_tab_label_markup(aud_playlist_get_playing(), FALSE);
-}
-
-static void ui_playlist_created(void *data, void *unused)
-{
- ui_playlist_notebook_create_tab(GPOINTER_TO_INT(data));
}
-static void ui_playlist_destroyed(void *data, void *unused)
+static gboolean ui_is_shown (void)
{
- ui_playlist_notebook_destroy_tab(GPOINTER_TO_INT(data));
+ return aud_get_bool ("gtkui", "player_visible");
}
-static void ui_mainwin_show()
+static gboolean ui_is_focused (void)
{
- if (config.save_window_position)
- gtk_window_move(GTK_WINDOW(window), config.player_x, config.player_y);
-
- gtk_widget_show(window);
- gtk_window_present(GTK_WINDOW(window));
+/* gtk_window_is_active() is too unreliable, unfortunately. --jlindgren */
+#if 0
+ return gtk_window_is_active ((GtkWindow *) window);
+#else
+ return ui_is_shown ();
+#endif
}
-static void ui_mainwin_hide()
+static void ui_show_error (const gchar * text)
{
- if (config.save_window_position)
- gtk_window_get_position(GTK_WINDOW(window), &config.player_x, &config.player_y);
-
- gtk_widget_hide(window);
+ audgui_simple_message (& error_win, GTK_MESSAGE_ERROR, _("Error"), _(text));
}
-static void ui_mainwin_toggle_visibility(gpointer hook_data, gpointer user_data)
+static void set_time_label (gint time, gint len)
{
- gboolean show = GPOINTER_TO_INT(hook_data);
+ gchar s[128];
+ snprintf (s, sizeof s, "<b>");
- config.player_visible = show;
- aud_cfg->player_visible = show;
+ time /= 1000;
- if (show)
- {
- ui_mainwin_show();
- }
+ if (time < 3600)
+ snprintf (s + strlen (s), sizeof s - strlen (s), aud_get_bool (NULL,
+ "leading_zero") ? "%02d:%02d" : "%d:%02d", time / 60, time % 60);
else
+ snprintf (s + strlen (s), sizeof s - strlen (s), "%d:%02d:%02d", time /
+ 3600, (time / 60) % 60, time % 60);
+
+ if (len)
{
- ui_mainwin_hide();
+ len /= 1000;
+
+ if (len < 3600)
+ snprintf (s + strlen (s), sizeof s - strlen (s), aud_get_bool (NULL,
+ "leading_zero") ? " / %02d:%02d" : " / %d:%02d", len / 60, len % 60);
+ else
+ snprintf (s + strlen (s), sizeof s - strlen (s), " / %d:%02d:%02d",
+ len / 3600, (len / 60) % 60, len % 60);
}
-}
-
-static void ui_toggle_visibility(void)
-{
- ui_mainwin_toggle_visibility(GINT_TO_POINTER(!config.player_visible), NULL);
-}
-static void ui_show_error (const gchar * text)
-{
- audgui_simple_message (& error_win, GTK_MESSAGE_ERROR, _("Error"), _(text));
+ snprintf (s + strlen (s), sizeof s - strlen (s), "</b>");
+ gtk_label_set_markup ((GtkLabel *) label_time, s);
}
-static void set_time_label (gint time)
+static void set_slider (gint time)
{
- gchar text[128];
- gint length = aud_drct_get_playing () ? aud_drct_get_length () : 0;
-
- time /= 1000;
- length /= 1000;
-
- g_snprintf(text, sizeof(text) / sizeof(gchar), "<tt><b>%.2d:%.2d/%.2d:%.2d</b></tt>", time / 60, time % 60, length / 60, length % 60);
- gtk_label_set_markup(GTK_LABEL(label_time), text);
+ gtk_range_set_value ((GtkRange *) slider, time);
}
static gboolean time_counter_cb (void)
@@ -372,41 +256,31 @@ static gboolean time_counter_cb (void)
if (slider_is_moving)
return TRUE;
- gint time = aud_drct_get_playing () ? aud_drct_get_time () : 0;
- gint len = aud_drct_get_playing () ? aud_drct_get_length () : 0;
-
- if (!g_signal_handler_is_connected(slider, slider_change_handler_id))
- return TRUE;
+ gint time = aud_drct_get_time ();
+ gint length = aud_drct_get_length ();
- if (len)
- {
- g_signal_handler_block(slider, slider_change_handler_id);
- gtk_range_set_value(GTK_RANGE(slider), (gdouble) time);
- g_signal_handler_unblock(slider, slider_change_handler_id);
- }
+ if (length > 0)
+ set_slider (time);
- set_time_label (time);
+ set_time_label (time, length);
return TRUE;
}
-static gboolean ui_slider_value_changed_cb(GtkRange * range, gpointer user_data)
-{
- aud_drct_seek (gtk_range_get_value (range));
- slider_is_moving = FALSE;
- return TRUE;
-}
-
static gboolean ui_slider_change_value_cb(GtkRange * range, GtkScrollType scroll)
{
- set_time_label (gtk_range_get_value (range));
+ gint value = gtk_range_get_value (range);
+ set_time_label (value, aud_drct_get_length ());
+
+ if (!slider_is_moving)
+ aud_drct_seek (gtk_range_get_value (range));
+
return FALSE;
}
static gboolean ui_slider_button_press_cb(GtkWidget * widget, GdkEventButton * event, gpointer user_data)
{
slider_is_moving = TRUE;
- slider_position = gtk_range_get_value(GTK_RANGE(widget));
/* HACK: clicking with the left mouse button moves the slider
to the location of the click. */
@@ -422,13 +296,11 @@ static gboolean ui_slider_button_release_cb(GtkWidget * widget, GdkEventButton *
if (event->button == 1)
event->button = 2;
- if (slider_position == (gint) gtk_range_get_value(GTK_RANGE(widget)))
- slider_is_moving = FALSE;
+ slider_is_moving = FALSE;
return FALSE;
}
-#ifdef HAVE_VOLUME
static gboolean ui_volume_value_changed_cb(GtkButton * button, gdouble volume, gpointer user_data)
{
aud_drct_set_volume((gint) volume, (gint) volume);
@@ -449,18 +321,12 @@ static void ui_volume_released_cb(GtkButton *button, gpointer user_data)
static gboolean ui_volume_slider_update(gpointer data)
{
gint volume;
- static gint last_volume = -1;
if (volume_slider_is_moving || data == NULL)
return TRUE;
aud_drct_get_volume_main(&volume);
- if (last_volume == volume)
- return TRUE;
-
- last_volume = volume;
-
if (volume == (gint) gtk_scale_button_get_value(GTK_SCALE_BUTTON(data)))
return TRUE;
@@ -471,45 +337,60 @@ static gboolean ui_volume_slider_update(gpointer data)
return TRUE;
}
-void set_volume_diff(gint diff)
-{
- gint vol = gtk_scale_button_get_value(GTK_SCALE_BUTTON(volume));
- gtk_scale_button_set_value(GTK_SCALE_BUTTON(volume), CLAMP(vol + diff, 0, 100));
-}
-#endif
-
static void set_slider_length (gint length)
{
- if (g_signal_handler_is_connected (slider, slider_change_handler_id))
- g_signal_handler_block (slider, slider_change_handler_id);
-
if (length > 0)
{
gtk_range_set_range ((GtkRange *) slider, 0, length);
- gtk_widget_set_sensitive (slider, TRUE);
+ gtk_widget_show (slider);
}
else
+ gtk_widget_hide (slider);
+}
+
+static void pause_cb (void)
+{
+ if (aud_drct_get_paused ())
{
- gtk_range_set_value(GTK_RANGE(slider), 0.0);
- gtk_widget_set_sensitive (slider, FALSE);
+ gtk_widget_show (button_play);
+ gtk_widget_hide (button_pause);
}
+ else
+ {
+ gtk_widget_hide (button_play);
+ gtk_widget_show (button_pause);
+ }
+}
- if (g_signal_handler_is_connected (slider, slider_change_handler_id))
- g_signal_handler_unblock (slider, slider_change_handler_id);
+static void ui_playback_begin (void)
+{
+ pause_cb ();
+ gtk_widget_set_sensitive (button_stop, TRUE);
+
+ if (delayed_title_change_source)
+ g_source_remove (delayed_title_change_source);
+
+ /* If "title change" is not called by 1/4 second after starting playback,
+ * show "Buffering ..." as the window title. */
+ delayed_title_change_source = g_timeout_add (250, (GSourceFunc)
+ title_change_cb, NULL);
}
-static void ui_playback_begin(gpointer hook_data, gpointer user_data)
+static void ui_playback_ready (void)
{
title_change_cb ();
set_slider_length (aud_drct_get_length ());
time_counter_cb ();
/* update time counter 4 times a second */
- update_song_timeout_source = g_timeout_add (250, (GSourceFunc)
- time_counter_cb, NULL);
+ if (! update_song_timeout_source)
+ update_song_timeout_source = g_timeout_add (250, (GSourceFunc)
+ time_counter_cb, NULL);
+
+ gtk_widget_show (label_time);
}
-static void ui_playback_stop(gpointer hook_data, gpointer user_data)
+static void ui_playback_stop (void)
{
if (update_song_timeout_source)
{
@@ -517,12 +398,34 @@ static void ui_playback_stop(gpointer hook_data, gpointer user_data)
update_song_timeout_source = 0;
}
- title_change_cb ();
- set_slider_length (0);
- time_counter_cb ();
+ if (delayed_title_change_source)
+ g_source_remove (delayed_title_change_source);
+
+ /* Don't update the window title immediately; we may be about to start
+ * another song. */
+ delayed_title_change_source = g_idle_add ((GSourceFunc) title_change_cb,
+ NULL);
+
+ gtk_widget_show (button_play);
+ gtk_widget_hide (button_pause);
+ gtk_widget_set_sensitive (button_stop, FALSE);
+ gtk_widget_hide (slider);
+ gtk_widget_hide (label_time);
}
-static GtkWidget *gtk_toolbar_button_add(GtkWidget * toolbar, void (*callback) (), const gchar * stock_id)
+static gboolean rclick_cb (GtkWidget * widget, GdkEventButton * event)
+{
+ if (event->button != 3)
+ return FALSE;
+
+ if (event->type == GDK_BUTTON_PRESS && menu_main)
+ gtk_menu_popup ((GtkMenu *) menu_main, NULL, NULL, NULL, NULL,
+ event->button, event->time);
+
+ return TRUE;
+}
+
+static GtkWidget *toolbar_button_add(GtkWidget * toolbar, void (*callback) (), const gchar * stock_id)
{
GtkWidget *icon;
GtkWidget *button = gtk_button_new();
@@ -535,204 +438,283 @@ static GtkWidget *gtk_toolbar_button_add(GtkWidget * toolbar, void (*callback) (
gtk_box_pack_start(GTK_BOX(toolbar), button, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(callback), NULL);
+ g_signal_connect (button, "button-press-event", (GCallback) rclick_cb, NULL);
+
+ return button;
+}
+
+static GtkWidget * toggle_button_new (const gchar * icon, const gchar * alt,
+ void (* toggled) (GtkToggleButton * button, void * user), void * user)
+{
+ GtkWidget * button = gtk_toggle_button_new ();
+ gtk_widget_set_can_focus (button, FALSE);
+ gtk_button_set_relief ((GtkButton *) button, GTK_RELIEF_NONE);
+
+ if (! alt)
+ gtk_container_add ((GtkContainer *) button, gtk_image_new_from_stock
+ (icon, GTK_ICON_SIZE_BUTTON));
+ else if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (), icon))
+ gtk_container_add ((GtkContainer *) button, gtk_image_new_from_icon_name
+ (icon, GTK_ICON_SIZE_BUTTON));
+ else
+ {
+ GtkWidget * label = gtk_label_new (NULL);
+ gchar * markup = g_markup_printf_escaped ("<small>%s</small>", alt);
+ gtk_label_set_markup ((GtkLabel *) label, markup);
+ g_free (markup);
+ gtk_container_add ((GtkContainer *) button, label);
+ }
+ g_signal_connect (button, "toggled", (GCallback) toggled, user);
return button;
}
-static GtkWidget *gtk_markup_label_new(const gchar * str)
+static GtkWidget *markup_label_new(const gchar * str)
{
GtkWidget *label = gtk_label_new(str);
g_object_set(G_OBJECT(label), "use-markup", TRUE, NULL);
return label;
}
-static gboolean ui_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+static void window_mapped_cb (GtkWidget * widget, void * unused)
{
- if (ui_playlist_notebook_tab_title_editing != NULL &&
- event->keyval != GDK_KP_Enter && event->keyval != GDK_Escape)
- {
- GtkWidget *entry = g_object_get_data(G_OBJECT(ui_playlist_notebook_tab_title_editing), "entry");
- gtk_widget_event(entry, (GdkEvent*) event);
- return TRUE;
- }
+ gtk_widget_grab_focus (playlist_get_treeview (aud_playlist_get_active ()));
+}
+static gboolean window_keypress_cb (GtkWidget * widget, GdkEventKey * event, void * unused)
+{
switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))
{
- case 0:
- switch (event->keyval)
- {
- case GDK_F2:
- ui_playlist_notebook_edit_tab_title(NULL);
- break;
-
-#ifdef HAVE_VOLUME
- case GDK_minus: //FIXME
- set_volume_diff(-5);
- break;
-
- case GDK_plus: //FIXME
- set_volume_diff(5);
- break;
-#endif
-
- case GDK_Left:
- case GDK_KP_Left:
- case GDK_KP_7:
- if (aud_drct_get_playing ())
- aud_drct_seek (aud_drct_get_time () - 5000);
- break;
-
- case GDK_Right:
- case GDK_KP_Right:
- case GDK_KP_9:
- if (aud_drct_get_playing ())
- aud_drct_seek (aud_drct_get_time () + 5000);
- break;
-
- case GDK_KP_4:
- aud_drct_pl_prev();
- break;
-
- case GDK_KP_6:
- aud_drct_pl_next();
- break;
-
- case GDK_KP_Insert:
- action_jump_to_file();
- break;
-
- case GDK_space:
- if (aud_drct_get_playing())
- aud_drct_pause();
- else
- aud_drct_play();
- break;
-
- case GDK_Escape:
- ; /* bleah, label must come before statement */
- gint list = aud_playlist_get_active ();
- playlist_scroll_to_row (playlist_get_treeview (list),
- aud_playlist_get_position (list));
-
- if (ui_playlist_notebook_tab_title_editing != NULL)
- return FALSE;
-
- break;
-
- case GDK_Tab:
- action_playlist_next();
- break;
-
- default:
- return FALSE;
- }
+ case GDK_CONTROL_MASK:
+ switch (event->keyval)
+ {
+ case GDK_ISO_Left_Tab:
+ case GDK_Tab:
+ aud_playlist_set_active ((aud_playlist_get_active () + 1) %
+ aud_playlist_count ());
break;
- case GDK_SHIFT_MASK:
+ default:
+ return FALSE;
+ }
+ break;
+ case (GDK_CONTROL_MASK | GDK_SHIFT_MASK):
+ switch (event->keyval)
{
- switch (event->keyval)
- {
- case GDK_ISO_Left_Tab:
- case GDK_Tab:
- action_playlist_prev();
- break;
-
- default:
- return FALSE;
- }
+ case GDK_ISO_Left_Tab:
+ case GDK_Tab:
+ aud_playlist_set_active (aud_playlist_get_active () ?
+ aud_playlist_get_active () - 1 : aud_playlist_count () - 1);
break;
+ default:
+ return FALSE;
}
- default:
+ break;
+ case GDK_MOD1_MASK:
+ switch (event->keyval)
+ {
+ case GDK_Left:
+ if (aud_drct_get_playing ())
+ aud_drct_seek (aud_drct_get_time () - 5000);
+ break;
+ case GDK_Right:
+ if (aud_drct_get_playing ())
+ aud_drct_seek (aud_drct_get_time () + 5000);
+ break;
+ default:
return FALSE;
+ }
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean playlist_keypress_cb (GtkWidget * widget, GdkEventKey * event, void * unused)
+{
+ switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))
+ {
+ case 0:
+ switch (event->keyval)
+ {
+ case GDK_Escape:
+ ui_playlist_notebook_position (GINT_TO_POINTER (aud_playlist_get_active ()), NULL);
+ return TRUE;
+ case GDK_Delete:
+ playlist_delete_selected ();
+ return TRUE;
+ case GDK_Menu:
+ popup_menu_rclick (0, event->time);
+ return TRUE;
+ }
+
+ break;
+ case GDK_CONTROL_MASK:
+ switch (event->keyval)
+ {
+ case 'x':
+ playlist_cut ();
+ return TRUE;
+ case 'c':
+ playlist_copy ();
+ return TRUE;
+ case 'v':
+ playlist_paste ();
+ return TRUE;
+ case 'a':
+ aud_playlist_select_all (aud_playlist_get_active (), TRUE);
+ return TRUE;
+ }
+
+ break;
}
+ return FALSE;
+}
+
+static void update_toggles (void * data, void * user)
+{
+ gtk_toggle_button_set_active ((GtkToggleButton *) button_repeat, aud_get_bool (NULL, "repeat"));
+ gtk_toggle_button_set_active ((GtkToggleButton *) button_shuffle, aud_get_bool (NULL, "shuffle"));
+}
+
+static void toggle_repeat (GtkToggleButton * button, void * unused)
+{
+ aud_set_bool (NULL, "repeat", gtk_toggle_button_get_active (button));
+}
+
+static void toggle_shuffle (GtkToggleButton * button, void * unused)
+{
+ aud_set_bool (NULL, "shuffle", gtk_toggle_button_get_active (button));
+}
+
+static void toggle_search_tool (GtkToggleButton * button, void * unused)
+{
+ aud_plugin_enable (search_tool, gtk_toggle_button_get_active (button));
+}
+
+static gboolean search_tool_toggled (PluginHandle * plugin, void * unused)
+{
+ gtk_toggle_button_set_active ((GtkToggleButton *) search_button,
+ aud_plugin_get_enabled (plugin));
return TRUE;
}
-static void stop_after_song_toggled (void * data, void * user)
+static void config_save (void)
{
- check_set (toggleaction_group_others, "stop after current song",
- aud_cfg->stopaftersong);
+ save_window_size ();
+ layout_save ();
+ pw_col_save ();
}
static void ui_hooks_associate(void)
{
hook_associate ("title change", (HookFunction) title_change_cb, NULL);
hook_associate ("playback seek", (HookFunction) time_counter_cb, NULL);
- hook_associate("playback begin", ui_playback_begin, NULL);
- hook_associate("playback stop", ui_playback_stop, NULL);
- hook_associate("playlist insert", ui_playlist_created, NULL);
- hook_associate("playlist delete", ui_playlist_destroyed, NULL);
- hook_associate("mainwin show", ui_mainwin_toggle_visibility, NULL);
+ hook_associate ("playback begin", (HookFunction) ui_playback_begin, NULL);
+ hook_associate ("playback ready", (HookFunction) ui_playback_ready, NULL);
+ hook_associate ("playback pause", (HookFunction) pause_cb, NULL);
+ hook_associate ("playback unpause", (HookFunction) pause_cb, NULL);
+ hook_associate ("playback stop", (HookFunction) ui_playback_stop, NULL);
hook_associate("playlist update", ui_playlist_notebook_update, NULL);
- hook_associate("toggle stop after song", stop_after_song_toggled, NULL);
+ hook_associate ("playlist activate", ui_playlist_notebook_activate, NULL);
+ hook_associate ("playlist set playing", ui_playlist_notebook_set_playing, NULL);
+ hook_associate ("playlist position", ui_playlist_notebook_position, NULL);
+ hook_associate ("set shuffle", update_toggles, NULL);
+ hook_associate ("set repeat", update_toggles, NULL);
+ hook_associate ("config save", (HookFunction) config_save, NULL);
}
static void ui_hooks_disassociate(void)
{
hook_dissociate ("title change", (HookFunction) title_change_cb);
hook_dissociate ("playback seek", (HookFunction) time_counter_cb);
- hook_dissociate("playback begin", ui_playback_begin);
- hook_dissociate("playback stop", ui_playback_stop);
- hook_dissociate("playlist insert", ui_playlist_created);
- hook_dissociate("playlist delete", ui_playlist_destroyed);
- hook_dissociate("mainwin show", ui_mainwin_toggle_visibility);
+ hook_dissociate ("playback begin", (HookFunction) ui_playback_begin);
+ hook_dissociate ("playback ready", (HookFunction) ui_playback_ready);
+ hook_dissociate ("playback pause", (HookFunction) pause_cb);
+ hook_dissociate ("playback unpause", (HookFunction) pause_cb);
+ hook_dissociate ("playback stop", (HookFunction) ui_playback_stop);
hook_dissociate("playlist update", ui_playlist_notebook_update);
- hook_dissociate("toggle stop after song", stop_after_song_toggled);
+ hook_dissociate ("playlist activate", ui_playlist_notebook_activate);
+ hook_dissociate ("playlist set playing", ui_playlist_notebook_set_playing);
+ hook_dissociate ("playlist position", ui_playlist_notebook_position);
+ hook_dissociate ("set shuffle", update_toggles);
+ hook_dissociate ("set repeat", update_toggles);
+ hook_dissociate ("config save", (HookFunction) config_save);
}
-static gboolean _ui_initialize(InterfaceCbs * cbs)
+static gboolean init (void)
{
+ search_tool = aud_plugin_lookup_basename ("search-tool");
+
GtkWidget *tophbox; /* box to contain toolbar and shbox */
GtkWidget *buttonbox; /* contains buttons like "open", "next" */
GtkWidget *shbox; /* box for volume control + slider + time combo --nenolod */
- GtkWidget *button_open, *button_add, *button_play, *button_pause, *button_stop, *button_previous, *button_next;
GtkWidget *evbox;
- GtkAccelGroup *accel;
-
- gtkui_cfg_load();
- multi_column_view = config.multi_column_view;
+ aud_config_set_defaults ("gtkui", gtkui_defaults);
audgui_set_default_icon();
audgui_register_stock_icons();
- ui_manager_init();
- ui_manager_create_menus();
+ pw_col_init ();
+
+ gint x = aud_get_int ("gtkui", "player_x");
+ gint y = aud_get_int ("gtkui", "player_y");
+ gint w = aud_get_int ("gtkui", "player_width");
+ gint h = aud_get_int ("gtkui", "player_height");
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size(GTK_WINDOW(window), MAINWIN_DEFAULT_WIDTH, MAINWIN_DEFAULT_HEIGHT);
+ gtk_window_set_default_size ((GtkWindow *) window, w, h);
+ gtk_window_set_keep_above ((GtkWindow *) window, aud_get_bool ("gtkui", "always_on_top"));
- if (config.save_window_position && config.player_width && config.player_height)
- gtk_window_resize(GTK_WINDOW(window), config.player_width, config.player_height);
-
- if (config.save_window_position && config.player_x != -1)
- gtk_window_move(GTK_WINDOW(window), config.player_x, config.player_y);
- else
- gtk_window_move(GTK_WINDOW(window), MAINWIN_DEFAULT_POS_X, MAINWIN_DEFAULT_POS_Y);
+ if (aud_get_bool ("gtkui", "save_window_position") && (x != -1 || y != -1))
+ gtk_window_move ((GtkWindow *) window, x, y);
g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(window_delete), NULL);
- vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(window), vbox);
+ accel = gtk_accel_group_new ();
+ gtk_window_add_accel_group ((GtkWindow *) window, accel);
- menu = ui_manager_get_menus();
- gtk_box_pack_start(GTK_BOX(vbox), menu, FALSE, TRUE, 0);
+ vbox_outer = gtk_vbox_new (FALSE, 0);
+ gtk_container_add ((GtkContainer *) window, vbox_outer);
- accel = ui_manager_get_accel_group();
- gtk_window_add_accel_group(GTK_WINDOW(window), accel);
+ menu_box = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start ((GtkBox *) vbox_outer, menu_box, FALSE, FALSE, 0);
+ show_menu (aud_get_bool ("gtkui", "menu_visible"));
tophbox = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), tophbox, FALSE, TRUE, 0);
+ gtk_box_pack_start ((GtkBox *) vbox_outer, tophbox, FALSE, FALSE, 0);
buttonbox = gtk_hbox_new(FALSE, 0);
- button_open = gtk_toolbar_button_add(buttonbox, button_open_pressed, GTK_STOCK_OPEN);
- button_add = gtk_toolbar_button_add(buttonbox, button_add_pressed, GTK_STOCK_ADD);
- button_play = gtk_toolbar_button_add(buttonbox, button_play_pressed, GTK_STOCK_MEDIA_PLAY);
- button_pause = gtk_toolbar_button_add(buttonbox, button_pause_pressed, GTK_STOCK_MEDIA_PAUSE);
- button_stop = gtk_toolbar_button_add(buttonbox, button_stop_pressed, GTK_STOCK_MEDIA_STOP);
- button_previous = gtk_toolbar_button_add(buttonbox, button_previous_pressed, GTK_STOCK_MEDIA_PREVIOUS);
- button_next = gtk_toolbar_button_add(buttonbox, button_next_pressed, GTK_STOCK_MEDIA_NEXT);
+
+ if (search_tool)
+ {
+ search_button = toggle_button_new (GTK_STOCK_FIND, NULL, toggle_search_tool, NULL);
+ gtk_box_pack_start ((GtkBox *) tophbox, search_button, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active ((GtkToggleButton *) search_button,
+ aud_plugin_get_enabled (search_tool));
+ aud_plugin_add_watch (search_tool, search_tool_toggled, NULL);
+ }
+
+ toolbar_button_add(buttonbox, button_open_pressed, GTK_STOCK_OPEN);
+ toolbar_button_add(buttonbox, button_add_pressed, GTK_STOCK_ADD);
+ button_play = toolbar_button_add (buttonbox, aud_drct_play, GTK_STOCK_MEDIA_PLAY);
+ button_pause = toolbar_button_add (buttonbox, aud_drct_pause, GTK_STOCK_MEDIA_PAUSE);
+ button_stop = toolbar_button_add (buttonbox, aud_drct_stop, GTK_STOCK_MEDIA_STOP);
+ toolbar_button_add (buttonbox, aud_drct_pl_prev, GTK_STOCK_MEDIA_PREVIOUS);
+ toolbar_button_add (buttonbox, aud_drct_pl_next, GTK_STOCK_MEDIA_NEXT);
+
+ /* Workaround: Show the play and pause buttons and then hide them again in
+ * order to coax GTK into loading icons for them. -jlindgren */
+ gtk_widget_show_all (button_play);
+ gtk_widget_show_all (button_pause);
+ gtk_widget_hide (button_play);
+ gtk_widget_hide (button_pause);
+
+ gtk_widget_set_no_show_all (button_play, TRUE);
+ gtk_widget_set_no_show_all (button_pause, TRUE);
gtk_box_pack_start(GTK_BOX(tophbox), buttonbox, FALSE, FALSE, 0);
@@ -746,54 +728,56 @@ static gboolean _ui_initialize(InterfaceCbs * cbs)
slider = gtk_hscale_new(NULL);
gtk_scale_set_draw_value(GTK_SCALE(slider), FALSE);
- /* TODO: make this configureable */
- gtk_range_set_update_policy(GTK_RANGE(slider), GTK_UPDATE_DISCONTINUOUS);
gtk_widget_set_size_request(slider, 120, -1);
gtk_widget_set_can_focus(slider, FALSE);
- gtk_box_pack_start(GTK_BOX(shbox), slider, TRUE, TRUE, 0);
+ gtk_box_pack_start ((GtkBox *) shbox, slider, TRUE, TRUE, 6);
+ gtk_widget_set_no_show_all (slider, TRUE);
- label_time = gtk_markup_label_new(NULL);
- gtk_box_pack_start(GTK_BOX(shbox), label_time, FALSE, FALSE, 5);
+ label_time = markup_label_new(NULL);
+ gtk_widget_set_no_show_all (label_time, TRUE);
+
+ gtk_box_pack_end ((GtkBox *) shbox, label_time, FALSE, FALSE, 6);
-#ifdef HAVE_VOLUME
volume = gtk_volume_button_new();
gtk_button_set_relief(GTK_BUTTON(volume), GTK_RELIEF_NONE);
gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(volume), GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 5, 0)));
gtk_widget_set_can_focus(volume, FALSE);
- /* Set the default volume to the balance average.
- (I'll add balance control later) -Ryan */
+
gint lvol = 0, rvol = 0;
aud_drct_get_volume(&lvol, &rvol);
gtk_scale_button_set_value(GTK_SCALE_BUTTON(volume), (lvol + rvol) / 2);
- gtk_box_pack_start(GTK_BOX(shbox), volume, FALSE, FALSE, 0);
-#endif
- playlist_box = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), playlist_box, TRUE, TRUE, 0);
+ gtk_box_pack_end ((GtkBox *) tophbox, volume, FALSE, FALSE, 0);
+
+ button_shuffle = toggle_button_new ("media-playlist-shuffle", "SHUF",
+ toggle_shuffle, NULL);
+ gtk_box_pack_end ((GtkBox *) tophbox, button_shuffle, FALSE, FALSE, 0);
+ button_repeat = toggle_button_new ("media-playlist-repeat", "REP",
+ toggle_repeat, NULL);
+ gtk_box_pack_end ((GtkBox *) tophbox, button_repeat, FALSE, FALSE, 0);
+
+ layout_load ();
+
+ GtkWidget * layout = layout_new ();
+ gtk_box_pack_start ((GtkBox *) vbox_outer, layout, TRUE, TRUE, 0);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ layout_add_center (vbox);
/* Create playlist notebook */
ui_playlist_notebook_new ();
- g_object_ref (G_OBJECT(UI_PLAYLIST_NOTEBOOK));
+ gtk_box_pack_start ((GtkBox *) vbox, (GtkWidget *) UI_PLAYLIST_NOTEBOOK, TRUE, TRUE, 0);
- if (config.statusbar_visible)
+ if (aud_get_bool ("gtkui", "infoarea_visible"))
{
- AUDDBG("statusbar setup\n");
- statusbar = ui_statusbar_new();
- gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, FALSE, 3);
+ infoarea = ui_infoarea_new ();
+ gtk_box_pack_end (GTK_BOX(vbox), infoarea, FALSE, FALSE, 0);
}
- if (config.vis_position == VIS_IN_TABS)
+ if (aud_get_bool ("gtkui", "statusbar_visible"))
{
- AUDDBG("vis in tabs\n");
- gtk_box_pack_end(GTK_BOX(playlist_box), (GtkWidget *)
- UI_PLAYLIST_NOTEBOOK, TRUE, TRUE, 0);
- }
-
- if (config.infoarea_visible)
- {
- AUDDBG ("infoarea setup\n");
- infoarea = ui_infoarea_new ();
- gtk_box_pack_end (GTK_BOX(vbox), infoarea, FALSE, FALSE, 0);
+ statusbar = ui_statusbar_new ();
+ gtk_box_pack_end ((GtkBox *) vbox_outer, statusbar, FALSE, FALSE, 0);
}
AUDDBG("hooks associate\n");
@@ -802,93 +786,157 @@ static gboolean _ui_initialize(InterfaceCbs * cbs)
AUDDBG("playlist associate\n");
ui_playlist_notebook_populate();
- slider_change_handler_id = g_signal_connect(slider, "value-changed", G_CALLBACK(ui_slider_value_changed_cb), NULL);
-
g_signal_connect(slider, "change-value", G_CALLBACK(ui_slider_change_value_cb), NULL);
g_signal_connect(slider, "button-press-event", G_CALLBACK(ui_slider_button_press_cb), NULL);
g_signal_connect(slider, "button-release-event", G_CALLBACK(ui_slider_button_release_cb), NULL);
-#ifdef HAVE_VOLUME
volume_change_handler_id = g_signal_connect(volume, "value-changed", G_CALLBACK(ui_volume_value_changed_cb), NULL);
g_signal_connect(volume, "pressed", G_CALLBACK(ui_volume_pressed_cb), NULL);
g_signal_connect(volume, "released", G_CALLBACK(ui_volume_released_cb), NULL);
update_volume_timeout_source = g_timeout_add(250, (GSourceFunc) ui_volume_slider_update, volume);
-#endif
- g_signal_connect(window, "key-press-event", G_CALLBACK(ui_key_press_cb), NULL);
+ g_signal_connect (window, "map-event", (GCallback) window_mapped_cb, NULL);
+ g_signal_connect (window, "key-press-event", (GCallback) window_keypress_cb, NULL);
+ g_signal_connect (UI_PLAYLIST_NOTEBOOK, "key-press-event", (GCallback) playlist_keypress_cb, NULL);
- gtk_widget_show_all(vbox);
+ if (aud_drct_get_playing ())
+ {
+ ui_playback_begin ();
+ if (aud_drct_get_ready ())
+ ui_playback_ready ();
+ }
+ else
+ ui_playback_stop ();
+
+ title_change_cb ();
- if (!config.menu_visible)
- gtk_widget_hide(menu);
+ gtk_widget_show_all (vbox_outer);
- setup_panes ();
+ if (aud_get_bool ("gtkui", "player_visible"))
+ ui_show (TRUE);
- if (config.player_visible)
- ui_mainwin_toggle_visibility(GINT_TO_POINTER(config.player_visible), NULL);
+ update_toggles (NULL, NULL);
- if (aud_drct_get_playing())
- ui_playback_begin(NULL, NULL);
- else
- ui_playback_stop (NULL, NULL);
-
- AUDDBG("check menu settings\n");
- check_set(toggleaction_group_others, "view menu", config.menu_visible);
- check_set(toggleaction_group_others, "view playlists", config.playlist_visible);
- check_set(toggleaction_group_others, "view infoarea", config.infoarea_visible);
- check_set(toggleaction_group_others, "view statusbar", config.statusbar_visible);
- check_set(toggleaction_group_others, "playback repeat", aud_cfg->repeat);
- check_set(toggleaction_group_others, "playback shuffle", aud_cfg->shuffle);
- check_set(toggleaction_group_others, "playback no playlist advance", aud_cfg->no_playlist_advance);
- check_set(toggleaction_group_others, "stop after current song", aud_cfg->stopaftersong);
-
- AUDDBG("callback setup\n");
-
- /* Register interface callbacks */
- cbs->show_prefs_window = show_preferences_window;
- cbs->run_filebrowser = audgui_run_filebrowser;
- cbs->hide_filebrowser = audgui_hide_filebrowser;
- cbs->toggle_visibility = ui_toggle_visibility;
- cbs->show_error = ui_show_error;
- cbs->show_jump_to_track = audgui_jump_to_track;
- cbs->hide_jump_to_track = audgui_jump_to_track_hide;
- cbs->show_about_window = audgui_show_about_window;
- cbs->hide_about_window = audgui_hide_about_window;
- cbs->run_gtk_plugin = (void *) ui_run_gtk_plugin;
- cbs->stop_gtk_plugin = (void *) ui_stop_gtk_plugin;
+ menu_rclick = make_menu_rclick (accel);
+ menu_tab = make_menu_tab (accel);
return TRUE;
}
-static gboolean _ui_finalize(void)
+static void cleanup (void)
{
if (error_win)
gtk_widget_destroy (error_win);
+ if (menu_main)
+ gtk_widget_destroy (menu_main);
+
+ gtk_widget_destroy (menu_rclick);
+ gtk_widget_destroy (menu_tab);
+
if (update_song_timeout_source)
{
g_source_remove(update_song_timeout_source);
update_song_timeout_source = 0;
}
-#ifdef HAVE_VOLUME
if (update_volume_timeout_source)
{
g_source_remove(update_volume_timeout_source);
update_volume_timeout_source = 0;
}
-#endif
- save_window_size ();
- gtkui_cfg_save();
- gtkui_cfg_free();
+ if (delayed_title_change_source)
+ {
+ g_source_remove (delayed_title_change_source);
+ delayed_title_change_source = 0;
+ }
+
ui_hooks_disassociate();
- /* ui_manager_destroy() must be called to detach plugin services menus
- * before any widget are destroyed. -jlindgren */
- ui_manager_destroy ();
+ if (search_tool)
+ aud_plugin_remove_watch (search_tool, search_tool_toggled, NULL);
- g_object_unref ((GObject *) UI_PLAYLIST_NOTEBOOK);
+ pw_col_cleanup ();
gtk_widget_destroy (window);
- return TRUE;
+ layout_cleanup ();
+}
+
+void show_menu (gboolean show)
+{
+ aud_set_bool ("gtkui", "menu_visible", show);
+
+ if (show)
+ {
+ if (menu_main)
+ gtk_widget_destroy (menu_main);
+
+ if (! menu)
+ {
+ menu = make_menu_bar (accel);
+ g_signal_connect (menu, "destroy", (GCallback) gtk_widget_destroyed,
+ & menu);
+ gtk_widget_show (menu);
+ gtk_container_add ((GtkContainer *) menu_box, menu);
+ }
+ }
+ else
+ {
+ if (menu)
+ gtk_widget_destroy (menu);
+
+ if (! menu_main)
+ {
+ menu_main = make_menu_main (accel);
+ g_signal_connect (menu_main, "destroy", (GCallback)
+ gtk_widget_destroyed, & menu_main);
+ }
+ }
+}
+
+void show_infoarea (gboolean show)
+{
+ aud_set_bool ("gtkui", "infoarea_visible", show);
+
+ if (show && ! infoarea)
+ {
+ infoarea = ui_infoarea_new ();
+ gtk_box_pack_end ((GtkBox *) vbox, infoarea, FALSE, FALSE, 0);
+ gtk_widget_show_all (infoarea);
+ }
+
+ if (! show && infoarea)
+ {
+ gtk_widget_destroy (infoarea);
+ infoarea = NULL;
+ }
+}
+
+void show_statusbar (gboolean show)
+{
+ aud_set_bool ("gtkui", "statusbar_visible", show);
+
+ if (show && ! statusbar)
+ {
+ statusbar = ui_statusbar_new ();
+ gtk_box_pack_end ((GtkBox *) vbox_outer, statusbar, FALSE, FALSE, 0);
+ gtk_widget_show_all (statusbar);
+ }
+
+ if (! show && statusbar)
+ {
+ gtk_widget_destroy (statusbar);
+ statusbar = NULL;
+ }
+}
+
+void popup_menu_rclick (guint button, guint32 time)
+{
+ gtk_menu_popup ((GtkMenu *) menu_rclick, NULL, NULL, NULL, NULL, button,
+ time);
+}
+
+void popup_menu_tab (guint button, guint32 time)
+{
+ gtk_menu_popup ((GtkMenu *) menu_tab, NULL, NULL, NULL, NULL, button, time);
}
diff --git a/src/gtkui/ui_gtk.h b/src/gtkui/ui_gtk.h
deleted file mode 100644
index a8d74b2..0000000
--- a/src/gtkui/ui_gtk.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2008 Audacious development team
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef UI_NEW_H
-#define UI_NEW_H
-
-extern gboolean multi_columns_view;
-
-extern Interface gtkui_interface;
-
-extern GtkWidget *window;
-extern GtkWidget *vbox;
-extern GtkWidget *menu;
-extern GtkWidget *playlist_box;
-extern GtkWidget *infoarea;
-extern GtkWidget *statusbar;
-
-void setup_panes (void);
-void show_preferences_window(gboolean show);
-
-#endif
diff --git a/src/gtkui/ui_infoarea.c b/src/gtkui/ui_infoarea.c
index 5a203d6..a55b8c9 100644
--- a/src/gtkui/ui_infoarea.c
+++ b/src/gtkui/ui_infoarea.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2010 William Pitcock <nenolod@atheme.org>.
- * Copyright (C) 2010 John Lindgren <john.lindgren@tds.net>.
+ * Copyright (C) 2010-2011 John Lindgren <john.lindgren@tds.net>.
*
* 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
@@ -18,123 +18,125 @@
* Audacious or using our public API to be a derived work.
*/
-#include <glib/gi18n.h>
+#include <math.h>
+#include <string.h>
+
#include <gtk/gtk.h>
-#include <audacious/debug.h>
#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <libaudcore/hook.h>
-#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
-#include <math.h>
-
-#include "gtkui_cfg.h"
-#include "ui_gtk.h"
-#include "ui_playlist_widget.h"
-#include "ui_playlist_model.h"
-#include "ui_manager.h"
#include "ui_infoarea.h"
-#define DEFAULT_ARTWORK DATA_DIR "/images/audio.png"
-#define STREAM_ARTWORK DATA_DIR "/images/streambrowser-64x64.png"
+#define SPACING 8
#define ICON_SIZE 64
-#define SPECT_BANDS 12
-#define VIS_OFFSET (10 + 12 * SPECT_BANDS + 7)
+#define HEIGHT (ICON_SIZE + 2 * SPACING)
-#if ! GTK_CHECK_VERSION (2, 18, 0)
-#define gtk_widget_get_allocation(w, ap) (* (ap) = (w)->allocation)
-#endif
+#define VIS_BANDS 12
+#define VIS_WIDTH (8 * VIS_BANDS - 2)
+#define VIS_CENTER (ICON_SIZE * 5 / 8 + SPACING)
+#define VIS_DELAY 2 /* delay before falloff in frames */
+#define VIS_FALLOFF 2 /* falloff in pixels per frame */
typedef struct {
- GtkWidget *parent;
+ GtkWidget * box, * main, * vis;
- gchar * title, * artist, * album;
- gchar * last_title, * last_artist, * last_album;
+ gchar * title, * artist, * album; /* pooled */
+ gchar * last_title, * last_artist, * last_album; /* pooled */
gfloat alpha, last_alpha;
gboolean stopped;
gint fade_timeout;
- guint8 visdata[SPECT_BANDS];
+ gchar bars[VIS_BANDS];
+ gchar delay[VIS_BANDS];
GdkPixbuf * pb, * last_pb;
} UIInfoArea;
-static const gfloat alpha_step = 0.10;
-
-static void ui_infoarea_draw_visualizer (UIInfoArea * area);
-
/****************************************************************************/
-static void ui_infoarea_visualization_timeout (const VisNode * vis, UIInfoArea *
- area)
+static UIInfoArea * area = NULL;
+
+static void vis_render_cb (const gfloat * freq)
{
- const gfloat xscale[SPECT_BANDS + 1] = {0.00, 0.59, 1.52, 3.00, 5.36, 9.10,
- 15.0, 24.5, 39.4, 63.2, 101, 161, 256}; /* logarithmic scale - 1 */
- gint16 mono_freq[2][256];
+ g_return_if_fail (area);
- aud_calc_mono_freq(mono_freq, vis->data, vis->nch);
+ const gfloat xscale[VIS_BANDS + 1] = {0.00, 0.59, 1.52, 3.00, 5.36, 9.10,
+ 15.0, 24.5, 39.4, 63.2, 101, 161, 256}; /* logarithmic scale - 1 */
- for (gint i = 0; i < SPECT_BANDS; i ++)
+ for (gint i = 0; i < VIS_BANDS; i ++)
{
gint a = ceil (xscale[i]);
gint b = floor (xscale[i + 1]);
- gint n = 0;
+ gfloat n = 0;
if (b < a)
- n += mono_freq[0][b] * (xscale[i + 1] - xscale[i]);
+ n += freq[b] * (xscale[i + 1] - xscale[i]);
else
{
if (a > 0)
- n += mono_freq[0][a - 1] * (a - xscale[i]);
+ n += freq[a - 1] * (a - xscale[i]);
for (; a < b; a ++)
- n += mono_freq[0][a];
+ n += freq[a];
if (b < 256)
- n += mono_freq[0][b] * (xscale[i + 1] - b);
+ n += freq[b] * (xscale[i + 1] - b);
}
/* 40 dB range */
- /* 0.00305 == 1 / 32767 * 10^(40/20) */
- n = 32 * log10 (n * 0.00305);
- n = CLAMP (n, 0, 64);
- area->visdata[i] = MAX (area->visdata[i] - 3, n);
+ int x = 20 * log10 (n * 100);
+ x = CLAMP (x, 0, 40);
+
+ area->bars[i] -= MAX (0, VIS_FALLOFF - area->delay[i]);
+
+ if (area->delay[i])
+ area->delay[i] --;
+
+ if (x > area->bars[i])
+ {
+ area->bars[i] = x;
+ area->delay[i] = VIS_DELAY;
+ }
}
-#if GTK_CHECK_VERSION (2, 20, 0)
- if (gtk_widget_is_drawable (area->parent))
-#else
- if (GTK_WIDGET_DRAWABLE (area->parent))
-#endif
- ui_infoarea_draw_visualizer (area);
+ gtk_widget_queue_draw (area->vis);
}
-static void vis_clear_cb (void * hook_data, UIInfoArea * area)
+static void vis_clear_cb (void)
{
- memset (area->visdata, 0, sizeof area->visdata);
+ g_return_if_fail (area);
+
+ memset (area->bars, 0, sizeof area->bars);
+ memset (area->delay, 0, sizeof area->delay);
+
+ gtk_widget_queue_draw (area->vis);
}
/****************************************************************************/
-static void ui_infoarea_draw_text (UIInfoArea * area, gint x, gint y, gint
+static void clear (GtkWidget * widget, cairo_t * cr)
+{
+ GtkAllocation alloc;
+ gtk_widget_get_allocation (widget, & alloc);
+ cairo_rectangle (cr, 0, 0, alloc.width, alloc.height);
+ cairo_fill (cr);
+}
+
+static void draw_text (GtkWidget * widget, cairo_t * cr, gint x, gint y, gint
width, gfloat r, gfloat g, gfloat b, gfloat a, const gchar * font,
const gchar * text)
{
- cairo_t *cr;
- PangoLayout *pl;
- PangoFontDescription *desc;
- gchar *str;
-
- str = g_markup_escape_text(text, -1);
+ gchar * str = g_markup_escape_text (text, -1);
- cr = gdk_cairo_create(area->parent->window);
cairo_move_to(cr, x, y);
cairo_set_operator(cr, CAIRO_OPERATOR_ATOP);
cairo_set_source_rgba(cr, r, g, b, a);
- desc = pango_font_description_from_string(font);
- pl = gtk_widget_create_pango_layout(area->parent, NULL);
+ PangoFontDescription * desc = pango_font_description_from_string (font);
+ PangoLayout * pl = gtk_widget_create_pango_layout (widget, NULL);
pango_layout_set_markup(pl, str, -1);
pango_layout_set_font_description(pl, desc);
pango_font_description_free(desc);
@@ -143,7 +145,6 @@ static void ui_infoarea_draw_text (UIInfoArea * area, gint x, gint y, gint
pango_cairo_show_layout(cr, pl);
- cairo_destroy(cr);
g_object_unref(pl);
g_free(str);
}
@@ -218,7 +219,7 @@ static void hsv_to_rgb (gfloat h, gfloat s, gfloat v, gfloat * r, gfloat * g,
static void get_color (GtkWidget * widget, gint i, gfloat * r, gfloat * g,
gfloat * b)
{
- GdkColor * c = widget->style->base + GTK_STATE_SELECTED;
+ GdkColor * c = (gtk_widget_get_style (widget))->base + GTK_STATE_SELECTED;
gfloat h, s, v, n;
rgb_to_hsv (c->red / 65535.0, c->green / 65535.0, c->blue / 65535.0, & h,
@@ -230,155 +231,135 @@ static void get_color (GtkWidget * widget, gint i, gfloat * r, gfloat * g,
s = 0.75;
}
- n = sqrt (i / 11.0);
- s = sqrt (s) * (1 - 0.75 * n);
+ n = i / 11.0;
+ s = 1 - 0.9 * n;
v = 0.75 + 0.25 * n;
hsv_to_rgb (h, s, v, r, g, b);
}
-static void ui_infoarea_draw_visualizer (UIInfoArea * area)
+#if GTK_CHECK_VERSION (3, 0, 0)
+static gboolean draw_vis_cb (GtkWidget * vis, cairo_t * cr)
{
- GtkAllocation alloc;
- cairo_t *cr;
+#else
+static gboolean expose_vis_cb (GtkWidget * vis, GdkEventExpose * event)
+{
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (vis));
+#endif
+ g_return_val_if_fail (area, FALSE);
- gtk_widget_get_allocation(GTK_WIDGET(area->parent), &alloc);
- cr = gdk_cairo_create(area->parent->window);
+ clear (vis, cr);
- for (auto gint i = 0; i < SPECT_BANDS; i++)
+ for (gint i = 0; i < VIS_BANDS; i++)
{
- gint x = alloc.width - VIS_OFFSET + 10 + 12 * i;
+ gint x = SPACING + 8 * i;
+ gint t = VIS_CENTER - area->bars[i];
+ gint m = MIN (VIS_CENTER + area->bars[i], HEIGHT);
+
gfloat r, g, b;
+ get_color (vis, i, & r, & g, & b);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_rectangle (cr, x, 10, 9, 64 - area->visdata[i]);
+ cairo_set_source_rgb (cr, r, g, b);
+ cairo_rectangle (cr, x, t, 6, VIS_CENTER - t);
cairo_fill (cr);
- get_color (area->parent, i, & r, & g, & b);
- cairo_set_source_rgb (cr, r, g, b);
- cairo_rectangle (cr, x, 74 - area->visdata[i], 9, area->visdata[i]);
+ cairo_set_source_rgb (cr, r * 0.3, g * 0.3, b * 0.3);
+ cairo_rectangle (cr, x, VIS_CENTER, 6, m - VIS_CENTER);
cairo_fill (cr);
}
- cairo_destroy(cr);
-}
-
-static GdkPixbuf * get_current_album_art (void)
-{
- gint playlist = aud_playlist_get_playing ();
- const gchar * filename = aud_playlist_entry_get_filename (playlist,
- aud_playlist_get_position (playlist));
- return audgui_pixbuf_for_file (filename);
+#if ! GTK_CHECK_VERSION (3, 0, 0)
+ cairo_destroy (cr);
+#endif
+ return TRUE;
}
-void ui_infoarea_draw_album_art (UIInfoArea * area)
+static void draw_album_art (cairo_t * cr)
{
- cairo_t * cr;
-
- if (aud_drct_get_playing () && area->pb == NULL)
- {
- area->pb = get_current_album_art ();
-
- if (area->pb == NULL)
- area->pb = gdk_pixbuf_new_from_file (DEFAULT_ARTWORK, NULL);
-
- if (area->pb != NULL)
- audgui_pixbuf_scale_within (& area->pb, ICON_SIZE);
- }
-
- cr = gdk_cairo_create (area->parent->window);
+ g_return_if_fail (area);
if (area->pb != NULL)
{
- gdk_cairo_set_source_pixbuf (cr, area->pb, 10.0, 10.0);
+ gdk_cairo_set_source_pixbuf (cr, area->pb, SPACING, SPACING);
cairo_paint_with_alpha (cr, area->alpha);
}
if (area->last_pb != NULL)
{
- gdk_cairo_set_source_pixbuf (cr, area->last_pb, 10.0, 10.0);
+ gdk_cairo_set_source_pixbuf (cr, area->last_pb, SPACING, SPACING);
cairo_paint_with_alpha (cr, area->last_alpha);
}
-
- cairo_destroy (cr);
}
-void ui_infoarea_draw_title (UIInfoArea * area)
+static void draw_title (cairo_t * cr)
{
+ g_return_if_fail (area);
+
GtkAllocation alloc;
- gint width;
+ gtk_widget_get_allocation (area->main, & alloc);
- gtk_widget_get_allocation (area->parent, & alloc);
- width = alloc.width - (86 + VIS_OFFSET + 6);
+ gint x = ICON_SIZE + SPACING * 2;
+ gint width = alloc.width - x;
if (area->title != NULL)
- ui_infoarea_draw_text (area, 86, 8, width, 1, 1, 1, area->alpha,
+ draw_text (area->main, cr, x, SPACING, width, 1, 1, 1, area->alpha,
"Sans 18", area->title);
if (area->last_title != NULL)
- ui_infoarea_draw_text (area, 86, 8, width, 1, 1, 1, area->last_alpha,
+ draw_text (area->main, cr, x, SPACING, width, 1, 1, 1, area->last_alpha,
"Sans 18", area->last_title);
if (area->artist != NULL)
- ui_infoarea_draw_text (area, 86, 42, width, 1, 1, 1, area->alpha,
- "Sans 9", area->artist);
+ draw_text (area->main, cr, x, SPACING + ICON_SIZE / 2, width, 1, 1, 1,
+ area->alpha, "Sans 9", area->artist);
if (area->last_artist != NULL)
- ui_infoarea_draw_text (area, 86, 42, width, 1, 1, 1, area->last_alpha,
- "Sans 9", area->last_artist);
+ draw_text (area->main, cr, x, SPACING + ICON_SIZE / 2, width, 1, 1, 1,
+ area->last_alpha, "Sans 9", area->last_artist);
if (area->album != NULL)
- ui_infoarea_draw_text (area, 86, 58, width, 0.7, 0.7, 0.7, area->alpha,
- "Sans 9", area->album);
+ draw_text (area->main, cr, x, SPACING + ICON_SIZE * 3 / 4, width, 0.7,
+ 0.7, 0.7, area->alpha, "Sans 9", area->album);
if (area->last_album != NULL)
- ui_infoarea_draw_text (area, 86, 58, width, 0.7, 0.7, 0.7,
- area->last_alpha, "Sans 9", area->last_album);
+ draw_text (area->main, cr, x, SPACING + ICON_SIZE * 3 / 4, width, 0.7,
+ 0.7, 0.7, area->last_alpha, "Sans 9", area->last_album);
}
-void
-ui_infoarea_draw_background(UIInfoArea *area)
+#if GTK_CHECK_VERSION (3, 0, 0)
+static gboolean draw_cb (GtkWidget * widget, cairo_t * cr)
{
- GtkWidget *evbox;
- GtkAllocation alloc;
- cairo_t *cr;
-
- g_return_if_fail(area != NULL);
-
- evbox = area->parent;
- cr = gdk_cairo_create(evbox->window);
-
- gtk_widget_get_allocation(GTK_WIDGET(evbox), &alloc);
-
- cairo_rectangle(cr, 0, 0, alloc.width, alloc.height);
- cairo_paint(cr);
+#else
+static gboolean expose_cb (GtkWidget * widget, GdkEventExpose * event)
+{
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget));
+#endif
+ g_return_val_if_fail (area, FALSE);
- cairo_destroy(cr);
-}
+ clear (widget, cr);
-gboolean
-ui_infoarea_expose_event(UIInfoArea *area, GdkEventExpose *event, gpointer unused)
-{
- ui_infoarea_draw_background(area);
- ui_infoarea_draw_album_art(area);
- ui_infoarea_draw_title(area);
- ui_infoarea_draw_visualizer(area);
+ draw_album_art (cr);
+ draw_title (cr);
+#if ! GTK_CHECK_VERSION (3, 0, 0)
+ cairo_destroy (cr);
+#endif
return TRUE;
}
-static gboolean ui_infoarea_do_fade (UIInfoArea * area)
+static gboolean ui_infoarea_do_fade (void)
{
+ g_return_val_if_fail (area, FALSE);
gboolean ret = FALSE;
if (aud_drct_get_playing () && area->alpha < 1)
{
- area->alpha += alpha_step;
+ area->alpha += 0.1;
ret = TRUE;
}
if (area->last_alpha > 0)
{
- area->last_alpha -= alpha_step;
+ area->last_alpha -= 0.1;
ret = TRUE;
}
- gtk_widget_queue_draw ((GtkWidget *) area->parent);
+ gtk_widget_queue_draw (area->main);
if (! ret)
area->fade_timeout = 0;
@@ -386,79 +367,107 @@ static gboolean ui_infoarea_do_fade (UIInfoArea * area)
return ret;
}
-void ui_infoarea_set_title (void * data, UIInfoArea * area)
+static gint strcmp_null (const gchar * a, const gchar * b)
+{
+ if (! a)
+ return (! b) ? 0 : -1;
+ if (! b)
+ return 1;
+ return strcmp (a, b);
+}
+
+void ui_infoarea_set_title (void)
{
+ g_return_if_fail (area);
+
if (! aud_drct_get_playing ())
return;
gint playlist = aud_playlist_get_playing ();
gint entry = aud_playlist_get_position (playlist);
- const Tuple * tuple = aud_playlist_entry_get_tuple (playlist, entry, FALSE);
- const gchar * s;
- g_free (area->title);
- area->title = NULL;
- g_free (area->artist);
- area->artist = NULL;
- g_free (area->album);
- area->album = NULL;
+ gchar * title, * artist, * album;
+ aud_playlist_entry_describe (playlist, entry, & title, & artist, & album, TRUE);
- if (tuple && (s = tuple_get_string (tuple, FIELD_TITLE, NULL)))
- area->title = g_strdup (s);
- else
- area->title = g_strdup (aud_playlist_entry_get_title (playlist, entry,
- FALSE));
+ if (! strcmp_null (title, area->title) && ! strcmp_null (artist,
+ area->artist) && ! strcmp_null (album, area->album))
+ {
+ str_unref (title);
+ str_unref (artist);
+ str_unref (album);
+ return;
+ }
+
+ str_unref (area->title);
+ str_unref (area->artist);
+ str_unref (area->album);
+ area->title = title;
+ area->artist = artist;
+ area->album = album;
- if (tuple && (s = tuple_get_string (tuple, FIELD_ARTIST, NULL)))
- area->artist = g_strdup (s);
+ gtk_widget_queue_draw (area->main);
+}
+
+static void set_album_art (void)
+{
+ g_return_if_fail (area);
- if (tuple && (s = tuple_get_string (tuple, FIELD_ALBUM, NULL)))
- area->album = g_strdup (s);
+ if (area->pb)
+ g_object_unref (area->pb);
- gtk_widget_queue_draw ((GtkWidget *) area->parent);
+ area->pb = audgui_pixbuf_for_current ();
+ if (area->pb)
+ audgui_pixbuf_scale_within (& area->pb, ICON_SIZE);
}
-static void infoarea_next (UIInfoArea * area)
+static void infoarea_next (void)
{
+ g_return_if_fail (area);
+
if (area->last_pb)
g_object_unref (area->last_pb);
area->last_pb = area->pb;
area->pb = NULL;
- g_free (area->last_title);
+ str_unref (area->last_title);
area->last_title = area->title;
area->title = NULL;
- g_free (area->last_artist);
+ str_unref (area->last_artist);
area->last_artist = area->artist;
area->artist = NULL;
- g_free (area->last_album);
+ str_unref (area->last_album);
area->last_album = area->album;
area->album = NULL;
area->last_alpha = area->alpha;
area->alpha = 0;
- gtk_widget_queue_draw ((GtkWidget *) area->parent);
+ gtk_widget_queue_draw (area->main);
}
-static void ui_infoarea_playback_start (void * data, UIInfoArea * area)
+static void ui_infoarea_playback_start (void)
{
+ g_return_if_fail (area);
+
if (! area->stopped) /* moved to the next song without stopping? */
- infoarea_next (area);
+ infoarea_next ();
area->stopped = FALSE;
- ui_infoarea_set_title (NULL, area);
+ ui_infoarea_set_title ();
+ set_album_art ();
if (! area->fade_timeout)
area->fade_timeout = g_timeout_add (30, (GSourceFunc)
ui_infoarea_do_fade, area);
}
-static void ui_infoarea_playback_stop (void * data, UIInfoArea * area)
+static void ui_infoarea_playback_stop (void)
{
- infoarea_next (area);
+ g_return_if_fail (area);
+
+ infoarea_next ();
area->stopped = TRUE;
if (! area->fade_timeout)
@@ -466,22 +475,31 @@ static void ui_infoarea_playback_stop (void * data, UIInfoArea * area)
ui_infoarea_do_fade, area);
}
-static void destroy_cb (GtkObject * parent, UIInfoArea * area)
+static void destroy_cb (GtkWidget * widget)
{
- hook_dissociate ("title change", (HookFunction) ui_infoarea_set_title);
+ g_return_if_fail (area);
+
+ hook_dissociate ("playlist update", (HookFunction) ui_infoarea_set_title);
hook_dissociate ("playback begin", (HookFunction)
ui_infoarea_playback_start);
hook_dissociate ("playback stop", (HookFunction)
ui_infoarea_playback_stop);
- hook_dissociate ("visualization clear", (HookFunction) vis_clear_cb);
- aud_vis_runner_remove_hook ((VisHookFunc) ui_infoarea_visualization_timeout);
- g_free (area->title);
- g_free (area->artist);
- g_free (area->album);
- g_free (area->last_title);
- g_free (area->last_artist);
- g_free (area->last_album);
+ aud_vis_func_remove ((VisFunc) vis_clear_cb);
+ aud_vis_func_remove ((VisFunc) vis_render_cb);
+
+ if (area->fade_timeout)
+ {
+ g_source_remove (area->fade_timeout);
+ area->fade_timeout = 0;
+ }
+
+ str_unref (area->title);
+ str_unref (area->artist);
+ str_unref (area->album);
+ str_unref (area->last_title);
+ str_unref (area->last_artist);
+ str_unref (area->last_album);
if (area->pb)
g_object_unref (area->pb);
@@ -489,34 +507,54 @@ static void destroy_cb (GtkObject * parent, UIInfoArea * area)
g_object_unref (area->last_pb);
g_slice_free (UIInfoArea, area);
+ area = NULL;
}
GtkWidget * ui_infoarea_new (void)
{
- UIInfoArea *area;
- GtkWidget *evbox;
+ g_return_val_if_fail (! area, NULL);
+ area = g_slice_new0 (UIInfoArea);
- area = g_slice_new0(UIInfoArea);
+ area->box = gtk_hbox_new (FALSE, 0);
- evbox = gtk_event_box_new();
- area->parent = evbox;
+ area->main = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (area->main, ICON_SIZE + 2 * SPACING, HEIGHT);
+ gtk_box_pack_start ((GtkBox *) area->box, area->main, TRUE, TRUE, 0);
- gtk_widget_set_size_request(GTK_WIDGET(evbox), -1, 84);
+ area->vis = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (area->vis, VIS_WIDTH + 2 * SPACING, HEIGHT);
+ gtk_box_pack_start ((GtkBox *) area->box, area->vis, FALSE, FALSE, 0);
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+ g_signal_connect (area->main, "draw", (GCallback) draw_cb, NULL);
+ g_signal_connect (area->vis, "draw", (GCallback) draw_vis_cb, NULL);
+#else
+ g_signal_connect (area->main, "expose-event", (GCallback) expose_cb, NULL);
+ g_signal_connect (area->vis, "expose-event", (GCallback) expose_vis_cb, NULL);
+#endif
- g_signal_connect_swapped(area->parent, "expose-event",
- G_CALLBACK(ui_infoarea_expose_event), area);
+ hook_associate ("playlist update", (HookFunction) ui_infoarea_set_title, NULL);
+ hook_associate ("playback begin", (HookFunction) ui_infoarea_playback_start, NULL);
+ hook_associate ("playback stop", (HookFunction) ui_infoarea_playback_stop, NULL);
- hook_associate("title change", (HookFunction) ui_infoarea_set_title, area);
- hook_associate("playback begin", (HookFunction) ui_infoarea_playback_start, area);
- hook_associate("playback stop", (HookFunction) ui_infoarea_playback_stop, area);
- hook_associate("visualization clear", (HookFunction) vis_clear_cb, area);
- aud_vis_runner_add_hook ((VisHookFunc) ui_infoarea_visualization_timeout,
- area);
+ aud_vis_func_add (AUD_VIS_TYPE_CLEAR, (VisFunc) vis_clear_cb);
+ aud_vis_func_add (AUD_VIS_TYPE_FREQ, (VisFunc) vis_render_cb);
- g_signal_connect (area->parent, "destroy", (GCallback) destroy_cb, area);
+ g_signal_connect (area->box, "destroy", (GCallback) destroy_cb, NULL);
if (aud_drct_get_playing ())
- ui_infoarea_playback_start (NULL, area);
+ {
+ ui_infoarea_playback_start ();
+
+ /* skip fade-in */
+ area->alpha = 1;
+
+ if (area->fade_timeout)
+ {
+ g_source_remove (area->fade_timeout);
+ area->fade_timeout = 0;
+ }
+ }
- return area->parent;
+ return area->box;
}
diff --git a/src/gtkui/ui_manager.c b/src/gtkui/ui_manager.c
deleted file mode 100644
index fef2542..0000000
--- a/src/gtkui/ui_manager.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include "config.h"
-
-#include "ui_manager.h"
-#include "actions-mainwin.h"
-#include "actions-playlist.h"
-
-#include <audacious/misc.h>
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-
-static GtkUIManager *ui_manager = NULL;
-
-/* toggle action entries */
-
-static GtkToggleActionEntry toggleaction_entries_others[] = {
- {"stop after current song", NULL, N_("Stop after Current Song"), "<Ctrl>M",
- N_("Stop after Current Song"), G_CALLBACK(action_stop_after_current_song), FALSE},
-
- {"playback repeat", NULL, N_("Repeat"), "R",
- N_("Repeat"), G_CALLBACK(action_playback_repeat), FALSE},
-
- {"playback shuffle", NULL, N_("Shuffle"), "S",
- N_("Shuffle"), G_CALLBACK(action_playback_shuffle), FALSE},
-
- {"playback no playlist advance", NULL, N_("No Playlist Advance"), "<Ctrl>N",
- N_("No Playlist Advance"), G_CALLBACK(action_playback_noplaylistadvance), FALSE},
-
- {"view playlists", NULL, N_("Show playlists"), "<Shift><Ctrl>P",
- N_("Show/hide playlists"), G_CALLBACK(action_view_playlist), FALSE},
-
- {"view infoarea", NULL, N_("Show infoarea"), "<Shift><Ctrl>I",
- N_("Show/hide infoarea"), G_CALLBACK(action_view_infoarea), FALSE},
-
- {"view menu", NULL, N_("Show main menu"), "<Shift><Ctrl>M",
- N_("Show/hide main menu"), G_CALLBACK(action_view_menu), FALSE},
-
- {"view statusbar", NULL, N_("Show statusbar"), "<Shift><Ctrl>S",
- N_("Show/hide statusbar"), G_CALLBACK(action_view_statusbar), FALSE},
-};
-
-/* normal actions */
-
-static GtkActionEntry action_entries_playback[] = {
-
- {"playback", NULL, N_("Playback")},
-
- {"playback play", GTK_STOCK_MEDIA_PLAY, N_("Play"), "X",
- N_("Play"), G_CALLBACK(action_playback_play)},
-
- {"playback pause", GTK_STOCK_MEDIA_PAUSE, N_("Pause"), "C",
- N_("Pause"), G_CALLBACK(action_playback_pause)},
-
- {"playback stop", GTK_STOCK_MEDIA_STOP, N_("Stop"), "V",
- N_("Stop"), G_CALLBACK(action_playback_stop)},
-
- {"playback previous", GTK_STOCK_MEDIA_PREVIOUS, N_("Previous"), "Z",
- N_("Previous"), G_CALLBACK(action_playback_previous)},
-
- {"playback next", GTK_STOCK_MEDIA_NEXT, N_("Next"), "B",
- N_("Next"), G_CALLBACK(action_playback_next)}
-};
-
-static GtkActionEntry action_entries_playlist[] = {
-
- {"playlist", NULL, N_("Playlist")},
-
- {"playlist new", GTK_STOCK_NEW, N_("New Playlist"), "<Shift>N",
- N_("New Playlist"), G_CALLBACK(action_playlist_new)},
-
- {"playlist delete", GTK_STOCK_DELETE, N_("Delete Playlist"), "<Shift>D",
- N_("Delete Playlist"), G_CALLBACK(action_playlist_delete)},
-
- {"playlist load", GTK_STOCK_OPEN, N_("Import Playlist ..."), "O",
- N_("Loads a playlist file into the selected playlist."), G_CALLBACK(action_playlist_load_list)},
-
- {"playlist save", GTK_STOCK_SAVE, N_("Export Playlist ..."), "<Shift>S",
- N_("Saves the selected playlist."), G_CALLBACK(action_playlist_save_list)},
-
- {"playlist save all", GTK_STOCK_SAVE, N_("Save All Playlists"), "<Alt>S",
- N_("Saves all the playlists that are open. Note that this "
- "is done automatically when Audacious quits."),
- G_CALLBACK(action_playlist_save_all_playlists)},
-
- {"playlist refresh", GTK_STOCK_REFRESH, N_("Refresh"), "F5",
- N_("Refreshes metadata associated with a playlist entry."),
- G_CALLBACK(action_playlist_refresh_list)},
-
- {"playlist manager", AUD_STOCK_PLAYLIST, N_("Playlist Manager"), "P",
- N_("Opens the playlist manager."),
- G_CALLBACK(action_open_list_manager)},
-
- {"playlist add url", GTK_STOCK_NETWORK, N_("Add URL ..."), "<Ctrl>H",
- N_("Adds a remote track to the playlist."),
- G_CALLBACK(action_playlist_add_url)},
-
- {"playlist add files", GTK_STOCK_ADD, N_("Add Files ..."), "F",
- N_("Adds files to the playlist."),
- G_CALLBACK(action_playlist_add_files)},
-
- {"playlist remove all", GTK_STOCK_CLEAR, N_("Remove All"), NULL,
- N_("Removes all entries from the playlist."),
- G_CALLBACK(action_playlist_remove_all)},
-
- {"playlist remove unselected", GTK_STOCK_REMOVE, N_("Remove Unselected"), NULL,
- N_("Remove unselected entries from the playlist."),
- G_CALLBACK(action_playlist_remove_unselected)},
-
- {"playlist remove selected", GTK_STOCK_REMOVE, N_("Remove Selected"), "Delete",
- N_("Remove selected entries from the playlist."),
- G_CALLBACK(action_playlist_remove_selected)},
-
- {"playlist sort", GTK_STOCK_SORT_ASCENDING, N_("Sort"), NULL, NULL, NULL},
- {"playlist sort track", NULL, N_("By Track Number"), NULL, NULL, (GCallback)
- playlist_sort_track},
- {"playlist sort title", NULL, N_("By Title"), NULL, NULL, (GCallback)
- playlist_sort_title},
- {"playlist sort artist", NULL, N_("By Artist"), NULL, NULL, (GCallback)
- playlist_sort_artist},
- {"playlist sort album", NULL, N_("By Album"), NULL, NULL, (GCallback)
- playlist_sort_album},
- {"playlist sort path", NULL, N_("By File Path"), NULL, NULL, (GCallback)
- playlist_sort_path},
- {"playlist reverse", GTK_STOCK_SORT_DESCENDING, N_("Reverse Order"), NULL,
- NULL, (GCallback) playlist_reverse},
- {"playlist randomize", NULL, N_("Random Order"), NULL, NULL, (GCallback)
- playlist_randomize}};
-
-static GtkActionEntry action_entries_output[] =
-{
- {"output", NULL, N_("Output")},
-
- {"effects menu", NULL, N_("Effects")},
-
- {"equalizer show", NULL, N_("Equalizer"), "<Ctrl>E", NULL, (GCallback)
- audgui_show_equalizer_window},
-};
-
-static GtkActionEntry action_entries_view[] = {
- {"view", NULL, N_("View")},
- {"iface menu", NULL, N_("Interface")}};
-
-static GtkActionEntry action_entries_others[] = {
-
- {"dummy", NULL, "dummy"},
-
- /* XXX Carbon support */
- {"file", NULL, N_("File")},
- {"help", NULL, N_("Help")},
-
- {"plugins-menu", NULL, N_("Components")},
-
- {"current track info", GTK_STOCK_INFO, N_("View Track Details"), "I",
- N_("View track details"), G_CALLBACK(action_current_track_info)},
-
- {"playlist track info", GTK_STOCK_INFO, N_("View Track Details"), "<Alt>I",
- N_("View track details"), G_CALLBACK(action_playlist_track_info)},
-
- {"about audacious", GTK_STOCK_DIALOG_INFO, N_("About Audacious"), NULL,
- N_("About Audacious"), G_CALLBACK(action_about_audacious)},
-
- {"play file", GTK_STOCK_OPEN, N_("Open Files ..."), "L",
- N_("Load and play a file"), G_CALLBACK(action_play_file)},
-
- {"play location", GTK_STOCK_NETWORK, N_("Open URL ..."), "<Ctrl>L",
- N_("Play media from the selected location"), G_CALLBACK(action_play_location)},
-
- {"plugins", NULL, N_("Plugin services")},
-
- {"preferences", GTK_STOCK_PREFERENCES, N_("Preferences"), "<Ctrl>P",
- N_("Open preferences window"), G_CALLBACK(action_preferences)},
-
- {"quit", GTK_STOCK_QUIT, N_("_Quit"), NULL,
- N_("Quit Audacious"), G_CALLBACK(action_quit)},
-
- {"ab set", NULL, N_("Set A-B"), "A",
- N_("Set A-B"), G_CALLBACK(action_ab_set)},
-
- {"ab clear", NULL, N_("Clear A-B"), "<Shift>A",
- N_("Clear A-B"), G_CALLBACK(action_ab_clear)},
-
- {"jump to playlist start", GTK_STOCK_GOTO_TOP, N_("Jump to Playlist Start"), "<Ctrl>Z",
- N_("Jump to Playlist Start"), G_CALLBACK(action_jump_to_playlist_start)},
-
- {"jump to file", GTK_STOCK_JUMP_TO, N_("Jump to File"), "J",
- N_("Jump to File"), G_CALLBACK(action_jump_to_file)},
-
- {"jump to time", GTK_STOCK_JUMP_TO, N_("Jump to Time"), "<Ctrl>J",
- N_("Jump to Time"), G_CALLBACK(action_jump_to_time)},
-
- {"queue toggle", AUD_STOCK_QUEUETOGGLE, N_("Queue Toggle"), "Q",
- N_("Enables/disables the entry in the playlist's queue."),
- G_CALLBACK(action_queue_toggle)},
-
- {"playlist copy", GTK_STOCK_COPY, N_("Copy"), "<Ctrl>C",
- NULL, G_CALLBACK(action_playlist_copy)},
-
- {"playlist cut", GTK_STOCK_CUT, N_("Cut"), "<Ctrl>X",
- NULL, G_CALLBACK(action_playlist_cut)},
-
- {"playlist paste", GTK_STOCK_PASTE, N_("Paste"), "<Ctrl>V",
- NULL, G_CALLBACK(action_playlist_paste)},
-
- {"playlist select all", NULL, N_("Select All"), "<Ctrl>A",
- N_("Selects all of the playlist entries."),
- G_CALLBACK(action_playlist_select_all)},
-
- {"playlist select none", NULL, N_("Select None"), "<Shift><Ctrl>A",
- N_("Deselects all of the playlist entries."),
- G_CALLBACK(action_playlist_select_none)},
-};
-
-static GtkActionGroup * action_group_playback;
-static GtkActionGroup * action_group_output;
-static GtkActionGroup * action_group_view;
-static GtkActionGroup * action_group_others;
-static GtkActionGroup * action_group_playlist;
-
-/* ***************************** */
-
-GtkWidget *ui_manager_get_menus(void)
-{
- GtkWidget *menu;
-
- menu = gtk_ui_manager_get_widget(ui_manager, "/mainwin-menus");
-
- return menu;
-}
-
-static GtkActionGroup *ui_manager_new_action_group(const gchar * group_name)
-{
- GtkActionGroup *group = gtk_action_group_new(group_name);
- gtk_action_group_set_translation_domain(group, PACKAGE_NAME);
- return group;
-}
-
-void ui_manager_init(void)
-{
- /* toggle actions */
- toggleaction_group_others = ui_manager_new_action_group("toggleaction_others");
- gtk_action_group_add_toggle_actions(toggleaction_group_others, toggleaction_entries_others, G_N_ELEMENTS(toggleaction_entries_others), NULL);
-
- /* normal actions */
- action_group_playback = ui_manager_new_action_group("action_playback");
- gtk_action_group_add_actions(action_group_playback, action_entries_playback, G_N_ELEMENTS(action_entries_playback), NULL);
-
- action_group_playlist = ui_manager_new_action_group("action_playlist");
- gtk_action_group_add_actions(action_group_playlist, action_entries_playlist, G_N_ELEMENTS(action_entries_playlist), NULL);
-
- action_group_output = ui_manager_new_action_group ("action_output");
- gtk_action_group_add_actions (action_group_output, action_entries_output,
- G_N_ELEMENTS (action_entries_output), NULL);
-
- action_group_view = ui_manager_new_action_group("action_view");
- gtk_action_group_add_actions(action_group_view, action_entries_view, G_N_ELEMENTS(action_entries_view), NULL);
-
- action_group_others = ui_manager_new_action_group("action_others");
- gtk_action_group_add_actions(action_group_others, action_entries_others, G_N_ELEMENTS(action_entries_others), NULL);
-
- /* ui */
- ui_manager = gtk_ui_manager_new();
- gtk_ui_manager_insert_action_group(ui_manager, toggleaction_group_others, 0);
- gtk_ui_manager_insert_action_group(ui_manager, action_group_playback, 0);
- gtk_ui_manager_insert_action_group(ui_manager, action_group_playlist, 0);
- gtk_ui_manager_insert_action_group(ui_manager, action_group_output, 0);
- gtk_ui_manager_insert_action_group(ui_manager, action_group_view, 0);
- gtk_ui_manager_insert_action_group(ui_manager, action_group_others, 0);
-}
-
-#ifdef GDK_WINDOWING_QUARTZ
-static GtkWidget *carbon_menubar;
-#endif
-
-
-void ui_manager_create_menus(void)
-{
- GError *gerr = NULL;
-
- /* attach xml menu definitions */
- gtk_ui_manager_add_ui_from_file(ui_manager, DATA_DIR "/ui/player.ui", &gerr);
-
- if (gerr != NULL)
- {
- g_critical("Error loading player.ui: %s", gerr->message);
- g_error_free(gerr);
- return;
- }
-
- gtk_menu_item_set_submenu ((GtkMenuItem *) gtk_ui_manager_get_widget
- (ui_manager, "/mainwin-menus/plugins-menu"), aud_get_plugin_menu
- (AUDACIOUS_MENU_MAIN));
- gtk_menu_item_set_submenu ((GtkMenuItem *) gtk_ui_manager_get_widget
- (ui_manager, "/mainwin-menus/output/effects menu"),
- audgui_create_effects_menu ());
- gtk_menu_item_set_submenu ((GtkMenuItem *) gtk_ui_manager_get_widget
- (ui_manager, "/mainwin-menus/view/iface menu"),
- audgui_create_iface_menu ());
-
- playlistwin_popup_menu = ui_manager_get_popup_menu(ui_manager, "/playlist-menus/playlist-rightclick-menu");
-
- gtk_menu_item_set_submenu ((GtkMenuItem *) gtk_ui_manager_get_widget
- (ui_manager, "/playlist-menus/playlist-rightclick-menu/plugins-menu"),
- aud_get_plugin_menu (AUDACIOUS_MENU_PLAYLIST_RCLICK));
-}
-
-
-GtkAccelGroup *ui_manager_get_accel_group(void)
-{
- return gtk_ui_manager_get_accel_group(ui_manager);
-}
-
-
-GtkWidget *ui_manager_get_popup_menu(GtkUIManager * self, const gchar * path)
-{
- GtkWidget *menu_item = gtk_ui_manager_get_widget(self, path);
-
- if (GTK_IS_MENU_ITEM(menu_item))
- return gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu_item));
- else
- return NULL;
-}
-
-
-static void menu_popup_pos_func(GtkMenu * menu, gint * x, gint * y, gboolean * push_in, gint * point)
-{
- GtkRequisition requisition;
- gint screen_width;
- gint screen_height;
-
- gtk_widget_size_request(GTK_WIDGET(menu), &requisition);
-
- screen_width = gdk_screen_width();
- screen_height = gdk_screen_height();
-
- *x = CLAMP(point[0] - 2, 0, MAX(0, screen_width - requisition.width));
- *y = CLAMP(point[1] - 2, 0, MAX(0, screen_height - requisition.height));
-
- *push_in = FALSE;
-}
-
-
-void ui_manager_popup_menu_show(GtkMenu * menu, gint x, gint y, guint button, guint time)
-{
- gint pos[2];
- pos[0] = x;
- pos[1] = y;
-
- gtk_menu_popup(menu, NULL, NULL, (GtkMenuPositionFunc) menu_popup_pos_func, pos, button, time);
-}
-
-void ui_manager_destroy(void)
-{
- gtk_menu_detach ((GtkMenu *) aud_get_plugin_menu (AUDACIOUS_MENU_MAIN));
- gtk_menu_detach ((GtkMenu *) aud_get_plugin_menu
- (AUDACIOUS_MENU_PLAYLIST_RCLICK));
-
- g_object_unref((GObject *) toggleaction_group_others);
- g_object_unref((GObject *) action_group_playback);
- g_object_unref((GObject *) action_group_playlist);
- g_object_unref((GObject *) action_group_output);
- g_object_unref((GObject *) action_group_view);
- g_object_unref((GObject *) action_group_others);
- g_object_unref((GObject *) ui_manager);
-}
diff --git a/src/gtkui/ui_manager.h b/src/gtkui/ui_manager.h
deleted file mode 100644
index 0e0b660..0000000
--- a/src/gtkui/ui_manager.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef AUDACIOUS_UI_MANAGER_H
-#define AUDACIOUS_UI_MANAGER_H
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-GtkWidget *playlistwin_popup_menu;
-
-GtkActionGroup *toggleaction_group_others;
-
-void ui_manager_init(void);
-void ui_manager_create_menus(void);
-GtkAccelGroup *ui_manager_get_accel_group(void);
-GtkWidget *ui_manager_get_popup_menu(GtkUIManager *, const gchar *);
-void ui_manager_popup_menu_show(GtkMenu *, gint, gint, guint, guint);
-void ui_manager_destroy(void);
-
-GtkWidget *ui_manager_get_menus(void);
-
-G_END_DECLS
-#endif /* AUDACIOUS_UI_MANAGER_H */
diff --git a/src/gtkui/ui_playlist_model.c b/src/gtkui/ui_playlist_model.c
deleted file mode 100644
index 5879b23..0000000
--- a/src/gtkui/ui_playlist_model.c
+++ /dev/null
@@ -1,700 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2009 Tomasz Moń <desowin@gmail.com>
- * Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include "config.h"
-
-#include <audacious/audconfig.h>
-#include <audacious/debug.h>
-#include <audacious/playlist.h>
-#include <libaudcore/hook.h>
-
-#include "ui_playlist_model.h"
-#include "ui_playlist_widget.h"
-#include "playlist_util.h"
-
-static GObjectClass *parent_class = NULL;
-
-static void ui_playlist_model_class_init(UiPlaylistModelClass *klass);
-static void ui_playlist_tree_model_init(GtkTreeModelIface *iface);
-static void ui_playlist_model_init(UiPlaylistModel *model);
-static void ui_playlist_model_finalize(GObject *object);
-static GtkTreeModelFlags ui_playlist_model_get_flags(GtkTreeModel *model);
-static gint ui_playlist_model_get_n_columns(GtkTreeModel *model);
-static GType ui_playlist_model_get_column_type(GtkTreeModel *model, gint index);
-static gboolean ui_playlist_model_get_iter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path);
-static GtkTreePath * ui_playlist_model_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter);
-static void ui_playlist_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value);
-static gboolean ui_playlist_model_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter);
-static gboolean ui_playlist_model_iter_children(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent);
-static gboolean ui_playlist_model_iter_has_child(GtkTreeModel *tree_model, GtkTreeIter *iter);
-static gint ui_playlist_model_iter_n_children(GtkTreeModel *tree_model, GtkTreeIter *iter);
-static gboolean ui_playlist_model_iter_nth_child(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n);
-static gboolean ui_playlist_model_iter_parent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child);
-
-static void ui_playlist_model_associate_hooks(UiPlaylistModel *model);
-static void ui_playlist_model_dissociate_hooks(UiPlaylistModel *model);
-
-GType
-ui_playlist_model_get_type(void)
-{
- static GType ui_playlist_model_type = 0;
-
- if (ui_playlist_model_type == 0)
- {
- static const GTypeInfo ui_playlist_model_info =
- {
- sizeof(UiPlaylistModelClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) ui_playlist_model_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(UiPlaylistModel),
- 0, /* n_preallocs */
- (GInstanceInitFunc) ui_playlist_model_init
- };
-
- static const GInterfaceInfo tree_model_info =
- {
- (GInterfaceInitFunc) ui_playlist_tree_model_init,
- NULL,
- NULL
- };
-
- ui_playlist_model_type =
- g_type_register_static(G_TYPE_OBJECT, "UiPlaylistModel",
- &ui_playlist_model_info, (GTypeFlags)0);
-
- g_type_add_interface_static(ui_playlist_model_type, GTK_TYPE_TREE_MODEL,
- &tree_model_info);
- }
-
- return ui_playlist_model_type;
-}
-
-static void
-ui_playlist_model_class_init(UiPlaylistModelClass *klass)
-{
- GObjectClass *object_class;
-
- parent_class = (GObjectClass *) g_type_class_peek_parent(klass);
- object_class = (GObjectClass *) klass;
-
- object_class->finalize = ui_playlist_model_finalize;
-}
-
-static void
-ui_playlist_tree_model_init(GtkTreeModelIface *iface)
-{
- iface->get_flags = ui_playlist_model_get_flags;
- iface->get_n_columns = ui_playlist_model_get_n_columns;
- iface->get_column_type = ui_playlist_model_get_column_type;
- iface->get_iter = ui_playlist_model_get_iter;
- iface->get_path = ui_playlist_model_get_path;
- iface->get_value = ui_playlist_model_get_value;
- iface->iter_next = ui_playlist_model_iter_next;
- iface->iter_children = ui_playlist_model_iter_children;
- iface->iter_has_child = ui_playlist_model_iter_has_child;
- iface->iter_n_children = ui_playlist_model_iter_n_children;
- iface->iter_nth_child = ui_playlist_model_iter_nth_child;
- iface->iter_parent = ui_playlist_model_iter_parent;
-}
-
-static void
-ui_playlist_model_init(UiPlaylistModel *model)
-{
- if (multi_column_view)
- {
- model->n_columns = PLAYLIST_N_MULTI_COLUMNS;
-
- model->column_types = g_new0(GType, PLAYLIST_N_MULTI_COLUMNS);
- model->column_types[PLAYLIST_MULTI_COLUMN_NUM] = G_TYPE_UINT;
- model->column_types[PLAYLIST_MULTI_COLUMN_ARTIST] = G_TYPE_STRING;
- model->column_types[PLAYLIST_MULTI_COLUMN_ALBUM] = G_TYPE_STRING;
- model->column_types[PLAYLIST_MULTI_COLUMN_TITLE] = G_TYPE_STRING;
- model->column_types[PLAYLIST_MULTI_COLUMN_TRACK_NUM] = G_TYPE_UINT;
- model->column_types[PLAYLIST_MULTI_COLUMN_QUEUED] = G_TYPE_STRING;
- model->column_types[PLAYLIST_MULTI_COLUMN_TIME] = G_TYPE_STRING;
- model->column_types[PLAYLIST_MULTI_COLUMN_WEIGHT] = PANGO_TYPE_WEIGHT;
- }
- else
- {
- model->n_columns = PLAYLIST_N_COLUMNS;
-
- model->column_types = g_new0(GType, PLAYLIST_N_COLUMNS);
- model->column_types[PLAYLIST_COLUMN_NUM] = G_TYPE_UINT;
- model->column_types[PLAYLIST_COLUMN_TEXT] = G_TYPE_STRING;
- model->column_types[PLAYLIST_COLUMN_QUEUED] = G_TYPE_STRING;
- model->column_types[PLAYLIST_COLUMN_TIME] = G_TYPE_STRING;
- model->column_types[PLAYLIST_COLUMN_WEIGHT] = PANGO_TYPE_WEIGHT;
- }
-
- model->num_rows = 0;
-
- model->stamp = g_random_int(); /* Random int to check whether an iter belongs to our model */
-}
-
-static void
-ui_playlist_model_finalize(GObject *object)
-{
- UiPlaylistModel *model = UI_PLAYLIST_MODEL(object);
-
- ui_playlist_model_dissociate_hooks(model);
-
- g_list_free (model->queue);
- g_free(model->column_types);
-
- (* parent_class->finalize) (object);
-}
-
-static GtkTreeModelFlags
-ui_playlist_model_get_flags(GtkTreeModel *model)
-{
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(model), (GtkTreeModelFlags)0);
-
- return GTK_TREE_MODEL_LIST_ONLY;
-}
-
-static gint
-ui_playlist_model_get_n_columns(GtkTreeModel *model)
-{
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(model), 0);
-
- return UI_PLAYLIST_MODEL(model)->n_columns;
-}
-
-static GType
-ui_playlist_model_get_column_type(GtkTreeModel *model, gint index)
-{
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(model), G_TYPE_INVALID);
- g_return_val_if_fail((index < UI_PLAYLIST_MODEL(model)->n_columns) &&
- (index >= 0), G_TYPE_INVALID);
-
- return UI_PLAYLIST_MODEL(model)->column_types[index];
-}
-
-static gboolean
-ui_playlist_model_get_iter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path)
-{
- UiPlaylistModel *model;
- gint *indices, n, depth;
-
- g_assert(UI_IS_PLAYLIST_MODEL(tree_model));
- g_assert(path != NULL);
-
- model = UI_PLAYLIST_MODEL(tree_model);
-
- indices = gtk_tree_path_get_indices(path);
- depth = gtk_tree_path_get_depth(path);
-
- /* top level, items have no children */
- if (depth != 1)
- return FALSE;
-
- n = indices[0];
-
- if (n >= model->num_rows || n < 0)
- return FALSE;
-
- iter->stamp = model->stamp;
- iter->user_data = GINT_TO_POINTER(n);
- iter->user_data2 = NULL;
- iter->user_data3 = NULL;
-
- return TRUE;
-}
-
-
-static GtkTreePath *
-ui_playlist_model_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- GtkTreePath *path;
-
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(tree_model), NULL);
- g_return_val_if_fail(iter != NULL, NULL);
-
- path = gtk_tree_path_new();
- gtk_tree_path_append_index(path, GPOINTER_TO_INT(iter->user_data));
-
- return path;
-}
-
-static void ui_playlist_model_get_value_time(UiPlaylistModel *model, GValue *value, gint position)
-{
- gint length = aud_playlist_entry_get_length (model->playlist, position,
- TRUE) / 1000;
- gchar * len = g_strdup_printf("%02i:%02i", length / 60, length % 60);
- g_value_set_string(value, len);
- g_free(len);
-}
-
-static const gchar *ui_playlist_model_tuple_get_string(const Tuple *tuple, gint field)
-{
- if (tuple == NULL)
- return NULL;
-
- return tuple_get_string(tuple, field, NULL);
-}
-
-static gint ui_playlist_model_tuple_get_int(const Tuple *tuple, gint field)
-{
- if (tuple == NULL)
- return 0;
-
- return tuple_get_int(tuple, field, NULL);
-}
-
-static void
-ui_playlist_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value)
-{
- UiPlaylistModel *model;
- gint n, i;
-
- g_return_if_fail(UI_IS_PLAYLIST_MODEL(tree_model));
- g_return_if_fail(iter != NULL);
- g_return_if_fail(column < UI_PLAYLIST_MODEL(tree_model)->n_columns);
-
- model = UI_PLAYLIST_MODEL(tree_model);
-
- g_value_init(value, model->column_types[column]);
-
- n = GPOINTER_TO_INT(iter->user_data);
-
- if (n >= model->num_rows)
- g_return_if_reached();
-
- if (multi_column_view)
- {
- const Tuple * tu = aud_playlist_entry_get_tuple (model->playlist, n,
- TRUE);
-
- switch (column)
- {
- case PLAYLIST_MULTI_COLUMN_NUM:
- g_value_set_uint(value, n+1);
- break;
- case PLAYLIST_MULTI_COLUMN_ARTIST:
- g_value_set_string(value, ui_playlist_model_tuple_get_string(tu, FIELD_ARTIST));
- break;
-
- case PLAYLIST_MULTI_COLUMN_ALBUM:
- g_value_set_string(value, ui_playlist_model_tuple_get_string(tu, FIELD_ALBUM));
- break;
-
- case PLAYLIST_MULTI_COLUMN_TRACK_NUM:
- g_value_set_uint(value, ui_playlist_model_tuple_get_int(tu, FIELD_TRACK_NUMBER));
- break;
-
- case PLAYLIST_MULTI_COLUMN_TITLE:
- {
- const gchar *title = ui_playlist_model_tuple_get_string(tu, FIELD_TITLE);
-
- if (title == NULL)
- g_value_set_string (value, aud_playlist_entry_get_title
- (model->playlist, n, TRUE));
- else
- g_value_set_string(value, title);
- break;
- }
-
- case PLAYLIST_MULTI_COLUMN_QUEUED:
- if ((i = aud_playlist_queue_find_entry (model->playlist, n)) < 0)
- g_value_set_string (value, "");
- else
- g_value_take_string (value, g_strdup_printf ("#%d", 1 + i));
- break;
-
- case PLAYLIST_MULTI_COLUMN_TIME:
- ui_playlist_model_get_value_time(model, value, n);
- break;
-
- case PLAYLIST_MULTI_COLUMN_WEIGHT:
- if (n == model->position)
- g_value_set_enum(value, PANGO_WEIGHT_BOLD);
- else
- g_value_set_enum(value, PANGO_WEIGHT_NORMAL);
- break;
- default:
- break;
- }
- }
- else
- {
- switch (column)
- {
- case PLAYLIST_COLUMN_NUM:
- g_value_set_uint(value, n+1);
- break;
-
- case PLAYLIST_COLUMN_TEXT:
- g_value_set_string (value, aud_playlist_entry_get_title
- (model->playlist, n, TRUE));
- break;
-
- case PLAYLIST_COLUMN_QUEUED:
- if ((i = aud_playlist_queue_find_entry (model->playlist, n)) < 0)
- g_value_set_string (value, "");
- else
- g_value_take_string (value, g_strdup_printf ("#%d", 1 + i));
- break;
-
- case PLAYLIST_COLUMN_TIME:
- ui_playlist_model_get_value_time(model, value, n);
- break;
- case PLAYLIST_COLUMN_WEIGHT:
- if (n == model->position)
- g_value_set_enum(value, PANGO_WEIGHT_BOLD);
- else
- g_value_set_enum(value, PANGO_WEIGHT_NORMAL);
- break;
- default:
- break;
- }
- }
-}
-
-static gboolean
-ui_playlist_model_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- UiPlaylistModel *model;
- guint n;
-
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(tree_model), FALSE);
-
- if (iter == NULL)
- return FALSE;
-
- model = UI_PLAYLIST_MODEL(tree_model);
-
- n = GPOINTER_TO_INT(iter->user_data);
-
- if (n+1 >= model->num_rows)
- return FALSE;
-
- iter->user_data = GINT_TO_POINTER(n+1);
- iter->stamp = model->stamp;
-
- return TRUE;
-}
-
-static gboolean
-ui_playlist_model_iter_children(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent)
-{
- UiPlaylistModel *model;
-
- /* this is a list, nodes have no children */
- if (parent)
- return FALSE;
-
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(tree_model), FALSE);
-
- model = UI_PLAYLIST_MODEL(tree_model);
-
- if (model->num_rows == 0)
- return FALSE;
-
- iter->stamp = model->stamp;
- iter->user_data = GINT_TO_POINTER(0);
-
- return TRUE;
-}
-
-static gboolean
-ui_playlist_model_iter_has_child(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- return FALSE;
-}
-
-static gint
-ui_playlist_model_iter_n_children(GtkTreeModel *tree_model, GtkTreeIter *iter)
-{
- UiPlaylistModel *model;
-
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(tree_model), -1);
-
- model = UI_PLAYLIST_MODEL(tree_model);
-
- /* return number of top-level rows */
- if (iter == NULL)
- return model->num_rows;
-
- return 0; /* nodes have no children */
-}
-
-static gboolean
-ui_playlist_model_iter_nth_child(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, gint n)
-{
- UiPlaylistModel *model;
-
- g_return_val_if_fail(UI_IS_PLAYLIST_MODEL(tree_model), FALSE);
-
- model = UI_PLAYLIST_MODEL(tree_model);
-
- /* we have only top-level rows */
- if (parent)
- return FALSE;
-
- if (n >= model->num_rows)
- return FALSE;
-
- iter->stamp = model->stamp;
- iter->user_data = GINT_TO_POINTER(n);
-
- return TRUE;
-}
-
-static gboolean
-ui_playlist_model_iter_parent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child)
-{
- return FALSE;
-}
-
-UiPlaylistModel *
-ui_playlist_model_new(gint playlist)
-{
- UiPlaylistModel *model;
-
- model = (UiPlaylistModel *) g_object_new(UI_PLAYLIST_MODEL_TYPE, NULL);
-
- g_assert(model != NULL);
-
- model->playlist = playlist;
- model->num_rows = aud_playlist_entry_count(playlist);
- model->position = aud_playlist_get_position (playlist);
- model->queue = NULL;
- model->song_changed = FALSE;
- model->focus_changed = FALSE;
- model->selection_changed = FALSE;
-
- ui_playlist_model_associate_hooks(model);
-
- return model;
-}
-
-static void
-ui_playlist_model_row_changed(UiPlaylistModel *model, gint n)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
-
- path = gtk_tree_path_new();
- gtk_tree_path_append_index(path, n);
- ui_playlist_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
-
- gtk_tree_model_row_changed(GTK_TREE_MODEL(model), path, &iter);
-
- gtk_tree_path_free(path);
-}
-
-static void
-ui_playlist_model_row_inserted(UiPlaylistModel *model, gint n)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
-
- path = gtk_tree_path_new();
- gtk_tree_path_append_index(path, n);
- ui_playlist_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
-
- gtk_tree_model_row_inserted(GTK_TREE_MODEL(model), path, &iter);
-
- gtk_tree_path_free(path);
-}
-
-static void
-ui_playlist_model_row_deleted(UiPlaylistModel *model, gint n)
-{
- GtkTreePath *path;
-
- path = gtk_tree_path_new();
- gtk_tree_path_append_index(path, n);
-
- gtk_tree_model_row_deleted(GTK_TREE_MODEL(model), path);
-
- gtk_tree_path_free(path);
-}
-
-static void
-ui_playlist_model_update_position(UiPlaylistModel *model, gint position)
-{
- if (model->position != -1)
- {
- ui_playlist_model_row_changed(model, model->position); /* remove bold */
- }
-
- model->position = position;
-
- if (model->position != -1)
- {
- ui_playlist_model_row_changed(model, model->position); /* set bold */
- }
-}
-
-static void ui_playlist_model_playlist_rearraged(UiPlaylistModel *model)
-{
- gtk_widget_queue_draw(GTK_WIDGET(playlist_get_treeview(model->playlist)));
-}
-
-static void ui_playlist_model_playlist_position (void * hook_data, void *
- user_data)
-{
- gint playlist = GPOINTER_TO_INT (hook_data);
- UiPlaylistModel * model = user_data;
-
- if (playlist == model->playlist)
- model->song_changed = TRUE;
-}
-
-static void update_queue_row_changed (void * row, void * model)
-{
- ui_playlist_model_row_changed (model, GPOINTER_TO_INT (row));
-}
-
-static void update_queue (UiPlaylistModel * model)
-{
- gint i;
-
- /* update previously queued rows */
- g_list_foreach (model->queue, update_queue_row_changed, model);
-
- g_list_free (model->queue);
- model->queue = NULL;
-
- for (i = aud_playlist_queue_count (model->playlist); i --; )
- model->queue = g_list_prepend (model->queue, GINT_TO_POINTER
- (aud_playlist_queue_get_entry (model->playlist, i)));
-
- /* update currently queued rows */
- g_list_foreach (model->queue, update_queue_row_changed, model);
-}
-
-static void
-ui_playlist_model_playlist_update(gpointer hook_data, gpointer user_data)
-{
- UiPlaylistModel *model = UI_PLAYLIST_MODEL(user_data);
- GtkTreeView *treeview = playlist_get_treeview(model->playlist);
- gint type = GPOINTER_TO_INT(hook_data);
-
- if (model->playlist != aud_playlist_get_active())
- return;
-
- ui_playlist_widget_block_updates ((GtkWidget *) treeview, TRUE);
-
- gtk_tree_view_column_set_visible (g_object_get_data ((GObject *) treeview,
- "number column"), aud_cfg->show_numbers_in_pl);
-
- if (type == PLAYLIST_UPDATE_STRUCTURE)
- {
- gint changed_rows;
- changed_rows = aud_playlist_entry_count(model->playlist) - model->num_rows;
-
- AUDDBG("playlist structure update\n");
-
- if (changed_rows == 0)
- {
- ui_playlist_model_playlist_rearraged(model);
- }
- else if (changed_rows > 0)
- {
- /* entries added */
- while (changed_rows != 0)
- {
- ui_playlist_model_row_inserted(model, model->num_rows++);
- changed_rows--;
- }
- }
- else
- {
- /* entries removed */
- while (changed_rows != 0)
- {
- ui_playlist_model_row_deleted(model, --model->num_rows);
- changed_rows++;
- }
- }
-
- ui_playlist_model_update_position (model, aud_playlist_get_position
- (model->playlist));
- }
- else if (type == PLAYLIST_UPDATE_METADATA)
- {
- AUDDBG("playlist metadata update\n");
- ui_playlist_model_playlist_rearraged(model);
- }
- else if (type == PLAYLIST_UPDATE_SELECTION)
- update_queue (model);
-
- if (model->song_changed)
- {
- gint song = aud_playlist_get_position (model->playlist);
-
- if (type != PLAYLIST_UPDATE_STRUCTURE) /* already did it? */
- ui_playlist_model_update_position (model, song);
-
- playlist_scroll_to_row (treeview, song);
- model->song_changed = FALSE;
- }
-
- if (model->focus_changed)
- treeview_set_focus_now (treeview, model->focus);
- else if (model->selection_changed)
- treeview_refresh_selection_now (treeview);
-
- model->focus_changed = FALSE;
- model->selection_changed = FALSE;
-
- ui_playlist_widget_block_updates ((GtkWidget *) treeview, FALSE);
-}
-
-static void
-ui_playlist_model_playlist_delete(gpointer hook_data, gpointer user_data)
-{
- UiPlaylistModel *model = UI_PLAYLIST_MODEL(user_data);
- gint playlist = GPOINTER_TO_INT(hook_data);
-
- if (model->playlist > playlist)
- {
- model->playlist--;
- return;
- }
-
- /* should happen only if GtkTreeView wasn't yet destroyed */
- if (model->playlist == playlist)
- {
- model->num_rows = 0;
- model->playlist = -1;
- }
-}
-
-static void
-ui_playlist_model_associate_hooks(UiPlaylistModel *model)
-{
- hook_associate("playlist update", ui_playlist_model_playlist_update, model);
- hook_associate("playlist delete", ui_playlist_model_playlist_delete, model);
- hook_associate("playlist position", ui_playlist_model_playlist_position, model);
-}
-
-static void
-ui_playlist_model_dissociate_hooks(UiPlaylistModel *model)
-{
- hook_dissociate_full("playlist update", ui_playlist_model_playlist_update, model);
- hook_dissociate_full("playlist delete", ui_playlist_model_playlist_delete, model);
- hook_dissociate_full("playlist position", ui_playlist_model_playlist_position, model);
-}
diff --git a/src/gtkui/ui_playlist_model.h b/src/gtkui/ui_playlist_model.h
deleted file mode 100644
index 57b510e..0000000
--- a/src/gtkui/ui_playlist_model.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2009 Tomasz Moń <desowin@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef UI_PLAYLIST_MODEL_H
-#define UI_PLAYLIST_MODEL_H
-
-#include <gtk/gtk.h>
-
-#define UI_PLAYLIST_MODEL_TYPE (ui_playlist_model_get_type())
-#define UI_PLAYLIST_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), UI_PLAYLIST_MODEL_TYPE, UiPlaylistModel))
-#define UI_PLYALIST_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), UI_PLAYLIST_MODEL_TYPE, UiPlaylistModelClass))
-#define UI_IS_PLAYLIST_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), UI_PLAYLIST_MODEL_TYPE))
-#define UI_IS_PLAYLIST_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), UI_PLAYLIST_MODEL_TYPE))
-#define UI_PLAYLIST_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), UI_PLAYLIST_MODEL_TYPE, UiPlaylistModelClass))
-
-extern gboolean multi_column_view;
-
-enum
-{
- PLAYLIST_COLUMN_NUM = 0,
- PLAYLIST_COLUMN_TEXT,
- PLAYLIST_COLUMN_QUEUED,
- PLAYLIST_COLUMN_TIME,
- PLAYLIST_COLUMN_WEIGHT, /* PANGO_WEIGHT_BOLD or PANGO_WEIGHT_NORMAL, denotes currently played song */
- PLAYLIST_N_COLUMNS,
-};
-
-/* Multi column view */
-enum
-{
- PLAYLIST_MULTI_COLUMN_NUM = 0,
- PLAYLIST_MULTI_COLUMN_ARTIST,
- PLAYLIST_MULTI_COLUMN_ALBUM,
- PLAYLIST_MULTI_COLUMN_TRACK_NUM,
- PLAYLIST_MULTI_COLUMN_TITLE,
- PLAYLIST_MULTI_COLUMN_QUEUED,
- PLAYLIST_MULTI_COLUMN_TIME,
- PLAYLIST_MULTI_COLUMN_WEIGHT, /* PANGO_WEIGHT_BOLD or PANGO_WEIGHT_NORMAL, denotes currently played song */
- PLAYLIST_N_MULTI_COLUMNS,
-};
-
-typedef struct _UiPlaylistModel UiPlaylistModel;
-typedef struct _UiPlaylistModelClass UiPlaylistModelClass;
-
-struct _UiPlaylistModel
-{
- GObject parent;
-
- guint num_rows;
- gint playlist; /* associated playlist number */
- gint position;
- GList * queue;
- gboolean song_changed, focus_changed, selection_changed;
- gint focus;
-
- gint n_columns;
- GType *column_types;
-
- gint stamp; /* Random integer to check whether an iter belongs to our model */
-};
-
-struct _UiPlaylistModelClass
-{
- GObjectClass parent_class;
-};
-
-GType ui_playlist_model_get_type(void);
-UiPlaylistModel *ui_playlist_model_new(gint playlist);
-
-#endif /* UI_PLAYLIST_MODEL_H */
diff --git a/src/gtkui/ui_playlist_notebook.c b/src/gtkui/ui_playlist_notebook.c
index d64bcc2..c5f75fa 100644
--- a/src/gtkui/ui_playlist_notebook.c
+++ b/src/gtkui/ui_playlist_notebook.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2010 Audacious development team
+ * Copyright (C) 2005-2012 Audacious development team
*
* 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
@@ -19,21 +19,124 @@
#include "config.h"
-#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
#include <audacious/debug.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <audacious/plugin.h>
+#include <audacious/i18n.h>
+#include <libaudgui/list.h>
+#include <libaudgui/libaudgui.h>
+#include "gtkui.h"
#include "ui_playlist_notebook.h"
#include "ui_playlist_widget.h"
-#include "ui_playlist_model.h"
#include "playlist_util.h"
-static GtkWidget *notebook;
-static struct index *pages;
-GtkWidget *ui_playlist_notebook_tab_title_editing = NULL;
+#define CURRENT_POS (-2)
+
+#if GTK_CHECK_VERSION(2, 20, 0)
+#define HAVE_ADD_BUTTON
+#endif
+
+static GtkWidget * notebook = NULL;
+static GQueue follow_queue = G_QUEUE_INIT;
+static gint highlighted = -1;
+
+static GtkWidget *ui_playlist_notebook_tab_title_editing;
+
+static gint switch_handler = 0;
+static gint reorder_handler = 0;
+
+#ifdef HAVE_ADD_BUTTON
+static void add_button_cb (GtkButton * button, void * unused)
+{
+ aud_playlist_insert (-1);
+ aud_playlist_set_active (aud_playlist_count () - 1);
+}
+
+static void make_add_button (GtkWidget * notebook)
+{
+ GtkWidget * button = gtk_button_new ();
+ gtk_button_set_relief ((GtkButton *) button, GTK_RELIEF_NONE);
+ gtk_container_add ((GtkContainer *) button, gtk_image_new_from_stock
+ (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON));
+ gtk_widget_set_can_focus (button, FALSE);
+
+ g_signal_connect (button, "clicked", (GCallback) add_button_cb, NULL);
+ gtk_widget_show_all (button);
+
+ gtk_notebook_set_action_widget ((GtkNotebook *) notebook, button, GTK_PACK_END);
+}
+#endif
+
+static void close_button_cb (GtkWidget * button, void * id)
+{
+ audgui_confirm_playlist_delete (aud_playlist_by_unique_id (GPOINTER_TO_INT (id)));
+}
+
+#if ! GTK_CHECK_VERSION (3, 0, 0)
+static void close_button_style_set(GtkWidget * button, GtkRcStyle * previous_style,
+ gpointer user_data)
+{
+ gint w, h;
+ gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (button), GTK_ICON_SIZE_MENU, &w, &h);
+ gtk_widget_set_size_request (button, w + 2, h + 2);
+}
+#endif
+
+static GtkWidget * make_close_button (gint list)
+{
+ GtkWidget * button = gtk_button_new ();
+ gtk_button_set_relief ((GtkButton *) button, GTK_RELIEF_NONE);
+ gtk_button_set_focus_on_click ((GtkButton *) button, FALSE);
+ gtk_widget_set_name (button, "gtkui-tab-close-button");
+ gtk_widget_set_tooltip_text (button, _("Close"));
+ g_signal_connect (button, "clicked", (GCallback) close_button_cb,
+ GINT_TO_POINTER (aud_playlist_get_unique_id (list)));
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+ GtkCssProvider * provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_data (provider,
+ "#gtkui-tab-close-button {"
+ " -GtkButton-default-border: 0;"
+ " -GtkButton-default-outside-border: 0;"
+ " -GtkButton-inner-border: 0;"
+ " -GtkWidget-focus-padding: 0;"
+ " -GtkWidget-focus-line-width: 0;"
+ " margin: 0;"
+ " padding: 0; }",
+ -1, NULL);
+
+ gtk_style_context_add_provider (gtk_widget_get_style_context (button),
+ GTK_STYLE_PROVIDER (provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ g_object_unref (provider);
+#else
+ gtk_rc_parse_string (
+ "style \"gtkui-tab-close-button-style\" {"
+ " GtkWidget::focus-padding = 0"
+ " GtkWidget::focus-line-width = 0"
+ " xthickness = 0"
+ " ythickness = 0 }"
+ "widget \"*.gtkui-tab-close-button\" style \"gtkui-tab-close-button-style\""
+ );
+
+ g_signal_connect (button, "style-set", (GCallback) close_button_style_set, NULL);
+#endif
+
+ GtkWidget * icon = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
+ gtk_container_add ((GtkContainer *) button, icon);
+
+ GtkWidget * align = gtk_alignment_new (1.0, 0.5, 0.0, 0.0);
+ gtk_container_add ((GtkContainer *) align, button);
+
+ gtk_widget_show_all (align);
+ return align;
+}
GtkNotebook *ui_playlist_get_notebook(void)
{
@@ -74,42 +177,43 @@ static gboolean tab_button_press_cb(GtkWidget *widget, GdkEventButton *event, gp
if (event->type == GDK_2BUTTON_PRESS && event->button == 1)
ui_playlist_notebook_edit_tab_title(widget);
+ if (event->type == GDK_BUTTON_PRESS && event->button == 2)
+ {
+ GtkWidget *page = g_object_get_data(G_OBJECT(widget), "page");
+ audgui_confirm_playlist_delete(gtk_notebook_page_num(UI_PLAYLIST_NOTEBOOK, page));
+ }
+
+ if (event->type == GDK_BUTTON_PRESS && event->button == 3)
+ {
+ GtkWidget *page = g_object_get_data(G_OBJECT(widget), "page");
+
+ gtk_notebook_set_current_page(UI_PLAYLIST_NOTEBOOK, gtk_notebook_page_num(UI_PLAYLIST_NOTEBOOK, page));
+ popup_menu_tab (event->button, event->time);
+ }
+
return FALSE;
}
-static void tab_changed(GtkNotebook * notebook, GtkNotebookPage * notebook_page, gint page_num, void *unused)
+static void tab_changed (GtkNotebook * notebook, GtkWidget * page, gint
+ page_num, void * unused)
{
- GtkTreeView *treeview = playlist_get_treeview(page_num);
+ GtkWidget * treeview = playlist_get_treeview (page_num);
if (treeview != NULL)
{
- GtkTreeModel *tree_model = gtk_tree_view_get_model(treeview);
- UiPlaylistModel *model = UI_PLAYLIST_MODEL(tree_model);
-
- aud_playlist_set_active(model->playlist);
+ aud_playlist_set_active (page_num);
if (ui_playlist_notebook_tab_title_editing != NULL)
tab_title_reset(ui_playlist_notebook_tab_title_editing);
}
}
-#if GTK_CHECK_VERSION (2, 10, 0)
static void tab_reordered(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer user_data)
{
- GtkTreeView *treeview = playlist_get_treeview_from_page(child);
-
- if (treeview == NULL)
- return;
-
- GtkTreeModel *tree_model;
- UiPlaylistModel *model;
-
- tree_model = gtk_tree_view_get_model(treeview);
- model = UI_PLAYLIST_MODEL(tree_model);
-
- aud_playlist_reorder(model->playlist, page_num, 1);
+ GtkWidget * widget = g_object_get_data ((GObject *) child, "treeview");
+ g_return_if_fail (widget);
+ aud_playlist_reorder (ui_playlist_widget_get_playlist (widget), page_num, 1);
}
-#endif
static GtkLabel *get_tab_label(gint playlist)
{
@@ -118,30 +222,20 @@ static GtkLabel *get_tab_label(gint playlist)
return GTK_LABEL(g_object_get_data(G_OBJECT(ebox), "label"));
}
-void ui_playlist_notebook_add_tab_label_markup(gint playlist, gboolean new_title)
+static void set_tab_label (gint list, GtkLabel * label)
{
- static gint last_playlist = -1;
- static GtkLabel *last_label = NULL;
+ gchar * title = aud_playlist_get_title (list);
- if (last_playlist == playlist && !new_title)
- return;
- else
+ if (list == aud_playlist_get_playing ())
{
- if (last_playlist > -1 && last_label != NULL && !new_title)
- gtk_label_set_text(last_label, aud_playlist_get_title(last_playlist));
-
- GtkLabel *label = get_tab_label(playlist);
-
- if (!GTK_IS_LABEL(label))
- return;
-
- gchar *markup = g_markup_printf_escaped("<b>%s</b>", aud_playlist_get_title(playlist));
- gtk_label_set_markup(label, markup);
- g_free(markup);
-
- last_playlist = playlist;
- last_label = label;
+ gchar * markup = g_markup_printf_escaped ("<b>%s</b>", title);
+ gtk_label_set_markup (label, markup);
+ g_free (markup);
}
+ else
+ gtk_label_set_text (label, title);
+
+ str_unref (title);
}
void ui_playlist_notebook_edit_tab_title(GtkWidget *ebox)
@@ -149,7 +243,7 @@ void ui_playlist_notebook_edit_tab_title(GtkWidget *ebox)
if (!gtk_notebook_get_show_tabs(UI_PLAYLIST_NOTEBOOK))
return;
- if (ebox == NULL)
+ if (ebox == NULL || !GTK_IS_EVENT_BOX(ebox))
{
GtkWidget *page = gtk_notebook_get_nth_page(UI_PLAYLIST_NOTEBOOK, aud_playlist_get_active());
ebox = gtk_notebook_get_tab_label(UI_PLAYLIST_NOTEBOOK, page);
@@ -159,7 +253,9 @@ void ui_playlist_notebook_edit_tab_title(GtkWidget *ebox)
GtkWidget *entry = g_object_get_data(G_OBJECT(ebox), "entry");
gtk_widget_hide(label);
- gtk_entry_set_text(GTK_ENTRY(entry), aud_playlist_get_title(aud_playlist_get_active()));
+ gchar * title = aud_playlist_get_title (aud_playlist_get_active ());
+ gtk_entry_set_text ((GtkEntry *) entry, title);
+ str_unref (title);
gtk_widget_grab_focus(entry);
gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
gtk_widget_show(entry);
@@ -174,22 +270,21 @@ void ui_playlist_notebook_create_tab(gint playlist)
gint position = aud_playlist_get_position (playlist);
scrollwin = gtk_scrolled_window_new(NULL, NULL);
- index_insert(pages, playlist, scrollwin);
treeview = ui_playlist_widget_new(playlist);
g_object_set_data(G_OBJECT(scrollwin), "treeview", treeview);
gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN);
gtk_widget_show_all(scrollwin);
ebox = gtk_event_box_new();
- GTK_WIDGET_SET_FLAGS(ebox, GTK_NO_WINDOW);
+ gtk_event_box_set_visible_window ((GtkEventBox *) ebox, FALSE);
- hbox = gtk_hbox_new(FALSE, 2);
+ hbox = gtk_hbox_new (FALSE, 4);
- label = gtk_label_new(aud_playlist_get_title(playlist));
+ label = gtk_label_new ("");
+ set_tab_label (playlist, (GtkLabel *) label);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
entry = gtk_entry_new();
@@ -198,21 +293,24 @@ void ui_playlist_notebook_create_tab(gint playlist)
gtk_widget_show_all(ebox);
gtk_widget_hide(entry);
+ gtk_box_pack_end ((GtkBox *) hbox, make_close_button (playlist), FALSE, FALSE, 0);
+
g_object_set_data(G_OBJECT(ebox), "label", label);
g_object_set_data(G_OBJECT(ebox), "entry", entry);
+ g_object_set_data(G_OBJECT(ebox), "page", scrollwin);
- gtk_notebook_append_page(UI_PLAYLIST_NOTEBOOK, scrollwin, ebox);
- gtk_notebook_set_show_tabs(UI_PLAYLIST_NOTEBOOK, index_count(pages) > 1 ? TRUE : FALSE);
-
-#if GTK_CHECK_VERSION (2, 10, 0)
+ gtk_notebook_insert_page (UI_PLAYLIST_NOTEBOOK, scrollwin, ebox, playlist);
gtk_notebook_set_tab_reorderable(UI_PLAYLIST_NOTEBOOK, scrollwin, TRUE);
-#endif
+
+ g_object_set_data ((GObject *) treeview, "playlist-id",
+ GINT_TO_POINTER (aud_playlist_get_unique_id (playlist)));
if (position >= 0)
{
aud_playlist_select_all (playlist, FALSE);
aud_playlist_entry_set_selected (playlist, position, TRUE);
- treeview_set_focus_now ((GtkTreeView *) treeview, position);
+ audgui_list_set_highlight (treeview, position);
+ audgui_list_set_focus (treeview, position);
}
g_signal_connect(ebox, "button-press-event", G_CALLBACK(tab_button_press_cb), NULL);
@@ -220,83 +318,221 @@ void ui_playlist_notebook_create_tab(gint playlist)
g_signal_connect(entry, "activate", G_CALLBACK(tab_title_save), ebox);
}
-void ui_playlist_notebook_destroy_tab(gint playlist)
-{
- GtkWidget *page = index_get(pages, playlist);
-
- gtk_notebook_remove_page(UI_PLAYLIST_NOTEBOOK, gtk_notebook_page_num(UI_PLAYLIST_NOTEBOOK, page));
- index_delete(pages, playlist, 1);
- gtk_notebook_set_show_tabs(UI_PLAYLIST_NOTEBOOK, index_count(pages) > 1 ? TRUE : FALSE);
-}
-
void ui_playlist_notebook_populate(void)
{
gint playlists = aud_playlist_count();
gint count;
- pages = index_new();
-
for (count = 0; count < playlists; count++)
ui_playlist_notebook_create_tab(count);
gtk_notebook_set_current_page (UI_PLAYLIST_NOTEBOOK, aud_playlist_get_active ());
+ highlighted = aud_playlist_get_unique_id (aud_playlist_get_playing ());
- g_signal_connect (UI_PLAYLIST_NOTEBOOK, "switch-page", (GCallback)
- tab_changed, NULL);
+ if (! switch_handler)
+ switch_handler = g_signal_connect (notebook, "switch-page", (GCallback)
+ tab_changed, NULL);
+ if (! reorder_handler)
+ reorder_handler = g_signal_connect (notebook, "page-reordered",
+ (GCallback) tab_reordered, NULL);
-#if GTK_CHECK_VERSION (2, 10, 0)
- g_signal_connect (UI_PLAYLIST_NOTEBOOK, "page-reordered", (GCallback)
- tab_reordered, NULL);
-#endif
+ gtk_widget_grab_focus (playlist_get_treeview (aud_playlist_get_active ()));
}
-void ui_playlist_notebook_update(gpointer hook_data, gpointer user_data)
+void ui_playlist_notebook_empty (void)
{
- gint type = GPOINTER_TO_INT(hook_data);
+ if (switch_handler)
+ g_signal_handler_disconnect (notebook, switch_handler);
+ switch_handler = 0;
+ if (reorder_handler)
+ g_signal_handler_disconnect (notebook, reorder_handler);
+ reorder_handler = 0;
+
+ gint n_pages = gtk_notebook_get_n_pages ((GtkNotebook *) notebook);
+ while (n_pages)
+ gtk_notebook_remove_page ((GtkNotebook *) notebook, -- n_pages);
+}
- if (type == PLAYLIST_UPDATE_STRUCTURE)
+static void do_follow (void)
+{
+ while (! g_queue_is_empty (& follow_queue))
{
- AUDDBG("playlist order update\n");
+ gint list = aud_playlist_by_unique_id (GPOINTER_TO_INT (g_queue_pop_head
+ (& follow_queue)));
+ gint row = GPOINTER_TO_INT (g_queue_pop_head (& follow_queue));
- GtkTreeView *treeview;
- GtkTreeModel *tree_model;
- UiPlaylistModel *model;
- GtkLabel *label;
- gint i, n_pages;
+ if (list < 0)
+ continue;
- n_pages = gtk_notebook_get_n_pages(UI_PLAYLIST_NOTEBOOK);
+ GtkWidget * widget = playlist_get_treeview (list);
- for (i = 0; i < n_pages; i++)
+ if (row == CURRENT_POS)
{
- if (i == aud_playlist_get_playing())
- ui_playlist_notebook_add_tab_label_markup(i, TRUE);
- else
- {
- label = get_tab_label(i);
+ row = aud_playlist_get_position (list);
+ audgui_list_set_highlight (widget, row);
- if (GTK_IS_LABEL(label))
- gtk_label_set_text(label, aud_playlist_get_title(i));
- }
+ if (! aud_get_bool ("gtkui", "autoscroll"))
+ continue;
+ }
- treeview = playlist_get_treeview(i);
+ audgui_list_set_focus (widget, row);
+ }
+}
- if (treeview == NULL)
- continue;
+static void add_remove_pages (void)
+{
+ gint lists = aud_playlist_count ();
+ gint pages = gtk_notebook_get_n_pages ((GtkNotebook *) notebook);
+
+ /* scan through existing treeviews */
+ for (gint i = 0; i < pages; )
+ {
+ GtkWidget * page = gtk_notebook_get_nth_page ((GtkNotebook *) notebook, i);
+ GtkWidget * tree = g_object_get_data ((GObject *) page, "treeview");
+ gint tree_id = GPOINTER_TO_INT (g_object_get_data ((GObject *) tree, "playlist-id"));
+
+ /* do we have an orphaned treeview? */
+ if (aud_playlist_by_unique_id (tree_id) < 0)
+ {
+ g_signal_handlers_block_by_func (notebook, tab_changed, NULL);
+ gtk_notebook_remove_page ((GtkNotebook *) notebook, i);
+ g_signal_handlers_unblock_by_func (notebook, tab_changed, NULL);
+ pages --;
+ continue;
+ }
- tree_model = gtk_tree_view_get_model(treeview);
- model = UI_PLAYLIST_MODEL(tree_model);
+ /* do we have the right treeview? */
+ gint list_id = aud_playlist_get_unique_id (i);
+
+ if (tree_id == list_id)
+ {
+ ui_playlist_widget_set_playlist (tree, i);
+ i ++;
+ continue;
+ }
+
+ /* look for the right treeview */
+ gint found = FALSE;
+
+ for (gint j = i + 1; j < pages; j ++)
+ {
+ page = gtk_notebook_get_nth_page ((GtkNotebook *) notebook, j);
+ tree = g_object_get_data ((GObject *) page, "treeview");
+ tree_id = GPOINTER_TO_INT (g_object_get_data ((GObject *) tree, "playlist-id"));
+
+ /* found it? move it to the right place */
+ if (tree_id == list_id)
+ {
+ g_signal_handlers_block_by_func (notebook, tab_reordered, NULL);
+ gtk_notebook_reorder_child ((GtkNotebook *) notebook, page, i);
+ g_signal_handlers_unblock_by_func (notebook, tab_reordered, NULL);
+ found = TRUE;
+ break;
+ }
+ }
- model->playlist = i;
+ /* didn't find it? create it */
+ if (! found)
+ {
+ ui_playlist_notebook_create_tab (i);
+ pages ++;
+ continue;
}
+ }
- gtk_notebook_set_current_page(UI_PLAYLIST_NOTEBOOK, aud_playlist_get_active());
- gtk_widget_grab_focus(GTK_WIDGET(playlist_get_active_treeview()));
+ /* create new treeviews */
+ while (pages < lists)
+ {
+ ui_playlist_notebook_create_tab (pages);
+ pages ++;
}
}
+void ui_playlist_notebook_update (void * data, void * user)
+{
+ gint global_level = GPOINTER_TO_INT (data);
+
+ if (global_level == PLAYLIST_UPDATE_STRUCTURE)
+ add_remove_pages ();
+
+ gint lists = aud_playlist_count ();
+
+ for (gint list = 0; list < lists; list ++)
+ {
+ if (global_level >= PLAYLIST_UPDATE_METADATA)
+ set_tab_label (list, get_tab_label (list));
+
+ gint at, count;
+ gint level = aud_playlist_updated_range (list, & at, & count);
+
+ if (level)
+ ui_playlist_widget_update (playlist_get_treeview (list), level, at, count);
+ }
+
+ gtk_notebook_set_current_page ((GtkNotebook *) notebook, aud_playlist_get_active ());
+
+ do_follow ();
+}
+
+void playlist_set_focus (gint list, gint row)
+{
+ g_queue_push_tail (& follow_queue, GINT_TO_POINTER
+ (aud_playlist_get_unique_id (list)));
+ g_queue_push_tail (& follow_queue, GINT_TO_POINTER (row));
+
+ if (! aud_playlist_update_pending ())
+ do_follow ();
+}
+
+void ui_playlist_notebook_position (void * data, void * user)
+{
+ gint list = GPOINTER_TO_INT (data);
+
+ if (aud_get_bool ("gtkui", "autoscroll"))
+ {
+ aud_playlist_select_all (list, FALSE);
+
+ if (aud_playlist_get_position (list) >= 0)
+ aud_playlist_entry_set_selected (list, aud_playlist_get_position (list), TRUE);
+ }
+
+ playlist_set_focus (list, CURRENT_POS);
+}
+
+void ui_playlist_notebook_activate (void * data, void * user)
+{
+ if (! aud_playlist_update_pending ())
+ gtk_notebook_set_current_page ((GtkNotebook *) notebook, aud_playlist_get_active ());
+}
+
+void ui_playlist_notebook_set_playing (void * data, void * user)
+{
+ gint new = aud_playlist_get_unique_id (aud_playlist_get_playing ());
+
+ if (highlighted == new)
+ return;
+
+ gint pages = gtk_notebook_get_n_pages ((GtkNotebook *) notebook);
+
+ for (gint i = 0; i < pages; i ++)
+ {
+ GtkWidget * page = gtk_notebook_get_nth_page ((GtkNotebook *) notebook, i);
+ GtkWidget * tree = g_object_get_data ((GObject *) page, "treeview");
+ gint tree_id = GPOINTER_TO_INT (g_object_get_data ((GObject *) tree, "playlist-id"));
+
+ if (tree_id == highlighted || tree_id == new)
+ set_tab_label (i, get_tab_label (i));
+ }
+
+ highlighted = new;
+}
+
static void destroy_cb (void)
{
- index_free (pages);
+ notebook = NULL;
+ g_queue_clear (& follow_queue);
+ switch_handler = 0;
+ reorder_handler = 0;
}
GtkWidget *ui_playlist_notebook_new()
@@ -307,6 +543,21 @@ GtkWidget *ui_playlist_notebook_new()
gtk_notebook_set_scrollable(UI_PLAYLIST_NOTEBOOK, TRUE);
gtk_notebook_set_show_border(UI_PLAYLIST_NOTEBOOK, FALSE);
+#ifdef HAVE_ADD_BUTTON
+ make_add_button (notebook);
+#endif
+
g_signal_connect (notebook, "destroy", (GCallback) destroy_cb, NULL);
return notebook;
}
+
+void playlist_show_headers (gboolean show)
+{
+ gboolean old = aud_get_bool ("gtkui", "playlist_headers");
+ if (old == show)
+ return;
+
+ aud_set_bool ("gtkui", "playlist_headers", show);
+ ui_playlist_notebook_empty ();
+ ui_playlist_notebook_populate ();
+}
diff --git a/src/gtkui/ui_playlist_notebook.h b/src/gtkui/ui_playlist_notebook.h
index 439fa2e..f19e73f 100644
--- a/src/gtkui/ui_playlist_notebook.h
+++ b/src/gtkui/ui_playlist_notebook.h
@@ -27,10 +27,14 @@
GtkNotebook *ui_playlist_get_notebook(void);
GtkWidget *ui_playlist_notebook_new();
void ui_playlist_notebook_create_tab(gint playlist);
-void ui_playlist_notebook_destroy_tab(gint playlist);
void ui_playlist_notebook_edit_tab_title(GtkWidget *ebox);
void ui_playlist_notebook_populate(void);
-void ui_playlist_notebook_update(gpointer hook_data, gpointer user_data);
-void ui_playlist_notebook_add_tab_label_markup(gint playlist, gboolean new_title);
+void ui_playlist_notebook_empty (void);
+void ui_playlist_notebook_update (void * data, void * user);
+void ui_playlist_notebook_activate (void * data, void * user);
+void ui_playlist_notebook_set_playing (void * data, void * user);
+void ui_playlist_notebook_position (void * data, void * user);
+
+void playlist_show_headers (gboolean show);
#endif
diff --git a/src/gtkui/ui_playlist_widget.c b/src/gtkui/ui_playlist_widget.c
index 3254979..c3e4ab8 100644
--- a/src/gtkui/ui_playlist_widget.c
+++ b/src/gtkui/ui_playlist_widget.c
@@ -1,513 +1,409 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2008 Tomasz Moń <desowin@gmail.com>
- * Copyright (C) 2009-2010 William Pitcock <nenolod@atheme.org>
- * Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
+/*
+ * ui_playlist_widget.c
+ * Copyright 2011 John Lindgren
*
- * 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; under version 3 of the License.
+ * This file is part of Audacious.
*
- * 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.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses>.
+ * Audacious 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.
*
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
*/
-#include <stdio.h>
+#include <string.h>
+
#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <audacious/audconfig.h>
-#include <audacious/debug.h>
#include <audacious/drct.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <libaudgui/libaudgui.h>
+#include <libaudgui/list.h>
-#include "ui_manager.h"
-#include "ui_playlist_model.h"
+#include "config.h"
+#include "gtkui.h"
#include "playlist_util.h"
-
-#if ! GTK_CHECK_VERSION (2, 12, 0)
-static void gtk_tree_view_convert_widget_to_bin_window_coords
- (GtkTreeView * tree, gint wx, gint wy, gint * bx, gint * by)
+#include "ui_playlist_widget.h"
+
+static const GType pw_col_types[PW_COLS] = {G_TYPE_INT, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING};
+static const gboolean pw_col_widths[PW_COLS] = {7, -1, -1, 4, -1, 2, 3, 7, -1,
+ -1, -1, 3};
+static const gboolean pw_col_label[PW_COLS] = {FALSE, TRUE, TRUE, TRUE, TRUE,
+ FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE};
+
+typedef struct {
+ gint list;
+ GList * queue;
+} PlaylistWidgetData;
+
+static void set_int_from_tuple (GValue * value, const Tuple * tuple, gint field)
{
- gint bx0, by0;
- gdk_window_get_position (gtk_tree_view_get_bin_window (tree), & bx0, & by0);
- * bx = wx - bx0;
- * by = wy - by0;
+ gint i = tuple ? tuple_get_int (tuple, field, NULL) : 0;
+ if (i > 0)
+ g_value_take_string (value, g_strdup_printf ("%d", i));
+ else
+ g_value_set_string (value, "");
}
-#endif
-typedef struct
+static void set_string_from_tuple (GValue * value, const Tuple * tuple,
+ gint field)
{
- GtkTreeView * source;
- GtkTreePath *dest_path;
- gint source_playlist;
- gint source_pos;
- gboolean append;
-} UiPlaylistDragTracker;
-
-static UiPlaylistDragTracker *t;
-static gboolean dropped = FALSE;
+ gchar *str = tuple ? tuple_get_str (tuple, field, NULL) : NULL;
+ g_value_set_string (value, str);
+ str_unref(str);
+}
-static void _ui_playlist_widget_drag_begin(GtkWidget *widget, GdkDragContext * context, gpointer data)
+static void set_queued (GValue * value, gint list, gint row)
{
- t = g_slice_new0(UiPlaylistDragTracker);
- gint playlist;
-
- g_signal_stop_emission_by_name(widget, "drag-begin");
-
- playlist = playlist_get_playlist_from_treeview(GTK_TREE_VIEW(widget));
-
- t->source = (GtkTreeView *) widget;
- t->source_playlist = playlist;
- t->source_pos = GPOINTER_TO_INT (g_object_get_data ((GObject *) widget,
- "row-clicked"));
- t->dest_path = NULL;
- t->append = FALSE;
+ int q = aud_playlist_queue_find_entry (list, row);
+ if (q < 0)
+ g_value_set_string (value, "");
+ else
+ g_value_take_string (value, g_strdup_printf ("#%d", 1 + q));
}
-static void _ui_playlist_widget_drag_motion(GtkTreeView * widget, GdkDragContext * context, gint x, gint y, guint time, gpointer user_data)
+static void set_length (GValue * value, gint list, gint row)
{
- GdkRectangle win;
- GdkRectangle rect;
- gint end_pos, dest_playlist;
-
- if (t == NULL)
+ gint len = aud_playlist_entry_get_length (list, row, TRUE);
+ if (len)
{
- /* Dragging from other application */
- t = g_slice_new0(UiPlaylistDragTracker);
- t->source_playlist = -1;
- t->dest_path = NULL;
- }
-
- if (t->dest_path)
- {
- gtk_tree_path_free (t->dest_path);
- t->dest_path = NULL;
- }
+ len /= 1000;
- t->append = FALSE;
-
- g_signal_stop_emission_by_name(widget, "drag-motion");
-
- dest_playlist = playlist_get_playlist_from_treeview(widget);
- end_pos = aud_playlist_entry_count(dest_playlist) - 1;
-
- gdk_window_get_geometry(gtk_tree_view_get_bin_window(widget), NULL, NULL, NULL, &win.height, NULL);
-
- gtk_tree_view_convert_widget_to_bin_window_coords (widget, x, y, & x, & y);
- gtk_tree_view_get_path_at_pos (widget, x, y, & t->dest_path, NULL, NULL,
- NULL);
-
- if (! t->dest_path && end_pos != -1)
- t->dest_path = gtk_tree_path_new_from_indices (end_pos, -1);
-
- if (t->dest_path)
- {
- gtk_tree_view_get_background_area (widget, t->dest_path, NULL, & rect);
-
- if (y - rect.y < rect.height / 2)
- gtk_tree_view_set_drag_dest_row (widget, t->dest_path,
- GTK_TREE_VIEW_DROP_BEFORE);
+ gchar s[16];
+ if (len < 3600)
+ snprintf (s, sizeof s, aud_get_bool (NULL, "leading_zero") ?
+ "%02d:%02d" : "%d:%02d", len / 60, len % 60);
else
- {
- gtk_tree_view_set_drag_dest_row (widget, t->dest_path,
- GTK_TREE_VIEW_DROP_AFTER);
- t->append = TRUE;
- }
+ snprintf (s, sizeof s, "%d:%02d:%02d", len / 3600, (len / 60) % 60,
+ len % 60);
- gtk_tree_view_get_background_area (widget, t->dest_path, NULL, & rect);
- GtkAdjustment * vadj = gtk_tree_view_get_vadjustment (widget);
-
- if (y >= 0 && y < rect.height * 2 && vadj->value > 0)
- gtk_adjustment_set_value(vadj, MAX(0, vadj->value - rect.height));
- else if (win.height - y <= rect.height * 2 && vadj->value < vadj->upper
- - vadj->page_size)
- gtk_adjustment_set_value(vadj, MIN(vadj->upper - vadj->page_size, vadj->value + rect.height));
+ g_value_set_string (value, s);
}
+ else
+ g_value_set_string (value, "");
}
-static gint get_dest_row (void)
+static void get_value (void * user, gint row, gint column, GValue * value)
{
- return t->dest_path ? gtk_tree_path_get_indices (t->dest_path)[0] +
- (t->append ? 1 : 0) : 0;
-}
+ PlaylistWidgetData * data = user;
+ g_return_if_fail (column >= 0 && column < pw_num_cols);
+ g_return_if_fail (row >= 0 && row < aud_playlist_entry_count (data->list));
-static void drag_tracker_cleanup()
-{
- if (!t)
- return;
+ column = pw_cols[column];
- if (t->dest_path)
- gtk_tree_path_free(t->dest_path);
+ gchar * title = NULL, * artist = NULL, * album = NULL;
+ Tuple * tuple = NULL;
- g_slice_free(UiPlaylistDragTracker, t);
- t = NULL;
-}
+ if (column == PW_COL_TITLE || column == PW_COL_ARTIST || column ==
+ PW_COL_ALBUM)
+ aud_playlist_entry_describe (data->list, row, & title, & artist,
+ & album, TRUE);
+ else if (column == PW_COL_YEAR || column == PW_COL_TRACK || column ==
+ PW_COL_FILENAME || column == PW_COL_PATH || column == PW_COL_BITRATE)
+ tuple = aud_playlist_entry_get_tuple (data->list, row, TRUE);
-static void local_drop (GtkTreeView * tree, gint list, gint row)
-{
- /* Adjust the shift amount so that the selected entry closest to the
- * destination ends up at the destination. */
- if (row > t->source_pos)
- row -= playlist_count_selected_in_range (list, t->source_pos, row -
- t->source_pos);
- else
- row += playlist_count_selected_in_range (list, row, t->source_pos - row);
+ switch (column)
+ {
+ case PW_COL_NUMBER:
+ g_value_set_int (value, 1 + row);
+ break;
+ case PW_COL_TITLE:
+ g_value_set_string (value, title);
+ break;
+ case PW_COL_ARTIST:
+ g_value_set_string (value, artist);
+ break;
+ case PW_COL_YEAR:
+ set_int_from_tuple (value, tuple, FIELD_YEAR);
+ break;
+ case PW_COL_ALBUM:
+ g_value_set_string (value, album);
+ break;
+ case PW_COL_TRACK:
+ set_int_from_tuple (value, tuple, FIELD_TRACK_NUMBER);
+ break;
+ case PW_COL_QUEUED:
+ set_queued (value, data->list, row);
+ break;
+ case PW_COL_LENGTH:
+ set_length (value, data->list, row);
+ break;
+ case PW_COL_FILENAME:
+ set_string_from_tuple (value, tuple, FIELD_FILE_NAME);
+ break;
+ case PW_COL_PATH:
+ set_string_from_tuple (value, tuple, FIELD_FILE_PATH);
+ break;
+ case PW_COL_CUSTOM:;
+ gchar * custom = aud_playlist_entry_get_title (data->list, row, TRUE);
+ g_value_set_string (value, custom);
+ str_unref (custom);
+ break;
+ case PW_COL_BITRATE:
+ set_int_from_tuple (value, tuple, FIELD_BITRATE);
+ break;
+ }
- aud_playlist_shift (list, t->source_pos, row - t->source_pos);
- treeview_set_focus (tree, row);
+ str_unref (title);
+ str_unref (artist);
+ str_unref (album);
+ if (tuple)
+ tuple_unref (tuple);
}
-static void cross_drop (GtkTreeView * tree, gint list, gint row)
+static gboolean get_selected (void * user, gint row)
{
- struct index * names, * tuples;
-
- playlist_selected_to_indexes (t->source_playlist, & names, & tuples);
- treeview_remove_selected (t->source);
- treeview_add_indexes (tree, row, names, tuples);
+ return aud_playlist_entry_get_selected (((PlaylistWidgetData *) user)->list,
+ row);
}
-static gboolean drag_drop_cb (GtkWidget * widget, GdkDragContext * context,
- gint x, gint y, guint time, void * unused)
+static void set_selected (void * user, gint row, gboolean selected)
{
- gint list = ((UiPlaylistModel *) gtk_tree_view_get_model ((GtkTreeView *)
- widget))->playlist;
-
- g_signal_stop_emission_by_name (widget, "drag-drop");
- g_return_val_if_fail (t, FALSE);
-
- if (t->source)
- {
- if (list == t->source_playlist)
- local_drop ((GtkTreeView *) widget, list, get_dest_row ());
- else
- cross_drop ((GtkTreeView *) widget, list, get_dest_row ());
- }
- else
- {
- dropped = TRUE;
- gtk_drag_get_data (widget, context, gdk_atom_intern ("text/uri-list",
- FALSE), time);
- }
-
- return TRUE;
+ aud_playlist_entry_set_selected (((PlaylistWidgetData *) user)->list, row,
+ selected);
}
-static void drag_data_cb (GtkWidget * widget, GdkDragContext * context, gint x,
- gint y, GtkSelectionData * data, guint info, guint time, void * unused)
+static void select_all (void * user, gboolean selected)
{
- g_signal_stop_emission_by_name (widget, "drag-data-received");
- g_return_if_fail (t);
-
- if (! dropped)
- {
- gdk_drag_status (context, GDK_ACTION_COPY, time);
- return;
- }
-
- dropped = FALSE;
- treeview_add_urilist ((GtkTreeView *) widget, get_dest_row (),
- (const gchar *) data->data);
- gtk_drag_finish (context, FALSE, FALSE, time);
+ aud_playlist_select_all (((PlaylistWidgetData *) user)->list, selected);
}
-static void drag_end_cb (GtkWidget * widget, GdkDragContext * context, void *
- unused)
+static void activate_row (void * user, gint row)
{
- drag_tracker_cleanup ();
+ gint list = ((PlaylistWidgetData *) user)->list;
+ aud_playlist_set_playing (list);
+ aud_playlist_set_position (list, row);
+ aud_drct_play ();
}
-static void _ui_playlist_widget_selection_update(GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer playlist_p)
+static void right_click (void * user, GdkEventButton * event)
{
- gint entry;
-
- gtk_tree_model_get(model, iter, PLAYLIST_COLUMN_NUM, &entry, -1);
-
- /* paths are numbered from 1, playlist index start from 0 */
- entry -= 1;
-
- aud_playlist_entry_set_selected(GPOINTER_TO_INT(playlist_p), entry, TRUE);
+ popup_menu_rclick (event->button, event->time);
}
-static void _ui_playlist_widget_selection_changed(GtkTreeSelection * selection, gpointer treeview)
+static void shift_rows (void * user, gint row, gint before)
{
- AUDDBG ("Selection changed.\n");
- gint playlist = playlist_get_playlist_from_treeview(treeview);
+ gint list = ((PlaylistWidgetData *) user)->list;
- aud_playlist_select_all(playlist, FALSE);
+ /* Adjust the shift amount so that the selected entry closest to the
+ * destination ends up at the destination. */
+ if (before > row)
+ before -= playlist_count_selected_in_range (list, row, before - row);
+ else
+ before += playlist_count_selected_in_range (list, before, row - before);
- gtk_tree_selection_selected_foreach(selection, _ui_playlist_widget_selection_update, GINT_TO_POINTER(playlist));
+ aud_playlist_shift (list, row, before - row);
}
-static void ui_playlist_widget_change_song(GtkTreeView * treeview, guint pos)
+static void get_data (void * user, void * * data, gint * length)
{
- gint playlist = playlist_get_playlist_from_treeview(treeview);
-
- aud_playlist_set_playing(playlist);
- aud_playlist_set_position(playlist, pos);
+ gchar * text = audgui_urilist_create_from_selected
+ (((PlaylistWidgetData *) user)->list);
+ g_return_if_fail (text);
+ * data = text;
+ * length = strlen (text);
+}
- if (!aud_drct_get_playing())
- aud_drct_play();
+static void receive_data (void * user, gint row, const void * data, gint length)
+{
+ gchar * text = g_malloc (length + 1);
+ memcpy (text, data, length);
+ text[length] = 0;
+ audgui_urilist_insert (((PlaylistWidgetData *) user)->list, row, text);
+ g_free (text);
}
-static void ui_playlist_widget_row_activated(GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn *column, gpointer user_data)
+static const AudguiListCallbacks callbacks = {
+ .get_value = get_value,
+ .get_selected = get_selected,
+ .set_selected = set_selected,
+ .select_all = select_all,
+ .activate_row = activate_row,
+ .right_click = right_click,
+ .shift_rows = shift_rows,
+ .data_type = "text/uri-list",
+ .get_data = get_data,
+ .receive_data = receive_data};
+
+static gboolean search_cb (GtkTreeModel * model, gint column, const gchar * key,
+ GtkTreeIter * iter, void * user)
{
- if (path)
+ GtkTreePath * path = gtk_tree_model_get_path (model, iter);
+ g_return_val_if_fail (path, TRUE);
+ gint row = gtk_tree_path_get_indices (path)[0];
+ g_return_val_if_fail (row >= 0, TRUE);
+ gchar * s[3] = {NULL, NULL, NULL};
+ aud_playlist_entry_describe (((PlaylistWidgetData *) user)->list, row,
+ & s[0], & s[1], & s[2], FALSE);
+ gtk_tree_path_free (path);
+
+ gchar * temp = g_utf8_strdown (key, -1);
+ gchar * * keys = g_strsplit (temp, " ", 0);
+ g_free (temp);
+
+ gint remain = 0; /* number of keys remaining to be matched */
+ for (gint j = 0; keys[j]; j ++)
{
- gint pos = playlist_get_index_from_path(path);
-
- if (pos >= 0)
- ui_playlist_widget_change_song(treeview, pos);
+ if (keys[j][0])
+ remain ++;
}
-}
+ if (! remain)
+ remain ++; /* force non-match if there are no non-blank keys */
-static gboolean ui_playlist_widget_keypress_cb(GtkWidget * widget, GdkEventKey * event, gpointer data)
-{
- switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))
+ for (gint i = 0; i < G_N_ELEMENTS (s); i ++)
{
- case 0:
- switch (event->keyval)
+ if (! s[i])
+ continue;
+
+ if (remain)
{
- case GDK_KP_Enter:
- {
- GtkTreePath *path = playlist_get_first_selected_path(GTK_TREE_VIEW(widget));
- gtk_tree_view_row_activated(GTK_TREE_VIEW(widget), path, NULL);
- return TRUE;
- }
- default:
- return FALSE;
+ temp = g_utf8_strdown (s[i], -1);
+
+ for (gint j = 0; keys[j] && remain; j ++)
+ {
+ if (keys[j][0] && strstr (temp, keys[j]))
+ {
+ keys[j][0] = 0; /* don't look for this one again */
+ remain --;
+ }
+ }
+
+ g_free (temp);
}
- break;
- case GDK_MOD1_MASK:
- {
- if ((event->keyval == GDK_Up) || (event->keyval == GDK_Down)) {
- gint focus = treeview_get_focus ((GtkTreeView *) widget);
- if (focus < 0)
- return TRUE;
-
- gint playlist = playlist_get_playlist_from_treeview ((GtkTreeView *)
- widget);
- aud_playlist_entry_set_selected (playlist, focus, TRUE);
- focus += aud_playlist_shift (playlist, focus, (event->keyval ==
- GDK_Up) ? -1 : 1);
- treeview_set_focus ((GtkTreeView *) widget, focus);
- return TRUE;
- }
- }
- default:
- return FALSE;
+
+ str_unref (s[i]);
}
- return FALSE;
+
+ g_strfreev (keys);
+ return remain ? TRUE : FALSE; /* TRUE == not matched, FALSE == matched */
}
-static gint pos[2];
+static void destroy_cb (PlaylistWidgetData * data)
+{
+ g_list_free (data->queue);
+ g_free (data);
+}
-static gboolean ui_playlist_widget_button_press_cb(GtkWidget * widget, GdkEventButton * event)
+GtkWidget * ui_playlist_widget_new (gint playlist)
{
- GtkTreePath *path = NULL;
- gint state = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK);
+ PlaylistWidgetData * data = g_malloc0 (sizeof (PlaylistWidgetData));
+ data->list = playlist;
+ data->queue = NULL;
- gtk_tree_view_get_path_at_pos ((GtkTreeView *) widget, event->x, event->y,
- & path, NULL, NULL, NULL);
+ GtkWidget * list = audgui_list_new (& callbacks, data,
+ aud_playlist_entry_count (playlist));
- /* Save the row clicked on for drag and drop. */
- if (path)
- g_object_set_data ((GObject *) widget, "row-clicked", GINT_TO_POINTER
- (gtk_tree_path_get_indices (path)[0]));
+ if (aud_get_bool ("gtkui", "custom_playlist_colors"))
+ {
+ GdkColor c;
+ gchar * tmp;
- /* Update focus */
- if (path && ! state)
- treeview_set_focus ((GtkTreeView *) widget, gtk_tree_path_get_indices
- (path)[0]);
+ tmp = aud_get_string ("gtkui", "playlist_bg");
+ gdk_color_parse (tmp, & c);
+ gtk_widget_modify_base(list, GTK_STATE_NORMAL, &c);
- AUDDBG ("Button press: type = %d, button = %d, state = %d, path = %d\n",
- event->type, event->button, state, (path != NULL) ?
- gtk_tree_path_get_indices (path)[0] : -1);
+ tmp = aud_get_string ("gtkui", "playlist_fg");
+ gdk_color_parse (tmp, & c);
+ gtk_widget_modify_text(list, GTK_STATE_NORMAL, &c);
+ }
- if (event->button == 1 && !state)
+ gchar * font = aud_get_string ("gtkui", "playlist_font");
+ if (font[0])
{
- pos[0] = event->x;
- pos[1] = event->y;
+ PangoFontDescription *desc;
+
+ desc = pango_font_description_from_string (font);
+ gtk_widget_modify_font(list, desc);
+
+ pango_font_description_free(desc);
}
+ g_free (font);
- if (event->button == 1 && state)
- goto NOT_HANDLED;
+ gtk_tree_view_set_headers_visible ((GtkTreeView *) list,
+ aud_get_bool ("gtkui", "playlist_headers"));
+ gtk_tree_view_set_search_equal_func ((GtkTreeView *) list, search_cb, data,
+ NULL);
+ g_signal_connect_swapped (list, "destroy", (GCallback) destroy_cb, data);
- if (event->type == GDK_BUTTON_PRESS && event->button == 3)
- ui_manager_popup_menu_show(GTK_MENU(playlistwin_popup_menu), event->x_root, event->y_root + 2, 3, event->time);
+ /* Disable type-to-search because it blocks CTRL-V, causing URI's to be
+ * pasted into the search box rather than added to the playlist. The search
+ * box can still be brought up with CTRL-F. */
+ gtk_tree_view_set_enable_search ((GtkTreeView *) list, FALSE);
- /* Hack: Keep GTK from messing with a multiple selection. As this blocks
- * double click, we handle that case also. */
- if (path && gtk_tree_selection_path_is_selected
- (gtk_tree_view_get_selection ((GtkTreeView *) widget), path))
+ for (gint i = 0; i < pw_num_cols; i ++)
{
- if (event->type == GDK_2BUTTON_PRESS)
- gtk_tree_view_row_activated ((GtkTreeView *) widget, path, NULL);
-
- goto HANDLED;
+ gint n = pw_cols[i];
+ audgui_list_add_column (list, pw_col_label[n] ? _(pw_col_names[n]) :
+ NULL, i, pw_col_types[n], pw_col_widths[n]);
}
-NOT_HANDLED:
- AUDDBG (" ... not handled.\n");
- if (path)
- gtk_tree_path_free (path);
- return FALSE;
-
-HANDLED:
- AUDDBG (" ... handled.\n");
- if (path)
- gtk_tree_path_free (path);
- return TRUE;
+ return list;
}
-static gboolean ui_playlist_widget_button_release_cb(GtkWidget * widget, GdkEventButton * event)
+gint ui_playlist_widget_get_playlist (GtkWidget * widget)
{
- GtkTreePath *path = NULL;
- GtkTreeSelection *sel = NULL;
- gint state = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK);
-
- AUDDBG ("Button release: type = %d, button = %d, state = %d\n", event->type,
- event->button, state);
-
- if (event->button == 1 && !state &&
- pos[0] == event->x && pos[1] == event->y)
- {
- gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), event->x, event->y, &path, NULL, NULL, NULL);
- sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
-
- if (path == NULL)
- return FALSE;
-
- gtk_tree_selection_unselect_all(sel);
- gtk_tree_selection_select_path(sel, path);
-
- gtk_tree_path_free(path);
- }
+ PlaylistWidgetData * data = audgui_list_get_user (widget);
+ g_return_val_if_fail (data, -1);
+ return data->list;
+}
- return FALSE;
+void ui_playlist_widget_set_playlist (GtkWidget * widget, gint list)
+{
+ PlaylistWidgetData * data = audgui_list_get_user (widget);
+ g_return_if_fail (data);
+ data->list = list;
}
-static GtkTreeViewColumn * ui_playlist_widget_set_column (GtkWidget * treeview,
- gchar * title, gint column_id, gboolean expand)
+static void update_queue (GtkWidget * widget, PlaylistWidgetData * data)
{
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
+ for (GList * node = data->queue; node; node = node->next)
+ audgui_list_update_rows (widget, GPOINTER_TO_INT (node->data), 1);
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes (title, renderer, "text",
- column_id, "weight", multi_column_view ? PLAYLIST_MULTI_COLUMN_WEIGHT :
- PLAYLIST_COLUMN_WEIGHT, NULL);
+ g_list_free (data->queue);
+ data->queue = NULL;
- if (expand)
- {
- gtk_tree_view_column_set_resizable (column, TRUE);
- gtk_tree_view_column_set_expand (column, TRUE);
- g_object_set ((GObject *) renderer, "ellipsize-set", TRUE, "ellipsize",
- PANGO_ELLIPSIZE_END, NULL);
- }
- else
- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_GROW_ONLY);
+ for (gint i = aud_playlist_queue_count (data->list); i --; )
+ data->queue = g_list_prepend (data->queue, GINT_TO_POINTER
+ (aud_playlist_queue_get_entry (data->list, i)));
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- return column;
+ for (GList * node = data->queue; node; node = node->next)
+ audgui_list_update_rows (widget, GPOINTER_TO_INT (node->data), 1);
}
-GtkWidget *ui_playlist_widget_new(gint playlist)
+void ui_playlist_widget_update (GtkWidget * widget, gint type, gint at,
+ gint count)
{
- GtkWidget *treeview;
- UiPlaylistModel *model;
- GtkTreeSelection *selection;
- const GtkTargetEntry target_entry[] = {
- {"text/uri-list", 0, 0}
- };
-
- model = ui_playlist_model_new(playlist);
- treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
- g_object_unref(model);
+ PlaylistWidgetData * data = audgui_list_get_user (widget);
+ g_return_if_fail (data);
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
-
- if (multi_column_view)
- {
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), TRUE);
-
- g_object_set_data ((GObject *) treeview, "number column",
- ui_playlist_widget_set_column (treeview, NULL,
- PLAYLIST_MULTI_COLUMN_NUM, FALSE));
-
- ui_playlist_widget_set_column (treeview, "Artist",
- PLAYLIST_MULTI_COLUMN_ARTIST, TRUE);
- ui_playlist_widget_set_column (treeview, "Album",
- PLAYLIST_MULTI_COLUMN_ALBUM, TRUE);
- ui_playlist_widget_set_column (treeview, "No",
- PLAYLIST_MULTI_COLUMN_TRACK_NUM, FALSE);
- ui_playlist_widget_set_column (treeview, "Title",
- PLAYLIST_MULTI_COLUMN_TITLE, TRUE);
- ui_playlist_widget_set_column (treeview, "Queue",
- PLAYLIST_MULTI_COLUMN_QUEUED, FALSE);
- ui_playlist_widget_set_column (treeview, "Time",
- PLAYLIST_MULTI_COLUMN_TIME, FALSE);
- }
- else
+ if (type >= PLAYLIST_UPDATE_STRUCTURE)
{
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
-
- g_object_set_data ((GObject *) treeview, "number column",
- ui_playlist_widget_set_column (treeview, NULL,
- PLAYLIST_COLUMN_NUM, FALSE));
-
- ui_playlist_widget_set_column (treeview, NULL, PLAYLIST_COLUMN_TEXT,
- TRUE);
- ui_playlist_widget_set_column (treeview, NULL, PLAYLIST_COLUMN_QUEUED,
- FALSE);
- ui_playlist_widget_set_column (treeview, NULL, PLAYLIST_COLUMN_TIME,
- FALSE);
- }
-
- if (! aud_cfg->show_numbers_in_pl)
- gtk_tree_view_column_set_visible (g_object_get_data ((GObject *)
- treeview, "number column"), FALSE);
-
- gtk_drag_dest_set(treeview, GTK_DEST_DEFAULT_ALL, target_entry, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE);
- gtk_drag_source_set(treeview, GDK_BUTTON1_MASK, target_entry, 1, GDK_ACTION_MOVE);
+ gint diff = aud_playlist_entry_count (data->list) -
+ audgui_list_row_count (widget);
- g_signal_connect(treeview, "row-activated", G_CALLBACK(ui_playlist_widget_row_activated), NULL);
+ if (diff > 0)
+ audgui_list_insert_rows (widget, at, diff);
+ else if (diff < 0)
+ audgui_list_delete_rows (widget, at, -diff);
- g_signal_connect(treeview, "key-press-event", G_CALLBACK(ui_playlist_widget_keypress_cb), NULL);
- g_signal_connect(treeview, "button-press-event", G_CALLBACK(ui_playlist_widget_button_press_cb), NULL);
- g_signal_connect(treeview, "button-release-event", G_CALLBACK(ui_playlist_widget_button_release_cb), NULL);
-
- g_signal_connect(treeview, "drag-begin", G_CALLBACK(_ui_playlist_widget_drag_begin), NULL);
- g_signal_connect(treeview, "drag-motion", G_CALLBACK(_ui_playlist_widget_drag_motion), NULL);
- g_signal_connect (treeview, "drag-drop", (GCallback) drag_drop_cb, NULL);
- g_signal_connect (treeview, "drag-data-received", (GCallback) drag_data_cb,
- NULL);
- g_signal_connect (treeview, "drag-end", (GCallback) drag_end_cb, NULL);
+ audgui_list_set_highlight (widget, aud_playlist_get_position (data->list));
+ }
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
- g_signal_connect (selection, "changed", (GCallback)
- _ui_playlist_widget_selection_changed, treeview);
+ if (type >= PLAYLIST_UPDATE_METADATA)
+ audgui_list_update_rows (widget, at, count);
- return treeview;
-}
-
-void ui_playlist_widget_block_updates (GtkWidget * widget, gboolean block)
-{
- if (block)
- g_signal_handlers_block_by_func (gtk_tree_view_get_selection
- ((GtkTreeView *) widget), (GCallback)
- _ui_playlist_widget_selection_changed, widget);
- else
- g_signal_handlers_unblock_by_func (gtk_tree_view_get_selection
- ((GtkTreeView *) widget), (GCallback)
- _ui_playlist_widget_selection_changed, widget);
+ audgui_list_update_selection (widget, at, count);
+ update_queue (widget, data);
}
diff --git a/src/gtkui/ui_playlist_widget.h b/src/gtkui/ui_playlist_widget.h
index 8494872..4026d85 100644
--- a/src/gtkui/ui_playlist_widget.h
+++ b/src/gtkui/ui_playlist_widget.h
@@ -1,29 +1,47 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2008 Tomasz Moń <desowin@gmail.com>
+/*
+ * ui-playlist-widget.h
+ * Copyright 2011 John Lindgren
*
- * 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; under version 3 of the License.
+ * This file is part of Audacious.
*
- * 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.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses>.
+ * Audacious 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.
*
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
*/
#ifndef UI_PLAYLIST_WIDGET_H
#define UI_PLAYLIST_WIDGET_H
#include <gtk/gtk.h>
-#include <audacious/plugin.h>
-GtkWidget *ui_playlist_widget_new(gint playlist);
-void ui_playlist_widget_block_updates (GtkWidget * widget, gboolean block);
+GtkWidget * ui_playlist_widget_new (gint playlist);
+gint ui_playlist_widget_get_playlist (GtkWidget * widget);
+void ui_playlist_widget_set_playlist (GtkWidget * widget, gint playlist);
+void ui_playlist_widget_update (GtkWidget * widget, gint type, gint at,
+ gint count);
+
+enum {PW_COL_NUMBER, PW_COL_TITLE, PW_COL_ARTIST, PW_COL_YEAR, PW_COL_ALBUM,
+ PW_COL_TRACK, PW_COL_QUEUED, PW_COL_LENGTH, PW_COL_PATH, PW_COL_FILENAME,
+ PW_COL_CUSTOM, PW_COL_BITRATE, PW_COLS};
+
+extern const gchar * const pw_col_names[PW_COLS];
+
+extern gint pw_num_cols;
+extern gint pw_cols[PW_COLS];
+
+void pw_col_init (void);
+void pw_col_choose (void);
+void pw_col_save (void);
+void pw_col_cleanup (void);
#endif
diff --git a/src/gtkui/ui_statusbar.c b/src/gtkui/ui_statusbar.c
index 848e77b..8b7412d 100644
--- a/src/gtkui/ui_statusbar.c
+++ b/src/gtkui/ui_statusbar.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2010 Audacious development team
+ * Copyright (C) 2010-2011 Audacious development team
*
* 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
@@ -18,7 +18,7 @@
*/
#include <glib.h>
-#include <glib/gi18n.h>
+#include <audacious/i18n.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
@@ -31,8 +31,12 @@
#include <audacious/playlist.h>
#include <libaudcore/hook.h>
+#include "config.h"
#include "ui_statusbar.h"
+#define APPEND(b, ...) snprintf (b + strlen (b), sizeof b - strlen (b), \
+ __VA_ARGS__)
+
static void
ui_statusbar_update_playlist_length(gpointer unused, GtkWidget *label)
{
@@ -40,8 +44,8 @@ ui_statusbar_update_playlist_length(gpointer unused, GtkWidget *label)
gint64 selection, total;
gchar *sel_text, *tot_text, *text;
- total = aud_playlist_get_total_length (playlist, TRUE) / 1000;
- selection = aud_playlist_get_selected_length (playlist, TRUE) / 1000;
+ total = aud_playlist_get_total_length (playlist) / 1000;
+ selection = aud_playlist_get_selected_length (playlist) / 1000;
if (selection >= 3600)
sel_text = g_strdup_printf ("%" PRId64 ":%02" PRId64 ":%02" PRId64,
@@ -68,41 +72,58 @@ ui_statusbar_update_playlist_length(gpointer unused, GtkWidget *label)
static void
ui_statusbar_info_change(gpointer unused, GtkWidget *label)
{
- gint bitrate, samplerate, channels;
- gchar *text, *ch_text;
- const Tuple *tuple;
- gint playlist, entry;
- const gchar *codec;
-
/* may be called asynchronously */
if (!aud_drct_get_playing())
return;
- playlist = aud_playlist_get_active();
- entry = aud_playlist_get_position(playlist);
- tuple = aud_playlist_entry_get_tuple (playlist, entry, FALSE);
- codec = tuple != NULL ? tuple_get_string(tuple, FIELD_CODEC, NULL) : "???";
+ gint playlist = aud_playlist_get_playing ();
+ Tuple * tuple = aud_playlist_entry_get_tuple (playlist,
+ aud_playlist_get_position (playlist), FALSE);
+ gchar * codec = tuple ? tuple_get_str (tuple, FIELD_CODEC, NULL) :
+ NULL;
+ if (tuple)
+ tuple_unref (tuple);
+ gint bitrate, samplerate, channels;
aud_drct_get_info(&bitrate, &samplerate, &channels);
- switch (channels)
+ gchar buf[256];
+ buf[0] = 0;
+
+ if (codec)
{
- case 1:
- ch_text = g_strdup(_("mono"));
- break;
- case 2:
- ch_text = g_strdup(_("stereo"));
- break;
- default:
- ch_text = g_strdup_printf(_("%d channels"), channels);
- break;
+ APPEND (buf, "%s", codec);
+ if (channels > 0 || samplerate > 0 || bitrate > 0)
+ APPEND (buf, ", ");
}
- text = g_strdup_printf(_("%s: %d kbps, %d Hz, %s"), codec, bitrate / 1000, samplerate, ch_text);
- gtk_label_set_text(GTK_LABEL(label), text);
+ str_unref(codec);
- g_free(text);
- g_free(ch_text);
+ if (channels > 0)
+ {
+ if (channels == 1)
+ APPEND (buf, _("mono"));
+ else if (channels == 2)
+ APPEND (buf, _("stereo"));
+ else
+ APPEND (buf, ngettext ("%d channel", "%d channels", channels),
+ channels);
+
+ if (samplerate > 0 || bitrate > 0)
+ APPEND (buf, ", ");
+ }
+
+ if (samplerate > 0)
+ {
+ APPEND (buf, "%d kHz", samplerate / 1000);
+ if (bitrate > 0)
+ APPEND (buf, ", ");
+ }
+
+ if (bitrate > 0)
+ APPEND (buf, _("%d kbps"), bitrate / 1000);
+
+ gtk_label_set_text ((GtkLabel *) label, buf);
}
static void
@@ -113,10 +134,11 @@ ui_statusbar_playback_stop(gpointer unused, GtkWidget *label)
static void ui_statusbar_destroy_cb(GtkWidget *widget, gpointer user_data)
{
+ hook_dissociate("playback ready", (HookFunction) ui_statusbar_info_change);
hook_dissociate("info change", (HookFunction) ui_statusbar_info_change);
hook_dissociate("playback stop", (HookFunction) ui_statusbar_playback_stop);
+ hook_dissociate("playlist activate", (HookFunction) ui_statusbar_update_playlist_length);
hook_dissociate("playlist update", (HookFunction) ui_statusbar_update_playlist_length);
- hook_dissociate("info change", (HookFunction) ui_statusbar_update_playlist_length);
}
GtkWidget *
@@ -131,6 +153,7 @@ ui_statusbar_new(void)
gtk_label_set_ellipsize ((GtkLabel *) status, PANGO_ELLIPSIZE_END);
gtk_box_pack_start(GTK_BOX(hbox), status, TRUE, TRUE, 5);
+ hook_associate("playback ready", (HookFunction) ui_statusbar_info_change, status);
hook_associate("info change", (HookFunction) ui_statusbar_info_change, status);
hook_associate("playback stop", (HookFunction) ui_statusbar_playback_stop, status);
@@ -138,15 +161,13 @@ ui_statusbar_new(void)
gtk_box_pack_start(GTK_BOX(hbox), length, FALSE, FALSE, 5);
ui_statusbar_update_playlist_length(NULL, length);
+ hook_associate("playlist activate", (HookFunction) ui_statusbar_update_playlist_length, length);
hook_associate("playlist update", (HookFunction) ui_statusbar_update_playlist_length, length);
- hook_associate("info change", (HookFunction) ui_statusbar_update_playlist_length, length);
g_signal_connect(G_OBJECT(hbox), "destroy", G_CALLBACK(ui_statusbar_destroy_cb), NULL);
- if (aud_drct_get_playing())
- {
+ if (aud_drct_get_playing() && aud_drct_get_ready())
ui_statusbar_info_change(NULL, status);
- }
return hbox;
}
diff --git a/src/gtkui/util.c b/src/gtkui/util.c
deleted file mode 100644
index 29971ff..0000000
--- a/src/gtkui/util.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2008 Audacious development team
- *
- * Based on BMP:
- * Copyright (C) 2003-2004 BMP development team.
- *
- * Based on XMMS:
- * Copyright (C) 1998-2003 XMMS development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include <gtk/gtk.h>
-#include <libaudcore/hook.h>
-
-#include "util.h"
-
-GtkWidget *make_filebrowser(const gchar * title, gboolean save)
-{
- GtkWidget *dialog;
- GtkWidget *button;
-
- g_return_val_if_fail(title != NULL, NULL);
-
- dialog = gtk_file_chooser_dialog_new(title, NULL, save ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL);
-
- button = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
-
- gtk_button_set_use_stock(GTK_BUTTON(button), TRUE);
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
-
- button = gtk_dialog_add_button(GTK_DIALOG(dialog), save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT);
-
- gtk_button_set_use_stock(GTK_BUTTON(button), TRUE);
- gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
-
- return dialog;
-}
-
-void check_set(GtkActionGroup * action_group, const gchar * action_name, gboolean is_on)
-{
- GtkAction * action = gtk_action_group_get_action (action_group, action_name);
-
- g_return_if_fail (action != NULL);
-
- gtk_toggle_action_set_active ((GtkToggleAction *) action, is_on);
- hook_call (action_name, GINT_TO_POINTER (is_on));
-}
diff --git a/src/hotkey/Makefile b/src/hotkey/Makefile
index b659f28..bfa042f 100644
--- a/src/hotkey/Makefile
+++ b/src/hotkey/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${MOWGLI_CFLAGS} ${GLIB_CFLAGS} -I../.. -I..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -I..
LIBS += ${GLIB_LIBS} ${GTK_LIBS} -lX11
diff --git a/src/hotkey/gui.c b/src/hotkey/gui.c
index 7982df1..9b863cf 100644
--- a/src/hotkey/gui.c
+++ b/src/hotkey/gui.c
@@ -41,6 +41,7 @@
#include <audacious/plugin.h>
#include <audacious/i18n.h>
+#include <audacious/gtk-compat.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -79,7 +80,9 @@ static gchar* event_desc[EVENT_MAX] = {
[EVENT_VOL_DOWN] = N_("Volume Down"),
[EVENT_JUMP_TO_FILE] = N_("Jump to File"),
[EVENT_TOGGLE_WIN] = N_("Toggle Player Windows"),
- [EVENT_SHOW_AOSD] = N_("Show On-Screen-Display")
+ [EVENT_SHOW_AOSD] = N_("Show On-Screen-Display"),
+ [EVENT_TOGGLE_REPEAT] = N_("Toggle Repeat"),
+ [EVENT_TOGGLE_SHUFFLE] = N_("Toggle Shuffle"),
};
@@ -318,12 +321,12 @@ KeyControls* add_event_controls(KeyControls* list,
controls->hotkey.event = 0;
}
- controls->combobox = gtk_combo_box_new_text();
+ controls->combobox = gtk_combo_box_text_new();
for (i=0;i<EVENT_MAX;i++)
{
- gtk_combo_box_append_text( GTK_COMBO_BOX(controls->combobox), _(event_desc[i]) );
+ gtk_combo_box_text_append_text((GtkComboBoxText *) controls->combobox, _(event_desc[i]));
}
- gtk_combo_box_set_active( GTK_COMBO_BOX(controls->combobox), controls->hotkey.event);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(controls->combobox), controls->hotkey.event);
gtk_table_attach (GTK_TABLE (table), controls->combobox, 0, 1, row, row+1,
(GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (GTK_EXPAND), 0, 0);
@@ -331,7 +334,7 @@ KeyControls* add_event_controls(KeyControls* list,
controls->keytext = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table), controls->keytext, 1, 2, row, row+1,
(GtkAttachOptions) (GTK_FILL|GTK_EXPAND), (GtkAttachOptions) (GTK_EXPAND), 0, 0);
- gtk_entry_set_editable (GTK_ENTRY (controls->keytext), FALSE);
+ gtk_editable_set_editable(GTK_EDITABLE(controls->keytext), FALSE);
set_keytext(controls->keytext, controls->hotkey.key, controls->hotkey.mask, controls->hotkey.type);
diff --git a/src/hotkey/plugin.c b/src/hotkey/plugin.c
index 1b42cfe..ed87ede 100644
--- a/src/hotkey/plugin.c
+++ b/src/hotkey/plugin.c
@@ -36,14 +36,17 @@
#include <config.h>
#include <stdio.h>
+#include <stdlib.h>
+
#include <X11/XF86keysym.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
-#include <audacious/configdb.h>
#include <audacious/drct.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudcore/hook.h>
@@ -53,7 +56,7 @@
/* func defs */
-static void init (void);
+static gboolean init (void);
static void cleanup (void);
@@ -61,21 +64,14 @@ static void cleanup (void);
static PluginConfig plugin_cfg;
static gboolean loaded = FALSE;
-
-
-static GeneralPlugin audacioushotkey =
-{
- .description = "Global Hotkey",
+AUD_GENERAL_PLUGIN
+(
+ .name = "Global Hotkey",
.init = init,
.about = show_about,
.configure = show_configure,
.cleanup = cleanup
-};
-
-GeneralPlugin *hotkey_gplist[] = { &audacioushotkey, NULL };
-SIMPLE_GENERAL_PLUGIN(hotkey, hotkey_gplist);
-
-
+)
PluginConfig* get_config(void)
{
@@ -86,13 +82,20 @@ PluginConfig* get_config(void)
/*
* plugin activated
*/
-static void init (void)
+static gboolean init (void)
{
+ if (! gtk_init_check (NULL, NULL))
+ {
+ fprintf (stderr, "hotkey: GTK+ initialization failed.\n");
+ return FALSE;
+ }
+
setup_filter();
load_config ( );
grab_keys ( );
loaded = TRUE;
+ return TRUE;
}
/* handle keys */
@@ -237,14 +240,14 @@ gboolean handle_keyevent (EVENT event)
/* Open Jump-To-File dialog */
if (event == EVENT_JUMP_TO_FILE)
{
- hook_call ("interface show jump to track", NULL);
+ aud_interface_show_jump_to_track ();
return TRUE;
}
/* Toggle Windows */
if (event == EVENT_TOGGLE_WIN)
{
- hook_call ("interface toggle visibility", NULL);
+ aud_interface_show (! (aud_interface_is_shown () && aud_interface_is_focused ()));
return TRUE;
}
@@ -254,6 +257,10 @@ gboolean handle_keyevent (EVENT event)
hook_call("aosd toggle", NULL);
return TRUE;
}
+ else if (event == EVENT_TOGGLE_REPEAT)
+ aud_set_bool (NULL, "repeat", ! aud_get_bool (NULL, "repeat"));
+ else if (event == EVENT_TOGGLE_SHUFFLE)
+ aud_set_bool (NULL, "shuffle", ! aud_get_bool (NULL, "shuffle"));
return FALSE;
}
@@ -306,7 +313,6 @@ void load_defaults (void)
/* load plugin configuration */
void load_config (void)
{
- mcs_handle_t *cfdb;
HotkeyConfiguration *hotkey;
int i,max;
@@ -314,22 +320,20 @@ void load_config (void)
plugin_cfg.vol_increment = 4;
plugin_cfg.vol_decrement = 4;
- /* open configuration database */
- cfdb = aud_cfg_db_open ( );
hotkey = &(plugin_cfg.first);
hotkey->next = NULL;
hotkey->key = 0;
hotkey->mask = 0;
hotkey->event = 0;
hotkey->type = TYPE_KEY;
- max = 0;
- aud_cfg_db_get_int (cfdb, "globalHotkey", "NumHotkeys", &max);
+
+ max = aud_get_int ("globalHotkey", "NumHotkeys");
if (max == 0)
load_defaults();
else for (i=0; i<max; i++)
{
gchar *text = NULL;
- gint value;
+
if (hotkey->key) {
hotkey->next = (HotkeyConfiguration*)
malloc(sizeof (HotkeyConfiguration));
@@ -341,64 +345,56 @@ void load_config (void)
hotkey->type = TYPE_KEY;
}
text = g_strdup_printf("Hotkey_%d_key", i);
- aud_cfg_db_get_int (cfdb, "globalHotkey", text, &(hotkey->key));
+ hotkey->key = aud_get_int ("globalHotkey", text);
g_free(text);
text = g_strdup_printf("Hotkey_%d_mask", i);
- aud_cfg_db_get_int (cfdb, "globalHotkey", text, &(hotkey->mask));
+ hotkey->mask = aud_get_int ("globalHotkey", text);
g_free(text);
text = g_strdup_printf("Hotkey_%d_type", i);
- aud_cfg_db_get_int (cfdb, "globalHotkey", text, &(hotkey->type));
+ hotkey->type = aud_get_int ("globalHotkey", text);
g_free(text);
text = g_strdup_printf("Hotkey_%d_event", i);
- value = (gint)hotkey->event;
- aud_cfg_db_get_int (cfdb, "globalHotkey", text, &value);
- hotkey->event = (EVENT) value;
+ hotkey->event = aud_get_int ("globalHotkey", text);
g_free(text);
}
-
- aud_cfg_db_close (cfdb);
}
/* save plugin configuration */
void save_config (void)
{
- mcs_handle_t *cfdb;
int max;
HotkeyConfiguration *hotkey;
- /* open configuration database */
- cfdb = aud_cfg_db_open ( );
hotkey = &(plugin_cfg.first);
max = 0;
while (hotkey) {
gchar *text = NULL;
if (hotkey->key) {
text = g_strdup_printf("Hotkey_%d_key", max);
- aud_cfg_db_set_int (cfdb, "globalHotkey", text, hotkey->key);
+ aud_set_int ("globalHotkey", text, hotkey->key);
g_free(text);
text = g_strdup_printf("Hotkey_%d_mask", max);
- aud_cfg_db_set_int (cfdb, "globalHotkey", text, hotkey->mask);
+ aud_set_int ("globalHotkey", text, hotkey->mask);
g_free(text);
text = g_strdup_printf("Hotkey_%d_type", max);
- aud_cfg_db_set_int (cfdb, "globalHotkey", text, hotkey->type);
+ aud_set_int ("globalHotkey", text, hotkey->type);
g_free(text);
text = g_strdup_printf("Hotkey_%d_event", max);
- aud_cfg_db_set_int (cfdb, "globalHotkey", text, hotkey->event);
+ aud_set_int ("globalHotkey", text, hotkey->event);
g_free(text);
max++;
}
hotkey = hotkey->next;
}
- aud_cfg_db_set_int (cfdb, "globalHotkey", "NumHotkeys", max);
- aud_cfg_db_close (cfdb);
+ aud_set_int ("globalHotkey", "NumHotkeys", max);
}
static void cleanup (void)
diff --git a/src/hotkey/plugin.h b/src/hotkey/plugin.h
index 77c76c4..3745d14 100644
--- a/src/hotkey/plugin.h
+++ b/src/hotkey/plugin.h
@@ -22,7 +22,10 @@ typedef enum {
EVENT_TOGGLE_WIN,
EVENT_SHOW_AOSD,
- EVENT_MAX
+ EVENT_TOGGLE_REPEAT,
+ EVENT_TOGGLE_SHUFFLE,
+
+ EVENT_MAX
} EVENT;
@@ -36,7 +39,7 @@ typedef struct _HotkeyConfiguration {
typedef struct {
gint vol_increment;
gint vol_decrement;
-
+
/* keyboard */
HotkeyConfiguration first;
} PluginConfig;
diff --git a/src/jack/Makefile b/src/jack/Makefile
index 68fe5cf..887f045 100644
--- a/src/jack/Makefile
+++ b/src/jack/Makefile
@@ -1,8 +1,8 @@
PLUGIN = jackout${PLUGIN_SUFFIX}
SRCS = jack.c \
- configure.c \
bio2jack.c
+# configure.c \
include ../../buildsys.mk
include ../../extra.mk
@@ -10,5 +10,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${SAMPLERATE_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${JACK_LIBS} ${SAMPLERATE_LIBS} -lm -pthread
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${PTHREAD_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${JACK_LIBS} -lsamplerate ${PTHREAD_LIBS} -lm
diff --git a/src/jack/bio2jack.c b/src/jack/bio2jack.c
index fcec865..0aae004 100644
--- a/src/jack/bio2jack.c
+++ b/src/jack/bio2jack.c
@@ -138,8 +138,6 @@ typedef struct jack_driver_s
unsigned long bytes_per_jack_output_frame; /* (num_output_channels * bits_per_channel) / 8 */
unsigned long bytes_per_jack_input_frame; /* (num_input_channels * bits_per_channel) / 8 */
- unsigned long latencyMS; /* latency in ms between writing and actual audio output of the written data */
-
long clientBytesInJack; /* number of INPUT bytes(from the client of bio2jack) we wrote to jack(not necessary the number of bytes we wrote to jack) */
long jack_buffer_size; /* size of the buffer jack will pass in to the process callback */
@@ -266,7 +264,7 @@ TimeValDifference(struct timeval *start, struct timeval *end)
trying to trace mutexes it's more important to know *who* called us than just that
we were called. This uses from pre-processor trickery so that the fprintf is actually
placed in the function making the getDriver call. Thus, the __FUNCTION__ and __LINE__
- macros will actually reference our caller, rather than getDriver. The reason the
+ macros will actually reference our caller, rather than getDriver. The reason the
fprintf call is passes as a parameter is because this macro has to still return a
jack_driver_t* and we want to log both before *and* after the getDriver call for
easier detection of blocked calls.
@@ -1012,11 +1010,11 @@ JACK_OpenDevice(jack_driver_t * drv)
/* try to become a client of the JACK server */
TRACE("client name '%s'\n", our_client_name);
- if((drv->client = jack_client_new(our_client_name)) == 0)
+ if((drv->client = jack_client_open(our_client_name, JackNullOption | JackNoStartServer, NULL)) == 0)
{
/* try once more */
TRACE("trying once more to jack_client_new");
- if((drv->client = jack_client_new(our_client_name)) == 0)
+ if((drv->client = jack_client_open(our_client_name, JackNullOption | JackNoStartServer, NULL)) == 0)
{
ERR("jack server not running?\n");
free(our_client_name);
@@ -1455,7 +1453,7 @@ JACK_Reset(int deviceID)
* deviceID is set to the opened device
* if client is non-zero and in_use is FALSE then just set in_use to TRUE
*
- * return value is zero upon success, non-zero upon failure
+ * return value is zero upon success, non-zero upon failure
*
* if ERR_RATE_MISMATCH (*rate) will be updated with the jack servers rate
*/
@@ -1571,7 +1569,7 @@ JACK_OpenEx(int *deviceID, unsigned int bits_per_channel,
drv->jack_output_port_flags = jack_port_flags | JackPortIsInput; /* port must be input(ie we can put data into it), so mask this in */
drv->jack_input_port_flags = jack_port_flags | JackPortIsOutput; /* port must be output(ie we can get data from it), so mask this in */
- /* check that we have the correct number of port names
+ /* check that we have the correct number of port names
FIXME?: not sure how we should handle output ports vs input ports....
*/
if((jack_port_name_count > 1)
@@ -1701,29 +1699,6 @@ JACK_OpenEx(int *deviceID, unsigned int bits_per_channel,
DEBUG("sizeof(sample_t) == %d\n", sizeof(sample_t));
- int periodSize = jack_get_buffer_size(drv->client);
- int periods = 0;
- /* FIXME: maybe we should keep different latency values for input vs output? */
- if(drv->num_output_channels > 0)
- {
- periods = jack_port_get_total_latency(drv->client,
- drv->output_port[0]) / periodSize;
- drv->latencyMS = periodSize * periods * 1000 / (drv->jack_sample_rate *
- (drv->bits_per_channel / 8 *
- drv->num_output_channels));
- }
- else if(drv->num_input_channels > 0)
- {
- periods = jack_port_get_total_latency(drv->client,
- drv->input_port[0]) / periodSize;
- drv->latencyMS =
- periodSize * periods * 1000 / (drv->jack_sample_rate *
- (drv->bits_per_channel / 8 *
- drv->num_input_channels));
- }
-
- TRACE("drv->latencyMS == %ldms\n", drv->latencyMS);
-
*deviceID = drv->deviceID; /* set the deviceID for the caller */
releaseDriver(drv);
pthread_mutex_unlock(&device_mutex);
@@ -1810,7 +1785,7 @@ JACK_Write(int deviceID, unsigned char *data, unsigned long bytes)
TRACE("frames free == %ld, bytes = %lu\n", frames_free, bytes);
TRACE("state = '%s'\n", DEBUGSTATE(drv->state));
- /* if we are currently STOPPED we should start playing now...
+ /* if we are currently STOPPED we should start playing now...
do this before the check for bytes == 0 since some clients like
to write 0 bytes the first time out */
if(drv->state == STOPPED)
@@ -2264,8 +2239,6 @@ JACK_GetBytesFreeSpace(int deviceID)
return_val = JACK_GetBytesFreeSpaceFromDriver(drv);
releaseDriver(drv);
- if(return_val < 0) return_val = 0;
-
TRACE("deviceID(%d), retval == %ld\n", deviceID, return_val);
return return_val;
@@ -2311,7 +2284,9 @@ JACK_GetPositionFromDriver(jack_driver_t * drv, enum pos_enum position,
long elapsedMS;
double sec2msFactor = 1000;
+#if TRACE_ENABLE
char *type_str = "UNKNOWN type";
+#endif
/* if we are reset we should return a position of 0 */
if(drv->state == RESET)
@@ -2322,15 +2297,21 @@ JACK_GetPositionFromDriver(jack_driver_t * drv, enum pos_enum position,
if(type == WRITTEN)
{
+#if TRACE_ENABLE
type_str = "WRITTEN";
+#endif
return_val = drv->client_bytes;
} else if(type == WRITTEN_TO_JACK)
{
+#if TRACE_ENABLE
type_str = "WRITTEN_TO_JACK";
+#endif
return_val = drv->written_client_bytes;
} else if(type == PLAYED) /* account for the elapsed time for the played_bytes */
{
+#if TRACE_ENABLE
type_str = "PLAYED";
+#endif
return_val = drv->played_client_bytes;
gettimeofday(&now, 0);
@@ -2607,23 +2588,13 @@ JACK_GetJackOutputLatency(int deviceID)
long return_val = 0;
if(drv->client && drv->num_output_channels)
- return_val = jack_port_get_total_latency(drv->client, drv->output_port[0]);
-
- TRACE("got latency of %ld frames\n", return_val);
-
- releaseDriver(drv);
- return return_val;
-}
-
-/* Get the latency, in frames, of jack */
-long
-JACK_GetJackInputLatency(int deviceID)
-{
- jack_driver_t *drv = getDriver(deviceID);
- long return_val = 0;
-
- if(drv->client && drv->num_input_channels)
- return_val = jack_port_get_total_latency(drv->client, drv->input_port[0]);
+ {
+ /* Disclaimer: I have no experience with JACK and don't know if this is
+ * correct. -jlindgren */
+ jack_latency_range_t range;
+ jack_port_get_latency_range(drv->output_port[0], JackPlaybackLatency, & range);
+ return_val = (range.min + range.max) / 2;
+ }
TRACE("got latency of %ld frames\n", return_val);
diff --git a/src/jack/bio2jack.h b/src/jack/bio2jack.h
index 71eb93a..cbb3b16 100644
--- a/src/jack/bio2jack.h
+++ b/src/jack/bio2jack.h
@@ -81,7 +81,6 @@ void JACK_SetPosition(int deviceID, enum pos_enum position, long value);
long JACK_GetJackLatency(int deviceID); /* deprectated, you probably want JACK_GetJackOutputLatency */
long JACK_GetJackOutputLatency(int deviceID); /* return the output latency in frames */
-long JACK_GetJackInputLatency(int deviceID); /* return the input latency in frames */
int JACK_SetState(int deviceID, enum status_enum state); /* playing, paused, stopped */
enum status_enum JACK_GetState(int deviceID);
@@ -136,7 +135,7 @@ enum JACK_PORT_CONNECTION_MODE
};
/* set the mode for port connections */
-/* defaults to CONNECT_ALL */
+/* defaults to CONNECT_ALL */
void JACK_SetPortConnectionMode(enum JACK_PORT_CONNECTION_MODE mode);
#ifdef __cplusplus
diff --git a/src/jack/configure.c b/src/jack/configure.c
index daf0fe5..ff1ed61 100644
--- a/src/jack/configure.c
+++ b/src/jack/configure.c
@@ -24,9 +24,9 @@
#include "jack.h"
-#include <audacious/configdb.h>
-#include <audacious/plugin.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <audacious/plugin.h>
#include "config.h"
@@ -47,18 +47,13 @@ static GtkWidget *port_connection_mode_combo;
static void configure_win_ok_cb(GtkWidget * w, gpointer data)
{
- mcs_handle_t *cfgfile;
-
jack_cfg.isTraceEnabled = (gint) GTK_CHECK_BUTTON(GTK_isTraceEnabled)->toggle_button.active;
jack_cfg.port_connection_mode = GET_CHARS(GTK_COMBO(port_connection_mode_combo)->entry);
jack_set_port_connection_mode(); /* update the connection mode */
- cfgfile = aud_cfg_db_open();
-
- aud_cfg_db_set_bool(cfgfile, "jack", "isTraceEnabled", jack_cfg.isTraceEnabled);
- aud_cfg_db_set_string(cfgfile, "jack", "port_connection_mode", jack_cfg.port_connection_mode);
- aud_cfg_db_close(cfgfile);
+ aud_set_bool ("jack", "isTraceEnabled", jack_cfg.isTraceEnabled);
+ aud_set_string ("jack", "port_connection_mode", jack_cfg.port_connection_mode);
gtk_widget_destroy(configure_win);
}
diff --git a/src/jack/jack.c b/src/jack/jack.c
index fd04335..e14beff 100644
--- a/src/jack/jack.c
+++ b/src/jack/jack.c
@@ -13,8 +13,8 @@
#include "jack.h"
#include <string.h>
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -55,6 +55,7 @@ static format_info_t effect;
static format_info_t output;
static gboolean output_opened; /* true if we have a connection to jack */
+static gboolean paused;
/* Giacomo's note: removed the destructor from the original xmms-jack, cause
@@ -131,6 +132,11 @@ static gint jack_get_written_time(void)
return return_val;
}
+static void jack_set_written_time(gint time)
+{
+ JACK_SetPosition(driver, MILLISECONDS, time);
+}
+
/* Return the current number of milliseconds of audio data that has */
/* been played out of the audio device, not including the buffer */
@@ -152,6 +158,7 @@ static gint jack_get_output_time(void)
/* returns TRUE if we are currently playing */
/* NOTE: this was confusing at first BUT, if the device is open and there */
/* is no more audio to be played, then the device is NOT PLAYING */
+#if 0
static gint jack_playing(void)
{
gint return_val;
@@ -171,7 +178,7 @@ static gint jack_playing(void)
TRACE("returning %d\n", return_val);
return return_val;
}
-
+#endif
void jack_set_port_connection_mode()
{
@@ -192,32 +199,22 @@ void jack_set_port_connection_mode()
JACK_SetPortConnectionMode(mode);
}
+static const gchar * const jack_defaults[] = {
+ "isTraceEnabled", "FALSE",
+ "port_connection_mode", "CONNECT_ALL",
+ "volume_left", "25",
+ "volume_right", "25",
+ NULL};
+
/* Initialize necessary things */
-static OutputPluginInitStatus jack_init(void)
+static gboolean jack_init (void)
{
- /* read the isTraceEnabled setting from the config file */
- mcs_handle_t *cfgfile;
-
- cfgfile = aud_cfg_db_open();
- if (!cfgfile)
- {
- jack_cfg.isTraceEnabled = FALSE;
- jack_cfg.port_connection_mode = "CONNECT_ALL"; /* default to connect all */
- jack_cfg.volume_left = 25; /* set default volume to 25 % */
- jack_cfg.volume_right = 25;
- } else
- {
- aud_cfg_db_get_bool(cfgfile, "jack", "isTraceEnabled", &jack_cfg.isTraceEnabled);
- if(!aud_cfg_db_get_string(cfgfile, "jack", "port_connection_mode", &jack_cfg.port_connection_mode))
- jack_cfg.port_connection_mode = "CONNECT_ALL";
- if(!aud_cfg_db_get_int(cfgfile, "jack", "volume_left", &jack_cfg.volume_left))
- jack_cfg.volume_left = 25;
- if(!aud_cfg_db_get_int(cfgfile, "jack", "volume_right", &jack_cfg.volume_right))
- jack_cfg.volume_right = 25;
- }
-
- aud_cfg_db_close(cfgfile);
+ aud_config_set_defaults ("jack", jack_defaults);
+ jack_cfg.isTraceEnabled = aud_get_bool ("jack", "isTraceEnabled");
+ jack_cfg.port_connection_mode = aud_get_string ("jack", "port_connection_mode");
+ jack_cfg.volume_left = aud_get_int ("jack", "volume_left");
+ jack_cfg.volume_right = aud_get_int ("jack", "volume_right");
TRACE("initializing\n");
JACK_Init(); /* initialize the driver */
@@ -232,7 +229,7 @@ static OutputPluginInitStatus jack_init(void)
output_opened = FALSE;
/* Always return OK, as we don't know about physical devices here */
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
+ return TRUE;
}
@@ -268,14 +265,8 @@ static gint audacious_jack_free(void)
/* Close the device */
static void jack_close(void)
{
- mcs_handle_t *cfgfile;
-
- cfgfile = aud_cfg_db_open();
- aud_cfg_db_set_int(cfgfile, "jack", "volume_left", jack_cfg.volume_left); /* stores the volume setting */
- aud_cfg_db_set_int(cfgfile, "jack", "volume_right", jack_cfg.volume_right);
- aud_cfg_db_close(cfgfile);
-
- TRACE("\n");
+ aud_set_int ("jack", "volume_left", jack_cfg.volume_left);
+ aud_set_int ("jack", "volume_right", jack_cfg.volume_right);
JACK_Reset(driver); /* flush buffers, reset position and set state to STOPPED */
TRACE("resetting driver, not closing now, destructor will close for us\n");
@@ -343,6 +334,7 @@ static gint jack_open(gint fmt, gint sample_rate, gint num_channels)
} else
{
TRACE("output_opened is TRUE and no options changed, not reopening\n");
+ paused = FALSE;
return 1;
}
}
@@ -369,6 +361,7 @@ static gint jack_open(gint fmt, gint sample_rate, gint num_channels)
jack_set_volume(jack_cfg.volume_left, jack_cfg.volume_right); /* sets the volume to stored value */
output_opened = TRUE;
+ paused = FALSE;
return 1;
}
@@ -409,15 +402,20 @@ static void jack_flush(gint ms_offset_time)
/* update the internal driver values to correspond to the input time given */
JACK_SetPosition(driver, MILLISECONDS, ms_offset_time);
- JACK_SetState(driver, PLAYING);
+ if (paused)
+ JACK_SetState(driver, PAUSED);
+ else
+ JACK_SetState(driver, PLAYING);
}
/* Pause the jack device */
-static void jack_pause(short p)
+static void jack_pause (gboolean p)
{
TRACE("p == %d\n", p);
+ paused = p;
+
/* pause the device if p is non-zero, unpause the device if p is zero and */
/* we are currently paused */
if(p)
@@ -445,20 +443,15 @@ static void jack_about(void)
}
}
-static void jack_tell_audio(gint * fmt, gint * srate, gint * nch)
-{
- (*fmt) = input.format;
- (*srate) = input.frequency;
- (*nch) = input.channels;
-}
-
-OutputPlugin jack_op =
-{
- .description = "JACK Output Plugin 0.17",
+AUD_OUTPUT_PLUGIN
+(
+ .name = "JACK",
.init = jack_init,
.cleanup = jack_cleanup,
.about = jack_about,
+#if 0
.configure = jack_configure,
+#endif
.get_volume = jack_get_volume,
.set_volume = jack_set_volume,
.open_audio = jack_open,
@@ -467,12 +460,7 @@ OutputPlugin jack_op =
.flush = jack_flush,
.pause = jack_pause,
.buffer_free = audacious_jack_free,
- .buffer_playing = jack_playing,
.output_time = jack_get_output_time,
.written_time = jack_get_written_time,
- .tell_audio = jack_tell_audio
-};
-
-OutputPlugin *jack_oplist[] = { &jack_op, NULL };
-
-SIMPLE_OUTPUT_PLUGIN(jack, jack_oplist);
+ .set_written_time = jack_set_written_time
+)
diff --git a/src/kanashi/Makefile b/src/kanashi/Makefile
deleted file mode 100644
index a5c4fd1..0000000
--- a/src/kanashi/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-PLUGIN = kanashi${PLUGIN_SUFFIX}
-
-SRCS = beatdetect.c \
- cfg.c \
- cmaps.c \
- drawing.c \
- freq.c \
- general.c \
- jsglue.c \
- kanashi.c \
- misc.c \
- plugin.c \
- wave.c \
- xform.c \
-
-SUBDIRS = examples
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${SDL_CFLAGS} -I../.. -I. -DPRESET_PATH="\"${prefix}/share/audacious/kanashi/presets\""
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${SDL_LIBS} -lmozjs
diff --git a/src/kanashi/beatdetect.c b/src/kanashi/beatdetect.c
deleted file mode 100644
index 906f663..0000000
--- a/src/kanashi/beatdetect.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "kanashi.h"
-
-/*
- * This algorithm is by Janusz Gregorcyzk, the implementation is
- * mine, however.
- *
- * -- nenolod
- */
-int
-kanashi_is_new_beat(void)
-{
- gint i;
- gint total = 0;
- gboolean ret = FALSE;
- static gint previous;
-
- for (i = 1; i < 512; i++)
- {
- total += abs (kanashi_sound_data->pcm_data[0][i] -
- kanashi_sound_data->pcm_data[0][i - 1]);
- }
-
- total /= 512;
-
- ret = (total > (2 * previous));
-
- previous = total;
-
- return ret;
-}
diff --git a/src/kanashi/cfg.c b/src/kanashi/cfg.c
deleted file mode 100644
index 687545e..0000000
--- a/src/kanashi/cfg.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: prevent the user from dragging something above the root
- actuator */
-
-#include <config.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <audacious/plugin.h>
-
-#include <math.h>
-
-#include "kanashi.h"
-
-/* DON'T CALL kanashi_fatal_error () IN HERE!!! */
-
-/* Actuator page stuffs */
-static GtkWidget *cfg_dialog;
-
-/* If selector != NULL, then it's 'OK', otherwise it's 'Cancel' */
-static void
-load_sel_cb (GtkButton *button, GtkFileSelection *selector)
-{
- if (selector)
- {
- static const char *fname;
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
- fname = (char *) gtk_file_selection_get_filename (selector);
- kanashi_load_preset (fname);
- aud_cfg_db_set_string(db, "kanashi", "last_path", (char*)fname);
- aud_cfg_db_close(db);
- }
-
- gtk_widget_set_sensitive (cfg_dialog, TRUE);
-}
-
-static void
-load_button_cb (GtkButton *button, gpointer data)
-{
- GtkWidget *selector;
- mcs_handle_t *db;
- gchar *last_path;
-
- db = aud_cfg_db_open();
- selector = gtk_file_selection_new ("Load Preset");
- if(aud_cfg_db_get_string(db, "kanashi", "last_path", &last_path)) {
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(selector), last_path);
- }
- aud_cfg_db_close(db);
-
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (selector)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (load_sel_cb), selector);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (selector)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (load_sel_cb), NULL);
-
- gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (selector)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
- (gpointer) selector);
- gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (selector)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
- (gpointer) selector);
-
- gtk_widget_set_sensitive (cfg_dialog, FALSE);
- gtk_widget_show (selector);
-}
-
-static void
-ok_button_cb (GtkButton *button, gpointer data)
-{
- gtk_widget_hide (cfg_dialog);
-}
-
-void
-kanashi_configure (void)
-{
- GtkWidget *bbox, *button;
-
- if (! cfg_dialog)
- {
- /* The dialog */
- cfg_dialog = gtk_dialog_new ();
- gtk_window_set_title (GTK_WINDOW (cfg_dialog), "Kanashi");
- gtk_widget_set_usize (cfg_dialog, 530, 370);
- gtk_container_border_width (GTK_CONTAINER (cfg_dialog), 8);
- gtk_signal_connect_object (GTK_OBJECT (cfg_dialog), "delete-event",
- GTK_SIGNAL_FUNC (gtk_widget_hide),
- GTK_OBJECT (cfg_dialog));
-
- /* OK / Apply / Cancel */
- bbox = gtk_hbutton_box_new ();
- gtk_widget_show (bbox);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), 8);
- gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), 64, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_dialog)->action_area),
- bbox, FALSE, FALSE, 0);
-
- button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
- gtk_widget_show (button);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (load_button_cb), NULL);
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NORMAL);
- gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
-
- button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
- gtk_widget_show (button);
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NORMAL);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ok_button_cb), NULL);
- gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
- }
-
- gtk_widget_show (cfg_dialog);
- gtk_widget_grab_focus (cfg_dialog);
-}
diff --git a/src/kanashi/cmaps.c b/src/kanashi/cmaps.c
deleted file mode 100644
index 340bbfb..0000000
--- a/src/kanashi/cmaps.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <glib.h>
-
-#include "kanashi.h"
-
-static struct kanashi_color black = {0, 0, 0};
-static struct kanashi_color white = {255, 255, 255};
-
-/* **************** cmap generation funcs **************** */
-static void
-cmap_gen_gradient (int step, const struct kanashi_color *a,
- const struct kanashi_color *b,
- struct kanashi_color *c)
-{
- c->r = a->r + step * ((((float)b->r) - ((float)a->r)) / 256.0);
- c->g = a->g + step * ((((float)b->g) - ((float)a->g)) / 256.0);
- c->b = a->b + step * ((((float)b->b) - ((float)a->b)) / 256.0);
-}
-
-/* **************** cmap_gradient **************** */
-#if 0
-static void
-cmap_gradient_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- int i;
-
- for (i=opts[0].val.ival; i<=opts[1].val.ival; i++)
- cmap_gen_gradient (((i-opts[0].val.ival)<<8)/(opts[1].val.ival
- - opts[0].val.ival),
- &opts[2].val.cval, &opts[3].val.cval,
- &kanashi_image_data->cmap[i]);
-}
-#endif
-
-/* **************** cmap_bwgradient **************** */
-void
-kanashi_set_colormap_gradient(gint low_index, gint high_index, struct kanashi_color *color)
-{
- int i;
-
- for (i=low_index; i < 128 && i <= high_index; i++)
- cmap_gen_gradient (i<<1, &black, color,
- &kanashi_image_data->cmap[i]);
-
- for (i=128; i < 256 && i <= high_index; i++)
- cmap_gen_gradient ((i-128)<<1, color, &white,
- &kanashi_image_data->cmap[i]);
-}
-
diff --git a/src/kanashi/drawing.c b/src/kanashi/drawing.c
deleted file mode 100644
index bc6a710..0000000
--- a/src/kanashi/drawing.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization engine
- * Copyright (c) 2009 William Pitcock <nenolod@dereferenced.org>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <math.h>
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-
-void
-kanashi_draw_dot (guint x, guint y, guchar value)
-{
- if (x > kanashi_image_data->width || x < 0 || y > kanashi_image_data->height || y < 0)
- return;
-
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)] = value;
-}
-
-void
-kanashi_draw_line (guint _x0, guint _y0, guint _x1, guint _y1, guchar value)
-{
- gint x0 = _x0;
- gint y0 = _y0;
- gint x1 = _x1;
- gint y1 = _y1;
-
- gint dx = x1 - x0;
- gint dy = y1 - y0;
-
- kanashi_draw_dot(x0, y0, value);
-
- if (dx != 0)
- {
- gfloat m = (gfloat) dy / (gfloat) dx;
- gfloat b = y0 - m * x0;
-
- dx = (x1 > x0) ? 1 : - 1;
- while (x0 != x1)
- {
- x0 += dx;
- y0 = m * x0 + b;
-
- kanashi_draw_dot(x0, y0, value);
- }
- }
-}
diff --git a/src/kanashi/drawing.h b/src/kanashi/drawing.h
deleted file mode 100644
index 768ecb1..0000000
--- a/src/kanashi/drawing.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-
-#ifndef PN_DRAWING_H
-#define PN_DRAWING_H
-
-void kanashi_draw_dot (guint x, guint y, guchar value);
-void kanashi_draw_line (guint _x0, guint _y0, guint _x1, guint _y1, guchar value);
-
-#endif
diff --git a/src/kanashi/examples/Makefile b/src/kanashi/examples/Makefile
deleted file mode 100644
index 6120258..0000000
--- a/src/kanashi/examples/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-DATA = nenolod_-_kanashi_default.js
-
-include ../../../buildsys.mk
-
-PACKAGE = audacious/kanashi/presets
diff --git a/src/kanashi/examples/nenolod_-_kanashi_default.js b/src/kanashi/examples/nenolod_-_kanashi_default.js
deleted file mode 100644
index d391787..0000000
--- a/src/kanashi/examples/nenolod_-_kanashi_default.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * kanashi_test.js
- *
- * Test visualization scene for Kanashi engine.
- */
-
-set_colormap_gradient(0, 255, 0, 192, 255);
-
-render_scene = function() {
- // render left and right channels in the middle as two waves.
- render_horizontal_waveform(-1, 255);
- render_horizontal_waveform(1, 255);
-
- if (is_beat()) {
- blur(Math.floor(Math.random() * 4));
- value_invert();
- value_reduce(1);
- set_colormap_gradient(0, 255,
- Math.floor(Math.random() * 255),
- Math.floor(Math.random() * 255),
- Math.floor(Math.random() * 255));
- }
-
- blur(1);
-
- // reduce value by 2
- value_reduce(2);
-}
diff --git a/src/kanashi/freq.c b/src/kanashi/freq.c
deleted file mode 100644
index c6e6527..0000000
--- a/src/kanashi/freq.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <glib.h>
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-
-/* **************** freq_dots **************** */
-/* FIXME: take this piece of crap out */
-static void
-kanashi_freq_dots(void)
-{
- int i, basex;
-
- basex = (kanashi_image_data->width>>1)-128;
- for (i=basex < 0 ? -basex : 0 ; i < 256; i++)
- {
- kanashi_image_data->surface[0][PN_IMG_INDEX (basex+i, (kanashi_image_data->height>>1)
- - CAP (kanashi_sound_data->freq_data[0][i], 120))]
- = 0xff;
- kanashi_image_data->surface[0][PN_IMG_INDEX (basex+256-i, (kanashi_image_data->height>>1)
- + CAP (kanashi_sound_data->freq_data[1][i], 120))]
- = 0xff;
- }
-}
-
-/* **************** freq_drops **************** */
-static void
-kanashi_freq_drops (void)
-{
- int i,j;
-
- for (i=0; i<256; i++)
- for (j=0; j<kanashi_sound_data->freq_data[0][i]>>3; i++)
- kanashi_image_data->surface[0][PN_IMG_INDEX (rand() % kanashi_image_data->width,
- rand() % kanashi_image_data->height)]
- = 0xff;
-}
diff --git a/src/kanashi/general.c b/src/kanashi/general.c
deleted file mode 100644
index 6381c59..0000000
--- a/src/kanashi/general.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: what to name this file? */
-
-#include <config.h>
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-
-/* **************** general_fade **************** */
-void
-kanashi_fade(gint amt)
-{
- register gint i, j;
-
- for (j=0; j<kanashi_image_data->height; j++)
- for (i=0; i<kanashi_image_data->width; i++)
- kanashi_image_data->surface[0][PN_IMG_INDEX (i, j)] =
- CAPLO (kanashi_image_data->surface[0][PN_IMG_INDEX (i, j)] - amt, 0);
-}
-
-/* **************** general_blur **************** */
-void
-kanashi_blur(void)
-{
- int i,j;
- register guchar *srcptr = kanashi_image_data->surface[0];
- register guchar *destptr = kanashi_image_data->surface[1];
- register int sum;
-
- for (j=0; j<kanashi_image_data->height; j++)
- for (i=0; i<kanashi_image_data->width; i++)
- {
- sum = *(srcptr)<<2;
-
- /* top */
- if (j > 0)
- {
- sum += *(srcptr-kanashi_image_data->width)<<1;
- if (i > 0)
- sum += *(srcptr-kanashi_image_data->width-1);
- if (i < kanashi_image_data->width-1)
- sum += *(srcptr-kanashi_image_data->width+1);
- }
- /* bottom */
- if (j < kanashi_image_data->height-1)
- {
- sum += *(srcptr+kanashi_image_data->width)<<1;
- if (i > 0)
- sum += *(srcptr+kanashi_image_data->width-1);
- if (i < kanashi_image_data->width-1)
- sum += *(srcptr+kanashi_image_data->width+1);
- }
- /* left */
- if (i > 0)
- sum += *(srcptr-1)<<1;
- /* right */
- if (i < kanashi_image_data->width-1)
- sum += *(srcptr+1)<<1;
-
- *destptr++ = (guchar)(sum >> 4);
- srcptr++;
- }
-
- kanashi_swap_surfaces ();
-}
-
-/* **************** general_mosaic **************** */
-void
-kanashi_mosaic(gint radius)
-{
- int i,j;
- register guchar *srcptr = kanashi_image_data->surface[0];
- register guchar *destptr = kanashi_image_data->surface[1];
-
- for (j=0; j<kanashi_image_data->height; j += radius)
- for (i=0; i<kanashi_image_data->width; i += radius)
- {
- int ii = 0, jj = 0;
- guchar bval = 0;
-
- /* find the brightest colour */
- for (jj = 0; jj < radius && (j + jj < kanashi_image_data->height); jj++)
- for (ii = 0; ii < radius && (i + ii < kanashi_image_data->width); ii++)
- {
- guchar val = srcptr[PN_IMG_INDEX(i + ii, j + jj)];
-
- if (val > bval)
- bval = val;
- }
-
- for (jj = 0; jj < radius && (j + jj < kanashi_image_data->height); jj++)
- for (ii = 0; ii < radius && (i + ii < kanashi_image_data->width); ii++)
- {
- destptr[PN_IMG_INDEX(i + ii, j + jj)] = bval;
- }
- }
-
- kanashi_swap_surfaces ();
-}
-
-/* **************** general_clear **************** */
-void
-kanashi_clear(void)
-{
- memset(kanashi_image_data->surface[0], '\0',
- (kanashi_image_data->height * kanashi_image_data->width));
-}
-
-/* **************** general_invert **************** */
-void
-kanashi_invert(void)
-{
- int i, j;
-
- for (j=0; j < kanashi_image_data->height; j++)
- for (i=0; i < kanashi_image_data->width; i++)
- kanashi_image_data->surface[0][PN_IMG_INDEX (i, j)] =
- 255 - kanashi_image_data->surface[0][PN_IMG_INDEX (i, j)];
-}
-
-/* **************** general_replace **************** */
-#if 0
-static struct kanashi_actuator_option_desc general_replace_opts[] =
-{
- { "start", "The beginning colour value that should be replaced by the value of out.",
- OPT_TYPE_INT, { ival: 250 } },
- { "end", "The ending colour value that should be replaced by the value of out.",
- OPT_TYPE_INT, { ival: 255 } },
- { "out", "The colour value that in is replaced with.",
- OPT_TYPE_INT, { ival: 0 } },
- { NULL }
-};
-
-static void
-general_replace_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- register int i, j;
- register guchar val;
- guchar begin = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 250 : opts[0].val.ival;
- guchar end = opts[1].val.ival > 255 || opts[1].val.ival < 0 ? 255 : opts[1].val.ival;
- guchar out = opts[2].val.ival > 255 || opts[2].val.ival < 0 ? 0 : opts[2].val.ival;
-
- for (j=0; j < kanashi_image_data->height; j++)
- for (i=0; i < kanashi_image_data->width; i++)
- {
- val = kanashi_image_data->surface[0][PN_IMG_INDEX (i, j)];
- if (val >= begin && val <= end)
- kanashi_image_data->surface[0][PN_IMG_INDEX (i, j)] = out;
- }
-}
-
-struct kanashi_actuator_desc builtin_general_replace =
-{
- "general_replace", "Value Replace", "Performs a value replace on a range of values.",
- 0, general_replace_opts,
- NULL, NULL, general_replace_exec
-};
-#endif
-
-/* **************** general_swap **************** */
-void
-kanashi_swap(void)
-{
- kanashi_swap_surfaces ();
-}
-
-/* **************** general_copy **************** */
-void
-kanashi_copy(void)
-{
- memcpy(kanashi_image_data->surface[1], kanashi_image_data->surface[0],
- (kanashi_image_data->width * kanashi_image_data->height));
-}
-
-/* **************** general_flip **************** */
-void
-kanashi_flip(gint direction)
-{
- gint x, y;
-
- if (direction < 0)
- {
- for (y = 0; y < kanashi_image_data->height; y++)
- for (x = 0; x < kanashi_image_data->width; x++)
- {
- kanashi_image_data->surface[1][PN_IMG_INDEX(kanashi_image_data->width - x, y)] =
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
- else
- {
- for (y = 0; y < kanashi_image_data->height; y++)
- for (x = 0; x < kanashi_image_data->width; x++)
- {
- kanashi_image_data->surface[1][PN_IMG_INDEX(x, kanashi_image_data->height - y)] =
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
-
- kanashi_swap_surfaces ();
-}
diff --git a/src/kanashi/jsglue.c b/src/kanashi/jsglue.c
deleted file mode 100644
index 9a539bd..0000000
--- a/src/kanashi/jsglue.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization engine
- * Copyright (c) 2009 William Pitcock <nenolod@dereferenced.org>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-#include "drawing.h"
-
-JSBool
-kanashi_js_fade(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint amt;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "i", &amt))
- return JS_FALSE;
-
- if (amt < 1)
- amt = 1;
-
- kanashi_fade(amt);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_mosaic(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint amt;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "i", &amt))
- return JS_FALSE;
-
- if (amt < 1)
- amt = 1;
-
- kanashi_mosaic(amt);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_blur(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint amt, i;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "i", &amt))
- return JS_FALSE;
-
- if (amt < 1)
- amt = 1;
-
- for (i = 0; i < amt; i++)
- kanashi_blur();
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_invert(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- kanashi_invert();
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_set_colormap_gradient(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint low_index, high_index;
- struct kanashi_color color;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "iiiii", &low_index, &high_index, &color.r, &color.g, &color.b))
- return JS_FALSE;
-
- kanashi_set_colormap_gradient(low_index, high_index, &color);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_render_horizontal_waveform(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint channels, value;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "ii", &channels, &value))
- return JS_FALSE;
-
- kanashi_render_horizontal_waveform(channels, value);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_render_vertical_waveform(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint channels, value;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "ii", &channels, &value))
- return JS_FALSE;
-
- kanashi_render_vertical_waveform(channels, value);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_is_beat(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- if (kanashi_new_beat)
- *rval = JSVAL_TRUE;
- else
- *rval = JSVAL_FALSE;
-
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_render_line(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint x1, y1, x2, y2, value;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "iiiii", &x1, &y1, &x2, &y2, &value))
- return JS_FALSE;
-
- kanashi_draw_line(x1, y1, x2, y2, value);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_render_dot(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint x1, y1, value;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "iii", &x1, &y1, &value))
- return JS_FALSE;
-
- kanashi_draw_dot(x1, y1, value);
-
- *rval = JSVAL_VOID;
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_get_canvas_width(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- *rval = INT_TO_JSVAL(kanashi_image_data->width);
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_get_canvas_height(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- *rval = INT_TO_JSVAL(kanashi_image_data->height);
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_get_pcm_data(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- JSObject *ar = JS_NewArrayObject(cx_, 0, NULL);
- gint i;
-
- JS_AddRoot(cx_, ar);
-
- for (i = 0; i < 256; i++)
- {
- JSObject *tuple = JS_NewArrayObject(cx_, 0, NULL);
- jsval l, r, tu;
-
- JS_AddRoot(cx_, tuple);
-
- l = INT_TO_JSVAL(kanashi_sound_data->pcm_data[0][i * 2]);
- r = INT_TO_JSVAL(kanashi_sound_data->pcm_data[1][i * 2]);
- JS_SetElement(cx_, tuple, 0, &l);
- JS_SetElement(cx_, tuple, 1, &r);
-
- tu = OBJECT_TO_JSVAL(tuple);
- JS_SetElement(cx_, ar, i, &tu);
-
- JS_RemoveRoot(cx_, tuple);
- }
-
- JS_RemoveRoot(cx_, ar);
-
- *rval = OBJECT_TO_JSVAL(ar);
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_translate_polar_x(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint x;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "i", &x))
- return JS_FALSE;
-
- x *= kanashi_image_data->width;
-
- *rval = INT_TO_JSVAL(x);
- return JS_TRUE;
-}
-
-JSBool
-kanashi_js_translate_polar_y(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
-{
- gint y;
-
- if (!JS_ConvertArguments(cx_, argc, argv, "i", &y))
- return JS_FALSE;
-
- y *= kanashi_image_data->height;
-
- *rval = INT_TO_JSVAL(y);
- return JS_TRUE;
-}
diff --git a/src/kanashi/jsglue.h b/src/kanashi/jsglue.h
deleted file mode 100644
index f87ad92..0000000
--- a/src/kanashi/jsglue.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization engine
- * Copyright (c) 2009 William Pitcock <nenolod@dereferenced.org>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "kanashi.h"
-
-extern JSBool kanashi_js_fade(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_blur(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_mosaic(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_invert(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
-extern JSBool kanashi_js_set_colormap_gradient(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
-extern JSBool kanashi_js_render_horizontal_waveform(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_render_vertical_waveform(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_render_line(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_render_dot(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
-extern JSBool kanashi_js_is_beat(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
-extern JSBool kanashi_js_get_canvas_width(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_get_canvas_height(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
-extern JSBool kanashi_js_get_pcm_data(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
-extern JSBool kanashi_js_translate_polar_x(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-extern JSBool kanashi_js_translate_polar_y(JSContext *cx_, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
-
diff --git a/src/kanashi/kanashi.c b/src/kanashi/kanashi.c
deleted file mode 100644
index f6364f7..0000000
--- a/src/kanashi/kanashi.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <math.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-
-#include "kanashi.h"
-#include "jsglue.h"
-
-GtkWidget *kanashi_win = NULL;
-GdkRgbCmap *cmap = NULL;
-
-/* Globals */
-struct kanashi_rc *kanashi_rc;
-struct kanashi_image_data *kanashi_image_data;
-struct kanashi_sound_data *kanashi_sound_data;
-
-/* Trig Pre-Computes */
-float sin_val[360];
-float cos_val[360];
-
-gboolean kanashi_new_beat;
-
-JSRuntime *rt = NULL;
-JSContext *cx = NULL;
-JSObject *global = NULL;
-
-GStaticMutex kanashi_mutex = G_STATIC_MUTEX_INIT;
-gint render_timeout = 0;
-extern GCond *render_cond;
-
-/* **************** drawing doodads **************** */
-static void
-set_colormap (void)
-{
- guint32 colors[256];
- gint i;
-
- if (cmap != NULL)
- gdk_rgb_cmap_free(cmap);
-
- for (i = 0; i < 256; i++) {
- colors[i] =
- (kanashi_image_data->cmap[i].r << 16) |
- (kanashi_image_data->cmap[i].g << 8) |
- (kanashi_image_data->cmap[i].b);
- }
-
- cmap = gdk_rgb_cmap_new(colors, 256);
-}
-
-static gboolean
-blit_to_screen (gpointer unused)
-{
- kanashi_render ();
- set_colormap();
-
- gdk_draw_indexed_image(kanashi_win->window, kanashi_win->style->white_gc, 0, 0,
- kanashi_image_data->width, kanashi_image_data->height, GDK_RGB_DITHER_NONE,
- kanashi_image_data->surface[0], kanashi_image_data->width, cmap);
-
- return TRUE;
-}
-
-static void
-resize_video (guint w, guint h)
-{
- g_static_mutex_lock(&kanashi_mutex);
-
- kanashi_image_data->width = w;
- kanashi_image_data->height = h;
-
- if (kanashi_image_data->surface[0])
- g_free (kanashi_image_data->surface[0]);
- if (kanashi_image_data->surface[1])
- g_free (kanashi_image_data->surface[1]);
-
- kanashi_image_data->surface[0] = g_malloc0 (w * h);
- kanashi_image_data->surface[1] = g_malloc0 (w * h);
-
- g_static_mutex_unlock(&kanashi_mutex);
-}
-
-/* **************** basic renderer management **************** */
-void
-kanashi_cleanup (void)
-{
- if (kanashi_image_data)
- {
- if (kanashi_image_data->surface[0])
- g_free (kanashi_image_data->surface[0]);
- if (kanashi_image_data->surface[1])
- g_free (kanashi_image_data->surface[1]);
- g_free (kanashi_image_data);
- }
- if (kanashi_sound_data)
- g_free (kanashi_sound_data);
-
- if (render_timeout)
- g_source_remove(render_timeout);
-}
-
-/* Renders one frame and handles the SDL window */
-void
-kanashi_render (void)
-{
- jsval rval;
-
- kanashi_new_beat = kanashi_is_new_beat();
-
- if (!JS_CallFunctionName(cx, global, "render_scene", 0, NULL, &rval))
- printf("something broke\n");
-}
-
-/* this MUST be called if a builtin's output is to surface[1]
- (by the builtin, after it is done) */
-void
-kanashi_swap_surfaces (void)
-{
- guchar *tmp = kanashi_image_data->surface[0];
- kanashi_image_data->surface[0] = kanashi_image_data->surface[1];
- kanashi_image_data->surface[1] = tmp;
-}
-
-/******* presets *******/
-static JSClass global_class = {
- "global", JSCLASS_GLOBAL_FLAGS,
- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
- JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
- JSCLASS_NO_OPTIONAL_MEMBERS
-};
-
-void
-kanashi_report_js_error(JSContext *cx, const char *message, JSErrorReport *report)
-{
- printf("%s:%u:%s\n",
- report->filename ? report->filename : "<no filename>",
- (unsigned int) report->lineno,
- message);
-}
-
-
-JSBool
-kanashi_branch_callback_hook(JSContext *cx_, JSScript *script)
-{
- static int counter = 0;
-
- if (++counter == 2000) {
- JS_MaybeGC(cx_);
- counter = 0;
- }
-
- return JS_TRUE;
-}
-
-gboolean
-kanashi_load_preset(const char *filename)
-{
- gchar *data;
- gsize len;
- GError *err = NULL;
- JSScript *script;
- jsval rval;
-
- if (g_file_get_contents(filename, &data, &len, &err))
- {
- script = JS_CompileScript(cx, global, data, len, filename, 1);
- if (script != NULL)
- {
- JS_ExecuteScript(cx, global, script, &rval);
- }
- else
- {
- printf("compilation failed\n");
- return FALSE;
- }
- }
- else
- {
- printf("loading failed\n");
- return FALSE;
- }
-
- g_free(data);
-
- return TRUE;
-}
-
-static JSFunctionSpec js_global_functions[] = {
- {"value_reduce", kanashi_js_fade, 1, 0, 0},
- {"value_invert", kanashi_js_invert, 0, 0, 0},
- {"blur", kanashi_js_blur, 1, 0, 0},
- {"mosaic", kanashi_js_mosaic, 1, 0, 0},
- {"set_colormap_gradient", kanashi_js_set_colormap_gradient, 5, 0, 0},
- {"render_horizontal_waveform", kanashi_js_render_horizontal_waveform, 2, 0, 0},
- {"render_vertical_waveform", kanashi_js_render_vertical_waveform, 2, 0, 0},
- {"render_line", kanashi_js_render_line, 5, 0, 0},
- {"render_dot", kanashi_js_render_dot, 3, 0, 0},
- {"is_beat", kanashi_js_is_beat, 0, 0, 0},
- {"get_canvas_width", kanashi_js_get_canvas_width, 0, 0, 0},
- {"get_canvas_height", kanashi_js_get_canvas_height, 0, 0, 0},
- {"get_pcm_data", kanashi_js_get_pcm_data, 0, 0, 0},
- {"translate_polar_x", kanashi_js_translate_polar_x, 1, 0, 0},
- {"translate_polar_y", kanashi_js_translate_polar_y, 1, 0, 0},
- {},
-};
-
-gboolean
-kanashi_reconfigure(GtkWidget *widget, GdkEventConfigure *event, gpointer unused)
-{
- resize_video (event->width, event->height);
-
- return FALSE;
-}
-
-gboolean
-kanashi_init(void)
-{
- int i;
-
- kanashi_sound_data = g_new0 (struct kanashi_sound_data, 1);
- kanashi_image_data = g_new0 (struct kanashi_image_data, 1);
-
- kanashi_win = gtk_drawing_area_new();
- gtk_widget_realize(kanashi_win);
- gtk_widget_set_size_request(kanashi_win, 640, 360);
- gtk_widget_show(kanashi_win);
- g_signal_connect(G_OBJECT(kanashi_win), "configure-event", G_CALLBACK(kanashi_reconfigure), NULL);
-
- resize_video (640, 360);
-
- for (i=0; i<360; i++)
- {
- sin_val[i] = sin(i*(M_PI/180.0));
- cos_val[i] = cos(i*(M_PI/180.0));
- }
-
- rt = JS_NewRuntime(8L * 1024L * 1024L);
- if (rt == NULL)
- {
- return FALSE;
- }
-
- /* Create a context. */
- cx = JS_NewContext(rt, 8192);
- if (cx == NULL)
- {
- return FALSE;
- }
-
- JS_SetOptions(cx, JSOPTION_VAROBJFIX);
- JS_SetVersion(cx, JSVERSION_1_7);
- JS_SetErrorReporter(cx, kanashi_report_js_error);
- JS_SetBranchCallback(cx, kanashi_branch_callback_hook);
-
- global = JS_NewObject(cx, &global_class, NULL, NULL);
- if (global == NULL)
- {
- return FALSE;
- }
-
- if (!JS_InitStandardClasses(cx, global))
- {
- return FALSE;
- }
-
- if (!JS_DefineFunctions(cx, global, js_global_functions))
- {
- return FALSE;
- }
-
- kanashi_load_preset(PRESET_PATH "/nenolod_-_kanashi_default.js");
-
- g_signal_connect(kanashi_win, "expose-event", G_CALLBACK(blit_to_screen), NULL);
- render_timeout = g_timeout_add(16, (GSourceFunc) gtk_widget_queue_draw, kanashi_win);
-
- return TRUE;
-}
diff --git a/src/kanashi/kanashi.h b/src/kanashi/kanashi.h
deleted file mode 100644
index 66726bd..0000000
--- a/src/kanashi/kanashi.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization plugin
- * Copyright (c) 2009 William Pitcock <nenolod@dereferenced.org>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _KANASHI_H
-#define _KANASHI_H
-
-#define XP_UNIX /* XXX */
-
-#include <stdlib.h>
-#include <string.h>
-#include <glib.h>
-#include <mozjs/jsapi.h>
-
-struct kanashi_color
-{
- guchar r, g, b, a;
-};
-
-struct kanashi_sound_data
-{
- gint16 pcm_data[2][512];
- gint16 freq_data[2][256];
-};
-
-struct kanashi_image_data
-{
- int width, height;
- struct kanashi_color cmap[256];
- guchar *surface[2];
-};
-
-/* The executable (ie xmms.c or standalone.c)
- is responsible for allocating this and filling
- it with default/saved values */
-struct kanashi_rc
-{
- struct kanashi_actuator *actuator;
-};
-
-/* core funcs */
-gboolean kanashi_init (void);
-void kanashi_cleanup (void);
-void kanashi_render (void);
-void kanashi_swap_surfaces (void);
-gboolean kanashi_load_preset (const char *filename);
-
-/* Implemented elsewhere (ie xmms.c or standalone.c) */
-void kanashi_set_rc ();
-void kanashi_fatal_error (const char *fmt, ...);
-void kanashi_error (const char *fmt, ...);
-void kanashi_quit (void);
-
-/* Implimented in cfg.c */
-void kanashi_configure (void);
-
-/* globals used for rendering */
-extern struct kanashi_rc *kanashi_rc;
-extern struct kanashi_sound_data *kanashi_sound_data;
-extern struct kanashi_image_data *kanashi_image_data;
-
-extern gboolean kanashi_new_beat;
-
-/* global trig pre-computes */
-extern float sin_val[360];
-extern float cos_val[360];
-
-/* beat detection */
-int kanashi_is_new_beat(void);
-
-#endif /* _KANASHI_H */
diff --git a/src/kanashi/kanashi_utils.h b/src/kanashi/kanashi_utils.h
deleted file mode 100644
index bbeb5e0..0000000
--- a/src/kanashi/kanashi_utils.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization engine
- * Copyright (c) 2009 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _PN_UTILS_H
-#define _PN_UTILS_H
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define CAP(i,c) (i > c ? c : i < -(c) ? -(c) : i)
-#define CAPHILO(i,h,l) (i > h ? h : i < l ? l : i)
-#define CAPHI(i,h) (i > h ? h : i)
-#define CAPLO(i,l) (i < l ? l : i)
-
-#define PN_IMG_INDEX(x,y) ((x) + (kanashi_image_data->width * (y)))
-
-struct kanashi_color;
-
-extern void kanashi_mosaic(gint amt);
-extern void kanashi_fade(gint amt);
-extern void kanashi_blur(void);
-extern void kanashi_invert(void);
-
-extern void kanashi_set_colormap_gradient(gint low_index, gint high_index, struct kanashi_color *color);
-
-extern void kanashi_render_horizontal_waveform(gint channels, guchar value);
-extern void kanashi_render_vertical_waveform(gint channels, guchar value);
-
-#endif /* _PN_UTILS_H */
diff --git a/src/kanashi/misc.c b/src/kanashi/misc.c
deleted file mode 100644
index 5b68bd0..0000000
--- a/src/kanashi/misc.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <glib.h>
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-
-/* ******************** misc_floater ******************** */
-#if 0
-typedef enum
-{
- float_up = 0x1,
- float_down = 0x2,
- float_left = 0x4,
- float_right = 0x8,
-} FloaterDirection;
-
-struct floater_state_data
-{
- FloaterDirection dir;
- gint x;
- gint y;
-};
-
-static void
-misc_floater_init(gpointer *data)
-{
- struct floater_state_data *opaque_data = g_new0(struct floater_state_data, 1);
- *data = opaque_data;
- opaque_data->x = rand() % kanashi_image_data->width;
- opaque_data->y = rand() % kanashi_image_data->height;
- opaque_data->dir = (FloaterDirection) rand() % 15; /* sum of all dir values */
-}
-
-static void
-misc_floater_cleanup(gpointer data)
-{
- g_free(data);
-}
-
-/*
- * This implementation isn't very great.
- * Anyone want to improve it? :(
- */
-static void
-misc_floater_exec(const struct kanashi_actuator_option *opts, gpointer data)
-{
- struct floater_state_data *opaque_data = (struct floater_state_data *) data;
- guchar value = (opts[0].val.ival < 0 || opts[0].val.ival > 255) ? 255 : opts[0].val.ival;
-
- /* determine the root coordinate first */
- if (opaque_data->dir & float_up)
- opaque_data->y -= 1;
- if (opaque_data->dir & float_down)
- opaque_data->y += 1;
-
- if (opaque_data->dir & float_left)
- opaque_data->x -= 1;
- if (opaque_data->dir & float_right)
- opaque_data->x += 1;
-
- /* make sure we're within surface boundaries. segfaults suck, afterall. */
- if (opaque_data->x + 1 <= kanashi_image_data->width &&
- opaque_data->x - 1 >= 0 &&
- opaque_data->y + 1 <= kanashi_image_data->height &&
- opaque_data->y - 1 >= 0)
- {
- /* draw it. i could use a loop here, but i don't see much reason in it,
- * so i don't think i will at this time. -nenolod
- */
- kanashi_image_data->surface[0][PN_IMG_INDEX(opaque_data->x, opaque_data->y)] = value;
- kanashi_image_data->surface[0][PN_IMG_INDEX(opaque_data->x + 1, opaque_data->y)] = value;
- kanashi_image_data->surface[0][PN_IMG_INDEX(opaque_data->x - 1, opaque_data->y)] = value;
- kanashi_image_data->surface[0][PN_IMG_INDEX(opaque_data->x, opaque_data->y + 1)] = value;
- kanashi_image_data->surface[0][PN_IMG_INDEX(opaque_data->x, opaque_data->y - 1)] = value;
- }
-
- /* check if we need to change direction yet, and if so, do so. */
- if (kanashi_new_beat == TRUE)
- opaque_data->dir = (FloaterDirection) rand() % 15; /* sum of all dir values */
-
- /* now adjust the direction so we stay in boundary */
- if (opaque_data->x - 1 <= 0 && opaque_data->dir & float_left)
- {
- opaque_data->dir &= ~float_left;
- opaque_data->dir |= float_right;
- }
-
- if (opaque_data->x + 1 >= kanashi_image_data->width && opaque_data->dir & float_right)
- {
- opaque_data->dir &= ~float_right;
- opaque_data->dir |= float_left;
- }
-
- if (opaque_data->y - 1 <= 0 && opaque_data->dir & float_up)
- {
- opaque_data->dir &= ~float_up;
- opaque_data->dir |= float_down;
- }
-
- if (opaque_data->y + 1 >= kanashi_image_data->height && opaque_data->dir & float_down)
- {
- opaque_data->dir &= ~float_down;
- opaque_data->dir |= float_up;
- }
-}
-#endif
diff --git a/src/kanashi/plugin.c b/src/kanashi/plugin.c
deleted file mode 100644
index c4640cd..0000000
--- a/src/kanashi/plugin.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: issues with not uniniting variables between
- enables? I wasn't too careful about that, but it
- seems to work fine. If there are problems perhaps
- look for a bug there?
-*/
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <memory.h>
-#include <math.h>
-#include <setjmp.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <audacious/i18n.h>
-
-#include <gtk/gtk.h>
-#include <audacious/plugin.h>
-
-#include "kanashi.h"
-
-/* Error reporting dlg */
-static GtkWidget *err_dialog;
-extern GtkWidget *kanashi_win;
-
-/* Draw thread stuff */
-/* FIXME: Do I need mutex for kanashi_done? */
-static GMutex *sound_data_mutex;
-static GMutex *config_mutex;
-GCond *render_cond;
-extern GStaticMutex kanashi_mutex;
-
-static gboolean kanashi_done = FALSE;
-static jmp_buf quit_jmp;
-static gboolean timeout_set = FALSE;
-static guint quit_timeout;
-
-/* Sound stuffs */
-static gboolean new_pcm_data = FALSE;
-static gboolean new_freq_data = FALSE;
-static gint16 tmp_pcm_data[2][512];
-static gint16 tmp_freq_data[2][256];
-
-/* XMMS interface */
-static void kanashi_xmms_init (void);
-static void kanashi_xmms_cleanup (void);
-static void kanashi_xmms_about (void);
-static void kanashi_xmms_configure (void);
-static void kanashi_xmms_render_pcm (gint16 data[2][512]);
-static void kanashi_xmms_render_freq (gint16 data[2][256]);
-
-static GtkWidget *
-kanashi_get_widget(void)
-{
- g_print("get widget\n");
-
- return kanashi_win;
-}
-
-static VisPlugin kanashi_vp =
-{
- .description = "Kanashi",
- .num_pcm_chs_wanted = 2,
- .num_freq_chs_wanted = 2,
- .init = kanashi_xmms_init,
- .cleanup = kanashi_xmms_cleanup,
- .about = kanashi_xmms_about,
- .configure = kanashi_xmms_configure,
- .render_pcm = kanashi_xmms_render_pcm,
- .render_freq = kanashi_xmms_render_freq,
- .get_widget = kanashi_get_widget,
-};
-
-VisPlugin *kanashi_vplist[] = { &kanashi_vp, NULL };
-
-DECLARE_PLUGIN(kanashi, NULL, NULL, NULL, NULL, NULL, NULL, kanashi_vplist,NULL);
-
-static gpointer
-draw_thread_fn (gpointer data)
-{
- while (kanashi_done == FALSE)
- {
- kanashi_render ();
- }
-
- g_print("exit\n");
-
- kanashi_cleanup ();
-
- return NULL;
-}
-
-static void
-kanashi_xmms_init (void)
-{
- kanashi_init ();
-
- sound_data_mutex = g_mutex_new();
- config_mutex = g_mutex_new();
- render_cond = g_cond_new();
-}
-
-static void
-kanashi_xmms_cleanup (void)
-{
- if (timeout_set)
- {
- gtk_timeout_remove (quit_timeout);
- timeout_set = FALSE;
- }
-
- if (sound_data_mutex)
- {
- g_mutex_free (sound_data_mutex);
- sound_data_mutex = NULL;
- }
-
- if (config_mutex)
- {
- g_mutex_free (config_mutex);
- config_mutex = NULL;
- }
-
- if (render_cond)
- {
- g_cond_free (render_cond);
- render_cond = NULL;
- }
-}
-
-#define KANASHI_VERSION "0.1alpha3"
-static void
-kanashi_xmms_about (void)
-{
- static GtkWidget *window = NULL;
-
- audgui_simple_message(&window, GTK_MESSAGE_INFO, "About Kanashi",
-
-"Kanashi " KANASHI_VERSION "\n\n\
-Copyright (C) 2009, William Pitcock <nenolod -at- dereferenced.org>\n\
-\n\
-This program is free software; you can redistribute it and/or modify\n\
-it under the terms of the GNU General Public License as published by\n\
-the Free Software Foundation; either version 2 of the License, or\n\
-(at your option) any later version.\n\
-\n\
-This program is distributed in the hope that it will be useful,\n\
-but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
-GNU General Public License for more details.\n\
-\n\
-You should have received a copy of the GNU General Public License\n\
-along with this program; if not, write to the Free Software\n\
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301\n\
-USA");
-}
-
-static void
-kanashi_xmms_configure (void)
-{
- if (config_mutex)
- g_mutex_lock (config_mutex);
-
- kanashi_configure ();
-
- if (config_mutex)
- g_mutex_unlock (config_mutex);
-}
-
-static void
-kanashi_xmms_render_pcm (gint16 data[2][512])
-{
- memcpy (kanashi_sound_data->pcm_data, data, sizeof (gint16) * 2 * 512);
-}
-
-static void
-kanashi_xmms_render_freq (gint16 data[2][256])
-{
- memcpy (kanashi_sound_data->freq_data, data, sizeof (gint16) * 2 * 256);
-}
-
-/* **************** kanashi.h stuff **************** */
-
-void
-kanashi_set_rc (struct kanashi_rc *new_rc)
-{
-}
-
-void
-kanashi_fatal_error (const char *fmt, ...)
-{
- char *errstr;
- va_list ap;
- GtkWidget *dialog;
- GtkWidget *close, *label;
-
- /* now report the error... */
- va_start (ap, fmt);
- errstr = g_strdup_vprintf (fmt, ap);
- va_end (ap);
-
- dialog=gtk_dialog_new();
- gtk_window_set_title(GTK_WINDOW(dialog), "Kanashi: Fatal Error");
- gtk_container_border_width (GTK_CONTAINER (dialog), 8);
-
- label=gtk_label_new(errstr);
- fprintf (stderr, "%s\n", errstr);
- g_free (errstr);
-
- close = gtk_button_new_with_label ("Close");
- gtk_signal_connect_object (GTK_OBJECT (close), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (dialog));
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE,
- FALSE, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), close,
- FALSE, FALSE, 0);
- gtk_widget_show (label);
- gtk_widget_show (close);
-
- gtk_widget_show (dialog);
- gtk_widget_grab_focus (dialog);
-
- kanashi_quit ();
-}
-
-
-void
-kanashi_error (const char *fmt, ...)
-{
- char *errstr;
- va_list ap;
- static GtkWidget *text;
- static GtkTextBuffer *textbuf;
-
- /* now report the error... */
- va_start (ap, fmt);
- errstr = g_strdup_vprintf (fmt, ap);
- va_end (ap);
- fprintf (stderr, "Kanashi-CRITICAL **: %s\n", errstr);
-
- if (! err_dialog)
- {
- GtkWidget *close;
-
- err_dialog=gtk_dialog_new();
- gtk_window_set_title (GTK_WINDOW (err_dialog), "Kanashi: Error");
- gtk_window_set_policy (GTK_WINDOW (err_dialog), FALSE, FALSE, FALSE);
- gtk_widget_set_usize (err_dialog, 400, 200);
- gtk_container_border_width (GTK_CONTAINER (err_dialog), 8);
-
- textbuf = gtk_text_buffer_new(NULL);
- text = gtk_text_view_new_with_buffer (textbuf);
-
- close = gtk_button_new_with_label ("Close");
- gtk_signal_connect_object (GTK_OBJECT (close), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_hide),
- GTK_OBJECT (err_dialog));
- gtk_signal_connect_object (GTK_OBJECT (err_dialog), "delete-event",
- GTK_SIGNAL_FUNC (gtk_widget_hide),
- GTK_OBJECT (err_dialog));
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (err_dialog)->vbox), text, FALSE,
- FALSE, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (err_dialog)->action_area), close,
- FALSE, FALSE, 0);
- gtk_widget_show (text);
- gtk_widget_show (close);
- }
-
- gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuf), errstr, -1);
- g_free (errstr);
-
- gtk_widget_show (err_dialog);
- gtk_widget_grab_focus (err_dialog);
-}
-
-
-/* This is confusing...
- Don't call this from anywhere but the draw thread or
- the initialization xmms thread (ie NOT the xmms sound
- data functions) */
-void
-kanashi_quit (void)
-{
-}
diff --git a/src/kanashi/wave.c b/src/kanashi/wave.c
deleted file mode 100644
index 637ebbd..0000000
--- a/src/kanashi/wave.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <math.h>
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-
-#include "drawing.h"
-
-/* **************** wave_horizontal **************** */
-void
-kanashi_render_horizontal_waveform(gint channels, guchar value)
-{
- int channel = ( channels < 0 ) ? 0 : 1;
- int *x_pos, *y_pos; /* dynamic tables which store the positions for the line */
- int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
- int i;
- float step;
-
- g_print("waveform render\n");
-
- x_pos = g_new0(int, 257);
- y_pos = g_new0(int, 257);
- x2_pos = g_new0(int, 257);
- y2_pos = g_new0(int, 257);
-
- step = kanashi_image_data->width / 256.;
-
- /* calculate the line. */
- for (i = 0; i < 256; i++)
- {
- if (channels != 0)
- {
- x_pos[i] = i * step;
- y_pos[i] = (kanashi_image_data->height>>1) -
- CAP (kanashi_sound_data->pcm_data[channel][i * 2]>>8,
- (kanashi_image_data->height>>1)-1);
- }
- else
- {
- x_pos[i] = i * step;
- y_pos[i] = (kanashi_image_data->height>>2) -
- CAP (kanashi_sound_data->pcm_data[0][i * 2]>>9,
- (kanashi_image_data->height>>2)-1);
-
- x2_pos[i] = i * step;
- y2_pos[i] = 3*(kanashi_image_data->height>>2) -
- CAP (kanashi_sound_data->pcm_data[1][i * 2]>>9,
- (kanashi_image_data->height>>2)-1);
-
- }
- }
-
- /* draw the line. */
- for (i = 1; i < 256; i++)
- {
- kanashi_draw_line(x_pos[i - 1], y_pos[i - 1], x_pos[i], y_pos[i], value);
-
- if ( channels == 0 )
- kanashi_draw_line(x2_pos[i - 1], y2_pos[i - 1], x2_pos[i], y2_pos[i], value);
- }
-
- g_free(x_pos);
- g_free(y_pos);
- g_free(x2_pos);
- g_free(y2_pos);
-}
-
-void
-kanashi_render_vertical_waveform(gint channels, guchar value)
-{
- int channel = ( channels < 0 ) ? 0 : 1;
- int *x_pos, *y_pos; /* dynamic tables which store the positions for the line */
- int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
- int i;
- float step;
-
- x_pos = g_new0(int, 129);
- y_pos = g_new0(int, 129);
- x2_pos = g_new0(int, 129);
- y2_pos = g_new0(int, 129);
-
- step = kanashi_image_data->height / 128.;
-
- /* calculate the line. */
- for (i = 0; i < 128; i++)
- {
- if (channels != 0)
- {
- x_pos[i] = (kanashi_image_data->width>>1) -
- CAP (kanashi_sound_data->pcm_data[channel]
- [i*4]>>8,
- (kanashi_image_data->width>>1)-1);
- y_pos[i] = i * step;
- }
- else
- {
- x_pos[i] = (kanashi_image_data->width>>2)
- - CAP (kanashi_sound_data->pcm_data[0]
- [i*4]>>9,
- (kanashi_image_data->width>>2)-1);
- y_pos[i] = i * step;
-
- x2_pos[i] = 3*(kanashi_image_data->width>>2)
- - CAP (kanashi_sound_data->pcm_data[1]
- [i*4]>>9,
- (kanashi_image_data->width>>2)-1);
- y2_pos[i] = i * step;
- }
- }
-
- /* draw the line. */
- for (i = 1; i < 128; i++)
- {
- kanashi_draw_line(x_pos[i - 1], y_pos[i - 1], x_pos[i], y_pos[i], value);
-
- if ( channels == 0 )
- kanashi_draw_line(x2_pos[i - 1], y2_pos[i - 1], x2_pos[i], y2_pos[i], value);
- }
-
- g_free(x_pos);
- g_free(y_pos);
- g_free(x2_pos);
- g_free(y2_pos);
-}
-
-#if 0
-/* FIXME: allow for only 1 channel for wave_normalize & wave_smooth */
-/* **************** wave_normalize **************** */
-static struct kanashi_actuator_option_desc wave_normalize_opts[] =
-{
- { "height", "If positive, the height, in pixels, to which the waveform will be "
- "normalized; if negative, hfrac is used", OPT_TYPE_INT, { ival: -1 } },
- { "hfrac", "If positive, the fraction of the horizontal image size to which the "
- "waveform will be normalized; if negative, vfrac is used",
- OPT_TYPE_FLOAT, { fval: -1 } },
- { "vfrac", "If positive, the fraction of the vertical image size to which the "
- "waveform will be normalized",
- OPT_TYPE_FLOAT, { fval: .125 } },
- { "channels", "Which sound channel(s) to normalize: negative = channel 1,\n"
- "\tpositive = channel 2, 0 = both channels.",
- OPT_TYPE_INT, { ival: 0 } },
- { NULL }
-};
-
-static void
-wave_normalize_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- int i, j, max=0;
- float denom;
-
- for (j=0; j<2; j++)
- {
- if ( !(opts[3].val.ival) || (opts[3].val.ival < 0 && j == 0) ||
- (opts[3].val.ival > 0 && j == 1) ) {
-
- for (i=0; i<512; i++)
- if (abs(kanashi_sound_data->pcm_data[j][i]) > max)
- max = abs(kanashi_sound_data->pcm_data[j][i]);
-
- if (opts[0].val.ival > 0)
- denom = max/(opts[0].val.ival<<8);
- else if (opts[1].val.fval > 0)
- denom = max/(opts[1].val.fval * (kanashi_image_data->width<<8));
- else
- denom = max/(opts[2].val.fval * (kanashi_image_data->height<<8));
-
- if (denom > 0)
- for (i=0; i<512; i++)
- kanashi_sound_data->pcm_data[j][i]
- /= denom;
- }
- }
-}
-
-struct kanashi_actuator_desc builtin_wave_normalize =
-{
- "wave_normalize", "Normalize Waveform Data",
- "Normalizes the waveform data used by the wave_* actuators",
- 0, wave_normalize_opts,
- NULL, NULL, wave_normalize_exec
-};
-
-/* **************** wave_smooth **************** */
-struct kanashi_actuator_option_desc wave_smooth_opts[] =
-{
- { "channels", "Which sound channel(s) to smooth: negative = channel 1, \n"
- "\tpositive = channel 2, 0 = both channels.",
- OPT_TYPE_INT, { ival: 0 } },
- {0}
-};
-
-static void
-wave_smooth_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- int i, j, k;
- gint16 tmp[512];
-
- for (j=0; j<2; j++)
- {
- if ( !(opts[0].val.ival) || (opts[0].val.ival < 0 && j == 0) ||
- (opts[0].val.ival > 0 && j == 1) ) {
-
- for (i=4; i<508; i++)
- {
- k = (kanashi_sound_data->pcm_data[j][i]<<3)
- + (kanashi_sound_data->pcm_data[j][i+1]<<2)
- + (kanashi_sound_data->pcm_data[j][i-1]<<2)
- + (kanashi_sound_data->pcm_data[j][i+2]<<2)
- + (kanashi_sound_data->pcm_data[j][i-2]<<2)
- + (kanashi_sound_data->pcm_data[j][i+3]<<1)
- + (kanashi_sound_data->pcm_data[j][i-3]<<1)
- + (kanashi_sound_data->pcm_data[j][i+4]<<1)
- + (kanashi_sound_data->pcm_data[j][i-4]<<1);
- tmp[i] = k >> 5;
- }
- memcpy (kanashi_sound_data->pcm_data[j]+4, tmp, sizeof (gint16) * 504);
- }
- }
-}
-
-struct kanashi_actuator_desc builtin_wave_smooth =
-{
- "wave_smooth", "Smooth Waveform Data",
- "Smooth out the waveform data used by the wave_* actuators",
- 0, wave_smooth_opts,
- NULL, NULL, wave_smooth_exec
-};
-
-/* **************** wave_radial **************** */
-static struct kanashi_actuator_option_desc wave_radial_opts[] =
-{
- { "base_radius", " ",
- OPT_TYPE_FLOAT, { fval: 0 } },
- {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
-/* {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} }, */
- { NULL }
-};
-
-static void
-wave_radial_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- int i, x, y;
- guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
-
- for(i=0; i<360; i++)
- {
- x = (kanashi_image_data->width>>1)
- + (opts[0].val.fval + (kanashi_sound_data->pcm_data[0][(int)(i*(512.0/360.0))]>>8))
- * cos_val[i];
- y = (kanashi_image_data->height>>1)
- + (opts[0].val.fval + (kanashi_sound_data->pcm_data[0][(int)(i*(512.0/360.0))]>>8))
- * sin_val[i];
-
- kanashi_image_data->surface[0][PN_IMG_INDEX (CAPHILO(x,kanashi_image_data->width,0),
- CAPHILO(y,kanashi_image_data->height,0))]
- = value;
- }
-};
-
-struct kanashi_actuator_desc builtin_wave_radial =
-{
- "wave_radial", "Radial Waveform",
- "Draws a single waveform varying"
- " radially from the center of the image",
- 0, wave_radial_opts,
- NULL, NULL, wave_radial_exec
-};
-#endif
diff --git a/src/kanashi/xform.c b/src/kanashi/xform.c
deleted file mode 100644
index 35a7191..0000000
--- a/src/kanashi/xform.c
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- * kanashi: iterated javascript-driven visualization framework
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: allow for only using an xform on part of the img? */
-/* FIXME: perhaps combine these into a single vector field
- so that only 1 apply_xform needs to be done for as many
- of these as someone wants to use */
-
-#include <config.h>
-
-#include <math.h>
-
-#include <glib.h>
-
-#include "kanashi.h"
-#include "kanashi_utils.h"
-
-struct xform_vector
-{
- gint32 offset; /* the offset of the top left pixel */
- guint16 w; /* 4:4:4:4 NE, NW, SE, SW pixel weights
- The total should be 16 */
-
- /* if offset < 0 then w is the color index to
- which the pixel will be set */
-};
-
-static void
-xfvec (float x, float y, struct xform_vector *v)
-{
- float xd, yd;
- int weight[4];
-
- if (x >= kanashi_image_data->width-1 || y >= kanashi_image_data->height-1
- || x < 0 || y < 0)
- {
- v->offset = -1;
- v->w = 0;
- return;
- }
-
- v->offset = PN_IMG_INDEX (floor(x), floor(y));
-
- xd = x - floor (x);
- yd = y - floor (y);
-
- weight[3] = xd * yd * 16;
- weight[2] = (1-xd) * yd * 16;
- weight[1] = xd * (1-yd) * 16;
- weight[0] = 16 - weight[3] - weight[2] - weight[1]; /* just in case */
-
- v->w = (weight[0]<<12) | (weight[1]<<8) | (weight[2]<<4) | weight[3];
-}
-
-static void
-apply_xform (struct xform_vector *vfield)
-{
- int i;
- struct xform_vector *v;
- register guchar *srcptr;
- register guchar *destptr;
- register int color;
-
- if (vfield == NULL)
- return;
-
- for (i=0, v=vfield, destptr=kanashi_image_data->surface[1];
- i<kanashi_image_data->width*kanashi_image_data->height;
- i++, v++, destptr++)
- {
- /* off the screen */
- if (v->offset < 0)
- {
- *destptr = (guchar)v->w;
- continue;
- }
-
- srcptr = kanashi_image_data->surface[0] + v->offset;
-
- /* exactly on the pixel */
- if (v->w == 0)
- *destptr = *srcptr;
-
- /* gotta blend the points */
- else
- {
- color = *srcptr * (v->w>>12);
- color += *++srcptr * ((v->w>>8) & 0x0f);
- color += *(srcptr+=kanashi_image_data->width) * (v->w & 0x0f);
- color += *(--srcptr) * ((v->w>>4) & 0x0f);
- color >>= 4;
- *destptr = (guchar)color;
- }
- }
-}
-
-#if 0
-/* **************** xform_spin **************** */
-/* FIXME: Describe these better, how they are backwards */
-/* FIXME: better name? */
-struct kanashi_actuator_option_desc xform_spin_opts[] =
-{
- { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: -8.0 } },
- { "r_add", "The number of pixels by which the r coordinate will be "
- "increased (before scaling)", OPT_TYPE_FLOAT, { fval: 0.0 } },
- { "r_scale", "The amount by which the r coordinate of each pixel will "
- "be scaled", OPT_TYPE_FLOAT, { fval: 1.0 } },
- { NULL }
-};
-
-struct xform_spin_data
-{
- int width, height;
- struct xform_vector *vfield;
-};
-
-static void
-xform_spin_init (gpointer *data)
-{
- *data = g_new0 (struct xform_spin_data, 1);
-}
-
-static void
-xform_spin_cleanup (gpointer data)
-{
- struct xform_spin_data *d = (struct xform_spin_data *) data;
-
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_spin_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- struct xform_spin_data *d = (struct xform_spin_data*)data;
- float i, j;
-
- if (d->width != kanashi_image_data->width
- || d->height != kanashi_image_data->height)
- {
- d->width = kanashi_image_data->width;
- d->height = kanashi_image_data->height;
-
- if (d->vfield)
- g_free (d->vfield);
-
- d->vfield = g_malloc0 (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j=-(kanashi_image_data->height>>1)+1; j<=kanashi_image_data->height>>1; j++)
- for (i=-(kanashi_image_data->width>>1); i<kanashi_image_data->width>>1; i++)
- {
- float r, t = 0;
- float x, y;
-
- r = sqrt (i*i + j*j);
- if (r)
- t = asin (j/r);
- if (i < 0)
- t = M_PI - t;
-
- t += opts[0].val.fval * M_PI/180.0;
- r += opts[1].val.fval;
- r *= opts[2].val.fval;
-
- x = (r * cos (t)) + (kanashi_image_data->width>>1);
- y = (kanashi_image_data->height>>1) - (r * sin (t));
-
- xfvec (x, y, &d->vfield
- [PN_IMG_INDEX ((kanashi_image_data->width>>1)+(int)rint(i),
- ((kanashi_image_data->height>>1)-(int)rint(j)))]);
- }
- }
-
- apply_xform (d->vfield);
- kanashi_swap_surfaces ();
-}
-
-struct kanashi_actuator_desc builtin_xform_spin =
-{
- "xform_spin", "Spin Transform",
- "Rotates and radially scales the image",
- 0, xform_spin_opts,
- xform_spin_init, xform_spin_cleanup, xform_spin_exec
-};
-
-/* **************** xform_ripple **************** */
-struct kanashi_actuator_option_desc xform_ripple_opts[] =
-{
- { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: 0 } },
- { "ripples", "The number of ripples that fit on the screen "
- "(horizontally)", OPT_TYPE_FLOAT, { fval: 8 } },
- { "base_speed", "The minimum number of pixels to move each pixel",
- OPT_TYPE_FLOAT, { fval: 1 } },
- { "mod_speed", "The maximum number of pixels by which base_speed"
- " will be modified", OPT_TYPE_FLOAT, { fval: 1 } },
- { NULL }
-};
-
-struct xform_ripple_data
-{
- int width, height;
- struct xform_vector *vfield;
-};
-
-static void
-xform_ripple_init (gpointer *data)
-{
- *data = g_new0 (struct xform_ripple_data, 1);
-}
-
-static void
-xform_ripple_cleanup (gpointer data)
-{
- struct xform_ripple_data *d = (struct xform_ripple_data*) data;
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_ripple_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- struct xform_ripple_data *d = (struct xform_ripple_data*)data;
- float i, j;
-
- if (d->width != kanashi_image_data->width
- || d->height != kanashi_image_data->height)
- {
- d->width = kanashi_image_data->width;
- d->height = kanashi_image_data->height;
-
- if (d->vfield)
- g_free (d->vfield);
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j=-(kanashi_image_data->height>>1)+1; j<=kanashi_image_data->height>>1; j++)
- for (i=-(kanashi_image_data->width>>1); i<kanashi_image_data->width>>1; i++)
- {
- float r, t = 0;
- float x, y;
-
- r = sqrt (i*i + j*j);
- if (r)
- t = asin (j/r);
- if (i < 0)
- t = M_PI - t;
-
- t += opts[0].val.fval * M_PI/180.0;
-
- if (r > 4)//(kanashi_image_data->width/(2*opts[1].val.fval)))
- r -= opts[2].val.fval + (opts[3].val.fval/2) *
- (1 + sin ((r/(kanashi_image_data->width/(2*opts[1].val.fval)))*M_PI));
-/* else if (r > 4) */
-/* r *= r/(kanashi_image_data->width/opts[1].val.fval); */
- else /* don't let it explode */
- r = 1000000;
-
-
- x = (r * cos (t)) + (kanashi_image_data->width>>1);
- y = (kanashi_image_data->height>>1) - (r * sin (t));
-
- xfvec (x, y, &d->vfield
- [PN_IMG_INDEX ((kanashi_image_data->width>>1)+(int)rint(i),
- ((kanashi_image_data->height>>1)-(int)rint(j)))]);
- }
- }
-
- apply_xform (d->vfield);
- kanashi_swap_surfaces ();
-}
-
-struct kanashi_actuator_desc builtin_xform_ripple =
-{
- "xform_ripple", "Ripple Transform", "Creates an ripple effect",
- 0, xform_ripple_opts,
- xform_ripple_init, xform_ripple_cleanup, xform_ripple_exec
-};
-
-/* **************** xform_bump_spin **************** */
-struct kanashi_actuator_option_desc xform_bump_spin_opts[] =
-{
- { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: 0 } },
- { "bumps", "The number of bumps that on the image",
- OPT_TYPE_FLOAT, { fval: 8 } },
- { "base_scale", "The base radial scale",
- OPT_TYPE_FLOAT, { fval: 0.95 } },
- { "mod_scale", "The maximum amount that should be "
- "added to the base_scale to create the 'bump' effect",
- OPT_TYPE_FLOAT, { fval: .1 } },
- { NULL }
-};
-
-struct xform_bump_spin_data
-{
- int width, height;
- struct xform_vector *vfield;
-};
-
-static void
-xform_bump_spin_init (gpointer *data)
-{
- *data = g_new0 (struct xform_bump_spin_data, 1);
-}
-
-static void
-xform_bump_spin_cleanup (gpointer data)
-{
- struct xform_bump_spin_data *d = (struct xform_bump_spin_data*) data;
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_bump_spin_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- struct xform_bump_spin_data *d = (struct xform_bump_spin_data*)data;
- float i, j;
-
- if (d->width != kanashi_image_data->width
- || d->height != kanashi_image_data->height)
- {
- d->width = kanashi_image_data->width;
- d->height = kanashi_image_data->height;
-
- if (d->vfield)
- g_free (d->vfield);
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j=-(kanashi_image_data->height>>1)+1; j<=kanashi_image_data->height>>1; j++)
- for (i=-(kanashi_image_data->width>>1); i<kanashi_image_data->width>>1; i++)
- {
- float r, t = 0;
- float x, y;
-
- r = sqrt (i*i + j*j);
- if (r)
- t = asin (j/r);
- if (i < 0)
- t = M_PI - t;
-
- t += opts[0].val.fval * M_PI/180.0;
-
- r *= opts[2].val.fval + opts[3].val.fval
- * (1 + sin (t*opts[1].val.fval));
-
- x = (r * cos (t)) + (kanashi_image_data->width>>1);
- y = (kanashi_image_data->height>>1) - (r * sin (t));
-
- xfvec (x, y, &d->vfield
- [PN_IMG_INDEX ((kanashi_image_data->width>>1)+(int)rint(i),
- ((kanashi_image_data->height>>1)-(int)rint(j)))]);
- }
- }
-
- apply_xform (d->vfield);
- kanashi_swap_surfaces ();
-}
-
-struct kanashi_actuator_desc builtin_xform_bump_spin =
-{
- "xform_bump_spin", "Bump Transform",
- "Rotate the image at a varying speed to create "
- "the illusion of bumps",
- 0, xform_bump_spin_opts,
- xform_bump_spin_init, xform_bump_spin_cleanup, xform_bump_spin_exec
-};
-
-/* **************** xform_halfrender **************** */
-struct kanashi_actuator_option_desc xform_halfrender_opts[] =
-{
- { "direction", "Negative is horizontal, positive is vertical.",
- OPT_TYPE_INT, { ival: 1 } },
- { "render_twice", "Render the second image.",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-static void
-xform_halfrender_exec (const struct kanashi_actuator_option *opts,
- gpointer data)
-{
- gint x, y;
-
- if (opts[0].val.ival < 0)
- {
- for (y = 0; y < kanashi_image_data->height; y += 2)
- {
- for (x = 0; x < kanashi_image_data->width; x++)
- {
- kanashi_image_data->surface[1][PN_IMG_INDEX(x, y / 2)] =
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)];
- if (opts[1].val.bval)
- {
- kanashi_image_data->surface[1][PN_IMG_INDEX(x, (y / 2) + (kanashi_image_data->height / 2))] =
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
- }
- }
- else
- {
- for (y = 0; y < kanashi_image_data->height; y++)
- {
- for (x = 0; x < kanashi_image_data->width; x += 2)
- {
- kanashi_image_data->surface[1][PN_IMG_INDEX(x / 2, y)] =
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)];
- if (opts[1].val.bval)
- {
- kanashi_image_data->surface[1][PN_IMG_INDEX((x / 2) + (kanashi_image_data->width / 2), y)] =
- kanashi_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
- }
- }
-
- kanashi_swap_surfaces ();
-}
-
-struct kanashi_actuator_desc builtin_xform_halfrender =
-{
- "xform_halfrender", "Halfrender Transform",
- "Divides the surface in half and renders it twice.",
- 0, xform_halfrender_opts,
- NULL, NULL, xform_halfrender_exec
-};
-
-/* **************** xform_movement **************** */
-struct kanashi_actuator_option_desc xform_movement_opts[] =
-{
- { "formula", "The formula to evaluate.",
- OPT_TYPE_STRING, { sval: "r = r * cos(r); d = sin(d);" } },
- { "polar", "Whether the coordinates are polar or not.",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-typedef struct {
- int width, height; /* Previous width and height. */
- struct xform_vector *vfield;
-} PnMovementData;
-
-static void
-xform_movement_init (gpointer *data)
-{
- *data = g_new0(PnMovementData, 1);
-}
-
-static void
-xform_movement_cleanup (gpointer data)
-{
- PnMovementData *d = (PnMovementData *) data;
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-inline void
-xform_trans_polar (struct xform_vector *vfield, gint x, gint y,
- expression_t *expr, symbol_dict_t *dict)
-{
- gdouble *rf, *df;
- gdouble xf, yf;
- gint xn, yn;
-
- rf = dict_variable(dict, "r");
- df = dict_variable(dict, "d");
-
- /* Points (xf, yf) must be in a (-1..1) square. */
- xf = 2.0 * x / (kanashi_image_data->width - 1) - 1.0;
- yf = 2.0 * y / (kanashi_image_data->height - 1) - 1.0;
-
- /* Now, convert to polar coordinates r and d. */
- *rf = hypot(xf, yf);
- *df = atan2(yf, xf);
-
- /* Run the script. */
- expr_execute(expr, dict);
-
- /* Back to (-1..1) square. */
- xf = (*rf) * cos ((*df));
- yf = (*rf) * sin ((*df));
-
- /* Convert back to physical coordinates. */
- xn = (int)(((xf + 1.0) * (kanashi_image_data->width - 1) / 2) + 0.5);
- yn = (int)(((yf + 1.0) * (kanashi_image_data->height - 1) / 2) + 0.5);
-
- if (xn < 0 || xn >= kanashi_image_data->width || yn < 0 || yn >= kanashi_image_data->height)
- {
- xn = x; yn = y;
- }
-
- xfvec (xn, yn, &vfield[PN_IMG_INDEX (x, y)]);
-}
-
-inline void
-xform_trans_literal (struct xform_vector *vfield, gint x, gint y,
- expression_t *expr, symbol_dict_t *dict)
-{
- gint xn, yn;
- gdouble *xf = dict_variable(dict, "x");
- gdouble *yf = dict_variable(dict, "y");
-
- /* Points (xf, yf) must be in a (-1..1) square. */
- *xf = 2.0 * x / (kanashi_image_data->width - 1) - 1.0;
- *yf = 2.0 * y / (kanashi_image_data->height - 1) - 1.0;
-
- /* Run the script. */
- expr_execute(expr, dict);
-
- /* Convert back to physical coordinates. */
- xn = (int)(((*xf + 1.0) * (kanashi_image_data->width - 1) / 2) + 0.5);
- yn = (int)(((*yf + 1.0) * (kanashi_image_data->height - 1) / 2) + 0.5);
-
- if (xn < 0 || xn >= kanashi_image_data->width || yn < 0 || yn >= kanashi_image_data->height)
- {
- xn = x; yn = y;
- }
-
- xfvec (xn, yn, &vfield[PN_IMG_INDEX (x, y)]);
-}
-
-static void
-xform_movement_exec (const struct kanashi_actuator_option *opts,
- gpointer odata)
-{
- PnMovementData *d = (PnMovementData *) odata;
- void (*transform_func)(struct xform_vector *, gint, gint, expression_t *, symbol_dict_t *) =
- opts[1].val.bval == TRUE ? xform_trans_polar : xform_trans_literal;
-
- if (d->width != kanashi_image_data->width
- || d->height != kanashi_image_data->height)
- {
- gint i, j;
- gdouble *rf, *df;
- expression_t *expr;
- symbol_dict_t *dict;
-
- d->width = kanashi_image_data->width;
- d->height = kanashi_image_data->height;
-
- if (d->vfield)
- {
- g_free (d->vfield);
- d->vfield = NULL;
- }
-
- if (opts[0].val.sval == NULL)
- return;
-
- dict = dict_new();
- expr = expr_compile_string(opts[0].val.sval, dict);
- if (!expr)
- {
- dict_free(dict);
- return;
- }
-
- rf = dict_variable(dict, "r");
- df = dict_variable(dict, "d");
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j = 0; j < kanashi_image_data->height; j++)
- for (i = 0; i < kanashi_image_data->width; i++)
- {
- transform_func(d->vfield, i, j, expr, dict);
- }
- }
-
- apply_xform (d->vfield);
- kanashi_swap_surfaces ();
-}
-
-struct kanashi_actuator_desc builtin_xform_movement =
-{
- "xform_movement", "Movement Transform",
- "A customizable blitter.",
- 0, xform_movement_opts,
- xform_movement_init, xform_movement_cleanup, xform_movement_exec
-};
-
-/* **************** xform_dynmovement **************** */
-/* FIXME: really slow */
-struct kanashi_actuator_option_desc xform_dynmovement_opts[] =
-{
- { "init_script", "The formula to evaluate on init.",
- OPT_TYPE_STRING, { sval: "" } },
- { "beat_script", "The formula to evaluate on each beat.",
- OPT_TYPE_STRING, { sval: "" } },
- { "frame_script", "The formula to evaluate on each frame.",
- OPT_TYPE_STRING, { sval: "" } },
- { "point_script", "The formula to evaluate.",
- OPT_TYPE_STRING, { sval: "d = 0.15;" } },
- { "polar", "Whether or not the coordinates to use are polar.",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-typedef struct {
- int width, height; /* Previous width and height. */
- expression_t *expr_init;
- expression_t *expr_frame;
- expression_t *expr_beat;
- expression_t *expr_point;
- symbol_dict_t *dict;
- struct xform_vector *vfield;
-} PnDynMovementData;
-
-static void
-xform_dynmovement_init (gpointer *data)
-{
- *data = g_new0(PnDynMovementData, 1);
-}
-
-static void
-xform_dynmovement_cleanup (gpointer data)
-{
- PnDynMovementData *d = (PnDynMovementData *) data;
-
- if (d)
- {
- if (d->expr_init)
- expr_free (d->expr_init);
- if (d->expr_beat)
- expr_free (d->expr_beat);
- if (d->expr_frame)
- expr_free (d->expr_frame);
- if (d->expr_point)
- expr_free (d->expr_point);
- if (d->dict)
- dict_free (d->dict);
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_dynmovement_exec (const struct kanashi_actuator_option *opts,
- gpointer odata)
-{
- PnDynMovementData *d = (PnDynMovementData *) odata;
- gint i, j;
- gdouble *rf, *df;
- void (*transform_func)(struct xform_vector *, gint, gint, expression_t *, symbol_dict_t *) =
- opts[4].val.bval == TRUE ? xform_trans_polar : xform_trans_literal;
- gboolean make_table = FALSE;
-
- if (d->width != kanashi_image_data->width
- || d->height != kanashi_image_data->height)
- {
- d->width = kanashi_image_data->width;
- d->height = kanashi_image_data->height;
-
- if (d->vfield)
- {
- g_free (d->vfield);
- d->vfield = NULL;
- }
-
- if (opts[3].val.sval == NULL)
- return;
-
- if (!d->dict)
- d->dict = dict_new();
- else
- {
- dict_free(d->dict);
- d->dict = dict_new();
- }
-
- if (d->expr_init)
- {
- expr_free(d->expr_init);
- d->expr_init = NULL;
- }
-
- /* initialize */
- d->expr_init = expr_compile_string(opts[0].val.sval, d->dict);
-
- if (d->expr_init != NULL)
- {
- expr_execute(d->expr_init, d->dict);
- }
-
- d->expr_beat = expr_compile_string(opts[1].val.sval, d->dict);
- d->expr_frame = expr_compile_string(opts[2].val.sval, d->dict);
- d->expr_point = expr_compile_string(opts[3].val.sval, d->dict);
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- make_table = TRUE;
- }
-
- rf = dict_variable(d->dict, "r");
- df = dict_variable(d->dict, "d");
-
- if (*opts[2].val.sval != '\0' || kanashi_new_beat)
- make_table = TRUE;
-
- /* run the on-frame script. */
- if (make_table == TRUE)
- {
- if (d->expr_beat != NULL)
- expr_execute(d->expr_beat, d->dict);
-
- if (d->expr_frame != NULL)
- expr_execute(d->expr_frame, d->dict);
-
- for (j = 0; j < kanashi_image_data->height; j++)
- for (i = 0; i < kanashi_image_data->width; i++)
- {
- transform_func(d->vfield, i, j, d->expr_point, d->dict);
- }
- }
-
- apply_xform (d->vfield);
- kanashi_swap_surfaces ();
-}
-
-struct kanashi_actuator_desc builtin_xform_dynmovement =
-{
- "xform_dynmovement", "Dynamic Movement Transform",
- "A customizable blitter.",
- 0, xform_dynmovement_opts,
- xform_dynmovement_init, xform_dynmovement_cleanup, xform_dynmovement_exec
-};
-#endif
diff --git a/src/ladspa/Makefile b/src/ladspa/Makefile
index 0684a59..0da8f8b 100644
--- a/src/ladspa/Makefile
+++ b/src/ladspa/Makefile
@@ -1,12 +1,15 @@
PLUGIN = ladspa${PLUGIN_SUFFIX}
-SRCS = ladspa.c
+SRCS = effect.c \
+ loaded-list.c \
+ plugin.c \
+ plugin-list.c
include ../../buildsys.mk
include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
+CPPFLAGS += -I../.. ${PTHREAD_CFLAGS} ${GTK_CFLAGS}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} -ldl
+LIBS += -lm ${PTHREAD_LIBS} ${GTK_LIBS}
diff --git a/src/ladspa/effect.c b/src/ladspa/effect.c
new file mode 100644
index 0000000..561b560
--- /dev/null
+++ b/src/ladspa/effect.c
@@ -0,0 +1,262 @@
+/*
+ * LADSPA Host for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "ladspa.h"
+#include "plugin.h"
+
+static int ladspa_channels, ladspa_rate;
+
+static void start_plugin (LoadedPlugin * loaded)
+{
+ if (loaded->active)
+ return;
+
+ loaded->active = 1;
+
+ PluginData * plugin = loaded->plugin;
+ const LADSPA_Descriptor * desc = plugin->desc;
+
+ int ports = plugin->in_ports->len;
+
+ if (ports == 0 || ports != plugin->out_ports->len)
+ {
+ fprintf (stderr, "Plugin has unusable port configuration: %s\n", desc->Name);
+ return;
+ }
+
+ if (ladspa_channels % ports != 0)
+ {
+ fprintf (stderr, "Plugin cannot be used with %d channels: %s\n",
+ ladspa_channels, desc->Name);
+ return;
+ }
+
+ int instances = ladspa_channels / ports;
+
+ loaded->instances = index_new ();
+ loaded->in_bufs = g_malloc (sizeof (float *) * ladspa_channels);
+ loaded->out_bufs = g_malloc (sizeof (float *) * ladspa_channels);
+
+ for (int i = 0; i < instances; i ++)
+ {
+ LADSPA_Handle handle = desc->instantiate (desc, ladspa_rate);
+ index_append (loaded->instances, handle);
+
+ int controls = index_count (plugin->controls);
+ for (int c = 0; c < controls; c ++)
+ {
+ ControlData * control = index_get (plugin->controls, c);
+ desc->connect_port (handle, control->port, & loaded->values[c]);
+ }
+
+ for (int p = 0; p < ports; p ++)
+ {
+ int channel = ports * i + p;
+
+ float * in = g_malloc (sizeof (float) * LADSPA_BUFLEN);
+ loaded->in_bufs[channel] = in;
+ int in_port = g_array_index (plugin->in_ports, int, p);
+ desc->connect_port (handle, in_port, in);
+
+ float * out = g_malloc (sizeof (float) * LADSPA_BUFLEN);
+ loaded->out_bufs[channel] = out;
+ int out_port = g_array_index (plugin->out_ports, int, p);
+ desc->connect_port (handle, out_port, out);
+ }
+
+ if (desc->activate)
+ desc->activate (handle);
+ }
+}
+
+static void run_plugin (LoadedPlugin * loaded, float * data, int samples)
+{
+ if (! loaded->instances)
+ return;
+
+ PluginData * plugin = loaded->plugin;
+ const LADSPA_Descriptor * desc = plugin->desc;
+
+ int ports = plugin->in_ports->len;
+ int instances = index_count (loaded->instances);
+ assert (ports * instances == ladspa_channels);
+
+ while (samples / ladspa_channels > 0)
+ {
+ int frames = MIN (samples / ladspa_channels, LADSPA_BUFLEN);
+
+ for (int i = 0; i < instances; i ++)
+ {
+ LADSPA_Handle * handle = index_get (loaded->instances, i);
+
+ for (int p = 0; p < ports; p ++)
+ {
+ int channel = ports * i + p;
+ float * get = data + channel;
+ float * in = loaded->in_bufs[channel];
+ float * in_end = in + frames;
+
+ while (in < in_end)
+ {
+ * in ++ = * get;
+ get += ladspa_channels;
+ }
+ }
+
+ desc->run (handle, frames);
+
+ for (int p = 0; p < ports; p ++)
+ {
+ int channel = ports * i + p;
+ float * set = data + channel;
+ float * out = loaded->out_bufs[channel];
+ float * out_end = out + frames;
+
+ while (out < out_end)
+ {
+ * set = * out ++;
+ set += ladspa_channels;
+ }
+ }
+ }
+
+ data += ladspa_channels * frames;
+ samples -= ladspa_channels * frames;
+ }
+}
+
+static void flush_plugin (LoadedPlugin * loaded)
+{
+ if (! loaded->instances)
+ return;
+
+ PluginData * plugin = loaded->plugin;
+ const LADSPA_Descriptor * desc = plugin->desc;
+
+ int instances = index_count (loaded->instances);
+ for (int i = 0; i < instances; i ++)
+ {
+ LADSPA_Handle * handle = index_get (loaded->instances, i);
+
+ if (desc->deactivate)
+ desc->deactivate (handle);
+ if (desc->activate)
+ desc->activate (handle);
+ }
+}
+
+void shutdown_plugin_locked (LoadedPlugin * loaded)
+{
+ loaded->active = 0;
+
+ if (! loaded->instances)
+ return;
+
+ PluginData * plugin = loaded->plugin;
+ const LADSPA_Descriptor * desc = plugin->desc;
+
+ int instances = index_count (loaded->instances);
+ for (int i = 0; i < instances; i ++)
+ {
+ LADSPA_Handle * handle = index_get (loaded->instances, i);
+
+ if (desc->deactivate)
+ desc->deactivate (handle);
+
+ desc->cleanup (handle);
+ }
+
+ for (int channel = 0; channel < ladspa_channels; channel ++)
+ {
+ g_free (loaded->in_bufs[channel]);
+ g_free (loaded->out_bufs[channel]);
+ }
+
+ index_free (loaded->instances);
+ loaded->instances = NULL;
+ g_free (loaded->in_bufs);
+ loaded->in_bufs = NULL;
+ g_free (loaded->out_bufs);
+ loaded->out_bufs = NULL;
+}
+
+void ladspa_start (int * channels, int * rate)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (loadeds);
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ shutdown_plugin_locked (loaded);
+ }
+
+ ladspa_channels = * channels;
+ ladspa_rate = * rate;
+
+ pthread_mutex_unlock (& mutex);
+}
+
+void ladspa_process (float * * data, int * samples)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (loadeds);
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ start_plugin (loaded);
+ run_plugin (loaded, * data, * samples);
+ }
+
+ pthread_mutex_unlock (& mutex);
+}
+
+void ladspa_flush (void)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (loadeds);
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ flush_plugin (loaded);
+ }
+
+ pthread_mutex_unlock (& mutex);
+}
+
+void ladspa_finish (float * * data, int * samples)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (loadeds);
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ start_plugin (loaded);
+ run_plugin (loaded, * data, * samples);
+ shutdown_plugin_locked (loaded);
+ }
+
+ pthread_mutex_unlock (& mutex);
+}
diff --git a/src/ladspa/ladspa.c b/src/ladspa/ladspa.c
deleted file mode 100644
index 92afdb9..0000000
--- a/src/ladspa/ladspa.c
+++ /dev/null
@@ -1,1115 +0,0 @@
-/* xmms_ladspa - use LADSPA plugins from XMMS
- Copyright (C) 2002,2003 Nick Lamb <njl195@zepler.org.uk>
-
- 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-/* BMP-ladspa port by Giacomo Lozito <city_hunter@users.sf.net> */
-/* Audacious 2.4 port by John Lindgren <john.lindgren@tds.net>, 2010 */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <float.h>
-#include <dlfcn.h>
-#include <dirent.h>
-#include <sys/types.h>
-#include <gtk/gtk.h>
-
-#include <audacious/configdb.h>
-#include <audacious/i18n.h>
-#include <audacious/plugin.h>
-
-#include "ladspa.h"
-
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
-#define PLUGIN_NAME "LADSPA host"
-
-#define MAX_SAMPLES 8192
-#define MAX_KNOBS 64
-
-typedef struct
-{
- char *name;
- char *filename;
- long int id;
- long int unique_id;
- gboolean stereo;
-} ladspa_plugin;
-
-typedef struct
-{
- void *library;
- char *filename;
- gboolean stereo;
- gboolean restored;
- const LADSPA_Descriptor *descriptor;
- LADSPA_Handle *handle; /* left or mono */
- LADSPA_Handle *handle2; /* right stereo */
- GtkWidget *window;
- guint timeout;
- GtkAdjustment *adjustments[MAX_KNOBS];
- LADSPA_Data knobs[MAX_KNOBS];
-} plugin_instance;
-
-static void start(void);
-static void stop(void);
-static void configure(void);
-
-static void restore(void);
-static plugin_instance *add_plugin(ladspa_plugin * plugin);
-static void find_all_plugins(void);
-static void find_plugins(char *path_entry);
-static ladspa_plugin *get_plugin_by_id(const gchar * basename, long id);
-static plugin_instance *load(char *filename, long int num);
-static void reboot_plugins(void);
-static void boot_plugin(plugin_instance * instance);
-static void port_assign(plugin_instance * instance);
-static void ladspa_shutdown(plugin_instance * instance);
-static void unload(plugin_instance * instance);
-
-static GtkWidget *make_plugin_clist(void);
-static void make_run_clist(void);
-static void sort_column(GtkCList * clist, gint column, gpointer user_data);
-static void select_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data);
-static void unselect_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data);
-static void add_plugin_clicked(GtkButton * button, gpointer user_data);
-static void remove_plugin_clicked(GtkButton * button, gpointer user_data);
-static void configure_plugin_clicked(GtkButton * button, gpointer user_data);
-
-static void draw_plugin(plugin_instance * instance);
-
-static LADSPA_Data left[MAX_SAMPLES], right[MAX_SAMPLES], trash[MAX_SAMPLES];
-
-G_LOCK_DEFINE_STATIC(running_plugins);
-
-static GSList *plugin_list, *running_plugins;
-
-static ladspa_plugin *selected_plugin;
-static plugin_instance *selected_instance;
-
-static struct
-{
- gint srate;
- gint nch;
- gboolean ignore;
- gboolean running;
- gboolean initialised;
-} state = {0, 0, FALSE, FALSE, FALSE};
-
-static GtkWidget *config_window = NULL, *run_clist = NULL;
-
-static void start(void)
-{
- if (state.initialised == FALSE)
- {
- restore();
- }
- else if (state.srate > 0)
- {
- reboot_plugins();
- }
- state.running = TRUE;
-}
-
-static void restore(void)
-{
- mcs_handle_t *db;
- gint k, plugins = 0;
-
- db = aud_cfg_db_open();
-
- aud_cfg_db_get_int(db, "ladspa", "plugins", &plugins);
- for (k = 0; k < plugins; ++k)
- {
- gint id;
- int port, ports = 0;
- plugin_instance *instance;
- gchar *bn, *section, *file;
-
- section = g_strdup_printf("ladspa_plugin%d", k);
-
- aud_cfg_db_get_int(db, section, "id", &id);
- aud_cfg_db_get_int(db, section, "ports", &ports);
- if (!aud_cfg_db_get_string(db, section, "file", &file)) {
- g_free(section);
- continue;
- }
- bn = g_path_get_basename(file);
- g_free(file);
- instance = add_plugin(get_plugin_by_id(bn,id));
- g_free(bn);
- if (!instance)
- continue; /* couldn't load this plugin */
-
- for (port = 0; port < ports && port < MAX_KNOBS; ++port)
- {
- gchar *key = g_strdup_printf("port%d", port);
- aud_cfg_db_get_float(db, section, key, &(instance->knobs[port]));
- }
- instance->restored = TRUE;
- g_free(section);
- }
-
- aud_cfg_db_close(db);
-
- state.initialised = TRUE;
-}
-
-static ladspa_plugin *get_plugin_by_id(const gchar * basename, long id)
-{
- GSList *list;
- ladspa_plugin *plugin;
-
- if (plugin_list == NULL)
- {
- find_all_plugins();
- }
-
- for (list = plugin_list; list != NULL; list = g_slist_next(list))
- {
- gchar *bn;
- plugin = (ladspa_plugin *) list->data;
-
- bn = g_path_get_basename(plugin->filename);
- if (plugin->unique_id == id && !g_ascii_strcasecmp(basename, bn))
- {
- g_free(bn);
- return plugin;
- }
-
- g_free(bn);
- }
-
- return NULL;
-}
-
-static void find_all_plugins(void)
-{
- char *ladspa_path, *directory;
-
- plugin_list = NULL; /* empty list */
- ladspa_path = getenv("LADSPA_PATH");
- if (ladspa_path == NULL)
- {
- /* Fallback, look in obvious places */
- find_plugins("/usr/lib/ladspa");
- find_plugins("/usr/local/lib/ladspa");
- }
- else
- {
- ladspa_path = g_strdup(ladspa_path);
-
- directory = strtok(ladspa_path, ":");
- while (directory != NULL)
- {
- find_plugins(directory);
- directory = strtok(NULL, ":");
- }
- g_free(ladspa_path);
- }
-}
-
-static plugin_instance *load(char *filename, long int num)
-{
- LADSPA_Descriptor_Function descriptor_fn;
- plugin_instance *instance;
-
- instance = g_new0(plugin_instance, 1);
-
- instance->filename = filename;
- instance->library = dlopen(filename, RTLD_NOW);
- if (instance->library == NULL)
- {
- g_free(instance);
- return NULL;
- }
- descriptor_fn = dlsym(instance->library, "ladspa_descriptor");
- if (descriptor_fn == NULL)
- {
- g_free(instance);
- return NULL;
- }
- instance->descriptor = descriptor_fn(num);
-
- return instance;
-}
-
-static void unload(plugin_instance * instance)
-{
- if (instance->window)
- {
- gtk_widget_destroy(instance->window);
- instance->window = NULL;
- }
-
- if (instance->timeout)
- {
- gtk_timeout_remove(instance->timeout);
- }
-
- ladspa_shutdown(instance);
-
- if (instance->library)
- {
- dlclose(instance->library);
- }
-}
-
-static void stop(void)
-{
- GSList *list;
- mcs_handle_t *db;
- gint plugins = 0;
-
- if (state.running == FALSE)
- {
- return;
- }
- state.running = FALSE;
- db = aud_cfg_db_open();
- G_LOCK(running_plugins);
- for (list = running_plugins; list != NULL; list = g_slist_next(list))
- {
- plugin_instance *instance = (plugin_instance *) list->data;
- gchar *bn;
- gchar *section;
- int port, ports = 0;
-
- bn = g_path_get_basename(instance->filename);
- section = g_strdup_printf("ladspa_plugin%d", plugins);
- g_free(bn);
-
- aud_cfg_db_set_int(db, section, "id", instance->descriptor->UniqueID);
- aud_cfg_db_set_string(db, section, "file", instance->filename);
- aud_cfg_db_set_string(db, section, "label", (gchar *) instance->descriptor->Label);
-
- ports = instance->descriptor->PortCount;
- if (ports > MAX_KNOBS)
- ports = MAX_KNOBS;
- for (port = 0; port < ports; ++port)
- {
- gchar *key = g_strdup_printf("port%d", port);
- aud_cfg_db_set_float(db, section, key, instance->knobs[port]);
- g_free(key);
- }
- aud_cfg_db_set_int(db, section, "ports", ports);
- g_free(section);
- ladspa_shutdown(instance);
- plugins++;
- }
- G_UNLOCK(running_plugins);
-
- aud_cfg_db_set_int(db, "ladspa", "plugins", plugins);
- aud_cfg_db_close(db);
-}
-
-static void ladspa_shutdown(plugin_instance * instance)
-{
- const LADSPA_Descriptor *descriptor = instance->descriptor;
-
- if (instance->handle)
- {
- if (descriptor->deactivate)
- {
- descriptor->deactivate(instance->handle);
- }
- descriptor->cleanup(instance->handle);
- instance->handle = NULL;
- }
- if (instance->handle2)
- {
- if (descriptor->deactivate)
- {
- descriptor->deactivate(instance->handle2);
- }
- descriptor->cleanup(instance->handle2);
- instance->handle2 = NULL;
- }
-}
-
-static void boot_plugin(plugin_instance * instance)
-{
- const LADSPA_Descriptor *descriptor = instance->descriptor;
-
- ladspa_shutdown(instance);
- instance->handle = descriptor->instantiate(descriptor, state.srate);
- if (state.nch > 1 && !instance->stereo)
- {
- /* Create an additional instance */
- instance->handle2 = descriptor->instantiate(descriptor, state.srate);
- }
-
- port_assign(instance);
-
- if (descriptor->activate)
- {
- descriptor->activate(instance->handle);
- if (instance->handle2)
- {
- descriptor->activate(instance->handle2);
- }
- }
-}
-
-static void reboot_plugins(void)
-{
- GSList *list;
-
- G_LOCK(running_plugins);
- for (list = running_plugins; list != NULL; list = g_slist_next(list))
- {
- boot_plugin((plugin_instance *) list->data);
- }
- G_UNLOCK(running_plugins);
-}
-
-static void ladspa_process (gfloat * * datap, gint * samplesp)
-{
- gfloat * const data = * datap;
- const gint samples = * samplesp;
- GSList *list;
- plugin_instance *instance;
- int k;
-
- if (running_plugins == NULL || state.running == FALSE || state.ignore ||
- samples > MAX_SAMPLES)
- return;
-
- if (state.nch == 1)
- {
- for (k = 0; k < samples; k ++)
- left[k] = data[k];
-
- G_LOCK(running_plugins);
- for (list = running_plugins; list != NULL; list = g_slist_next(list))
- {
- instance = (plugin_instance *) list->data;
- if (instance->handle)
- instance->descriptor->run(instance->handle, samples);
- }
- G_UNLOCK(running_plugins);
-
- for (k = 0; k < samples; k ++)
- data[k] = left[k];
- }
- else
- {
- for (k = 0; k < samples; k += 2)
- left[k >> 1] = data[k];
- for (k = 1; k < samples; k += 2)
- right[k >> 1] = data[k];
-
- G_LOCK(running_plugins);
- for (list = running_plugins; list != NULL; list = g_slist_next(list))
- {
- instance = (plugin_instance *) list->data;
- if (instance->handle)
- instance->descriptor->run(instance->handle, samples / 2);
- if (instance->handle2)
- instance->descriptor->run(instance->handle2, samples / 2);
- }
- G_UNLOCK(running_plugins);
-
- for (k = 0; k < samples; k += 2)
- data[k] = left[k >> 1];
- for (k = 1; k < samples; k += 2)
- data[k] = right[k >> 1];
- }
-}
-
-static void port_assign(plugin_instance * instance)
-{
- unsigned long port;
- unsigned long inputs = 0, outputs = 0;
- const LADSPA_Descriptor *plugin = instance->descriptor;
-
- for (port = 0; port < plugin->PortCount; ++port)
- {
-
- if (LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[port]))
- {
- if (port < MAX_KNOBS)
- {
- plugin->connect_port(instance->handle, port, &(instance->knobs[port]));
- if (instance->handle2)
- plugin->connect_port(instance->handle2, port, &(instance->knobs[port]));
- }
- else
- {
- plugin->connect_port(instance->handle, port, trash);
- if (instance->handle2)
- plugin->connect_port(instance->handle2, port, trash);
- }
-
- }
- else if (LADSPA_IS_PORT_AUDIO(plugin->PortDescriptors[port]))
- {
-
- if (LADSPA_IS_PORT_INPUT(plugin->PortDescriptors[port]))
- {
- if (inputs == 0)
- {
- plugin->connect_port(instance->handle, port, left);
- if (instance->handle2)
- plugin->connect_port(instance->handle2, port, right);
- }
- else if (inputs == 1 && instance->stereo)
- {
- plugin->connect_port(instance->handle, port, right);
- }
- else
- {
- plugin->connect_port(instance->handle, port, trash);
- if (instance->handle2)
- plugin->connect_port(instance->handle2, port, trash);
- }
- inputs++;
-
- }
- else if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[port]))
- {
- if (outputs == 0)
- {
- plugin->connect_port(instance->handle, port, left);
- if (instance->handle2)
- plugin->connect_port(instance->handle2, port, right);
- }
- else if (outputs == 1 && instance->stereo)
- {
- plugin->connect_port(instance->handle, port, right);
- }
- else
- {
- plugin->connect_port(instance->handle, port, trash);
- if (instance->handle2)
- plugin->connect_port(instance->handle2, port, trash);
- }
- outputs++;
-
- }
- }
- }
-
-}
-
-static void find_plugins(char *path_entry)
-{
- ladspa_plugin *plugin;
- void *library = NULL;
- char lib_name[PATH_MAX];
- LADSPA_Descriptor_Function descriptor_fn;
- const LADSPA_Descriptor *descriptor;
- DIR *dir;
- struct dirent *dirent;
- long int k;
- unsigned long int port, input, output;
-
- dir = opendir(path_entry);
- if (dir == NULL)
- return;
-
- while ((dirent = readdir(dir)))
- {
- snprintf(lib_name, PATH_MAX, "%s/%s", path_entry, dirent->d_name);
- library = dlopen(lib_name, RTLD_LAZY);
- if (library == NULL)
- {
- continue;
- }
- descriptor_fn = dlsym(library, "ladspa_descriptor");
- if (descriptor_fn == NULL)
- {
- dlclose(library);
- continue;
- }
-
- for (k = 0;; ++k)
- {
- descriptor = descriptor_fn(k);
- if (descriptor == NULL)
- {
- break;
- }
- plugin = g_new(ladspa_plugin, 1);
- plugin->name = g_strdup(descriptor->Name);
- plugin->filename = g_strdup(lib_name);
- plugin->id = k;
- plugin->unique_id = descriptor->UniqueID;
- for (input = output = port = 0; port < descriptor->PortCount; ++port)
- {
- if (LADSPA_IS_PORT_AUDIO(descriptor->PortDescriptors[port]))
- {
- if (LADSPA_IS_PORT_INPUT(descriptor->PortDescriptors[port]))
- input++;
- if (LADSPA_IS_PORT_OUTPUT(descriptor->PortDescriptors[port]))
- output++;
- }
- else if (LADSPA_IS_PORT_CONTROL(descriptor->PortDescriptors[port]))
- {
- }
- }
- if (input >= 2 && output >= 2)
- {
- plugin->stereo = TRUE;
- }
- else
- {
- plugin->stereo = FALSE;
- }
- plugin_list = g_slist_prepend(plugin_list, plugin);
- }
- dlclose(library);
- }
-
- closedir(dir);
- return;
-}
-
-static void value_changed(GtkAdjustment * adjustment, gpointer * user_data)
-{
- LADSPA_Data *data = (LADSPA_Data *) user_data;
-
- G_LOCK(running_plugins);
- *data = (LADSPA_Data) adjustment->value;
- G_UNLOCK(running_plugins);
-}
-
-static void toggled(GtkToggleButton * togglebutton, gpointer * user_data)
-{
- LADSPA_Data *data = (LADSPA_Data *) user_data;
-
- if (gtk_toggle_button_get_active(togglebutton))
- {
- G_LOCK(running_plugins);
- *data = (LADSPA_Data) 1.0f;
- G_UNLOCK(running_plugins);
- }
- else
- {
- G_LOCK(running_plugins);
- *data = (LADSPA_Data) - 1.0f;
- G_UNLOCK(running_plugins);
- }
-}
-
-static int update_instance(gpointer data)
-{
- plugin_instance *instance = (plugin_instance *) data;
- unsigned long k;
-
- G_LOCK(running_plugins);
- for (k = 0; k < MAX_KNOBS && k < instance->descriptor->PortCount; ++k)
- {
- if (LADSPA_IS_PORT_OUTPUT(instance->descriptor->PortDescriptors[k]) && LADSPA_IS_PORT_CONTROL(instance->descriptor->PortDescriptors[k]))
- {
- instance->adjustments[k]->value = instance->knobs[k];
- gtk_adjustment_value_changed(instance->adjustments[k]);
- }
- }
- G_UNLOCK(running_plugins);
- return TRUE;
-}
-
-static void draw_plugin(plugin_instance * instance)
-{
- const LADSPA_Descriptor *plugin = instance->descriptor;
- const LADSPA_PortRangeHint *hints = plugin->PortRangeHints;
- LADSPA_Data fact, min, max, step, start;
- int dp;
- unsigned long k;
- gboolean no_ui = TRUE;
- GtkWidget *widget, *vbox, *hbox;
- GtkObject *adjustment;
-
- if (instance->window != NULL)
- {
- /* Just show window */
- gtk_widget_show(instance->window);
- return;
- }
-
- instance->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(instance->window), GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_window_set_title(GTK_WINDOW(instance->window), plugin->Name);
-
- vbox = gtk_vbox_new(FALSE, 3);
-
- for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k)
- {
- if (!LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k]))
- continue;
- no_ui = FALSE;
- hbox = gtk_hbox_new(FALSE, 3);
- widget = gtk_label_new(plugin->PortNames[k]);
- gtk_container_add(GTK_CONTAINER(hbox), widget);
-
- if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor))
- {
- widget = gtk_toggle_button_new_with_label("Press");
- g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggled), &(instance->knobs[k]));
- gtk_container_add(GTK_CONTAINER(hbox), widget);
- gtk_container_add(GTK_CONTAINER(vbox), hbox);
- continue;
- }
-
- if (LADSPA_IS_HINT_SAMPLE_RATE(hints[k].HintDescriptor))
- {
- fact = state.srate ? state.srate : 44100.0f;
- }
- else
- {
- fact = 1.0f;
- }
-
- if (LADSPA_IS_HINT_BOUNDED_BELOW(hints[k].HintDescriptor))
- {
- min = hints[k].LowerBound * fact;
- }
- else
- {
- min = -10000.0f;
- }
-
- if (LADSPA_IS_HINT_BOUNDED_ABOVE(hints[k].HintDescriptor))
- {
- max = hints[k].UpperBound * fact;
- }
- else
- {
- max = 10000.0f;
- }
-
- /* infinity */
- if (10000.0f <= max - min)
- {
- dp = 1;
- step = 5.0f;
-
- /* 100.0 ... lots */
- }
- else if (100.0f < max - min)
- {
- dp = 0;
- step = 5.0f;
-
- /* 10.0 ... 100.0 */
- }
- else if (10.0f < max - min)
- {
- dp = 1;
- step = 0.5f;
-
- /* 1.0 ... 10.0 */
- }
- else if (1.0f < max - min)
- {
- dp = 2;
- step = 0.05f;
-
- /* 0.0 ... 1.0 */
- }
- else
- {
- dp = 3;
- step = 0.005f;
- }
-
- if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor))
- {
- dp = 0;
- if (step < 1.0f)
- step = 1.0f;
- }
-
- if (LADSPA_IS_HINT_DEFAULT_MINIMUM(hints[k].HintDescriptor))
- {
- start = min;
- }
- else if (LADSPA_IS_HINT_DEFAULT_LOW(hints[k].HintDescriptor))
- {
- start = min * 0.75f + max * 0.25f;
- }
- else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(hints[k].HintDescriptor))
- {
- start = min * 0.5f + max * 0.5f;
- }
- else if (LADSPA_IS_HINT_DEFAULT_HIGH(hints[k].HintDescriptor))
- {
- start = min * 0.25f + max * 0.75f;
- }
- else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(hints[k].HintDescriptor))
- {
- start = max;
- }
- else if (LADSPA_IS_HINT_DEFAULT_0(hints[k].HintDescriptor))
- {
- start = 0.0f;
- }
- else if (LADSPA_IS_HINT_DEFAULT_1(hints[k].HintDescriptor))
- {
- start = 1.0f;
- }
- else if (LADSPA_IS_HINT_DEFAULT_100(hints[k].HintDescriptor))
- {
- start = 100.0f;
- }
- else if (LADSPA_IS_HINT_DEFAULT_440(hints[k].HintDescriptor))
- {
- start = 440.0f;
- }
- else if (LADSPA_IS_HINT_INTEGER(hints[k].HintDescriptor))
- {
- start = min;
- }
- else if (max >= 0.0f && min <= 0.0f)
- {
- start = 0.0f;
- }
- else
- {
- start = min * 0.5f + max * 0.5f;
- }
-
- if (instance->restored)
- {
- start = instance->knobs[k];
- }
- else
- {
- instance->knobs[k] = start;
- }
- adjustment = gtk_adjustment_new(start, min, max, step, step * 10.0, 0.0);
- instance->adjustments[k] = GTK_ADJUSTMENT(adjustment);
- widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), step, dp);
- if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k]))
- {
- gtk_widget_set_sensitive(widget, FALSE);
- }
- else
- {
- g_signal_connect(adjustment, "value-changed", G_CALLBACK(value_changed), &(instance->knobs[k]));
- }
- gtk_container_add(GTK_CONTAINER(hbox), widget);
- widget = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
- gtk_scale_set_digits(GTK_SCALE(widget), dp);
- if (LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k]))
- {
- gtk_widget_set_sensitive(widget, FALSE);
- }
- gtk_container_add(GTK_CONTAINER(hbox), widget);
-
- gtk_container_add(GTK_CONTAINER(vbox), hbox);
- }
-
- if (no_ui)
- {
- widget = gtk_label_new(_("This LADSPA plugin has no user controls"));
- gtk_container_add(GTK_CONTAINER(vbox), widget);
- }
-
- instance->timeout = gtk_timeout_add(100, update_instance, instance);
-
- gtk_container_add(GTK_CONTAINER(instance->window), vbox);
-
- g_signal_connect(G_OBJECT(instance->window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
- gtk_widget_show_all(instance->window);
-}
-
-static void sort_column(GtkCList * clist, gint column, gpointer user_data)
-{
- gtk_clist_set_sort_column(clist, column);
- gtk_clist_sort(clist);
-}
-
-static void unselect_instance(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data)
-{
- selected_instance = NULL;
-}
-
-static void select_instance(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data)
-{
- selected_instance = (plugin_instance *) gtk_clist_get_row_data(clist, row);
-}
-
-static void reorder_instance(GtkCList * clist, gint from, gint to, gpointer user_data)
-{
- void *data;
-
- G_LOCK(running_plugins);
- data = g_slist_nth_data(running_plugins, from);
- running_plugins = g_slist_remove(running_plugins, data);
- running_plugins = g_slist_insert(running_plugins, data, to);
- G_UNLOCK(running_plugins);
-}
-
-static void make_run_clist(void)
-{
- char *titles[1] = { _("Name") };
- GSList *list;
-
- run_clist = gtk_clist_new_with_titles(1, titles);
- gtk_clist_column_titles_passive(GTK_CLIST(run_clist));
- gtk_clist_set_reorderable(GTK_CLIST(run_clist), TRUE);
- g_signal_connect(G_OBJECT(run_clist), "select-row", G_CALLBACK(select_instance), NULL);
- g_signal_connect(G_OBJECT(run_clist), "unselect-row", G_CALLBACK(unselect_instance), NULL);
- g_signal_connect(G_OBJECT(run_clist), "row-move", G_CALLBACK(reorder_instance), NULL);
-
- G_LOCK(running_plugins);
- for (list = running_plugins; list != NULL; list = g_slist_next(list))
- {
- gint row;
- gchar *line[1];
- plugin_instance *instance = (plugin_instance *) list->data;
-
- line[0] = (char *)instance->descriptor->Name;
- row = gtk_clist_append(GTK_CLIST(run_clist), line);
- gtk_clist_set_row_data(GTK_CLIST(run_clist), row, (gpointer) instance);
- gtk_clist_select_row(GTK_CLIST(run_clist), row, 0);
- }
- G_UNLOCK(running_plugins);
-}
-
-static plugin_instance *add_plugin(ladspa_plugin * plugin)
-{
- plugin_instance *instance;
- char *line[1];
- gint row;
-
- if (plugin == NULL)
- {
- return NULL;
- }
-
- instance = load(plugin->filename, plugin->id);
- if (instance == NULL)
- {
- return NULL;
- }
-
- instance->stereo = plugin->stereo;
- if (state.srate && state.running)
- {
- /* Jump right in */
- boot_plugin(instance);
- }
-
- if (run_clist)
- {
- line[0] = (char *)instance->descriptor->Name;
- row = gtk_clist_append(GTK_CLIST(run_clist), line);
- gtk_clist_set_row_data(GTK_CLIST(run_clist), row, (gpointer) instance);
- gtk_clist_select_row(GTK_CLIST(run_clist), row, 0);
- draw_plugin(instance);
- }
- G_LOCK(running_plugins);
- running_plugins = g_slist_append(running_plugins, instance);
- G_UNLOCK(running_plugins);
-
- return instance;
-}
-
-
-static void unselect_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data)
-{
- selected_plugin = NULL;
-}
-
-static void select_plugin(GtkCList * clist, gint row, gint column, GdkEventButton * event, gpointer user_data)
-{
- selected_plugin = (ladspa_plugin *) gtk_clist_get_row_data(clist, row);
- gtk_clist_unselect_all(GTK_CLIST(run_clist));
- if (event->type == GDK_2BUTTON_PRESS)
- {
- /* Double click */
- add_plugin(selected_plugin);
- }
-}
-
-static GtkWidget *make_plugin_clist(void)
-{
- ladspa_plugin *plugin;
- GSList *list;
- GtkWidget *clist;
- char number[14];
- char *titles[2] = { _("UID"), _("Name") };
- char *line[2];
- gint row;
-
- find_all_plugins();
-
- clist = gtk_clist_new_with_titles(2, titles);
- gtk_clist_column_titles_active(GTK_CLIST(clist));
- gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);
- gtk_clist_set_sort_column(GTK_CLIST(clist), 1);
-
- for (list = plugin_list; list != NULL; list = g_slist_next(list))
- {
- plugin = (ladspa_plugin *) list->data;
- snprintf(number, sizeof(number), "%ld", plugin->unique_id);
- line[0] = number;
- line[1] = plugin->name;
- row = gtk_clist_append(GTK_CLIST(clist), line);
- gtk_clist_set_row_data(GTK_CLIST(clist), row, (gpointer) plugin);
- }
- gtk_clist_sort(GTK_CLIST(clist));
-
- g_signal_connect(G_OBJECT(clist), "click-column", G_CALLBACK(sort_column), NULL);
- g_signal_connect(G_OBJECT(clist), "select-row", G_CALLBACK(select_plugin), NULL);
- g_signal_connect(G_OBJECT(clist), "unselect-row", G_CALLBACK(unselect_plugin), NULL);
-
- return clist;
-}
-
-static void add_plugin_clicked(GtkButton * button, gpointer user_data)
-{
- add_plugin(selected_plugin);
-}
-
-static void remove_plugin_clicked(GtkButton * button, gpointer user_data)
-{
- plugin_instance *instance = selected_instance;
- gint row;
-
- if (instance == NULL)
- {
- return;
- }
- row = gtk_clist_find_row_from_data(GTK_CLIST(run_clist), (gpointer) instance);
- gtk_clist_remove(GTK_CLIST(run_clist), row);
-
- G_LOCK(running_plugins);
- running_plugins = g_slist_remove(running_plugins, instance);
- unload(instance);
- G_UNLOCK(running_plugins);
- selected_instance = NULL;
-}
-
-static void configure_plugin_clicked(GtkButton * button, gpointer user_data)
-{
- if (selected_instance)
- {
- draw_plugin(selected_instance);
- }
-}
-
-static void configure(void)
-{
- GtkWidget *widget, *vbox, *hbox, *bbox, *frame;
-
- if (config_window)
- {
- /* just show the window */
- gtk_widget_show(config_window);
- return;
- }
-
- config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(config_window), GDK_WINDOW_TYPE_HINT_DIALOG);
- vbox = gtk_vbox_new(FALSE, 0);
- hbox = gtk_hbox_new(TRUE, 0);
-
- frame = gtk_frame_new(_("Installed plugins"));
- widget = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
- gtk_container_add(GTK_CONTAINER(widget), make_plugin_clist());
- gtk_container_add(GTK_CONTAINER(frame), widget);
- gtk_container_add(GTK_CONTAINER(hbox), frame);
-
-
- frame = gtk_frame_new(_("Running plugins"));
- widget = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
- if (run_clist == NULL)
- {
- make_run_clist();
- }
- gtk_container_add(GTK_CONTAINER(widget), run_clist);
- gtk_container_add(GTK_CONTAINER(frame), widget);
- gtk_container_add(GTK_CONTAINER(hbox), frame);
- gtk_container_add(GTK_CONTAINER(vbox), hbox);
-
- /* Buttons */
- bbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
- widget = gtk_button_new_with_label(_("Add"));
- g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(add_plugin_clicked), NULL);
- gtk_box_pack_end_defaults(GTK_BOX(bbox), widget);
- widget = gtk_button_new_with_label(_("Remove"));
- g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(remove_plugin_clicked), NULL);
- gtk_box_pack_end_defaults(GTK_BOX(bbox), widget);
- widget = gtk_button_new_with_label(_("Configure"));
- g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(configure_plugin_clicked), NULL);
- gtk_box_pack_end_defaults(GTK_BOX(bbox), widget);
-
- gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
-
- gtk_container_add(GTK_CONTAINER(config_window), vbox);
-
- gtk_window_set_title(GTK_WINDOW(config_window), _("LADSPA Plugin Catalog"));
- gtk_widget_set_usize(config_window, 380, 400);
- g_signal_connect(G_OBJECT(config_window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
-
- gtk_widget_show_all(config_window);
-}
-
-void ladspa_start (gint * channels, gint * rate)
-{
- state.nch = * channels;
- state.srate = * rate;
- state.ignore = (* channels < 1 || * channels > 2);
- reboot_plugins ();
-}
-
-void ladspa_flush (void)
-{
-}
-
-void ladspa_finish (gfloat * * data, gint * samples)
-{
- ladspa_process (data, samples);
-}
-
-gint ladspa_decoder_to_output_time (gint time)
-{
- return time;
-}
-
-gint ladspa_output_to_decoder_time (gint time)
-{
- return time;
-}
-
-static EffectPlugin header = {
- .description = PLUGIN_NAME,
- .init = start,
- .cleanup = stop,
- .configure = configure,
- .start = ladspa_start,
- .process = ladspa_process,
- .flush = ladspa_flush,
- .finish = ladspa_finish,
- .decoder_to_output_time = ladspa_decoder_to_output_time,
- .output_to_decoder_time = ladspa_output_to_decoder_time,
- .preserves_format = TRUE,
-};
-
-EffectPlugin * header_list[] = {& header, NULL};
-SIMPLE_EFFECT_PLUGIN (ladspa, header_list)
diff --git a/src/ladspa/ladspa.h b/src/ladspa/ladspa.h
index 31e2a1b..b1a9c4e 100644
--- a/src/ladspa/ladspa.h
+++ b/src/ladspa/ladspa.h
@@ -3,20 +3,20 @@
Linux Audio Developer's Simple Plugin API Version 1.1[LGPL].
Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis,
Stefan Westerfeld.
-
+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1 of
the License, or (at your option) any later version.
-
+
This library 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
Lesser General Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA. */
#ifndef LADSPA_INCLUDED
@@ -32,7 +32,7 @@ extern "C" {
/*****************************************************************************/
-/* Overview:
+/* Overview:
There is a large number of synthesis packages in use or development
on the Linux platform at this time. This API (`The Linux Audio
@@ -76,7 +76,7 @@ extern "C" {
/* Fundamental data type passed in and out of plugin. This data type
is used to communicate audio samples and control values. It is
assumed that the plugin will work sensibly given any numeric input
- value although it may have a preferred range (see hints below).
+ value although it may have a preferred range (see hints below).
For audio it is generally assumed that 1.0f is the `0dB' reference
amplitude and is a `normal' signal level. */
@@ -85,8 +85,8 @@ typedef float LADSPA_Data;
/*****************************************************************************/
-/* Special Plugin Properties:
-
+/* Special Plugin Properties:
+
Optional features of the plugin type are encapsulated in the
LADSPA_Properties type. This is assembled by ORing individual
properties together. */
@@ -122,7 +122,7 @@ typedef int LADSPA_Properties;
(3) The plugin will not access files, devices, pipes, sockets, IPC
or any other mechanism that might result in process or thread
blocking.
-
+
(4) The plugin will take an amount of time to execute a run() or
run_adding() call approximately of form (A+B*SampleCount) where A
and B depend on the machine and host in use. This amount of time
@@ -137,7 +137,7 @@ typedef int LADSPA_Properties;
/*****************************************************************************/
-/* Plugin Ports:
+/* Plugin Ports:
Plugins have `ports' that are inputs or outputs for audio or
data. Ports can communicate arrays of LADSPA_Data (for audio
@@ -172,23 +172,23 @@ typedef int LADSPA_PortDescriptor;
/*****************************************************************************/
-/* Plugin Port Range Hints:
+/* Plugin Port Range Hints:
The host may wish to provide a representation of data entering or
leaving a plugin (e.g. to generate a GUI automatically). To make
this more meaningful, the plugin should provide `hints' to the host
describing the usual values taken by the data.
-
+
Note that these are only hints. The host may ignore them and the
plugin must not assume that data supplied to it is meaningful. If
the plugin receives invalid input data it is expected to continue
to run without failure and, where possible, produce a sensible
output (e.g. a high-pass filter given a negative cutoff frequency
might switch to an all-pass mode).
-
+
Hints are meaningful for all input and output ports but hints for
input control ports are expected to be particularly useful.
-
+
More hint information is encapsulated in the
LADSPA_PortRangeHintDescriptor type which is assembled by ORing
individual hint types together. Hints may require further
@@ -353,7 +353,7 @@ typedef struct _LADSPA_PortRangeHint {
/*****************************************************************************/
-/* Plugin Handles:
+/* Plugin Handles:
This plugin handle indicates a particular instance of the plugin
concerned. It is valid to compare this to NULL (0 for C++) but
@@ -364,13 +364,13 @@ typedef void * LADSPA_Handle;
/*****************************************************************************/
-/* Descriptor for a Type of Plugin:
+/* Descriptor for a Type of Plugin:
This structure is used to describe a plugin type. It provides a
number of functions to examine the type, instantiate it, link it to
buffers and workspaces and to run it. */
-typedef struct _LADSPA_Descriptor {
+typedef struct _LADSPA_Descriptor {
/* This numeric identifier indicates the plugin type
uniquely. Plugin programmers may reserve ranges of IDs from a
@@ -430,7 +430,7 @@ typedef struct _LADSPA_Descriptor {
instantiation function accepts a sample rate as a parameter. The
plugin descriptor from which this instantiate function was found
must also be passed. This function must return NULL if
- instantiation fails.
+ instantiation fails.
Note that instance initialisation should generally occur in
activate() rather than here. */
@@ -551,7 +551,7 @@ typedef struct _LADSPA_Descriptor {
/* Once an instance of a plugin has been finished with it can be
deleted using the following function. The instance handle passed
ceases to be valid after this call.
-
+
If activate() was called for a plugin instance then a
corresponding call to deactivate() must be made before cleanup()
is called. */
@@ -589,7 +589,7 @@ typedef struct _LADSPA_Descriptor {
const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index);
/* Datatype corresponding to the ladspa_descriptor() function. */
-typedef const LADSPA_Descriptor *
+typedef const LADSPA_Descriptor *
(*LADSPA_Descriptor_Function)(unsigned long Index);
/**********************************************************************/
diff --git a/src/ladspa/loaded-list.c b/src/ladspa/loaded-list.c
new file mode 100644
index 0000000..3bba087
--- /dev/null
+++ b/src/ladspa/loaded-list.c
@@ -0,0 +1,135 @@
+/*
+ * LADSPA Host for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <libaudgui/list.h>
+
+#include "plugin.h"
+
+static void get_value (void * user, int row, int column, GValue * value)
+{
+ g_return_if_fail (row >= 0 && row < index_count (loadeds));
+ g_return_if_fail (column == 0);
+
+ LoadedPlugin * loaded = index_get (loadeds, row);
+ g_value_set_string (value, loaded->plugin->desc->Name);
+}
+
+static int get_selected (void * user, int row)
+{
+ g_return_val_if_fail (row >= 0 && row < index_count (loadeds), 0);
+
+ LoadedPlugin * loaded = index_get (loadeds, row);
+ return loaded->selected;
+}
+
+static void set_selected (void * user, int row, int selected)
+{
+ g_return_if_fail (row >= 0 && row < index_count (loadeds));
+
+ LoadedPlugin * loaded = index_get (loadeds, row);
+ loaded->selected = selected;
+}
+
+static void select_all (void * user, int selected)
+{
+ int count = index_count (loadeds);
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ loaded->selected = selected;
+ }
+}
+
+static void shift_rows (void * user, int row, int before)
+{
+ pthread_mutex_lock (& mutex);
+
+ int rows = index_count (loadeds);
+ g_return_if_fail (row >= 0 && row < rows);
+ g_return_if_fail (before >= 0 && before <= rows);
+
+ if (before == row)
+ return;
+
+ Index * move = index_new ();
+ Index * others = index_new ();
+
+ int begin, end;
+ if (before < row)
+ {
+ begin = before;
+ end = row + 1;
+ while (end < rows && ((LoadedPlugin *) index_get (loadeds, end))->selected)
+ end ++;
+ }
+ else
+ {
+ begin = row;
+ while (begin > 0 && ((LoadedPlugin *) index_get (loadeds, begin - 1))->selected)
+ begin --;
+ end = before;
+ }
+
+ for (gint i = begin; i < end; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ index_append (loaded->selected ? move : others, loaded);
+ }
+
+ if (before < row)
+ {
+ index_merge_append (move, others);
+ index_free (others);
+ }
+ else
+ {
+ index_merge_append (others, move);
+ index_free (move);
+ move = others;
+ }
+
+ index_copy_set (move, 0, loadeds, begin, end - begin);
+ index_free (move);
+
+ pthread_mutex_unlock (& mutex);
+
+ if (loaded_list)
+ update_loaded_list (loaded_list);
+}
+
+static const AudguiListCallbacks callbacks = {
+ .get_value = get_value,
+ .get_selected = get_selected,
+ .set_selected = set_selected,
+ .select_all = select_all,
+ .shift_rows = shift_rows};
+
+GtkWidget * create_loaded_list (void)
+{
+ GtkWidget * list = audgui_list_new (& callbacks, NULL, index_count (loadeds));
+ audgui_list_add_column (list, NULL, 0, G_TYPE_STRING, -1);
+ gtk_tree_view_set_headers_visible ((GtkTreeView *) list, 0);
+ return list;
+}
+
+void update_loaded_list (GtkWidget * list)
+{
+ audgui_list_delete_rows (list, 0, audgui_list_row_count (list));
+ audgui_list_insert_rows (list, 0, index_count (loadeds));
+}
diff --git a/src/ladspa/plugin-list.c b/src/ladspa/plugin-list.c
new file mode 100644
index 0000000..411bef9
--- /dev/null
+++ b/src/ladspa/plugin-list.c
@@ -0,0 +1,77 @@
+/*
+ * LADSPA Host for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <libaudgui/list.h>
+
+#include "plugin.h"
+
+static void get_value (void * user, int row, int column, GValue * value)
+{
+ g_return_if_fail (row >= 0 && row < index_count (plugins));
+ g_return_if_fail (column == 0);
+
+ PluginData * plugin = index_get (plugins, row);
+ g_value_set_string (value, plugin->desc->Name);
+}
+
+static int get_selected (void * user, int row)
+{
+ g_return_val_if_fail (row >= 0 && row < index_count (plugins), 0);
+
+ PluginData * plugin = index_get (plugins, row);
+ return plugin->selected;
+}
+
+static void set_selected (void * user, int row, int selected)
+{
+ g_return_if_fail (row >= 0 && row < index_count (plugins));
+
+ PluginData * plugin = index_get (plugins, row);
+ plugin->selected = selected;
+}
+
+static void select_all (void * user, int selected)
+{
+ int count = index_count (plugins);
+ for (int i = 0; i < count; i ++)
+ {
+ PluginData * plugin = index_get (plugins, i);
+ plugin->selected = selected;
+ }
+}
+
+static const AudguiListCallbacks callbacks = {
+ .get_value = get_value,
+ .get_selected = get_selected,
+ .set_selected = set_selected,
+ .select_all = select_all};
+
+GtkWidget * create_plugin_list (void)
+{
+ GtkWidget * list = audgui_list_new (& callbacks, NULL, index_count (plugins));
+ audgui_list_add_column (list, NULL, 0, G_TYPE_STRING, -1);
+ gtk_tree_view_set_headers_visible ((GtkTreeView *) list, 0);
+ return list;
+}
+
+void update_plugin_list (GtkWidget * list)
+{
+ audgui_list_delete_rows (list, 0, audgui_list_row_count (list));
+ audgui_list_insert_rows (list, 0, index_count (plugins));
+}
diff --git a/src/ladspa/plugin.c b/src/ladspa/plugin.c
new file mode 100644
index 0000000..d101c85
--- /dev/null
+++ b/src/ladspa/plugin.c
@@ -0,0 +1,677 @@
+/*
+ * LADSPA Host for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <dirent.h>
+#include <errno.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <gmodule.h>
+#include <gtk/gtk.h>
+
+#include <audacious/i18n.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
+#include <audacious/plugin.h>
+#include <libaudcore/audstrings.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+#include "config.h"
+#include "plugin.h"
+
+static const gchar * const ladspa_defaults[] = {
+ "plugin_count", "0",
+ NULL};
+
+pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+char * module_path;
+Index * modules; /* (void *) */
+Index * plugins; /* (PluginData *) */
+Index * loadeds; /* (LoadedPlugin *) */
+
+GtkWidget * about_win;
+GtkWidget * config_win;
+GtkWidget * plugin_list;
+GtkWidget * loaded_list;
+
+static ControlData * parse_control (const LADSPA_Descriptor * desc, int port)
+{
+ g_return_val_if_fail (desc->PortNames[port], NULL);
+ const LADSPA_PortRangeHint * hint = & desc->PortRangeHints[port];
+
+ ControlData * control = g_slice_new (ControlData);
+ control->port = port;
+ control->name = g_strdup (desc->PortNames[port]);
+ control->is_toggle = LADSPA_IS_HINT_TOGGLED (hint->HintDescriptor) ? 1 : 0;
+
+ control->min = LADSPA_IS_HINT_BOUNDED_BELOW (hint->HintDescriptor) ? hint->LowerBound :
+ LADSPA_IS_HINT_BOUNDED_ABOVE (hint->HintDescriptor) ? hint->UpperBound - 100 : -100;
+ control->max = LADSPA_IS_HINT_BOUNDED_ABOVE (hint->HintDescriptor) ? hint->UpperBound :
+ LADSPA_IS_HINT_BOUNDED_BELOW (hint->HintDescriptor) ? hint->LowerBound + 100 : 100;
+
+ if (LADSPA_IS_HINT_SAMPLE_RATE (hint->HintDescriptor))
+ {
+ control->min *= 96000;
+ control->max *= 96000;
+ }
+
+ if (LADSPA_IS_HINT_DEFAULT_0 (hint->HintDescriptor))
+ control->def = 0;
+ else if (LADSPA_IS_HINT_DEFAULT_1 (hint->HintDescriptor))
+ control->def = 1;
+ else if (LADSPA_IS_HINT_DEFAULT_100 (hint->HintDescriptor))
+ control->def = 100;
+ else if (LADSPA_IS_HINT_DEFAULT_440 (hint->HintDescriptor))
+ control->def = 440;
+ else if (LADSPA_IS_HINT_DEFAULT_MINIMUM (hint->HintDescriptor))
+ control->def = control->min;
+ else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM (hint->HintDescriptor))
+ control->def = control->max;
+ else if (LADSPA_IS_HINT_DEFAULT_LOW (hint->HintDescriptor))
+ {
+ if (LADSPA_IS_HINT_LOGARITHMIC (hint->HintDescriptor))
+ control->def = expf (0.75 * logf (control->min) + 0.25 * logf (control->max));
+ else
+ control->def = 0.75 * control->min + 0.25 * control->max;
+ }
+ else if (LADSPA_IS_HINT_DEFAULT_HIGH (hint->HintDescriptor))
+ {
+ if (LADSPA_IS_HINT_LOGARITHMIC (hint->HintDescriptor))
+ control->def = expf (0.25 * logf (control->min) + 0.75 * logf (control->max));
+ else
+ control->def = 0.25 * control->min + 0.75 * control->max;
+ }
+ else
+ {
+ if (LADSPA_IS_HINT_LOGARITHMIC (hint->HintDescriptor))
+ control->def = expf (0.5 * logf (control->min) + 0.5 * logf (control->max));
+ else
+ control->def = 0.5 * control->min + 0.5 * control->max;
+ }
+
+ return control;
+}
+
+static PluginData * open_plugin (const char * path, const LADSPA_Descriptor * desc)
+{
+ const char * slash = strrchr (path, G_DIR_SEPARATOR);
+ g_return_val_if_fail (slash && slash[1], NULL);
+ g_return_val_if_fail (desc->Label && desc->Name, NULL);
+
+ PluginData * plugin = g_slice_new (PluginData);
+ plugin->path = g_strdup (slash + 1);
+ plugin->desc = desc;
+ plugin->controls = index_new ();
+ plugin->in_ports = g_array_new (0, 0, sizeof (int));
+ plugin->out_ports = g_array_new (0, 0, sizeof (int));
+ plugin->selected = 0;
+
+ for (int i = 0; i < desc->PortCount; i ++)
+ {
+ if (LADSPA_IS_PORT_CONTROL (desc->PortDescriptors[i]))
+ {
+ ControlData * control = parse_control (desc, i);
+ if (control)
+ index_append (plugin->controls, control);
+ }
+ else if (LADSPA_IS_PORT_AUDIO (desc->PortDescriptors[i]) &&
+ LADSPA_IS_PORT_INPUT (desc->PortDescriptors[i]))
+ g_array_append_val (plugin->in_ports, i);
+ else if (LADSPA_IS_PORT_AUDIO (desc->PortDescriptors[i]) &&
+ LADSPA_IS_PORT_OUTPUT (desc->PortDescriptors[i]))
+ g_array_append_val (plugin->out_ports, i);
+ }
+
+ return plugin;
+}
+
+static void close_plugin (PluginData * plugin)
+{
+ int count = index_count (plugin->controls);
+ for (int i = 0; i < count; i ++)
+ {
+ ControlData * control = index_get (plugin->controls, i);
+ g_free (control->name);
+ g_slice_free (ControlData, control);
+ }
+
+ g_free (plugin->path);
+ index_free (plugin->controls);
+ g_array_free (plugin->in_ports, 1);
+ g_array_free (plugin->out_ports, 1);
+ g_slice_free (PluginData, plugin);
+}
+
+static void * open_module (const char * path)
+{
+ GModule * handle = g_module_open (path, G_MODULE_BIND_LOCAL);
+ if (! handle)
+ {
+ fprintf (stderr, "ladspa: Failed to open module %s: %s\n", path, g_module_error ());
+ return NULL;
+ }
+
+ void * sym;
+ if (! g_module_symbol (handle, "ladspa_descriptor", & sym))
+ {
+ fprintf (stderr, "ladspa: Not a valid LADSPA module: %s\n", path);
+ g_module_close (handle);
+ return NULL;
+ }
+
+ LADSPA_Descriptor_Function descfun = (LADSPA_Descriptor_Function) sym;
+
+ const LADSPA_Descriptor * desc;
+ for (int i = 0; (desc = descfun (i)); i ++)
+ {
+ PluginData * plugin = open_plugin (path, desc);
+ if (plugin)
+ index_append (plugins, plugin);
+ }
+
+ return handle;
+}
+
+static void open_modules_for_path (const char * path)
+{
+ DIR * folder = opendir (path);
+ if (! folder)
+ {
+ fprintf (stderr, "ladspa: Failed to read folder %s: %s\n", path, strerror (errno));
+ return;
+ }
+
+ struct dirent * entry;
+ while ((entry = readdir (folder)))
+ {
+ if (entry->d_name[0] == '.' || ! str_has_suffix_nocase (entry->d_name, G_MODULE_SUFFIX))
+ continue;
+
+ char filename[strlen (path) + strlen (entry->d_name) + 2];
+ snprintf (filename, sizeof filename, "%s" G_DIR_SEPARATOR_S "%s", path, entry->d_name);
+
+ void * handle = open_module (filename);
+ if (handle)
+ index_append (modules, handle);
+ }
+
+ closedir (folder);
+}
+
+static void open_modules_for_paths (const char * paths)
+{
+ if (! paths || ! paths[0])
+ return;
+
+ char * * split = g_strsplit (paths, ":", -1);
+
+ for (int i = 0; split[i]; i ++)
+ open_modules_for_path (split[i]);
+
+ g_strfreev (split);
+}
+
+static void open_modules (void)
+{
+ open_modules_for_paths (getenv ("LADSPA_PATH"));
+ open_modules_for_paths (module_path);
+}
+
+static void close_modules (void)
+{
+ int count = index_count (plugins);
+ for (int i = 0; i < count; i ++)
+ close_plugin (index_get (plugins, i));
+
+ index_delete (plugins, 0, count);
+
+ count = index_count (modules);
+ for (int i = 0; i < count; i ++)
+ g_module_close (index_get (modules, i));
+
+ index_delete (modules, 0, count);
+}
+
+LoadedPlugin * enable_plugin_locked (PluginData * plugin)
+{
+ LoadedPlugin * loaded = g_slice_new (LoadedPlugin);
+ loaded->plugin = plugin;
+ loaded->selected = 0;
+
+ int count = index_count (plugin->controls);
+ loaded->values = g_malloc (sizeof (float) * count);
+
+ for (int i = 0; i < count; i ++)
+ {
+ ControlData * control = index_get (plugin->controls, i);
+ loaded->values[i] = control->def;
+ }
+
+ loaded->active = 0;
+ loaded->instances = NULL;
+ loaded->in_bufs = NULL;
+ loaded->out_bufs = NULL;
+
+ loaded->settings_win = NULL;
+
+ index_append (loadeds, loaded);
+ return loaded;
+}
+
+void disable_plugin_locked (int i)
+{
+ g_return_if_fail (i >= 0 && i < index_count (loadeds));
+ LoadedPlugin * loaded = index_get (loadeds, i);
+
+ if (loaded->settings_win)
+ gtk_widget_destroy (loaded->settings_win);
+
+ shutdown_plugin_locked (loaded);
+
+ g_free (loaded->values);
+ g_slice_free (LoadedPlugin, loaded);
+ index_delete (loadeds, i, 1);
+}
+
+static PluginData * find_plugin (const char * path, const char * label)
+{
+ int count = index_count (plugins);
+ for (int i = 0; i < count; i ++)
+ {
+ PluginData * plugin = index_get (plugins, i);
+ if (! strcmp (plugin->path, path) && ! strcmp (plugin->desc->Label, label))
+ return plugin;
+ }
+
+ return NULL;
+}
+
+static void save_enabled_to_config (void)
+{
+ int count = index_count (loadeds);
+ aud_set_int ("ladspa", "plugin_count", count);
+
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, 0);
+ char key[32];
+
+ snprintf (key, sizeof key, "plugin%d_path", i);
+ aud_set_string ("ladspa", key, loaded->plugin->path);
+
+ snprintf (key, sizeof key, "plugin%d_label", i);
+ aud_set_string ("ladspa", key, loaded->plugin->desc->Label);
+
+ int ccount = index_count (loaded->plugin->controls);
+ for (int ci = 0; ci < ccount; ci ++)
+ {
+ snprintf (key, sizeof key, "plugin%d_control%d", i, ci);
+ aud_set_double ("ladspa", key, loaded->values[ci]);
+ }
+
+ disable_plugin_locked (0);
+ }
+}
+
+static void load_enabled_from_config (void)
+{
+ int count = aud_get_int ("ladspa", "plugin_count");
+
+ for (int i = 0; i < count; i ++)
+ {
+ char key[32];
+
+ snprintf (key, sizeof key, "plugin%d_path", i);
+ char * path = aud_get_string ("ladspa", key);
+
+ snprintf (key, sizeof key, "plugin%d_label", i);
+ char * label = aud_get_string ("ladspa", key);
+
+ PluginData * plugin = find_plugin (path, label);
+ if (plugin)
+ {
+ LoadedPlugin * loaded = enable_plugin_locked (plugin);
+
+ int ccount = index_count (loaded->plugin->controls);
+ for (int ci = 0; ci < ccount; ci ++)
+ {
+ snprintf (key, sizeof key, "plugin%d_control%d", i, ci);
+ loaded->values[ci] = aud_get_double ("ladspa", key);
+ }
+ }
+
+ g_free (path);
+ g_free (label);
+ }
+}
+
+static int init (void)
+{
+ pthread_mutex_lock (& mutex);
+
+ modules = index_new ();
+ plugins = index_new ();
+ loadeds = index_new ();
+
+ aud_config_set_defaults ("ladspa", ladspa_defaults);
+
+ module_path = aud_get_string ("ladspa", "module_path");
+
+ open_modules ();
+ load_enabled_from_config ();
+
+ pthread_mutex_unlock (& mutex);
+ return 1;
+}
+
+static void cleanup (void)
+{
+ if (about_win)
+ gtk_widget_destroy (about_win);
+ if (config_win)
+ gtk_widget_destroy (config_win);
+
+ pthread_mutex_lock (& mutex);
+
+ aud_config_clear_section ("ladspa");
+ aud_set_string ("ladspa", "module_path", module_path);
+ save_enabled_to_config ();
+ close_modules ();
+
+ index_free (modules);
+ modules = NULL;
+ index_free (plugins);
+ plugins = NULL;
+ index_free (loadeds);
+ loadeds = NULL;
+
+ g_free (module_path);
+ module_path = NULL;
+
+ pthread_mutex_unlock (& mutex);
+}
+
+static void about (void)
+{
+ audgui_simple_message (& about_win, GTK_MESSAGE_INFO,
+ _("About LADSPA Host"), "LADSPA Host for Audacious\n"
+ "Copyright 2011 John Lindgren\n\n"
+ "Redistribution and use in source and binary forms, with or without "
+ "modification, are permitted provided that the following conditions are "
+ "met:\n\n"
+ "1. Redistributions of source code must retain the above copyright "
+ "notice, this list of conditions, and the following disclaimer.\n\n"
+ "2. Redistributions in binary form must reproduce the above copyright "
+ "notice, this list of conditions, and the following disclaimer in the "
+ "documentation provided with the distribution.\n\n"
+ "This software is provided \"as is\" and without any warranty, express or "
+ "implied. In no event shall the authors be liable for any damages arising "
+ "from the use of this software.");
+}
+
+static void set_module_path (GtkEntry * entry)
+{
+ pthread_mutex_lock (& mutex);
+
+ save_enabled_to_config ();
+ close_modules ();
+
+ g_free (module_path);
+ module_path = g_strdup (gtk_entry_get_text (entry));
+
+ open_modules ();
+ load_enabled_from_config ();
+
+ pthread_mutex_unlock (& mutex);
+
+ if (plugin_list)
+ update_plugin_list (plugin_list);
+ if (loaded_list)
+ update_loaded_list (loaded_list);
+}
+
+static void enable_selected (void)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (plugins);
+ for (int i = 0; i < count; i ++)
+ {
+ PluginData * plugin = index_get (plugins, i);
+ if (plugin->selected)
+ enable_plugin_locked (plugin);
+ }
+
+ pthread_mutex_unlock (& mutex);
+
+ if (loaded_list)
+ update_loaded_list (loaded_list);
+}
+
+static void disable_selected (void)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (loadeds);
+ int offset = 0;
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i - offset);
+ if (loaded->selected)
+ {
+ disable_plugin_locked (i - offset);
+ offset ++;
+ }
+ }
+
+ pthread_mutex_unlock (& mutex);
+
+ if (loaded_list)
+ update_loaded_list (loaded_list);
+}
+
+static void control_toggled (GtkToggleButton * toggle, float * value)
+{
+ pthread_mutex_lock (& mutex);
+ * value = gtk_toggle_button_get_active (toggle) ? 1 : 0;
+ pthread_mutex_unlock (& mutex);
+}
+
+static void control_changed (GtkSpinButton * spin, float * value)
+{
+ pthread_mutex_lock (& mutex);
+ * value = gtk_spin_button_get_value (spin);
+ pthread_mutex_unlock (& mutex);
+}
+
+static void configure_plugin (LoadedPlugin * loaded)
+{
+ if (loaded->settings_win)
+ {
+ gtk_window_present ((GtkWindow *) loaded->settings_win);
+ return;
+ }
+
+ PluginData * plugin = loaded->plugin;
+ char buf[200];
+
+ snprintf (buf, sizeof buf, _("%s Settings"), plugin->desc->Name);
+ loaded->settings_win = gtk_dialog_new_with_buttons (buf, (GtkWindow *)
+ config_win, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE, NULL);
+ gtk_window_set_resizable ((GtkWindow *) loaded->settings_win, 0);
+
+ GtkWidget * vbox = gtk_dialog_get_content_area ((GtkDialog *) loaded->settings_win);
+
+ int count = index_count (plugin->controls);
+ for (int i = 0; i < count; i ++)
+ {
+ ControlData * control = index_get (plugin->controls, i);
+
+ GtkWidget * hbox = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0);
+
+ if (control->is_toggle)
+ {
+ GtkWidget * toggle = gtk_check_button_new_with_label (control->name);
+ gtk_toggle_button_set_active ((GtkToggleButton *) toggle, (loaded->values[i] > 0) ? 1 : 0);
+ gtk_box_pack_start ((GtkBox *) hbox, toggle, 0, 0, 0);
+
+ g_signal_connect (toggle, "toggled", (GCallback) control_toggled, & loaded->values[i]);
+ }
+ else
+ {
+ snprintf (buf, sizeof buf, "%s:", control->name);
+ GtkWidget * label = gtk_label_new (buf);
+ gtk_box_pack_start ((GtkBox *) hbox, label, 0, 0, 0);
+
+ GtkWidget * spin = gtk_spin_button_new_with_range (control->min, control->max, 0.01);
+ gtk_spin_button_set_value ((GtkSpinButton *) spin, loaded->values[i]);
+ gtk_box_pack_start ((GtkBox *) hbox, spin, 0, 0, 0);
+
+ g_signal_connect (spin, "value-changed", (GCallback) control_changed, & loaded->values[i]);
+ }
+ }
+
+ g_signal_connect (loaded->settings_win, "response", (GCallback) gtk_widget_destroy, NULL);
+ g_signal_connect (loaded->settings_win, "destroy", (GCallback)
+ gtk_widget_destroyed, & loaded->settings_win);
+
+ gtk_widget_show_all (loaded->settings_win);
+}
+
+static void configure_selected (void)
+{
+ pthread_mutex_lock (& mutex);
+
+ int count = index_count (loadeds);
+ for (int i = 0; i < count; i ++)
+ {
+ LoadedPlugin * loaded = index_get (loadeds, i);
+ if (loaded->selected)
+ configure_plugin (loaded);
+ }
+
+ pthread_mutex_unlock (& mutex);
+}
+
+static void configure (void)
+{
+ if (config_win)
+ {
+ gtk_window_present ((GtkWindow *) config_win);
+ return;
+ }
+
+ config_win = gtk_dialog_new_with_buttons (_("LADSPA Host Settings"), NULL,
+ 0, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+ gtk_window_set_default_size ((GtkWindow *) config_win, 480, 360);
+
+ GtkWidget * vbox = gtk_dialog_get_content_area ((GtkDialog *) config_win);
+
+ GtkWidget * hbox = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0);
+
+ GtkWidget * label = gtk_label_new (_("Module paths:"));
+ gtk_box_pack_start ((GtkBox *) hbox, label, 0, 0, 0);
+
+ label = gtk_label_new (0);
+ gtk_label_set_markup ((GtkLabel *) label,
+ _("<small>Separate multiple paths with a colon.\n"
+ "These paths are searched in addition to LADSPA_PATH.\n"
+ "After adding new paths, press Enter to scan for new plugins.</small>"));
+ gtk_misc_set_padding ((GtkMisc *) label, 12, 6);
+ gtk_misc_set_alignment ((GtkMisc *) label, 0, 0);
+ gtk_box_pack_start ((GtkBox *) vbox, label, 0, 0, 0);
+
+ GtkWidget * entry = gtk_entry_new ();
+ gtk_box_pack_start ((GtkBox *) hbox, entry, 1, 1, 0);
+
+ hbox = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, 1, 1, 0);
+
+ GtkWidget * vbox2 = gtk_vbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) hbox, vbox2, 1, 1, 0);
+
+ label = gtk_label_new (_("Available plugins:"));
+ gtk_box_pack_start ((GtkBox *) vbox2, label, 0, 0, 0);
+
+ GtkWidget * scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_box_pack_start ((GtkBox *) vbox2, scrolled, 1, 1, 0);
+
+ plugin_list = create_plugin_list ();
+ gtk_container_add ((GtkContainer *) scrolled, plugin_list);
+
+ GtkWidget * hbox2 = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox2, hbox2, 0, 0, 0);
+
+ GtkWidget * enable_button = gtk_button_new_with_label (_("Enable"));
+ gtk_box_pack_end ((GtkBox *) hbox2, enable_button, 0, 0, 0);
+
+ vbox2 = gtk_vbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) hbox, vbox2, 1, 1, 0);
+
+ label = gtk_label_new (_("Enabled plugins:"));
+ gtk_box_pack_start ((GtkBox *) vbox2, label, 0, 0, 0);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_box_pack_start ((GtkBox *) vbox2, scrolled, 1, 1, 0);
+
+ loaded_list = create_loaded_list ();
+ gtk_container_add ((GtkContainer *) scrolled, loaded_list);
+
+ hbox2 = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox2, hbox2, 0, 0, 0);
+
+ GtkWidget * disable_button = gtk_button_new_with_label (_("Disable"));
+ gtk_box_pack_end ((GtkBox *) hbox2, disable_button, 0, 0, 0);
+
+ GtkWidget * settings_button = gtk_button_new_with_label (_("Settings"));
+ gtk_box_pack_end ((GtkBox *) hbox2, settings_button, 0, 0, 0);
+
+ if (module_path)
+ gtk_entry_set_text ((GtkEntry *) entry, module_path);
+
+ g_signal_connect (config_win, "response", (GCallback) gtk_widget_destroy, NULL);
+ g_signal_connect (config_win, "destroy", (GCallback) gtk_widget_destroyed, & config_win);
+ g_signal_connect (entry, "activate", (GCallback) set_module_path, NULL);
+ g_signal_connect (plugin_list, "destroy", (GCallback) gtk_widget_destroyed, & plugin_list);
+ g_signal_connect (enable_button, "clicked", (GCallback) enable_selected, NULL);
+ g_signal_connect (loaded_list, "destroy", (GCallback) gtk_widget_destroyed, & loaded_list);
+ g_signal_connect (disable_button, "clicked", (GCallback) disable_selected, NULL);
+ g_signal_connect (settings_button, "clicked", (GCallback) configure_selected, NULL);
+
+ gtk_widget_show_all (config_win);
+}
+
+AUD_EFFECT_PLUGIN
+(
+ .name = "LADSPA Host",
+ .init = init,
+ .cleanup = cleanup,
+ .about = about,
+ .configure = configure,
+ .start = ladspa_start,
+ .process = ladspa_process,
+ .flush = ladspa_flush,
+ .finish = ladspa_finish,
+ .preserves_format = 1,
+)
diff --git a/src/ladspa/plugin.h b/src/ladspa/plugin.h
new file mode 100644
index 0000000..cd242c1
--- /dev/null
+++ b/src/ladspa/plugin.h
@@ -0,0 +1,95 @@
+/*
+ * LADSPA Host for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#ifndef AUD_LADSPA_PLUGIN_H
+#define AUD_LADSPA_PLUGIN_H
+
+#include <pthread.h>
+#include <gtk/gtk.h>
+#include <libaudcore/index.h>
+
+#include "ladspa.h"
+
+#define LADSPA_BUFLEN 1024
+
+typedef struct {
+ int port;
+ char * name;
+ char is_toggle;
+ float min, max, def;
+} ControlData;
+
+typedef struct {
+ char * path;
+ const LADSPA_Descriptor * desc;
+ Index * controls; /* (ControlData *) */
+ GArray * in_ports, * out_ports; /* (int) */
+ char selected;
+} PluginData;
+
+typedef struct {
+ PluginData * plugin;
+ float * values;
+ char selected;
+ char active;
+ Index * instances; /* (LADSPA_Handle) */
+ float * * in_bufs, * * out_bufs; /* (float *) */
+ GtkWidget * settings_win;
+} LoadedPlugin;
+
+/* plugin.c */
+
+/* The mutex needs to be locked when the main thread is writing to the data
+ * structures below (but not when it is only reading from them) and when the
+ * audio thread is reading from them. */
+
+extern pthread_mutex_t mutex;
+extern char * module_path;
+extern Index * modules; /* (GModule *) */
+extern Index * plugins; /* (PluginData *) */
+extern Index * loadeds; /* (LoadedPlugin *) */
+
+extern GtkWidget * about_win;
+extern GtkWidget * config_win;
+extern GtkWidget * plugin_list;
+extern GtkWidget * loaded_list;
+
+LoadedPlugin * enable_plugin_locked (PluginData * plugin);
+void disable_plugin_locked (int i);
+
+/* effect.c */
+
+void shutdown_plugin_locked (LoadedPlugin * loaded);
+
+void ladspa_start (gint * channels, gint * rate);
+void ladspa_process (gfloat * * data, gint * samples);
+void ladspa_flush (void);
+void ladspa_finish (gfloat * * data, gint * samples);
+
+/* plugin-list.c */
+
+GtkWidget * create_plugin_list (void);
+void update_plugin_list (GtkWidget * list);
+
+/* loaded-list.c */
+
+GtkWidget * create_loaded_list (void);
+void update_loaded_list (GtkWidget * list);
+
+#endif
diff --git a/src/lirc/Makefile b/src/lirc/Makefile
deleted file mode 100644
index a686da1..0000000
--- a/src/lirc/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-PLUGIN = lirc${PLUGIN_SUFFIX}
-
-SRCS = about.c \
- lirc.c \
- lirc_cfg.c \
- callbacks.c \
- interface.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${MOWGLI_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} -llirc_client
diff --git a/src/lirc/about.c b/src/lirc/about.c
deleted file mode 100644
index 31c42da..0000000
--- a/src/lirc/about.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* LIRC Plugin
-
- Copyright (C) 2005 Audacious development team
-
- Copyright (c) 1998-1999 Carl van Schaik (carl@leg.uct.ac.za)
- code from gtuner lirc plugin
- cRadio, kTuner, gtuner (c) 1998-1999 Carl van Schaik
-
- Copyright (C) 2000 Christoph Bartelmus (xmms@bartelmus.de)
-
- 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "config.h"
-
-#include <glib.h>
-#include <audacious/i18n.h>
-#include <gtk/gtk.h>
-
-#include "lirc.h"
-#include "lirc_image.h"
-#include "lirc_mini.xpm"
-
-#include <gdk/gdkx.h>
-
-static void win_set_icon (GtkWidget *win, char** image);
-
-static GtkWidget *dialog = NULL;
-static GdkPixmap *icon;
-static GdkBitmap *icon_mask;
-
-void about_close_cb(GtkWidget *w,gpointer data)
-{
- gtk_widget_destroy(dialog);
- gdk_pixmap_unref(icon);
- gdk_bitmap_unref(icon_mask);
-}
-
-void about(void)
-{
- GdkPixmap *pixmap;
- GtkWidget *bbox,*about_credits_logo_box,*about_credits_logo_frame;
- GtkWidget *about_credits_logo;
- GtkWidget *button,*label;
- GString *logo_text;
-
- if(dialog) return;
-
- dialog=gtk_dialog_new();
- gtk_window_set_title(GTK_WINDOW(dialog),
- _("About LIRC Audacious Plugin"));
- g_signal_connect(G_OBJECT(dialog),"destroy",
- G_CALLBACK(gtk_widget_destroyed),
- &dialog);
- gtk_widget_realize(dialog);
-
- pixmap=gdk_pixmap_create_from_xpm_d(dialog->window,
- NULL, NULL, lirc_image);
-
- about_credits_logo_box = gtk_hbox_new(TRUE, 0);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
- about_credits_logo_box, FALSE, FALSE, 0);
- about_credits_logo_frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(about_credits_logo_frame),
- GTK_SHADOW_OUT);
- gtk_box_pack_start(GTK_BOX(about_credits_logo_box),
- about_credits_logo_frame, FALSE, FALSE, 0);
-
- about_credits_logo = gtk_pixmap_new(pixmap, NULL);
- gdk_pixmap_unref(pixmap);
-
- gtk_container_add(GTK_CONTAINER(about_credits_logo_frame),
- about_credits_logo);
-
- gtk_container_border_width(GTK_CONTAINER(dialog),5);
-
- logo_text = g_string_new( "" );
- g_string_append( logo_text , _("LIRC Plugin "));
- g_string_append( logo_text , VERSION );
- g_string_append( logo_text , _("\n"
-"A simple plugin that lets you control\n"
-"Audacious using the LIRC remote control daemon\n\n"
-"Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
-"from the XMMS LIRC plugin by:\n"
-"Carl van Schaik <carl@leg.uct.ac.za>\n"
-"Christoph Bartelmus <xmms@bartelmus.de>\n"
-"Andrew O. Shadoura <bugzilla@tut.by>\n"
-"You can get LIRC information at:\n"
-"http://lirc.org"));
-
- label=gtk_label_new( logo_text->str );
- g_string_free( logo_text, TRUE );
-
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),label,
- TRUE,TRUE,10);
-
- bbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),
- bbox, FALSE, FALSE, 0);
-
- button = gtk_button_new_with_label(_("Close"));
- g_signal_connect_object(G_OBJECT(button), "clicked",
- G_CALLBACK(about_close_cb), NULL,G_CONNECT_SWAPPED) ;
-
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_widget_grab_default(button);
- gtk_widget_grab_focus(button);
-
- win_set_icon(dialog, lirc_mini_xpm);
-
- gtk_widget_show_all(dialog);
-}
-
-static void win_set_icon (GtkWidget *win, char** image)
-{
- GdkAtom icon_atom;
- glong data[2];
-
- icon=gdk_pixmap_create_from_xpm_d(win->window, &icon_mask,
- &win->style->bg[GTK_STATE_NORMAL],
- image);
- data[0] = GDK_WINDOW_XWINDOW(icon);
- data[1] = GDK_WINDOW_XWINDOW(icon_mask);
-
- icon_atom = gdk_atom_intern ("KWM_WIN_ICON", FALSE);
- gdk_property_change (win->window, icon_atom, icon_atom, 32,
- GDK_PROP_MODE_REPLACE, (guchar *)data, 2);
-}
diff --git a/src/lirc/callbacks.c b/src/lirc/callbacks.c
deleted file mode 100644
index 11000dc..0000000
--- a/src/lirc/callbacks.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <config.h>
-
-#include <gtk/gtk.h>
-
-#include "common.h"
-
-void
-on_reconnectcheck_toggled (GtkToggleButton *togglebutton,
- GtkWidget *reconnectspin)
-{
- gtk_widget_set_sensitive(reconnectspin, gtk_toggle_button_get_active(togglebutton));
-}
-
-
-void
-on_cancelbutton1_clicked (GtkButton *button,
- gpointer user_data)
-{
- gtk_widget_destroy(lirc_cfg);
- lirc_cfg=NULL;
-}
-
-
-void
-on_okbutton1_clicked (GtkButton *button,
- gpointer user_data)
-{
- b_enable_reconnect=(gint)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(lirc_cfg), "reconnectcheck")));
- reconnect_timeout=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(lirc_cfg), "reconnectspin")));
- save_cfg();
- gtk_widget_destroy(lirc_cfg);
- lirc_cfg=NULL;
-}
diff --git a/src/lirc/common.h b/src/lirc/common.h
deleted file mode 100644
index f2b5cb8..0000000
--- a/src/lirc/common.h
+++ /dev/null
@@ -1,23 +0,0 @@
-extern GtkWidget *lirc_cfg;
-
-extern gint b_enable_reconnect;
-extern gint reconnect_timeout;
-extern gchar *aosd_font;
-
-void load_cfg(void);
-void save_cfg(void);
-
-void configure(void);
-
-GtkWidget* create_lirc_cfg (void);
-
-void
-on_reconnectcheck_toggled (GtkToggleButton *togglebutton,
- GtkWidget *reconnectspin);
-void
-on_cancelbutton1_clicked (GtkButton *button,
- gpointer user_data);
-void
-on_okbutton1_clicked (GtkButton *button,
- gpointer user_data);
-
diff --git a/src/lirc/interface.c b/src/lirc/interface.c
deleted file mode 100644
index 7bfe757..0000000
--- a/src/lirc/interface.c
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include <audacious/i18n.h>
-
-#include "common.h"
-
-GtkWidget*
-create_lirc_cfg (void)
-{
- GtkWidget *dialog_vbox1;
- GtkWidget *notebook1;
- GtkWidget *vbox2;
- GtkWidget *frame1;
- GtkWidget *alignment1;
- GtkWidget *vbox3;
- GtkWidget *hbox1;
- GtkWidget *label3;
- GtkWidget *reconnectcheck;
- GtkWidget *reconnectspin;
- GtkObject *reconnectspin_adj;
- GtkWidget *label2;
- GtkWidget *label1;
- GtkWidget *dialog_action_area1;
- GtkWidget *cancelbutton1;
- GtkWidget *okbutton1;
-
- lirc_cfg = gtk_dialog_new ();
- gtk_window_set_title (GTK_WINDOW (lirc_cfg), _("LIRC plugin settings"));
- gtk_window_set_position (GTK_WINDOW (lirc_cfg), GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_window_set_resizable (GTK_WINDOW (lirc_cfg), FALSE);
- gtk_window_set_type_hint (GTK_WINDOW (lirc_cfg), GDK_WINDOW_TYPE_HINT_DIALOG);
- g_signal_connect(G_OBJECT(lirc_cfg),"destroy", G_CALLBACK(gtk_widget_destroyed), &lirc_cfg);
-
- dialog_vbox1 = GTK_DIALOG (lirc_cfg)->vbox;
-
- notebook1 = gtk_notebook_new ();
- gtk_box_pack_start (GTK_BOX (dialog_vbox1), notebook1, TRUE, TRUE, 0);
-
- vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (notebook1), vbox2);
-
- frame1 = gtk_frame_new (NULL);
- gtk_box_pack_start (GTK_BOX (vbox2), frame1, TRUE, TRUE, 0);
-
- alignment1 = gtk_alignment_new (0.5, 0.5, 1, 1);
- gtk_container_add (GTK_CONTAINER (frame1), alignment1);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment1), 0, 0, 12, 0);
-
- vbox3 = gtk_vbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (alignment1), vbox3);
-
- reconnectcheck = gtk_check_button_new_with_mnemonic (_("Reconnect to LIRC server"));
- gtk_box_pack_start (GTK_BOX (vbox3), reconnectcheck, FALSE, FALSE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (reconnectcheck), (gboolean)b_enable_reconnect);
-
- hbox1 = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox3), hbox1, TRUE, TRUE, 0);
-
- label3 = gtk_label_new (_("Timeout before reconnecting (seconds): "));
- gtk_box_pack_start (GTK_BOX (hbox1), label3, FALSE, FALSE, 17);
-
- reconnectspin_adj = gtk_adjustment_new (reconnect_timeout, 1, 100, 1, 10, 10);
- reconnectspin = gtk_spin_button_new (GTK_ADJUSTMENT (reconnectspin_adj), 1, 0);
- gtk_box_pack_start (GTK_BOX (hbox1), reconnectspin, TRUE, TRUE, 15);
-
- label2 = gtk_label_new (_("Reconnect"));
- gtk_frame_set_label_widget (GTK_FRAME (frame1), label2);
- gtk_label_set_use_markup (GTK_LABEL (label2), TRUE);
-
- label1 = gtk_label_new (_("Connection"));
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label1);
-
- dialog_action_area1 = GTK_DIALOG (lirc_cfg)->action_area;
- gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
-
- cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
- gtk_dialog_add_action_widget (GTK_DIALOG (lirc_cfg), cancelbutton1, GTK_RESPONSE_CANCEL);
- GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
-
- okbutton1 = gtk_button_new_from_stock ("gtk-ok");
- gtk_dialog_add_action_widget (GTK_DIALOG (lirc_cfg), okbutton1, GTK_RESPONSE_OK);
- GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
-
- g_signal_connect (G_OBJECT (reconnectcheck), "toggled",
- G_CALLBACK (on_reconnectcheck_toggled),
- G_OBJECT (reconnectspin));
- g_signal_connect (G_OBJECT (cancelbutton1), "clicked",
- G_CALLBACK (on_cancelbutton1_clicked),
- NULL);
- g_signal_connect (G_OBJECT (okbutton1), "clicked",
- G_CALLBACK (on_okbutton1_clicked),
- NULL);
- gtk_widget_set_sensitive(reconnectspin, (gboolean)b_enable_reconnect);
-
- g_object_set_data(G_OBJECT(lirc_cfg), "reconnectcheck", G_OBJECT(reconnectcheck));
- g_object_set_data(G_OBJECT(lirc_cfg), "reconnectspin", G_OBJECT(reconnectspin));
-
- return lirc_cfg;
-}
-
diff --git a/src/lirc/lirc.c b/src/lirc/lirc.c
deleted file mode 100644
index 1cb6529..0000000
--- a/src/lirc/lirc.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/* Lirc plugin
-
- Copyright (C) 2005 Audacious development team
-
- Copyright (c) 1998-1999 Carl van Schaik (carl@leg.uct.ac.za)
-
- Copyright (C) 2000 Christoph Bartelmus (xmms@bartelmus.de)
-
- some code was stolen from:
- IRman plugin for xmms by Charles Sielski (stray@teklabs.net)
-
- 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <lirc/lirc_client.h>
-
-#include <audacious/drct.h>
-#include <audacious/i18n.h>
-#include <audacious/plugin.h>
-#include <libaudcore/hook.h>
-
-#include "lirc.h"
-
-#include "common.h"
-
-const char *plugin_name="LIRC Plugin";
-
-GeneralPlugin lirc_plugin = {
- .description = "LIRC Plugin",
- .init = init,
- .about = about,
- .configure = configure,
- .cleanup = cleanup
-};
-
-GeneralPlugin *lirc_gplist[] = { &lirc_plugin, NULL };
-DECLARE_PLUGIN(lirc, NULL, NULL, NULL, NULL, NULL, lirc_gplist, NULL, NULL);
-
-int lirc_fd=-1;
-struct lirc_config *config=NULL;
-gint tracknr=0;
-gint mute=0; /* mute flag */
-gint mute_vol=0; /* holds volume before mute */
-
-gint input_tag;
-
-char track_no[64];
-int track_no_pos;
-
-gint tid;
-
-void init_lirc(void)
-{
- int flags;
-
- if((lirc_fd=lirc_init("audacious",1))==-1)
- {
- fprintf(stderr,_("%s: could not init LIRC support\n"),
- plugin_name);
- return;
- }
- if(lirc_readconfig(NULL,&config,NULL)==-1)
- {
- lirc_deinit();
- fprintf(stderr,
- _("%s: could not read LIRC config file\n"
- "%s: please read the documentation of LIRC\n"
- "%s: how to create a proper config file\n"),
- plugin_name,plugin_name,plugin_name);
- return;
- }
- input_tag=gdk_input_add(lirc_fd,GDK_INPUT_READ,
- lirc_input_callback,NULL);
- fcntl(lirc_fd,F_SETOWN,getpid());
- flags=fcntl(lirc_fd,F_GETFL,0);
- if(flags!=-1)
- {
- fcntl(lirc_fd,F_SETFL,flags|O_NONBLOCK);
- }
- fflush(stdout);
-}
-
-void init(void)
-{
- load_cfg();
- init_lirc();
- track_no_pos=0;
- tid=0;
-}
-
-gboolean reconnect_lirc(gpointer data)
-{
- fprintf(stderr,_("%s: trying to reconnect...\n"),plugin_name);
- init();
- return (lirc_fd==-1);
-}
-
-gboolean jump_to(gpointer data)
-{
- aud_drct_pl_set_pos(atoi(track_no)-1);
- track_no_pos=0;
- tid=0;
- return FALSE;
-}
-
-void lirc_input_callback(gpointer data,gint source,
- GdkInputCondition condition)
-{
- char *code;
- char *c;
- gint playlist_time,playlist_pos,output_time,v;
- int ret;
- char *ptr;
- gint balance;
-#if 0
- gboolean show_pl;
-#endif
- int n;
- gchar *utf8_title_markup;
-
- while((ret=lirc_nextcode(&code))==0 && code!=NULL)
- {
- while((ret=lirc_code2char(config,code,&c))==0 && c!=NULL)
- {
- if(strcasecmp("PLAY",c)==0)
- {
- aud_drct_play();
- }
- else if(strcasecmp("STOP",c)==0)
- {
- aud_drct_stop();
- }
- else if(strcasecmp("PAUSE",c)==0)
- {
- aud_drct_pause();
- }
- else if(strcasecmp("PLAYPAUSE",c) == 0)
- {
- if(aud_drct_get_playing())
- aud_drct_pause();
- else
- aud_drct_play();
- }
- else if(strncasecmp("NEXT",c,4)==0)
- {
- ptr=c+4;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr);
-
- if(n<=0) n=1;
- for(;n>0;n--)
- {
- aud_drct_pl_next();
- }
- }
- else if(strncasecmp("PREV",c,4)==0)
- {
- ptr=c+4;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr);
-
- if(n<=0) n=1;
- for(;n>0;n--)
- {
- aud_drct_pl_prev();
- }
- }
- else if(strcasecmp("SHUFFLE",c)==0)
- {
- aud_drct_pl_shuffle_toggle();
- }
- else if(strcasecmp("REPEAT",c)==0)
- {
- aud_drct_pl_repeat_toggle();
- }
- else if(strncasecmp("FWD",c,3)==0)
- {
- ptr=c+3;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr)*1000;
-
- if(n<=0) n=5000;
- output_time=aud_drct_get_time();
- playlist_pos=aud_drct_pl_get_pos();
- playlist_time=aud_drct_pl_get_time(playlist_pos);
- if(playlist_time-output_time<n)
- output_time=playlist_time-n;
- aud_drct_seek(output_time+n);
- }
- else if(strncasecmp("BWD",c,3)==0)
- {
- ptr=c+3;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr)*1000;
-
- if(n<=0) n=5000;
- output_time=aud_drct_get_time();
- if(output_time<n)
- output_time=n;
- aud_drct_seek(output_time-n);
- }
- else if(strncasecmp("VOL_UP",c,6)==0)
- {
- ptr=c+6;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr);
- if(n<=0) n=5;
-
- aud_drct_get_volume_main(&v);
- if(v > (100-n)) v=100-n;
- aud_drct_set_volume_main(v+n);
- }
- else if(strncasecmp("VOL_DOWN",c,8)==0)
- {
- ptr=c+8;
- while (isspace(*ptr)) ptr++;
- n=atoi(ptr);
- if(n<=0) n=5;
-
- aud_drct_get_volume_main(&v);
- if(v<n) v=n;
- aud_drct_set_volume_main(v-n);
- }
- else if(strcasecmp("QUIT",c)==0)
- {
- aud_drct_quit();
- }
- else if(strcasecmp("MUTE",c)==0)
- {
- if(mute==0)
- {
- mute=1;
- /* store the master volume so
- we can restore it on unmute. */
- aud_drct_get_volume_main(&mute_vol);
- aud_drct_set_volume_main(0);
- }
- else
- {
- mute=0;
- aud_drct_set_volume_main(mute_vol);
- }
- }
- else if(strncasecmp("BAL_LEFT",c,8)==0)
- {
- ptr=c+8;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr);
- if(n<=0) n=5;
-
- aud_drct_get_volume_balance(&balance);
- balance-=n;
- if(balance<-100) balance=-100;
- aud_drct_set_volume_balance(balance);
- }
- else if(strncasecmp("BAL_RIGHT",c,9)==0)
- {
- ptr=c+9;
- while(isspace(*ptr)) ptr++;
- n=atoi(ptr);
- if(n<=0) n=5;
-
- aud_drct_get_volume_balance(&balance);
- balance+=n;
- if(balance>100) balance=100;
- aud_drct_set_volume_balance(balance);
- }
- else if(strcasecmp("BAL_CENTER",c)==0)
- {
- balance=0;
- aud_drct_set_volume_balance(balance);
- }
- else if(strcasecmp("LIST",c)==0)
- {
-#if 0
- show_pl=aud_drct_pl_win_is_visible();
- show_pl=(show_pl) ? 0:1;
- aud_drct_pl_win_toggle(show_pl);
-#endif
- }
- else if(strcasecmp("PLAYLIST_CLEAR",c)==0)
- {
- aud_drct_stop();
- aud_drct_pl_clear();
- }
- else if(strncasecmp("PLAYLIST_ADD ",c,13)==0)
- {
- GList list;
- list.prev=list.next=NULL;
- list.data=c+13;
- aud_drct_pl_add_list (& list, -1);
- }
- else if((strlen(c)==1) && ((*c>='0') || (*c<='9')))
- {
- if (track_no_pos<63)
- {
- if (tid) g_source_remove(tid);
- track_no[track_no_pos++]=*c;
- track_no[track_no_pos]=0;
- tid=g_timeout_add(1500, jump_to, NULL);
- utf8_title_markup = g_markup_printf_escaped(
- "<span font_desc='%s'>%s</span>", aosd_font, track_no);
- hook_call("aosd toggle", utf8_title_markup);
- }
- }
- else
- {
- fprintf(stderr,_("%s: unknown command \"%s\"\n"),
- plugin_name,c);
- }
- }
- free(code);
- if(ret==-1) break;
- }
- if(ret==-1)
- {
- /* something went badly wrong */
- fprintf(stderr,_("%s: disconnected from LIRC\n"),plugin_name);
- cleanup();
- if(b_enable_reconnect)
- {
- fprintf(stderr,_("%s: will try reconnect every %d seconds...\n"),plugin_name,reconnect_timeout);
- g_timeout_add(1000*reconnect_timeout, reconnect_lirc, NULL);
- }
- }
-}
-
-void cleanup()
-{
- if(config)
- {
- if(input_tag)
- gtk_input_remove(input_tag);
-
- config=NULL;
- }
- if(lirc_fd!=-1)
- {
- lirc_deinit();
- lirc_fd=-1;
- }
- g_free(aosd_font);
-}
diff --git a/src/lirc/lirc.h b/src/lirc/lirc.h
deleted file mode 100644
index 678fa00..0000000
--- a/src/lirc/lirc.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Lirc Plugin
-
- Copyright (C) 2005 Audacious development team
-
- Copyright (c) 1998-1999 Carl van Schaik (carl@leg.uct.ac.za)
-
- Copyright (C) 2000 Christoph Bartelmus (xmms@bartelmus.de)
-
- some code was stolen from:
- IRman plugin for xmms by Charles Sielski (stray@teklabs.net)
-
- 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <gtk/gtk.h>
-
-void init(void);
-void cleanup(void);
-void about(void);
-
-void lirc_input_callback(gpointer data,gint source,
- GdkInputCondition condition);
diff --git a/src/lirc/lirc_cfg.c b/src/lirc/lirc_cfg.c
deleted file mode 100644
index 8636fc6..0000000
--- a/src/lirc/lirc_cfg.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <config.h>
-
-#include <gtk/gtk.h>
-#include <audacious/i18n.h>
-#include <audacious/plugin.h>
-#include <audacious/configdb.h>
-
-#include "common.h"
-
-GtkWidget *lirc_cfg = NULL;
-
-gint b_enable_reconnect;
-gint reconnect_timeout;
-gchar *aosd_font = NULL;
-
-void load_cfg(void)
-{
- mcs_handle_t *db;
- db = aud_cfg_db_open();
- aud_cfg_db_get_int(db, LIRC_CFGID, "enable_reconnect", &b_enable_reconnect);
- aud_cfg_db_get_int(db, LIRC_CFGID, "reconnect_timeout", &reconnect_timeout);
- if (!aud_cfg_db_get_string(db, "aosd", "text_fonts_name_0", &aosd_font))
- aosd_font = g_strdup("Sans 26");
- if (!reconnect_timeout)
- {
- reconnect_timeout = 5;
- b_enable_reconnect = 1;
- }
- aud_cfg_db_close(db);
-}
-
-void save_cfg(void)
-{
- mcs_handle_t *db;
- db = aud_cfg_db_open();
- aud_cfg_db_set_int(db, LIRC_CFGID, "enable_reconnect", b_enable_reconnect);
- aud_cfg_db_set_int(db, LIRC_CFGID, "reconnect_timeout", reconnect_timeout);
- aud_cfg_db_close(db);
-}
-
-void configure(void)
-{
- if (lirc_cfg)
- {
- gtk_window_present(GTK_WINDOW(lirc_cfg));
- return;
- }
- load_cfg();
- lirc_cfg = create_lirc_cfg();
- gtk_widget_show_all(lirc_cfg);
-}
diff --git a/src/lirc/lirc_image.h b/src/lirc/lirc_image.h
deleted file mode 100644
index 5b23676..0000000
--- a/src/lirc/lirc_image.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* XPM */
-static char *lirc_image[] = {
-/* width height num_colors chars_per_pixel */
-" 288 63 26 1",
-/* colors */
-". c #000080",
-"# c #080880",
-"a c #101088",
-"b c #181888",
-"c c #202090",
-"d c #282890",
-"e c #282c98",
-"f c #303098",
-"g c #383898",
-"h c #383ca0",
-"i c #4848a0",
-"j c #5050a8",
-"k c #6060b0",
-"l c #686cb8",
-"m c #7070b8",
-"n c #7878b8",
-"o c #9898c8",
-"p c #a0a4d0",
-"q c #b0b4d8",
-"r c #c8cce0",
-"s c #d0d4e8",
-"t c #d8d8e8",
-"u c #e0e0f0",
-"v c #e8ecf0",
-"w c #f0f4f8",
-"x c #f8fcf8",
-/* pixels */
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"..............................................ff....................................afb.........................................................................................................................................................................................................",
-"..............................................xxh...................................lxo.........................................................................................................................................................................................................",
-"..............................................xxxs#.................................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxh................................lxo.............................................................................................................................................................................bmnrrrpng...................",
-"..............................................xxxxxxu#..............................lxo...................................................................xxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxxxxxxxxxrnb........................nxxxxxxxxxxxxxxm...............",
-"..............................................xxxxxxxxl.............................lxo...................................................................xxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxxxxxxxxxxxxxp....................txxxxxxxxxxxxxxxxxxvb............",
-"..............................................xxxxxxxxxua...........................lxo...................................................................xxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxxxxxxxxxxxxxxxi................pxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxl..........................lxo...................................................................xxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxxxxxxxxxxxxxxxxp..............vxxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxvb........................lxo...................................................................xxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxxxxxxxxxxxxxxxxxg............xxxxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxo.......................lxo...................................................................xxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxxxxxxxxxxxxxxxxxx...........vxxxxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxvc.....................lxo...................................................................xxxxxxxxx....................nnnnnnxxxxxxxxxnnnnnn.......xxxxxxxxxnnnnnnrxxxxxxxxxxxxi.........kxxxxxxxxxxxxpg....mxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxo....................lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx.........xxxxxxxxxxr.........xxxxxxxxxxxn.........bvxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxwd..................lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx..........xxxxxxxxxx........rxxxxxxxxxxb............exxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxwxxq.................lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx..........rxxxxxxxxx........xxxxxxxxxxb...............vxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxwh...............lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx..........nxxxxxxxxx.......ixxxxxxxxxp.................px...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxwxxq..............lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx..........nxxxxxxxxx.......vxxxxxxxxx...............................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxh............lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx..........txxxxxxxxr.......xxxxxxxxxr...............................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxq...........lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx..........xxxxxxxxxe.......xxxxxxxxxe...............................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxh.........lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx.........xxxxxxxxxx.......bxxxxxxxxx................................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxs#.......lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx......grxxxxxxxxxxk.......gxxxxxxxxx................................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxl......lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxxxxxxt........nxxxxxxxxx................................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxu#....lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxxxxxv.........nxxxxxxxxx................................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxl...lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxxxxp..........nxxxxxxxxx................................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxua.lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxxxb...........kxxxxxxxxx................................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxllxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxxe............gxxxxxxxxx................................",
-"...looooooooooooooooooooooooooooooooooooooooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwxsoooooooooooooooooooooooooooooooooooooooooooooooooooooooob..........xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxxxxxxxxxxxxxxxx.............xxxxxxxxxb...............................",
-"...sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf..........xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx....vxxxxxxxxxx............xxxxxxxxxp...............................",
-"...looooooooooooooooooooooooooooooooooooooooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsxsoooooooooooooooooooooooooooooooooooooooooooooooooooooooob..........xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx.....xxxxxxxxxxr...........xxxxxxxxxx...............................",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs#lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx.....bxxxxxxxxxxj..........nxxxxxxxxxn.................er...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxh..lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx......nxxxxxxxxxxb..........xxxxxxxxxx................pxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq#...lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx.......vxxxxxxxxxx..........vxxxxxxxxxx..............vxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxh.....lxo...................................................................xxxxxxxxx..........................xxxxxxxxx.............xxxxxxxxx........xxxxxxxxxxv.........bxxxxxxxxxxxg..........nxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxq.......lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...ggggggxxxxxxxxxgggggg.......xxxxxxxxx........bxxxxxxxxxxp.........txxxxxxxxxxxxn.....erxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxh........lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxx.........pxxxxxxxxxxe.........xxxxxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxxq..........lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxx..........vxxxxxxxxxx.........bxxxxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxxxh...........lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxx...........xxxxxxxxxxx.........bxxxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxxq.............lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxx...........exxxxxxxxxxr..........vxxxxxxxxxxxxxxxxxxxxxxx...........",
-"..............................................xxxxxxxxxxxxxxxxxxxxxxxh..............lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxx............pxxxxxxxxxxj..........ixxxxxxxxxxxxxxxxxxxvb............",
-"..............................................xxxxxxxxxxxxxxxxxxxxxq................lxo...................................................................xxxxxxxxxxxxxxxxxxxxxxxxxg...xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxx.............xxxxxxxxxxxb...........evxxxxxxxxxxxxxxn...............",
-"..............................................xxxxxxxxxxxxxxxxxxxxh.................lxo.............................................................................................................................................................................kprxxxvrnb..................",
-"..............................................xxxxxxxxxxxxxxxxxxq...................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxxxxxxxxxxxxh....................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxxxxxxxwxxq......................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxxxxxxxxwd.......................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxxxxwxxq.........................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxxxxxwd..........................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxwxxq............................lxo.........................................................................................................................................................................................................",
-"..............................................xxxxxxxwd.............................lxo............................................................nx...nx....................gxxx.......txx......................xn...gxxxx.....................xr..........gxxxp............xg...........xg...",
-"..............................................xxxwxxo...............................lxo............................................................nx...gn.nknr..nb.ngkn.bn#...gx..nknr.gxrkknbkeprm..n.n.brp...ppxn...gx..xn.brp..ngpn.pm..grn.bxtn.brp.....xp..p.grn..ngpp.kxpngnbn.krn..xg...",
-"..............................................xxxxwc................................lxo............................................................nx...nx.xxnxt.xg.xn.xpxp....gx..xxnxtgxrkrxrpkiixm.xtr.xipx.xvgxn...gx.gxb.xipx.xvnxtpx.gxivxbxtn.xipx...gx....gxivx.xvnxpkxpnnxrrnxgxv.xg...",
-"..............................................wxxo..................................lvo............................................................nx...nx.xr.rx.xg.xn.bxv.....gx..xr.rx.xn.rx..exxxn.x..nxxxx.xg.xn...gxxxk.nxxxx.xn.xg.x.rx.gx.xr.nxxxx...gx....rx.gx.xn.xr.xg.nx..xx.nx.xg...",
-"...............................................vc..................................................................................................nx...nx.xr.rx.xn.xn.rxxe....gx..xr.rx.xn.rx..xn.xn.x..ix..b.xp.xn...gx.rxbix..b.xn.xg.x.nx.nx.xr.ix..b....xr.brnx.nx.xn.xr.xg.nx..rx.rx.xg...",
-"...................................................................................................................................................nxxxxnx.xr.rx.rxvxnjx.nx...gxxx.xr.rx.xn.rx..pxxxn.x...rxxx.pxxxn...gx..xx.rxxx.xn.xg.x..vxxi.nxx.rxxx....bxxxn.vxxi.xn.xr.vxxnx...xxxe.xg...",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................",
-"................................................................................................................................................................................................................................................................................................"
-};
diff --git a/src/lirc/lirc_mini.xpm b/src/lirc/lirc_mini.xpm
deleted file mode 100644
index 4594ba4..0000000
--- a/src/lirc/lirc_mini.xpm
+++ /dev/null
@@ -1,69 +0,0 @@
-/* XPM */
-static char * lirc_mini_xpm[] = {
-"16 16 50 1",
-" c None",
-". c #000080",
-"+ c #4748A2",
-"@ c #7072B7",
-"# c #060683",
-"$ c #4648A3",
-"% c #303096",
-"& c #5E5FAD",
-"* c #F8FCF8",
-"= c #C1C4DE",
-"- c #34359A",
-"; c #5D5FAF",
-"> c #F0F4F4",
-", c #8588C1",
-"' c #0C0C86",
-") c #D5D8E7",
-"! c #020281",
-"~ c #F5F9F7",
-"{ c #9DA0CD",
-"] c #19198C",
-"^ c #E0E4ED",
-"/ c #5B5DAD",
-"( c #010180",
-"_ c #F7FBF8",
-": c #B7BAD9",
-"< c #252592",
-"[ c #9293C6",
-"} c #ECF0F3",
-"| c #B7BADA",
-"1 c #DCE0EB",
-"2 c #A9ACD3",
-"3 c #F4F8F6",
-"4 c #9598C9",
-"5 c #141489",
-"6 c #D1D4E6",
-"7 c #4143A0",
-"8 c #F1F5F5",
-"9 c #8689C2",
-"0 c #0F0F87",
-"a c #CACDE2",
-"b c #35379A",
-"c c #EDF0F3",
-"d c #7678BA",
-"e c #030381",
-"f c #B7B9D9",
-"g c #2A2B94",
-"h c #292A94",
-"i c #6365B0",
-"j c #050582",
-"k c #242592",
-".+@#.........$%.",
-".&*=-........;*.",
-".&**>,'......;*.",
-".&****)+!....;*.",
-".&*****~{]...;*.",
-".&*******^/(.;*.",
-".&********_:<;*.",
-"[[**********}|*[",
-"[[**********12*[",
-".&********345;*.",
-".&*******67..;*.",
-".&*****890...;*.",
-".&***_ab(....;*.",
-".&**cde......;*.",
-".&_fg........;*.",
-".hij.........k]."};
diff --git a/src/lyricwiki/Makefile b/src/lyricwiki/Makefile
index 272b41a..eb8648d 100644
--- a/src/lyricwiki/Makefile
+++ b/src/lyricwiki/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${XML_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${XML_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${XML_LIBS}
diff --git a/src/lyricwiki/lyricwiki.c b/src/lyricwiki/lyricwiki.c
index 86e9912..c1b497d 100644
--- a/src/lyricwiki/lyricwiki.c
+++ b/src/lyricwiki/lyricwiki.c
@@ -28,23 +28,24 @@
#include <stdio.h>
#include <glib.h>
-#include <glib/gi18n.h>
#include <string.h>
#include <gtk/gtk.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/HTMLparser.h>
#include <libxml/xpath.h>
-#include <mowgli.h>
#include <audacious/drct.h>
+#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <audacious/plugin.h>
#include <audacious/plugins.h>
+#include <libaudcore/audstrings.h>
#include <libaudcore/hook.h>
#include <libaudcore/vfs_async.h>
+#include "config.h"
#include "urlencode.h"
/*
@@ -115,7 +116,7 @@ give_up:
g_regex_match(reg, (gchar *) lyric, G_REGEX_MATCH_NEWLINE_ANY, &match_info);
ret = g_match_info_fetch(match_info, 2);
- if (!g_utf8_collate(ret, "\n\n<!-- PUT LYRICS HERE (and delete this entire line) -->\n\n"))
+ if (!g_utf8_collate(ret, "\n<!-- PUT LYRICS HERE (and delete this entire line) -->\n"))
{
g_free(ret);
ret = NULL;
@@ -158,7 +159,7 @@ scrape_uri_from_lyricwiki_search_result(const gchar *buf, gsize len)
root = xmlDocGetRootElement(doc);
- MOWGLI_ITER_FOREACH(cur, root->xmlChildrenNode)
+ for (cur = root->xmlChildrenNode; cur; cur = cur->next)
{
if (xmlStrEqual(cur->name, (xmlChar *) "url"))
{
@@ -180,6 +181,49 @@ scrape_uri_from_lyricwiki_search_result(const gchar *buf, gsize len)
return uri;
}
+gboolean
+check_current_track(Tuple *tu)
+{
+ gboolean ret = TRUE;
+ gint playlist, pos, i;
+ gint fields[] = {FIELD_ARTIST, FIELD_TITLE};
+ Tuple *cu = NULL;
+
+ if (tu == NULL)
+ return FALSE;
+
+ playlist = aud_playlist_get_playing();
+ pos = aud_playlist_get_position(playlist);
+ cu = aud_playlist_entry_get_tuple(playlist, pos, FALSE);
+
+ if (cu == NULL)
+ return FALSE;
+
+ for (i = 0; i < sizeof(fields)/sizeof(gint); i++)
+ {
+ gchar * string1 = tuple_get_str (tu, fields[i], NULL);
+ gchar * string2 = tuple_get_str (cu, fields[i], NULL);
+
+ if (string1 == NULL && string2 == NULL)
+ continue;
+
+ if (string1 == NULL || string2 == NULL ||
+ strcmp(string1, string2) != 0)
+ {
+ ret = FALSE;
+ str_unref (string1);
+ str_unref (string2);
+ break;
+ }
+
+ str_unref (string1);
+ str_unref (string2);
+ }
+
+ tuple_unref(cu);
+ return ret;
+}
+
void update_lyrics_window(const Tuple *tu, const gchar *lyrics);
gboolean
@@ -193,8 +237,10 @@ get_lyrics_step_3(gchar *buf, gint64 len, Tuple *tu)
g_free(buf);
}
- update_lyrics_window(tu, lyrics);
- mowgli_object_unref(tu);
+ if (check_current_track(tu))
+ update_lyrics_window(tu, lyrics);
+
+ tuple_unref (tu);
if (lyrics != NULL)
g_free(lyrics);
@@ -210,17 +256,31 @@ get_lyrics_step_2(gchar *buf, gint64 len, Tuple *tu)
uri = scrape_uri_from_lyricwiki_search_result(buf, len);
if (uri == NULL)
{
- update_lyrics_window(tu, NULL);
- mowgli_object_unref(tu);
+ if (check_current_track(tu))
+ update_lyrics_window(tu, NULL);
- return FALSE;
+ goto CLEANUP;
}
- vfs_async_file_get_contents(uri, (VFSConsumer) get_lyrics_step_3, tu);
+ if (check_current_track(tu))
+ {
+ update_lyrics_window(tu, _("\nLooking for lyrics..."));
+ vfs_async_file_get_contents(uri, (VFSConsumer) get_lyrics_step_3, tu);
+ }
+ else
+ {
+ g_free(uri);
+ goto CLEANUP;
+ }
g_free(buf);
return TRUE;
+
+CLEANUP:
+ g_free(buf);
+ tuple_unref (tu);
+ return FALSE;
}
void
@@ -228,40 +288,37 @@ get_lyrics_step_1(const Tuple *tu)
{
gchar *uri;
gchar *artist, *title;
- Tuple *tuple = tuple_copy(tu);
- artist = lyricwiki_url_encode(tuple_get_string(tu, FIELD_ARTIST, NULL));
- title = lyricwiki_url_encode(tuple_get_string(tu, FIELD_TITLE, NULL));
+ gchar * artist0 = tuple_get_str (tu, FIELD_ARTIST, NULL);
+ gchar * title0 = tuple_get_str (tu, FIELD_TITLE, NULL);
+ artist = lyricwiki_url_encode (artist0);
+ title = lyricwiki_url_encode (title0);
+ str_unref (artist0);
+ str_unref (title0);
uri = g_strdup_printf("http://lyrics.wikia.com/api.php?action=lyrics&artist=%s&song=%s&fmt=xml", artist, title);
g_free(artist);
g_free(title);
- vfs_async_file_get_contents(uri, (VFSConsumer) get_lyrics_step_2, tuple);
+ update_lyrics_window(tu, _("\nConnecting to lyrics.wikia.com..."));
+ vfs_async_file_get_contents(uri, (VFSConsumer) get_lyrics_step_2, (Tuple *) tu);
g_free(uri);
}
-GtkWidget *window, *textview;
+GtkWidget *scrollview, *vbox;
+GtkWidget *textview;
GtkTextBuffer *textbuffer;
-static gboolean window_delete();
-
GtkWidget *
build_widget(void)
{
- GtkWidget *scrollview, *vbox;
-
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), _("LyricWiki"));
- gtk_window_set_default_size(GTK_WINDOW(window), 300, 500);
-
textview = gtk_text_view_new();
gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview), FALSE);
- gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textview), 12);
- gtk_text_view_set_right_margin(GTK_TEXT_VIEW(textview), 12);
+ gtk_text_view_set_left_margin(GTK_TEXT_VIEW(textview), 4);
+ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(textview), 4);
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), GTK_WRAP_WORD);
textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
@@ -273,29 +330,23 @@ build_widget(void)
gtk_box_pack_start(GTK_BOX(vbox), scrollview, TRUE, TRUE, 0);
- gtk_container_add(GTK_CONTAINER(window), vbox);
-
gtk_widget_show(textview);
gtk_widget_show(scrollview);
gtk_widget_show(vbox);
- gtk_widget_show(window);
gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(textbuffer), "weight_bold", "weight", PANGO_WEIGHT_BOLD, NULL);
gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(textbuffer), "size_x_large", "scale", PANGO_SCALE_X_LARGE, NULL);
gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(textbuffer), "style_italic", "style", PANGO_STYLE_ITALIC, NULL);
- g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(window_delete), NULL);
-
- return window;
+ g_signal_connect (vbox, "destroy", (GCallback) gtk_widget_destroyed, & vbox);
+ return vbox;
}
void
update_lyrics_window(const Tuple *tu, const gchar *lyrics)
{
GtkTextIter iter;
- const gchar *artist, *title;
const gchar *real_lyrics;
- gchar *f_name, *f_ext = NULL;
if (textbuffer == NULL)
return;
@@ -304,27 +355,14 @@ update_lyrics_window(const Tuple *tu, const gchar *lyrics)
gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(textbuffer), &iter);
- title = tuple_get_string(tu, FIELD_TITLE, NULL);
- artist = tuple_get_string(tu, FIELD_ARTIST, NULL);
+ gchar * title = tuple_get_str (tu, FIELD_TITLE, NULL);
+ gchar * artist = tuple_get_str (tu, FIELD_ARTIST, NULL);
- if (title == NULL)
- {
- f_name = (gchar *) tuple_get_string(tu, FIELD_FILE_NAME, NULL);
- f_ext = (gchar *) tuple_get_string(tu, FIELD_FILE_EXT, NULL);
-
- title = g_strdup(f_name);
+ if (! title)
+ title = tuple_get_str (tu, FIELD_FILE_NAME, NULL);
- f_name = g_strrstr(title, f_ext);
- if (f_name != NULL && f_name != title)
- {
- f_name--;
- f_name[0] = '\0';
- }
- }
gtk_text_buffer_insert_with_tags_by_name(GTK_TEXT_BUFFER(textbuffer), &iter,
title, strlen(title), "weight_bold", "size_x_large", NULL);
- if (f_ext != NULL)
- g_free((gpointer) title);
gtk_text_buffer_insert(GTK_TEXT_BUFFER(textbuffer), &iter, "\n", 1);
@@ -342,56 +380,60 @@ update_lyrics_window(const Tuple *tu, const gchar *lyrics)
gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(textbuffer), &iter);
gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textview), &iter, 0, TRUE, 0, 0);
+
+ str_unref (title);
+ str_unref (artist);
}
void
lyricwiki_playback_began(void)
{
gint playlist, pos;
- const Tuple *tu;
if (!aud_drct_get_playing())
return;
playlist = aud_playlist_get_playing();
pos = aud_playlist_get_position(playlist);
- tu = aud_playlist_entry_get_tuple (playlist, pos, FALSE);
+ Tuple * tu = aud_playlist_entry_get_tuple (playlist, pos, FALSE);
get_lyrics_step_1(tu);
}
-static void
-init(void)
+static gboolean init (void)
{
- hook_associate("playback begin", (HookFunction) lyricwiki_playback_began, NULL);
+ hook_associate("title change", (HookFunction) lyricwiki_playback_began, NULL);
+ hook_associate("playback ready", (HookFunction) lyricwiki_playback_began, NULL);
build_widget();
lyricwiki_playback_began();
+ return TRUE;
}
static void
cleanup(void)
{
- hook_dissociate("playback begin", (HookFunction) lyricwiki_playback_began);
+ hook_dissociate("title change", (HookFunction) lyricwiki_playback_began);
+ hook_dissociate("playback ready", (HookFunction) lyricwiki_playback_began);
- gtk_widget_destroy(window);
- window = NULL;
+ if (vbox)
+ gtk_widget_destroy (vbox);
textbuffer = NULL;
}
-GeneralPlugin lyricwiki =
+static gpointer
+get_widget(void)
{
- .description = "LyricWiki",
+ if (! vbox)
+ build_widget ();
+ return vbox;
+}
+
+AUD_GENERAL_PLUGIN
+(
+ .name = "LyricWiki",
.init = init,
.cleanup = cleanup,
-};
-
-GeneralPlugin *lyricwiki_gplist[] = { &lyricwiki, NULL };
-SIMPLE_GENERAL_PLUGIN(lyricwiki, lyricwiki_gplist);
-
-static gboolean window_delete(void)
-{
- aud_general_plugin_enable (aud_plugin_by_header (& lyricwiki), FALSE);
- return TRUE;
-}
+ .get_widget = get_widget,
+)
diff --git a/src/m3u/Makefile b/src/m3u/Makefile
index 0541fc9..dbc31d6 100644
--- a/src/m3u/Makefile
+++ b/src/m3u/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${CONTAINER_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../.. -Wall
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -Wall
LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/m3u/m3u.c b/src/m3u/m3u.c
index 210f49e..b74b2c0 100644
--- a/src/m3u/m3u.c
+++ b/src/m3u/m3u.c
@@ -33,60 +33,50 @@ static void strip_char (gchar * text, gchar c)
gchar a;
while ((a = * text ++))
- {
if (a != c)
* set ++ = a;
- }
* set = 0;
}
-static gchar * read_win_text (const gchar * path)
+static gchar * read_win_text (VFSFile * file)
{
- void * raw;
- gint64 size;
-
- vfs_file_get_contents (path, & raw, & size);
-
- if (raw == NULL)
+ gint64 size = vfs_fsize (file);
+ if (size < 1)
return NULL;
- gchar * text = g_convert (raw, size, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
+ gchar * raw = g_malloc (size + 1);
+ size = vfs_fread (raw, 1, size, file);
+ raw[size] = 0;
+
+ strip_char (raw, '\r');
+ gchar * text = str_to_utf8 (raw);
g_free (raw);
- strip_char (text, '\r');
return text;
}
static gchar * split_line (gchar * line)
{
gchar * feed = strchr (line, '\n');
-
- if (feed == NULL)
+ if (! feed)
return NULL;
* feed = 0;
return feed + 1;
}
-static gchar * convert_path (gchar * path, const gchar * base)
-{
- if (strstr (path, "://") != NULL)
- return g_strdup (path);
-
- return aud_construct_uri (path, base);
-}
-
-static void playlist_load_m3u (const gchar * path, gint at)
+static gboolean playlist_load_m3u (const gchar * path, VFSFile * file,
+ gchar * * title, Index * filenames, Index * tuples)
{
- gchar * text = read_win_text (path);
+ gchar * text = read_win_text (file);
+ if (! text)
+ return FALSE;
- if (text == NULL)
- return;
+ * title = NULL;
gchar * parse = text;
- struct index * add = index_new ();
- while (1)
+ while (parse)
{
gchar * next = split_line (parse);
@@ -99,81 +89,37 @@ static void playlist_load_m3u (const gchar * path, gint at)
if (* parse == '#')
goto NEXT;
- gchar * s = convert_path (parse, path);
+ gchar * s = aud_construct_uri (parse, path);
+ if (s)
+ index_append (filenames, str_get (s));
- if (s != NULL)
- index_append (add, s);
+ g_free (s);
NEXT:
parse = next;
}
- aud_playlist_entry_insert_batch (aud_playlist_get_active (), at, add, NULL);
g_free (text);
+ return TRUE;
}
-static void
-playlist_save_m3u(const gchar *filename, gint pos)
+static gboolean playlist_save_m3u (const gchar * path, VFSFile * file,
+ const gchar * title, Index * filenames, Index * tuples)
{
- gint playlist = aud_playlist_get_active ();
- gint entries = aud_playlist_entry_count (playlist);
- gchar *outstr = NULL;
- VFSFile *file;
- gchar *fn = NULL;
- gint count;
+ gint count = index_count (filenames);
- g_return_if_fail(filename != NULL);
+ for (gint i = 0; i < count; i ++)
+ vfs_fprintf (file, "%s\n", (const gchar *) index_get (filenames, i));
- fn = g_filename_to_uri(filename, NULL, NULL);
- file = vfs_fopen(fn ? fn : filename, "wb");
- g_free(fn);
- g_return_if_fail(file != NULL);
-
- for (count = pos; count < entries; count ++)
- {
- const gchar * filename = aud_playlist_entry_get_filename (playlist,
- count);
- const gchar * title = aud_playlist_entry_get_title (playlist, count,
- FALSE);
- gint seconds = aud_playlist_entry_get_length (playlist, count, FALSE) /
- 1000;
-
- if (title != NULL)
- {
- outstr = g_locale_from_utf8 (title, -1, NULL, NULL, NULL);
-
- if(outstr) {
- vfs_fprintf(file, "#EXTINF:%d,%s\n", seconds, outstr);
- g_free(outstr);
- outstr = NULL;
- }
- else
- vfs_fprintf (file, "#EXTINF:%d,%s\n", seconds, title);
- }
-
- fn = g_filename_from_uri (filename, NULL, NULL);
- vfs_fprintf (file, "%s\n", fn != NULL ? fn : filename);
- g_free(fn);
- }
-
- vfs_fclose(file);
-}
-
-PlaylistContainer plc_m3u = {
- .name = "M3U Playlist Format",
- .ext = "m3u",
- .plc_read = playlist_load_m3u,
- .plc_write = playlist_save_m3u,
-};
-
-static void init(void)
-{
- aud_playlist_container_register(&plc_m3u);
+ return TRUE;
}
-static void cleanup(void)
-{
- aud_playlist_container_unregister(&plc_m3u);
-}
+static const gchar * const m3u_exts[] = {"m3u", "m3u8", NULL};
-DECLARE_PLUGIN (m3u, init, cleanup, NULL, NULL, NULL, NULL, NULL, NULL)
+AUD_PLAYLIST_PLUGIN
+(
+ .name = "M3U Playlist Format",
+ .extensions = m3u_exts,
+ .load = playlist_load_m3u,
+ .save = playlist_save_m3u
+)
diff --git a/src/metronom/Makefile b/src/metronom/Makefile
index 7641cfd..4a294c7 100644
--- a/src/metronom/Makefile
+++ b/src/metronom/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/metronom/metronom.c b/src/metronom/metronom.c
index 908b012..295c7e7 100644
--- a/src/metronom/metronom.c
+++ b/src/metronom/metronom.c
@@ -26,6 +26,7 @@
#include <libaudgui/libaudgui-gtk.h>
#include <glib.h>
+#include <string.h>
#define MIN_BPM 1
#define MAX_BPM 512
@@ -76,12 +77,7 @@ gdouble tact_form[TACT_ID_MAX][TACT_FORM_MAX] = {
{1.0, 0.5, 0.5, 0.6, 0.5, 0.5, 0.0, 0.0}
};
-static InputPlugin metronom_ip;
-
-static void metronom_init(void)
-{
- aud_uri_set_plugin("tact://", &metronom_ip);
-}
+static gboolean stop_flag = FALSE;
static void metronom_about (void)
{
@@ -94,7 +90,7 @@ static void metronom_about (void)
"or tact://60*3/4 to play 60 bpm in 3/4 tacts"));
}
-static gint metronom_is_our_file(const gchar * filename)
+static gboolean metronom_is_our_fd(const gchar * filename, VFSFile *fd)
{
if (!strncmp(filename, "tact://", 7))
return TRUE;
@@ -141,6 +137,9 @@ static gboolean metronom_get_cp(const gchar *filename, metronom_t *pmetronom, gc
pmetronom->id = id;
}
+ if (str == NULL)
+ return TRUE;
+
if (pmetronom->num == 1 && pmetronom->den == 1)
*str = g_strdup_printf(_("Tact generator: %d bpm"), pmetronom->bpm);
else
@@ -149,9 +148,9 @@ static gboolean metronom_get_cp(const gchar *filename, metronom_t *pmetronom, gc
return TRUE;
}
-static void metronom_play(InputPlayback * playback)
+static gboolean metronom_play(InputPlayback *playback, const gchar *filename,
+ VFSFile *file, gint start_time, gint stop_time, gboolean pause)
{
- gchar *name = NULL;
metronom_t pmetronom;
gint16 data[BUF_SAMPLES];
gint t = 0, tact, num;
@@ -160,21 +159,24 @@ static void metronom_play(InputPlayback * playback)
gint datacurrent = datamiddle;
gint datalast = datamiddle;
gint data_form[TACT_FORM_MAX];
+ gboolean error = FALSE;
if (playback->output->open_audio(FMT_S16_LE, AUDIO_FREQ, 1) == 0)
{
- playback->error = TRUE;
+ error = TRUE;
goto error_exit;
}
- if (!metronom_get_cp(playback->filename, &pmetronom, &name))
+ if (!metronom_get_cp(filename, &pmetronom, NULL))
{
- g_message("Invalid metronom tact parameters in URI %s", playback->filename);
+ g_message("Invalid metronom tact parameters in URI %s", filename);
goto error_exit;
}
- playback->set_params(playback, name, -1, sizeof(data[0]) * 8 * AUDIO_FREQ, AUDIO_FREQ, 1);
- g_free(name);
+ if (pause)
+ playback->output->pause(TRUE);
+
+ playback->set_params(playback, sizeof(data[0]) * 8 * AUDIO_FREQ, AUDIO_FREQ, 1);
tact = 60 * AUDIO_FREQ / pmetronom.bpm;
@@ -184,11 +186,11 @@ static void metronom_play(InputPlayback * playback)
data_form[num] = MAX_AMPL * tact_form[pmetronom.id][num];
}
- playback->playing = TRUE;
+ stop_flag = FALSE;
playback->set_pb_ready(playback);
num = 0;
- while (playback->playing)
+ while (!stop_flag)
{
gint i;
@@ -219,52 +221,55 @@ static void metronom_play(InputPlayback * playback)
datagoal = (datamiddle + 7 * datagoal) / 8;
t++;
}
- if (playback->playing)
- playback->pass_audio(playback, FMT_S16_LE, 1, BUF_BYTES, data, &playback->playing);
+
+ if (!stop_flag)
+ playback->output->write_audio(data, BUF_BYTES);
}
error_exit:
- playback->playing = 0;
- playback->eof = TRUE;
+ stop_flag = TRUE;
playback->output->close_audio();
+
+ return !error;
}
static void metronom_stop(InputPlayback * playback)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
+ playback->output->abort_write();
}
-static void metronom_pause(InputPlayback * playback, short paused)
+static void metronom_pause(InputPlayback * playback, gboolean pause)
{
- playback->output->pause(paused);
+ if (!stop_flag)
+ playback->output->pause(pause);
}
-static Tuple *metronom_get_song_tuple(const gchar * filename)
+static Tuple *metronom_probe_for_tuple(const gchar * filename, VFSFile *fd)
{
Tuple *tuple = tuple_new_from_filename(filename);
metronom_t metronom;
gchar *tmp = NULL;
if (metronom_get_cp(filename, &metronom, &tmp))
- tuple_associate_string(tuple, FIELD_TITLE, NULL, tmp);
+ tuple_set_str(tuple, FIELD_TITLE, NULL, tmp);
g_free(tmp);
return tuple;
}
-static InputPlugin metronom_ip = {
- .description = "Tact Generator",
- .init = metronom_init,
+static const gchar * const schemes[] = {"tact", NULL};
+
+AUD_INPUT_PLUGIN
+(
+ .name = "Tact Generator",
+ .schemes = schemes,
.about = metronom_about,
- .is_our_file = metronom_is_our_file,
- .play_file = metronom_play,
+ .is_our_file_from_vfs = metronom_is_our_fd,
+ .play = metronom_play,
.stop = metronom_stop,
.pause = metronom_pause,
- .get_song_tuple = metronom_get_song_tuple,
-};
-
-static InputPlugin *metronom_iplist[] = { &metronom_ip, NULL };
-
-DECLARE_PLUGIN(metronom, NULL, NULL, metronom_iplist, NULL, NULL, NULL, NULL, NULL);
+ .probe_for_tuple = metronom_probe_for_tuple,
+)
diff --git a/src/mixer/Makefile b/src/mixer/Makefile
new file mode 100644
index 0000000..4ab62e5
--- /dev/null
+++ b/src/mixer/Makefile
@@ -0,0 +1,12 @@
+PLUGIN = mixer${PLUGIN_SUFFIX}
+
+SRCS = mixer.c plugin.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
+
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} -I../..
+CFLAGS += ${PLUGIN_CFLAGS}
+LIBS += ${GTK_LIBS}
diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c
new file mode 100644
index 0000000..f8cb6d5
--- /dev/null
+++ b/src/mixer/mixer.c
@@ -0,0 +1,146 @@
+/*
+ * Channel Mixer Plugin for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+/* TODO: implement surround converters */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mixer.h"
+
+typedef void (* Converter) (float * * data, int * samples);
+
+static void mono_to_stereo (float * * data, int * samples)
+{
+ int frames = * samples;
+ float * get = * data;
+ float * set = mixer_buf = realloc (mixer_buf, sizeof (float) * 2 * frames);
+
+ * data = mixer_buf;
+ * samples = 2 * frames;
+
+ while (frames --)
+ {
+ float val = * get ++;
+ * set ++ = val;
+ * set ++ = val;
+ }
+}
+
+static void stereo_to_mono (float * * data, int * samples)
+{
+ int frames = * samples / 2;
+ float * get = * data;
+ float * set = mixer_buf = realloc (mixer_buf, sizeof (float) * frames);
+
+ * data = mixer_buf;
+ * samples = frames;
+
+ while (frames --)
+ {
+ float val = * get ++;
+ val += * get ++;
+ * set ++ = val / 2;
+ }
+}
+
+static void quadro_to_stereo(float * * data, int * samples)
+{
+ int frames = * samples / 4;
+ float * get = * data;
+ float * set = mixer_buf = realloc (mixer_buf, sizeof (float) * 2 * frames);
+
+ * data = mixer_buf;
+ * samples = 2 * frames;
+
+ while (frames --)
+ {
+ float front_left = * get ++;
+ float front_right = * get ++;
+ float back_left = * get ++;
+ float back_right = * get ++;
+ * set ++ = front_left + (back_left * 0.7);
+ * set ++ = front_right + (back_right * 0.7);
+ }
+}
+
+static void surround_5p1_to_stereo(float * * data, int * samples)
+{
+ int frames = * samples / 6;
+ float * get = * data;
+ float * set = mixer_buf = realloc (mixer_buf, sizeof (float) * 2 * frames);
+
+ * data = mixer_buf;
+ * samples = 2 * frames;
+
+ while (frames --)
+ {
+ float front_left = * get ++;
+ float front_right = * get ++;
+ float center = * get ++;
+ float lfe = * get ++;
+ float rear_left = * get ++;
+ float rear_right = * get ++;
+ * set ++ = front_left + (center * 0.5) + (lfe * 0.5) + (rear_left * 0.5);
+ * set ++ = front_right + (center * 0.5) + (lfe * 0.5) + (rear_right * 0.5);
+ }
+}
+
+static const Converter converters[MAX_CHANNELS + 1][MAX_CHANNELS + 1] = {
+ [1][2] = mono_to_stereo,
+ [2][1] = stereo_to_mono,
+ [4][2] = quadro_to_stereo,
+ [6][2] = surround_5p1_to_stereo};
+
+static int input_channels, output_channels;
+
+void mixer_start (int * channels, int * rate)
+{
+ input_channels = * channels;
+ output_channels = mixer_channels;
+
+ if (input_channels == output_channels)
+ return;
+
+ if (input_channels < 1 || input_channels > MAX_CHANNELS ||
+ ! converters[input_channels][output_channels])
+ {
+ fprintf (stderr, "Converting %d to %d channels is not implemented.\n",
+ input_channels, output_channels);
+ return;
+ }
+
+ * channels = output_channels;
+}
+
+void mixer_process (float * * data, int * samples)
+{
+ if (input_channels == output_channels)
+ return;
+
+ if (input_channels < 1 || input_channels > MAX_CHANNELS ||
+ ! converters[input_channels][output_channels])
+ return;
+
+ converters[input_channels][output_channels] (data, samples);
+}
+
+void mixer_flush (void)
+{
+}
diff --git a/src/mixer/mixer.h b/src/mixer/mixer.h
new file mode 100644
index 0000000..8e6cd5a
--- /dev/null
+++ b/src/mixer/mixer.h
@@ -0,0 +1,27 @@
+/*
+ * Channel Mixer Plugin for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#define MAX_CHANNELS 8
+
+extern int mixer_channels;
+extern float * mixer_buf;
+
+void mixer_start (int * channels, int * rate);
+void mixer_process (float * * data, int * samples);
+void mixer_flush (void);
diff --git a/src/mixer/plugin.c b/src/mixer/plugin.c
new file mode 100644
index 0000000..8340ea4
--- /dev/null
+++ b/src/mixer/plugin.c
@@ -0,0 +1,134 @@
+/*
+ * Channel Mixer Plugin for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <audacious/plugin.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+#include "config.h"
+#include "mixer.h"
+
+static const gchar * const mixer_defaults[] = {
+ "channels", "2",
+ NULL};
+
+int mixer_channels;
+float * mixer_buf;
+
+static GtkWidget * about_win, * config_win;
+
+static int mixer_init (void)
+{
+ aud_config_set_defaults ("mixer", mixer_defaults);
+ mixer_channels = aud_get_int ("mixer", "channels");
+ return 1;
+}
+
+static void mixer_cleanup (void)
+{
+ if (about_win)
+ gtk_widget_destroy (about_win);
+ if (config_win)
+ gtk_widget_destroy (config_win);
+
+ aud_set_int ("mixer", "channels", mixer_channels);
+
+ free (mixer_buf);
+ mixer_buf = 0;
+}
+
+static void mixer_about (void)
+{
+ audgui_simple_message (& about_win, GTK_MESSAGE_INFO,
+ _("About Channel Mixer"),
+ "Channel Mixer Plugin for Audacious\n"
+ "Copyright 2011 John Lindgren\n\n"
+ "Redistribution and use in source and binary forms, with or without "
+ "modification, are permitted provided that the following conditions are "
+ "met:\n\n"
+ "1. Redistributions of source code must retain the above copyright "
+ "notice, this list of conditions, and the following disclaimer.\n\n"
+ "2. Redistributions in binary form must reproduce the above copyright "
+ "notice, this list of conditions, and the following disclaimer in the "
+ "documentation provided with the distribution.\n\n"
+ "This software is provided \"as is\" and without any warranty, express or "
+ "implied. In no event shall the authors be liable for any damages arising "
+ "from the use of this software.");
+}
+
+static void spin_changed (GtkSpinButton * spin, void * data)
+{
+ * (int *) data = gtk_spin_button_get_value (spin);
+}
+
+static void mixer_configure (void)
+{
+ if (config_win)
+ {
+ gtk_window_present ((GtkWindow *) config_win);
+ return;
+ }
+
+ config_win = gtk_dialog_new_with_buttons (_("Channel Mixer Settings"), 0, 0,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+ gtk_window_set_resizable ((GtkWindow *) config_win, 0);
+
+ GtkWidget * vbox = gtk_dialog_get_content_area ((GtkDialog *) config_win);
+
+ GtkWidget * hbox = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0);
+
+ GtkWidget * label = gtk_label_new (_("Output channels:"));
+ gtk_box_pack_start ((GtkBox *) hbox, label, 0, 0, 0);
+
+ GtkWidget * spin = gtk_spin_button_new_with_range (1, MAX_CHANNELS, 1);
+ gtk_spin_button_set_value ((GtkSpinButton *) spin, mixer_channels);
+ gtk_box_pack_start ((GtkBox *) hbox, spin, 0, 0, 0);
+
+ hbox = gtk_hbox_new (0, 6);
+ gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0);
+
+ label = gtk_label_new (_("Changes take effect at the next song change."));
+ gtk_box_pack_start ((GtkBox *) hbox, label, 0, 0, 0);
+
+ g_signal_connect (config_win, "response", (GCallback) gtk_widget_destroy, 0);
+ g_signal_connect (config_win, "destroy", (GCallback) gtk_widget_destroyed, & config_win);
+ g_signal_connect (spin, "value-changed", (GCallback) spin_changed, & mixer_channels);
+
+ gtk_widget_show_all (config_win);
+}
+
+AUD_EFFECT_PLUGIN
+(
+ .name = "Channel Mixer",
+ .init = mixer_init,
+ .cleanup = mixer_cleanup,
+ .about = mixer_about,
+ .configure = mixer_configure,
+ .start = mixer_start,
+ .process = mixer_process,
+ .flush = mixer_flush,
+ .finish = mixer_process,
+ .order = 2, /* must be before crossfade */
+)
diff --git a/src/mms/Makefile b/src/mms/Makefile
index 0be01be..d178f10 100644
--- a/src/mms/Makefile
+++ b/src/mms/Makefile
@@ -7,6 +7,6 @@ include ../../extra.mk
plugindir := ${plugindir}/${TRANSPORT_PLUGIN_DIR}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${MMS_CFLAGS} -I../.. -Wall
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${MMS_CFLAGS} -I../.. -Wall
CFLAGS += ${PLUGIN_CFLAGS}
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MMS_LIBS}
diff --git a/src/mms/mms.c b/src/mms/mms.c
index 92324cd..9766658 100644
--- a/src/mms/mms.c
+++ b/src/mms/mms.c
@@ -1,5 +1,6 @@
-/* Audacious
+/* MMS/MMSH Transport for Audacious
* Copyright (c) 2007 William Pitcock
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -33,213 +34,198 @@
#include <audacious/debug.h>
#include <audacious/plugin.h>
+#define BUFSIZE 65536
+#define BLOCKSIZE 4096
+
typedef struct {
mms_t *mms;
mmsh_t *mmsh;
- GSList *charstack;
+ guchar * buf;
+ gint64 offset;
+ gint len, used;
} MMSHandle;
-VFSFile *
-mms_vfs_fopen_impl(const gchar * path,
- const gchar * mode)
+static void * mms_vfs_fopen_impl (const gchar * path, const gchar * mode)
{
AUDDBG("Opening %s.\n", path);
- VFSFile *file;
MMSHandle *handle;
-
- if (!path || !mode)
- return NULL;
-
- file = g_new(VFSFile, 1);
handle = g_new0(MMSHandle, 1);
+ handle->mmsh = mmsh_connect(NULL, NULL, path, 128 * 1024);
- file->handle = handle;
-
- if (file->handle == NULL) {
- g_free(file);
- file = NULL;
- }
-
- handle->mms = mms_connect(NULL, NULL, path, 128 * 1024);
-
- if (handle->mms == NULL) {
- AUDDBG("Failed to connect with MMS protocol; trying MMSH.\n");
- handle->mmsh = mmsh_connect(NULL, NULL, path, 128 * 1024);
+ if (handle->mmsh == NULL) {
+ AUDDBG("Failed to connect with MMSH protocol; trying MMS.\n");
+ handle->mms = mms_connect(NULL, NULL, path, 128 * 1024);
}
if (handle->mms == NULL && handle->mmsh == NULL)
{
fprintf(stderr, "mms: Failed to open %s.\n", path);
g_free(handle);
- g_free(file);
- file = NULL;
+ return NULL;
}
- return file;
+ handle->buf = g_malloc (BUFSIZE);
+ return handle;
}
-gint
-mms_vfs_fclose_impl(VFSFile * file)
+static gint mms_vfs_fclose_impl (VFSFile * file)
{
- gint ret = 0;
+ MMSHandle *handle = (MMSHandle *) vfs_get_handle (file);
- if (file == NULL)
- return -1;
-
- if (file->handle)
- {
- MMSHandle *handle = (MMSHandle *) file->handle;
+ if (handle->mms != NULL)
+ mms_close(handle->mms);
+ else /* if (handle->mmsh != NULL) */
+ mmsh_close(handle->mmsh);
- if (handle->mms != NULL)
- mms_close(handle->mms);
- else /* if (handle->mmsh != NULL) */
- mmsh_close(handle->mmsh);
+ g_free (handle->buf);
+ g_free (handle);
- g_free(handle);
- file->handle = NULL;
- }
-
- return ret;
+ return 0;
}
-gint64 mms_vfs_fread_impl (void * ptr, gint64 size, gint64 nmemb, VFSFile *
- file)
+static gint64 mms_vfs_fread_impl (void * buf, gint64 size, gint64 count,
+ VFSFile * file)
{
- MMSHandle *handle;
- gint ret;
-
- handle = (MMSHandle *) file->handle;
+ MMSHandle * h = vfs_get_handle (file);
+ gint64 goal = size * count;
+ gint64 total = 0;
- if (handle->mms != NULL)
- ret = mms_read(NULL, handle->mms, ptr, size * nmemb);
- else /* if (handle->mmsh != NULL) */
- ret = mmsh_read(NULL, handle->mmsh, ptr, size * nmemb);
-
- if (ret < 0)
+ while (total < goal)
{
- g_message("** mms **: errno(%d): %s", errno, strerror(errno));
- ret = EOF;
+ if (h->used == h->len)
+ {
+ if (h->len == BUFSIZE)
+ {
+ memmove (h->buf, h->buf + BLOCKSIZE, BUFSIZE - BLOCKSIZE);
+ h->offset += BLOCKSIZE;
+ h->len = BUFSIZE - BLOCKSIZE;
+ h->used = BUFSIZE - BLOCKSIZE;
+ }
+
+ gint size = MIN (BLOCKSIZE, BUFSIZE - h->len);
+
+ if (h->mms)
+ size = mms_read (NULL, h->mms, (gchar *) h->buf + h->len, size);
+ else /* if (h->mmsh) */
+ size = mmsh_read (NULL, h->mmsh, (gchar *) h->buf + h->len, size);
+
+ if (size < 0)
+ fprintf (stderr, "mms: Read error: %s.\n", strerror (errno));
+ if (size <= 0)
+ break;
+
+ h->len += size;
+ }
+
+ gint copy = MIN (h->len - h->used, goal - total);
+
+ memcpy (buf, h->buf + h->used, copy);
+ h->used += copy;
+ buf += copy;
+ total += copy;
}
- return ret;
+ return (size > 0) ? total / size : 0;
}
-gint64 mms_vfs_fwrite_impl (const void * ptr, gint64 size, gint64 nmemb,
+static gint64 mms_vfs_fwrite_impl (const void * data, gint64 size, gint64 count,
VFSFile * file)
{
+ fprintf (stderr, "mms: Writing is not supported.\n");
return 0;
}
-gint
-mms_vfs_getc_impl(VFSFile *stream)
+static gint mms_vfs_fseek_impl (VFSFile * file, gint64 offset, gint whence)
{
- MMSHandle *handle = (MMSHandle *) stream->handle;
- guchar c;
+ MMSHandle * h = vfs_get_handle (file);
- if (handle->charstack != NULL)
+ if (whence == SEEK_SET)
{
- c = GPOINTER_TO_UINT(handle->charstack->data);
- handle->charstack = g_slist_remove_link(handle->charstack, handle->charstack);
- return c;
+ whence = SEEK_CUR;
+ offset -= h->offset + h->used;
}
- else
- {
- if (handle->mms != NULL)
- mms_read(NULL, handle->mms, (char *)&c, 1);
- else /* if (handle->mmsh != NULL) */
- mmsh_read(NULL, handle->mmsh, (char *)&c, 1);
- return c;
+ if (whence != SEEK_CUR || offset < -h->used || offset > h->len - h->used)
+ {
+ fprintf (stderr, "mms: Attempt to seek outside buffered region.\n");
+ return -1;
}
- return EOF;
+ h->used += offset;
+ return 0;
}
-gint
-mms_vfs_ungetc_impl(gint c, VFSFile *stream)
+static void mms_vfs_rewind_impl (VFSFile * file)
{
- MMSHandle *handle = (MMSHandle *) stream->handle;
-
- handle->charstack = g_slist_append(handle->charstack, GUINT_TO_POINTER(c));
-
- if (handle->charstack != NULL)
- return c;
-
- return EOF;
+ mms_vfs_fseek_impl (file, 0, SEEK_SET);
}
-static gint mms_vfs_fseek_impl (VFSFile * file, gint64 offset, gint whence)
+static gint64 mms_vfs_ftell_impl (VFSFile * file)
{
- return -1;
+ MMSHandle * h = vfs_get_handle (file);
+ return h->offset + h->used;
}
-void
-mms_vfs_rewind_impl(VFSFile * file)
+static gint mms_vfs_getc_impl (VFSFile * file)
{
- return;
+ guchar c;
+ return (mms_vfs_fread_impl (& c, 1, 1, file) == 1) ? c : EOF;
}
-static gint64 mms_vfs_ftell_impl (VFSFile * file)
+static gint mms_vfs_ungetc_impl (gint c, VFSFile * file)
{
- MMSHandle *handle = (MMSHandle *) file->handle;
-
- if (handle->mms != NULL)
- return mms_get_current_pos(handle->mms);
- else /* if (handle->mmsh != NULL) */
- return mmsh_get_current_pos(handle->mmsh);
+ return (! mms_vfs_fseek_impl (file, -1, SEEK_CUR)) ? c : EOF;
}
-gboolean
-mms_vfs_feof_impl(VFSFile * file)
+static gboolean mms_vfs_feof_impl (VFSFile * file)
{
- MMSHandle *handle = (MMSHandle *) file->handle;
+ return FALSE;
- if (handle->mms != NULL)
- return (gboolean) (mms_get_current_pos(handle->mms) ==
- mms_get_length(handle->mms));
- else /* if (handle->mmsh != NULL) */
- return (gboolean) (mmsh_get_current_pos(handle->mmsh) ==
- mmsh_get_length(handle->mmsh));
+ MMSHandle * h = vfs_get_handle (file);
+
+ if (h->mms)
+ return (h->offset + h->used == mms_get_length (h->mms));
+ else /* if (h->mmsh) */
+ return (h->offset + h->used == mmsh_get_length (h->mmsh));
}
static gint mms_vfs_truncate_impl (VFSFile * file, gint64 size)
{
+ fprintf (stderr, "mms: Truncating is not supported.\n");
return -1;
}
-off_t
-mms_vfs_fsize_impl(VFSFile * file)
+static gint64 mms_vfs_fsize_impl (VFSFile * file)
{
- return -1;
-}
+ MMSHandle * h = vfs_get_handle (file);
-VFSConstructor mms_const = {
- "mms://",
- mms_vfs_fopen_impl,
- mms_vfs_fclose_impl,
- mms_vfs_fread_impl,
- mms_vfs_fwrite_impl,
- mms_vfs_getc_impl,
- mms_vfs_ungetc_impl,
- mms_vfs_fseek_impl,
- mms_vfs_rewind_impl,
- mms_vfs_ftell_impl,
- mms_vfs_feof_impl,
- mms_vfs_truncate_impl,
- mms_vfs_fsize_impl
-};
-
-static void init(void)
-{
- vfs_register_transport(&mms_const);
+ if (h->mms)
+ return mms_get_length (h->mms);
+ else /* if (h->mmsh) */
+ return mmsh_get_length (h->mmsh);
}
-static void cleanup(void)
-{
-#if 0
- vfs_unregister_transport(&mms_const);
-#endif
-}
+static const gchar * const mms_schemes[] = {"mms", NULL};
+
+static VFSConstructor constructor = {
+ .vfs_fopen_impl = mms_vfs_fopen_impl,
+ .vfs_fclose_impl = mms_vfs_fclose_impl,
+ .vfs_fread_impl = mms_vfs_fread_impl,
+ .vfs_fwrite_impl = mms_vfs_fwrite_impl,
+ .vfs_getc_impl = mms_vfs_getc_impl,
+ .vfs_ungetc_impl = mms_vfs_ungetc_impl,
+ .vfs_fseek_impl = mms_vfs_fseek_impl,
+ .vfs_rewind_impl = mms_vfs_rewind_impl,
+ .vfs_ftell_impl = mms_vfs_ftell_impl,
+ .vfs_feof_impl = mms_vfs_feof_impl,
+ .vfs_ftruncate_impl = mms_vfs_truncate_impl,
+ .vfs_fsize_impl = mms_vfs_fsize_impl
+};
-DECLARE_PLUGIN (mms, init, cleanup, NULL, NULL, NULL, NULL, NULL, NULL)
+AUD_TRANSPORT_PLUGIN
+(
+ .name = "MMS Support",
+ .schemes = mms_schemes,
+ .vtable = & constructor
+)
diff --git a/src/modplug/Makefile b/src/modplug/Makefile
index 06b36c9..89e14d0 100644
--- a/src/modplug/Makefile
+++ b/src/modplug/Makefile
@@ -1,45 +1,10 @@
PLUGIN = modplug${PLUGIN_SUFFIX}
-SRCS = plugin.cxx \
- modplugbmp.cxx \
- tables.cxx \
- sndmix.cxx \
- sndfile.cxx \
- snd_eq.cxx \
- snd_fx.cxx \
- snd_flt.cxx \
- snd_dsp.cxx \
- fastmix.cxx \
- mmcmp.cxx \
- load_xm.cxx \
- load_wav.cxx \
- load_umx.cxx \
- load_ult.cxx \
- load_stm.cxx \
- load_s3m.cxx \
- load_ptm.cxx \
- load_okt.cxx \
- load_mtm.cxx \
- load_mod.cxx \
- load_med.cxx \
- load_mdl.cxx \
- load_it.cxx \
- load_far.cxx \
- load_dsm.cxx \
- load_dmf.cxx \
- load_dbm.cxx \
- load_ams.cxx \
- load_amf.cxx \
- load_669.cxx \
- load_mt2.cxx \
- load_psm.cxx \
- archive/archive.cxx \
- archive/open.cxx \
- archive/arch_raw.cxx \
- gui/main.cxx \
- gui/support.cxx \
- gui/interface.cxx \
- gui/callbacks.cxx \
+SRCS = archive/arch_raw.cxx \
+ archive/archive.cxx \
+ archive/open.cxx \
+ plugin.cxx \
+ modplugbmp.cxx \
plugin_main.c
include ../../buildsys.mk
@@ -50,5 +15,5 @@ plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
LD = ${CXX}
CFLAGS += ${PLUGIN_CFLAGS}
CXXFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I.. -I../.. -I../../intl
-LIBS += ${MOWGLI_LIBS} ${GTK_LIBS} ${GLIB_LIBS} -lstdc++
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GLIB_CFLAGS} ${MODPLUG_CFLAGS} -I../..
+LIBS += ${GLIB_LIBS} ${MODPLUG_LIBS} -lstdc++
diff --git a/src/modplug/fastmix.cxx b/src/modplug/fastmix.cxx
deleted file mode 100755
index f9557fb..0000000
--- a/src/modplug/fastmix.cxx
+++ /dev/null
@@ -1,1853 +0,0 @@
-/*
- * This program is free software; you can redistribute it and 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.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
- * Markus Fick <webmaster@mark-f.de> spline + fir-resampler
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-#include <math.h>
-
-// Front Mix Buffer (Also room for interleaved rear mix)
-int MixSoundBuffer[MIXBUFFERSIZE*4];
-
-// Reverb Mix Buffer
-#ifndef MODPLUG_NO_REVERB
-int MixReverbBuffer[MIXBUFFERSIZE*2];
-extern UINT gnReverbSend;
-#endif
-
-int MixRearBuffer[MIXBUFFERSIZE*2];
-float MixFloatBuffer[MIXBUFFERSIZE*2];
-
-
-extern LONG gnDryROfsVol;
-extern LONG gnDryLOfsVol;
-extern LONG gnRvbROfsVol;
-extern LONG gnRvbLOfsVol;
-
-// 4x256 taps polyphase FIR resampling filter
-extern short int gFastSinc[];
-extern short int gKaiserSinc[]; // 8-taps polyphase
-/*
- -----------------------------------------------------------------------------
- cubic spline interpolation doc,
- (derived from "digital image warping", g. wolberg)
-
- interpolation polynomial: f(x) = A3*(x-floor(x))**3 + A2*(x-floor(x))**2 + A1*(x-floor(x)) + A0
-
- with Y = equispaced data points (dist=1), YD = first derivates of data points and IP = floor(x)
- the A[0..3] can be found by solving
- A0 = Y[IP]
- A1 = YD[IP]
- A2 = 3*(Y[IP+1]-Y[IP])-2.0*YD[IP]-YD[IP+1]
- A3 = -2.0 * (Y[IP+1]-Y[IP]) + YD[IP] - YD[IP+1]
-
- with the first derivates as
- YD[IP] = 0.5 * (Y[IP+1] - Y[IP-1]);
- YD[IP+1] = 0.5 * (Y[IP+2] - Y[IP])
-
- the coefs becomes
- A0 = Y[IP]
- A1 = YD[IP]
- = 0.5 * (Y[IP+1] - Y[IP-1]);
- A2 = 3.0 * (Y[IP+1]-Y[IP])-2.0*YD[IP]-YD[IP+1]
- = 3.0 * (Y[IP+1] - Y[IP]) - 0.5 * 2.0 * (Y[IP+1] - Y[IP-1]) - 0.5 * (Y[IP+2] - Y[IP])
- = 3.0 * Y[IP+1] - 3.0 * Y[IP] - Y[IP+1] + Y[IP-1] - 0.5 * Y[IP+2] + 0.5 * Y[IP]
- = -0.5 * Y[IP+2] + 2.0 * Y[IP+1] - 2.5 * Y[IP] + Y[IP-1]
- = Y[IP-1] + 2 * Y[IP+1] - 0.5 * (5.0 * Y[IP] + Y[IP+2])
- A3 = -2.0 * (Y[IP+1]-Y[IP]) + YD[IP] + YD[IP+1]
- = -2.0 * Y[IP+1] + 2.0 * Y[IP] + 0.5 * (Y[IP+1] - Y[IP-1]) + 0.5 * (Y[IP+2] - Y[IP])
- = -2.0 * Y[IP+1] + 2.0 * Y[IP] + 0.5 * Y[IP+1] - 0.5 * Y[IP-1] + 0.5 * Y[IP+2] - 0.5 * Y[IP]
- = 0.5 * Y[IP+2] - 1.5 * Y[IP+1] + 1.5 * Y[IP] - 0.5 * Y[IP-1]
- = 0.5 * (3.0 * (Y[IP] - Y[IP+1]) - Y[IP-1] + YP[IP+2])
-
- then interpolated data value is (horner rule)
- out = (((A3*x)+A2)*x+A1)*x+A0
-
- this gives parts of data points Y[IP-1] to Y[IP+2] of
- part x**3 x**2 x**1 x**0
- Y[IP-1] -0.5 1 -0.5 0
- Y[IP] 1.5 -2.5 0 1
- Y[IP+1] -1.5 2 0.5 0
- Y[IP+2] 0.5 -0.5 0 0
- -----------------------------------------------------------------------------
-*/
-// number of bits used to scale spline coefs
-#define SPLINE_QUANTBITS 14
-#define SPLINE_QUANTSCALE (1L<<SPLINE_QUANTBITS)
-#define SPLINE_8SHIFT (SPLINE_QUANTBITS-8)
-#define SPLINE_16SHIFT (SPLINE_QUANTBITS)
-// forces coefsset to unity gain
-#define SPLINE_CLAMPFORUNITY
-// log2(number) of precalculated splines (range is [4..14])
-#define SPLINE_FRACBITS 10
-#define SPLINE_LUTLEN (1L<<SPLINE_FRACBITS)
-
-class CzCUBICSPLINE
-{ public:
- CzCUBICSPLINE( );
- ~CzCUBICSPLINE( );
- static signed short lut[4*(1L<<SPLINE_FRACBITS)];
-};
-
-signed short CzCUBICSPLINE::lut[4*(1L<<SPLINE_FRACBITS)];
-
-CzCUBICSPLINE::CzCUBICSPLINE( )
-{ int _LIi;
- int _LLen = (1L<<SPLINE_FRACBITS);
- float _LFlen = 1.0f / (float)_LLen;
- float _LScale = (float)SPLINE_QUANTSCALE;
- for(_LIi=0;_LIi<_LLen;_LIi++)
- { float _LCm1, _LC0, _LC1, _LC2;
- float _LX = ((float)_LIi)*_LFlen;
- int _LSum,_LIdx = _LIi<<2;
- _LCm1 = (float)floor( 0.5 + _LScale * (-0.5*_LX*_LX*_LX + 1.0 * _LX*_LX - 0.5 * _LX ) );
- _LC0 = (float)floor( 0.5 + _LScale * ( 1.5*_LX*_LX*_LX - 2.5 * _LX*_LX + 1.0 ) );
- _LC1 = (float)floor( 0.5 + _LScale * (-1.5*_LX*_LX*_LX + 2.0 * _LX*_LX + 0.5 * _LX ) );
- _LC2 = (float)floor( 0.5 + _LScale * ( 0.5*_LX*_LX*_LX - 0.5 * _LX*_LX ) );
- lut[_LIdx+0] = (signed short)( (_LCm1 < -_LScale) ? -_LScale : ((_LCm1 > _LScale) ? _LScale : _LCm1) );
- lut[_LIdx+1] = (signed short)( (_LC0 < -_LScale) ? -_LScale : ((_LC0 > _LScale) ? _LScale : _LC0 ) );
- lut[_LIdx+2] = (signed short)( (_LC1 < -_LScale) ? -_LScale : ((_LC1 > _LScale) ? _LScale : _LC1 ) );
- lut[_LIdx+3] = (signed short)( (_LC2 < -_LScale) ? -_LScale : ((_LC2 > _LScale) ? _LScale : _LC2 ) );
-#ifdef SPLINE_CLAMPFORUNITY
- _LSum = lut[_LIdx+0]+lut[_LIdx+1]+lut[_LIdx+2]+lut[_LIdx+3];
- if( _LSum != SPLINE_QUANTSCALE )
- { int _LMax = _LIdx;
- if( lut[_LIdx+1]>lut[_LMax] ) _LMax = _LIdx+1;
- if( lut[_LIdx+2]>lut[_LMax] ) _LMax = _LIdx+2;
- if( lut[_LIdx+3]>lut[_LMax] ) _LMax = _LIdx+3;
- lut[_LMax] += (SPLINE_QUANTSCALE-_LSum);
- }
-#endif
- }
-}
-
-CzCUBICSPLINE::~CzCUBICSPLINE( )
-{ // nothing todo
-}
-
-CzCUBICSPLINE sspline;
-
-/*
- ------------------------------------------------------------------------------------------------
- fir interpolation doc,
- (derived from "an engineer's guide to fir digital filters", n.j. loy)
-
- calculate coefficients for ideal lowpass filter (with cutoff = fc in 0..1 (mapped to 0..nyquist))
- c[-N..N] = (i==0) ? fc : sin(fc*pi*i)/(pi*i)
-
- then apply selected window to coefficients
- c[-N..N] *= w(0..N)
- with n in 2*N and w(n) being a window function (see loy)
-
- then calculate gain and scale filter coefs to have unity gain.
- ------------------------------------------------------------------------------------------------
-*/
-// quantizer scale of window coefs
-#define WFIR_QUANTBITS 15
-#define WFIR_QUANTSCALE (1L<<WFIR_QUANTBITS)
-#define WFIR_8SHIFT (WFIR_QUANTBITS-8)
-#define WFIR_16BITSHIFT (WFIR_QUANTBITS)
-// log2(number)-1 of precalculated taps range is [4..12]
-#define WFIR_FRACBITS 10
-#define WFIR_LUTLEN ((1L<<(WFIR_FRACBITS+1))+1)
-// number of samples in window
-#define WFIR_LOG2WIDTH 3
-#define WFIR_WIDTH (1L<<WFIR_LOG2WIDTH)
-#define WFIR_SMPSPERWING ((WFIR_WIDTH-1)>>1)
-// cutoff (1.0 == pi/2)
-#define WFIR_CUTOFF 0.90f
-// wfir type
-#define WFIR_HANN 0
-#define WFIR_HAMMING 1
-#define WFIR_BLACKMANEXACT 2
-#define WFIR_BLACKMAN3T61 3
-#define WFIR_BLACKMAN3T67 4
-#define WFIR_BLACKMAN4T92 5
-#define WFIR_BLACKMAN4T74 6
-#define WFIR_KAISER4T 7
-#define WFIR_TYPE WFIR_BLACKMANEXACT
-// wfir help
-#ifndef M_zPI
-#define M_zPI 3.1415926535897932384626433832795
-#endif
-#define M_zEPS 1e-8
-#define M_zBESSELEPS 1e-21
-
-class CzWINDOWEDFIR
-{
-public:
- CzWINDOWEDFIR( );
- ~CzWINDOWEDFIR( );
- float coef( int _PCnr, float _POfs, float _PCut, int _PWidth, int _PType ) //float _PPos, float _PFc, int _PLen )
- {
- double _LWidthM1 = _PWidth-1;
- double _LWidthM1Half = 0.5*_LWidthM1;
- double _LPosU = ((double)_PCnr - _POfs);
- double _LPos = _LPosU-_LWidthM1Half;
- double _LPIdl = 2.0*M_zPI/_LWidthM1;
- double _LWc,_LSi;
- if( fabs(_LPos)<M_zEPS ) {
- _LWc = 1.0;
- _LSi = _PCut;
- } else {
- switch( _PType )
- {
- case WFIR_HANN:
- _LWc = 0.50 - 0.50 * cos(_LPIdl*_LPosU);
- break;
- case WFIR_HAMMING:
- _LWc = 0.54 - 0.46 * cos(_LPIdl*_LPosU);
- break;
- case WFIR_BLACKMANEXACT:
- _LWc = 0.42 - 0.50 * cos(_LPIdl*_LPosU) + 0.08 * cos(2.0*_LPIdl*_LPosU);
- break;
- case WFIR_BLACKMAN3T61:
- _LWc = 0.44959 - 0.49364 * cos(_LPIdl*_LPosU) + 0.05677 * cos(2.0*_LPIdl*_LPosU);
- break;
- case WFIR_BLACKMAN3T67:
- _LWc = 0.42323 - 0.49755 * cos(_LPIdl*_LPosU) + 0.07922 * cos(2.0*_LPIdl*_LPosU);
- break;
- case WFIR_BLACKMAN4T92:
- _LWc = 0.35875 - 0.48829 * cos(_LPIdl*_LPosU) + 0.14128 * cos(2.0*_LPIdl*_LPosU) - 0.01168 * cos(3.0*_LPIdl*_LPosU);
- break;
- case WFIR_BLACKMAN4T74:
- _LWc = 0.40217 - 0.49703 * cos(_LPIdl*_LPosU) + 0.09392 * cos(2.0*_LPIdl*_LPosU) - 0.00183 * cos(3.0*_LPIdl*_LPosU);
- break;
- case WFIR_KAISER4T:
- _LWc = 0.40243 - 0.49804 * cos(_LPIdl*_LPosU) + 0.09831 * cos(2.0*_LPIdl*_LPosU) - 0.00122 * cos(3.0*_LPIdl*_LPosU);
- break;
- default:
- _LWc = 1.0;
- break;
- }
- _LPos *= M_zPI;
- _LSi = sin(_PCut*_LPos)/_LPos;
- }
- return (float)(_LWc*_LSi);
- }
- static signed short lut[WFIR_LUTLEN*WFIR_WIDTH];
-};
-
-signed short CzWINDOWEDFIR::lut[WFIR_LUTLEN*WFIR_WIDTH];
-
-CzWINDOWEDFIR::CzWINDOWEDFIR()
-{
- int _LPcl;
- float _LPcllen = (float)(1L<<WFIR_FRACBITS); // number of precalculated lines for 0..1 (-1..0)
- float _LNorm = 1.0f / (float)(2.0f * _LPcllen);
- float _LCut = WFIR_CUTOFF;
- float _LScale = (float)WFIR_QUANTSCALE;
- for( _LPcl=0;_LPcl<WFIR_LUTLEN;_LPcl++ )
- {
- float _LGain,_LCoefs[WFIR_WIDTH];
- float _LOfs = ((float)_LPcl-_LPcllen)*_LNorm;
- int _LCc,_LIdx = _LPcl<<WFIR_LOG2WIDTH;
- for( _LCc=0,_LGain=0.0f;_LCc<WFIR_WIDTH;_LCc++ )
- { _LGain += (_LCoefs[_LCc] = coef( _LCc, _LOfs, _LCut, WFIR_WIDTH, WFIR_TYPE ));
- }
- _LGain = 1.0f/_LGain;
- for( _LCc=0;_LCc<WFIR_WIDTH;_LCc++ )
- { float _LCoef = (float)floor( 0.5 + _LScale*_LCoefs[_LCc]*_LGain );
- lut[_LIdx+_LCc] = (signed short)( (_LCoef<-_LScale)?-_LScale:((_LCoef>_LScale)?_LScale:_LCoef) );
- }
- }
-}
-
-CzWINDOWEDFIR::~CzWINDOWEDFIR()
-{ // nothing todo
-}
-
-CzWINDOWEDFIR sfir;
-
-// ----------------------------------------------------------------------------
-// MIXING MACROS
-// ----------------------------------------------------------------------------
-/////////////////////////////////////////////////////
-// Mixing Macros
-
-#define SNDMIX_BEGINSAMPLELOOP8\
- register MODCHANNEL * const pChn = pChannel;\
- nPos = pChn->nPosLo;\
- const signed char *p = (signed char *)(pChn->pCurrentSample+pChn->nPos);\
- if (pChn->dwFlags & CHN_STEREO) p += pChn->nPos;\
- int *pvol = pbuffer;\
- do {
-
-#define SNDMIX_BEGINSAMPLELOOP16\
- register MODCHANNEL * const pChn = pChannel;\
- nPos = pChn->nPosLo;\
- const signed short *p = (signed short *)(pChn->pCurrentSample+(pChn->nPos*2));\
- if (pChn->dwFlags & CHN_STEREO) p += pChn->nPos;\
- int *pvol = pbuffer;\
- do {
-
-#define SNDMIX_ENDSAMPLELOOP\
- nPos += pChn->nInc;\
- } while (pvol < pbufmax);\
- pChn->nPos += nPos >> 16;\
- pChn->nPosLo = nPos & 0xFFFF;
-
-#define SNDMIX_ENDSAMPLELOOP8 SNDMIX_ENDSAMPLELOOP
-#define SNDMIX_ENDSAMPLELOOP16 SNDMIX_ENDSAMPLELOOP
-
-//////////////////////////////////////////////////////////////////////////////
-// Mono
-
-// No interpolation
-#define SNDMIX_GETMONOVOL8NOIDO\
- int vol = p[nPos >> 16] << 8;
-
-#define SNDMIX_GETMONOVOL16NOIDO\
- int vol = p[nPos >> 16];
-
-// Linear Interpolation
-#define SNDMIX_GETMONOVOL8LINEAR\
- int poshi = nPos >> 16;\
- int poslo = (nPos >> 8) & 0xFF;\
- int srcvol = p[poshi];\
- int destvol = p[poshi+1];\
- int vol = (srcvol<<8) + ((int)(poslo * (destvol - srcvol)));
-
-#define SNDMIX_GETMONOVOL16LINEAR\
- int poshi = nPos >> 16;\
- int poslo = (nPos >> 8) & 0xFF;\
- int srcvol = p[poshi];\
- int destvol = p[poshi+1];\
- int vol = srcvol + ((int)(poslo * (destvol - srcvol)) >> 8);
-
-// spline interpolation (2 guard bits should be enough???)
-#define SPLINE_FRACSHIFT ((16-SPLINE_FRACBITS)-2)
-#define SPLINE_FRACMASK (((1L<<(16-SPLINE_FRACSHIFT))-1)&~3)
-
-#define SNDMIX_GETMONOVOL8SPLINE \
- int poshi = nPos >> 16; \
- int poslo = (nPos >> SPLINE_FRACSHIFT) & SPLINE_FRACMASK; \
- int vol = (CzCUBICSPLINE::lut[poslo ]*(int)p[poshi-1] + \
- CzCUBICSPLINE::lut[poslo+1]*(int)p[poshi ] + \
- CzCUBICSPLINE::lut[poslo+3]*(int)p[poshi+2] + \
- CzCUBICSPLINE::lut[poslo+2]*(int)p[poshi+1]) >> SPLINE_8SHIFT;
-
-#define SNDMIX_GETMONOVOL16SPLINE \
- int poshi = nPos >> 16; \
- int poslo = (nPos >> SPLINE_FRACSHIFT) & SPLINE_FRACMASK; \
- int vol = (CzCUBICSPLINE::lut[poslo ]*(int)p[poshi-1] + \
- CzCUBICSPLINE::lut[poslo+1]*(int)p[poshi ] + \
- CzCUBICSPLINE::lut[poslo+3]*(int)p[poshi+2] + \
- CzCUBICSPLINE::lut[poslo+2]*(int)p[poshi+1]) >> SPLINE_16SHIFT;
-
-
-// fir interpolation
-#define WFIR_FRACSHIFT (16-(WFIR_FRACBITS+1+WFIR_LOG2WIDTH))
-#define WFIR_FRACMASK ((((1L<<(17-WFIR_FRACSHIFT))-1)&~((1L<<WFIR_LOG2WIDTH)-1)))
-#define WFIR_FRACHALVE (1L<<(16-(WFIR_FRACBITS+2)))
-
-#define SNDMIX_GETMONOVOL8FIRFILTER \
- int poshi = nPos >> 16;\
- int poslo = (nPos & 0xFFFF);\
- int firidx = ((poslo+WFIR_FRACHALVE)>>WFIR_FRACSHIFT) & WFIR_FRACMASK; \
- int vol = (CzWINDOWEDFIR::lut[firidx+0]*(int)p[poshi+1-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+1]*(int)p[poshi+2-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+2]*(int)p[poshi+3-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+3]*(int)p[poshi+4-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+4]*(int)p[poshi+5-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+5]*(int)p[poshi+6-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+6]*(int)p[poshi+7-4]); \
- vol += (CzWINDOWEDFIR::lut[firidx+7]*(int)p[poshi+8-4]); \
- vol >>= WFIR_8SHIFT;
-
-#define SNDMIX_GETMONOVOL16FIRFILTER \
- int poshi = nPos >> 16;\
- int poslo = (nPos & 0xFFFF);\
- int firidx = ((poslo+WFIR_FRACHALVE)>>WFIR_FRACSHIFT) & WFIR_FRACMASK; \
- int vol1 = (CzWINDOWEDFIR::lut[firidx+0]*(int)p[poshi+1-4]); \
- vol1 += (CzWINDOWEDFIR::lut[firidx+1]*(int)p[poshi+2-4]); \
- vol1 += (CzWINDOWEDFIR::lut[firidx+2]*(int)p[poshi+3-4]); \
- vol1 += (CzWINDOWEDFIR::lut[firidx+3]*(int)p[poshi+4-4]); \
- int vol2 = (CzWINDOWEDFIR::lut[firidx+4]*(int)p[poshi+5-4]); \
- vol2 += (CzWINDOWEDFIR::lut[firidx+5]*(int)p[poshi+6-4]); \
- vol2 += (CzWINDOWEDFIR::lut[firidx+6]*(int)p[poshi+7-4]); \
- vol2 += (CzWINDOWEDFIR::lut[firidx+7]*(int)p[poshi+8-4]); \
- int vol = ((vol1>>1)+(vol2>>1)) >> (WFIR_16BITSHIFT-1);
-
-/////////////////////////////////////////////////////////////////////////////
-// Stereo
-
-// No interpolation
-#define SNDMIX_GETSTEREOVOL8NOIDO\
- int vol_l = p[(nPos>>16)*2] << 8;\
- int vol_r = p[(nPos>>16)*2+1] << 8;
-
-#define SNDMIX_GETSTEREOVOL16NOIDO\
- int vol_l = p[(nPos>>16)*2];\
- int vol_r = p[(nPos>>16)*2+1];
-
-// Linear Interpolation
-#define SNDMIX_GETSTEREOVOL8LINEAR\
- int poshi = nPos >> 16;\
- int poslo = (nPos >> 8) & 0xFF;\
- int srcvol_l = p[poshi*2];\
- int vol_l = (srcvol_l<<8) + ((int)(poslo * (p[poshi*2+2] - srcvol_l)));\
- int srcvol_r = p[poshi*2+1];\
- int vol_r = (srcvol_r<<8) + ((int)(poslo * (p[poshi*2+3] - srcvol_r)));
-
-#define SNDMIX_GETSTEREOVOL16LINEAR\
- int poshi = nPos >> 16;\
- int poslo = (nPos >> 8) & 0xFF;\
- int srcvol_l = p[poshi*2];\
- int vol_l = srcvol_l + ((int)(poslo * (p[poshi*2+2] - srcvol_l)) >> 8);\
- int srcvol_r = p[poshi*2+1];\
- int vol_r = srcvol_r + ((int)(poslo * (p[poshi*2+3] - srcvol_r)) >> 8);\
-
-// Spline Interpolation
-#define SNDMIX_GETSTEREOVOL8SPLINE \
- int poshi = nPos >> 16; \
- int poslo = (nPos >> SPLINE_FRACSHIFT) & SPLINE_FRACMASK; \
- int vol_l = (CzCUBICSPLINE::lut[poslo ]*(int)p[(poshi-1)*2 ] + \
- CzCUBICSPLINE::lut[poslo+1]*(int)p[(poshi )*2 ] + \
- CzCUBICSPLINE::lut[poslo+2]*(int)p[(poshi+1)*2 ] + \
- CzCUBICSPLINE::lut[poslo+3]*(int)p[(poshi+2)*2 ]) >> SPLINE_8SHIFT; \
- int vol_r = (CzCUBICSPLINE::lut[poslo ]*(int)p[(poshi-1)*2+1] + \
- CzCUBICSPLINE::lut[poslo+1]*(int)p[(poshi )*2+1] + \
- CzCUBICSPLINE::lut[poslo+2]*(int)p[(poshi+1)*2+1] + \
- CzCUBICSPLINE::lut[poslo+3]*(int)p[(poshi+2)*2+1]) >> SPLINE_8SHIFT;
-
-#define SNDMIX_GETSTEREOVOL16SPLINE \
- int poshi = nPos >> 16; \
- int poslo = (nPos >> SPLINE_FRACSHIFT) & SPLINE_FRACMASK; \
- int vol_l = (CzCUBICSPLINE::lut[poslo ]*(int)p[(poshi-1)*2 ] + \
- CzCUBICSPLINE::lut[poslo+1]*(int)p[(poshi )*2 ] + \
- CzCUBICSPLINE::lut[poslo+2]*(int)p[(poshi+1)*2 ] + \
- CzCUBICSPLINE::lut[poslo+3]*(int)p[(poshi+2)*2 ]) >> SPLINE_16SHIFT; \
- int vol_r = (CzCUBICSPLINE::lut[poslo ]*(int)p[(poshi-1)*2+1] + \
- CzCUBICSPLINE::lut[poslo+1]*(int)p[(poshi )*2+1] + \
- CzCUBICSPLINE::lut[poslo+2]*(int)p[(poshi+1)*2+1] + \
- CzCUBICSPLINE::lut[poslo+3]*(int)p[(poshi+2)*2+1]) >> SPLINE_16SHIFT;
-
-// fir interpolation
-#define SNDMIX_GETSTEREOVOL8FIRFILTER \
- int poshi = nPos >> 16;\
- int poslo = (nPos & 0xFFFF);\
- int firidx = ((poslo+WFIR_FRACHALVE)>>WFIR_FRACSHIFT) & WFIR_FRACMASK; \
- int vol_l = (CzWINDOWEDFIR::lut[firidx+0]*(int)p[(poshi+1-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+1]*(int)p[(poshi+2-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+2]*(int)p[(poshi+3-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+3]*(int)p[(poshi+4-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+4]*(int)p[(poshi+5-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+5]*(int)p[(poshi+6-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+6]*(int)p[(poshi+7-4)*2 ]); \
- vol_l += (CzWINDOWEDFIR::lut[firidx+7]*(int)p[(poshi+8-4)*2 ]); \
- vol_l >>= WFIR_8SHIFT; \
- int vol_r = (CzWINDOWEDFIR::lut[firidx+0]*(int)p[(poshi+1-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+1]*(int)p[(poshi+2-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+2]*(int)p[(poshi+3-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+3]*(int)p[(poshi+4-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+4]*(int)p[(poshi+5-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+5]*(int)p[(poshi+6-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+6]*(int)p[(poshi+7-4)*2+1]); \
- vol_r += (CzWINDOWEDFIR::lut[firidx+7]*(int)p[(poshi+8-4)*2+1]); \
- vol_r >>= WFIR_8SHIFT;
-
-#define SNDMIX_GETSTEREOVOL16FIRFILTER \
- int poshi = nPos >> 16;\
- int poslo = (nPos & 0xFFFF);\
- int firidx = ((poslo+WFIR_FRACHALVE)>>WFIR_FRACSHIFT) & WFIR_FRACMASK; \
- int vol1_l = (CzWINDOWEDFIR::lut[firidx+0]*(int)p[(poshi+1-4)*2 ]); \
- vol1_l += (CzWINDOWEDFIR::lut[firidx+1]*(int)p[(poshi+2-4)*2 ]); \
- vol1_l += (CzWINDOWEDFIR::lut[firidx+2]*(int)p[(poshi+3-4)*2 ]); \
- vol1_l += (CzWINDOWEDFIR::lut[firidx+3]*(int)p[(poshi+4-4)*2 ]); \
- int vol2_l = (CzWINDOWEDFIR::lut[firidx+4]*(int)p[(poshi+5-4)*2 ]); \
- vol2_l += (CzWINDOWEDFIR::lut[firidx+5]*(int)p[(poshi+6-4)*2 ]); \
- vol2_l += (CzWINDOWEDFIR::lut[firidx+6]*(int)p[(poshi+7-4)*2 ]); \
- vol2_l += (CzWINDOWEDFIR::lut[firidx+7]*(int)p[(poshi+8-4)*2 ]); \
- int vol_l = ((vol1_l>>1)+(vol2_l>>1)) >> (WFIR_16BITSHIFT-1); \
- int vol1_r = (CzWINDOWEDFIR::lut[firidx+0]*(int)p[(poshi+1-4)*2+1]); \
- vol1_r += (CzWINDOWEDFIR::lut[firidx+1]*(int)p[(poshi+2-4)*2+1]); \
- vol1_r += (CzWINDOWEDFIR::lut[firidx+2]*(int)p[(poshi+3-4)*2+1]); \
- vol1_r += (CzWINDOWEDFIR::lut[firidx+3]*(int)p[(poshi+4-4)*2+1]); \
- int vol2_r = (CzWINDOWEDFIR::lut[firidx+4]*(int)p[(poshi+5-4)*2+1]); \
- vol2_r += (CzWINDOWEDFIR::lut[firidx+5]*(int)p[(poshi+6-4)*2+1]); \
- vol2_r += (CzWINDOWEDFIR::lut[firidx+6]*(int)p[(poshi+7-4)*2+1]); \
- vol2_r += (CzWINDOWEDFIR::lut[firidx+7]*(int)p[(poshi+8-4)*2+1]); \
- int vol_r = ((vol1_r>>1)+(vol2_r>>1)) >> (WFIR_16BITSHIFT-1);
-
-/////////////////////////////////////////////////////////////////////////////
-
-#define SNDMIX_STOREMONOVOL\
- pvol[0] += vol * pChn->nRightVol;\
- pvol[1] += vol * pChn->nLeftVol;\
- pvol += 2;
-
-#define SNDMIX_STORESTEREOVOL\
- pvol[0] += vol_l * pChn->nRightVol;\
- pvol[1] += vol_r * pChn->nLeftVol;\
- pvol += 2;
-
-#define SNDMIX_STOREFASTMONOVOL\
- int v = vol * pChn->nRightVol;\
- pvol[0] += v;\
- pvol[1] += v;\
- pvol += 2;
-
-#define SNDMIX_RAMPMONOVOL\
- nRampLeftVol += pChn->nLeftRamp;\
- nRampRightVol += pChn->nRightRamp;\
- pvol[0] += vol * (nRampRightVol >> VOLUMERAMPPRECISION);\
- pvol[1] += vol * (nRampLeftVol >> VOLUMERAMPPRECISION);\
- pvol += 2;
-
-#define SNDMIX_RAMPFASTMONOVOL\
- nRampRightVol += pChn->nRightRamp;\
- int fastvol = vol * (nRampRightVol >> VOLUMERAMPPRECISION);\
- pvol[0] += fastvol;\
- pvol[1] += fastvol;\
- pvol += 2;
-
-#define SNDMIX_RAMPSTEREOVOL\
- nRampLeftVol += pChn->nLeftRamp;\
- nRampRightVol += pChn->nRightRamp;\
- pvol[0] += vol_l * (nRampRightVol >> VOLUMERAMPPRECISION);\
- pvol[1] += vol_r * (nRampLeftVol >> VOLUMERAMPPRECISION);\
- pvol += 2;
-
-
-///////////////////////////////////////////////////
-// Resonant Filters
-
-// Mono
-#define MIX_BEGIN_FILTER \
- double fy1 = pChannel->nFilter_Y1;\
- double fy2 = pChannel->nFilter_Y2;\
- double ta;
-
-#define MIX_END_FILTER \
- pChannel->nFilter_Y1 = fy1;\
- pChannel->nFilter_Y2 = fy2;
-
-#define SNDMIX_PROCESSFILTER \
-ta = ((double)vol * pChn->nFilter_A0 + fy1 * pChn->nFilter_B0 + fy2 * pChn->nFilter_B1);\
-fy2 = fy1;\
-fy1 = ta;vol=(int)ta;
-
-// Stereo
-#define MIX_BEGIN_STEREO_FILTER \
-double fy1 = pChannel->nFilter_Y1;\
-double fy2 = pChannel->nFilter_Y2;\
-double fy3 = pChannel->nFilter_Y3;\
-double fy4 = pChannel->nFilter_Y4;\
-double ta, tb;
-
-#define MIX_END_STEREO_FILTER \
-pChannel->nFilter_Y1 = fy1;\
-pChannel->nFilter_Y2 = fy2;\
-pChannel->nFilter_Y3 = fy3;\
-pChannel->nFilter_Y4 = fy4;\
-
-#define SNDMIX_PROCESSSTEREOFILTER \
-ta = ((double)vol_l * pChn->nFilter_A0 + fy1 * pChn->nFilter_B0 + fy2 * pChn->nFilter_B1);\
-tb = ((double)vol_r * pChn->nFilter_A0 + fy3 * pChn->nFilter_B0 + fy4 * pChn->nFilter_B1);\
-fy2 = fy1; fy1 = ta;vol_l=(int)ta;\
-fy4 = fy3; fy3 = tb;vol_r=(int)tb;
-
-//////////////////////////////////////////////////////////
-// Interfaces
-
-typedef VOID (MPPASMCALL * LPMIXINTERFACE)(MODCHANNEL *, int *, int *);
-
-#define BEGIN_MIX_INTERFACE(func)\
- VOID MPPASMCALL func(MODCHANNEL *pChannel, int *pbuffer, int *pbufmax)\
- {\
- LONG nPos;
-
-#define END_MIX_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- }
-
-// Volume Ramps
-#define BEGIN_RAMPMIX_INTERFACE(func)\
- BEGIN_MIX_INTERFACE(func)\
- LONG nRampRightVol = pChannel->nRampRightVol;\
- LONG nRampLeftVol = pChannel->nRampLeftVol;
-
-#define END_RAMPMIX_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- pChannel->nRampRightVol = nRampRightVol;\
- pChannel->nRightVol = nRampRightVol >> VOLUMERAMPPRECISION;\
- pChannel->nRampLeftVol = nRampLeftVol;\
- pChannel->nLeftVol = nRampLeftVol >> VOLUMERAMPPRECISION;\
- }
-
-#define BEGIN_FASTRAMPMIX_INTERFACE(func)\
- BEGIN_MIX_INTERFACE(func)\
- LONG nRampRightVol = pChannel->nRampRightVol;
-
-#define END_FASTRAMPMIX_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- pChannel->nRampRightVol = nRampRightVol;\
- pChannel->nRampLeftVol = nRampRightVol;\
- pChannel->nRightVol = nRampRightVol >> VOLUMERAMPPRECISION;\
- pChannel->nLeftVol = pChannel->nRightVol;\
- }
-
-
-// Mono Resonant Filters
-#define BEGIN_MIX_FLT_INTERFACE(func)\
- BEGIN_MIX_INTERFACE(func)\
- MIX_BEGIN_FILTER
-
-
-#define END_MIX_FLT_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- MIX_END_FILTER\
- }
-
-#define BEGIN_RAMPMIX_FLT_INTERFACE(func)\
- BEGIN_MIX_INTERFACE(func)\
- LONG nRampRightVol = pChannel->nRampRightVol;\
- LONG nRampLeftVol = pChannel->nRampLeftVol;\
- MIX_BEGIN_FILTER
-
-#define END_RAMPMIX_FLT_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- MIX_END_FILTER\
- pChannel->nRampRightVol = nRampRightVol;\
- pChannel->nRightVol = nRampRightVol >> VOLUMERAMPPRECISION;\
- pChannel->nRampLeftVol = nRampLeftVol;\
- pChannel->nLeftVol = nRampLeftVol >> VOLUMERAMPPRECISION;\
- }
-
-// Stereo Resonant Filters
-#define BEGIN_MIX_STFLT_INTERFACE(func)\
- BEGIN_MIX_INTERFACE(func)\
- MIX_BEGIN_STEREO_FILTER
-
-
-#define END_MIX_STFLT_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- MIX_END_STEREO_FILTER\
- }
-
-#define BEGIN_RAMPMIX_STFLT_INTERFACE(func)\
- BEGIN_MIX_INTERFACE(func)\
- LONG nRampRightVol = pChannel->nRampRightVol;\
- LONG nRampLeftVol = pChannel->nRampLeftVol;\
- MIX_BEGIN_STEREO_FILTER
-
-#define END_RAMPMIX_STFLT_INTERFACE()\
- SNDMIX_ENDSAMPLELOOP\
- MIX_END_STEREO_FILTER\
- pChannel->nRampRightVol = nRampRightVol;\
- pChannel->nRightVol = nRampRightVol >> VOLUMERAMPPRECISION;\
- pChannel->nRampLeftVol = nRampLeftVol;\
- pChannel->nLeftVol = nRampLeftVol >> VOLUMERAMPPRECISION;\
- }
-
-
-/////////////////////////////////////////////////////
-//
-
-extern void StereoMixToFloat(const int *pSrc, float *pOut1, float *pOut2, UINT nCount, const float _i2fc);
-extern void FloatToStereoMix(const float *pIn1, const float *pIn2, int *pOut, UINT nCount, const float _f2ic);
-extern void MonoMixToFloat(const int *pSrc, float *pOut, UINT nCount, const float _i2fc);
-extern void FloatToMonoMix(const float *pIn, int *pOut, UINT nCount, const float _f2ic);
-
-void InitMixBuffer(int *pBuffer, UINT nSamples);
-void EndChannelOfs(MODCHANNEL *pChannel, int *pBuffer, UINT nSamples);
-void StereoFill(int *pBuffer, UINT nSamples, LPLONG lpROfs, LPLONG lpLOfs);
-
-void StereoMixToFloat(const int *, float *, float *, UINT nCount);
-void FloatToStereoMix(const float *pIn1, const float *pIn2, int *pOut, UINT nCount);
-
-/////////////////////////////////////////////////////
-// Mono samples functions
-
-BEGIN_MIX_INTERFACE(Mono8BitMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8NOIDO
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono16BitMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16NOIDO
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono8BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8LINEAR
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono16BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16LINEAR
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono8BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8SPLINE
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono16BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16SPLINE
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono8BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8FIRFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Mono16BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16FIRFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_INTERFACE()
-
-
-// Volume Ramps
-BEGIN_RAMPMIX_INTERFACE(Mono8BitRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8NOIDO
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono16BitRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16NOIDO
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono8BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8LINEAR
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono16BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16LINEAR
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono8BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8SPLINE
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono16BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16SPLINE
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono8BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8FIRFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Mono16BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16FIRFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_INTERFACE()
-
-
-//////////////////////////////////////////////////////
-// Fast mono mix for leftvol=rightvol (1 less imul)
-
-BEGIN_MIX_INTERFACE(FastMono8BitMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8NOIDO
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono16BitMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16NOIDO
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono8BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8LINEAR
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono16BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16LINEAR
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono8BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8SPLINE
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono16BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16SPLINE
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono8BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8FIRFILTER
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(FastMono16BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16FIRFILTER
- SNDMIX_STOREFASTMONOVOL
-END_MIX_INTERFACE()
-
-
-// Fast Ramps
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono8BitRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8NOIDO
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono16BitRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16NOIDO
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono8BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8LINEAR
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono16BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16LINEAR
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono8BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8SPLINE
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono16BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16SPLINE
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono8BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8FIRFILTER
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-BEGIN_FASTRAMPMIX_INTERFACE(FastMono16BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16FIRFILTER
- SNDMIX_RAMPFASTMONOVOL
-END_FASTRAMPMIX_INTERFACE()
-
-
-//////////////////////////////////////////////////////
-// Stereo samples
-
-BEGIN_MIX_INTERFACE(Stereo8BitMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8NOIDO
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo16BitMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16NOIDO
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo8BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8LINEAR
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo16BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16LINEAR
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo8BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8SPLINE
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo16BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16SPLINE
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo8BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8FIRFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-BEGIN_MIX_INTERFACE(Stereo16BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16FIRFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_INTERFACE()
-
-
-// Volume Ramps
-BEGIN_RAMPMIX_INTERFACE(Stereo8BitRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8NOIDO
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo16BitRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16NOIDO
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo8BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8LINEAR
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo16BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16LINEAR
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo8BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8SPLINE
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo16BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16SPLINE
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo8BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8FIRFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-BEGIN_RAMPMIX_INTERFACE(Stereo16BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16FIRFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_INTERFACE()
-
-
-
-//////////////////////////////////////////////////////
-// Resonant Filter Mix
-
-#ifndef NO_FILTER
-
-// Mono Filter Mix
-BEGIN_MIX_FLT_INTERFACE(FilterMono8BitMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8NOIDO
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono16BitMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16NOIDO
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono8BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8LINEAR
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono16BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16LINEAR
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono8BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8SPLINE
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono16BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16SPLINE
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono8BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8FIRFILTER
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-BEGIN_MIX_FLT_INTERFACE(FilterMono16BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16FIRFILTER
- SNDMIX_PROCESSFILTER
- SNDMIX_STOREMONOVOL
-END_MIX_FLT_INTERFACE()
-
-// Filter + Ramp
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono8BitRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8NOIDO
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono16BitRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16NOIDO
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono8BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8LINEAR
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono16BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16LINEAR
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono8BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8SPLINE
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono16BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16SPLINE
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono8BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETMONOVOL8FIRFILTER
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-BEGIN_RAMPMIX_FLT_INTERFACE(FilterMono16BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETMONOVOL16FIRFILTER
- SNDMIX_PROCESSFILTER
- SNDMIX_RAMPMONOVOL
-END_RAMPMIX_FLT_INTERFACE()
-
-
-// Stereo Filter Mix
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo8BitMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8NOIDO
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo16BitMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16NOIDO
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo8BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8LINEAR
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo16BitLinearMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16LINEAR
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo8BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8SPLINE
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo16BitSplineMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16SPLINE
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo8BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8FIRFILTER
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-BEGIN_MIX_STFLT_INTERFACE(FilterStereo16BitFirFilterMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16FIRFILTER
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_STORESTEREOVOL
-END_MIX_STFLT_INTERFACE()
-
-// Stereo Filter + Ramp
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo8BitRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8NOIDO
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo16BitRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16NOIDO
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo8BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8LINEAR
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo16BitLinearRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16LINEAR
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo8BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8SPLINE
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo16BitSplineRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16SPLINE
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo8BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP8
- SNDMIX_GETSTEREOVOL8FIRFILTER
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-BEGIN_RAMPMIX_STFLT_INTERFACE(FilterStereo16BitFirFilterRampMix)
- SNDMIX_BEGINSAMPLELOOP16
- SNDMIX_GETSTEREOVOL16FIRFILTER
- SNDMIX_PROCESSSTEREOFILTER
- SNDMIX_RAMPSTEREOVOL
-END_RAMPMIX_STFLT_INTERFACE()
-
-
-#else
-// Mono
-#define FilterMono8BitMix Mono8BitMix
-#define FilterMono16BitMix Mono16BitMix
-#define FilterMono8BitLinearMix Mono8BitLinearMix
-#define FilterMono16BitLinearMix Mono16BitLinearMix
-#define FilterMono8BitSplineMix Mono8BitSplineMix
-#define FilterMono16BitSplineMix Mono16BitSplineMix
-#define FilterMono8BitFirFilterMix Mono8BitFirFilterMix
-#define FilterMono16BitFirFilterMix Mono16BitFirFilterMix
-#define FilterMono8BitRampMix Mono8BitRampMix
-#define FilterMono16BitRampMix Mono16BitRampMix
-#define FilterMono8BitLinearRampMix Mono8BitLinearRampMix
-#define FilterMono16BitLinearRampMix Mono16BitLinearRampMix
-#define FilterMono8BitSplineRampMix Mono8BitSplineRampMix
-#define FilterMono16BitSplineRampMix Mono16BitSplineRampMix
-#define FilterMono8BitFirFilterRampMix Mono8BitFirFilterRampMix
-#define FilterMono16BitFirFilterRampMix Mono16BitFirFilterRampMix
-// Stereo
-#define FilterStereo8BitMix Stereo8BitMix
-#define FilterStereo16BitMix Stereo16BitMix
-#define FilterStereo8BitLinearMix Stereo8BitLinearMix
-#define FilterStereo16BitLinearMix Stereo16BitLinearMix
-#define FilterStereo8BitSplineMix Stereo8BitSplineMix
-#define FilterStereo16BitSplineMix Stereo16BitSplineMix
-#define FilterStereo8BitFirFilterMix Stereo8BitFirFilterMix
-#define FilterStereo16BitFirFilterMix Stereo16BitFirFilterMix
-#define FilterStereo8BitRampMix Stereo8BitRampMix
-#define FilterStereo16BitRampMix Stereo16BitRampMix
-#define FilterStereo8BitLinearRampMix Stereo8BitLinearRampMix
-#define FilterStereo16BitLinearRampMix Stereo16BitLinearRampMix
-#define FilterStereo8BitSplineRampMix Stereo8BitSplineRampMix
-#define FilterStereo16BitSplineRampMix Stereo16BitSplineRampMix
-#define FilterStereo8BitFirFilterRampMix Stereo8BitFirFilterRampMix
-#define FilterStereo16BitFirFilterRampMix Stereo16BitFirFilterRampMix
-
-#endif
-
-/////////////////////////////////////////////////////////////////////////////////////
-//
-// Mix function tables
-//
-//
-// Index is as follow:
-// [b1-b0] format (8-bit-mono, 16-bit-mono, 8-bit-stereo, 16-bit-stereo)
-// [b2] ramp
-// [b3] filter
-// [b5-b4] src type
-//
-
-#define MIXNDX_16BIT 0x01
-#define MIXNDX_STEREO 0x02
-#define MIXNDX_RAMP 0x04
-#define MIXNDX_FILTER 0x08
-#define MIXNDX_LINEARSRC 0x10
-#define MIXNDX_SPLINESRC 0x20
-#define MIXNDX_FIRSRC 0x30
-
-const LPMIXINTERFACE gpMixFunctionTable[2*2*16] =
-{
- // No SRC
- Mono8BitMix, Mono16BitMix, Stereo8BitMix, Stereo16BitMix,
- Mono8BitRampMix, Mono16BitRampMix, Stereo8BitRampMix,
- Stereo16BitRampMix,
- // No SRC, Filter
- FilterMono8BitMix, FilterMono16BitMix, FilterStereo8BitMix,
- FilterStereo16BitMix, FilterMono8BitRampMix, FilterMono16BitRampMix,
- FilterStereo8BitRampMix, FilterStereo16BitRampMix,
- // Linear SRC
- Mono8BitLinearMix, Mono16BitLinearMix, Stereo8BitLinearMix,
- Stereo16BitLinearMix, Mono8BitLinearRampMix, Mono16BitLinearRampMix,
- Stereo8BitLinearRampMix,Stereo16BitLinearRampMix,
- // Linear SRC, Filter
- FilterMono8BitLinearMix, FilterMono16BitLinearMix,
- FilterStereo8BitLinearMix, FilterStereo16BitLinearMix,
- FilterMono8BitLinearRampMix, FilterMono16BitLinearRampMix,
- FilterStereo8BitLinearRampMix, FilterStereo16BitLinearRampMix,
-
- // FirFilter SRC
- Mono8BitSplineMix, Mono16BitSplineMix, Stereo8BitSplineMix,
- Stereo16BitSplineMix, Mono8BitSplineRampMix, Mono16BitSplineRampMix,
- Stereo8BitSplineRampMix,Stereo16BitSplineRampMix,
- // Spline SRC, Filter
- FilterMono8BitSplineMix, FilterMono16BitSplineMix,
- FilterStereo8BitSplineMix, FilterStereo16BitSplineMix,
- FilterMono8BitSplineRampMix, FilterMono16BitSplineRampMix,
- FilterStereo8BitSplineRampMix, FilterStereo16BitSplineRampMix,
-
- // FirFilter SRC
- Mono8BitFirFilterMix, Mono16BitFirFilterMix, Stereo8BitFirFilterMix,
- Stereo16BitFirFilterMix, Mono8BitFirFilterRampMix,
- Mono16BitFirFilterRampMix, Stereo8BitFirFilterRampMix,
- Stereo16BitFirFilterRampMix,
- // FirFilter SRC, Filter
- FilterMono8BitFirFilterMix, FilterMono16BitFirFilterMix,
- FilterStereo8BitFirFilterMix, FilterStereo16BitFirFilterMix,
- FilterMono8BitFirFilterRampMix, FilterMono16BitFirFilterRampMix,
- FilterStereo8BitFirFilterRampMix, FilterStereo16BitFirFilterRampMix
-};
-
-const LPMIXINTERFACE gpFastMixFunctionTable[2*2*16] =
-{
- // No SRC
- FastMono8BitMix, FastMono16BitMix, Stereo8BitMix, Stereo16BitMix,
- FastMono8BitRampMix, FastMono16BitRampMix, Stereo8BitRampMix,
- Stereo16BitRampMix,
- // No SRC, Filter
- FilterMono8BitMix, FilterMono16BitMix, FilterStereo8BitMix,
- FilterStereo16BitMix, FilterMono8BitRampMix, FilterMono16BitRampMix,
- FilterStereo8BitRampMix, FilterStereo16BitRampMix,
- // Linear SRC
- FastMono8BitLinearMix, FastMono16BitLinearMix, Stereo8BitLinearMix,
- Stereo16BitLinearMix, FastMono8BitLinearRampMix,
- FastMono16BitLinearRampMix, Stereo8BitLinearRampMix,
- Stereo16BitLinearRampMix,
- // Linear SRC, Filter
- FilterMono8BitLinearMix, FilterMono16BitLinearMix,
- FilterStereo8BitLinearMix, FilterStereo16BitLinearMix,
- FilterMono8BitLinearRampMix, FilterMono16BitLinearRampMix,
- FilterStereo8BitLinearRampMix, FilterStereo16BitLinearRampMix,
-
- // Spline SRC
- Mono8BitSplineMix, Mono16BitSplineMix, Stereo8BitSplineMix,
- Stereo16BitSplineMix, Mono8BitSplineRampMix, Mono16BitSplineRampMix,
- Stereo8BitSplineRampMix, Stereo16BitSplineRampMix,
- // Spline SRC, Filter
- FilterMono8BitSplineMix, FilterMono16BitSplineMix,
- FilterStereo8BitSplineMix, FilterStereo16BitSplineMix,
- FilterMono8BitSplineRampMix, FilterMono16BitSplineRampMix,
- FilterStereo8BitSplineRampMix, FilterStereo16BitSplineRampMix,
-
- // FirFilter SRC
- Mono8BitFirFilterMix, Mono16BitFirFilterMix, Stereo8BitFirFilterMix,
- Stereo16BitFirFilterMix, Mono8BitFirFilterRampMix,
- Mono16BitFirFilterRampMix, Stereo8BitFirFilterRampMix,
- Stereo16BitFirFilterRampMix,
- // FirFilter SRC, Filter
- FilterMono8BitFirFilterMix, FilterMono16BitFirFilterMix,
- FilterStereo8BitFirFilterMix, FilterStereo16BitFirFilterMix,
- FilterMono8BitFirFilterRampMix, FilterMono16BitFirFilterRampMix,
- FilterStereo8BitFirFilterRampMix, FilterStereo16BitFirFilterRampMix,
-};
-
-
-/////////////////////////////////////////////////////////////////////////
-
-static LONG MPPFASTCALL GetSampleCount(MODCHANNEL *pChn, LONG nSamples)
-//---------------------------------------------------------------------
-{
- LONG nLoopStart = (pChn->dwFlags & CHN_LOOP) ? pChn->nLoopStart : 0;
- LONG nInc = pChn->nInc;
-
- if ((nSamples <= 0) || (!nInc) || (!pChn->nLength)) return 0;
- // Under zero ?
- if ((LONG)pChn->nPos < nLoopStart)
- {
- if (nInc < 0)
- {
- // Invert loop for bidi loops
- LONG nDelta = ((nLoopStart - pChn->nPos) << 16) - (pChn->nPosLo & 0xffff);
- pChn->nPos = nLoopStart | (nDelta>>16);
- pChn->nPosLo = nDelta & 0xffff;
- if (((LONG)pChn->nPos < nLoopStart) || (pChn->nPos >= (nLoopStart+pChn->nLength)/2))
- {
- pChn->nPos = nLoopStart; pChn->nPosLo = 0;
- }
- nInc = -nInc;
- pChn->nInc = nInc;
- pChn->dwFlags &= ~(CHN_PINGPONGFLAG); // go forward
- if ((!(pChn->dwFlags & CHN_LOOP)) || (pChn->nPos >= pChn->nLength))
- {
- pChn->nPos = pChn->nLength;
- pChn->nPosLo = 0;
- return 0;
- }
- } else
- {
- // We probably didn't hit the loop end yet (first loop), so we do nothing
- if ((LONG)pChn->nPos < 0) pChn->nPos = 0;
- }
- } else
- // Past the end
- if (pChn->nPos >= pChn->nLength)
- {
- if (!(pChn->dwFlags & CHN_LOOP)) return 0; // not looping -> stop this channel
- if (pChn->dwFlags & CHN_PINGPONGLOOP)
- {
- // Invert loop
- if (nInc > 0)
- {
- nInc = -nInc;
- pChn->nInc = nInc;
- }
- pChn->dwFlags |= CHN_PINGPONGFLAG;
- // adjust loop position
- LONG nDeltaHi = (pChn->nPos - pChn->nLength);
- LONG nDeltaLo = 0x10000 - (pChn->nPosLo & 0xffff);
- pChn->nPos = pChn->nLength - nDeltaHi - (nDeltaLo>>16);
- pChn->nPosLo = nDeltaLo & 0xffff;
- if ((pChn->nPos <= pChn->nLoopStart) || (pChn->nPos >= pChn->nLength)) pChn->nPos = pChn->nLength-1;
- } else
- {
- if (nInc < 0) // This is a bug
- {
- nInc = -nInc;
- pChn->nInc = nInc;
- }
- // Restart at loop start
- pChn->nPos += nLoopStart - pChn->nLength;
- if ((LONG)pChn->nPos < nLoopStart) pChn->nPos = pChn->nLoopStart;
- }
- }
- LONG nPos = pChn->nPos;
- // too big increment, and/or too small loop length
- if (nPos < nLoopStart)
- {
- if ((nPos < 0) || (nInc < 0)) return 0;
- }
- if ((nPos < 0) || (nPos >= (LONG)pChn->nLength)) return 0;
- LONG nPosLo = (USHORT)pChn->nPosLo, nSmpCount = nSamples;
- if (nInc < 0)
- {
- LONG nInv = -nInc;
- LONG maxsamples = 16384 / ((nInv>>16)+1);
- if (maxsamples < 2) maxsamples = 2;
- if (nSamples > maxsamples) nSamples = maxsamples;
- LONG nDeltaHi = (nInv>>16) * (nSamples - 1);
- LONG nDeltaLo = (nInv&0xffff) * (nSamples - 1);
- LONG nPosDest = nPos - nDeltaHi + ((nPosLo - nDeltaLo) >> 16);
- if (nPosDest < nLoopStart)
- {
- nSmpCount = (ULONG)(((((LONGLONG)nPos - nLoopStart) << 16) + nPosLo - 1) / nInv) + 1;
- }
- } else
- {
- LONG maxsamples = 16384 / ((nInc>>16)+1);
- if (maxsamples < 2) maxsamples = 2;
- if (nSamples > maxsamples) nSamples = maxsamples;
- LONG nDeltaHi = (nInc>>16) * (nSamples - 1);
- LONG nDeltaLo = (nInc&0xffff) * (nSamples - 1);
- LONG nPosDest = nPos + nDeltaHi + ((nPosLo + nDeltaLo)>>16);
- if (nPosDest >= (LONG)pChn->nLength)
- {
- nSmpCount = (ULONG)(((((LONGLONG)pChn->nLength - nPos) << 16) - nPosLo - 1) / nInc) + 1;
- }
- }
- if (nSmpCount <= 1) return 1;
- if (nSmpCount > nSamples) return nSamples;
- return nSmpCount;
-}
-
-
-UINT CSoundFile::CreateStereoMix(int count)
-//-----------------------------------------
-{
- LPLONG pOfsL, pOfsR;
- DWORD nchused, nchmixed;
-
- if (!count) return 0;
- if (gnChannels > 2) InitMixBuffer(MixRearBuffer, count*2);
- nchused = nchmixed = 0;
- for (UINT nChn=0; nChn<m_nMixChannels; nChn++)
- {
- const LPMIXINTERFACE *pMixFuncTable;
- MODCHANNEL * const pChannel = &Chn[ChnMix[nChn]];
- UINT nFlags, nMasterCh;
- LONG nSmpCount;
- int nsamples;
- int *pbuffer;
-
- if (!pChannel->pCurrentSample) continue;
- nMasterCh = (ChnMix[nChn] < m_nChannels) ? ChnMix[nChn]+1 : pChannel->nMasterChn;
- pOfsR = &gnDryROfsVol;
- pOfsL = &gnDryLOfsVol;
- nFlags = 0;
- if (pChannel->dwFlags & CHN_16BIT) nFlags |= MIXNDX_16BIT;
- if (pChannel->dwFlags & CHN_STEREO) nFlags |= MIXNDX_STEREO;
- #ifndef NO_FILTER
- if (pChannel->dwFlags & CHN_FILTER) nFlags |= MIXNDX_FILTER;
- #endif
- if (!(pChannel->dwFlags & CHN_NOIDO)
- && !(gdwSoundSetup & SNDMIX_NORESAMPLING))
- {
- // use hq-fir mixer?
- if( (gdwSoundSetup & (SNDMIX_HQRESAMPLER|SNDMIX_ULTRAHQSRCMODE)) == (SNDMIX_HQRESAMPLER|SNDMIX_ULTRAHQSRCMODE) )
- nFlags |= MIXNDX_FIRSRC;
- else if( (gdwSoundSetup & SNDMIX_HQRESAMPLER))
- nFlags |= MIXNDX_SPLINESRC;
- else
- nFlags |= MIXNDX_LINEARSRC; // use
- }
- if ((nFlags < 0x40) && (pChannel->nLeftVol == pChannel->nRightVol)
- && ((!pChannel->nRampLength) || (pChannel->nLeftRamp == pChannel->nRightRamp)))
- {
- pMixFuncTable = gpFastMixFunctionTable;
- } else
- {
- pMixFuncTable = gpMixFunctionTable;
- }
- nsamples = count;
-#ifndef MODPLUG_NO_REVERB
- pbuffer = (gdwSoundSetup & SNDMIX_REVERB) ? MixReverbBuffer : MixSoundBuffer;
- if (pChannel->dwFlags & CHN_NOREVERB) pbuffer = MixSoundBuffer;
- if (pChannel->dwFlags & CHN_REVERB) pbuffer = MixReverbBuffer;
- if (pbuffer == MixReverbBuffer)
- {
- if (!gnReverbSend) memset(MixReverbBuffer, 0, count * 8);
- gnReverbSend += count;
- }
-#else
- pbuffer = MixSoundBuffer;
-#endif
- nchused++;
- ////////////////////////////////////////////////////
- SampleLooping:
- UINT nrampsamples = nsamples;
- if (pChannel->nRampLength > 0)
- {
- if ((LONG)nrampsamples > pChannel->nRampLength) nrampsamples = pChannel->nRampLength;
- }
- if ((nSmpCount = GetSampleCount(pChannel, nrampsamples)) <= 0)
- {
- // Stopping the channel
- pChannel->pCurrentSample = NULL;
- pChannel->nLength = 0;
- pChannel->nPos = 0;
- pChannel->nPosLo = 0;
- pChannel->nRampLength = 0;
- EndChannelOfs(pChannel, pbuffer, nsamples);
- *pOfsR += pChannel->nROfs;
- *pOfsL += pChannel->nLOfs;
- pChannel->nROfs = pChannel->nLOfs = 0;
- pChannel->dwFlags &= ~CHN_PINGPONGFLAG;
- continue;
- }
- // Should we mix this channel ?
- UINT naddmix;
- if (((nchmixed >= m_nMaxMixChannels) && (!(gdwSoundSetup & SNDMIX_DIRECTTODISK)))
- || ((!pChannel->nRampLength) && (!(pChannel->nLeftVol|pChannel->nRightVol))))
- {
- LONG delta = (pChannel->nInc * (LONG)nSmpCount) + (LONG)pChannel->nPosLo;
- pChannel->nPosLo = delta & 0xFFFF;
- pChannel->nPos += (delta >> 16);
- pChannel->nROfs = pChannel->nLOfs = 0;
- pbuffer += nSmpCount*2;
- naddmix = 0;
- } else
- // Do mixing
- {
- if (pChannel->nLength) {
- pChannel->topnote_offset = ((pChannel->nPos << 16) | pChannel->nPosLo) % pChannel->nLength;
- }
-
- // Choose function for mixing
- LPMIXINTERFACE pMixFunc;
- pMixFunc = (pChannel->nRampLength) ? pMixFuncTable[nFlags|MIXNDX_RAMP] : pMixFuncTable[nFlags];
- int *pbufmax = pbuffer + (nSmpCount*2);
- pChannel->nROfs = - *(pbufmax-2);
- pChannel->nLOfs = - *(pbufmax-1);
- pMixFunc(pChannel, pbuffer, pbufmax);
- pChannel->nROfs += *(pbufmax-2);
- pChannel->nLOfs += *(pbufmax-1);
- pbuffer = pbufmax;
- naddmix = 1;
-
- }
- nsamples -= nSmpCount;
- if (pChannel->nRampLength)
- {
- pChannel->nRampLength -= nSmpCount;
- if (pChannel->nRampLength <= 0)
- {
- pChannel->nRampLength = 0;
- pChannel->nRightVol = pChannel->nNewRightVol;
- pChannel->nLeftVol = pChannel->nNewLeftVol;
- pChannel->nRightRamp = pChannel->nLeftRamp = 0;
- if ((pChannel->dwFlags & CHN_NOTEFADE) && (!(pChannel->nFadeOutVol)))
- {
- pChannel->nLength = 0;
- pChannel->pCurrentSample = NULL;
- }
- }
- }
- if (nsamples > 0) goto SampleLooping;
- nchmixed += naddmix;
- }
- return nchused;
-}
-
-static float f2ic = (float)(1 << 28);
-static float i2fc = (float)(1.0 / (1 << 28));
-
-VOID CSoundFile::StereoMixToFloat(const int *pSrc, float *pOut1, float *pOut2, UINT nCount)
-//-----------------------------------------------------------------------------------------
-{
- for (UINT i = 0; i < nCount; i++) {
- *pOut1++ = *pSrc * i2fc; /*!*/
- pSrc++;
-
- *pOut2++ = *pSrc * i2fc; /*!*/
- pSrc++;
- }
-}
-
-
-VOID CSoundFile::FloatToStereoMix(const float *pIn1, const float *pIn2, int *pOut, UINT nCount)
-//---------------------------------------------------------------------------------------------
-{
- for (UINT i = 0; i < nCount; i++) {
- *pOut++ = (int)(*pIn1 * f2ic);
- *pOut++ = (int)(*pIn2 * f2ic);
- pIn1++;
- pIn2++;
- }
-}
-
-
-VOID CSoundFile::MonoMixToFloat(const int *pSrc, float *pOut, UINT nCount)
-//------------------------------------------------------------------------
-{
- for (UINT i = 0; i < nCount; i++) {
- *pOut++ = *pSrc * i2fc; /*!*/
- pSrc++;
- }
-}
-
-
-VOID CSoundFile::FloatToMonoMix(const float *pIn, int *pOut, UINT nCount)
-//-----------------------------------------------------------------------
-{
- for (UINT i = 0; i < nCount; i++) {
- *pOut++ = (int)(*pIn * f2ic); /*!*/
- pIn++;
- }
-}
-
-
-// Clip and convert to 8 bit
-//---GCCFIX: Asm replaced with C function
-// The C version was written by Rani Assaf <rani@magic.metawire.com>, I believe
-DWORD Convert32To8(LPVOID lp8, int *pBuffer, DWORD lSampleCount, LONG mins[2], LONG maxs[2])
-{
- unsigned char *p = (unsigned char *)lp8;
- for (UINT i=0; i<lSampleCount; i++)
- {
- int n = pBuffer[i];
- if (n < MIXING_CLIPMIN)
- n = MIXING_CLIPMIN;
- else if (n > MIXING_CLIPMAX)
- n = MIXING_CLIPMAX;
- if (n < mins[i&1])
- mins[i&1]= n;
- else if (n > maxs[i&1])
- maxs[i&1] = n;
- p[i] = (n >> (24-MIXING_ATTENUATION)) ^ 0x80; // 8-bit unsigned
- }
- return lSampleCount;
-}
-//---GCCFIX: Asm replaced with C function
-// The C version was written by Rani Assaf <rani@magic.metawire.com>, I believe
-DWORD Convert32To16(LPVOID lp16, int *pBuffer, DWORD lSampleCount, LONG mins[2], LONG maxs[2])
-{
- signed short *p = (signed short *)lp16;
- for (UINT i=0; i<lSampleCount; i++)
- {
- int n = pBuffer[i];
- if (n < MIXING_CLIPMIN)
- n = MIXING_CLIPMIN;
- else if (n > MIXING_CLIPMAX)
- n = MIXING_CLIPMAX;
- if (n < mins[i&1])
- mins[i&1]= n;
- else if (n > maxs[i&1])
- maxs[i&1] = n;
- p[i] = n >> (16-MIXING_ATTENUATION); // 16-bit signed
- }
- return lSampleCount * 2;
-}
-//---GCCFIX: Asm replaced with C function
-// 24-bit might not work...
-DWORD Convert32To24(LPVOID lp24, int *pBuffer, DWORD lSampleCount, LONG mins[2], LONG maxs[2])
-{
- /* the inventor of 24bit anything should be shot */
- unsigned char *p = (unsigned char *)lp24;
- for (UINT i=0; i<lSampleCount; i++)
- {
- int n = pBuffer[i];
- if (n < MIXING_CLIPMIN)
- n = MIXING_CLIPMIN;
- else if (n > MIXING_CLIPMAX)
- n = MIXING_CLIPMAX;
- if (n < mins[i&1])
- mins[i&1]= n;
- else if (n > maxs[i&1])
- maxs[i&1] = n;
- n = n >> (8-MIXING_ATTENUATION); // 24-bit signed
- /* err, assume same endian */
- memcpy(p, &n, 3);
- p += 3;
- }
- return lSampleCount * 2;
-}
-//---GCCFIX: Asm replaced with C function
-// 32-bit might not work...
-DWORD Convert32To32(LPVOID lp32, int *pBuffer, DWORD lSampleCount, LONG mins[2], LONG maxs[2])
-{
- signed int *p = (signed int *)lp32;
- for (UINT i=0; i<lSampleCount; i++)
- {
- int n = pBuffer[i];
- if (n < MIXING_CLIPMIN)
- n = MIXING_CLIPMIN;
- else if (n > MIXING_CLIPMAX)
- n = MIXING_CLIPMAX;
- if (n < mins[i&1])
- mins[i&1]= n;
- else if (n > maxs[i&1])
- maxs[i&1] = n;
- p[i] = (n >> MIXING_ATTENUATION); // 32-bit signed
- }
- return lSampleCount * 2;
-}
-//---GCCFIX: Asm replaced with C function
-// Will fill in later.
-void InitMixBuffer(int *pBuffer, UINT nSamples)
-{
- memset(pBuffer, 0, nSamples * sizeof(int));
-}
-
-//---GCCFIX: Asm replaced with C function
-void InterleaveFrontRear(int *pFrontBuf, int *pRearBuf, DWORD nSamples)
-{
- DWORD i=0;
-
- pRearBuf[i] = pFrontBuf[1];
- for (i = 1; i < nSamples; i++) {
- pRearBuf[i] = pFrontBuf[(i*2)+1];
- pFrontBuf[i] = pFrontBuf[i*2];
- }
-}
-//---GCCFIX: Asm replaced with C function
-VOID MonoFromStereo(int *pMixBuf, UINT nSamples)
-{
- UINT j;
- for(UINT i = 0; i < nSamples; i++)
- {
- j = i << 1;
- pMixBuf[i] = (pMixBuf[j] + pMixBuf[j + 1]) >> 1;
- }
-}
-
-//---GCCFIX: Asm replaced with C function
-#define OFSDECAYSHIFT 8
-#define OFSDECAYMASK 0xFF
-void StereoFill(int *pBuffer, UINT nSamples, LPLONG lpROfs, LPLONG lpLOfs)
-//---------------------------------------------------------------------------------------------------------
-{
- int rofs = *lpROfs;
- int lofs = *lpLOfs;
-
- if ((!rofs) && (!lofs))
- {
- InitMixBuffer(pBuffer, nSamples*2);
- return;
- }
- for (UINT i=0; i<nSamples; i++)
- {
- int x_r = (rofs + (((-rofs)>>31) & OFSDECAYMASK)) >> OFSDECAYSHIFT;
- int x_l = (lofs + (((-lofs)>>31) & OFSDECAYMASK)) >> OFSDECAYSHIFT;
- rofs -= x_r;
- lofs -= x_l;
- pBuffer[i*2] = x_r;
- pBuffer[i*2+1] = x_l;
- }
- *lpROfs = rofs;
- *lpLOfs = lofs;
-}
-//---GCCFIX: Asm replaced with C function
-// Will fill in later.
-void EndChannelOfs(MODCHANNEL *pChannel, int *pBuffer, UINT nSamples)
-{
- int rofs = pChannel->nROfs;
- int lofs = pChannel->nLOfs;
-
- if ((!rofs) && (!lofs)) return;
- for (UINT i=0; i<nSamples; i++)
- {
- int x_r = (rofs + (((-rofs)>>31) & OFSDECAYMASK)) >> OFSDECAYSHIFT;
- int x_l = (lofs + (((-lofs)>>31) & OFSDECAYMASK)) >> OFSDECAYSHIFT;
- rofs -= x_r;
- lofs -= x_l;
- pBuffer[i*2] += x_r;
- pBuffer[i*2+1] += x_l;
- }
- pChannel->nROfs = rofs;
- pChannel->nLOfs = lofs;
-}
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////////////
-// Automatic Gain Control
-
-#ifndef NO_AGC
-
-// Limiter
-#define MIXING_LIMITMAX (0x08100000)
-#define MIXING_LIMITMIN (-MIXING_LIMITMAX)
-
-void CSoundFile::ProcessAGC(int count)
-//------------------------------------
-{
- static DWORD gAGCRecoverCount = 0;
- UINT agc = AGC(MixSoundBuffer, count, gnAGC);
- // Some kind custom law, so that the AGC stays quite stable, but slowly
- // goes back up if the sound level stays below a level inversely proportional
- // to the AGC level. (J'me comprends)
- if ((agc >= gnAGC) && (gnAGC < AGC_UNITY) && (gnVUMeter < (0xFF - (gnAGC >> (AGC_PRECISION-7))) ))
- {
- gAGCRecoverCount += count;
- UINT agctimeout = gdwMixingFreq + gnAGC;
- if (gnChannels >= 2) agctimeout <<= 1;
- if (gAGCRecoverCount >= agctimeout)
- {
- gAGCRecoverCount = 0;
- gnAGC++;
- }
- } else
- {
- gnAGC = agc;
- gAGCRecoverCount = 0;
- }
-}
-
-
-
-void CSoundFile::ResetAGC()
-//-------------------------
-{
- gnAGC = AGC_UNITY;
-}
-
-#endif // NO_AGC
-
diff --git a/src/modplug/gui/callbacks.cxx b/src/modplug/gui/callbacks.cxx
deleted file mode 100644
index cd1ddc9..0000000
--- a/src/modplug/gui/callbacks.cxx
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <config.h>
-
-#include <gtk/gtk.h>
-#include <iostream>
-
-#include "callbacks.h"
-#include "interface.h"
-#include "support.h"
-
-#include "../modplugbmp.h"
-
-
-gboolean
-hide_window (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
-{
- gtk_widget_hide(widget);
- return TRUE;
-}
-
-
-void
-on_config_apply_clicked (GtkButton *button,
- gpointer user_data)
-{
- ModplugXMMS::Settings lProps;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "bit8")))
- lProps.mBits = 8;
- else
- lProps.mBits = 16;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "samp22")))
- lProps.mFrequency = 22050;
- else if (gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "samp44")))
- lProps.mFrequency = 44100;
- else if (gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "samp96")))
- lProps.mFrequency = 96000;
- else
- lProps.mFrequency = 48000;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "resampNearest")))
- lProps.mResamplingMode = 0;
- else if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "resampLinear")))
- lProps.mResamplingMode = 1;
- else if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "resampSpline")))
- lProps.mResamplingMode = 2;
- else
- lProps.mResamplingMode = 3;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "mono")))
- lProps.mChannels = 1;
- else
- lProps.mChannels = 2;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxNR")))
- lProps.mNoiseReduction = true;
- else
- lProps.mNoiseReduction = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxAmigaMOD")))
- lProps.mGrabAmigaMOD = true;
- else
- lProps.mGrabAmigaMOD = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxFastInfo")))
- lProps.mFastinfo = true;
- else
- lProps.mFastinfo = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxUseFilename")))
- lProps.mUseFilename = true;
- else
- lProps.mUseFilename = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxReverb")))
- lProps.mReverb = true;
- else
- lProps.mReverb = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxBassBoost")))
- lProps.mMegabass = true;
- else
- lProps.mMegabass = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxSurround")))
- lProps.mSurround = true;
- else
- lProps.mSurround = false;
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxPreamp")))
- lProps.mPreamp = true;
- else
- lProps.mPreamp = false;
-
- if(gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxLoopForever")))
- lProps.mLoopCount = -1;
- else if (gtk_toggle_button_get_active((GtkToggleButton*)lookup_widget((GtkWidget*)button, "fxLoopFinite")))
- {
- lProps.mLoopCount =
- (uint32)gtk_spin_button_get_adjustment(
- (GtkSpinButton*)lookup_widget((GtkWidget*)button, "fxLoopCount"))->value;
- }
- else
- lProps.mLoopCount = 0;
-
- //hmm... GTK objects have un-protected data members? That's not good...
- lProps.mReverbDepth =
- (uint32)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxReverbDepth"))->value;
- lProps.mReverbDelay =
- (uint32)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxReverbDelay"))->value;
- lProps.mBassAmount =
- (uint32)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxBassAmount"))->value;
- lProps.mBassRange =
- (uint32)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxBassRange"))->value;
- lProps.mSurroundDepth =
- (uint32)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxSurroundDepth"))->value;
- lProps.mSurroundDelay =
- (uint32)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxSurroundDelay"))->value;
- lProps.mPreampLevel =
- (float)gtk_range_get_adjustment((GtkRange*)lookup_widget((GtkWidget*)button, "fxPreampLevel"))->value;
-
- gModplugXMMS.SetModProps(lProps);
-}
-
-
-void
-on_config_ok_clicked (GtkButton *button,
- gpointer user_data)
-{
- GtkWidget* lConfigWindow;
-
- on_config_apply_clicked(button, user_data);
-
- lConfigWindow = lookup_widget((GtkWidget*)button, "Config");
- if(!lConfigWindow)
- cerr << "ModPlug: on_config_ok_clicked: Could not find config window!" << endl;
- else
- gtk_widget_hide(lConfigWindow);
-}
-
-
-void
-on_config_cancel_clicked (GtkButton *button,
- gpointer user_data)
-{
- GtkWidget* lConfigWindow;
-
- lConfigWindow = lookup_widget((GtkWidget*)button, "Config");
- if(!lConfigWindow)
- cerr << "ModPlug: on_config_ok_clicked: Could not find config window!" << endl;
- else
- gtk_widget_hide(lConfigWindow);
-}
-
-
-void
-on_info_close_clicked (GtkButton *button,
- gpointer user_data)
-{
- GtkWidget* lInfoWindow;
-
- lInfoWindow = lookup_widget((GtkWidget*)button, "Info");
- if(!lInfoWindow)
- cerr << "ModPlug: on_info_close_clicked: Could not find info window!" << endl;
- else
- gtk_widget_hide(lInfoWindow);
-}
diff --git a/src/modplug/gui/callbacks.h b/src/modplug/gui/callbacks.h
deleted file mode 100644
index f833633..0000000
--- a/src/modplug/gui/callbacks.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <gtk/gtk.h>
-
-
-gboolean
-hide_window (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-
-void
-on_config_ok_clicked (GtkButton *button,
- gpointer user_data);
-
-void
-on_config_apply_clicked (GtkButton *button,
- gpointer user_data);
-
-void
-on_config_cancel_clicked (GtkButton *button,
- gpointer user_data);
-
-void
-on_info_close_clicked (GtkButton *button,
- gpointer user_data);
diff --git a/src/modplug/gui/interface.cxx b/src/modplug/gui/interface.cxx
deleted file mode 100644
index 75558fb..0000000
--- a/src/modplug/gui/interface.cxx
+++ /dev/null
@@ -1,1009 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include "callbacks.h"
-#include "interface.h"
-#include "support.h"
-
-#define GLADE_HOOKUP_OBJECT(component,widget,name) \
- g_object_set_data_full (G_OBJECT (component), name, \
- g_object_ref (widget), (GDestroyNotify) g_object_unref)
-
-#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
- g_object_set_data (G_OBJECT (component), name, widget)
-
-GtkWidget*
-create_Config (void)
-{
- GtkWidget *Config;
- GtkWidget *vbox2;
- GtkWidget *notebook1;
- GtkWidget *vbox3;
- GtkWidget *hbox2;
- GtkWidget *frame1;
- GtkWidget *vbox4;
- GtkWidget *bit16;
- GSList *bit16_group = NULL;
- GtkWidget *bit8;
- GtkWidget *xlabel2;
- GtkWidget *frame2;
- GtkWidget *vbox5;
- GtkWidget *stereo;
- GSList *stereo_group = NULL;
- GtkWidget *mono;
- GtkWidget *label3;
- GtkWidget *hbox14;
- GtkWidget *frame9;
- GtkWidget *vbox15;
- GtkWidget *resampNearest;
- GSList *resampNearest_group = NULL;
- GtkWidget *resampLinear;
- GtkWidget *resampSpline;
- GtkWidget *resampPolyphase;
- GtkWidget *label4;
- GtkWidget *frame3;
- GtkWidget *vbox6;
- GtkWidget *samp96;
- GSList *samp96_group = NULL;
- GtkWidget *samp48;
- GtkWidget *samp44;
- GtkWidget *samp22;
- GtkWidget *label5;
- GtkWidget *label2;
- GtkWidget *vbox7;
- GtkWidget *hbox15;
- GtkWidget *frame5;
- GtkWidget *vbox20;
- GtkWidget *fxReverb;
- GtkWidget *table1;
- GtkWidget *fxReverbDepth;
- GtkWidget *fxReverbDelay;
- GtkWidget *xlabel3;
- GtkWidget *xlabel4;
- GtkWidget *label6;
- GtkWidget *frame6;
- GtkWidget *vbox21;
- GtkWidget *fxBassBoost;
- GtkWidget *table2;
- GtkWidget *fxBassAmount;
- GtkWidget *fxBassRange;
- GtkWidget *xlabel5;
- GtkWidget *xlabel6;
- GtkWidget *label7;
- GtkWidget *hbox16;
- GtkWidget *frame7;
- GtkWidget *vbox22;
- GtkWidget *fxSurround;
- GtkWidget *table3;
- GtkWidget *fxSurroundDepth;
- GtkWidget *fxSurroundDelay;
- GtkWidget *xlabel7;
- GtkWidget *label8;
- GtkWidget *xlabel8;
- GtkWidget *frame10;
- GtkWidget *vbox16;
- GtkWidget *fxPreamp;
- GtkWidget *hbox11;
- GtkWidget *label19;
- GtkWidget *fxPreampLevel;
- GtkWidget *label20;
- GtkWidget *label9;
- GtkWidget *label10;
- GtkWidget *vbox19;
- GtkWidget *frame4;
- GtkWidget *hbox3;
- GtkWidget *vbox8;
- GtkWidget *fxUseFilename;
- GtkWidget *fxFastInfo;
- GtkWidget *vbox9;
- GtkWidget *fxNR;
- GtkWidget *fxAmigaMOD;
- GtkWidget *label21;
- GtkWidget *frame11;
- GtkWidget *vbox17;
- GtkWidget *fxNoLoop;
- GSList *fxNoLoop_group = NULL;
- GtkWidget *hbox13;
- GtkWidget *fxLoopFinite;
- GtkObject *fxLoopCount_adj;
- GtkWidget *fxLoopCount;
- GtkWidget *xlabel21;
- GtkWidget *fxLoopForever;
- GtkWidget *label22;
- GtkWidget *xlabel22;
- GtkWidget *hbuttonbox2;
- GtkWidget *config_ok;
- GtkWidget *config_apply;
- GtkWidget *config_cancel;
-
- Config = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(Config), GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_widget_set_name (Config, "Config");
- gtk_widget_set_size_request (Config, 500, -1);
- gtk_window_set_title (GTK_WINDOW (Config), _("ModPlug Configuration"));
- gtk_window_set_resizable (GTK_WINDOW (Config), FALSE);
-
- vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox2, "vbox2");
- gtk_widget_show (vbox2);
- gtk_container_add (GTK_CONTAINER (Config), vbox2);
-
- notebook1 = gtk_notebook_new ();
- gtk_widget_set_name (notebook1, "notebook1");
- gtk_widget_show (notebook1);
- gtk_box_pack_start (GTK_BOX (vbox2), notebook1, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (notebook1), 4);
-
- vbox3 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox3, "vbox3");
- gtk_widget_show (vbox3);
- gtk_container_add (GTK_CONTAINER (notebook1), vbox3);
- gtk_container_set_border_width (GTK_CONTAINER (vbox3), 2);
-
- hbox2 = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (hbox2, "hbox2");
- gtk_widget_show (hbox2);
- gtk_box_pack_start (GTK_BOX (vbox3), hbox2, FALSE, TRUE, 0);
-
- frame1 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame1, "frame1");
- gtk_widget_show (frame1);
- gtk_box_pack_start (GTK_BOX (hbox2), frame1, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame1), 2);
-
- vbox4 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox4, "vbox4");
- gtk_widget_show (vbox4);
- gtk_container_add (GTK_CONTAINER (frame1), vbox4);
- gtk_container_set_border_width (GTK_CONTAINER (vbox4), 2);
-
- bit16 = gtk_radio_button_new_with_mnemonic (NULL, _("16 bit"));
- gtk_widget_set_name (bit16, "bit16");
- gtk_widget_show (bit16);
- gtk_box_pack_start (GTK_BOX (vbox4), bit16, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (bit16), bit16_group);
- bit16_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (bit16));
-
- bit8 = gtk_radio_button_new_with_mnemonic (NULL, _("8 bit"));
- gtk_widget_set_name (bit8, "bit8");
- gtk_widget_show (bit8);
- gtk_box_pack_start (GTK_BOX (vbox4), bit8, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (bit8), bit16_group);
- bit16_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (bit8));
-
- xlabel2 = gtk_label_new (_("Resolution"));
- gtk_widget_set_name (xlabel2, "xlabel2");
- gtk_widget_show (xlabel2);
- gtk_frame_set_label_widget (GTK_FRAME (frame1), xlabel2);
-
- frame2 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame2, "frame2");
- gtk_widget_show (frame2);
- gtk_box_pack_start (GTK_BOX (hbox2), frame2, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame2), 2);
-
- vbox5 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox5, "vbox5");
- gtk_widget_show (vbox5);
- gtk_container_add (GTK_CONTAINER (frame2), vbox5);
- gtk_container_set_border_width (GTK_CONTAINER (vbox5), 2);
-
- stereo = gtk_radio_button_new_with_mnemonic (NULL, _("Stereo"));
- gtk_widget_set_name (stereo, "stereo");
- gtk_widget_show (stereo);
- gtk_box_pack_start (GTK_BOX (vbox5), stereo, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (stereo), stereo_group);
- stereo_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (stereo));
-
- mono = gtk_radio_button_new_with_mnemonic (NULL, _("Mono (downmix)"));
- gtk_widget_set_name (mono, "mono");
- gtk_widget_show (mono);
- gtk_box_pack_start (GTK_BOX (vbox5), mono, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (mono), stereo_group);
- stereo_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (mono));
-
- label3 = gtk_label_new (_("Channels"));
- gtk_widget_set_name (label3, "label3");
- gtk_widget_show (label3);
- gtk_frame_set_label_widget (GTK_FRAME (frame2), label3);
-
- hbox14 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox14, "hbox14");
- gtk_widget_show (hbox14);
- gtk_box_pack_start (GTK_BOX (vbox3), hbox14, FALSE, TRUE, 0);
-
- frame9 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame9, "frame9");
- gtk_widget_show (frame9);
- gtk_box_pack_start (GTK_BOX (hbox14), frame9, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame9), 2);
-
- vbox15 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox15, "vbox15");
- gtk_widget_show (vbox15);
- gtk_container_add (GTK_CONTAINER (frame9), vbox15);
- gtk_container_set_border_width (GTK_CONTAINER (vbox15), 2);
-
- resampNearest = gtk_radio_button_new_with_mnemonic (NULL, _("Nearest (fastest)"));
- gtk_widget_set_name (resampNearest, "resampNearest");
- gtk_widget_show (resampNearest);
- gtk_box_pack_start (GTK_BOX (vbox15), resampNearest, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (resampNearest), resampNearest_group);
- resampNearest_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (resampNearest));
-
- resampLinear = gtk_radio_button_new_with_mnemonic (NULL, _("Linear (fast)"));
- gtk_widget_set_name (resampLinear, "resampLinear");
- gtk_widget_show (resampLinear);
- gtk_box_pack_start (GTK_BOX (vbox15), resampLinear, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (resampLinear), resampNearest_group);
- resampNearest_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (resampLinear));
-
- resampSpline = gtk_radio_button_new_with_mnemonic (NULL, _("Spline (good quality)"));
- gtk_widget_set_name (resampSpline, "resampSpline");
- gtk_widget_show (resampSpline);
- gtk_box_pack_start (GTK_BOX (vbox15), resampSpline, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (resampSpline), resampNearest_group);
- resampNearest_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (resampSpline));
-
- resampPolyphase = gtk_radio_button_new_with_mnemonic (NULL, _("8-tap Fir (extremely high quality)"));
- gtk_widget_set_name (resampPolyphase, "resampPolyphase");
- gtk_widget_show (resampPolyphase);
- gtk_box_pack_start (GTK_BOX (vbox15), resampPolyphase, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (resampPolyphase), resampNearest_group);
- resampNearest_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (resampPolyphase));
-
- label4 = gtk_label_new (_("Resampling"));
- gtk_widget_set_name (label4, "label4");
- gtk_widget_show (label4);
- gtk_frame_set_label_widget (GTK_FRAME (frame9), label4);
-
- frame3 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame3, "frame3");
- gtk_widget_show (frame3);
- gtk_box_pack_start (GTK_BOX (hbox14), frame3, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame3), 2);
-
- vbox6 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox6, "vbox6");
- gtk_widget_show (vbox6);
- gtk_container_add (GTK_CONTAINER (frame3), vbox6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox6), 2);
-
- samp96 = gtk_radio_button_new_with_mnemonic (NULL, _("96 kHz"));
- gtk_widget_set_name (samp96, "samp96");
- gtk_widget_show (samp96);
- gtk_box_pack_start (GTK_BOX (vbox6), samp96, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (samp96), samp96_group);
- samp96_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (samp96));
-
- samp48 = gtk_radio_button_new_with_mnemonic (NULL, _("48 kHz"));
- gtk_widget_set_name (samp48, "samp48");
- gtk_widget_show (samp48);
- gtk_box_pack_start (GTK_BOX (vbox6), samp48, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (samp48), samp96_group);
- samp96_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (samp48));
-
- samp44 = gtk_radio_button_new_with_mnemonic (NULL, _("44 kHz"));
- gtk_widget_set_name (samp44, "samp44");
- gtk_widget_show (samp44);
- gtk_box_pack_start (GTK_BOX (vbox6), samp44, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (samp44), samp96_group);
- samp96_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (samp44));
-
- samp22 = gtk_radio_button_new_with_mnemonic (NULL, _("22 kHz"));
- gtk_widget_set_name (samp22, "samp22");
- gtk_widget_show (samp22);
- gtk_box_pack_start (GTK_BOX (vbox6), samp22, FALSE, FALSE, 0);
- gtk_button_set_focus_on_click (GTK_BUTTON (samp22), FALSE);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (samp22), samp96_group);
- samp96_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (samp22));
-
- label5 = gtk_label_new (_("Sampling Rate"));
- gtk_widget_set_name (label5, "label5");
- gtk_widget_show (label5);
- gtk_frame_set_label_widget (GTK_FRAME (frame3), label5);
-
- label2 = gtk_label_new (_("Quality"));
- gtk_widget_set_name (label2, "label2");
- gtk_widget_show (label2);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label2);
- gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_CENTER);
-
- vbox7 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox7, "vbox7");
- gtk_widget_show (vbox7);
- gtk_container_add (GTK_CONTAINER (notebook1), vbox7);
- gtk_container_set_border_width (GTK_CONTAINER (vbox7), 2);
-
- hbox15 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox15, "hbox15");
- gtk_widget_show (hbox15);
- gtk_box_pack_start (GTK_BOX (vbox7), hbox15, FALSE, TRUE, 0);
-
- frame5 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame5, "frame5");
- gtk_widget_show (frame5);
- gtk_box_pack_start (GTK_BOX (hbox15), frame5, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame5), 2);
-
- vbox20 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox20, "vbox20");
- gtk_widget_show (vbox20);
- gtk_container_add (GTK_CONTAINER (frame5), vbox20);
- gtk_container_set_border_width (GTK_CONTAINER (vbox20), 2);
-
- fxReverb = gtk_check_button_new_with_mnemonic (_("Enable"));
- gtk_widget_set_name (fxReverb, "fxReverb");
- gtk_widget_show (fxReverb);
- gtk_box_pack_start (GTK_BOX (vbox20), fxReverb, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (fxReverb), 2);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fxReverb), TRUE);
-
- table1 = gtk_table_new (2, 2, FALSE);
- gtk_widget_set_name (table1, "table1");
- gtk_widget_show (table1);
- gtk_box_pack_start (GTK_BOX (vbox20), table1, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (table1), 2);
- gtk_table_set_row_spacings (GTK_TABLE (table1), 4);
- gtk_table_set_col_spacings (GTK_TABLE (table1), 4);
-
- fxReverbDepth = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (30, 0, 100, 0, 0, 0)));
- gtk_widget_set_name (fxReverbDepth, "fxReverbDepth");
- gtk_widget_show (fxReverbDepth);
- gtk_table_attach (GTK_TABLE (table1), fxReverbDepth, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-
- fxReverbDelay = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (90, 40, 200, 0, 0, 0)));
- gtk_widget_set_name (fxReverbDelay, "fxReverbDelay");
- gtk_widget_show (fxReverbDelay);
- gtk_table_attach (GTK_TABLE (table1), fxReverbDelay, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-
- xlabel3 = gtk_label_new (_("Depth"));
- gtk_widget_set_name (xlabel3, "xlabel3");
- gtk_widget_show (xlabel3);
- gtk_table_attach (GTK_TABLE (table1), xlabel3, 0, 1, 0, 1,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (xlabel3), GTK_JUSTIFY_CENTER);
-
- xlabel4 = gtk_label_new (_("Delay"));
- gtk_widget_set_name (xlabel4, "xlabel4");
- gtk_widget_show (xlabel4);
- gtk_table_attach (GTK_TABLE (table1), xlabel4, 0, 1, 1, 2,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (xlabel4), GTK_JUSTIFY_CENTER);
-
- label6 = gtk_label_new (_("Reverb"));
- gtk_widget_set_name (label6, "label6");
- gtk_widget_show (label6);
- gtk_frame_set_label_widget (GTK_FRAME (frame5), label6);
-
- frame6 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame6, "frame6");
- gtk_widget_show (frame6);
- gtk_box_pack_start (GTK_BOX (hbox15), frame6, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame6), 2);
-
- vbox21 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox21, "vbox21");
- gtk_widget_show (vbox21);
- gtk_container_add (GTK_CONTAINER (frame6), vbox21);
- gtk_container_set_border_width (GTK_CONTAINER (vbox21), 2);
-
- fxBassBoost = gtk_check_button_new_with_mnemonic (_("Enable"));
- gtk_widget_set_name (fxBassBoost, "fxBassBoost");
- gtk_widget_show (fxBassBoost);
- gtk_box_pack_start (GTK_BOX (vbox21), fxBassBoost, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (fxBassBoost), 2);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fxBassBoost), TRUE);
-
- table2 = gtk_table_new (2, 2, FALSE);
- gtk_widget_set_name (table2, "table2");
- gtk_widget_show (table2);
- gtk_box_pack_start (GTK_BOX (vbox21), table2, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (table2), 2);
- gtk_table_set_row_spacings (GTK_TABLE (table2), 4);
- gtk_table_set_col_spacings (GTK_TABLE (table2), 4);
-
- fxBassAmount = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (30, 0, 100, 0, 0, 0)));
- gtk_widget_set_name (fxBassAmount, "fxBassAmount");
- gtk_widget_show (fxBassAmount);
- gtk_table_attach (GTK_TABLE (table2), fxBassAmount, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-
- fxBassRange = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (30, 10, 100, 0, 0, 0)));
- gtk_widget_set_name (fxBassRange, "fxBassRange");
- gtk_widget_show (fxBassRange);
- gtk_table_attach (GTK_TABLE (table2), fxBassRange, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-
- xlabel5 = gtk_label_new (_("Amount"));
- gtk_widget_set_name (xlabel5, "xlabel5");
- gtk_widget_show (xlabel5);
- gtk_table_attach (GTK_TABLE (table2), xlabel5, 0, 1, 0, 1,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (xlabel5), GTK_JUSTIFY_CENTER);
-
- xlabel6 = gtk_label_new (_("Range"));
- gtk_widget_set_name (xlabel6, "xlabel6");
- gtk_widget_show (xlabel6);
- gtk_table_attach (GTK_TABLE (table2), xlabel6, 0, 1, 1, 2,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (xlabel6), GTK_JUSTIFY_CENTER);
-
- label7 = gtk_label_new (_("Bass Boost"));
- gtk_widget_set_name (label7, "label7");
- gtk_widget_show (label7);
- gtk_frame_set_label_widget (GTK_FRAME (frame6), label7);
-
- hbox16 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox16, "hbox16");
- gtk_widget_show (hbox16);
- gtk_box_pack_start (GTK_BOX (vbox7), hbox16, FALSE, TRUE, 0);
-
- frame7 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame7, "frame7");
- gtk_widget_show (frame7);
- gtk_box_pack_start (GTK_BOX (hbox16), frame7, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame7), 2);
-
- vbox22 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox22, "vbox22");
- gtk_widget_show (vbox22);
- gtk_container_add (GTK_CONTAINER (frame7), vbox22);
-
- fxSurround = gtk_check_button_new_with_mnemonic (_("Enable"));
- gtk_widget_set_name (fxSurround, "fxSurround");
- gtk_widget_show (fxSurround);
- gtk_box_pack_start (GTK_BOX (vbox22), fxSurround, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (fxSurround), 2);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fxSurround), TRUE);
-
- table3 = gtk_table_new (2, 2, FALSE);
- gtk_widget_set_name (table3, "table3");
- gtk_widget_show (table3);
- gtk_box_pack_start (GTK_BOX (vbox22), table3, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (table3), 2);
- gtk_table_set_row_spacings (GTK_TABLE (table3), 4);
- gtk_table_set_col_spacings (GTK_TABLE (table3), 4);
-
- fxSurroundDepth = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (20, 0, 100, 0, 0, 0)));
- gtk_widget_set_name (fxSurroundDepth, "fxSurroundDepth");
- gtk_widget_show (fxSurroundDepth);
- gtk_table_attach (GTK_TABLE (table3), fxSurroundDepth, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-
- fxSurroundDelay = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (20, 5, 40, 0, 0, 0)));
- gtk_widget_set_name (fxSurroundDelay, "fxSurroundDelay");
- gtk_widget_show (fxSurroundDelay);
- gtk_table_attach (GTK_TABLE (table3), fxSurroundDelay, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-
- xlabel7 = gtk_label_new (_("Depth"));
- gtk_widget_set_name (xlabel7, "xlabel7");
- gtk_widget_show (xlabel7);
- gtk_table_attach (GTK_TABLE (table3), xlabel7, 0, 1, 0, 1,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (xlabel7), GTK_JUSTIFY_CENTER);
-
- label8 = gtk_label_new (_("Delay"));
- gtk_widget_set_name (label8, "label8");
- gtk_widget_show (label8);
- gtk_table_attach (GTK_TABLE (table3), label8, 0, 1, 1, 2,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (label8), GTK_JUSTIFY_CENTER);
-
- xlabel8 = gtk_label_new (_("Surround"));
- gtk_widget_set_name (xlabel8, "xlabel8");
- gtk_widget_show (xlabel8);
- gtk_frame_set_label_widget (GTK_FRAME (frame7), xlabel8);
-
- frame10 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame10, "frame10");
- gtk_widget_show (frame10);
- gtk_box_pack_start (GTK_BOX (hbox16), frame10, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame10), 2);
-
- vbox16 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (vbox16, "vbox16");
- gtk_widget_show (vbox16);
- gtk_container_add (GTK_CONTAINER (frame10), vbox16);
- gtk_container_set_border_width (GTK_CONTAINER (vbox16), 4);
-
- fxPreamp = gtk_check_button_new_with_mnemonic (_("Enable"));
- gtk_widget_set_name (fxPreamp, "fxPreamp");
- gtk_widget_show (fxPreamp);
- gtk_box_pack_start (GTK_BOX (vbox16), fxPreamp, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (fxPreamp), 2);
-
- hbox11 = gtk_hbox_new (FALSE, 4);
- gtk_widget_set_name (hbox11, "hbox11");
- gtk_widget_show (hbox11);
- gtk_box_pack_start (GTK_BOX (vbox16), hbox11, TRUE, TRUE, 0);
-
- label19 = gtk_label_new (_("Volume"));
- gtk_widget_set_name (label19, "label19");
- gtk_widget_show (label19);
- gtk_box_pack_start (GTK_BOX (hbox11), label19, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (label19), GTK_JUSTIFY_CENTER);
-
- fxPreampLevel = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, -3, 3, 1, 0, 0)));
- gtk_widget_set_name (fxPreampLevel, "fxPreampLevel");
- gtk_widget_show (fxPreampLevel);
- gtk_box_pack_start (GTK_BOX (hbox11), fxPreampLevel, TRUE, TRUE, 0);
-
- label20 = gtk_label_new (_("Note: Setting the preamp\ntoo high may cause clipping\n(annoying clicks and pops)!"));
- gtk_widget_set_name (label20, "label20");
- gtk_widget_show (label20);
- gtk_box_pack_start (GTK_BOX (vbox16), label20, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (label20), GTK_JUSTIFY_CENTER);
-
- label9 = gtk_label_new (_("Preamp"));
- gtk_widget_set_name (label9, "label9");
- gtk_widget_show (label9);
- gtk_frame_set_label_widget (GTK_FRAME (frame10), label9);
-
- label10 = gtk_label_new (_("Effects"));
- gtk_widget_set_name (label10, "label10");
- gtk_widget_show (label10);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label10);
- gtk_label_set_justify (GTK_LABEL (label10), GTK_JUSTIFY_CENTER);
-
- vbox19 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox19, "vbox19");
- gtk_widget_show (vbox19);
- gtk_container_add (GTK_CONTAINER (notebook1), vbox19);
- gtk_container_set_border_width (GTK_CONTAINER (vbox19), 2);
-
- frame4 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame4, "frame4");
- gtk_widget_show (frame4);
- gtk_box_pack_start (GTK_BOX (vbox19), frame4, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame4), 2);
-
- hbox3 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox3, "hbox3");
- gtk_widget_show (hbox3);
- gtk_container_add (GTK_CONTAINER (frame4), hbox3);
- gtk_container_set_border_width (GTK_CONTAINER (hbox3), 2);
-
- vbox8 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox8, "vbox8");
- gtk_widget_show (vbox8);
- gtk_box_pack_start (GTK_BOX (hbox3), vbox8, TRUE, TRUE, 0);
-
- fxUseFilename = gtk_check_button_new_with_mnemonic (_("Use Filename as Song Title"));
- gtk_widget_set_name (fxUseFilename, "fxUseFilename");
- gtk_widget_show (fxUseFilename);
- gtk_box_pack_start (GTK_BOX (vbox8), fxUseFilename, FALSE, FALSE, 0);
-
- fxFastInfo = gtk_check_button_new_with_mnemonic (_("Fast Playlist Info"));
- gtk_widget_set_name (fxFastInfo, "fxFastInfo");
- gtk_widget_show (fxFastInfo);
- gtk_box_pack_start (GTK_BOX (vbox8), fxFastInfo, FALSE, FALSE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fxFastInfo), TRUE);
-
- vbox9 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox9, "vbox9");
- gtk_widget_show (vbox9);
- gtk_box_pack_start (GTK_BOX (hbox3), vbox9, TRUE, TRUE, 0);
-
- fxNR = gtk_check_button_new_with_mnemonic (_("Noise Reduction"));
- gtk_widget_set_name (fxNR, "fxNR");
- gtk_widget_show (fxNR);
- gtk_box_pack_start (GTK_BOX (vbox9), fxNR, FALSE, FALSE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fxNR), TRUE);
-
- fxAmigaMOD = gtk_check_button_new_with_mnemonic (_("Play Amiga MOD"));
- gtk_widget_set_name (fxAmigaMOD, "fxAmigaMOD");
- gtk_widget_show (fxAmigaMOD);
- gtk_box_pack_start (GTK_BOX (vbox9), fxAmigaMOD, FALSE, FALSE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fxAmigaMOD), TRUE);
-
- label21 = gtk_label_new (_("General"));
- gtk_widget_set_name (label21, "label21");
- gtk_widget_show (label21);
- gtk_frame_set_label_widget (GTK_FRAME (frame4), label21);
-
- frame11 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame11, "frame11");
- gtk_widget_show (frame11);
- gtk_box_pack_start (GTK_BOX (vbox19), frame11, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame11), 2);
-
- vbox17 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox17, "vbox17");
- gtk_widget_show (vbox17);
- gtk_container_add (GTK_CONTAINER (frame11), vbox17);
- gtk_container_set_border_width (GTK_CONTAINER (vbox17), 2);
-
- fxNoLoop = gtk_radio_button_new_with_mnemonic (NULL, _("Don't loop"));
- gtk_widget_set_name (fxNoLoop, "fxNoLoop");
- gtk_widget_show (fxNoLoop);
- gtk_box_pack_start (GTK_BOX (vbox17), fxNoLoop, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (fxNoLoop), fxNoLoop_group);
- fxNoLoop_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (fxNoLoop));
-
- hbox13 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox13, "hbox13");
- gtk_widget_show (hbox13);
- gtk_box_pack_start (GTK_BOX (vbox17), hbox13, FALSE, FALSE, 0);
-
- fxLoopFinite = gtk_radio_button_new_with_mnemonic (NULL, _("Loop"));
- gtk_widget_set_name (fxLoopFinite, "fxLoopFinite");
- gtk_widget_show (fxLoopFinite);
- gtk_box_pack_start (GTK_BOX (hbox13), fxLoopFinite, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (fxLoopFinite), fxNoLoop_group);
- fxNoLoop_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (fxLoopFinite));
-
- fxLoopCount_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);
- fxLoopCount = gtk_spin_button_new (GTK_ADJUSTMENT (fxLoopCount_adj), 1, 0);
- gtk_widget_set_name (fxLoopCount, "fxLoopCount");
- gtk_widget_show (fxLoopCount);
- gtk_box_pack_start (GTK_BOX (hbox13), fxLoopCount, FALSE, TRUE, 0);
-
- xlabel21 = gtk_label_new (_("time(s)"));
- gtk_widget_set_name (xlabel21, "xlabel21");
- gtk_widget_show (xlabel21);
- gtk_box_pack_start (GTK_BOX (hbox13), xlabel21, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (xlabel21), GTK_JUSTIFY_CENTER);
-
- fxLoopForever = gtk_radio_button_new_with_mnemonic (NULL, _("Loop forever"));
- gtk_widget_set_name (fxLoopForever, "fxLoopForever");
- gtk_widget_show (fxLoopForever);
- gtk_box_pack_start (GTK_BOX (vbox17), fxLoopForever, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (fxLoopForever), fxNoLoop_group);
- fxNoLoop_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (fxLoopForever));
-
- label22 = gtk_label_new (_("Looping"));
- gtk_widget_set_name (label22, "label22");
- gtk_widget_show (label22);
- gtk_frame_set_label_widget (GTK_FRAME (frame11), label22);
-
- xlabel22 = gtk_label_new (_("Misc"));
- gtk_widget_set_name (xlabel22, "xlabel22");
- gtk_widget_show (xlabel22);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), xlabel22);
- gtk_label_set_justify (GTK_LABEL (xlabel22), GTK_JUSTIFY_CENTER);
-
- hbuttonbox2 = gtk_hbutton_box_new ();
- gtk_widget_set_name (hbuttonbox2, "hbuttonbox2");
- gtk_widget_show (hbuttonbox2);
- gtk_box_pack_start (GTK_BOX (vbox2), hbuttonbox2, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox2), 4);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END);
- gtk_box_set_spacing (GTK_BOX (hbuttonbox2), 8);
-
- config_ok = gtk_button_new_with_mnemonic (_("OK"));
- gtk_widget_set_name (config_ok, "config_ok");
- gtk_widget_show (config_ok);
- gtk_container_add (GTK_CONTAINER (hbuttonbox2), config_ok);
- GTK_WIDGET_SET_FLAGS (config_ok, GTK_CAN_DEFAULT);
-
- config_apply = gtk_button_new_with_mnemonic (_("Apply"));
- gtk_widget_set_name (config_apply, "config_apply");
- gtk_widget_show (config_apply);
- gtk_container_add (GTK_CONTAINER (hbuttonbox2), config_apply);
- GTK_WIDGET_SET_FLAGS (config_apply, GTK_CAN_DEFAULT);
-
- config_cancel = gtk_button_new_with_mnemonic (_("Cancel"));
- gtk_widget_set_name (config_cancel, "config_cancel");
- gtk_widget_show (config_cancel);
- gtk_container_add (GTK_CONTAINER (hbuttonbox2), config_cancel);
- GTK_WIDGET_SET_FLAGS (config_cancel, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) Config, "delete_event",
- G_CALLBACK (hide_window),
- NULL);
- g_signal_connect ((gpointer) config_ok, "clicked",
- G_CALLBACK (on_config_ok_clicked),
- NULL);
- g_signal_connect ((gpointer) config_apply, "clicked",
- G_CALLBACK (on_config_apply_clicked),
- NULL);
- g_signal_connect ((gpointer) config_cancel, "clicked",
- G_CALLBACK (on_config_cancel_clicked),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (Config, Config, "Config");
- GLADE_HOOKUP_OBJECT (Config, vbox2, "vbox2");
- GLADE_HOOKUP_OBJECT (Config, notebook1, "notebook1");
- GLADE_HOOKUP_OBJECT (Config, vbox3, "vbox3");
- GLADE_HOOKUP_OBJECT (Config, hbox2, "hbox2");
- GLADE_HOOKUP_OBJECT (Config, frame1, "frame1");
- GLADE_HOOKUP_OBJECT (Config, vbox4, "vbox4");
- GLADE_HOOKUP_OBJECT (Config, bit16, "bit16");
- GLADE_HOOKUP_OBJECT (Config, bit8, "bit8");
- GLADE_HOOKUP_OBJECT (Config, xlabel2, "xlabel2");
- GLADE_HOOKUP_OBJECT (Config, frame2, "frame2");
- GLADE_HOOKUP_OBJECT (Config, vbox5, "vbox5");
- GLADE_HOOKUP_OBJECT (Config, stereo, "stereo");
- GLADE_HOOKUP_OBJECT (Config, mono, "mono");
- GLADE_HOOKUP_OBJECT (Config, label3, "label3");
- GLADE_HOOKUP_OBJECT (Config, hbox14, "hbox14");
- GLADE_HOOKUP_OBJECT (Config, frame9, "frame9");
- GLADE_HOOKUP_OBJECT (Config, vbox15, "vbox15");
- GLADE_HOOKUP_OBJECT (Config, resampNearest, "resampNearest");
- GLADE_HOOKUP_OBJECT (Config, resampLinear, "resampLinear");
- GLADE_HOOKUP_OBJECT (Config, resampSpline, "resampSpline");
- GLADE_HOOKUP_OBJECT (Config, resampPolyphase, "resampPolyphase");
- GLADE_HOOKUP_OBJECT (Config, label4, "label4");
- GLADE_HOOKUP_OBJECT (Config, frame3, "frame3");
- GLADE_HOOKUP_OBJECT (Config, vbox6, "vbox6");
- GLADE_HOOKUP_OBJECT (Config, samp96, "samp96");
- GLADE_HOOKUP_OBJECT (Config, samp48, "samp48");
- GLADE_HOOKUP_OBJECT (Config, samp44, "samp44");
- GLADE_HOOKUP_OBJECT (Config, samp22, "samp22");
- GLADE_HOOKUP_OBJECT (Config, label5, "label5");
- GLADE_HOOKUP_OBJECT (Config, label2, "label2");
- GLADE_HOOKUP_OBJECT (Config, vbox7, "vbox7");
- GLADE_HOOKUP_OBJECT (Config, hbox15, "hbox15");
- GLADE_HOOKUP_OBJECT (Config, frame5, "frame5");
- GLADE_HOOKUP_OBJECT (Config, vbox20, "vbox20");
- GLADE_HOOKUP_OBJECT (Config, fxReverb, "fxReverb");
- GLADE_HOOKUP_OBJECT (Config, table1, "table1");
- GLADE_HOOKUP_OBJECT (Config, fxReverbDepth, "fxReverbDepth");
- GLADE_HOOKUP_OBJECT (Config, fxReverbDelay, "fxReverbDelay");
- GLADE_HOOKUP_OBJECT (Config, xlabel3, "xlabel3");
- GLADE_HOOKUP_OBJECT (Config, xlabel4, "xlabel4");
- GLADE_HOOKUP_OBJECT (Config, label6, "label6");
- GLADE_HOOKUP_OBJECT (Config, frame6, "frame6");
- GLADE_HOOKUP_OBJECT (Config, vbox21, "vbox21");
- GLADE_HOOKUP_OBJECT (Config, fxBassBoost, "fxBassBoost");
- GLADE_HOOKUP_OBJECT (Config, table2, "table2");
- GLADE_HOOKUP_OBJECT (Config, fxBassAmount, "fxBassAmount");
- GLADE_HOOKUP_OBJECT (Config, fxBassRange, "fxBassRange");
- GLADE_HOOKUP_OBJECT (Config, xlabel5, "xlabel5");
- GLADE_HOOKUP_OBJECT (Config, xlabel6, "xlabel6");
- GLADE_HOOKUP_OBJECT (Config, label7, "label7");
- GLADE_HOOKUP_OBJECT (Config, hbox16, "hbox16");
- GLADE_HOOKUP_OBJECT (Config, frame7, "frame7");
- GLADE_HOOKUP_OBJECT (Config, vbox22, "vbox22");
- GLADE_HOOKUP_OBJECT (Config, fxSurround, "fxSurround");
- GLADE_HOOKUP_OBJECT (Config, table3, "table3");
- GLADE_HOOKUP_OBJECT (Config, fxSurroundDepth, "fxSurroundDepth");
- GLADE_HOOKUP_OBJECT (Config, fxSurroundDelay, "fxSurroundDelay");
- GLADE_HOOKUP_OBJECT (Config, xlabel7, "xlabel7");
- GLADE_HOOKUP_OBJECT (Config, label8, "label8");
- GLADE_HOOKUP_OBJECT (Config, xlabel8, "xlabel8");
- GLADE_HOOKUP_OBJECT (Config, frame10, "frame10");
- GLADE_HOOKUP_OBJECT (Config, vbox16, "vbox16");
- GLADE_HOOKUP_OBJECT (Config, fxPreamp, "fxPreamp");
- GLADE_HOOKUP_OBJECT (Config, hbox11, "hbox11");
- GLADE_HOOKUP_OBJECT (Config, label19, "label19");
- GLADE_HOOKUP_OBJECT (Config, fxPreampLevel, "fxPreampLevel");
- GLADE_HOOKUP_OBJECT (Config, label20, "label20");
- GLADE_HOOKUP_OBJECT (Config, label9, "label9");
- GLADE_HOOKUP_OBJECT (Config, label10, "label10");
- GLADE_HOOKUP_OBJECT (Config, vbox19, "vbox19");
- GLADE_HOOKUP_OBJECT (Config, frame4, "frame4");
- GLADE_HOOKUP_OBJECT (Config, hbox3, "hbox3");
- GLADE_HOOKUP_OBJECT (Config, vbox8, "vbox8");
- GLADE_HOOKUP_OBJECT (Config, fxUseFilename, "fxUseFilename");
- GLADE_HOOKUP_OBJECT (Config, fxFastInfo, "fxFastInfo");
- GLADE_HOOKUP_OBJECT (Config, vbox9, "vbox9");
- GLADE_HOOKUP_OBJECT (Config, fxNR, "fxNR");
- GLADE_HOOKUP_OBJECT (Config, fxAmigaMOD, "fxAmigaMOD");
- GLADE_HOOKUP_OBJECT (Config, label21, "label21");
- GLADE_HOOKUP_OBJECT (Config, frame11, "frame11");
- GLADE_HOOKUP_OBJECT (Config, vbox17, "vbox17");
- GLADE_HOOKUP_OBJECT (Config, fxNoLoop, "fxNoLoop");
- GLADE_HOOKUP_OBJECT (Config, hbox13, "hbox13");
- GLADE_HOOKUP_OBJECT (Config, fxLoopFinite, "fxLoopFinite");
- GLADE_HOOKUP_OBJECT (Config, fxLoopCount, "fxLoopCount");
- GLADE_HOOKUP_OBJECT (Config, xlabel21, "xlabel21");
- GLADE_HOOKUP_OBJECT (Config, fxLoopForever, "fxLoopForever");
- GLADE_HOOKUP_OBJECT (Config, label22, "label22");
- GLADE_HOOKUP_OBJECT (Config, xlabel22, "xlabel22");
- GLADE_HOOKUP_OBJECT (Config, hbuttonbox2, "hbuttonbox2");
- GLADE_HOOKUP_OBJECT (Config, config_ok, "config_ok");
- GLADE_HOOKUP_OBJECT (Config, config_apply, "config_apply");
- GLADE_HOOKUP_OBJECT (Config, config_cancel, "config_cancel");
-
- return Config;
-}
-
-GtkWidget*
-create_Info (void)
-{
- GtkWidget *Info;
- GtkWidget *vbox14;
- GtkWidget *notebook2;
- GtkWidget *hbox9;
- GtkWidget *label11;
- GtkWidget *info_general;
- GtkWidget *label13;
- GtkWidget *scrolledwindow1;
- GtkWidget *viewport1;
- GtkWidget *info_samples;
- GtkWidget *label15;
- GtkWidget *scrolledwindow2;
- GtkWidget *viewport2;
- GtkWidget *info_instruments;
- GtkWidget *label17;
- GtkWidget *scrolledwindow3;
- GtkWidget *info_message;
- GtkWidget *label18;
- GtkWidget *hbuttonbox3;
- GtkWidget *info_close;
-
- Info = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_name (Info, "Info");
- gtk_window_set_title (GTK_WINDOW (Info), _("MOD Info"));
-
- vbox14 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox14, "vbox14");
- gtk_widget_show (vbox14);
- gtk_container_add (GTK_CONTAINER (Info), vbox14);
-
- notebook2 = gtk_notebook_new ();
- gtk_widget_set_name (notebook2, "notebook2");
- gtk_widget_show (notebook2);
- gtk_box_pack_start (GTK_BOX (vbox14), notebook2, TRUE, TRUE, 8);
- gtk_container_set_border_width (GTK_CONTAINER (notebook2), 4);
-
- hbox9 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (hbox9, "hbox9");
- gtk_widget_show (hbox9);
- gtk_container_add (GTK_CONTAINER (notebook2), hbox9);
- gtk_container_set_border_width (GTK_CONTAINER (hbox9), 2);
-
- label11 = gtk_label_new (_("Filename:\nTitle:\nType:\nLength:\nSpeed:\nTempo:\nSamples:\nInstruments:\nPatterns:\nChannels:"));
- gtk_widget_set_name (label11, "label11");
- gtk_widget_show (label11);
- gtk_box_pack_start (GTK_BOX (hbox9), label11, FALSE, FALSE, 4);
-
- info_general = gtk_label_new (_("---\n---\n---\n---\n---\n---\n---\n---\n---\n---"));
- gtk_widget_set_name (info_general, "info_general");
- gtk_widget_show (info_general);
- gtk_box_pack_start (GTK_BOX (hbox9), info_general, FALSE, FALSE, 4);
-
- label13 = gtk_label_new (_("General"));
- gtk_widget_set_name (label13, "label13");
- gtk_widget_show (label13);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 0), label13);
- gtk_label_set_justify (GTK_LABEL (label13), GTK_JUSTIFY_CENTER);
-
- scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow1, "scrolledwindow1");
- gtk_widget_show (scrolledwindow1);
- gtk_container_add (GTK_CONTAINER (notebook2), scrolledwindow1);
- gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow1), 6);
- GTK_WIDGET_UNSET_FLAGS (scrolledwindow1, GTK_CAN_FOCUS);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- viewport1 = gtk_viewport_new (NULL, NULL);
- gtk_widget_set_name (viewport1, "viewport1");
- gtk_widget_show (viewport1);
- gtk_container_add (GTK_CONTAINER (scrolledwindow1), viewport1);
-
- info_samples = gtk_label_new ("");
- gtk_widget_set_name (info_samples, "info_samples");
- gtk_widget_show (info_samples);
- gtk_container_add (GTK_CONTAINER (viewport1), info_samples);
- gtk_misc_set_alignment (GTK_MISC (info_samples), 7.45058e-09, 7.45058e-09);
-
- label15 = gtk_label_new (_("Samples"));
- gtk_widget_set_name (label15, "label15");
- gtk_widget_show (label15);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 1), label15);
- gtk_label_set_justify (GTK_LABEL (label15), GTK_JUSTIFY_CENTER);
-
- scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow2, "scrolledwindow2");
- gtk_widget_show (scrolledwindow2);
- gtk_container_add (GTK_CONTAINER (notebook2), scrolledwindow2);
- gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow2), 6);
- GTK_WIDGET_UNSET_FLAGS (scrolledwindow2, GTK_CAN_FOCUS);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- viewport2 = gtk_viewport_new (NULL, NULL);
- gtk_widget_set_name (viewport2, "viewport2");
- gtk_widget_show (viewport2);
- gtk_container_add (GTK_CONTAINER (scrolledwindow2), viewport2);
-
- info_instruments = gtk_label_new ("");
- gtk_widget_set_name (info_instruments, "info_instruments");
- gtk_widget_show (info_instruments);
- gtk_container_add (GTK_CONTAINER (viewport2), info_instruments);
- gtk_misc_set_alignment (GTK_MISC (info_instruments), 1.49012e-08, 7.45058e-09);
-
- label17 = gtk_label_new (_("Instruments"));
- gtk_widget_set_name (label17, "label17");
- gtk_widget_show (label17);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label17);
- gtk_label_set_justify (GTK_LABEL (label17), GTK_JUSTIFY_CENTER);
-
- scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow3, "scrolledwindow3");
- gtk_widget_show (scrolledwindow3);
- gtk_container_add (GTK_CONTAINER (notebook2), scrolledwindow3);
- GTK_WIDGET_UNSET_FLAGS (scrolledwindow3, GTK_CAN_FOCUS);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_SHADOW_IN);
-
- info_message = gtk_text_view_new ();
- gtk_widget_set_name (info_message, "info_message");
- gtk_widget_show (info_message);
- gtk_container_add (GTK_CONTAINER (scrolledwindow3), info_message);
- gtk_text_view_set_editable (GTK_TEXT_VIEW (info_message), FALSE);
- gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (info_message), GTK_WRAP_WORD);
-
- label18 = gtk_label_new (_("Message"));
- gtk_widget_set_name (label18, "label18");
- gtk_widget_show (label18);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 3), label18);
- gtk_label_set_justify (GTK_LABEL (label18), GTK_JUSTIFY_CENTER);
-
- hbuttonbox3 = gtk_hbutton_box_new ();
- gtk_widget_set_name (hbuttonbox3, "hbuttonbox3");
- gtk_widget_show (hbuttonbox3);
- gtk_box_pack_start (GTK_BOX (vbox14), hbuttonbox3, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox3), 2);
- gtk_box_set_spacing (GTK_BOX (hbuttonbox3), 30);
-
- info_close = gtk_button_new_with_mnemonic (_("Close"));
- gtk_widget_set_name (info_close, "info_close");
- gtk_widget_show (info_close);
- gtk_container_add (GTK_CONTAINER (hbuttonbox3), info_close);
- GTK_WIDGET_SET_FLAGS (info_close, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) Info, "delete_event",
- G_CALLBACK (hide_window),
- NULL);
- g_signal_connect ((gpointer) info_close, "clicked",
- G_CALLBACK (on_info_close_clicked),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (Info, Info, "Info");
- GLADE_HOOKUP_OBJECT (Info, vbox14, "vbox14");
- GLADE_HOOKUP_OBJECT (Info, notebook2, "notebook2");
- GLADE_HOOKUP_OBJECT (Info, hbox9, "hbox9");
- GLADE_HOOKUP_OBJECT (Info, label11, "label11");
- GLADE_HOOKUP_OBJECT (Info, info_general, "info_general");
- GLADE_HOOKUP_OBJECT (Info, label13, "label13");
- GLADE_HOOKUP_OBJECT (Info, scrolledwindow1, "scrolledwindow1");
- GLADE_HOOKUP_OBJECT (Info, viewport1, "viewport1");
- GLADE_HOOKUP_OBJECT (Info, info_samples, "info_samples");
- GLADE_HOOKUP_OBJECT (Info, label15, "label15");
- GLADE_HOOKUP_OBJECT (Info, scrolledwindow2, "scrolledwindow2");
- GLADE_HOOKUP_OBJECT (Info, viewport2, "viewport2");
- GLADE_HOOKUP_OBJECT (Info, info_instruments, "info_instruments");
- GLADE_HOOKUP_OBJECT (Info, label17, "label17");
- GLADE_HOOKUP_OBJECT (Info, scrolledwindow3, "scrolledwindow3");
- GLADE_HOOKUP_OBJECT (Info, info_message, "info_message");
- GLADE_HOOKUP_OBJECT (Info, label18, "label18");
- GLADE_HOOKUP_OBJECT (Info, hbuttonbox3, "hbuttonbox3");
- GLADE_HOOKUP_OBJECT (Info, info_close, "info_close");
-
- return Info;
-}
-
diff --git a/src/modplug/gui/interface.h b/src/modplug/gui/interface.h
deleted file mode 100644
index 3d597f7..0000000
--- a/src/modplug/gui/interface.h
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-GtkWidget* create_Config (void);
-GtkWidget* create_Info (void);
diff --git a/src/modplug/gui/main.cxx b/src/modplug/gui/main.cxx
deleted file mode 100644
index b9f731a..0000000
--- a/src/modplug/gui/main.cxx
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Initial main.c file generated by Glade. Edit as required.
- * Glade will not overwrite this file.
- */
-
-#include <config.h>
-
-#include "../stddefs.h"
-#include "../stdafx.h"
-#include "../sndfile.h"
-#include "../archive/open.h"
-
-// Order of #include is important - UINT is redefined to unsigned long instead of unsigned int
-// somewhere in the following headers, which leads to unresolved symbol -
-// linking is okay, error pops up when starting Audacious.
-
-#include <gtk/gtk.h>
-#include <libintl.h>
-
-#include "interface.h"
-#include "support.h"
-#include "main.h"
-
-#include <sstream>
-//open()
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-//mmap()
-#include <unistd.h>
-#include <sys/mman.h>
-#include <fstream>
-
-extern "C"
-{
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-}
-
-#define MAX_MESSAGE_LENGTH 4000
-
-GtkWidget *AboutWin = NULL;
-GtkWidget *ConfigWin = NULL;
-GtkWidget *InfoWin = NULL;
-
-void ShowAboutWindow()
-{
- if(!AboutWin)
- {
- gchar * about_text = g_strjoin("",
- _("Modplug Input Plugin for Audacious ver"), VERSION,
- _("\nModplug sound engine written by Olivier Lapicque.\nXMMS interface for Modplug by Kenton Varda.\n(c)2000 Olivier Lapicque and Kenton Varda.\nUpdates and maintenance by Konstanty Bialkowski.\nPorted to BMP by Theofilos Intzoglou."),
- NULL);
-
- audgui_simple_message (& AboutWin, GTK_MESSAGE_INFO, _("About Modplug"),
- about_text);
-
- g_free(about_text);
- }
-}
-
-void ShowConfigureWindow(const ModplugXMMS::Settings& aProps)
-{
- if(!ConfigWin)
- ConfigWin = create_Config();
-
- if(aProps.mBits == 8)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "bit8"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "bit16"), TRUE);
-
- if(aProps.mFrequency == 22050)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp22"), TRUE);
- else if (aProps.mFrequency == 44100)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp44"), TRUE);
- else if (aProps.mFrequency == 96000)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp96"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp48"), TRUE);
-
- if(aProps.mChannels == 1)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "mono"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "stereo"), TRUE);
-
- if(aProps.mResamplingMode == 0)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampNearest"), TRUE);
- else if(aProps.mResamplingMode == 1)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampLinear"), TRUE);
- else if(aProps.mResamplingMode == 2)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampSpline"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampPolyphase"), TRUE);
-
- if(aProps.mNoiseReduction)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxNR"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxNR"), FALSE);
-
- if(aProps.mGrabAmigaMOD)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxAmigaMOD"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxAmigaMOD"), FALSE);
-
- if(aProps.mFastinfo)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxFastInfo"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxFastInfo"), FALSE);
-
- if(aProps.mUseFilename)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxUseFilename"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxUseFilename"), FALSE);
-
- if(aProps.mReverb)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxReverb"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxReverb"), FALSE);
-
- if(aProps.mMegabass)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxBassBoost"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxBassBoost"), FALSE);
-
- if(aProps.mSurround)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxSurround"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxSurround"), FALSE);
-
- if(aProps.mPreamp)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxPreamp"), TRUE);
- else
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxPreamp"), FALSE);
-
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxReverbDepth")), aProps.mReverbDepth);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxReverbDelay")), aProps.mReverbDelay);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxBassAmount")), aProps.mBassAmount);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxBassRange")), aProps.mBassRange);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxSurroundDepth")), aProps.mSurroundDepth);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxSurroundDelay")), aProps.mSurroundDelay);
- gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxPreampLevel")), aProps.mPreampLevel);
-
- if(aProps.mLoopCount < 0)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxLoopForever"), TRUE);
- else if(aProps.mLoopCount == 0)
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxNoLoop"), TRUE);
- else
- {
- gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxLoopFinite"), TRUE);
- gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
- (GtkSpinButton*)lookup_widget(ConfigWin, "fxLoopCount")), aProps.mLoopCount);
- }
-
- gtk_widget_show(ConfigWin);
-}
-
-void ShowInfoWindow(const string& aFilename)
-{
- if(!InfoWin)
- InfoWin = create_Info();
-
- uint32 lSongTime, lNumSamples, lNumInstruments, i;
- string lInfo;
- gchar lBuffer[33];
- stringstream lStrStream(ios::out); //C++ replacement for sprintf()
-
- CSoundFile* lSoundFile;
-
- Archive* lArchive;
- string lShortFN;
- uint32 lPos;
- gchar *tmps;
-
- lPos = aFilename.find_last_of('/') + 1;
- lShortFN = aFilename.substr(lPos);
-
- //open and mmap the file
- lArchive = OpenArchive(aFilename);
- if(lArchive->Size() == 0)
- {
- delete lArchive;
- return;
- }
-
- lSoundFile = new CSoundFile;
- lSoundFile->Create((uchar*)lArchive->Map(), lArchive->Size());
-
- lInfo = lShortFN;
- lInfo += '\n';
- tmps = MODPLUG_CONVERT(lSoundFile->GetTitle());
- lInfo += tmps;
- g_free(tmps);
- lInfo += '\n';
-
- switch(lSoundFile->GetType())
- {
- case MOD_TYPE_MOD:
- lInfo+= "ProTracker";
- break;
- case MOD_TYPE_S3M:
- lInfo+= "Scream Tracker 3";
- break;
- case MOD_TYPE_XM:
- lInfo+= "Fast Tracker 2";
- break;
- case MOD_TYPE_IT:
- lInfo+= "Impulse Tracker";
- break;
- case MOD_TYPE_MED:
- lInfo+= "OctaMed";
- break;
- case MOD_TYPE_MTM:
- lInfo+= "MTM";
- break;
- case MOD_TYPE_669:
- lInfo+= "669 Composer / UNIS 669";
- break;
- case MOD_TYPE_ULT:
- lInfo+= "ULT";
- break;
- case MOD_TYPE_STM:
- lInfo+= "Scream Tracker";
- break;
- case MOD_TYPE_FAR:
- lInfo+= "Farandole";
- break;
- case MOD_TYPE_AMF:
- lInfo+= "ASYLUM Music Format";
- break;
- case MOD_TYPE_AMS:
- lInfo+= "AMS module";
- break;
- case MOD_TYPE_DSM:
- lInfo+= "DSIK Internal Format";
- break;
- case MOD_TYPE_MDL:
- lInfo+= "DigiTracker";
- break;
- case MOD_TYPE_OKT:
- lInfo+= "Oktalyzer";
- break;
- case MOD_TYPE_DMF:
- lInfo+= "Delusion Digital Music Fileformat (X-Tracker)";
- break;
- case MOD_TYPE_PTM:
- lInfo+= "PolyTracker";
- break;
- case MOD_TYPE_DBM:
- lInfo+= "DigiBooster Pro";
- break;
- case MOD_TYPE_MT2:
- lInfo+= "MT2";
- break;
- case MOD_TYPE_AMF0:
- lInfo+= "AMF0";
- break;
- case MOD_TYPE_PSM:
- lInfo+= "PSM";
- break;
- default:
- lInfo+= "Unknown";
- break;
- }
- lInfo += '\n';
-
- lSongTime = lSoundFile->GetSongTime();
- lStrStream.clear();
- lStrStream << (int)(lSongTime / 60) << ":";
- if(lSongTime % 60 < 10) //single digit for seconds?
- lStrStream << '0'; //yes, so add a 0.
- lStrStream << (int)(lSongTime % 60);
-
- lStrStream << '\n';
-
- lStrStream << (int)lSoundFile->GetMusicSpeed() << '\n';
- lStrStream << (int)lSoundFile->GetMusicTempo() << '\n';
- lStrStream << (int)(lNumSamples = lSoundFile->GetNumSamples()) << '\n';
- lStrStream << (int)(lNumInstruments = lSoundFile->GetNumInstruments());
- lStrStream << '\n';
- lStrStream << (int)(lSoundFile->GetNumPatterns()) << '\n';
- lStrStream << (int)lSoundFile->GetNumChannels();
- lInfo += lStrStream.str();
-
- gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_general"), lInfo.c_str());
-
- lInfo = "";
- for(i = 0; i < lNumSamples; i++)
- {
- lSoundFile->GetSampleName(i, lBuffer);
- tmps = MODPLUG_CONVERT(lBuffer);
- lInfo += tmps;
- g_free(tmps);
- lInfo += '\n';
- }
- gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_samples"), lInfo.c_str());
-
- lInfo = "";
- for(i = 0; i < lNumInstruments; i++)
- {
- lSoundFile->GetInstrumentName(i, lBuffer);
- tmps = MODPLUG_CONVERT(lBuffer);
- lInfo += tmps;
- g_free(tmps);
- lInfo += '\n';
- }
- gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_instruments"), lInfo.c_str());
-
- char message[MAX_MESSAGE_LENGTH];
- static int length = 0;
-
- //textbox = (GtkLabel*)lookup_widget(InfoWin, "info_message");
- //gtk_text_backward_delete(textbox, length);
- length = lSoundFile->GetSongComments(message, MAX_MESSAGE_LENGTH, 80);
- if (length != 0) {
- tmps = MODPLUG_CONVERT(message);
- gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_message"), tmps);
- g_free(tmps);
- }
-
- //unload the file
- lSoundFile->Destroy();
- delete lSoundFile;
- delete lArchive;
-
- gtk_widget_show(InfoWin);
-}
diff --git a/src/modplug/gui/main.h b/src/modplug/gui/main.h
deleted file mode 100644
index 628dc5b..0000000
--- a/src/modplug/gui/main.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Modplug XMMS Plugin
- * Authors: Kenton Varda <temporal@gauge3d.org>
- *
- * This source code is public domain.
- */
-
-#include <string>
-#include "../modplugbmp.h"
-
-void ShowAboutWindow();
-void ShowConfigureWindow(const ModplugXMMS::Settings& aProps);
-void ShowInfoWindow(const string& aFileName);
diff --git a/src/modplug/gui/modplug.glade b/src/modplug/gui/modplug.glade
deleted file mode 100644
index 4eb94cb..0000000
--- a/src/modplug/gui/modplug.glade
+++ /dev/null
@@ -1,2048 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="Config">
- <property name="width_request">500</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">ModPlug Configuration</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <signal name="delete_event" handler="hide_window"/>
-
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkNotebook" id="notebook1">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">True</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkVBox" id="vbox3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkFrame" id="frame1">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="bit16">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">16 bit</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="bit8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">8 bit</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">bit16</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Resolution</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame2">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox5">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="stereo">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Stereo</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="mono">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Mono (downmix)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">stereo</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Channels</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="frame9">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox15">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="resampNearest">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Nearest (fastest)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="resampLinear">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Linear (fast)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">resampNearest</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="resampSpline">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Spline (good quality)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">resampNearest</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="resampPolyphase">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">8-tap Fir (extremely high quality)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">resampNearest</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Resampling</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox6">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="samp96">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">96 kHz</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="samp48">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">48 kHz</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">samp96</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="samp44">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">44 kHz</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">samp96</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="samp22">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">22 kHz</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">False</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">samp96</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sampling Rate</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Quality</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox7">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="frame5">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox20">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="fxReverb">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Enable</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">4</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkHScale" id="fxReverbDepth">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">30 0 100 0 0 0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHScale" id="fxReverbDelay">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">90 40 200 0 0 0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Depth</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Delay</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Reverb</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame6">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox21">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="fxBassBoost">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Enable</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table2">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">4</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkHScale" id="fxBassAmount">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">30 0 100 0 0 0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHScale" id="fxBassRange">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">30 10 100 0 0 0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Amount</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Range</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Bass Boost</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox16">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="frame7">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox22">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="fxSurround">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Enable</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">4</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkHScale" id="fxSurroundDepth">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">20 0 100 0 0 0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHScale" id="fxSurroundDelay">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">20 5 40 0 0 0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel7">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Depth</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Delay</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Surround</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame10">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox16">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="fxPreamp">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Enable</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox11">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">4</property>
-
- <child>
- <widget class="GtkLabel" id="label19">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Volume</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHScale" id="fxPreampLevel">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">1</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">0 -3 3 1 0 0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label20">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Note: Setting the preamp
-too high may cause clipping
-(annoying clicks and pops)!</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Preamp</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Effects</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox19">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="frame4">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkVBox" id="vbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="fxUseFilename">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use Filename as Song Title</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="fxFastInfo">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Fast Playlist Info</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox9">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="fxNR">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Noise Reduction</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="fxAmigaMOD">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Play Amiga MOD</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes">General</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame11">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox17">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="fxNoLoop">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Don't loop</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox13">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkRadioButton" id="fxLoopFinite">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Loop</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">fxNoLoop</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="fxLoopCount">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">1 0 100 1 10 10</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel21">
- <property name="visible">True</property>
- <property name="label" translatable="yes">time(s)</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="fxLoopForever">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Loop forever</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">fxNoLoop</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label22">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Looping</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="xlabel22">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Misc</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox2">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkButton" id="config_ok">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">OK</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_config_ok_clicked"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="config_apply">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Apply</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_config_apply_clicked"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="config_cancel">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Cancel</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_config_cancel_clicked"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkWindow" id="Info">
- <property name="visible">True</property>
- <property name="title" translatable="yes">MOD Info</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <signal name="delete_event" handler="hide_window"/>
-
- <child>
- <widget class="GtkVBox" id="vbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkNotebook" id="notebook2">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">True</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkHBox" id="hbox9">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Filename:
-Title:
-Type:
-Length:
-Speed:
-Tempo:
-Samples:
-Instruments:
-Patterns:
-Channels:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="info_general">
- <property name="visible">True</property>
- <property name="label" translatable="yes">---
----
----
----
----
----
----
----
----
----</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="label" translatable="yes">General</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkViewport" id="viewport1">
- <property name="visible">True</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
-
- <child>
- <widget class="GtkLabel" id="info_samples">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">7.45058015283e-09</property>
- <property name="yalign">7.45058015283e-09</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label15">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Samples</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkViewport" id="viewport2">
- <property name="visible">True</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
-
- <child>
- <widget class="GtkLabel" id="info_instruments">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1.49012002737e-08</property>
- <property name="yalign">7.45058015283e-09</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Instruments</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow3">
- <property name="visible">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTextView" id="info_message">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="overwrite">False</property>
- <property name="accepts_tab">True</property>
- <property name="justification">GTK_JUSTIFY_LEFT</property>
- <property name="wrap_mode">GTK_WRAP_WORD</property>
- <property name="cursor_visible">True</property>
- <property name="pixels_above_lines">0</property>
- <property name="pixels_below_lines">0</property>
- <property name="pixels_inside_wrap">0</property>
- <property name="left_margin">0</property>
- <property name="right_margin">0</property>
- <property name="indent">0</property>
- <property name="text" translatable="yes"></property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Message</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">8</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_DEFAULT_STYLE</property>
- <property name="spacing">30</property>
-
- <child>
- <widget class="GtkButton" id="info_close">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Close</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="on_info_close_clicked"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/src/modplug/gui/modplug.gladep b/src/modplug/gui/modplug.gladep
deleted file mode 100644
index 0155eb2..0000000
--- a/src/modplug/gui/modplug.gladep
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
-
-<glade-project>
- <name>ModPlug</name>
- <program_name>modplug</program_name>
- <source_directory>.</source_directory>
- <pixmaps_directory>.</pixmaps_directory>
- <gnome_support>FALSE</gnome_support>
- <use_widget_names>TRUE</use_widget_names>
- <output_main_file>FALSE</output_main_file>
- <output_build_files>FALSE</output_build_files>
- <main_source_file>interface.cxx</main_source_file>
- <handler_source_file>callbacks.cxx</handler_source_file>
- <support_source_file>support.cxx</support_source_file>
-</glade-project>
diff --git a/src/modplug/gui/support.cxx b/src/modplug/gui/support.cxx
deleted file mode 100644
index 00aff29..0000000
--- a/src/modplug/gui/support.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <gtk/gtk.h>
-
-#include "support.h"
-
-GtkWidget*
-lookup_widget (GtkWidget *widget,
- const gchar *widget_name)
-{
- GtkWidget *parent, *found_widget;
-
- for (;;)
- {
- if (GTK_IS_MENU (widget))
- parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
- else
- parent = widget->parent;
- if (!parent)
- parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
- if (parent == NULL)
- break;
- widget = parent;
- }
-
- found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
- widget_name);
- if (!found_widget)
- g_warning ("Widget not found: %s", widget_name);
- return found_widget;
-}
-
-static GList *pixmaps_directories = NULL;
-
-/* Use this function to set the directory containing installed pixmaps. */
-void
-add_pixmap_directory (const gchar *directory)
-{
- pixmaps_directories = g_list_prepend (pixmaps_directories,
- g_strdup (directory));
-}
-
-/* This is an internally used function to find pixmap files. */
-static gchar*
-find_pixmap_file (const gchar *filename)
-{
- GList *elem;
-
- /* We step through each of the pixmaps directory to find it. */
- elem = pixmaps_directories;
- while (elem)
- {
- gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
- G_DIR_SEPARATOR_S, filename);
- if (g_file_test (pathname, G_FILE_TEST_EXISTS))
- return pathname;
- g_free (pathname);
- elem = elem->next;
- }
- return NULL;
-}
-
-/* This is an internally used function to create pixmaps. */
-GtkWidget*
-create_pixmap (GtkWidget *widget,
- const gchar *filename)
-{
- gchar *pathname = NULL;
- GtkWidget *pixmap;
-
- if (!filename || !filename[0])
- return gtk_image_new ();
-
- pathname = find_pixmap_file (filename);
-
- if (!pathname)
- {
- g_warning (_("Couldn't find pixmap file: %s"), filename);
- return gtk_image_new ();
- }
-
- pixmap = gtk_image_new_from_file (pathname);
- g_free (pathname);
- return pixmap;
-}
-
-/* This is an internally used function to create pixmaps. */
-GdkPixbuf*
-create_pixbuf (const gchar *filename)
-{
- gchar *pathname = NULL;
- GdkPixbuf *pixbuf;
- GError *error = NULL;
-
- if (!filename || !filename[0])
- return NULL;
-
- pathname = find_pixmap_file (filename);
-
- if (!pathname)
- {
- g_warning (_("Couldn't find pixmap file: %s"), filename);
- return NULL;
- }
-
- pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
- if (!pixbuf)
- {
- fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
- pathname, error->message);
- g_error_free (error);
- }
- g_free (pathname);
- return pixbuf;
-}
-
-/* This is used to set ATK action descriptions. */
-void
-glade_set_atk_action_description (AtkAction *action,
- const gchar *action_name,
- const gchar *description)
-{
- gint n_actions, i;
-
- n_actions = atk_action_get_n_actions (action);
- for (i = 0; i < n_actions; i++)
- {
- if (!strcmp (atk_action_get_name (action, i), action_name))
- atk_action_set_description (action, i, description);
- }
-}
-
diff --git a/src/modplug/gui/support.h b/src/modplug/gui/support.h
deleted file mode 100644
index a32649e..0000000
--- a/src/modplug/gui/support.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-/*
- * Standard gettext macros.
- */
-#ifdef ENABLE_NLS
-# include <libintl.h>
-# undef _
-# define _(String) dgettext (PACKAGE, String)
-# define Q_(String) g_strip_context ((String), gettext (String))
-# ifdef gettext_noop
-# define N_(String) gettext_noop (String)
-# else
-# define N_(String) (String)
-# endif
-#else
-# define textdomain(String) (String)
-# define gettext(String) (String)
-# define dgettext(Domain,Message) (Message)
-# define dcgettext(Domain,Message,Type) (Message)
-# define bindtextdomain(Domain,Directory) (Domain)
-# define _(String) (String)
-# define Q_(String) g_strip_context ((String), (String))
-# define N_(String) (String)
-#endif
-
-
-/*
- * Public Functions.
- */
-
-/*
- * This function returns a widget in a component created by Glade.
- * Call it with the toplevel widget in the component (i.e. a window/dialog),
- * or alternatively any widget in the component, and the name of the widget
- * you want returned.
- */
-GtkWidget* lookup_widget (GtkWidget *widget,
- const gchar *widget_name);
-
-
-/* Use this function to set the directory containing installed pixmaps. */
-void add_pixmap_directory (const gchar *directory);
-
-
-/*
- * Private Functions.
- */
-
-/* This is used to create the pixmaps used in the interface. */
-GtkWidget* create_pixmap (GtkWidget *widget,
- const gchar *filename);
-
-/* This is used to create the pixbufs used in the interface. */
-GdkPixbuf* create_pixbuf (const gchar *filename);
-
-/* This is used to set ATK action descriptions. */
-void glade_set_atk_action_description (AtkAction *action,
- const gchar *action_name,
- const gchar *description);
-
diff --git a/src/modplug/it_defs.h b/src/modplug/it_defs.h
deleted file mode 100755
index 84355a7..0000000
--- a/src/modplug/it_defs.h
+++ /dev/null
@@ -1,135 +0,0 @@
-#ifndef _ITDEFS_H_
-#define _ITDEFS_H_
-
-#pragma pack(1)
-
-typedef struct tagITFILEHEADER
-{
- DWORD id; // 0x4D504D49
- CHAR songname[26];
- BYTE hilight_minor;
- BYTE hilight_major;
- WORD ordnum;
- WORD insnum;
- WORD smpnum;
- WORD patnum;
- WORD cwtv;
- WORD cmwt;
- WORD flags;
- WORD special;
- BYTE globalvol;
- BYTE mv;
- BYTE speed;
- BYTE tempo;
- BYTE sep;
- BYTE pwd;
- WORD msglength;
- DWORD msgoffset;
- DWORD reserved2;
- BYTE chnpan[64];
- BYTE chnvol[64];
-} ITFILEHEADER;
-
-
-typedef struct tagITENVELOPE
-{
- BYTE flags;
- BYTE num;
- BYTE lpb;
- BYTE lpe;
- BYTE slb;
- BYTE sle;
- BYTE data[25*3];
- BYTE reserved;
-} ITENVELOPE;
-
-// Old Impulse Instrument Format (cmwt < 0x200)
-typedef struct tagITOLDINSTRUMENT
-{
- DWORD id; // IMPI = 0x49504D49
- CHAR filename[12]; // DOS file name
- BYTE zero;
- BYTE flags;
- BYTE vls;
- BYTE vle;
- BYTE sls;
- BYTE sle;
- WORD reserved1;
- WORD fadeout;
- BYTE nna;
- BYTE dnc;
- WORD trkvers;
- BYTE nos;
- BYTE reserved2;
- CHAR name[26];
- WORD reserved3[3];
- BYTE keyboard[240];
- BYTE volenv[200];
- BYTE nodes[50];
-} ITOLDINSTRUMENT;
-
-
-// Impulse Instrument Format
-typedef struct tagITINSTRUMENT
-{
- DWORD id;
- CHAR filename[12];
- BYTE zero;
- BYTE nna;
- BYTE dct;
- BYTE dca;
- WORD fadeout;
- signed char pps;
- BYTE ppc;
- BYTE gbv;
- BYTE dfp;
- BYTE rv;
- BYTE rp;
- WORD trkvers;
- BYTE nos;
- BYTE reserved1;
- CHAR name[26];
- BYTE ifc;
- BYTE ifr;
- BYTE mch;
- BYTE mpr;
- WORD mbank;
- BYTE keyboard[240];
- ITENVELOPE volenv;
- ITENVELOPE panenv;
- ITENVELOPE pitchenv;
- BYTE dummy[4]; // was 7, but IT v2.17 saves 554 bytes
-} ITINSTRUMENT;
-
-
-// IT Sample Format
-typedef struct ITSAMPLESTRUCT
-{
- DWORD id; // 0x53504D49
- CHAR filename[12];
- BYTE zero;
- BYTE gvl;
- BYTE flags;
- BYTE vol;
- CHAR name[26];
- BYTE cvt;
- BYTE dfp;
- DWORD length;
- DWORD loopbegin;
- DWORD loopend;
- DWORD C5Speed;
- DWORD susloopbegin;
- DWORD susloopend;
- DWORD samplepointer;
- BYTE vis;
- BYTE vid;
- BYTE vir;
- BYTE vit;
-} ITSAMPLESTRUCT;
-
-#pragma pack()
-
-extern BYTE autovibit2xm[8];
-extern BYTE autovibxm2it[8];
-
-#endif
diff --git a/src/modplug/load_669.cxx b/src/modplug/load_669.cxx
deleted file mode 100755
index f3aa0ee..0000000
--- a/src/modplug/load_669.cxx
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-////////////////////////////////////////////////////////////
-// 669 Composer / UNIS 669 module loader
-////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-typedef struct tagFILEHEADER669
-{
- WORD sig; // 'if' or 'JN'
- signed char songmessage[108]; // Song Message
- BYTE samples; // number of samples (1-64)
- BYTE patterns; // number of patterns (1-128)
- BYTE restartpos;
- BYTE orders[128];
- BYTE tempolist[128];
- BYTE breaks[128];
-} FILEHEADER669;
-
-
-typedef struct tagSAMPLE669
-{
- BYTE filename[13];
- BYTE length[4]; // when will somebody think about DWORD align ???
- BYTE loopstart[4];
- BYTE loopend[4];
-} SAMPLE669;
-
-DWORD lengthArrayToDWORD(const BYTE length[4]) {
- DWORD len = (length[3] << 24) +
- (length[2] << 16) +
- (length[1] << 8) +
- (length[0]);
-
- return(len);
-}
-
-
-BOOL CSoundFile::Read669(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- BOOL b669Ext;
- const FILEHEADER669 *pfh = (const FILEHEADER669 *)lpStream;
- const SAMPLE669 *psmp = (const SAMPLE669 *)(lpStream + 0x1F1);
- DWORD dwMemPos = 0;
-
- if ((!lpStream) || (dwMemLength < sizeof(FILEHEADER669))) return FALSE;
- if ((bswapLE16(pfh->sig) != 0x6669) && (bswapLE16(pfh->sig) != 0x4E4A)) return FALSE;
- b669Ext = (bswapLE16(pfh->sig) == 0x4E4A) ? TRUE : FALSE;
- if ((!pfh->samples) || (pfh->samples > 64) || (pfh->restartpos >= 128)
- || (!pfh->patterns) || (pfh->patterns > 128)) return FALSE;
- DWORD dontfuckwithme = 0x1F1 + pfh->samples * sizeof(SAMPLE669) + pfh->patterns * 0x600;
- if (dontfuckwithme > dwMemLength) return FALSE;
- for (UINT ichk=0; ichk<pfh->samples; ichk++)
- {
- DWORD len = lengthArrayToDWORD(psmp[ichk].length);
- dontfuckwithme += len;
- }
- if (dontfuckwithme > dwMemLength) return FALSE;
- // That should be enough checking: this must be a 669 module.
- m_nType = MOD_TYPE_669;
- m_dwSongFlags |= SONG_LINEARSLIDES;
- m_nMinPeriod = 28 << 2;
- m_nMaxPeriod = 1712 << 3;
- m_nDefaultTempo = 125;
- m_nDefaultSpeed = 6;
- m_nChannels = 8;
- memcpy(m_szNames[0], pfh->songmessage, 16);
- m_nSamples = pfh->samples;
- for (UINT nins=1; nins<=m_nSamples; nins++, psmp++)
- {
- DWORD len = lengthArrayToDWORD(psmp->length);
- DWORD loopstart = lengthArrayToDWORD(psmp->loopstart);
- DWORD loopend = lengthArrayToDWORD(psmp->loopend);
- if (len > MAX_SAMPLE_LENGTH) len = MAX_SAMPLE_LENGTH;
- if ((loopend > len) && (!loopstart)) loopend = 0;
- if (loopend > len) loopend = len;
- if (loopstart + 4 >= loopend) loopstart = loopend = 0;
- Ins[nins].nLength = len;
- Ins[nins].nLoopStart = loopstart;
- Ins[nins].nLoopEnd = loopend;
- if (loopend) Ins[nins].uFlags |= CHN_LOOP;
- memcpy(m_szNames[nins], psmp->filename, 13);
- Ins[nins].nVolume = 256;
- Ins[nins].nGlobalVol = 64;
- Ins[nins].nPan = 128;
- }
- // Song Message
- m_lpszSongComments = new char[109];
- memcpy(m_lpszSongComments, pfh->songmessage, 108);
- m_lpszSongComments[108] = 0;
- // Reading Orders
- memcpy(Order, pfh->orders, 128);
- m_nRestartPos = pfh->restartpos;
- if (Order[m_nRestartPos] >= pfh->patterns) m_nRestartPos = 0;
- // Reading Pattern Break Locations
- for (UINT npan=0; npan<8; npan++)
- {
- ChnSettings[npan].nPan = (npan & 1) ? 0x30 : 0xD0;
- ChnSettings[npan].nVolume = 64;
- }
- // Reading Patterns
- dwMemPos = 0x1F1 + pfh->samples * 25;
- for (UINT npat=0; npat<pfh->patterns; npat++)
- {
- Patterns[npat] = AllocatePattern(64, m_nChannels);
- if (!Patterns[npat]) break;
- PatternSize[npat] = 64;
- MODCOMMAND *m = Patterns[npat];
- const BYTE *p = lpStream + dwMemPos;
- for (UINT row=0; row<64; row++)
- {
- MODCOMMAND *mspeed = m;
- if ((row == pfh->breaks[npat]) && (row != 63))
- {
- for (UINT i=0; i<8; i++)
- {
- m[i].command = CMD_PATTERNBREAK;
- m[i].param = 0;
- }
- }
- for (UINT n=0; n<8; n++, m++, p+=3)
- {
- UINT note = p[0] >> 2;
- UINT instr = ((p[0] & 0x03) << 4) | (p[1] >> 4);
- UINT vol = p[1] & 0x0F;
- if (p[0] < 0xFE)
- {
- m->note = note + 37;
- m->instr = instr + 1;
- }
- if (p[0] <= 0xFE)
- {
- m->volcmd = VOLCMD_VOLUME;
- m->vol = (vol << 2) + 2;
- }
- if (p[2] != 0xFF)
- {
- UINT command = p[2] >> 4;
- UINT param = p[2] & 0x0F;
- switch(command)
- {
- case 0x00: command = CMD_PORTAMENTOUP; break;
- case 0x01: command = CMD_PORTAMENTODOWN; break;
- case 0x02: command = CMD_TONEPORTAMENTO; break;
- case 0x03: command = CMD_MODCMDEX; param |= 0x50; break;
- case 0x04: command = CMD_VIBRATO; param |= 0x40; break;
- case 0x05: if (param) command = CMD_SPEED; else command = 0; param += 2; break;
- case 0x06: if (param == 0) { command = CMD_PANNINGSLIDE; param = 0xFE; } else
- if (param == 1) { command = CMD_PANNINGSLIDE; param = 0xEF; } else
- command = 0;
- break;
- default: command = 0;
- }
- if (command)
- {
- if (command == CMD_SPEED) mspeed = NULL;
- m->command = command;
- m->param = param;
- }
- }
- }
- if ((!row) && (mspeed))
- {
- for (UINT i=0; i<8; i++) if (!mspeed[i].command)
- {
- mspeed[i].command = CMD_SPEED;
- mspeed[i].param = pfh->tempolist[npat] + 2;
- break;
- }
- }
- }
- dwMemPos += 0x600;
- }
- // Reading Samples
- for (UINT n=1; n<=m_nSamples; n++)
- {
- UINT len = Ins[n].nLength;
- if (dwMemPos >= dwMemLength) break;
- if (len > 4) ReadSample(&Ins[n], RS_PCM8U, (LPSTR)(lpStream+dwMemPos), dwMemLength - dwMemPos);
- dwMemPos += len;
- }
- return TRUE;
-}
-
-
diff --git a/src/modplug/load_amf.cxx b/src/modplug/load_amf.cxx
deleted file mode 100755
index c59d51c..0000000
--- a/src/modplug/load_amf.cxx
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-///////////////////////////////////////////////////
-//
-// AMF module loader
-//
-// There is 2 types of AMF files:
-// - ASYLUM Music Format
-// - Advanced Music Format(DSM)
-//
-///////////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#define AMFLOG
-
-//#pragma warning(disable:4244)
-
-#pragma pack(1)
-
-typedef struct _AMFFILEHEADER
-{
- UCHAR szAMF[3];
- UCHAR version;
- CHAR title[32];
- UCHAR numsamples;
- UCHAR numorders;
- USHORT numtracks;
- UCHAR numchannels;
-} AMFFILEHEADER;
-
-typedef struct _AMFSAMPLE
-{
- UCHAR type;
- CHAR samplename[32];
- CHAR filename[13];
- ULONG offset;
- ULONG length;
- USHORT c2spd;
- UCHAR volume;
-} AMFSAMPLE;
-
-
-#pragma pack()
-
-
-#ifdef AMFLOG
-extern void Log(LPCSTR, ...);
-#endif
-
-VOID AMF_Unpack(MODCOMMAND *pPat, const BYTE *pTrack, UINT nRows, UINT nChannels)
-//-------------------------------------------------------------------------------
-{
- UINT lastinstr = 0;
- UINT nTrkSize = bswapLE16(*(USHORT *)pTrack);
- nTrkSize += (UINT)pTrack[2] << 16;
- pTrack += 3;
- while (nTrkSize--)
- {
- UINT row = pTrack[0];
- UINT cmd = pTrack[1];
- UINT arg = pTrack[2];
- if (row >= nRows) break;
- MODCOMMAND *m = pPat + row * nChannels;
- if (cmd < 0x7F) // note+vol
- {
- m->note = cmd+1;
- if (!m->instr) m->instr = lastinstr;
- m->volcmd = VOLCMD_VOLUME;
- m->vol = arg;
- } else
- if (cmd == 0x7F) // duplicate row
- {
- signed char rdelta = (signed char)arg;
- int rowsrc = (int)row + (int)rdelta;
- if ((rowsrc >= 0) && (rowsrc < (int)nRows)) memcpy(m, &pPat[rowsrc*nChannels],sizeof(pPat[rowsrc*nChannels]));
- } else
- if (cmd == 0x80) // instrument
- {
- m->instr = arg+1;
- lastinstr = m->instr;
- } else
- if (cmd == 0x83) // volume
- {
- m->volcmd = VOLCMD_VOLUME;
- m->vol = arg;
- } else
- // effect
- {
- UINT command = cmd & 0x7F;
- UINT param = arg;
- switch(command)
- {
- // 0x01: Set Speed
- case 0x01: command = CMD_SPEED; break;
- // 0x02: Volume Slide
- // 0x0A: Tone Porta + Vol Slide
- // 0x0B: Vibrato + Vol Slide
- case 0x02: command = CMD_VOLUMESLIDE;
- case 0x0A: if (command == 0x0A) command = CMD_TONEPORTAVOL;
- case 0x0B: if (command == 0x0B) command = CMD_VIBRATOVOL;
- if (param & 0x80) param = (-(signed char)param)&0x0F;
- else param = (param&0x0F)<<4;
- break;
- // 0x04: Porta Up/Down
- case 0x04: if (param & 0x80) { command = CMD_PORTAMENTOUP; param = (-(signed char)param)&0x7F; }
- else { command = CMD_PORTAMENTODOWN; } break;
- // 0x06: Tone Portamento
- case 0x06: command = CMD_TONEPORTAMENTO; break;
- // 0x07: Tremor
- case 0x07: command = CMD_TREMOR; break;
- // 0x08: Arpeggio
- case 0x08: command = CMD_ARPEGGIO; break;
- // 0x09: Vibrato
- case 0x09: command = CMD_VIBRATO; break;
- // 0x0C: Pattern Break
- case 0x0C: command = CMD_PATTERNBREAK; break;
- // 0x0D: Position Jump
- case 0x0D: command = CMD_POSITIONJUMP; break;
- // 0x0F: Retrig
- case 0x0F: command = CMD_RETRIG; break;
- // 0x10: Offset
- case 0x10: command = CMD_OFFSET; break;
- // 0x11: Fine Volume Slide
- case 0x11: if (param) { command = CMD_VOLUMESLIDE;
- if (param & 0x80) param = 0xF0|((-(signed char)param)&0x0F);
- else param = 0x0F|((param&0x0F)<<4);
- } else command = 0; break;
- // 0x12: Fine Portamento
- // 0x16: Extra Fine Portamento
- case 0x12:
- case 0x16: if (param) { int mask = (command == 0x16) ? 0xE0 : 0xF0;
- command = (param & 0x80) ? CMD_PORTAMENTOUP : CMD_PORTAMENTODOWN;
- if (param & 0x80) param = mask|((-(signed char)param)&0x0F);
- else param |= mask;
- } else command = 0; break;
- // 0x13: Note Delay
- case 0x13: command = CMD_S3MCMDEX; param = 0xD0|(param & 0x0F); break;
- // 0x14: Note Cut
- case 0x14: command = CMD_S3MCMDEX; param = 0xC0|(param & 0x0F); break;
- // 0x15: Set Tempo
- case 0x15: command = CMD_TEMPO; break;
- // 0x17: Panning
- case 0x17: param = (param+64)&0x7F;
- if (m->command) { if (!m->volcmd) { m->volcmd = VOLCMD_PANNING; m->vol = param/2; } command = 0; }
- else { command = CMD_PANNING8; }
- // Unknown effects
- default: command = param = 0;
- }
- if (command)
- {
- m->command = command;
- m->param = param;
- }
- }
- pTrack += 3;
- }
-}
-
-
-
-BOOL CSoundFile::ReadAMF(LPCBYTE lpStream, const DWORD dwMemLength)
-//-----------------------------------------------------------
-{
- const AMFFILEHEADER *pfh = (AMFFILEHEADER *)lpStream;
- DWORD dwMemPos;
-
- if ((!lpStream) || (dwMemLength < 2048)) return FALSE;
- if ((!strncmp((LPCTSTR)lpStream, "ASYLUM Music Format V1.0", 25)) && (dwMemLength > 4096))
- {
- UINT numorders, numpats, numsamples;
-
- dwMemPos = 32;
- numpats = lpStream[dwMemPos+3];
- numorders = lpStream[dwMemPos+4];
- numsamples = 64;
- dwMemPos += 6;
- if ((!numpats) || (numpats > MAX_PATTERNS) || (!numorders)
- || (numpats*64*32 + 294 + 37*64 >= dwMemLength)) return FALSE;
- m_nType = MOD_TYPE_AMF0;
- m_nChannels = 8;
- m_nInstruments = 0;
- m_nSamples = 31;
- m_nDefaultTempo = 125;
- m_nDefaultSpeed = 6;
- for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++)
- {
- Order[iOrd] = (iOrd < numorders) ? lpStream[dwMemPos+iOrd] : 0xFF;
- }
- dwMemPos = 294; // ???
- for (UINT iSmp=0; iSmp<numsamples; iSmp++)
- {
- MODINSTRUMENT *psmp = &Ins[iSmp+1];
- memcpy(m_szNames[iSmp+1], lpStream+dwMemPos, 22);
- m_szNames[iSmp+1][21] = '\0';
- psmp->nFineTune = MOD2XMFineTune(lpStream[dwMemPos+22]);
- psmp->nVolume = lpStream[dwMemPos+23];
- psmp->nGlobalVol = 64;
- if (psmp->nVolume > 0x40) psmp->nVolume = 0x40;
- psmp->nVolume <<= 2;
- psmp->nLength = bswapLE32(*((LPDWORD)(lpStream+dwMemPos+25)));
- psmp->nLoopStart = bswapLE32(*((LPDWORD)(lpStream+dwMemPos+29)));
- psmp->nLoopEnd = psmp->nLoopStart + bswapLE32(*((LPDWORD)(lpStream+dwMemPos+33)));
- if ((psmp->nLoopEnd > psmp->nLoopStart) && (psmp->nLoopEnd <= psmp->nLength))
- {
- psmp->uFlags = CHN_LOOP;
- } else
- {
- psmp->nLoopStart = psmp->nLoopEnd = 0;
- }
- if ((psmp->nLength) && (iSmp>31)) m_nSamples = iSmp+1;
- dwMemPos += 37;
- }
- for (UINT iPat=0; iPat<numpats; iPat++)
- {
- MODCOMMAND *p = AllocatePattern(64, m_nChannels);
- if (!p) break;
- Patterns[iPat] = p;
- PatternSize[iPat] = 64;
- const UCHAR *pin = lpStream + dwMemPos;
- for (UINT i=0; i<8*64; i++)
- {
- p->note = 0;
-
- if (pin[0])
- {
- p->note = pin[0] + 13;
- }
- p->instr = pin[1];
- p->command = pin[2];
- p->param = pin[3];
- if (p->command > 0x0F)
- {
- #ifdef AMFLOG
- Log("0x%02X.0x%02X ?", p->command, p->param);
- #endif
- p->command = 0;
- }
- ConvertModCommand(p);
- pin += 4;
- p++;
- }
- dwMemPos += 64*32;
- }
- // Read samples
- for (UINT iData=0; iData<m_nSamples; iData++)
- {
- MODINSTRUMENT *psmp = &Ins[iData+1];
- if (psmp->nLength)
- {
- if (dwMemPos > dwMemLength) return FALSE;
- dwMemPos += ReadSample(psmp, RS_PCM8S, (LPCSTR)(lpStream+dwMemPos), dwMemLength-dwMemPos);
- }
- }
- return TRUE;
- }
- ////////////////////////////
- // DSM/AMF
- USHORT *ptracks[MAX_PATTERNS];
- DWORD sampleseekpos[MAX_SAMPLES];
-
- if ((pfh->szAMF[0] != 'A') || (pfh->szAMF[1] != 'M') || (pfh->szAMF[2] != 'F')
- || (pfh->version < 10) || (pfh->version > 14) || (!bswapLE16(pfh->numtracks))
- || (!pfh->numorders) || (pfh->numorders > MAX_PATTERNS)
- || (!pfh->numsamples) || (pfh->numsamples > MAX_SAMPLES)
- || (pfh->numchannels < 4) || (pfh->numchannels > 32))
- return FALSE;
- memcpy(m_szNames[0], pfh->title, 32);
- m_szNames[0][31] = '\0';
- dwMemPos = sizeof(AMFFILEHEADER);
- m_nType = MOD_TYPE_AMF;
- m_nChannels = pfh->numchannels;
- m_nSamples = pfh->numsamples;
- m_nInstruments = 0;
- // Setup Channel Pan Positions
- if (pfh->version >= 11)
- {
- signed char *panpos = (signed char *)(lpStream + dwMemPos);
- UINT nchannels = (pfh->version >= 13) ? 32 : 16;
- for (UINT i=0; i<nchannels; i++)
- {
- int pan = (panpos[i] + 64) * 2;
- if (pan < 0) pan = 0;
- if (pan > 256) { pan = 128; ChnSettings[i].dwFlags |= CHN_SURROUND; }
- ChnSettings[i].nPan = pan;
- }
- dwMemPos += nchannels;
- } else
- {
- for (UINT i=0; i<16; i++)
- {
- ChnSettings[i].nPan = (lpStream[dwMemPos+i] & 1) ? 0x30 : 0xD0;
- }
- dwMemPos += 16;
- }
- // Get Tempo/Speed
- m_nDefaultTempo = 125;
- m_nDefaultSpeed = 6;
- if (pfh->version >= 13)
- {
- if (lpStream[dwMemPos] >= 32) m_nDefaultTempo = lpStream[dwMemPos];
- if (lpStream[dwMemPos+1] <= 32) m_nDefaultSpeed = lpStream[dwMemPos+1];
- dwMemPos += 2;
- }
- // Setup sequence list
- for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++)
- {
- Order[iOrd] = 0xFF;
- if (iOrd < pfh->numorders)
- {
- Order[iOrd] = iOrd;
- PatternSize[iOrd] = 64;
- if (pfh->version >= 14)
- {
- PatternSize[iOrd] = bswapLE16(*(USHORT *)(lpStream+dwMemPos));
- dwMemPos += 2;
- }
- ptracks[iOrd] = (USHORT *)(lpStream+dwMemPos);
- dwMemPos += m_nChannels * sizeof(USHORT);
- }
- }
- if (dwMemPos + m_nSamples * (sizeof(AMFSAMPLE)+8) > dwMemLength) return TRUE;
- // Read Samples
- UINT maxsampleseekpos = 0;
- for (UINT iIns=0; iIns<m_nSamples; iIns++)
- {
- MODINSTRUMENT *pins = &Ins[iIns+1];
- AMFSAMPLE *psh = (AMFSAMPLE *)(lpStream + dwMemPos);
-
- dwMemPos += sizeof(AMFSAMPLE);
- memcpy(m_szNames[iIns+1], psh->samplename, 32);
- m_szNames[iIns+1][31] = '\0';
- memcpy(pins->name, psh->filename, 13);
- pins->name[12] = '\0';
- pins->nLength = bswapLE32(psh->length);
- pins->nC4Speed = bswapLE16(psh->c2spd);
- pins->nGlobalVol = 64;
- pins->nVolume = psh->volume * 4;
- if (pfh->version >= 11)
- {
- pins->nLoopStart = bswapLE32(*(DWORD *)(lpStream+dwMemPos));
- pins->nLoopEnd = bswapLE32(*(DWORD *)(lpStream+dwMemPos+4));
- dwMemPos += 8;
- } else
- {
- pins->nLoopStart = bswapLE16(*(WORD *)(lpStream+dwMemPos));
- pins->nLoopEnd = pins->nLength;
- dwMemPos += 2;
- }
- sampleseekpos[iIns] = 0;
- if ((psh->type) && (bswapLE32(psh->offset) < dwMemLength-1))
- {
- sampleseekpos[iIns] = bswapLE32(psh->offset);
- if (bswapLE32(psh->offset) > maxsampleseekpos)
- maxsampleseekpos = bswapLE32(psh->offset);
- if ((pins->nLoopEnd > pins->nLoopStart + 2)
- && (pins->nLoopEnd <= pins->nLength)) pins->uFlags |= CHN_LOOP;
- }
- }
- // Read Track Mapping Table
- USHORT *pTrackMap = (USHORT *)(lpStream+dwMemPos);
- UINT realtrackcnt = 0;
- dwMemPos += pfh->numtracks * sizeof(USHORT);
- for (UINT iTrkMap=0; iTrkMap<pfh->numtracks; iTrkMap++)
- {
- if (realtrackcnt < pTrackMap[iTrkMap]) realtrackcnt = pTrackMap[iTrkMap];
- }
- // Store tracks positions
- BYTE **pTrackData = new BYTE *[realtrackcnt];
- memset(pTrackData, 0, sizeof(pTrackData));
- for (UINT iTrack=0; iTrack<realtrackcnt; iTrack++) if (dwMemPos + 3 <= dwMemLength)
- {
- UINT nTrkSize = bswapLE16(*(USHORT *)(lpStream+dwMemPos));
- nTrkSize += (UINT)lpStream[dwMemPos+2] << 16;
- if (dwMemPos + nTrkSize * 3 + 3 <= dwMemLength)
- {
- pTrackData[iTrack] = (BYTE *)(lpStream + dwMemPos);
- }
- dwMemPos += nTrkSize * 3 + 3;
- }
- // Create the patterns from the list of tracks
- for (UINT iPat=0; iPat<pfh->numorders; iPat++)
- {
- MODCOMMAND *p = AllocatePattern(PatternSize[iPat], m_nChannels);
- if (!p) break;
- Patterns[iPat] = p;
- for (UINT iChn=0; iChn<m_nChannels; iChn++)
- {
- UINT nTrack = bswapLE16(ptracks[iPat][iChn]);
- if ((nTrack) && (nTrack <= pfh->numtracks))
- {
- UINT realtrk = bswapLE16(pTrackMap[nTrack-1]);
- if (realtrk)
- {
- realtrk--;
- if ((realtrk < realtrackcnt) && (pTrackData[realtrk]))
- {
- AMF_Unpack(p+iChn, pTrackData[realtrk], PatternSize[iPat], m_nChannels);
- }
- }
- }
- }
- }
- delete[] pTrackData;
- // Read Sample Data
- for (UINT iSeek=1; iSeek<=maxsampleseekpos; iSeek++)
- {
- if (dwMemPos >= dwMemLength) break;
- for (UINT iSmp=0; iSmp<m_nSamples; iSmp++) if (iSeek == sampleseekpos[iSmp])
- {
- MODINSTRUMENT *pins = &Ins[iSmp+1];
- dwMemPos += ReadSample(pins, RS_PCM8U, (LPCSTR)(lpStream+dwMemPos), dwMemLength-dwMemPos);
- break;
- }
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_ams.cxx b/src/modplug/load_ams.cxx
deleted file mode 100755
index d67486e..0000000
--- a/src/modplug/load_ams.cxx
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-//////////////////////////////////////////////
-// AMS module loader //
-//////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-#pragma pack(1)
-
-typedef struct AMSFILEHEADER
-{
- char szHeader[7]; // "Extreme" // changed from CHAR
- BYTE verlo, verhi; // 0x??,0x01
- BYTE chncfg;
- BYTE samples;
- WORD patterns;
- WORD orders;
- BYTE vmidi;
- WORD extra;
-} AMSFILEHEADER;
-
-typedef struct AMSSAMPLEHEADER
-{
- DWORD length;
- DWORD loopstart;
- DWORD loopend;
- BYTE finetune_and_pan;
- WORD samplerate; // C-2 = 8363
- BYTE volume; // 0-127
- BYTE infobyte;
-} AMSSAMPLEHEADER;
-
-
-#pragma pack()
-
-
-
-BOOL CSoundFile::ReadAMS(LPCBYTE lpStream, DWORD dwMemLength)
-//-----------------------------------------------------------
-{
- BYTE pkinf[MAX_SAMPLES];
- AMSFILEHEADER *pfh = (AMSFILEHEADER *)lpStream;
- DWORD dwMemPos;
- UINT tmp, tmp2;
-
- if ((!lpStream) || (dwMemLength < 1024)) return FALSE;
- if ((pfh->verhi != 0x01) || (strncmp(pfh->szHeader, "Extreme", 7))
- || (!pfh->patterns) || (!pfh->orders) || (!pfh->samples) || (pfh->samples > MAX_SAMPLES)
- || (pfh->patterns > MAX_PATTERNS) || (pfh->orders > MAX_ORDERS))
- {
- return ReadAMS2(lpStream, dwMemLength);
- }
- dwMemPos = sizeof(AMSFILEHEADER) + pfh->extra;
- if (dwMemPos + pfh->samples * sizeof(AMSSAMPLEHEADER) + 256 >= dwMemLength) return FALSE;
- m_nType = MOD_TYPE_AMS;
- m_nInstruments = 0;
- m_nChannels = (pfh->chncfg & 0x1F) + 1;
- m_nSamples = pfh->samples;
- for (UINT nSmp=1; nSmp<=m_nSamples; nSmp++, dwMemPos += sizeof(AMSSAMPLEHEADER))
- {
- AMSSAMPLEHEADER *psh = (AMSSAMPLEHEADER *)(lpStream + dwMemPos);
- MODINSTRUMENT *pins = &Ins[nSmp];
- pins->nLength = psh->length;
- pins->nLoopStart = psh->loopstart;
- pins->nLoopEnd = psh->loopend;
- pins->nGlobalVol = 64;
- pins->nVolume = psh->volume << 1;
- pins->nC4Speed = psh->samplerate;
- pins->nPan = (psh->finetune_and_pan & 0xF0);
- if (pins->nPan < 0x80) pins->nPan += 0x10;
- pins->nFineTune = MOD2XMFineTune(psh->finetune_and_pan & 0x0F);
- pins->uFlags = (psh->infobyte & 0x80) ? CHN_16BIT : 0;
- if ((pins->nLoopEnd <= pins->nLength) && (pins->nLoopStart+4 <= pins->nLoopEnd)) pins->uFlags |= CHN_LOOP;
- pkinf[nSmp] = psh->infobyte;
- }
- // Read Song Name
- tmp = lpStream[dwMemPos++];
- if (dwMemPos + tmp + 1 >= dwMemLength) return TRUE;
- tmp2 = (tmp < 32) ? tmp : 31;
- if (tmp2) memcpy(m_szNames[0], lpStream+dwMemPos, tmp2);
- m_szNames[0][tmp2] = 0;
- dwMemPos += tmp;
- // Read sample names
- for (UINT sNam=1; sNam<=m_nSamples; sNam++)
- {
- if (dwMemPos + 32 >= dwMemLength) return TRUE;
- tmp = lpStream[dwMemPos++];
- tmp2 = (tmp < 32) ? tmp : 31;
- if (tmp2) memcpy(m_szNames[sNam], lpStream+dwMemPos, tmp2);
- dwMemPos += tmp;
- }
- // Skip Channel names
- for (UINT cNam=0; cNam<m_nChannels; cNam++)
- {
- if (dwMemPos + 32 >= dwMemLength) return TRUE;
- tmp = lpStream[dwMemPos++];
- dwMemPos += tmp;
- }
- // Read Pattern Names
- m_lpszPatternNames = new char[pfh->patterns * 32]; // changed from CHAR
- if (!m_lpszPatternNames) return TRUE;
- m_nPatternNames = pfh->patterns;
- memset(m_lpszPatternNames, 0, m_nPatternNames * 32);
- for (UINT pNam=0; pNam < m_nPatternNames; pNam++)
- {
- if (dwMemPos + 32 >= dwMemLength) return TRUE;
- tmp = lpStream[dwMemPos++];
- tmp2 = (tmp < 32) ? tmp : 31;
- if (tmp2) memcpy(m_lpszPatternNames+pNam*32, lpStream+dwMemPos, tmp2);
- dwMemPos += tmp;
- }
- // Read Song Comments
- tmp = *((WORD *)(lpStream+dwMemPos));
- dwMemPos += 2;
- if (dwMemPos + tmp >= dwMemLength) return TRUE;
- if (tmp)
- {
- m_lpszSongComments = new char[tmp+1]; // changed from CHAR
- if (!m_lpszSongComments) return TRUE;
- memset(m_lpszSongComments, 0, tmp+1);
- memcpy(m_lpszSongComments, lpStream + dwMemPos, tmp);
- dwMemPos += tmp;
- }
- // Read Order List
- for (UINT iOrd=0; iOrd<pfh->orders; iOrd++, dwMemPos += 2)
- {
- UINT n = *((WORD *)(lpStream+dwMemPos));
- Order[iOrd] = (BYTE)n;
- }
- // Read Patterns
- for (UINT iPat=0; iPat<pfh->patterns; iPat++)
- {
- if (dwMemPos + 4 >= dwMemLength) return TRUE;
- UINT len = *((DWORD *)(lpStream + dwMemPos));
- dwMemPos += 4;
- if ((len >= dwMemLength) || (dwMemPos + len > dwMemLength)) return TRUE;
- PatternSize[iPat] = 64;
- PatternAllocSize[iPat] = 64;
- MODCOMMAND *m = AllocatePattern(PatternSize[iPat], m_nChannels);
- if (!m) return TRUE;
- Patterns[iPat] = m;
- const BYTE *p = lpStream + dwMemPos;
- UINT row = 0, i = 0;
- while ((row < PatternSize[iPat]) && (i+2 < len))
- {
- BYTE b0 = p[i++];
- BYTE b1 = p[i++];
- BYTE b2 = 0;
- UINT ch = b0 & 0x3F;
- // Note+Instr
- if (!(b0 & 0x40))
- {
- b2 = p[i++];
- if (ch < m_nChannels)
- {
- if (b1 & 0x7F) m[ch].note = (b1 & 0x7F) + 25;
- m[ch].instr = b2;
- }
- if (b1 & 0x80)
- {
- b0 |= 0x40;
- b1 = p[i++];
- }
- }
- // Effect
- if (b0 & 0x40)
- {
- anothercommand:
- if (b1 & 0x40)
- {
- if (ch < m_nChannels)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = b1 & 0x3F;
- }
- } else
- {
- b2 = p[i++];
- if (ch < m_nChannels)
- {
- UINT cmd = b1 & 0x3F;
- if (cmd == 0x0C)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = b2 >> 1;
- } else
- if (cmd == 0x0E)
- {
- if (!m[ch].command)
- {
- UINT command = CMD_S3MCMDEX;
- UINT param = b2;
- switch(param & 0xF0)
- {
- case 0x00: if (param & 0x08) { param &= 0x07; param |= 0x90; } else {command=param=0;} break;
- case 0x10: command = CMD_PORTAMENTOUP; param |= 0xF0; break;
- case 0x20: command = CMD_PORTAMENTODOWN; param |= 0xF0; break;
- case 0x30: param = (param & 0x0F) | 0x10; break;
- case 0x40: param = (param & 0x0F) | 0x30; break;
- case 0x50: param = (param & 0x0F) | 0x20; break;
- case 0x60: param = (param & 0x0F) | 0xB0; break;
- case 0x70: param = (param & 0x0F) | 0x40; break;
- case 0x90: command = CMD_RETRIG; param &= 0x0F; break;
- case 0xA0: if (param & 0x0F) { command = CMD_VOLUMESLIDE; param = (param << 4) | 0x0F; } else command=param=0; break;
- case 0xB0: if (param & 0x0F) { command = CMD_VOLUMESLIDE; param |= 0xF0; } else command=param=0; break;
- }
- m[ch].command = command;
- m[ch].param = param;
- }
- } else
- {
- m[ch].command = cmd;
- m[ch].param = b2;
- ConvertModCommand(&m[ch]);
- }
- }
- }
- if (b1 & 0x80)
- {
- b1 = p[i++];
- if (i <= len) goto anothercommand;
- }
- }
- if (b0 & 0x80)
- {
- row++;
- m += m_nChannels;
- }
- }
- dwMemPos += len;
- }
- // Read Samples
- for (UINT iSmp=1; iSmp<=m_nSamples; iSmp++) if (Ins[iSmp].nLength)
- {
- if (dwMemPos >= dwMemLength - 9) return TRUE;
- UINT flags = (Ins[iSmp].uFlags & CHN_16BIT) ? RS_AMS16 : RS_AMS8;
- dwMemPos += ReadSample(&Ins[iSmp], flags, (LPSTR)(lpStream+dwMemPos), dwMemLength-dwMemPos);
- }
- return TRUE;
-}
-
-
-/////////////////////////////////////////////////////////////////////
-// AMS 2.2 loader
-
-#pragma pack(1)
-
-typedef struct AMS2FILEHEADER
-{
- DWORD dwHdr1; // AMShdr
- WORD wHdr2;
- BYTE b1A; // 0x1A
- BYTE titlelen; // 30-bytes max
- CHAR szTitle[30]; // [titlelen]
-} AMS2FILEHEADER;
-
-typedef struct AMS2SONGHEADER
-{
- WORD version;
- BYTE instruments;
- WORD patterns;
- WORD orders;
- WORD bpm;
- BYTE speed;
- BYTE channels;
- BYTE commands;
- BYTE rows;
- WORD flags;
-} AMS2SONGHEADER;
-
-typedef struct AMS2INSTRUMENT
-{
- BYTE samples;
- BYTE notemap[120];
-} AMS2INSTRUMENT;
-
-typedef struct AMS2ENVELOPE
-{
- BYTE speed;
- BYTE sustain;
- BYTE loopbegin;
- BYTE loopend;
- BYTE points;
- BYTE info[3];
-} AMS2ENVELOPE;
-
-typedef struct AMS2SAMPLE
-{
- DWORD length;
- DWORD loopstart;
- DWORD loopend;
- WORD frequency;
- BYTE finetune;
- WORD c4speed;
- CHAR transpose;
- BYTE volume;
- BYTE flags;
-} AMS2SAMPLE;
-
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadAMS2(LPCBYTE lpStream, DWORD dwMemLength)
-//------------------------------------------------------------
-{
- AMS2FILEHEADER *pfh = (AMS2FILEHEADER *)lpStream;
- AMS2SONGHEADER *psh;
- DWORD dwMemPos;
- BYTE smpmap[16];
- BYTE packedsamples[MAX_SAMPLES];
-
- if ((pfh->dwHdr1 != 0x68534D41) || (pfh->wHdr2 != 0x7264)
- || (pfh->b1A != 0x1A) || (pfh->titlelen > 30)) return FALSE;
- dwMemPos = pfh->titlelen + 8;
- psh = (AMS2SONGHEADER *)(lpStream + dwMemPos);
- if (((psh->version & 0xFF00) != 0x0200) || (!psh->instruments)
- || (psh->instruments > MAX_INSTRUMENTS) || (!psh->patterns) || (!psh->orders)) return FALSE;
- dwMemPos += sizeof(AMS2SONGHEADER);
- if (pfh->titlelen)
- {
- memcpy(m_szNames, pfh->szTitle, pfh->titlelen);
- m_szNames[0][pfh->titlelen] = 0;
- }
- m_nType = MOD_TYPE_AMS;
- m_nChannels = 32;
- m_nDefaultTempo = psh->bpm >> 8;
- m_nDefaultSpeed = psh->speed;
- m_nInstruments = psh->instruments;
- m_nSamples = 0;
- m_dwSongFlags |= SONG_INSTRUMENTMODE;
- if (psh->flags & 0x40) m_dwSongFlags |= SONG_LINEARSLIDES;
- for (UINT nIns=1; nIns<=m_nInstruments; nIns++)
- {
- UINT insnamelen = lpStream[dwMemPos];
- CHAR *pinsname = (CHAR *)(lpStream+dwMemPos+1);
- dwMemPos += insnamelen + 1;
- AMS2INSTRUMENT *pins = (AMS2INSTRUMENT *)(lpStream + dwMemPos);
- dwMemPos += sizeof(AMS2INSTRUMENT);
- if (dwMemPos + 1024 >= dwMemLength) return TRUE;
- AMS2ENVELOPE *volenv, *panenv, *pitchenv;
- volenv = (AMS2ENVELOPE *)(lpStream+dwMemPos);
- dwMemPos += 5 + volenv->points*3;
- panenv = (AMS2ENVELOPE *)(lpStream+dwMemPos);
- dwMemPos += 5 + panenv->points*3;
- pitchenv = (AMS2ENVELOPE *)(lpStream+dwMemPos);
- dwMemPos += 5 + pitchenv->points*3;
- INSTRUMENTHEADER *penv = new INSTRUMENTHEADER;
- if (!penv) return TRUE;
- memset(smpmap, 0, sizeof(smpmap));
- memset(penv, 0, sizeof(INSTRUMENTHEADER));
- for (UINT ismpmap=0; ismpmap<pins->samples; ismpmap++)
- {
- if ((ismpmap >= 16) || (m_nSamples+1 >= MAX_SAMPLES)) break;
- m_nSamples++;
- smpmap[ismpmap] = m_nSamples;
- }
- penv->nGlobalVol = 64;
- penv->nPan = 128;
- penv->nPPC = 60;
- Headers[nIns] = penv;
- if (insnamelen)
- {
- if (insnamelen > 31) insnamelen = 31;
- memcpy(penv->name, pinsname, insnamelen);
- penv->name[insnamelen] = 0;
- }
- for (UINT inotemap=0; inotemap<120; inotemap++)
- {
- penv->NoteMap[inotemap] = inotemap+1;
- penv->Keyboard[inotemap] = smpmap[pins->notemap[inotemap] & 0x0F];
- }
- // Volume Envelope
- {
- UINT pos = 0;
- penv->VolEnv.nNodes = (volenv->points > 16) ? 16 : volenv->points;
- penv->VolEnv.nSustainStart = penv->VolEnv.nSustainEnd = volenv->sustain;
- penv->VolEnv.nLoopStart = volenv->loopbegin;
- penv->VolEnv.nLoopEnd = volenv->loopend;
- for (int i=0; i<penv->VolEnv.nNodes; i++)
- {
- penv->VolEnv.Values[i] = (BYTE)((volenv->info[i*3+2] & 0x7F) >> 1);
- pos += volenv->info[i*3] + ((volenv->info[i*3+1] & 1) << 8);
- penv->VolEnv.Ticks[i] = (WORD)pos;
- }
- }
- penv->nFadeOut = (((lpStream[dwMemPos+2] & 0x0F) << 8) | (lpStream[dwMemPos+1])) << 3;
- UINT envflags = lpStream[dwMemPos+3];
- if (envflags & 0x01) penv->dwFlags |= ENV_VOLLOOP;
- if (envflags & 0x02) penv->dwFlags |= ENV_VOLSUSTAIN;
- if (envflags & 0x04) penv->dwFlags |= ENV_VOLUME;
- dwMemPos += 5;
- // Read Samples
- for (UINT ismp=0; ismp<pins->samples; ismp++)
- {
- MODINSTRUMENT *psmp = ((ismp < 16) && (smpmap[ismp])) ? &Ins[smpmap[ismp]] : NULL;
- UINT smpnamelen = lpStream[dwMemPos];
- if ((psmp) && (smpnamelen) && (smpnamelen <= 22))
- {
- memcpy(m_szNames[smpmap[ismp]], lpStream+dwMemPos+1, smpnamelen);
- }
- dwMemPos += smpnamelen + 1;
- if (psmp)
- {
- AMS2SAMPLE *pams = (AMS2SAMPLE *)(lpStream+dwMemPos);
- psmp->nGlobalVol = 64;
- psmp->nPan = 128;
- psmp->nLength = pams->length;
- psmp->nLoopStart = pams->loopstart;
- psmp->nLoopEnd = pams->loopend;
- psmp->nC4Speed = pams->c4speed;
- psmp->RelativeTone = pams->transpose;
- psmp->nVolume = pams->volume / 2;
- packedsamples[smpmap[ismp]] = pams->flags;
- if (pams->flags & 0x04) psmp->uFlags |= CHN_16BIT;
- if (pams->flags & 0x08) psmp->uFlags |= CHN_LOOP;
- if (pams->flags & 0x10) psmp->uFlags |= CHN_PINGPONGLOOP;
- }
- dwMemPos += sizeof(AMS2SAMPLE);
- }
- }
- if (dwMemPos + 256 >= dwMemLength) return TRUE;
- // Comments
- {
- UINT composernamelen = lpStream[dwMemPos];
- if (composernamelen)
- {
- m_lpszSongComments = new char[composernamelen+1]; // changed from CHAR
- if (m_lpszSongComments)
- {
- memcpy(m_lpszSongComments, lpStream+dwMemPos+1, composernamelen);
- m_lpszSongComments[composernamelen] = 0;
- }
- }
- dwMemPos += composernamelen + 1;
- // channel names
- for (UINT i=0; i<32; i++)
- {
- UINT chnnamlen = lpStream[dwMemPos];
- if ((chnnamlen) && (chnnamlen < MAX_CHANNELNAME))
- {
- memcpy(ChnSettings[i].szName, lpStream+dwMemPos+1, chnnamlen);
- }
- dwMemPos += chnnamlen + 1;
- if (dwMemPos + chnnamlen + 256 >= dwMemLength) return TRUE;
- }
- // packed comments (ignored)
- UINT songtextlen = *((LPDWORD)(lpStream+dwMemPos));
- dwMemPos += songtextlen;
- if (dwMemPos + 256 >= dwMemLength) return TRUE;
- }
- // Order List
- {
- for (UINT i=0; i<MAX_ORDERS; i++)
- {
- Order[i] = 0xFF;
- if (dwMemPos + 2 >= dwMemLength) return TRUE;
- if (i < psh->orders)
- {
- Order[i] = lpStream[dwMemPos];
- dwMemPos += 2;
- }
- }
- }
- // Pattern Data
- for (UINT ipat=0; ipat<psh->patterns; ipat++)
- {
- if (dwMemPos+8 >= dwMemLength) return TRUE;
- UINT packedlen = *((LPDWORD)(lpStream+dwMemPos));
- UINT numrows = 1 + (UINT)(lpStream[dwMemPos+4]);
- //UINT patchn = 1 + (UINT)(lpStream[dwMemPos+5] & 0x1F);
- //UINT patcmds = 1 + (UINT)(lpStream[dwMemPos+5] >> 5);
- UINT patnamlen = lpStream[dwMemPos+6];
- dwMemPos += 4;
- if ((ipat < MAX_PATTERNS) && (packedlen < dwMemLength-dwMemPos) && (numrows >= 8))
- {
- if ((patnamlen) && (patnamlen < MAX_PATTERNNAME))
- {
- char s[MAX_PATTERNNAME]; // changed from CHAR
- memcpy(s, lpStream+dwMemPos+3, patnamlen);
- s[patnamlen] = 0;
- SetPatternName(ipat, s);
- }
- PatternSize[ipat] = numrows;
- PatternAllocSize[ipat] = numrows;
- Patterns[ipat] = AllocatePattern(numrows, m_nChannels);
- if (!Patterns[ipat]) return TRUE;
- // Unpack Pattern Data
- LPCBYTE psrc = lpStream + dwMemPos;
- UINT pos = 3 + patnamlen;
- UINT row = 0;
- while ((pos < packedlen) && (row < numrows))
- {
- MODCOMMAND *m = Patterns[ipat] + row * m_nChannels;
- UINT byte1 = psrc[pos++];
- UINT ch = byte1 & 0x1F;
- // Read Note + Instr
- if (!(byte1 & 0x40))
- {
- UINT byte2 = psrc[pos++];
- UINT note = byte2 & 0x7F;
- if (note) m[ch].note = (note > 1) ? (note-1) : 0xFF;
- m[ch].instr = psrc[pos++];
- // Read Effect
- while (byte2 & 0x80)
- {
- byte2 = psrc[pos++];
- if (byte2 & 0x40)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = byte2 & 0x3F;
- } else
- {
- UINT command = byte2 & 0x3F;
- UINT param = psrc[pos++];
- if (command == 0x0C)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = param / 2;
- } else
- if (command < 0x10)
- {
- m[ch].command = command;
- m[ch].param = param;
- ConvertModCommand(&m[ch]);
- } else
- {
- // TODO: AMS effects
- }
- }
- }
- }
- if (byte1 & 0x80) row++;
- }
- }
- dwMemPos += packedlen;
- }
- // Read Samples
- for (UINT iSmp=1; iSmp<=m_nSamples; iSmp++) if (Ins[iSmp].nLength)
- {
- if (dwMemPos >= dwMemLength - 9) return TRUE;
- UINT flags;
- if (packedsamples[iSmp] & 0x03)
- {
- flags = (Ins[iSmp].uFlags & CHN_16BIT) ? RS_AMS16 : RS_AMS8;
- } else
- {
- flags = (Ins[iSmp].uFlags & CHN_16BIT) ? RS_PCM16S : RS_PCM8S;
- }
- dwMemPos += ReadSample(&Ins[iSmp], flags, (LPSTR)(lpStream+dwMemPos), dwMemLength-dwMemPos);
- }
- return TRUE;
-}
-
-
-/////////////////////////////////////////////////////////////////////
-// AMS Sample unpacking
-
-void AMSUnpack(const char *psrc, UINT inputlen, char *pdest, UINT dmax, char packcharacter)
-{
- UINT tmplen = dmax;
- signed char *amstmp = new signed char[tmplen];
-
- if (!amstmp) return;
- // Unpack Loop
- {
- signed char *p = amstmp;
- UINT i=0, j=0;
- while ((i < inputlen) && (j < tmplen))
- {
- signed char ch = psrc[i++];
- if (ch == packcharacter)
- {
- BYTE ch2 = psrc[i++];
- if (ch2)
- {
- ch = psrc[i++];
- while (ch2--)
- {
- p[j++] = ch;
- if (j >= tmplen) break;
- }
- } else p[j++] = packcharacter;
- } else p[j++] = ch;
- }
- }
- // Bit Unpack Loop
- {
- signed char *p = amstmp;
- UINT bitcount = 0x80, dh;
- UINT k=0;
- for (UINT i=0; i<dmax; i++)
- {
- BYTE al = *p++;
- dh = 0;
- for (UINT count=0; count<8; count++)
- {
- UINT bl = al & bitcount;
- bl = ((bl|(bl<<8)) >> ((dh+8-count) & 7)) & 0xFF;
- bitcount = ((bitcount|(bitcount<<8)) >> 1) & 0xFF;
- pdest[k++] |= bl;
- if (k >= dmax)
- {
- k = 0;
- dh++;
- }
- }
- bitcount = ((bitcount|(bitcount<<8)) >> dh) & 0xFF;
- }
- }
- // Delta Unpack
- {
- signed char old = 0;
- for (UINT i=0; i<dmax; i++)
- {
- int pos = ((LPBYTE)pdest)[i];
- if ((pos != 128) && (pos & 0x80)) pos = -(pos & 0x7F);
- old -= (signed char)pos;
- pdest[i] = old;
- }
- }
- delete amstmp;
-}
-
diff --git a/src/modplug/load_dbm.cxx b/src/modplug/load_dbm.cxx
deleted file mode 100755
index 6477351..0000000
--- a/src/modplug/load_dbm.cxx
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-///////////////////////////////////////////////////////////////
-//
-// DigiBooster Pro Module Loader (*.dbm)
-//
-// Note: this loader doesn't handle multiple songs
-//
-///////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-#define DBM_FILE_MAGIC 0x304d4244
-#define DBM_ID_NAME 0x454d414e
-#define DBM_NAMELEN 0x2c000000
-#define DBM_ID_INFO 0x4f464e49
-#define DBM_INFOLEN 0x0a000000
-#define DBM_ID_SONG 0x474e4f53
-#define DBM_ID_INST 0x54534e49
-#define DBM_ID_VENV 0x564e4556
-#define DBM_ID_PATT 0x54544150
-#define DBM_ID_SMPL 0x4c504d53
-
-#pragma pack(1)
-
-typedef struct DBMFILEHEADER
-{
- DWORD dbm_id; // "DBM0" = 0x304d4244
- WORD trkver; // Tracker version: 02.15
- WORD reserved;
- DWORD name_id; // "NAME" = 0x454d414e
- DWORD name_len; // name length: always 44
- CHAR songname[44];
- DWORD info_id; // "INFO" = 0x4f464e49
- DWORD info_len; // 0x0a000000
- WORD instruments;
- WORD samples;
- WORD songs;
- WORD patterns;
- WORD channels;
- DWORD song_id; // "SONG" = 0x474e4f53
- DWORD song_len;
- CHAR songname2[44];
- WORD orders;
-// WORD orderlist[0]; // orderlist[orders] in words
-} DBMFILEHEADER;
-
-typedef struct DBMINSTRUMENT
-{
- CHAR name[30];
- WORD sampleno;
- WORD volume;
- DWORD finetune;
- DWORD loopstart;
- DWORD looplen;
- WORD panning;
- WORD flags;
-} DBMINSTRUMENT;
-
-typedef struct DBMENVELOPE
-{
- WORD instrument;
- BYTE flags;
- BYTE numpoints;
- BYTE sustain1;
- BYTE loopbegin;
- BYTE loopend;
- BYTE sustain2;
- WORD volenv[2*32];
-} DBMENVELOPE;
-
-typedef struct DBMPATTERN
-{
- WORD rows;
- DWORD packedsize;
- BYTE patterndata[2]; // [packedsize]
-} DBMPATTERN;
-
-typedef struct DBMSAMPLE
-{
- DWORD flags;
- DWORD samplesize;
- BYTE sampledata[2]; // [samplesize]
-} DBMSAMPLE;
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadDBM(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- DBMFILEHEADER *pfh = (DBMFILEHEADER *)lpStream;
- DWORD dwMemPos;
- UINT nOrders, nSamples, nInstruments, nPatterns;
-
- if ((!lpStream) || (dwMemLength <= sizeof(DBMFILEHEADER)) || (!pfh->channels)
- || (pfh->dbm_id != DBM_FILE_MAGIC) || (!pfh->songs) || (pfh->song_id != DBM_ID_SONG)
- || (pfh->name_id != DBM_ID_NAME) || (pfh->name_len != DBM_NAMELEN)
- || (pfh->info_id != DBM_ID_INFO) || (pfh->info_len != DBM_INFOLEN)) return FALSE;
- dwMemPos = sizeof(DBMFILEHEADER);
- nOrders = bswapBE16(pfh->orders);
- if (dwMemPos + 2 * nOrders + 8*3 >= dwMemLength) return FALSE;
- nInstruments = bswapBE16(pfh->instruments);
- nSamples = bswapBE16(pfh->samples);
- nPatterns = bswapBE16(pfh->patterns);
- m_nType = MOD_TYPE_DBM;
- m_nChannels = bswapBE16(pfh->channels);
- if (m_nChannels < 4) m_nChannels = 4;
- if (m_nChannels > 64) m_nChannels = 64;
- memcpy(m_szNames[0], (pfh->songname[0]) ? pfh->songname : pfh->songname2, 32);
- m_szNames[0][31] = 0;
- for (UINT iOrd=0; iOrd < nOrders; iOrd++)
- {
- Order[iOrd] = lpStream[dwMemPos+iOrd*2+1];
- if (iOrd >= MAX_ORDERS-2) break;
- }
- dwMemPos += 2*nOrders;
- while (dwMemPos + 10 < dwMemLength)
- {
- DWORD chunk_id = ((LPDWORD)(lpStream+dwMemPos))[0];
- DWORD chunk_size = bswapBE32(((LPDWORD)(lpStream+dwMemPos))[1]);
- DWORD chunk_pos;
-
- dwMemPos += 8;
- chunk_pos = dwMemPos;
- if ((dwMemPos + chunk_size > dwMemLength) || (chunk_size > dwMemLength)) break;
- dwMemPos += chunk_size;
- // Instruments
- if (chunk_id == DBM_ID_INST)
- {
- if (nInstruments >= MAX_INSTRUMENTS) nInstruments = MAX_INSTRUMENTS-1;
- for (UINT iIns=0; iIns<nInstruments; iIns++)
- {
- MODINSTRUMENT *psmp;
- INSTRUMENTHEADER *penv;
- DBMINSTRUMENT *pih;
- UINT nsmp;
-
- if (chunk_pos + sizeof(DBMINSTRUMENT) > dwMemPos) break;
- if ((penv = new INSTRUMENTHEADER) == NULL) break;
- pih = (DBMINSTRUMENT *)(lpStream+chunk_pos);
- nsmp = bswapBE16(pih->sampleno);
- psmp = ((nsmp) && (nsmp < MAX_SAMPLES)) ? &Ins[nsmp] : NULL;
- memset(penv, 0, sizeof(INSTRUMENTHEADER));
- memcpy(penv->name, pih->name, 30);
- if (psmp)
- {
- memcpy(m_szNames[nsmp], pih->name, 30);
- m_szNames[nsmp][30] = 0;
- }
- Headers[iIns+1] = penv;
- penv->nFadeOut = 1024; // ???
- penv->nGlobalVol = 128;
- penv->nPan = bswapBE16(pih->panning);
- if ((penv->nPan) && (penv->nPan < 256))
- penv->dwFlags = ENV_SETPANNING;
- else
- penv->nPan = 128;
- penv->nPPC = 5*12;
- for (UINT i=0; i<120; i++)
- {
- penv->Keyboard[i] = nsmp;
- penv->NoteMap[i] = i+1;
- }
- // Sample Info
- if (psmp)
- {
- DWORD sflags = bswapBE16(pih->flags);
- psmp->nVolume = bswapBE16(pih->volume) * 4;
- if ((!psmp->nVolume) || (psmp->nVolume > 256)) psmp->nVolume = 256;
- psmp->nGlobalVol = 64;
- psmp->nC4Speed = bswapBE32(pih->finetune);
- int f2t = FrequencyToTranspose(psmp->nC4Speed);
- psmp->RelativeTone = f2t >> 7;
- psmp->nFineTune = f2t & 0x7F;
- if ((pih->looplen) && (sflags & 3))
- {
- psmp->nLoopStart = bswapBE32(pih->loopstart);
- psmp->nLoopEnd = psmp->nLoopStart + bswapBE32(pih->looplen);
- psmp->uFlags |= CHN_LOOP;
- psmp->uFlags &= ~CHN_PINGPONGLOOP;
- if (sflags & 2) psmp->uFlags |= CHN_PINGPONGLOOP;
- }
- }
- chunk_pos += sizeof(DBMINSTRUMENT);
- m_nInstruments = iIns+1;
- }
- m_dwSongFlags |= SONG_INSTRUMENTMODE;
- } else
- // Volume Envelopes
- if (chunk_id == DBM_ID_VENV)
- {
- UINT nEnvelopes = lpStream[chunk_pos+1];
-
- chunk_pos += 2;
- for (UINT iEnv=0; iEnv<nEnvelopes; iEnv++)
- {
- DBMENVELOPE *peh;
- UINT nins;
-
- if (chunk_pos + sizeof(DBMENVELOPE) > dwMemPos) break;
- peh = (DBMENVELOPE *)(lpStream+chunk_pos);
- nins = bswapBE16(peh->instrument);
- if ((nins) && (nins < MAX_INSTRUMENTS) && (Headers[nins]) && (peh->numpoints))
- {
- INSTRUMENTHEADER *penv = Headers[nins];
-
- if (peh->flags & 1) penv->dwFlags |= ENV_VOLUME;
- if (peh->flags & 2) penv->dwFlags |= ENV_VOLSUSTAIN;
- if (peh->flags & 4) penv->dwFlags |= ENV_VOLLOOP;
- penv->VolEnv.nNodes = peh->numpoints + 1;
- if (penv->VolEnv.nNodes > MAX_ENVPOINTS) penv->VolEnv.nNodes = MAX_ENVPOINTS;
- penv->VolEnv.nLoopStart = peh->loopbegin;
- penv->VolEnv.nLoopEnd = peh->loopend;
- penv->VolEnv.nSustainStart = penv->VolEnv.nSustainEnd = peh->sustain1;
- for (int i=0; i<penv->VolEnv.nNodes; i++)
- {
- penv->VolEnv.Ticks[i] = bswapBE16(peh->volenv[i*2]);
- penv->VolEnv.Values[i] = (BYTE)bswapBE16(peh->volenv[i*2+1]);
- }
- }
- chunk_pos += sizeof(DBMENVELOPE);
- }
- } else
- // Packed Pattern Data
- if (chunk_id == DBM_ID_PATT)
- {
- if (nPatterns > MAX_PATTERNS) nPatterns = MAX_PATTERNS;
- for (UINT iPat=0; iPat<nPatterns; iPat++)
- {
- DBMPATTERN *pph;
- DWORD pksize;
- UINT nRows;
-
- if (chunk_pos + sizeof(DBMPATTERN) > dwMemPos) break;
- pph = (DBMPATTERN *)(lpStream+chunk_pos);
- pksize = bswapBE32(pph->packedsize);
- if ((chunk_pos + pksize + 6 > dwMemPos) || (pksize > dwMemPos)) break;
- nRows = bswapBE16(pph->rows);
- if ((nRows >= 4) && (nRows <= 256))
- {
- MODCOMMAND *m = AllocatePattern(nRows, m_nChannels);
- if (m)
- {
- LPBYTE pkdata = (LPBYTE)&pph->patterndata;
- UINT row = 0;
- UINT i = 0;
-
- PatternSize[iPat] = nRows;
- PatternAllocSize[iPat] = nRows;
- Patterns[iPat] = m;
- while ((i+3<pksize) && (row < nRows))
- {
- UINT ch = pkdata[i++];
-
- if (ch)
- {
- BYTE b = pkdata[i++];
- ch--;
- if (ch < m_nChannels)
- {
- if (b & 0x01)
- {
- UINT note = pkdata[i++];
-
- if (note == 0x1F) note = 0xFF; else
- if ((note) && (note < 0xFE))
- {
- note = ((note >> 4)*12) + (note & 0x0F) + 13;
- }
- m[ch].note = note;
- }
- if (b & 0x02) m[ch].instr = pkdata[i++];
- if (b & 0x3C)
- {
- UINT cmd1 = 0xFF, param1 = 0, cmd2 = 0xFF, param2 = 0;
- if (b & 0x04) cmd1 = (UINT)pkdata[i++];
- if (b & 0x08) param1 = pkdata[i++];
- if (b & 0x10) cmd2 = (UINT)pkdata[i++];
- if (b & 0x20) param2 = pkdata[i++];
- if (cmd1 == 0x0C)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = param1;
- cmd1 = 0xFF;
- } else
- if (cmd2 == 0x0C)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = param2;
- cmd2 = 0xFF;
- }
- if ((cmd1 > 0x13) || ((cmd1 >= 0x10) && (cmd2 < 0x10)))
- {
- cmd1 = cmd2;
- param1 = param2;
- cmd2 = 0xFF;
- }
- if (cmd1 <= 0x13)
- {
- m[ch].command = cmd1;
- m[ch].param = param1;
- ConvertModCommand(&m[ch]);
- }
- }
- } else
- {
- if (b & 0x01) i++;
- if (b & 0x02) i++;
- if (b & 0x04) i++;
- if (b & 0x08) i++;
- if (b & 0x10) i++;
- if (b & 0x20) i++;
- }
- } else
- {
- row++;
- m += m_nChannels;
- }
- }
- }
- }
- chunk_pos += 6 + pksize;
- }
- } else
- // Reading Sample Data
- if (chunk_id == DBM_ID_SMPL)
- {
- if (nSamples >= MAX_SAMPLES) nSamples = MAX_SAMPLES-1;
- m_nSamples = nSamples;
- for (UINT iSmp=1; iSmp<=nSamples; iSmp++)
- {
- MODINSTRUMENT *pins;
- DBMSAMPLE *psh;
- DWORD samplesize;
- DWORD sampleflags;
-
- if (chunk_pos + sizeof(DBMSAMPLE) >= dwMemPos) break;
- psh = (DBMSAMPLE *)(lpStream+chunk_pos);
- chunk_pos += 8;
- samplesize = bswapBE32(psh->samplesize);
- sampleflags = bswapBE32(psh->flags);
- pins = &Ins[iSmp];
- pins->nLength = samplesize;
- if (sampleflags & 2)
- {
- pins->uFlags |= CHN_16BIT;
- samplesize <<= 1;
- }
- if ((chunk_pos+samplesize > dwMemPos) || (samplesize > dwMemLength)) break;
- if (sampleflags & 3)
- {
- ReadSample(pins, (pins->uFlags & CHN_16BIT) ? RS_PCM16M : RS_PCM8S,
- (LPSTR)(psh->sampledata), samplesize);
- }
- chunk_pos += samplesize;
- }
- }
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_dmf.cxx b/src/modplug/load_dmf.cxx
deleted file mode 100755
index fbcdb8f..0000000
--- a/src/modplug/load_dmf.cxx
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-///////////////////////////////////////////////////////
-// DMF DELUSION DIGITAL MUSIC FILEFORMAT (X-Tracker) //
-///////////////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#define DMFLOG
-
-//#pragma warning(disable:4244)
-
-#pragma pack(1)
-
-typedef struct DMFHEADER
-{
- DWORD id; // "DDMF" = 0x464d4444
- BYTE version; // 4
- CHAR trackername[8]; // "XTRACKER"
- CHAR songname[30];
- CHAR composer[20];
- BYTE date[3];
-} DMFHEADER;
-
-typedef struct DMFINFO
-{
- DWORD id; // "INFO"
- DWORD infosize;
-} DMFINFO;
-
-typedef struct DMFSEQU
-{
- DWORD id; // "SEQU"
- DWORD seqsize;
- WORD loopstart;
- WORD loopend;
- WORD sequ[2];
-} DMFSEQU;
-
-typedef struct DMFPATT
-{
- DWORD id; // "PATT"
- DWORD patsize;
- WORD numpat; // 1-1024
- BYTE tracks;
- BYTE firstpatinfo;
-} DMFPATT;
-
-typedef struct DMFTRACK
-{
- BYTE tracks;
- BYTE beat; // [hi|lo] -> hi=ticks per beat, lo=beats per measure
- WORD ticks; // max 512
- DWORD jmpsize;
-} DMFTRACK;
-
-typedef struct DMFSMPI
-{
- DWORD id;
- DWORD size;
- BYTE samples;
-} DMFSMPI;
-
-typedef struct DMFSAMPLE
-{
- DWORD len;
- DWORD loopstart;
- DWORD loopend;
- WORD c3speed;
- BYTE volume;
- BYTE flags;
-} DMFSAMPLE;
-
-#pragma pack()
-
-
-#ifdef DMFLOG
-extern void Log(LPCSTR s, ...);
-#endif
-
-
-BOOL CSoundFile::ReadDMF(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- DMFHEADER *pfh = (DMFHEADER *)lpStream;
- DMFINFO *psi;
- DMFSEQU *sequ;
- DWORD dwMemPos;
- BYTE infobyte[32];
- BYTE smplflags[MAX_SAMPLES];
-
- if ((!lpStream) || (dwMemLength < 1024)) return FALSE;
- if ((pfh->id != 0x464d4444) || (!pfh->version) || (pfh->version & 0xF0)) return FALSE;
- dwMemPos = 66;
- memcpy(m_szNames[0], pfh->songname, 30);
- m_szNames[0][30] = 0;
- m_nType = MOD_TYPE_DMF;
- m_nChannels = 0;
-#ifdef DMFLOG
- Log("DMF version %d: \"%s\": %d bytes (0x%04X)\n", pfh->version, m_szNames[0], dwMemLength, dwMemLength);
-#endif
- while (dwMemPos + 7 < dwMemLength)
- {
- DWORD id = *((LPDWORD)(lpStream+dwMemPos));
-
- switch(id)
- {
- // "INFO"
- case 0x4f464e49:
- // "CMSG"
- case 0x47534d43:
- psi = (DMFINFO *)(lpStream+dwMemPos);
- if (id == 0x47534d43) dwMemPos++;
- if ((psi->infosize > dwMemLength) || (psi->infosize + dwMemPos + 8 > dwMemLength)) goto dmfexit;
- if ((psi->infosize >= 8) && (!m_lpszSongComments))
- {
- m_lpszSongComments = new char[psi->infosize]; // changed from CHAR
- if (m_lpszSongComments)
- {
- for (UINT i=0; i<psi->infosize-1; i++)
- {
- CHAR c = lpStream[dwMemPos+8+i];
- if ((i % 40) == 39)
- m_lpszSongComments[i] = 0x0d;
- else
- m_lpszSongComments[i] = (c < ' ') ? ' ' : c;
- }
- m_lpszSongComments[psi->infosize-1] = 0;
- }
- }
- dwMemPos += psi->infosize + 8 - 1;
- break;
-
- // "SEQU"
- case 0x55514553:
- sequ = (DMFSEQU *)(lpStream+dwMemPos);
- if ((sequ->seqsize >= dwMemLength) || (dwMemPos + sequ->seqsize + 12 > dwMemLength)) goto dmfexit;
- {
- UINT nseq = sequ->seqsize >> 1;
- if (nseq >= MAX_ORDERS-1) nseq = MAX_ORDERS-1;
- if (sequ->loopstart < nseq) m_nRestartPos = sequ->loopstart;
- for (UINT i=0; i<nseq; i++) Order[i] = (BYTE)sequ->sequ[i];
- }
- dwMemPos += sequ->seqsize + 8;
- break;
-
- // "PATT"
- case 0x54544150:
- if (!m_nChannels)
- {
- DMFPATT *patt = (DMFPATT *)(lpStream+dwMemPos);
- UINT numpat;
- DWORD dwPos = dwMemPos + 11;
- if ((patt->patsize >= dwMemLength) || (dwMemPos + patt->patsize + 8 > dwMemLength)) goto dmfexit;
- numpat = patt->numpat;
- if (numpat > MAX_PATTERNS) numpat = MAX_PATTERNS;
- m_nChannels = patt->tracks;
- if (m_nChannels < patt->firstpatinfo) m_nChannels = patt->firstpatinfo;
- if (m_nChannels > 32) m_nChannels = 32;
- if (m_nChannels < 4) m_nChannels = 4;
- for (UINT npat=0; npat<numpat; npat++)
- {
- DMFTRACK *pt = (DMFTRACK *)(lpStream+dwPos);
- #ifdef DMFLOG
- Log("Pattern #%d: %d tracks, %d rows\n", npat, pt->tracks, pt->ticks);
- #endif
- UINT tracks = pt->tracks;
- if (tracks > 32) tracks = 32;
- UINT ticks = pt->ticks;
- if (ticks > 256) ticks = 256;
- if (ticks < 16) ticks = 16;
- dwPos += 8;
- if ((pt->jmpsize >= dwMemLength) || (dwPos + pt->jmpsize + 4 >= dwMemLength)) break;
- PatternSize[npat] = (WORD)ticks;
- PatternAllocSize[npat] = (WORD)ticks;
- MODCOMMAND *m = AllocatePattern(PatternSize[npat], m_nChannels);
- if (!m) goto dmfexit;
- Patterns[npat] = m;
- DWORD d = dwPos;
- dwPos += pt->jmpsize;
- UINT ttype = 1;
- UINT tempo = 125;
- UINT glbinfobyte = 0;
- UINT pbeat = (pt->beat & 0xf0) ? pt->beat>>4 : 8;
- BOOL tempochange = (pt->beat & 0xf0) ? TRUE : FALSE;
- memset(infobyte, 0, sizeof(infobyte));
- for (UINT row=0; row<ticks; row++)
- {
- MODCOMMAND *p = &m[row*m_nChannels];
- // Parse track global effects
- if (!glbinfobyte)
- {
- BYTE info = lpStream[d++];
- BYTE infoval = 0;
- if ((info & 0x80) && (d < dwPos)) glbinfobyte = lpStream[d++];
- info &= 0x7f;
- if ((info) && (d < dwPos)) infoval = lpStream[d++];
- switch(info)
- {
- case 1: ttype = 0; tempo = infoval; tempochange = TRUE; break;
- case 2: ttype = 1; tempo = infoval; tempochange = TRUE; break;
- case 3: pbeat = infoval>>4; tempochange = ttype; break;
- #ifdef DMFLOG
- default: if (info) Log("GLB: %02X.%02X\n", info, infoval);
- #endif
- }
- } else
- {
- glbinfobyte--;
- }
- // Parse channels
- for (UINT i=0; i<tracks; i++) if (!infobyte[i])
- {
- MODCOMMAND cmd = {0,0,0,0,0,0};
- BYTE info = lpStream[d++];
- if (info & 0x80) infobyte[i] = lpStream[d++];
- // Instrument
- if (info & 0x40)
- {
- cmd.instr = lpStream[d++];
- }
- // Note
- if (info & 0x20)
- {
- cmd.note = lpStream[d++];
- if ((cmd.note) && (cmd.note < 0xfe)) cmd.note &= 0x7f;
- if ((cmd.note) && (cmd.note < 128)) cmd.note += 24;
- }
- // Volume
- if (info & 0x10)
- {
- cmd.volcmd = VOLCMD_VOLUME;
- cmd.vol = (lpStream[d++]+3)>>2;
- }
- // Effect 1
- if (info & 0x08)
- {
- BYTE efx = lpStream[d++];
- BYTE eval = lpStream[d++];
- switch(efx)
- {
- // 1: Key Off
- case 1: if (!cmd.note) cmd.note = 0xFE; break;
- // 2: Set Loop
- // 4: Sample Delay
- case 4: if (eval&0xe0) { cmd.command = CMD_S3MCMDEX; cmd.param = (eval>>5)|0xD0; } break;
- // 5: Retrig
- case 5: if (eval&0xe0) { cmd.command = CMD_RETRIG; cmd.param = (eval>>5); } break;
- // 6: Offset
- case 6: cmd.command = CMD_OFFSET; cmd.param = eval; break;
- #ifdef DMFLOG
- default: Log("FX1: %02X.%02X\n", efx, eval);
- #endif
- }
- }
- // Effect 2
- if (info & 0x04)
- {
- BYTE efx = lpStream[d++];
- BYTE eval = lpStream[d++];
- switch(efx)
- {
- // 1: Finetune
- case 1: if (eval&0xf0) { cmd.command = CMD_S3MCMDEX; cmd.param = (eval>>4)|0x20; } break;
- // 2: Note Delay
- case 2: if (eval&0xe0) { cmd.command = CMD_S3MCMDEX; cmd.param = (eval>>5)|0xD0; } break;
- // 3: Arpeggio
- case 3: if (eval) { cmd.command = CMD_ARPEGGIO; cmd.param = eval; } break;
- // 4: Portamento Up
- case 4: cmd.command = CMD_PORTAMENTOUP; cmd.param = (eval >= 0xe0) ? 0xdf : eval; break;
- // 5: Portamento Down
- case 5: cmd.command = CMD_PORTAMENTODOWN; cmd.param = (eval >= 0xe0) ? 0xdf : eval; break;
- // 6: Tone Portamento
- case 6: cmd.command = CMD_TONEPORTAMENTO; cmd.param = eval; break;
- // 8: Vibrato
- case 8: cmd.command = CMD_VIBRATO; cmd.param = eval; break;
- // 12: Note cut
- case 12: if (eval & 0xe0) { cmd.command = CMD_S3MCMDEX; cmd.param = (eval>>5)|0xc0; }
- else if (!cmd.note) { cmd.note = 0xfe; } break;
- #ifdef DMFLOG
- default: Log("FX2: %02X.%02X\n", efx, eval);
- #endif
- }
- }
- // Effect 3
- if (info & 0x02)
- {
- BYTE efx = lpStream[d++];
- BYTE eval = lpStream[d++];
- switch(efx)
- {
- // 1: Vol Slide Up
- case 1: if (eval == 0xff) break;
- eval = (eval+3)>>2; if (eval > 0x0f) eval = 0x0f;
- cmd.command = CMD_VOLUMESLIDE; cmd.param = eval<<4; break;
- // 2: Vol Slide Down
- case 2: if (eval == 0xff) break;
- eval = (eval+3)>>2; if (eval > 0x0f) eval = 0x0f;
- cmd.command = CMD_VOLUMESLIDE; cmd.param = eval; break;
- // 7: Set Pan
- case 7: if (!cmd.volcmd) { cmd.volcmd = VOLCMD_PANNING; cmd.vol = (eval+3)>>2; }
- else { cmd.command = CMD_PANNING8; cmd.param = eval; } break;
- // 8: Pan Slide Left
- case 8: eval = (eval+3)>>2; if (eval > 0x0f) eval = 0x0f;
- cmd.command = CMD_PANNINGSLIDE; cmd.param = eval<<4; break;
- // 9: Pan Slide Right
- case 9: eval = (eval+3)>>2; if (eval > 0x0f) eval = 0x0f;
- cmd.command = CMD_PANNINGSLIDE; cmd.param = eval; break;
- #ifdef DMFLOG
- default: Log("FX3: %02X.%02X\n", efx, eval);
- #endif
-
- }
- }
- // Store effect
- if (i < m_nChannels) p[i] = cmd;
- if (d > dwPos)
- {
- #ifdef DMFLOG
- Log("Unexpected EOP: row=%d\n", row);
- #endif
- break;
- }
- } else
- {
- infobyte[i]--;
- }
-
- // Find free channel for tempo change
- if (tempochange)
- {
- tempochange = FALSE;
- UINT speed=6, modtempo=tempo;
- UINT rpm = ((ttype) && (pbeat)) ? tempo*pbeat : (tempo+1)*15;
- for (speed=30; speed>1; speed--)
- {
- modtempo = rpm*speed/24;
- if (modtempo <= 200) break;
- if ((speed < 6) && (modtempo < 256)) break;
- }
- #ifdef DMFLOG
- Log("Tempo change: ttype=%d pbeat=%d tempo=%3d -> speed=%d tempo=%d\n",
- ttype, pbeat, tempo, speed, modtempo);
- #endif
- for (UINT ich=0; ich<m_nChannels; ich++) if (!p[ich].command)
- {
- if (speed)
- {
- p[ich].command = CMD_SPEED;
- p[ich].param = (BYTE)speed;
- speed = 0;
- } else
- if ((modtempo >= 32) && (modtempo < 256))
- {
- p[ich].command = CMD_TEMPO;
- p[ich].param = (BYTE)modtempo;
- modtempo = 0;
- } else
- {
- break;
- }
- }
- }
- if (d >= dwPos) break;
- }
- #ifdef DMFLOG
- Log(" %d/%d bytes remaining\n", dwPos-d, pt->jmpsize);
- #endif
- if (dwPos + 8 >= dwMemLength) break;
- }
- dwMemPos += patt->patsize + 8;
- }
- break;
-
- // "SMPI": Sample Info
- case 0x49504d53:
- {
- DMFSMPI *pds = (DMFSMPI *)(lpStream+dwMemPos);
- if (pds->size <= dwMemLength - dwMemPos)
- {
- DWORD dwPos = dwMemPos + 9;
- m_nSamples = pds->samples;
- if (m_nSamples >= MAX_SAMPLES) m_nSamples = MAX_SAMPLES-1;
- for (UINT iSmp=1; iSmp<=m_nSamples; iSmp++)
- {
- UINT namelen = lpStream[dwPos];
- smplflags[iSmp] = 0;
- if (dwPos+namelen+1+sizeof(DMFSAMPLE) > dwMemPos+pds->size+8) break;
- if (namelen)
- {
- UINT rlen = (namelen < 32) ? namelen : 31;
- memcpy(m_szNames[iSmp], lpStream+dwPos+1, rlen);
- m_szNames[iSmp][rlen] = 0;
- }
- dwPos += namelen + 1;
- DMFSAMPLE *psh = (DMFSAMPLE *)(lpStream+dwPos);
- MODINSTRUMENT *psmp = &Ins[iSmp];
- psmp->nLength = psh->len;
- psmp->nLoopStart = psh->loopstart;
- psmp->nLoopEnd = psh->loopend;
- psmp->nC4Speed = psh->c3speed;
- psmp->nGlobalVol = 64;
- psmp->nVolume = (psh->volume) ? ((WORD)psh->volume)+1 : (WORD)256;
- psmp->uFlags = (psh->flags & 2) ? CHN_16BIT : 0;
- if (psmp->uFlags & CHN_16BIT) psmp->nLength >>= 1;
- if (psh->flags & 1) psmp->uFlags |= CHN_LOOP;
- smplflags[iSmp] = psh->flags;
- dwPos += (pfh->version < 8) ? 22 : 30;
- #ifdef DMFLOG
- Log("SMPI %d/%d: len=%d flags=0x%02X\n", iSmp, m_nSamples, psmp->nLength, psh->flags);
- #endif
- }
- }
- dwMemPos += pds->size + 8;
- }
- break;
-
- // "SMPD": Sample Data
- case 0x44504d53:
- {
- DWORD dwPos = dwMemPos + 8;
- UINT ismpd = 0;
- for (UINT iSmp=1; iSmp<=m_nSamples; iSmp++)
- {
- ismpd++;
- DWORD pksize;
- if (dwPos + 4 >= dwMemLength)
- {
- #ifdef DMFLOG
- Log("Unexpected EOF at sample %d/%d! (pos=%d)\n", iSmp, m_nSamples, dwPos);
- #endif
- break;
- }
- pksize = *((LPDWORD)(lpStream+dwPos));
- #ifdef DMFLOG
- Log("sample %d: pos=0x%X pksize=%d ", iSmp, dwPos, pksize);
- Log("len=%d flags=0x%X [%08X]\n", Ins[iSmp].nLength, smplflags[ismpd], *((LPDWORD)(lpStream+dwPos+4)));
- #endif
- dwPos += 4;
- if (pksize > dwMemLength - dwPos)
- {
- #ifdef DMFLOG
- Log("WARNING: pksize=%d, but only %d bytes left\n", pksize, dwMemLength-dwPos);
- #endif
- pksize = dwMemLength - dwPos;
- }
- if ((pksize) && (iSmp <= m_nSamples))
- {
- UINT flags = (Ins[iSmp].uFlags & CHN_16BIT) ? RS_PCM16S : RS_PCM8S;
- if (smplflags[ismpd] & 4) flags = (Ins[iSmp].uFlags & CHN_16BIT) ? RS_DMF16 : RS_DMF8;
- ReadSample(&Ins[iSmp], flags, (LPSTR)(lpStream+dwPos), pksize);
- }
- dwPos += pksize;
- }
- dwMemPos = dwPos;
- }
- break;
-
- // "ENDE": end of file
- case 0x45444e45:
- goto dmfexit;
-
- // Unrecognized id, or "ENDE" field
- default:
- dwMemPos += 4;
- break;
- }
- }
-dmfexit:
- if (!m_nChannels)
- {
- if (!m_nSamples)
- {
- m_nType = MOD_TYPE_NONE;
- return FALSE;
- }
- m_nChannels = 4;
- }
- return TRUE;
-}
-
-
-///////////////////////////////////////////////////////////////////////
-// DMF Compression
-
-#pragma pack(1)
-
-typedef struct DMF_HNODE
-{
- short int left, right;
- BYTE value;
-} DMF_HNODE;
-
-typedef struct DMF_HTREE
-{
- LPBYTE ibuf, ibufmax;
- DWORD bitbuf;
- UINT bitnum;
- UINT lastnode, nodecount;
- DMF_HNODE nodes[256];
-} DMF_HTREE;
-
-#pragma pack()
-
-
-// DMF Huffman ReadBits
-BYTE DMFReadBits(DMF_HTREE *tree, UINT nbits)
-//-------------------------------------------
-{
- BYTE x = 0, bitv = 1;
- while (nbits--)
- {
- if (tree->bitnum)
- {
- tree->bitnum--;
- } else
- {
- tree->bitbuf = (tree->ibuf < tree->ibufmax) ? *(tree->ibuf++) : 0;
- tree->bitnum = 7;
- }
- if (tree->bitbuf & 1) x |= bitv;
- bitv <<= 1;
- tree->bitbuf >>= 1;
- }
- return x;
-}
-
-//
-// tree: [8-bit value][12-bit index][12-bit index] = 32-bit
-//
-
-void DMFNewNode(DMF_HTREE *tree)
-//------------------------------
-{
- BYTE isleft, isright;
- UINT actnode;
-
- actnode = tree->nodecount;
- if (actnode > 255) return;
- tree->nodes[actnode].value = DMFReadBits(tree, 7);
- isleft = DMFReadBits(tree, 1);
- isright = DMFReadBits(tree, 1);
- actnode = tree->lastnode;
- if (actnode > 255) return;
- tree->nodecount++;
- tree->lastnode = tree->nodecount;
- if (isleft)
- {
- tree->nodes[actnode].left = tree->lastnode;
- DMFNewNode(tree);
- } else
- {
- tree->nodes[actnode].left = -1;
- }
- tree->lastnode = tree->nodecount;
- if (isright)
- {
- tree->nodes[actnode].right = tree->lastnode;
- DMFNewNode(tree);
- } else
- {
- tree->nodes[actnode].right = -1;
- }
-}
-
-
-int DMFUnpack(LPBYTE psample, LPBYTE ibuf, LPBYTE ibufmax, UINT maxlen)
-//----------------------------------------------------------------------
-{
- DMF_HTREE tree;
- UINT actnode;
- BYTE value, sign, delta = 0;
-
- memset(&tree, 0, sizeof(tree));
- tree.ibuf = ibuf;
- tree.ibufmax = ibufmax;
- DMFNewNode(&tree);
- value = 0;
- for (UINT i=0; i<maxlen; i++)
- {
- actnode = 0;
- sign = DMFReadBits(&tree, 1);
- do
- {
- if (DMFReadBits(&tree, 1))
- actnode = tree.nodes[actnode].right;
- else
- actnode = tree.nodes[actnode].left;
- if (actnode > 255) break;
- delta = tree.nodes[actnode].value;
- if ((tree.ibuf >= tree.ibufmax) && (!tree.bitnum)) break;
- } while ((tree.nodes[actnode].left >= 0) && (tree.nodes[actnode].right >= 0));
- if (sign) delta ^= 0xFF;
- value += delta;
- psample[i] = (i) ? value : 0;
- }
-#ifdef DMFLOG
-// Log("DMFUnpack: %d remaining bytes\n", tree.ibufmax-tree.ibuf);
-#endif
- return tree.ibuf - ibuf;
-}
-
-
diff --git a/src/modplug/load_dsm.cxx b/src/modplug/load_dsm.cxx
deleted file mode 100755
index 55e5ef3..0000000
--- a/src/modplug/load_dsm.cxx
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-//////////////////////////////////////////////
-// DSIK Internal Format (DSM) module loader //
-//////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-#pragma pack(1)
-
-#define DSMID_RIFF 0x46464952 // "RIFF"
-#define DSMID_DSMF 0x464d5344 // "DSMF"
-#define DSMID_SONG 0x474e4f53 // "SONG"
-#define DSMID_INST 0x54534e49 // "INST"
-#define DSMID_PATT 0x54544150 // "PATT"
-
-
-typedef struct DSMNOTE
-{
- BYTE note,ins,vol,cmd,inf;
-} DSMNOTE;
-
-
-typedef struct DSMINST
-{
- DWORD id_INST;
- DWORD inst_len;
- CHAR filename[13];
- BYTE flags;
- BYTE flags2;
- BYTE volume;
- DWORD length;
- DWORD loopstart;
- DWORD loopend;
- DWORD reserved1;
- WORD c2spd;
- WORD reserved2;
- CHAR samplename[28];
-} DSMINST;
-
-
-typedef struct DSMFILEHEADER
-{
- DWORD id_RIFF; // "RIFF"
- DWORD riff_len;
- DWORD id_DSMF; // "DSMF"
- DWORD id_SONG; // "SONG"
- DWORD song_len;
-} DSMFILEHEADER;
-
-
-typedef struct DSMSONG
-{
- CHAR songname[28];
- WORD reserved1;
- WORD flags;
- DWORD reserved2;
- WORD numord;
- WORD numsmp;
- WORD numpat;
- WORD numtrk;
- BYTE globalvol;
- BYTE mastervol;
- BYTE speed;
- BYTE bpm;
- BYTE panpos[16];
- BYTE orders[128];
-} DSMSONG;
-
-typedef struct DSMPATT
-{
- DWORD id_PATT;
- DWORD patt_len;
- BYTE dummy1;
- BYTE dummy2;
-} DSMPATT;
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadDSM(LPCBYTE lpStream, DWORD dwMemLength)
-//-----------------------------------------------------------
-{
- DSMFILEHEADER *pfh = (DSMFILEHEADER *)lpStream;
- DSMSONG *psong;
- DWORD dwMemPos;
- UINT nPat, nSmp;
-
- if ((!lpStream) || (dwMemLength < 1024) || (pfh->id_RIFF != DSMID_RIFF)
- || (pfh->riff_len + 8 > dwMemLength) || (pfh->riff_len < 1024)
- || (pfh->id_DSMF != DSMID_DSMF) || (pfh->id_SONG != DSMID_SONG)
- || (pfh->song_len > dwMemLength)) return FALSE;
- psong = (DSMSONG *)(lpStream + sizeof(DSMFILEHEADER));
- dwMemPos = sizeof(DSMFILEHEADER) + pfh->song_len;
- m_nType = MOD_TYPE_DSM;
- m_nChannels = psong->numtrk;
- if (m_nChannels < 4) m_nChannels = 4;
- if (m_nChannels > 16) m_nChannels = 16;
- m_nSamples = psong->numsmp;
- if (m_nSamples > MAX_SAMPLES) m_nSamples = MAX_SAMPLES;
- m_nDefaultSpeed = psong->speed;
- m_nDefaultTempo = psong->bpm;
- m_nDefaultGlobalVolume = psong->globalvol << 2;
- if ((!m_nDefaultGlobalVolume) || (m_nDefaultGlobalVolume > 256)) m_nDefaultGlobalVolume = 256;
- m_nSongPreAmp = psong->mastervol & 0x7F;
- for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++)
- {
- Order[iOrd] = (BYTE)((iOrd < psong->numord) ? psong->orders[iOrd] : 0xFF);
- }
- for (UINT iPan=0; iPan<16; iPan++)
- {
- ChnSettings[iPan].nPan = 0x80;
- if (psong->panpos[iPan] <= 0x80)
- {
- ChnSettings[iPan].nPan = psong->panpos[iPan] << 1;
- }
- }
- memcpy(m_szNames[0], psong->songname, 28);
- nPat = 0;
- nSmp = 1;
- while (dwMemPos < dwMemLength - 8)
- {
- DSMPATT *ppatt = (DSMPATT *)(lpStream + dwMemPos);
- DSMINST *pins = (DSMINST *)(lpStream+dwMemPos);
- // Reading Patterns
- if (ppatt->id_PATT == DSMID_PATT)
- {
- dwMemPos += 8;
- if (dwMemPos + ppatt->patt_len >= dwMemLength) break;
- DWORD dwPos = dwMemPos;
- dwMemPos += ppatt->patt_len;
- MODCOMMAND *m = AllocatePattern(64, m_nChannels);
- if (!m) break;
- PatternSize[nPat] = 64;
- PatternAllocSize[nPat] = 64;
- Patterns[nPat] = m;
- UINT row = 0;
- while ((row < 64) && (dwPos + 2 <= dwMemPos))
- {
- UINT flag = lpStream[dwPos++];
- if (flag)
- {
- UINT ch = (flag & 0x0F) % m_nChannels;
- if (flag & 0x80)
- {
- UINT note = lpStream[dwPos++];
- if (note)
- {
- if (note <= 12*9) note += 12;
- m[ch].note = (BYTE)note;
- }
- }
- if (flag & 0x40)
- {
- m[ch].instr = lpStream[dwPos++];
- }
- if (flag & 0x20)
- {
- m[ch].volcmd = VOLCMD_VOLUME;
- m[ch].vol = lpStream[dwPos++];
- }
- if (flag & 0x10)
- {
- UINT command = lpStream[dwPos++];
- UINT param = lpStream[dwPos++];
- switch(command)
- {
- // 4-bit Panning
- case 0x08:
- switch(param & 0xF0)
- {
- case 0x00: param <<= 4; break;
- case 0x10: command = 0x0A; param = (param & 0x0F) << 4; break;
- case 0x20: command = 0x0E; param = (param & 0x0F) | 0xA0; break;
- case 0x30: command = 0x0E; param = (param & 0x0F) | 0x10; break;
- case 0x40: command = 0x0E; param = (param & 0x0F) | 0x20; break;
- default: command = 0;
- }
- break;
- // Portamentos
- case 0x11:
- case 0x12:
- command &= 0x0F;
- break;
- // 3D Sound (?)
- case 0x13:
- command = 'X' - 55;
- param = 0x91;
- break;
- default:
- // Volume + Offset (?)
- command = ((command & 0xF0) == 0x20) ? 0x09 : 0;
- }
- m[ch].command = (BYTE)command;
- m[ch].param = (BYTE)param;
- if (command) ConvertModCommand(&m[ch]);
- }
- } else
- {
- m += m_nChannels;
- row++;
- }
- }
- nPat++;
- } else
- // Reading Samples
- if ((nSmp <= m_nSamples) && (pins->id_INST == DSMID_INST))
- {
- if (dwMemPos + pins->inst_len >= dwMemLength - 8) break;
- DWORD dwPos = dwMemPos + sizeof(DSMINST);
- dwMemPos += 8 + pins->inst_len;
- memcpy(m_szNames[nSmp], pins->samplename, 28);
- MODINSTRUMENT *psmp = &Ins[nSmp];
- memcpy(psmp->name, pins->filename, 13);
- psmp->nGlobalVol = 64;
- psmp->nC4Speed = pins->c2spd;
- psmp->uFlags = (WORD)((pins->flags & 1) ? CHN_LOOP : 0);
- psmp->nLength = pins->length;
- psmp->nLoopStart = pins->loopstart;
- psmp->nLoopEnd = pins->loopend;
- psmp->nVolume = (WORD)(pins->volume << 2);
- if (psmp->nVolume > 256) psmp->nVolume = 256;
- UINT smptype = (pins->flags & 2) ? RS_PCM8S : RS_PCM8U;
- ReadSample(psmp, smptype, (LPCSTR)(lpStream+dwPos), dwMemLength - dwPos);
- nSmp++;
- } else
- {
- break;
- }
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_far.cxx b/src/modplug/load_far.cxx
deleted file mode 100755
index 95500de..0000000
--- a/src/modplug/load_far.cxx
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-////////////////////////////////////////
-// Farandole (FAR) module loader //
-////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-#define FARFILEMAGIC 0xFE524146 // "FAR"
-
-#pragma pack(1)
-
-typedef struct FARHEADER1
-{
- DWORD id; // file magic FAR=
- CHAR songname[40]; // songname
- CHAR magic2[3]; // 13,10,26
- WORD headerlen; // remaining length of header in bytes
- BYTE version; // 0xD1
- BYTE onoff[16];
- BYTE edit1[9];
- BYTE speed;
- BYTE panning[16];
- BYTE edit2[4];
- WORD stlen;
-} FARHEADER1;
-
-typedef struct FARHEADER2
-{
- BYTE orders[256];
- BYTE numpat;
- BYTE snglen;
- BYTE loopto;
- WORD patsiz[256];
-} FARHEADER2;
-
-typedef struct FARSAMPLE
-{
- CHAR samplename[32];
- DWORD length;
- BYTE finetune;
- BYTE volume;
- DWORD reppos;
- DWORD repend;
- BYTE type;
- BYTE loop;
-} FARSAMPLE;
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadFAR(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- FARHEADER1 *pmh1 = (FARHEADER1 *)lpStream;
- FARHEADER2 *pmh2;
- DWORD dwMemPos = sizeof(FARHEADER1);
- UINT headerlen;
- BYTE samplemap[8];
-
- if ((!lpStream) || (dwMemLength < 1024) || (bswapLE32(pmh1->id) != FARFILEMAGIC)
- || (pmh1->magic2[0] != 13) || (pmh1->magic2[1] != 10) || (pmh1->magic2[2] != 26)) return FALSE;
- headerlen = bswapLE16(pmh1->headerlen);
- pmh1->stlen = bswapLE16( pmh1->stlen ); /* inplace byteswap -- Toad */
- if ((headerlen >= dwMemLength) || (dwMemPos + pmh1->stlen + sizeof(FARHEADER2) >= dwMemLength)) return FALSE;
- // Globals
- m_nType = MOD_TYPE_FAR;
- m_nChannels = 16;
- m_nInstruments = 0;
- m_nSamples = 0;
- m_nSongPreAmp = 0x20;
- m_nDefaultSpeed = pmh1->speed;
- m_nDefaultTempo = 80;
- m_nDefaultGlobalVolume = 256;
-
- memcpy(m_szNames[0], pmh1->songname, 32);
- // Channel Setting
- for (UINT nchpan=0; nchpan<16; nchpan++)
- {
- ChnSettings[nchpan].dwFlags = 0;
- ChnSettings[nchpan].nPan = ((pmh1->panning[nchpan] & 0x0F) << 4) + 8;
- ChnSettings[nchpan].nVolume = 64;
- }
- // Reading comment
- if (pmh1->stlen)
- {
- UINT szLen = pmh1->stlen;
- if (szLen > dwMemLength - dwMemPos) szLen = dwMemLength - dwMemPos;
- if ((m_lpszSongComments = new char[szLen + 1]) != NULL)
- {
- memcpy(m_lpszSongComments, lpStream+dwMemPos, szLen);
- m_lpszSongComments[szLen] = 0;
- }
- dwMemPos += pmh1->stlen;
- }
- // Reading orders
- pmh2 = (FARHEADER2 *)(lpStream + dwMemPos);
- dwMemPos += sizeof(FARHEADER2);
- if (dwMemPos >= dwMemLength) return TRUE;
- for (UINT iorder=0; iorder<MAX_ORDERS; iorder++)
- {
- Order[iorder] = (iorder <= pmh2->snglen) ? pmh2->orders[iorder] : 0xFF;
- }
- m_nRestartPos = pmh2->loopto;
- // Reading Patterns
- dwMemPos += headerlen - (869 + pmh1->stlen);
- if (dwMemPos >= dwMemLength) return TRUE;
-
- // byteswap pattern data -- Toad
- UINT psfix = 0 ;
- while( psfix++ < 256 )
- {
- pmh2->patsiz[psfix] = bswapLE16( pmh2->patsiz[psfix] ) ;
- }
- // end byteswap of pattern data
-
- WORD *patsiz = (WORD *)pmh2->patsiz;
- for (UINT ipat=0; ipat<256; ipat++) if (patsiz[ipat])
- {
- UINT patlen = patsiz[ipat];
- if ((ipat >= MAX_PATTERNS) || (patsiz[ipat] < 2))
- {
- dwMemPos += patlen;
- continue;
- }
- if (dwMemPos + patlen >= dwMemLength) return TRUE;
- UINT rows = (patlen - 2) >> 6;
- if (!rows)
- {
- dwMemPos += patlen;
- continue;
- }
- if (rows > 256) rows = 256;
- if (rows < 16) rows = 16;
- PatternSize[ipat] = rows;
- PatternAllocSize[ipat] = rows;
- if ((Patterns[ipat] = AllocatePattern(rows, m_nChannels)) == NULL) return TRUE;
- MODCOMMAND *m = Patterns[ipat];
- UINT patbrk = lpStream[dwMemPos];
- const BYTE *p = lpStream + dwMemPos + 2;
- UINT max = rows*16*4;
- if (max > patlen-2) max = patlen-2;
- for (UINT len=0; len<max; len += 4, m++)
- {
- BYTE note = p[len];
- BYTE ins = p[len+1];
- BYTE vol = p[len+2];
- BYTE eff = p[len+3];
- if (note)
- {
- m->instr = ins + 1;
- m->note = note + 36;
- }
- if (vol & 0x0F)
- {
- m->volcmd = VOLCMD_VOLUME;
- m->vol = (vol & 0x0F) << 2;
- if (m->vol <= 4) m->vol = 0;
- }
- switch(eff & 0xF0)
- {
- // 1.x: Portamento Up
- case 0x10:
- m->command = CMD_PORTAMENTOUP;
- m->param = eff & 0x0F;
- break;
- // 2.x: Portamento Down
- case 0x20:
- m->command = CMD_PORTAMENTODOWN;
- m->param = eff & 0x0F;
- break;
- // 3.x: Tone-Portamento
- case 0x30:
- m->command = CMD_TONEPORTAMENTO;
- m->param = (eff & 0x0F) << 2;
- break;
- // 4.x: Retrigger
- case 0x40:
- m->command = CMD_RETRIG;
- m->param = 6 / (1+(eff&0x0F)) + 1;
- break;
- // 5.x: Set Vibrato Depth
- case 0x50:
- m->command = CMD_VIBRATO;
- m->param = (eff & 0x0F);
- break;
- // 6.x: Set Vibrato Speed
- case 0x60:
- m->command = CMD_VIBRATO;
- m->param = (eff & 0x0F) << 4;
- break;
- // 7.x: Vol Slide Up
- case 0x70:
- m->command = CMD_VOLUMESLIDE;
- m->param = (eff & 0x0F) << 4;
- break;
- // 8.x: Vol Slide Down
- case 0x80:
- m->command = CMD_VOLUMESLIDE;
- m->param = (eff & 0x0F);
- break;
- // A.x: Port to vol
- case 0xA0:
- m->volcmd = VOLCMD_VOLUME;
- m->vol = ((eff & 0x0F) << 2) + 4;
- break;
- // B.x: Set Balance
- case 0xB0:
- m->command = CMD_PANNING8;
- m->param = (eff & 0x0F) << 4;
- break;
- // F.x: Set Speed
- case 0xF0:
- m->command = CMD_SPEED;
- m->param = eff & 0x0F;
- break;
- default:
- if ((patbrk) && (patbrk+1 == (len >> 6)) && (patbrk+1 != rows-1))
- {
- m->command = CMD_PATTERNBREAK;
- patbrk = 0;
- }
- }
- }
- dwMemPos += patlen;
- }
- // Reading samples
- if (dwMemPos + 8 >= dwMemLength) return TRUE;
- memcpy(samplemap, lpStream+dwMemPos, 8);
- dwMemPos += 8;
- MODINSTRUMENT *pins = &Ins[1];
- for (UINT ismp=0; ismp<64; ismp++, pins++) if (samplemap[ismp >> 3] & (1 << (ismp & 7)))
- {
- if (dwMemPos + sizeof(FARSAMPLE) > dwMemLength) return TRUE;
- FARSAMPLE *pfs = (FARSAMPLE *)(lpStream + dwMemPos);
- dwMemPos += sizeof(FARSAMPLE);
- m_nSamples = ismp + 1;
- memcpy(m_szNames[ismp+1], pfs->samplename, 32);
- pfs->length = bswapLE32( pfs->length ) ; /* endian fix - Toad */
- pins->nLength = pfs->length ;
- pins->nLoopStart = bswapLE32(pfs->reppos) ;
- pins->nLoopEnd = bswapLE32(pfs->repend) ;
- pins->nFineTune = 0;
- pins->nC4Speed = 8363*2;
- pins->nGlobalVol = 64;
- pins->nVolume = pfs->volume << 4;
- pins->uFlags = 0;
- if ((pins->nLength > 3) && (dwMemPos + 4 < dwMemLength))
- {
- if (pfs->type & 1)
- {
- pins->uFlags |= CHN_16BIT;
- pins->nLength >>= 1;
- pins->nLoopStart >>= 1;
- pins->nLoopEnd >>= 1;
- }
- if ((pfs->loop & 8) && (pins->nLoopEnd > 4)) pins->uFlags |= CHN_LOOP;
- ReadSample(pins, (pins->uFlags & CHN_16BIT) ? RS_PCM16S : RS_PCM8S,
- (LPSTR)(lpStream+dwMemPos), dwMemLength - dwMemPos);
- }
- dwMemPos += pfs->length;
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_it.cxx b/src/modplug/load_it.cxx
deleted file mode 100755
index a5903f4..0000000
--- a/src/modplug/load_it.cxx
+++ /dev/null
@@ -1,980 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-#include "it_defs.h"
-
-/* blah, -mrsb.
-this is a schism header */
-#include "midi.h"
-
-#ifdef MSC_VER
-#pragma warning(disable:4244)
-#endif
-
-BYTE autovibit2xm[8] =
-{ 0, 3, 1, 4, 2, 0, 0, 0 };
-
-BYTE autovibxm2it[8] =
-{ 0, 2, 4, 1, 3, 0, 0, 0 };
-
-//////////////////////////////////////////////////////////
-// Impulse Tracker IT file support (import only)
-
-
-static inline UINT ConvertVolParam(UINT value)
-//--------------------------------------------
-{
- return (value > 9) ? 9 : value;
-}
-
-
-BOOL CSoundFile::ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers)
-//--------------------------------------------------------------------------------
-{
- if (trkvers < 0x0200)
- {
- const ITOLDINSTRUMENT *pis = (const ITOLDINSTRUMENT *)p;
- memcpy(penv->name, pis->name, 26);
- memcpy(penv->filename, pis->filename, 12);
- penv->nFadeOut = bswapLE16(pis->fadeout) << 6;
- penv->nGlobalVol = 128;
- for (UINT j=0; j<120; j++)
- {
- UINT note = pis->keyboard[j*2];
- UINT ins = pis->keyboard[j*2+1];
- if (ins < MAX_SAMPLES) penv->Keyboard[j] = ins;
- if (note < 128) penv->NoteMap[j] = note+1;
- else if (note >= 0xFE) penv->NoteMap[j] = note;
- }
- if (pis->flags & 0x01) penv->dwFlags |= ENV_VOLUME;
- if (pis->flags & 0x02) penv->dwFlags |= ENV_VOLLOOP;
- if (pis->flags & 0x04) penv->dwFlags |= ENV_VOLSUSTAIN;
- penv->VolEnv.nLoopStart = pis->vls;
- penv->VolEnv.nLoopEnd = pis->vle;
- penv->VolEnv.nSustainStart = pis->sls;
- penv->VolEnv.nSustainEnd = pis->sle;
- penv->VolEnv.nNodes = 25;
- for (UINT ev=0; ev<25; ev++)
- {
- if ((penv->VolEnv.Ticks[ev] = pis->nodes[ev*2]) == 0xFF)
- {
- penv->VolEnv.nNodes = ev;
- break;
- }
- penv->VolEnv.Values[ev] = pis->nodes[ev*2+1];
- }
- penv->nNNA = pis->nna;
- penv->nDCT = pis->dnc;
- penv->nPan = 0x80;
- } else
- {
- const ITINSTRUMENT *pis = (const ITINSTRUMENT *)p;
- memcpy(penv->name, pis->name, 26);
- memcpy(penv->filename, pis->filename, 12);
- penv->nMidiProgram = pis->mpr;
- penv->nMidiChannel = pis->mch;
- penv->wMidiBank = bswapLE16(pis->mbank);
- penv->nFadeOut = bswapLE16(pis->fadeout) << 5;
- penv->nGlobalVol = pis->gbv;
- if (penv->nGlobalVol > 128) penv->nGlobalVol = 128;
- for (UINT j=0; j<120; j++)
- {
- UINT note = pis->keyboard[j*2];
- UINT ins = pis->keyboard[j*2+1];
- if (ins < MAX_SAMPLES) penv->Keyboard[j] = ins;
- if (note < 128) penv->NoteMap[j] = note+1;
- else if (note >= 0xFE) penv->NoteMap[j] = note;
- }
- // Volume Envelope
- if (pis->volenv.flags & 1) penv->dwFlags |= ENV_VOLUME;
- if (pis->volenv.flags & 2) penv->dwFlags |= ENV_VOLLOOP;
- if (pis->volenv.flags & 4) penv->dwFlags |= ENV_VOLSUSTAIN;
- if (pis->volenv.flags & 8) penv->dwFlags |= ENV_VOLCARRY;
- penv->VolEnv.nNodes = pis->volenv.num;
- if (penv->VolEnv.nNodes > 25) penv->VolEnv.nNodes = 25;
-
- penv->VolEnv.nLoopStart = pis->volenv.lpb;
- penv->VolEnv.nLoopEnd = pis->volenv.lpe;
- penv->VolEnv.nSustainStart = pis->volenv.slb;
- penv->VolEnv.nSustainEnd = pis->volenv.sle;
- // Panning Envelope
- if (pis->panenv.flags & 1) penv->dwFlags |= ENV_PANNING;
- if (pis->panenv.flags & 2) penv->dwFlags |= ENV_PANLOOP;
- if (pis->panenv.flags & 4) penv->dwFlags |= ENV_PANSUSTAIN;
- if (pis->panenv.flags & 8) penv->dwFlags |= ENV_PANCARRY;
- penv->PanEnv.nNodes = pis->panenv.num;
- if (penv->PanEnv.nNodes > 25) penv->PanEnv.nNodes = 25;
- penv->PanEnv.nLoopStart = pis->panenv.lpb;
- penv->PanEnv.nLoopEnd = pis->panenv.lpe;
- penv->PanEnv.nSustainStart = pis->panenv.slb;
- penv->PanEnv.nSustainEnd = pis->panenv.sle;
- // Pitch Envelope
- if (pis->pitchenv.flags & 1) penv->dwFlags |= ENV_PITCH;
- if (pis->pitchenv.flags & 2) penv->dwFlags |= ENV_PITCHLOOP;
- if (pis->pitchenv.flags & 4) penv->dwFlags |= ENV_PITCHSUSTAIN;
- if (pis->pitchenv.flags & 8) penv->dwFlags |= ENV_PITCHCARRY;
- if (pis->pitchenv.flags & 0x80) penv->dwFlags |= ENV_FILTER;
- penv->PitchEnv.nNodes = pis->pitchenv.num;
- if (penv->PitchEnv.nNodes > 25) penv->PitchEnv.nNodes = 25;
- penv->PitchEnv.nLoopStart = pis->pitchenv.lpb;
- penv->PitchEnv.nLoopEnd = pis->pitchenv.lpe;
- penv->PitchEnv.nSustainStart = pis->pitchenv.slb;
- penv->PitchEnv.nSustainEnd = pis->pitchenv.sle;
- // Envelopes Data
- for (UINT ev=0; ev<25; ev++)
- {
- penv->VolEnv.Values[ev] = pis->volenv.data[ev*3];
- penv->VolEnv.Ticks[ev] = (pis->volenv.data[ev*3+2] << 8) | (pis->volenv.data[ev*3+1]);
- penv->PanEnv.Values[ev] = pis->panenv.data[ev*3] + 32;
- penv->PanEnv.Ticks[ev] = (pis->panenv.data[ev*3+2] << 8) | (pis->panenv.data[ev*3+1]);
- penv->PitchEnv.Values[ev] = pis->pitchenv.data[ev*3] + 32;
- penv->PitchEnv.Ticks[ev] = (pis->pitchenv.data[ev*3+2] << 8) | (pis->pitchenv.data[ev*3+1]);
- }
- penv->nNNA = pis->nna % 4;
- penv->nDCT = pis->dct % 4;
- penv->nDNA = pis->dca % 3;
- penv->nPPS = pis->pps;
- penv->nPPC = pis->ppc;
- penv->nIFC = pis->ifc;
- penv->nIFR = pis->ifr;
- penv->nVolSwing = pis->rv;
- penv->nPanSwing = pis->rp;
- penv->nPan = (pis->dfp & 0x7F) << 2;
- if (penv->nPan > 256) penv->nPan = 128;
- if (pis->dfp < 0x80) penv->dwFlags |= ENV_SETPANNING;
- }
- if ((penv->VolEnv.nLoopStart >= 25) || (penv->VolEnv.nLoopEnd >= 25)) penv->dwFlags &= ~ENV_VOLLOOP;
- if ((penv->VolEnv.nSustainStart >= 25) || (penv->VolEnv.nSustainEnd >= 25)) penv->dwFlags &= ~ENV_VOLSUSTAIN;
- return TRUE;
-}
-
-
-BOOL CSoundFile::ReadIT(const BYTE *lpStream, DWORD dwMemLength)
-//--------------------------------------------------------------
-{
- ITFILEHEADER pifh = *(ITFILEHEADER *)lpStream;
- DWORD dwMemPos = sizeof(ITFILEHEADER);
- DWORD inspos[MAX_INSTRUMENTS];
- DWORD smppos[MAX_SAMPLES];
- DWORD patpos[MAX_PATTERNS];
- BYTE chnmask[64], channels_used[64];
- MODCOMMAND lastvalue[64];
-
- if ((!lpStream) || (dwMemLength < 0xc2)) return FALSE;
-
- pifh.id = bswapLE32(pifh.id);
- if (pifh.id == 0x49504D49) {
- if (dwMemLength < 554) return FALSE;
-
- WORD tv;
- INSTRUMENTHEADER *zenv = new INSTRUMENTHEADER;
- if (!zenv) return FALSE;
- memset(zenv, 0, sizeof(INSTRUMENTHEADER));
- memcpy(&tv, lpStream+0x1C, 2); /* trkvers */
- if (!ITInstrToMPT(lpStream, zenv, tv)) {
- delete zenv;
- return FALSE;
- }
-
- /* okay, we need samples now */
- unsigned int q = 554;
- BYTE expect_samples = lpStream[0x1E];
-
- m_nType = MOD_TYPE_IT;
- m_nInstruments = 1;
- m_nSamples = expect_samples;
- m_dwSongFlags = SONG_INSTRUMENTMODE | SONG_LINEARSLIDES /* eh? */;
-
- memcpy(m_szNames[0], lpStream + 0x20, 26);
- m_szNames[0][26] = 0;
-
- if (q+(80*expect_samples) >= dwMemLength) {
- delete zenv;
- return FALSE;
- }
-
- for (UINT nsmp = 0; nsmp < expect_samples; nsmp++) {
-
- ITSAMPLESTRUCT pis = *(ITSAMPLESTRUCT *)(lpStream+q);
- q += 80; /* length of ITS header */
-
- pis.id = bswapLE32(pis.id);
- pis.length = bswapLE32(pis.length);
- pis.loopbegin = bswapLE32(pis.loopbegin);
- pis.loopend = bswapLE32(pis.loopend);
- pis.C5Speed = bswapLE32(pis.C5Speed);
- pis.susloopbegin = bswapLE32(pis.susloopbegin);
- pis.susloopend = bswapLE32(pis.susloopend);
- pis.samplepointer = bswapLE32(pis.samplepointer);
-
- if (pis.id == 0x53504D49)
- {
- MODINSTRUMENT *pins = &Ins[nsmp+1];
- memcpy(pins->name, pis.filename, 12);
- pins->uFlags = 0;
- pins->nLength = 0;
- pins->nLoopStart = pis.loopbegin;
- pins->nLoopEnd = pis.loopend;
- pins->nSustainStart = pis.susloopbegin;
- pins->nSustainEnd = pis.susloopend;
- pins->nC4Speed = pis.C5Speed;
- if (!pins->nC4Speed) pins->nC4Speed = 8363;
- //if (pis.C5Speed < 256) pins->nC4Speed = 256;
- pins->nVolume = pis.vol << 2;
- if (pins->nVolume > 256) pins->nVolume = 256;
- pins->nGlobalVol = pis.gvl;
- if (pins->nGlobalVol > 64) pins->nGlobalVol = 64;
- if (pis.flags & 0x10) pins->uFlags |= CHN_LOOP;
- if (pis.flags & 0x20) pins->uFlags |= CHN_SUSTAINLOOP;
- if (pis.flags & 0x40) pins->uFlags |= CHN_PINGPONGLOOP;
- if (pis.flags & 0x80) pins->uFlags |= CHN_PINGPONGSUSTAIN;
- pins->nPan = (pis.dfp & 0x7F) << 2;
- if (pins->nPan > 256) pins->nPan = 256;
- if (pis.dfp & 0x80) pins->uFlags |= CHN_PANNING;
- pins->nVibType = autovibit2xm[pis.vit & 7];
- pins->nVibRate = pis.vis;
- pins->nVibDepth = pis.vid & 0x7F;
- pins->nVibSweep = pis.vir;
- if ((pis.samplepointer) && (pis.samplepointer < dwMemLength) && (pis.length))
- {
- pins->nLength = pis.length;
- if (pins->nLength > MAX_SAMPLE_LENGTH) pins->nLength = MAX_SAMPLE_LENGTH;
- UINT flags = (pis.cvt & 1) ? RS_PCM8S : RS_PCM8U;
- if (pis.flags & 2)
- {
- flags += 5;
- if (pis.flags & 4) flags |= RSF_STEREO;
- pins->uFlags |= CHN_16BIT;
- // IT 2.14 16-bit packed sample ?
- if (pis.flags & 8) flags = ((pifh.cmwt >= 0x215) && (pis.cvt & 4)) ? RS_IT21516 : RS_IT21416;
- } else
- {
- if (pis.flags & 4) flags |= RSF_STEREO;
- if (pis.cvt == 0xFF) flags = RS_ADPCM4; else
- // IT 2.14 8-bit packed sample ?
- if (pis.flags & 8) flags = ((pifh.cmwt >= 0x215) && (pis.cvt & 4)) ? RS_IT2158 : RS_IT2148;
- }
- ReadSample(&Ins[nsmp+1], flags, (LPSTR)(lpStream+pis.samplepointer), dwMemLength - pis.samplepointer);
- }
- }
- memcpy(m_szNames[nsmp+1], pis.name, 26);
-
- }
-
- Headers[1] = zenv;
- return TRUE;
- }
-
-
- pifh.ordnum = bswapLE16(pifh.ordnum);
- pifh.insnum = bswapLE16(pifh.insnum);
- pifh.smpnum = bswapLE16(pifh.smpnum);
- pifh.patnum = bswapLE16(pifh.patnum);
- pifh.cwtv = bswapLE16(pifh.cwtv);
- pifh.cmwt = bswapLE16(pifh.cmwt);
- pifh.flags = bswapLE16(pifh.flags);
- pifh.special = bswapLE16(pifh.special);
- pifh.msglength = bswapLE16(pifh.msglength);
- pifh.msgoffset = bswapLE32(pifh.msgoffset);
- pifh.reserved2 = bswapLE32(pifh.reserved2);
-
-
-
- if ((pifh.id != 0x4D504D49) || (pifh.insnum >= MAX_INSTRUMENTS)
- || (pifh.smpnum >= MAX_INSTRUMENTS)) return FALSE;
- if (dwMemPos + pifh.ordnum + pifh.insnum*4
- + pifh.smpnum*4 + pifh.patnum*4 > dwMemLength) return FALSE;
- m_nType = MOD_TYPE_IT;
- if (!(pifh.flags & 0x01)) m_dwSongFlags |= SONG_NOSTEREO;
- if (pifh.flags & 0x04) m_dwSongFlags |= SONG_INSTRUMENTMODE;
- if (pifh.flags & 0x08) m_dwSongFlags |= SONG_LINEARSLIDES;
- if (pifh.flags & 0x10) m_dwSongFlags |= SONG_ITOLDEFFECTS;
- if (pifh.flags & 0x20) m_dwSongFlags |= SONG_ITCOMPATMODE;
- if (pifh.flags & 0x40) {
- midi_flags |= MIDI_PITCH_BEND;
- midi_pitch_depth = pifh.pwd;
- }
- if (pifh.flags & 0x80) m_dwSongFlags |= SONG_EMBEDMIDICFG;
- if (pifh.flags & 0x1000) m_dwSongFlags |= SONG_EXFILTERRANGE;
- memcpy(m_szNames[0], pifh.songname, 26);
- m_szNames[0][26] = 0;
- if (pifh.cwtv >= 0x0213) {
- m_rowHighlightMinor = pifh.hilight_minor;
- m_rowHighlightMajor = pifh.hilight_major;
- } else {
- m_rowHighlightMinor = 4;
- m_rowHighlightMajor = 16;
- }
- // Global Volume
- m_nDefaultGlobalVolume = pifh.globalvol << 1;
- if (m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256;
- if (pifh.speed) m_nDefaultSpeed = pifh.speed;
- if (pifh.tempo) m_nDefaultTempo = pifh.tempo;
- m_nSongPreAmp = pifh.mv;
- if (m_nSongPreAmp > 128)
- m_nSongPreAmp = 128;
- m_nStereoSeparation = pifh.sep;
- // Reading Channels Pan Positions
- for (int ipan=0; ipan<64; ipan++) if (pifh.chnpan[ipan] != 0xFF)
- {
- ChnSettings[ipan].nVolume = pifh.chnvol[ipan];
- ChnSettings[ipan].nPan = 128;
- if (pifh.chnpan[ipan] & 0x80) ChnSettings[ipan].dwFlags |= CHN_MUTE;
- UINT n = pifh.chnpan[ipan] & 0x7F;
- if (n <= 64) ChnSettings[ipan].nPan = n << 2;
- if (n == 100) ChnSettings[ipan].dwFlags |= CHN_SURROUND;
- }
- if (m_nChannels < 4) m_nChannels = 4;
- // Reading Song Message
- if ((pifh.special & 0x01) && (pifh.msglength) && (pifh.msgoffset + pifh.msglength < dwMemLength))
- {
- m_lpszSongComments = new char[pifh.msglength+1];
- if (m_lpszSongComments)
- {
- memcpy(m_lpszSongComments, lpStream+pifh.msgoffset, pifh.msglength);
- m_lpszSongComments[pifh.msglength] = 0;
- }
- }
- // Reading orders
- UINT nordsize = pifh.ordnum;
- if (nordsize > MAX_ORDERS) nordsize = MAX_ORDERS;
- memcpy(Order, lpStream+dwMemPos, nordsize);
-
- dwMemPos += pifh.ordnum;
- // Reading Instrument Offsets
- memset(inspos, 0, sizeof(inspos));
- UINT inspossize = pifh.insnum;
- if (inspossize > MAX_INSTRUMENTS) inspossize = MAX_INSTRUMENTS;
- inspossize <<= 2;
- memcpy(inspos, lpStream+dwMemPos, inspossize);
- for (UINT j=0; j < (inspossize>>2); j++)
- {
- inspos[j] = bswapLE32(inspos[j]);
- }
- dwMemPos += pifh.insnum * 4;
- // Reading Samples Offsets
- memset(smppos, 0, sizeof(smppos));
- UINT smppossize = pifh.smpnum;
- if (smppossize > MAX_SAMPLES) smppossize = MAX_SAMPLES;
- smppossize <<= 2;
- memcpy(smppos, lpStream+dwMemPos, smppossize);
- for (UINT j=0; j < (smppossize>>2); j++)
- {
- smppos[j] = bswapLE32(smppos[j]);
- }
- dwMemPos += pifh.smpnum * 4;
- // Reading Patterns Offsets
- memset(patpos, 0, sizeof(patpos));
- UINT patpossize = pifh.patnum;
- if (patpossize > MAX_PATTERNS) patpossize = MAX_PATTERNS;
- patpossize <<= 2;
- memcpy(patpos, lpStream+dwMemPos, patpossize);
- for (UINT j=0; j < (patpossize>>2); j++)
- {
- patpos[j] = bswapLE32(patpos[j]);
- }
- dwMemPos += pifh.patnum * 4;
-
- for (UINT i = 0; i < pifh.ordnum; i++) {
- if (Order[i] >= pifh.patnum && Order[i] < MAX_PATTERNS) {
- pifh.patnum = Order[i];
- for (UINT j = patpossize; j < (unsigned)(pifh.patnum>>2); j++)
- patpos[j] = 0;
- patpossize = pifh.patnum;
- }
- }
-
-
- // Reading IT Extra Info
- if (dwMemPos + 2 < dwMemLength)
- {
- UINT nflt = bswapLE16(*((WORD *)(lpStream + dwMemPos)));
- dwMemPos += 2;
- if (dwMemPos + nflt * 8 < dwMemLength) dwMemPos += nflt * 8;
- }
- // Reading Midi Output & Macros
- if (m_dwSongFlags & SONG_EMBEDMIDICFG)
- {
- if (dwMemPos + sizeof(MODMIDICFG) < dwMemLength)
- {
- memcpy(&m_MidiCfg, lpStream+dwMemPos, sizeof(MODMIDICFG));
- dwMemPos += sizeof(MODMIDICFG);
- } else {
- ResetMidiCfg();
- }
- } else {
- ResetMidiCfg();
- }
-#if 0
- // Read pattern names: "PNAM"
- if ((dwMemPos + 8 < dwMemLength) && (bswapLE32(*((DWORD *)(lpStream+dwMemPos))) == 0x4d414e50))
- {
- UINT len = bswapLE32(*((DWORD *)(lpStream+dwMemPos+4)));
- dwMemPos += 8;
- if ((dwMemPos + len <= dwMemLength) && (len <= MAX_PATTERNS*MAX_PATTERNNAME) && (len >= MAX_PATTERNNAME))
- {
- m_lpszPatternNames = new char[len];
- if (m_lpszPatternNames)
- {
- m_nPatternNames = len / MAX_PATTERNNAME;
- memcpy(m_lpszPatternNames, lpStream+dwMemPos, len);
- }
- dwMemPos += len;
- }
- }
-#endif
- // 4-channels minimum
- m_nChannels = 4;
-#if 0
- // Read channel names: "CNAM"
- if ((dwMemPos + 8 < dwMemLength) && (bswapLE32(*((DWORD *)(lpStream+dwMemPos))) == 0x4d414e43))
- {
- UINT len = bswapLE32(*((DWORD *)(lpStream+dwMemPos+4)));
- dwMemPos += 8;
- if ((dwMemPos + len <= dwMemLength) && (len <= 64*MAX_CHANNELNAME))
- {
- UINT n = len / MAX_CHANNELNAME;
- if (n > m_nChannels) m_nChannels = n;
- for (UINT i=0; i<n; i++)
- {
- memcpy(ChnSettings[i].szName, (lpStream+dwMemPos+i*MAX_CHANNELNAME), MAX_CHANNELNAME);
- ChnSettings[i].szName[MAX_CHANNELNAME-1] = 0;
- }
- dwMemPos += len;
- }
- }
- // Read mix plugins information
- if (dwMemPos + 8 < dwMemLength)
- {
- dwMemPos += LoadMixPlugins(lpStream+dwMemPos, dwMemLength-dwMemPos);
- }
-#endif
- // Checking for unused channels
- UINT npatterns = pifh.patnum;
- if (npatterns > MAX_PATTERNS) npatterns = MAX_PATTERNS;
- for (UINT patchk=0; patchk<npatterns; patchk++)
- {
- memset(chnmask, 0, sizeof(chnmask));
- if ((!patpos[patchk]) || ((DWORD)patpos[patchk] + 4 >= dwMemLength)) continue;
- UINT len = bswapLE16(*((WORD *)(lpStream+patpos[patchk])));
- UINT rows = bswapLE16(*((WORD *)(lpStream+patpos[patchk]+2)));
- if ((rows < 4) || (rows > 256)) continue;
- if (patpos[patchk]+8+len > dwMemLength) continue;
- UINT i = 0;
- const BYTE *p = lpStream+patpos[patchk]+8;
- UINT nrow = 0;
- while (nrow<rows)
- {
- if (i >= len) break;
- BYTE b = p[i++];
- if (!b)
- {
- nrow++;
- continue;
- }
- UINT ch = b & 0x7F;
- if (ch) ch = (ch - 1) & 0x3F;
- if (b & 0x80)
- {
- if (i >= len) break;
- chnmask[ch] = p[i++];
- }
- // Channel used
- if (chnmask[ch] & 0x0F)
- {
- if ((ch >= m_nChannels) && (ch < 64)) m_nChannels = ch+1;
- }
- // Note
- if (chnmask[ch] & 1) i++;
- // Instrument
- if (chnmask[ch] & 2) i++;
- // Volume
- if (chnmask[ch] & 4) i++;
- // Effect
- if (chnmask[ch] & 8) i += 2;
- if (i >= len) break;
- }
- }
- // Reading Instruments
- m_nInstruments = pifh.insnum;
- if (m_nInstruments >= MAX_INSTRUMENTS) m_nInstruments = MAX_INSTRUMENTS-1;
- for (UINT nins=0; nins<m_nInstruments; nins++)
- {
- if ((inspos[nins] > 0) && (inspos[nins] < dwMemLength - sizeof(ITOLDINSTRUMENT)))
- {
- INSTRUMENTHEADER *penv = new INSTRUMENTHEADER;
- if (!penv) continue;
- Headers[nins+1] = penv;
- memset(penv, 0, sizeof(INSTRUMENTHEADER));
- ITInstrToMPT(lpStream + inspos[nins], penv, pifh.cmwt);
- }
- }
- // Reading Samples
- m_nSamples = pifh.smpnum;
- if (m_nSamples >= MAX_SAMPLES) m_nSamples = MAX_SAMPLES-1;
- for (UINT nsmp=0; nsmp<pifh.smpnum; nsmp++) if ((smppos[nsmp]) && (smppos[nsmp] + sizeof(ITSAMPLESTRUCT) <= dwMemLength))
- {
- ITSAMPLESTRUCT pis = *(ITSAMPLESTRUCT *)(lpStream+smppos[nsmp]);
- pis.id = bswapLE32(pis.id);
- pis.length = bswapLE32(pis.length);
- pis.loopbegin = bswapLE32(pis.loopbegin);
- pis.loopend = bswapLE32(pis.loopend);
- pis.C5Speed = bswapLE32(pis.C5Speed);
- pis.susloopbegin = bswapLE32(pis.susloopbegin);
- pis.susloopend = bswapLE32(pis.susloopend);
- pis.samplepointer = bswapLE32(pis.samplepointer);
-
- if (pis.id == 0x53504D49)
- {
- MODINSTRUMENT *pins = &Ins[nsmp+1];
- memcpy(pins->name, pis.filename, 12);
- pins->uFlags = 0;
- pins->nLength = 0;
- pins->nLoopStart = pis.loopbegin;
- pins->nLoopEnd = pis.loopend;
- pins->nSustainStart = pis.susloopbegin;
- pins->nSustainEnd = pis.susloopend;
- pins->nC4Speed = pis.C5Speed;
- if (!pins->nC4Speed) pins->nC4Speed = 8363;
- //if (pis.C5Speed < 256) pins->nC4Speed = 256;
- pins->nVolume = pis.vol << 2;
- if (pins->nVolume > 256) pins->nVolume = 256;
- pins->nGlobalVol = pis.gvl;
- if (pins->nGlobalVol > 64) pins->nGlobalVol = 64;
- if (pis.flags & 0x10) pins->uFlags |= CHN_LOOP;
- if (pis.flags & 0x20) pins->uFlags |= CHN_SUSTAINLOOP;
- if (pis.flags & 0x40) pins->uFlags |= CHN_PINGPONGLOOP;
- if (pis.flags & 0x80) pins->uFlags |= CHN_PINGPONGSUSTAIN;
- pins->nPan = (pis.dfp & 0x7F) << 2;
- if (pins->nPan > 256) pins->nPan = 256;
- if (pis.dfp & 0x80) pins->uFlags |= CHN_PANNING;
- pins->nVibType = autovibit2xm[pis.vit & 7];
- pins->nVibRate = pis.vis;
- pins->nVibDepth = pis.vid & 0x7F;
- pins->nVibSweep = pis.vir;
- if ((pis.samplepointer) && (pis.samplepointer < dwMemLength) && (pis.length))
- {
- pins->nLength = pis.length;
- if (pins->nLength > MAX_SAMPLE_LENGTH) pins->nLength = MAX_SAMPLE_LENGTH;
- UINT flags = (pis.cvt & 1) ? RS_PCM8S : RS_PCM8U;
- if (pis.flags & 2)
- {
- flags += 5;
- if (pis.flags & 4) flags |= RSF_STEREO;
- pins->uFlags |= CHN_16BIT;
- // IT 2.14 16-bit packed sample ?
- if (pis.flags & 8) flags = ((pifh.cmwt >= 0x215) && (pis.cvt & 4)) ? RS_IT21516 : RS_IT21416;
- } else
- {
- if (pis.flags & 4) flags |= RSF_STEREO;
- if (pis.cvt == 0xFF) flags = RS_ADPCM4; else
- // IT 2.14 8-bit packed sample ?
- if (pis.flags & 8) flags = ((pifh.cmwt >= 0x215) && (pis.cvt & 4)) ? RS_IT2158 : RS_IT2148;
- }
- ReadSample(&Ins[nsmp+1], flags, (LPSTR)(lpStream+pis.samplepointer), dwMemLength - pis.samplepointer);
- }
- }
- memcpy(m_szNames[nsmp+1], pis.name, 26);
- }
- // Reading Patterns
- for (UINT npat=0; npat<npatterns; npat++)
- {
- if ((!patpos[npat]) || ((DWORD)patpos[npat] + 4 >= dwMemLength))
- {
- PatternSize[npat] = 64;
- PatternAllocSize[npat] = 64;
- Patterns[npat] = AllocatePattern(64, m_nChannels);
- continue;
- }
-
- UINT len = bswapLE16(*((WORD *)(lpStream+patpos[npat])));
- UINT rows = bswapLE16(*((WORD *)(lpStream+patpos[npat]+2)));
- if ((rows < 4) || (rows > 256)) continue;
- if (patpos[npat]+8+len > dwMemLength) continue;
- PatternSize[npat] = rows;
- PatternAllocSize[npat] = rows;
- if ((Patterns[npat] = AllocatePattern(rows, m_nChannels)) == NULL) continue;
- memset(lastvalue, 0, sizeof(lastvalue));
- memset(chnmask, 0, sizeof(chnmask));
- MODCOMMAND *m = Patterns[npat];
- UINT i = 0;
- const BYTE *p = lpStream+patpos[npat]+8;
- UINT nrow = 0;
- while (nrow<rows)
- {
- if (i >= len) break;
- BYTE b = p[i++];
- if (!b)
- {
- nrow++;
- m+=m_nChannels;
- continue;
- }
- UINT ch = b & 0x7F;
- if (ch) ch = (ch - 1) & 0x3F;
- if (b & 0x80)
- {
- if (i >= len) break;
- chnmask[ch] = p[i++];
- }
- if ((chnmask[ch] & 0x10) && (ch < m_nChannels))
- {
- m[ch].note = lastvalue[ch].note;
- }
- if ((chnmask[ch] & 0x20) && (ch < m_nChannels))
- {
- m[ch].instr = lastvalue[ch].instr;
- }
- if ((chnmask[ch] & 0x40) && (ch < m_nChannels))
- {
- m[ch].volcmd = lastvalue[ch].volcmd;
- m[ch].vol = lastvalue[ch].vol;
- }
- if ((chnmask[ch] & 0x80) && (ch < m_nChannels))
- {
- m[ch].command = lastvalue[ch].command;
- m[ch].param = lastvalue[ch].param;
- }
- if (chnmask[ch] & 1) // Note
- {
- if (i >= len) break;
- UINT note = p[i++];
- if (ch < m_nChannels)
- {
- if (note < 0x80) note++;
- m[ch].note = note;
- lastvalue[ch].note = note;
- channels_used[ch] = TRUE;
- }
- }
- if (chnmask[ch] & 2)
- {
- if (i >= len) break;
- UINT instr = p[i++];
- if (ch < m_nChannels)
- {
- m[ch].instr = instr;
- lastvalue[ch].instr = instr;
- }
- }
- if (chnmask[ch] & 4)
- {
- if (i >= len) break;
- UINT vol = p[i++];
- if (ch < m_nChannels)
- {
- // 0-64: Set Volume
- if (vol <= 64) { m[ch].volcmd = VOLCMD_VOLUME; m[ch].vol = vol; } else
- // 128-192: Set Panning
- if ((vol >= 128) && (vol <= 192)) { m[ch].volcmd = VOLCMD_PANNING; m[ch].vol = vol - 128; } else
- // 65-74: Fine Volume Up
- if (vol < 75) { m[ch].volcmd = VOLCMD_FINEVOLUP; m[ch].vol = vol - 65; } else
- // 75-84: Fine Volume Down
- if (vol < 85) { m[ch].volcmd = VOLCMD_FINEVOLDOWN; m[ch].vol = vol - 75; } else
- // 85-94: Volume Slide Up
- if (vol < 95) { m[ch].volcmd = VOLCMD_VOLSLIDEUP; m[ch].vol = vol - 85; } else
- // 95-104: Volume Slide Down
- if (vol < 105) { m[ch].volcmd = VOLCMD_VOLSLIDEDOWN; m[ch].vol = vol - 95; } else
- // 105-114: Pitch Slide Up
- if (vol < 115) { m[ch].volcmd = VOLCMD_PORTADOWN; m[ch].vol = vol - 105; } else
- // 115-124: Pitch Slide Down
- if (vol < 125) { m[ch].volcmd = VOLCMD_PORTAUP; m[ch].vol = vol - 115; } else
- // 193-202: Portamento To
- if ((vol >= 193) && (vol <= 202)) { m[ch].volcmd = VOLCMD_TONEPORTAMENTO; m[ch].vol = vol - 193; } else
- // 203-212: Vibrato
- if ((vol >= 203) && (vol <= 212)) { m[ch].volcmd = VOLCMD_VIBRATO; m[ch].vol = vol - 203; }
- lastvalue[ch].volcmd = m[ch].volcmd;
- lastvalue[ch].vol = m[ch].vol;
- }
- }
- // Reading command/param
- if (chnmask[ch] & 8)
- {
- if (i > len - 2) break;
- UINT cmd = p[i++];
- UINT param = p[i++];
- if (ch < m_nChannels)
- {
- if (cmd)
- {
- m[ch].command = cmd;
- m[ch].param = param;
- S3MConvert(&m[ch], TRUE);
- lastvalue[ch].command = m[ch].command;
- lastvalue[ch].param = m[ch].param;
- }
- }
- }
- }
- }
- for (UINT ncu=0; ncu<MAX_BASECHANNELS; ncu++)
- {
- if (ncu>=m_nChannels)
- {
- ChnSettings[ncu].nVolume = 64;
- ChnSettings[ncu].dwFlags &= ~CHN_MUTE;
- }
- }
- m_nMinPeriod = 8;
- m_nMaxPeriod = 0xF000;
- return TRUE;
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-// IT 2.14 compression
-
-DWORD ITReadBits(DWORD &bitbuf, UINT &bitnum, LPBYTE &ibuf, CHAR n)
-//-----------------------------------------------------------------
-{
- DWORD retval = 0;
- UINT i = n;
-
- if (n > 0)
- {
- do
- {
- if (!bitnum)
- {
- bitbuf = *ibuf++;
- bitnum = 8;
- }
- retval >>= 1;
- retval |= bitbuf << 31;
- bitbuf >>= 1;
- bitnum--;
- i--;
- } while (i);
- i = n;
- }
- return (retval >> (32-i));
-}
-
-#define IT215_SUPPORT
-void ITUnpack8Bit(signed char *pSample, DWORD dwLen, LPBYTE lpMemFile, DWORD dwMemLength, BOOL b215)
-//-------------------------------------------------------------------------------------------
-{
- signed char *pDst = pSample;
- LPBYTE pSrc = lpMemFile;
- DWORD wHdr = 0;
- DWORD wCount = 0;
- DWORD bitbuf = 0;
- UINT bitnum = 0;
- BYTE bLeft = 0, bTemp = 0, bTemp2 = 0;
-
- while (dwLen)
- {
- if (!wCount)
- {
- wCount = 0x8000;
- wHdr = bswapLE16(*((LPWORD)pSrc));
- pSrc += 2;
- bLeft = 9;
- bTemp = bTemp2 = 0;
- bitbuf = bitnum = 0;
- }
- DWORD d = wCount;
- if (d > dwLen) d = dwLen;
- // Unpacking
- DWORD dwPos = 0;
- do
- {
- WORD wBits = (WORD)ITReadBits(bitbuf, bitnum, pSrc, bLeft);
- if (bLeft < 7)
- {
- DWORD i = 1 << (bLeft-1);
- DWORD j = wBits & 0xFFFF;
- if (i != j) goto UnpackByte;
- wBits = (WORD)(ITReadBits(bitbuf, bitnum, pSrc, 3) + 1) & 0xFF;
- bLeft = ((BYTE)wBits < bLeft) ? (BYTE)wBits : (BYTE)((wBits+1) & 0xFF);
- goto Next;
- }
- if (bLeft < 9)
- {
- WORD i = (0xFF >> (9 - bLeft)) + 4;
- WORD j = i - 8;
- if ((wBits <= j) || (wBits > i)) goto UnpackByte;
- wBits -= j;
- bLeft = ((BYTE)(wBits & 0xFF) < bLeft) ? (BYTE)(wBits & 0xFF) : (BYTE)((wBits+1) & 0xFF);
- goto Next;
- }
- if (bLeft >= 10) goto SkipByte;
- if (wBits >= 256)
- {
- bLeft = (BYTE)(wBits + 1) & 0xFF;
- goto Next;
- }
- UnpackByte:
- if (bLeft < 8)
- {
- BYTE shift = 8 - bLeft;
- signed char c = (signed char)(wBits << shift);
- c >>= shift;
- wBits = (WORD)c;
- }
- wBits += bTemp;
- bTemp = (BYTE)wBits;
- bTemp2 += bTemp;
-#ifdef IT215_SUPPORT
- pDst[dwPos] = (b215) ? bTemp2 : bTemp;
-#else
- pDst[dwPos] = bTemp;
-#endif
- SkipByte:
- dwPos++;
- Next:
- if (pSrc >= lpMemFile+dwMemLength+1) return;
- } while (dwPos < d);
- // Move On
- wCount -= d;
- dwLen -= d;
- pDst += d;
- }
-}
-
-
-void ITUnpack16Bit(signed char *pSample, DWORD dwLen, LPBYTE lpMemFile, DWORD dwMemLength, BOOL b215)
-//--------------------------------------------------------------------------------------------
-{
- signed short *pDst = (signed short *)pSample;
- LPBYTE pSrc = lpMemFile;
- DWORD wHdr = 0;
- DWORD wCount = 0;
- DWORD bitbuf = 0;
- UINT bitnum = 0;
- BYTE bLeft = 0;
- signed short wTemp = 0, wTemp2 = 0;
-
- while (dwLen)
- {
- if (!wCount)
- {
- wCount = 0x4000;
- wHdr = bswapLE16(*((LPWORD)pSrc));
- pSrc += 2;
- bLeft = 17;
- wTemp = wTemp2 = 0;
- bitbuf = bitnum = 0;
- }
- DWORD d = wCount;
- if (d > dwLen) d = dwLen;
- // Unpacking
- DWORD dwPos = 0;
- do
- {
- DWORD dwBits = ITReadBits(bitbuf, bitnum, pSrc, bLeft);
- if (bLeft < 7)
- {
- DWORD i = 1 << (bLeft-1);
- DWORD j = dwBits;
- if (i != j) goto UnpackByte;
- dwBits = ITReadBits(bitbuf, bitnum, pSrc, 4) + 1;
- bLeft = ((BYTE)(dwBits & 0xFF) < bLeft) ? (BYTE)(dwBits & 0xFF) : (BYTE)((dwBits+1) & 0xFF);
- goto Next;
- }
- if (bLeft < 17)
- {
- DWORD i = (0xFFFF >> (17 - bLeft)) + 8;
- DWORD j = (i - 16) & 0xFFFF;
- if ((dwBits <= j) || (dwBits > (i & 0xFFFF))) goto UnpackByte;
- dwBits -= j;
- bLeft = ((BYTE)(dwBits & 0xFF) < bLeft) ? (BYTE)(dwBits & 0xFF) : (BYTE)((dwBits+1) & 0xFF);
- goto Next;
- }
- if (bLeft >= 18) goto SkipByte;
- if (dwBits >= 0x10000)
- {
- bLeft = (BYTE)(dwBits + 1) & 0xFF;
- goto Next;
- }
- UnpackByte:
- if (bLeft < 16)
- {
- BYTE shift = 16 - bLeft;
- signed short c = (signed short)(dwBits << shift);
- c >>= shift;
- dwBits = (DWORD)c;
- }
- dwBits += wTemp;
- wTemp = (signed short)dwBits;
- wTemp2 += wTemp;
-#ifdef IT215_SUPPORT
- pDst[dwPos] = (b215) ? wTemp2 : wTemp;
-#else
- pDst[dwPos] = wTemp;
-#endif
- SkipByte:
- dwPos++;
- Next:
- if (pSrc >= lpMemFile+dwMemLength+1) return;
- } while (dwPos < d);
- // Move On
- wCount -= d;
- dwLen -= d;
- pDst += d;
- if (pSrc >= lpMemFile+dwMemLength) break;
- }
-}
-
-UINT CSoundFile::LoadMixPlugins(const void *pData, UINT nLen)
-//-----------------------------------------------------------
-{
- const BYTE *p = (const BYTE *)pData;
- UINT nPos = 0;
-
- while (nPos+8 < nLen)
- {
- DWORD nPluginSize;
- UINT nPlugin;
-
- nPluginSize = bswapLE32(*(DWORD *)(p+nPos+4));
- if (nPluginSize > nLen-nPos-8) break;;
- if ((bswapLE32(*(DWORD *)(p+nPos))) == 0x58464843)
- {
- for (UINT ch=0; ch<64; ch++) if (ch*4 < nPluginSize)
- {
- ChnSettings[ch].nMixPlugin = bswapLE32(*(DWORD *)(p+nPos+8+ch*4));
- }
- } else
- {
- if ((p[nPos] != 'F') || (p[nPos+1] != 'X')
- || (p[nPos+2] < '0') || (p[nPos+3] < '0'))
- {
- break;
- }
- nPlugin = (p[nPos+2]-'0')*10 + (p[nPos+3]-'0');
- if ((nPlugin < MAX_MIXPLUGINS) && (nPluginSize >= sizeof(SNDMIXPLUGININFO)+4))
- {
- DWORD dwExtra = bswapLE32(*(DWORD *)(p+nPos+8+sizeof(SNDMIXPLUGININFO)));
- m_MixPlugins[nPlugin].Info = *(const SNDMIXPLUGININFO *)(p+nPos+8);
- m_MixPlugins[nPlugin].Info.dwPluginId1 = bswapLE32(m_MixPlugins[nPlugin].Info.dwPluginId1);
- m_MixPlugins[nPlugin].Info.dwPluginId2 = bswapLE32(m_MixPlugins[nPlugin].Info.dwPluginId2);
- m_MixPlugins[nPlugin].Info.dwInputRouting = bswapLE32(m_MixPlugins[nPlugin].Info.dwInputRouting);
- m_MixPlugins[nPlugin].Info.dwOutputRouting = bswapLE32(m_MixPlugins[nPlugin].Info.dwOutputRouting);
- for (UINT j=0; j<4; j++)
- {
- m_MixPlugins[nPlugin].Info.dwReserved[j] = bswapLE32(m_MixPlugins[nPlugin].Info.dwReserved[j]);
- }
- if ((dwExtra) && (dwExtra <= nPluginSize-sizeof(SNDMIXPLUGININFO)-4))
- {
- m_MixPlugins[nPlugin].nPluginDataSize = 0;
- m_MixPlugins[nPlugin].pPluginData = new signed char [dwExtra];
- if (m_MixPlugins[nPlugin].pPluginData)
- {
- m_MixPlugins[nPlugin].nPluginDataSize = dwExtra;
- memcpy(m_MixPlugins[nPlugin].pPluginData, p+nPos+8+sizeof(SNDMIXPLUGININFO)+4, dwExtra);
- }
- }
- }
- }
- nPos += nPluginSize + 8;
- }
- return nPos;
-}
-
diff --git a/src/modplug/load_mdl.cxx b/src/modplug/load_mdl.cxx
deleted file mode 100755
index b9a725f..0000000
--- a/src/modplug/load_mdl.cxx
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-//////////////////////////////////////////////
-// DigiTracker (MDL) module loader //
-//////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-typedef struct MDLSONGHEADER
-{
- DWORD id; // "DMDL" = 0x4C444D44
- BYTE version;
-} MDLSONGHEADER;
-
-
-typedef struct MDLINFOBLOCK
-{
- CHAR songname[32];
- CHAR composer[20];
- WORD norders;
- WORD repeatpos;
- BYTE globalvol;
- BYTE speed;
- BYTE tempo;
- BYTE channelinfo[32];
- BYTE seq[256];
-} MDLINFOBLOCK;
-
-
-typedef struct MDLPATTERNDATA
-{
- BYTE channels;
- BYTE lastrow; // nrows = lastrow+1
- CHAR name[16];
- WORD data[1];
-} MDLPATTERNDATA;
-
-
-void ConvertMDLCommand(MODCOMMAND *m, UINT eff, UINT data)
-//--------------------------------------------------------
-{
- UINT command = 0, param = data;
- switch(eff)
- {
- case 0x01: command = CMD_PORTAMENTOUP; break;
- case 0x02: command = CMD_PORTAMENTODOWN; break;
- case 0x03: command = CMD_TONEPORTAMENTO; break;
- case 0x04: command = CMD_VIBRATO; break;
- case 0x05: command = CMD_ARPEGGIO; break;
- case 0x07: command = (param < 0x20) ? CMD_SPEED : CMD_TEMPO; break;
- case 0x08: command = CMD_PANNING8; param <<= 1; break;
- case 0x0B: command = CMD_POSITIONJUMP; break;
- case 0x0C: command = CMD_GLOBALVOLUME; break;
- case 0x0D: command = CMD_PATTERNBREAK; param = (data & 0x0F) + (data>>4)*10; break;
- case 0x0E:
- command = CMD_S3MCMDEX;
- switch(data & 0xF0)
- {
- case 0x00: command = 0; break; // What is E0x in MDL (there is a bunch) ?
- case 0x10: if (param & 0x0F) { param |= 0xF0; command = CMD_PANNINGSLIDE; } else command = 0; break;
- case 0x20: if (param & 0x0F) { param = (param << 4) | 0x0F; command = CMD_PANNINGSLIDE; } else command = 0; break;
- case 0x30: param = (data & 0x0F) | 0x10; break; // glissando
- case 0x40: param = (data & 0x0F) | 0x30; break; // vibrato waveform
- case 0x60: param = (data & 0x0F) | 0xB0; break;
- case 0x70: param = (data & 0x0F) | 0x40; break; // tremolo waveform
- case 0x90: command = CMD_RETRIG; param &= 0x0F; break;
- case 0xA0: param = (data & 0x0F) << 4; command = CMD_GLOBALVOLSLIDE; break;
- case 0xB0: param = data & 0x0F; command = CMD_GLOBALVOLSLIDE; break;
- case 0xF0: param = ((data >> 8) & 0x0F) | 0xA0; break;
- }
- break;
- case 0x0F: command = CMD_SPEED; break;
-
- case 0x10:
- if ((param & 0xF0) != 0xE0) {
- command = CMD_VOLUMESLIDE;
- if ((param & 0xF0) == 0xF0) {
- param = ((param << 4) | 0x0F);
- } else {
- param >>= 2;
- if (param > 0xF)
- param = 0xF;
- param <<= 4;
- }
- }
- break;
- case 0x20:
- if ((param & 0xF0) != 0xE0) {
- command = CMD_VOLUMESLIDE;
- if ((param & 0xF0) != 0xF0) {
- param >>= 2;
- if (param > 0xF)
- param = 0xF;
- }
- }
- break;
-
- case 0x30: command = CMD_RETRIG; break;
- case 0x40: command = CMD_TREMOLO; break;
- case 0x50: command = CMD_TREMOR; break;
- case 0xEF: if (param > 0xFF) param = 0xFF; command = CMD_OFFSET; break;
- }
- if (command)
- {
- m->command = command;
- m->param = param;
- }
-}
-
-
-void UnpackMDLTrack(MODCOMMAND *pat, UINT nChannels, UINT nRows, UINT nTrack, const BYTE *lpTracks)
-//-------------------------------------------------------------------------------------------------
-{
- MODCOMMAND cmd, *m = pat;
- UINT len = *((WORD *)lpTracks);
- UINT pos = 0, row = 0, i;
- lpTracks += 2;
- for (UINT ntrk=1; ntrk<nTrack; ntrk++)
- {
- lpTracks += len;
- len = *((WORD *)lpTracks);
- lpTracks += 2;
- }
- cmd.note = cmd.instr = 0;
- cmd.volcmd = cmd.vol = 0;
- cmd.command = cmd.param = 0;
- while ((row < nRows) && (pos < len))
- {
- UINT xx;
- BYTE b = lpTracks[pos++];
- xx = b >> 2;
- switch(b & 0x03)
- {
- case 0x01:
- for (i=0; i<=xx; i++)
- {
- if (row) *m = *(m-nChannels);
- m += nChannels;
- row++;
- if (row >= nRows) break;
- }
- break;
-
- case 0x02:
- if (xx < row) *m = pat[nChannels*xx];
- m += nChannels;
- row++;
- break;
-
- case 0x03:
- {
- cmd.note = (xx & 0x01) ? lpTracks[pos++] : 0;
- cmd.instr = (xx & 0x02) ? lpTracks[pos++] : 0;
- cmd.volcmd = cmd.vol = 0;
- cmd.command = cmd.param = 0;
- if ((cmd.note < 120-12) && (cmd.note)) cmd.note += 12;
- UINT volume = (xx & 0x04) ? lpTracks[pos++] : 0;
- UINT commands = (xx & 0x08) ? lpTracks[pos++] : 0;
- UINT command1 = commands & 0x0F;
- UINT command2 = commands & 0xF0;
- UINT param1 = (xx & 0x10) ? lpTracks[pos++] : 0;
- UINT param2 = (xx & 0x20) ? lpTracks[pos++] : 0;
- if ((command1 == 0x0E) && ((param1 & 0xF0) == 0xF0) && (!command2))
- {
- param1 = ((param1 & 0x0F) << 8) | param2;
- command1 = 0xEF;
- command2 = param2 = 0;
- }
- if (volume)
- {
- cmd.volcmd = VOLCMD_VOLUME;
- cmd.vol = (volume+1) >> 2;
- }
- ConvertMDLCommand(&cmd, command1, param1);
- if ((cmd.command != CMD_SPEED)
- && (cmd.command != CMD_TEMPO)
- && (cmd.command != CMD_PATTERNBREAK))
- ConvertMDLCommand(&cmd, command2, param2);
- *m = cmd;
- m += nChannels;
- row++;
- }
- break;
-
- // Empty Slots
- default:
- row += xx+1;
- m += (xx+1)*nChannels;
- if (row >= nRows) break;
- }
- }
-}
-
-
-
-BOOL CSoundFile::ReadMDL(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- DWORD dwMemPos, dwPos, blocklen, dwTrackPos;
- const MDLSONGHEADER *pmsh = (const MDLSONGHEADER *)lpStream;
- MDLINFOBLOCK *pmib;
- MDLPATTERNDATA *pmpd;
- UINT i,j, norders = 0, npatterns = 0, ntracks = 0;
- UINT ninstruments = 0, nsamples = 0;
- WORD block;
- WORD patterntracks[MAX_PATTERNS*32];
- BYTE smpinfo[MAX_SAMPLES];
- BYTE insvolenv[MAX_INSTRUMENTS];
- BYTE inspanenv[MAX_INSTRUMENTS];
- LPCBYTE pvolenv, ppanenv, ppitchenv;
- UINT nvolenv, npanenv, npitchenv;
-
- if ((!lpStream) || (dwMemLength < 1024)) return FALSE;
- if ((bswapLE32(pmsh->id) != 0x4C444D44) || ((pmsh->version & 0xF0) > 0x10)) return FALSE;
- memset(patterntracks, 0, sizeof(patterntracks));
- memset(smpinfo, 0, sizeof(smpinfo));
- memset(insvolenv, 0, sizeof(insvolenv));
- memset(inspanenv, 0, sizeof(inspanenv));
- dwMemPos = 5;
- dwTrackPos = 0;
- pvolenv = ppanenv = ppitchenv = NULL;
- nvolenv = npanenv = npitchenv = 0;
- m_nSamples = m_nInstruments = 0;
- m_dwSongFlags |= SONG_INSTRUMENTMODE;
- while (dwMemPos+6 < dwMemLength)
- {
- block = *((WORD *)(lpStream+dwMemPos));
- blocklen = *((DWORD *)(lpStream+dwMemPos+2));
- block = bswapLE16(block);
- blocklen = bswapLE32(blocklen);
- dwMemPos += 6;
- if (dwMemPos + blocklen > dwMemLength)
- {
- if (dwMemPos == 11) return FALSE;
- break;
- }
- switch(block)
- {
- // IN: infoblock
- case 0x4E49:
- pmib = (MDLINFOBLOCK *)(lpStream+dwMemPos);
- memcpy(m_szNames[0], pmib->songname, 32);
- norders = bswapLE16(pmib->norders);
- if (norders > MAX_ORDERS) norders = MAX_ORDERS;
- m_nRestartPos = bswapLE16(pmib->repeatpos);
- m_nDefaultGlobalVolume = pmib->globalvol;
- if (m_nDefaultGlobalVolume == 255)
- m_nDefaultGlobalVolume++;
- m_nDefaultTempo = pmib->tempo;
- m_nDefaultSpeed = pmib->speed;
- m_nChannels = 4;
- for (i=0; i<32; i++)
- {
- ChnSettings[i].nVolume = 64;
- ChnSettings[i].nPan = (pmib->channelinfo[i] & 0x7F) << 1;
- if (pmib->channelinfo[i] & 0x80)
- ChnSettings[i].dwFlags |= CHN_MUTE;
- else
- m_nChannels = i+1;
- }
- for (j=0; j<norders; j++) Order[j] = pmib->seq[j];
- break;
- // ME: song message
- case 0x454D:
- if (blocklen)
- {
- if (m_lpszSongComments) delete m_lpszSongComments;
- m_lpszSongComments = new char[blocklen];
- if (m_lpszSongComments)
- {
- memcpy(m_lpszSongComments, lpStream+dwMemPos, blocklen);
- m_lpszSongComments[blocklen-1] = 0;
- }
- }
- break;
- // PA: Pattern Data
- case 0x4150:
- npatterns = lpStream[dwMemPos];
- if (npatterns > MAX_PATTERNS) npatterns = MAX_PATTERNS;
- dwPos = dwMemPos + 1;
- for (i=0; i<npatterns; i++)
- {
- if (dwPos+18 >= dwMemLength) break;
- pmpd = (MDLPATTERNDATA *)(lpStream + dwPos);
- if (pmpd->channels > 32) break;
- PatternSize[i] = pmpd->lastrow+1;
- PatternAllocSize[i] = pmpd->lastrow+1;
- if (m_nChannels < pmpd->channels) m_nChannels = pmpd->channels;
- dwPos += 18 + 2*pmpd->channels;
- for (j=0; j<pmpd->channels; j++)
- {
- patterntracks[i*32+j] = bswapLE16(pmpd->data[j]);
- }
- }
- break;
- // TR: Track Data
- case 0x5254:
- if (dwTrackPos) break;
- ntracks = *((WORD *)(lpStream+dwMemPos));
- ntracks = bswapLE16(ntracks);
- dwTrackPos = dwMemPos+2;
- break;
- // II: Instruments
- case 0x4949:
- ninstruments = lpStream[dwMemPos];
- dwPos = dwMemPos+1;
- for (i=0; i<ninstruments; i++)
- {
- UINT nins = lpStream[dwPos];
- if ((nins >= MAX_INSTRUMENTS) || (!nins)) break;
- if (m_nInstruments < nins) m_nInstruments = nins;
- if (!Headers[nins])
- {
- UINT note = 12;
- if ((Headers[nins] = new INSTRUMENTHEADER) == NULL) break;
- INSTRUMENTHEADER *penv = Headers[nins];
- memset(penv, 0, sizeof(INSTRUMENTHEADER));
- memcpy(penv->name, lpStream+dwPos+2, 32);
- penv->nGlobalVol = 128;
- penv->nPPC = 5*12;
- for (j=0; j<lpStream[dwPos+1]; j++)
- {
- const BYTE *ps = lpStream+dwPos+34+14*j;
- while ((note < (UINT)(ps[1]+12)) && (note < 120))
- {
- penv->NoteMap[note] = note+1;
- if (ps[0] < MAX_SAMPLES)
- {
- int ismp = ps[0];
- penv->Keyboard[note] = ps[0];
- Ins[ismp].nVolume = ps[2];
- Ins[ismp].nPan = ps[4] << 1;
- Ins[ismp].nVibType = ps[11];
- Ins[ismp].nVibSweep = ps[10];
- Ins[ismp].nVibDepth = ps[9];
- Ins[ismp].nVibRate = ps[8];
- }
- penv->nFadeOut = (ps[7] << 8) | ps[6];
- if (penv->nFadeOut == 0xFFFF) penv->nFadeOut = 0;
- note++;
- }
- // Use volume envelope ?
- if (ps[3] & 0x80)
- {
- penv->dwFlags |= ENV_VOLUME;
- insvolenv[nins] = (ps[3] & 0x3F) + 1;
- }
- // Use panning envelope ?
- if (ps[5] & 0x80)
- {
- penv->dwFlags |= ENV_PANNING;
- inspanenv[nins] = (ps[5] & 0x3F) + 1;
- }
- }
- }
- dwPos += 34 + 14*lpStream[dwPos+1];
- }
- for (j=1; j<=m_nInstruments; j++) if (!Headers[j])
- {
- Headers[j] = new INSTRUMENTHEADER;
- if (Headers[j]) memset(Headers[j], 0, sizeof(INSTRUMENTHEADER));
- }
- break;
- // VE: Volume Envelope
- case 0x4556:
- if ((nvolenv = lpStream[dwMemPos]) == 0) break;
- if (dwMemPos + nvolenv*32 + 1 <= dwMemLength) pvolenv = lpStream + dwMemPos + 1;
- break;
- // PE: Panning Envelope
- case 0x4550:
- if ((npanenv = lpStream[dwMemPos]) == 0) break;
- if (dwMemPos + npanenv*32 + 1 <= dwMemLength) ppanenv = lpStream + dwMemPos + 1;
- break;
- // FE: Pitch Envelope
- case 0x4546:
- if ((npitchenv = lpStream[dwMemPos]) == 0) break;
- if (dwMemPos + npitchenv*32 + 1 <= dwMemLength) ppitchenv = lpStream + dwMemPos + 1;
- break;
- // IS: Sample Infoblock
- case 0x5349:
- nsamples = lpStream[dwMemPos];
- dwPos = dwMemPos+1;
- for (i=0; i<nsamples; i++, dwPos += 59)
- {
- UINT nins = lpStream[dwPos];
- if ((nins >= MAX_SAMPLES) || (!nins)) continue;
- if (m_nSamples < nins) m_nSamples = nins;
- MODINSTRUMENT *pins = &Ins[nins];
- memcpy(m_szNames[nins], lpStream+dwPos+1, 32);
- memcpy(pins->name, lpStream+dwPos+33, 8);
- pins->nC4Speed = *((DWORD *)(lpStream+dwPos+41));
- pins->nC4Speed = bswapLE32(pins->nC4Speed);
- pins->nLength = *((DWORD *)(lpStream+dwPos+45));
- pins->nLength = bswapLE32(pins->nLength);
- pins->nLoopStart = *((DWORD *)(lpStream+dwPos+49));
- pins->nLoopStart = bswapLE32(pins->nLoopStart);
- pins->nLoopEnd = pins->nLoopStart + *((DWORD *)(lpStream+dwPos+53));
- pins->nLoopEnd = bswapLE32(pins->nLoopEnd);
- if (pins->nLoopEnd > pins->nLoopStart) pins->uFlags |= CHN_LOOP;
- pins->nGlobalVol = 64;
- if (lpStream[dwPos+58] & 0x01)
- {
- pins->uFlags |= CHN_16BIT;
- pins->nLength >>= 1;
- pins->nLoopStart >>= 1;
- pins->nLoopEnd >>= 1;
- }
- if (lpStream[dwPos+58] & 0x02) pins->uFlags |= CHN_PINGPONGLOOP;
- smpinfo[nins] = (lpStream[dwPos+58] >> 2) & 3;
- }
- break;
- // SA: Sample Data
- case 0x4153:
- dwPos = dwMemPos;
- for (i=1; i<=m_nSamples; i++) if ((Ins[i].nLength) && (!Ins[i].pSample) && (smpinfo[i] != 3) && (dwPos < dwMemLength))
- {
- MODINSTRUMENT *pins = &Ins[i];
- UINT flags = (pins->uFlags & CHN_16BIT) ? RS_PCM16S : RS_PCM8S;
- if (!smpinfo[i])
- {
- dwPos += ReadSample(pins, flags, (LPSTR)(lpStream+dwPos), dwMemLength - dwPos);
- } else
- {
- DWORD dwLen = *((DWORD *)(lpStream+dwPos));
- dwLen = bswapLE32(dwLen);
- dwPos += 4;
- if ((dwPos+dwLen <= dwMemLength) && (dwLen > 4))
- {
- flags = (pins->uFlags & CHN_16BIT) ? RS_MDL16 : RS_MDL8;
- ReadSample(pins, flags, (LPSTR)(lpStream+dwPos), dwLen);
- }
- dwPos += dwLen;
- }
- }
- break;
- }
- dwMemPos += blocklen;
- }
- // Unpack Patterns
- if ((dwTrackPos) && (npatterns) && (m_nChannels) && (ntracks))
- {
- for (UINT ipat=0; ipat<npatterns; ipat++)
- {
- if ((Patterns[ipat] = AllocatePattern(PatternSize[ipat], m_nChannels)) == NULL) break;
- for (UINT chn=0; chn<m_nChannels; chn++) if ((patterntracks[ipat*32+chn]) && (patterntracks[ipat*32+chn] <= ntracks))
- {
- MODCOMMAND *m = Patterns[ipat] + chn;
- UnpackMDLTrack(m, m_nChannels, PatternSize[ipat], patterntracks[ipat*32+chn], lpStream+dwTrackPos);
- }
- }
- }
- // Set up envelopes
- for (UINT iIns=1; iIns<=m_nInstruments; iIns++) if (Headers[iIns])
- {
- INSTRUMENTHEADER *penv = Headers[iIns];
- // Setup volume envelope
- if ((nvolenv) && (pvolenv) && (insvolenv[iIns]))
- {
- LPCBYTE pve = pvolenv;
- for (UINT nve=0; nve<nvolenv; nve++, pve+=33) if (pve[0]+1 == insvolenv[iIns])
- {
- WORD vtick = 1;
- penv->VolEnv.nNodes = 15;
- for (UINT iv=0; iv<15; iv++)
- {
- if (iv) vtick += pve[iv*2+1];
- penv->VolEnv.Ticks[iv] = vtick;
- penv->VolEnv.Values[iv] = pve[iv*2+2];
- if (!pve[iv*2+1])
- {
- penv->VolEnv.nNodes = iv+1;
- break;
- }
- }
- penv->VolEnv.nSustainStart = penv->VolEnv.nSustainEnd = pve[31] & 0x0F;
- if (pve[31] & 0x10) penv->dwFlags |= ENV_VOLSUSTAIN;
- if (pve[31] & 0x20) penv->dwFlags |= ENV_VOLLOOP;
- penv->VolEnv.nLoopStart = pve[32] & 0x0F;
- penv->VolEnv.nLoopEnd = pve[32] >> 4;
- }
- }
- // Setup panning envelope
- if ((npanenv) && (ppanenv) && (inspanenv[iIns]))
- {
- LPCBYTE ppe = ppanenv;
- for (UINT npe=0; npe<npanenv; npe++, ppe+=33) if (ppe[0]+1 == inspanenv[iIns])
- {
- WORD vtick = 1;
- penv->PanEnv.nNodes = 15;
- for (UINT iv=0; iv<15; iv++)
- {
- if (iv) vtick += ppe[iv*2+1];
- penv->PanEnv.Ticks[iv] = vtick;
- penv->PanEnv.Values[iv] = ppe[iv*2+2];
- if (!ppe[iv*2+1])
- {
- penv->PanEnv.nNodes = iv+1;
- break;
- }
- }
- if (ppe[31] & 0x10) penv->dwFlags |= ENV_PANSUSTAIN;
- if (ppe[31] & 0x20) penv->dwFlags |= ENV_PANLOOP;
- penv->PanEnv.nLoopStart = ppe[32] & 0x0F;
- penv->PanEnv.nLoopEnd = ppe[32] >> 4;
- }
- }
- }
- m_dwSongFlags |= SONG_LINEARSLIDES;
- m_nType = MOD_TYPE_MDL;
- return TRUE;
-}
-
-
-/////////////////////////////////////////////////////////////////////////
-// MDL Sample Unpacking
-
-// MDL Huffman ReadBits compression
-WORD MDLReadBits(DWORD &bitbuf, UINT &bitnum, LPBYTE &ibuf, CHAR n)
-//-----------------------------------------------------------------
-{
- WORD v = (WORD)(bitbuf & ((1 << n) - 1) );
- bitbuf >>= n;
- bitnum -= n;
- if (bitnum <= 24)
- {
- bitbuf |= (((DWORD)(*ibuf++)) << bitnum);
- bitnum += 8;
- }
- return v;
-}
-
-
diff --git a/src/modplug/load_med.cxx b/src/modplug/load_med.cxx
deleted file mode 100755
index 858ef5e..0000000
--- a/src/modplug/load_med.cxx
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#define MED_LOG
-
-#ifdef MED_LOG
-extern void Log(LPCSTR s, ...);
-#endif
-
-//////////////////////////////////////////////////////////
-// OctaMed MED file support (import only)
-
-// flags
-#define MMD_FLAG_FILTERON 0x1
-#define MMD_FLAG_JUMPINGON 0x2
-#define MMD_FLAG_JUMP8TH 0x4
-#define MMD_FLAG_INSTRSATT 0x8 // instruments are attached (this is a module)
-#define MMD_FLAG_VOLHEX 0x10
-#define MMD_FLAG_STSLIDE 0x20 // SoundTracker mode for slides
-#define MMD_FLAG_8CHANNEL 0x40 // OctaMED 8 channel song
-#define MMD_FLAG_SLOWHQ 0x80 // HQ slows playing speed (V2-V4 compatibility)
-// flags2
-#define MMD_FLAG2_BMASK 0x1F
-#define MMD_FLAG2_BPM 0x20
-#define MMD_FLAG2_MIX 0x80 // uses Mixing (V7+)
-// flags3:
-#define MMD_FLAG3_STEREO 0x1 // mixing in Stereo mode
-#define MMD_FLAG3_FREEPAN 0x2 // free panning
-#define MMD_FLAG3_GM 0x4 // module designed for GM/XG compatibility
-
-
-// generic MMD tags
-#define MMDTAG_END 0
-#define MMDTAG_PTR 0x80000000 // data needs relocation
-#define MMDTAG_MUSTKNOW 0x40000000 // loader must fail if this isn't recognized
-#define MMDTAG_MUSTWARN 0x20000000 // loader must warn if this isn't recognized
-
-// ExpData tags
-// # of effect groups, including the global group (will
-// override settings in MMDSong struct), default = 1
-#define MMDTAG_EXP_NUMFXGROUPS 1
-#define MMDTAG_TRK_NAME (MMDTAG_PTR|1) // trackinfo tags
-#define MMDTAG_TRK_NAMELEN 2 // namelen includes zero term.
-#define MMDTAG_TRK_FXGROUP 3
-// effectinfo tags
-#define MMDTAG_FX_ECHOTYPE 1
-#define MMDTAG_FX_ECHOLEN 2
-#define MMDTAG_FX_ECHODEPTH 3
-#define MMDTAG_FX_STEREOSEP 4
-#define MMDTAG_FX_GROUPNAME (MMDTAG_PTR|5) // the Global Effects group shouldn't have name saved!
-#define MMDTAG_FX_GRPNAMELEN 6 // namelen includes zero term.
-
-#pragma pack(1)
-
-typedef struct tagMEDMODULEHEADER
-{
- DWORD id; // MMD1-MMD3
- DWORD modlen; // Size of file
- DWORD song; // Position in file for this song
- WORD psecnum;
- WORD pseq;
- DWORD blockarr; // Position in file for blocks
- DWORD mmdflags;
- DWORD smplarr; // Position in file for samples
- DWORD reserved;
- DWORD expdata; // Absolute offset in file for ExpData (0 if not present)
- DWORD reserved2;
- WORD pstate;
- WORD pblock;
- WORD pline;
- WORD pseqnum;
- WORD actplayline;
- BYTE counter;
- BYTE extra_songs; // # of songs - 1
-} MEDMODULEHEADER;
-
-
-typedef struct tagMMD0SAMPLE
-{
- WORD rep, replen;
- BYTE midich;
- BYTE midipreset;
- BYTE svol;
- signed char strans;
-} MMD0SAMPLE;
-
-
-// Sample header is immediately followed by sample data...
-typedef struct tagMMDSAMPLEHEADER
-{
- DWORD length; // length of *one* *unpacked* channel in *bytes*
- WORD type;
- // if non-negative
- // bits 0-3 reserved for multi-octave instruments, not supported on the PC
- // 0x10: 16 bit (otherwise 8 bit)
- // 0x20: Stereo (otherwise mono)
- // 0x40: Uses DeltaCode
- // 0x80: Packed data
- // -1: Synth
- // -2: Hybrid
- // if type indicates packed data, these fields follow, otherwise we go right to the data
- WORD packtype; // Only 1 = ADPCM is supported
- WORD subtype; // Packing subtype
- // ADPCM subtype
- // 1: g723_40
- // 2: g721
- // 3: g723_24
- BYTE commonflags; // flags common to all packtypes (none defined so far)
- BYTE packerflags; // flags for the specific packtype
- ULONG leftchlen; // packed length of left channel in bytes
- ULONG rightchlen; // packed length of right channel in bytes (ONLY PRESENT IN STEREO SAMPLES)
- BYTE SampleData[1]; // Sample Data
-} MMDSAMPLEHEADER;
-
-
-// MMD0/MMD1 song header
-typedef struct tagMMD0SONGHEADER
-{
- MMD0SAMPLE sample[63];
- WORD numblocks; // # of blocks
- WORD songlen; // # of entries used in playseq
- BYTE playseq[256]; // Play sequence
- WORD deftempo; // BPM tempo
- signed char playtransp; // Play transpose
- BYTE flags; // 0x10: Hex Volumes | 0x20: ST/NT/PT Slides | 0x40: 8 Channels song
- BYTE flags2; // [b4-b0]+1: Tempo LPB, 0x20: tempo mode, 0x80: mix_conv=on
- BYTE tempo2; // tempo TPL
- BYTE trkvol[16]; // track volumes
- BYTE mastervol; // master volume
- BYTE numsamples; // # of samples (max=63)
-} MMD0SONGHEADER;
-
-
-// MMD2/MMD3 song header
-typedef struct tagMMD2SONGHEADER
-{
- MMD0SAMPLE sample[63];
- WORD numblocks; // # of blocks
- WORD numsections; // # of sections
- DWORD playseqtable; // filepos of play sequence
- DWORD sectiontable; // filepos of sections table (WORD array)
- DWORD trackvols; // filepos of tracks volume (BYTE array)
- WORD numtracks; // # of tracks (max 64)
- WORD numpseqs; // # of play sequences
- DWORD trackpans; // filepos of tracks pan values (BYTE array)
- LONG flags3; // 0x1:stereo_mix, 0x2:free_panning, 0x4:GM/XG compatibility
- WORD voladj; // vol_adjust (set to 100 if 0)
- WORD channels; // # of channels (4 if =0)
- BYTE mix_echotype; // 1:normal,2:xecho
- BYTE mix_echodepth; // 1..6
- WORD mix_echolen; // > 0
- signed char mix_stereosep; // -4..4
- BYTE pad0[223];
- WORD deftempo; // BPM tempo
- signed char playtransp; // play transpose
- BYTE flags; // 0x1:filteron, 0x2:jumpingon, 0x4:jump8th, 0x8:instr_attached, 0x10:hex_vol, 0x20:PT_slides, 0x40:8ch_conv,0x80:hq slows playing speed
- BYTE flags2; // 0x80:mix_conv=on, [b4-b0]+1:tempo LPB, 0x20:tempo_mode
- BYTE tempo2; // tempo TPL
- BYTE pad1[16];
- BYTE mastervol; // master volume
- BYTE numsamples; // # of samples (max 63)
-} MMD2SONGHEADER;
-
-// For MMD0 the note information is held in 3 bytes, byte0, byte1, byte2. For reference we
-// number the bits in each byte 0..7, where 0 is the low bit.
-// The note is held as bits 5..0 of byte0
-// The instrument is encoded in 6 bits, bits 7 and 6 of byte0 and bits 7,6,5,4 of byte1
-// The command number is bits 3,2,1,0 of byte1, command data is in byte2:
-// For command 0, byte2 represents the second data byte, otherwise byte2
-// represents the first data byte.
-typedef struct tagMMD0BLOCK
-{
- BYTE numtracks;
- BYTE lines; // File value is 1 less than actual, so 0 -> 1 line
-} MMD0BLOCK; // BYTE data[lines+1][tracks][3];
-
-
-// For MMD1,MMD2,MMD3 the note information is carried in 4 bytes, byte0, byte1,
-// byte2 and byte3
-// The note is held as byte0 (values above 0x84 are ignored)
-// The instrument is held as byte1
-// The command number is held as byte2, command data is in byte3
-// For commands 0 and 0x19 byte3 represents the second data byte,
-// otherwise byte2 represents the first data byte.
-typedef struct tagMMD1BLOCK
-{
- WORD numtracks; // Number of tracks, may be > 64, but then that data is skipped.
- WORD lines; // Stored value is 1 less than actual, so 0 -> 1 line
- DWORD info; // Offset of BlockInfo (if 0, no block_info is present)
-} MMD1BLOCK;
-
-
-typedef struct tagMMD1BLOCKINFO
-{
- DWORD hlmask; // Unimplemented - ignore
- DWORD blockname; // file offset of block name
- DWORD blocknamelen; // length of block name (including term. 0)
- DWORD pagetable; // file offset of command page table
- DWORD cmdexttable; // file offset of command extension table
- DWORD reserved[4]; // future expansion
-} MMD1BLOCKINFO;
-
-
-// A set of play sequences is stored as an array of ULONG files offsets
-// Each offset points to the play sequence itself.
-typedef struct tagMMD2PLAYSEQ
-{
- CHAR name[32];
- DWORD command_offs; // filepos of command table
- DWORD reserved;
- WORD length;
- WORD seq[512]; // skip if > 0x8000
-} MMD2PLAYSEQ;
-
-
-// A command table contains commands that effect a particular play sequence
-// entry. The only commands read in are STOP or POSJUMP, all others are ignored
-// POSJUMP is presumed to have extra bytes containing a WORD for the position
-typedef struct tagMMDCOMMAND
-{
- WORD offset; // Offset within current sequence entry
- BYTE cmdnumber; // STOP (537) or POSJUMP (538) (others skipped)
- BYTE extra_count;
- BYTE extra_bytes[4];// [extra_count];
-} MMDCOMMAND; // Last entry has offset == 0xFFFF, cmd_number == 0 and 0 extrabytes
-
-
-typedef struct tagMMD0EXP
-{
- DWORD nextmod; // File offset of next Hdr
- DWORD exp_smp; // Pointer to extra instrument data
- WORD s_ext_entries; // Number of extra instrument entries
- WORD s_ext_entrsz; // Size of extra instrument data
- DWORD annotxt;
- DWORD annolen;
- DWORD iinfo; // Instrument names
- WORD i_ext_entries;
- WORD i_ext_entrsz;
- DWORD jumpmask;
- DWORD rgbtable;
- BYTE channelsplit[4]; // Only used if 8ch_conv (extra channel for every nonzero entry)
- DWORD n_info;
- DWORD songname; // Song name
- DWORD songnamelen;
- DWORD dumps;
- DWORD mmdinfo;
- DWORD mmdrexx;
- DWORD mmdcmd3x;
- DWORD trackinfo_ofs; // ptr to song->numtracks ptrs to tag lists
- DWORD effectinfo_ofs; // ptr to group ptrs
- DWORD tag_end;
-} MMD0EXP;
-
-#pragma pack()
-
-
-
-static void MedConvert(MODCOMMAND *p, const MMD0SONGHEADER *pmsh)
-//---------------------------------------------------------------
-{
- const BYTE bpmvals[9] = { 179,164,152,141,131,123,116,110,104};
-
- UINT command = p->command;
- UINT param = p->param;
- switch(command)
- {
- case 0x00: if (param) command = CMD_ARPEGGIO; else command = 0; break;
- case 0x01: command = CMD_PORTAMENTOUP; break;
- case 0x02: command = CMD_PORTAMENTODOWN; break;
- case 0x03: command = CMD_TONEPORTAMENTO; break;
- case 0x04: command = CMD_VIBRATO; break;
- case 0x05: command = CMD_TONEPORTAVOL; break;
- case 0x06: command = CMD_VIBRATOVOL; break;
- case 0x07: command = CMD_TREMOLO; break;
- case 0x0A: if (param & 0xF0) param &= 0xF0; command = CMD_VOLUMESLIDE; if (!param) command = 0; break;
- case 0x0B: command = CMD_POSITIONJUMP; break;
- case 0x0C: command = CMD_VOLUME;
- if (pmsh->flags & MMD_FLAG_VOLHEX)
- {
- if (param < 0x80)
- {
- param = (param+1) / 2;
- } else command = 0;
- } else
- {
- if (param <= 0x99)
- {
- param = (param >> 4)*10+((param & 0x0F) % 10);
- if (param > 64) param = 64;
- } else command = 0;
- }
- break;
- case 0x09: command = (param < 0x20) ? CMD_SPEED : CMD_TEMPO; break;
- case 0x0D: if (param & 0xF0) param &= 0xF0; command = CMD_VOLUMESLIDE; if (!param) command = 0; break;
- case 0x0F: // Set Tempo / Special
- // F.00 = Pattern Break
- if (!param) command = CMD_PATTERNBREAK; else
- // F.01 - F.F0: Set tempo/speed
- if (param <= 0xF0)
- {
- if (pmsh->flags & MMD_FLAG_8CHANNEL)
- {
- param = (param > 10) ? 99 : bpmvals[param-1];
- } else
- // F.01 - F.0A: Set Speed
- if (param <= 0x0A)
- {
- command = CMD_SPEED;
- } else
- // Old tempo
- if (!(pmsh->flags2 & MMD_FLAG2_BPM))
- {
- param = _muldiv(param, 5*715909, 2*474326);
- }
- // F.0B - F.F0: Set Tempo (assumes LPB=4)
- if (param > 0x0A)
- {
- command = CMD_TEMPO;
- if (param < 0x21) param = 0x21;
- if (param > 240) param = 240;
- }
- } else
- switch(param)
- {
- // F.F1: Retrig 2x
- case 0xF1:
- command = CMD_MODCMDEX;
- param = 0x93;
- break;
- // F.F2: Note Delay 2x
- case 0xF2:
- command = CMD_MODCMDEX;
- param = 0xD3;
- break;
- // F.F3: Retrig 3x
- case 0xF3:
- command = CMD_MODCMDEX;
- param = 0x92;
- break;
- // F.F4: Note Delay 1/3
- case 0xF4:
- command = CMD_MODCMDEX;
- param = 0xD2;
- break;
- // F.F5: Note Delay 2/3
- case 0xF5:
- command = CMD_MODCMDEX;
- param = 0xD4;
- break;
- // F.F8: Filter Off
- case 0xF8:
- command = CMD_MODCMDEX;
- param = 0x00;
- break;
- // F.F9: Filter On
- case 0xF9:
- command = CMD_MODCMDEX;
- param = 0x01;
- break;
- // F.FD: Very fast tone-portamento
- case 0xFD:
- command = CMD_TONEPORTAMENTO;
- param = 0xFF;
- break;
- // F.FE: End Song
- case 0xFE:
- command = CMD_SPEED;
- param = 0;
- break;
- // F.FF: Note Cut
- case 0xFF:
- command = CMD_MODCMDEX;
- param = 0xC0;
- break;
- default:
-#ifdef MED_LOG
- Log("Unknown Fxx command: cmd=0x%02X param=0x%02X\n", command, param);
-#endif
- param = command = 0;
- }
- break;
- // 11.0x: Fine Slide Up
- case 0x11:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0x10;
- break;
- // 12.0x: Fine Slide Down
- case 0x12:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0x20;
- break;
- // 14.xx: Vibrato
- case 0x14:
- command = CMD_VIBRATO;
- break;
- // 15.xx: FineTune
- case 0x15:
- command = CMD_MODCMDEX;
- param &= 0x0F;
- param |= 0x50;
- break;
- // 16.xx: Pattern Loop
- case 0x16:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0x60;
- break;
- // 18.xx: Note Cut
- case 0x18:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0xC0;
- break;
- // 19.xx: Sample Offset
- case 0x19:
- command = CMD_OFFSET;
- break;
- // 1A.0x: Fine Volume Up
- case 0x1A:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0xA0;
- break;
- // 1B.0x: Fine Volume Down
- case 0x1B:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0xB0;
- break;
- // 1D.xx: Pattern Break
- case 0x1D:
- command = CMD_PATTERNBREAK;
- break;
- // 1E.0x: Pattern Delay
- case 0x1E:
- command = CMD_MODCMDEX;
- if (param > 0x0F) param = 0x0F;
- param |= 0xE0;
- break;
- // 1F.xy: Retrig
- case 0x1F:
- command = CMD_RETRIG;
- param &= 0x0F;
- break;
- // 2E.xx: set panning
- case 0x2E:
- command = CMD_MODCMDEX;
- param = ((param + 0x10) & 0xFF) >> 1;
- if (param > 0x0F) param = 0x0F;
- param |= 0x80;
- break;
- default:
-#ifdef MED_LOG
- // 0x2E ?
- Log("Unknown command: cmd=0x%02X param=0x%02X\n", command, param);
-#endif
- command = param = 0;
- }
- p->command = command;
- p->param = param;
-}
-
-
-BOOL CSoundFile::ReadMed(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- const MEDMODULEHEADER *pmmh;
- const MMD0SONGHEADER *pmsh;
- const MMD2SONGHEADER *pmsh2;
- const MMD0EXP *pmex;
- DWORD dwBlockArr, dwSmplArr, dwExpData, wNumBlocks;
- LPDWORD pdwTable;
- CHAR version;
- UINT deftempo;
- int playtransp = 0;
-
- if ((!lpStream) || (dwMemLength < 0x200)) return FALSE;
- pmmh = (MEDMODULEHEADER *)lpStream;
- if (((pmmh->id & 0x00FFFFFF) != 0x444D4D) || (!pmmh->song)) return FALSE;
- // Check for 'MMDx'
- DWORD dwSong = bswapBE32(pmmh->song);
- if ((dwSong >= dwMemLength) || (dwSong + sizeof(MMD0SONGHEADER) >= dwMemLength)) return FALSE;
- version = (signed char)((pmmh->id >> 24) & 0xFF);
- if ((version < '0') || (version > '3')) return FALSE;
-#ifdef MED_LOG
- Log("\nLoading MMD%c module (flags=0x%02X)...\n", version, bswapBE32(pmmh->mmdflags));
- Log(" modlen = %d\n", bswapBE32(pmmh->modlen));
- Log(" song = 0x%08X\n", bswapBE32(pmmh->song));
- Log(" psecnum = %d\n", bswapBE16(pmmh->psecnum));
- Log(" pseq = %d\n", bswapBE16(pmmh->pseq));
- Log(" blockarr = 0x%08X\n", bswapBE32(pmmh->blockarr));
- Log(" mmdflags = 0x%08X\n", bswapBE32(pmmh->mmdflags));
- Log(" smplarr = 0x%08X\n", bswapBE32(pmmh->smplarr));
- Log(" reserved = 0x%08X\n", bswapBE32(pmmh->reserved));
- Log(" expdata = 0x%08X\n", bswapBE32(pmmh->expdata));
- Log(" reserved2= 0x%08X\n", bswapBE32(pmmh->reserved2));
- Log(" pstate = %d\n", bswapBE16(pmmh->pstate));
- Log(" pblock = %d\n", bswapBE16(pmmh->pblock));
- Log(" pline = %d\n", bswapBE16(pmmh->pline));
- Log(" pseqnum = %d\n", bswapBE16(pmmh->pseqnum));
- Log(" actplayline=%d\n", bswapBE16(pmmh->actplayline));
- Log(" counter = %d\n", pmmh->counter);
- Log(" extra_songs = %d\n", pmmh->extra_songs);
- Log("\n");
-#endif
- m_nType = MOD_TYPE_MED;
- m_nSongPreAmp = 0x20;
- dwBlockArr = bswapBE32(pmmh->blockarr);
- dwSmplArr = bswapBE32(pmmh->smplarr);
- dwExpData = bswapBE32(pmmh->expdata);
- if ((dwExpData) && (dwExpData+sizeof(MMD0EXP) < dwMemLength))
- pmex = (MMD0EXP *)(lpStream+dwExpData);
- else
- pmex = NULL;
- pmsh = (MMD0SONGHEADER *)(lpStream + dwSong);
- pmsh2 = (MMD2SONGHEADER *)pmsh;
-#ifdef MED_LOG
- if (version < '2')
- {
- Log("MMD0 Header:\n");
- Log(" numblocks = %d\n", bswapBE16(pmsh->numblocks));
- Log(" songlen = %d\n", bswapBE16(pmsh->songlen));
- Log(" playseq = ");
- for (UINT idbg1=0; idbg1<16; idbg1++) Log("%2d, ", pmsh->playseq[idbg1]);
- Log("...\n");
- Log(" deftempo = 0x%04X\n", bswapBE16(pmsh->deftempo));
- Log(" playtransp = %d\n", (signed char)pmsh->playtransp);
- Log(" flags(1,2) = 0x%02X, 0x%02X\n", pmsh->flags, pmsh->flags2);
- Log(" tempo2 = %d\n", pmsh->tempo2);
- Log(" trkvol = ");
- for (UINT idbg2=0; idbg2<16; idbg2++) Log("0x%02X, ", pmsh->trkvol[idbg2]);
- Log("...\n");
- Log(" mastervol = 0x%02X\n", pmsh->mastervol);
- Log(" numsamples = %d\n", pmsh->numsamples);
- } else
- {
- Log("MMD2 Header:\n");
- Log(" numblocks = %d\n", bswapBE16(pmsh2->numblocks));
- Log(" numsections= %d\n", bswapBE16(pmsh2->numsections));
- Log(" playseqptr = 0x%04X\n", bswapBE32(pmsh2->playseqtable));
- Log(" sectionptr = 0x%04X\n", bswapBE32(pmsh2->sectiontable));
- Log(" trackvols = 0x%04X\n", bswapBE32(pmsh2->trackvols));
- Log(" numtracks = %d\n", bswapBE16(pmsh2->numtracks));
- Log(" numpseqs = %d\n", bswapBE16(pmsh2->numpseqs));
- Log(" trackpans = 0x%04X\n", bswapBE32(pmsh2->trackpans));
- Log(" flags3 = 0x%08X\n", bswapBE32(pmsh2->flags3));
- Log(" voladj = %d\n", bswapBE16(pmsh2->voladj));
- Log(" channels = %d\n", bswapBE16(pmsh2->channels));
- Log(" echotype = %d\n", pmsh2->mix_echotype);
- Log(" echodepth = %d\n", pmsh2->mix_echodepth);
- Log(" echolen = %d\n", bswapBE16(pmsh2->mix_echolen));
- Log(" stereosep = %d\n", (signed char)pmsh2->mix_stereosep);
- Log(" deftempo = 0x%04X\n", bswapBE16(pmsh2->deftempo));
- Log(" playtransp = %d\n", (signed char)pmsh2->playtransp);
- Log(" flags(1,2) = 0x%02X, 0x%02X\n", pmsh2->flags, pmsh2->flags2);
- Log(" tempo2 = %d\n", pmsh2->tempo2);
- Log(" mastervol = 0x%02X\n", pmsh2->mastervol);
- Log(" numsamples = %d\n", pmsh->numsamples);
- }
- Log("\n");
-#endif
- wNumBlocks = bswapBE16(pmsh->numblocks);
- m_nChannels = 4;
- m_nSamples = pmsh->numsamples;
- if (m_nSamples > 63) m_nSamples = 63;
- m_nStereoSeparation = ((pmsh2->mix_stereosep < 0) ? -32 : 32) * pmsh2->mix_stereosep;
- // Tempo
- m_nDefaultTempo = 125;
- deftempo = bswapBE16(pmsh->deftempo);
- if (!deftempo) deftempo = 125;
- if (pmsh->flags2 & MMD_FLAG2_BPM)
- {
- UINT tempo_tpl = (pmsh->flags2 & MMD_FLAG2_BMASK) + 1;
- if (!tempo_tpl) tempo_tpl = 4;
- deftempo *= tempo_tpl;
- deftempo /= 4;
- #ifdef MED_LOG
- Log("newtempo: %3d bpm (bpm=%3d lpb=%2d)\n", deftempo, bswapBE16(pmsh->deftempo), (pmsh->flags2 & MMD_FLAG2_BMASK)+1);
- #endif
- } else
- {
- deftempo = _muldiv(deftempo, 5*715909, 2*474326);
- #ifdef MED_LOG
- Log("oldtempo: %3d bpm (bpm=%3d)\n", deftempo, bswapBE16(pmsh->deftempo));
- #endif
- }
- // Speed
- m_nDefaultSpeed = pmsh->tempo2;
- if (!m_nDefaultSpeed) m_nDefaultSpeed = 6;
- if (deftempo < 0x21) deftempo = 0x21;
- if (deftempo > 255)
- {
- while ((m_nDefaultSpeed > 3) && (deftempo > 260))
- {
- deftempo = (deftempo * (m_nDefaultSpeed - 1)) / m_nDefaultSpeed;
- m_nDefaultSpeed--;
- }
- if (deftempo > 255) deftempo = 255;
- }
- m_nDefaultTempo = deftempo;
- // Reading Samples
- for (UINT iSHdr=0; iSHdr<m_nSamples; iSHdr++)
- {
- MODINSTRUMENT *pins = &Ins[iSHdr+1];
- pins->nLoopStart = bswapBE16(pmsh->sample[iSHdr].rep) << 1;
- pins->nLoopEnd = pins->nLoopStart + (bswapBE16(pmsh->sample[iSHdr].replen) << 1);
- pins->nVolume = (pmsh->sample[iSHdr].svol << 2);
- pins->nGlobalVol = 64;
- if (pins->nVolume > 256) pins->nVolume = 256;
- pins->RelativeTone = -12 * pmsh->sample[iSHdr].strans;
- pins->nPan = 128;
- if (pins->nLoopEnd) pins->uFlags |= CHN_LOOP;
- }
- // Common Flags
- if (!(pmsh->flags & 0x20)) m_dwSongFlags |= SONG_FASTVOLSLIDES;
- // Reading play sequence
- if (version < '2')
- {
- UINT nbo = pmsh->songlen >> 8;
- if (nbo >= MAX_ORDERS) nbo = MAX_ORDERS-1;
- if (!nbo) nbo = 1;
- memcpy(Order, pmsh->playseq, nbo);
- playtransp = pmsh->playtransp;
- } else
- {
- UINT nOrders, nSections;
- UINT nTrks = bswapBE16(pmsh2->numtracks);
- if ((nTrks >= 4) && (nTrks <= 32)) m_nChannels = nTrks;
- DWORD playseqtable = bswapBE32(pmsh2->playseqtable);
- UINT numplayseqs = bswapBE16(pmsh2->numpseqs);
- if (!numplayseqs) numplayseqs = 1;
- nOrders = 0;
- nSections = bswapBE16(pmsh2->numsections);
- DWORD sectiontable = bswapBE32(pmsh2->sectiontable);
- if ((!nSections) || (!sectiontable) || (sectiontable >= dwMemLength-2)) nSections = 1;
- nOrders = 0;
- for (UINT iSection=0; iSection<nSections; iSection++)
- {
- UINT nplayseq = 0;
- if ((sectiontable) && (sectiontable < dwMemLength-2))
- {
- nplayseq = lpStream[sectiontable+1];
- sectiontable += 2; // WORDs
- } else
- {
- nSections = 0;
- }
- UINT pseq = 0;
-
- if ((playseqtable) && (playseqtable + nplayseq*4 < dwMemLength))
- {
- pseq = bswapBE32(((LPDWORD)(lpStream+playseqtable))[nplayseq]);
- }
- if ((pseq) && (pseq < dwMemLength - sizeof(MMD2PLAYSEQ)))
- {
- MMD2PLAYSEQ *pmps = (MMD2PLAYSEQ *)(lpStream + pseq);
- if (!m_szNames[0][0]) memcpy(m_szNames[0], pmps->name, 31);
- UINT n = bswapBE16(pmps->length);
- if (pseq+n <= dwMemLength)
- {
- for (UINT i=0; i<n; i++)
- {
- UINT seqval = pmps->seq[i] >> 8;
- if ((seqval < wNumBlocks) && (nOrders < MAX_ORDERS-1))
- {
- Order[nOrders++] = seqval;
- }
- }
- }
- }
- }
- playtransp = pmsh2->playtransp;
- while (nOrders < MAX_ORDERS) Order[nOrders++] = 0xFF;
- }
- // Reading Expansion structure
- if (pmex)
- {
- // Channel Split
- if ((m_nChannels == 4) && (pmsh->flags & 0x40))
- {
- for (UINT i8ch=0; i8ch<4; i8ch++)
- {
- if (pmex->channelsplit[i8ch]) m_nChannels++;
- }
- }
- // Song Comments
- UINT annotxt = bswapBE32(pmex->annotxt);
- UINT annolen = bswapBE32(pmex->annolen);
- if ((annotxt) && (annolen) && (annotxt+annolen <= dwMemLength))
- {
- m_lpszSongComments = new char[annolen+1];
- memcpy(m_lpszSongComments, lpStream+annotxt, annolen);
- m_lpszSongComments[annolen] = 0;
- }
- // Song Name
- UINT songname = bswapBE32(pmex->songname);
- UINT songnamelen = bswapBE32(pmex->songnamelen);
- if ((songname) && (songnamelen) && (songname+songnamelen <= dwMemLength))
- {
- if (songnamelen > 31) songnamelen = 31;
- memcpy(m_szNames[0], lpStream+songname, songnamelen);
- }
- // Sample Names
- DWORD smpinfoex = bswapBE32(pmex->iinfo);
- if (smpinfoex)
- {
- DWORD iinfoptr = bswapBE32(pmex->iinfo);
- UINT ientries = bswapBE16(pmex->i_ext_entries);
- UINT ientrysz = bswapBE16(pmex->i_ext_entrsz);
-
- if ((iinfoptr) && (ientrysz < 256) && (iinfoptr + ientries*ientrysz < dwMemLength))
- {
- LPCSTR psznames = (LPCSTR)(lpStream + iinfoptr);
- UINT maxnamelen = ientrysz;
- if (maxnamelen > 32) maxnamelen = 32;
- for (UINT i=0; i<ientries; i++) if (i < m_nSamples)
- {
- lstrcpyn(m_szNames[i+1], psznames + i*ientrysz, maxnamelen);
- }
- }
- }
- // Track Names
- DWORD trackinfo_ofs = bswapBE32(pmex->trackinfo_ofs);
- if ((trackinfo_ofs) && (trackinfo_ofs + m_nChannels * 4 < dwMemLength))
- {
- DWORD *ptrktags = (DWORD *)(lpStream + trackinfo_ofs);
- for (UINT i=0; i<m_nChannels; i++)
- {
- DWORD trknameofs = 0, trknamelen = 0;
- DWORD trktagofs = bswapBE32(ptrktags[i]);
- if (trktagofs)
- {
- while (trktagofs+8 < dwMemLength)
- {
- DWORD ntag = bswapBE32(*(DWORD *)(lpStream + trktagofs));
- if (ntag == MMDTAG_END) break;
- DWORD tagdata = bswapBE32(*(DWORD *)(lpStream + trktagofs + 4));
- switch(ntag)
- {
- case MMDTAG_TRK_NAMELEN: trknamelen = tagdata; break;
- case MMDTAG_TRK_NAME: trknameofs = tagdata; break;
- }
- trktagofs += 8;
- }
- if (trknamelen > MAX_CHANNELNAME) trknamelen = MAX_CHANNELNAME;
- if ((trknameofs) && (trknameofs + trknamelen < dwMemLength))
- {
- lstrcpyn(ChnSettings[i].szName, (LPCSTR)(lpStream+trknameofs), MAX_CHANNELNAME);
- }
- }
- }
- }
- }
- // Reading samples
- if (dwSmplArr > dwMemLength - 4*m_nSamples) return TRUE;
- pdwTable = (LPDWORD)(lpStream + dwSmplArr);
- for (UINT iSmp=0; iSmp<m_nSamples; iSmp++) if (pdwTable[iSmp])
- {
- UINT dwPos = bswapBE32(pdwTable[iSmp]);
- if ((dwPos >= dwMemLength) || (dwPos + sizeof(MMDSAMPLEHEADER) >= dwMemLength)) continue;
- MMDSAMPLEHEADER *psdh = (MMDSAMPLEHEADER *)(lpStream + dwPos);
- UINT len = bswapBE32(psdh->length);
- #ifdef MED_LOG
- Log("SampleData %d: stype=0x%02X len=%d\n", iSmp, bswapBE16(psdh->type), len);
- #endif
- if ((len > MAX_SAMPLE_LENGTH) || (dwPos + len + 6 > dwMemLength)) len = 0;
- UINT flags = RS_PCM8S, stype = bswapBE16(psdh->type);
- LPSTR psdata = (LPSTR)(lpStream + dwPos + 6);
- if (stype & 0x80)
- {
- psdata += (stype & 0x20) ? 14 : 6;
- } else
- {
- if (stype & 0x10)
- {
- Ins[iSmp+1].uFlags |= CHN_16BIT;
- len /= 2;
- flags = (stype & 0x20) ? RS_STPCM16M : RS_PCM16M;
- } else
- {
- flags = (stype & 0x20) ? RS_STPCM8S : RS_PCM8S;
- }
- if (stype & 0x20) len /= 2;
- }
- Ins[iSmp+1].nLength = len;
- ReadSample(&Ins[iSmp+1], flags, psdata, dwMemLength - dwPos - 6);
- }
- // Reading patterns (blocks)
- if (wNumBlocks > MAX_PATTERNS) wNumBlocks = MAX_PATTERNS;
- if ((!dwBlockArr) || (dwBlockArr > dwMemLength - 4*wNumBlocks)) return TRUE;
- pdwTable = (LPDWORD)(lpStream + dwBlockArr);
- playtransp += (version == '3') ? 24 : 48;
- for (UINT iBlk=0; iBlk<wNumBlocks; iBlk++)
- {
- UINT dwPos = bswapBE32(pdwTable[iBlk]);
- if ((!dwPos) || (dwPos >= dwMemLength) || (dwPos >= dwMemLength - 8)) continue;
- UINT lines = 64, tracks = 4;
- if (version == '0')
- {
- const MMD0BLOCK *pmb = (const MMD0BLOCK *)(lpStream + dwPos);
- lines = pmb->lines + 1;
- tracks = pmb->numtracks;
- if (!tracks) tracks = m_nChannels;
- if ((Patterns[iBlk] = AllocatePattern(lines, m_nChannels)) == NULL) continue;
- PatternSize[iBlk] = lines;
- PatternAllocSize[iBlk] = lines;
- MODCOMMAND *p = Patterns[iBlk];
- LPBYTE s = (LPBYTE)(lpStream + dwPos + 2);
- UINT maxlen = tracks*lines*3;
- if (maxlen + dwPos > dwMemLength - 2) break;
- for (UINT y=0; y<lines; y++)
- {
- for (UINT x=0; x<tracks; x++, s+=3) if (x < m_nChannels)
- {
- BYTE note = s[0] & 0x3F;
- BYTE instr = s[1] >> 4;
- if (s[0] & 0x80) instr |= 0x10;
- if (s[0] & 0x40) instr |= 0x20;
- if ((note) && (note <= 132)) p->note = note + playtransp;
- p->instr = instr;
- p->command = s[1] & 0x0F;
- p->param = s[2];
- // if (!iBlk) Log("%02X.%02X.%02X | ", s[0], s[1], s[2]);
- MedConvert(p, pmsh);
- p++;
- }
- //if (!iBlk) Log("\n");
- }
- } else
- {
- MMD1BLOCK *pmb = (MMD1BLOCK *)(lpStream + dwPos);
- #ifdef MED_LOG
- Log("MMD1BLOCK: lines=%2d, tracks=%2d, offset=0x%04X\n",
- bswapBE16(pmb->lines), bswapBE16(pmb->numtracks), bswapBE32(pmb->info));
- #endif
- MMD1BLOCKINFO *pbi = NULL;
- BYTE *pcmdext = NULL;
- lines = (pmb->lines >> 8) + 1;
- tracks = pmb->numtracks >> 8;
- if (!tracks) tracks = m_nChannels;
- if ((Patterns[iBlk] = AllocatePattern(lines, m_nChannels)) == NULL) continue;
- PatternSize[iBlk] = (WORD)lines;
- PatternAllocSize[iBlk] = (WORD)lines;
- DWORD dwBlockInfo = bswapBE32(pmb->info);
- if ((dwBlockInfo) && (dwBlockInfo < dwMemLength - sizeof(MMD1BLOCKINFO)))
- {
- pbi = (MMD1BLOCKINFO *)(lpStream + dwBlockInfo);
- #ifdef MED_LOG
- Log(" BLOCKINFO: blockname=0x%04X namelen=%d pagetable=0x%04X &cmdexttable=0x%04X\n",
- bswapBE32(pbi->blockname), bswapBE32(pbi->blocknamelen), bswapBE32(pbi->pagetable), bswapBE32(pbi->cmdexttable));
- #endif
- if ((pbi->blockname) && (pbi->blocknamelen))
- {
- DWORD nameofs = bswapBE32(pbi->blockname);
- UINT namelen = bswapBE32(pbi->blocknamelen);
- if ((nameofs < dwMemLength) && (nameofs+namelen < dwMemLength))
- {
- SetPatternName(iBlk, (LPCSTR)(lpStream+nameofs));
- }
- }
- if (pbi->cmdexttable)
- {
- DWORD cmdexttable = bswapBE32(pbi->cmdexttable);
- if (cmdexttable < dwMemLength - 4)
- {
- cmdexttable = bswapBE32(*(DWORD *)(lpStream + cmdexttable));
- if ((cmdexttable) && (cmdexttable <= dwMemLength - lines*tracks))
- {
- pcmdext = (BYTE *)(lpStream + cmdexttable);
- }
- }
- }
- }
- MODCOMMAND *p = Patterns[iBlk];
- LPBYTE s = (LPBYTE)(lpStream + dwPos + 8);
- UINT maxlen = tracks*lines*4;
- if (maxlen + dwPos > dwMemLength - 8) break;
- for (UINT y=0; y<lines; y++)
- {
- for (UINT x=0; x<tracks; x++, s+=4) if (x < m_nChannels)
- {
- BYTE note = s[0];
- if ((note) && (note <= 132))
- {
- int rnote = note + playtransp;
- if (rnote < 1) rnote = 1;
- if (rnote > 120) rnote = 120;
- p->note = (BYTE)rnote;
- }
- p->instr = s[1];
- p->command = s[2];
- p->param = s[3];
- if (pcmdext) p->vol = pcmdext[x];
- MedConvert(p, pmsh);
- p++;
- }
- if (pcmdext) pcmdext += tracks;
- }
- }
- }
- // Setup channel pan positions
- for (UINT iCh=0; iCh<m_nChannels; iCh++)
- {
- ChnSettings[iCh].nPan = (((iCh&3) == 1) || ((iCh&3) == 2)) ? 0xC0 : 0x40;
- ChnSettings[iCh].nVolume = 64;
- }
- return TRUE;
-}
-
-
diff --git a/src/modplug/load_mod.cxx b/src/modplug/load_mod.cxx
deleted file mode 100755
index 8c4aee5..0000000
--- a/src/modplug/load_mod.cxx
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-extern WORD ProTrackerPeriodTable[6*12];
-
-//////////////////////////////////////////////////////////
-// ProTracker / NoiseTracker MOD/NST file support
-
-void CSoundFile::ConvertModCommand(MODCOMMAND *m) const
-//-----------------------------------------------------
-{
- UINT command = m->command, param = m->param;
-
- switch(command)
- {
- case 0x00: if (param) command = CMD_ARPEGGIO; break;
- case 0x01: command = CMD_PORTAMENTOUP; break;
- case 0x02: command = CMD_PORTAMENTODOWN; break;
- case 0x03: command = CMD_TONEPORTAMENTO; break;
- case 0x04: command = CMD_VIBRATO; break;
- case 0x05: command = CMD_TONEPORTAVOL; if (param & 0xF0) param &= 0xF0; break;
- case 0x06: command = CMD_VIBRATOVOL; if (param & 0xF0) param &= 0xF0; break;
- case 0x07: command = CMD_TREMOLO; break;
- case 0x08: command = CMD_PANNING8; break;
- case 0x09: command = CMD_OFFSET; break;
- case 0x0A: command = CMD_VOLUMESLIDE; if (param & 0xF0) param &= 0xF0; break;
- case 0x0B: command = CMD_POSITIONJUMP; break;
- case 0x0C: command = CMD_VOLUME; break;
- case 0x0D: command = CMD_PATTERNBREAK; param = ((param >> 4) * 10) + (param & 0x0F); break;
- case 0x0E: command = CMD_MODCMDEX; break;
- case 0x0F: command = (param <= (UINT)((m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) ? 0x1F : 0x20)) ? CMD_SPEED : CMD_TEMPO;
- if ((param == 0xFF) && (m_nSamples == 15)) command = 0; break;
- // Extension for XM extended effects
- case 'G' - 55: command = CMD_GLOBALVOLUME; break;
- case 'H' - 55: command = CMD_GLOBALVOLSLIDE; if (param & 0xF0) param &= 0xF0; break;
- case 'K' - 55: command = CMD_KEYOFF; break;
- case 'L' - 55: command = CMD_SETENVPOSITION; break;
- case 'M' - 55: command = CMD_CHANNELVOLUME; break;
- case 'N' - 55: command = CMD_CHANNELVOLSLIDE; break;
- case 'P' - 55: command = CMD_PANNINGSLIDE; if (param & 0xF0) param &= 0xF0; break;
- case 'R' - 55: command = CMD_RETRIG; break;
- case 'T' - 55: command = CMD_TREMOR; break;
- case 'X' - 55: command = CMD_XFINEPORTAUPDOWN; break;
- case 'Y' - 55: command = CMD_PANBRELLO; break;
- case 'Z' - 55: command = CMD_MIDI; break;
- default: command = 0;
- }
- m->command = command;
- m->param = param;
-}
-
-
-WORD CSoundFile::ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const
-//------------------------------------------------------------------
-{
- UINT command = m->command & 0x3F, param = m->param;
-
- switch(command)
- {
- case 0: command = param = 0; break;
- case CMD_ARPEGGIO: command = 0; break;
- case CMD_PORTAMENTOUP:
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_STM))
- {
- if ((param & 0xF0) == 0xE0) { command=0x0E; param=((param & 0x0F) >> 2)|0x10; break; }
- else if ((param & 0xF0) == 0xF0) { command=0x0E; param &= 0x0F; param|=0x10; break; }
- }
- command = 0x01;
- break;
- case CMD_PORTAMENTODOWN:
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_STM))
- {
- if ((param & 0xF0) == 0xE0) { command=0x0E; param=((param & 0x0F) >> 2)|0x20; break; }
- else if ((param & 0xF0) == 0xF0) { command=0x0E; param &= 0x0F; param|=0x20; break; }
- }
- command = 0x02;
- break;
- case CMD_TONEPORTAMENTO: command = 0x03; break;
- case CMD_VIBRATO: command = 0x04; break;
- case CMD_TONEPORTAVOL: command = 0x05; break;
- case CMD_VIBRATOVOL: command = 0x06; break;
- case CMD_TREMOLO: command = 0x07; break;
- case CMD_PANNING8:
- command = 0x08;
- if (bXM)
- {
- if ((m_nType != MOD_TYPE_IT) && (m_nType != MOD_TYPE_XM) && (param <= 0x80))
- {
- param <<= 1;
- if (param > 255) param = 255;
- }
- } else
- {
- if ((m_nType == MOD_TYPE_IT) || (m_nType == MOD_TYPE_XM)) param >>= 1;
- }
- break;
- case CMD_OFFSET: command = 0x09; break;
- case CMD_VOLUMESLIDE: command = 0x0A; break;
- case CMD_POSITIONJUMP: command = 0x0B; break;
- case CMD_VOLUME: command = 0x0C; break;
- case CMD_PATTERNBREAK: command = 0x0D; param = ((param / 10) << 4) | (param % 10); break;
- case CMD_MODCMDEX: command = 0x0E; break;
- case CMD_SPEED: command = 0x0F; if (param > 0x20) param = 0x20; break;
- case CMD_TEMPO: if (param > 0x20) { command = 0x0F; break; } return 0;
- case CMD_GLOBALVOLUME: command = 'G' - 55; break;
- case CMD_GLOBALVOLSLIDE: command = 'H' - 55; break;
- case CMD_KEYOFF: command = 'K' - 55; break;
- case CMD_SETENVPOSITION: command = 'L' - 55; break;
- case CMD_CHANNELVOLUME: command = 'M' - 55; break;
- case CMD_CHANNELVOLSLIDE: command = 'N' - 55; break;
- case CMD_PANNINGSLIDE: command = 'P' - 55; break;
- case CMD_RETRIG: command = 'R' - 55; break;
- case CMD_TREMOR: command = 'T' - 55; break;
- case CMD_XFINEPORTAUPDOWN: command = 'X' - 55; break;
- case CMD_PANBRELLO: command = 'Y' - 55; break;
- case CMD_MIDI: command = 'Z' - 55; break;
- case CMD_S3MCMDEX:
- switch(param & 0xF0)
- {
- case 0x10: command = 0x0E; param = (param & 0x0F) | 0x30; break;
- case 0x20: command = 0x0E; param = (param & 0x0F) | 0x50; break;
- case 0x30: command = 0x0E; param = (param & 0x0F) | 0x40; break;
- case 0x40: command = 0x0E; param = (param & 0x0F) | 0x70; break;
- case 0x90: command = 'X' - 55; break;
- case 0xB0: command = 0x0E; param = (param & 0x0F) | 0x60; break;
- case 0xA0:
- case 0x50:
- case 0x70:
- case 0x60: command = param = 0; break;
- default: command = 0x0E; break;
- }
- break;
- default: command = param = 0;
- }
- return (WORD)((command << 8) | (param));
-}
-
-
-#pragma pack(1)
-
-typedef struct _MODSAMPLE
-{
- CHAR name[22];
- WORD length;
- BYTE finetune;
- BYTE volume;
- WORD loopstart;
- WORD looplen;
-} MODSAMPLE, *PMODSAMPLE;
-
-typedef struct _MODMAGIC
-{
- BYTE nOrders;
- BYTE nRestartPos;
- BYTE Orders[128];
- char Magic[4]; // changed from CHAR
-} MODMAGIC, *PMODMAGIC;
-
-#pragma pack()
-
-BOOL IsMagic(LPCSTR s1, LPCSTR s2)
-{
- return ((*(DWORD *)s1) == (*(DWORD *)s2)) ? TRUE : FALSE;
-}
-
-
-BOOL CSoundFile::ReadMod(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- char s[1024]; // changed from CHAR
- DWORD dwMemPos, dwTotalSampleLen;
- PMODMAGIC pMagic;
- UINT nErr;
-
- if ((!lpStream) || (dwMemLength < 0x600)) return FALSE;
- dwMemPos = 20;
- m_nSamples = 31;
- m_nChannels = 4;
- pMagic = (PMODMAGIC)(lpStream+dwMemPos+sizeof(MODSAMPLE)*31);
- // Check Mod Magic
- memcpy(s, pMagic->Magic, 4);
- if ((IsMagic(s, "M.K.")) || (IsMagic(s, "M!K!"))
- || (IsMagic(s, "M&K!")) || (IsMagic(s, "N.T."))) m_nChannels = 4; else
- if ((IsMagic(s, "CD81")) || (IsMagic(s, "OKTA"))) m_nChannels = 8; else
- if ((s[0]=='F') && (s[1]=='L') && (s[2]=='T') && (s[3]>='4') && (s[3]<='9')) m_nChannels = s[3] - '0'; else
- if ((s[0]>='4') && (s[0]<='9') && (s[1]=='C') && (s[2]=='H') && (s[3]=='N')) m_nChannels = s[0] - '0'; else
- if ((s[0]=='1') && (s[1]>='0') && (s[1]<='9') && (s[2]=='C') && (s[3]=='H')) m_nChannels = s[1] - '0' + 10; else
- if ((s[0]=='2') && (s[1]>='0') && (s[1]<='9') && (s[2]=='C') && (s[3]=='H')) m_nChannels = s[1] - '0' + 20; else
- if ((s[0]=='3') && (s[1]>='0') && (s[1]<='2') && (s[2]=='C') && (s[3]=='H')) m_nChannels = s[1] - '0' + 30; else
- if ((s[0]=='T') && (s[1]=='D') && (s[2]=='Z') && (s[3]>='4') && (s[3]<='9')) m_nChannels = s[3] - '0'; else
- if (IsMagic(s,"16CN")) m_nChannels = 16; else
- if (IsMagic(s,"32CN")) m_nChannels = 32; else m_nSamples = 15;
- // Load Samples
- nErr = 0;
- dwTotalSampleLen = 0;
- for (UINT i=1; i<=m_nSamples; i++)
- {
- PMODSAMPLE pms = (PMODSAMPLE)(lpStream+dwMemPos);
- MODINSTRUMENT *psmp = &Ins[i];
- UINT loopstart, looplen;
-
- memcpy(m_szNames[i], pms->name, 22);
- m_szNames[i][22] = 0;
- psmp->uFlags = 0;
- psmp->nLength = bswapBE16(pms->length)*2;
- dwTotalSampleLen += psmp->nLength;
- psmp->nFineTune = MOD2XMFineTune(pms->finetune & 0x0F);
- psmp->nVolume = 4*pms->volume;
- if (psmp->nVolume > 256) { psmp->nVolume = 256; nErr++; }
- psmp->nGlobalVol = 64;
- psmp->nPan = 128;
- loopstart = bswapBE16(pms->loopstart)*2;
- looplen = bswapBE16(pms->looplen)*2;
- // Fix loops
- if ((looplen > 2) && (loopstart+looplen > psmp->nLength)
- && (loopstart/2+looplen <= psmp->nLength))
- {
- loopstart /= 2;
- }
- psmp->nLoopStart = loopstart;
- psmp->nLoopEnd = loopstart + looplen;
- if (psmp->nLength < 2) psmp->nLength = 0;
- if (psmp->nLength)
- {
- UINT derr = 0;
- if (psmp->nLoopStart >= psmp->nLength) { psmp->nLoopStart = psmp->nLength-1; derr|=1; }
- if (psmp->nLoopEnd > psmp->nLength) { psmp->nLoopEnd = psmp->nLength; derr |= 1; }
- if (psmp->nLoopStart > psmp->nLoopEnd) derr |= 1;
- if (psmp->nLoopEnd > psmp->nLoopStart)
- {
- psmp->uFlags |= CHN_LOOP;
- }
- }
- dwMemPos += sizeof(MODSAMPLE);
- }
- if ((m_nSamples == 15) && (dwTotalSampleLen > dwMemLength * 4)) return FALSE;
- pMagic = (PMODMAGIC)(lpStream+dwMemPos);
- dwMemPos += sizeof(MODMAGIC);
- if (m_nSamples == 15) dwMemPos -= 4;
- memset(Order, 0,sizeof(Order));
- memcpy(Order, pMagic->Orders, 128);
-
- UINT nbp, nbpbuggy, nbpbuggy2, norders;
-
- norders = pMagic->nOrders;
- if ((!norders) || (norders > 0x80))
- {
- norders = 0x80;
- while ((norders > 1) && (!Order[norders-1])) norders--;
- }
- nbpbuggy = 0;
- nbpbuggy2 = 0;
- nbp = 0;
- for (UINT iord=0; iord<128; iord++)
- {
- UINT i = Order[iord];
- if ((i < 0x80) && (nbp <= i))
- {
- nbp = i+1;
- if (iord<norders) nbpbuggy = nbp;
- }
- if (i >= nbpbuggy2) nbpbuggy2 = i+1;
- }
- for (UINT iend=norders; iend<MAX_ORDERS; iend++) Order[iend] = 0xFF;
- norders--;
- m_nRestartPos = pMagic->nRestartPos;
- if (m_nRestartPos >= 0x78) m_nRestartPos = 0;
- if (m_nRestartPos + 1 >= (UINT)norders) m_nRestartPos = 0;
- if (!nbp) return FALSE;
- DWORD dwWowTest = dwTotalSampleLen+dwMemPos;
- if ((IsMagic(pMagic->Magic, "M.K.")) && (dwWowTest + nbp*8*256 == dwMemLength)) m_nChannels = 8;
- if ((nbp != nbpbuggy) && (dwWowTest + nbp*m_nChannels*256 != dwMemLength))
- {
- if (dwWowTest + nbpbuggy*m_nChannels*256 == dwMemLength) nbp = nbpbuggy;
- else nErr += 8;
- } else
- if ((nbpbuggy2 > nbp) && (dwWowTest + nbpbuggy2*m_nChannels*256 == dwMemLength))
- {
- nbp = nbpbuggy2;
- }
- if ((dwWowTest < 0x600) || (dwWowTest > dwMemLength)) nErr += 8;
- if ((m_nSamples == 15) && (nErr >= 16)) return FALSE;
- // Default settings
- m_nType = MOD_TYPE_MOD;
- m_nDefaultSpeed = 6;
- m_nDefaultTempo = 125;
- m_nMinPeriod = 14 << 2;
- m_nMaxPeriod = 3424 << 2;
- memcpy(m_szNames, lpStream, 20);
- // Setting channels pan
- for (UINT ich=0; ich<m_nChannels; ich++)
- {
- ChnSettings[ich].nVolume = 64;
- ChnSettings[ich].nPan = (((ich&3)==1) || ((ich&3)==2)) ? 256 : 0;
- }
- m_nStereoSeparation = (gdwSoundSetup & SNDMIX_MAXDEFAULTPAN) ? 128 : 64;
-
- // Reading channels
- for (UINT ipat=0; ipat<nbp; ipat++)
- {
- if (ipat < MAX_PATTERNS)
- {
- if ((Patterns[ipat] = AllocatePattern(64, m_nChannels)) == NULL) break;
- PatternSize[ipat] = 64;
- PatternAllocSize[ipat] = 64;
- if (dwMemPos + m_nChannels*256 >= dwMemLength) break;
- MODCOMMAND *m = Patterns[ipat];
- LPCBYTE p = lpStream + dwMemPos;
- for (UINT j=m_nChannels*64; j; m++,p+=4,j--)
- {
- BYTE A0=p[0], A1=p[1], A2=p[2], A3=p[3];
- UINT n = ((((UINT)A0 & 0x0F) << 8) | (A1));
- if ((n) && (n != 0xFFF)) m->note = GetNoteFromPeriod(n << 2);
- m->instr = ((UINT)A2 >> 4) | (A0 & 0x10);
- m->command = A2 & 0x0F;
- m->param = A3;
- if ((m->command) || (m->param)) ConvertModCommand(m);
- }
- }
- dwMemPos += m_nChannels*256;
- }
- // Reading instruments
- DWORD dwErrCheck = 0;
- for (UINT ismp=1; ismp<=m_nSamples; ismp++) if (Ins[ismp].nLength)
- {
- LPSTR p = (LPSTR)(lpStream+dwMemPos);
- UINT flags = 0;
- if (dwMemPos + 5 >= dwMemLength) break;
- if (!strnicmp(p, "ADPCM", 5))
- {
- flags = 3;
- p += 5;
- dwMemPos += 5;
- }
- DWORD dwSize = ReadSample(&Ins[ismp], flags, p, dwMemLength - dwMemPos);
- if (dwSize)
- {
- dwMemPos += dwSize;
- dwErrCheck++;
- }
- }
-#ifdef MODPLUG_TRACKER
- return TRUE;
-#else
- return (dwErrCheck) ? TRUE : FALSE;
-#endif
-}
-
-
diff --git a/src/modplug/load_mt2.cxx b/src/modplug/load_mt2.cxx
deleted file mode 100755
index b8bfbdf..0000000
--- a/src/modplug/load_mt2.cxx
+++ /dev/null
@@ -1,637 +0,0 @@
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#define MT2DEBUG
-
-#pragma pack(1)
-
-typedef struct _MT2FILEHEADER
-{
- DWORD dwMT20; // 0x3032544D "MT20"
- DWORD dwSpecial;
- WORD wVersion;
- CHAR szTrackerName[32]; // "MadTracker 2.0"
- CHAR szSongName[64];
- WORD nOrders;
- WORD wRestart;
- WORD wPatterns;
- WORD wChannels;
- WORD wSamplesPerTick;
- BYTE bTicksPerLine;
- BYTE bLinesPerBeat;
- DWORD fulFlags; // b0=packed patterns
- WORD wInstruments;
- WORD wSamples;
- BYTE Orders[256];
-} MT2FILEHEADER;
-
-typedef struct _MT2PATTERN
-{
- WORD wLines;
- DWORD wDataLen;
-} MT2PATTERN;
-
-typedef struct _MT2COMMAND
-{
- BYTE note; // 0=nothing, 97=note off
- BYTE instr;
- BYTE vol;
- BYTE pan;
- BYTE fxcmd;
- BYTE fxparam1;
- BYTE fxparam2;
-} MT2COMMAND;
-
-typedef struct _MT2DRUMSDATA
-{
- WORD wDrumPatterns;
- WORD wDrumSamples[8];
- BYTE DrumPatternOrder[256];
-} MT2DRUMSDATA;
-
-typedef struct _MT2AUTOMATION
-{
- DWORD dwFlags;
- DWORD dwEffectId;
- DWORD nEnvPoints;
-} MT2AUTOMATION;
-
-typedef struct _MT2INSTRUMENT
-{
- CHAR szName[32];
- DWORD dwDataLen;
- WORD wSamples;
- BYTE GroupsMapping[96];
- BYTE bVibType;
- BYTE bVibSweep;
- BYTE bVibDepth;
- BYTE bVibRate;
- WORD wFadeOut;
- WORD wNNA;
- WORD wInstrFlags;
- WORD wEnvFlags1;
- WORD wEnvFlags2;
-} MT2INSTRUMENT;
-
-typedef struct _MT2ENVELOPE
-{
- BYTE nFlags;
- BYTE nPoints;
- BYTE nSustainPos;
- BYTE nLoopStart;
- BYTE nLoopEnd;
- BYTE bReserved[3];
- BYTE EnvData[64];
-} MT2ENVELOPE;
-
-typedef struct _MT2SYNTH
-{
- BYTE nSynthId;
- BYTE nFxId;
- WORD wCutOff;
- BYTE nResonance;
- BYTE nAttack;
- BYTE nDecay;
- BYTE bReserved[25];
-} MT2SYNTH;
-
-typedef struct _MT2SAMPLE
-{
- CHAR szName[32];
- DWORD dwDataLen;
- DWORD dwLength;
- DWORD dwFrequency;
- BYTE nQuality;
- BYTE nChannels;
- BYTE nFlags;
- BYTE nLoop;
- DWORD dwLoopStart;
- DWORD dwLoopEnd;
- WORD wVolume;
- BYTE nPan;
- BYTE nBaseNote;
- WORD wSamplesPerBeat;
-} MT2SAMPLE;
-
-typedef struct _MT2GROUP
-{
- BYTE nSmpNo;
- BYTE nVolume; // 0-128
- BYTE nFinePitch;
- BYTE Reserved[5];
-} MT2GROUP;
-
-#pragma pack()
-
-
-static VOID ConvertMT2Command(CSoundFile *that, MODCOMMAND *m, MT2COMMAND *p)
-//---------------------------------------------------------------------------
-{
- // Note
- m->note = 0;
- if (p->note) m->note = (p->note > 96) ? 0xFF : p->note+12;
- // Instrument
- m->instr = p->instr;
- // Volume Column
- if ((p->vol >= 0x10) && (p->vol <= 0x90))
- {
- m->volcmd = VOLCMD_VOLUME;
- m->vol = (p->vol - 0x10) >> 1;
- } else
- if ((p->vol >= 0xA0) && (p->vol <= 0xAF))
- {
- m->volcmd = VOLCMD_VOLSLIDEDOWN;
- m->vol = (p->vol & 0x0f);
- } else
- if ((p->vol >= 0xB0) && (p->vol <= 0xBF))
- {
- m->volcmd = VOLCMD_VOLSLIDEUP;
- m->vol = (p->vol & 0x0f);
- } else
- if ((p->vol >= 0xC0) && (p->vol <= 0xCF))
- {
- m->volcmd = VOLCMD_FINEVOLDOWN;
- m->vol = (p->vol & 0x0f);
- } else
- if ((p->vol >= 0xD0) && (p->vol <= 0xDF))
- {
- m->volcmd = VOLCMD_FINEVOLUP;
- m->vol = (p->vol & 0x0f);
- } else
- {
- m->volcmd = 0;
- m->vol = 0;
- }
- // Effects
- m->command = 0;
- m->param = 0;
- if ((p->fxcmd) || (p->fxparam1) || (p->fxparam2))
- {
- if (!p->fxcmd)
- {
- m->command = p->fxparam2;
- m->param = p->fxparam1;
- that->ConvertModCommand(m);
- } else
- {
- // TODO: MT2 Effects
- }
- }
-}
-
-
-BOOL CSoundFile::ReadMT2(LPCBYTE lpStream, DWORD dwMemLength)
-//-----------------------------------------------------------
-{
- MT2FILEHEADER *pfh = (MT2FILEHEADER *)lpStream;
- DWORD dwMemPos, dwDrumDataPos, dwExtraDataPos;
- UINT nDrumDataLen, nExtraDataLen;
- MT2DRUMSDATA *pdd;
- MT2INSTRUMENT *InstrMap[255];
- MT2SAMPLE *SampleMap[256];
-
- if ((!lpStream) || (dwMemLength < sizeof(MT2FILEHEADER))
- || (pfh->dwMT20 != 0x3032544D)
- || (pfh->wVersion < 0x0200) || (pfh->wVersion >= 0x0300)
- || (pfh->wChannels < 4) || (pfh->wChannels > 64)) return FALSE;
- pdd = NULL;
- m_nType = MOD_TYPE_MT2;
- m_nChannels = pfh->wChannels;
- m_nRestartPos = pfh->wRestart;
- m_nDefaultSpeed = pfh->bTicksPerLine;
- m_nDefaultTempo = 125;
- if ((pfh->wSamplesPerTick > 100) && (pfh->wSamplesPerTick < 5000))
- {
- m_nDefaultTempo = 110250 / pfh->wSamplesPerTick;
- }
- for (UINT iOrd=0; iOrd<MAX_ORDERS; iOrd++)
- {
- Order[iOrd] = (BYTE)((iOrd < pfh->nOrders) ? pfh->Orders[iOrd] : 0xFF);
- }
- memcpy(m_szNames[0], pfh->szSongName, 32);
- m_szNames[0][31] = 0;
- dwMemPos = sizeof(MT2FILEHEADER);
- nDrumDataLen = *(WORD *)(lpStream + dwMemPos);
- dwDrumDataPos = dwMemPos + 2;
- if (nDrumDataLen >= 2) pdd = (MT2DRUMSDATA *)(lpStream+dwDrumDataPos);
- dwMemPos += 2 + nDrumDataLen;
-#ifdef MT2DEBUG
-
- Log("MT2 v%03X: \"%s\" (flags=%04X)\n", pfh->wVersion, m_szNames[0], pfh->fulFlags);
- Log("%d Channels, %d Patterns, %d Instruments, %d Samples\n", pfh->wChannels, pfh->wPatterns, pfh->wInstruments, pfh->wSamples);
- Log("Drum Data: %d bytes @%04X\n", nDrumDataLen, dwDrumDataPos);
-#endif
- if (dwMemPos >= dwMemLength-12) return TRUE;
- if (!*(DWORD *)(lpStream+dwMemPos)) dwMemPos += 4;
- if (!*(DWORD *)(lpStream+dwMemPos)) dwMemPos += 4;
- nExtraDataLen = *(DWORD *)(lpStream+dwMemPos);
- dwExtraDataPos = dwMemPos + 4;
- dwMemPos += 4;
-#ifdef MT2DEBUG
- Log("Extra Data: %d bytes @%04X\n", nExtraDataLen, dwExtraDataPos);
-#endif
- if (dwMemPos + nExtraDataLen >= dwMemLength) return TRUE;
- while (dwMemPos+8 < dwExtraDataPos + nExtraDataLen)
- {
- DWORD dwId = *(DWORD *)(lpStream+dwMemPos);
- DWORD dwLen = *(DWORD *)(lpStream+dwMemPos+4);
- dwMemPos += 8;
- if (dwMemPos + dwLen > dwMemLength) return TRUE;
-#ifdef MT2DEBUG
- CHAR s[5];
- memcpy(s, &dwId, 4);
- s[4] = 0;
- Log("pos=0x%04X: %s: %d bytes\n", dwMemPos-8, s, dwLen);
-#endif
- switch(dwId)
- {
- // MSG
- case 0x0047534D:
- if ((dwLen > 3) && (!m_lpszSongComments))
- {
- DWORD nTxtLen = dwLen;
- if (nTxtLen > 32000) nTxtLen = 32000;
- m_lpszSongComments = new char[nTxtLen]; // changed from CHAR
- if (m_lpszSongComments)
- {
- memcpy(m_lpszSongComments, lpStream+dwMemPos+1, nTxtLen-1);
- m_lpszSongComments[nTxtLen-1] = 0;
- }
- }
- break;
- // SUM -> author name (or "Unregistered")
- // TMAP
- // TRKS
- case 0x534b5254:
- break;
- }
- dwMemPos += dwLen;
- }
- // Load Patterns
- dwMemPos = dwExtraDataPos + nExtraDataLen;
- for (UINT iPat=0; iPat<pfh->wPatterns; iPat++) if (dwMemPos < dwMemLength-6)
- {
- MT2PATTERN *pmp = (MT2PATTERN *)(lpStream+dwMemPos);
- UINT wDataLen = (pmp->wDataLen + 1) & ~1;
- dwMemPos += 6;
- if (dwMemPos + wDataLen > dwMemLength) break;
- UINT nLines = pmp->wLines;
- if ((iPat < MAX_PATTERNS) && (nLines > 0) && (nLines <= 256))
- {
- #ifdef MT2DEBUG
- Log("Pattern #%d @%04X: %d lines, %d bytes\n", iPat, dwMemPos-6, nLines, pmp->wDataLen);
- #endif
- PatternSize[iPat] = nLines;
- PatternAllocSize[iPat] = nLines;
- Patterns[iPat] = AllocatePattern(nLines, m_nChannels);
- if (!Patterns[iPat]) return TRUE;
- MODCOMMAND *m = Patterns[iPat];
- UINT len = wDataLen;
- if (pfh->fulFlags & 1) // Packed Patterns
- {
- BYTE *p = (BYTE *)(lpStream+dwMemPos);
- UINT pos = 0, row=0, ch=0;
- while (pos < len)
- {
- MT2COMMAND cmd;
- UINT infobyte = p[pos++];
- UINT rptcount = 0;
- if (infobyte == 0xff)
- {
- rptcount = p[pos++];
- infobyte = p[pos++];
- #if 0
- Log("(%d.%d) FF(%02X).%02X\n", row, ch, rptcount, infobyte);
- } else
- {
- Log("(%d.%d) %02X\n", row, ch, infobyte);
- #endif
- }
- if (infobyte & 0x7f)
- {
- UINT patpos = row*m_nChannels+ch;
- cmd.note = cmd.instr = cmd.vol = cmd.pan = cmd.fxcmd = cmd.fxparam1 = cmd.fxparam2 = 0;
- if (infobyte & 1) cmd.note = p[pos++];
- if (infobyte & 2) cmd.instr = p[pos++];
- if (infobyte & 4) cmd.vol = p[pos++];
- if (infobyte & 8) cmd.pan = p[pos++];
- if (infobyte & 16) cmd.fxcmd = p[pos++];
- if (infobyte & 32) cmd.fxparam1 = p[pos++];
- if (infobyte & 64) cmd.fxparam2 = p[pos++];
- #ifdef MT2DEBUG
- if (cmd.fxcmd)
- {
- Log("(%d.%d) MT2 FX=%02X.%02X.%02X\n", row, ch, cmd.fxcmd, cmd.fxparam1, cmd.fxparam2);
- }
- #endif
- ConvertMT2Command(this, &m[patpos], &cmd);
- }
- row += rptcount+1;
- while (row >= nLines) { row-=nLines; ch++; }
- if (ch >= m_nChannels) break;
- }
- } else
- {
- MT2COMMAND *p = (MT2COMMAND *)(lpStream+dwMemPos);
- UINT n = 0;
- while ((len > sizeof(MT2COMMAND)) && (n < m_nChannels*nLines))
- {
- ConvertMT2Command(this, m, p);
- len -= sizeof(MT2COMMAND);
- n++;
- p++;
- m++;
- }
- }
- }
- dwMemPos += wDataLen;
- }
- // Skip Drum Patterns
- if (pdd)
- {
- #ifdef MT2DEBUG
- Log("%d Drum Patterns at offset 0x%08X\n", pdd->wDrumPatterns, dwMemPos);
- #endif
- for (UINT iDrm=0; iDrm<pdd->wDrumPatterns; iDrm++)
- {
- if (dwMemPos > dwMemLength-2) return TRUE;
- UINT nLines = *(WORD *)(lpStream+dwMemPos);
- #ifdef MT2DEBUG
- if (nLines != 64) Log("Drum Pattern %d: %d Lines @%04X\n", iDrm, nLines, dwMemPos);
- #endif
- dwMemPos += 2 + nLines * 32;
- }
- }
- // Automation
- if (pfh->fulFlags & 2)
- {
- #ifdef MT2DEBUG
- Log("Automation at offset 0x%08X\n", dwMemPos);
- #endif
- UINT nAutoCount = m_nChannels;
- if (pfh->fulFlags & 0x10) nAutoCount++; // Master Automation
- if ((pfh->fulFlags & 0x08) && (pdd)) nAutoCount += 8; // Drums Automation
- nAutoCount *= pfh->wPatterns;
- for (UINT iAuto=0; iAuto<nAutoCount; iAuto++)
- {
- if (dwMemPos+12 >= dwMemLength) return TRUE;
- MT2AUTOMATION *pma = (MT2AUTOMATION *)(lpStream+dwMemPos);
- dwMemPos += (pfh->wVersion <= 0x201) ? 4 : 8;
- for (UINT iEnv=0; iEnv<14; iEnv++)
- {
- if (pma->dwFlags & (1 << iEnv))
- {
- #ifdef MT2DEBUG
- UINT nPoints = *(DWORD *)(lpStream+dwMemPos);
- Log(" Env[%d/%d] %04X @%04X: %d points\n", iAuto, nAutoCount, 1 << iEnv, dwMemPos-8, nPoints);
- #endif
- dwMemPos += 260;
- }
- }
- }
- }
- // Load Instruments
-#ifdef MT2DEBUG
- Log("Loading instruments at offset 0x%08X\n", dwMemPos);
-#endif
- memset(InstrMap, 0, sizeof(InstrMap));
- m_nInstruments = (pfh->wInstruments < MAX_INSTRUMENTS) ? pfh->wInstruments : MAX_INSTRUMENTS-1;
- m_dwSongFlags |= SONG_INSTRUMENTMODE;
- for (UINT iIns=1; iIns<=255; iIns++)
- {
- if (dwMemPos+36 > dwMemLength) return TRUE;
- MT2INSTRUMENT *pmi = (MT2INSTRUMENT *)(lpStream+dwMemPos);
- INSTRUMENTHEADER *penv = NULL;
- if (iIns <= m_nInstruments)
- {
- penv = new INSTRUMENTHEADER;
- Headers[iIns] = penv;
- if (penv)
- {
- memset(penv, 0, sizeof(INSTRUMENTHEADER));
- memcpy(penv->name, pmi->szName, 32);
- penv->nGlobalVol = 128;
- penv->nPan = 128;
- for (UINT i=0; i<120; i++)
- {
- penv->NoteMap[i] = i+1;
- }
- }
- }
- #ifdef MT2DEBUG
- if (iIns <= pfh->wInstruments) Log(" Instrument #%d at offset %04X: %d bytes\n", iIns, dwMemPos, pmi->dwDataLen);
- #endif
- if (((LONG)pmi->dwDataLen > 0) && (dwMemPos + pmi->dwDataLen + 40 <= dwMemLength))
- {
- InstrMap[iIns-1] = pmi;
- if (penv)
- {
- penv->nFadeOut = pmi->wFadeOut;
- penv->nNNA = pmi->wNNA & 3;
- penv->nDCT = (pmi->wNNA>>8) & 3;
- penv->nDNA = (pmi->wNNA>>12) & 3;
- MT2ENVELOPE *pehdr[4];
- WORD *pedata[4];
- if (pfh->wVersion <= 0x201)
- {
- DWORD dwEnvPos = dwMemPos + sizeof(MT2INSTRUMENT) - 4;
- pehdr[0] = (MT2ENVELOPE *)(lpStream+dwEnvPos);
- pehdr[1] = (MT2ENVELOPE *)(lpStream+dwEnvPos+8);
- pehdr[2] = pehdr[3] = NULL;
- pedata[0] = (WORD *)(lpStream+dwEnvPos+16);
- pedata[1] = (WORD *)(lpStream+dwEnvPos+16+64);
- pedata[2] = pedata[3] = NULL;
- } else
- {
- DWORD dwEnvPos = dwMemPos + sizeof(MT2INSTRUMENT);
- for (UINT i=0; i<4; i++)
- {
- if (pmi->wEnvFlags1 & (1<<i))
- {
- pehdr[i] = (MT2ENVELOPE *)(lpStream+dwEnvPos);
- pedata[i] = (WORD *)pehdr[i]->EnvData;
- dwEnvPos += sizeof(MT2ENVELOPE);
- } else
- {
- pehdr[i] = NULL;
- pedata[i] = NULL;
- }
- }
- }
- // Load envelopes
- for (UINT iEnv=0; iEnv<4; iEnv++) if (pehdr[iEnv])
- {
- MT2ENVELOPE *pme = pehdr[iEnv];
- int *pEnvPoints = NULL;
- BYTE *pEnvData = NULL;
- #ifdef MT2DEBUG
- Log(" Env %d.%d @%04X: %d points\n", iIns, iEnv, (UINT)(((BYTE *)pme)-lpStream), pme->nPoints);
- #endif
- switch(iEnv)
- {
- // Volume Envelope
- case 0:
- if (pme->nFlags & 1) penv->dwFlags |= ENV_VOLUME;
- if (pme->nFlags & 2) penv->dwFlags |= ENV_VOLSUSTAIN;
- if (pme->nFlags & 4) penv->dwFlags |= ENV_VOLLOOP;
- penv->VolEnv.nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
- penv->VolEnv.nSustainStart = penv->VolEnv.nSustainEnd = pme->nSustainPos;
- penv->VolEnv.nLoopStart = pme->nLoopStart;
- penv->VolEnv.nLoopEnd = pme->nLoopEnd;
- pEnvPoints = penv->VolEnv.Ticks;
- pEnvData = penv->VolEnv.Values;
- break;
-
- // Panning Envelope
- case 1:
- if (pme->nFlags & 1) penv->dwFlags |= ENV_PANNING;
- if (pme->nFlags & 2) penv->dwFlags |= ENV_PANSUSTAIN;
- if (pme->nFlags & 4) penv->dwFlags |= ENV_PANLOOP;
- penv->PanEnv.nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
- penv->PanEnv.nSustainStart = penv->PanEnv.nSustainEnd = pme->nSustainPos;
- penv->PanEnv.nLoopStart = pme->nLoopStart;
- penv->PanEnv.nLoopEnd = pme->nLoopEnd;
- pEnvPoints = penv->PanEnv.Ticks;
- pEnvData = penv->PanEnv.Values;
- break;
-
- // Pitch/Filter envelope
- default:
- if (pme->nFlags & 1) penv->dwFlags |= (iEnv==3) ? (ENV_PITCH|ENV_FILTER) : ENV_PITCH;
- if (pme->nFlags & 2) penv->dwFlags |= ENV_PITCHSUSTAIN;
- if (pme->nFlags & 4) penv->dwFlags |= ENV_PITCHLOOP;
- penv->PitchEnv.nNodes = (pme->nPoints > 16) ? 16 : pme->nPoints;
- penv->PitchEnv.nSustainStart = penv->PitchEnv.nSustainEnd = pme->nSustainPos;
- penv->PitchEnv.nLoopStart = pme->nLoopStart;
- penv->PitchEnv.nLoopEnd = pme->nLoopEnd;
- pEnvPoints = penv->PitchEnv.Ticks;
- pEnvData = penv->PitchEnv.Values;
- }
- // Envelope data
- if ((pEnvPoints) && (pEnvData) && (pedata[iEnv]))
- {
- WORD *psrc = pedata[iEnv];
- for (UINT i=0; i<16; i++)
- {
- pEnvPoints[i] = psrc[i*2];
- pEnvData[i] = (BYTE)psrc[i*2+1];
- }
- }
- }
- }
- dwMemPos += pmi->dwDataLen + 36;
- if (pfh->wVersion > 0x201) dwMemPos += 4; // ?
- } else
- {
- dwMemPos += 36;
- }
- }
-#ifdef MT2DEBUG
- Log("Loading samples at offset 0x%08X\n", dwMemPos);
-#endif
- memset(SampleMap, 0, sizeof(SampleMap));
- m_nSamples = (pfh->wSamples < MAX_SAMPLES) ? pfh->wSamples : MAX_SAMPLES-1;
- for (UINT iSmp=1; iSmp<=256; iSmp++)
- {
- if (dwMemPos+36 > dwMemLength) return TRUE;
- MT2SAMPLE *pms = (MT2SAMPLE *)(lpStream+dwMemPos);
- #ifdef MT2DEBUG
- if (iSmp <= m_nSamples) Log(" Sample #%d at offset %04X: %d bytes\n", iSmp, dwMemPos, pms->dwDataLen);
- #endif
- if (iSmp < MAX_SAMPLES)
- {
- memcpy(m_szNames[iSmp], pms->szName, 32);
- }
- if (pms->dwDataLen > 0)
- {
- SampleMap[iSmp-1] = pms;
- if (iSmp < MAX_SAMPLES)
- {
- MODINSTRUMENT *psmp = &Ins[iSmp];
- psmp->nGlobalVol = 64;
- psmp->nVolume = (pms->wVolume >> 7);
- psmp->nPan = (pms->nPan == 0x80) ? 128 : (pms->nPan^0x80);
- psmp->nLength = pms->dwLength;
- psmp->nC4Speed = pms->dwFrequency;
- psmp->nLoopStart = pms->dwLoopStart;
- psmp->nLoopEnd = pms->dwLoopEnd;
- FrequencyToTranspose(psmp);
- psmp->RelativeTone -= pms->nBaseNote - 49;
- psmp->nC4Speed = TransposeToFrequency(psmp->RelativeTone, psmp->nFineTune);
- if (pms->nQuality == 2) { psmp->uFlags |= CHN_16BIT; psmp->nLength >>= 1; }
- if (pms->nChannels == 2) { psmp->nLength >>= 1; }
- if (pms->nLoop == 1) psmp->uFlags |= CHN_LOOP;
- if (pms->nLoop == 2) psmp->uFlags |= CHN_LOOP|CHN_PINGPONGLOOP;
- }
- dwMemPos += pms->dwDataLen + 36;
- } else
- {
- dwMemPos += 36;
- }
- }
-#ifdef MT2DEBUG
- Log("Loading groups at offset 0x%08X\n", dwMemPos);
-#endif
- for (UINT iMap=0; iMap<255; iMap++) if (InstrMap[iMap])
- {
- if (dwMemPos+8 > dwMemLength) return TRUE;
- MT2INSTRUMENT *pmi = InstrMap[iMap];
- INSTRUMENTHEADER *penv = NULL;
- if (iMap<m_nInstruments) penv = Headers[iMap+1];
- for (UINT iGrp=0; iGrp<pmi->wSamples; iGrp++)
- {
- if (penv)
- {
- MT2GROUP *pmg = (MT2GROUP *)(lpStream+dwMemPos);
- for (UINT i=0; i<96; i++)
- {
- if (pmi->GroupsMapping[i] == iGrp)
- {
- UINT nSmp = pmg->nSmpNo+1;
- penv->Keyboard[i+12] = (BYTE)nSmp;
- if (nSmp <= m_nSamples)
- {
- Ins[nSmp].nVibType = pmi->bVibType;
- Ins[nSmp].nVibSweep = pmi->bVibSweep;
- Ins[nSmp].nVibDepth = pmi->bVibDepth;
- Ins[nSmp].nVibRate = pmi->bVibRate/4;
- }
- }
- }
- }
- dwMemPos += 8;
- }
- }
-#ifdef MT2DEBUG
- Log("Loading sample data at offset 0x%08X\n", dwMemPos);
-#endif
- for (UINT iData=0; iData<256; iData++) if ((iData < m_nSamples) && (SampleMap[iData]))
- {
- MT2SAMPLE *pms = SampleMap[iData];
- MODINSTRUMENT *psmp = &Ins[iData+1];
- if (!(pms->nFlags & 5))
- {
- if (psmp->nLength > 0)
- {
- #ifdef MT2DEBUG
- Log(" Reading sample #%d at offset 0x%04X (len=%d)\n", iData+1, dwMemPos, psmp->nLength);
- #endif
- UINT rsflags;
-
- if (pms->nChannels == 2)
- rsflags = (psmp->uFlags & CHN_16BIT) ? RS_STPCM16D : RS_STPCM8D;
- else
- rsflags = (psmp->uFlags & CHN_16BIT) ? RS_PCM16D : RS_PCM8D;
-
- dwMemPos += ReadSample(psmp, rsflags, (LPCSTR)(lpStream+dwMemPos), dwMemLength-dwMemPos);
- }
- } else
- if (dwMemPos+4 < dwMemLength)
- {
- UINT nNameLen = *(DWORD *)(lpStream+dwMemPos);
- dwMemPos += nNameLen + 16;
- }
- if (dwMemPos+4 >= dwMemLength) break;
- }
- return TRUE;
-}
diff --git a/src/modplug/load_mtm.cxx b/src/modplug/load_mtm.cxx
deleted file mode 100755
index 8767597..0000000
--- a/src/modplug/load_mtm.cxx
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-//////////////////////////////////////////////////////////
-// MTM file support (import only)
-
-#pragma pack(1)
-
-
-typedef struct tagMTMSAMPLE
-{
- char samplename[22]; // changed from CHAR
- DWORD length;
- DWORD reppos;
- DWORD repend;
- CHAR finetune;
- BYTE volume;
- BYTE attribute;
-} MTMSAMPLE;
-
-
-typedef struct tagMTMHEADER
-{
- char id[4]; // MTM file marker + version // changed from CHAR
- char songname[20]; // ASCIIZ songname // changed from CHAR
- WORD numtracks; // number of tracks saved
- BYTE lastpattern; // last pattern number saved
- BYTE lastorder; // last order number to play (songlength-1)
- WORD commentsize; // length of comment field
- BYTE numsamples; // number of samples saved
- BYTE attribute; // attribute byte (unused)
- BYTE beatspertrack;
- BYTE numchannels; // number of channels used
- BYTE panpos[32]; // voice pan positions
-} MTMHEADER;
-
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadMTM(LPCBYTE lpStream, DWORD dwMemLength)
-//-----------------------------------------------------------
-{
- MTMHEADER *pmh = (MTMHEADER *)lpStream;
- DWORD dwMemPos = 66;
-
- if ((!lpStream) || (dwMemLength < 0x100)) return FALSE;
- if ((strncmp(pmh->id, "MTM", 3)) || (pmh->numchannels > 32)
- || (pmh->numsamples >= MAX_SAMPLES) || (!pmh->numsamples)
- || (!pmh->numtracks) || (!pmh->numchannels)
- || (!pmh->lastpattern) || (pmh->lastpattern > MAX_PATTERNS)) return FALSE;
- strncpy(m_szNames[0], pmh->songname, 20);
- m_szNames[0][20] = 0;
- if (dwMemPos + 37*pmh->numsamples + 128 + 192*bswapLE16(pmh->numtracks)
- + 64 * (pmh->lastpattern+1) + bswapLE16(pmh->commentsize) >= dwMemLength) return FALSE;
- m_nType = MOD_TYPE_MTM;
- m_nSamples = pmh->numsamples;
- m_nChannels = pmh->numchannels;
- // Reading instruments
- for (UINT i=1; i<=m_nSamples; i++)
- {
- MTMSAMPLE *pms = (MTMSAMPLE *)(lpStream + dwMemPos);
- strncpy(m_szNames[i], pms->samplename, 22);
- m_szNames[i][22] = 0;
- Ins[i].nVolume = pms->volume << 2;
- Ins[i].nGlobalVol = 64;
- DWORD len = bswapLE32(pms->length);
- if ((len > 4) && (len <= MAX_SAMPLE_LENGTH))
- {
- Ins[i].nLength = len;
- Ins[i].nLoopStart = bswapLE32(pms->reppos);
- Ins[i].nLoopEnd = bswapLE32(pms->repend);
- if (Ins[i].nLoopEnd > Ins[i].nLength) Ins[i].nLoopEnd = Ins[i].nLength;
- if (Ins[i].nLoopStart + 4 >= Ins[i].nLoopEnd) Ins[i].nLoopStart = Ins[i].nLoopEnd = 0;
- if (Ins[i].nLoopEnd) Ins[i].uFlags |= CHN_LOOP;
- Ins[i].nFineTune = MOD2XMFineTune(pms->finetune);
- if (pms->attribute & 0x01)
- {
- Ins[i].uFlags |= CHN_16BIT;
- Ins[i].nLength >>= 1;
- Ins[i].nLoopStart >>= 1;
- Ins[i].nLoopEnd >>= 1;
- }
- Ins[i].nPan = 128;
- }
- dwMemPos += 37;
- }
- // Setting Channel Pan Position
- for (UINT ich=0; ich<m_nChannels; ich++)
- {
- ChnSettings[ich].nPan = ((pmh->panpos[ich] & 0x0F) << 4) + 8;
- ChnSettings[ich].nVolume = 64;
- }
- // Reading pattern order
- memcpy(Order, lpStream + dwMemPos, pmh->lastorder+1);
- dwMemPos += 128;
- // Reading Patterns
- LPCBYTE pTracks = lpStream + dwMemPos;
- dwMemPos += 192 * bswapLE16(pmh->numtracks);
- LPWORD pSeq = (LPWORD)(lpStream + dwMemPos);
- for (UINT pat=0; pat<=pmh->lastpattern; pat++)
- {
- PatternSize[pat] = 64;
- PatternAllocSize[pat] = 64;
- if ((Patterns[pat] = AllocatePattern(64, m_nChannels)) == NULL) break;
- for (UINT n=0; n<32; n++) if ((pSeq[n]) && (pSeq[n] <= bswapLE16(pmh->numtracks)) && (n < m_nChannels))
- {
- LPCBYTE p = pTracks + 192 * (pSeq[n]-1);
- MODCOMMAND *m = Patterns[pat] + n;
- for (UINT i=0; i<64; i++, m+=m_nChannels, p+=3)
- {
- if (p[0] & 0xFC) m->note = (p[0] >> 2) + 37;
- m->instr = ((p[0] & 0x03) << 4) | (p[1] >> 4);
- UINT cmd = p[1] & 0x0F;
- UINT param = p[2];
- if (cmd == 0x0A)
- {
- if (param & 0xF0) param &= 0xF0; else param &= 0x0F;
- }
- m->command = cmd;
- m->param = param;
- if ((cmd) || (param)) ConvertModCommand(m);
- }
- }
- pSeq += 32;
- }
- dwMemPos += 64*(pmh->lastpattern+1);
- if (bswapLE16(pmh->commentsize) && (dwMemPos + bswapLE16(pmh->commentsize) < dwMemLength))
- {
- UINT n = bswapLE16(pmh->commentsize);
- m_lpszSongComments = new char[n+1];
- if (m_lpszSongComments)
- {
- memcpy(m_lpszSongComments, lpStream+dwMemPos, n);
- m_lpszSongComments[n] = 0;
- for (UINT i=0; i<n; i++)
- {
- if (!m_lpszSongComments[i])
- {
- m_lpszSongComments[i] = ((i+1) % 40) ? 0x20 : 0x0D;
- }
- }
- }
- }
- dwMemPos += bswapLE16(pmh->commentsize);
- // Reading Samples
- for (UINT ismp=1; ismp<=m_nSamples; ismp++)
- {
- if (dwMemPos >= dwMemLength) break;
- dwMemPos += ReadSample(&Ins[ismp], (Ins[ismp].uFlags & CHN_16BIT) ? RS_PCM16U : RS_PCM8U,
- (LPSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos);
- }
- m_nMinPeriod = 64;
- m_nMaxPeriod = 32767;
- return TRUE;
-}
-
diff --git a/src/modplug/load_okt.cxx b/src/modplug/load_okt.cxx
deleted file mode 100755
index 61eda96..0000000
--- a/src/modplug/load_okt.cxx
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-//////////////////////////////////////////////
-// Oktalyzer (OKT) module loader //
-//////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-typedef struct OKTFILEHEADER
-{
- DWORD okta; // "OKTA"
- DWORD song; // "SONG"
- DWORD cmod; // "CMOD"
- DWORD fixed8;
- BYTE chnsetup[8];
- DWORD samp; // "SAMP"
- DWORD samplen;
-} OKTFILEHEADER;
-
-
-typedef struct OKTSAMPLE
-{
- CHAR name[20];
- DWORD length;
- WORD loopstart;
- WORD looplen;
- BYTE pad1;
- BYTE volume;
- BYTE pad2;
- BYTE pad3;
-} OKTSAMPLE;
-
-
-BOOL CSoundFile::ReadOKT(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- OKTFILEHEADER *pfh = (OKTFILEHEADER *)lpStream;
- DWORD dwMemPos = sizeof(OKTFILEHEADER);
- UINT nsamples = 0, npatterns = 0, norders = 0;
-
- if ((!lpStream) || (dwMemLength < 1024)) return FALSE;
- if ((pfh->okta != 0x41544B4F) || (pfh->song != 0x474E4F53)
- || (pfh->cmod != 0x444F4D43) || (pfh->chnsetup[0]) || (pfh->chnsetup[2])
- || (pfh->chnsetup[4]) || (pfh->chnsetup[6]) || (pfh->fixed8 != 0x08000000)
- || (pfh->samp != 0x504D4153)) return FALSE;
- m_nType = MOD_TYPE_OKT;
- m_nChannels = 4 + pfh->chnsetup[1] + pfh->chnsetup[3] + pfh->chnsetup[5] + pfh->chnsetup[7];
- if (m_nChannels > MAX_CHANNELS) m_nChannels = MAX_CHANNELS;
- nsamples = bswapBE32(pfh->samplen) >> 5;
- m_nSamples = nsamples;
- if (m_nSamples >= MAX_SAMPLES) m_nSamples = MAX_SAMPLES-1;
- // Reading samples
- for (UINT smp=1; smp <= nsamples; smp++)
- {
- if (dwMemPos >= dwMemLength) return TRUE;
- if (smp < MAX_SAMPLES)
- {
- OKTSAMPLE *psmp = (OKTSAMPLE *)(lpStream + dwMemPos);
- MODINSTRUMENT *pins = &Ins[smp];
-
- memcpy(m_szNames[smp], psmp->name, 20);
- pins->uFlags = 0;
- pins->nLength = bswapBE32(psmp->length) & ~1;
- pins->nLoopStart = bswapBE16(psmp->loopstart);
- pins->nLoopEnd = pins->nLoopStart + bswapBE16(psmp->looplen);
- if (pins->nLoopStart + 2 < pins->nLoopEnd) pins->uFlags |= CHN_LOOP;
- pins->nGlobalVol = 64;
- pins->nVolume = psmp->volume << 2;
- pins->nC4Speed = 8363;
- }
- dwMemPos += sizeof(OKTSAMPLE);
- }
- // SPEE
- if (dwMemPos >= dwMemLength) return TRUE;
- if (*((DWORD *)(lpStream + dwMemPos)) == 0x45455053)
- {
- m_nDefaultSpeed = lpStream[dwMemPos+9];
- dwMemPos += bswapBE32(*((DWORD *)(lpStream + dwMemPos + 4))) + 8;
- }
- // SLEN
- if (dwMemPos >= dwMemLength) return TRUE;
- if (*((DWORD *)(lpStream + dwMemPos)) == 0x4E454C53)
- {
- npatterns = lpStream[dwMemPos+9];
- dwMemPos += bswapBE32(*((DWORD *)(lpStream + dwMemPos + 4))) + 8;
- }
- // PLEN
- if (dwMemPos >= dwMemLength) return TRUE;
- if (*((DWORD *)(lpStream + dwMemPos)) == 0x4E454C50)
- {
- norders = lpStream[dwMemPos+9];
- dwMemPos += bswapBE32(*((DWORD *)(lpStream + dwMemPos + 4))) + 8;
- }
- // PATT
- if (dwMemPos >= dwMemLength) return TRUE;
- if (*((DWORD *)(lpStream + dwMemPos)) == 0x54544150)
- {
- UINT orderlen = norders;
- if (orderlen >= MAX_ORDERS) orderlen = MAX_ORDERS-1;
- for (UINT i=0; i<orderlen; i++) Order[i] = lpStream[dwMemPos+10+i];
- for (UINT j=orderlen; j>1; j--) { if (Order[j-1]) break; Order[j-1] = 0xFF; }
- dwMemPos += bswapBE32(*((DWORD *)(lpStream + dwMemPos + 4))) + 8;
- }
- // PBOD
- UINT npat = 0;
- while ((dwMemPos+10 < dwMemLength) && (*((DWORD *)(lpStream + dwMemPos)) == 0x444F4250))
- {
- DWORD dwPos = dwMemPos + 10;
- UINT rows = lpStream[dwMemPos+9];
- if (!rows) rows = 64;
- if (npat < MAX_PATTERNS)
- {
- if ((Patterns[npat] = AllocatePattern(rows, m_nChannels)) == NULL) return TRUE;
- MODCOMMAND *m = Patterns[npat];
- PatternSize[npat] = rows;
- PatternAllocSize[npat] = rows;
- UINT imax = m_nChannels*rows;
- for (UINT i=0; i<imax; i++, m++, dwPos+=4)
- {
- if (dwPos+4 > dwMemLength) break;
- const BYTE *p = lpStream+dwPos;
- UINT note = p[0];
- if (note)
- {
- m->note = note + 48;
- m->instr = p[1] + 1;
- }
- UINT command = p[2];
- UINT param = p[3];
- m->param = param;
- switch(command)
- {
- // 0: no effect
- case 0:
- break;
- // 1: Portamento Up
- case 1:
- case 17:
- case 30:
- if (param) m->command = CMD_PORTAMENTOUP;
- break;
- // 2: Portamento Down
- case 2:
- case 13:
- case 21:
- if (param) m->command = CMD_PORTAMENTODOWN;
- break;
- // 10: Arpeggio
- case 10:
- case 11:
- case 12:
- m->command = CMD_ARPEGGIO;
- break;
- // 15: Filter
- case 15:
- m->command = CMD_MODCMDEX;
- m->param = param & 0x0F;
- break;
- // 25: Position Jump
- case 25:
- m->command = CMD_POSITIONJUMP;
- break;
- // 28: Set Speed
- case 28:
- m->command = CMD_SPEED;
- break;
- // 31: Volume Control
- case 31:
- if (param <= 0x40) m->command = CMD_VOLUME; else
- if (param <= 0x50) { m->command = CMD_VOLUMESLIDE; m->param &= 0x0F; if (!m->param) m->param = 0x0F; } else
- if (param <= 0x60) { m->command = CMD_VOLUMESLIDE; m->param = (param & 0x0F) << 4; if (!m->param) m->param = 0xF0; } else
- if (param <= 0x70) { m->command = CMD_MODCMDEX; m->param = 0xB0 | (param & 0x0F); if (!(param & 0x0F)) m->param = 0xBF; } else
- if (param <= 0x80) { m->command = CMD_MODCMDEX; m->param = 0xA0 | (param & 0x0F); if (!(param & 0x0F)) m->param = 0xAF; }
- break;
- }
- }
- }
- npat++;
- dwMemPos += bswapBE32(*((DWORD *)(lpStream + dwMemPos + 4))) + 8;
- }
- // SBOD
- UINT nsmp = 1;
- while ((dwMemPos+10 < dwMemLength) && (*((DWORD *)(lpStream + dwMemPos)) == 0x444F4253))
- {
- if (nsmp < MAX_SAMPLES) ReadSample(&Ins[nsmp], RS_PCM8S, (LPSTR)(lpStream+dwMemPos+8), dwMemLength-dwMemPos-8);
- dwMemPos += bswapBE32(*((DWORD *)(lpStream + dwMemPos + 4))) + 8;
- nsmp++;
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_psm.cxx b/src/modplug/load_psm.cxx
deleted file mode 100755
index 86148ef..0000000
--- a/src/modplug/load_psm.cxx
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-
-///////////////////////////////////////////////////
-//
-// PSM module loader
-//
-///////////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#define PSM_LOG
-
-#define PSM_ID_NEW 0x204d5350
-#define PSM_ID_OLD 0xfe4d5350
-#define IFFID_FILE 0x454c4946
-#define IFFID_TITL 0x4c544954
-#define IFFID_SDFT 0x54464453
-#define IFFID_PBOD 0x444f4250
-#define IFFID_SONG 0x474e4f53
-#define IFFID_PATT 0x54544150
-#define IFFID_DSMP 0x504d5344
-#define IFFID_OPLH 0x484c504f
-
-#pragma pack(1)
-
-typedef struct _PSMCHUNK
-{
- DWORD id;
- DWORD len;
- DWORD listid;
-} PSMCHUNK;
-
-typedef struct _PSMSONGHDR
-{
- CHAR songname[8]; // "MAINSONG"
- BYTE reserved1;
- BYTE reserved2;
- BYTE channels;
-} PSMSONGHDR;
-
-typedef struct _PSMPATTERN
-{
- DWORD size;
- DWORD name;
- WORD rows;
- WORD reserved1;
- BYTE data[4];
-} PSMPATTERN;
-
-typedef struct _PSMSAMPLE
-{
- BYTE flags;
- CHAR songname[8];
- DWORD smpid;
- CHAR samplename[34];
- DWORD reserved1;
- BYTE reserved2;
- BYTE insno;
- BYTE reserved3;
- DWORD length;
- DWORD loopstart;
- DWORD loopend;
- WORD reserved4;
- BYTE defvol;
- DWORD reserved5;
- DWORD samplerate;
- BYTE reserved6[19];
-} PSMSAMPLE;
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadPSM(LPCBYTE lpStream, DWORD dwMemLength)
-//-----------------------------------------------------------
-{
- PSMCHUNK *pfh = (PSMCHUNK *)lpStream;
- DWORD dwMemPos, dwSongPos;
- DWORD smpnames[MAX_SAMPLES];
- DWORD patptrs[MAX_PATTERNS];
- BYTE samplemap[MAX_SAMPLES];
- UINT nPatterns;
-
- // Chunk0: "PSM ",filesize,"FILE"
- if (dwMemLength < 256) return FALSE;
- if (bswapLE32(pfh->id) == PSM_ID_OLD)
- {
- #ifdef PSM_LOG
- printf("Old PSM format not supported\n");
- #endif
- return FALSE;
- }
- if ((bswapLE32(pfh->id) != PSM_ID_NEW)
- || (bswapLE32(pfh->len)+12 > dwMemLength)
- || (bswapLE32(pfh->listid) != IFFID_FILE)) return FALSE;
- m_nType = MOD_TYPE_PSM;
- m_nChannels = 16;
- m_nSamples = 0;
- nPatterns = 0;
- dwMemPos = 12;
- dwSongPos = 0;
- for (UINT iChPan=0; iChPan<16; iChPan++)
- {
- UINT pan = (((iChPan & 3) == 1) || ((iChPan&3)==2)) ? 0xC0 : 0x40;
- ChnSettings[iChPan].nPan = pan;
- }
- m_szNames[0][0]=0;
- while (dwMemPos+8 < dwMemLength)
- {
- PSMCHUNK *pchunk = (PSMCHUNK *)(lpStream+dwMemPos);
- if ((bswapLE32(pchunk->len) >= dwMemLength - 8)
- || (dwMemPos + bswapLE32(pchunk->len) + 8 > dwMemLength)) break;
- dwMemPos += 8;
- PUCHAR pdata = (PUCHAR)(lpStream+dwMemPos);
- ULONG len = bswapLE32(pchunk->len);
- if (len) switch(bswapLE32(pchunk->id))
- {
- // "TITL": Song title
- case IFFID_TITL:
- if (!pdata[0]) { pdata++; len--; }
- memcpy(m_szNames[0], pdata, (len>31) ? 31 : len);
- m_szNames[0][31] = 0;
- break;
- // "PBOD": Pattern
- case IFFID_PBOD:
- if ((len >= 12) && (nPatterns < MAX_PATTERNS))
- {
- patptrs[nPatterns++] = dwMemPos-8;
- }
- break;
- // "SONG": Song description
- case IFFID_SONG:
- if ((len >= sizeof(PSMSONGHDR)+8) && (!dwSongPos))
- {
- dwSongPos = dwMemPos - 8;
- }
- break;
- // "DSMP": Sample Data
- case IFFID_DSMP:
- if ((len >= sizeof(PSMSAMPLE)) && (m_nSamples+1 < MAX_SAMPLES))
- {
- m_nSamples++;
- MODINSTRUMENT *pins = &Ins[m_nSamples];
- PSMSAMPLE *psmp = (PSMSAMPLE *)pdata;
- smpnames[m_nSamples] = bswapLE32(psmp->smpid);
- memcpy(m_szNames[m_nSamples], psmp->samplename, 31);
- m_szNames[m_nSamples][31] = 0;
- samplemap[m_nSamples-1] = (BYTE)m_nSamples;
- // Init sample
- pins->nGlobalVol = 0x40;
- pins->nC4Speed = bswapLE32(psmp->samplerate);
- pins->nLength = bswapLE32(psmp->length);
- pins->nLoopStart = bswapLE32(psmp->loopstart);
- pins->nLoopEnd = bswapLE32(psmp->loopend);
- pins->nPan = 128;
- pins->nVolume = (psmp->defvol+1) * 2;
- pins->uFlags = (psmp->flags & 0x80) ? CHN_LOOP : 0;
- if (pins->nLoopStart > 0) pins->nLoopStart--;
- // Point to sample data
- pdata += 0x60;
- len -= 0x60;
- // Load sample data
- if ((pins->nLength > 3) && (len > 3))
- {
- ReadSample(pins, RS_PCM8D, (LPCSTR)pdata, len);
- } else
- {
- pins->nLength = 0;
- }
- }
- break;
- #if 0
- default:
- {
- CHAR s[8], s2[64];
- *(DWORD *)s = pchunk->id;
- s[4] = 0;
- wsprintf(s2, "%s: %4d bytes @ %4d\n", s, pchunk->len, dwMemPos);
- OutputDebugString(s2);
- }
- #endif
- }
- dwMemPos += bswapLE32(pchunk->len);
- }
- // Step #1: convert song structure
- PSMSONGHDR *pSong = (PSMSONGHDR *)(lpStream+dwSongPos+8);
- if ((!dwSongPos) || (pSong->channels < 2) || (pSong->channels > 32)) return TRUE;
- m_nChannels = pSong->channels;
- // Valid song header -> convert attached chunks
- {
- DWORD dwSongEnd = dwSongPos + 8 + *(DWORD *)(lpStream+dwSongPos+4);
- dwMemPos = dwSongPos + 8 + 11; // sizeof(PSMCHUNK)+sizeof(PSMSONGHDR)
- while (dwMemPos + 8 < dwSongEnd)
- {
- PSMCHUNK *pchunk = (PSMCHUNK *)(lpStream+dwMemPos);
- dwMemPos += 8;
- if ((bswapLE32(pchunk->len) > dwSongEnd)
- || (dwMemPos + bswapLE32(pchunk->len) > dwSongEnd)) break;
- PUCHAR pdata = (PUCHAR)(lpStream+dwMemPos);
- ULONG len = bswapLE32(pchunk->len);
- switch(bswapLE32(pchunk->id))
- {
- case IFFID_OPLH:
- if (len >= 0x20)
- {
- UINT pos = len - 3;
- while (pos > 5)
- {
- BOOL bFound = FALSE;
- pos -= 5;
- DWORD dwName = *(DWORD *)(pdata+pos);
- for (UINT i=0; i<nPatterns; i++)
- {
- DWORD dwPatName = ((PSMPATTERN *)(lpStream+patptrs[i]+8))->name;
- if (dwName == dwPatName)
- {
- bFound = TRUE;
- break;
- }
- }
- if ((!bFound) && (pdata[pos+1] > 0) && (pdata[pos+1] <= 0x10)
- && (pdata[pos+3] > 0x40) && (pdata[pos+3] < 0xC0))
- {
- m_nDefaultSpeed = pdata[pos+1];
- m_nDefaultTempo = pdata[pos+3];
- break;
- }
- }
- UINT iOrd = 0;
- while ((pos+5<len) && (iOrd < MAX_ORDERS))
- {
- DWORD dwName = *(DWORD *)(pdata+pos);
- for (UINT i=0; i<nPatterns; i++)
- {
- DWORD dwPatName = ((PSMPATTERN *)(lpStream+patptrs[i]+8))->name;
- if (dwName == dwPatName)
- {
- Order[iOrd++] = i;
- break;
- }
- }
- pos += 5;
- }
- }
- break;
- }
- dwMemPos += bswapLE32(pchunk->len);
- }
- }
-
- // Step #2: convert patterns
- for (UINT nPat=0; nPat<nPatterns; nPat++)
- {
- PSMPATTERN *pPsmPat = (PSMPATTERN *)(lpStream+patptrs[nPat]+8);
- ULONG len = bswapLE32(*(DWORD *)(lpStream+patptrs[nPat]+4)) - 12;
- UINT nRows = bswapLE16(pPsmPat->rows);
- if (len > bswapLE32(pPsmPat->size)) len = bswapLE32(pPsmPat->size);
- if ((nRows < 64) || (nRows > 256)) nRows = 64;
- PatternSize[nPat] = nRows;
- PatternAllocSize[nPat] = nRows;
- if ((Patterns[nPat] = AllocatePattern(nRows, m_nChannels)) == NULL) break;
- MODCOMMAND *m = Patterns[nPat];
- MODCOMMAND *sp, dummy;
- BYTE *p = pPsmPat->data;
- UINT pos = 0;
- UINT row = 0;
- UINT rowlim;
- #ifdef PSM_LOG
- //printf("Pattern %d at offset 0x%04X\n", nPat, (DWORD)(p - (BYTE *)lpStream));
- #endif
- rowlim = bswapLE16(pPsmPat->reserved1)-2;
- while ((row < nRows) && (pos+1 < len))
- {
- UINT flags, ch;
- if ((pos+1) >= rowlim) {
- pos = rowlim;
- rowlim = (((int)p[pos+1])<<8)
- | ((int)p[pos+0]);
- m += m_nChannels;
- row++;
- rowlim += pos;
- pos += 2;
- }
- flags = p[pos++];
- ch = p[pos++];
- if (ch >= m_nChannels) {
- #ifdef PSM_LOG
- printf("Invalid channel row=%d (0x%02X.0x%02X)\n", row, flags, ch);
- #endif
- sp = &dummy;
- } else {
- sp = &m[ch];
- }
- // Note + Instr
- if ((flags & 0x80) && (pos+1 < len))
- {
- UINT note = p[pos++];
- note = (note>>4)*12+(note&0x0f)+12+1;
- if (note > 0x80) note = 0;
- sp->note = note;
- }
- if ((flags & 0x40) && (pos+1 < len))
- {
- UINT nins = p[pos++];
- #ifdef PSM_LOG
- if ((!nPat) && (nins >= m_nSamples)) printf("WARNING: invalid instrument number (%d)\n", nins);
- #endif
- sp->instr = samplemap[nins];
- }
- // Volume
- if ((flags & 0x20) && (pos < len))
- {
- sp->volcmd = VOLCMD_VOLUME;
- sp->vol = p[pos++] / 2;
- }
- // Effect
- if ((flags & 0x10) && (pos+1 < len))
- {
- UINT command = p[pos++];
- UINT param = p[pos++];
- // Convert effects
- switch(command & 0x3F)
- {
- // 01: fine volslide up
- case 0x01:
-#if PSM_LOG
- printf("fvup command pat=%d row=%d ch=%d %02x %02x\n",
- nPat,
- row,1+ch,
- command, param);
-#endif
-#if 0
- if (!sp->volcmd) {
- sp->volcmd = VOLCMD_FINEVOLUP;
- sp->vol = (param >> 1) & 0xF;
- command = CMD_PORTAMENTOUP;
- param>>=4; param |= 0xf0;
- if (param == 240) param=241;
- } else {
-#endif
- command = CMD_VOLUMESLIDE;
- param |= 0x0f;
- if (param == 15) param=31;
- break;
- // 02: volslide up
- case 0x02: command = CMD_VOLUMESLIDE; param>>=1; param<<=4; break;
- // 03: fine volslide down
- case 0x03:
-#if PSM_LOG
- printf("fvdown command pat=%d row=%d ch=%d %02x %02x\n",
- nPat,
- row,1+ch,
- command, param);
-#endif
-#if 0
- if (!sp->volcmd) {
- sp->volcmd = VOLCMD_FINEVOLDOWN;
- sp->vol = (param >> 2) & 0xF;
- if (!sp->vol) sp->vol = 1;
- command = CMD_PORTAMENTODOWN;
- }
-#endif
- command = CMD_VOLUMESLIDE;
- param>>=4; param |= 0xf0;
- if (param == 240) param=241;
- break;
- // 04: volslide down
- case 0x04: command = CMD_VOLUMESLIDE; param>>=1; break;
- // 0C: portamento up
- case 0x0C: command = CMD_PORTAMENTOUP; param = (param+1)/2; break;
- // 0E: portamento down
- case 0x0E: command = CMD_PORTAMENTODOWN; param = (param+1)/2; break;
- // 0F: tone portamento
- case 0x0F: command = CMD_TONEPORTAMENTO; param = param/4; break;
- // 15: vibrato
- case 0x15: command = CMD_VIBRATO; break;
- // 29: wtf
- case 0x29: pos += 2; break;
- // 2A: retrig
- case 0x2A: command = CMD_RETRIG; break;
- // 33: Position Jump
- case 0x33: command = CMD_POSITIONJUMP; break;
- // 34: Pattern break
- case 0x34: command = CMD_PATTERNBREAK; break;
- // 3D: speed
- case 0x3D: command = CMD_SPEED;
- if (!row && !nPat)
- m_nDefaultSpeed = param;
- break;
- // 3E: tempo
- case 0x3E: command = CMD_TEMPO;
- if (!row && !nPat)
- m_nDefaultTempo = param;
- break;
- // Unknown
- default:
- #ifdef PSM_LOG
- printf("Unknown PSM effect pat=%d row=%d ch=%d: %02X.%02X\n", nPat, row, ch, command, param);
- #endif
- command = param = 0;
- }
- sp->command = (BYTE)command;
- sp->param = (BYTE)param;
- }
- }
- #ifdef PSM_LOG
- if (pos < len)
- {
-// printf("Pattern %d: %d/%d[%d] rows (%d bytes) -> %d bytes left\n", nPat, row, nRows, pPsmPat->rows, pPsmPat->size, len-pos);
- }
- #endif
- }
-
- // Done (finally!)
- return TRUE;
-}
-
-
-//////////////////////////////////////////////////////////////
-//
-// PSM Old Format
-//
-
-/*
-
-CONST
- c_PSM_MaxOrder = $FF;
- c_PSM_MaxSample = $FF;
- c_PSM_MaxChannel = $0F;
-
- TYPE
- PPSM_Header = ^TPSM_Header;
- TPSM_Header = RECORD
- PSM_Sign : ARRAY[01..04] OF CHAR; { PSM + #254 }
- PSM_SongName : ARRAY[01..58] OF CHAR;
- PSM_Byte00 : BYTE;
- PSM_Byte1A : BYTE;
- PSM_Unknown00 : BYTE;
- PSM_Unknown01 : BYTE;
- PSM_Unknown02 : BYTE;
- PSM_Speed : BYTE;
- PSM_Tempo : BYTE;
- PSM_Unknown03 : BYTE;
- PSM_Unknown04 : WORD;
- PSM_OrderLength : WORD;
- PSM_PatternNumber : WORD;
- PSM_SampleNumber : WORD;
- PSM_ChannelNumber : WORD;
- PSM_ChannelUsed : WORD;
- PSM_OrderPosition : LONGINT;
- PSM_ChannelSettingPosition : LONGINT;
- PSM_PatternPosition : LONGINT;
- PSM_SamplePosition : LONGINT;
- { *** perhaps there are some more infos in a larger header,
- but i have not decoded it and so it apears here NOT }
- END;
-
- PPSM_Sample = ^TPSM_Sample;
- TPSM_Sample = RECORD
- PSM_SampleFileName : ARRAY[01..12] OF CHAR;
- PSM_SampleByte00 : BYTE;
- PSM_SampleName : ARRAY[01..22] OF CHAR;
- PSM_SampleUnknown00 : ARRAY[01..02] OF BYTE;
- PSM_SamplePosition : LONGINT;
- PSM_SampleUnknown01 : ARRAY[01..04] OF BYTE;
- PSM_SampleNumber : BYTE;
- PSM_SampleFlags : WORD;
- PSM_SampleLength : LONGINT;
- PSM_SampleLoopBegin : LONGINT;
- PSM_SampleLoopEnd : LONGINT;
- PSM_Unknown03 : BYTE;
- PSM_SampleVolume : BYTE;
- PSM_SampleC5Speed : WORD;
- END;
-
- PPSM_SampleList = ^TPSM_SampleList;
- TPSM_SampleList = ARRAY[01..c_PSM_MaxSample] OF TPSM_Sample;
-
- PPSM_Order = ^TPSM_Order;
- TPSM_Order = ARRAY[00..c_PSM_MaxOrder] OF BYTE;
-
- PPSM_ChannelSettings = ^TPSM_ChannelSettings;
- TPSM_ChannelSettings = ARRAY[00..c_PSM_MaxChannel] OF BYTE;
-
- CONST
- PSM_NotesInPattern : BYTE = $00;
- PSM_ChannelInPattern : BYTE = $00;
-
- CONST
- c_PSM_SetSpeed = 60;
-
- FUNCTION PSM_Size(FileName : STRING;FilePosition : LONGINT) : LONGINT;
- BEGIN
- END;
-
- PROCEDURE PSM_UnpackPattern(VAR Source,Destination;PatternLength : WORD);
- VAR
- Witz : ARRAY[00..04] OF WORD;
- I1,I2 : WORD;
- I3,I4 : WORD;
- TopicalByte : ^BYTE;
- Pattern : PUnpackedPattern;
- ChannelP : BYTE;
- NoteP : BYTE;
- InfoByte : BYTE;
- CodeByte : BYTE;
- InfoWord : WORD;
- Effect : BYTE;
- Opperand : BYTE;
- Panning : BYTE;
- Volume : BYTE;
- PrevInfo : BYTE;
- InfoIndex : BYTE;
- BEGIN
- Pattern := @Destination;
- TopicalByte := @Source;
- { *** Initialize patttern }
- FOR I2 := 0 TO c_Maximum_NoteIndex DO
- FOR I3 := 0 TO c_Maximum_ChannelIndex DO
- BEGIN
- Pattern^[I2,I3,c_Pattern_NoteIndex] := $FF;
- Pattern^[I2,I3,c_Pattern_SampleIndex] := $00;
- Pattern^[I2,I3,c_Pattern_VolumeIndex] := $FF;
- Pattern^[I2,I3,c_Pattern_PanningIndex] := $FF;
- Pattern^[I2,I3,c_Pattern_EffectIndex] := $00;
- Pattern^[I2,I3,c_Pattern_OpperandIndex] := $00;
- END;
- { *** Byte-pointer on first pattern-entry }
- ChannelP := $00;
- NoteP := $00;
- InfoByte := $00;
- PrevInfo := $00;
- InfoIndex := $02;
- { *** read notes in pattern }
- PSM_NotesInPattern := TopicalByte^; INC(TopicalByte); DEC(PatternLength); INC(InfoIndex);
- PSM_ChannelInPattern := TopicalByte^; INC(TopicalByte); DEC(PatternLength); INC(InfoIndex);
- { *** unpack pattern }
- WHILE (INTEGER(PatternLength) > 0) AND (NoteP < c_Maximum_NoteIndex) DO
- BEGIN
- { *** Read info-byte }
- InfoByte := TopicalByte^; INC(TopicalByte); DEC(PatternLength); INC(InfoIndex);
- IF InfoByte <> $00 THEN
- BEGIN
- ChannelP := InfoByte AND $0F;
- IF InfoByte AND 128 = 128 THEN { note and sample }
- BEGIN
- { *** read note }
- CodeByte := TopicalByte^; INC(TopicalByte); DEC(PatternLength);
- DEC(CodeByte);
- CodeByte := CodeByte MOD 12 * 16 + CodeByte DIV 12 + 2;
- Pattern^[NoteP,ChannelP,c_Pattern_NoteIndex] := CodeByte;
- { *** read sample }
- CodeByte := TopicalByte^; INC(TopicalByte); DEC(PatternLength);
- Pattern^[NoteP,ChannelP,c_Pattern_SampleIndex] := CodeByte;
- END;
- IF InfoByte AND 64 = 64 THEN { Volume }
- BEGIN
- CodeByte := TopicalByte^; INC(TopicalByte); DEC(PatternLength);
- Pattern^[NoteP,ChannelP,c_Pattern_VolumeIndex] := CodeByte;
- END;
- IF InfoByte AND 32 = 32 THEN { effect AND opperand }
- BEGIN
- Effect := TopicalByte^; INC(TopicalByte); DEC(PatternLength);
- Opperand := TopicalByte^; INC(TopicalByte); DEC(PatternLength);
- CASE Effect OF
- c_PSM_SetSpeed:
- BEGIN
- Effect := c_I_Set_Speed;
- END;
- ELSE
- BEGIN
- Effect := c_I_NoEffect;
- Opperand := $00;
- END;
- END;
- Pattern^[NoteP,ChannelP,c_Pattern_EffectIndex] := Effect;
- Pattern^[NoteP,ChannelP,c_Pattern_OpperandIndex] := Opperand;
- END;
- END ELSE INC(NoteP);
- END;
- END;
-
- PROCEDURE PSM_Load(FileName : STRING;FilePosition : LONGINT;VAR Module : PModule;VAR ErrorCode : WORD);
- { *** caution : Module has to be inited before!!!! }
- VAR
- Header : PPSM_Header;
- Sample : PPSM_SampleList;
- Order : PPSM_Order;
- ChannelSettings : PPSM_ChannelSettings;
- MultiPurposeBuffer : PByteArray;
- PatternBuffer : PUnpackedPattern;
- TopicalParaPointer : WORD;
-
- InFile : FILE;
- I1,I2 : WORD;
- I3,I4 : WORD;
- TempW : WORD;
- TempB : BYTE;
- TempP : PByteArray;
- TempI : INTEGER;
- { *** copy-vars for loop-extension }
- CopySource : LONGINT;
- CopyDestination : LONGINT;
- CopyLength : LONGINT;
- BEGIN
- { *** try to open file }
- ASSIGN(InFile,FileName);
-{$I-}
- RESET(InFile,1);
-{$I+}
- IF IORESULT <> $00 THEN
- BEGIN
- EXIT;
- END;
-{$I-}
- { *** seek start of module }
- IF FILESIZE(InFile) < FilePosition THEN
- BEGIN
- EXIT;
- END;
- SEEK(InFile,FilePosition);
- { *** look for enough memory for temporary variables }
- IF MEMAVAIL < SIZEOF(TPSM_Header) + SIZEOF(TPSM_SampleList) +
- SIZEOF(TPSM_Order) + SIZEOF(TPSM_ChannelSettings) +
- SIZEOF(TByteArray) + SIZEOF(TUnpackedPattern)
- THEN
- BEGIN
- EXIT;
- END;
- { *** init dynamic variables }
- NEW(Header);
- NEW(Sample);
- NEW(Order);
- NEW(ChannelSettings);
- NEW(MultiPurposeBuffer);
- NEW(PatternBuffer);
- { *** read header }
- BLOCKREAD(InFile,Header^,SIZEOF(TPSM_Header));
- { *** test if this is a DSM-file }
- IF NOT ((Header^.PSM_Sign[1] = 'P') AND (Header^.PSM_Sign[2] = 'S') AND
- (Header^.PSM_Sign[3] = 'M') AND (Header^.PSM_Sign[4] = #254)) THEN
- BEGIN
- ErrorCode := c_NoValidFileFormat;
- CLOSE(InFile);
- EXIT;
- END;
- { *** read order }
- SEEK(InFile,FilePosition + Header^.PSM_OrderPosition);
- BLOCKREAD(InFile,Order^,Header^.PSM_OrderLength);
- { *** read channelsettings }
- SEEK(InFile,FilePosition + Header^.PSM_ChannelSettingPosition);
- BLOCKREAD(InFile,ChannelSettings^,SIZEOF(TPSM_ChannelSettings));
- { *** read samplelist }
- SEEK(InFile,FilePosition + Header^.PSM_SamplePosition);
- BLOCKREAD(InFile,Sample^,Header^.PSM_SampleNumber * SIZEOF(TPSM_Sample));
- { *** copy header to intern NTMIK-structure }
- Module^.Module_Sign := 'MF';
- Module^.Module_FileFormatVersion := $0100;
- Module^.Module_SampleNumber := Header^.PSM_SampleNumber;
- Module^.Module_PatternNumber := Header^.PSM_PatternNumber;
- Module^.Module_OrderLength := Header^.PSM_OrderLength;
- Module^.Module_ChannelNumber := Header^.PSM_ChannelNumber+1;
- Module^.Module_Initial_GlobalVolume := 64;
- Module^.Module_Initial_MasterVolume := $C0;
- Module^.Module_Initial_Speed := Header^.PSM_Speed;
- Module^.Module_Initial_Tempo := Header^.PSM_Tempo;
-{ *** paragraph 01 start }
- Module^.Module_Flags := c_Module_Flags_ZeroVolume * BYTE(1) +
- c_Module_Flags_Stereo * BYTE(1) +
- c_Module_Flags_ForceAmigaLimits * BYTE(0) +
- c_Module_Flags_Panning * BYTE(1) +
- c_Module_Flags_Surround * BYTE(1) +
- c_Module_Flags_QualityMixing * BYTE(1) +
- c_Module_Flags_FastVolumeSlides * BYTE(0) +
- c_Module_Flags_SpecialCustomData * BYTE(0) +
- c_Module_Flags_SongName * BYTE(1);
- I1 := $01;
- WHILE (Header^.PSM_SongName[I1] > #00) AND (I1 < c_Module_SongNameLength) DO
- BEGIN
- Module^.Module_Name[I1] := Header^.PSM_SongName[I1];
- INC(I1);
- END;
- Module^.Module_Name[c_Module_SongNameLength] := #00;
- { *** Init channelsettings }
- FOR I1 := 0 TO c_Maximum_ChannelIndex DO
- BEGIN
- IF I1 < Header^.PSM_ChannelUsed THEN
- BEGIN
- { *** channel enabled }
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_GlobalVolume := 64;
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_Panning := (ChannelSettings^[I1]) * $08;
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_Code := I1 + $10 * BYTE(ChannelSettings^[I1] > $08) +
- c_ChannelSettings_Code_ChannelEnabled * BYTE(1) +
- c_ChannelSettings_Code_ChannelDigital * BYTE(1);
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_Controls :=
- c_ChannelSettings_Controls_EnhancedMode * BYTE(1) +
- c_ChannelSettings_Controls_SurroundMode * BYTE(0);
- END
- ELSE
- BEGIN
- { *** channel disabled }
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_GlobalVolume := $00;
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_Panning := $00;
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_Code := $00;
- Module^.Module_ChannelSettingPointer^[I1].ChannelSettings_Controls := $00;
- END;
- END;
- { *** init and copy order }
- FILLCHAR(Module^.Module_OrderPointer^,c_Maximum_OrderIndex+1,$FF);
- MOVE(Order^,Module^.Module_OrderPointer^,Header^.PSM_OrderLength);
- { *** read pattern }
- SEEK(InFile,FilePosition + Header^.PSM_PatternPosition);
- NTMIK_LoaderPatternNumber := Header^.PSM_PatternNumber-1;
- FOR I1 := 0 TO Header^.PSM_PatternNumber-1 DO
- BEGIN
- NTMIK_LoadPatternProcedure;
- { *** read length }
- BLOCKREAD(InFile,TempW,2);
- { *** read pattern }
- BLOCKREAD(InFile,MultiPurposeBuffer^,TempW-2);
- { *** unpack pattern and set notes per channel to 64 }
- PSM_UnpackPattern(MultiPurposeBuffer^,PatternBuffer^,TempW);
- NTMIK_PackPattern(MultiPurposeBuffer^,PatternBuffer^,PSM_NotesInPattern);
- TempW := WORD(256) * MultiPurposeBuffer^[01] + MultiPurposeBuffer^[00];
- GETMEM(Module^.Module_PatternPointer^[I1],TempW);
- MOVE(MultiPurposeBuffer^,Module^.Module_PatternPointer^[I1]^,TempW);
- { *** next pattern }
- END;
- { *** read samples }
- NTMIK_LoaderSampleNumber := Header^.PSM_SampleNumber;
- FOR I1 := 1 TO Header^.PSM_SampleNumber DO
- BEGIN
- NTMIK_LoadSampleProcedure;
- { *** get index for sample }
- I3 := Sample^[I1].PSM_SampleNumber;
- { *** clip PSM-sample }
- IF Sample^[I1].PSM_SampleLoopEnd > Sample^[I1].PSM_SampleLength
- THEN Sample^[I1].PSM_SampleLoopEnd := Sample^[I1].PSM_SampleLength;
- { *** init intern sample }
- NEW(Module^.Module_SamplePointer^[I3]);
- FILLCHAR(Module^.Module_SamplePointer^[I3]^,SIZEOF(TSample),$00);
- FILLCHAR(Module^.Module_SamplePointer^[I3]^.Sample_SampleName,c_Sample_SampleNameLength,#32);
- FILLCHAR(Module^.Module_SamplePointer^[I3]^.Sample_FileName,c_Sample_FileNameLength,#32);
- { *** copy informations to intern sample }
- I2 := $01;
- WHILE (Sample^[I1].PSM_SampleName[I2] > #00) AND (I2 < c_Sample_SampleNameLength) DO
- BEGIN
- Module^.Module_SamplePointer^[I3]^.Sample_SampleName[I2] := Sample^[I1].PSM_SampleName[I2];
- INC(I2);
- END;
- Module^.Module_SamplePointer^[I3]^.Sample_Sign := 'DF';
- Module^.Module_SamplePointer^[I3]^.Sample_FileFormatVersion := $00100;
- Module^.Module_SamplePointer^[I3]^.Sample_Position := $00000000;
- Module^.Module_SamplePointer^[I3]^.Sample_Selector := $0000;
- Module^.Module_SamplePointer^[I3]^.Sample_Volume := Sample^[I1].PSM_SampleVolume;
- Module^.Module_SamplePointer^[I3]^.Sample_LoopCounter := $00;
- Module^.Module_SamplePointer^[I3]^.Sample_C5Speed := Sample^[I1].PSM_SampleC5Speed;
- Module^.Module_SamplePointer^[I3]^.Sample_Length := Sample^[I1].PSM_SampleLength;
- Module^.Module_SamplePointer^[I3]^.Sample_LoopBegin := Sample^[I1].PSM_SampleLoopBegin;
- Module^.Module_SamplePointer^[I3]^.Sample_LoopEnd := Sample^[I1].PSM_SampleLoopEnd;
- { *** now it's time for the flags }
- Module^.Module_SamplePointer^[I3]^.Sample_Flags :=
- c_Sample_Flags_DigitalSample * BYTE(1) +
- c_Sample_Flags_8BitSample * BYTE(1) +
- c_Sample_Flags_UnsignedSampleData * BYTE(1) +
- c_Sample_Flags_Packed * BYTE(0) +
- c_Sample_Flags_LoopCounter * BYTE(0) +
- c_Sample_Flags_SampleName * BYTE(1) +
- c_Sample_Flags_LoopActive *
- BYTE(Sample^[I1].PSM_SampleFlags AND (LONGINT(1) SHL 15) = (LONGINT(1) SHL 15));
- { *** alloc memory for sample-data }
- E_Getmem(Module^.Module_SamplePointer^[I3]^.Sample_Selector,
- Module^.Module_SamplePointer^[I3]^.Sample_Position,
- Module^.Module_SamplePointer^[I3]^.Sample_Length + c_LoopExtensionSize);
- { *** read out data }
- EPT(TempP).p_Selector := Module^.Module_SamplePointer^[I3]^.Sample_Selector;
- EPT(TempP).p_Offset := $0000;
- SEEK(InFile,Sample^[I1].PSM_SamplePosition);
- E_BLOCKREAD(InFile,TempP^,Module^.Module_SamplePointer^[I3]^.Sample_Length);
- { *** 'coz the samples are signed in a DSM-file -> PC-fy them }
- IF Module^.Module_SamplePointer^[I3]^.Sample_Length > 4 THEN
- BEGIN
- CopyLength := Module^.Module_SamplePointer^[I3]^.Sample_Length;
- { *** decode sample }
- ASM
- DB 066h; MOV CX,WORD PTR CopyLength
- { *** load sample selector }
- MOV ES,WORD PTR TempP[00002h]
- DB 066h; XOR SI,SI
- DB 066h; XOR DI,DI
- XOR AH,AH
- { *** conert all bytes }
- @@MainLoop:
- DB 026h; DB 067h; LODSB
- ADD AL,AH
- MOV AH,AL
- DB 067h; STOSB
- DB 066h; LOOP @@MainLoop
- END;
- { *** make samples unsigned }
- ASM
- DB 066h; MOV CX,WORD PTR CopyLength
- { *** load sample selector }
- MOV ES,WORD PTR TempP[00002h]
- DB 066h; XOR SI,SI
- DB 066h; XOR DI,DI
- { *** conert all bytes }
- @@MainLoop:
- DB 026h; DB 067h; LODSB
- SUB AL,080h
- DB 067h; STOSB
- DB 066h; LOOP @@MainLoop
- END;
- { *** Create Loop-Extension }
- IF Module^.Module_SamplePointer^[I3]^.Sample_Flags AND c_Sample_Flags_LoopActive = c_Sample_Flags_LoopActive THEN
- BEGIN
- CopySource := Module^.Module_SamplePointer^[I3]^.Sample_LoopBegin;
- CopyDestination := Module^.Module_SamplePointer^[I3]^.Sample_LoopEnd;
- CopyLength := CopyDestination - CopySource;
- ASM
- { *** load sample-selector }
- MOV ES,WORD PTR TempP[00002h]
- DB 066h; MOV DI,WORD PTR CopyDestination
- { *** calculate number of full sample-loops to copy }
- XOR DX,DX
- MOV AX,c_LoopExtensionSize
- MOV BX,WORD PTR CopyLength
- DIV BX
- OR AX,AX
- JE @@NoFullLoop
- { *** copy some full-loops (size=bx) }
- MOV CX,AX
- @@InnerLoop:
- PUSH CX
- DB 066h; MOV SI,WORD PTR CopySource
- MOV CX,BX
- DB 0F3h; DB 026h,067h,0A4h { REP MOVS BYTE PTR ES:[EDI],ES:[ESI] }
- POP CX
- LOOP @@InnerLoop
- @@NoFullLoop:
- { *** calculate number of rest-bytes to copy }
- DB 066h; MOV SI,WORD PTR CopySource
- MOV CX,DX
- DB 0F3h; DB 026h,067h,0A4h { REP MOVS BYTE PTR ES:[EDI],ES:[ESI] }
- END;
- END
- ELSE
- BEGIN
- CopyDestination := Module^.Module_SamplePointer^[I3]^.Sample_Length;
- ASM
- { *** load sample-selector }
- MOV ES,WORD PTR TempP[00002h]
- DB 066h; MOV DI,WORD PTR CopyDestination
- { *** clear extension }
- MOV CX,c_LoopExtensionSize
- MOV AL,080h
- DB 0F3h; DB 067h,0AAh { REP STOS BYTE PTR ES:[EDI] }
- END;
- END;
- END;
- { *** next sample }
- END;
- { *** init period-ranges }
- NTMIK_MaximumPeriod := $0000D600 SHR 1;
- NTMIK_MinimumPeriod := $0000D600 SHR 8;
- { *** close file }
- CLOSE(InFile);
- { *** dispose all dynamic variables }
- DISPOSE(Header);
- DISPOSE(Sample);
- DISPOSE(Order);
- DISPOSE(ChannelSettings);
- DISPOSE(MultiPurposeBuffer);
- DISPOSE(PatternBuffer);
- { *** set errorcode to noerror }
- ErrorCode := c_NoError;
- END;
-
-*/
-
diff --git a/src/modplug/load_ptm.cxx b/src/modplug/load_ptm.cxx
deleted file mode 100755
index a70cb86..0000000
--- a/src/modplug/load_ptm.cxx
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-//////////////////////////////////////////////
-// PTM PolyTracker module loader //
-//////////////////////////////////////////////
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-#pragma pack(1)
-
-typedef struct PTMFILEHEADER
-{
- CHAR songname[28]; // name of song, asciiz string
- CHAR eof; // 26
- BYTE version_lo; // 03 version of file, currently 0203h
- BYTE version_hi; // 02
- BYTE reserved1; // reserved, set to 0
- WORD norders; // number of orders (0..256)
- WORD nsamples; // number of instruments (1..255)
- WORD npatterns; // number of patterns (1..128)
- WORD nchannels; // number of channels (voices) used (1..32)
- WORD fileflags; // set to 0
- WORD reserved2; // reserved, set to 0
- DWORD ptmf_id; // song identification, 'PTMF' or 0x464d5450
- BYTE reserved3[16]; // reserved, set to 0
- BYTE chnpan[32]; // channel panning settings, 0..15, 0 = left, 7 = middle, 15 = right
- BYTE orders[256]; // order list, valid entries 0..nOrders-1
- WORD patseg[128]; // pattern offsets (*16)
-} PTMFILEHEADER, *LPPTMFILEHEADER;
-
-#define SIZEOF_PTMFILEHEADER 608
-
-
-typedef struct PTMSAMPLE
-{
- BYTE sampletype; // sample type (bit array)
- CHAR filename[12]; // name of external sample file
- BYTE volume; // default volume
- WORD nC4Spd; // C4 speed
- WORD sampleseg; // sample segment (used internally)
- WORD fileofs[2]; // offset of sample data
- WORD length[2]; // sample size (in bytes)
- WORD loopbeg[2]; // start of loop
- WORD loopend[2]; // end of loop
- WORD gusdata[8];
- char samplename[28]; // name of sample, asciiz // changed from CHAR
- DWORD ptms_id; // sample identification, 'PTMS' or 0x534d5450
-} PTMSAMPLE;
-
-#define SIZEOF_PTMSAMPLE 80
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadPTM(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- PTMFILEHEADER pfh = *(LPPTMFILEHEADER)lpStream;
- DWORD dwMemPos;
- UINT nOrders;
-
- pfh.norders = bswapLE16(pfh.norders);
- pfh.nsamples = bswapLE16(pfh.nsamples);
- pfh.npatterns = bswapLE16(pfh.npatterns);
- pfh.nchannels = bswapLE16(pfh.nchannels);
- pfh.fileflags = bswapLE16(pfh.fileflags);
- pfh.reserved2 = bswapLE16(pfh.reserved2);
- pfh.ptmf_id = bswapLE32(pfh.ptmf_id);
- for (UINT j=0; j<128; j++)
- {
- pfh.patseg[j] = bswapLE16(pfh.patseg[j]);
- }
-
- if ((!lpStream) || (dwMemLength < 1024)) return FALSE;
- if ((pfh.ptmf_id != 0x464d5450) || (!pfh.nchannels)
- || (pfh.nchannels > 32)
- || (pfh.norders > 256) || (!pfh.norders)
- || (!pfh.nsamples) || (pfh.nsamples > 255)
- || (!pfh.npatterns) || (pfh.npatterns > 128)
- || (SIZEOF_PTMFILEHEADER+pfh.nsamples*SIZEOF_PTMSAMPLE >= (int)dwMemLength)) return FALSE;
- memcpy(m_szNames[0], pfh.songname, 28);
- m_szNames[0][28] = 0;
- m_nType = MOD_TYPE_PTM;
- m_nChannels = pfh.nchannels;
- m_nSamples = (pfh.nsamples < MAX_SAMPLES) ? pfh.nsamples : MAX_SAMPLES-1;
- dwMemPos = SIZEOF_PTMFILEHEADER;
- nOrders = (pfh.norders < MAX_ORDERS) ? pfh.norders : MAX_ORDERS-1;
- memcpy(Order, pfh.orders, nOrders);
- for (UINT ipan=0; ipan<m_nChannels; ipan++)
- {
- ChnSettings[ipan].nVolume = 64;
- ChnSettings[ipan].nPan = ((pfh.chnpan[ipan] & 0x0F) << 4) + 4;
- }
- for (UINT ismp=0; ismp<m_nSamples; ismp++, dwMemPos += SIZEOF_PTMSAMPLE)
- {
- MODINSTRUMENT *pins = &Ins[ismp+1];
- PTMSAMPLE *psmp = (PTMSAMPLE *)(lpStream+dwMemPos);
-
- lstrcpyn(m_szNames[ismp+1], psmp->samplename, 28);
- memcpy(pins->name, psmp->filename, 12);
- pins->name[12] = 0;
- pins->nGlobalVol = 64;
- pins->nPan = 128;
- pins->nVolume = psmp->volume << 2;
- pins->nC4Speed = bswapLE16(psmp->nC4Spd) << 1;
- pins->uFlags = 0;
- if ((psmp->sampletype & 3) == 1)
- {
- UINT smpflg = RS_PCM8D;
- DWORD samplepos;
- pins->nLength = bswapLE32(*psmp->length);
- pins->nLoopStart = bswapLE32(*psmp->loopbeg);
- pins->nLoopEnd = bswapLE32(*psmp->loopend);
- samplepos = bswapLE32(*psmp->fileofs);
- if (psmp->sampletype & 4) pins->uFlags |= CHN_LOOP;
- if (psmp->sampletype & 8) pins->uFlags |= CHN_PINGPONGLOOP;
- if (psmp->sampletype & 16)
- {
- pins->uFlags |= CHN_16BIT;
- pins->nLength >>= 1;
- pins->nLoopStart >>= 1;
- pins->nLoopEnd >>= 1;
- smpflg = RS_PTM8DTO16;
- }
- if ((pins->nLength) && (samplepos) && (samplepos < dwMemLength))
- {
- ReadSample(pins, smpflg, (LPSTR)(lpStream+samplepos), dwMemLength-samplepos);
- }
- }
- }
- // Reading Patterns
- for (UINT ipat=0; ipat<pfh.npatterns; ipat++)
- {
- dwMemPos = ((UINT)pfh.patseg[ipat]) << 4;
- if ((!dwMemPos) || (dwMemPos >= dwMemLength)) continue;
- PatternSize[ipat] = 64;
- PatternAllocSize[ipat] = 64;
- if ((Patterns[ipat] = AllocatePattern(64, m_nChannels)) == NULL) break;
- //
- MODCOMMAND *m = Patterns[ipat];
- for (UINT row=0; ((row < 64) && (dwMemPos < dwMemLength)); )
- {
- UINT b = lpStream[dwMemPos++];
-
- if (dwMemPos >= dwMemLength) break;
- if (b)
- {
- UINT nChn = b & 0x1F;
-
- if (b & 0x20)
- {
- if (dwMemPos + 2 > dwMemLength) break;
- m[nChn].note = lpStream[dwMemPos++];
- m[nChn].instr = lpStream[dwMemPos++];
- }
- if (b & 0x40)
- {
- if (dwMemPos + 2 > dwMemLength) break;
- m[nChn].command = lpStream[dwMemPos++];
- m[nChn].param = lpStream[dwMemPos++];
- if ((m[nChn].command == 0x0E) && ((m[nChn].param & 0xF0) == 0x80))
- {
- m[nChn].command = CMD_S3MCMDEX;
- } else
- if (m[nChn].command < 0x10)
- {
- ConvertModCommand(&m[nChn]);
- } else
- {
- switch(m[nChn].command)
- {
- case 16:
- m[nChn].command = CMD_GLOBALVOLUME;
- break;
- case 17:
- m[nChn].command = CMD_RETRIG;
- break;
- case 18:
- m[nChn].command = CMD_FINEVIBRATO;
- break;
- default:
- m[nChn].command = 0;
- }
- }
- }
- if (b & 0x80)
- {
- if (dwMemPos >= dwMemLength) break;
- m[nChn].volcmd = VOLCMD_VOLUME;
- m[nChn].vol = lpStream[dwMemPos++];
- }
- } else
- {
- row++;
- m += m_nChannels;
- }
- }
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_s3m.cxx b/src/modplug/load_s3m.cxx
deleted file mode 100755
index 0161900..0000000
--- a/src/modplug/load_s3m.cxx
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-extern WORD S3MFineTuneTable[16];
-
-//////////////////////////////////////////////////////
-// ScreamTracker S3M file support
-
-typedef struct tagS3MSAMPLESTRUCT
-{
- BYTE type;
- CHAR dosname[12];
- BYTE hmem;
- WORD memseg;
- DWORD length;
- DWORD loopbegin;
- DWORD loopend;
- BYTE vol;
- BYTE bReserved;
- BYTE pack;
- BYTE flags;
- DWORD finetune;
- DWORD dwReserved;
- WORD intgp;
- WORD int512;
- DWORD lastused;
- CHAR name[28];
- CHAR scrs[4];
-} S3MSAMPLESTRUCT;
-
-
-typedef struct tagS3MFILEHEADER
-{
- CHAR name[28];
- BYTE b1A;
- BYTE type;
- WORD reserved1;
- WORD ordnum;
- WORD insnum;
- WORD patnum;
- WORD flags;
- WORD cwtv;
- WORD version;
- DWORD scrm; // "SCRM" = 0x4D524353
- BYTE globalvol;
- BYTE speed;
- BYTE tempo;
- BYTE mastervol;
- BYTE ultraclicks;
- BYTE panning_present;
- BYTE reserved2[8];
- WORD special;
- BYTE channels[32];
-} S3MFILEHEADER;
-
-
-void CSoundFile::S3MConvert(MODCOMMAND *m, BOOL bIT) const
-//--------------------------------------------------------
-{
- UINT command = m->command;
- UINT param = m->param;
- switch (command + 0x40)
- {
- case 'A': command = CMD_SPEED; break;
- case 'B': command = CMD_POSITIONJUMP; break;
- case 'C': command = CMD_PATTERNBREAK; if (!bIT) param = (param >> 4) * 10 + (param & 0x0F); break;
- case 'D': command = CMD_VOLUMESLIDE; break;
- case 'E': command = CMD_PORTAMENTODOWN; break;
- case 'F': command = CMD_PORTAMENTOUP; break;
- case 'G': command = CMD_TONEPORTAMENTO; break;
- case 'H': command = CMD_VIBRATO; break;
- case 'I': command = CMD_TREMOR; break;
- case 'J': command = CMD_ARPEGGIO; break;
- case 'K': command = CMD_VIBRATOVOL; break;
- case 'L': command = CMD_TONEPORTAVOL; break;
- case 'M': command = CMD_CHANNELVOLUME; break;
- case 'N': command = CMD_CHANNELVOLSLIDE; break;
- case 'O': command = CMD_OFFSET; break;
- case 'P': command = CMD_PANNINGSLIDE; break;
- case 'Q': command = CMD_RETRIG; break;
- case 'R': command = CMD_TREMOLO; break;
- case 'S': command = CMD_S3MCMDEX; break;
- case 'T': command = CMD_TEMPO; break;
- case 'U': command = CMD_FINEVIBRATO; break;
- case 'V': command = CMD_GLOBALVOLUME; if (!bIT) param *= 2; break;
- case 'W': command = CMD_GLOBALVOLSLIDE; break;
- case 'X': command = CMD_PANNING8; break;
- case 'Y': command = CMD_PANBRELLO; break;
- case 'Z': command = CMD_MIDI; break;
- default: command = 0;
- }
- m->command = command;
- m->param = param;
-}
-
-
-void CSoundFile::S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const
-//---------------------------------------------------------------------
-{
- UINT command = *pcmd;
- UINT param = *pprm;
- switch(command)
- {
- case CMD_SPEED: command = 'A'; break;
- case CMD_POSITIONJUMP: command = 'B'; break;
- case CMD_PATTERNBREAK: command = 'C'; if (!bIT) param = ((param / 10) << 4) + (param % 10); break;
- case CMD_VOLUMESLIDE: command = 'D'; break;
- case CMD_PORTAMENTODOWN: command = 'E'; if ((param >= 0xE0) && (m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM))) param = 0xDF; break;
- case CMD_PORTAMENTOUP: command = 'F'; if ((param >= 0xE0) && (m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM))) param = 0xDF; break;
- case CMD_TONEPORTAMENTO: command = 'G'; break;
- case CMD_VIBRATO: command = 'H'; break;
- case CMD_TREMOR: command = 'I'; break;
- case CMD_ARPEGGIO: command = 'J'; break;
- case CMD_VIBRATOVOL: command = 'K'; break;
- case CMD_TONEPORTAVOL: command = 'L'; break;
- case CMD_CHANNELVOLUME: command = 'M'; break;
- case CMD_CHANNELVOLSLIDE: command = 'N'; break;
- case CMD_OFFSET: command = 'O'; break;
- case CMD_PANNINGSLIDE: command = 'P'; break;
- case CMD_RETRIG: command = 'Q'; break;
- case CMD_TREMOLO: command = 'R'; break;
- case CMD_S3MCMDEX: command = 'S'; break;
- case CMD_TEMPO: command = 'T'; break;
- case CMD_FINEVIBRATO: command = 'U'; break;
- case CMD_GLOBALVOLUME: command = 'V'; if (!bIT) param >>= 1;break;
- case CMD_GLOBALVOLSLIDE: command = 'W'; break;
- case CMD_PANNING8:
- command = 'X';
- if ((bIT) && (m_nType != MOD_TYPE_IT) && (m_nType != MOD_TYPE_XM))
- {
- if (param == 0xA4) { command = 'S'; param = 0x91; } else
- if (param <= 0x80) { param <<= 1; if (param > 255) param = 255; } else
- command = param = 0;
- } else
- if ((!bIT) && ((m_nType == MOD_TYPE_IT) || (m_nType == MOD_TYPE_XM)))
- {
- param >>= 1;
- }
- break;
- case CMD_PANBRELLO: command = 'Y'; break;
- case CMD_MIDI: command = 'Z'; break;
- case CMD_XFINEPORTAUPDOWN:
- if (param & 0x0F) switch(param & 0xF0)
- {
- case 0x10: command = 'F'; param = (param & 0x0F) | 0xE0; break;
- case 0x20: command = 'E'; param = (param & 0x0F) | 0xE0; break;
- case 0x90: command = 'S'; break;
- default: command = param = 0;
- } else command = param = 0;
- break;
- case CMD_MODCMDEX:
- command = 'S';
- switch(param & 0xF0)
- {
- case 0x00: command = param = 0; break;
- case 0x10: command = 'F'; param |= 0xF0; break;
- case 0x20: command = 'E'; param |= 0xF0; break;
- case 0x30: param = (param & 0x0F) | 0x10; break;
- case 0x40: param = (param & 0x0F) | 0x30; break;
- case 0x50: param = (param & 0x0F) | 0x20; break;
- case 0x60: param = (param & 0x0F) | 0xB0; break;
- case 0x70: param = (param & 0x0F) | 0x40; break;
- case 0x90: command = 'Q'; param &= 0x0F; break;
- case 0xA0: if (param & 0x0F) { command = 'D'; param = (param << 4) | 0x0F; } else command=param=0; break;
- case 0xB0: if (param & 0x0F) { command = 'D'; param |= 0xF0; } else command=param=0; break;
- }
- break;
- default: command = param = 0;
- }
- command &= ~0x40;
- *pcmd = command;
- *pprm = param;
-}
-
-
-BOOL CSoundFile::ReadS3M(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- UINT insnum,patnum,nins,npat;
- DWORD insfile[128];
- WORD ptr[256];
- BYTE s[1024];
- DWORD dwMemPos;
- BYTE insflags[128], inspack[128];
- S3MFILEHEADER psfh = *(S3MFILEHEADER *)lpStream;
-
- psfh.reserved1 = bswapLE16(psfh.reserved1);
- psfh.ordnum = bswapLE16(psfh.ordnum);
- psfh.insnum = bswapLE16(psfh.insnum);
- psfh.patnum = bswapLE16(psfh.patnum);
- psfh.flags = bswapLE16(psfh.flags);
- psfh.cwtv = bswapLE16(psfh.cwtv);
- psfh.version = bswapLE16(psfh.version);
- psfh.scrm = bswapLE32(psfh.scrm);
- psfh.special = bswapLE16(psfh.special);
-
- if ((!lpStream) || (dwMemLength <= sizeof(S3MFILEHEADER)+sizeof(S3MSAMPLESTRUCT)+64)) return FALSE;
- if (psfh.scrm != 0x4D524353) return FALSE;
- dwMemPos = 0x60;
- m_nType = MOD_TYPE_S3M;
- memset(m_szNames,0,sizeof(m_szNames));
- memcpy(m_szNames[0], psfh.name, 28);
- // Speed
- m_nDefaultSpeed = psfh.speed;
- if (m_nDefaultSpeed < 1) m_nDefaultSpeed = 6;
- if (m_nDefaultSpeed > 0x1F) m_nDefaultSpeed = 0x1F;
- // Tempo
- m_nDefaultTempo = psfh.tempo;
- if (m_nDefaultTempo < 40) m_nDefaultTempo = 40;
- if (m_nDefaultTempo > 240) m_nDefaultTempo = 240;
- // Global Volume
- m_nDefaultGlobalVolume = psfh.globalvol << 2;
- if ((!m_nDefaultGlobalVolume) || (m_nDefaultGlobalVolume > 256)) m_nDefaultGlobalVolume = 256;
- m_nSongPreAmp = psfh.mastervol & 0x7F;
- // Channels
- m_nChannels = 4;
- for (UINT ich=0; ich<32; ich++)
- {
- ChnSettings[ich].nPan = 128;
- ChnSettings[ich].nVolume = 64;
-
- ChnSettings[ich].dwFlags = CHN_MUTE;
- if (psfh.channels[ich] != 0xFF)
- {
- m_nChannels = ich+1;
- UINT b = psfh.channels[ich] & 0x0F;
- ChnSettings[ich].nPan = (b & 8) ? 0xC0 : 0x40;
- ChnSettings[ich].dwFlags = 0;
- }
- }
- if (m_nChannels < 4) m_nChannels = 4;
- if ((psfh.cwtv < 0x1320) || (psfh.flags & 0x40)) m_dwSongFlags |= SONG_FASTVOLSLIDES;
- // Reading pattern order
- UINT iord = psfh.ordnum;
- if (iord<1) iord = 1;
- if (iord > MAX_ORDERS) iord = MAX_ORDERS;
- if (iord)
- {
- memcpy(Order, lpStream+dwMemPos, iord);
- dwMemPos += iord;
- }
- if ((iord & 1) && (lpStream[dwMemPos] == 0xFF)) dwMemPos++;
- // Reading file pointers
- insnum = nins = psfh.insnum;
- if (insnum >= MAX_SAMPLES) insnum = MAX_SAMPLES-1;
- m_nSamples = insnum;
- patnum = npat = psfh.patnum;
- if (patnum > MAX_PATTERNS) patnum = MAX_PATTERNS;
- memset(ptr, 0, sizeof(ptr));
- if (nins+npat)
- {
- memcpy(ptr, lpStream+dwMemPos, 2*(nins+npat));
- dwMemPos += 2*(nins+npat);
- for (UINT j = 0; j < (nins+npat); ++j) {
- ptr[j] = bswapLE16(ptr[j]);
- }
- if (psfh.panning_present == 252)
- {
- const BYTE *chnpan = lpStream+dwMemPos;
- for (UINT i=0; i<32; i++) if (chnpan[i] & 0x20)
- {
- ChnSettings[i].nPan = ((chnpan[i] & 0x0F) << 4) + 8;
- }
- }
- }
- if (!m_nChannels) return TRUE;
- // Reading instrument headers
- memset(insfile, 0, sizeof(insfile));
- for (UINT iSmp=1; iSmp<=insnum; iSmp++)
- {
- UINT nInd = ((DWORD)ptr[iSmp-1])*16;
- if ((!nInd) || (nInd + 0x50 > dwMemLength)) continue;
- memcpy(s, lpStream+nInd, 0x50);
- memcpy(Ins[iSmp].name, s+1, 12);
- insflags[iSmp-1] = s[0x1F];
- inspack[iSmp-1] = s[0x1E];
- s[0x4C] = 0;
- lstrcpy(m_szNames[iSmp], (LPCSTR)&s[0x30]);
- if ((s[0]==1) && (s[0x4E]=='R') && (s[0x4F]=='S'))
- {
- UINT j = bswapLE32(*((LPDWORD)(s+0x10)));
- if (j > MAX_SAMPLE_LENGTH) j = MAX_SAMPLE_LENGTH;
- if (j < 2) j = 0;
- Ins[iSmp].nLength = j;
- j = bswapLE32(*((LPDWORD)(s+0x14)));
- if (j >= Ins[iSmp].nLength) j = Ins[iSmp].nLength - 1;
- Ins[iSmp].nLoopStart = j;
- j = bswapLE32(*((LPDWORD)(s+0x18)));
- if (j > MAX_SAMPLE_LENGTH) j = MAX_SAMPLE_LENGTH;
- if (j < 2) j = 0;
- if (j > Ins[iSmp].nLength) j = Ins[iSmp].nLength;
- Ins[iSmp].nLoopEnd = j;
- j = s[0x1C];
- if (j > 64) j = 64;
- Ins[iSmp].nVolume = j << 2;
- Ins[iSmp].nGlobalVol = 64;
- if (s[0x1F]&1) Ins[iSmp].uFlags |= CHN_LOOP;
- j = bswapLE32(*((LPDWORD)(s+0x20)));
- if (!j) j = 8363;
- if (j < 1024) j = 1024;
- Ins[iSmp].nC4Speed = j;
- insfile[iSmp] = ((DWORD)bswapLE16(*((LPWORD)(s+0x0E)))) << 4;
- insfile[iSmp] += ((DWORD)(BYTE)s[0x0D]) << 20;
- if (insfile[iSmp] > dwMemLength) insfile[iSmp] &= 0xFFFF;
- if ((Ins[iSmp].nLoopStart >= Ins[iSmp].nLoopEnd) || (Ins[iSmp].nLoopEnd - Ins[iSmp].nLoopStart < 8))
- Ins[iSmp].nLoopStart = Ins[iSmp].nLoopEnd = 0;
- Ins[iSmp].nPan = 0x80;
- }
- }
- // Reading patterns
- for (UINT iPat=0; iPat<patnum; iPat++)
- {
- UINT nInd = ((DWORD)ptr[nins+iPat]) << 4;
- // if the parapointer is zero, the pattern is blank (so ignore it)
- if (nInd == 0)
- continue;
- if (nInd + 0x40 > dwMemLength) continue;
- WORD len = bswapLE16(*((WORD *)(lpStream+nInd)));
- nInd += 2;
- PatternSize[iPat] = 64;
- PatternAllocSize[iPat] = 64;
- if ((!len) || (nInd + len > dwMemLength - 6)
- || ((Patterns[iPat] = AllocatePattern(64, m_nChannels)) == NULL)) continue;
- LPBYTE src = (LPBYTE)(lpStream+nInd);
- // Unpacking pattern
- MODCOMMAND *p = Patterns[iPat];
- UINT row = 0;
- UINT j = 0;
- while (j < len)
- {
- BYTE b = src[j++];
- if (!b)
- {
- if (++row >= 64) break;
- } else
- {
- UINT chn = b & 0x1F;
- if (chn < m_nChannels)
- {
- MODCOMMAND *m = &p[row*m_nChannels+chn];
- if (b & 0x20)
- {
- m->note = src[j++];
- if (m->note < 0xF0) m->note = (m->note & 0x0F) + 12*(m->note >> 4) + 13;
- else if (m->note == 0xFF) m->note = 0;
- m->instr = src[j++];
- }
- if (b & 0x40)
- {
- UINT vol = src[j++];
- if ((vol >= 128) && (vol <= 192))
- {
- vol -= 128;
- m->volcmd = VOLCMD_PANNING;
- } else
- {
- if (vol > 64) vol = 64;
- m->volcmd = VOLCMD_VOLUME;
- }
- m->vol = vol;
- }
- if (b & 0x80)
- {
- m->command = src[j++];
- m->param = src[j++];
- if (m->command) S3MConvert(m, FALSE);
- }
- } else
- {
- if (b & 0x20) j += 2;
- if (b & 0x40) j++;
- if (b & 0x80) j += 2;
- }
- if (j >= len) break;
- }
- }
- }
- // Reading samples
- for (UINT iRaw=1; iRaw<=insnum; iRaw++) if ((Ins[iRaw].nLength) && (insfile[iRaw]))
- {
- UINT flags;
- if (insflags[iRaw-1] & 4)
- flags = (psfh.version == 1) ? RS_PCM16S : RS_PCM16U;
- else
- flags = (psfh.version == 1) ? RS_PCM8S : RS_PCM8U;
- if (insflags[iRaw-1] & 2) flags |= RSF_STEREO;
- if (inspack[iRaw-1] == 4) flags = RS_ADPCM4;
- dwMemPos = insfile[iRaw];
- dwMemPos += ReadSample(&Ins[iRaw], flags, (LPSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos);
- }
- m_nMinPeriod = 64;
- m_nMaxPeriod = 32767;
- if (psfh.flags & 0x10) m_dwSongFlags |= SONG_AMIGALIMITS;
- return TRUE;
-}
-
-
diff --git a/src/modplug/load_stm.cxx b/src/modplug/load_stm.cxx
deleted file mode 100755
index 5f482bc..0000000
--- a/src/modplug/load_stm.cxx
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-#pragma pack(1)
-
-typedef struct tagSTMNOTE
-{
- BYTE note;
- BYTE insvol;
- BYTE volcmd;
- BYTE cmdinf;
-} STMNOTE;
-
-
-// Raw STM sampleinfo struct:
-typedef struct tagSTMSAMPLE
-{
- CHAR filename[14]; // Can't have long comments - just filename comments :)
- WORD reserved; // ISA in memory when in ST 2
- WORD length; // Sample length
- WORD loopbeg; // Loop start point
- WORD loopend; // Loop end point
- BYTE volume; // Volume
- BYTE reserved2; // More reserved crap
- WORD c2spd; // Good old c2spd
- BYTE reserved3[6]; // Yet more of PSi's reserved crap
-} STMSAMPLE;
-
-
-// Raw STM header struct:
-typedef struct tagSTMHEADER
-{
- char songname[20]; // changed from CHAR
- char trackername[8]; // !SCREAM! for ST 2.xx // changed from CHAR
- CHAR unused; // 0x1A
- CHAR filetype; // 1=song, 2=module (only 2 is supported, of course) :)
- CHAR ver_major; // Like 2
- CHAR ver_minor; // "ditto"
- BYTE inittempo; // initspeed= stm inittempo>>4
- BYTE numpat; // number of patterns
- BYTE globalvol; // <- WoW! a RiGHT TRiANGLE =8*)
- BYTE reserved[13]; // More of PSi's internal crap
- STMSAMPLE sample[31]; // STM sample data
- BYTE patorder[128]; // Docs say 64 - actually 128
-} STMHEADER;
-
-#pragma pack()
-
-
-
-BOOL CSoundFile::ReadSTM(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- STMHEADER *phdr = (STMHEADER *)lpStream;
- DWORD dwMemPos = 0;
-
- if ((!lpStream) || (dwMemLength < sizeof(STMHEADER))) return FALSE;
- if ((phdr->filetype != 2) || (phdr->unused != 0x1A)
- || ((strnicmp(phdr->trackername, "!SCREAM!", 8))
- && (strnicmp(phdr->trackername, "BMOD2STM", 8)))) return FALSE;
- memcpy(m_szNames[0], phdr->songname, 20);
- // Read STM header
- m_nType = MOD_TYPE_STM;
- m_nSamples = 31;
- m_nChannels = 4;
- m_nInstruments = 0;
- m_nMinPeriod = 64;
- m_nMaxPeriod = 0x7FFF;
- m_nDefaultSpeed = phdr->inittempo >> 4;
- if (m_nDefaultSpeed < 1) m_nDefaultSpeed = 1;
- m_nDefaultTempo = 125;
- m_nDefaultGlobalVolume = phdr->globalvol << 2;
- if (m_nDefaultGlobalVolume > 256) m_nDefaultGlobalVolume = 256;
- memcpy(Order, phdr->patorder, 128);
- // Setting up channels
- for (UINT nSet=0; nSet<4; nSet++)
- {
- ChnSettings[nSet].dwFlags = 0;
- ChnSettings[nSet].nVolume = 64;
- ChnSettings[nSet].nPan = (nSet & 1) ? 0x40 : 0xC0;
- }
- // Reading samples
- for (UINT nIns=0; nIns<31; nIns++)
- {
- MODINSTRUMENT *pIns = &Ins[nIns+1];
- STMSAMPLE *pStm = &phdr->sample[nIns]; // STM sample data
- memcpy(pIns->name, pStm->filename, 13);
- memcpy(m_szNames[nIns+1], pStm->filename, 12);
- pIns->nC4Speed = bswapLE16(pStm->c2spd);
- pIns->nGlobalVol = 64;
- pIns->nVolume = pStm->volume << 2;
- if (pIns->nVolume > 256) pIns->nVolume = 256;
- pIns->nLength = bswapLE16(pStm->length);
- if ((pIns->nLength < 4) || (!pIns->nVolume)) pIns->nLength = 0;
- pIns->nLoopStart = bswapLE16(pStm->loopbeg);
- pIns->nLoopEnd = bswapLE16(pStm->loopend);
- if ((pIns->nLoopEnd > pIns->nLoopStart) && (pIns->nLoopEnd != 0xFFFF)) pIns->uFlags |= CHN_LOOP;
- }
- dwMemPos = sizeof(STMHEADER);
- for (UINT nOrd=0; nOrd<MAX_ORDERS; nOrd++) if (Order[nOrd] >= 99) Order[nOrd] = 0xFF;
- UINT nPatterns = phdr->numpat;
- for (UINT nPat=0; nPat<nPatterns; nPat++)
- {
- if (dwMemPos + 64*4*4 > dwMemLength) return TRUE;
- PatternSize[nPat] = 64;
- PatternAllocSize[nPat] = 64;
- if ((Patterns[nPat] = AllocatePattern(64, m_nChannels)) == NULL) return TRUE;
- MODCOMMAND *m = Patterns[nPat];
- STMNOTE *p = (STMNOTE *)(lpStream + dwMemPos);
- for (UINT n=0; n<64*4; n++, p++, m++)
- {
- UINT note,ins,vol,cmd;
- // extract the various information from the 4 bytes that
- // make up a single note
- note = p->note;
- ins = p->insvol >> 3;
- vol = (p->insvol & 0x07) + (p->volcmd >> 1);
- cmd = p->volcmd & 0x0F;
- if ((ins) && (ins < 32)) m->instr = ins;
- // special values of [SBYTE0] are handled here ->
- // we have no idea if these strange values will ever be encountered
- // but it appears as though stms sound correct.
- if ((note == 0xFE) || (note == 0xFC)) m->note = 0xFE; else
- // if note < 251, then all three bytes are stored in the file
- if (note < 0xFC) m->note = (note >> 4)*12 + (note&0xf) + 37;
- if (vol <= 64) { m->volcmd = VOLCMD_VOLUME; m->vol = vol; }
- m->param = p->cmdinf;
- switch(cmd)
- {
- // Axx set speed to xx
- case 1: m->command = CMD_SPEED; m->param >>= 4; break;
- // Bxx position jump
- case 2: m->command = CMD_POSITIONJUMP; break;
- // Cxx patternbreak to row xx
- case 3: m->command = CMD_PATTERNBREAK; m->param = (m->param & 0xF0) * 10 + (m->param & 0x0F); break;
- // Dxy volumeslide
- case 4: m->command = CMD_VOLUMESLIDE; break;
- // Exy toneslide down
- case 5: m->command = CMD_PORTAMENTODOWN; break;
- // Fxy toneslide up
- case 6: m->command = CMD_PORTAMENTOUP; break;
- // Gxx Tone portamento,speed xx
- case 7: m->command = CMD_TONEPORTAMENTO; break;
- // Hxy vibrato
- case 8: m->command = CMD_VIBRATO; break;
- // Ixy tremor, ontime x, offtime y
- case 9: m->command = CMD_TREMOR; break;
- // Jxy arpeggio
- case 10: m->command = CMD_ARPEGGIO; break;
- // Kxy Dual command H00 & Dxy
- case 11: m->command = CMD_VIBRATOVOL; break;
- // Lxy Dual command G00 & Dxy
- case 12: m->command = CMD_TONEPORTAVOL; break;
- // Xxx amiga command 8xx
- case 0x18: m->command = CMD_PANNING8; break;
- default:
- m->command = m->param = 0;
- }
- }
- dwMemPos += 64*4*4;
- }
- // Reading Samples
- for (UINT nSmp=1; nSmp<=31; nSmp++)
- {
- MODINSTRUMENT *pIns = &Ins[nSmp];
- dwMemPos = (dwMemPos + 15) & (~15);
- if (pIns->nLength)
- {
- UINT nPos = ((UINT)phdr->sample[nSmp-1].reserved) << 4;
- if ((nPos >= sizeof(STMHEADER)) && (nPos+pIns->nLength <= dwMemLength)) dwMemPos = nPos;
- if (dwMemPos < dwMemLength)
- {
- dwMemPos += ReadSample(pIns, RS_PCM8S, (LPSTR)(lpStream+dwMemPos),dwMemLength-dwMemPos);
- }
- }
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_ult.cxx b/src/modplug/load_ult.cxx
deleted file mode 100755
index 9025c19..0000000
--- a/src/modplug/load_ult.cxx
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-//#pragma warning(disable:4244)
-
-#define ULT_16BIT 0x04
-#define ULT_LOOP 0x08
-#define ULT_BIDI 0x10
-
-#pragma pack(1)
-
-// Raw ULT header struct:
-typedef struct tagULTHEADER
-{
- char id[15]; // changed from CHAR
- char songtitle[32]; // changed from CHAR
- BYTE reserved;
-} ULTHEADER;
-
-
-// Raw ULT sampleinfo struct:
-typedef struct tagULTSAMPLE
-{
- CHAR samplename[32];
- CHAR dosname[12];
- LONG loopstart;
- LONG loopend;
- LONG sizestart;
- LONG sizeend;
- BYTE volume;
- BYTE flags;
- WORD finetune;
-} ULTSAMPLE;
-
-#pragma pack()
-
-
-BOOL CSoundFile::ReadUlt(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- ULTHEADER *pmh = (ULTHEADER *)lpStream;
- ULTSAMPLE *pus;
- UINT nos, nop;
- DWORD dwMemPos = 0;
-
- // try to read module header
- if ((!lpStream) || (dwMemLength < 0x100)) return FALSE;
- if (strncmp(pmh->id,"MAS_UTrack_V00",14)) return FALSE;
- // Warning! Not supported ULT format, trying anyway
- // if ((pmh->id[14] < '1') || (pmh->id[14] > '4')) return FALSE;
- m_nType = MOD_TYPE_ULT;
- m_nDefaultSpeed = 6;
- m_nDefaultTempo = 125;
- memcpy(m_szNames[0], pmh->songtitle, 32);
- // read songtext
- dwMemPos = sizeof(ULTHEADER);
- if ((pmh->reserved) && (dwMemPos + pmh->reserved * 32 < dwMemLength))
- {
- UINT len = pmh->reserved * 32;
- m_lpszSongComments = new char[len + 1 + pmh->reserved];
- if (m_lpszSongComments)
- {
- for (UINT l=0; l<pmh->reserved; l++)
- {
- memcpy(m_lpszSongComments+l*33, lpStream+dwMemPos+l*32, 32);
- m_lpszSongComments[l*33+32] = 0x0D;
- }
- m_lpszSongComments[len] = 0;
- }
- dwMemPos += len;
- }
- if (dwMemPos >= dwMemLength) return TRUE;
- nos = lpStream[dwMemPos++];
- m_nSamples = nos;
- if (m_nSamples >= MAX_SAMPLES) m_nSamples = MAX_SAMPLES-1;
- UINT smpsize = 64;
- if (pmh->id[14] >= '4') smpsize += 2;
- if (dwMemPos + nos*smpsize + 256 + 2 > dwMemLength) return TRUE;
- for (UINT ins=1; ins<=nos; ins++, dwMemPos+=smpsize) if (ins<=m_nSamples)
- {
- pus = (ULTSAMPLE *)(lpStream+dwMemPos);
- MODINSTRUMENT *pins = &Ins[ins];
- memcpy(m_szNames[ins], pus->samplename, 32);
- memcpy(pins->name, pus->dosname, 12);
- pins->nLoopStart = pus->loopstart;
- pins->nLoopEnd = pus->loopend;
- pins->nLength = pus->sizeend - pus->sizestart;
- pins->nVolume = pus->volume;
- pins->nGlobalVol = 64;
- pins->nC4Speed = 8363;
- if (pmh->id[14] >= '4')
- {
- pins->nC4Speed = pus->finetune;
- }
- if (pus->flags & ULT_LOOP) pins->uFlags |= CHN_LOOP;
- if (pus->flags & ULT_BIDI) pins->uFlags |= CHN_PINGPONGLOOP;
- if (pus->flags & ULT_16BIT)
- {
- pins->uFlags |= CHN_16BIT;
- pins->nLoopStart >>= 1;
- pins->nLoopEnd >>= 1;
- }
- }
- memcpy(Order, lpStream+dwMemPos, 256);
- dwMemPos += 256;
- m_nChannels = lpStream[dwMemPos] + 1;
- nop = lpStream[dwMemPos+1] + 1;
- dwMemPos += 2;
- if (m_nChannels > 32) m_nChannels = 32;
- // Default channel settings
- for (UINT nSet=0; nSet<m_nChannels; nSet++)
- {
- ChnSettings[nSet].nVolume = 64;
- ChnSettings[nSet].nPan = (nSet & 1) ? 0x40 : 0xC0;
- }
- // read pan position table for v1.5 and higher
- if(pmh->id[14]>='3')
- {
- if (dwMemPos + m_nChannels > dwMemLength) return TRUE;
- for(UINT t=0; t<m_nChannels; t++)
- {
- ChnSettings[t].nPan = (lpStream[dwMemPos++] << 4) + 8;
- if (ChnSettings[t].nPan > 256) ChnSettings[t].nPan = 256;
- }
- }
- // Allocating Patterns
- for (UINT nAllocPat=0; nAllocPat<nop; nAllocPat++)
- {
- if (nAllocPat < MAX_PATTERNS)
- {
- PatternSize[nAllocPat] = 64;
- PatternAllocSize[nAllocPat] = 64;
- Patterns[nAllocPat] = AllocatePattern(64, m_nChannels);
- }
- }
- // Reading Patterns
- for (UINT nChn=0; nChn<m_nChannels; nChn++)
- {
- for (UINT nPat=0; nPat<nop; nPat++)
- {
- MODCOMMAND *pat = NULL;
-
- if (nPat < MAX_PATTERNS)
- {
- pat = Patterns[nPat];
- if (pat) pat += nChn;
- }
- UINT row = 0;
- while (row < 64)
- {
- if (dwMemPos + 6 > dwMemLength) return TRUE;
- UINT rep = 1;
- UINT note = lpStream[dwMemPos++];
- if (note == 0xFC)
- {
- rep = lpStream[dwMemPos];
- note = lpStream[dwMemPos+1];
- dwMemPos += 2;
- }
- UINT instr = lpStream[dwMemPos++];
- UINT eff = lpStream[dwMemPos++];
- UINT dat1 = lpStream[dwMemPos++];
- UINT dat2 = lpStream[dwMemPos++];
- UINT cmd1 = eff & 0x0F;
- UINT cmd2 = eff >> 4;
- if (cmd1 == 0x0C) dat1 >>= 2; else
- if (cmd1 == 0x0B) { cmd1 = dat1 = 0; }
- if (cmd2 == 0x0C) dat2 >>= 2; else
- if (cmd2 == 0x0B) { cmd2 = dat2 = 0; }
- while ((rep != 0) && (row < 64))
- {
- if (pat)
- {
- pat->instr = instr;
- if (note) pat->note = note + 36;
- if (cmd1 | dat1)
- {
- if (cmd1 == 0x0C)
- {
- pat->volcmd = VOLCMD_VOLUME;
- pat->vol = dat1;
- } else
- {
- pat->command = cmd1;
- pat->param = dat1;
- ConvertModCommand(pat);
- }
- }
- if (cmd2 == 0x0C)
- {
- pat->volcmd = VOLCMD_VOLUME;
- pat->vol = dat2;
- } else
- if ((cmd2 | dat2) && (!pat->command))
- {
- pat->command = cmd2;
- pat->param = dat2;
- ConvertModCommand(pat);
- }
- pat += m_nChannels;
- }
- row++;
- rep--;
- }
- }
- }
- }
- // Reading Instruments
- for (UINT smp=1; smp<=m_nSamples; smp++) if (Ins[smp].nLength)
- {
- if (dwMemPos >= dwMemLength) return TRUE;
- UINT flags = (Ins[smp].uFlags & CHN_16BIT) ? RS_PCM16S : RS_PCM8S;
- dwMemPos += ReadSample(&Ins[smp], flags, (LPSTR)(lpStream+dwMemPos), dwMemLength - dwMemPos);
- }
- return TRUE;
-}
-
diff --git a/src/modplug/load_umx.cxx b/src/modplug/load_umx.cxx
deleted file mode 100755
index 8913c74..0000000
--- a/src/modplug/load_umx.cxx
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-#define MODMAGIC_OFFSET (20+31*30+130)
-
-
-BOOL CSoundFile::ReadUMX(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- if ((!lpStream) || (dwMemLength < 0x800)) return FALSE;
- // Rip Mods from UMX
- if ((bswapLE32(*((DWORD *)(lpStream+0x20))) < dwMemLength)
- && (bswapLE32(*((DWORD *)(lpStream+0x18))) <= dwMemLength - 0x10)
- && (bswapLE32(*((DWORD *)(lpStream+0x18))) >= dwMemLength - 0x200))
- {
- for (UINT uscan=0x40; uscan<0x500; uscan++)
- {
- DWORD dwScan = bswapLE32(*((DWORD *)(lpStream+uscan)));
- // IT
- if (dwScan == 0x4D504D49)
- {
- DWORD dwRipOfs = uscan;
- return ReadIT(lpStream + dwRipOfs, dwMemLength - dwRipOfs);
- }
- // S3M
- if (dwScan == 0x4D524353)
- {
- DWORD dwRipOfs = uscan - 44;
- return ReadS3M(lpStream + dwRipOfs, dwMemLength - dwRipOfs);
- }
- // XM
- if (!strnicmp((LPCSTR)(lpStream+uscan), "Extended Module", 15))
- {
- DWORD dwRipOfs = uscan;
- return ReadXM(lpStream + dwRipOfs, dwMemLength - dwRipOfs);
- }
- // MOD
- if ((uscan > MODMAGIC_OFFSET) && (dwScan == 0x2e4b2e4d))
- {
- DWORD dwRipOfs = uscan - MODMAGIC_OFFSET;
- return ReadMod(lpStream+dwRipOfs, dwMemLength-dwRipOfs);
- }
- }
- }
- return FALSE;
-}
-
diff --git a/src/modplug/load_wav.cxx b/src/modplug/load_wav.cxx
deleted file mode 100755
index f5ee84a..0000000
--- a/src/modplug/load_wav.cxx
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-#ifndef WAVE_FORMAT_EXTENSIBLE
-#define WAVE_FORMAT_EXTENSIBLE 0xFFFE
-#endif
-
-/////////////////////////////////////////////////////////////
-// WAV file support
-
-BOOL CSoundFile::ReadWav(const BYTE *lpStream, DWORD dwMemLength)
-//---------------------------------------------------------------
-{
- DWORD dwMemPos = 0;
- WAVEFILEHEADER phdr;
- WAVEFORMATHEADER pfmt;
-
- if ((!lpStream)
- || (dwMemLength < (DWORD)(sizeof(WAVEFORMATHEADER)+sizeof(WAVEFILEHEADER))))
- return FALSE;
-
- memcpy(&phdr, lpStream, sizeof(phdr));
- memcpy(&pfmt, lpStream+sizeof(phdr), sizeof(pfmt));
-
- phdr.id_RIFF = bswapLE32(phdr.id_RIFF);
- phdr.filesize = bswapLE32(phdr.filesize);
- phdr.id_WAVE = bswapLE32(phdr.id_WAVE);
-
- pfmt.id_fmt = bswapLE32(pfmt.id_fmt);
- pfmt.hdrlen = bswapLE32(pfmt.hdrlen);
- pfmt.format = bswapLE16(pfmt.format);
- pfmt.channels = bswapLE16(pfmt.channels);
- pfmt.freqHz = bswapLE32(pfmt.freqHz);
- pfmt.bytessec = bswapLE32(pfmt.bytessec);
- pfmt.samplesize = bswapLE16(pfmt.samplesize);
- pfmt.bitspersample = bswapLE16(pfmt.bitspersample);
-
- if ((phdr.id_RIFF != IFFID_RIFF) || (phdr.id_WAVE != IFFID_WAVE)
- || (pfmt.id_fmt != IFFID_fmt)) return FALSE;
-
- dwMemPos = sizeof(WAVEFILEHEADER) + 8 + pfmt.hdrlen;
-
- if ((dwMemPos + 8 >= dwMemLength)
- || ((pfmt.format != WAVE_FORMAT_PCM) && (pfmt.format != WAVE_FORMAT_EXTENSIBLE))
- || (pfmt.channels > 4)
- || (!pfmt.channels)
- || (!pfmt.freqHz)
- || (pfmt.bitspersample & 7)
- || (pfmt.bitspersample < 8)
- || (pfmt.bitspersample > 32)) return FALSE;
-
- WAVEDATAHEADER pdata;
-
- for (;;)
- {
- memcpy(&pdata, lpStream+dwMemPos, sizeof(pdata));
- pdata.id_data = bswapLE32(pdata.id_data);
- pdata.length = bswapLE32(pdata.length);
-
- if (pdata.id_data == IFFID_data) break;
- dwMemPos += pdata.length + 8;
- if (dwMemPos + 8 >= dwMemLength) return FALSE;
- }
- m_nType = MOD_TYPE_WAV;
- m_nSamples = 0;
- m_nInstruments = 0;
- m_nChannels = 4;
- m_nDefaultSpeed = 8;
- m_nDefaultTempo = 125;
- m_dwSongFlags |= SONG_LINEARSLIDES; // For no resampling
- Order[0] = 0;
- Order[1] = 0xFF;
- PatternSize[0] = PatternSize[1] = 64;
- PatternAllocSize[0] = PatternAllocSize[1] = 64;
- if ((Patterns[0] = AllocatePattern(64, 4)) == NULL) return TRUE;
- if ((Patterns[1] = AllocatePattern(64, 4)) == NULL) return TRUE;
- UINT samplesize = (pfmt.channels * pfmt.bitspersample) >> 3;
- UINT len = pdata.length, bytelen;
- if (dwMemPos + len > dwMemLength - 8) len = dwMemLength - dwMemPos - 8;
- len /= samplesize;
- bytelen = len;
- if (pfmt.bitspersample >= 16) bytelen *= 2;
- if (len > MAX_SAMPLE_LENGTH) len = MAX_SAMPLE_LENGTH;
- if (!len) return TRUE;
- // Setting up module length
- DWORD dwTime = ((len * 50) / pfmt.freqHz) + 1;
- DWORD framesperrow = (dwTime + 63) / 63;
- if (framesperrow < 4) framesperrow = 4;
- UINT norders = 1;
- while (framesperrow >= 0x20)
- {
- Order[norders++] = 1;
- Order[norders] = 0xFF;
- framesperrow = (dwTime + (64 * norders - 1)) / (64 * norders);
- if (norders >= MAX_ORDERS-1) break;
- }
- m_nDefaultSpeed = framesperrow;
- for (UINT iChn=0; iChn<4; iChn++)
- {
- ChnSettings[iChn].nPan = (iChn & 1) ? 256 : 0;
- ChnSettings[iChn].nVolume = 64;
- ChnSettings[iChn].dwFlags = 0;
- }
- // Setting up speed command
- MODCOMMAND *pcmd = Patterns[0];
- pcmd[0].command = CMD_SPEED;
- pcmd[0].param = (BYTE)m_nDefaultSpeed;
- pcmd[0].note = 5*12+1;
- pcmd[0].instr = 1;
- pcmd[1].note = pcmd[0].note;
- pcmd[1].instr = pcmd[0].instr;
- m_nSamples = pfmt.channels;
- // Support for Multichannel Wave
- for (UINT nChn=0; nChn<m_nSamples; nChn++)
- {
- MODINSTRUMENT *pins = &Ins[nChn+1];
- pcmd[nChn].note = pcmd[0].note;
- pcmd[nChn].instr = (BYTE)(nChn+1);
- pins->nLength = len;
- pins->nC4Speed = pfmt.freqHz;
- pins->nVolume = 256;
- pins->nPan = 128;
- pins->nGlobalVol = 64;
- pins->uFlags = (WORD)((pfmt.bitspersample >= 16) ? CHN_16BIT : 0);
- pins->uFlags |= CHN_PANNING;
- if (m_nSamples > 1)
- {
- switch(nChn)
- {
- case 0: pins->nPan = 0; break;
- case 1: pins->nPan = 256; break;
- case 2: pins->nPan = (WORD)((m_nSamples == 3) ? 128 : 64); pcmd[nChn].command = CMD_S3MCMDEX; pcmd[nChn].param = 0x91; break;
- case 3: pins->nPan = 192; pcmd[nChn].command = CMD_S3MCMDEX; pcmd[nChn].param = 0x91; break;
- default: pins->nPan = 128; break;
- }
- }
- if ((pins->pSample = AllocateSample(bytelen+8)) == NULL) return TRUE;
- if (pfmt.bitspersample >= 16)
- {
- int slsize = pfmt.bitspersample >> 3;
- signed short *p = (signed short *)pins->pSample;
- signed char *psrc = (signed char *)(lpStream+dwMemPos+8+nChn*slsize+slsize-2);
- for (UINT i=0; i<len; i++)
- {
- p[i] = bswapLE16(*((signed short *)psrc));
- psrc += samplesize;
- }
- p[len+1] = p[len] = p[len-1];
- } else
- {
- signed char *p = (signed char *)pins->pSample;
- signed char *psrc = (signed char *)(lpStream+dwMemPos+8+nChn);
- for (UINT i=0; i<len; i++)
- {
- p[i] = (signed char)((*psrc) + 0x80);
- psrc += samplesize;
- }
- p[len+1] = p[len] = p[len-1];
- }
- }
- return TRUE;
-}
-
-
-////////////////////////////////////////////////////////////////////////
-// IMA ADPCM Support
-
-#pragma pack(1)
-
-typedef struct IMAADPCMBLOCK
-{
- WORD sample;
- BYTE index;
- BYTE Reserved;
-} DVI_ADPCMBLOCKHEADER;
-
-#pragma pack()
-
-static const int gIMAUnpackTable[90] =
-{
- 7, 8, 9, 10, 11, 12, 13, 14,
- 16, 17, 19, 21, 23, 25, 28, 31,
- 34, 37, 41, 45, 50, 55, 60, 66,
- 73, 80, 88, 97, 107, 118, 130, 143,
- 157, 173, 190, 209, 230, 253, 279, 307,
- 337, 371, 408, 449, 494, 544, 598, 658,
- 724, 796, 876, 963, 1060, 1166, 1282, 1411,
- 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024,
- 3327, 3660, 4026, 4428, 4871, 5358, 5894, 6484,
- 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
- 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
- 32767, 0
-};
-
-
-BOOL IMAADPCMUnpack16(signed short *pdest, UINT nLen, LPBYTE psrc, DWORD dwBytes, UINT pkBlkAlign)
-//------------------------------------------------------------------------------------------------
-{
- static const int gIMAIndexTab[8] = { -1, -1, -1, -1, 2, 4, 6, 8 };
- UINT nPos;
- int value;
-
- if ((nLen < 4) || (!pdest) || (!psrc)
- || (pkBlkAlign < 5) || (pkBlkAlign > dwBytes)) return FALSE;
- nPos = 0;
- while ((nPos < nLen) && (dwBytes > 4))
- {
- int nIndex;
- value = bswapLE16(*((short int *)psrc));
- nIndex = bswapLE16((short int)psrc[2]);
- psrc += 4;
- dwBytes -= 4;
- pdest[nPos++] = (short int)value;
- for (UINT i=0; ((i<(pkBlkAlign-4)*2) && (nPos < nLen) && (dwBytes)); i++)
- {
- BYTE delta;
- if (i & 1)
- {
- delta = (BYTE)(((*(psrc++)) >> 4) & 0x0F);
- dwBytes--;
- } else
- {
- delta = (BYTE)((*psrc) & 0x0F);
- }
- int v = gIMAUnpackTable[nIndex % 90] >> 3;
- if (delta & 1) v += gIMAUnpackTable[nIndex] >> 2;
- if (delta & 2) v += gIMAUnpackTable[nIndex] >> 1;
- if (delta & 4) v += gIMAUnpackTable[nIndex];
- if (delta & 8) value -= v; else value += v;
- nIndex += gIMAIndexTab[delta & 7];
- if (nIndex < 0) nIndex = 0; else
- if (nIndex > 88) nIndex = 88;
- if (value > 32767) value = 32767; else
- if (value < -32768) value = -32768;
- pdest[nPos++] = (short int)value;
- }
- }
- return TRUE;
-}
-
-
-
diff --git a/src/modplug/load_xm.cxx b/src/modplug/load_xm.cxx
deleted file mode 100755
index c5302e8..0000000
--- a/src/modplug/load_xm.cxx
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-////////////////////////////////////////////////////////
-// FastTracker II XM file support
-
-#ifdef MSC_VER
-#pragma warning(disable:4244)
-#endif
-
-#pragma pack(1)
-typedef struct tagXMFILEHEADER
-{
- DWORD size;
- WORD norder;
- WORD restartpos;
- WORD channels;
- WORD patterns;
- WORD instruments;
- WORD flags;
- WORD speed;
- WORD tempo;
- BYTE order[256];
-} XMFILEHEADER;
-
-
-typedef struct tagXMINSTRUMENTHEADER
-{
- DWORD size;
- CHAR name[22];
- BYTE type;
- BYTE samples;
- BYTE samplesh;
-} XMINSTRUMENTHEADER;
-
-
-typedef struct tagXMSAMPLEHEADER
-{
- DWORD shsize;
- BYTE snum[96];
- WORD venv[24];
- WORD penv[24];
- BYTE vnum, pnum;
- BYTE vsustain, vloops, vloope, psustain, ploops, ploope;
- BYTE vtype, ptype;
- BYTE vibtype, vibsweep, vibdepth, vibrate;
- WORD volfade;
- WORD res;
- BYTE reserved1[20];
-} XMSAMPLEHEADER;
-
-typedef struct tagXMSAMPLESTRUCT
-{
- DWORD samplen;
- DWORD loopstart;
- DWORD looplen;
- BYTE vol;
- signed char finetune;
- BYTE type;
- BYTE pan;
- signed char relnote;
- BYTE res;
- char name[22];
-} XMSAMPLESTRUCT;
-#pragma pack()
-
-
-BOOL CSoundFile::ReadXM(const BYTE *lpStream, DWORD dwMemLength)
-//--------------------------------------------------------------
-{
- XMSAMPLEHEADER xmsh;
- XMSAMPLESTRUCT xmss;
- DWORD dwMemPos, dwHdrSize;
- WORD norders=0, restartpos=0, channels=0, patterns=0, instruments=0;
- WORD xmflags=0, deftempo=125, defspeed=6;
- BOOL InstUsed[256];
- BYTE channels_used[MAX_CHANNELS];
- BYTE pattern_map[256];
- BOOL samples_used[MAX_SAMPLES];
- UINT unused_samples;
-
- m_nChannels = 0;
- if ((!lpStream) || (dwMemLength < 0x200)) return FALSE;
- if (strnicmp((LPCSTR)lpStream, "Extended Module", 15)) return FALSE;
-
- memcpy(m_szNames[0], lpStream+17, 20);
- dwHdrSize = bswapLE32(*((DWORD *)(lpStream+60)));
- norders = bswapLE16(*((WORD *)(lpStream+64)));
- if (norders > MAX_ORDERS) return FALSE;
- restartpos = bswapLE16(*((WORD *)(lpStream+66)));
- channels = bswapLE16(*((WORD *)(lpStream+68)));
- if (channels > 64) return FALSE;
- m_nType = MOD_TYPE_XM;
- m_nMinPeriod = 27;
- m_nMaxPeriod = 54784;
- m_nChannels = channels;
- if (restartpos < norders) m_nRestartPos = restartpos;
- patterns = bswapLE16(*((WORD *)(lpStream+70)));
- if (patterns > 256) patterns = 256;
- instruments = bswapLE16(*((WORD *)(lpStream+72)));
- if (instruments >= MAX_INSTRUMENTS) instruments = MAX_INSTRUMENTS-1;
- m_nInstruments = instruments;
- m_dwSongFlags |= SONG_INSTRUMENTMODE;
- m_nSamples = 0;
- memcpy(&xmflags, lpStream+74, 2);
- xmflags = bswapLE16(xmflags);
- if (xmflags & 1) m_dwSongFlags |= SONG_LINEARSLIDES;
- if (xmflags & 0x1000) m_dwSongFlags |= SONG_EXFILTERRANGE;
- defspeed = bswapLE16(*((WORD *)(lpStream+76)));
- deftempo = bswapLE16(*((WORD *)(lpStream+78)));
- if ((deftempo >= 32) && (deftempo < 256)) m_nDefaultTempo = deftempo;
- if ((defspeed > 0) && (defspeed < 40)) m_nDefaultSpeed = defspeed;
- memcpy(Order, lpStream+80, norders);
- memset(InstUsed, 0, sizeof(InstUsed));
- if (patterns > MAX_PATTERNS)
- {
- UINT i, j;
- for (i=0; i<norders; i++)
- {
- if (Order[i] < patterns) InstUsed[Order[i]] = TRUE;
- }
- j = 0;
- for (i=0; i<256; i++)
- {
- if (InstUsed[i]) pattern_map[i] = j++;
- }
- for (i=0; i<256; i++)
- {
- if (!InstUsed[i])
- {
- pattern_map[i] = (j < MAX_PATTERNS) ? j : 0xFE;
- j++;
- }
- }
- for (i=0; i<norders; i++)
- {
- Order[i] = pattern_map[Order[i]];
- }
- } else
- {
- for (UINT i=0; i<256; i++) pattern_map[i] = i;
- }
- memset(InstUsed, 0, sizeof(InstUsed));
- dwMemPos = dwHdrSize + 60;
- if (dwMemPos + 8 >= dwMemLength) return TRUE;
- // Reading patterns
- memset(channels_used, 0, sizeof(channels_used));
- for (UINT ipat=0; ipat<patterns; ipat++)
- {
- UINT ipatmap = pattern_map[ipat];
- DWORD dwSize = 0;
- WORD rows=64, packsize=0;
- dwSize = bswapLE32(*((DWORD *)(lpStream+dwMemPos)));
- while ((dwMemPos + dwSize >= dwMemLength) || (dwSize & 0xFFFFFF00))
- {
- if (dwMemPos + 4 >= dwMemLength) break;
- dwMemPos++;
- dwSize = bswapLE32(*((DWORD *)(lpStream+dwMemPos)));
- }
- rows = bswapLE16(*((WORD *)(lpStream+dwMemPos+5)));
- if ((!rows) || (rows > 256)) rows = 64;
- packsize = bswapLE16(*((WORD *)(lpStream+dwMemPos+7)));
- if (dwMemPos + dwSize + 4 > dwMemLength) return TRUE;
- dwMemPos += dwSize;
- if (dwMemPos + packsize + 4 > dwMemLength) return TRUE;
- MODCOMMAND *p;
- if (ipatmap < MAX_PATTERNS)
- {
- PatternSize[ipatmap] = rows;
- PatternAllocSize[ipatmap] = rows;
- if ((Patterns[ipatmap] = AllocatePattern(rows, m_nChannels)) == NULL) return TRUE;
- if (!packsize) continue;
- p = Patterns[ipatmap];
- } else p = NULL;
- const BYTE *src = lpStream+dwMemPos;
- UINT j=0;
- for (UINT row=0; row<rows; row++)
- {
- for (UINT chn=0; chn<m_nChannels; chn++)
- {
- if ((p) && (j < packsize))
- {
- BYTE b = src[j++];
- UINT vol = 0;
- if (b & 0x80)
- {
- if (b & 1) p->note = src[j++];
- if (b & 2) p->instr = src[j++];
- if (b & 4) vol = src[j++];
- if (b & 8) p->command = src[j++];
- if (b & 16) p->param = src[j++];
- } else
- {
- p->note = b;
- p->instr = src[j++];
- vol = src[j++];
- p->command = src[j++];
- p->param = src[j++];
- }
- if (p->note == 97) p->note = 0xFF; else
- if ((p->note) && (p->note < 97)) p->note += 12;
- if (p->note) channels_used[chn] = 1;
- if (p->command | p->param) ConvertModCommand(p);
- if (p->instr == 0xff) p->instr = 0;
- if (p->instr) InstUsed[p->instr] = TRUE;
- if ((vol >= 0x10) && (vol <= 0x50))
- {
- p->volcmd = VOLCMD_VOLUME;
- p->vol = vol - 0x10;
- } else
- if (vol >= 0x60)
- {
- UINT v = vol & 0xF0;
- vol &= 0x0F;
- p->vol = vol;
- switch(v)
- {
- // 60-6F: Volume Slide Down
- case 0x60: p->volcmd = VOLCMD_VOLSLIDEDOWN; break;
- // 70-7F: Volume Slide Up:
- case 0x70: p->volcmd = VOLCMD_VOLSLIDEUP; break;
- // 80-8F: Fine Volume Slide Down
- case 0x80: p->volcmd = VOLCMD_FINEVOLDOWN; break;
- // 90-9F: Fine Volume Slide Up
- case 0x90: p->volcmd = VOLCMD_FINEVOLUP; break;
- // A0-AF: Set Vibrato Speed
- case 0xA0: p->volcmd = VOLCMD_VIBRATOSPEED; break;
- // B0-BF: Vibrato
- case 0xB0: p->volcmd = VOLCMD_VIBRATO; break;
- // C0-CF: Set Panning
- case 0xC0: p->volcmd = VOLCMD_PANNING; p->vol = (vol << 2) + 2; break;
- // D0-DF: Panning Slide Left
- case 0xD0: p->volcmd = VOLCMD_PANSLIDELEFT; break;
- // E0-EF: Panning Slide Right
- case 0xE0: p->volcmd = VOLCMD_PANSLIDERIGHT; break;
- // F0-FF: Tone Portamento
- case 0xF0: p->volcmd = VOLCMD_TONEPORTAMENTO; break;
- }
- }
- p++;
- } else
- if (j < packsize)
- {
- BYTE b = src[j++];
- if (b & 0x80)
- {
- if (b & 1) j++;
- if (b & 2) j++;
- if (b & 4) j++;
- if (b & 8) j++;
- if (b & 16) j++;
- } else j += 4;
- } else break;
- }
- }
- dwMemPos += packsize;
- }
- // Wrong offset check
- while (dwMemPos + 4 < dwMemLength)
- {
- DWORD d = bswapLE32(*((DWORD *)(lpStream+dwMemPos)));
- if (d < 0x300) break;
- dwMemPos++;
- }
- memset(samples_used, 0, sizeof(samples_used));
- unused_samples = 0;
- // Reading instruments
- for (UINT iIns=1; iIns<=instruments; iIns++)
- {
- XMINSTRUMENTHEADER *pih;
- BYTE flags[32];
- DWORD samplesize[32];
- UINT samplemap[32];
- WORD nsamples;
-
- if (dwMemPos + sizeof(XMINSTRUMENTHEADER) >= dwMemLength) return TRUE;
- pih = (XMINSTRUMENTHEADER *)(lpStream+dwMemPos);
- if (dwMemPos + bswapLE32(pih->size) > dwMemLength) return TRUE;
- if ((Headers[iIns] = new INSTRUMENTHEADER) == NULL) continue;
- memset(Headers[iIns], 0, sizeof(INSTRUMENTHEADER));
- memcpy(Headers[iIns]->name, pih->name, 22);
- if ((nsamples = pih->samples) > 0)
- {
- if (dwMemPos + sizeof(XMSAMPLEHEADER) > dwMemLength) return TRUE;
- memcpy(&xmsh, lpStream+dwMemPos+sizeof(XMINSTRUMENTHEADER), sizeof(XMSAMPLEHEADER));
- xmsh.shsize = bswapLE32(xmsh.shsize);
- for (int i = 0; i < 24; ++i) {
- xmsh.venv[i] = bswapLE16(xmsh.venv[i]);
- xmsh.penv[i] = bswapLE16(xmsh.penv[i]);
- }
- xmsh.volfade = bswapLE16(xmsh.volfade);
- xmsh.res = bswapLE16(xmsh.res);
- dwMemPos += bswapLE32(pih->size);
- } else
- {
- if (bswapLE32(pih->size)) dwMemPos += bswapLE32(pih->size);
- else dwMemPos += sizeof(XMINSTRUMENTHEADER);
- continue;
- }
- memset(samplemap, 0, sizeof(samplemap));
- if (nsamples > 32) return TRUE;
- UINT newsamples = m_nSamples;
- for (UINT nmap=0; nmap<nsamples; nmap++)
- {
- UINT n = m_nSamples+nmap+1;
- if (n >= MAX_SAMPLES)
- {
- n = m_nSamples;
- while (n > 0)
- {
- if (!Ins[n].pSample)
- {
- for (UINT xmapchk=0; xmapchk < nmap; xmapchk++)
- {
- if (samplemap[xmapchk] == n) goto alreadymapped;
- }
- for (UINT clrs=1; clrs<iIns; clrs++) if (Headers[clrs])
- {
- INSTRUMENTHEADER *pks = Headers[clrs];
- for (UINT ks=0; ks<128; ks++)
- {
- if (pks->Keyboard[ks] == n) pks->Keyboard[ks] = 0;
- }
- }
- break;
- }
- alreadymapped:
- n--;
- }
-#ifndef MODPLUG_FASTSOUNDLIB
- // Damn! more than 200 samples: look for duplicates
- if (!n)
- {
- if (!unused_samples)
- {
- unused_samples = DetectUnusedSamples(samples_used);
- if (!unused_samples) unused_samples = 0xFFFF;
- }
- if ((unused_samples) && (unused_samples != 0xFFFF))
- {
- for (UINT iext=m_nSamples; iext>=1; iext--) if (!samples_used[iext])
- {
- unused_samples--;
- samples_used[iext] = TRUE;
- DestroySample(iext);
- n = iext;
- for (UINT mapchk=0; mapchk<nmap; mapchk++)
- {
- if (samplemap[mapchk] == n) samplemap[mapchk] = 0;
- }
- for (UINT clrs=1; clrs<iIns; clrs++) if (Headers[clrs])
- {
- INSTRUMENTHEADER *pks = Headers[clrs];
- for (UINT ks=0; ks<128; ks++)
- {
- if (pks->Keyboard[ks] == n) pks->Keyboard[ks] = 0;
- }
- }
- memset(&Ins[n], 0, sizeof(Ins[0]));
- break;
- }
- }
- }
-#endif // MODPLUG_FASTSOUNDLIB
- }
- if (newsamples < n) newsamples = n;
- samplemap[nmap] = n;
- }
- m_nSamples = newsamples;
- // Reading Volume Envelope
- INSTRUMENTHEADER *penv = Headers[iIns];
- penv->nMidiProgram = pih->type;
- penv->nFadeOut = xmsh.volfade;
- penv->nPan = 128;
- penv->nPPC = 5*12;
- if (xmsh.vtype & 1) penv->dwFlags |= ENV_VOLUME;
- if (xmsh.vtype & 2) penv->dwFlags |= ENV_VOLSUSTAIN;
- if (xmsh.vtype & 4) penv->dwFlags |= ENV_VOLLOOP;
- if (xmsh.ptype & 1) penv->dwFlags |= ENV_PANNING;
- if (xmsh.ptype & 2) penv->dwFlags |= ENV_PANSUSTAIN;
- if (xmsh.ptype & 4) penv->dwFlags |= ENV_PANLOOP;
- if (xmsh.vnum > 12) xmsh.vnum = 12;
- if (xmsh.pnum > 12) xmsh.pnum = 12;
- penv->VolEnv.nNodes = xmsh.vnum;
- if (!xmsh.vnum) penv->dwFlags &= ~ENV_VOLUME;
- if (!xmsh.pnum) penv->dwFlags &= ~ENV_PANNING;
- if (!(penv->dwFlags & ENV_VOLUME) && !penv->nFadeOut) {
- penv->nFadeOut = 8192;
- }
- penv->PanEnv.nNodes = xmsh.pnum;
- penv->VolEnv.nSustainStart = penv->VolEnv.nSustainEnd = xmsh.vsustain;
- if (xmsh.vsustain >= 12) penv->dwFlags &= ~ENV_VOLSUSTAIN;
- penv->VolEnv.nLoopStart = xmsh.vloops;
- penv->VolEnv.nLoopEnd = xmsh.vloope;
- if (penv->VolEnv.nLoopEnd >= 12) penv->VolEnv.nLoopEnd = 0;
- if (penv->VolEnv.nLoopStart >= penv->VolEnv.nLoopEnd) penv->dwFlags &= ~ENV_VOLLOOP;
- penv->PanEnv.nSustainStart = penv->PanEnv.nSustainEnd = xmsh.psustain;
- if (xmsh.psustain >= 12) penv->dwFlags &= ~ENV_PANSUSTAIN;
- penv->PanEnv.nLoopStart = xmsh.ploops;
- penv->PanEnv.nLoopEnd = xmsh.ploope;
- if (penv->PanEnv.nLoopEnd >= 12) penv->PanEnv.nLoopEnd = 0;
- if (penv->PanEnv.nLoopStart >= penv->PanEnv.nLoopEnd) penv->dwFlags &= ~ENV_PANLOOP;
- penv->nGlobalVol = 128;
- for (UINT ienv=0; ienv<12; ienv++)
- {
- penv->VolEnv.Ticks[ienv] = (WORD)xmsh.venv[ienv*2];
- penv->VolEnv.Values[ienv] = (BYTE)xmsh.venv[ienv*2+1];
- penv->PanEnv.Ticks[ienv] = (WORD)xmsh.penv[ienv*2];
- penv->PanEnv.Values[ienv] = (BYTE)xmsh.penv[ienv*2+1];
- if (ienv)
- {
- if (penv->VolEnv.Ticks[ienv] < penv->VolEnv.Ticks[ienv-1])
- {
- penv->VolEnv.Ticks[ienv] &= 0xFF;
- penv->VolEnv.Ticks[ienv] += penv->VolEnv.Ticks[ienv-1] & 0xFF00;
- if (penv->VolEnv.Ticks[ienv] < penv->VolEnv.Ticks[ienv-1]) penv->VolEnv.Ticks[ienv] += 0x100;
- }
- if (penv->PanEnv.Ticks[ienv] < penv->PanEnv.Ticks[ienv-1])
- {
- penv->PanEnv.Ticks[ienv] &= 0xFF;
- penv->PanEnv.Ticks[ienv] += penv->PanEnv.Ticks[ienv-1] & 0xFF00;
- if (penv->PanEnv.Ticks[ienv] < penv->PanEnv.Ticks[ienv-1]) penv->PanEnv.Ticks[ienv] += 0x100;
- }
- }
- }
- for (UINT j=0; j<96; j++)
- {
- penv->NoteMap[j+12] = j+1+12;
- if (xmsh.snum[j] < nsamples)
- penv->Keyboard[j+12] = samplemap[xmsh.snum[j]];
- }
- // Reading samples
- for (UINT ins=0; ins<nsamples; ins++)
- {
- if ((dwMemPos + sizeof(xmss) > dwMemLength)
- || (dwMemPos + xmsh.shsize > dwMemLength)) return TRUE;
- memcpy(&xmss, lpStream+dwMemPos, sizeof(xmss));
- xmss.samplen = bswapLE32(xmss.samplen);
- xmss.loopstart = bswapLE32(xmss.loopstart);
- xmss.looplen = bswapLE32(xmss.looplen);
- dwMemPos += xmsh.shsize;
- flags[ins] = (xmss.type & 0x10) ? RS_PCM16D : RS_PCM8D;
- if (xmss.type & 0x20) flags[ins] = (xmss.type & 0x10) ? RS_STPCM16D : RS_STPCM8D;
- samplesize[ins] = xmss.samplen;
- if (!samplemap[ins]) continue;
- if (xmss.type & 0x10)
- {
- xmss.looplen >>= 1;
- xmss.loopstart >>= 1;
- xmss.samplen >>= 1;
- }
- if (xmss.type & 0x20)
- {
- xmss.looplen >>= 1;
- xmss.loopstart >>= 1;
- xmss.samplen >>= 1;
- }
- if (xmss.samplen > MAX_SAMPLE_LENGTH) xmss.samplen = MAX_SAMPLE_LENGTH;
- if (xmss.loopstart >= xmss.samplen) xmss.type &= ~3;
- xmss.looplen += xmss.loopstart;
- if (xmss.looplen > xmss.samplen) xmss.looplen = xmss.samplen;
- if (!xmss.looplen) xmss.type &= ~3;
- UINT imapsmp = samplemap[ins];
- memcpy(m_szNames[imapsmp], xmss.name, 22);
- m_szNames[imapsmp][22] = 0;
- MODINSTRUMENT *pins = &Ins[imapsmp];
- pins->nLength = (xmss.samplen > MAX_SAMPLE_LENGTH) ? MAX_SAMPLE_LENGTH : xmss.samplen;
- pins->nLoopStart = xmss.loopstart;
- pins->nLoopEnd = xmss.looplen;
- if (pins->nLoopEnd > pins->nLength) pins->nLoopEnd = pins->nLength;
- if (pins->nLoopStart >= pins->nLoopEnd)
- {
- pins->nLoopStart = pins->nLoopEnd = 0;
- }
- if (xmss.type & 3) pins->uFlags |= CHN_LOOP;
- if (xmss.type & 2) pins->uFlags |= CHN_PINGPONGLOOP;
- pins->nVolume = xmss.vol << 2;
- if (pins->nVolume > 256) pins->nVolume = 256;
- pins->nGlobalVol = 64;
- if ((xmss.res == 0xAD) && (!(xmss.type & 0x30)))
- {
- flags[ins] = RS_ADPCM4;
- samplesize[ins] = (samplesize[ins]+1)/2 + 16;
- }
- pins->nFineTune = xmss.finetune;
- pins->RelativeTone = (int)xmss.relnote;
- pins->nPan = xmss.pan;
- pins->uFlags |= CHN_PANNING;
- pins->nVibType = xmsh.vibtype;
- pins->nVibSweep = xmsh.vibsweep;
- pins->nVibDepth = xmsh.vibdepth;
- pins->nVibRate = xmsh.vibrate/4;
- memcpy(pins->name, xmss.name, 22);
- pins->name[21] = 0;
- }
-#if 0
- if ((xmsh.reserved2 > nsamples) && (xmsh.reserved2 <= 16))
- {
- dwMemPos += (((UINT)xmsh.reserved2) - nsamples) * xmsh.shsize;
- }
-#endif
- for (UINT ismpd=0; ismpd<nsamples; ismpd++)
- {
- if ((samplemap[ismpd]) && (samplesize[ismpd]) && (dwMemPos < dwMemLength))
- {
- ReadSample(&Ins[samplemap[ismpd]], flags[ismpd], (LPSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos);
- }
- dwMemPos += samplesize[ismpd];
- if (dwMemPos >= dwMemLength) break;
- }
- }
- /* set these to default */
- for (UINT in=0; in<m_nChannels; in++)
- {
- ChnSettings[in].nVolume = 64;
- ChnSettings[in].nPan = 128;
- ChnSettings[in].dwFlags = 0;
- }
- return TRUE;
-}
-
-
diff --git a/src/modplug/midi.h b/src/modplug/midi.h
deleted file mode 100644
index 7185fc1..0000000
--- a/src/modplug/midi.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Schism Tracker - a cross-platform Impulse Tracker clone
- * copyright (c) 2003-2005 chisel <schism@chisel.cjb.net>
- * copyright (c) 2005-2006 Mrs. Brisby <mrs.brisby@nimh.org>
- * URL: http://nimh.org/schism/
- * URL: http://rigelseven.com/schism/
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef MIDI_H
-#define MIDI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct midi_provider;
-struct midi_port;
-
-struct midi_driver {
- unsigned int flags;
-#define MIDI_PORT_CAN_SCHEDULE 1
-
- void (*poll)(struct midi_provider *m);
- int (*thread)(struct midi_provider *m);
-
- int (*enable)(struct midi_port *d);
- int (*disable)(struct midi_port *d);
-
- void (*send)(struct midi_port *d,
- unsigned char *seq, unsigned int len, unsigned int delay);
- void (*drain)(struct midi_port *d);
-};
-
-struct midi_provider {
- const char *name;
- void (*poll)(struct midi_provider *);
- void *thread; /*actually SDL_Thread* */
-
- struct midi_provider *next;
-
- /* forwarded; don't touch */
- int (*enable)(struct midi_port *d);
- int (*disable)(struct midi_port *d);
-
- void (*send_now)(struct midi_port *d,
- unsigned char *seq, unsigned int len, unsigned int delay);
- void (*send_later)(struct midi_port *d,
- unsigned char *seq, unsigned int len, unsigned int delay);
- void (*drain)(struct midi_port *d);
-};
-struct midi_port {
- int io, iocap;
-#define MIDI_INPUT 1
-#define MIDI_OUTPUT 2
- char *name;
- int num;
-
- void *userdata;
- int free_userdata;
- int (*enable)(struct midi_port *d);
- int (*disable)(struct midi_port *d);
- void (*send_now)(struct midi_port *d,
- unsigned char *seq, unsigned int len, unsigned int delay);
- void (*send_later)(struct midi_port *d,
- unsigned char *seq, unsigned int len, unsigned int delay);
- void (*drain)(struct midi_port *d);
-
- struct midi_provider *provider;
-};
-
-
-/* schism calls these directly */
-int midi_engine_start(void);
-void midi_engine_reset(void);
-void midi_engine_stop(void);
-void midi_engine_poll_ports(void);
-
-/* some parts of schism call this; it means "immediately" */
-void midi_send_now(unsigned char *seq, unsigned int len);
-
-/* ... but the player calls this */
-void midi_send_buffer(unsigned char *data, unsigned int len, unsigned int pos);
-void midi_send_flush(void);
-
-/* from the SDL event mechanism (x is really SDL_Event) */
-int midi_engine_handle_event(void *x);
-
-struct midi_port *midi_engine_port(int n, const char **name);
-int midi_engine_port_count(void);
-
-/* midi engines register a provider (one each!) */
-struct midi_provider *midi_provider_register(const char *name, struct midi_driver *f);
-
-
-/* midi engines list ports this way */
-int midi_port_register(struct midi_provider *p,
-int inout, const char *name, void *userdata, int free_userdata);
-
-int midi_port_foreach(struct midi_provider *p, struct midi_port **cursor);
-void midi_port_unregister(int num);
-
-/* only call these if the event isn't really MIDI but you want most of the system
- to act like it is...
-
- midi drivers should never all these...
-*/
-enum midi_note {
- MIDI_NOTEOFF,
- MIDI_NOTEON,
- MIDI_KEYPRESS,
-};
-void midi_event_note(enum midi_note mnstatus, int channel, int note, int velocity);
-void midi_event_controller(int channel, int param, int value);
-void midi_event_program(int channel, int value);
-void midi_event_aftertouch(int channel, int value);
-void midi_event_pitchbend(int channel, int value);
-void midi_event_tick(void);
-void midi_event_sysex(const unsigned char *data, unsigned int len);
-void midi_event_system(int argv, int param);
-
-/* midi drivers call this when they received an event */
-void midi_received_cb(struct midi_port *src, unsigned char *data, unsigned int len);
-
-
-#ifdef USE_NETWORK
-int ip_midi_setup(void);
-#endif
-#ifdef USE_OSS
-int oss_midi_setup(void);
-#endif
-#ifdef USE_ALSA
-int alsa_midi_setup(void);
-#endif
-#ifdef USE_WIN32MM
-int win32mm_midi_setup(void);
-#endif
-#ifdef MACOSX
-int macosx_midi_setup(void);
-#endif
-
-
-
-#define MIDI_TICK_QUANTIZE 0x00000001
-#define MIDI_BASE_PROGRAM1 0x00000002
-#define MIDI_RECORD_NOTEOFF 0x00000004
-#define MIDI_RECORD_VELOCITY 0x00000008
-#define MIDI_RECORD_AFTERTOUCH 0x00000010
-#define MIDI_CUT_NOTE_OFF 0x00000020
-#define MIDI_PITCH_BEND 0x00000040
-#define MIDI_EMBED_DATA 0x00000080
-#define MIDI_RECORD_SDX 0x00000100
-#define MIDI_DISABLE_RECORD 0x00010000
-
-/* configurable midi stuff */
-int midi_flags = MIDI_TICK_QUANTIZE | MIDI_RECORD_NOTEOFF
- | MIDI_RECORD_VELOCITY | MIDI_RECORD_AFTERTOUCH
- | MIDI_PITCH_BEND;
-
-int midi_pitch_depth = 12;
-int midi_amplification = 100;
-int midi_c5note = 60;
-
-/* only available with networks */
-void ip_midi_setports(int n);
-int ip_midi_getports(void);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif
diff --git a/src/modplug/mmcmp.cxx b/src/modplug/mmcmp.cxx
deleted file mode 100755
index 200ee3b..0000000
--- a/src/modplug/mmcmp.cxx
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-BOOL PP20_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength);
-
-typedef struct MMCMPFILEHEADER
-{
- DWORD id_ziRC; // "ziRC"
- DWORD id_ONia; // "ONia"
- WORD hdrsize;
-} MMCMPFILEHEADER, *LPMMCMPFILEHEADER;
-
-typedef struct MMCMPHEADER
-{
- WORD version;
- WORD nblocks;
- DWORD filesize;
- DWORD blktable;
- BYTE glb_comp;
- BYTE fmt_comp;
-} MMCMPHEADER, *LPMMCMPHEADER;
-
-typedef struct MMCMPBLOCK
-{
- DWORD unpk_size;
- DWORD pk_size;
- DWORD xor_chk;
- WORD sub_blk;
- WORD flags;
- WORD tt_entries;
- WORD num_bits;
-} MMCMPBLOCK, *LPMMCMPBLOCK;
-
-typedef struct MMCMPSUBBLOCK
-{
- DWORD unpk_pos;
- DWORD unpk_size;
-} MMCMPSUBBLOCK, *LPMMCMPSUBBLOCK;
-
-#define MMCMP_COMP 0x0001
-#define MMCMP_DELTA 0x0002
-#define MMCMP_16BIT 0x0004
-#define MMCMP_STEREO 0x0100
-#define MMCMP_ABS16 0x0200
-#define MMCMP_ENDIAN 0x0400
-
-typedef struct MMCMPBITBUFFER
-{
- UINT bitcount;
- DWORD bitbuffer;
- LPCBYTE pSrc;
- LPCBYTE pEnd;
-
- DWORD GetBits(UINT nBits);
-} MMCMPBITBUFFER;
-
-
-DWORD MMCMPBITBUFFER::GetBits(UINT nBits)
-//---------------------------------------
-{
- DWORD d;
- if (!nBits) return 0;
- while (bitcount < 24)
- {
- bitbuffer |= ((pSrc < pEnd) ? *pSrc++ : 0) << bitcount;
- bitcount += 8;
- }
- d = bitbuffer & ((1 << nBits) - 1);
- bitbuffer >>= nBits;
- bitcount -= nBits;
- return d;
-}
-
-//#define MMCMP_LOG
-
-#ifdef MMCMP_LOG
-extern void Log(LPCSTR s, ...);
-#endif
-
-const DWORD MMCMP8BitCommands[8] =
-{
- 0x01, 0x03, 0x07, 0x0F, 0x1E, 0x3C, 0x78, 0xF8
-};
-
-const UINT MMCMP8BitFetch[8] =
-{
- 3, 3, 3, 3, 2, 1, 0, 0
-};
-
-const DWORD MMCMP16BitCommands[16] =
-{
- 0x01, 0x03, 0x07, 0x0F, 0x1E, 0x3C, 0x78, 0xF0,
- 0x1F0, 0x3F0, 0x7F0, 0xFF0, 0x1FF0, 0x3FF0, 0x7FF0, 0xFFF0
-};
-
-const UINT MMCMP16BitFetch[16] =
-{
- 4, 4, 4, 4, 3, 2, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-
-BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
-//---------------------------------------------------------
-{
- DWORD dwMemLength = *pdwMemLength;
- LPCBYTE lpMemFile = *ppMemFile;
- LPBYTE pBuffer;
- LPMMCMPFILEHEADER pmfh = (LPMMCMPFILEHEADER)(lpMemFile);
- LPMMCMPHEADER pmmh = (LPMMCMPHEADER)(lpMemFile+10);
- LPDWORD pblk_table;
- DWORD dwFileSize;
-
- if (PP20_Unpack(ppMemFile, pdwMemLength))
- {
- return TRUE;
- }
- if ((dwMemLength < 256) || (!pmfh) || (pmfh->id_ziRC != 0x4352697A) || (pmfh->id_ONia != 0x61694e4f) || (pmfh->hdrsize < 14)
- || (!pmmh->nblocks) || (pmmh->filesize < 16) || (pmmh->filesize > 0x8000000)
- || (pmmh->blktable >= dwMemLength) || (pmmh->blktable + 4*pmmh->nblocks > dwMemLength)) return FALSE;
- dwFileSize = pmmh->filesize;
- if ((pBuffer = (LPBYTE)GlobalAllocPtr(GHND, (dwFileSize + 31) & ~15)) == NULL) return FALSE;
- pblk_table = (LPDWORD)(lpMemFile+pmmh->blktable);
- for (UINT nBlock=0; nBlock<pmmh->nblocks; nBlock++)
- {
- DWORD dwMemPos = pblk_table[nBlock];
- LPMMCMPBLOCK pblk = (LPMMCMPBLOCK)(lpMemFile+dwMemPos);
- LPMMCMPSUBBLOCK psubblk = (LPMMCMPSUBBLOCK)(lpMemFile+dwMemPos+20);
-
- if ((dwMemPos + 20 >= dwMemLength) || (dwMemPos + 20 + pblk->sub_blk*8 >= dwMemLength)) break;
- dwMemPos += 20 + pblk->sub_blk*8;
-#ifdef MMCMP_LOG
- Log("block %d: flags=%04X sub_blocks=%d", nBlock, (UINT)pblk->flags, (UINT)pblk->sub_blk);
- Log(" pksize=%d unpksize=%d", pblk->pk_size, pblk->unpk_size);
- Log(" tt_entries=%d num_bits=%d\n", pblk->tt_entries, pblk->num_bits);
-#endif
- // Data is not packed
- if (!(pblk->flags & MMCMP_COMP))
- {
- for (UINT i=0; i<pblk->sub_blk; i++)
- {
- if ((psubblk->unpk_pos > dwFileSize) || (psubblk->unpk_pos + psubblk->unpk_size > dwFileSize)) break;
-#ifdef MMCMP_LOG
- Log(" Unpacked sub-block %d: offset %d, size=%d\n", i, psubblk->unpk_pos, psubblk->unpk_size);
-#endif
- memcpy(pBuffer+psubblk->unpk_pos, lpMemFile+dwMemPos, psubblk->unpk_size);
- dwMemPos += psubblk->unpk_size;
- psubblk++;
- }
- } else
- // Data is 16-bit packed
- if (pblk->flags & MMCMP_16BIT)
- {
- MMCMPBITBUFFER bb;
- LPWORD pDest = (LPWORD)(pBuffer + psubblk->unpk_pos);
- DWORD dwSize = psubblk->unpk_size >> 1;
- DWORD dwPos = 0;
- UINT numbits = pblk->num_bits;
- UINT subblk = 0, oldval = 0;
-
-#ifdef MMCMP_LOG
- Log(" 16-bit block: pos=%d size=%d ", psubblk->unpk_pos, psubblk->unpk_size);
- if (pblk->flags & MMCMP_DELTA) Log("DELTA ");
- if (pblk->flags & MMCMP_ABS16) Log("ABS16 ");
- Log("\n");
-#endif
- bb.bitcount = 0;
- bb.bitbuffer = 0;
- bb.pSrc = lpMemFile+dwMemPos+pblk->tt_entries;
- bb.pEnd = lpMemFile+dwMemPos+pblk->pk_size;
- while (subblk < pblk->sub_blk)
- {
- UINT newval = 0x10000;
- DWORD d = bb.GetBits(numbits+1);
-
- if (d >= MMCMP16BitCommands[numbits])
- {
- UINT nFetch = MMCMP16BitFetch[numbits];
- UINT newbits = bb.GetBits(nFetch) + ((d - MMCMP16BitCommands[numbits]) << nFetch);
- if (newbits != numbits)
- {
- numbits = newbits & 0x0F;
- } else
- {
- if ((d = bb.GetBits(4)) == 0x0F)
- {
- if (bb.GetBits(1)) break;
- newval = 0xFFFF;
- } else
- {
- newval = 0xFFF0 + d;
- }
- }
- } else
- {
- newval = d;
- }
- if (newval < 0x10000)
- {
- newval = (newval & 1) ? (UINT)(-(LONG)((newval+1) >> 1)) : (UINT)(newval >> 1);
- if (pblk->flags & MMCMP_DELTA)
- {
- newval += oldval;
- oldval = newval;
- } else
- if (!(pblk->flags & MMCMP_ABS16))
- {
- newval ^= 0x8000;
- }
- pDest[dwPos++] = (WORD)newval;
- }
- if (dwPos >= dwSize)
- {
- subblk++;
- dwPos = 0;
- dwSize = psubblk[subblk].unpk_size >> 1;
- pDest = (LPWORD)(pBuffer + psubblk[subblk].unpk_pos);
- }
- }
- } else
- // Data is 8-bit packed
- {
- MMCMPBITBUFFER bb;
- LPBYTE pDest = pBuffer + psubblk->unpk_pos;
- DWORD dwSize = psubblk->unpk_size;
- DWORD dwPos = 0;
- UINT numbits = pblk->num_bits;
- UINT subblk = 0, oldval = 0;
- LPCBYTE ptable = lpMemFile+dwMemPos;
-
- bb.bitcount = 0;
- bb.bitbuffer = 0;
- bb.pSrc = lpMemFile+dwMemPos+pblk->tt_entries;
- bb.pEnd = lpMemFile+dwMemPos+pblk->pk_size;
- while (subblk < pblk->sub_blk)
- {
- UINT newval = 0x100;
- DWORD d = bb.GetBits(numbits+1);
-
- if (d >= MMCMP8BitCommands[numbits])
- {
- UINT nFetch = MMCMP8BitFetch[numbits];
- UINT newbits = bb.GetBits(nFetch) + ((d - MMCMP8BitCommands[numbits]) << nFetch);
- if (newbits != numbits)
- {
- numbits = newbits & 0x07;
- } else
- {
- if ((d = bb.GetBits(3)) == 7)
- {
- if (bb.GetBits(1)) break;
- newval = 0xFF;
- } else
- {
- newval = 0xF8 + d;
- }
- }
- } else
- {
- newval = d;
- }
- if (newval < 0x100)
- {
- int n = ptable[newval];
- if (pblk->flags & MMCMP_DELTA)
- {
- n += oldval;
- oldval = n;
- }
- pDest[dwPos++] = (BYTE)n;
- }
- if (dwPos >= dwSize)
- {
- subblk++;
- dwPos = 0;
- dwSize = psubblk[subblk].unpk_size;
- pDest = pBuffer + psubblk[subblk].unpk_pos;
- }
- }
- }
- }
- *ppMemFile = pBuffer;
- *pdwMemLength = dwFileSize;
- return TRUE;
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// PowerPack PP20 Unpacker
-//
-
-typedef struct _PPBITBUFFER
-{
- UINT bitcount;
- ULONG bitbuffer;
- LPCBYTE pStart;
- LPCBYTE pSrc;
-
- ULONG GetBits(UINT n);
-} PPBITBUFFER;
-
-
-ULONG PPBITBUFFER::GetBits(UINT n)
-{
- ULONG result = 0;
-
- for (UINT i=0; i<n; i++)
- {
- if (!bitcount)
- {
- bitcount = 8;
- if (pSrc != pStart) pSrc--;
- bitbuffer = *pSrc;
- }
- result = (result<<1) | (bitbuffer&1);
- bitbuffer >>= 1;
- bitcount--;
- }
- return result;
-}
-
-
-VOID PP20_DoUnpack(const BYTE *pSrc, UINT nSrcLen, BYTE *pDst, UINT nDstLen)
-{
- PPBITBUFFER BitBuffer;
- ULONG nBytesLeft;
-
- BitBuffer.pStart = pSrc;
- BitBuffer.pSrc = pSrc + nSrcLen - 4;
- BitBuffer.bitbuffer = 0;
- BitBuffer.bitcount = 0;
- BitBuffer.GetBits(pSrc[nSrcLen-1]);
- nBytesLeft = nDstLen;
- while (nBytesLeft > 0)
- {
- if (!BitBuffer.GetBits(1))
- {
- UINT n = 1;
- while (n < nBytesLeft)
- {
- UINT code = BitBuffer.GetBits(2);
- n += code;
- if (code != 3) break;
- }
- for (UINT i=0; i<n; i++)
- {
- pDst[--nBytesLeft] = (BYTE)BitBuffer.GetBits(8);
- }
- if (!nBytesLeft) break;
- }
- {
- UINT n = BitBuffer.GetBits(2)+1;
- UINT nbits = pSrc[n-1];
- UINT nofs;
- if (n==4)
- {
- nofs = BitBuffer.GetBits( (BitBuffer.GetBits(1)) ? nbits : 7 );
- while (n < nBytesLeft)
- {
- UINT code = BitBuffer.GetBits(3);
- n += code;
- if (code != 7) break;
- }
- } else
- {
- nofs = BitBuffer.GetBits(nbits);
- }
- for (UINT i=0; i<=n; i++)
- {
- pDst[nBytesLeft-1] = (nBytesLeft+nofs < nDstLen) ? pDst[nBytesLeft+nofs] : 0;
- if (!--nBytesLeft) break;
- }
- }
- }
-}
-
-
-BOOL PP20_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
-{
- DWORD dwMemLength = *pdwMemLength;
- LPCBYTE lpMemFile = *ppMemFile;
- DWORD dwDstLen;
- LPBYTE pBuffer;
-
- if ((!lpMemFile) || (dwMemLength < 256) || (*(DWORD *)lpMemFile != 0x30325050)) return FALSE;
- dwDstLen = (lpMemFile[dwMemLength-4]<<16) | (lpMemFile[dwMemLength-3]<<8) | (lpMemFile[dwMemLength-2]);
- //Log("PP20 detected: Packed length=%d, Unpacked length=%d\n", dwMemLength, dwDstLen);
- if ((dwDstLen < 512) || (dwDstLen > 0x400000) || (dwDstLen > 16*dwMemLength)) return FALSE;
- if ((pBuffer = (LPBYTE)GlobalAllocPtr(GHND, (dwDstLen + 31) & ~15)) == NULL) return FALSE;
- PP20_DoUnpack(lpMemFile+4, dwMemLength-4, pBuffer, dwDstLen);
- *ppMemFile = pBuffer;
- *pdwMemLength = dwDstLen;
- return TRUE;
-}
-
-
-
-
-
diff --git a/src/modplug/modplugbmp.cxx b/src/modplug/modplugbmp.cxx
index aeb4d70..278eb81 100644
--- a/src/modplug/modplugbmp.cxx
+++ b/src/modplug/modplugbmp.cxx
@@ -1,4 +1,3 @@
-#define AUD_DEBUG 1
/* Modplug XMMS Plugin
* Authors: Kenton Varda <temporal@gauge3d.org>
*
@@ -6,19 +5,24 @@
*/
#include <fstream>
+#include <stdint.h>
#include <unistd.h>
#include <math.h>
+#include <libmodplug/stdafx.h>
+#include <libmodplug/sndfile.h>
+
extern "C" {
-#include <audacious/configdb.h>
+#include <audacious/debug.h>
+#include <audacious/misc.h>
}
#include "modplugbmp.h"
-#include "stdafx.h"
-#include "sndfile.h"
#include "stddefs.h"
#include "archive/open.h"
+static gboolean stop_flag = FALSE;
+
// ModplugXMMS member functions ===============================
// operations ----------------------------------------
@@ -35,66 +39,57 @@ ModplugXMMS::~ModplugXMMS()
g_cond_free (control_cond);
}
-ModplugXMMS::Settings::Settings()
-{
- mSurround = true;
- mOversamp = true;
- mReverb = false;
- mMegabass = false;
- mNoiseReduction = true;
- mVolumeRamp = true;
- mFastinfo = true;
- mUseFilename = false;
- mGrabAmigaMOD = true;
-
- mChannels = 2;
- mFrequency = 44100;
- mBits = 16;
- mResamplingMode = SRCMODE_POLYPHASE;
-
- mReverbDepth = 30;
- mReverbDelay = 100;
- mBassAmount = 40;
- mBassRange = 30;
- mSurroundDepth = 20;
- mSurroundDelay = 20;
-
- mPreamp = false;
- mPreampLevel = 0.0f;
-
- mLoopCount = 0; //don't loop
-}
+static const gchar * const modplug_defaults[] = {
+ "Surround", "TRUE",
+ "Oversampling", "TRUE",
+ "Megabass", "FALSE",
+ "NoiseReduction", "TRUE",
+ "VolumeRamp", "TRUE",
+ "Reverb", "FALSE",
+ "Fastinfo", "TRUE",
+ "UseFileName", "FALSE",
+ "GrabAmigaMOD", "TRUE",
+ "PreAmp", "FALSE",
+ "PreAmpLevel", "0",
+ "Channels", "2",
+ "Bits", "16",
+ "Frequency", "44100",
+ "ResamplingMode", "3", /* SRCMODE_POLYPHASE */
+ "ReverbDepth", "30",
+ "ReverbDelay", "100",
+ "BassAmount", "40",
+ "BassRange", "30",
+ "SurroundDepth", "20",
+ "SurroundDelay", "20",
+ "LoopCount", "0",
+ NULL};
void ModplugXMMS::Init(void)
{
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
-
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"Surround", &mModProps.mSurround);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"Oversampling", &mModProps.mOversamp);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"Megabass", &mModProps.mMegabass);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"NoiseReduction", &mModProps.mNoiseReduction);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"VolumeRamp", &mModProps.mVolumeRamp);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"Reverb", &mModProps.mReverb);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"FastInfo", &mModProps.mFastinfo);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"UseFileName", &mModProps.mUseFilename);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"GrabAmigaMOD", &mModProps.mGrabAmigaMOD);
- aud_cfg_db_get_bool(db, MODPLUG_CFGID,"PreAmp", &mModProps.mPreamp);
- aud_cfg_db_get_float(db, MODPLUG_CFGID,"PreAmpLevel", &mModProps.mPreampLevel);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "Channels", &mModProps.mChannels);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "Bits", &mModProps.mBits);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "Frequency", &mModProps.mFrequency);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "ResamplineMode", &mModProps.mResamplingMode);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "ReverbDepth", &mModProps.mReverbDepth);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "ReverbDelay", &mModProps.mReverbDelay);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "BassAmount", &mModProps.mBassAmount);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "BassRange", &mModProps.mBassRange);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "SurroundDepth", &mModProps.mSurroundDepth);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "SurroundDelay", &mModProps.mSurroundDelay);
- aud_cfg_db_get_int(db, MODPLUG_CFGID, "LoopCount", &mModProps.mLoopCount);
-
- aud_cfg_db_close(db);
+ aud_config_set_defaults (MODPLUG_CFGID, modplug_defaults);
+
+ mModProps.mSurround = aud_get_bool (MODPLUG_CFGID, "Surround");
+ mModProps.mOversamp = aud_get_bool (MODPLUG_CFGID, "Oversampling");
+ mModProps.mMegabass = aud_get_bool (MODPLUG_CFGID, "Megabass");
+ mModProps.mNoiseReduction = aud_get_bool (MODPLUG_CFGID, "NoiseReduction");
+ mModProps.mVolumeRamp = aud_get_bool (MODPLUG_CFGID, "VolumeRamp");
+ mModProps.mReverb = aud_get_bool (MODPLUG_CFGID, "Reverb");
+ mModProps.mFastinfo = aud_get_bool (MODPLUG_CFGID, "FastInfo");
+ mModProps.mUseFilename = aud_get_bool (MODPLUG_CFGID, "UseFileName");
+ mModProps.mGrabAmigaMOD = aud_get_bool (MODPLUG_CFGID, "GrabAmigaMOD");
+ mModProps.mPreamp = aud_get_bool (MODPLUG_CFGID, "PreAmp");
+ mModProps.mPreampLevel = aud_get_double (MODPLUG_CFGID, "PreAmpLevel");
+ mModProps.mChannels = aud_get_int (MODPLUG_CFGID, "Channels");
+ mModProps.mBits = aud_get_int (MODPLUG_CFGID, "Bits");
+ mModProps.mFrequency = aud_get_int (MODPLUG_CFGID, "Frequency");
+ mModProps.mResamplingMode = aud_get_int (MODPLUG_CFGID, "ResamplineMode");
+ mModProps.mReverbDepth = aud_get_int (MODPLUG_CFGID, "ReverbDepth");
+ mModProps.mReverbDelay = aud_get_int (MODPLUG_CFGID, "ReverbDelay");
+ mModProps.mBassAmount = aud_get_int (MODPLUG_CFGID, "BassAmount");
+ mModProps.mBassRange = aud_get_int (MODPLUG_CFGID, "BassRange");
+ mModProps.mSurroundDepth = aud_get_int (MODPLUG_CFGID, "SurroundDepth");
+ mModProps.mSurroundDelay = aud_get_int (MODPLUG_CFGID, "SurroundDelay");
+ mModProps.mLoopCount = aud_get_int (MODPLUG_CFGID, "LoopCount");
}
bool ModplugXMMS::CanPlayFileFromVFS(const string& aFilename, VFSFile *file)
@@ -207,12 +202,10 @@ bool ModplugXMMS::CanPlayFileFromVFS(const string& aFilename, VFSFile *file)
void ModplugXMMS::PlayLoop(InputPlayback *playback)
{
uint32 lLength;
- gboolean paused = FALSE;
g_mutex_lock (control_mutex);
seek_time = -1;
- mPaused = FALSE;
- playback->playing = TRUE;
+ stop_flag = FALSE;
playback->set_pb_ready (playback);
g_mutex_unlock (control_mutex);
@@ -220,7 +213,7 @@ void ModplugXMMS::PlayLoop(InputPlayback *playback)
{
g_mutex_lock (control_mutex);
- if (! playback->playing)
+ if (stop_flag)
{
g_mutex_unlock (control_mutex);
break;
@@ -235,20 +228,6 @@ void ModplugXMMS::PlayLoop(InputPlayback *playback)
g_cond_signal (control_cond);
}
- if (mPaused != paused)
- {
- playback->output->pause (mPaused);
- paused = mPaused;
- g_cond_signal (control_cond);
- }
-
- if (paused)
- {
- g_cond_wait (control_cond, control_mutex);
- g_mutex_unlock (control_mutex);
- continue;
- }
-
g_mutex_unlock (control_mutex);
lLength = mSoundFile->Read (mBuffer, mBufSize);
@@ -290,10 +269,10 @@ void ModplugXMMS::PlayLoop(InputPlayback *playback)
g_mutex_lock (control_mutex);
- while (playback->playing && playback->output->buffer_playing ())
+ while (!stop_flag && playback->output->buffer_playing ())
g_usleep (10000);
- playback->playing = FALSE;
+ stop_flag = TRUE;
g_cond_signal (control_cond); /* wake up any waiting request */
g_mutex_unlock (control_mutex);
@@ -393,15 +372,7 @@ bool ModplugXMMS::PlayFile(const string& aFilename, InputPlayback *ipb)
ipb->set_tuple(ipb,ti);
}
- ipb->set_params
- (
- ipb,
- NULL,
- 0,
- mSoundFile->GetNumChannels() * 1000,
- mModProps.mFrequency,
- mModProps.mChannels
- );
+ ipb->set_params(ipb, mSoundFile->GetNumChannels() * 1000, mModProps.mFrequency, mModProps.mChannels);
if(mModProps.mBits == 16)
mFormat = FMT_S16_NE;
@@ -410,10 +381,7 @@ bool ModplugXMMS::PlayFile(const string& aFilename, InputPlayback *ipb)
if (! ipb->output->open_audio (mFormat, mModProps.mFrequency,
mModProps.mChannels))
- {
- ipb->error = TRUE;
return true;
- }
this->PlayLoop(ipb);
ipb->output->close_audio ();
@@ -423,41 +391,36 @@ bool ModplugXMMS::PlayFile(const string& aFilename, InputPlayback *ipb)
void ModplugXMMS::Stop (InputPlayback * playback)
{
- g_mutex_lock (control_mutex);
+ g_mutex_lock(control_mutex);
- if (playback->playing)
- {
- playback->playing = FALSE;
- g_cond_signal (control_cond);
- g_mutex_unlock (control_mutex);
- g_thread_join (playback->thread);
- playback->thread = NULL;
- }
- else
- g_mutex_unlock (control_mutex);
+ if (!stop_flag)
+ {
+ stop_flag = TRUE;
+ playback->output->abort_write();
+ g_cond_signal(control_cond);
+ }
+
+ g_mutex_unlock(control_mutex);
}
-void ModplugXMMS::pause (InputPlayback * playback, gshort paused)
+void ModplugXMMS::pause (InputPlayback * playback, gboolean pause)
{
- g_mutex_lock (control_mutex);
+ g_mutex_lock(control_mutex);
- if (playback->playing)
- {
- mPaused = paused;
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, control_mutex);
- }
+ if (!stop_flag)
+ playback->output->pause(pause);
- g_mutex_unlock (control_mutex);
+ g_mutex_unlock(control_mutex);
}
-void ModplugXMMS::mseek (InputPlayback * playback, gulong time)
+void ModplugXMMS::mseek (InputPlayback * playback, gint time)
{
g_mutex_lock (control_mutex);
- if (playback->playing)
+ if (!stop_flag)
{
seek_time = time;
+ playback->output->abort_write();
g_cond_signal (control_cond);
g_cond_wait (control_cond, control_mutex);
}
@@ -508,15 +471,15 @@ Tuple* ModplugXMMS::GetSongTuple(const string& aFilename)
case MOD_TYPE_PSM: tmps = "Protracker Studio Module"; break;
default: tmps = "ModPlug unknown"; break;
}
- tuple_associate_string(ti, FIELD_CODEC, NULL, tmps);
- tuple_associate_string(ti, FIELD_QUALITY, NULL, "sequenced");
- tuple_associate_int(ti, FIELD_LENGTH, NULL, lSoundFile->GetSongTime() * 1000);
+ tuple_set_str(ti, FIELD_CODEC, NULL, tmps);
+ tuple_set_str(ti, FIELD_QUALITY, NULL, "sequenced");
+ tuple_set_int(ti, FIELD_LENGTH, NULL, lSoundFile->GetSongTime() * 1000);
gchar *tmps2 = MODPLUG_CONVERT(lSoundFile->GetTitle());
// Chop any leading spaces off. They are annoying in the playlist.
gchar *tmps3 = tmps2; // Make another pointer so tmps2 can still be free()d
while ( *tmps3 == ' ' ) tmps3++ ;
- tuple_associate_string(ti, FIELD_TITLE, NULL, tmps3);
+ tuple_set_str(ti, FIELD_TITLE, NULL, tmps3);
g_free(tmps2);
//unload the file
@@ -546,7 +509,6 @@ const char* ModplugXMMS::Bool2OnOff(bool aValue)
void ModplugXMMS::SetModProps(const Settings& aModProps)
{
- mcs_handle_t *db;
mModProps = aModProps;
// [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
@@ -597,32 +559,28 @@ void ModplugXMMS::SetModProps(const Settings& aModProps)
CSoundFile::SetResamplingMode(mModProps.mResamplingMode);
mPreampFactor = exp(mModProps.mPreampLevel);
- db = aud_cfg_db_open();
-
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"Surround", mModProps.mSurround);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"Oversampling", mModProps.mOversamp);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"Megabass", mModProps.mMegabass);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"NoiseReduction", mModProps.mNoiseReduction);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"VolumeRamp", mModProps.mVolumeRamp);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"Reverb", mModProps.mReverb);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"FastInfo", mModProps.mFastinfo);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"UseFileName", mModProps.mUseFilename);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"GrabAmigaMOD", mModProps.mGrabAmigaMOD);
- aud_cfg_db_set_bool(db, MODPLUG_CFGID,"PreAmp", mModProps.mPreamp);
- aud_cfg_db_set_float(db, MODPLUG_CFGID,"PreAmpLevel", mModProps.mPreampLevel);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "Channels", mModProps.mChannels);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "Bits", mModProps.mBits);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "Frequency", mModProps.mFrequency);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "ResamplineMode", mModProps.mResamplingMode);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "ReverbDepth", mModProps.mReverbDepth);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "ReverbDelay", mModProps.mReverbDelay);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "BassAmount", mModProps.mBassAmount);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "BassRange", mModProps.mBassRange);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "SurroundDepth", mModProps.mSurroundDepth);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "SurroundDelay", mModProps.mSurroundDelay);
- aud_cfg_db_set_int(db, MODPLUG_CFGID, "LoopCount", mModProps.mLoopCount);
-
- aud_cfg_db_close(db);
+ aud_set_bool (MODPLUG_CFGID, "Surround", mModProps.mSurround);
+ aud_set_bool (MODPLUG_CFGID, "Oversampling", mModProps.mOversamp);
+ aud_set_bool (MODPLUG_CFGID, "Megabass", mModProps.mMegabass);
+ aud_set_bool (MODPLUG_CFGID, "NoiseReduction", mModProps.mNoiseReduction);
+ aud_set_bool (MODPLUG_CFGID, "VolumeRamp", mModProps.mVolumeRamp);
+ aud_set_bool (MODPLUG_CFGID, "Reverb", mModProps.mReverb);
+ aud_set_bool (MODPLUG_CFGID, "FastInfo", mModProps.mFastinfo);
+ aud_set_bool (MODPLUG_CFGID, "UseFileName", mModProps.mUseFilename);
+ aud_set_bool (MODPLUG_CFGID, "GrabAmigaMOD", mModProps.mGrabAmigaMOD);
+ aud_set_bool (MODPLUG_CFGID, "PreAmp", mModProps.mPreamp);
+ aud_set_double (MODPLUG_CFGID, "PreAmpLevel", mModProps.mPreampLevel);
+ aud_set_int (MODPLUG_CFGID, "Channels", mModProps.mChannels);
+ aud_set_int (MODPLUG_CFGID, "Bits", mModProps.mBits);
+ aud_set_int (MODPLUG_CFGID, "Frequency", mModProps.mFrequency);
+ aud_set_int (MODPLUG_CFGID, "ResamplineMode", mModProps.mResamplingMode);
+ aud_set_int (MODPLUG_CFGID, "ReverbDepth", mModProps.mReverbDepth);
+ aud_set_int (MODPLUG_CFGID, "ReverbDelay", mModProps.mReverbDelay);
+ aud_set_int (MODPLUG_CFGID, "BassAmount", mModProps.mBassAmount);
+ aud_set_int (MODPLUG_CFGID, "BassRange", mModProps.mBassRange);
+ aud_set_int (MODPLUG_CFGID, "SurroundDepth", mModProps.mSurroundDepth);
+ aud_set_int (MODPLUG_CFGID, "SurroundDelay", mModProps.mSurroundDelay);
+ aud_set_int (MODPLUG_CFGID, "LoopCount", mModProps.mLoopCount);
}
ModplugXMMS gModplugXMMS;
diff --git a/src/modplug/modplugbmp.h b/src/modplug/modplugbmp.h
index 45fd2a6..539d9a6 100644
--- a/src/modplug/modplugbmp.h
+++ b/src/modplug/modplugbmp.h
@@ -73,8 +73,6 @@ public:
gint mSurroundDelay;
gfloat mPreampLevel;
gint mLoopCount;
-
- Settings();
};
ModplugXMMS();
@@ -87,8 +85,8 @@ public:
bool PlayFile(const string& aFilename, InputPlayback *data);// Play the file.
void Stop(InputPlayback *data); // Stop playing.
- void mseek (InputPlayback * playback, gulong time);
- void pause (InputPlayback * playback, gshort paused);
+ void mseek (InputPlayback * playback, gint time);
+ void pause (InputPlayback * playback, gboolean paused);
Tuple* GetSongTuple(const string& aFilename);
diff --git a/src/modplug/plugin.cxx b/src/modplug/plugin.cxx
index d2b244b..4f3ffcd 100644
--- a/src/modplug/plugin.cxx
+++ b/src/modplug/plugin.cxx
@@ -4,20 +4,18 @@
* This source code is public domain.
*/
-// #define AUD_DEBUG 1
-
-#include "gui/main.h"
+#include "modplugbmp.h"
extern "C" {
#include <audacious/debug.h>
#include <audacious/plugin.h>
+extern InputPlugin _aud_plugin_self;
-extern InputPlugin gModPlug;
-
-void Init(void)
+gboolean Init (void)
{
- gModplugXMMS.SetInputPlugin(gModPlug);
+ gModplugXMMS.SetInputPlugin (_aud_plugin_self);
gModplugXMMS.Init();
+ return TRUE;
}
gint CanPlayFileFromVFS(const char* aFilename, VFSFile *VFSFile)
@@ -30,8 +28,7 @@ gint CanPlayFileFromVFS(const char* aFilename, VFSFile *VFSFile)
gboolean PlayFile(InputPlayback * data, const gchar * filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
- char* aFilename = data->filename;
- return gModplugXMMS.PlayFile(aFilename, data);
+ return gModplugXMMS.PlayFile(filename, data);
}
void Stop(InputPlayback *data)
@@ -39,34 +36,19 @@ void Stop(InputPlayback *data)
gModplugXMMS.Stop(data);
}
-void Pause (InputPlayback * playback, gshort paused)
+void Pause (InputPlayback * playback, gboolean pause)
{
- gModplugXMMS.pause (playback, paused);
+ gModplugXMMS.pause (playback, pause);
}
-void mseek (InputPlayback * playback, gulong time)
+void mseek (InputPlayback * playback, gint time)
{
gModplugXMMS.mseek (playback, time);
}
-Tuple* GetSongTuple(const gchar* aFilename)
+Tuple* GetSongTuple(const gchar* aFilename, VFSFile *fd)
{
return gModplugXMMS.GetSongTuple(aFilename);
}
-void ShowAboutBox(void)
-{
- ShowAboutWindow();
-}
-
-void ShowConfigureBox(void)
-{
- ShowConfigureWindow(gModplugXMMS.GetModProps());
-}
-
-void ShowFileInfoBox(const gchar* aFilename)
-{
- ShowInfoWindow(aFilename);
-}
-
}
diff --git a/src/modplug/plugin_main.c b/src/modplug/plugin_main.c
index 1fd77c9..b61e581 100644
--- a/src/modplug/plugin_main.c
+++ b/src/modplug/plugin_main.c
@@ -1,14 +1,15 @@
+#include <glib.h>
#include <audacious/plugin.h>
-void Init(void);
+gboolean Init (void);
void ShowAboutBox(void);
void ShowConfigureBox(void);
gboolean PlayFile(InputPlayback * data, const gchar * filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause);
void Stop(InputPlayback *data);
-void Pause(InputPlayback *data, gshort aPaused);
-void mseek (InputPlayback * playback, gulong time);
+void Pause(InputPlayback *data, gboolean pause);
+void mseek (InputPlayback * playback, gint time);
void ShowFileInfoBox(const gchar* aFilename);
-Tuple* GetSongTuple(const gchar* aFilename);
+Tuple* GetSongTuple(const gchar* aFilename, VFSFile *fd);
gint CanPlayFileFromVFS(const gchar* aFilename, VFSFile *VFSFile);
static const gchar *fmts[] =
@@ -16,23 +17,16 @@ static const gchar *fmts[] =
"mod", "s3m", "dmf", "umx", "it", "669", "xm", "mtm", "psm", "ft2",
NULL };
-InputPlugin gModPlug =
-{
- .description = "ModPlug Audio Plugin",
+AUD_INPUT_PLUGIN
+(
+ .name = "ModPlug",
.init = Init,
- .about = ShowAboutBox,
- .configure = ShowConfigureBox,
.play = PlayFile,
.stop = Stop,
.pause = Pause,
.mseek = mseek,
- .file_info_box = ShowFileInfoBox,
- .get_song_tuple = GetSongTuple,
+ .probe_for_tuple = GetSongTuple,
.is_our_file_from_vfs = CanPlayFileFromVFS,
- .vfs_extensions = fmts,
+ .extensions = fmts,
.have_subtune = TRUE, // to exclude .zip etc which doesn't contain any mod file --yaz
-};
-
-InputPlugin *modplug_iplist[] = { &gModPlug, NULL };
-
-SIMPLE_INPUT_PLUGIN(modplug, modplug_iplist);
+)
diff --git a/src/modplug/snd_dsp.cxx b/src/modplug/snd_dsp.cxx
deleted file mode 100755
index 9d843cd..0000000
--- a/src/modplug/snd_dsp.cxx
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-#ifdef MODPLUG_FASTSOUNDLIB
-#define MODPLUG_NO_REVERB
-#endif
-
-
-// Delayed Surround Filters
-#ifndef MODPLUG_FASTSOUNDLIB
-#define nDolbyHiFltAttn 6
-#define nDolbyHiFltMask 3
-#define DOLBYATTNROUNDUP 31
-#else
-#define nDolbyHiFltAttn 3
-#define nDolbyHiFltMask 3
-#define DOLBYATTNROUNDUP 3
-#endif
-
-// Bass Expansion
-#define XBASS_DELAY 14 // 2.5 ms
-
-// Buffer Sizes
-#define XBASSBUFFERSIZE 64 // 2 ms at 50KHz
-#define FILTERBUFFERSIZE 64 // 1.25 ms
-#define SURROUNDBUFFERSIZE ((MAX_SAMPLE_RATE * 50) / 1000)
-#define REVERBBUFFERSIZE ((MAX_SAMPLE_RATE * 200) / 1000)
-#define REVERBBUFFERSIZE2 ((REVERBBUFFERSIZE*13) / 17)
-#define REVERBBUFFERSIZE3 ((REVERBBUFFERSIZE*7) / 13)
-#define REVERBBUFFERSIZE4 ((REVERBBUFFERSIZE*7) / 19)
-
-
-// DSP Effects: PUBLIC members
-UINT CSoundFile::m_nXBassDepth = 6;
-UINT CSoundFile::m_nXBassRange = XBASS_DELAY;
-UINT CSoundFile::m_nReverbDepth = 1;
-UINT CSoundFile::m_nReverbDelay = 100;
-UINT CSoundFile::m_nProLogicDepth = 12;
-UINT CSoundFile::m_nProLogicDelay = 20;
-
-void (*CSoundFile::_midi_out_note)(int chan, const MODCOMMAND *m) = NULL;
-void (*CSoundFile::_midi_out_raw)(unsigned char *,unsigned int, unsigned int) = NULL;
-
-////////////////////////////////////////////////////////////////////
-// DSP Effects internal state
-
-// Bass Expansion: low-pass filter
-static LONG nXBassSum = 0;
-static LONG nXBassBufferPos = 0;
-static LONG nXBassDlyPos = 0;
-static LONG nXBassMask = 0;
-
-// Noise Reduction: simple low-pass filter
-static LONG nLeftNR = 0;
-static LONG nRightNR = 0;
-
-// Surround Encoding: 1 delay line + low-pass filter + high-pass filter
-static LONG nSurroundSize = 0;
-static LONG nSurroundPos = 0;
-static LONG nDolbyDepth = 0;
-static LONG nDolbyLoDlyPos = 0;
-static LONG nDolbyLoFltPos = 0;
-static LONG nDolbyLoFltSum = 0;
-static LONG nDolbyHiFltPos = 0;
-static LONG nDolbyHiFltSum = 0;
-
-// Reverb: 4 delay lines + high-pass filter + low-pass filter
-#ifndef MODPLUG_NO_REVERB
-static LONG nReverbSize = 0;
-static LONG nReverbBufferPos = 0;
-static LONG nReverbSize2 = 0;
-static LONG nReverbBufferPos2 = 0;
-static LONG nReverbSize3 = 0;
-static LONG nReverbBufferPos3 = 0;
-static LONG nReverbSize4 = 0;
-static LONG nReverbBufferPos4 = 0;
-static LONG nReverbLoFltSum = 0;
-static LONG nReverbLoFltPos = 0;
-static LONG nReverbLoDlyPos = 0;
-static LONG nFilterAttn = 0;
-static LONG gRvbLowPass[8];
-static LONG gRvbLPPos = 0;
-static LONG gRvbLPSum = 0;
-static LONG ReverbLoFilterBuffer[XBASSBUFFERSIZE];
-static LONG ReverbLoFilterDelay[XBASSBUFFERSIZE];
-static LONG ReverbBuffer[REVERBBUFFERSIZE];
-static LONG ReverbBuffer2[REVERBBUFFERSIZE2];
-static LONG ReverbBuffer3[REVERBBUFFERSIZE3];
-static LONG ReverbBuffer4[REVERBBUFFERSIZE4];
-#endif
-static LONG XBassBuffer[XBASSBUFFERSIZE];
-static LONG XBassDelay[XBASSBUFFERSIZE];
-static LONG DolbyLoFilterBuffer[XBASSBUFFERSIZE];
-static LONG DolbyLoFilterDelay[XBASSBUFFERSIZE];
-static LONG DolbyHiFilterBuffer[FILTERBUFFERSIZE];
-static LONG SurroundBuffer[SURROUNDBUFFERSIZE];
-
-// Access the main temporary mix buffer directly: avoids an extra pointer
-extern int MixSoundBuffer[MIXBUFFERSIZE*2];
-//cextern int MixReverbBuffer[MIXBUFFERSIZE*2];
-extern int MixReverbBuffer[MIXBUFFERSIZE*2];
-
-static UINT GetMaskFromSize(UINT len)
-//-----------------------------------
-{
- UINT n = 2;
- while (n <= len) n <<= 1;
- return ((n >> 1) - 1);
-}
-
-
-void CSoundFile::InitializeDSP(BOOL bReset)
-//-----------------------------------------
-{
- if (!m_nReverbDelay) m_nReverbDelay = 100;
- if (!m_nXBassRange) m_nXBassRange = XBASS_DELAY;
- if (!m_nProLogicDelay) m_nProLogicDelay = 20;
- if (m_nXBassDepth > 8) m_nXBassDepth = 8;
- if (m_nXBassDepth < 2) m_nXBassDepth = 2;
- if (bReset)
- {
- // Noise Reduction
- nLeftNR = nRightNR = 0;
- }
- // Pro-Logic Surround
- nSurroundPos = nSurroundSize = 0;
- nDolbyLoFltPos = nDolbyLoFltSum = nDolbyLoDlyPos = 0;
- nDolbyHiFltPos = nDolbyHiFltSum = 0;
- if (gdwSoundSetup & SNDMIX_SURROUND)
- {
- memset(DolbyLoFilterBuffer, 0, sizeof(DolbyLoFilterBuffer));
- memset(DolbyHiFilterBuffer, 0, sizeof(DolbyHiFilterBuffer));
- memset(DolbyLoFilterDelay, 0, sizeof(DolbyLoFilterDelay));
- memset(SurroundBuffer, 0, sizeof(SurroundBuffer));
- nSurroundSize = (gdwMixingFreq * m_nProLogicDelay) / 1000;
- if (nSurroundSize > SURROUNDBUFFERSIZE) nSurroundSize = SURROUNDBUFFERSIZE;
- if (m_nProLogicDepth < 8) nDolbyDepth = (32 >> m_nProLogicDepth) + 32;
- else nDolbyDepth = (m_nProLogicDepth < 16) ? (8 + (m_nProLogicDepth - 8) * 7) : 64;
- nDolbyDepth >>= 2;
- }
- // Reverb Setup
-#ifndef MODPLUG_NO_REVERB
- if (gdwSoundSetup & SNDMIX_REVERB)
- {
- UINT nrs = (gdwMixingFreq * m_nReverbDelay) / 1000;
- UINT nfa = m_nReverbDepth+1;
- if (nrs > REVERBBUFFERSIZE) nrs = REVERBBUFFERSIZE;
- if ((bReset) || (nrs != (UINT)nReverbSize) || (nfa != (UINT)nFilterAttn))
- {
- nFilterAttn = nfa;
- nReverbSize = nrs;
- nReverbBufferPos = nReverbBufferPos2 = nReverbBufferPos3 = nReverbBufferPos4 = 0;
- nReverbLoFltSum = nReverbLoFltPos = nReverbLoDlyPos = 0;
- gRvbLPSum = gRvbLPPos = 0;
- nReverbSize2 = (nReverbSize * 13) / 17;
- if (nReverbSize2 > REVERBBUFFERSIZE2) nReverbSize2 = REVERBBUFFERSIZE2;
- nReverbSize3 = (nReverbSize * 7) / 13;
- if (nReverbSize3 > REVERBBUFFERSIZE3) nReverbSize3 = REVERBBUFFERSIZE3;
- nReverbSize4 = (nReverbSize * 7) / 19;
- if (nReverbSize4 > REVERBBUFFERSIZE4) nReverbSize4 = REVERBBUFFERSIZE4;
- memset(ReverbLoFilterBuffer, 0, sizeof(ReverbLoFilterBuffer));
- memset(ReverbLoFilterDelay, 0, sizeof(ReverbLoFilterDelay));
- memset(ReverbBuffer, 0, sizeof(ReverbBuffer));
- memset(ReverbBuffer2, 0, sizeof(ReverbBuffer2));
- memset(ReverbBuffer3, 0, sizeof(ReverbBuffer3));
- memset(ReverbBuffer4, 0, sizeof(ReverbBuffer4));
- memset(gRvbLowPass, 0, sizeof(gRvbLowPass));
-/* mrsb: libmodplug bug hahahah */
- memset(MixSoundBuffer,0,sizeof(MixSoundBuffer));
- memset(MixReverbBuffer,0,sizeof(MixReverbBuffer));
- }
- } else nReverbSize = 0;
-#endif
- BOOL bResetBass = FALSE;
- // Bass Expansion Reset
- if (gdwSoundSetup & SNDMIX_MEGABASS)
- {
- UINT nXBassSamples = (gdwMixingFreq * m_nXBassRange) / 10000;
- if (nXBassSamples > XBASSBUFFERSIZE) nXBassSamples = XBASSBUFFERSIZE;
- UINT mask = GetMaskFromSize(nXBassSamples);
- if ((bReset) || (mask != (UINT)nXBassMask))
- {
- nXBassMask = mask;
- bResetBass = TRUE;
- }
- } else
- {
- nXBassMask = 0;
- bResetBass = TRUE;
- }
- if (bResetBass)
- {
- nXBassSum = nXBassBufferPos = nXBassDlyPos = 0;
- memset(XBassBuffer, 0, sizeof(XBassBuffer));
- memset(XBassDelay, 0, sizeof(XBassDelay));
- }
-}
-
-
-void CSoundFile::ProcessStereoDSP(int count)
-//------------------------------------------
-{
-#ifndef MODPLUG_NO_REVERB
- // Reverb
- if (gdwSoundSetup & SNDMIX_REVERB)
- {
- int *pr = MixSoundBuffer, *pin = MixReverbBuffer, rvbcount = count;
- do
- {
- int echo = ReverbBuffer[nReverbBufferPos] + ReverbBuffer2[nReverbBufferPos2]
- + ReverbBuffer3[nReverbBufferPos3] + ReverbBuffer4[nReverbBufferPos4]; // echo = reverb signal
- // Delay line and remove Low Frequencies // v = original signal
- int echodly = ReverbLoFilterDelay[nReverbLoDlyPos]; // echodly = delayed signal
- ReverbLoFilterDelay[nReverbLoDlyPos] = echo >> 1;
- nReverbLoDlyPos++;
- nReverbLoDlyPos &= 0x1F;
- int n = nReverbLoFltPos;
- nReverbLoFltSum -= ReverbLoFilterBuffer[n];
- int tmp = echo / 128;
- ReverbLoFilterBuffer[n] = tmp;
- nReverbLoFltSum += tmp;
- echodly -= nReverbLoFltSum;
- nReverbLoFltPos = (n + 1) & 0x3F;
- // Reverb
- int v = (pin[0]+pin[1]) >> nFilterAttn;
- pr[0] += pin[0] + echodly;
- pr[1] += pin[1] + echodly;
- v += echodly >> 2;
- ReverbBuffer3[nReverbBufferPos3] = v;
- ReverbBuffer4[nReverbBufferPos4] = v;
- v += echodly >> 4;
- v >>= 1;
- gRvbLPSum -= gRvbLowPass[gRvbLPPos];
- gRvbLPSum += v;
- gRvbLowPass[gRvbLPPos] = v;
- gRvbLPPos++;
- gRvbLPPos &= 7;
- int vlp = gRvbLPSum >> 2;
- ReverbBuffer[nReverbBufferPos] = vlp;
- ReverbBuffer2[nReverbBufferPos2] = vlp;
- if (++nReverbBufferPos >= nReverbSize) nReverbBufferPos = 0;
- if (++nReverbBufferPos2 >= nReverbSize2) nReverbBufferPos2 = 0;
- if (++nReverbBufferPos3 >= nReverbSize3) nReverbBufferPos3 = 0;
- if (++nReverbBufferPos4 >= nReverbSize4) nReverbBufferPos4 = 0;
- pr += 2;
- pin += 2;
- } while (--rvbcount);
- }
-#endif
- // Dolby Pro-Logic Surround
- if (gdwSoundSetup & SNDMIX_SURROUND)
- {
- int *pr = MixSoundBuffer, n = nDolbyLoFltPos;
- for (int r=count; r; r--)
- {
- int v = (pr[0]+pr[1]+DOLBYATTNROUNDUP) >> (nDolbyHiFltAttn+1);
-#ifndef MODPLUG_FASTSOUNDLIB
- v *= (int)nDolbyDepth;
-#endif
- // Low-Pass Filter
- nDolbyHiFltSum -= DolbyHiFilterBuffer[nDolbyHiFltPos];
- DolbyHiFilterBuffer[nDolbyHiFltPos] = v;
- nDolbyHiFltSum += v;
- v = nDolbyHiFltSum;
- nDolbyHiFltPos++;
- nDolbyHiFltPos &= nDolbyHiFltMask;
- // Surround
- int secho = SurroundBuffer[nSurroundPos];
- SurroundBuffer[nSurroundPos] = v;
- // Delay line and remove low frequencies
- v = DolbyLoFilterDelay[nDolbyLoDlyPos]; // v = delayed signal
- DolbyLoFilterDelay[nDolbyLoDlyPos] = secho; // secho = signal
- nDolbyLoDlyPos++;
- nDolbyLoDlyPos &= 0x1F;
- nDolbyLoFltSum -= DolbyLoFilterBuffer[n];
- int tmp = secho / 64;
- DolbyLoFilterBuffer[n] = tmp;
- nDolbyLoFltSum += tmp;
- v -= nDolbyLoFltSum;
- n++;
- n &= 0x3F;
- // Add echo
- pr[0] += v;
- pr[1] -= v;
- if (++nSurroundPos >= nSurroundSize) nSurroundPos = 0;
- pr += 2;
- }
- nDolbyLoFltPos = n;
- }
- // Bass Expansion
- if (gdwSoundSetup & SNDMIX_MEGABASS)
- {
- int *px = MixSoundBuffer;
- int xba = m_nXBassDepth+1, xbamask = (1 << xba) - 1;
- int n = nXBassBufferPos;
- for (int x=count; x; x--)
- {
- nXBassSum -= XBassBuffer[n];
- int tmp0 = px[0] + px[1];
- int tmp = (tmp0 + ((tmp0 >> 31) & xbamask)) >> xba;
- XBassBuffer[n] = tmp;
- nXBassSum += tmp;
- int v = XBassDelay[nXBassDlyPos];
- XBassDelay[nXBassDlyPos] = px[0];
- px[0] = v + nXBassSum;
- v = XBassDelay[nXBassDlyPos+1];
- XBassDelay[nXBassDlyPos+1] = px[1];
- px[1] = v + nXBassSum;
- nXBassDlyPos = (nXBassDlyPos + 2) & nXBassMask;
- px += 2;
- n++;
- n &= nXBassMask;
- }
- nXBassBufferPos = n;
- }
- // Noise Reduction
- if (gdwSoundSetup & SNDMIX_NOISEREDUCTION)
- {
- int n1 = nLeftNR, n2 = nRightNR;
- int *pnr = MixSoundBuffer;
- for (int nr=count; nr; nr--)
- {
- int vnr = pnr[0] >> 1;
- pnr[0] = vnr + n1;
- n1 = vnr;
- vnr = pnr[1] >> 1;
- pnr[1] = vnr + n2;
- n2 = vnr;
- pnr += 2;
- }
- nLeftNR = n1;
- nRightNR = n2;
- }
-}
-
-
-void CSoundFile::ProcessMonoDSP(int count)
-//----------------------------------------
-{
-#ifndef MODPLUG_NO_REVERB
- // Reverb
- if (gdwSoundSetup & SNDMIX_REVERB)
- {
- int *pr = MixSoundBuffer, rvbcount = count, *pin = MixReverbBuffer;
- do
- {
- int echo = ReverbBuffer[nReverbBufferPos] + ReverbBuffer2[nReverbBufferPos2]
- + ReverbBuffer3[nReverbBufferPos3] + ReverbBuffer4[nReverbBufferPos4]; // echo = reverb signal
- // Delay line and remove Low Frequencies // v = original signal
- int echodly = ReverbLoFilterDelay[nReverbLoDlyPos]; // echodly = delayed signal
- ReverbLoFilterDelay[nReverbLoDlyPos] = echo >> 1;
- nReverbLoDlyPos++;
- nReverbLoDlyPos &= 0x1F;
- int n = nReverbLoFltPos;
- nReverbLoFltSum -= ReverbLoFilterBuffer[n];
- int tmp = echo / 128;
- ReverbLoFilterBuffer[n] = tmp;
- nReverbLoFltSum += tmp;
- echodly -= nReverbLoFltSum;
- nReverbLoFltPos = (n + 1) & 0x3F;
- // Reverb
- int v = pin[0] >> (nFilterAttn-1);
- *pr++ += pin[0] + echodly;
- pin++;
- v += echodly >> 2;
- ReverbBuffer3[nReverbBufferPos3] = v;
- ReverbBuffer4[nReverbBufferPos4] = v;
- v += echodly >> 4;
- v >>= 1;
- gRvbLPSum -= gRvbLowPass[gRvbLPPos];
- gRvbLPSum += v;
- gRvbLowPass[gRvbLPPos] = v;
- gRvbLPPos++;
- gRvbLPPos &= 7;
- int vlp = gRvbLPSum >> 2;
- ReverbBuffer[nReverbBufferPos] = vlp;
- ReverbBuffer2[nReverbBufferPos2] = vlp;
- if (++nReverbBufferPos >= nReverbSize) nReverbBufferPos = 0;
- if (++nReverbBufferPos2 >= nReverbSize2) nReverbBufferPos2 = 0;
- if (++nReverbBufferPos3 >= nReverbSize3) nReverbBufferPos3 = 0;
- if (++nReverbBufferPos4 >= nReverbSize4) nReverbBufferPos4 = 0;
- } while (--rvbcount);
- }
-#endif
- // Bass Expansion
- if (gdwSoundSetup & SNDMIX_MEGABASS)
- {
- int *px = MixSoundBuffer;
- int xba = m_nXBassDepth, xbamask = (1 << xba)-1;
- int n = nXBassBufferPos;
- for (int x=count; x; x--)
- {
- nXBassSum -= XBassBuffer[n];
- int tmp0 = *px;
- int tmp = (tmp0 + ((tmp0 >> 31) & xbamask)) >> xba;
- XBassBuffer[n] = tmp;
- nXBassSum += tmp;
- int v = XBassDelay[nXBassDlyPos];
- XBassDelay[nXBassDlyPos] = *px;
- *px++ = v + nXBassSum;
- nXBassDlyPos = (nXBassDlyPos + 2) & nXBassMask;
- n++;
- n &= nXBassMask;
- }
- nXBassBufferPos = n;
- }
- // Noise Reduction
- if (gdwSoundSetup & SNDMIX_NOISEREDUCTION)
- {
- int n = nLeftNR;
- int *pnr = MixSoundBuffer;
- for (int nr=count; nr; pnr++, nr--)
- {
- int vnr = *pnr >> 1;
- *pnr = vnr + n;
- n = vnr;
- }
- nLeftNR = n;
- }
-}
-
-
-/////////////////////////////////////////////////////////////////
-// Clean DSP Effects interface
-
-// [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
-BOOL CSoundFile::SetReverbParameters(UINT nDepth, UINT nDelay)
-//------------------------------------------------------------
-{
- if (nDepth > 100) nDepth = 100;
- UINT gain = nDepth / 20;
- if (gain > 4) gain = 4;
- m_nReverbDepth = 4 - gain;
- if (nDelay < 40) nDelay = 40;
- if (nDelay > 250) nDelay = 250;
- m_nReverbDelay = nDelay;
- return TRUE;
-}
-
-
-// [XBass level 0(quiet)-100(loud)], [cutoff in Hz 20-100]
-BOOL CSoundFile::SetXBassParameters(UINT nDepth, UINT nRange)
-//-----------------------------------------------------------
-{
- if (nDepth > 100) nDepth = 100;
- UINT gain = nDepth / 20;
- if (gain > 4) gain = 4;
- m_nXBassDepth = 8 - gain; // filter attenuation 1/256 .. 1/16
- UINT range = nRange / 5;
- if (range > 5) range -= 5; else range = 0;
- if (nRange > 16) nRange = 16;
- m_nXBassRange = 21 - range; // filter average on 0.5-1.6ms
- return TRUE;
-}
-
-
-// [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-50ms]
-BOOL CSoundFile::SetSurroundParameters(UINT nDepth, UINT nDelay)
-//--------------------------------------------------------------
-{
- UINT gain = (nDepth * 16) / 100;
- if (gain > 16) gain = 16;
- if (gain < 1) gain = 1;
- m_nProLogicDepth = gain;
- if (nDelay < 4) nDelay = 4;
- if (nDelay > 50) nDelay = 50;
- m_nProLogicDelay = nDelay;
- return TRUE;
-}
-
-BOOL CSoundFile::SetWaveConfigEx(BOOL bSurround,BOOL /*bNoOverSampling*/,BOOL bReverb,BOOL hqido,BOOL bMegaBass,BOOL bNR,BOOL bEQ)
-//----------------------------------------------------------------------------------------------------------------------------
-{
- DWORD d = gdwSoundSetup & ~(SNDMIX_SURROUND | SNDMIX_NORESAMPLING | SNDMIX_REVERB | SNDMIX_HQRESAMPLER | SNDMIX_MEGABASS | SNDMIX_NOISEREDUCTION | SNDMIX_EQ);
- if (bSurround) d |= SNDMIX_SURROUND;
-// if (bNoOverSampling) d |= SNDMIX_NORESAMPLING;
- if (bReverb) d |= SNDMIX_REVERB;
- if (hqido) d |= SNDMIX_HQRESAMPLER;
- if (bMegaBass) d |= SNDMIX_MEGABASS;
- if (bNR) d |= SNDMIX_NOISEREDUCTION;
- if (bEQ) d |= SNDMIX_EQ;
- gdwSoundSetup = d;
- InitPlayer(FALSE);
- return TRUE;
-}
diff --git a/src/modplug/snd_eq.cxx b/src/modplug/snd_eq.cxx
deleted file mode 100644
index d1448f0..0000000
--- a/src/modplug/snd_eq.cxx
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * This program is free software; you can redistribute it and 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.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
- *
- * Name Date Description
- *
- * Olivier Lapicque --/--/-- Creation
- * Trevor Nunes 26/01/04 conditional compilation for AMD,MMX calls
- *
-*/
-#include "stdafx.h"
-#include "sndfile.h"
-#include <math.h>
-
-
-#define EQ_BANDWIDTH 2.0
-#define EQ_ZERO 0.000001
-#define REAL float
-
-extern REAL MixFloatBuffer[];
-
-extern void StereoMixToFloat(const int *pSrc, float *pOut1, float *pOut2, UINT nCount);
-extern void FloatToStereoMix(const float *pIn1, const float *pIn2, int *pOut, UINT nCount);
-extern void MonoMixToFloat(const int *pSrc, float *pOut, UINT nCount);
-extern void FloatToMonoMix(const float *pIn, int *pOut, UINT nCount);
-
-typedef struct _EQBANDSTRUCT
-{
- REAL a0, a1, a2, b1, b2;
- REAL x1, x2, y1, y2;
- REAL Gain, CenterFrequency;
- BOOL bEnable;
-} EQBANDSTRUCT, *PEQBANDSTRUCT;
-
-UINT gEqLinearToDB[33] =
-{
- 16, 19, 22, 25, 28, 31, 34, 37,
- 40, 43, 46, 49, 52, 55, 58, 61,
- 64, 76, 88, 100, 112, 124, 136, 148,
- 160, 172, 184, 196, 208, 220, 232, 244, 256
-};
-
-
-//static REAL f2ic = (REAL)(1 << 28);
-//static REAL i2fc = (REAL)(1.0 / (1 << 28));
-
-static EQBANDSTRUCT gEQ[MAX_EQ_BANDS*2] =
-{
- // Default: Flat EQ
- {0,0,0,0,0, 0,0,0,0, 1, 120, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 600, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 1200, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 3000, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 6000, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 10000, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 120, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 600, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 1200, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 3000, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 6000, FALSE},
- {0,0,0,0,0, 0,0,0,0, 1, 10000, FALSE},
-};
-
-void EQFilter(EQBANDSTRUCT *pbs, REAL *pbuffer, UINT nCount)
-//----------------------------------------------------------
-{
- for (UINT i=0; i<nCount; i++)
- {
- REAL x = pbuffer[i];
- REAL y = pbs->a1 * pbs->x1 + pbs->a2 * pbs->x2 + pbs->a0 * x + pbs->b1 * pbs->y1 + pbs->b2 * pbs->y2;
- pbs->x2 = pbs->x1;
- pbs->y2 = pbs->y1;
- pbs->x1 = x;
- pbuffer[i] = y;
- pbs->y1 = y;
- }
-}
-
-void CSoundFile::EQMono(int *pbuffer, UINT nCount)
-//------------------------------------------------
-{
- MonoMixToFloat(pbuffer, MixFloatBuffer, nCount);
- for (UINT b=0; b<MAX_EQ_BANDS; b++)
- {
- if ((gEQ[b].bEnable) && (gEQ[b].Gain != 1.0f))
- EQFilter(&gEQ[b], MixFloatBuffer, nCount);
- }
- FloatToMonoMix(MixFloatBuffer, pbuffer, nCount);
-}
-
-void CSoundFile::EQStereo(int *pbuffer, UINT nCount)
-//--------------------------------------------------
-{
- StereoMixToFloat(pbuffer, MixFloatBuffer, MixFloatBuffer+MIXBUFFERSIZE, nCount);
-
- for (UINT bl=0; bl<MAX_EQ_BANDS; bl++)
- {
- if ((gEQ[bl].bEnable) && (gEQ[bl].Gain != 1.0f))
- EQFilter(&gEQ[bl], MixFloatBuffer, nCount);
- }
- for (UINT br=MAX_EQ_BANDS; br<MAX_EQ_BANDS*2; br++)
- {
- if ((gEQ[br].bEnable) && (gEQ[br].Gain != 1.0f))
- EQFilter(&gEQ[br], MixFloatBuffer+MIXBUFFERSIZE, nCount);
- }
-
- FloatToStereoMix(MixFloatBuffer, MixFloatBuffer+MIXBUFFERSIZE, pbuffer, nCount);
-
-}
-
-void CSoundFile::InitializeEQ(BOOL bReset)
-//----------------------------------------
-{
- REAL fMixingFreq = (REAL)gdwMixingFreq;
- // Gain = 0.5 (-6dB) .. 2 (+6dB)
- for (UINT band=0; band<MAX_EQ_BANDS*2; band++) if (gEQ[band].bEnable)
- {
- REAL k, k2, r, f;
- REAL v0, v1;
- BOOL b = bReset;
-
- f = gEQ[band].CenterFrequency / fMixingFreq;
- if (f > 0.45f) gEQ[band].Gain = 1;
- // if (f > 0.25) f = 0.25;
- // k = tan(PI*f);
- k = f * 3.141592654f;
- k = k + k*f;
-// if (k > (REAL)0.707) k = (REAL)0.707;
- k2 = k*k;
- v0 = gEQ[band].Gain;
- v1 = 1;
- if (gEQ[band].Gain < 1.0)
- {
- v0 *= (0.5f/EQ_BANDWIDTH);
- v1 *= (0.5f/EQ_BANDWIDTH);
- } else
- {
- v0 *= (1.0f/EQ_BANDWIDTH);
- v1 *= (1.0f/EQ_BANDWIDTH);
- }
- r = (1 + v0*k + k2) / (1 + v1*k + k2);
- if (r != gEQ[band].a0)
- {
- gEQ[band].a0 = r;
- b = TRUE;
- }
- r = 2 * (k2 - 1) / (1 + v1*k + k2);
- if (r != gEQ[band].a1)
- {
- gEQ[band].a1 = r;
- b = TRUE;
- }
- r = (1 - v0*k + k2) / (1 + v1*k + k2);
- if (r != gEQ[band].a2)
- {
- gEQ[band].a2 = r;
- b = TRUE;
- }
- r = - 2 * (k2 - 1) / (1 + v1*k + k2);
- if (r != gEQ[band].b1)
- {
- gEQ[band].b1 = r;
- b = TRUE;
- }
- r = - (1 - v1*k + k2) / (1 + v1*k + k2);
- if (r != gEQ[band].b2)
- {
- gEQ[band].b2 = r;
- b = TRUE;
- }
- if (b)
- {
- gEQ[band].x1 = 0;
- gEQ[band].x2 = 0;
- gEQ[band].y1 = 0;
- gEQ[band].y2 = 0;
- }
- } else
- {
- gEQ[band].a0 = 0;
- gEQ[band].a1 = 0;
- gEQ[band].a2 = 0;
- gEQ[band].b1 = 0;
- gEQ[band].b2 = 0;
- gEQ[band].x1 = 0;
- gEQ[band].x2 = 0;
- gEQ[band].y1 = 0;
- gEQ[band].y2 = 0;
- }
-}
-
-
-void CSoundFile::SetEQGains(const UINT *pGains, UINT nGains, const UINT *pFreqs, BOOL bReset)
-//-------------------------------------------------------------------------------------------
-{
- for (UINT i=0; i<MAX_EQ_BANDS; i++)
- {
- REAL g, f = 0;
- if (i < nGains)
- {
- UINT n = pGains[i];
-// if (n > 32) n = 32;
- g = 1.0 + (((double)n) / 64.0);
- if (pFreqs) f = (REAL)(int)pFreqs[i];
- } else
- {
- g = 1;
- }
- gEQ[i].Gain = g;
- gEQ[i].CenterFrequency = f;
- gEQ[i+MAX_EQ_BANDS].Gain = g;
- gEQ[i+MAX_EQ_BANDS].CenterFrequency = f;
- if (f > 20.0f && i < nGains) /* don't enable bands outside... */
- {
- gEQ[i].bEnable = TRUE;
- gEQ[i+MAX_EQ_BANDS].bEnable = TRUE;
- } else
- {
- gEQ[i].bEnable = FALSE;
- gEQ[i+MAX_EQ_BANDS].bEnable = FALSE;
- }
- }
- InitializeEQ(bReset);
-}
diff --git a/src/modplug/snd_flt.cxx b/src/modplug/snd_flt.cxx
deleted file mode 100755
index 57a6204..0000000
--- a/src/modplug/snd_flt.cxx
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-// AWE32: cutoff = reg[0-255] * 31.25 + 100 -> [100Hz-8060Hz]
-// EMU10K1 docs: cutoff = reg[0-127]*62+100
-
-#ifndef NO_FILTER
-
-static int filter_cutoff[] = {
- 130, 132, 134, 136, 138, 140, 142, 144,
- 146, 148, 151, 153, 155, 157, 160, 162,
- 164, 167, 169, 172, 174, 177, 179, 182,
- 184, 187, 190, 193, 195, 198, 201, 204,
- 207, 210, 213, 216, 220, 223, 226, 229,
- 233, 236, 239, 243, 246, 250, 254, 257,
- 261, 265, 269, 273, 277, 281, 285, 289,
- 293, 297, 302, 306, 311, 315, 320, 324,
- 329, 334, 339, 344, 349, 354, 359, 364,
- 369, 375, 380, 386, 391, 397, 403, 409,
- 415, 421, 427, 433, 440, 446, 452, 459,
- 466, 472, 479, 486, 493, 501, 508, 515,
- 523, 530, 538, 546, 554, 562, 570, 578,
- 587, 595, 604, 613, 622, 631, 640, 649,
- 659, 668, 678, 688, 698, 708, 718, 729,
- 739, 750, 761, 772, 783, 795, 806, 818,
- 830, 842, 854, 867, 880, 892, 905, 918,
- 932, 945, 959, 973, 987, 1002, 1016, 1031,
- 1046, 1061, 1077, 1092, 1108, 1124, 1141, 1157,
- 1174, 1191, 1209, 1226, 1244, 1262, 1280, 1299,
- 1318, 1337, 1357, 1376, 1396, 1417, 1437, 1458,
- 1479, 1501, 1523, 1545, 1567, 1590, 1613, 1637,
- 1661, 1685, 1709, 1734, 1760, 1785, 1811, 1837,
- 1864, 1891, 1919, 1947, 1975, 2004, 2033, 2062,
- 2093, 2123, 2154, 2185, 2217, 2249, 2282, 2315,
- 2349, 2383, 2418, 2453, 2489, 2525, 2561, 2599,
- 2637, 2675, 2714, 2753, 2793, 2834, 2875, 2917,
- 2959, 3003, 3046, 3091, 3135, 3181, 3227, 3274,
- 3322, 3370, 3419, 3469, 3520, 3571, 3623, 3675,
- 3729, 3783, 3838, 3894, 3951, 4008, 4066, 4125,
- 4186, 4246, 4308, 4371, 4434, 4499, 4564, 4631,
- 4698, 4766, 4836, 4906, 4978, 5050, 5123, 5198
-};
-int dmpfac[] = {
- 131072, 128272, 125533, 122852, 120229, 117661, 115148, 112689,
- 110283, 107928, 105623, 103367, 101160, 98999, 96885, 94816,
- 92791, 90810, 88870, 86973, 85115, 83298, 81519, 79778,
- 78074, 76407, 74775, 73178, 71615, 70086, 68589, 67125,
- 65691, 64288, 62915, 61572, 60257, 58970, 57711, 56478,
- 55272, 54092, 52937, 51806, 50700, 49617, 48557, 47520,
- 46506, 45512, 44540, 43589, 42658, 41747, 40856, 39983,
- 39130, 38294, 37476, 36676, 35893, 35126, 34376, 33642,
- 32923, 32220, 31532, 30859, 30200, 29555, 28924, 28306,
- 27701, 27110, 26531, 25964, 25410, 24867, 24336, 23816,
- 23308, 22810, 22323, 21846, 21380, 20923, 20476, 20039,
- 19611, 19192, 18782, 18381, 17989, 17604, 17228, 16861,
- 16500, 16148, 15803, 15466, 15135, 14812, 14496, 14186,
- 13883, 13587, 13297, 13013, 12735, 12463, 12197, 11936,
- 11681, 11432, 11188, 10949, 10715, 10486, 10262, 10043,
- 9829, 9619, 9413, 9212, 9015, 8823, 8634, 8450,
- 8270, 8093, 7920, 7751, 7585, 7423, 7265, 7110,
- 6958, 6809, 6664, 6522, 6382, 6246, 6113, 5982,
- 5854, 5729, 5607, 5487, 5370, 5255, 5143, 5033,
- 4926, 4820, 4718, 4617, 4518, 4422, 4327, 4235,
- 4144, 4056, 3969, 3884, 3801, 3720, 3641, 3563,
- 3487, 3412, 3340, 3268, 3198, 3130, 3063, 2998,
- 2934, 2871, 2810, 2750, 2691, 2634, 2577, 2522,
- 2468, 2416, 2364, 2314, 2264, 2216, 2169, 2122,
- 2077, 2032, 1989, 1947, 1905, 1864, 1824, 1786,
- 1747, 1710, 1674, 1638, 1603, 1569, 1535, 1502,
- 1470, 1439, 1408, 1378, 1348, 1320, 1291, 1264,
- 1237, 1210, 1185, 1159, 1135, 1110, 1087, 1063,
- 1041, 1018, 997, 975, 955, 934, 914, 895,
- 876, 857, 838, 821, 803, 786, 769, 753,
- 737, 721, 705, 690, 676, 661, 647, 633,
- 620, 606, 593, 581, 568, 556, 544, 533
-};
-
-
-#include <math.h>
-
-
-#define PI ((double)3.14159265358979323846)
-// Simple 2-poles resonant filter
-void CSoundFile::SetupChannelFilter(MODCHANNEL *pChn, BOOL bReset, int flt_modifier, int) const
-//----------------------------------------------------------------------------------------
-{
- int cutoff = pChn->nCutOff * 2;
- cutoff *= (flt_modifier+256) / 2;
- cutoff /= 256;
- if (cutoff>=255) cutoff=255;
-
- int resonance = pChn->nResonance;
- if (resonance>=255) resonance=255;
-
- float fc = (float)filter_cutoff[cutoff];
- float fs = (float)gdwMixingFreq;
- float fg, fb0, fb1;
- float d2, d, e;
-
- fc *= 3.14159265358979 * 2 / fs;
- d2 = ((float)dmpfac[resonance]) / 65536.0;
- d = (1.0 - d2) * fc;
-
- if (d > 2.0)
- d = 2.0;
-
- d = (d2 - d) / fc;
- e = 1.0 / (fc * fc);
-
- fg = 1.0 / (1 + d + e);
- fb0 = (d + e + e) / (1 + d + e);
- fb1 = -e / (1 + d + e);
-
- pChn->nFilter_A0 = (double)fg;
- pChn->nFilter_B0 = (double)fb0;
- pChn->nFilter_B1 = (double)fb1;
-
- if (bReset) {
- pChn->nFilter_Y1 = pChn->nFilter_Y2 = 0;
- pChn->nFilter_Y3 = pChn->nFilter_Y4 = 0;
- }
- pChn->dwFlags |= CHN_FILTER;
-}
-#endif // NO_FILTER
diff --git a/src/modplug/snd_fx.cxx b/src/modplug/snd_fx.cxx
deleted file mode 100755
index 09795a6..0000000
--- a/src/modplug/snd_fx.cxx
+++ /dev/null
@@ -1,2614 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-#ifdef MSC_VER
-#pragma warning(disable:4244)
-#endif
-
-// Tables defined in tables.cpp
-extern BYTE ImpulseTrackerPortaVolCmd[16];
-extern WORD S3MFineTuneTable[16];
-extern WORD ProTrackerPeriodTable[6*12];
-extern WORD ProTrackerTunedPeriods[15*12];
-extern WORD FreqS3MTable[];
-extern WORD XMPeriodTable[96+8];
-extern UINT XMLinearTable[768];
-extern DWORD FineLinearSlideUpTable[16];
-extern DWORD FineLinearSlideDownTable[16];
-extern DWORD LinearSlideUpTable[256];
-extern DWORD LinearSlideDownTable[256];
-extern signed char retrigTable1[16];
-extern signed char retrigTable2[16];
-extern short int ModRandomTable[64];
-
-
-////////////////////////////////////////////////////////////
-// Length
-
-DWORD CSoundFile::GetLength(BOOL bAdjust, BOOL bTotal)
-//----------------------------------------------------
-{
- UINT dwElapsedTime=0, nRow=0, nCurrentPattern=0, nNextPattern=0, nPattern=Order[0];
- UINT nMusicSpeed=m_nDefaultSpeed, nMusicTempo=m_nDefaultTempo, nNextRow=0;
- UINT nMaxRow = 0, nMaxPattern = 0;
- LONG nGlbVol = m_nDefaultGlobalVolume, nOldGlbVolSlide = 0;
- BYTE samples[MAX_CHANNELS];
- BYTE instr[MAX_CHANNELS];
- BYTE notes[MAX_CHANNELS];
- BYTE vols[MAX_CHANNELS];
- BYTE oldparam[MAX_CHANNELS];
- BYTE chnvols[MAX_CHANNELS];
- DWORD patloop[MAX_CHANNELS];
-
- memset(instr, 0, sizeof(instr));
- memset(notes, 0, sizeof(notes));
- memset(vols, 0xFF, sizeof(vols));
- memset(patloop, 0, sizeof(patloop));
- memset(oldparam, 0, sizeof(oldparam));
- memset(chnvols, 64, sizeof(chnvols));
- memset(samples, 0, sizeof(samples));
- for (UINT icv=0; icv<m_nChannels; icv++) chnvols[icv] = ChnSettings[icv].nVolume;
- nMaxRow = m_nNextRow;
- nMaxPattern = m_nNextPattern;
- nCurrentPattern = nNextPattern = 0;
- nPattern = Order[0];
- nRow = nNextRow = 0;
- for (;;)
- {
- UINT nSpeedCount = 0;
- nRow = nNextRow;
- nCurrentPattern = nNextPattern;
-
- // Check if pattern is valid
- nPattern = Order[nCurrentPattern];
- while (nPattern >= MAX_PATTERNS)
- {
- // End of song ?
- if ((nPattern == 0xFF) || (nCurrentPattern >= MAX_ORDERS))
- {
- goto EndMod;
- } else
- {
- nCurrentPattern++;
- nPattern = (nCurrentPattern < MAX_ORDERS) ? Order[nCurrentPattern] : 0xFF;
- }
- nNextPattern = nCurrentPattern;
- }
- // Weird stuff?
- if ((nPattern >= MAX_PATTERNS) || (!Patterns[nPattern])) break;
- // Should never happen
- if (nRow >= PatternSize[nPattern]) nRow = 0;
- // Update next position
- nNextRow = nRow + 1;
- if (nNextRow >= PatternSize[nPattern])
- {
- nNextPattern = nCurrentPattern + 1;
- nNextRow = 0;
- }
- if (!nRow)
- {
- for (UINT ipck=0; ipck<m_nChannels; ipck++) patloop[ipck] = dwElapsedTime;
- }
- if (!bTotal)
- {
- if ((nCurrentPattern > nMaxPattern) || ((nCurrentPattern == nMaxPattern) && (nRow >= nMaxRow)))
- {
- if (bAdjust)
- {
- m_nMusicSpeed = nMusicSpeed;
- m_nMusicTempo = nMusicTempo;
- }
- break;
- }
- }
- MODCHANNEL *pChn = Chn;
- MODCOMMAND *p = Patterns[nPattern] + nRow * m_nChannels;
- for (UINT nChn=0; nChn<m_nChannels; p++,pChn++, nChn++) if (*((DWORD *)p))
- {
- UINT command = p->command;
- UINT param = p->param;
- UINT note = p->note;
- if (p->instr) { instr[nChn] = p->instr; notes[nChn] = 0; vols[nChn] = 0xFF; }
- if ((note) && (note <= 120)) notes[nChn] = note;
- if (p->volcmd == VOLCMD_VOLUME) { vols[nChn] = p->vol; }
- if (command) switch (command)
- {
- // Position Jump
- case CMD_POSITIONJUMP:
- if (param <= nCurrentPattern) goto EndMod;
- nNextPattern = param;
- nNextRow = 0;
- if (bAdjust)
- {
- pChn->nPatternLoopCount = 0;
- pChn->nPatternLoop = 0;
- }
- break;
- // Pattern Break
- case CMD_PATTERNBREAK:
- nNextRow = param;
- nNextPattern = nCurrentPattern + 1;
- if (bAdjust)
- {
- pChn->nPatternLoopCount = 0;
- pChn->nPatternLoop = 0;
- }
- break;
- // Set Speed
- case CMD_SPEED:
- if (!param) break;
- if ((param <= 0x20) || (m_nType != MOD_TYPE_MOD))
- {
- if (param < 128) nMusicSpeed = param;
- }
- break;
- // Set Tempo
- case CMD_TEMPO:
- if ((bAdjust) && (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)))
- {
- if (param) pChn->nOldTempo = param; else param = pChn->nOldTempo;
- }
- if (param >= 0x20) nMusicTempo = param; else
- // Tempo Slide
- // FIXME: this is totally wrong!
- if ((param & 0xF0) == 0x10)
- {
- nMusicTempo += param & 0x0F;
- if (nMusicTempo > 255) nMusicTempo = 255;
- } else
- {
- nMusicTempo -= param & 0x0F;
- if (nMusicTempo < 32) nMusicTempo = 32;
- }
- break;
- // Pattern Delay
- case CMD_S3MCMDEX:
- if ((param & 0xF0) == 0x60) { nSpeedCount = param & 0x0F; break; } else
- if ((param & 0xF0) == 0xB0) { param &= 0x0F; param |= 0x60; }
- case CMD_MODCMDEX:
- if ((param & 0xF0) == 0xE0) nSpeedCount = (param & 0x0F) * nMusicSpeed; else
- if ((param & 0xF0) == 0x60)
- {
- if (param & 0x0F) dwElapsedTime += (dwElapsedTime - patloop[nChn]) * (param & 0x0F);
- else patloop[nChn] = dwElapsedTime;
- }
- break;
- }
- if (!bAdjust) continue;
- switch(command)
- {
- // Portamento Up/Down
- case CMD_PORTAMENTOUP:
- case CMD_PORTAMENTODOWN:
- if (param) pChn->nOldPortaUpDown = param;
- break;
- // Tone-Portamento
- case CMD_TONEPORTAMENTO:
- if (param) pChn->nPortamentoSlide = param << 2;
- break;
- // Offset
- case CMD_OFFSET:
- if (param) pChn->nOldOffset = param;
- break;
- // Volume Slide
- case CMD_VOLUMESLIDE:
- case CMD_TONEPORTAVOL:
- case CMD_VIBRATOVOL:
- if (param) pChn->nOldVolumeSlide = param;
- break;
- // Set Volume
- case CMD_VOLUME:
- vols[nChn] = param;
- break;
- // Global Volume
- case CMD_GLOBALVOLUME:
- if (m_nType != MOD_TYPE_IT) param <<= 1;
- if (param > 128) param = 128;
- nGlbVol = param << 1;
- break;
- // Global Volume Slide
- case CMD_GLOBALVOLSLIDE:
- if (param) nOldGlbVolSlide = param; else param = nOldGlbVolSlide;
- if (((param & 0x0F) == 0x0F) && (param & 0xF0))
- {
- param >>= 4;
- if (m_nType != MOD_TYPE_IT) param <<= 1;
- nGlbVol += param << 1;
- } else
- if (((param & 0xF0) == 0xF0) && (param & 0x0F))
- {
- param = (param & 0x0F) << 1;
- if (m_nType != MOD_TYPE_IT) param <<= 1;
- nGlbVol -= param;
- } else
- if (param & 0xF0)
- {
- param >>= 4;
- param <<= 1;
- if (m_nType != MOD_TYPE_IT) param <<= 1;
- nGlbVol += param * nMusicSpeed;
- } else
- {
- param = (param & 0x0F) << 1;
- if (m_nType != MOD_TYPE_IT) param <<= 1;
- nGlbVol -= param * nMusicSpeed;
- }
- if (nGlbVol < 0) nGlbVol = 0;
- if (nGlbVol > 256) nGlbVol = 256;
- break;
- case CMD_CHANNELVOLUME:
- if (param <= 64) chnvols[nChn] = param;
- break;
- case CMD_CHANNELVOLSLIDE:
- if (param) oldparam[nChn] = param; else param = oldparam[nChn];
- pChn->nOldChnVolSlide = param;
- if (((param & 0x0F) == 0x0F) && (param & 0xF0))
- {
- param = (param >> 4) + chnvols[nChn];
- } else
- if (((param & 0xF0) == 0xF0) && (param & 0x0F))
- {
- if (chnvols[nChn] > (int)(param & 0x0F)) param = chnvols[nChn] - (param & 0x0F);
- else param = 0;
- } else
- if (param & 0x0F)
- {
- param = (param & 0x0F) * nMusicSpeed;
- param = (chnvols[nChn] > param) ? chnvols[nChn] - param : 0;
- } else param = ((param & 0xF0) >> 4) * nMusicSpeed + chnvols[nChn];
- if (param > 64) param = 64;
- chnvols[nChn] = param;
- break;
- }
- }
- nSpeedCount += nMusicSpeed;
- dwElapsedTime += (2500 * nSpeedCount) / nMusicTempo;
- }
-EndMod:
- if ((bAdjust) && (!bTotal))
- {
- m_nGlobalVolume = nGlbVol;
- m_nOldGlbVolSlide = nOldGlbVolSlide;
- for (UINT n=0; n<m_nChannels; n++)
- {
- Chn[n].nGlobalVol = chnvols[n];
- if (notes[n]) Chn[n].nNewNote = notes[n];
- if (instr[n]) Chn[n].nNewIns = instr[n];
- if (vols[n] != 0xFF)
- {
- if (vols[n] > 64) vols[n] = 64;
- Chn[n].nVolume = vols[n] << 2;
- }
- }
- }
- return (dwElapsedTime+500) / 1000;
-}
-
-
-//////////////////////////////////////////////////////////////////////////////////////////////////
-// Effects
-
-void CSoundFile::InstrumentChange(MODCHANNEL *pChn, UINT instr, BOOL bPorta, BOOL bUpdVol, BOOL bResetEnv)
-//--------------------------------------------------------------------------------------------------------
-{
- BOOL bInstrumentChanged = FALSE;
-
- if (instr >= MAX_INSTRUMENTS) return;
- INSTRUMENTHEADER *penv = (m_dwSongFlags & SONG_INSTRUMENTMODE) ? Headers[instr] : NULL;
- MODINSTRUMENT *psmp = &Ins[instr];
- UINT note = pChn->nNewNote;
- if ((penv) && (note) && (note <= 128))
- {
- if (penv->NoteMap[note-1] >= 0xFE) return;
- UINT n = penv->Keyboard[note-1];
- psmp = ((n) && (n < MAX_SAMPLES)) ? &Ins[n] : NULL;
- pChn->dwFlags &= ~CHN_SUSTAINLOOP; // turn off sustain
- } else
- if (m_dwSongFlags & SONG_INSTRUMENTMODE)
- {
- if (note >= 0xFE) return;
- psmp = NULL;
- }
- // Update Volume
- if (bUpdVol) pChn->nVolume = (psmp) ? psmp->nVolume : 0;
- // bInstrumentChanged is used for IT carry-on env option
- if (penv != pChn->pHeader)
- {
- bInstrumentChanged = TRUE;
- pChn->pHeader = penv;
- } else
- // Special XM hack
- if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (penv)
- && (pChn->pInstrument) && (psmp != pChn->pInstrument))
- {
- // FT2 doesn't change the sample in this case,
- // but still uses the sample info from the old one (bug?)
- return;
- }
- // Instrument adjust
- pChn->nNewIns = 0;
- if (psmp)
- {
- psmp->played = 1;
- if (penv)
- {
- penv->played = 1;
- pChn->nInsVol = (psmp->nGlobalVol * penv->nGlobalVol) >> 7;
- if (penv->dwFlags & ENV_SETPANNING) pChn->nPan = penv->nPan;
- pChn->nNNA = penv->nNNA;
- } else
- {
- pChn->nInsVol = psmp->nGlobalVol;
- }
- if (psmp->uFlags & CHN_PANNING) pChn->nPan = psmp->nPan;
- }
- // Reset envelopes
- if (bResetEnv)
- {
- if ((!bPorta) || (!(m_nType & MOD_TYPE_IT)) || (m_dwSongFlags & SONG_ITCOMPATMODE)
- || (!pChn->nLength) || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol)))
- {
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- if ((m_nType & MOD_TYPE_IT) && (!bInstrumentChanged) && (penv) && (!(pChn->dwFlags & (CHN_KEYOFF|CHN_NOTEFADE))))
- {
- if (!(penv->dwFlags & ENV_VOLCARRY)) pChn->nVolEnvPosition = 0;
- if (!(penv->dwFlags & ENV_PANCARRY)) pChn->nPanEnvPosition = 0;
- if (!(penv->dwFlags & ENV_PITCHCARRY)) pChn->nPitchEnvPosition = 0;
- } else
- {
- pChn->nVolEnvPosition = 0;
- pChn->nPanEnvPosition = 0;
- pChn->nPitchEnvPosition = 0;
- }
- pChn->nAutoVibDepth = 0;
- pChn->nAutoVibPos = 0;
- } else
- if ((penv) && (!(penv->dwFlags & ENV_VOLUME)))
- {
- pChn->nVolEnvPosition = 0;
- pChn->nAutoVibDepth = 0;
- pChn->nAutoVibPos = 0;
- }
- }
- // Invalid sample ?
- if (!psmp)
- {
- pChn->pInstrument = NULL;
- pChn->nInsVol = 0;
- return;
- }
- // Tone-Portamento doesn't reset the pingpong direction flag
- if ((bPorta) && (psmp == pChn->pInstrument))
- {
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)) return;
- pChn->dwFlags &= ~(CHN_KEYOFF|CHN_NOTEFADE);
- pChn->dwFlags = (pChn->dwFlags & (0xFFFFFF00 | CHN_PINGPONGFLAG)) | (psmp->uFlags);
- } else
- {
- pChn->dwFlags &= ~(CHN_KEYOFF|CHN_NOTEFADE|CHN_VOLENV|CHN_PANENV|CHN_PITCHENV);
- pChn->dwFlags = (pChn->dwFlags & 0xFFFFFF00) | (psmp->uFlags);
- if (penv)
- {
- if (penv->dwFlags & ENV_VOLUME) pChn->dwFlags |= CHN_VOLENV;
- if (penv->dwFlags & ENV_PANNING) pChn->dwFlags |= CHN_PANENV;
- if (penv->dwFlags & ENV_PITCH) pChn->dwFlags |= CHN_PITCHENV;
- if ((penv->dwFlags & ENV_PITCH) && (penv->dwFlags & ENV_FILTER))
- {
- if (!pChn->nCutOff) pChn->nCutOff = 0x7F;
- }
- if (penv->nIFC & 0x80) pChn->nCutOff = penv->nIFC & 0x7F;
- if (penv->nIFR & 0x80) pChn->nResonance = penv->nIFR & 0x7F;
- }
- pChn->nVolSwing = pChn->nPanSwing = 0;
- }
- pChn->pInstrument = psmp;
- pChn->nLength = psmp->nLength;
- pChn->nLoopStart = psmp->nLoopStart;
- pChn->nLoopEnd = psmp->nLoopEnd;
- pChn->nC4Speed = psmp->nC4Speed;
- pChn->pSample = psmp->pSample;
- pChn->nTranspose = psmp->RelativeTone;
- pChn->nFineTune = psmp->nFineTune;
- if (pChn->dwFlags & CHN_SUSTAINLOOP)
- {
- pChn->nLoopStart = psmp->nSustainStart;
- pChn->nLoopEnd = psmp->nSustainEnd;
- pChn->dwFlags |= CHN_LOOP;
- if (pChn->dwFlags & CHN_PINGPONGSUSTAIN) pChn->dwFlags |= CHN_PINGPONGLOOP;
- }
- if ((pChn->dwFlags & CHN_LOOP) && (pChn->nLoopEnd < pChn->nLength)) pChn->nLength = pChn->nLoopEnd;
-}
-
-
-void CSoundFile::NoteChange(UINT nChn, int note, BOOL bPorta, BOOL bResetEnv, BOOL bManual)
-//-----------------------------------------------------------------------------------------
-{
- if (note < 1) return;
- MODCHANNEL * const pChn = &Chn[nChn];
- MODINSTRUMENT *pins = pChn->pInstrument;
- INSTRUMENTHEADER *penv = (m_dwSongFlags & SONG_INSTRUMENTMODE) ? pChn->pHeader : NULL;
- if ((penv) && (note <= 0x80))
- {
- UINT n = penv->Keyboard[note - 1];
- if ((n) && (n < MAX_SAMPLES)) pins = &Ins[n];
- note = penv->NoteMap[note-1];
- pChn->dwFlags &= ~CHN_SUSTAINLOOP; // turn off sustain
- }
- // Key Off
- if (note >= 0x80) // 0xFE or invalid note => key off
- {
- // technically this is "wrong", as anything besides ^^^, ===, and a valid note
- // should cause a note fade... (oh well, it's just a quick hack anyway.)
- if (note == 0xFD) {
- pChn->dwFlags |= CHN_NOTEFADE;
- return;
- }
-
- // Key Off
- KeyOff(nChn);
- // Note Cut
- if (note == 0xFE)
- {
- pChn->dwFlags |= (CHN_NOTEFADE|CHN_FASTVOLRAMP);
- if ((!(m_nType & MOD_TYPE_IT)) || (m_dwSongFlags & SONG_INSTRUMENTMODE))
- pChn->nVolume = 0;
- pChn->nFadeOutVol = 0;
- }
- return;
- }
- if (!pins) return;
- if ((!bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MED|MOD_TYPE_MT2)))
- {
- pChn->nTranspose = pins->RelativeTone;
- pChn->nFineTune = pins->nFineTune;
- }
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2|MOD_TYPE_MED)) note += pChn->nTranspose;
- if (note < 1) note = 1;
- if (note > 132) note = 132;
- pChn->nNote = note;
- if ((!bPorta) || (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT))) pChn->nNewIns = 0;
- UINT period = GetPeriodFromNote(note, pChn->nFineTune, pChn->nC4Speed);
- if (period)
- {
- if ((!bPorta) || (!pChn->nPeriod)) pChn->nPeriod = period;
- pChn->nPortamentoDest = period;
- if ((!bPorta) || ((!pChn->nLength) && (!(m_nType & MOD_TYPE_S3M))))
- {
- pChn->pInstrument = pins;
- pChn->pSample = pins->pSample;
- pChn->nLength = pins->nLength;
- pChn->nLoopEnd = pins->nLength;
- pChn->nLoopStart = 0;
- pChn->dwFlags = (pChn->dwFlags & 0xFFFFFF00) | (pins->uFlags);
- if (pChn->dwFlags & CHN_SUSTAINLOOP)
- {
- pChn->nLoopStart = pins->nSustainStart;
- pChn->nLoopEnd = pins->nSustainEnd;
- pChn->dwFlags &= ~CHN_PINGPONGLOOP;
- pChn->dwFlags |= CHN_LOOP;
- if (pChn->dwFlags & CHN_PINGPONGSUSTAIN) pChn->dwFlags |= CHN_PINGPONGLOOP;
- if (pChn->nLength > pChn->nLoopEnd) pChn->nLength = pChn->nLoopEnd;
- } else
- if (pChn->dwFlags & CHN_LOOP)
- {
- pChn->nLoopStart = pins->nLoopStart;
- pChn->nLoopEnd = pins->nLoopEnd;
- if (pChn->nLength > pChn->nLoopEnd) pChn->nLength = pChn->nLoopEnd;
- }
- pChn->nPos = 0;
- pChn->nPosLo = 0;
- if (pChn->nVibratoType < 4) pChn->nVibratoPos = ((m_nType & MOD_TYPE_IT) && (!(m_dwSongFlags & SONG_ITOLDEFFECTS))) ? 0x10 : 0;
- if (pChn->nTremoloType < 4) pChn->nTremoloPos = 0;
- }
- if (pChn->nPos >= pChn->nLength) pChn->nPos = pChn->nLoopStart;
- } else bPorta = FALSE;
- if ((!bPorta) || (!(m_nType & MOD_TYPE_IT))
- || ((pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol))
- || ((m_dwSongFlags & SONG_ITCOMPATMODE) && (pChn->nRowInstr)))
- {
- if ((m_nType & MOD_TYPE_IT) && (pChn->dwFlags & CHN_NOTEFADE) && (!pChn->nFadeOutVol))
- {
- pChn->nVolEnvPosition = 0;
- pChn->nPanEnvPosition = 0;
- pChn->nPitchEnvPosition = 0;
- pChn->nAutoVibDepth = 0;
- pChn->nAutoVibPos = 0;
- pChn->dwFlags &= ~CHN_NOTEFADE;
- pChn->nFadeOutVol = 65536;
- }
- if ((!bPorta) || (!(m_dwSongFlags & SONG_ITCOMPATMODE)) || (pChn->nRowInstr))
- {
- if ((!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) || (pChn->nRowInstr))
- {
- pChn->dwFlags &= ~CHN_NOTEFADE;
- pChn->nFadeOutVol = 65536;
- }
- }
- }
- pChn->dwFlags &= ~(CHN_EXTRALOUD|CHN_KEYOFF);
- // Enable Ramping
- if (!bPorta)
- {
- pChn->nVUMeter = 0x100;
- pChn->nLeftVU = pChn->nRightVU = 0xFF;
- pChn->dwFlags &= ~CHN_FILTER;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- pChn->nRetrigCount = 0;
- pChn->nTremorCount = 0;
- if (bResetEnv)
- {
- pChn->nVolSwing = pChn->nPanSwing = 0;
- if (penv)
- {
- if (!(penv->dwFlags & ENV_VOLCARRY)) pChn->nVolEnvPosition = 0;
- if (!(penv->dwFlags & ENV_PANCARRY)) pChn->nPanEnvPosition = 0;
- if (!(penv->dwFlags & ENV_PITCHCARRY)) pChn->nPitchEnvPosition = 0;
- if (m_nType & MOD_TYPE_IT)
- {
- // Volume Swing
- if (penv->nVolSwing)
- {
- /* this was wrong */
- int d = ((LONG)penv->nVolSwing*(LONG)((rand() & 0xFF) - 0x7F)) / 256;
- pChn->nVolSwing = (signed short)((d * pChn->nVolume + 1)/256);
- }
- // Pan Swing
- if (penv->nPanSwing)
- {
- int d = ((LONG)penv->nPanSwing*(LONG)((rand() & 0xFF) - 0x7F)) / 128;
- pChn->nPanSwing = (signed short)d;
- }
- }
- }
- pChn->nAutoVibDepth = 0;
- pChn->nAutoVibPos = 0;
- }
- pChn->nLeftVol = pChn->nRightVol = 0;
- BOOL bFlt = (m_dwSongFlags & SONG_MPTFILTERMODE) ? FALSE : TRUE;
- // Setup Initial Filter for this note
- if (penv)
- {
- if (penv->nIFR & 0x80) { pChn->nResonance = penv->nIFR & 0x7F; bFlt = TRUE; }
- if (penv->nIFC & 0x80) { pChn->nCutOff = penv->nIFC & 0x7F; bFlt = TRUE; }
- } else
- {
- pChn->nVolSwing = pChn->nPanSwing = 0;
- }
-#ifndef NO_FILTER
- if ((pChn->nCutOff < 0x7F) && (bFlt)) SetupChannelFilter(pChn, TRUE);
-#endif // NO_FILTER
- }
- // Special case for MPT
- if (bManual) pChn->dwFlags &= ~CHN_MUTE;
- if (((pChn->dwFlags & CHN_MUTE) && (gdwSoundSetup & SNDMIX_MUTECHNMODE))
- || ((pChn->pInstrument) && (pChn->pInstrument->uFlags & CHN_MUTE) && (!bManual))
- || ((m_dwSongFlags & SONG_INSTRUMENTMODE) && (pChn->pHeader)
- && (pChn->pHeader->dwFlags & ENV_MUTE) && (!bManual)))
- {
- if (!bManual) pChn->nPeriod = 0;
- }
-}
-
-
-UINT CSoundFile::GetNNAChannel(UINT nChn)
-//---------------------------------------------
-{
- MODCHANNEL *pChn = &Chn[nChn];
- // Check for empty channel
- MODCHANNEL *pi = &Chn[m_nChannels];
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++, pi++) {
- if (!pi->nLength) {
- if (pi->dwFlags & CHN_MUTE) {
- if (pi->dwFlags & CHN_NNAMUTE) {
- pi->dwFlags &= ~(CHN_NNAMUTE|CHN_MUTE);
- } else {
- /* this channel is muted; skip */
- continue;
- }
- }
- return i;
- }
- }
- if (!pChn->nFadeOutVol) return 0;
- // All channels are used: check for lowest volume
- UINT result = 0;
- DWORD vol = 64*65536; // 25%
- int envpos = 0xFFFFFF;
- const MODCHANNEL *pj = &Chn[m_nChannels];
- for (UINT j=m_nChannels; j<MAX_CHANNELS; j++, pj++)
- {
- if (!pj->nFadeOutVol) return j;
- DWORD v = pj->nVolume;
- if (pj->dwFlags & CHN_NOTEFADE)
- v = v * pj->nFadeOutVol;
- else
- v <<= 16;
- if (pj->dwFlags & CHN_LOOP) v >>= 1;
- if ((v < vol) || ((v == vol) && (pj->nVolEnvPosition > envpos)))
- {
- envpos = pj->nVolEnvPosition;
- vol = v;
- result = j;
- }
- }
- if (result) {
- /* unmute new nna channel */
- Chn[result].dwFlags &= ~(CHN_MUTE|CHN_NNAMUTE);
- }
- return result;
-}
-
-
-void CSoundFile::CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut)
-//------------------------------------------------------------------------
-{
- MODCHANNEL *p;
- MODCHANNEL *pChn = &Chn[nChn];
- INSTRUMENTHEADER *penv = (m_dwSongFlags & SONG_INSTRUMENTMODE) ? pChn->pHeader : NULL;
- INSTRUMENTHEADER *pHeader;
- signed char *pSample;
- if (note > 0x80) note = 0;
- if (note < 1) return;
- // Always NNA cut - using
- if ((!(m_nType & (MOD_TYPE_IT|MOD_TYPE_MT2))) || (!(m_dwSongFlags & SONG_INSTRUMENTMODE)) || (bForceCut))
- {
- if ((m_dwSongFlags & SONG_CPUVERYHIGH)
- || (!pChn->nLength) || (pChn->dwFlags & CHN_MUTE)
- || ((!pChn->nLeftVol) && (!pChn->nRightVol))) return;
- UINT n = GetNNAChannel(nChn);
- if (!n) return;
- p = &Chn[n];
- // Copy Channel
- *p = *pChn;
- p->dwFlags &= ~(CHN_VIBRATO|CHN_TREMOLO|CHN_PANBRELLO|CHN_PORTAMENTO);
- p->nMasterChn = nChn+1;
- p->nCommand = 0;
- // Cut the note
- p->nFadeOutVol = 0;
- p->dwFlags |= (CHN_NOTEFADE|CHN_FASTVOLRAMP);
- // Stop this channel
- pChn->nLength = pChn->nPos = pChn->nPosLo = 0;
- pChn->nROfs = pChn->nLOfs = 0;
- pChn->nLeftVol = pChn->nRightVol = 0;
- return;
- }
- if (instr >= MAX_INSTRUMENTS) instr = 0;
- pSample = pChn->pSample;
- pHeader = pChn->pHeader;
- if ((instr) && (note))
- {
- pHeader = (m_dwSongFlags & SONG_INSTRUMENTMODE) ? Headers[instr] : NULL;
- if (pHeader)
- {
- UINT n = 0;
- if (note <= 0x80)
- {
- n = pHeader->Keyboard[note-1];
- note = pHeader->NoteMap[note-1];
- if ((n) && (n < MAX_SAMPLES)) pSample = Ins[n].pSample;
- }
- } else pSample = NULL;
- }
- if (!penv) return;
- p = pChn;
- for (UINT i=nChn; i<MAX_CHANNELS; p++, i++)
- if ((i >= m_nChannels) || (p == pChn))
- {
- if (((p->nMasterChn == nChn+1) || (p == pChn)) && (p->pHeader))
- {
- BOOL bOk = FALSE;
- // Duplicate Check Type
- switch(p->pHeader->nDCT)
- {
- // Note
- case DCT_NOTE:
- if ((note) && ((int)p->nNote == note) && (pHeader == p->pHeader)) bOk = TRUE;
- break;
- // Sample
- case DCT_SAMPLE:
- if ((pSample) && (pSample == p->pSample)) bOk = TRUE;
- break;
- // Instrument
- case DCT_INSTRUMENT:
- if (pHeader == p->pHeader) bOk = TRUE;
- break;
- }
- // Duplicate Note Action
- if (bOk)
- {
- switch(p->pHeader->nDNA)
- {
- // Cut
- case DNA_NOTECUT:
- KeyOff(i);
- p->nVolume = 0;
- break;
- // Note Off
- case DNA_NOTEOFF:
- KeyOff(i);
- break;
- // Note Fade
- case DNA_NOTEFADE:
- p->dwFlags |= CHN_NOTEFADE;
- break;
- }
- if (!p->nVolume)
- {
- p->nFadeOutVol = 0;
- p->dwFlags |= (CHN_NOTEFADE|CHN_FASTVOLRAMP);
- }
- }
- }
- }
- if (pChn->dwFlags & CHN_MUTE) return;
- // New Note Action
- if ((pChn->nVolume) && (pChn->nLength))
- {
- UINT n = GetNNAChannel(nChn);
- if (n)
- {
- p = &Chn[n];
- // Copy Channel
- *p = *pChn;
- p->dwFlags &= ~(CHN_VIBRATO|CHN_TREMOLO|CHN_PANBRELLO|CHN_PORTAMENTO);
- p->nMasterChn = nChn+1;
- p->nCommand = 0;
- // Key Off the note
- switch(pChn->nNNA)
- {
- case NNA_NOTEOFF: KeyOff(n); break;
- case NNA_NOTECUT:
- p->nFadeOutVol = 0;
- case NNA_NOTEFADE: p->dwFlags |= CHN_NOTEFADE; break;
- }
- if (!p->nVolume)
- {
- p->nFadeOutVol = 0;
- p->dwFlags |= (CHN_NOTEFADE|CHN_FASTVOLRAMP);
- }
- // Stop this channel
- pChn->nLength = pChn->nPos = pChn->nPosLo = 0;
- pChn->nROfs = pChn->nLOfs = 0;
- }
- }
-}
-
-
-BOOL CSoundFile::ProcessEffects()
-//-------------------------------
-{
- int nBreakRow = -1, nPosJump = -1, nPatLoopRow = -1;
- MODCHANNEL *pChn = Chn;
- for (UINT nChn=0; nChn<m_nChannels; nChn++, pChn++)
- {
- pChn->nCommand=0;
-
- UINT instr = pChn->nRowInstr;
- UINT volcmd = pChn->nRowVolCmd;
- UINT vol = pChn->nRowVolume;
- UINT cmd = pChn->nRowCommand;
- UINT param = pChn->nRowParam;
- BOOL bPorta = ((cmd != CMD_TONEPORTAMENTO) && (cmd != CMD_TONEPORTAVOL) && (volcmd != VOLCMD_TONEPORTAMENTO)) ? FALSE : TRUE;
- UINT nStartTick = pChn->nTickStart;
-
- pChn->dwFlags &= ~CHN_FASTVOLRAMP;
- // Process special effects (note delay, pattern delay, pattern loop)
- if (((cmd == CMD_MODCMDEX) || (cmd == CMD_S3MCMDEX)))
- {
- if ((!param) && (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT))) param = pChn->nOldCmdEx; else pChn->nOldCmdEx = param;
- // Note Delay ?
- if ((param & 0xF0) == 0xD0)
- {
- nStartTick = param & 0x0F;
- } else
- if (!m_nTickCount)
- {
- // Pattern Loop ?
- if ((((param & 0xF0) == 0x60) && (cmd == CMD_MODCMDEX))
- || (((param & 0xF0) == 0xB0) && (cmd == CMD_S3MCMDEX)))
- {
- int nloop = PatternLoop(pChn, param & 0x0F);
- if (nloop >= 0) nPatLoopRow = nloop;
- } else
- // Pattern Delay
- if ((param & 0xF0) == 0xE0)
- {
- m_nPatternDelay = param & 0x0F;
- }
- }
- }
-
- // Handles note/instrument/volume changes
- if (m_nTickCount == nStartTick) // can be delayed by a note delay effect
- {
- UINT note = pChn->nRowNote;
- if (instr) pChn->nNewIns = instr;
- // XM: Key-Off + Sample == Note Cut
- if (m_nType & (MOD_TYPE_MOD|MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if ((note == 0xFF) && ((!pChn->pHeader) || (!(pChn->pHeader->dwFlags & ENV_VOLUME))))
- {
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- pChn->nVolume = 0;
- note = instr = 0;
- }
- }
- if ((!note) && (instr))
- {
- if (m_dwSongFlags & SONG_INSTRUMENTMODE)
- {
- if (pChn->pInstrument) pChn->nVolume = pChn->pInstrument->nVolume;
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- pChn->nVolEnvPosition = 0;
- pChn->nPanEnvPosition = 0;
- pChn->nPitchEnvPosition = 0;
- pChn->nAutoVibDepth = 0;
- pChn->nAutoVibPos = 0;
- pChn->dwFlags &= ~CHN_NOTEFADE;
- pChn->nFadeOutVol = 65536;
- }
- } else
- {
- if (instr < MAX_SAMPLES) pChn->nVolume = Ins[instr].nVolume;
- }
- if (!(m_nType & MOD_TYPE_IT)) instr = 0;
- }
- // Invalid Instrument ?
- if (instr >= MAX_INSTRUMENTS) instr = 0;
- // Note Cut/Off => ignore instrument
- if (note >= 0xFE) instr = 0;
- if ((note) && (note <= 128)) pChn->nNewNote = note;
- // New Note Action ? (not when paused!!!)
- if ((note) && (note <= 128) && (!bPorta))
- {
- CheckNNA(nChn, instr, note, FALSE);
- }
- // Instrument Change ?
- if (instr)
- {
- MODINSTRUMENT *psmp = pChn->pInstrument;
- InstrumentChange(pChn, instr, bPorta, TRUE);
- pChn->nNewIns = 0;
- // Special IT case: portamento+note causes sample change -> ignore portamento
- if ((m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT))
- && (psmp != pChn->pInstrument) && (note) && (note < 0x80))
- {
- bPorta = FALSE;
- }
- }
- // New Note ?
- if (note)
- {
- if ((!instr) && (pChn->nNewIns) && (note < 0x80))
- {
- InstrumentChange(pChn, pChn->nNewIns, bPorta, FALSE, (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) ? FALSE : TRUE);
- pChn->nNewIns = 0;
- }
- NoteChange(nChn, note, bPorta, (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) ? FALSE : TRUE);
- if ((bPorta) && (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) && (instr))
- {
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- pChn->nVolEnvPosition = 0;
- pChn->nPanEnvPosition = 0;
- pChn->nPitchEnvPosition = 0;
- pChn->nAutoVibDepth = 0;
- pChn->nAutoVibPos = 0;
- }
- }
- // Tick-0 only volume commands
- if (volcmd == VOLCMD_VOLUME)
- {
- if (vol > 64) vol = 64;
- pChn->nVolume = vol << 2;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- } else
- if (volcmd == VOLCMD_PANNING)
- {
- if (vol > 64) vol = 64;
- pChn->nPan = vol << 2;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- pChn->dwFlags &= ~CHN_SURROUND;
- }
- }
-
- // Volume Column Effect (except volume & panning)
- if ((volcmd > VOLCMD_PANNING) && (m_nTickCount >= nStartTick))
- {
- if (volcmd == VOLCMD_TONEPORTAMENTO)
- {
- if (m_nType & MOD_TYPE_IT)
- TonePortamento(pChn, ImpulseTrackerPortaVolCmd[vol & 0x0F]);
- else
- TonePortamento(pChn, vol * 16);
- } else
- {
- if (vol) pChn->nOldVolParam = vol; else vol = pChn->nOldVolParam;
- switch(volcmd)
- {
- case VOLCMD_VOLSLIDEUP:
- VolumeSlide(pChn, vol << 4);
- break;
-
- case VOLCMD_VOLSLIDEDOWN:
- VolumeSlide(pChn, vol);
- break;
-
- case VOLCMD_FINEVOLUP:
- if (m_nType & MOD_TYPE_IT)
- {
- if (m_nTickCount == nStartTick) VolumeSlide(pChn, (vol << 4) | 0x0F);
- } else
- FineVolumeUp(pChn, vol);
- break;
-
- case VOLCMD_FINEVOLDOWN:
- if (m_nType & MOD_TYPE_IT)
- {
- if (m_nTickCount == nStartTick) VolumeSlide(pChn, 0xF0 | vol);
- } else
- FineVolumeDown(pChn, vol);
- break;
-
- case VOLCMD_VIBRATOSPEED:
- Vibrato(pChn, vol << 4);
- break;
-
- case VOLCMD_VIBRATO:
- Vibrato(pChn, vol);
- break;
-
- case VOLCMD_PANSLIDELEFT:
- PanningSlide(pChn, vol);
- break;
-
- case VOLCMD_PANSLIDERIGHT:
- PanningSlide(pChn, vol << 4);
- break;
-
- case VOLCMD_PORTAUP:
- PortamentoUp(pChn, vol << 2);
- break;
-
- case VOLCMD_PORTADOWN:
- PortamentoDown(pChn, vol << 2);
- break;
- }
- }
- }
-
- // Effects
- if (cmd) switch (cmd)
- {
- // Set Volume
- case CMD_VOLUME:
- if (!m_nTickCount)
- {
- pChn->nVolume = (param < 64) ? param*4 : 256;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++)
- {
- MODCHANNEL *c = &Chn[i];
- if (c->nMasterChn == (nChn+1)) {
- c->nVolume = pChn->nVolume;
- c->dwFlags |= CHN_FASTVOLRAMP;
- }
- }
- }
- break;
-
- // Portamento Up
- case CMD_PORTAMENTOUP:
- if ((!param) && (m_nType & MOD_TYPE_MOD)) break;
- PortamentoUp(pChn, param);
- break;
-
- // Portamento Down
- case CMD_PORTAMENTODOWN:
- if ((!param) && (m_nType & MOD_TYPE_MOD)) break;
- PortamentoDown(pChn, param);
- break;
-
- // Volume Slide
- case CMD_VOLUMESLIDE:
- if ((param) || (m_nType != MOD_TYPE_MOD)) VolumeSlide(pChn, param);
- break;
-
- // Tone-Portamento
- case CMD_TONEPORTAMENTO:
- TonePortamento(pChn, param);
- break;
-
- // Tone-Portamento + Volume Slide
- case CMD_TONEPORTAVOL:
- if ((param) || (m_nType != MOD_TYPE_MOD)) VolumeSlide(pChn, param);
- TonePortamento(pChn, 0);
- break;
-
- // Vibrato
- case CMD_VIBRATO:
- Vibrato(pChn, param);
- break;
-
- // Vibrato + Volume Slide
- case CMD_VIBRATOVOL:
- if ((param) || (m_nType != MOD_TYPE_MOD)) VolumeSlide(pChn, param);
- Vibrato(pChn, 0);
- break;
-
- // Set Speed
- case CMD_SPEED:
- if (!m_nTickCount) SetSpeed(param);
- break;
-
- // Set Tempo
- case CMD_TEMPO:
- if (!m_nTickCount)
- {
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT))
- {
- if (param) pChn->nOldTempo = param; else param = pChn->nOldTempo;
- }
- SetTempo(param);
- } else {
- param = pChn->nOldTempo; // this just got set on tick zero
-
- switch (param >> 4) {
- case 0:
- m_nMusicTempo -= param & 0xf;
- if (m_nMusicTempo < 32)
- m_nMusicTempo = 32;
- break;
- case 1:
- m_nMusicTempo += param & 0xf;
- if (m_nMusicTempo > 255)
- m_nMusicTempo = 255;
- break;
- }
- }
- break;
-
- // Set Offset
- case CMD_OFFSET:
- if (m_nTickCount) break;
- if (param) pChn->nOldOffset = param; else param = pChn->nOldOffset;
- param <<= 8;
- param |= (UINT)(pChn->nOldHiOffset) << 16;
- if ((pChn->nRowNote) && (pChn->nRowNote < 0x80))
- {
- if (bPorta)
- pChn->nPos = param;
- else
- pChn->nPos += param;
- if (pChn->nPos >= pChn->nLength)
- {
- if (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)))
- {
- pChn->nPos = pChn->nLoopStart;
- if ((m_dwSongFlags & SONG_ITOLDEFFECTS) && (pChn->nLength > 4))
- {
- pChn->nPos = pChn->nLength - 2;
- }
- }
- }
- } else
- if ((param < pChn->nLength) && (m_nType & (MOD_TYPE_MTM|MOD_TYPE_DMF)))
- {
- pChn->nPos = param;
- }
- break;
-
- // Arpeggio
- case CMD_ARPEGGIO:
- pChn->nCommand = CMD_ARPEGGIO;
- if ((m_nTickCount) || (!pChn->nPeriod) || (!pChn->nNote)) break;
- if ((!param) && (!(m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)))) break;
- if (param) pChn->nArpeggio = param;
- break;
-
- // Retrig
- case CMD_RETRIG:
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (!(param & 0xF0)) param |= pChn->nRetrigParam & 0xF0;
- if (!(param & 0x0F)) param |= pChn->nRetrigParam & 0x0F;
- param |= 0x100; // increment retrig count on first row
- }
- // various bits of retriggery commented out here & below, reverting to old method...
- // -Storlek 04aug07
- // if (pChn->nRowNote && !m_nTickCount) pChn->nRetrigCount = 0;
- if (param) pChn->nRetrigParam = (BYTE)(param & 0xFF); else param = pChn->nRetrigParam;
- // pChn->nCommand = CMD_RETRIG;
- RetrigNote(nChn, param);
- break;
-
- // Tremor
- case CMD_TREMOR:
- pChn->nCommand = CMD_TREMOR;
- if (m_nTickCount) break;
- if (param) pChn->nTremorParam = param;
- break;
-
- // Set Global Volume
- case CMD_GLOBALVOLUME:
- if (m_nTickCount) break;
- if (m_nType != MOD_TYPE_IT) param <<= 1;
- if (param > 128) param = 128;
- m_nGlobalVolume = param << 1;
- break;
-
- // Global Volume Slide
- case CMD_GLOBALVOLSLIDE:
- GlobalVolSlide(param);
- break;
-
- // Set 8-bit Panning
- case CMD_PANNING8:
- if (m_nTickCount) break;
- if (!(m_dwSongFlags & SONG_SURROUNDPAN)) pChn->dwFlags &= ~CHN_SURROUND;
- if (m_nType & (MOD_TYPE_IT|MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- pChn->nPan = param;
- } else
- if (param <= 0x80)
- {
- pChn->nPan = param << 1;
- } else
- if (param == 0xA4)
- {
- pChn->dwFlags |= CHN_SURROUND;
- pChn->nPan = 0x80;
- }
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- break;
-
- // Panning Slide
- case CMD_PANNINGSLIDE:
- PanningSlide(pChn, param);
- break;
-
- // Tremolo
- case CMD_TREMOLO:
- Tremolo(pChn, param);
- break;
-
- // Fine Vibrato
- case CMD_FINEVIBRATO:
- FineVibrato(pChn, param);
- break;
-
- // MOD/XM Exx Extended Commands
- case CMD_MODCMDEX:
- ExtendedMODCommands(nChn, param);
- break;
-
- // S3M/IT Sxx Extended Commands
- case CMD_S3MCMDEX:
- ExtendedS3MCommands(nChn, param);
- break;
-
- // Key Off
- case CMD_KEYOFF:
- if (!m_nTickCount) KeyOff(nChn);
- break;
-
- // Extra-fine porta up/down
- case CMD_XFINEPORTAUPDOWN:
- switch(param & 0xF0)
- {
- case 0x10: ExtraFinePortamentoUp(pChn, param & 0x0F); break;
- case 0x20: ExtraFinePortamentoDown(pChn, param & 0x0F); break;
- // Modplug XM Extensions
- case 0x50:
- case 0x60:
- case 0x70:
- case 0x90:
- case 0xA0: ExtendedS3MCommands(nChn, param); break;
- }
- break;
-
- // Set Channel Global Volume
- case CMD_CHANNELVOLUME:
- if (m_nTickCount) break;
- if (param <= 64)
- {
- pChn->nGlobalVol = param;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++)
- {
- MODCHANNEL *c = &Chn[i];
- if (c->nMasterChn == (nChn+1)) {
- c->nGlobalVol = param;
- c->dwFlags |= CHN_FASTVOLRAMP;
- }
- }
- }
- break;
-
- // Channel volume slide
- case CMD_CHANNELVOLSLIDE:
- {
- int saw_self = 0;
-
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++)
- {
- MODCHANNEL *c = &Chn[i];
- if (c->nMasterChn == (nChn+1)) {
- if (c == pChn) saw_self = 1;
- ChannelVolSlide(c, param);
- }
- }
- if (!saw_self) {
- ChannelVolSlide(pChn, param);
- }
- }
-
- break;
-
- // Panbrello (IT)
- case CMD_PANBRELLO:
- Panbrello(pChn, param);
- break;
-
- // Set Envelope Position
- case CMD_SETENVPOSITION:
- if (!m_nTickCount)
- {
- pChn->nVolEnvPosition = param;
- pChn->nPanEnvPosition = param;
- pChn->nPitchEnvPosition = param;
- if ((m_dwSongFlags & SONG_INSTRUMENTMODE) && pChn->pHeader)
- {
- INSTRUMENTHEADER *penv = pChn->pHeader;
- if ((pChn->dwFlags & CHN_PANENV) && (penv->PanEnv.nNodes) && ((int)param > penv->PanEnv.Ticks[penv->PanEnv.nNodes-1]))
- {
- pChn->dwFlags &= ~CHN_PANENV;
- }
- }
- }
- break;
-
- // Position Jump
- case CMD_POSITIONJUMP:
- nPosJump = param;
- break;
-
- // Pattern Break
- case CMD_PATTERNBREAK:
- nBreakRow = param;
- break;
-
- // Midi Controller
- case CMD_MIDI:
- if (m_nTickCount) break;
- if (param < 0x80)
- {
- ProcessMidiMacro(nChn, &m_MidiCfg.szMidiSFXExt[pChn->nActiveMacro << 5], param);
- } else
- {
- ProcessMidiMacro(nChn, &m_MidiCfg.szMidiZXXExt[(param & 0x7F) << 5], 0);
- }
- break;
- }
- }
-
- // Navigation Effects
- if (!m_nTickCount)
- {
- // Pattern Loop
- if (nPatLoopRow >= 0)
- {
- m_nNextPattern = m_nCurrentPattern;
- m_nNextRow = nPatLoopRow;
- if (m_nPatternDelay) m_nNextRow++;
- } else
- // Pattern Break / Position Jump only if no loop running
- if ((nBreakRow >= 0) || (nPosJump >= 0))
- {
- BOOL bNoLoop = FALSE;
- if (nPosJump < 0) nPosJump = m_nCurrentPattern+1;
- if (nBreakRow < 0) nBreakRow = 0;
- // Modplug Tracker & ModPlugin allow backward jumps
- #ifndef MODPLUG_FASTSOUNDLIB
- if ((nPosJump < (int)m_nCurrentPattern)
- || ((nPosJump == (int)m_nCurrentPattern) && (nBreakRow <= (int)m_nRow)))
- {
- if (!IsValidBackwardJump(m_nCurrentPattern, m_nRow, nPosJump, nBreakRow))
- {
- if (m_nRepeatCount)
- {
- if (m_nRepeatCount > 0) m_nRepeatCount--;
- } else
- {
- #ifdef MODPLUG_TRACKER
- if (gdwSoundSetup & SNDMIX_NOBACKWARDJUMPS)
- #endif
- // Backward jump disabled
- bNoLoop = TRUE;
- //reset repeat count incase there are multiple loops.
- //(i.e. Unreal tracks)
- m_nRepeatCount = m_nInitialRepeatCount;
- }
- }
- }
- #endif // MODPLUG_FASTSOUNDLIB
- if (((!bNoLoop) && (nPosJump < MAX_ORDERS))
- && ((nPosJump != (int)m_nCurrentPattern) || (nBreakRow != (int)m_nRow)))
- {
- if (nPosJump != (int)m_nCurrentPattern)
- {
- for (UINT i=0; i<m_nChannels; i++) Chn[i].nPatternLoopCount = 0;
- }
- m_nNextPattern = nPosJump;
- m_nNextRow = (UINT)nBreakRow;
- }
- }
- }
- return TRUE;
-}
-
-
-////////////////////////////////////////////////////////////
-// Channels effects
-
-void CSoundFile::PortamentoUp(MODCHANNEL *pChn, UINT param)
-//---------------------------------------------------------
-{
- if (param) pChn->nOldPortaUpDown = param; else param = pChn->nOldPortaUpDown;
- if (m_dwSongFlags & SONG_ITCOMPATMODE) pChn->nPortamentoSlide=param*4;
- else pChn->nPortamentoDest=0;
- if ((m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_STM)) && ((param & 0xF0) >= 0xE0))
- {
- if (param & 0x0F)
- {
- if ((param & 0xF0) == 0xF0)
- {
- FinePortamentoUp(pChn, param & 0x0F);
- } else
- if ((param & 0xF0) == 0xE0)
- {
- ExtraFinePortamentoUp(pChn, param & 0x0F);
- }
- }
- return;
- }
- // Regular Slide
- if (!(m_dwSongFlags & SONG_FIRSTTICK))
- {
- DoFreqSlide(pChn, -(int)(param * 4));
- }
-}
-
-
-void CSoundFile::PortamentoDown(MODCHANNEL *pChn, UINT param)
-//-----------------------------------------------------------
-{
- if (param) pChn->nOldPortaUpDown = param; else param = pChn->nOldPortaUpDown;
- if (m_dwSongFlags & SONG_ITCOMPATMODE) pChn->nPortamentoSlide=param*4;
- else pChn->nPortamentoDest=0;
- if ((m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_STM)) && ((param & 0xF0) >= 0xE0))
- {
- if (param & 0x0F)
- {
- if ((param & 0xF0) == 0xF0)
- {
- FinePortamentoDown(pChn, param & 0x0F);
- } else
- if ((param & 0xF0) == 0xE0)
- {
- ExtraFinePortamentoDown(pChn, param & 0x0F);
- }
- }
- return;
- }
- if (!(m_dwSongFlags & SONG_FIRSTTICK)) DoFreqSlide(pChn, (int)(param << 2));
-}
-
-
-void CSoundFile::FinePortamentoUp(MODCHANNEL *pChn, UINT param)
-//-------------------------------------------------------------
-{
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (param) pChn->nOldFinePortaUpDown = param; else param = pChn->nOldFinePortaUpDown;
- }
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- if ((pChn->nPeriod) && (param))
- {
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- pChn->nPeriod = _muldivr(pChn->nPeriod, LinearSlideDownTable[param & 0x0F], 65536);
- } else
- {
- pChn->nPeriod -= (int)(param * 4);
- }
- if (pChn->nPeriod < 1) pChn->nPeriod = 1;
- }
- }
-}
-
-
-void CSoundFile::FinePortamentoDown(MODCHANNEL *pChn, UINT param)
-//---------------------------------------------------------------
-{
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (param) pChn->nOldFinePortaUpDown = param; else param = pChn->nOldFinePortaUpDown;
- }
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- if ((pChn->nPeriod) && (param))
- {
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- pChn->nPeriod = _muldivr(pChn->nPeriod, LinearSlideUpTable[param & 0x0F], 65536);
- } else
- {
- pChn->nPeriod += (int)(param * 4);
- }
- if (pChn->nPeriod > 0xFFFF) pChn->nPeriod = 0xFFFF;
- }
- }
-}
-
-
-void CSoundFile::ExtraFinePortamentoUp(MODCHANNEL *pChn, UINT param)
-//------------------------------------------------------------------
-{
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (param) pChn->nOldFinePortaUpDown = param; else param = pChn->nOldFinePortaUpDown;
- }
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- if ((pChn->nPeriod) && (param))
- {
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- pChn->nPeriod = _muldivr(pChn->nPeriod, FineLinearSlideDownTable[param & 0x0F], 65536);
- } else
- {
- pChn->nPeriod -= (int)(param);
- }
- if (pChn->nPeriod < 1) pChn->nPeriod = 1;
- }
- }
-}
-
-
-void CSoundFile::ExtraFinePortamentoDown(MODCHANNEL *pChn, UINT param)
-//--------------------------------------------------------------------
-{
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (param) pChn->nOldFinePortaUpDown = param; else param = pChn->nOldFinePortaUpDown;
- }
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- if ((pChn->nPeriod) && (param))
- {
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- pChn->nPeriod = _muldivr(pChn->nPeriod, FineLinearSlideUpTable[param & 0x0F], 65536);
- } else
- {
- pChn->nPeriod += (int)(param);
- }
- if (pChn->nPeriod > 0xFFFF) pChn->nPeriod = 0xFFFF;
- }
- }
-}
-
-
-// Portamento Slide
-void CSoundFile::TonePortamento(MODCHANNEL *pChn, UINT param)
-//-----------------------------------------------------------
-{
- if (param) pChn->nPortamentoSlide = param * 4;
- pChn->dwFlags |= CHN_PORTAMENTO;
- if ((pChn->nPeriod) && (pChn->nPortamentoDest) && (!(m_dwSongFlags & SONG_FIRSTTICK)))
- {
- if (pChn->nPeriod < pChn->nPortamentoDest)
- {
- LONG delta = (int)pChn->nPortamentoSlide;
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- UINT n = pChn->nPortamentoSlide >> 2;
- if (n > 255) n = 255;
- delta = _muldivr(pChn->nPeriod, LinearSlideUpTable[n], 65536) - pChn->nPeriod;
- if (delta < 1) delta = 1;
- }
- pChn->nPeriod += delta;
- if (pChn->nPeriod > pChn->nPortamentoDest) pChn->nPeriod = pChn->nPortamentoDest;
- } else
- if (pChn->nPeriod > pChn->nPortamentoDest)
- {
- LONG delta = - (int)pChn->nPortamentoSlide;
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- UINT n = pChn->nPortamentoSlide >> 2;
- if (n > 255) n = 255;
- delta = _muldivr(pChn->nPeriod, LinearSlideDownTable[n], 65536) - pChn->nPeriod;
- if (delta > -1) delta = -1;
- }
- pChn->nPeriod += delta;
- if (pChn->nPeriod < pChn->nPortamentoDest) pChn->nPeriod = pChn->nPortamentoDest;
- }
- }
-}
-
-
-void CSoundFile::Vibrato(MODCHANNEL *p, UINT param)
-//-------------------------------------------------
-{
- if (param & 0x0F) p->nVibratoDepth = (param & 0x0F) * 4;
- if (param & 0xF0) p->nVibratoSpeed = (param >> 4) & 0x0F;
- p->dwFlags |= CHN_VIBRATO;
-}
-
-
-void CSoundFile::FineVibrato(MODCHANNEL *p, UINT param)
-//-----------------------------------------------------
-{
- if (param & 0x0F) p->nVibratoDepth = param & 0x0F;
- if (param & 0xF0) p->nVibratoSpeed = (param >> 4) & 0x0F;
- p->dwFlags |= CHN_VIBRATO;
-}
-
-
-void CSoundFile::Panbrello(MODCHANNEL *p, UINT param)
-//---------------------------------------------------
-{
- if (param & 0x0F) p->nPanbrelloDepth = param & 0x0F;
- if (param & 0xF0) p->nPanbrelloSpeed = (param >> 4) & 0x0F;
- p->dwFlags |= CHN_PANBRELLO;
-}
-
-
-void CSoundFile::VolumeSlide(MODCHANNEL *pChn, UINT param)
-//--------------------------------------------------------
-{
- if (param) pChn->nOldVolumeSlide = param; else param = pChn->nOldVolumeSlide;
- LONG newvolume = pChn->nVolume;
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_STM|MOD_TYPE_AMF))
- {
- if ((param & 0x0F) == 0x0F)
- {
- if (param & 0xF0)
- {
- FineVolumeUp(pChn, (param >> 4));
- return;
- } else
- {
- if ((m_dwSongFlags & SONG_FIRSTTICK) && (!(m_dwSongFlags & SONG_FASTVOLSLIDES)))
- {
- newvolume -= 0x0F * 4;
- }
- }
- } else
- if ((param & 0xF0) == 0xF0)
- {
- if (param & 0x0F)
- {
- FineVolumeDown(pChn, (param & 0x0F));
- return;
- } else
- {
- if ((m_dwSongFlags & SONG_FIRSTTICK) && (!(m_dwSongFlags & SONG_FASTVOLSLIDES)))
- {
- newvolume += 0x0F * 4;
- }
- }
- }
- }
- if ((!(m_dwSongFlags & SONG_FIRSTTICK)) || (m_dwSongFlags & SONG_FASTVOLSLIDES))
- {
- if (param & 0x0F) newvolume -= (int)((param & 0x0F) * 4);
- else newvolume += (int)((param & 0xF0) >> 2);
- if (m_nType & MOD_TYPE_MOD) pChn->dwFlags |= CHN_FASTVOLRAMP;
- }
- if (newvolume < 0) newvolume = 0;
- if (newvolume > 256) newvolume = 256;
- pChn->nVolume = newvolume;
-}
-
-
-void CSoundFile::PanningSlide(MODCHANNEL *pChn, UINT param)
-//---------------------------------------------------------
-{
- LONG nPanSlide = 0;
- if (param) pChn->nOldPanSlide = param; else param = pChn->nOldPanSlide;
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT|MOD_TYPE_STM))
- {
- if (((param & 0x0F) == 0x0F) && (param & 0xF0))
- {
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- param = (param & 0xF0) >> 2;
- nPanSlide = - (int)param;
- }
- } else
- if (((param & 0xF0) == 0xF0) && (param & 0x0F))
- {
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- nPanSlide = (param & 0x0F) << 2;
- }
- } else
- {
- if (!(m_dwSongFlags & SONG_FIRSTTICK))
- {
- if (param & 0x0F) nPanSlide = (int)((param & 0x0F) << 2);
- else nPanSlide = -(int)((param & 0xF0) >> 2);
- }
- }
- } else
- {
- if (!(m_dwSongFlags & SONG_FIRSTTICK))
- {
- if (param & 0x0F) nPanSlide = -(int)((param & 0x0F) << 2);
- else nPanSlide = (int)((param & 0xF0) >> 2);
- }
- }
- if (nPanSlide)
- {
- nPanSlide += pChn->nPan;
- if (nPanSlide < 0) nPanSlide = 0;
- if (nPanSlide > 256) nPanSlide = 256;
- pChn->nPan = nPanSlide;
- }
- pChn->dwFlags &= ~CHN_SURROUND;
-}
-
-
-void CSoundFile::FineVolumeUp(MODCHANNEL *pChn, UINT param)
-//---------------------------------------------------------
-{
- if (param) pChn->nOldFineVolUpDown = param; else param = pChn->nOldFineVolUpDown;
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- pChn->nVolume += param * 4;
- if (pChn->nVolume > 256) pChn->nVolume = 256;
- if (m_nType & MOD_TYPE_MOD) pChn->dwFlags |= CHN_FASTVOLRAMP;
- }
-}
-
-
-void CSoundFile::FineVolumeDown(MODCHANNEL *pChn, UINT param)
-//-----------------------------------------------------------
-{
- if (param) pChn->nOldFineVolUpDown = param; else param = pChn->nOldFineVolUpDown;
- if (m_dwSongFlags & SONG_FIRSTTICK)
- {
- pChn->nVolume -= param * 4;
- if (pChn->nVolume < 0) pChn->nVolume = 0;
- if (m_nType & MOD_TYPE_MOD) pChn->dwFlags |= CHN_FASTVOLRAMP;
- }
-}
-
-
-void CSoundFile::Tremolo(MODCHANNEL *p, UINT param)
-//-------------------------------------------------
-{
- if (param & 0x0F) p->nTremoloDepth = (param & 0x0F) << 2;
- if (param & 0xF0) p->nTremoloSpeed = (param >> 4) & 0x0F;
- p->dwFlags |= CHN_TREMOLO;
-}
-
-
-void CSoundFile::ChannelVolSlide(MODCHANNEL *pChn, UINT param)
-//------------------------------------------------------------
-{
- LONG nChnSlide = 0;
- if (param) pChn->nOldChnVolSlide = param; else param = pChn->nOldChnVolSlide;
- if (((param & 0x0F) == 0x0F) && (param & 0xF0))
- {
- if (m_dwSongFlags & SONG_FIRSTTICK) nChnSlide = param >> 4;
- } else
- if (((param & 0xF0) == 0xF0) && (param & 0x0F))
- {
- if (m_dwSongFlags & SONG_FIRSTTICK) nChnSlide = - (int)(param & 0x0F);
- } else
- {
- if (!(m_dwSongFlags & SONG_FIRSTTICK))
- {
- if (param & 0x0F) nChnSlide = -(int)(param & 0x0F);
- else nChnSlide = (int)((param & 0xF0) >> 4);
- }
- }
- if (nChnSlide)
- {
- nChnSlide += pChn->nGlobalVol;
- if (nChnSlide < 0) nChnSlide = 0;
- if (nChnSlide > 64) nChnSlide = 64;
- pChn->nGlobalVol = nChnSlide;
- }
-}
-
-
-void CSoundFile::ExtendedMODCommands(UINT nChn, UINT param)
-//---------------------------------------------------------
-{
- MODCHANNEL *pChn = &Chn[nChn];
- UINT command = param & 0xF0;
- param &= 0x0F;
- switch(command)
- {
- // E0x: Set Filter
- // E1x: Fine Portamento Up
- case 0x10: if ((param) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) FinePortamentoUp(pChn, param); break;
- // E2x: Fine Portamento Down
- case 0x20: if ((param) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) FinePortamentoDown(pChn, param); break;
- // E3x: Set Glissando Control
- case 0x30: pChn->dwFlags &= ~CHN_GLISSANDO; if (param) pChn->dwFlags |= CHN_GLISSANDO; break;
- // E4x: Set Vibrato WaveForm
- case 0x40: pChn->nVibratoType = param & 0x07; break;
- // E5x: Set FineTune
- case 0x50: if (m_nTickCount) break;
- pChn->nC4Speed = S3MFineTuneTable[param];
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- pChn->nFineTune = param*2;
- else
- pChn->nFineTune = MOD2XMFineTune(param);
- if (pChn->nPeriod) pChn->nPeriod = GetPeriodFromNote(pChn->nNote, pChn->nFineTune, pChn->nC4Speed);
- break;
- // E6x: Pattern Loop
- // E7x: Set Tremolo WaveForm
- case 0x70: pChn->nTremoloType = param & 0x07; break;
- // E8x: Set 4-bit Panning
- case 0x80: if (!m_nTickCount) { pChn->nPan = (param << 4) + 8; pChn->dwFlags |= CHN_FASTVOLRAMP; } break;
- // E9x: Retrig
- case 0x90: RetrigNote(nChn, param); break;
- // EAx: Fine Volume Up
- case 0xA0: if ((param) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) FineVolumeUp(pChn, param); break;
- // EBx: Fine Volume Down
- case 0xB0: if ((param) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) FineVolumeDown(pChn, param); break;
- // ECx: Note Cut
- case 0xC0: NoteCut(nChn, param); break;
- // EDx: Note Delay
- // EEx: Pattern Delay
- // EFx: MOD: Invert Loop, XM: Set Active Midi Macro
- case 0xF0: pChn->nActiveMacro = param; break;
- }
-}
-
-
-void CSoundFile::ExtendedS3MCommands(UINT nChn, UINT param)
-//---------------------------------------------------------
-{
- MODCHANNEL *pChn = &Chn[nChn];
- UINT command = param & 0xF0;
- param &= 0x0F;
- switch(command)
- {
- // S0x: Set Filter
- // S1x: Set Glissando Control
- case 0x10: pChn->dwFlags &= ~CHN_GLISSANDO; if (param) pChn->dwFlags |= CHN_GLISSANDO; break;
- // S2x: Set FineTune
- case 0x20: if (m_nTickCount) break;
- pChn->nC4Speed = S3MFineTuneTable[param & 0x0F];
- pChn->nFineTune = MOD2XMFineTune(param);
- if (pChn->nPeriod) pChn->nPeriod = GetPeriodFromNote(pChn->nNote, pChn->nFineTune, pChn->nC4Speed);
- break;
- // S3x: Set Vibrato WaveForm
- case 0x30: pChn->nVibratoType = param & 0x07; break;
- // S4x: Set Tremolo WaveForm
- case 0x40: pChn->nTremoloType = param & 0x07; break;
- // S5x: Set Panbrello WaveForm
- case 0x50: pChn->nPanbrelloType = param & 0x07; break;
- // S6x: Pattern Delay for x frames
- case 0x60: m_nFrameDelay = param; break;
- // S7x: Envelope Control
- case 0x70: if (m_nTickCount) break;
- switch(param)
- {
- case 0:
- case 1:
- case 2:
- {
- MODCHANNEL *bkp = &Chn[m_nChannels];
- for (UINT i=m_nChannels; i<MAX_CHANNELS; i++, bkp++)
- {
- if (bkp->nMasterChn == nChn+1)
- {
- if (param == 1) KeyOff(i); else
- if (param == 2) bkp->dwFlags |= CHN_NOTEFADE; else
- { bkp->dwFlags |= CHN_NOTEFADE; bkp->nFadeOutVol = 0; }
- }
- }
- }
- break;
- case 3: pChn->nNNA = NNA_NOTECUT; break;
- case 4: pChn->nNNA = NNA_CONTINUE; break;
- case 5: pChn->nNNA = NNA_NOTEOFF; break;
- case 6: pChn->nNNA = NNA_NOTEFADE; break;
- case 7: pChn->dwFlags &= ~CHN_VOLENV; break;
- case 8: pChn->dwFlags |= CHN_VOLENV; break;
- case 9: pChn->dwFlags &= ~CHN_PANENV; break;
- case 10: pChn->dwFlags |= CHN_PANENV; break;
- case 11: pChn->dwFlags &= ~CHN_PITCHENV; break;
- case 12: pChn->dwFlags |= CHN_PITCHENV; break;
- }
- break;
- // S8x: Set 4-bit Panning
- case 0x80:
- pChn->dwFlags &= ~CHN_SURROUND;
- if (!m_nTickCount) {
- pChn->nPan = (param << 4) + 8;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- }
- break;
- // S9x: Set Surround
- case 0x90: ExtendedChannelEffect(pChn, param & 0x0F); break;
- // SAx: Set 64k Offset
- case 0xA0: if (!m_nTickCount)
- {
- if (m_nType & MOD_TYPE_S3M) {
- pChn->nPan = ((param ^ 8) << 4) + 8;
- pChn->dwFlags &= ~CHN_SURROUND;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- } else {
- pChn->nOldHiOffset = param;
- if ((pChn->nRowNote) && (pChn->nRowNote < 0x80))
- {
- DWORD pos = param << 16;
- if (pos < pChn->nLength) pChn->nPos = pos;
- }
- }
- }
- break;
- // SBx: Pattern Loop
- // SCx: Note Cut
- case 0xC0: NoteCut(nChn, param); break;
- // SDx: Note Delay
- // case 0xD0: break;
- // SEx: Pattern Delay for x rows
- // SFx: S3M: Funk Repeat, IT: Set Active Midi Macro
- case 0xF0: pChn->nActiveMacro = param; break;
- }
-}
-
-
-void CSoundFile::ExtendedChannelEffect(MODCHANNEL *pChn, UINT param)
-//------------------------------------------------------------------
-{
- // S9x and X9x commands (S3M/XM/IT only)
- if (m_nTickCount) return;
- switch(param & 0x0F)
- {
- // S91: Surround On
- case 0x01: pChn->dwFlags |= CHN_SURROUND; pChn->nPan = 128; break;
- ////////////////////////////////////////////////////////////
- // Modplug Extensions
- // S90: Surround Off
- case 0x00: pChn->dwFlags &= ~CHN_SURROUND; break;
- // S98: Reverb Off
- case 0x08:
- pChn->dwFlags &= ~CHN_REVERB;
- pChn->dwFlags |= CHN_NOREVERB;
- break;
- // S99: Reverb On
- case 0x09:
- pChn->dwFlags &= ~CHN_NOREVERB;
- pChn->dwFlags |= CHN_REVERB;
- break;
- // S9A: 2-Channels surround mode
- case 0x0A:
- m_dwSongFlags &= ~SONG_SURROUNDPAN;
- break;
- // S9B: 4-Channels surround mode
- case 0x0B:
- m_dwSongFlags |= SONG_SURROUNDPAN;
- break;
- // S9C: IT Filter Mode
- case 0x0C:
- m_dwSongFlags &= ~SONG_MPTFILTERMODE;
- break;
- // S9D: MPT Filter Mode
- case 0x0D:
- m_dwSongFlags |= SONG_MPTFILTERMODE;
- break;
- // S9E: Go forward
- case 0x0E:
- pChn->dwFlags &= ~(CHN_PINGPONGFLAG);
- break;
- // S9F: Go backward (set position at the end for non-looping samples)
- case 0x0F:
- if ((!(pChn->dwFlags & CHN_LOOP)) && (!pChn->nPos) && (pChn->nLength))
- {
- pChn->nPos = pChn->nLength - 1;
- pChn->nPosLo = 0xFFFF;
- }
- pChn->dwFlags |= CHN_PINGPONGFLAG;
- break;
- }
-}
-
-// this is all brisby
-void CSoundFile::MidiSend(unsigned char *data, unsigned int len, UINT nChn, int fake)
-{
- MODCHANNEL *pChn = &Chn[nChn];
- int oldcutoff;
-
- if (len > 2 && data[0] == 0xF0 && data[1] == 0xF0) {
- /* impulse tracker filter control (mfg. 0xF0) */
- if (len == 5) {
- switch (data[2]) {
- case 0x00: /* set cutoff */
- oldcutoff = pChn->nCutOff;
- if (data[3] < 0x80) pChn->nCutOff = data[3];
-#ifndef NO_FILTER
- oldcutoff -= pChn->nCutOff;
-
- if (oldcutoff < 0) oldcutoff = -oldcutoff;
- if ((pChn->nVolume > 0) || (oldcutoff < 0x10)
- || (!(pChn->dwFlags & CHN_FILTER))
- || (!(pChn->nLeftVol|pChn->nRightVol)))
- SetupChannelFilter(pChn, (pChn->dwFlags & CHN_FILTER)
- ? FALSE : TRUE);
-#endif // NO_FILTER
- break;
- case 0x01: /* set resonance */
- if (data[3] < 0x80) pChn->nResonance = data[3];
-#ifndef NO_FILTER
- SetupChannelFilter(pChn, (pChn->dwFlags & CHN_FILTER) ? FALSE : TRUE);
-#endif // NO_FILTER
- break;
- };
- }
- }
-
- if (!fake && _midi_out_raw) {
- /* okay, this is kind of how it works.
- we pass m_nBufferCount as here because while
- 1000 * ((8((buffer_size/2) - m_nBufferCount)) / sample_rate)
- is the number of msec we need to delay by, libmodplug simply doesn't know
- what the buffer size is at this point so m_nBufferCount simply has no
- frame of reference.
-
- fortunately, schism does and can complete this (tags: _schism_midi_out_raw )
-
- */
- _midi_out_raw(data, len, m_nBufferCount);
- }
-}
-
-static int _was_complete_midi(unsigned char *q, unsigned int len, int nextc)
-{
- if (len == 0) return 0;
- if (*q == 0xF0) return (q[len-1] == 0xF7 ? 1 : 0);
- return ((nextc & 0x80) ? 1 : 0);
-}
-
-void CSoundFile::ProcessMidiMacro(UINT nChn, LPCSTR pszMidiMacro, UINT param,
- UINT note, UINT velocity, UINT use_instr)
-//---------------------------------------------------------------------------
-{
-/* this was all wrong. -mrsb */
- MODCHANNEL *pChn = &Chn[nChn];
- INSTRUMENTHEADER *penv = (m_dwSongFlags & SONG_INSTRUMENTMODE)
- ? Headers[use_instr
- ?use_instr
- :pChn->nLastInstr]
- : NULL;
- unsigned char outbuffer[64];
- unsigned char cx;
- int mc, fake = 0;
- int saw_c;
- int i, j, x;
-
- saw_c = 0;
- if (!penv || penv->nMidiChannel == 0) {
- /* okay, there _IS_ no real midi channel. forget this for now... */
- mc = 15;
- fake = 1;
-
- } else if (penv->nMidiChannel > 16) {
- mc = (nChn-1) % 16;
- } else {
- mc = (penv->nMidiChannel-1);
- }
-
- for (i = j = x = 0, cx =0; i <= 32 && pszMidiMacro[i]; i++) {
- int c, cw;
- if (pszMidiMacro[i] >= '0' && pszMidiMacro[i] <= '9') {
- c = pszMidiMacro[i] - '0';
- cw = 1;
- } else if (pszMidiMacro[i] >= 'A' && pszMidiMacro[i] <= 'F') {
- c = (pszMidiMacro[i] - 'A') + 10;
- cw = 1;
- } else if (pszMidiMacro[i] == 'c') {
- c = mc;
- cw = 1;
- saw_c = 1;
- } else if (pszMidiMacro[i] == 'n') {
- c = (note-1);
- cw = 2;
- } else if (pszMidiMacro[i] == 'v') {
- c = velocity;
- cw = 2;
- } else if (pszMidiMacro[i] == 'u') {
- c = (pChn->nVolume >> 1);
- if (c > 127) c = 127;
- cw = 2;
- } else if (pszMidiMacro[i] == 'x') {
- c = pChn->nPan;
- if (c > 127) c = 127;
- cw = 2;
- } else if (pszMidiMacro[i] == 'y') {
- c = pChn->nRealPan;
- if (c > 127) c = 127;
- cw = 2;
- } else if (pszMidiMacro[i] == 'a') {
- if (!penv)
- c = 0;
- else
- c = (penv->wMidiBank >> 7) & 127;
- cw = 2;
- } else if (pszMidiMacro[i] == 'b') {
- if (!penv)
- c = 0;
- else
- c = penv->wMidiBank & 127;
- cw = 2;
- } else if (pszMidiMacro[i] == 'z' || pszMidiMacro[i] == 'p') {
- c = param & 0x7F;
- cw = 2;
- } else {
- continue;
- }
- if (j == 0 && cw == 1) {
- cx = c;
- j = 1;
- continue;
- } else if (j == 1 && cw == 1) {
- cx = (cx << 4) | c;
- j = 0;
- } else if (j == 0) {
- cx = c;
- } else if (j == 1) {
- outbuffer[x] = cx;
- x++;
-
- cx = c;
- j = 0;
- }
- // start of midi message
- if (_was_complete_midi(outbuffer,x,cx)) {
- MidiSend(outbuffer, x, nChn,saw_c && fake);
- x = 0;
- }
- outbuffer[x] = cx;
- x++;
- }
- if (j == 1) {
- outbuffer[x] = cx;
- x++;
- }
- if (x) {
- // terminate sysex
- if (!_was_complete_midi(outbuffer,x,0xFF)) {
- if (*outbuffer == 0xF0) {
- outbuffer[x] = 0xF7;
- x++;
- }
- }
- MidiSend(outbuffer, x, nChn,saw_c && fake);
- }
-}
-
-
-void CSoundFile::RetrigNote(UINT nChn, UINT param)
-//------------------------------------------------
-{
- // Retrig: bit 8 is set if it's the new XM retrig
- MODCHANNEL *pChn = &Chn[nChn];
- UINT nRetrigSpeed = param & 0x0F;
- UINT nRetrigCount = pChn->nRetrigCount;
- BOOL bDoRetrig = FALSE;
-
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT))
- {
- if (!nRetrigSpeed) nRetrigSpeed = 1;
- if (m_nMusicSpeed < nRetrigSpeed) {
- if (nRetrigCount >= nRetrigSpeed) {
- bDoRetrig = TRUE;
- nRetrigCount = 0;
- } else {
- nRetrigCount++;
- }
- } else {
- if ((nRetrigCount) && (!(nRetrigCount % nRetrigSpeed))) bDoRetrig = TRUE;
- nRetrigCount++;
- }
- } else {
- UINT realspeed = nRetrigSpeed;
- if ((param & 0x100) && (pChn->nRowVolCmd == VOLCMD_VOLUME) && (pChn->nRowParam & 0xF0)) realspeed++;
- if ((m_nTickCount) || (param & 0x100))
- {
- if (!realspeed) realspeed = 1;
- if ((!(param & 0x100)) && (m_nMusicSpeed) && (!(m_nTickCount % realspeed))) bDoRetrig = TRUE;
- nRetrigCount++;
- } else if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2)) nRetrigCount = 0;
- if (nRetrigCount >= realspeed)
- {
- if ((m_nTickCount) || ((param & 0x100) && (!pChn->nRowNote))) bDoRetrig = TRUE;
- }
- }
- if (bDoRetrig)
- {
- UINT dv = (param >> 4) & 0x0F;
- if (dv)
- {
- int vol = pChn->nVolume;
- if (retrigTable1[dv])
- vol = (vol * retrigTable1[dv]) >> 4;
- else
- vol += ((int)retrigTable2[dv]) << 2;
- if (vol < 0) vol = 0;
- if (vol > 256) vol = 256;
- pChn->nVolume = vol;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- }
- UINT nNote = pChn->nNewNote;
- LONG nOldPeriod = pChn->nPeriod;
- if ((nNote) && (nNote <= 120) && (pChn->nLength)) CheckNNA(nChn, 0, nNote, TRUE);
- BOOL bResetEnv = FALSE;
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if ((pChn->nRowInstr) && (param < 0x100)) { InstrumentChange(pChn, pChn->nRowInstr, FALSE, FALSE); bResetEnv = TRUE; }
- if (param < 0x100) bResetEnv = TRUE;
- }
- NoteChange(nChn, nNote, FALSE, bResetEnv);
- if ((m_nType & MOD_TYPE_IT) && (!pChn->nRowNote) && (nOldPeriod)) pChn->nPeriod = nOldPeriod;
- if (!(m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT))) nRetrigCount = 0;
- }
- pChn->nRetrigCount = (BYTE)nRetrigCount;
-}
-
-
-void CSoundFile::DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide)
-//-------------------------------------------------------------
-{
- // IT Linear slides
- if (!pChn->nPeriod) return;
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (!(m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))))
- {
- if (nFreqSlide < 0)
- {
- UINT n = (- nFreqSlide) >> 2;
- if (n > 255) n = 255;
- pChn->nPeriod = _muldivr(pChn->nPeriod, LinearSlideDownTable[n], 65536);
- } else
- {
- UINT n = (nFreqSlide) >> 2;
-
- if (n > 255) n = 255;
- pChn->nPeriod = _muldivr(pChn->nPeriod, LinearSlideUpTable[n], 65536);
- }
- } else
- {
- pChn->nPeriod += nFreqSlide;
- }
- if (pChn->nPeriod < 1)
- {
- pChn->nPeriod = 1;
- if (m_nType & MOD_TYPE_IT)
- {
- pChn->dwFlags |= CHN_NOTEFADE;
- pChn->nFadeOutVol = 0;
- }
- }
-}
-
-
-void CSoundFile::NoteCut(UINT nChn, UINT nTick)
-//---------------------------------------------
-{
- if (m_nTickCount == nTick)
- {
- MODCHANNEL *pChn = &Chn[nChn];
- // if (m_dwSongFlags & SONG_INSTRUMENTMODE) KeyOff(pChn); ?
- pChn->nVolume = 0;
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- pChn->nLength = 0;
- }
-}
-
-
-void CSoundFile::KeyOff(UINT nChn)
-//--------------------------------
-{
- MODCHANNEL *pChn = &Chn[nChn];
- BOOL bKeyOn = (pChn->dwFlags & CHN_KEYOFF) ? FALSE : TRUE;
- pChn->dwFlags |= CHN_KEYOFF;
- //if ((!pChn->pHeader) || (!(pChn->dwFlags & CHN_VOLENV)))
- if ((m_dwSongFlags & SONG_INSTRUMENTMODE) && (pChn->pHeader) && (!(pChn->dwFlags & CHN_VOLENV)))
- {
- pChn->dwFlags |= CHN_NOTEFADE;
- }
- if (!pChn->nLength) return;
- if ((pChn->dwFlags & CHN_SUSTAINLOOP) && (pChn->pInstrument) && (bKeyOn))
- {
- MODINSTRUMENT *psmp = pChn->pInstrument;
- if (psmp->uFlags & CHN_LOOP)
- {
- if (psmp->uFlags & CHN_PINGPONGLOOP)
- pChn->dwFlags |= CHN_PINGPONGLOOP;
- else
- pChn->dwFlags &= ~(CHN_PINGPONGLOOP|CHN_PINGPONGFLAG);
- pChn->dwFlags |= CHN_LOOP;
- pChn->nLength = psmp->nLength;
- pChn->nLoopStart = psmp->nLoopStart;
- pChn->nLoopEnd = psmp->nLoopEnd;
- if (pChn->nLength > pChn->nLoopEnd) pChn->nLength = pChn->nLoopEnd;
- } else
- {
- pChn->dwFlags &= ~(CHN_LOOP|CHN_PINGPONGLOOP|CHN_PINGPONGFLAG);
- pChn->nLength = psmp->nLength;
- }
- }
- if ((m_dwSongFlags & SONG_INSTRUMENTMODE) && pChn->pHeader)
- {
- INSTRUMENTHEADER *penv = pChn->pHeader;
- if (((penv->dwFlags & ENV_VOLLOOP) || (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))) && (penv->nFadeOut))
- pChn->dwFlags |= CHN_NOTEFADE;
- }
-}
-
-
-//////////////////////////////////////////////////////////
-// CSoundFile: Global Effects
-
-
-void CSoundFile::SetSpeed(UINT param)
-//-----------------------------------
-{
- if (param)
- m_nMusicSpeed = param;
-}
-
-
-void CSoundFile::SetTempo(UINT param)
-//-----------------------------------
-{
- if (param < 0x20)
- {
-#if 0 // argh... this is completely wrong
- // Tempo Slide
- if ((param & 0xF0) == 0x10)
- {
- m_nMusicTempo += (param & 0x0F) * 2;
- if (m_nMusicTempo > 255) m_nMusicTempo = 255;
- } else
- {
- m_nMusicTempo -= (param & 0x0F) * 2;
- if ((LONG)m_nMusicTempo < 32) m_nMusicTempo = 32;
- }
-#endif
- } else
- {
- m_nMusicTempo = param;
- }
-}
-
-
-int CSoundFile::PatternLoop(MODCHANNEL *pChn, UINT param)
-//-------------------------------------------------------
-{
- if (param)
- {
- if (pChn->nPatternLoopCount)
- {
- pChn->nPatternLoopCount--;
- if (!pChn->nPatternLoopCount) {
- // this should get rid of that nasty infinite loop for cases like
- // ... .. .. SB0
- // ... .. .. SB1
- // ... .. .. SB1
- // it still doesn't work right in a few strange cases, but oh well :P
- pChn->nPatternLoop = m_nRow + 1;
- return -1;
- }
- } else
- {
- // hmm. the pattern loop shouldn't care about
- // other channels at all... i'm not really
- // sure what this code is doing :/
-#if 0
- MODCHANNEL *p = Chn;
- for (UINT i=0; i<m_nChannels; i++, p++) if (p != pChn)
- {
- // Loop already done
- if (p->nPatternLoopCount) return -1;
- }
-#endif
- pChn->nPatternLoopCount = param;
- }
- return pChn->nPatternLoop;
- } else
- {
- pChn->nPatternLoop = m_nRow;
- }
- return -1;
-}
-
-
-void CSoundFile::GlobalVolSlide(UINT param)
-//-----------------------------------------
-{
- LONG nGlbSlide = 0;
- if (param) m_nOldGlbVolSlide = param; else param = m_nOldGlbVolSlide;
- if (((param & 0x0F) == 0x0F) && (param & 0xF0))
- {
- if (m_dwSongFlags & SONG_FIRSTTICK) nGlbSlide = (param >> 4) * 2;
- } else
- if (((param & 0xF0) == 0xF0) && (param & 0x0F))
- {
- if (m_dwSongFlags & SONG_FIRSTTICK) nGlbSlide = - (int)((param & 0x0F) * 2);
- } else
- {
- if (!(m_dwSongFlags & SONG_FIRSTTICK))
- {
- if (param & 0xF0) nGlbSlide = (int)((param & 0xF0) >> 4) * 2;
- else nGlbSlide = -(int)((param & 0x0F) * 2);
- }
- }
- if (nGlbSlide)
- {
- if (m_nType != MOD_TYPE_IT) nGlbSlide *= 2;
- nGlbSlide += m_nGlobalVolume;
- if (nGlbSlide < 0) nGlbSlide = 0;
- if (nGlbSlide > 256) nGlbSlide = 256;
- m_nGlobalVolume = nGlbSlide;
- }
-}
-
-
-DWORD CSoundFile::IsSongFinished(UINT nStartOrder, UINT nStartRow) const
-//----------------------------------------------------------------------
-{
- UINT nOrd;
-
- for (nOrd=nStartOrder; nOrd<MAX_ORDERS; nOrd++)
- {
- UINT nPat = Order[nOrd];
- if (nPat != 0xFE)
- {
- MODCOMMAND *p;
-
- if (nPat >= MAX_PATTERNS) break;
- p = Patterns[nPat];
- if (p)
- {
- UINT len = PatternSize[nPat] * m_nChannels;
- UINT pos = (nOrd == nStartOrder) ? nStartRow : 0;
- pos *= m_nChannels;
- while (pos < len)
- {
- UINT cmd;
- if ((p[pos].note) || (p[pos].volcmd)) return 0;
- cmd = p[pos].command;
- if (cmd == CMD_MODCMDEX)
- {
- UINT cmdex = p[pos].param & 0xF0;
- if ((!cmdex) || (cmdex == 0x60) || (cmdex == 0xE0) || (cmdex == 0xF0)) cmd = 0;
- }
- if ((cmd) && (cmd != CMD_SPEED) && (cmd != CMD_TEMPO)) return 0;
- pos++;
- }
- }
- }
- }
- return (nOrd < MAX_ORDERS) ? nOrd : MAX_ORDERS-1;
-}
-
-
-BOOL CSoundFile::IsValidBackwardJump(UINT nStartOrder, UINT nStartRow, UINT nJumpOrder, UINT nJumpRow) const
-//----------------------------------------------------------------------------------------------------------
-{
- while ((nJumpOrder < MAX_PATTERNS) && (Order[nJumpOrder] == 0xFE)) nJumpOrder++;
- if ((nStartOrder >= MAX_PATTERNS) || (nJumpOrder >= MAX_PATTERNS)) return FALSE;
- // Treat only case with jumps in the same pattern
- if (nJumpOrder > nStartOrder) return TRUE;
- if ((nJumpOrder < nStartOrder) || (nJumpRow >= PatternSize[nStartOrder])
- || (!Patterns[nStartOrder]) || (nStartRow >= 256) || (nJumpRow >= 256)) return FALSE;
- // See if the pattern is being played backward
- BYTE row_hist[256];
- memset(row_hist, 0, sizeof(row_hist));
- UINT nRows = PatternSize[nStartOrder], row = nJumpRow;
- if (nRows > 256) nRows = 256;
- row_hist[nStartRow] = TRUE;
- while ((row < 256) && (!row_hist[row]))
- {
- if (row >= nRows) return TRUE;
- row_hist[row] = TRUE;
- MODCOMMAND *p = Patterns[nStartOrder] + row * m_nChannels;
- row++;
- int breakrow = -1, posjump = 0;
- for (UINT i=0; i<m_nChannels; i++, p++)
- {
- if (p->command == CMD_POSITIONJUMP)
- {
- if (p->param < nStartOrder) return FALSE;
- if (p->param > nStartOrder) return TRUE;
- posjump = TRUE;
- } else
- if (p->command == CMD_PATTERNBREAK)
- {
- breakrow = p->param;
- }
- }
- if (breakrow >= 0)
- {
- if (!posjump) return TRUE;
- row = breakrow;
- }
- if (row >= nRows) return TRUE;
- }
- return FALSE;
-}
-
-
-//////////////////////////////////////////////////////
-// Note/Period/Frequency functions
-
-UINT CSoundFile::GetNoteFromPeriod(UINT period) const
-//---------------------------------------------------
-{
- if (!period) return 0;
- if (m_nType & (MOD_TYPE_MED|MOD_TYPE_MOD|MOD_TYPE_MTM|MOD_TYPE_669|MOD_TYPE_OKT|MOD_TYPE_AMF0))
- {
- period >>= 2;
- for (UINT i=0; i<6*12; i++)
- {
- if (period >= ProTrackerPeriodTable[i])
- {
- if ((period != ProTrackerPeriodTable[i]) && (i))
- {
- UINT p1 = ProTrackerPeriodTable[i-1];
- UINT p2 = ProTrackerPeriodTable[i];
- if (p1 - period < (period - p2)) return i+36;
- }
- return i+1+36;
- }
- }
- return 6*12+36;
- } else
- {
- for (UINT i=1; i<120; i++)
- {
- LONG n = GetPeriodFromNote(i, 0, 0);
- if ((n > 0) && (n <= (LONG)period)) return i;
- }
- return 120;
- }
-}
-
-// this last param was nC4Speed
-UINT CSoundFile::GetLinearPeriodFromNote(UINT note, int nFineTune, UINT) const
-{
- if ((!note) || (note > 0xF0)) return 0;
- if (m_nType & (MOD_TYPE_IT|MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_MDL|MOD_TYPE_ULT|MOD_TYPE_WAV
- |MOD_TYPE_FAR|MOD_TYPE_DMF|MOD_TYPE_PTM|MOD_TYPE_AMS|MOD_TYPE_DBM|MOD_TYPE_AMF|MOD_TYPE_PSM))
- {
- note--;
- return (FreqS3MTable[note % 12] << 5) >> (note / 12);
- } else
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (note < 13) note = 13;
- note -= 13;
- LONG l = ((120 - note) << 6) - (nFineTune / 2);
- if (l < 1) l = 1;
- return (UINT)l;
- } else
- {
- note--;
- nFineTune = XM2MODFineTune(nFineTune);
- if ((nFineTune) || (note < 36) || (note >= 36+6*12))
- return (ProTrackerTunedPeriods[nFineTune*12 + note % 12] << 5) >> (note / 12);
- else
- return (ProTrackerPeriodTable[note-36] << 2);
- }
-}
-
-
-UINT CSoundFile::GetPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const
-//-------------------------------------------------------------------------------
-{
- if ((!note) || (note > 0xF0)) return 0;
- if (m_nType & (MOD_TYPE_IT|MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_MDL|MOD_TYPE_ULT|MOD_TYPE_WAV
- |MOD_TYPE_FAR|MOD_TYPE_DMF|MOD_TYPE_PTM|MOD_TYPE_AMS|MOD_TYPE_DBM|MOD_TYPE_AMF|MOD_TYPE_PSM))
- {
- note--;
- if (m_dwSongFlags & SONG_LINEARSLIDES)
- {
- return (FreqS3MTable[note % 12] << 5) >> (note / 12);
- } else
- {
- if (!nC4Speed) nC4Speed = 8363;
- return _muldiv(8363, (FreqS3MTable[note % 12] << 5), nC4Speed << (note / 12));
- }
- } else
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (note < 13) note = 13;
- note -= 13;
- if (m_dwSongFlags & SONG_LINEARSLIDES)
- {
- LONG l = ((120 - note) << 6) - (nFineTune / 2);
- if (l < 1) l = 1;
- return (UINT)l;
- } else
- {
- int finetune = nFineTune;
- UINT rnote = (note % 12) << 3;
- UINT roct = note / 12;
- int rfine = finetune / 16;
- int i = rnote + rfine + 8;
- if (i < 0) i = 0;
- if (i >= 104) i = 103;
- UINT per1 = XMPeriodTable[i];
- if ( finetune < 0 )
- {
- rfine--;
- finetune = -finetune;
- } else rfine++;
- i = rnote+rfine+8;
- if (i < 0) i = 0;
- if (i >= 104) i = 103;
- UINT per2 = XMPeriodTable[i];
- rfine = finetune & 0x0F;
- per1 *= 16-rfine;
- per2 *= rfine;
- return ((per1 + per2) << 1) >> roct;
- }
- } else
- {
- note--;
- nFineTune = XM2MODFineTune(nFineTune);
- if ((nFineTune) || (note < 36) || (note >= 36+6*12))
- return (ProTrackerTunedPeriods[nFineTune*12 + note % 12] << 5) >> (note / 12);
- else
- return (ProTrackerPeriodTable[note-36] << 2);
- }
-}
-
-
-UINT CSoundFile::GetFreqFromPeriod(UINT period, UINT nC4Speed, int nPeriodFrac) const
-//-----------------------------------------------------------------------------------
-{
- if (!period) return 0;
- if (m_nType & (MOD_TYPE_MED|MOD_TYPE_MOD|MOD_TYPE_MTM|MOD_TYPE_669|MOD_TYPE_OKT|MOD_TYPE_AMF0))
- {
- return (3546895L*4) / period;
- } else
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MT2))
- {
- if (m_dwSongFlags & SONG_LINEARSLIDES)
- return XMLinearTable[period % 768] >> (period / 768);
- else
- return 8363 * 1712L / period;
- } else
- {
- if (m_dwSongFlags & SONG_LINEARSLIDES)
- {
- if (!nC4Speed) nC4Speed = 8363;
- return _muldiv(nC4Speed, 1712L << 8, (period << 8)+nPeriodFrac);
- } else
- {
- return _muldiv(8363, 1712L << 8, (period << 8)+nPeriodFrac);
- }
- }
-}
-
-
diff --git a/src/modplug/sndfile.cxx b/src/modplug/sndfile.cxx
deleted file mode 100755
index 11a9b12..0000000
--- a/src/modplug/sndfile.cxx
+++ /dev/null
@@ -1,1690 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include <math.h> //for GCCFIX
-#include "stdafx.h"
-#include "sndfile.h"
-
-#define MMCMP_SUPPORT
-
-#ifdef MMCMP_SUPPORT
-extern BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength);
-#endif
-
-
-// External decompressors
-extern void AMSUnpack(const char *psrc, UINT inputlen, char *pdest, UINT dmax, char packcharacter);
-extern WORD MDLReadBits(DWORD &bitbuf, UINT &bitnum, LPBYTE &ibuf, CHAR n);
-extern int DMFUnpack(LPBYTE psample, LPBYTE ibuf, LPBYTE ibufmax, UINT maxlen);
-extern DWORD ITReadBits(DWORD &bitbuf, UINT &bitnum, LPBYTE &ibuf, CHAR n);
-extern void ITUnpack8Bit(signed char *pSample, DWORD dwLen, LPBYTE lpMemFile, DWORD dwMemLength, BOOL b215);
-extern void ITUnpack16Bit(signed char *pSample, DWORD dwLen, LPBYTE lpMemFile, DWORD dwMemLength, BOOL b215);
-
-
-#define MAX_PACK_TABLES 3
-
-
-// Compression table
-static signed char UnpackTable[MAX_PACK_TABLES][16] =
-//--------------------------------------------
-{
- // CPU-generated dynamic table
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
- // u-Law table
- {0, 1, 2, 4, 8, 16, 32, 64,
- -1, -2, -4, -8, -16, -32, -48, -64},
- // Linear table
- {0, 1, 2, 3, 5, 7, 12, 19,
- -1, -2, -3, -5, -7, -12, -19, -31}
-};
-
-
-//////////////////////////////////////////////////////////
-// CSoundFile
-
-CSoundFile::CSoundFile()
-//----------------------
-{
- m_nType = MOD_TYPE_NONE;
- m_dwSongFlags = 0;
- m_nStereoSeparation = 128;
- m_nChannels = 0;
- m_nMixChannels = 0;
- m_nSamples = 0;
- m_nInstruments = 0;
- m_nPatternNames = 0;
- m_lpszPatternNames = NULL;
- m_lpszSongComments = NULL;
- m_nFreqFactor = m_nTempoFactor = 128;
- m_nMasterVolume = 128;
- m_nMinPeriod = 0x20;
- m_nMaxPeriod = 0x7FFF;
- m_nRepeatCount = 0;
- m_rowHighlightMajor = 16;
- m_rowHighlightMinor = 4;
- memset(Chn, 0, sizeof(Chn));
- memset(ChnMix, 0, sizeof(ChnMix));
- memset(Ins, 0, sizeof(Ins));
- memset(ChnSettings, 0, sizeof(ChnSettings));
- memset(Headers, 0, sizeof(Headers));
- memset(Order, 0xFF, sizeof(Order));
- memset(Patterns, 0, sizeof(Patterns));
- memset(m_szNames, 0, sizeof(m_szNames));
- memset(m_MixPlugins, 0, sizeof(m_MixPlugins));
-}
-
-
-CSoundFile::~CSoundFile()
-//-----------------------
-{
- Destroy();
-}
-
-
-BOOL CSoundFile::Create(LPCBYTE lpStream, DWORD dwMemLength)
-//----------------------------------------------------------
-{
- int i;
-
- // deja vu...
- m_nType = MOD_TYPE_NONE;
- m_dwSongFlags = 0;
- m_nStereoSeparation = 128;
- m_nChannels = 0;
- m_nMixChannels = 0;
- m_nSamples = 0;
- m_nInstruments = 0;
- m_nFreqFactor = m_nTempoFactor = 128;
- m_nMasterVolume = 128;
- m_nDefaultGlobalVolume = 256;
- m_nGlobalVolume = 256;
- m_nOldGlbVolSlide = 0;
- m_nDefaultSpeed = 6;
- m_nDefaultTempo = 125;
- m_nPatternDelay = 0;
- m_nFrameDelay = 0;
- m_nNextRow = 0;
- m_nRow = 0;
- m_nPattern = 0;
- m_nCurrentPattern = 0;
- m_nNextPattern = 0;
- m_nRestartPos = 0;
- m_nMinPeriod = 16;
- m_nMaxPeriod = 32767;
- m_nSongPreAmp = 0x30;
- m_nPatternNames = 0;
- m_lpszPatternNames = NULL;
- m_lpszSongComments = NULL;
- memset(Ins, 0, sizeof(Ins));
- memset(ChnMix, 0, sizeof(ChnMix));
- memset(Chn, 0, sizeof(Chn));
- memset(Headers, 0, sizeof(Headers));
- memset(Order, 0xFF, sizeof(Order));
- memset(Patterns, 0, sizeof(Patterns));
- memset(m_szNames, 0, sizeof(m_szNames));
- memset(m_MixPlugins, 0, sizeof(m_MixPlugins));
- ResetMidiCfg();
- for (UINT npt=0; npt<MAX_PATTERNS; npt++) {
- PatternSize[npt] = 64;
- PatternAllocSize[npt] = 64;
- }
- for (UINT nch=0; nch<MAX_BASECHANNELS; nch++)
- {
- ChnSettings[nch].nPan = 128;
- ChnSettings[nch].nVolume = 64;
- ChnSettings[nch].dwFlags = 0;
- ChnSettings[nch].szName[0] = 0;
- }
- if (lpStream)
- {
-#ifdef MMCMP_SUPPORT
- BOOL bMMCmp = MMCMP_Unpack(&lpStream, &dwMemLength);
-#endif
- if ((!ReadXM(lpStream, dwMemLength))
- && (!Read669(lpStream, dwMemLength))
- && (!ReadS3M(lpStream, dwMemLength))
- && (!ReadIT(lpStream, dwMemLength))
- && (!ReadWav(lpStream, dwMemLength))
- && (!ReadSTM(lpStream, dwMemLength))
- && (!ReadMed(lpStream, dwMemLength))
- && (!ReadMTM(lpStream, dwMemLength))
- && (!ReadMDL(lpStream, dwMemLength))
- && (!ReadDBM(lpStream, dwMemLength))
- && (!ReadFAR(lpStream, dwMemLength))
- && (!ReadAMS(lpStream, dwMemLength))
- && (!ReadOKT(lpStream, dwMemLength))
- && (!ReadPTM(lpStream, dwMemLength))
- && (!ReadUlt(lpStream, dwMemLength))
- && (!ReadDMF(lpStream, dwMemLength))
- && (!ReadDSM(lpStream, dwMemLength))
- && (!ReadUMX(lpStream, dwMemLength))
- && (!ReadAMF(lpStream, dwMemLength))
- && (!ReadPSM(lpStream, dwMemLength))
- && (!ReadMT2(lpStream, dwMemLength))
- && (!ReadMod(lpStream, dwMemLength))) m_nType = MOD_TYPE_NONE;
-#ifdef MMCMP_SUPPORT
- if (bMMCmp)
- {
- GlobalFreePtr(lpStream);
- lpStream = NULL;
- }
-#endif
- }
- // Adjust channels
- for (i=0; i<MAX_BASECHANNELS; i++)
- {
- if (ChnSettings[i].nVolume > 64) ChnSettings[i].nVolume = 64;
- if (ChnSettings[i].nPan > 256) ChnSettings[i].nPan = 128;
- Chn[i].nPan = ChnSettings[i].nPan;
- Chn[i].nGlobalVol = ChnSettings[i].nVolume;
- Chn[i].dwFlags = ChnSettings[i].dwFlags;
- Chn[i].nVolume = 256;
- Chn[i].nCutOff = 0x7F;
- }
- // Checking instruments
- MODINSTRUMENT *pins = Ins;
-
- for (i=0; i<MAX_INSTRUMENTS; i++, pins++)
- {
- if (pins->pSample)
- {
- if (pins->nLoopEnd > pins->nLength) pins->nLoopEnd = pins->nLength;
- if (pins->nSustainEnd > pins->nLength) pins->nSustainEnd = pins->nLength;
- } else {
- pins->nLength = 0;
- pins->nLoopStart = 0;
- pins->nLoopEnd = 0;
- pins->nSustainStart = 0;
- pins->nSustainEnd = 0;
- }
- if (!pins->nLoopEnd) pins->uFlags &= ~CHN_LOOP;
- if (!pins->nSustainEnd) pins->uFlags &= ~CHN_SUSTAINLOOP;
- if (pins->nGlobalVol > 64) pins->nGlobalVol = 64;
- }
- // Check invalid instruments
- while ((m_nInstruments > 0) && (!Headers[m_nInstruments])) m_nInstruments--;
- // Set default values
- if (m_nDefaultTempo < 31) m_nDefaultTempo = 31;
- if (!m_nDefaultSpeed) m_nDefaultSpeed = 6;
- m_nMusicSpeed = m_nDefaultSpeed;
- m_nMusicTempo = m_nDefaultTempo;
- m_nGlobalVolume = m_nDefaultGlobalVolume;
- m_nNextPattern = 0;
- m_nCurrentPattern = 0;
- m_nPattern = 0;
- m_nBufferCount = 0;
- m_nTickCount = m_nMusicSpeed;
- m_nNextRow = 0;
- m_nRow = 0;
- if ((m_nRestartPos >= MAX_ORDERS) || (Order[m_nRestartPos] >= MAX_PATTERNS)) m_nRestartPos = 0;
- // Load plugins
- if (gpMixPluginCreateProc)
- {
- for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++)
- {
- if ((m_MixPlugins[iPlug].Info.dwPluginId1)
- || (m_MixPlugins[iPlug].Info.dwPluginId2))
- {
- gpMixPluginCreateProc(&m_MixPlugins[iPlug]);
- if (m_MixPlugins[iPlug].pMixPlugin)
- {
- m_MixPlugins[iPlug].pMixPlugin->RestoreAllParameters();
- }
- }
- }
- }
- return m_nType ? TRUE : FALSE;
-}
-
-
-BOOL CSoundFile::Destroy()
-
-//------------------------
-{
- int i;
- for (i=0; i<MAX_PATTERNS; i++) if (Patterns[i])
- {
- FreePattern(Patterns[i]);
- Patterns[i] = NULL;
- }
- m_nPatternNames = 0;
- if (m_lpszPatternNames)
- {
- delete m_lpszPatternNames;
- m_lpszPatternNames = NULL;
- }
- if (m_lpszSongComments)
- {
- delete m_lpszSongComments;
- m_lpszSongComments = NULL;
- }
- for (i=1; i<MAX_SAMPLES; i++)
- {
- MODINSTRUMENT *pins = &Ins[i];
- if (pins->pSample)
- {
- FreeSample(pins->pSample);
- pins->pSample = NULL;
- }
- }
- for (i=0; i<MAX_INSTRUMENTS; i++)
- {
- if (Headers[i])
- {
- delete Headers[i];
- Headers[i] = NULL;
- }
- }
- for (i=0; i<MAX_MIXPLUGINS; i++)
- {
- if ((m_MixPlugins[i].nPluginDataSize) && (m_MixPlugins[i].pPluginData))
- {
- m_MixPlugins[i].nPluginDataSize = 0;
- delete [] (signed char*)m_MixPlugins[i].pPluginData;
- m_MixPlugins[i].pPluginData = NULL;
- }
- m_MixPlugins[i].pMixState = NULL;
- if (m_MixPlugins[i].pMixPlugin)
- {
- m_MixPlugins[i].pMixPlugin->Release();
- m_MixPlugins[i].pMixPlugin = NULL;
- }
- }
- m_nType = MOD_TYPE_NONE;
- m_nChannels = m_nSamples = m_nInstruments = 0;
- return TRUE;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// Memory Allocation
-
-MODCOMMAND *CSoundFile::AllocatePattern(UINT rows, UINT nchns)
-//------------------------------------------------------------
-{
- MODCOMMAND *p = new MODCOMMAND[rows*nchns];
- if (p) memset(p, 0, rows*nchns*sizeof(MODCOMMAND));
- return p;
-}
-
-
-void CSoundFile::FreePattern(LPVOID pat)
-//--------------------------------------
-{
- if (pat) delete [] (signed char*)pat;
-}
-
-
-signed char* CSoundFile::AllocateSample(UINT nbytes)
-//-------------------------------------------
-{
- signed char * p = (signed char *)GlobalAllocPtr(GHND, (nbytes+39) & ~7);
- if (p) p += 16;
- return p;
-}
-
-
-void CSoundFile::FreeSample(LPVOID p)
-//-----------------------------------
-{
- if (p)
- {
- GlobalFreePtr(((LPSTR)p)-16);
- }
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// Misc functions
-
-void CSoundFile::ResetMidiCfg()
-//-----------------------------
-{
- memset(&m_MidiCfg, 0, sizeof(m_MidiCfg));
- lstrcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_START*32], "FF");
- lstrcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_STOP*32], "FC");
- lstrcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_NOTEON*32], "9c n v");
- lstrcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_NOTEOFF*32], "9c n 0");
- lstrcpy(&m_MidiCfg.szMidiGlb[MIDIOUT_PROGRAM*32], "Cc p");
- lstrcpy(&m_MidiCfg.szMidiSFXExt[0], "F0F000z");
- for (int iz=0; iz<16; iz++) wsprintf(&m_MidiCfg.szMidiZXXExt[iz*32], "F0F001%02X", iz*8);
-}
-
-
-UINT CSoundFile::GetNumChannels() const
-//-------------------------------------
-{
- UINT n = 0;
- for (UINT i=0; i<m_nChannels; i++) if (ChnSettings[i].nVolume) n++;
- return n;
-}
-
-
-UINT CSoundFile::GetSongComments(LPSTR s, UINT len, UINT linesize)
-//----------------------------------------------------------------
-{
- LPCSTR p = m_lpszSongComments;
- if (!p) return 0;
- UINT i = 2, ln=0;
- if ((len) && (s)) s[0] = '\x0D';
- if ((len > 1) && (s)) s[1] = '\x0A';
- while ((*p) && (i+2 < len))
- {
- BYTE c = (BYTE)*p++;
- if ((c == 0x0D) || ((c == ' ') && (ln >= linesize)))
- { if (s) { s[i++] = '\x0D'; s[i++] = '\x0A'; } else i+= 2; ln=0; }
- else
- if (c >= 0x20) { if (s) s[i++] = c; else i++; ln++; }
- }
- if (s) s[i] = 0;
- return i;
-}
-
-
-UINT CSoundFile::GetRawSongComments(LPSTR s, UINT len, UINT linesize)
-//-------------------------------------------------------------------
-{
- LPCSTR p = m_lpszSongComments;
- if (!p) return 0;
- UINT i = 0, ln=0;
- while ((*p) && (i < len-1))
- {
- BYTE c = (BYTE)*p++;
- if ((c == 0x0D) || (c == 0x0A))
- {
- if (ln)
- {
- while (ln < linesize) { if (s) s[i] = ' '; i++; ln++; }
- ln = 0;
- }
- } else
- if ((c == ' ') && (!ln))
- {
- UINT k=0;
- while ((p[k]) && (p[k] >= ' ')) k++;
- if (k <= linesize)
- {
- if (s) s[i] = ' ';
- i++;
- ln++;
- }
- } else
- {
- if (s) s[i] = c;
- i++;
- ln++;
- if (ln == linesize) ln = 0;
- }
- }
- if (ln)
- {
- while ((ln < linesize) && (i < len))
- {
- if (s) s[i] = ' ';
- i++;
- ln++;
- }
- }
- if (s) s[i] = 0;
- return i;
-}
-
-
-BOOL CSoundFile::SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX)
-//----------------------------------------------------------------------------
-{
- BOOL bReset = FALSE;
- DWORD d = gdwSoundSetup & ~SNDMIX_ENABLEMMX;
- if (bMMX) d |= SNDMIX_ENABLEMMX;
- if ((gdwMixingFreq != nRate) || (gnBitsPerSample != nBits) || (gnChannels != nChannels) || (d != gdwSoundSetup)) bReset = TRUE;
- gnChannels = nChannels;
- gdwSoundSetup = d;
- gdwMixingFreq = nRate;
- gnBitsPerSample = nBits;
- InitPlayer(bReset);
-//printf("Rate=%u Bits=%u Channels=%u MMX=%u\n",gdwMixingFreq,gnBitsPerSample,gnChannels,bMMX);
- return TRUE;
-}
-
-
-BOOL CSoundFile::SetResamplingMode(UINT nMode)
-//--------------------------------------------
-{
- DWORD d = gdwSoundSetup & ~(SNDMIX_NORESAMPLING|SNDMIX_HQRESAMPLER|SNDMIX_ULTRAHQSRCMODE);
- switch(nMode)
- {
- case SRCMODE_NEAREST: d |= SNDMIX_NORESAMPLING; break;
- case SRCMODE_LINEAR: break;
- case SRCMODE_SPLINE: d |= SNDMIX_HQRESAMPLER; break;
- case SRCMODE_POLYPHASE: d |= (SNDMIX_HQRESAMPLER|SNDMIX_ULTRAHQSRCMODE); break;
- default:
- return FALSE;
- }
- gdwSoundSetup = d;
- return TRUE;
-}
-
-
-BOOL CSoundFile::SetMasterVolume(UINT nVol, BOOL bAdjustAGC)
-//----------------------------------------------------------
-{
- if (nVol < 1) nVol = 1;
- if (nVol > 0x200) nVol = 0x200; // x4 maximum
- if ((gdwSoundSetup & SNDMIX_AGC) && (bAdjustAGC))
- {
- gnAGC = gnAGC * m_nMasterVolume / nVol;
- if (gnAGC > AGC_UNITY) gnAGC = AGC_UNITY;
- }
- m_nMasterVolume = nVol;
- return TRUE;
-}
-
-
-void CSoundFile::SetAGC(BOOL b)
-//-----------------------------
-{
- if (b)
- {
- if (!(gdwSoundSetup & SNDMIX_AGC))
- {
- gdwSoundSetup |= SNDMIX_AGC;
- gnAGC = AGC_UNITY;
- }
- } else gdwSoundSetup &= ~SNDMIX_AGC;
-}
-
-
-UINT CSoundFile::GetNumPatterns() const
-//-------------------------------------
-{
- UINT i = 0;
- while ((i < MAX_ORDERS) && (Order[i] < 0xFF)) i++;
- return i;
-}
-
-
-UINT CSoundFile::GetNumInstruments() const
-//----------------------------------------
-{
- UINT n=0;
- for (UINT i=0; i<MAX_INSTRUMENTS; i++) if (Ins[i].pSample) n++;
- return n;
-}
-
-
-UINT CSoundFile::GetMaxPosition() const
-//-------------------------------------
-{
- UINT max = 0;
- UINT i = 0;
-
- while ((i < MAX_ORDERS) && (Order[i] != 0xFF))
- {
- if (Order[i] < MAX_PATTERNS) max += PatternSize[Order[i]];
- i++;
- }
- return max;
-}
-
-
-UINT CSoundFile::GetCurrentPos() const
-//------------------------------------
-{
- UINT pos = 0;
-
- for (UINT i=0; i<m_nCurrentPattern; i++) if (Order[i] < MAX_PATTERNS)
- pos += PatternSize[Order[i]];
- return pos + m_nRow;
-}
-
-
-void CSoundFile::SetCurrentPos(UINT nPos)
-//---------------------------------------
-{
- UINT i, nPattern;
-
- for (i=0; i<MAX_CHANNELS; i++)
- {
- Chn[i].nNote = Chn[i].nNewNote = Chn[i].nNewIns = 0;
- Chn[i].pInstrument = NULL;
- Chn[i].pHeader = NULL;
- Chn[i].nPortamentoDest = 0;
- Chn[i].nCommand = 0;
- Chn[i].nPatternLoopCount = 0;
- Chn[i].nPatternLoop = 0;
- Chn[i].nFadeOutVol = 0;
- Chn[i].dwFlags |= CHN_KEYOFF|CHN_NOTEFADE;
- Chn[i].nTremorCount = 0;
- }
- if (!nPos)
- {
- for (i=0; i<MAX_CHANNELS; i++)
- {
- Chn[i].nPeriod = 0;
- Chn[i].nPos = Chn[i].nLength = 0;
- Chn[i].nLoopStart = 0;
- Chn[i].nLoopEnd = 0;
- Chn[i].nROfs = Chn[i].nLOfs = 0;
- Chn[i].pSample = NULL;
- Chn[i].pInstrument = NULL;
- Chn[i].pHeader = NULL;
- Chn[i].nCutOff = 0x7F;
- Chn[i].nResonance = 0;
- Chn[i].nLeftVol = Chn[i].nRightVol = 0;
- Chn[i].nNewLeftVol = Chn[i].nNewRightVol = 0;
- Chn[i].nLeftRamp = Chn[i].nRightRamp = 0;
- Chn[i].nVolume = 256;
- if (i < MAX_BASECHANNELS)
- {
- Chn[i].dwFlags = ChnSettings[i].dwFlags;
- Chn[i].nPan = ChnSettings[i].nPan;
- Chn[i].nGlobalVol = ChnSettings[i].nVolume;
- } else
- {
- Chn[i].dwFlags = 0;
- Chn[i].nPan = 128;
- Chn[i].nGlobalVol = 64;
- }
- }
- m_nGlobalVolume = m_nDefaultGlobalVolume;
- m_nMusicSpeed = m_nDefaultSpeed;
- m_nMusicTempo = m_nDefaultTempo;
- }
- m_dwSongFlags &= ~(SONG_PATTERNLOOP|SONG_CPUVERYHIGH|SONG_FADINGSONG|SONG_ENDREACHED|SONG_GLOBALFADE);
- for (nPattern = 0; nPattern < MAX_ORDERS; nPattern++)
- {
- UINT ord = Order[nPattern];
- if (ord == 0xFE) continue;
- if (ord == 0xFF) break;
- if (ord < MAX_PATTERNS)
- {
- if (nPos < (UINT)PatternSize[ord]) break;
- nPos -= PatternSize[ord];
- }
- }
- // Buggy position ?
- if ((nPattern >= MAX_ORDERS)
- || (Order[nPattern] >= MAX_PATTERNS)
- || (nPos >= PatternSize[Order[nPattern]]))
- {
- nPos = 0;
- nPattern = 0;
- }
- UINT nRow = nPos;
- if ((nRow) && (Order[nPattern] < MAX_PATTERNS))
- {
- MODCOMMAND *p = Patterns[Order[nPattern]];
- if ((p) && (nRow < PatternSize[Order[nPattern]]))
- {
- BOOL bOk = FALSE;
- while ((!bOk) && (nRow > 0))
- {
- UINT n = nRow * m_nChannels;
- for (UINT k=0; k<m_nChannels; k++, n++)
- {
- if (p[n].note)
- {
- bOk = TRUE;
- break;
- }
- }
- if (!bOk) nRow--;
- }
- }
- }
- m_nNextPattern = nPattern;
- m_nNextRow = nRow;
- m_nTickCount = m_nMusicSpeed;
- m_nBufferCount = 0;
- m_nPatternDelay = 0;
- m_nFrameDelay = 0;
-}
-
-
-void CSoundFile::SetCurrentOrder(UINT nPos)
-//-----------------------------------------
-{
- while ((nPos < MAX_ORDERS) && (Order[nPos] == 0xFE)) nPos++;
- if ((nPos >= MAX_ORDERS) || (Order[nPos] >= MAX_PATTERNS)) return;
- for (UINT j=0; j<MAX_CHANNELS; j++)
- {
- Chn[j].nPeriod = 0;
- Chn[j].nNote = 0;
- Chn[j].nPortamentoDest = 0;
- Chn[j].nCommand = 0;
- Chn[j].nPatternLoopCount = 0;
- Chn[j].nPatternLoop = 0;
- Chn[j].nTremorCount = 0;
- }
- if (!nPos)
- {
- SetCurrentPos(0);
- } else
- {
- m_nNextPattern = nPos;
- m_nRow = m_nNextRow = 0;
- m_nPattern = 0;
- m_nTickCount = m_nMusicSpeed;
- m_nBufferCount = 0;
- m_nTotalCount = 0;
- m_nPatternDelay = 0;
- m_nFrameDelay = 0;
- }
- m_dwSongFlags &= ~(SONG_PATTERNLOOP|SONG_CPUVERYHIGH|SONG_FADINGSONG|SONG_ENDREACHED|SONG_GLOBALFADE);
-}
-
-void CSoundFile::ResetChannels()
-//------------------------------
-{
- m_dwSongFlags &= ~(SONG_CPUVERYHIGH|SONG_FADINGSONG|SONG_ENDREACHED|SONG_GLOBALFADE);
- m_nBufferCount = 0;
- for (UINT i=0; i<MAX_CHANNELS; i++)
- {
- Chn[i].nROfs = Chn[i].nLOfs = 0;
- }
-}
-
-
-void CSoundFile::ResetTimestamps()
-//--------------------------------
-{
- int n;
-
- for (n = 1; n < MAX_SAMPLES; n++) {
- Ins[n].played = 0;
- }
- for (n = 1; n < MAX_INSTRUMENTS; n++) {
- if (Headers[n])
- Headers[n]->played = 0;
- }
-}
-
-
-void CSoundFile::LoopPattern(int nPat, int nRow)
-//----------------------------------------------
-{
- if ((nPat < 0) || (nPat >= MAX_PATTERNS) || (!Patterns[nPat]))
- {
- m_dwSongFlags &= ~SONG_PATTERNLOOP;
- } else
- {
- if ((nRow < 0) || (nRow >= PatternSize[nPat])) nRow = 0;
- m_nPattern = nPat;
- m_nRow = m_nNextRow = nRow;
- m_nTickCount = m_nMusicSpeed;
- m_nPatternDelay = 0;
- m_nFrameDelay = 0;
- m_nBufferCount = 0;
- m_dwSongFlags |= SONG_PATTERNLOOP;
- }
-}
-
-
-UINT CSoundFile::GetBestSaveFormat() const
-//----------------------------------------
-{
- if ((!m_nSamples) || (!m_nChannels)) return MOD_TYPE_NONE;
- if (!m_nType) return MOD_TYPE_NONE;
- if (m_nType & (MOD_TYPE_MOD|MOD_TYPE_OKT))
- return MOD_TYPE_MOD;
- if (m_nType & (MOD_TYPE_S3M|MOD_TYPE_STM|MOD_TYPE_ULT|MOD_TYPE_FAR|MOD_TYPE_PTM))
- return MOD_TYPE_S3M;
- if (m_nType & (MOD_TYPE_XM|MOD_TYPE_MED|MOD_TYPE_MTM|MOD_TYPE_MT2))
- return MOD_TYPE_XM;
- return MOD_TYPE_IT;
-}
-
-
-UINT CSoundFile::GetSaveFormats() const
-//-------------------------------------
-{
- UINT n = 0;
- if ((!m_nSamples) || (!m_nChannels) || (m_nType == MOD_TYPE_NONE)) return 0;
- switch(m_nType)
- {
- case MOD_TYPE_MOD: n = MOD_TYPE_MOD;
- case MOD_TYPE_S3M: n = MOD_TYPE_S3M;
- }
- n |= MOD_TYPE_XM | MOD_TYPE_IT;
- if (!(m_dwSongFlags & SONG_INSTRUMENTMODE))
- {
- if (m_nSamples < 32) n |= MOD_TYPE_MOD;
- n |= MOD_TYPE_S3M;
- }
- return n;
-}
-
-
-UINT CSoundFile::GetSampleName(UINT nSample,LPSTR s) const
-//--------------------------------------------------------
-{
- char sztmp[40] = ""; // changed from CHAR
- memcpy(sztmp, m_szNames[nSample],32);
- sztmp[31] = 0;
- if (s) strcpy(s, sztmp);
- return strlen(sztmp);
-}
-
-
-UINT CSoundFile::GetInstrumentName(UINT nInstr,LPSTR s) const
-//-----------------------------------------------------------
-{
- char sztmp[40] = ""; // changed from CHAR
- if ((nInstr >= MAX_INSTRUMENTS) || (!Headers[nInstr]))
- {
- if (s) *s = 0;
- return 0;
- }
- INSTRUMENTHEADER *penv = Headers[nInstr];
- memcpy(sztmp, penv->name, 32);
- sztmp[31] = 0;
- if (s) strcpy(s, sztmp);
- return strlen(sztmp);
-}
-
-
-#ifndef NO_PACKING
-UINT CSoundFile::PackSample(int &sample, int next)
-//------------------------------------------------
-{
- UINT i = 0;
- int delta = next - sample;
- if (delta >= 0)
- {
- for (i=0; i<7; i++) if (delta <= (int)CompressionTable[i+1]) break;
- } else
- {
- for (i=8; i<15; i++) if (delta >= (int)CompressionTable[i+1]) break;
- }
- sample += (int)CompressionTable[i];
- return i;
-}
-
-
-BOOL CSoundFile::CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result)
-//-----------------------------------------------------------------------------------
-{
- int pos, old, oldpos, besttable = 0;
- DWORD dwErr, dwTotal, dwResult;
- int i,j;
-
- if (result) *result = 0;
- if ((!pSample) || (nLen < 1024)) return FALSE;
- // Try packing with different tables
- dwResult = 0;
- for (j=1; j<MAX_PACK_TABLES; j++)
- {
- memcpy(CompressionTable, UnpackTable[j], 16);
- dwErr = 0;
- dwTotal = 1;
- old = pos = oldpos = 0;
- for (i=0; i<(int)nLen; i++)
- {
- int s = (int)pSample[i];
- PackSample(pos, s);
- dwErr += abs(pos - oldpos);
- dwTotal += abs(s - old);
- old = s;
- oldpos = pos;
- }
- dwErr = _muldiv(dwErr, 100, dwTotal);
- if (dwErr >= dwResult)
- {
- dwResult = dwErr;
- besttable = j;
- }
- }
- memcpy(CompressionTable, UnpackTable[besttable], 16);
- if (result)
- {
- if (dwResult > 100) *result = 100; else *result = (BYTE)dwResult;
- }
- return (dwResult >= nPacking) ? TRUE : FALSE;
-}
-#endif // NO_PACKING
-
-
-
-// Flags:
-// 0 = signed 8-bit PCM data (default)
-// 1 = unsigned 8-bit PCM data
-// 2 = 8-bit ADPCM data with linear table
-// 3 = 4-bit ADPCM data
-// 4 = 16-bit ADPCM data with linear table
-// 5 = signed 16-bit PCM data
-// 6 = unsigned 16-bit PCM data
-
-
-UINT CSoundFile::ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR lpMemFile, DWORD dwMemLength)
-//------------------------------------------------------------------------------------------------
-{
- UINT len = 0, mem = pIns->nLength+6;
-
- if ((!pIns) || (pIns->nLength < 1) || (!lpMemFile)) return 0;
- if (pIns->nLength > MAX_SAMPLE_LENGTH) pIns->nLength = MAX_SAMPLE_LENGTH;
- pIns->uFlags &= ~(CHN_16BIT|CHN_STEREO);
- if (nFlags & RSF_16BIT)
- {
- mem *= 2;
- pIns->uFlags |= CHN_16BIT;
- }
- if (nFlags & RSF_STEREO)
- {
- mem *= 2;
- pIns->uFlags |= CHN_STEREO;
- }
- if ((pIns->pSample = AllocateSample(mem)) == NULL)
- {
- pIns->nLength = 0;
- return 0;
- }
- switch(nFlags)
- {
- // 1: 8-bit unsigned PCM data
- case RS_PCM8U:
- {
- len = pIns->nLength;
- if (len > dwMemLength) len = pIns->nLength = dwMemLength;
- signed char *pSample = pIns->pSample;
- for (UINT j=0; j<len; j++) pSample[j] = (signed char)(lpMemFile[j] - 0x80);
- }
- break;
-
- // 2: 8-bit ADPCM data with linear table
- case RS_PCM8D:
- {
- len = pIns->nLength;
- if (len > dwMemLength) break;
- signed char *pSample = pIns->pSample;
- const signed char *p = (const signed char *)lpMemFile;
- int delta = 0;
-
- for (UINT j=0; j<len; j++)
- {
- delta += p[j];
- *pSample++ = (signed char)delta;
- }
- }
- break;
-
- // 3: 4-bit ADPCM data
- case RS_ADPCM4:
- {
- len = (pIns->nLength + 1) / 2;
- if (len > dwMemLength - 16) break;
- memcpy(CompressionTable, lpMemFile, 16);
- lpMemFile += 16;
- signed char *pSample = pIns->pSample;
- signed char delta = 0;
- for (UINT j=0; j<len; j++)
- {
- BYTE b0 = (BYTE)lpMemFile[j];
- BYTE b1 = (BYTE)(lpMemFile[j] >> 4);
- delta = (signed char)GetDeltaValue((int)delta, b0);
- pSample[0] = delta;
- delta = (signed char)GetDeltaValue((int)delta, b1);
- pSample[1] = delta;
- pSample += 2;
- }
- len += 16;
- }
- break;
-
- // 4: 16-bit ADPCM data with linear table
- case RS_PCM16D:
- {
- len = pIns->nLength * 2;
- if (len > dwMemLength) break;
- short *pSample = (short *)pIns->pSample;
- short *p = (short *)lpMemFile;
- unsigned short tmp;
- int delta16 = 0;
- for (UINT j=0; j<len; j+=2)
- {
- tmp = *((unsigned short *)p++);
- delta16 += bswapLE16(tmp);
- *pSample++ = (short) delta16;
- }
- }
- break;
-
- // 5: 16-bit signed PCM data
- case RS_PCM16S:
- {
- len = pIns->nLength * 2;
- if (len <= dwMemLength) memcpy(pIns->pSample, lpMemFile, len);
- short int *pSample = (short int *)pIns->pSample;
- for (UINT j=0; j<len; j+=2)
- {
- *pSample = bswapLE16(*pSample);
- pSample++;
- }
- }
- break;
-
- // 16-bit signed mono PCM motorola byte order
- case RS_PCM16M:
- len = pIns->nLength * 2;
- if (len > dwMemLength) len = dwMemLength & ~1;
- if (len > 1)
- {
- signed char *pSample = (signed char *)pIns->pSample;
- signed char *pSrc = (signed char *)lpMemFile;
- for (UINT j=0; j<len; j+=2)
- {
- // pSample[j] = pSrc[j+1];
- // pSample[j+1] = pSrc[j];
- *((unsigned short *)(pSample+j)) = bswapBE16(*((unsigned short *)(pSrc+j)));
- }
- }
- break;
-
- // 6: 16-bit unsigned PCM data
- case RS_PCM16U:
- {
- len = pIns->nLength * 2;
- if (len <= dwMemLength) memcpy(pIns->pSample, lpMemFile, len);
- short int *pSample = (short int *)pIns->pSample;
- for (UINT j=0; j<len; j+=2)
- {
- *pSample = bswapLE16(*pSample) - 0x8000;
- pSample++;
- }
- }
- break;
-
- // 16-bit signed stereo big endian
- case RS_STPCM16M:
- len = pIns->nLength * 2;
- if (len*2 <= dwMemLength)
- {
- signed char *pSample = (signed char *)pIns->pSample;
- signed char *pSrc = (signed char *)lpMemFile;
- for (UINT j=0; j<len; j+=2)
- {
- // pSample[j*2] = pSrc[j+1];
- // pSample[j*2+1] = pSrc[j];
- // pSample[j*2+2] = pSrc[j+1+len];
- // pSample[j*2+3] = pSrc[j+len];
- *((unsigned short *)(pSample+j*2)) = bswapBE16(*((unsigned short *)(pSrc+j)));
- *((unsigned short *)(pSample+j*2+2)) = bswapBE16(*((unsigned short *)(pSrc+j+len)));
- }
- len *= 2;
- }
- break;
-
- // 8-bit stereo samples
- case RS_STPCM8S:
- case RS_STPCM8U:
- case RS_STPCM8D:
- {
- int iadd_l = 0, iadd_r = 0;
- if (nFlags == RS_STPCM8U) { iadd_l = iadd_r = -128; }
- len = pIns->nLength;
- signed char *psrc = (signed char *)lpMemFile;
- signed char *pSample = (signed char *)pIns->pSample;
- if (len*2 > dwMemLength) break;
- for (UINT j=0; j<len; j++)
- {
- pSample[j*2] = (signed char)(psrc[0] + iadd_l);
- pSample[j*2+1] = (signed char)(psrc[len] + iadd_r);
- psrc++;
- if (nFlags == RS_STPCM8D)
- {
- iadd_l = pSample[j*2];
- iadd_r = pSample[j*2+1];
- }
- }
- len *= 2;
- }
- break;
-
- // 16-bit stereo samples
- case RS_STPCM16S:
- case RS_STPCM16U:
- case RS_STPCM16D:
- {
- int iadd_l = 0, iadd_r = 0;
- if (nFlags == RS_STPCM16U) { iadd_l = iadd_r = -0x8000; }
- len = pIns->nLength;
- short int *psrc = (short int *)lpMemFile;
- short int *pSample = (short int *)pIns->pSample;
- if (len*4 > dwMemLength) break;
- for (UINT j=0; j<len; j++)
- {
- pSample[j*2] = (short int) (bswapLE16(psrc[0]) + iadd_l);
- pSample[j*2+1] = (short int) (bswapLE16(psrc[len]) + iadd_r);
- psrc++;
- if (nFlags == RS_STPCM16D)
- {
- iadd_l = pSample[j*2];
- iadd_r = pSample[j*2+1];
- }
- }
- len *= 4;
- }
- break;
-
- // IT 2.14 compressed samples
- case RS_IT2148:
- case RS_IT21416:
- case RS_IT2158:
- case RS_IT21516:
- len = dwMemLength;
- if (len < 2) break;
- if ((nFlags == RS_IT2148) || (nFlags == RS_IT2158))
- ITUnpack8Bit(pIns->pSample, pIns->nLength, (LPBYTE)lpMemFile, dwMemLength, (nFlags == RS_IT2158));
- else
- ITUnpack16Bit(pIns->pSample, pIns->nLength, (LPBYTE)lpMemFile, dwMemLength, (nFlags == RS_IT21516));
- break;
-
-#ifndef MODPLUG_FASTSOUNDLIB
- // 8-bit interleaved stereo samples
- case RS_STIPCM8S:
- case RS_STIPCM8U:
- {
- int iadd = 0;
- if (nFlags == RS_STIPCM8U) { iadd = -0x80; }
- len = pIns->nLength;
- if (len*2 > dwMemLength) len = dwMemLength >> 1;
- LPBYTE psrc = (LPBYTE)lpMemFile;
- LPBYTE pSample = (LPBYTE)pIns->pSample;
- for (UINT j=0; j<len; j++)
- {
- pSample[j*2] = (signed char)(psrc[0] + iadd);
- pSample[j*2+1] = (signed char)(psrc[1] + iadd);
- psrc+=2;
- }
- len *= 2;
- }
- break;
-
- // 16-bit interleaved stereo samples
- case RS_STIPCM16S:
- case RS_STIPCM16U:
- {
- int iadd = 0;
- if (nFlags == RS_STIPCM16U) iadd = -32768;
- len = pIns->nLength;
- if (len*4 > dwMemLength) len = dwMemLength >> 2;
- short int *psrc = (short int *)lpMemFile;
- short int *pSample = (short int *)pIns->pSample;
- for (UINT j=0; j<len; j++)
- {
- pSample[j*2] = (short int)(bswapLE16(psrc[0]) + iadd);
- pSample[j*2+1] = (short int)(bswapLE16(psrc[1]) + iadd);
- psrc += 2;
- }
- len *= 4;
- }
- break;
-
- // AMS compressed samples
- case RS_AMS8:
- case RS_AMS16:
- len = 9;
- if (dwMemLength > 9)
- {
- const char *psrc = lpMemFile;
- char packcharacter = lpMemFile[8], *pdest = (char *)pIns->pSample;
- len += bswapLE32(*((LPDWORD)(lpMemFile+4)));
- if (len > dwMemLength) len = dwMemLength;
- UINT dmax = pIns->nLength;
- if (pIns->uFlags & CHN_16BIT) dmax <<= 1;
- AMSUnpack(psrc+9, len-9, pdest, dmax, packcharacter);
- }
- break;
-
- // PTM 8bit delta to 16-bit sample
- case RS_PTM8DTO16:
- {
- len = pIns->nLength * 2;
- if (len > dwMemLength) break;
- signed char *pSample = (signed char *)pIns->pSample;
- signed char delta8 = 0;
- for (UINT j=0; j<len; j++)
- {
- delta8 += lpMemFile[j];
- *pSample++ = delta8;
- }
- WORD *pSampleW = (WORD *)pIns->pSample;
- for (UINT j=0; j<len; j+=2) // swaparoni!
- {
- *pSampleW = bswapLE16(*pSampleW);
- *pSampleW++;
- }
- }
- break;
-
- // Huffman MDL compressed samples
- case RS_MDL8:
- case RS_MDL16:
- len = dwMemLength;
- if (len >= 4)
- {
- LPBYTE pSample = (LPBYTE)pIns->pSample;
- LPBYTE ibuf = (LPBYTE)lpMemFile;
- DWORD bitbuf = bswapLE32(*((DWORD *)ibuf));
- UINT bitnum = 32;
- BYTE dlt = 0, lowbyte = 0;
- ibuf += 4;
- for (UINT j=0; j<pIns->nLength; j++)
- {
- BYTE hibyte;
- BYTE sign;
- if (nFlags == RS_MDL16) lowbyte = (BYTE)MDLReadBits(bitbuf, bitnum, ibuf, 8);
- sign = (BYTE)MDLReadBits(bitbuf, bitnum, ibuf, 1);
- if (MDLReadBits(bitbuf, bitnum, ibuf, 1))
- {
- hibyte = (BYTE)MDLReadBits(bitbuf, bitnum, ibuf, 3);
- } else
- {
- hibyte = 8;
- while (!MDLReadBits(bitbuf, bitnum, ibuf, 1)) hibyte += 0x10;
- hibyte += MDLReadBits(bitbuf, bitnum, ibuf, 4);
- }
- if (sign) hibyte = ~hibyte;
- dlt += hibyte;
- if (nFlags != RS_MDL16)
- pSample[j] = dlt;
- else
- {
- pSample[j<<1] = lowbyte;
- pSample[(j<<1)+1] = dlt;
- }
- }
- }
- break;
-
- case RS_DMF8:
- case RS_DMF16:
- len = dwMemLength;
- if (len >= 4)
- {
- UINT maxlen = pIns->nLength;
- if (pIns->uFlags & CHN_16BIT) maxlen <<= 1;
- LPBYTE ibuf = (LPBYTE)lpMemFile, ibufmax = (LPBYTE)(lpMemFile+dwMemLength);
- len = DMFUnpack((LPBYTE)pIns->pSample, ibuf, ibufmax, maxlen);
- }
- break;
-
-#ifdef MODPLUG_TRACKER
- // PCM 24-bit signed -> load sample, and normalize it to 16-bit
- case RS_PCM24S:
- case RS_PCM32S:
- len = pIns->nLength * 3;
- if (nFlags == RS_PCM32S) len += pIns->nLength;
- if (len > dwMemLength) break;
- if (len > 4*8)
- {
- UINT slsize = (nFlags == RS_PCM32S) ? 4 : 3;
- LPBYTE pSrc = (LPBYTE)lpMemFile;
- LONG max = 255;
- if (nFlags == RS_PCM32S) pSrc++;
- for (UINT j=0; j<len; j+=slsize)
- {
- LONG l = ((((pSrc[j+2] << 8) + pSrc[j+1]) << 8) + pSrc[j]) << 8;
- l /= 256;
- if (l > max) max = l;
- if (-l > max) max = -l;
- }
- max = (max / 128) + 1;
- signed short *pDest = (signed short *)pIns->pSample;
- for (UINT k=0; k<len; k+=slsize)
- {
- LONG l = ((((pSrc[k+2] << 8) + pSrc[k+1]) << 8) + pSrc[k]) << 8;
- *pDest++ = (signed short)(l / max);
- }
- }
- break;
-
- // Stereo PCM 24-bit signed -> load sample, and normalize it to 16-bit
- case RS_STIPCM24S:
- case RS_STIPCM32S:
- len = pIns->nLength * 6;
- if (nFlags == RS_STIPCM32S) len += pIns->nLength * 2;
- if (len > dwMemLength) break;
- if (len > 8*8)
- {
- UINT slsize = (nFlags == RS_STIPCM32S) ? 4 : 3;
- LPBYTE pSrc = (LPBYTE)lpMemFile;
- LONG max = 255;
- if (nFlags == RS_STIPCM32S) pSrc++;
- for (UINT j=0; j<len; j+=slsize)
- {
- LONG l = ((((pSrc[j+2] << 8) + pSrc[j+1]) << 8) + pSrc[j]) << 8;
- l /= 256;
- if (l > max) max = l;
- if (-l > max) max = -l;
- }
- max = (max / 128) + 1;
- signed short *pDest = (signed short *)pIns->pSample;
- for (UINT k=0; k<len; k+=slsize)
- {
- LONG lr = ((((pSrc[k+2] << 8) + pSrc[k+1]) << 8) + pSrc[k]) << 8;
- k += slsize;
- LONG ll = ((((pSrc[k+2] << 8) + pSrc[k+1]) << 8) + pSrc[k]) << 8;
- pDest[0] = (signed short)ll;
- pDest[1] = (signed short)lr;
- pDest += 2;
- }
- }
- break;
-
- // 16-bit signed big endian interleaved stereo
- case RS_STIPCM16M:
- {
- len = pIns->nLength;
- if (len*4 > dwMemLength) len = dwMemLength >> 2;
- LPCBYTE psrc = (LPCBYTE)lpMemFile;
- short int *pSample = (short int *)pIns->pSample;
- for (UINT j=0; j<len; j++)
- {
- pSample[j*2] = (signed short)(((UINT)psrc[0] << 8) | (psrc[1]));
- pSample[j*2+1] = (signed short)(((UINT)psrc[2] << 8) | (psrc[3]));
- psrc += 4;
- }
- len *= 4;
- }
- break;
-
-#endif // MODPLUG_TRACKER
-#endif // !MODPLUG_FASTSOUNDLIB
-
- // Default: 8-bit signed PCM data
- default:
- len = pIns->nLength;
- if (len > dwMemLength) len = pIns->nLength = dwMemLength;
- memcpy(pIns->pSample, lpMemFile, len);
- }
- if (len > dwMemLength)
- {
- if (pIns->pSample)
- {
- pIns->nLength = 0;
- FreeSample(pIns->pSample);
- pIns->pSample = NULL;
- }
- return 0;
- }
- AdjustSampleLoop(pIns);
- return len;
-}
-
-
-void CSoundFile::AdjustSampleLoop(MODINSTRUMENT *pIns)
-//----------------------------------------------------
-{
- if (!pIns->pSample) return;
- if (pIns->nLoopEnd > pIns->nLength) pIns->nLoopEnd = pIns->nLength;
- if (pIns->nLoopStart+2 >= pIns->nLoopEnd)
- {
- pIns->nLoopStart = pIns->nLoopEnd = 0;
- pIns->uFlags &= ~CHN_LOOP;
- }
- UINT len = pIns->nLength;
- if (pIns->uFlags & CHN_16BIT)
- {
- short int *pSample = (short int *)pIns->pSample;
- // Adjust end of sample
- if (pIns->uFlags & CHN_STEREO)
- {
- pSample[len*2+6] = pSample[len*2+4] = pSample[len*2+2] = pSample[len*2] = pSample[len*2-2];
- pSample[len*2+7] = pSample[len*2+5] = pSample[len*2+3] = pSample[len*2+1] = pSample[len*2-1];
- } else
- {
- pSample[len+4] = pSample[len+3] = pSample[len+2] = pSample[len+1] = pSample[len] = pSample[len-1];
- }
- if ((pIns->uFlags & (CHN_LOOP|CHN_PINGPONGLOOP|CHN_STEREO)) == CHN_LOOP)
- {
- // Fix bad loops
- if ((pIns->nLoopEnd+3 >= pIns->nLength) || (m_nType & MOD_TYPE_S3M))
- {
- pSample[pIns->nLoopEnd] = pSample[pIns->nLoopStart];
- pSample[pIns->nLoopEnd+1] = pSample[pIns->nLoopStart+1];
- pSample[pIns->nLoopEnd+2] = pSample[pIns->nLoopStart+2];
- pSample[pIns->nLoopEnd+3] = pSample[pIns->nLoopStart+3];
- pSample[pIns->nLoopEnd+4] = pSample[pIns->nLoopStart+4];
- }
- }
- } else
- {
- signed char *pSample = pIns->pSample;
-#ifndef MODPLUG_FASTSOUNDLIB
- // Crappy samples (except chiptunes) ?
- if ((pIns->nLength > 0x100) && (m_nType & (MOD_TYPE_MOD|MOD_TYPE_S3M))
- && (!(pIns->uFlags & CHN_STEREO)))
- {
- int smpend = pSample[pIns->nLength-1], smpfix = 0, kscan;
- for (kscan=pIns->nLength-1; kscan>0; kscan--)
- {
- smpfix = pSample[kscan-1];
- if (smpfix != smpend) break;
- }
- int delta = smpfix - smpend;
- if (((!(pIns->uFlags & CHN_LOOP)) || (kscan > (int)pIns->nLoopEnd))
- && ((delta < -8) || (delta > 8)))
- {
- while (kscan<(int)pIns->nLength)
- {
- if (!(kscan & 7))
- {
- if (smpfix > 0) smpfix--;
- if (smpfix < 0) smpfix++;
- }
- pSample[kscan] = (signed char)smpfix;
- kscan++;
- }
- }
- }
-#endif
- // Adjust end of sample
- if (pIns->uFlags & CHN_STEREO)
- {
- pSample[len*2+6] = pSample[len*2+4] = pSample[len*2+2] = pSample[len*2] = pSample[len*2-2];
- pSample[len*2+7] = pSample[len*2+5] = pSample[len*2+3] = pSample[len*2+1] = pSample[len*2-1];
- } else
- {
- pSample[len+4] = pSample[len+3] = pSample[len+2] = pSample[len+1] = pSample[len] = pSample[len-1];
- }
- if ((pIns->uFlags & (CHN_LOOP|CHN_PINGPONGLOOP|CHN_STEREO)) == CHN_LOOP)
- {
- if ((pIns->nLoopEnd+3 >= pIns->nLength) || (m_nType & (MOD_TYPE_MOD|MOD_TYPE_S3M)))
- {
- pSample[pIns->nLoopEnd] = pSample[pIns->nLoopStart];
- pSample[pIns->nLoopEnd+1] = pSample[pIns->nLoopStart+1];
- pSample[pIns->nLoopEnd+2] = pSample[pIns->nLoopStart+2];
- pSample[pIns->nLoopEnd+3] = pSample[pIns->nLoopStart+3];
- pSample[pIns->nLoopEnd+4] = pSample[pIns->nLoopStart+4];
- }
- }
- }
-}
-
-
-/////////////////////////////////////////////////////////////
-// Transpose <-> Frequency conversions
-
-// returns 8363*2^((transp*128+ftune)/(12*128))
-DWORD CSoundFile::TransposeToFrequency(int transp, int ftune)
-//-----------------------------------------------------------
-{
- //---GCCFIX: Removed assembly.
-#ifdef MSC_VER
- const float _fbase = 8363;
- const float _factor = 1.0f/(12.0f*128.0f);
- int result;
- DWORD freq;
-
- transp = (transp << 7) + ftune;
- _asm {
- fild transp
- fld _factor
- fmulp st(1), st(0)
- fist result
- fisub result
- f2xm1
- fild result
- fld _fbase
- fscale
- fstp st(1)
- fmul st(1), st(0)
- faddp st(1), st(0)
- fistp freq
- }
- UINT derr = freq % 11025;
- if (derr <= 8) freq -= derr;
- if (derr >= 11015) freq += 11025-derr;
- derr = freq % 1000;
- if (derr <= 5) freq -= derr;
- if (derr >= 995) freq += 1000-derr;
- return freq;
-#else
- return (DWORD) (8363.0 * pow(2, (transp * 128.0 + ftune) / 1536.0));
-#endif
-}
-
-
-// returns 12*128*log2(freq/8363)
-int CSoundFile::FrequencyToTranspose(DWORD freq)
-//----------------------------------------------
-{
- //---GCCFIX: Removed assembly.
-#ifdef MSC_VER
- const float _f1_8363 = 1.0f / 8363.0f;
- const float _factor = 128 * 12;
- LONG result;
-
- if (!freq) return 0;
- _asm {
- fld _factor
- fild freq
- fld _f1_8363
- fmulp st(1), st(0)
- fyl2x
- fistp result
- }
- return result;
-#else
- return (int) (1536.0 * (log(freq / 8363.0) / log(2)));
-#endif
-}
-
-
-void CSoundFile::FrequencyToTranspose(MODINSTRUMENT *psmp)
-//--------------------------------------------------------
-{
- int f2t = FrequencyToTranspose(psmp->nC4Speed);
- int transp = f2t >> 7;
- int ftune = f2t & 0x7F;
- if (ftune > 80)
- {
- transp++;
- ftune -= 128;
- }
- if (transp > 127) transp = 127;
- if (transp < -127) transp = -127;
- psmp->RelativeTone = transp;
- psmp->nFineTune = ftune;
-}
-
-
-void CSoundFile::CheckCPUUsage(UINT nCPU)
-//---------------------------------------
-{
- if (nCPU > 100) nCPU = 100;
- gnCPUUsage = nCPU;
- if (nCPU < 90)
- {
- m_dwSongFlags &= ~SONG_CPUVERYHIGH;
- } else
- if ((m_dwSongFlags & SONG_CPUVERYHIGH) && (nCPU >= 94))
- {
- UINT i=MAX_CHANNELS;
- while (i >= 8)
- {
- i--;
- if (Chn[i].nLength)
- {
- Chn[i].nLength = Chn[i].nPos = 0;
- nCPU -= 2;
- if (nCPU < 94) break;
- }
- }
- } else
- if (nCPU > 90)
- {
- m_dwSongFlags |= SONG_CPUVERYHIGH;
- }
-}
-
-
-BOOL CSoundFile::SetPatternName(UINT nPat, LPCSTR lpszName)
-//---------------------------------------------------------
-{
- char szName[MAX_PATTERNNAME] = ""; // changed from CHAR
- if (nPat >= MAX_PATTERNS) return FALSE;
- if (lpszName) lstrcpyn(szName, lpszName, MAX_PATTERNNAME);
- szName[MAX_PATTERNNAME-1] = 0;
- if (!m_lpszPatternNames) m_nPatternNames = 0;
- if (nPat >= m_nPatternNames)
- {
- if (!lpszName[0]) return TRUE;
- UINT len = (nPat+1)*MAX_PATTERNNAME;
- char *p = new char[len]; // changed from CHAR
- if (!p) return FALSE;
- memset(p, 0, len);
- if (m_lpszPatternNames)
- {
- memcpy(p, m_lpszPatternNames, m_nPatternNames * MAX_PATTERNNAME);
- delete m_lpszPatternNames;
- m_lpszPatternNames = NULL;
- }
- m_lpszPatternNames = p;
- m_nPatternNames = nPat + 1;
- }
- memcpy(m_lpszPatternNames + nPat * MAX_PATTERNNAME, szName, MAX_PATTERNNAME);
- return TRUE;
-}
-
-
-BOOL CSoundFile::GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize) const
-//---------------------------------------------------------------------------
-{
- if ((!lpszName) || (!cbSize)) return FALSE;
- lpszName[0] = 0;
- if (cbSize > MAX_PATTERNNAME) cbSize = MAX_PATTERNNAME;
- if ((m_lpszPatternNames) && (nPat < m_nPatternNames))
- {
- memcpy(lpszName, m_lpszPatternNames + nPat * MAX_PATTERNNAME, cbSize);
- lpszName[cbSize-1] = 0;
- return TRUE;
- }
- return FALSE;
-}
-
-UINT CSoundFile::GetHighestUsedChannel()
-//------------------------------
-{
- UINT highchan = 0;
-
- for (UINT ipat=0; ipat<MAX_PATTERNS; ipat++)
- {
- MODCOMMAND *p = Patterns[ipat];
- if (p)
- {
- UINT jmax = PatternSize[ipat] * m_nChannels;
- for (UINT j=0; j<jmax; j++, p++)
- {
- if ((p->note) && (p->note <= 120))
- {
- if ((j % m_nChannels) > highchan)
- highchan = j % m_nChannels;
- }
- }
- }
- }
-
- return highchan;
-}
-
-
-
-#ifndef MODPLUG_FASTSOUNDLIB
-
-UINT CSoundFile::DetectUnusedSamples(BOOL *pbIns)
-//-----------------------------------------------
-{
- UINT nExt = 0;
-
- if (!pbIns) return 0;
- if (m_dwSongFlags & SONG_INSTRUMENTMODE)
- {
- memset(pbIns, 0, MAX_SAMPLES * sizeof(BOOL));
- for (UINT ipat=0; ipat<MAX_PATTERNS; ipat++)
- {
- MODCOMMAND *p = Patterns[ipat];
- if (p)
- {
- UINT jmax = PatternSize[ipat] * m_nChannels;
- for (UINT j=0; j<jmax; j++, p++)
- {
- if ((p->note) && (p->note <= 120))
- {
- if ((p->instr) && (p->instr < MAX_INSTRUMENTS))
- {
- INSTRUMENTHEADER *penv = Headers[p->instr];
- if (penv)
- {
- UINT n = penv->Keyboard[p->note-1];
- if (n < MAX_SAMPLES) pbIns[n] = TRUE;
- }
- } else
- {
- for (UINT k=1; k<=m_nInstruments; k++)
- {
- INSTRUMENTHEADER *penv = Headers[k];
- if (penv)
- {
- UINT n = penv->Keyboard[p->note-1];
- if (n < MAX_SAMPLES) pbIns[n] = TRUE;
- }
- }
- }
- }
- }
- }
- }
- for (UINT ichk=1; ichk<=m_nSamples; ichk++)
- {
- if ((!pbIns[ichk]) && (Ins[ichk].pSample)) nExt++;
- }
- }
- return nExt;
-}
-
-
-BOOL CSoundFile::RemoveSelectedSamples(BOOL *pbIns)
-//-------------------------------------------------
-{
- if (!pbIns) return FALSE;
- for (UINT j=1; j<MAX_SAMPLES; j++)
- {
- if ((!pbIns[j]) && (Ins[j].pSample))
- {
- DestroySample(j);
- if ((j == m_nSamples) && (j > 1)) m_nSamples--;
- }
- }
- return TRUE;
-}
-
-
-BOOL CSoundFile::DestroySample(UINT nSample)
-//------------------------------------------
-{
- if ((!nSample) || (nSample >= MAX_SAMPLES)) return FALSE;
- if (!Ins[nSample].pSample) return TRUE;
- MODINSTRUMENT *pins = &Ins[nSample];
- signed char *pSample = pins->pSample;
- pins->pSample = NULL;
- pins->nLength = 0;
- pins->uFlags &= ~(CHN_16BIT);
- for (UINT i=0; i<MAX_CHANNELS; i++)
- {
- if (Chn[i].pSample == pSample)
- {
- Chn[i].nPos = Chn[i].nLength = 0;
- Chn[i].pSample = Chn[i].pCurrentSample = NULL;
- }
- }
- FreeSample(pSample);
- return TRUE;
-}
-
-#endif // MODPLUG_FASTSOUNDLIB
-
diff --git a/src/modplug/sndfile.h b/src/modplug/sndfile.h
deleted file mode 100755
index e5b7eef..0000000
--- a/src/modplug/sndfile.h
+++ /dev/null
@@ -1,1042 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#include <config.h>
-
-#ifndef __SNDFILE_H
-#define __SNDFILE_H
-
-#define MODPLUG_TRACKER 1
-#define MODPLUG_PLAYER 1
-
-#ifdef UNDER_CE
-int _strnicmp(const char *str1,const char *str2, int n);
-#endif
-
-#ifndef LPCBYTE
-typedef const BYTE * LPCBYTE;
-#endif
-
-#define MOD_AMIGAC2 0x1AB
-#define MAX_SAMPLE_LENGTH 16000000
-#define MAX_SAMPLE_RATE 192000
-#define MAX_ORDERS 256
-#define MAX_PATTERNS 240
-#define MAX_SAMPLES 240
-#define MAX_INSTRUMENTS MAX_SAMPLES
-#ifdef MODPLUG_FASTSOUNDLIB
-#define MAX_CHANNELS 80
-#else
-#define MAX_CHANNELS 256
-#endif
-#define MAX_BASECHANNELS 64
-#define MAX_ENVPOINTS 32
-#define MIN_PERIOD 0x0020
-#define MAX_PERIOD 0xFFFF
-#define MAX_PATTERNNAME 32
-#define MAX_CHANNELNAME 20
-#define MAX_INFONAME 80
-#define MAX_EQ_BANDS 6
-#define MAX_MIXPLUGINS 8
-
-
-#define MOD_TYPE_NONE 0x00
-#define MOD_TYPE_MOD 0x01
-#define MOD_TYPE_S3M 0x02
-#define MOD_TYPE_XM 0x04
-#define MOD_TYPE_MED 0x08
-#define MOD_TYPE_MTM 0x10
-#define MOD_TYPE_IT 0x20
-#define MOD_TYPE_669 0x40
-#define MOD_TYPE_ULT 0x80
-#define MOD_TYPE_STM 0x100
-#define MOD_TYPE_FAR 0x200
-#define MOD_TYPE_WAV 0x400
-#define MOD_TYPE_AMF 0x800
-#define MOD_TYPE_AMS 0x1000
-#define MOD_TYPE_DSM 0x2000
-#define MOD_TYPE_MDL 0x4000
-#define MOD_TYPE_OKT 0x8000
-#define MOD_TYPE_MID 0x10000
-#define MOD_TYPE_DMF 0x20000
-#define MOD_TYPE_PTM 0x40000
-#define MOD_TYPE_DBM 0x80000
-#define MOD_TYPE_MT2 0x100000
-#define MOD_TYPE_AMF0 0x200000
-#define MOD_TYPE_PSM 0x400000
-#define MOD_TYPE_UMX 0x80000000 // Fake type
-#define MAX_MODTYPE 23
-
-
-
-// Channel flags:
-// Bits 0-7: Sample Flags
-#define CHN_16BIT 0x01
-#define CHN_LOOP 0x02
-#define CHN_PINGPONGLOOP 0x04
-#define CHN_SUSTAINLOOP 0x08
-#define CHN_PINGPONGSUSTAIN 0x10
-#define CHN_PANNING 0x20
-#define CHN_STEREO 0x40
-#define CHN_PINGPONGFLAG 0x80
-// Bits 8-31: Channel Flags
-#define CHN_MUTE 0x100
-#define CHN_KEYOFF 0x200
-#define CHN_NOTEFADE 0x400
-#define CHN_SURROUND 0x800
-#define CHN_NOIDO 0x1000
-#define CHN_HQSRC 0x2000
-#define CHN_FILTER 0x4000
-#define CHN_VOLUMERAMP 0x8000
-#define CHN_VIBRATO 0x10000
-#define CHN_TREMOLO 0x20000
-#define CHN_PANBRELLO 0x40000
-#define CHN_PORTAMENTO 0x80000
-#define CHN_GLISSANDO 0x100000
-#define CHN_VOLENV 0x200000
-#define CHN_PANENV 0x400000
-#define CHN_PITCHENV 0x800000
-#define CHN_FASTVOLRAMP 0x1000000
-#define CHN_EXTRALOUD 0x2000000
-#define CHN_REVERB 0x4000000
-#define CHN_NOREVERB 0x8000000
-// used to turn off mute but have it reset later
-#define CHN_NNAMUTE 0x10000000
-
-
-#define ENV_VOLUME 0x0001
-#define ENV_VOLSUSTAIN 0x0002
-#define ENV_VOLLOOP 0x0004
-#define ENV_PANNING 0x0008
-#define ENV_PANSUSTAIN 0x0010
-#define ENV_PANLOOP 0x0020
-#define ENV_PITCH 0x0040
-#define ENV_PITCHSUSTAIN 0x0080
-#define ENV_PITCHLOOP 0x0100
-#define ENV_SETPANNING 0x0200
-#define ENV_FILTER 0x0400
-#define ENV_VOLCARRY 0x0800
-#define ENV_PANCARRY 0x1000
-#define ENV_PITCHCARRY 0x2000
-#define ENV_MUTE 0x4000
-
-#define CMD_NONE 0
-#define CMD_ARPEGGIO 1
-#define CMD_PORTAMENTOUP 2
-#define CMD_PORTAMENTODOWN 3
-#define CMD_TONEPORTAMENTO 4
-#define CMD_VIBRATO 5
-#define CMD_TONEPORTAVOL 6
-#define CMD_VIBRATOVOL 7
-#define CMD_TREMOLO 8
-#define CMD_PANNING8 9
-#define CMD_OFFSET 10
-#define CMD_VOLUMESLIDE 11
-#define CMD_POSITIONJUMP 12
-#define CMD_VOLUME 13
-#define CMD_PATTERNBREAK 14
-#define CMD_RETRIG 15
-#define CMD_SPEED 16
-#define CMD_TEMPO 17
-#define CMD_TREMOR 18
-#define CMD_MODCMDEX 19
-#define CMD_S3MCMDEX 20
-#define CMD_CHANNELVOLUME 21
-#define CMD_CHANNELVOLSLIDE 22
-#define CMD_GLOBALVOLUME 23
-#define CMD_GLOBALVOLSLIDE 24
-#define CMD_KEYOFF 25
-#define CMD_FINEVIBRATO 26
-#define CMD_PANBRELLO 27
-#define CMD_XFINEPORTAUPDOWN 28
-#define CMD_PANNINGSLIDE 29
-#define CMD_SETENVPOSITION 30
-#define CMD_MIDI 31
-
-
-// Volume Column commands
-#define VOLCMD_VOLUME 1
-#define VOLCMD_PANNING 2
-#define VOLCMD_VOLSLIDEUP 3
-#define VOLCMD_VOLSLIDEDOWN 4
-#define VOLCMD_FINEVOLUP 5
-#define VOLCMD_FINEVOLDOWN 6
-#define VOLCMD_VIBRATOSPEED 7
-#define VOLCMD_VIBRATO 8
-#define VOLCMD_PANSLIDELEFT 9
-#define VOLCMD_PANSLIDERIGHT 10
-#define VOLCMD_TONEPORTAMENTO 11
-#define VOLCMD_PORTAUP 12
-#define VOLCMD_PORTADOWN 13
-
-#define RSF_16BIT 0x04
-#define RSF_STEREO 0x08
-
-#define RS_PCM8S 0 // 8-bit signed
-#define RS_PCM8U 1 // 8-bit unsigned
-#define RS_PCM8D 2 // 8-bit delta values
-#define RS_ADPCM4 3 // 4-bit ADPCM-packed
-#define RS_PCM16D 4 // 16-bit delta values
-#define RS_PCM16S 5 // 16-bit signed
-#define RS_PCM16U 6 // 16-bit unsigned
-#define RS_PCM16M 7 // 16-bit motorola order
-#define RS_STPCM8S (RS_PCM8S|RSF_STEREO) // stereo 8-bit signed
-#define RS_STPCM8U (RS_PCM8U|RSF_STEREO) // stereo 8-bit unsigned
-#define RS_STPCM8D (RS_PCM8D|RSF_STEREO) // stereo 8-bit delta values
-#define RS_STPCM16S (RS_PCM16S|RSF_STEREO) // stereo 16-bit signed
-#define RS_STPCM16U (RS_PCM16U|RSF_STEREO) // stereo 16-bit unsigned
-#define RS_STPCM16D (RS_PCM16D|RSF_STEREO) // stereo 16-bit delta values
-#define RS_STPCM16M (RS_PCM16M|RSF_STEREO) // stereo 16-bit signed big endian
-// IT 2.14 compressed samples
-#define RS_IT2148 0x10
-#define RS_IT21416 0x14
-#define RS_IT2158 0x12
-#define RS_IT21516 0x16
-// AMS Packed Samples
-#define RS_AMS8 0x11
-#define RS_AMS16 0x15
-// DMF Huffman compression
-#define RS_DMF8 0x13
-#define RS_DMF16 0x17
-// MDL Huffman compression
-#define RS_MDL8 0x20
-#define RS_MDL16 0x24
-#define RS_PTM8DTO16 0x25
-// Stereo Interleaved Samples
-#define RS_STIPCM8S (RS_PCM8S|0x40|RSF_STEREO) // stereo 8-bit signed
-#define RS_STIPCM8U (RS_PCM8U|0x40|RSF_STEREO) // stereo 8-bit unsigned
-#define RS_STIPCM16S (RS_PCM16S|0x40|RSF_STEREO) // stereo 16-bit signed
-#define RS_STIPCM16U (RS_PCM16U|0x40|RSF_STEREO) // stereo 16-bit unsigned
-#define RS_STIPCM16M (RS_PCM16M|0x40|RSF_STEREO) // stereo 16-bit signed big endian
-// 24-bit signed
-#define RS_PCM24S (RS_PCM16S|0x80) // mono 24-bit signed
-#define RS_STIPCM24S (RS_PCM16S|0x80|RSF_STEREO) // stereo 24-bit signed
-#define RS_PCM32S (RS_PCM16S|0xC0) // mono 24-bit signed
-#define RS_STIPCM32S (RS_PCM16S|0xC0|RSF_STEREO) // stereo 24-bit signed
-
-// NNA types
-#define NNA_NOTECUT 0
-#define NNA_CONTINUE 1
-#define NNA_NOTEOFF 2
-#define NNA_NOTEFADE 3
-
-// DCT types
-#define DCT_NONE 0
-#define DCT_NOTE 1
-#define DCT_SAMPLE 2
-#define DCT_INSTRUMENT 3
-
-// DNA types
-#define DNA_NOTECUT 0
-#define DNA_NOTEOFF 1
-#define DNA_NOTEFADE 2
-
-// Mixer Hardware-Dependent features
-#define SYSMIX_ENABLEMMX 0x01
-#define SYSMIX_WINDOWSNT 0x02
-#define SYSMIX_SLOWCPU 0x04
-#define SYSMIX_FASTCPU 0x08
-
-// Module flags
-#define SONG_EMBEDMIDICFG 0x0001
-#define SONG_FASTVOLSLIDES 0x0002
-#define SONG_ITOLDEFFECTS 0x0004
-#define SONG_ITCOMPATMODE 0x0008
-#define SONG_LINEARSLIDES 0x0010
-#define SONG_PATTERNLOOP 0x0020
-#define SONG_STEP 0x0040
-#define SONG_PAUSED 0x0080
-#define SONG_FADINGSONG 0x0100
-#define SONG_ENDREACHED 0x0200
-#define SONG_GLOBALFADE 0x0400
-#define SONG_CPUVERYHIGH 0x0800
-#define SONG_FIRSTTICK 0x1000
-#define SONG_MPTFILTERMODE 0x2000
-#define SONG_SURROUNDPAN 0x4000
-#define SONG_EXFILTERRANGE 0x8000
-#define SONG_AMIGALIMITS 0x10000
-#define SONG_INSTRUMENTMODE 0x20000
-#define SONG_ORDERLOCKED 0x40000
-#define SONG_NOSTEREO 0x80000
-
-// Global Options (Renderer)
-#define SNDMIX_REVERSESTEREO 0x0001
-#define SNDMIX_NOISEREDUCTION 0x0002
-#define SNDMIX_AGC 0x0004
-#define SNDMIX_NORESAMPLING 0x0008
-#define SNDMIX_HQRESAMPLER 0x0010
-#define SNDMIX_MEGABASS 0x0020
-#define SNDMIX_SURROUND 0x0040
-#define SNDMIX_REVERB 0x0080
-#define SNDMIX_EQ 0x0100
-#define SNDMIX_SOFTPANNING 0x0200
-#define SNDMIX_ULTRAHQSRCMODE 0x0400
-// Misc Flags (can safely be turned on or off)
-#define SNDMIX_DIRECTTODISK 0x10000
-#define SNDMIX_ENABLEMMX 0x20000
-#define SNDMIX_NOBACKWARDJUMPS 0x40000
-#define SNDMIX_MAXDEFAULTPAN 0x80000 // Used by the MOD loader
-#define SNDMIX_MUTECHNMODE 0x100000 // Notes are not played on muted channels
-#define SNDMIX_NOSURROUND 0x200000
-#define SNDMIX_NOMIXING 0x400000 // don't actually do any mixing (values only)
-#define SNDMIX_NORAMPING 0x800000
-
-// Reverb Types (GM2 Presets)
-enum {
- REVERBTYPE_SMALLROOM,
- REVERBTYPE_MEDIUMROOM,
- REVERBTYPE_LARGEROOM,
- REVERBTYPE_SMALLHALL,
- REVERBTYPE_MEDIUMHALL,
- REVERBTYPE_LARGEHALL,
- NUM_REVERBTYPES
-};
-
-
-enum {
- SRCMODE_NEAREST,
- SRCMODE_LINEAR,
- SRCMODE_SPLINE,
- SRCMODE_POLYPHASE,
- NUM_SRC_MODES
-};
-
-
-// Sample Struct
-typedef struct _MODINSTRUMENT
-{
- UINT nLength,nLoopStart,nLoopEnd;
- UINT nSustainStart, nSustainEnd;
- signed char *pSample;
- UINT nC4Speed;
- UINT nPan;
- UINT nVolume;
- UINT nGlobalVol;
- UINT uFlags;
- int RelativeTone;
- int nFineTune;
- UINT nVibType;
- UINT nVibSweep;
- UINT nVibDepth;
- UINT nVibRate;
- CHAR name[22];
- int played; // for note playback dots
-} MODINSTRUMENT;
-
-typedef struct _INSTRUMENTENVELOPE {
- int Ticks[32];
- BYTE Values[32];
- int nNodes;
- int nLoopStart;
- int nLoopEnd;
- int nSustainStart;
- int nSustainEnd;
-} INSTRUMENTENVELOPE;
-
-
-// Instrument Struct
-typedef struct _INSTRUMENTHEADER
-{
- UINT nFadeOut;
- DWORD dwFlags;
- unsigned int nGlobalVol;
- unsigned int nPan;
- unsigned int Keyboard[128];
- unsigned int NoteMap[128];
- INSTRUMENTENVELOPE VolEnv;
- INSTRUMENTENVELOPE PanEnv;
- INSTRUMENTENVELOPE PitchEnv;
- unsigned int nNNA;
- unsigned int nDCT;
- unsigned int nDNA;
- unsigned int nPanSwing;
- unsigned int nVolSwing;
- unsigned int nIFC;
- unsigned int nIFR;
- unsigned int wMidiBank;
- unsigned int nMidiProgram;
- unsigned int nMidiChannel;
- unsigned int nMidiDrumKey;
- int nPPS;
- unsigned int nPPC;
- CHAR name[32];
- CHAR filename[12];
- int played; // for note playback dots
-} INSTRUMENTHEADER;
-
-
-// Channel Struct
-typedef struct _MODCHANNEL
-{
- // First 32-bytes: Most used mixing information: don't change it
- signed char * pCurrentSample;
- DWORD nPos;
- DWORD nPosLo; // actually 16-bit
- unsigned int topnote_offset;
- LONG nInc; // 16.16
- LONG nRightVol;
- LONG nLeftVol;
- LONG nRightRamp;
- LONG nLeftRamp;
- // 2nd cache line
- DWORD nLength;
- DWORD dwFlags;
- DWORD nLoopStart;
- DWORD nLoopEnd;
- LONG nRampRightVol;
- LONG nRampLeftVol;
-
- double nFilter_Y1, nFilter_Y2, nFilter_Y3, nFilter_Y4;
- double nFilter_A0, nFilter_B0, nFilter_B1;
-
- LONG nROfs, nLOfs;
- LONG nRampLength;
- // Information not used in the mixer
- signed char * pSample;
- LONG nNewRightVol, nNewLeftVol;
- LONG nRealVolume, nRealPan;
- LONG nVolume, nPan, nFadeOutVol;
- LONG nPeriod, nC4Speed, sample_freq, nPortamentoDest;
- INSTRUMENTHEADER *pHeader;
- MODINSTRUMENT *pInstrument;
- int nVolEnvPosition, nPanEnvPosition, nPitchEnvPosition;
- DWORD nMasterChn, nVUMeter;
- LONG nGlobalVol, nInsVol;
- LONG nFineTune, nTranspose;
- LONG nPortamentoSlide, nAutoVibDepth;
- UINT nAutoVibPos, nVibratoPos, nTremoloPos, nPanbrelloPos;
- // 16-bit members
- int nVolSwing, nPanSwing;
-
- // formally 8-bit members
- unsigned int nNote, nNNA;
- unsigned int nNewNote, nNewIns, nCommand, nArpeggio;
- unsigned int nOldVolumeSlide, nOldFineVolUpDown;
- unsigned int nOldPortaUpDown, nOldFinePortaUpDown;
- unsigned int nOldPanSlide, nOldChnVolSlide;
- unsigned int nVibratoType, nVibratoSpeed, nVibratoDepth;
- unsigned int nTremoloType, nTremoloSpeed, nTremoloDepth;
- unsigned int nPanbrelloType, nPanbrelloSpeed, nPanbrelloDepth;
- unsigned int nOldCmdEx, nOldVolParam, nOldTempo;
- unsigned int nOldOffset, nOldHiOffset;
- unsigned int nCutOff, nResonance;
- unsigned int nRetrigCount, nRetrigParam;
- unsigned int nTremorCount, nTremorParam;
- unsigned int nPatternLoop, nPatternLoopCount;
- unsigned int nRowNote, nRowInstr;
- unsigned int nRowVolCmd, nRowVolume;
- unsigned int nRowCommand, nRowParam;
- unsigned int nLeftVU, nRightVU;
- unsigned int nActiveMacro, nLastInstr;
- unsigned int nTickStart;
- unsigned int nRealtime;
- BYTE stupid_gcc_workaround;
-
-} MODCHANNEL;
-
-
-typedef struct _MODCHANNELSETTINGS
-{
- UINT nPan;
- UINT nVolume;
- DWORD dwFlags;
- UINT nMixPlugin;
- char szName[MAX_CHANNELNAME]; // changed from CHAR
-} MODCHANNELSETTINGS;
-
-
-typedef struct _MODCOMMAND
-{
- BYTE note;
- BYTE instr;
- BYTE volcmd;
- BYTE command;
- BYTE vol;
- BYTE param;
-} MODCOMMAND, *LPMODCOMMAND;
-
-////////////////////////////////////////////////////////////////////
-// Mix Plugins
-#define MIXPLUG_MIXREADY 0x01 // Set when cleared
-
-class IMixPlugin
-{
-public:
- virtual ~IMixPlugin() = 0;
- virtual int AddRef() = 0;
- virtual int Release() = 0;
- virtual void SaveAllParameters() = 0;
- virtual void RestoreAllParameters() = 0;
- virtual void Process(float *pOutL, float *pOutR, unsigned int nSamples) = 0;
- virtual void Init(unsigned int nFreq, int bReset) = 0;
- virtual void MidiSend(DWORD dwMidiCode) = 0;
- virtual void MidiCommand(UINT nMidiCh, UINT nMidiProg, UINT note, UINT vol) = 0;
-};
-
-
-#define MIXPLUG_INPUTF_MASTEREFFECT 0x01 // Apply to master mix
-#define MIXPLUG_INPUTF_BYPASS 0x02 // Bypass effect
-#define MIXPLUG_INPUTF_WETMIX 0x04 // Wet Mix (dry added)
-
-typedef struct _SNDMIXPLUGINSTATE
-{
- DWORD dwFlags; // MIXPLUG_XXXX
- LONG nVolDecayL, nVolDecayR; // Buffer click removal
- int *pMixBuffer; // Stereo effect send buffer
- float *pOutBufferL; // Temp storage for int -> float conversion
- float *pOutBufferR;
-} SNDMIXPLUGINSTATE, *PSNDMIXPLUGINSTATE;
-
-typedef struct _SNDMIXPLUGININFO
-{
- DWORD dwPluginId1;
- DWORD dwPluginId2;
- DWORD dwInputRouting; // MIXPLUG_INPUTF_XXXX
- DWORD dwOutputRouting; // 0=mix 0x80+=fx
- DWORD dwReserved[4]; // Reserved for routing info
- CHAR szName[32];
- CHAR szLibraryName[64]; // original DLL name
-} SNDMIXPLUGININFO, *PSNDMIXPLUGININFO; // Size should be 128
-
-typedef struct _SNDMIXPLUGIN
-{
- IMixPlugin *pMixPlugin;
- PSNDMIXPLUGINSTATE pMixState;
- ULONG nPluginDataSize;
- PVOID pPluginData;
- SNDMIXPLUGININFO Info;
-} SNDMIXPLUGIN, *PSNDMIXPLUGIN;
-
-typedef BOOL (*PMIXPLUGINCREATEPROC)(PSNDMIXPLUGIN);
-
-////////////////////////////////////////////////////////////////////
-
-enum {
- MIDIOUT_START=0,
- MIDIOUT_STOP,
- MIDIOUT_TICK,
- MIDIOUT_NOTEON,
- MIDIOUT_NOTEOFF,
- MIDIOUT_VOLUME,
- MIDIOUT_PAN,
- MIDIOUT_BANKSEL,
- MIDIOUT_PROGRAM,
-};
-
-
-typedef struct MODMIDICFG
-{
- char szMidiGlb[9*32]; // changed from CHAR
- char szMidiSFXExt[16*32]; // changed from CHAR
- char szMidiZXXExt[128*32]; // changed from CHAR
-} MODMIDICFG, *LPMODMIDICFG;
-
-
-typedef VOID (* LPSNDMIXHOOKPROC)(int *, unsigned int, unsigned int); // buffer, samples, channels
-
-
-
-//==============
-class CSoundFile
-//==============
-{
-public: // Static Members
- static UINT m_nXBassDepth, m_nXBassRange;
- static UINT m_nReverbDepth, m_nReverbDelay, gnReverbType;
- static UINT m_nProLogicDepth, m_nProLogicDelay;
- static UINT m_nMaxMixChannels;
- static LONG m_nStreamVolume;
- static DWORD gdwSysInfo, gdwSoundSetup, gdwMixingFreq, gnBitsPerSample, gnChannels;
- static UINT gnAGC, gnVolumeRampSamples, gnCPUUsage;
- static UINT gnVULeft, gnVURight;
- static LPSNDMIXHOOKPROC gpSndMixHook;
- static PMIXPLUGINCREATEPROC gpMixPluginCreateProc;
-
-public: // for Editing
- MODCHANNEL Chn[MAX_CHANNELS]; // Channels
- UINT ChnMix[MAX_CHANNELS]; // Channels to be mixed
- MODINSTRUMENT Ins[MAX_SAMPLES]; // Instruments
- INSTRUMENTHEADER *Headers[MAX_INSTRUMENTS]; // Instrument Headers
- MODCHANNELSETTINGS ChnSettings[MAX_BASECHANNELS]; // Channels settings
- MODCOMMAND *Patterns[MAX_PATTERNS]; // Patterns
- WORD PatternSize[MAX_PATTERNS]; // Patterns Lengths
- WORD PatternAllocSize[MAX_PATTERNS]; // Allocated pattern lengths (for async. resizing/playback)
- BYTE Order[MAX_ORDERS]; // Pattern Orders
- MODMIDICFG m_MidiCfg; // Midi macro config table
- SNDMIXPLUGIN m_MixPlugins[MAX_MIXPLUGINS]; // Mix plugins
- UINT m_nDefaultSpeed, m_nDefaultTempo, m_nDefaultGlobalVolume;
- DWORD m_dwSongFlags; // Song flags SONG_XXXX
- UINT m_nStereoSeparation;
- UINT m_nChannels, m_nMixChannels, m_nMixStat, m_nBufferCount;
- UINT m_nType, m_nSamples, m_nInstruments;
- UINT m_nTickCount, m_nTotalCount, m_nPatternDelay, m_nFrameDelay;
- UINT m_nMusicSpeed, m_nMusicTempo;
- UINT m_nNextRow, m_nRow;
- UINT m_nPattern,m_nCurrentPattern,m_nNextPattern,m_nLockedPattern,m_nRestartPos;
- UINT m_nMasterVolume, m_nGlobalVolume, m_nSongPreAmp;
- UINT m_nFreqFactor, m_nTempoFactor, m_nOldGlbVolSlide;
- LONG m_nMinPeriod, m_nMaxPeriod, m_nRepeatCount, m_nInitialRepeatCount;
- DWORD m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples;
- BYTE m_rowHighlightMajor, m_rowHighlightMinor;
- UINT m_nPatternNames;
- LPSTR m_lpszSongComments, m_lpszPatternNames;
- char m_szNames[MAX_INSTRUMENTS][32]; // changed from CHAR
- CHAR CompressionTable[16];
-
-public:
- CSoundFile();
- ~CSoundFile();
-
-public:
- BOOL Create(LPCBYTE lpStream, DWORD dwMemLength=0);
- BOOL Destroy();
- UINT GetHighestUsedChannel();
- UINT GetType() const { return m_nType; }
- UINT GetNumChannels() const;
- UINT GetLogicalChannels() const { return m_nChannels; }
- BOOL SetMasterVolume(UINT vol, BOOL bAdjustAGC=FALSE);
- UINT GetMasterVolume() const { return m_nMasterVolume; }
- UINT GetNumPatterns() const;
- UINT GetNumInstruments() const;
- UINT GetNumSamples() const { return m_nSamples; }
- UINT GetCurrentPos() const;
- UINT GetCurrentPattern() const { return m_nPattern; }
- UINT GetCurrentOrder() const { return m_nCurrentPattern; }
- UINT GetSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
- UINT GetRawSongComments(LPSTR s, UINT cbsize, UINT linesize=32);
- UINT GetMaxPosition() const;
- void SetCurrentPos(UINT nPos);
- void SetCurrentOrder(UINT nOrder);
- void GetTitle(LPSTR s) const { lstrcpyn(s,m_szNames[0],32); }
- LPCSTR GetTitle() const { return m_szNames[0]; }
- UINT GetSampleName(UINT nSample,LPSTR s=NULL) const;
- UINT GetInstrumentName(UINT nInstr,LPSTR s=NULL) const;
- UINT GetMusicSpeed() const { return m_nMusicSpeed; }
- UINT GetMusicTempo() const { return m_nMusicTempo; }
- DWORD GetLength(BOOL bAdjust, BOOL bTotal=FALSE);
- DWORD GetSongTime() { return GetLength(FALSE, TRUE); }
- void SetRepeatCount(int n) { m_nRepeatCount = n; m_nInitialRepeatCount = n; }
- int GetRepeatCount() const { return m_nRepeatCount; }
- BOOL IsPaused() const { return (m_dwSongFlags & SONG_PAUSED) ? TRUE : FALSE; }
- void LoopPattern(int nPat, int nRow=0);
- void CheckCPUUsage(UINT nCPU);
- BOOL SetPatternName(UINT nPat, LPCSTR lpszName);
- BOOL GetPatternName(UINT nPat, LPSTR lpszName, UINT cbSize=MAX_PATTERNNAME) const;
- // Module Loaders
- BOOL ReadXM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadS3M(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMod(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMed(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadSTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadIT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL Read669(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadUlt(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadWav(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDSM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadFAR(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMS(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMS2(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMDL(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadOKT(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDMF(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPTM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadDBM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadAMF(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadMT2(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadPSM(LPCBYTE lpStream, DWORD dwMemLength);
- BOOL ReadUMX(LPCBYTE lpStream, DWORD dwMemLength);
- // MOD Convert function
- UINT GetBestSaveFormat() const;
- UINT GetSaveFormats() const;
- void ConvertModCommand(MODCOMMAND *) const;
- void S3MConvert(MODCOMMAND *m, BOOL bIT) const;
- void S3MSaveConvert(UINT *pcmd, UINT *pprm, BOOL bIT) const;
- WORD ModSaveCommand(const MODCOMMAND *m, BOOL bXM) const;
-public:
- // backhooks :)
- static void (*_midi_out_note)(int chan, const MODCOMMAND *m);
- static void (*_midi_out_raw)(unsigned char *,unsigned int, unsigned int);
-
-public:
- // Real-time sound functions
- VOID ResetChannels();
-
- UINT Read(LPVOID lpBuffer, UINT cbBuffer);
- UINT CreateStereoMix(int count);
- BOOL FadeSong(UINT msec);
- BOOL GlobalFadeSong(UINT msec);
- UINT GetTotalTickCount() const { return m_nTotalCount; }
- VOID ResetTotalTickCount() { m_nTotalCount = 0; }
-
-public:
- // Mixer Config
- static BOOL InitPlayer(BOOL bReset=FALSE);
- static BOOL SetWaveConfig(UINT nRate,UINT nBits,UINT nChannels,BOOL bMMX=FALSE);
- static BOOL SetResamplingMode(UINT nMode); // SRCMODE_XXXX
- static BOOL IsStereo() { return (gnChannels > 1) ? TRUE : FALSE; }
- static DWORD GetSampleRate() { return gdwMixingFreq; }
- static DWORD GetBitsPerSample() { return gnBitsPerSample; }
- static DWORD InitSysInfo();
- static DWORD GetSysInfo() { return gdwSysInfo; }
- // AGC
- static BOOL GetAGC() { return (gdwSoundSetup & SNDMIX_AGC) ? TRUE : FALSE; }
- static void SetAGC(BOOL b);
- static void ResetAGC();
- static void ProcessAGC(int count);
-
- // Floats
- static VOID StereoMixToFloat(const int *pSrc, float *pOut1, float *pOut2, UINT nCount);
- static VOID FloatToStereoMix(const float *pIn1, const float *pIn2, int *pOut, UINT nCount);
- static VOID MonoMixToFloat(const int *pSrc, float *pOut, UINT nCount);
- static VOID FloatToMonoMix(const float *pIn, int *pOut, UINT nCount);
-
-
-
-
-
- // wee...
- static void InitializeEQ(BOOL bReset=TRUE);
- static void SetEQGains(const UINT *pGains, UINT nBands, const UINT *pFreqs=NULL, BOOL bReset=FALSE); // 0=-12dB, 32=+12dB
- /*static*/ void EQStereo(int *pbuffer, UINT nCount);
- /*static*/ void EQMono(int *pbuffer, UINT nCount);
-
-
- //GCCFIX -- added these functions back in!
- static BOOL SetWaveConfigEx(BOOL bSurround,BOOL bNoOverSampling,BOOL bReverb,BOOL hqido,BOOL bMegaBass,BOOL bNR,BOOL bEQ);
- // DSP Effects
- static void InitializeDSP(BOOL bReset);
- static void ProcessStereoDSP(int count);
- static void ProcessMonoDSP(int count);
- // [Reverb level 0(quiet)-100(loud)], [delay in ms, usually 40-200ms]
- static BOOL SetReverbParameters(UINT nDepth, UINT nDelay);
- // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100]
- static BOOL SetXBassParameters(UINT nDepth, UINT nRange);
- // [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms]
- static BOOL SetSurroundParameters(UINT nDepth, UINT nDelay);
-public:
- BOOL ReadNote();
- BOOL ProcessRow();
- BOOL ProcessEffects();
- UINT GetNNAChannel(UINT nChn);
- void CheckNNA(UINT nChn, UINT instr, int note, BOOL bForceCut);
- void NoteChange(UINT nChn, int note, BOOL bPorta=FALSE, BOOL bResetEnv=TRUE, BOOL bManual=FALSE);
- void InstrumentChange(MODCHANNEL *pChn, UINT instr, BOOL bPorta=FALSE,BOOL bUpdVol=TRUE,BOOL bResetEnv=TRUE);
- // Channel Effects
- void PortamentoUp(MODCHANNEL *pChn, UINT param);
- void PortamentoDown(MODCHANNEL *pChn, UINT param);
- void FinePortamentoUp(MODCHANNEL *pChn, UINT param);
- void FinePortamentoDown(MODCHANNEL *pChn, UINT param);
- void ExtraFinePortamentoUp(MODCHANNEL *pChn, UINT param);
- void ExtraFinePortamentoDown(MODCHANNEL *pChn, UINT param);
- void TonePortamento(MODCHANNEL *pChn, UINT param);
- void Vibrato(MODCHANNEL *pChn, UINT param);
- void FineVibrato(MODCHANNEL *pChn, UINT param);
- void VolumeSlide(MODCHANNEL *pChn, UINT param);
- void PanningSlide(MODCHANNEL *pChn, UINT param);
- void ChannelVolSlide(MODCHANNEL *pChn, UINT param);
- void FineVolumeUp(MODCHANNEL *pChn, UINT param);
- void FineVolumeDown(MODCHANNEL *pChn, UINT param);
- void Tremolo(MODCHANNEL *pChn, UINT param);
- void Panbrello(MODCHANNEL *pChn, UINT param);
- void RetrigNote(UINT nChn, UINT param);
- void NoteCut(UINT nChn, UINT nTick);
- void KeyOff(UINT nChn);
- int PatternLoop(MODCHANNEL *, UINT param);
- void ExtendedMODCommands(UINT nChn, UINT param);
- void ExtendedS3MCommands(UINT nChn, UINT param);
- void ExtendedChannelEffect(MODCHANNEL *, UINT param);
- void MidiSend(unsigned char *data, unsigned int len, UINT nChn=0, int fake = 0);
- void ProcessMidiMacro(UINT nChn, LPCSTR pszMidiMacro, UINT param=0,
- UINT note=0, UINT velocity=0, UINT use_instr=0);
- void SetupChannelFilter(MODCHANNEL *pChn, BOOL bReset, int flt_modifier=256,int freq=0) const;
- // Low-Level effect processing
- void DoFreqSlide(MODCHANNEL *pChn, LONG nFreqSlide);
- // Global Effects
- void SetTempo(UINT param);
- void SetSpeed(UINT param);
- void GlobalVolSlide(UINT param);
- DWORD IsSongFinished(UINT nOrder, UINT nRow) const;
- BOOL IsValidBackwardJump(UINT nStartOrder, UINT nStartRow, UINT nJumpOrder, UINT nJumpRow) const;
- // Read/Write sample functions
- signed char GetDeltaValue(signed char prev, UINT n) const { return (signed char)(prev + CompressionTable[n & 0x0F]); }
- UINT PackSample(int &sample, int next);
- BOOL CanPackSample(LPSTR pSample, UINT nLen, UINT nPacking, BYTE *result=NULL);
- UINT ReadSample(MODINSTRUMENT *pIns, UINT nFlags, LPCSTR pMemFile, DWORD dwMemLength);
- BOOL DestroySample(UINT nSample);
- BOOL DestroyInstrument(UINT nInstr);
- BOOL IsSampleUsed(UINT nSample);
- BOOL IsInstrumentUsed(UINT nInstr);
- BOOL RemoveInstrumentSamples(UINT nInstr);
- UINT DetectUnusedSamples(BOOL *);
- BOOL RemoveSelectedSamples(BOOL *);
- void AdjustSampleLoop(MODINSTRUMENT *pIns);
- // I/O from another sound file
- BOOL ReadInstrumentFromSong(UINT nInstr, CSoundFile *, UINT nSrcInstrument);
- BOOL ReadSampleFromSong(UINT nSample, CSoundFile *, UINT nSrcSample);
- // Period/Note functions
- UINT GetNoteFromPeriod(UINT period) const;
- UINT GetPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const;
- UINT GetLinearPeriodFromNote(UINT note, int nFineTune, UINT nC4Speed) const;
- UINT GetFreqFromPeriod(UINT period, UINT nC4Speed, int nPeriodFrac=0) const;
- // Misc functions
- MODINSTRUMENT *GetSample(UINT n) { return Ins+n; }
- void ResetMidiCfg();
- UINT MapMidiInstrument(DWORD dwProgram, UINT nChannel, UINT nNote);
- BOOL ITInstrToMPT(const void *p, INSTRUMENTHEADER *penv, UINT trkvers);
- UINT SaveMixPlugins(FILE *f=NULL, BOOL bUpdate=TRUE);
- UINT LoadMixPlugins(const void *pData, UINT nLen);
- void ResetTimestamps(); // for note playback dots
-
- // Static helper functions
-public:
- static DWORD TransposeToFrequency(int transp, int ftune=0);
- static int FrequencyToTranspose(DWORD freq);
- static void FrequencyToTranspose(MODINSTRUMENT *psmp);
-
- // System-Dependant functions
-public:
- static MODCOMMAND *AllocatePattern(UINT rows, UINT nchns);
- static signed char* AllocateSample(UINT nbytes);
- static void FreePattern(LPVOID pat);
- static void FreeSample(LPVOID p);
- static UINT Normalize24BitBuffer(LPBYTE pbuffer, UINT cbsizebytes, DWORD lmax24, DWORD dwByteInc);
-};
-
-
-// inline DWORD BigEndian(DWORD x) { return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | ((x & 0xFF0000) >> 8) | ((x & 0xFF000000) >> 24); }
-// inline WORD BigEndianW(WORD x) { return (WORD)(((x >> 8) & 0xFF) | ((x << 8) & 0xFF00)); }
-
-
-//////////////////////////////////////////////////////////
-// WAVE format information
-
-#pragma pack(1)
-
-// Standard IFF chunks IDs
-#define IFFID_FORM 0x4d524f46
-#define IFFID_RIFF 0x46464952
-#define IFFID_WAVE 0x45564157
-#define IFFID_LIST 0x5453494C
-#define IFFID_INFO 0x4F464E49
-
-// IFF Info fields
-#define IFFID_ICOP 0x504F4349
-#define IFFID_IART 0x54524149
-#define IFFID_IPRD 0x44525049
-#define IFFID_INAM 0x4D414E49
-#define IFFID_ICMT 0x544D4349
-#define IFFID_IENG 0x474E4549
-#define IFFID_ISFT 0x54465349
-#define IFFID_ISBJ 0x4A425349
-#define IFFID_IGNR 0x524E4749
-#define IFFID_ICRD 0x44524349
-
-// Wave IFF chunks IDs
-#define IFFID_wave 0x65766177
-#define IFFID_fmt 0x20746D66
-#define IFFID_wsmp 0x706D7377
-#define IFFID_pcm 0x206d6370
-#define IFFID_data 0x61746164
-#define IFFID_smpl 0x6C706D73
-#define IFFID_xtra 0x61727478
-
-typedef struct WAVEFILEHEADER
-{
- DWORD id_RIFF; // "RIFF"
- DWORD filesize; // file length-8
- DWORD id_WAVE;
-} WAVEFILEHEADER;
-
-
-typedef struct WAVEFORMATHEADER
-{
- DWORD id_fmt; // "fmt "
- DWORD hdrlen; // 16
- WORD format; // 1
- WORD channels; // 1:mono, 2:stereo
- DWORD freqHz; // sampling freq
- DWORD bytessec; // bytes/sec=freqHz*samplesize
- WORD samplesize; // sizeof(sample)
- WORD bitspersample; // bits per sample (8/16)
-} WAVEFORMATHEADER;
-
-
-typedef struct WAVEDATAHEADER
-{
- DWORD id_data; // "data"
- DWORD length; // length of data
-} WAVEDATAHEADER;
-
-
-typedef struct WAVESMPLHEADER
-{
- // SMPL
- DWORD smpl_id; // "smpl" -> 0x6C706D73
- DWORD smpl_len; // length of smpl: 3Ch (54h with sustain loop)
- DWORD dwManufacturer;
- DWORD dwProduct;
- DWORD dwSamplePeriod; // 1000000000/freqHz
- DWORD dwBaseNote; // 3Ch = C-4 -> 60 + RelativeTone
- DWORD dwPitchFraction;
- DWORD dwSMPTEFormat;
- DWORD dwSMPTEOffset;
- DWORD dwSampleLoops; // number of loops
- DWORD cbSamplerData;
-} WAVESMPLHEADER;
-
-
-typedef struct SAMPLELOOPSTRUCT
-{
- DWORD dwIdentifier;
- DWORD dwLoopType; // 0=normal, 1=bidi
- DWORD dwLoopStart;
- DWORD dwLoopEnd; // Byte offset ?
- DWORD dwFraction;
- DWORD dwPlayCount; // Loop Count, 0=infinite
-} SAMPLELOOPSTRUCT;
-
-
-typedef struct WAVESAMPLERINFO
-{
- WAVESMPLHEADER wsiHdr;
- SAMPLELOOPSTRUCT wsiLoops[2];
-} WAVESAMPLERINFO;
-
-
-typedef struct WAVELISTHEADER
-{
- DWORD list_id; // "LIST" -> 0x5453494C
- DWORD list_len;
- DWORD info; // "INFO"
-} WAVELISTHEADER;
-
-
-typedef struct WAVEEXTRAHEADER
-{
- DWORD xtra_id; // "xtra" -> 0x61727478
- DWORD xtra_len;
- DWORD dwFlags;
- WORD wPan;
- WORD wVolume;
- WORD wGlobalVol;
- WORD wReserved;
- BYTE nVibType;
- BYTE nVibSweep;
- BYTE nVibDepth;
- BYTE nVibRate;
-} WAVEEXTRAHEADER;
-
-#pragma pack()
-
-///////////////////////////////////////////////////////////
-// Low-level Mixing functions
-
-#define MIXBUFFERSIZE 512
-#define MIXING_ATTENUATION 4
-#define MIXING_CLIPMIN (-0x04000000)
-#define MIXING_CLIPMAX (0x03FFFFFF)
-#define VOLUMERAMPPRECISION 12
-#define FADESONGDELAY 100
-#define EQ_BUFFERSIZE (MIXBUFFERSIZE)
-#define AGC_PRECISION 9
-#define AGC_UNITY (1 << AGC_PRECISION)
-
-// Calling conventions
-#ifdef MSC_VER
-#define MPPASMCALL __cdecl
-#define MPPFASTCALL __fastcall
-#else
-#define MPPASMCALL
-#define MPPFASTCALL
-#endif
-
-#define MOD2XMFineTune(k) ((int)( (signed char)((k)<<4) ))
-#define XM2MODFineTune(k) ((int)( (k>>4)&0x0f ))
-
-// Return (a*b)/c - no divide error
-static inline int _muldiv(int a, int b, int c)
-{
- return ((unsigned long long) a * (unsigned long long) b ) / c;
-}
-
-
-// Return (a*b+c/2)/c - no divide error
-static inline int _muldivr(int a, int b, int c)
-{
- return ((unsigned long long) a * (unsigned long long) b + (c >> 1)) / c;
-}
-
-
-// Byte swapping functions from the GNU C Library and libsdl
-
-/* Swap bytes in 16 bit value. */
-#ifdef __GNUC__
-# define bswap_16(x) \
- (__extension__ \
- ({ unsigned short int __bsx = (x); \
- ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); }))
-#else
-static __inline unsigned short int
-bswap_16 (unsigned short int __bsx)
-{
- return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
-}
-#endif
-
-/* Swap bytes in 32 bit value. */
-#ifdef __GNUC__
-# define bswap_32(x) \
- (__extension__ \
- ({ unsigned int __bsx = (x); \
- ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | \
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); }))
-#else
-static __inline unsigned int
-bswap_32 (unsigned int __bsx)
-{
- return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
- (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
-}
-#endif
-
-#if (defined ARM) && (defined _WIN32_WCE)
-static __inline unsigned short int
-ARM_get16(const void *data)
-{
- unsigned short int s;
- memcpy(&s,data,sizeof(s));
- return s;
-}
-
-static __inline unsigned int
-ARM_get32(const void *data)
-{
- unsigned int s;
- memcpy(&s,data,sizeof(s));
- return s;
-}
-
-#define bswapLE16(X) ARM_get16(&X)
-#define bswapLE32(X) ARM_get32(&X)
-#define bswapBE16(X) bswap_16(ARM_get16(&X))
-#define bswapBE32(X) bswap_32(ARM_get32(&X))
-
-// From libsdl
-#elif WORDS_BIGENDIAN
-#define bswapLE16(X) bswap_16(X)
-#define bswapLE32(X) bswap_32(X)
-#define bswapBE16(X) (X)
-#define bswapBE32(X) (X)
-#else
-#define bswapLE16(X) (X)
-#define bswapLE32(X) (X)
-#define bswapBE16(X) bswap_16(X)
-#define bswapBE32(X) bswap_32(X)
-#endif
-
-#endif
diff --git a/src/modplug/sndmix.cxx b/src/modplug/sndmix.cxx
deleted file mode 100755
index 789a818..0000000
--- a/src/modplug/sndmix.cxx
+++ /dev/null
@@ -1,1246 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
-*/
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-
-// Volume ramp length, in 1/10 ms
-#define VOLUMERAMPLEN 146 // 1.46ms = 64 samples at 44.1kHz
-
-// VU-Meter
-#define VUMETER_DECAY 16
-
-// SNDMIX: These are global flags for playback control
-LONG CSoundFile::m_nStreamVolume = 0x8000;
-UINT CSoundFile::m_nMaxMixChannels = 256;
-// Mixing Configuration (SetWaveConfig)
-DWORD CSoundFile::gdwSysInfo = 0;
-DWORD CSoundFile::gnChannels = 1;
-DWORD CSoundFile::gdwSoundSetup = SNDMIX_NOBACKWARDJUMPS; // Do not allow song to loop infinitely
-DWORD CSoundFile::gdwMixingFreq = 44100;
-DWORD CSoundFile::gnBitsPerSample = 16;
-// Mixing data initialized in
-UINT CSoundFile::gnAGC = AGC_UNITY;
-UINT CSoundFile::gnVolumeRampSamples = 64;
-UINT CSoundFile::gnVULeft = 0;
-UINT CSoundFile::gnVURight = 0;
-UINT CSoundFile::gnCPUUsage = 0;
-LPSNDMIXHOOKPROC CSoundFile::gpSndMixHook = NULL;
-PMIXPLUGINCREATEPROC CSoundFile::gpMixPluginCreateProc = NULL;
-LONG gnDryROfsVol = 0;
-LONG gnDryLOfsVol = 0;
-LONG gnRvbROfsVol = 0;
-LONG gnRvbLOfsVol = 0;
-int gbInitPlugins = 0;
-
-typedef DWORD (MPPASMCALL * LPCONVERTPROC)(LPVOID, int *, DWORD, LPLONG, LPLONG);
-
-extern DWORD MPPASMCALL Convert32To8(LPVOID lpBuffer, int *, DWORD nSamples, LONG mins[2], LONG maxs[2]);
-extern DWORD MPPASMCALL Convert32To16(LPVOID lpBuffer, int *, DWORD nSamples, LONG mins[2], LONG maxs[2]);
-extern DWORD MPPASMCALL Convert32To24(LPVOID lpBuffer, int *, DWORD nSamples, LONG mins[2], LONG maxs[2]);
-extern DWORD MPPASMCALL Convert32To32(LPVOID lpBuffer, int *, DWORD nSamples, LONG mins[2], LONG maxs[2]);
-extern UINT MPPASMCALL AGC(int *pBuffer, UINT nSamples, UINT nAGC);
-extern VOID MPPASMCALL Dither(int *pBuffer, UINT nSamples, UINT nBits);
-extern VOID MPPASMCALL InterleaveFrontRear(int *pFrontBuf, int *pRearBuf, DWORD nSamples);
-extern VOID MPPASMCALL StereoFill(int *pBuffer, UINT nSamples, LPLONG lpROfs, LPLONG lpLOfs);
-extern VOID MPPASMCALL MonoFromStereo(int *pMixBuf, UINT nSamples);
-
-extern short int ModSinusTable[64];
-extern short int ModRampDownTable[64];
-extern short int ModSquareTable[64];
-extern short int ModRandomTable[64];
-extern DWORD LinearSlideUpTable[256];
-extern DWORD LinearSlideDownTable[256];
-extern DWORD FineLinearSlideUpTable[16];
-extern DWORD FineLinearSlideDownTable[16];
-extern signed char ft2VibratoTable[256]; // -64 .. +64
-extern int MixSoundBuffer[MIXBUFFERSIZE*4];
-extern int MixRearBuffer[MIXBUFFERSIZE*2];
-UINT gnReverbSend;
-
-
-// Log tables for pre-amp
-// We don't want the tracker to get too loud
-const UINT PreAmpTable[16] =
-{
- 0x60, 0x60, 0x60, 0x70, // 0-7
- 0x80, 0x88, 0x90, 0x98, // 8-15
- 0xA0, 0xA4, 0xA8, 0xB0, // 16-23
- 0xB4, 0xB8, 0xBC, 0xC0, // 24-31
-};
-
-const UINT PreAmpAGCTable[16] =
-{
- 0x60, 0x60, 0x60, 0x60,
- 0x68, 0x70, 0x78, 0x80,
- 0x84, 0x88, 0x8C, 0x90,
- 0x94, 0x98, 0x9C, 0xA0,
-};
-
-
-BOOL CSoundFile::InitPlayer(BOOL bReset)
-//--------------------------------------
-{
- if (m_nMaxMixChannels > MAX_CHANNELS) m_nMaxMixChannels = MAX_CHANNELS;
- if (gdwMixingFreq < 4000) gdwMixingFreq = 4000;
- if (gdwMixingFreq > MAX_SAMPLE_RATE) gdwMixingFreq = MAX_SAMPLE_RATE;
- gnVolumeRampSamples = (gdwMixingFreq * VOLUMERAMPLEN) / 100000;
- if (gnVolumeRampSamples < 8) gnVolumeRampSamples = 8;
- gnDryROfsVol = gnDryLOfsVol = 0;
- gnRvbROfsVol = gnRvbLOfsVol = 0;
- if (bReset)
- {
- gnVULeft = 0;
- gnVURight = 0;
- gnCPUUsage = 0;
- }
- gbInitPlugins = (bReset) ? 3 : 1;
- InitializeDSP(bReset);
- InitializeEQ(bReset);
- return TRUE;
-}
-
-
-BOOL CSoundFile::FadeSong(UINT msec)
-//----------------------------------
-{
- LONG nsamples = _muldiv(msec, gdwMixingFreq, 1000);
- if (nsamples <= 0) return FALSE;
- if (nsamples > 0x100000) nsamples = 0x100000;
- m_nBufferCount = nsamples;
- LONG nRampLength = m_nBufferCount;
- // Ramp everything down
- for (UINT noff=0; noff < m_nMixChannels; noff++)
- {
- MODCHANNEL *pramp = &Chn[ChnMix[noff]];
- if (!pramp) continue;
- pramp->nNewLeftVol = pramp->nNewRightVol = 0;
- pramp->nRightRamp = (-pramp->nRightVol << VOLUMERAMPPRECISION) / nRampLength;
- pramp->nLeftRamp = (-pramp->nLeftVol << VOLUMERAMPPRECISION) / nRampLength;
- pramp->nRampRightVol = pramp->nRightVol << VOLUMERAMPPRECISION;
- pramp->nRampLeftVol = pramp->nLeftVol << VOLUMERAMPPRECISION;
- pramp->nRampLength = nRampLength;
- pramp->dwFlags |= CHN_VOLUMERAMP;
- }
- m_dwSongFlags |= SONG_FADINGSONG;
- return TRUE;
-}
-
-
-BOOL CSoundFile::GlobalFadeSong(UINT msec)
-//----------------------------------------
-{
- if (m_dwSongFlags & SONG_GLOBALFADE) return FALSE;
- m_nGlobalFadeMaxSamples = _muldiv(msec, gdwMixingFreq, 1000);
- m_nGlobalFadeSamples = m_nGlobalFadeMaxSamples;
- m_dwSongFlags |= SONG_GLOBALFADE;
- return TRUE;
-}
-
-
-UINT CSoundFile::Read(LPVOID lpDestBuffer, UINT cbBuffer)
-//-------------------------------------------------------
-{
- LPBYTE lpBuffer = (LPBYTE)lpDestBuffer;
- LPCONVERTPROC pCvt = Convert32To8;
- LONG vu_min[2];
- LONG vu_max[2];
- UINT lRead, lMax, lSampleSize, lCount, lSampleCount, nStat=0;
-#if 0
- UINT nMaxPlugins;
-#endif
-
- vu_min[0] = vu_min[1] = 0x7FFFFFFF;
- vu_max[0] = vu_max[1] = -0x7FFFFFFF;
-
-#if 0
- {
- nMaxPlugins = MAX_MIXPLUGINS;
- while ((nMaxPlugins > 0) && (!m_MixPlugins[nMaxPlugins-1].pMixPlugin)) nMaxPlugins--;
- }
-#endif
- m_nMixStat = 0;
- lSampleSize = gnChannels;
- if (gnBitsPerSample == 16) { lSampleSize *= 2; pCvt = Convert32To16; }
- else if (gnBitsPerSample == 24) { lSampleSize *= 3; pCvt = Convert32To24; }
- else if (gnBitsPerSample == 32) { lSampleSize *= 4; pCvt = Convert32To32; }
- lMax = cbBuffer / lSampleSize;
- if ((!lMax) || (!lpBuffer) || (!m_nChannels)) return 0;
- lRead = lMax;
- if (m_dwSongFlags & SONG_ENDREACHED) goto MixDone;
- while (lRead > 0)
- {
- // Update Channel Data
- UINT lTotalSampleCount;
- if (!m_nBufferCount)
- {
- if (!(gdwSoundSetup & SNDMIX_DIRECTTODISK))
- m_nBufferCount = lRead;
- if (!ReadNote()) {
- m_dwSongFlags |= SONG_ENDREACHED;
- if (lRead == lMax) goto MixDone;
- if (!(gdwSoundSetup & SNDMIX_DIRECTTODISK))
- m_nBufferCount = lRead;
- }
- if (!m_nBufferCount) goto MixDone;
- }
- lCount = m_nBufferCount;
- if (lCount > MIXBUFFERSIZE) lCount = MIXBUFFERSIZE;
- if (lCount > lRead) lCount = lRead;
- if (!lCount) break;
- lSampleCount = lCount;
-#ifndef MODPLUG_NO_REVERB
- gnReverbSend = 0;
-#endif
-
- // Resetting sound buffer
- StereoFill(MixSoundBuffer, lSampleCount, &gnDryROfsVol, &gnDryLOfsVol);
- if (gnChannels >= 2)
- {
- lSampleCount *= 2;
- m_nMixStat += CreateStereoMix(lCount);
-#if 0
- if (nMaxPlugins) ProcessPlugins(lCount);
-#endif
- ProcessStereoDSP(lCount);
- } else
- {
- m_nMixStat += CreateStereoMix(lCount);
-#if 0
- if (nMaxPlugins) ProcessPlugins(lCount);
-#endif
- MonoFromStereo(MixSoundBuffer, lCount);
- ProcessMonoDSP(lCount);
- }
-
- if (gdwSoundSetup & SNDMIX_EQ)
- {
- if (gnChannels >= 2)
- EQStereo(MixSoundBuffer, lCount);
- else
- EQMono(MixSoundBuffer, lCount);
- }
-
-
- nStat++;
-#ifndef NO_AGC
- // Automatic Gain Control
- if (gdwSoundSetup & SNDMIX_AGC) ProcessAGC(lSampleCount);
-#endif
- lTotalSampleCount = lSampleCount;
- // Multichannel
- if (gnChannels > 2)
- {
- InterleaveFrontRear(MixSoundBuffer, MixRearBuffer, lSampleCount);
- lTotalSampleCount *= 2;
- }
- // Hook Function
- if (gpSndMixHook)
- {
- gpSndMixHook(MixSoundBuffer, lTotalSampleCount, gnChannels);
- }
- // Perform clipping + VU-Meter
- lpBuffer += pCvt(lpBuffer, MixSoundBuffer, lTotalSampleCount, vu_min, vu_max);
- // Buffer ready
- lRead -= lCount;
- m_nBufferCount -= lCount;
- }
-MixDone:
- if (lRead) memset(lpBuffer, (gnBitsPerSample == 8) ? 0x80 : 0, lRead * lSampleSize);
- // VU-Meter
- vu_min[0] >>= 18;
- vu_min[1] >>= 18;
- vu_max[0] >>= 18;
- vu_max[1] >>= 18;
- if (vu_max[0] < vu_min[0]) vu_max[0] = vu_min[0];
- if (vu_max[1] < vu_min[1]) vu_max[1] = vu_min[1];
- if ((gnVULeft = (UINT)(vu_max[0] - vu_min[0])) > 0xFF)
- gnVULeft = 0xFF;
- if ((gnVURight = (UINT)(vu_max[1] - vu_min[1])) > 0xFF)
- gnVURight = 0xFF;
- if (nStat) { m_nMixStat += nStat-1; m_nMixStat /= nStat; }
- return lMax - lRead;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Handles navigation/effects
-
-BOOL CSoundFile::ProcessRow()
-//---------------------------
-{
- if (++m_nTickCount >= m_nMusicSpeed * (m_nPatternDelay+1) + m_nFrameDelay)
- {
- m_nPatternDelay = 0;
- m_nFrameDelay = 0;
- m_nTickCount = 0;
- m_nRow = m_nNextRow;
- // Reset Pattern Loop Effect
- if (m_nCurrentPattern != m_nNextPattern) m_nCurrentPattern = m_nNextPattern;
- // Check if pattern is valid
- if (!(m_dwSongFlags & SONG_PATTERNLOOP))
- {
- m_nPattern = (m_nCurrentPattern < MAX_ORDERS) ? Order[m_nCurrentPattern] : 0xFF;
- if ((m_nPattern < MAX_PATTERNS) && (!Patterns[m_nPattern])) m_nPattern = 0xFE;
- while (m_nPattern >= MAX_PATTERNS)
- {
- // End of song ?
- if ((m_nPattern == 0xFF) || (m_nCurrentPattern >= MAX_ORDERS))
- {
- //if (!m_nRepeatCount)
- return FALSE; //never repeat entire song
- if (!m_nRestartPos)
- {
- m_nMusicSpeed = m_nDefaultSpeed;
- m_nMusicTempo = m_nDefaultTempo;
- m_nGlobalVolume = m_nDefaultGlobalVolume;
- for (UINT i=0; i<MAX_CHANNELS; i++)
- {
- Chn[i].dwFlags |= CHN_NOTEFADE | CHN_KEYOFF;
- Chn[i].nFadeOutVol = 0;
- if (i < m_nChannels)
- {
- Chn[i].nGlobalVol = ChnSettings[i].nVolume;
- Chn[i].nVolume = ChnSettings[i].nVolume;
- Chn[i].nPan = ChnSettings[i].nPan;
- Chn[i].nPanSwing = Chn[i].nVolSwing = 0;
- Chn[i].nOldVolParam = 0;
- Chn[i].nOldOffset = 0;
- Chn[i].nOldHiOffset = 0;
- Chn[i].nPortamentoDest = 0;
- if (!Chn[i].nLength)
- {
- Chn[i].dwFlags = ChnSettings[i].dwFlags;
- Chn[i].nLoopStart = 0;
- Chn[i].nLoopEnd = 0;
- Chn[i].pHeader = NULL;
- Chn[i].pSample = NULL;
- Chn[i].pInstrument = NULL;
- }
- }
- }
- }
-// if (m_nRepeatCount > 0) m_nRepeatCount--;
- m_nCurrentPattern = m_nRestartPos;
- m_nRow = 0;
- if ((Order[m_nCurrentPattern] >= MAX_PATTERNS) || (!Patterns[Order[m_nCurrentPattern]])) return FALSE;
- } else
- {
- m_nCurrentPattern++;
- }
- m_nPattern = (m_nCurrentPattern < MAX_ORDERS) ? Order[m_nCurrentPattern] : 0xFF;
- if ((m_nPattern < MAX_PATTERNS) && (!Patterns[m_nPattern])) m_nPattern = 0xFE;
- }
- m_nNextPattern = m_nCurrentPattern;
- }
- // Weird stuff?
- if ((m_nPattern >= MAX_PATTERNS) || (!Patterns[m_nPattern])) return FALSE;
- // Should never happen
- if (m_nRow >= PatternSize[m_nPattern]) m_nRow = 0;
- m_nNextRow = m_nRow + 1;
- if (m_nNextRow >= PatternSize[m_nPattern])
- {
- if (!(m_dwSongFlags & SONG_PATTERNLOOP)) m_nNextPattern = m_nCurrentPattern + 1;
- m_nNextRow = 0;
- }
- // Reset channel values
- MODCHANNEL *pChn = Chn;
- MODCOMMAND *m = Patterns[m_nPattern] + m_nRow * m_nChannels;
- for (UINT nChn=0; nChn<m_nChannels; pChn++, nChn++, m++)
- {
- pChn->nRowNote = m->note;
- pChn->nRowInstr = m->instr;
- pChn->nRowVolCmd = m->volcmd;
- pChn->nRowVolume = m->vol;
- pChn->nRowCommand = m->command;
- pChn->nRowParam = m->param;
-
- pChn->nLeftVol = pChn->nNewLeftVol;
- pChn->nRightVol = pChn->nNewRightVol;
- pChn->dwFlags &= ~(CHN_PORTAMENTO | CHN_VIBRATO | CHN_TREMOLO | CHN_PANBRELLO);
- pChn->nCommand = 0;
- }
- }
- // Should we process tick0 effects?
- if (!m_nMusicSpeed) m_nMusicSpeed = 1;
- m_dwSongFlags |= SONG_FIRSTTICK;
- if (m_nTickCount)
- {
- m_dwSongFlags &= ~SONG_FIRSTTICK;
- if ((!(m_nType & MOD_TYPE_XM)) && (m_nTickCount < m_nMusicSpeed * (1 + m_nPatternDelay)))
- {
- if (!(m_nTickCount % m_nMusicSpeed)) m_dwSongFlags |= SONG_FIRSTTICK;
- }
-
- }
- // Update Effects
- return ProcessEffects();
-}
-
-
-////////////////////////////////////////////////////////////////////////////////////////////
-// Handles envelopes & mixer setup
-
-BOOL CSoundFile::ReadNote()
-//-------------------------
-{
- // Checking end of row ?
- if (m_dwSongFlags & SONG_PAUSED)
- {
- /*m_nTickCount = 0;*/
- if (!m_nMusicSpeed) m_nMusicSpeed = 6;
- if (!m_nMusicTempo) m_nMusicTempo = 125;
- m_nPatternDelay = 0;
- m_nFrameDelay = 0;
-
- m_dwSongFlags |= SONG_FIRSTTICK;
- if (m_nTickCount) {
- m_dwSongFlags &= ~SONG_FIRSTTICK;
- }
-
- ProcessEffects();
- m_nTickCount++;
- if (m_nTickCount >= m_nMusicSpeed) {
- m_nTickCount = 0;
- }
- if (!ProcessEffects()) return FALSE;
- } else
- {
- if (!ProcessRow()) return FALSE;
- }
-
- { /* handle realtime closures */
- MODCHANNEL *pChn = Chn;
- for (UINT nChn=0; nChn<m_nChannels; pChn++, nChn++) {
- /* reset end of "row" */
- if (pChn->nRealtime && pChn->nRowNote && (pChn->nTickStart % m_nMusicSpeed) == (m_nTickCount % m_nMusicSpeed)) {
- pChn->nRealtime = 0;
- pChn->nRowNote = 0;
- pChn->nRowInstr = 0;
- //pChn->nMaster
- pChn->nRowVolCmd = 0;
- pChn->nRowVolume = 0;
- pChn->nRowCommand = 0;
- pChn->nRowParam = 0;
- pChn->nTickStart = 0;
- }
- }
- };
-
- ////////////////////////////////////////////////////////////////////////////////////
- m_nTotalCount++;
- if (!m_nMusicTempo) return FALSE;
- m_nBufferCount = (gdwMixingFreq * 5 * m_nTempoFactor) / (m_nMusicTempo << 8);
-#ifdef MODPLUG_TRACKER
- if (m_dwSongFlags & SONG_PAUSED)
- {
- m_nBufferCount = gdwMixingFreq / 64; // 1/64 seconds
- }
-#endif
-
- // Master Volume + Pre-Amplification / Attenuation setup
- DWORD nMasterVol;
- {
- int nchn32 = 0;
- MODCHANNEL *pChn = Chn;
- for (UINT nChn=0; nChn<m_nChannels; nChn++, pChn++) {
- nchn32++;
- }
- if (nchn32 < 1) nchn32 = 1;
- if (nchn32 > 31) nchn32 = 31;
-
- int realmastervol = m_nMasterVolume;
- if (realmastervol > 0x80)
- {
- realmastervol = 0x80 + ((realmastervol - 0x80) * (nchn32+4)) / 16;
- }
-
- DWORD mastervol = (realmastervol * (m_nSongPreAmp)) >> 6;
-// if (mastervol > 0x200) mastervol = 0x200;
- if ((m_dwSongFlags & SONG_GLOBALFADE) && (m_nGlobalFadeMaxSamples))
- {
- mastervol = _muldiv(mastervol, m_nGlobalFadeSamples, m_nGlobalFadeMaxSamples);
- }
-
- UINT attenuation = (gdwSoundSetup & SNDMIX_AGC) ? PreAmpAGCTable[nchn32>>1] : PreAmpTable[nchn32>>1];
- if (attenuation < 1) attenuation = 1;
-
- nMasterVol = (mastervol << 7) / attenuation;
- if (nMasterVol > 0x180) nMasterVol = 0x180;
- }
- ////////////////////////////////////////////////////////////////////////////////////
- // Update channels data
- if (CSoundFile::gdwSoundSetup & SNDMIX_NOMIXING) return TRUE;
- m_nMixChannels = 0;
- MODCHANNEL *pChn = Chn;
- for (UINT nChn=0; nChn<MAX_CHANNELS; nChn++,pChn++)
- {
- if ((pChn->dwFlags & CHN_NOTEFADE) && (!(pChn->nFadeOutVol|pChn->nRightVol|pChn->nLeftVol)))
- {
- pChn->nLength = 0;
- pChn->nROfs = pChn->nLOfs = 0;
- }
- // Check for unused channel
- if ((nChn >= m_nChannels) && (!pChn->nLength))
- {
- pChn->nLeftVU = pChn->nRightVU = 0;
- continue;
- }
- // Reset channel data
- pChn->nInc = 0;
- pChn->nRealVolume = 0;
- pChn->nRealPan = pChn->nPan + pChn->nPanSwing;
- if (pChn->nRealPan < 0) pChn->nRealPan = 0;
- if (pChn->nRealPan > 256) pChn->nRealPan = 256;
- pChn->nRampLength = 0;
- // Calc Frequency
- if ((pChn->nPeriod) && (pChn->nLength))
- {
- int vol = pChn->nVolume + pChn->nVolSwing;
-
- if (vol < 0) vol = 0;
- if (vol > 256) vol = 256;
- // Tremolo
- if (pChn->dwFlags & CHN_TREMOLO)
- {
- UINT trempos = pChn->nTremoloPos & 0x3F;
- if (vol > 0)
- {
- int tremattn = (m_nType & MOD_TYPE_XM) ? 5 : 6;
- switch (pChn->nTremoloType & 0x03)
- {
- case 1:
- vol += (ModRampDownTable[trempos] * (int)pChn->nTremoloDepth) >> tremattn;
- break;
- case 2:
- vol += (ModSquareTable[trempos] * (int)pChn->nTremoloDepth) >> tremattn;
- break;
- case 3:
- vol += (ModRandomTable[trempos] * (int)pChn->nTremoloDepth) >> tremattn;
- break;
- default:
- vol += (ModSinusTable[trempos] * (int)pChn->nTremoloDepth) >> tremattn;
- }
- }
- if ((m_nTickCount) || ((m_nType & (MOD_TYPE_STM|MOD_TYPE_S3M|MOD_TYPE_IT)) && (!(m_dwSongFlags & SONG_ITOLDEFFECTS))))
- {
- pChn->nTremoloPos = (trempos + pChn->nTremoloSpeed) & 0x3F;
- }
- }
- // Tremor
- if (pChn->nCommand == CMD_TREMOR)
- {
- UINT n = (pChn->nTremorParam >> 4) + (pChn->nTremorParam & 0x0F);
- UINT ontime = pChn->nTremorParam >> 4;
- if ((!(m_nType & MOD_TYPE_IT)) || (m_dwSongFlags & SONG_ITOLDEFFECTS)) { n += 2; ontime++; }
- UINT tremcount = (UINT)pChn->nTremorCount;
- if (tremcount >= n) tremcount = 0;
- if ((m_nTickCount) || (m_nType & (MOD_TYPE_S3M|MOD_TYPE_IT)))
- {
- if (tremcount >= ontime) vol = 0;
- pChn->nTremorCount = (BYTE)(tremcount + 1);
- }
- pChn->dwFlags |= CHN_FASTVOLRAMP;
- }
- // Clip volume
- if (vol < 0) vol = 0;
- if (vol > 0x100) vol = 0x100;
- vol <<= 6;
- // Process Envelopes
- if ((m_dwSongFlags & SONG_INSTRUMENTMODE) && pChn->pHeader)
- {
- INSTRUMENTHEADER *penv = pChn->pHeader;
- // Volume Envelope
- if ((pChn->dwFlags & CHN_VOLENV) && (penv->VolEnv.nNodes))
- {
- int envpos = pChn->nVolEnvPosition;
- UINT pt = penv->VolEnv.nNodes - 1;
- for (UINT i=0; i<(UINT)(penv->VolEnv.nNodes-1); i++)
- {
- if (envpos <= penv->VolEnv.Ticks[i])
- {
- pt = i;
- break;
- }
- }
- int x2 = penv->VolEnv.Ticks[pt];
- int x1, envvol;
- if (envpos >= x2)
- {
- envvol = penv->VolEnv.Values[pt] << 2;
- x1 = x2;
- } else
- if (pt)
- {
- envvol = penv->VolEnv.Values[pt-1] << 2;
- x1 = penv->VolEnv.Ticks[pt-1];
- } else
- {
- envvol = 0;
- x1 = 0;
- }
- if (envpos > x2) envpos = x2;
- if ((x2 > x1) && (envpos > x1))
- {
- envvol += ((envpos - x1) * (((int)penv->VolEnv.Values[pt]<<2) - envvol)) / (x2 - x1);
- }
- if (envvol < 0) envvol = 0;
- if (envvol > 256) envvol = 256;
- vol = (vol * envvol) >> 8;
- }
- // Panning Envelope
- if ((pChn->dwFlags & CHN_PANENV) && (penv->PanEnv.nNodes))
- {
- int envpos = pChn->nPanEnvPosition;
- UINT pt = penv->PanEnv.nNodes - 1;
- for (UINT i=0; i<(UINT)(penv->PanEnv.nNodes-1); i++)
- {
- if (envpos <= penv->PanEnv.Ticks[i])
- {
- pt = i;
- break;
- }
- }
- int x2 = penv->PanEnv.Ticks[pt], y2 = penv->PanEnv.Values[pt];
- int x1, envpan;
- if (envpos >= x2)
- {
- envpan = y2;
- x1 = x2;
- } else
- if (pt)
- {
- envpan = penv->PanEnv.Values[pt-1];
- x1 = penv->PanEnv.Ticks[pt-1];
- } else
- {
- envpan = 128;
- x1 = 0;
- }
- if ((x2 > x1) && (envpos > x1))
- {
- envpan += ((envpos - x1) * (y2 - envpan)) / (x2 - x1);
- }
- if (envpan < 0) envpan = 0;
- if (envpan > 64) envpan = 64;
- int pan = pChn->nPan;
- if (pan >= 128)
- {
- pan += ((envpan - 32) * (256 - pan)) / 32;
- } else
- {
- pan += ((envpan - 32) * (pan)) / 32;
- }
- if (pan < 0) pan = 0;
- if (pan > 256) pan = 256;
- pChn->nRealPan = pan;
- }
- // FadeOut volume
- if (pChn->dwFlags & CHN_NOTEFADE)
- {
- UINT fadeout = penv->nFadeOut;
- if (fadeout)
- {
- pChn->nFadeOutVol -= fadeout << 1;
- if (pChn->nFadeOutVol <= 0) pChn->nFadeOutVol = 0;
- vol = (vol * pChn->nFadeOutVol) >> 16;
- } else
- if (!pChn->nFadeOutVol)
- {
- vol = 0;
- }
- }
- // Pitch/Pan separation
- if ((penv->nPPS) && (pChn->nRealPan) && (pChn->nNote))
- {
- int pandelta = (int)pChn->nRealPan + (int)((int)(pChn->nNote - penv->nPPC - 1) * (int)penv->nPPS) / (int)8;
- if (pandelta < 0) pandelta = 0;
- if (pandelta > 256) pandelta = 256;
- pChn->nRealPan = pandelta;
- }
- } else
- {
- // No Envelope: key off => note cut
- if (pChn->dwFlags & CHN_NOTEFADE) // 1.41-: CHN_KEYOFF|CHN_NOTEFADE
- {
- pChn->nFadeOutVol = 0;
- vol = 0;
- }
- }
- // vol is 14-bits
- if (vol)
- {
- // IMPORTANT: pChn->nRealVolume is 14 bits !!!
- // -> _muldiv( 14+8, 6+6, 18); => RealVolume: 14-bit result (22+12-20)
- pChn->nRealVolume = _muldiv(vol * m_nGlobalVolume, pChn->nGlobalVol * pChn->nInsVol, 1 << 20);
- }
- if (pChn->nPeriod < m_nMinPeriod) pChn->nPeriod = m_nMinPeriod;
- int period = pChn->nPeriod;
- if ((pChn->dwFlags & (CHN_GLISSANDO|CHN_PORTAMENTO)) == (CHN_GLISSANDO|CHN_PORTAMENTO))
- {
- period = GetPeriodFromNote(GetNoteFromPeriod(period), pChn->nFineTune, pChn->nC4Speed);
- }
-
- // Arpeggio ?
- if (pChn->nCommand == CMD_ARPEGGIO)
- {
- switch(m_nTickCount % 3)
- {
-#if 0
- case 1: period = GetPeriodFromNote(pChn->nNote + (pChn->nArpeggio >> 4), pChn->nFineTune, pChn->nC4Speed); break;
- case 2: period = GetPeriodFromNote(pChn->nNote + (pChn->nArpeggio & 0x0F), pChn->nFineTune, pChn->nC4Speed); break;
-#else
- case 1: period = GetLinearPeriodFromNote(GetNoteFromPeriod(period) + (pChn->nArpeggio >> 4), pChn->nFineTune, pChn->nC4Speed); break;
- case 2: period = GetLinearPeriodFromNote(GetNoteFromPeriod(period) + (pChn->nArpeggio & 0x0F), pChn->nFineTune, pChn->nC4Speed); break;
-#endif
- }
- }
-
- if (m_dwSongFlags & SONG_AMIGALIMITS)
- {
- if (period < 113*4) period = 113*4;
- if (period > 856*4) period = 856*4;
- }
-
- // Pitch/Filter Envelope
- int envpitch = 0;
- if ((m_dwSongFlags & SONG_INSTRUMENTMODE) && (pChn->pHeader)
- && (pChn->dwFlags & CHN_PITCHENV) && (pChn->pHeader->PitchEnv.nNodes))
- {
- INSTRUMENTHEADER *penv = pChn->pHeader;
- int envpos = pChn->nPitchEnvPosition;
- UINT pt = penv->PitchEnv.nNodes - 1;
- for (UINT i=0; i<(UINT)(penv->PitchEnv.nNodes-1); i++)
- {
- if (envpos <= penv->PitchEnv.Ticks[i])
- {
- pt = i;
- break;
- }
- }
- int x2 = penv->PitchEnv.Ticks[pt];
- int x1;
- if (envpos >= x2)
- {
- envpitch = (((int)penv->PitchEnv.Values[pt]) - 32) * 8;
- x1 = x2;
- } else
- if (pt)
- {
- envpitch = (((int)penv->PitchEnv.Values[pt-1]) - 32) * 8;
- x1 = penv->PitchEnv.Ticks[pt-1];
- } else
- {
- envpitch = 0;
- x1 = 0;
- }
- if (envpos > x2) envpos = x2;
- if ((x2 > x1) && (envpos > x1))
- {
- int envpitchdest = (((int)penv->PitchEnv.Values[pt]) - 32) * 8;
- envpitch += ((envpos - x1) * (envpitchdest - envpitch)) / (x2 - x1);
- }
- if (envpitch < -256) envpitch = -256;
- if (envpitch > 256) envpitch = 256;
- // Pitch Envelope
- if (!(penv->dwFlags & ENV_FILTER))
- {
- int l = envpitch;
- if (l < 0)
- {
- l = -l;
- if (l > 255) l = 255;
- period = _muldiv(period, LinearSlideUpTable[l], 0x10000);
- } else
- {
- if (l > 255) l = 255;
- period = _muldiv(period, LinearSlideDownTable[l], 0x10000);
- }
- }
- }
-
- // Vibrato
- if (pChn->dwFlags & CHN_VIBRATO)
- {
- UINT vibpos = pChn->nVibratoPos;
- LONG vdelta;
- switch (pChn->nVibratoType & 0x03)
- {
- case 1:
- vdelta = ModRampDownTable[vibpos];
- break;
- case 2:
- vdelta = ModSquareTable[vibpos];
- break;
- case 3:
- vdelta = ModRandomTable[vibpos];
- break;
- default:
- vdelta = ModSinusTable[vibpos];
- }
- UINT vdepth = ((m_nType != MOD_TYPE_IT) || (m_dwSongFlags & SONG_ITOLDEFFECTS)) ? 6 : 7;
- vdelta = (vdelta * (int)pChn->nVibratoDepth) >> vdepth;
- if ((m_dwSongFlags & SONG_LINEARSLIDES) && (m_nType & MOD_TYPE_IT))
- {
- LONG l = vdelta;
- if (l < 0)
- {
- l = -l;
- vdelta = _muldiv(period, LinearSlideDownTable[l >> 2], 0x10000) - period;
- if (l & 0x03) vdelta += _muldiv(period, FineLinearSlideDownTable[l & 0x03], 0x10000) - period;
-
- } else
- {
- vdelta = _muldiv(period, LinearSlideUpTable[l >> 2], 0x10000) - period;
- if (l & 0x03) vdelta += _muldiv(period, FineLinearSlideUpTable[l & 0x03], 0x10000) - period;
-
- }
- }
- period += vdelta;
- if ((m_nTickCount) || ((m_nType & MOD_TYPE_IT) && (!(m_dwSongFlags & SONG_ITOLDEFFECTS))))
- {
- pChn->nVibratoPos = (vibpos + pChn->nVibratoSpeed) & 0x3F;
- }
- }
- // Panbrello
- if (pChn->dwFlags & CHN_PANBRELLO)
- {
- UINT panpos = ((pChn->nPanbrelloPos+0x10) >> 2) & 0x3F;
- LONG pdelta;
- switch (pChn->nPanbrelloType & 0x03)
- {
- case 1:
- pdelta = ModRampDownTable[panpos];
- break;
- case 2:
- pdelta = ModSquareTable[panpos];
- break;
- case 3:
- pdelta = ModRandomTable[panpos];
- break;
- default:
- pdelta = ModSinusTable[panpos];
- }
- pChn->nPanbrelloPos += pChn->nPanbrelloSpeed;
- pdelta = ((pdelta * (int)pChn->nPanbrelloDepth) + 2) >> 3;
- pdelta += pChn->nRealPan;
- if (pdelta < 0) pdelta = 0;
- if (pdelta > 256) pdelta = 256;
- pChn->nRealPan = pdelta;
- }
- int nPeriodFrac = 0;
- // Instrument Auto-Vibrato
- if ((pChn->pInstrument) && (pChn->pInstrument->nVibDepth))
- {
- MODINSTRUMENT *pins = pChn->pInstrument;
- /* this isn't correct, but its better... */
-
- if (pins->nVibSweep == 0) {
- pChn->nAutoVibDepth = pins->nVibDepth << 8;
- } else {
- pChn->nAutoVibDepth += pins->nVibSweep;
- if ((pChn->nAutoVibDepth >> 8) > (int)pins->nVibDepth)
- pChn->nAutoVibDepth = pins->nVibDepth << 8;
- }
-#if 0
- if (pins->nVibSweep == 0)
- {
- pChn->nAutoVibDepth = pins->nVibDepth << 8;
- } else
- {
- if (m_nType & MOD_TYPE_IT)
- {
- pChn->nAutoVibDepth += pins->nVibSweep;
- } else
- if (!(pChn->dwFlags & CHN_KEYOFF))
- {
- pChn->nAutoVibDepth += (pins->nVibDepth << 8) / pins->nVibSweep;
- }
- if ((pChn->nAutoVibDepth >> 8) > pins->nVibDepth)
- pChn->nAutoVibDepth = pins->nVibDepth << 8;
- }
-#endif
- pChn->nAutoVibPos += ((int)pins->nVibRate);
- int val;
- switch(pins->nVibType)
- {
- case 4: // Random
- val = ModRandomTable[pChn->nAutoVibPos & 0x3F];
- pChn->nAutoVibPos++;
- break;
- case 3: // Ramp Down
- val = ((0x40 - (pChn->nAutoVibPos >> 1)) & 0x7F) - 0x40;
- break;
- case 2: // Ramp Up
- val = ((0x40 + (pChn->nAutoVibPos >> 1)) & 0x7f) - 0x40;
- break;
- case 1: // Square
- val = (pChn->nAutoVibPos & 128) ? +64 : -64;
- break;
- default: // Sine
- val = ft2VibratoTable[pChn->nAutoVibPos & 255];
- }
- int n = ((val * pChn->nAutoVibDepth) >> 8);
- // is this right? -mrsb
- if (!(m_dwSongFlags & SONG_ITOLDEFFECTS))
- n >>= 1;
-
- if (m_nType & MOD_TYPE_IT)
- {
- int df1, df2;
- if (n < 0)
- {
- n = -n;
- UINT n1 = n >> 8;
- df1 = LinearSlideUpTable[n1];
- df2 = LinearSlideUpTable[n1+1];
- } else
- {
- UINT n1 = n >> 8;
- df1 = LinearSlideDownTable[n1];
- df2 = LinearSlideDownTable[n1+1];
- }
- n >>= 2;
- period = _muldiv(period, df1 + ((df2-df1)*(n&0x3F)>>6), 256);
- nPeriodFrac = period & 0xFF;
- period >>= 8;
- } else
- {
- period += (n >> 6);
- }
- }
- // Final Period
- if (period <= m_nMinPeriod)
- {
- if (m_nType & MOD_TYPE_S3M) pChn->nLength = 0;
- period = m_nMinPeriod;
- }
- if (period > m_nMaxPeriod)
- {
- if ((m_nType & MOD_TYPE_IT) || (period >= 0x100000))
- {
- pChn->nFadeOutVol = 0;
- pChn->dwFlags |= CHN_NOTEFADE;
- pChn->nRealVolume = 0;
- }
- period = m_nMaxPeriod;
- nPeriodFrac = 0;
- }
- UINT freq = GetFreqFromPeriod(period, pChn->nC4Speed, nPeriodFrac);
-
- // Filter Envelope: controls cutoff frequency
- if (pChn && pChn->pHeader && pChn->pHeader->dwFlags & ENV_FILTER)
- {
-#ifndef NO_FILTER
- SetupChannelFilter(pChn, (pChn->dwFlags & CHN_FILTER) ? FALSE : TRUE, envpitch);
-#endif // NO_FILTER
- }
-
-#if 0
- if ((m_nType & MOD_TYPE_IT) && (freq < 256))
- {
- pChn->nFadeOutVol = 0;
- pChn->dwFlags |= CHN_NOTEFADE;
- pChn->nRealVolume = 0;
- }
-#endif
- pChn->sample_freq = freq;
-
- UINT ninc = _muldiv(freq, 0x10000, gdwMixingFreq);
- if ((ninc >= 0xFFB0) && (ninc <= 0x10090)) ninc = 0x10000;
- if (m_nFreqFactor != 128) ninc = (ninc * m_nFreqFactor) >> 7;
- if (ninc > 0xFF0000) ninc = 0xFF0000;
- pChn->nInc = (ninc+1) & ~3;
- }
-
- // Increment envelope position
- if ((m_dwSongFlags & SONG_INSTRUMENTMODE) && pChn->pHeader)
- {
- INSTRUMENTHEADER *penv = pChn->pHeader;
- // Volume Envelope
- if (pChn->dwFlags & CHN_VOLENV)
- {
- // Increase position
- pChn->nVolEnvPosition++;
- // Volume Loop ?
- if (penv->dwFlags & ENV_VOLLOOP)
- {
- int volloopend = penv->VolEnv.Ticks[penv->VolEnv.nLoopEnd];
- if (m_nType != MOD_TYPE_XM) volloopend++;
- if (pChn->nVolEnvPosition == volloopend)
- {
- pChn->nVolEnvPosition = penv->VolEnv.Ticks[penv->VolEnv.nLoopStart];
- if ((penv->VolEnv.nLoopEnd == penv->VolEnv.nLoopStart) && (!penv->VolEnv.Values[penv->VolEnv.nLoopStart])
- && ((!(m_nType & MOD_TYPE_XM)) || (penv->VolEnv.nLoopEnd+1 == penv->VolEnv.nNodes)))
- {
- pChn->dwFlags |= CHN_NOTEFADE;
- pChn->nFadeOutVol = 0;
- }
- }
- }
- // Volume Sustain ?
- if ((penv->dwFlags & ENV_VOLSUSTAIN) && (!(pChn->dwFlags & CHN_KEYOFF)))
- {
- if (pChn->nVolEnvPosition == (int)penv->VolEnv.Ticks[penv->VolEnv.nSustainEnd]+1)
- pChn->nVolEnvPosition = penv->VolEnv.Ticks[penv->VolEnv.nSustainStart];
- } else
- // End of Envelope ?
- if (pChn->nVolEnvPosition > penv->VolEnv.Ticks[penv->VolEnv.nNodes - 1])
- {
- if ((m_nType & MOD_TYPE_IT) || (pChn->dwFlags & CHN_KEYOFF)) pChn->dwFlags |= CHN_NOTEFADE;
- pChn->nVolEnvPosition = penv->VolEnv.Ticks[penv->VolEnv.nNodes - 1];
- if ((!penv->VolEnv.Values[penv->VolEnv.nNodes-1]) && ((nChn >= m_nChannels) || (m_nType & MOD_TYPE_IT)))
- {
- pChn->dwFlags |= CHN_NOTEFADE;
- pChn->nFadeOutVol = 0;
-
- pChn->nRealVolume = 0;
- }
- }
- }
- // Panning Envelope
- if (pChn->dwFlags & CHN_PANENV)
- {
- pChn->nPanEnvPosition++;
- if (penv->dwFlags & ENV_PANLOOP)
- {
- int panloopend = penv->PanEnv.Ticks[penv->PanEnv.nLoopEnd];
- if (m_nType != MOD_TYPE_XM) panloopend++;
- if (pChn->nPanEnvPosition == panloopend)
- pChn->nPanEnvPosition = penv->PanEnv.Ticks[penv->PanEnv.nLoopStart];
- }
- // Panning Sustain ?
- if ((penv->dwFlags & ENV_PANSUSTAIN) && (pChn->nPanEnvPosition == (int)penv->PanEnv.Ticks[penv->PanEnv.nSustainEnd]+1)
- && (!(pChn->dwFlags & CHN_KEYOFF)))
- {
- // Panning sustained
- pChn->nPanEnvPosition = penv->PanEnv.Ticks[penv->PanEnv.nSustainStart];
- } else
- {
- if (pChn->nPanEnvPosition > penv->PanEnv.Ticks[penv->PanEnv.nNodes - 1])
- pChn->nPanEnvPosition = penv->PanEnv.Ticks[penv->PanEnv.nNodes - 1];
- }
- }
- // Pitch Envelope
- if (pChn->dwFlags & CHN_PITCHENV)
- {
- // Increase position
- pChn->nPitchEnvPosition++;
- // Pitch Loop ?
- if (penv->dwFlags & ENV_PITCHLOOP)
- {
- if (pChn->nPitchEnvPosition >= penv->PitchEnv.Ticks[penv->PitchEnv.nLoopEnd])
- pChn->nPitchEnvPosition = penv->PitchEnv.Ticks[penv->PitchEnv.nLoopStart];
- }
- // Pitch Sustain ?
- if ((penv->dwFlags & ENV_PITCHSUSTAIN) && (!(pChn->dwFlags & CHN_KEYOFF)))
- {
- if (pChn->nPitchEnvPosition == (int)penv->PitchEnv.Ticks[penv->PitchEnv.nSustainEnd]+1)
- pChn->nPitchEnvPosition = penv->PitchEnv.Ticks[penv->PitchEnv.nSustainStart];
- } else
- {
- if (pChn->nPitchEnvPosition > penv->PitchEnv.Ticks[penv->PitchEnv.nNodes - 1])
- pChn->nPitchEnvPosition = penv->PitchEnv.Ticks[penv->PitchEnv.nNodes - 1];
- }
- }
- }
-#if 0
- // Limit CPU -> > 80% -> don't ramp
- if ((gnCPUUsage >= 80) && (!pChn->nRealVolume))
- {
- pChn->nLeftVol = pChn->nRightVol = 0;
- }
-#endif // MODPLUG_PLAYER
- // Volume ramping
- pChn->dwFlags &= ~CHN_VOLUMERAMP;
- if ((pChn->nRealVolume) || (pChn->nLeftVol) || (pChn->nRightVol))
- pChn->dwFlags |= CHN_VOLUMERAMP;
- // Decrease VU-Meter
- if (pChn->nVUMeter > VUMETER_DECAY) pChn->nVUMeter -= VUMETER_DECAY; else pChn->nVUMeter = 0;
- if (pChn->nLeftVU > VUMETER_DECAY) pChn->nLeftVU -= VUMETER_DECAY; else pChn->nLeftVU = 0;
- if (pChn->nRightVU > VUMETER_DECAY) pChn->nRightVU -= VUMETER_DECAY; else pChn->nRightVU = 0;
- // Check for too big nInc
- if (((pChn->nInc >> 16) + 1) >= (LONG)(pChn->nLoopEnd - pChn->nLoopStart)) pChn->dwFlags &= ~CHN_LOOP;
- pChn->nNewRightVol = pChn->nNewLeftVol = 0;
- pChn->pCurrentSample = ((pChn->pSample) && (pChn->nLength) && (pChn->nInc)) ? pChn->pSample : NULL;
- if (pChn->pCurrentSample)
- {
- // Update VU-Meter (nRealVolume is 14-bit)
- UINT vutmp = pChn->nRealVolume >> (14 - 8);
- if (vutmp > 0xFF) vutmp = 0xFF;
- if (pChn->nVUMeter >= 0x100) pChn->nVUMeter = vutmp;
- vutmp >>= 1;
- if (pChn->nVUMeter < vutmp) pChn->nVUMeter = vutmp;
- UINT vul = (pChn->nRealVolume * pChn->nRealPan) >> 14;
- if (vul > 127) vul = 127;
- if (pChn->nLeftVU > 127) pChn->nLeftVU = (BYTE)vul;
- vul >>= 1;
- if (pChn->nLeftVU < vul) pChn->nLeftVU = (BYTE)vul;
- UINT vur = (pChn->nRealVolume * (256-pChn->nRealPan)) >> 14;
- if (vur > 127) vur = 127;
- if (pChn->nRightVU > 127) pChn->nRightVU = (BYTE)vur;
- vur >>= 1;
- if (pChn->nRightVU < vur) pChn->nRightVU = (BYTE)vur;
-#ifdef MODPLUG_TRACKER
- UINT kChnMasterVol = (pChn->dwFlags & CHN_EXTRALOUD) ? 0x100 : nMasterVol;
-#else
-#define kChnMasterVol nMasterVol
-#endif // MODPLUG_TRACKER
- // Adjusting volumes
- if (gnChannels >= 2)
- {
- int pan = ((int)pChn->nRealPan) - 128;
- pan *= (int)m_nStereoSeparation;
- pan /= 128;
- pan += 128;
-
- if (pan < 0) pan = 0;
- if (pan > 256) pan = 256;
- if (gdwSoundSetup & SNDMIX_REVERSESTEREO) pan = 256 - pan;
- if (m_dwSongFlags & SONG_NOSTEREO) pan = 128;
- LONG realvol = (pChn->nRealVolume * kChnMasterVol) >> (8-1);
- if (gdwSoundSetup & SNDMIX_SOFTPANNING)
- {
- if (pan < 128)
- {
- pChn->nNewLeftVol = (realvol * pan) >> 8;
- pChn->nNewRightVol = (realvol * 128) >> 8;
- } else
- {
- pChn->nNewLeftVol = (realvol * 128) >> 8;
- pChn->nNewRightVol = (realvol * (256 - pan)) >> 8;
- }
- } else
- {
- pChn->nNewLeftVol = (realvol * pan) >> 8;
- pChn->nNewRightVol = (realvol * (256 - pan)) >> 8;
- }
- } else
- {
- pChn->nNewRightVol = (pChn->nRealVolume * kChnMasterVol) >> 8;
- pChn->nNewLeftVol = pChn->nNewRightVol;
- }
- // Clipping volumes
- if (pChn->nNewRightVol > 0xFFFF) pChn->nNewRightVol = 0xFFFF;
- if (pChn->nNewLeftVol > 0xFFFF) pChn->nNewLeftVol = 0xFFFF;
- // Check IDO
- if (gdwSoundSetup & SNDMIX_NORESAMPLING)
- {
- pChn->dwFlags &= ~(CHN_HQSRC);
- pChn->dwFlags |= CHN_NOIDO;
- } else
- {
- pChn->dwFlags &= ~(CHN_NOIDO|CHN_HQSRC);
- if( pChn->nInc == 0x10000 )
- { pChn->dwFlags |= CHN_NOIDO;
- }
- else
- { if( ((gdwSoundSetup & SNDMIX_HQRESAMPLER) == 0) && ((gdwSoundSetup & SNDMIX_ULTRAHQSRCMODE) == 0) )
- { if (pChn->nInc >= 0xFF00) pChn->dwFlags |= CHN_NOIDO;
- }
- }
- }
- pChn->nNewRightVol >>= MIXING_ATTENUATION;
- pChn->nNewLeftVol >>= MIXING_ATTENUATION;
- pChn->nRightRamp = pChn->nLeftRamp = 0;
- // Dolby Pro-Logic Surround
- if ((pChn->dwFlags & CHN_SURROUND) && (gnChannels <= 2) && (gdwSoundSetup & SNDMIX_NOSURROUND) == 0)
- pChn->nNewLeftVol = -pChn->nNewLeftVol;
- // Checking Ping-Pong Loops
- if (pChn->dwFlags & CHN_PINGPONGFLAG) pChn->nInc = -pChn->nInc;
- // Setting up volume ramp
- if (!(gdwSoundSetup & SNDMIX_NORAMPING)
- && (pChn->dwFlags & CHN_VOLUMERAMP)
- && ((pChn->nRightVol != pChn->nNewRightVol)
- || (pChn->nLeftVol != pChn->nNewLeftVol)))
- {
- LONG nRampLength = gnVolumeRampSamples;
- LONG nRightDelta = ((pChn->nNewRightVol - pChn->nRightVol) << VOLUMERAMPPRECISION);
- LONG nLeftDelta = ((pChn->nNewLeftVol - pChn->nLeftVol) << VOLUMERAMPPRECISION);
-#if 0
- if ((gdwSoundSetup & SNDMIX_DIRECTTODISK)
- || ((gdwSysInfo & (SYSMIX_ENABLEMMX|SYSMIX_FASTCPU))
- && (gdwSoundSetup & SNDMIX_HQRESAMPLER) && (gnCPUUsage <= 20)))
-#else
- if (gdwSoundSetup & SNDMIX_HQRESAMPLER)
-#endif
- {
- if ((pChn->nRightVol|pChn->nLeftVol) && (pChn->nNewRightVol|pChn->nNewLeftVol) && (!(pChn->dwFlags & CHN_FASTVOLRAMP)))
- {
- nRampLength = m_nBufferCount;
- if (nRampLength > (1 << (VOLUMERAMPPRECISION-1))) nRampLength = (1 << (VOLUMERAMPPRECISION-1));
- if (nRampLength < (LONG)gnVolumeRampSamples) nRampLength = gnVolumeRampSamples;
- }
- }
- pChn->nRightRamp = nRightDelta / nRampLength;
- pChn->nLeftRamp = nLeftDelta / nRampLength;
- pChn->nRightVol = pChn->nNewRightVol - ((pChn->nRightRamp * nRampLength) >> VOLUMERAMPPRECISION);
- pChn->nLeftVol = pChn->nNewLeftVol - ((pChn->nLeftRamp * nRampLength) >> VOLUMERAMPPRECISION);
- if (pChn->nRightRamp|pChn->nLeftRamp)
- {
- pChn->nRampLength = nRampLength;
- } else
- {
- pChn->dwFlags &= ~CHN_VOLUMERAMP;
- pChn->nRightVol = pChn->nNewRightVol;
- pChn->nLeftVol = pChn->nNewLeftVol;
- }
- } else
- {
- pChn->dwFlags &= ~CHN_VOLUMERAMP;
- pChn->nRightVol = pChn->nNewRightVol;
- pChn->nLeftVol = pChn->nNewLeftVol;
- }
- pChn->nRampRightVol = pChn->nRightVol << VOLUMERAMPPRECISION;
- pChn->nRampLeftVol = pChn->nLeftVol << VOLUMERAMPPRECISION;
- // Adding the channel in the channel list
- if (!(pChn->dwFlags & CHN_MUTE)) {
- ChnMix[m_nMixChannels++] = nChn;
- if (m_nMixChannels >= MAX_CHANNELS) break;
- }
- } else
- {
- // Note change but no sample
- if (pChn->nLeftVU > 128) pChn->nLeftVU = 0;
- if (pChn->nRightVU > 128) pChn->nRightVU = 0;
- if (pChn->nVUMeter > 0xFF) pChn->nVUMeter = 0;
- pChn->nLeftVol = pChn->nRightVol = 0;
- pChn->nLength = 0;
- }
- }
- // Checking Max Mix Channels reached: ordering by volume
- if ((m_nMixChannels >= m_nMaxMixChannels) && (!(gdwSoundSetup & SNDMIX_DIRECTTODISK)))
- {
- for (UINT i=0; i<m_nMixChannels; i++)
- {
- UINT j=i;
- while ((j+1<m_nMixChannels) && (Chn[ChnMix[j]].nRealVolume < Chn[ChnMix[j+1]].nRealVolume))
- {
- UINT n = ChnMix[j];
- ChnMix[j] = ChnMix[j+1];
- ChnMix[j+1] = n;
- j++;
- }
- }
- }
- if (m_dwSongFlags & SONG_GLOBALFADE)
- {
- if (!m_nGlobalFadeSamples)
- {
- m_dwSongFlags |= SONG_ENDREACHED;
- return FALSE;
- }
- if (m_nGlobalFadeSamples > m_nBufferCount)
- m_nGlobalFadeSamples -= m_nBufferCount;
- else
- m_nGlobalFadeSamples = 0;
- }
- return TRUE;
-}
-
-
diff --git a/src/modplug/stdafx.h b/src/modplug/stdafx.h
deleted file mode 100644
index 730c82c..0000000
--- a/src/modplug/stdafx.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Rani Assaf <rani@magic.metawire.com>,
- * Olivier Lapicque <olivierl@jps.net>,
- * Adam Goode <adam@evdebs.org> (endian and char fixes for PPC)
-*/
-
-#ifndef _STDAFX_H_
-#define _STDAFX_H_
-
-#ifdef MSC_VER
-
-#pragma warning (disable:4201)
-#pragma warning (disable:4514)
-#include <windows.h>
-#include <windowsx.h>
-#include <mmsystem.h>
-#include <stdio.h>
-
-inline void ProcessPlugins(int n) {}
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-typedef signed char CHAR;
-typedef unsigned char UCHAR;
-typedef unsigned char* PUCHAR;
-typedef unsigned short USHORT;
-typedef unsigned int ULONG;
-typedef unsigned int UINT;
-typedef unsigned int DWORD;
-typedef int LONG;
-typedef unsigned short WORD;
-typedef unsigned char BYTE;
-typedef unsigned char * LPBYTE;
-#ifdef __cplusplus
-typedef bool BOOL;
-#endif
-typedef char * LPSTR;
-typedef void * LPVOID;
-typedef int * LPLONG;
-typedef unsigned int * LPDWORD;
-typedef unsigned short * LPWORD;
-typedef const char * LPCSTR;
-typedef long long LONGLONG;
-typedef void * PVOID;
-typedef void VOID;
-
-
-#define NO_AGC
-#define LPCTSTR LPCSTR
-#define lstrcpyn strncpy
-#define lstrcpy strcpy
-#define lstrcmp strcmp
-#define WAVE_FORMAT_PCM 1
-//#define ENABLE_EQ
-
-#define GHND 0
-
-#ifdef __cplusplus
-inline signed char * GlobalAllocPtr(unsigned int, size_t size)
-{
- signed char * p = (signed char *) malloc(size);
-
- if (p != NULL) memset(p, 0, size);
- return p;
-}
-
-inline void ProcessPlugins(int) {}
-
-#define GlobalFreePtr(p) free((void *)(p))
-
-#define strnicmp(a,b,c) strncasecmp(a,b,c)
-#define wsprintf sprintf
-#endif
-
-#ifndef FALSE
-#define FALSE false
-#endif
-
-#ifndef TRUE
-#define TRUE true
-#endif
-
-#endif // MSC_VER
-
-#endif
-
-
-
diff --git a/src/modplug/tables.cxx b/src/modplug/tables.cxx
deleted file mode 100755
index 149807e..0000000
--- a/src/modplug/tables.cxx
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * This source code is public domain.
- *
- * Authors: Olivier Lapicque <olivierl@jps.net>
- */
-
-#include "stdafx.h"
-#include "sndfile.h"
-
-BYTE ImpulseTrackerPortaVolCmd[16] =
-{
- 0x00, 0x01, 0x04, 0x08, 0x10, 0x20, 0x40, 0x60,
- 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
-};
-
-// Period table for Protracker octaves 0-5:
-WORD ProTrackerPeriodTable[6*12] =
-{
- 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,907,
- 856,808,762,720,678,640,604,570,538,508,480,453,
- 428,404,381,360,339,320,302,285,269,254,240,226,
- 214,202,190,180,170,160,151,143,135,127,120,113,
- 107,101,95,90,85,80,75,71,67,63,60,56,
- 53,50,47,45,42,40,37,35,33,31,30,28
-};
-
-
-WORD ProTrackerTunedPeriods[16*12] =
-{
- 1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,907,
- 1700,1604,1514,1430,1348,1274,1202,1134,1070,1010,954,900,
- 1688,1592,1504,1418,1340,1264,1194,1126,1064,1004,948,894,
- 1676,1582,1492,1408,1330,1256,1184,1118,1056,996,940,888,
- 1664,1570,1482,1398,1320,1246,1176,1110,1048,990,934,882,
- 1652,1558,1472,1388,1310,1238,1168,1102,1040,982,926,874,
- 1640,1548,1460,1378,1302,1228,1160,1094,1032,974,920,868,
- 1628,1536,1450,1368,1292,1220,1150,1086,1026,968,914,862,
- 1814,1712,1616,1524,1440,1356,1280,1208,1140,1076,1016,960,
- 1800,1700,1604,1514,1430,1350,1272,1202,1134,1070,1010,954,
- 1788,1688,1592,1504,1418,1340,1264,1194,1126,1064,1004,948,
- 1774,1676,1582,1492,1408,1330,1256,1184,1118,1056,996,940,
- 1762,1664,1570,1482,1398,1320,1246,1176,1110,1048,988,934,
- 1750,1652,1558,1472,1388,1310,1238,1168,1102,1040,982,926,
- 1736,1640,1548,1460,1378,1302,1228,1160,1094,1032,974,920,
- 1724,1628,1536,1450,1368,1292,1220,1150,1086,1026,968,914
-};
-
-
-// S3M C-4 periods
-WORD FreqS3MTable[16] =
-{
- 1712,1616,1524,1440,1356,1280,
- 1208,1140,1076,1016,960,907,
- 0,0,0,0
-};
-
-
-// S3M FineTune frequencies
-WORD S3MFineTuneTable[16] =
-{
- 7895,7941,7985,8046,8107,8169,8232,8280,
- 8363,8413,8463,8529,8581,8651,8723,8757, // 8363*2^((i-8)/(12*8))
-};
-
-
-// Sinus table
-short int ModSinusTable[64] =
-{
- 0,12,25,37,49,60,71,81,90,98,106,112,117,122,125,126,
- 127,126,125,122,117,112,106,98,90,81,71,60,49,37,25,12,
- 0,-12,-25,-37,-49,-60,-71,-81,-90,-98,-106,-112,-117,-122,-125,-126,
- -127,-126,-125,-122,-117,-112,-106,-98,-90,-81,-71,-60,-49,-37,-25,-12
-};
-
-// Triangle wave table (ramp down)
-short int ModRampDownTable[64] =
-{
- 0,-4,-8,-12,-16,-20,-24,-28,-32,-36,-40,-44,-48,-52,-56,-60,
- -64,-68,-72,-76,-80,-84,-88,-92,-96,-100,-104,-108,-112,-116,-120,-124,
- 127,123,119,115,111,107,103,99,95,91,87,83,79,75,71,67,
- 63,59,55,51,47,43,39,35,31,27,23,19,15,11,7,3
-};
-
-// Square wave table
-short int ModSquareTable[64] =
-{
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
- -127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,
- -127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127,-127
-};
-
-// Random wave table
-short int ModRandomTable[64] =
-{
- 98,-127,-43,88,102,41,-65,-94,125,20,-71,-86,-70,-32,-16,-96,
- 17,72,107,-5,116,-69,-62,-40,10,-61,65,109,-18,-38,-13,-76,
- -23,88,21,-94,8,106,21,-112,6,109,20,-88,-30,9,-127,118,
- 42,-34,89,-4,-51,-72,21,-29,112,123,84,-101,-92,98,-54,-95
-};
-
-
-// volume fade tables for Retrig Note:
-signed char retrigTable1[16] =
-{ 0, 0, 0, 0, 0, 0, 10, 8, 0, 0, 0, 0, 0, 0, 24, 32 };
-
-signed char retrigTable2[16] =
-{ 0, -1, -2, -4, -8, -16, 0, 0, 0, 1, 2, 4, 8, 16, 0, 0 };
-
-
-
-
-WORD XMPeriodTable[104] =
-{
- 907,900,894,887,881,875,868,862,856,850,844,838,832,826,820,814,
- 808,802,796,791,785,779,774,768,762,757,752,746,741,736,730,725,
- 720,715,709,704,699,694,689,684,678,675,670,665,660,655,651,646,
- 640,636,632,628,623,619,614,610,604,601,597,592,588,584,580,575,
- 570,567,563,559,555,551,547,543,538,535,532,528,524,520,516,513,
- 508,505,502,498,494,491,487,484,480,477,474,470,467,463,460,457,
- 453,450,447,443,440,437,434,431
-};
-
-
-UINT XMLinearTable[768] =
-{
- 535232,534749,534266,533784,533303,532822,532341,531861,
- 531381,530902,530423,529944,529466,528988,528511,528034,
- 527558,527082,526607,526131,525657,525183,524709,524236,
- 523763,523290,522818,522346,521875,521404,520934,520464,
- 519994,519525,519057,518588,518121,517653,517186,516720,
- 516253,515788,515322,514858,514393,513929,513465,513002,
- 512539,512077,511615,511154,510692,510232,509771,509312,
- 508852,508393,507934,507476,507018,506561,506104,505647,
- 505191,504735,504280,503825,503371,502917,502463,502010,
- 501557,501104,500652,500201,499749,499298,498848,498398,
- 497948,497499,497050,496602,496154,495706,495259,494812,
- 494366,493920,493474,493029,492585,492140,491696,491253,
- 490809,490367,489924,489482,489041,488600,488159,487718,
- 487278,486839,486400,485961,485522,485084,484647,484210,
- 483773,483336,482900,482465,482029,481595,481160,480726,
- 480292,479859,479426,478994,478562,478130,477699,477268,
- 476837,476407,475977,475548,475119,474690,474262,473834,
- 473407,472979,472553,472126,471701,471275,470850,470425,
- 470001,469577,469153,468730,468307,467884,467462,467041,
- 466619,466198,465778,465358,464938,464518,464099,463681,
- 463262,462844,462427,462010,461593,461177,460760,460345,
- 459930,459515,459100,458686,458272,457859,457446,457033,
- 456621,456209,455797,455386,454975,454565,454155,453745,
- 453336,452927,452518,452110,451702,451294,450887,450481,
- 450074,449668,449262,448857,448452,448048,447644,447240,
- 446836,446433,446030,445628,445226,444824,444423,444022,
- 443622,443221,442821,442422,442023,441624,441226,440828,
- 440430,440033,439636,439239,438843,438447,438051,437656,
- 437261,436867,436473,436079,435686,435293,434900,434508,
- 434116,433724,433333,432942,432551,432161,431771,431382,
- 430992,430604,430215,429827,429439,429052,428665,428278,
- 427892,427506,427120,426735,426350,425965,425581,425197,
- 424813,424430,424047,423665,423283,422901,422519,422138,
- 421757,421377,420997,420617,420237,419858,419479,419101,
- 418723,418345,417968,417591,417214,416838,416462,416086,
- 415711,415336,414961,414586,414212,413839,413465,413092,
- 412720,412347,411975,411604,411232,410862,410491,410121,
- 409751,409381,409012,408643,408274,407906,407538,407170,
- 406803,406436,406069,405703,405337,404971,404606,404241,
- 403876,403512,403148,402784,402421,402058,401695,401333,
- 400970,400609,400247,399886,399525,399165,398805,398445,
- 398086,397727,397368,397009,396651,396293,395936,395579,
- 395222,394865,394509,394153,393798,393442,393087,392733,
- 392378,392024,391671,391317,390964,390612,390259,389907,
- 389556,389204,388853,388502,388152,387802,387452,387102,
- 386753,386404,386056,385707,385359,385012,384664,384317,
- 383971,383624,383278,382932,382587,382242,381897,381552,
- 381208,380864,380521,380177,379834,379492,379149,378807,
-
- 378466,378124,377783,377442,377102,376762,376422,376082,
- 375743,375404,375065,374727,374389,374051,373714,373377,
- 373040,372703,372367,372031,371695,371360,371025,370690,
- 370356,370022,369688,369355,369021,368688,368356,368023,
- 367691,367360,367028,366697,366366,366036,365706,365376,
- 365046,364717,364388,364059,363731,363403,363075,362747,
- 362420,362093,361766,361440,361114,360788,360463,360137,
- 359813,359488,359164,358840,358516,358193,357869,357547,
- 357224,356902,356580,356258,355937,355616,355295,354974,
- 354654,354334,354014,353695,353376,353057,352739,352420,
- 352103,351785,351468,351150,350834,350517,350201,349885,
- 349569,349254,348939,348624,348310,347995,347682,347368,
- 347055,346741,346429,346116,345804,345492,345180,344869,
- 344558,344247,343936,343626,343316,343006,342697,342388,
- 342079,341770,341462,341154,340846,340539,340231,339924,
- 339618,339311,339005,338700,338394,338089,337784,337479,
- 337175,336870,336566,336263,335959,335656,335354,335051,
- 334749,334447,334145,333844,333542,333242,332941,332641,
- 332341,332041,331741,331442,331143,330844,330546,330247,
- 329950,329652,329355,329057,328761,328464,328168,327872,
- 327576,327280,326985,326690,326395,326101,325807,325513,
- 325219,324926,324633,324340,324047,323755,323463,323171,
- 322879,322588,322297,322006,321716,321426,321136,320846,
- 320557,320267,319978,319690,319401,319113,318825,318538,
- 318250,317963,317676,317390,317103,316817,316532,316246,
- 315961,315676,315391,315106,314822,314538,314254,313971,
- 313688,313405,313122,312839,312557,312275,311994,311712,
- 311431,311150,310869,310589,310309,310029,309749,309470,
- 309190,308911,308633,308354,308076,307798,307521,307243,
- 306966,306689,306412,306136,305860,305584,305308,305033,
- 304758,304483,304208,303934,303659,303385,303112,302838,
- 302565,302292,302019,301747,301475,301203,300931,300660,
- 300388,300117,299847,299576,299306,299036,298766,298497,
- 298227,297958,297689,297421,297153,296884,296617,296349,
- 296082,295815,295548,295281,295015,294749,294483,294217,
- 293952,293686,293421,293157,292892,292628,292364,292100,
- 291837,291574,291311,291048,290785,290523,290261,289999,
- 289737,289476,289215,288954,288693,288433,288173,287913,
- 287653,287393,287134,286875,286616,286358,286099,285841,
- 285583,285326,285068,284811,284554,284298,284041,283785,
- 283529,283273,283017,282762,282507,282252,281998,281743,
- 281489,281235,280981,280728,280475,280222,279969,279716,
- 279464,279212,278960,278708,278457,278206,277955,277704,
- 277453,277203,276953,276703,276453,276204,275955,275706,
- 275457,275209,274960,274712,274465,274217,273970,273722,
- 273476,273229,272982,272736,272490,272244,271999,271753,
- 271508,271263,271018,270774,270530,270286,270042,269798,
- 269555,269312,269069,268826,268583,268341,268099,267857
-};
-
-
-signed char ft2VibratoTable[256] =
-{
- 0,-2,-3,-5,-6,-8,-9,-11,-12,-14,-16,-17,-19,-20,-22,-23,
- -24,-26,-27,-29,-30,-32,-33,-34,-36,-37,-38,-39,-41,-42,
- -43,-44,-45,-46,-47,-48,-49,-50,-51,-52,-53,-54,-55,-56,
- -56,-57,-58,-59,-59,-60,-60,-61,-61,-62,-62,-62,-63,-63,
- -63,-64,-64,-64,-64,-64,-64,-64,-64,-64,-64,-64,-63,-63,
- -63,-62,-62,-62,-61,-61,-60,-60,-59,-59,-58,-57,-56,-56,
- -55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,
- -41,-39,-38,-37,-36,-34,-33,-32,-30,-29,-27,-26,-24,-23,
- -22,-20,-19,-17,-16,-14,-12,-11,-9,-8,-6,-5,-3,-2,0,
- 2,3,5,6,8,9,11,12,14,16,17,19,20,22,23,24,26,27,29,30,
- 32,33,34,36,37,38,39,41,42,43,44,45,46,47,48,49,50,51,
- 52,53,54,55,56,56,57,58,59,59,60,60,61,61,62,62,62,63,
- 63,63,64,64,64,64,64,64,64,64,64,64,64,63,63,63,62,62,
- 62,61,61,60,60,59,59,58,57,56,56,55,54,53,52,51,50,49,
- 48,47,46,45,44,43,42,41,39,38,37,36,34,33,32,30,29,27,
- 26,24,23,22,20,19,17,16,14,12,11,9,8,6,5,3,2
-};
-
-
-
-DWORD FineLinearSlideUpTable[16] =
-{
- 65536, 65595, 65654, 65714, 65773, 65832, 65892, 65951,
- 66011, 66071, 66130, 66190, 66250, 66309, 66369, 66429
-};
-
-
-DWORD FineLinearSlideDownTable[16] =
-{
- 65535, 65477, 65418, 65359, 65300, 65241, 65182, 65123,
- 65065, 65006, 64947, 64888, 64830, 64772, 64713, 64645
-};
-
-
-DWORD LinearSlideUpTable[256] =
-{
- 65536, 65773, 66010, 66249, 66489, 66729, 66971, 67213,
- 67456, 67700, 67945, 68190, 68437, 68685, 68933, 69182,
- 69432, 69684, 69936, 70189, 70442, 70697, 70953, 71209,
- 71467, 71725, 71985, 72245, 72507, 72769, 73032, 73296,
- 73561, 73827, 74094, 74362, 74631, 74901, 75172, 75444,
- 75717, 75991, 76265, 76541, 76818, 77096, 77375, 77655,
- 77935, 78217, 78500, 78784, 79069, 79355, 79642, 79930,
- 80219, 80509, 80800, 81093, 81386, 81680, 81976, 82272,
- 82570, 82868, 83168, 83469, 83771, 84074, 84378, 84683,
- 84989, 85297, 85605, 85915, 86225, 86537, 86850, 87164,
- 87480, 87796, 88113, 88432, 88752, 89073, 89395, 89718,
- 90043, 90369, 90695, 91023, 91353, 91683, 92015, 92347,
- 92681, 93017, 93353, 93691, 94029, 94370, 94711, 95053,
- 95397, 95742, 96088, 96436, 96785, 97135, 97486, 97839,
- 98193, 98548, 98904, 99262, 99621, 99981, 100343, 100706,
- 101070, 101435, 101802, 102170, 102540, 102911, 103283, 103657,
- 104031, 104408, 104785, 105164, 105545, 105926, 106309, 106694,
- 107080, 107467, 107856, 108246, 108637, 109030, 109425, 109820,
- 110217, 110616, 111016, 111418, 111821, 112225, 112631, 113038,
- 113447, 113857, 114269, 114682, 115097, 115514, 115931, 116351,
- 116771, 117194, 117618, 118043, 118470, 118898, 119328, 119760,
- 120193, 120628, 121064, 121502, 121941, 122382, 122825, 123269,
- 123715, 124162, 124611, 125062, 125514, 125968, 126424, 126881,
- 127340, 127801, 128263, 128727, 129192, 129660, 130129, 130599,
- 131072, 131546, 132021, 132499, 132978, 133459, 133942, 134426,
- 134912, 135400, 135890, 136381, 136875, 137370, 137866, 138365,
- 138865, 139368, 139872, 140378, 140885, 141395, 141906, 142419,
- 142935, 143451, 143970, 144491, 145014, 145538, 146064, 146593,
- 147123, 147655, 148189, 148725, 149263, 149803, 150344, 150888,
- 151434, 151982, 152531, 153083, 153637, 154192, 154750, 155310,
- 155871, 156435, 157001, 157569, 158138, 158710, 159284, 159860,
- 160439, 161019, 161601, 162186, 162772, 163361, 163952, 164545,
-};
-
-
-DWORD LinearSlideDownTable[256] =
-{
- 65536, 65299, 65064, 64830, 64596, 64363, 64131, 63900,
- 63670, 63440, 63212, 62984, 62757, 62531, 62305, 62081,
- 61857, 61634, 61412, 61191, 60970, 60751, 60532, 60314,
- 60096, 59880, 59664, 59449, 59235, 59021, 58809, 58597,
- 58385, 58175, 57965, 57757, 57548, 57341, 57134, 56928,
- 56723, 56519, 56315, 56112, 55910, 55709, 55508, 55308,
- 55108, 54910, 54712, 54515, 54318, 54123, 53928, 53733,
-
- 53540, 53347, 53154, 52963, 52772, 52582, 52392, 52204,
- 52015, 51828, 51641, 51455, 51270, 51085, 50901, 50717,
- 50535, 50353, 50171, 49990, 49810, 49631, 49452, 49274,
- 49096, 48919, 48743, 48567, 48392, 48218, 48044, 47871,
- 47698, 47526, 47355, 47185, 47014, 46845, 46676, 46508,
- 46340, 46173, 46007, 45841, 45676, 45511, 45347, 45184,
- 45021, 44859, 44697, 44536, 44376, 44216, 44056, 43898,
- 43740, 43582, 43425, 43268, 43112, 42957, 42802, 42648,
- 42494, 42341, 42189, 42037, 41885, 41734, 41584, 41434,
- 41285, 41136, 40988, 40840, 40693, 40546, 40400, 40254,
- 40109, 39965, 39821, 39677, 39534, 39392, 39250, 39108,
- 38967, 38827, 38687, 38548, 38409, 38270, 38132, 37995,
- 37858, 37722, 37586, 37450, 37315, 37181, 37047, 36913,
- 36780, 36648, 36516, 36384, 36253, 36122, 35992, 35862,
- 35733, 35604, 35476, 35348, 35221, 35094, 34968, 34842,
- 34716, 34591, 34466, 34342, 34218, 34095, 33972, 33850,
- 33728, 33606, 33485, 33364, 33244, 33124, 33005, 32886,
- 32768, 32649, 32532, 32415, 32298, 32181, 32065, 31950,
- 31835, 31720, 31606, 31492, 31378, 31265, 31152, 31040,
- 30928, 30817, 30706, 30595, 30485, 30375, 30266, 30157,
- 30048, 29940, 29832, 29724, 29617, 29510, 29404, 29298,
- 29192, 29087, 28982, 28878, 28774, 28670, 28567, 28464,
- 28361, 28259, 28157, 28056, 27955, 27854, 27754, 27654,
- 27554, 27455, 27356, 27257, 27159, 27061, 26964, 26866,
- 26770, 26673, 26577, 26481, 26386, 26291, 26196, 26102,
-};
-
-
-int SpectrumSinusTable[256*2] =
-{
- 0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11,
- 12, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 22, 23,
- 24, 25, 25, 26, 27, 28, 28, 29, 30, 30, 31, 32, 32, 33, 34, 34,
- 35, 36, 36, 37, 38, 38, 39, 39, 40, 41, 41, 42, 42, 43, 44, 44,
- 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52,
- 53, 53, 53, 54, 54, 55, 55, 55, 56, 56, 57, 57, 57, 58, 58, 58,
- 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 61, 62, 62, 62,
- 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
- 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 62, 62,
- 62, 62, 62, 62, 61, 61, 61, 61, 61, 60, 60, 60, 60, 59, 59, 59,
- 59, 58, 58, 58, 57, 57, 57, 56, 56, 55, 55, 55, 54, 54, 53, 53,
- 53, 52, 52, 51, 51, 50, 50, 49, 49, 48, 48, 47, 47, 46, 46, 45,
- 45, 44, 44, 43, 42, 42, 41, 41, 40, 39, 39, 38, 38, 37, 36, 36,
- 35, 34, 34, 33, 32, 32, 31, 30, 30, 29, 28, 28, 27, 26, 25, 25,
- 24, 23, 22, 22, 21, 20, 20, 19, 18, 17, 17, 16, 15, 14, 14, 13,
- 12, 11, 10, 10, 9, 8, 7, 7, 6, 5, 4, 3, 3, 2, 1, 0,
- 0, -1, -1, -2, -3, -3, -4, -5, -6, -7, -7, -8, -9, -10, -10, -11,
- -12, -13, -14, -14, -15, -16, -17, -17, -18, -19, -20, -20, -21, -22, -22, -23,
- -24, -25, -25, -26, -27, -28, -28, -29, -30, -30, -31, -32, -32, -33, -34, -34,
- -35, -36, -36, -37, -38, -38, -39, -39, -40, -41, -41, -42, -42, -43, -44, -44,
- -45, -45, -46, -46, -47, -47, -48, -48, -49, -49, -50, -50, -51, -51, -52, -52,
- -53, -53, -53, -54, -54, -55, -55, -55, -56, -56, -57, -57, -57, -58, -58, -58,
- -59, -59, -59, -59, -60, -60, -60, -60, -61, -61, -61, -61, -61, -62, -62, -62,
- -62, -62, -62, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
- -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -62, -62,
- -62, -62, -62, -62, -61, -61, -61, -61, -61, -60, -60, -60, -60, -59, -59, -59,
- -59, -58, -58, -58, -57, -57, -57, -56, -56, -55, -55, -55, -54, -54, -53, -53,
- -53, -52, -52, -51, -51, -50, -50, -49, -49, -48, -48, -47, -47, -46, -46, -45,
- -45, -44, -44, -43, -42, -42, -41, -41, -40, -39, -39, -38, -38, -37, -36, -36,
- -35, -34, -34, -33, -32, -32, -31, -30, -30, -29, -28, -28, -27, -26, -25, -25,
- -24, -23, -22, -22, -21, -20, -20, -19, -18, -17, -17, -16, -15, -14, -14, -13,
- -12, -11, -10, -10, -9, -8, -7, -7, -6, -5, -4, -3, -3, -2, -1, 0,
-};
-
diff --git a/src/mpg123/Makefile b/src/mpg123/Makefile
index 9496d55..b4f9f3f 100644
--- a/src/mpg123/Makefile
+++ b/src/mpg123/Makefile
@@ -1,27 +1,6 @@
PLUGIN = madplug${PLUGIN_SUFFIX}
-SRCS = mpg123.c \
- id3skip.c \
- libmpg123/compat.c \
- libmpg123/dct64.c \
- libmpg123/equalizer.c \
- libmpg123/feature.c \
- libmpg123/format.c \
- libmpg123/frame.c \
- libmpg123/icy2utf8.c \
- libmpg123/icy.c \
- libmpg123/id3.c \
- libmpg123/index.c \
- libmpg123/layer1.c \
- libmpg123/layer2.c \
- libmpg123/layer3.c \
- libmpg123/libmpg123.c \
- libmpg123/optimize.c \
- libmpg123/parse.c \
- libmpg123/readers.c \
- libmpg123/stringbuf.c \
- libmpg123/synth.c \
- libmpg123/tabinit.c
+SRCS = mpg123.c
include ../../buildsys.mk
include ../../extra.mk
@@ -29,6 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${MOWGLI_CFLAGS} ${ARCH_DEFINES} ${SIMD_CFLAGS} -I../..
-LDFLAGS += ${AUDLDFLAGS}
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS} -laudtag -lm
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GLIB_CFLAGS} ${MPG123_CFLAGS} -I../..
+LIBS += ${GLIB_LIBS} ${MPG123_LIBS} -laudtag -lm
diff --git a/src/mpg123/libmpg123/AUTHORS b/src/mpg123/libmpg123/AUTHORS
deleted file mode 100644
index ec904a0..0000000
--- a/src/mpg123/libmpg123/AUTHORS
+++ /dev/null
@@ -1,145 +0,0 @@
-This is an attempt to give credit to the people who contributed in some way to the mpg123 project.
-There are names and email addresses listed. Please use these addresses only to contact contributors with some question about their mpg123 contribution.
-You are explicitly not allowed to send them unwanted business offers or to question the quality of their sex life.
---------------------
-
-Current maintainers with various sorts of contributions:
- Thomas Orgis <thomas@orgis.org>
- Nicholas J Humfrey <njh@ecs.soton.ac.uk>
-
-Generic address pointing to the current maintainer (hopefully still works in future in case maintainership will change again): <maintainer@mpg123.org>
-
-The creator: Michael Hipp (email: hippm@informatik.uni-tuebingen.de - please bother maintainers first)
-
-Contributions/ideas Thomas Orgis era (includes backports from mhipp trunk):
-
-Jonathan Yong (jon_y) <10walls@gmail.com>: win32 hacking
-Malcolm Boczek <MBoczek@terraindustries.com>: Common language runtime wrapper
-Elbert Pol (TeLLie) <elbert.pol@gmail.com>: OS/2 port fixup
-Jeroen Valkonet <jvalkon@xs4all.nl>: motivate pitch control, suggestive patch for pitch command in generic control interface
-Andy Hefner <ahefner@gmail.com>: patch for that second UTF16 issue
-Taihei Monma <tmkk@mac.com>: A whole lot of new/improved assembler code, including Altivec!
-Christian Weisgerber <naddy@openbsd.org>: sndio output
-Patrick Dehne (P4tr3ck) <patrick@steidle.net>: more MSVC++ porting, patch to handle missing bit reservoirs
-Thorsten Glaser <tg@mirbsd.de>: icy2utf8, suggest utf8 locale stuff
-Dan Smith <dan@algenta.com>: ABI fixes for ensuring stack alignment (esp. for MinGW-built DLL with MSVC)
-Michael Ryzhykh <mclroy@gmail.com>: mpg123.spec.in
-Stefan Lenselink <Stefan@lenselink.org>: initial aRts output
-Sergej Kvachonok <ravenexp@gmail.com>: win32 audio rewrite
-Winston: SunOS-4.1.4/gcc-2.7.0 testing and suggestions for fixes (legacy Makefile, integer type headers)
-Mika Tiainen: pointing out the fix for the UTF to ASCII filtering of tags to actually work
-Nick Kurshev <nickols_k@mail.ru>: extended 3dnow (from mplayer)
-Zuxy Meng <zuxy.meng@gmail.com>: SSE (from mplayer)
-Honza <cundrak@quick.cz>: idea and prototype patch for ICY meta data support
-Petr Baudis <pasky@ucw.cz>: patches: term sigcont, id3 display unicode fallback and condensed output
-Petr Salinger <Petr.Salinger@seznam.cz>: i486 enhancement
-mpdavig@users.sourceforge.net: linux-ppc-nas Makefile.legacy entry
-Adrian Bacon <adrian.bacon@xs4all.nl>: patched decode_i586_dither (noise shaped float/int rounding)
-Cool Feet Audio project <nutcase@dtfm.org>: realtime equalizer control
-Steve Grundell <www@grundell.u-net.com>: clean stdout in control mode with stdout decoding
-Romain Dolbeau <romain@dolbeau.org>: Altivec support (taken from mplayer)
-higway <higway@mednet.md>: MMX Patch
-Clemens Ladisch <clemens@ladisch.de>: ALSA 0.9/1.0 support
-
-Debian Daniel Kobras <kobras@debian.org> era:
-
-Steve Kemp <skx@debian.org>
-Dan Olson <theoddone33@icculus.org>
-Syuuhei Kashiyama <squash@mb.kcom.ne.jp>
-Rupert Levene <rupert.debian@hotpop.com>
-Andreas Dilger <adilger@turbolinux.com>
-Erik B. Andersen <andersee@debian.org>
-Chris Butler <chrisb@debian.org>
-Martin Sjogren <md9ms@mdstud.chalmers.se>
-Chet Hosey <chosey@budapress.com>
-Roland Rosenfeld <roland@spinnaker.de>
-
-
-Debian Colin Watson <cjwatson@debian.org> era:
-
-Helge Deller <deller@gmx.de>
-Chet Hosey <chosey@budapress.com>
-Christopher C. Chimelis <chris@debian.org>
-Roland Rosenfeld <roland@spinnaker.de>
-Marcelo E. Magallon <mmagallo@debian.org>
-
-
-Initial Debianers:
-
-Tommi Virtanen <tv@debian.org>
-Paul Haggart <phaggart@debian.org>
-
-
-Contributions/ideas Michael Hipp era:
-
-Mikko Tommila: DCT9
-Oliver Fromme <oliver.fromme@heim3.tu-clausthal.de>
-MPEG Software Simulation Group: reference decoder package
-Tobias Bading: idea for DCT64 in subband synthesis from maplay package
-Jeff Tsay and Mikko Tommila: MDCT36 from maplay package
-Philipp Knirsch <phil@mpik-tueb.mpg.de>: DCT36/manual unroll idea
-Thomas Woerner: SGI Audio
-Damien Clermonte: HP-UX audio fixes
-Niclas Lindstrom <nil@wineasy.se>: OS2 port
-Stefan Bieschewski <stb@acm.org>: Pentium optimizations, decode_i586.s
-Martin Denn <mdenn@unix-ag.uni-kl.de>: NAS port
-Niklas Beisert <nbeisert@physik.tu-muenchen.de>: MPEG 2.5 tables
-<mycroft@NetBSD.ORG> and <augustss@cs.chalmers.se>: NetBSD Patch(es)
-Kevin Brintnall <kbrint@visi.com>: BSD patch
-Tony Million: win32 port
-Steven Tiger Lang: advanced shuffle
-Eric B. Mitchell: esd port
-Ryan R. Prosser <prosser@geocities.com>: esd port for Solaris
-Andreas Neuhaus: initial generic control interface
-
-(additionally fetched from changelog:)
-
-Ralf Hildebrandt <R.Hildebrandt@TU-BS.DE>: audio_alib changes
-<sms@moe.2bsd.com>: BSDOS 4.0 with gcc added to Makefile
-Bertrand Petit <elrond@phoe.netdev.net>: frontend changes
-Erik Mouw <J.A.K.Mouw@its.tudelft.nl>: SGI audio fix for non RAD machines
-Daniel O'Connor <darius@guppy.dons.net.au>: freebsd-esd make-entry
-D. Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>: enhanced head_check
-Wilson, Jeff D <jeff.wilson@wilcom.com>: xterm-title
-Robert Bihlmeyer <robbe@orcus.priv.at>: esd changes
-Hannu Napari's <Hannu.Napari@hut.fi>: SGI audio patches
-<Juergen.Schoew@unix-ag.uni-siegen.de>: native AIX support
-<psst@euskalnet.net>: playlist patch
-Gilles Zunino <Gilles.Zunino@hei.fupl.asso.fr>: SGI audio patches
-Matthew Parslow <roy@alpha.alphalink.com.au>: esdserver patch
-<dlux@dlux.sch.bme.hu>: equalizer patch (equalfile setting)
-Ducroquet Erwan <ducroque@ufr-info-p7.ibp.fr>: HPUX/ALib support
-Shane Wegner <shane@CM.NU>: genrepatch
-Samuel Audet <guardia@step.polymtl.ca>: wav-File patch
-"J. Dean Brederson" <jdb@cs.utah.edu>: SGI-RAD support
-Chou Ye-chi <is84002@cis.nctu.edu.tw>: sajberplay/FreeBSD patch
-Fabrice Bellard <bellard@email.enst.fr>: 486 optimizations
-A. Hermansen <ahermans@vf.telia.no> and J. Kysela <perex@jcu.cz>: ALSA output
-KIMURA Takuhiro <kim@hannah.ipc.miyakyo-u.ac.jp>: K6-3DNow
-Petr Stehlik <stehlik@cas3.zlin.vutbr.cz>: MINT
-Andy <andy@snoogie.demon.co.uk>: float2int speed up proposal
-Brian Foutz <foutz@anise.ee.cornell.edu>: TK3Play
-Thomas Niederreiter <tn@tarantel.rz.fh-muenchen.de>: RIFF header fix
-Stefan Gybas <cab@studbox.uni-stuttgart.de>: m68k patch
-Grant Erickson <eric0139@tc.umn.edu>: Linux PPC patch
-Peter Berger <peterb@hoopoe.psc.edu>: BSDi patch
-Henrik P Johnson <king@one.se>: HTTP auth
-Steven Tiger Lang <tiger@tyger.org>: advanced shuffle
-"Brian J. Swetland" <swetland@uiuc.edu>: front-end (remote) patch
-<leo@zycad.com>
-Tillmann Steinbrecher <tst@gmx.de>: shuffle patch
-M.Stekelenburg <m.stekelenburg@student.utwente.nl>: i386-getbits
-Antti Andreimann <anttix@cyberix.edu.ee>: outburst patch
-Hur TaeSung <saturn@arari.snu.ac.kr>: 'http accept' patch
-
-(from post-0.59 changes that yet have to go into new trunk:)
-
-Hans Schwengeler <schweng@astro.unibas.ch>: audio_dec additions
-Wojciech Barañski's Mp3Play (check the tools folder): Mp3Play frontend
-Daniel Koukola: audio_oss.c patch
-Munechika SUMIKAWA <sumikawa@ebina.hitachi.co.jp>: IPv6
-TEMNOTA <temnota@kmv.ru>: HTTP,FTP patch/playlist fix
-Peter Surda <shurdeek@panorama.sth.ac.at>: VBR patch
-Ben <ben@blaukopf.com>: ARM startup time improvements
-Dave MacKenzie <djm@pix.net>: init_output() patch
-pasky's <pasky@ju.cz>: close-on-stop patch
diff --git a/src/mpg123/libmpg123/COPYING b/src/mpg123/libmpg123/COPYING
deleted file mode 100644
index cf361b2..0000000
--- a/src/mpg123/libmpg123/COPYING
+++ /dev/null
@@ -1,773 +0,0 @@
-This is the file that contains the terms of use, copying, etc. for the mpg123 distribution package.
-
-Main message:
-
- Code is copyrighted by Michael Hipp, who made it free software under the terms of the LGPL 2.1.
-
-But that is not all of it.
-mpg123 is licensed under the GNU General Lesser Public License, version 2.1, and in parts under the GNU General Public License, version 2.
-That means that _all_ of mpg123 is licensed under GPL and the major part also under the LGPL.
-
-Actually, the "major part" currently is the whole distributed package of mpg123. There are some files (old alsa output, libao output) that you get from our svn repository and that do not fall under LGPL.
-
-When the copyright marker in a source file says "the mpg123 project" that means that the file contains code copyrighted by contributors to mpg123, the "initially written by" naming the person(s) that created the file and thus may have the largest part of copyrights on it.
-I am explaining this here to emphasize that the copyright always actually lies by the individual member (i.e. contributor to) of the mpg123 project who wrote a specific section of code.
-Usage of a source code management system like Subversion should provide keeping track of individual copyright traces...
-
-Please consider that any code that is contributed to the mpg123 project shall be licensed under LGPL 2.1 .
-If you want to contribute, but don't agree to that (i.e. you want to have your code GPL only) please say so - then, we either you convince is to include your code under GPL, we convince you to make it LGPL instead or, as a last resort, you'll have to do you own GPLed fork.
-But we should try to avoid the last option...
-
-All files in the distribution that don't carry a license note on their own are licensed under the terms of the LGPL 2.1; all files that do carry either a LGPL or GPL note are licensed respectively under the LGPL or GPL as follows:
-
-
-=======================
-1. The LGPL version 2.1
-=======================
-
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-
-====================
-2. The GPL version 2
-====================
-
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
diff --git a/src/mpg123/libmpg123/README b/src/mpg123/libmpg123/README
deleted file mode 100644
index 0e986a4..0000000
--- a/src/mpg123/libmpg123/README
+++ /dev/null
@@ -1,228 +0,0 @@
-This is a modified copy of libmpg123 for use in Audacious. The newer 1.12 has
-been released at the time of this writing, but is unusable because of a tendency
-to crash (Debian bug #580095) and because of API changes related to the use of
--D_FILE_OFFSET_BITS=64 (briefly, 32-bit 1.10 as packaged by Debian requires the
-flag, while 64-bit 1.12 as packaged by Gentoo is broken by it).
-
- John Lindgren
- June 9, 2010
-
-Change log:
-
-John Lindgren, June 9, 2010:
- * Imported libmpg123 1.10.0.
- * Removed some configuration stuff from mpg123.h.in and renamed it mpg123.h.
- * Added local config.h.
-
-John Lindgren, June 21, 2010:
- * Updated to libmpg123 1.12.2.
-
-John Lindgren, July 16, 2010:
- * Updated to libmpg123 1.12.3.
- * Imported upstream revision 2760 (fixes an unused variable warning).
-
- ======
-
-* * * * * * * * * * * * * * * * * * * * * * * * * * * *
-* mpg123 - MPEG 1.0/2.0/2.5 audio player *
-* README for version 1.x.y, dated at 14.06.2009 *
-* *
-* ...still the fastest MPEG audio player for UNIX ;) *
-* * * * * * * * * * * * * * * * * * * * * * * * * * * *
-(This file has very long lines - die-hard terminal nostalgists can be satisfied by `fmt -s -w 75 < README | less`. I think it's better to let the reader's preference rule than to preformat the stuff to some arbitrary width.)
-
-
-0. Stuff
-
-For building/installation info see INSTALL.
-
-The mpg123 project was started by Michel Hipp and is now being maintained by Thomas Orgis and Nicholas J. Humfrey, who intitated the Sourceforge project.
-The source code contains contributions from quite a few people - see AUTHORS for more info.
-It is Open Source software licensed mostly under the LGPL with some parts restricted to GPL. See COPYING for details.
-As for every mp3 player, some of mpg123's functionality may be covered by patents in a country where these are valid. See PATENTS for details.
-
-Project's official website URL is
-
- http://mpg123.org
-(or http://mpg123.orgis.org as fallback address if there is a problem with the DNS forwarding)
-
-for the traditional home page and
-
- http://sourceforge.net/projects/mpg123
-
-for sourceforge.net based services like download mirrors, mailing lists and bug/feature trackers.
-Please use the sourceforge download mirrors when possible to minimize load on the mpg123.org server.
-
-
-1. Introduction
-
-This is a console based decoder/player for mono/stereo mpeg audio files, probably more familiar as MP3 or MP2 files.
-It's focus is speed. We still need some low-end benchmarks for the current version, but playback should be possible even on i486 CPUs. There is hand-optimized assembly code for i586, MMX, 3DNow, SEE and 3DNowExt instructions, while generic code runs on a variety of different platforms and CPUs.
-It can play MPEG1.0/2.0/2.5 layer I, II, II (1, 2, 3;-) files (VBR files are fine, too) and produce output on a number of different ways: raw data to stdout and different sound systems depending on your platform (see INSTALL).
-Most tested are Linux on x86 and Alpha/AXP and MacOSX on ppc as the environments the current developers work in.
-We are always thankful for user reports on success (and failure) on any platform!
-
-
-2. Contact
-
-short:
-
- mpg123-devel@lists.sourceforge.net
- mpg123-users@lists.sourceforge.net
-or
- maintainer@mpg123.org
-
-long: see doc/CONTACT
-
-
-3. Interface/Usage
-
-Please consult the manpage mpg123(1). Some starter info follows.
-
-3.1 Simple Console Usage
-
-Mpg123 is a console program - normally it just plays a list of files you specify on command line and that's it. See the included manpage or
-
- mpg123 --help
-
-or, for the full story,
-
- mpg123 --longhelp
-
-on command line syntax/options. I encourage you to check out the --gapless and --rva-album/--rva-mix options:-)
-
-In the simple "mpg123 file1.mp3 file2.mp3" mode, the only thing you can do to interact is to press Ctrl+C to skip to next track or end the whole playback if pressing it twice.
-
-Note that this Ctrl+C behaviour is special to this mode; when any of the following is activated, Ctrl+C will just kill the program like you would expect normally (this changed from earlier versions).
-
-3.2 Advanced Console Usage
-
-You can specify the option -C to enable a terminal control interface enabling to influence playback on current title/playlist by pressing some key:
-
- -= terminal control keys =-
-[s] or [ ] interrupt/restart playback (i.e. 'pause')
-[f] next track
-[d] previous track
-[b] back to beginning of track
-[p] pause while looping current sound chunk
-[.] forward
-[,] rewind
-[:] fast forward
-[;] fast rewind
-[>] fine forward
-[<] fine rewind
-[+] volume up
-[-] volume down
-[r] RVA switch
-[v] verbose switch
-[l] list current playlist, indicating current track there
-[t] display tag info (again)
-[m] print MPEG header info (again)
-[h] this help
-[q] quit
-
-You can change these bindings to key to your liking by modifying term.h .
-
-Note: This interface needs not to be available on _every_ platform/build.
-
-Another note: The volume up and down is performed by changing the scale factor (like the -f parameter) ... so the audio is scaled digitally in the given range of the output format (usually 16bits). That means the lowering the volume will decrease the dynamic range and possibly lessen the quality while increasing volume can in fact increase the dynamic range and thus make it better, if you deal with a silent source and no clipping is necessary.
-It is a good idea to use RVA values stored in the file for adjusting low volume files, though - mpg123 handles that in addition to your volume setting.
-
-3.3 Control Interface for Frontends
-
-There used to be several interfaces for frontends left over from that past, but only one of them remains for the present and future:
-
- The Generic Control Interface
-
-It contains of communication of textual messages via standard input to mpg123 and responses to standard output unless the -s switch for output of audio data on stdout is used - then the responses come via stderr.
-
-See doc/README.remote for usage.
-
-
-4. Speed
-
-mpg123 is fast. Any faster software player is probably based on some hacked mpg123;-)
-MPlayer included mpg123 source code in it's mp3lib and we have to be thankful for the MPlayer folks adding SSE, 3DNowExt and AltiVec optimizations over the years, which we were able to backport.
-
-mpg123 includes the AltiVec optimization since version 0.61 and the SSE and 3DNowExt optimizations since 0.66 .
-Also, version 0.66 adds the merged x86 optimization build, which includes every applicable optimization for x86 cpus except the one for i486, wich is a bit special.
-
-Now mpg123 catched up with MPlayer's mp3lib concerning decoding speed on my Pentium M (which supports SSE):
-Decoding a certain album (Queensryche's Rage for Order) to /dev/null took 22.4s user time with mpg123-0.66 compared to 24.7s with MPlayer-1.0rc1 .
-
-Also, beginning with mpg123 1.8.0, there are fresh x86-64 SSE optimizations (provided by Taihei Monma) wich make mpg123 the fastest MPEG audio decoder in my knowledge also on current 64bit x86 systems.
-
-5. Accuracy
-
-The mpg123 engine is able to decode in full compliance to ISO/IEC 11172-3, for all three layers, using floating point or integer math (the latter since 1.8.1).
-Accuracy of 16bit output depends on specific optimization in use and compile-time choice about the rounding mode (which is performance relevant).
-
-The ISO test suite is incorporated in the mpg123 subversion repository under svn://orgis.org/mpg123/test, nighlty tests of a build (with high-quality 16bit rounding) are published on the mpg123 website.
-
-Dithered 16bit output is available as an option (the --cpu choices ending with _dither). See
-
- http://dither123.dyndns.org
-
-on the whereabouts.
-
-7. History
-
-A looooong time ago (mid-90s), Michael Hipp wrote some initial mpg123 and made it _the_ Unix console mp3 player in the following years.
-The exact date of birth is fuzzy in human memory, but according to the master himself (Michael) mpg123 started in 1994 as an MP2 player which a year later, 1995, gained MP3 ability.
-The core decoder files have mostly 1995 as their birth year listed, so one can say that mpg123 as the layer1,2,3 player was born in 1995.
-In any case, that is a looooong time ago for a media player - especially for one that is still alive!
-
-This is the historic description:
-
- This isn't a new player. It's a fully rewritten version originally based
- on the mpegaudio (FHG-version) package. The DCT algorithm in the
- synthesis filter is a rewritten version of the DCT first seen in the maplay
- package, which was written by Tobias Bading (bading@cs.tu-berlin.de). The
- rewrite was neccassary, because the GPL may not allow this copyright mix.
- The mpegaudio package was written by various people from the MPEG/audio
- software simulation group. The maplay is under GPL .. You can find the
- original source code and the mpegaudio package on: ftp.tnt.uni-hannover.de.
-
- Especially layer3.c common.c and mpg123.h is based on the dist10 package.
- The code is fullly rewritten but I'm using sometimes the
- same variable names or similar function names as in the
- original package.
-
- In the current layer3.c I'm using a DCT36 first seen in Jeff Tsay's
- (ctsay@pasteur.eecs.berkeley.edu) maplay 1.2+ package. His code is
- under GPL .. I also tried the enhancement from Mikko Tommila. His
- code is also in layer3.c (but it's disabled at the moment, because
- it was slightly slower than the unrolled 9 point DCT (at least on
- _my_ system)). Theoretically it should be faster. You may try it on
- your system.
-
-Well, that's how it started...
-Official development ceased due to the typical lack-of-time syndrome around 2002 and the free-floating patches began to seize the day.
-
-But before that, Michael wrote or rewrote the essential code; others contributed their bits.
-The main message is:
-
-Code is copyrighted by Michael Hipp, who made it free software under the terms of the LGPL 2.1.
-
-Please see doc/ROAD_TO_LGPL, COPYING and AUTHORS for details on that. Note that the only notable legacy non-LGPL file was the old alsa output that didn't work with alsa 0.9/1.0 anymore.
-Also, there has been a libao output in the betas 0.60 for a short period. Libao being generally problematic for us because of its GPL license, this output is not distributed anymore in the release packages. There is now a new, LGPLed alsa output that made both the old alsa and libao obsolete for our purposes.
-So, the distributed mpg123 releases actually only contain LGPL code, but you get the other files from our subversion repository if you checkout the trunk / version tags.
-
-There has been quite some confusion about the licensing and "freeness" of mpg123 in the past.
-The initial "free for private use, ask me when you want to do something commercial" license caused some people to avoid mpg123 and even to write a replacement mimicking the interface but using a different decoding engine - what was not actively developed for too long but entered the "free" software sections.
-
-The Debian (non-free section) and Gentoo distributions cared about the last stable and the last development release of mpg123 over the years with mainly applying security fixes. Thanks go to the distribution maintainers for not letting it alone to bitrot over the years.
-
-Thomas Orgis started to hack on mpg123 in 2004 while working on his personal audio experience with mixplayd and later DerMixD, utilizing the generic control interface. In Feb 2005, he crammed control interface improvements together with Debian's r19 fixes and released the personal fork/patch named mpg123-thor.
-Little later that year, Nicholas J. Humphrey independently created the sourceforge project and released an autotooled 0.59r under official GPL flag with Debian and MacOSX fixes.
-In the beginning of 2006, Thomas finally decided that he could work "officially" on mpg123 and contacted Michael Hipp for taking over maintainership.
-Michael was all-positive about letting mpg123 really live again (and perhaps see version 1.0 some time;-) and also pointed at the sourceforge project that didn't see much activity since the initial release.
-A lot of emails and some weeks later there was the two-developer team of Nicholas and Thomas working on merging their mpg123 variants as well as adding some features and fixes to let it shine again.
-
-And there we are now...
-
-8. End
-
-Have fun!
-____________
-Thomas Orgis
diff --git a/src/mpg123/libmpg123/aligncheck.h b/src/mpg123/libmpg123/aligncheck.h
deleted file mode 100644
index 502264b..0000000
--- a/src/mpg123/libmpg123/aligncheck.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- aligncheck: Some insane hacking to ensure stack alignment on library entry.
-
- copyright 2010 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
-
- intially written by Thomas Orgis
-
- Include this header once at the appropriate place. It is not supposed for general use...
-*/
-
-
-#define ALIGNCHECK(mh)
-#define ALIGNCHECKK
-/* On compilers that support data alignment but not the automatic stack realignment.
- We check for properly aligned stack before risking a crash because of badly compiled
- client program. */
-#if (defined CCALIGN) && (defined NEED_ALIGNCHECK) && ((defined DEBUG) || (defined CHECK_ALIGN))
-
-/* Common building block. */
-#define ALIGNMAINPART \
- /* minimum size of 16 bytes, not all compilers would align a smaller piece of data */ \
- double ALIGNED(16) altest[2]; \
- debug2("testing alignment, with %lu %% 16 = %lu", \
- (unsigned long)altest, (unsigned long)((size_t)altest % 16)); \
- if((size_t)altest % 16 != 0)
-
-#undef ALIGNCHECK
-#define ALIGNCHECK(mh) \
- ALIGNMAINPART \
- { \
- error("Stack variable is not aligned! Your combination of compiler/library is dangerous!"); \
- if(mh != NULL) mh->err = MPG123_BAD_ALIGN; \
-\
- return MPG123_ERR; \
- }
-#undef ALIGNCHECKK
-#define ALIGNCHECKK \
- ALIGNMAINPART \
- { \
- error("Stack variable is not aligned! Your combination of compiler/library is dangerous!"); \
- return MPG123_BAD_ALIGN; \
- }
-
-#endif
diff --git a/src/mpg123/libmpg123/compat.c b/src/mpg123/libmpg123/compat.c
deleted file mode 100644
index d32a35d..0000000
--- a/src/mpg123/libmpg123/compat.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- compat: Some compatibility functions.
-
- The mpg123 code is determined to keep it's legacy. A legacy of old, old UNIX.
- So anything possibly somewhat advanced should be considered to be put here, with proper #ifdef;-)
-
- copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis, Windows Unicode stuff by JonY.
-*/
-
-#include "config.h"
-#include "compat.h"
-
-#ifdef _MSC_VER
-#include <io.h>
-#else
-#include <fcntl.h>
-#endif
-
-#ifdef WANT_WIN32_UNICODE
-#include <wchar.h>
-#include <windows.h>
-#include <winnls.h>
-#endif
-
-#include "debug.h"
-
-/* A safe realloc also for very old systems where realloc(NULL, size) returns NULL. */
-void *safe_realloc(void *ptr, size_t size)
-{
- if(ptr == NULL) return malloc(size);
- else return realloc(ptr, size);
-}
-
-#ifndef HAVE_STRERROR
-const char *strerror(int errnum)
-{
- extern int sys_nerr;
- extern char *sys_errlist[];
-
- return (errnum < sys_nerr) ? sys_errlist[errnum] : "";
-}
-#endif
-
-#ifndef HAVE_STRDUP
-char *strdup(const char *src)
-{
- char *dest;
-
- if (!(dest = (char *) malloc(strlen(src)+1)))
- return NULL;
- else
- return strcpy(dest, src);
-}
-#endif
-
-int compat_open(const char *filename, int mode)
-{
- int ret;
-#if defined (WANT_WIN32_UNICODE)
- const wchar_t *frag = NULL;
-
- ret = win32_utf8_wide(filename, &frag, NULL);
- if ((frag == NULL) || (ret == 0)) goto fallback; /* Fallback to plain open when ucs-2 conversion fails */
-
- ret = _wopen(frag, mode); /*Try _wopen */
- if (ret != -1 ) goto open_ok; /* msdn says -1 means failure */
-
-fallback:
-#endif
-
-#ifdef __MSVCRT__ /* MSDN says POSIX function is deprecated beginning in Visual C++ 2005 */
- ret = _open (filename, mode); /* Try plain old _open(), if it fails, do nothing */
-#else
- ret = open (filename, mode);
-#endif
-
-#if defined (WANT_WIN32_UNICODE)
-open_ok:
- free ((void *)frag); /* Freeing a NULL should be OK */
-#endif
-
- return ret;
-}
-
-int compat_close(int infd)
-{
-#ifdef __MSVCRT__ /* MSDN says POSIX function is deprecated beginning in Visual C++ 2005 */
- return _close(infd);
-#else
- return close(infd);
-#endif
-}
-
-/* Windows Unicode stuff */
-
-#ifdef WANT_WIN32_UNICODE
-int win32_wide_utf8(const wchar_t * const wptr, const char **const mbptr, size_t * const buflen)
-{
- size_t len;
- char *buf;
- int ret;
-
- len = WideCharToMultiByte(CP_UTF8, 0, wptr, -1, NULL, 0, NULL, NULL); /* Get utf-8 string length */
- buf = calloc(len, sizeof (char)); /* Can we assume sizeof char always = 1? */
- debug2("win32_wide_utf8 allocated %u bytes at %p", len, buf);
-
- if(buf != NULL)
- {
- ret = WideCharToMultiByte(CP_UTF8, 0, wptr, -1, buf, len, NULL, NULL); /*Do actual conversion*/
- *mbptr = buf; /* Set string pointer to allocated buffer */
- if(buflen != NULL) *buflen = len * sizeof (char); /* Give length of allocated memory if needed. */
-
- return ret;
- }
- else
- {
- if(buflen != NULL) *buflen = 0;
-
- return 0;
- }
-}
-
-int win32_utf8_wide(const char *const mbptr, const wchar_t ** const wptr, size_t * const buflen)
-{
- size_t len;
- wchar_t *buf;
- int ret;
-
- len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, mbptr, -1, NULL, 0); /* Get converted size */
- buf = calloc(len, sizeof (wchar_t)); /* Allocate memory accordingly */
- debug2("win32_utf8_wide allocated %u bytes at %p", len, buf);
-
- if(buf != NULL)
- {
- ret = MultiByteToWideChar (CP_UTF8, MB_ERR_INVALID_CHARS, mbptr, -1, buf, len); /* Do conversion */
- *wptr = buf; /* Set string pointer to allocated buffer */
- if (buflen != NULL) *buflen = len * sizeof (wchar_t); /* Give length of allocated memory if needed. */
-
- return ret;
- }
- else
- {
- if (buflen != NULL) *buflen = 0;
-
- return 0;
- }
-}
-#endif
diff --git a/src/mpg123/libmpg123/compat.h b/src/mpg123/libmpg123/compat.h
deleted file mode 100644
index 28520d5..0000000
--- a/src/mpg123/libmpg123/compat.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- compat: Some compatibility functions and header inclusions.
- Basic standard C stuff, that may barely be above/around C89.
-
- The mpg123 code is determined to keep it's legacy. A legacy of old, old UNIX.
- It is envisioned to include this compat header instead of any of the "standard" headers, to catch compatibility issues.
- So, don't include stdlib.h or string.h ... include compat.h.
-
- copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#ifndef MPG123_COMPAT_H
-#define MPG123_COMPAT_H
-
-#include "config.h"
-
-#ifdef HAVE_STDLIB_H
-/* realloc, size_t */
-#include <stdlib.h>
-#endif
-
-#include <stdio.h>
-#include <math.h>
-
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#else
-#ifdef HAVE_SYS_SIGNAL_H
-#include <sys/signal.h>
-#endif
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* Types, types, types. */
-/* Do we actually need these two in addition to sys/types.h? As replacement? */
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-/* We want SIZE_MAX, etc. */
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef SIZE_MAX
-#define SIZE_MAX ((size_t)-1)
-#endif
-#ifndef ULONG_MAX
-#define ULONG_MAX ((unsigned long)-1)
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef OS2
-#include <float.h>
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-/* For select(), I need select.h according to POSIX 2001, else: sys/time.h sys/types.h unistd.h */
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-/* To parse big numbers... */
-#ifdef HAVE_ATOLL
-#define atobigint atoll
-#else
-#define atobigint atol
-#endif
-
-typedef unsigned char byte;
-
-/* A safe realloc also for very old systems where realloc(NULL, size) returns NULL. */
-void *safe_realloc(void *ptr, size_t size);
-#ifndef HAVE_STRERROR
-const char *strerror(int errnum);
-#endif
-
-#ifndef HAVE_STRDUP
-char *strdup(const char *s);
-#endif
-
-/* If we have the size checks enabled, try to derive some sane printfs.
- Simple start: Use max integer type and format if long is not big enough.
- I am hesitating to use %ll without making sure that it's there... */
-#if !(defined PLAIN_C89) && (defined SIZEOF_OFF_T) && (SIZEOF_OFF_T > SIZEOF_LONG) && (defined PRIiMAX)
-# define OFF_P PRIiMAX
-typedef intmax_t off_p;
-#else
-# define OFF_P "li"
-typedef long off_p;
-#endif
-
-#if !(defined PLAIN_C89) && (defined SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > SIZEOF_LONG) && (defined PRIuMAX)
-# define SIZE_P PRIuMAX
-typedef uintmax_t size_p;
-#else
-# define SIZE_P "lu"
-typedef unsigned long size_p;
-#endif
-
-#if !(defined PLAIN_C89) && (defined SIZEOF_SSIZE_T) && (SIZEOF_SSIZE_T > SIZEOF_LONG) && (defined PRIiMAX)
-# define SSIZE_P PRIuMAX
-typedef intmax_t ssize_p;
-#else
-# define SSIZE_P "li"
-typedef long ssize_p;
-#endif
-
-/**
- * Opening a file handle can be different.
- * This function here is defined to take a path in native encoding (ISO8859 / UTF-8 / ...), or, when MS Windows Unicode support is enabled, an UTF-8 string that will be converted back to native UCS-2 (wide character) before calling the system's open function.
- * @param[in] wptr Pointer to wide string.
- * @param[in] mbptr Pointer to multibyte string.
- * @return file descriptor (>=0) or error code.
- */
-int compat_open(const char *filename, int mode);
-
-/**
- * Closing a file handle can be platform specific.
- * This function takes a file descriptor that is to be closed.
- * @param[in] infd File descriptor to be closed.
- * @return 0 if the file was successfully closed. A return value of -1 indicates an error.
- */
-int compat_close(int infd);
-
-/* Those do make sense in a separate file, but I chose to include them in compat.c because that's the one source whose object is shared between mpg123 and libmpg123 -- and both need the functionality internally. */
-
-#ifdef WANT_WIN32_UNICODE
-/**
- * win32_uni2mbc
- * Converts a null terminated UCS-2 string to a multibyte (UTF-8) equivalent.
- * Caller is supposed to free allocated buffer.
- * @param[in] wptr Pointer to wide string.
- * @param[out] mbptr Pointer to multibyte string.
- * @param[out] buflen Optional parameter for length of allocated buffer.
- * @return status of WideCharToMultiByte conversion.
- *
- * WideCharToMultiByte - http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx
- */
-int win32_wide_utf8 (const wchar_t * const wptr, const char **const mbptr, size_t * const buflen);
-
-/**
- * win32_mbc2uni
- * Converts a null terminated UTF-8 string to a UCS-2 equivalent.
- * Caller is supposed to free allocated buffer.
- * @param[out] mbptr Pointer to multibyte string.
- * @param[in] wptr Pointer to wide string.
- * @param[out] buflen Optional parameter for length of allocated buffer.
- * @return status of WideCharToMultiByte conversion.
- *
- * MultiByteToWideChar - http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx
- */
-
-int win32_utf8_wide (const char *const mbptr, const wchar_t ** const wptr, size_t * const buflen);
-#endif
-
-/* That one comes from Tellie on OS/2, needed in resolver. */
-#ifdef __KLIBC__
-typedef int socklen_t;
-#endif
-
-#endif
diff --git a/src/mpg123/libmpg123/config.h b/src/mpg123/libmpg123/config.h
deleted file mode 100644
index 74563cb..0000000
--- a/src/mpg123/libmpg123/config.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef AUDACIOUS_LIBMPG123_CONFIG_H
-#define AUDACIOUS_LIBMPG123_CONFIG_H
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define HAVE_STRDUP
-#define HAVE_STRERROR
-
-#define OPT_GENERIC
-
-#define FIFO 1
-#define FRAME_INDEX 1
-#define GAPLESS 1
-#define IEEE_FLOAT 1
-#define INDEX_SIZE 1000
-
-#define NO_8BIT
-#define NO_32BIT
-#define NO_DOWNSAMPLE
-#define NO_NTOM
-#define NO_REAL
-#define NO_ID3V2
-
-#endif
diff --git a/src/mpg123/libmpg123/dct64.c b/src/mpg123/libmpg123/dct64.c
deleted file mode 100644
index a25047a..0000000
--- a/src/mpg123/libmpg123/dct64.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- dct64.c: DCT64, the plain C version
-
- copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-*/
-
-/*
- * Discrete Cosine Tansform (DCT) for subband synthesis
- *
- * -funroll-loops (for gcc) will remove the loops for better performance
- * using loops in the source-code enhances readabillity
- *
- *
- * TODO: write an optimized version for the down-sampling modes
- * (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero
- */
-
-#include "mpg123lib_intern.h"
-
-void dct64(real *out0,real *out1,real *samples)
-{
- real bufs[64];
-
- {
- register int i,j;
- register real *b1,*b2,*bs,*costab;
-
- b1 = samples;
- bs = bufs;
- costab = pnts[0]+16;
- b2 = b1 + 32;
-
- for(i=15;i>=0;i--)
- *bs++ = (*b1++ + *--b2);
- for(i=15;i>=0;i--)
- *bs++ = REAL_MUL((*--b2 - *b1++), *--costab);
-
- b1 = bufs;
- costab = pnts[1]+8;
- b2 = b1 + 16;
-
- {
- for(i=7;i>=0;i--)
- *bs++ = (*b1++ + *--b2);
- for(i=7;i>=0;i--)
- *bs++ = REAL_MUL((*--b2 - *b1++), *--costab);
- b2 += 32;
- costab += 8;
- for(i=7;i>=0;i--)
- *bs++ = (*b1++ + *--b2);
- for(i=7;i>=0;i--)
- *bs++ = REAL_MUL((*b1++ - *--b2), *--costab);
- b2 += 32;
- }
-
- bs = bufs;
- costab = pnts[2];
- b2 = b1 + 8;
-
- for(j=2;j;j--)
- {
- for(i=3;i>=0;i--)
- *bs++ = (*b1++ + *--b2);
- for(i=3;i>=0;i--)
- *bs++ = REAL_MUL((*--b2 - *b1++), costab[i]);
- b2 += 16;
- for(i=3;i>=0;i--)
- *bs++ = (*b1++ + *--b2);
- for(i=3;i>=0;i--)
- *bs++ = REAL_MUL((*b1++ - *--b2), costab[i]);
- b2 += 16;
- }
-
- b1 = bufs;
- costab = pnts[3];
- b2 = b1 + 4;
-
- for(j=4;j;j--)
- {
- *bs++ = (*b1++ + *--b2);
- *bs++ = (*b1++ + *--b2);
- *bs++ = REAL_MUL((*--b2 - *b1++), costab[1]);
- *bs++ = REAL_MUL((*--b2 - *b1++), costab[0]);
- b2 += 8;
- *bs++ = (*b1++ + *--b2);
- *bs++ = (*b1++ + *--b2);
- *bs++ = REAL_MUL((*b1++ - *--b2), costab[1]);
- *bs++ = REAL_MUL((*b1++ - *--b2), costab[0]);
- b2 += 8;
- }
- bs = bufs;
- costab = pnts[4];
-
- for(j=8;j;j--)
- {
- real v0,v1;
- v0=*b1++; v1 = *b1++;
- *bs++ = (v0 + v1);
- *bs++ = REAL_MUL((v0 - v1), (*costab));
- v0=*b1++; v1 = *b1++;
- *bs++ = (v0 + v1);
- *bs++ = REAL_MUL((v1 - v0), (*costab));
- }
-
- }
-
-
- {
- register real *b1;
- register int i;
-
- for(b1=bufs,i=8;i;i--,b1+=4)
- b1[2] += b1[3];
-
- for(b1=bufs,i=4;i;i--,b1+=8)
- {
- b1[4] += b1[6];
- b1[6] += b1[5];
- b1[5] += b1[7];
- }
-
- for(b1=bufs,i=2;i;i--,b1+=16)
- {
- b1[8] += b1[12];
- b1[12] += b1[10];
- b1[10] += b1[14];
- b1[14] += b1[9];
- b1[9] += b1[13];
- b1[13] += b1[11];
- b1[11] += b1[15];
- }
- }
-
-
- out0[0x10*16] = REAL_SCALE_DCT64(bufs[0]);
- out0[0x10*15] = REAL_SCALE_DCT64(bufs[16+0] + bufs[16+8]);
- out0[0x10*14] = REAL_SCALE_DCT64(bufs[8]);
- out0[0x10*13] = REAL_SCALE_DCT64(bufs[16+8] + bufs[16+4]);
- out0[0x10*12] = REAL_SCALE_DCT64(bufs[4]);
- out0[0x10*11] = REAL_SCALE_DCT64(bufs[16+4] + bufs[16+12]);
- out0[0x10*10] = REAL_SCALE_DCT64(bufs[12]);
- out0[0x10* 9] = REAL_SCALE_DCT64(bufs[16+12] + bufs[16+2]);
- out0[0x10* 8] = REAL_SCALE_DCT64(bufs[2]);
- out0[0x10* 7] = REAL_SCALE_DCT64(bufs[16+2] + bufs[16+10]);
- out0[0x10* 6] = REAL_SCALE_DCT64(bufs[10]);
- out0[0x10* 5] = REAL_SCALE_DCT64(bufs[16+10] + bufs[16+6]);
- out0[0x10* 4] = REAL_SCALE_DCT64(bufs[6]);
- out0[0x10* 3] = REAL_SCALE_DCT64(bufs[16+6] + bufs[16+14]);
- out0[0x10* 2] = REAL_SCALE_DCT64(bufs[14]);
- out0[0x10* 1] = REAL_SCALE_DCT64(bufs[16+14] + bufs[16+1]);
- out0[0x10* 0] = REAL_SCALE_DCT64(bufs[1]);
-
- out1[0x10* 0] = REAL_SCALE_DCT64(bufs[1]);
- out1[0x10* 1] = REAL_SCALE_DCT64(bufs[16+1] + bufs[16+9]);
- out1[0x10* 2] = REAL_SCALE_DCT64(bufs[9]);
- out1[0x10* 3] = REAL_SCALE_DCT64(bufs[16+9] + bufs[16+5]);
- out1[0x10* 4] = REAL_SCALE_DCT64(bufs[5]);
- out1[0x10* 5] = REAL_SCALE_DCT64(bufs[16+5] + bufs[16+13]);
- out1[0x10* 6] = REAL_SCALE_DCT64(bufs[13]);
- out1[0x10* 7] = REAL_SCALE_DCT64(bufs[16+13] + bufs[16+3]);
- out1[0x10* 8] = REAL_SCALE_DCT64(bufs[3]);
- out1[0x10* 9] = REAL_SCALE_DCT64(bufs[16+3] + bufs[16+11]);
- out1[0x10*10] = REAL_SCALE_DCT64(bufs[11]);
- out1[0x10*11] = REAL_SCALE_DCT64(bufs[16+11] + bufs[16+7]);
- out1[0x10*12] = REAL_SCALE_DCT64(bufs[7]);
- out1[0x10*13] = REAL_SCALE_DCT64(bufs[16+7] + bufs[16+15]);
- out1[0x10*14] = REAL_SCALE_DCT64(bufs[15]);
- out1[0x10*15] = REAL_SCALE_DCT64(bufs[16+15]);
-
-}
-
-
diff --git a/src/mpg123/libmpg123/debug.h b/src/mpg123/libmpg123/debug.h
deleted file mode 100644
index 8cfd67b..0000000
--- a/src/mpg123/libmpg123/debug.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- debug.h:
- if DEBUG defined: debugging macro fprintf wrappers
- else: macros defined to do nothing
- That saves typing #ifdef DEBUG all the time and still preserves
- lean code without debugging.
-
- public domain (or LGPL / GPL, if you like that more;-)
- generated by debugdef.pl, what was
- trivially written by Thomas Orgis <thomas@orgis.org>
-*/
-
-#include "config.h"
-
-/*
- I could do that with variadic macros available:
- #define sdebug(me, s) fprintf(stderr, "[location] " s "\n")
- #define debug(me, s, ...) fprintf(stderr, "[location] " s "}n", __VA_ARGS__)
-
- Variadic macros are a C99 feature...
- Now just predefining stuff non-variadic for up to 15 arguments.
- It's cumbersome to have them all with different names, though...
-*/
-
-#ifdef DEBUG
-#include <stdio.h>
-#define debug(s) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__)
-#define debug1(s, a) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a)
-#define debug2(s, a, b) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b)
-#define debug3(s, a, b, c) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c)
-#define debug4(s, a, b, c, d) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d)
-#define debug5(s, a, b, c, d, e) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e)
-#define debug6(s, a, b, c, d, e, f) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f)
-#define debug7(s, a, b, c, d, e, f, g) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g)
-#define debug8(s, a, b, c, d, e, f, g, h) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h)
-#define debug9(s, a, b, c, d, e, f, g, h, i) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i)
-#define debug10(s, a, b, c, d, e, f, g, h, i, j) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j)
-#define debug11(s, a, b, c, d, e, f, g, h, i, j, k) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k)
-#define debug12(s, a, b, c, d, e, f, g, h, i, j, k, l) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l)
-#define debug13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m)
-#define debug14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
-#define debug15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) fprintf(stderr, "[" __FILE__ ":%i] debug: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
-#else
-#define debug(s)
-#define debug1(s, a)
-#define debug2(s, a, b)
-#define debug3(s, a, b, c)
-#define debug4(s, a, b, c, d)
-#define debug5(s, a, b, c, d, e)
-#define debug6(s, a, b, c, d, e, f)
-#define debug7(s, a, b, c, d, e, f, g)
-#define debug8(s, a, b, c, d, e, f, g, h)
-#define debug9(s, a, b, c, d, e, f, g, h, i)
-#define debug10(s, a, b, c, d, e, f, g, h, i, j)
-#define debug11(s, a, b, c, d, e, f, g, h, i, j, k)
-#define debug12(s, a, b, c, d, e, f, g, h, i, j, k, l)
-#define debug13(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
-#define debug14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
-#define debug15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
-#endif
-
-/* warning macros also here... */
-#ifndef NO_WARNING
-#define warning(s) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__)
-#define warning1(s, a) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a)
-#define warning2(s, a, b) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b)
-#define warning3(s, a, b, c) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c)
-#define warning4(s, a, b, c, d) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d)
-#define warning5(s, a, b, c, d, e) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e)
-#define warning6(s, a, b, c, d, e, f) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f)
-#define warning7(s, a, b, c, d, e, f, g) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g)
-#define warning8(s, a, b, c, d, e, f, g, h) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h)
-#define warning9(s, a, b, c, d, e, f, g, h, i) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i)
-#define warning10(s, a, b, c, d, e, f, g, h, i, j) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j)
-#define warning11(s, a, b, c, d, e, f, g, h, i, j, k) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k)
-#define warning12(s, a, b, c, d, e, f, g, h, i, j, k, l) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l)
-#define warning13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m)
-#define warning14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
-#define warning15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) fprintf(stderr, "[" __FILE__ ":%i] warning: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
-#else
-#define warning(s)
-#define warning1(s, a)
-#define warning2(s, a, b)
-#define warning3(s, a, b, c)
-#define warning4(s, a, b, c, d)
-#define warning5(s, a, b, c, d, e)
-#define warning6(s, a, b, c, d, e, f)
-#define warning7(s, a, b, c, d, e, f, g)
-#define warning8(s, a, b, c, d, e, f, g, h)
-#define warning9(s, a, b, c, d, e, f, g, h, i)
-#define warning10(s, a, b, c, d, e, f, g, h, i, j)
-#define warning11(s, a, b, c, d, e, f, g, h, i, j, k)
-#define warning12(s, a, b, c, d, e, f, g, h, i, j, k, l)
-#define warning13(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
-#define warning14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
-#define warning15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
-#endif
-
-/* error macros also here... */
-#ifndef NO_ERROR
-#define error(s) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__)
-#define error1(s, a) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a)
-#define error2(s, a, b) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b)
-#define error3(s, a, b, c) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c)
-#define error4(s, a, b, c, d) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d)
-#define error5(s, a, b, c, d, e) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e)
-#define error6(s, a, b, c, d, e, f) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f)
-#define error7(s, a, b, c, d, e, f, g) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g)
-#define error8(s, a, b, c, d, e, f, g, h) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h)
-#define error9(s, a, b, c, d, e, f, g, h, i) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i)
-#define error10(s, a, b, c, d, e, f, g, h, i, j) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j)
-#define error11(s, a, b, c, d, e, f, g, h, i, j, k) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k)
-#define error12(s, a, b, c, d, e, f, g, h, i, j, k, l) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l)
-#define error13(s, a, b, c, d, e, f, g, h, i, j, k, l, m) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m)
-#define error14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
-#define error15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) fprintf(stderr, "[" __FILE__ ":%i] error: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
-#else
-#define error(s)
-#define error1(s, a)
-#define error2(s, a, b)
-#define error3(s, a, b, c)
-#define error4(s, a, b, c, d)
-#define error5(s, a, b, c, d, e)
-#define error6(s, a, b, c, d, e, f)
-#define error7(s, a, b, c, d, e, f, g)
-#define error8(s, a, b, c, d, e, f, g, h)
-#define error9(s, a, b, c, d, e, f, g, h, i)
-#define error10(s, a, b, c, d, e, f, g, h, i, j)
-#define error11(s, a, b, c, d, e, f, g, h, i, j, k)
-#define error12(s, a, b, c, d, e, f, g, h, i, j, k, l)
-#define error13(s, a, b, c, d, e, f, g, h, i, j, k, l, m)
-#define error14(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n)
-#define error15(s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
-#endif
-
-/* ereturn macros also here... */
-#ifndef NO_ERETURN
-#define ereturn(rv, s) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__); return rv; }while(0)
-#define ereturn1(rv, s, a) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a); return rv; }while(0)
-#define ereturn2(rv, s, a, b) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b); return rv; }while(0)
-#define ereturn3(rv, s, a, b, c) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c); return rv; }while(0)
-#define ereturn4(rv, s, a, b, c, d) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d); return rv; }while(0)
-#define ereturn5(rv, s, a, b, c, d, e) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e); return rv; }while(0)
-#define ereturn6(rv, s, a, b, c, d, e, f) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f); return rv; }while(0)
-#define ereturn7(rv, s, a, b, c, d, e, f, g) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g); return rv; }while(0)
-#define ereturn8(rv, s, a, b, c, d, e, f, g, h) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h); return rv; }while(0)
-#define ereturn9(rv, s, a, b, c, d, e, f, g, h, i) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i); return rv; }while(0)
-#define ereturn10(rv, s, a, b, c, d, e, f, g, h, i, j) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j); return rv; }while(0)
-#define ereturn11(rv, s, a, b, c, d, e, f, g, h, i, j, k) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k); return rv; }while(0)
-#define ereturn12(rv, s, a, b, c, d, e, f, g, h, i, j, k, l) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l); return rv; }while(0)
-#define ereturn13(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m); return rv; }while(0)
-#define ereturn14(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n); return rv; }while(0)
-#define ereturn15(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) do{ fprintf(stderr, "[" __FILE__ ":%i] ereturn: " s "\n", __LINE__, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); return rv; }while(0)
-#else
-#define ereturn(rv, s) return rv
-#define ereturn1(rv, s, a) return rv
-#define ereturn2(rv, s, a, b) return rv
-#define ereturn3(rv, s, a, b, c) return rv
-#define ereturn4(rv, s, a, b, c, d) return rv
-#define ereturn5(rv, s, a, b, c, d, e) return rv
-#define ereturn6(rv, s, a, b, c, d, e, f) return rv
-#define ereturn7(rv, s, a, b, c, d, e, f, g) return rv
-#define ereturn8(rv, s, a, b, c, d, e, f, g, h) return rv
-#define ereturn9(rv, s, a, b, c, d, e, f, g, h, i) return rv
-#define ereturn10(rv, s, a, b, c, d, e, f, g, h, i, j) return rv
-#define ereturn11(rv, s, a, b, c, d, e, f, g, h, i, j, k) return rv
-#define ereturn12(rv, s, a, b, c, d, e, f, g, h, i, j, k, l) return rv
-#define ereturn13(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m) return rv
-#define ereturn14(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n) return rv
-#define ereturn15(rv, s, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) return rv
-#endif
diff --git a/src/mpg123/libmpg123/decode.h b/src/mpg123/libmpg123/decode.h
deleted file mode 100644
index f35768d..0000000
--- a/src/mpg123/libmpg123/decode.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- decode.h: common definitions for decode functions
-
- This file is strongly tied with optimize.h concerning the synth functions.
- Perhaps one should restructure that a bit.
-
- copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis, taking WRITE_SAMPLE from decode.c
-*/
-#ifndef MPG123_DECODE_H
-#define MPG123_DECODE_H
-
-/* Selection of class of output routines for basic format. */
-#ifndef REAL_IS_FIXED
-#define OUT_FORMATS 4 /* Basic output formats: 16bit, 8bit, real and s32 */
-#else
-#define OUT_FORMATS 2 /* Only up to 16bit */
-#endif
-
-#define OUT_16 0
-#define OUT_8 1
-/* Those are defined but not supported for fixed point decoding! */
-#define OUT_REAL 2 /* Write a floating point sample (that is, one matching the internal real type). */
-#define OUT_S32 3
-
-#ifdef NO_NTOM
-#define NTOM_MAX 1
-#else
-#define NTOM_MAX 8 /* maximum allowed factor for upsampling */
-#define NTOM_MAX_FREQ 96000 /* maximum frequency to upsample to / downsample from */
-#define NTOM_MUL (32768)
-void ntom_set_ntom(mpg123_handle *fr, off_t num);
-#endif
-
-/* Let's collect all possible synth functions here, for an overview.
- If they are actually defined and used depends on preprocessor machinery.
- See synth.c and optimize.h for that, also some special C and assembler files. */
-
-#ifndef NO_16BIT
-/* The signed-16bit-producing variants. */
-int synth_1to1 (real*, int, mpg123_handle*, int);
-int synth_1to1_dither (real*, int, mpg123_handle*, int);
-int synth_1to1_i386 (real*, int, mpg123_handle*, int);
-int synth_1to1_i586 (real*, int, mpg123_handle*, int);
-int synth_1to1_i586_dither(real*, int, mpg123_handle*, int);
-int synth_1to1_mmx (real*, int, mpg123_handle*, int);
-int synth_1to1_3dnow (real*, int, mpg123_handle*, int);
-int synth_1to1_sse (real*, int, mpg123_handle*, int);
-int synth_1to1_stereo_sse (real*, real*, mpg123_handle*);
-int synth_1to1_3dnowext (real*, int, mpg123_handle*, int);
-int synth_1to1_altivec (real*, int, mpg123_handle*, int);
-int synth_1to1_stereo_altivec(real*, real*, mpg123_handle*);
-int synth_1to1_x86_64 (real*, int, mpg123_handle*, int);
-int synth_1to1_stereo_x86_64(real*, real*, mpg123_handle*);
-int synth_1to1_arm (real*, int, mpg123_handle*, int);
-/* This is different, special usage in layer3.c only.
- Hence, the name... and now forget about it.
- Never use it outside that special portion of code inside layer3.c! */
-int absynth_1to1_i486(real*, int, mpg123_handle*, int);
-/* These mono/stereo converters use one of the above for the grunt work. */
-int synth_1to1_mono (real*, mpg123_handle*);
-int synth_1to1_mono2stereo(real*, mpg123_handle*);
-
-/* Sample rate decimation comes in less flavours. */
-#ifndef NO_DOWNSAMPLE
-int synth_2to1 (real*, int, mpg123_handle*, int);
-int synth_2to1_dither (real*, int, mpg123_handle*, int);
-int synth_2to1_i386 (real*, int, mpg123_handle*, int);
-int synth_2to1_mono (real*, mpg123_handle*);
-int synth_2to1_mono2stereo(real*, mpg123_handle*);
-int synth_4to1 (real *,int, mpg123_handle*, int);
-int synth_4to1_dither (real *,int, mpg123_handle*, int);
-int synth_4to1_i386 (real*, int, mpg123_handle*, int);
-int synth_4to1_mono (real*, mpg123_handle*);
-int synth_4to1_mono2stereo(real*, mpg123_handle*);
-#endif
-#ifndef NO_NTOM
-/* NtoM is really just one implementation. */
-int synth_ntom (real *,int, mpg123_handle*, int);
-int synth_ntom_mono (real *, mpg123_handle *);
-int synth_ntom_mono2stereo (real *, mpg123_handle *);
-#endif
-#endif
-
-#ifndef NO_8BIT
-/* The 8bit-producing variants. */
-/* There are direct 8-bit synths and wrappers over a possibly optimized 16bit one. */
-int synth_1to1_8bit (real*, int, mpg123_handle*, int);
-int synth_1to1_8bit_i386 (real*, int, mpg123_handle*, int);
-#ifndef NO_16BIT
-int synth_1to1_8bit_wrap (real*, int, mpg123_handle*, int);
-int synth_1to1_8bit_mono (real*, mpg123_handle*);
-#endif
-int synth_1to1_8bit_mono2stereo(real*, mpg123_handle*);
-#ifndef NO_16BIT
-int synth_1to1_8bit_wrap_mono (real*, mpg123_handle*);
-int synth_1to1_8bit_wrap_mono2stereo(real*, mpg123_handle*);
-#endif
-#ifndef NO_DOWNSAMPLE
-int synth_2to1_8bit (real*, int, mpg123_handle*, int);
-int synth_2to1_8bit_i386 (real*, int, mpg123_handle*, int);
-int synth_2to1_8bit_mono (real*, mpg123_handle*);
-int synth_2to1_8bit_mono2stereo(real*, mpg123_handle*);
-int synth_4to1_8bit (real*, int, mpg123_handle*, int);
-int synth_4to1_8bit_i386 (real*, int, mpg123_handle*, int);
-int synth_4to1_8bit_mono (real*, mpg123_handle*);
-int synth_4to1_8bit_mono2stereo(real*, mpg123_handle*);
-#endif
-#ifndef NO_NTOM
-int synth_ntom_8bit (real*, int, mpg123_handle*, int);
-int synth_ntom_8bit_mono (real*, mpg123_handle*);
-int synth_ntom_8bit_mono2stereo(real*, mpg123_handle*);
-#endif
-#endif
-
-#ifndef REAL_IS_FIXED
-
-#ifndef NO_REAL
-/* The real-producing variants. */
-int synth_1to1_real (real*, int, mpg123_handle*, int);
-int synth_1to1_real_i386 (real*, int, mpg123_handle*, int);
-int synth_1to1_real_sse (real*, int, mpg123_handle*, int);
-int synth_1to1_real_stereo_sse (real*, real*, mpg123_handle*);
-int synth_1to1_real_x86_64 (real*, int, mpg123_handle*, int);
-int synth_1to1_real_stereo_x86_64(real*, real*, mpg123_handle*);
-int synth_1to1_real_altivec (real*, int, mpg123_handle*, int);
-int synth_1to1_real_stereo_altivec(real*, real*, mpg123_handle*);
-int synth_1to1_real_mono (real*, mpg123_handle*);
-int synth_1to1_real_mono2stereo(real*, mpg123_handle*);
-#ifndef NO_DOWNSAMPLE
-int synth_2to1_real (real*, int, mpg123_handle*, int);
-int synth_2to1_real_i386 (real*, int, mpg123_handle*, int);
-int synth_2to1_real_mono (real*, mpg123_handle*);
-int synth_2to1_real_mono2stereo(real*, mpg123_handle*);
-int synth_4to1_real (real*, int, mpg123_handle*, int);
-int synth_4to1_real_i386 (real*, int, mpg123_handle*, int);
-int synth_4to1_real_mono (real*, mpg123_handle*);
-int synth_4to1_real_mono2stereo(real*, mpg123_handle*);
-#endif
-#ifndef NO_NTOM
-int synth_ntom_real (real*, int, mpg123_handle*, int);
-int synth_ntom_real_mono (real*, mpg123_handle*);
-int synth_ntom_real_mono2stereo(real*, mpg123_handle*);
-#endif
-#endif
-
-#ifndef NO_32BIT
-/* 32bit integer */
-int synth_1to1_s32 (real*, int, mpg123_handle*, int);
-int synth_1to1_s32_i386 (real*, int, mpg123_handle*, int);
-int synth_1to1_s32_sse (real*, int, mpg123_handle*, int);
-int synth_1to1_s32_stereo_sse (real*, real*, mpg123_handle*);
-int synth_1to1_s32_x86_64 (real*, int, mpg123_handle*, int);
-int synth_1to1_s32_stereo_x86_64(real*, real*, mpg123_handle*);
-int synth_1to1_s32_altivec (real*, int, mpg123_handle*, int);
-int synth_1to1_s32_stereo_altivec(real*, real*, mpg123_handle*);
-int synth_1to1_s32_mono (real*, mpg123_handle*);
-int synth_1to1_s32_mono2stereo(real*, mpg123_handle*);
-#ifndef NO_DOWNSAMPLE
-int synth_2to1_s32 (real*, int, mpg123_handle*, int);
-int synth_2to1_s32_i386 (real*, int, mpg123_handle*, int);
-int synth_2to1_s32_mono (real*, mpg123_handle*);
-int synth_2to1_s32_mono2stereo(real*, mpg123_handle*);
-int synth_4to1_s32 (real*, int, mpg123_handle*, int);
-int synth_4to1_s32_i386 (real*, int, mpg123_handle*, int);
-int synth_4to1_s32_mono (real*, mpg123_handle*);
-int synth_4to1_s32_mono2stereo(real*, mpg123_handle*);
-#endif
-#ifndef NO_NTOM
-int synth_ntom_s32 (real*, int, mpg123_handle*, int);
-int synth_ntom_s32_mono (real*, mpg123_handle*);
-int synth_ntom_s32_mono2stereo(real*, mpg123_handle*);
-#endif
-#endif
-
-#endif /* FIXED */
-
-
-/* Inside these synth functions, some dct64 variants may be used.
- The special optimized ones that only appear in assembler code are not mentioned here.
- And, generally, these functions are only employed in a matching synth function. */
-void dct64 (real *,real *,real *);
-void dct64_i386 (real *,real *,real *);
-void dct64_altivec(real *,real *,real *);
-void dct64_i486(int*, int* , real*); /* Yeah, of no use outside of synth_i486.c .*/
-
-/* This is used by the layer 3 decoder, one generic function and 3DNow variants. */
-void dct36 (real *,real *,real *,real *,real *);
-void dct36_3dnow (real *,real *,real *,real *,real *);
-void dct36_3dnowext(real *,real *,real *,real *,real *);
-
-/* Tools for NtoM resampling synth, defined in ntom.c . */
-int synth_ntom_set_step(mpg123_handle *fr); /* prepare ntom decoding */
-unsigned long ntom_val(mpg123_handle *fr, off_t frame); /* compute ntom_val for frame offset */
-/* Frame and sample offsets. */
-#ifndef NO_NTOM
-/*
- Outsamples of _this_ frame.
- To be exact: The samples to be expected from the next frame decode (using the current ntom_val). When you already decoded _this_ frame, this is the number of samples to be expected from the next one.
-*/
-off_t ntom_frame_outsamples(mpg123_handle *fr);
-/* Total out/insample offset. */
-off_t ntom_frmouts(mpg123_handle *fr, off_t frame);
-off_t ntom_ins2outs(mpg123_handle *fr, off_t ins);
-off_t ntom_frameoff(mpg123_handle *fr, off_t soff);
-#endif
-
-/* Initialization of any static data that majy be needed at runtime.
- Make sure you call these once before it is too late. */
-#ifndef NO_LAYER3
-void init_layer3(void);
-real init_layer3_gainpow2(mpg123_handle *fr, int i);
-void init_layer3_stuff(mpg123_handle *fr, real (*gainpow2)(mpg123_handle *fr, int i));
-#endif
-#ifndef NO_LAYER12
-void init_layer12(void);
-real* init_layer12_table(mpg123_handle *fr, real *table, int m);
-void init_layer12_stuff(mpg123_handle *fr, real* (*init_table)(mpg123_handle *fr, real *table, int m));
-#endif
-
-void prepare_decode_tables(void);
-
-extern real *pnts[5]; /* tabinit provides, dct64 needs */
-
-/* Runtime (re)init functions; needed more often. */
-void make_decode_tables(mpg123_handle *fr); /* For every volume change. */
-/* Stuff needed after updating synth setup (see set_synth_functions()). */
-
-#ifdef OPT_MMXORSSE
-/* Special treatment for mmx-like decoders, these functions go into the slots below. */
-void make_decode_tables_mmx(mpg123_handle *fr);
-#ifndef NO_LAYER3
-real init_layer3_gainpow2_mmx(mpg123_handle *fr, int i);
-#endif
-#ifndef NO_LAYER12
-real* init_layer12_table_mmx(mpg123_handle *fr, real *table, int m);
-#endif
-#endif
-
-#ifndef NO_8BIT
-/* Needed when switching to 8bit output. */
-int make_conv16to8_table(mpg123_handle *fr);
-#endif
-
-/* These are the actual workers.
- They operate on the parsed frame data and handle decompression to audio samples.
- The synth functions defined above are called from inside the layer handlers. */
-
-#ifndef NO_LAYER3
-int do_layer3(mpg123_handle *fr);
-#endif
-#ifndef NO_LAYER2
-int do_layer2(mpg123_handle *fr);
-#endif
-#ifndef NO_LAYER1
-int do_layer1(mpg123_handle *fr);
-#endif
-/* There's an 3DNow counterpart in asm. */
-void do_equalizer(real *bandPtr,int channel, real equalizer[2][32]);
-
-#endif
diff --git a/src/mpg123/libmpg123/equalizer.c b/src/mpg123/libmpg123/equalizer.c
deleted file mode 100644
index bc5d5d9..0000000
--- a/src/mpg123/libmpg123/equalizer.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- equalizer.c: equalizer settings
-
- copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-*/
-
-
-#include "mpg123lib_intern.h"
-
-void do_equalizer(real *bandPtr,int channel, real equalizer[2][32])
-{
- int i;
- for(i=0;i<32;i++)
- bandPtr[i] = REAL_MUL(bandPtr[i], equalizer[channel][i]);
-}
diff --git a/src/mpg123/libmpg123/feature.c b/src/mpg123/libmpg123/feature.c
deleted file mode 100644
index 1972388..0000000
--- a/src/mpg123/libmpg123/feature.c
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "mpg123lib_intern.h"
-
-int mpg123_feature(const enum mpg123_feature_set key)
-{
- switch(key)
- {
- case MPG123_FEATURE_ABI_UTF8OPEN:
-#ifdef WANT_WIN32_UNICODE
- return 1;
-#else
- return 0;
-#endif /* WANT_WIN32_UNICODE */
-
- case MPG123_FEATURE_OUTPUT_8BIT:
-#ifdef NO_8BIT
- return 0;
-#else
- return 1;
-#endif /* mpg123_output_8bit */
-
- case MPG123_FEATURE_OUTPUT_16BIT:
-#ifdef NO_16BIT
- return 0;
-#else
- return 1;
-#endif /* mpg123_output_16bit */
-
- case MPG123_FEATURE_OUTPUT_32BIT:
-#ifdef NO_32BIT
- return 0;
-#else
- return 1;
-#endif /* mpg123_output_32bit */
-
- case MPG123_FEATURE_PARSE_ID3V2:
-#ifdef NO_ID3V2
- return 0;
-#else
- return 1;
-#endif /* NO_ID3V2 */
-
- case MPG123_FEATURE_DECODE_LAYER1:
-#ifdef NO_LAYER1
- return 0;
-#else
- return 1;
-#endif /* NO_LAYER1 */
-
- case MPG123_FEATURE_DECODE_LAYER2:
-#ifdef NO_LAYER2
- return 0;
-#else
- return 1;
-#endif /* NO_LAYER2 */
-
- case MPG123_FEATURE_DECODE_LAYER3:
-#ifdef NO_LAYER3
- return 0;
-#else
- return 1;
-#endif /* NO_LAYER3 */
-
- case MPG123_FEATURE_DECODE_ACCURATE:
-#ifdef ACCURATE_ROUNDING
- return 1;
-#else
- return 0;
-#endif /* ACCURATE_ROUNDING */
-
- case MPG123_FEATURE_DECODE_DOWNSAMPLE:
-#ifdef NO_DOWNSAMPLE
- return 0;
-#else
- return 1;
-#endif /* NO_DOWNSAMPLE */
-
- case MPG123_FEATURE_DECODE_NTOM:
-#ifdef NO_NTOM
- return 0;
-#else
- return 1;
-#endif /* NO_NTOM */
-
- case MPG123_FEATURE_PARSE_ICY:
-#ifdef NO_ICY
- return 0;
-#else
- return 1;
-#endif /* NO_ICY */
-
- case MPG123_FEATURE_INDEX:
-#ifdef FRAME_INDEX
- return 1;
-#else
- return 0;
-#endif /* FRAME_INDEX */
- case MPG123_FEATURE_TIMEOUT_READ:
-#ifdef TIMEOUT_READ
- return 1;
-#else
- return 0;
-#endif
-
- default: return 0;
- }
-}
diff --git a/src/mpg123/libmpg123/format.c b/src/mpg123/libmpg123/format.c
deleted file mode 100644
index 0b37bfa..0000000
--- a/src/mpg123/libmpg123/format.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- format:routines to deal with audio (output) format
-
- copyright 2008-9 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis, starting with parts of the old audio.c, with only faintly manage to show now
-*/
-
-#include "mpg123lib_intern.h"
-#include "debug.h"
-
-/* static int chans[NUM_CHANNELS] = { 1 , 2 }; */
-static const long my_rates[MPG123_RATES] = /* only the standard rates */
-{
- 8000, 11025, 12000,
- 16000, 22050, 24000,
- 32000, 44100, 48000,
-};
-
-static const int my_encodings[MPG123_ENCODINGS] =
-{
- MPG123_ENC_SIGNED_16,
- MPG123_ENC_UNSIGNED_16,
- MPG123_ENC_SIGNED_32,
- MPG123_ENC_UNSIGNED_32,
- MPG123_ENC_FLOAT_32,
- MPG123_ENC_FLOAT_64,
- MPG123_ENC_SIGNED_8,
- MPG123_ENC_UNSIGNED_8,
- MPG123_ENC_ULAW_8,
- MPG123_ENC_ALAW_8
-};
-
-/* Only one type of float is supported. */
-# ifdef REAL_IS_FLOAT
-# define MPG123_FLOAT_ENC MPG123_ENC_FLOAT_32
-# else
-# define MPG123_FLOAT_ENC MPG123_ENC_FLOAT_64
-# endif
-
-/* The list of actually possible encodings. */
-static const int good_encodings[] =
-{
-#ifndef NO_16BIT
- MPG123_ENC_SIGNED_16,
- MPG123_ENC_UNSIGNED_16,
-#endif
-#ifndef NO_32BIT
- MPG123_ENC_SIGNED_32,
- MPG123_ENC_UNSIGNED_32,
-#endif
-#ifndef NO_REAL
- MPG123_FLOAT_ENC,
-#endif
-#ifndef NO_8BIT
- MPG123_ENC_SIGNED_8,
- MPG123_ENC_UNSIGNED_8,
- MPG123_ENC_ULAW_8,
- MPG123_ENC_ALAW_8
-#endif
-};
-
-/* Check if encoding is a valid one in this build.
- ...lazy programming: linear search. */
-static int good_enc(const int enc)
-{
- size_t i;
- for(i=0; i<sizeof(good_encodings)/sizeof(int); ++i)
- if(enc == good_encodings[i]) return TRUE;
-
- return FALSE;
-}
-
-void attribute_align_arg mpg123_rates(const long **list, size_t *number)
-{
- if(list != NULL) *list = my_rates;
- if(number != NULL) *number = sizeof(my_rates)/sizeof(long);
-}
-
-/* Now that's a bit tricky... One build of the library knows only a subset of the encodings. */
-void attribute_align_arg mpg123_encodings(const int **list, size_t *number)
-{
- if(list != NULL) *list = good_encodings;
- if(number != NULL) *number = sizeof(good_encodings)/sizeof(int);
-}
-
-/* char audio_caps[NUM_CHANNELS][MPG123_RATES+1][MPG123_ENCODINGS]; */
-
-static int rate2num(mpg123_pars *mp, long r)
-{
- int i;
- for(i=0;i<MPG123_RATES;i++) if(my_rates[i] == r) return i;
-#ifndef NO_NTOM
- if(mp && mp->force_rate != 0 && mp->force_rate == r) return MPG123_RATES;
-#endif
-
- return -1;
-}
-
-static int enc2num(int encoding)
-{
- int i;
- for(i=0;i<MPG123_ENCODINGS;++i)
- if(my_encodings[i] == encoding) return i;
-
- return -1;
-}
-
-static int cap_fit(mpg123_handle *fr, struct audioformat *nf, int f0, int f2)
-{
- int i;
- int c = nf->channels-1;
- int rn = rate2num(&fr->p, nf->rate);
- if(rn >= 0) for(i=f0;i<f2;i++)
- {
- if(fr->p.audio_caps[c][rn][i])
- {
- nf->encoding = my_encodings[i];
- return 1;
- }
- }
- return 0;
-}
-
-static int freq_fit(mpg123_handle *fr, struct audioformat *nf, int f0, int f2)
-{
- nf->rate = frame_freq(fr)>>fr->p.down_sample;
- if(cap_fit(fr,nf,f0,f2)) return 1;
- nf->rate>>=1;
- if(cap_fit(fr,nf,f0,f2)) return 1;
- nf->rate>>=1;
- if(cap_fit(fr,nf,f0,f2)) return 1;
-#ifndef NO_NTOM
- /* If nothing worked, try the other rates, only without constrains from user.
- In case you didn't guess: We enable flexible resampling if we find a working rate. */
- if(!fr->p.force_rate && fr->p.down_sample == 0)
- {
- int i;
- int c = nf->channels-1;
- int rn = rate2num(&fr->p, frame_freq(fr));
- int rrn;
- if(rn < 0) return 0;
- /* Try higher rates first. */
- for(i=f0;i<f2;i++) for(rrn=rn+1; rrn<MPG123_RATES; ++rrn)
- if(fr->p.audio_caps[c][rrn][i])
- {
- nf->rate = my_rates[rrn];
- nf->encoding = my_encodings[i];
- return 1;
- }
- /* Then lower rates. */
- for(i=f0;i<f2;i++) for(rrn=rn-1; rrn>=0; --rrn)
- if(fr->p.audio_caps[c][rrn][i])
- {
- nf->rate = my_rates[rrn];
- nf->encoding = my_encodings[i];
- return 1;
- }
- }
-#endif
-
- return 0;
-}
-
-/* match constraints against supported audio formats, store possible setup in frame
- return: -1: error; 0: no format change; 1: format change */
-int frame_output_format(mpg123_handle *fr)
-{
- struct audioformat nf;
- int f0=0;
- int f2=MPG123_ENCODINGS; /* Omit the 32bit and float encodings. */
- mpg123_pars *p = &fr->p;
- /* initialize new format, encoding comes later */
- nf.channels = fr->stereo;
-
- /* All this forcing should be removed in favour of the capabilities table... */
- if(p->flags & MPG123_FORCE_8BIT)
- {
- f0 = 6;
- f2 = 10;
- }
- if(p->flags & MPG123_FORCE_FLOAT)
- {
- f0 = 4;
- f2 = 6;
- }
-
- /* force stereo is stronger */
- if(p->flags & MPG123_FORCE_MONO) nf.channels = 1;
- if(p->flags & MPG123_FORCE_STEREO) nf.channels = 2;
-
-#ifndef NO_NTOM
- if(p->force_rate)
- {
- nf.rate = p->force_rate;
- if(cap_fit(fr,&nf,f0,2)) goto end; /* 16bit encodings */
- if(cap_fit(fr,&nf,f0<=2 ? 2 : f0,f2)) goto end; /* 8bit encodings */
-
- /* try again with different stereoness */
- if(nf.channels == 2 && !(p->flags & MPG123_FORCE_STEREO)) nf.channels = 1;
- else if(nf.channels == 1 && !(p->flags & MPG123_FORCE_MONO)) nf.channels = 2;
-
- if(cap_fit(fr,&nf,f0,2)) goto end; /* 16bit encodings */
- if(cap_fit(fr,&nf,f0<=2 ? 2 : f0,f2)) goto end; /* 8bit encodings */
-
- if(NOQUIET)
- error3( "Unable to set up output format! Constraints: %s%s%liHz.",
- ( p->flags & MPG123_FORCE_STEREO ? "stereo, " :
- (p->flags & MPG123_FORCE_MONO ? "mono, " : "") ),
- (p->flags & MPG123_FORCE_8BIT ? "8bit, " : ""),
- p->force_rate );
-/* if(NOQUIET && p->verbose <= 1) print_capabilities(fr); */
-
- fr->err = MPG123_BAD_OUTFORMAT;
- return -1;
- }
-#endif
-
- if(freq_fit(fr, &nf, f0, 2)) goto end; /* try rates with 16bit */
- if(freq_fit(fr, &nf, f0<=2 ? 2 : f0, f2)) goto end; /* ... 8bit */
-
- /* try again with different stereoness */
- if(nf.channels == 2 && !(p->flags & MPG123_FORCE_STEREO)) nf.channels = 1;
- else if(nf.channels == 1 && !(p->flags & MPG123_FORCE_MONO)) nf.channels = 2;
-
- if(freq_fit(fr, &nf, f0, 2)) goto end; /* try rates with 16bit */
- if(freq_fit(fr, &nf, f0<=2 ? 2 : f0, f2)) goto end; /* ... 8bit */
-
- /* Here is the _bad_ end. */
- if(NOQUIET)
- {
- error5( "Unable to set up output format! Constraints: %s%s%li, %li or %liHz.",
- ( p->flags & MPG123_FORCE_STEREO ? "stereo, " :
- (p->flags & MPG123_FORCE_MONO ? "mono, " : "") ),
- (p->flags & MPG123_FORCE_8BIT ? "8bit, " : ""),
- frame_freq(fr), frame_freq(fr)>>1, frame_freq(fr)>>2 );
- }
-/* if(NOQUIET && p->verbose <= 1) print_capabilities(fr); */
-
- fr->err = MPG123_BAD_OUTFORMAT;
- return -1;
-
-end: /* Here is the _good_ end. */
- /* we had a successful match, now see if there's a change */
- if(nf.rate == fr->af.rate && nf.channels == fr->af.channels && nf.encoding == fr->af.encoding)
- {
- debug2("Old format with %i channels, and FORCE_MONO=%li", nf.channels, p->flags & MPG123_FORCE_MONO);
- return 0; /* the same format as before */
- }
- else /* a new format */
- {
- debug1("New format with %i channels!", nf.channels);
- fr->af.rate = nf.rate;
- fr->af.channels = nf.channels;
- fr->af.encoding = nf.encoding;
- /* Cache the size of one sample in bytes, for ease of use. */
- if(fr->af.encoding & MPG123_ENC_8)
- fr->af.encsize = 1;
- else if(fr->af.encoding & MPG123_ENC_16)
- fr->af.encsize = 2;
- else if(fr->af.encoding & MPG123_ENC_32 || fr->af.encoding == MPG123_ENC_FLOAT_32)
- fr->af.encsize = 4;
- else if(fr->af.encoding == MPG123_ENC_FLOAT_64)
- fr->af.encsize = 8;
- else
- {
- if(NOQUIET) error1("Some unknown encoding??? (%i)", fr->af.encoding);
-
- fr->err = MPG123_BAD_OUTFORMAT;
- return -1;
- }
- return 1;
- }
-}
-
-int attribute_align_arg mpg123_format_none(mpg123_handle *mh)
-{
- int r;
- if(mh == NULL) return MPG123_ERR;
-
- r = mpg123_fmt_none(&mh->p);
- if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; }
-
- return r;
-}
-
-int attribute_align_arg mpg123_fmt_none(mpg123_pars *mp)
-{
- if(mp == NULL) return MPG123_BAD_PARS;
-
- if(PVERB(mp,3)) fprintf(stderr, "Note: Disabling all formats.\n");
-
- memset(mp->audio_caps,0,sizeof(mp->audio_caps));
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_format_all(mpg123_handle *mh)
-{
- int r;
- if(mh == NULL) return MPG123_ERR;
-
- r = mpg123_fmt_all(&mh->p);
- if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; }
-
- return r;
-}
-
-int attribute_align_arg mpg123_fmt_all(mpg123_pars *mp)
-{
- size_t rate, ch, enc;
- if(mp == NULL) return MPG123_BAD_PARS;
-
- if(PVERB(mp,3)) fprintf(stderr, "Note: Enabling all formats.\n");
-
- for(ch=0; ch < NUM_CHANNELS; ++ch)
- for(rate=0; rate < MPG123_RATES+1; ++rate)
- for(enc=0; enc < MPG123_ENCODINGS; ++enc)
- mp->audio_caps[ch][rate][enc] = good_enc(my_encodings[enc]) ? 1 : 0;
-
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_format(mpg123_handle *mh, long rate, int channels, int encodings)
-{
- int r;
- if(mh == NULL) return MPG123_ERR;
- r = mpg123_fmt(&mh->p, rate, channels, encodings);
- if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; }
-
- return r;
-}
-
-int attribute_align_arg mpg123_fmt(mpg123_pars *mp, long rate, int channels, int encodings)
-{
- int ie, ic, ratei;
- int ch[2] = {0, 1};
- if(mp == NULL) return MPG123_BAD_PARS;
- if(!(channels & (MPG123_MONO|MPG123_STEREO))) return MPG123_BAD_CHANNEL;
-
- if(PVERB(mp,3)) fprintf(stderr, "Note: Want to enable format %li/%i for encodings 0x%x.\n", rate, channels, encodings);
-
- if(!(channels & MPG123_STEREO)) ch[1] = 0; /* {0,0} */
- else if(!(channels & MPG123_MONO)) ch[0] = 1; /* {1,1} */
- ratei = rate2num(mp, rate);
- if(ratei < 0) return MPG123_BAD_RATE;
-
- /* now match the encodings */
- for(ic = 0; ic < 2; ++ic)
- {
- for(ie = 0; ie < MPG123_ENCODINGS; ++ie)
- if(good_enc(my_encodings[ie]) && ((my_encodings[ie] & encodings) == my_encodings[ie]))
- mp->audio_caps[ch[ic]][ratei][ie] = 1;
-
- if(ch[0] == ch[1]) break; /* no need to do it again */
- }
-
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_format_support(mpg123_handle *mh, long rate, int encoding)
-{
- if(mh == NULL) return 0;
- else return mpg123_fmt_support(&mh->p, rate, encoding);
-}
-
-int attribute_align_arg mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding)
-{
- int ch = 0;
- int ratei, enci;
- ratei = rate2num(mp, rate);
- enci = enc2num(encoding);
- if(mp == NULL || ratei < 0 || enci < 0) return 0;
- if(mp->audio_caps[0][ratei][enci]) ch |= MPG123_MONO;
- if(mp->audio_caps[1][ratei][enci]) ch |= MPG123_STEREO;
- return ch;
-}
-
-/* Call this one to ensure that any valid format will be something different than this. */
-void invalidate_format(struct audioformat *af)
-{
- af->encoding = 0;
- af->rate = 0;
- af->channels = 0;
-}
-
-/* take into account: channels, bytes per sample -- NOT resampling!*/
-off_t samples_to_bytes(mpg123_handle *fr , off_t s)
-{
- return s * fr->af.encsize * fr->af.channels;
-}
-
-off_t bytes_to_samples(mpg123_handle *fr , off_t b)
-{
- return b / fr->af.encsize / fr->af.channels;
-}
diff --git a/src/mpg123/libmpg123/frame.c b/src/mpg123/libmpg123/frame.c
deleted file mode 100644
index b4ed750..0000000
--- a/src/mpg123/libmpg123/frame.c
+++ /dev/null
@@ -1,988 +0,0 @@
-/*
- frame: Heap of routines dealing with the core mpg123 data structure.
-
- copyright 2008-2010 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#include "mpg123lib_intern.h"
-#include "getcpuflags.h"
-#include "debug.h"
-
-static void frame_fixed_reset(mpg123_handle *fr);
-
-/* that's doubled in decode_ntom.c */
-#define NTOM_MUL (32768)
-
-#define aligned_pointer(p, type, alignment) align_the_pointer(p, alignment)
-static void *align_the_pointer(void *base, unsigned int alignment)
-{
- /*
- Work in unsigned integer realm, explicitly.
- Tricking the compiler into integer operations like % by invoking base-NULL is dangerous: It results into ptrdiff_t, which gets negative on big addresses. Big screw up, that.
- I try to do it "properly" here: Casting only to uintptr_t and no artihmethic with void*.
- */
- uintptr_t baseval = (uintptr_t)(char*)base;
- uintptr_t aoff = baseval % alignment;
-
- debug3("align_the_pointer: pointer %p is off by %u from %u",
- base, (unsigned int)aoff, alignment);
-
- if(aoff) return (char*)base+alignment-aoff;
- else return base;
-}
-
-void frame_default_pars(mpg123_pars *mp)
-{
- mp->outscale = 1.0;
-#ifdef GAPLESS
- mp->flags = MPG123_GAPLESS;
-#else
- mp->flags = 0;
-#endif
-#ifndef NO_NTOM
- mp->force_rate = 0;
-#endif
- mp->down_sample = 0;
- mp->rva = 0;
- mp->halfspeed = 0;
- mp->doublespeed = 0;
- mp->verbose = 0;
-#ifndef NO_ICY
- mp->icy_interval = 0;
-#endif
- mp->timeout = 0;
- mp->resync_limit = 1024;
-#ifdef FRAME_INDEX
- mp->index_size = INDEX_SIZE;
-#endif
- mp->preframes = 4; /* That's good for layer 3 ISO compliance bitstream. */
- mpg123_fmt_all(mp);
-}
-
-void frame_init(mpg123_handle *fr)
-{
- frame_init_par(fr, NULL);
-}
-
-void frame_init_par(mpg123_handle *fr, mpg123_pars *mp)
-{
- fr->own_buffer = FALSE;
- fr->buffer.data = NULL;
- fr->rawbuffs = NULL;
- fr->rawbuffss = 0;
- fr->rawdecwin = NULL;
- fr->rawdecwins = 0;
-#ifndef NO_8BIT
- fr->conv16to8_buf = NULL;
-#endif
-#ifdef OPT_DITHER
- fr->dithernoise = NULL;
-#endif
- fr->layerscratch = NULL;
- fr->xing_toc = NULL;
- fr->cpu_opts.type = defdec();
- fr->cpu_opts.class = decclass(fr->cpu_opts.type);
-#ifndef NO_NTOM
- /* these two look unnecessary, check guarantee for synth_ntom_set_step (in control_generic, even)! */
- fr->ntom_val[0] = NTOM_MUL>>1;
- fr->ntom_val[1] = NTOM_MUL>>1;
- fr->ntom_step = NTOM_MUL;
-#endif
- /* unnecessary: fr->buffer.size = fr->buffer.fill = 0; */
- mpg123_reset_eq(fr);
- init_icy(&fr->icy);
- init_id3(fr);
- /* frame_outbuffer is missing... */
- /* frame_buffers is missing... that one needs cpu opt setting! */
- /* after these... frame_reset is needed before starting full decode */
- invalidate_format(&fr->af);
- fr->rdat.r_read = NULL;
- fr->rdat.r_lseek = NULL;
- fr->rdat.iohandle = NULL;
- fr->rdat.r_read_handle = NULL;
- fr->rdat.r_lseek_handle = NULL;
- fr->rdat.cleanup_handle = NULL;
- fr->wrapperdata = NULL;
- fr->wrapperclean = NULL;
- fr->decoder_change = 1;
- fr->err = MPG123_OK;
- if(mp == NULL) frame_default_pars(&fr->p);
- else memcpy(&fr->p, mp, sizeof(struct mpg123_pars_struct));
-
- fr->down_sample = 0; /* Initialize to silence harmless errors when debugging. */
- frame_fixed_reset(fr); /* Reset only the fixed data, dynamic buffers are not there yet! */
- fr->synth = NULL;
- fr->synth_mono = NULL;
- fr->make_decode_tables = NULL;
-#ifdef FRAME_INDEX
- fi_init(&fr->index);
- frame_index_setup(fr); /* Apply the size setting. */
-#endif
-}
-
-#ifdef OPT_DITHER
-/* Also, only allocate the memory for the table on demand.
- In future, one could create special noise for different sampling frequencies(?). */
-int frame_dither_init(mpg123_handle *fr)
-{
- /* run-time dither noise table generation */
- if(fr->dithernoise == NULL)
- {
- fr->dithernoise = malloc(sizeof(float)*DITHERSIZE);
- if(fr->dithernoise == NULL) return 0;
-
- dither_table_init(fr->dithernoise);
- }
- return 1;
-}
-#endif
-
-mpg123_pars attribute_align_arg *mpg123_new_pars(int *error)
-{
- mpg123_pars *mp = malloc(sizeof(struct mpg123_pars_struct));
- if(mp != NULL){ frame_default_pars(mp); if(error != NULL) *error = MPG123_OK; }
- else if(error != NULL) *error = MPG123_OUT_OF_MEM;
- return mp;
-}
-
-void attribute_align_arg mpg123_delete_pars(mpg123_pars* mp)
-{
- if(mp != NULL) free(mp);
-}
-
-int attribute_align_arg mpg123_reset_eq(mpg123_handle *mh)
-{
- int i;
- mh->have_eq_settings = 0;
- for(i=0; i < 32; ++i) mh->equalizer[0][i] = mh->equalizer[1][i] = DOUBLE_TO_REAL(1.0);
-
- return MPG123_OK;
-}
-
-int frame_outbuffer(mpg123_handle *fr)
-{
- size_t size = mpg123_safe_buffer()*AUDIOBUFSIZE;
- if(!fr->own_buffer) fr->buffer.data = NULL;
- if(fr->buffer.data != NULL && fr->buffer.size != size)
- {
- free(fr->buffer.data);
- fr->buffer.data = NULL;
- }
- fr->buffer.size = size;
- if(fr->buffer.data == NULL) fr->buffer.data = (unsigned char*) malloc(fr->buffer.size);
- if(fr->buffer.data == NULL)
- {
- fr->err = MPG123_OUT_OF_MEM;
- return -1;
- }
- fr->own_buffer = TRUE;
- fr->buffer.fill = 0;
- return 0;
-}
-
-int attribute_align_arg mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size)
-{
- if(data == NULL || size < mpg123_safe_buffer())
- {
- mh->err = MPG123_BAD_BUFFER;
- return MPG123_ERR;
- }
- if(mh->own_buffer && mh->buffer.data != NULL) free(mh->buffer.data);
- mh->own_buffer = FALSE;
- mh->buffer.data = data;
- mh->buffer.size = size;
- mh->buffer.fill = 0;
- return MPG123_OK;
-}
-
-#ifdef FRAME_INDEX
-int frame_index_setup(mpg123_handle *fr)
-{
- int ret = MPG123_ERR;
- if(fr->p.index_size >= 0)
- { /* Simple fixed index. */
- fr->index.grow_size = 0;
- debug1("resizing index to %li", fr->p.index_size);
- ret = fi_resize(&fr->index, (size_t)fr->p.index_size);
- debug2("index resized... %lu at %p", (unsigned long)fr->index.size, (void*)fr->index.data);
- }
- else
- { /* A growing index. We give it a start, though. */
- fr->index.grow_size = (size_t)(- fr->p.index_size);
- if(fr->index.size < fr->index.grow_size)
- ret = fi_resize(&fr->index, fr->index.grow_size);
- else
- ret = MPG123_OK; /* We have minimal size already... and since growing is OK... */
- }
- debug2("set up frame index of size %lu (ret=%i)", (unsigned long)fr->index.size, ret);
-
- return ret;
-}
-#endif
-
-static void frame_decode_buffers_reset(mpg123_handle *fr)
-{
- memset(fr->rawbuffs, 0, fr->rawbuffss);
-}
-
-int frame_buffers(mpg123_handle *fr)
-{
- int buffssize = 0;
- debug1("frame %p buffer", (void*)fr);
-/*
- the used-to-be-static buffer of the synth functions, has some subtly different types/sizes
-
- 2to1, 4to1, ntom, generic, i386: real[2][2][0x110]
- mmx, sse: short[2][2][0x110]
- i586(_dither): 4352 bytes; int/long[2][2][0x110]
- i486: int[2][2][17*FIR_BUFFER_SIZE]
- altivec: static real __attribute__ ((aligned (16))) buffs[4][4][0x110]
-
- Huh, altivec looks like fun. Well, let it be large... then, the 16 byte alignment seems to be implicit on MacOSX malloc anyway.
- Let's make a reasonable attempt to allocate enough memory...
- Keep in mind: biggest ones are i486 and altivec (mutually exclusive!), then follows i586 and normal real.
- mmx/sse use short but also real for resampling.
- Thus, minimum is 2*2*0x110*sizeof(real).
-*/
- if(fr->cpu_opts.type == altivec) buffssize = 4*4*0x110*sizeof(real);
-#ifdef OPT_I486
- else if(fr->cpu_opts.type == ivier) buffssize = 2*2*17*FIR_BUFFER_SIZE*sizeof(int);
-#endif
- else if(fr->cpu_opts.type == ifuenf || fr->cpu_opts.type == ifuenf_dither || fr->cpu_opts.type == dreidnow)
- buffssize = 2*2*0x110*4; /* don't rely on type real, we need 4352 bytes */
-
- if(2*2*0x110*sizeof(real) > buffssize)
- buffssize = 2*2*0x110*sizeof(real);
- buffssize += 15; /* For 16-byte alignment (SSE likes that). */
-
- if(fr->rawbuffs != NULL && fr->rawbuffss != buffssize)
- {
- free(fr->rawbuffs);
- fr->rawbuffs = NULL;
- }
-
- if(fr->rawbuffs == NULL) fr->rawbuffs = (unsigned char*) malloc(buffssize);
- if(fr->rawbuffs == NULL) return -1;
- fr->rawbuffss = buffssize;
- fr->short_buffs[0][0] = aligned_pointer(fr->rawbuffs,short,16);
- fr->short_buffs[0][1] = fr->short_buffs[0][0] + 0x110;
- fr->short_buffs[1][0] = fr->short_buffs[0][1] + 0x110;
- fr->short_buffs[1][1] = fr->short_buffs[1][0] + 0x110;
- fr->real_buffs[0][0] = aligned_pointer(fr->rawbuffs,real,16);
- fr->real_buffs[0][1] = fr->real_buffs[0][0] + 0x110;
- fr->real_buffs[1][0] = fr->real_buffs[0][1] + 0x110;
- fr->real_buffs[1][1] = fr->real_buffs[1][0] + 0x110;
-#ifdef OPT_I486
- if(fr->cpu_opts.type == ivier)
- {
- fr->int_buffs[0][0] = (int*) fr->rawbuffs;
- fr->int_buffs[0][1] = fr->int_buffs[0][0] + 17*FIR_BUFFER_SIZE;
- fr->int_buffs[1][0] = fr->int_buffs[0][1] + 17*FIR_BUFFER_SIZE;
- fr->int_buffs[1][1] = fr->int_buffs[1][0] + 17*FIR_BUFFER_SIZE;
- }
-#endif
-#ifdef OPT_ALTIVEC
- if(fr->cpu_opts.type == altivec)
- {
- int i,j;
- fr->areal_buffs[0][0] = (real*) fr->rawbuffs;
- for(i=0; i<4; ++i) for(j=0; j<4; ++j)
- fr->areal_buffs[i][j] = fr->areal_buffs[0][0] + (i*4+j)*0x110;
- }
-#endif
- /* now the different decwins... all of the same size, actually */
- /* The MMX ones want 32byte alignment, which I'll try to ensure manually */
- {
- int decwin_size = (512+32)*sizeof(real);
-#ifdef OPT_MMXORSSE
-#ifdef OPT_MULTI
- if(fr->cpu_opts.class == mmxsse)
- {
-#endif
- /* decwin_mmx will share, decwins will be appended ... sizeof(float)==4 */
- if(decwin_size < (512+32)*4) decwin_size = (512+32)*4;
-
- /* the second window + alignment zone -- we align for 32 bytes for SSE as
- requirement, 64 byte for matching cache line size (that matters!) */
- decwin_size += (512+32)*4 + 63;
- /* (512+32)*4/32 == 2176/32 == 68, so one decwin block retains alignment for 32 or 64 bytes */
-#ifdef OPT_MULTI
- }
-#endif
-#endif
-#if defined(OPT_ALTIVEC) || defined(OPT_ARM)
- if(decwin_size < (512+32)*4) decwin_size = (512+32)*4;
- decwin_size += 512*4;
-#endif
- /* Hm, that's basically realloc() ... */
- if(fr->rawdecwin != NULL && fr->rawdecwins != decwin_size)
- {
- free(fr->rawdecwin);
- fr->rawdecwin = NULL;
- }
-
- if(fr->rawdecwin == NULL)
- fr->rawdecwin = (unsigned char*) malloc(decwin_size);
-
- if(fr->rawdecwin == NULL) return -1;
-
- fr->rawdecwins = decwin_size;
- fr->decwin = (real*) fr->rawdecwin;
-#ifdef OPT_MMXORSSE
-#ifdef OPT_MULTI
- if(fr->cpu_opts.class == mmxsse)
- {
-#endif
- /* align decwin, assign that to decwin_mmx, append decwins */
- /* I need to add to decwin what is missing to the next full 64 byte -- also I want to make gcc -pedantic happy... */
- fr->decwin = aligned_pointer(fr->rawdecwin,real,64);
- debug1("aligned decwin: %p", (void*)fr->decwin);
- fr->decwin_mmx = (float*)fr->decwin;
- fr->decwins = fr->decwin_mmx+512+32;
-#ifdef OPT_MULTI
- }
- else debug("no decwins/decwin_mmx for that class");
-#endif
-#endif
- }
-
- /* Layer scratch buffers are of compile-time fixed size, so allocate only once. */
- if(fr->layerscratch == NULL)
- {
- /* Allocate specific layer1/2/3 buffers, so that we know they'll work for SSE. */
- size_t scratchsize = 0;
- real *scratcher;
-#ifndef NO_LAYER1
- scratchsize += sizeof(real) * 2 * SBLIMIT;
-#endif
-#ifndef NO_LAYER2
- scratchsize += sizeof(real) * 2 * 4 * SBLIMIT;
-#endif
-#ifndef NO_LAYER3
- scratchsize += sizeof(real) * 2 * SBLIMIT * SSLIMIT; /* hybrid_in */
- scratchsize += sizeof(real) * 2 * SSLIMIT * SBLIMIT; /* hybrid_out */
-#endif
- /*
- Now figure out correct alignment:
- We need 16 byte minimum, smallest unit of the blocks is 2*SBLIMIT*sizeof(real), which is 64*4=256. Let's do 64bytes as heuristic for cache line (as proven useful in buffs above).
- */
- fr->layerscratch = malloc(scratchsize+63);
- if(fr->layerscratch == NULL) return -1;
-
- /* Get aligned part of the memory, then divide it up. */
- scratcher = aligned_pointer(fr->layerscratch,real,64);
- /* Those funky pointer casts silence compilers...
- One might change the code at hand to really just use 1D arrays, but in practice, that would not make a (positive) difference. */
-#ifndef NO_LAYER1
- fr->layer1.fraction = (real(*)[SBLIMIT])scratcher;
- scratcher += 2 * SBLIMIT;
-#endif
-#ifndef NO_LAYER2
- fr->layer2.fraction = (real(*)[4][SBLIMIT])scratcher;
- scratcher += 2 * 4 * SBLIMIT;
-#endif
-#ifndef NO_LAYER3
- fr->layer3.hybrid_in = (real(*)[SBLIMIT][SSLIMIT])scratcher;
- scratcher += 2 * SBLIMIT * SSLIMIT;
- fr->layer3.hybrid_out = (real(*)[SSLIMIT][SBLIMIT])scratcher;
- scratcher += 2 * SSLIMIT * SBLIMIT;
-#endif
- /* Note: These buffers don't need resetting here. */
- }
-
- /* Only reset the buffers we created just now. */
- frame_decode_buffers_reset(fr);
-
- debug1("frame %p buffer done", (void*)fr);
- return 0;
-}
-
-int frame_buffers_reset(mpg123_handle *fr)
-{
- fr->buffer.fill = 0; /* hm, reset buffer fill... did we do a flush? */
- fr->bsnum = 0;
- /* Wondering: could it be actually _wanted_ to retain buffer contents over different files? (special gapless / cut stuff) */
- fr->bsbuf = fr->bsspace[1];
- fr->bsbufold = fr->bsbuf;
- fr->bitreservoir = 0; /* Not entirely sure if this is the right place for that counter. */
- frame_decode_buffers_reset(fr);
- memset(fr->bsspace, 0, 2*(MAXFRAMESIZE+512));
- memset(fr->ssave, 0, 34);
- fr->hybrid_blc[0] = fr->hybrid_blc[1] = 0;
- memset(fr->hybrid_block, 0, sizeof(real)*2*2*SBLIMIT*SSLIMIT);
- return 0;
-}
-
-void frame_icy_reset(mpg123_handle* fr)
-{
-#ifndef NO_ICY
- if(fr->icy.data != NULL) free(fr->icy.data);
- fr->icy.data = NULL;
- fr->icy.interval = 0;
- fr->icy.next = 0;
-#endif
-}
-
-void frame_free_toc(mpg123_handle *fr)
-{
- if(fr->xing_toc != NULL){ free(fr->xing_toc); fr->xing_toc = NULL; }
-}
-
-/* Just copy the Xing TOC over... */
-int frame_fill_toc(mpg123_handle *fr, unsigned char* in)
-{
- if(fr->xing_toc == NULL) fr->xing_toc = malloc(100);
- if(fr->xing_toc != NULL)
- {
- memcpy(fr->xing_toc, in, 100);
-#ifdef DEBUG
- debug("Got a TOC! Showing the values...");
- {
- int i;
- for(i=0; i<100; ++i)
- debug2("entry %i = %i", i, fr->xing_toc[i]);
- }
-#endif
- return TRUE;
- }
- return FALSE;
-}
-
-/* Prepare the handle for a new track.
- Reset variables, buffers... */
-int frame_reset(mpg123_handle* fr)
-{
- frame_buffers_reset(fr);
- frame_fixed_reset(fr);
- frame_free_toc(fr);
-#ifdef FRAME_INDEX
- fi_reset(&fr->index);
-#endif
-
- return 0;
-}
-
-/* Reset everythign except dynamic memory. */
-static void frame_fixed_reset(mpg123_handle *fr)
-{
- frame_icy_reset(fr);
- open_bad(fr);
- fr->to_decode = FALSE;
- fr->to_ignore = FALSE;
- fr->metaflags = 0;
- fr->outblock = mpg123_safe_buffer();
- fr->num = -1;
- fr->playnum = -1;
- fr->accurate = TRUE;
- fr->silent_resync = 0;
- fr->audio_start = 0;
- fr->clip = 0;
- fr->oldhead = 0;
- fr->firsthead = 0;
- fr->vbr = MPG123_CBR;
- fr->abr_rate = 0;
- fr->track_frames = 0;
- fr->track_samples = -1;
- fr->framesize=0;
- fr->mean_frames = 0;
- fr->mean_framesize = 0;
- fr->freesize = 0;
- fr->lastscale = -1;
- fr->rva.level[0] = -1;
- fr->rva.level[1] = -1;
- fr->rva.gain[0] = 0;
- fr->rva.gain[1] = 0;
- fr->rva.peak[0] = 0;
- fr->rva.peak[1] = 0;
- fr->fsizeold = 0;
- fr->firstframe = 0;
- fr->ignoreframe = fr->firstframe-fr->p.preframes;
- fr->lastframe = -1;
- fr->fresh = 1;
- fr->new_format = 0;
-#ifdef GAPLESS
- frame_gapless_init(fr,0,0);
- fr->lastoff = 0;
- fr->firstoff = 0;
-#endif
-#ifdef OPT_I486
- fr->i486bo[0] = fr->i486bo[1] = FIR_SIZE-1;
-#endif
- fr->bo = 1; /* the usual bo */
-#ifdef OPT_DITHER
- fr->ditherindex = 0;
-#endif
- reset_id3(fr);
- reset_icy(&fr->icy);
- /* ICY stuff should go into icy.c, eh? */
-#ifndef NO_ICY
- fr->icy.interval = 0;
- fr->icy.next = 0;
-#endif
- fr->halfphase = 0; /* here or indeed only on first-time init? */
- fr->error_protection = 0;
- fr->freeformat_framesize = -1;
-}
-
-void frame_free_buffers(mpg123_handle *fr)
-{
- if(fr->rawbuffs != NULL) free(fr->rawbuffs);
- fr->rawbuffs = NULL;
- fr->rawbuffss = 0;
- if(fr->rawdecwin != NULL) free(fr->rawdecwin);
- fr->rawdecwin = NULL;
- fr->rawdecwins = 0;
-#ifndef NO_8BIT
- if(fr->conv16to8_buf != NULL) free(fr->conv16to8_buf);
- fr->conv16to8_buf = NULL;
-#endif
- if(fr->layerscratch != NULL) free(fr->layerscratch);
-}
-
-void frame_exit(mpg123_handle *fr)
-{
- if(fr->own_buffer && fr->buffer.data != NULL)
- {
- debug1("freeing buffer at %p", (void*)fr->buffer.data);
- free(fr->buffer.data);
- }
- fr->buffer.data = NULL;
- frame_free_buffers(fr);
- frame_free_toc(fr);
-#ifdef FRAME_INDEX
- fi_exit(&fr->index);
-#endif
-#ifdef OPT_DITHER
- if(fr->dithernoise != NULL)
- {
- free(fr->dithernoise);
- fr->dithernoise = NULL;
- }
-#endif
- exit_id3(fr);
- clear_icy(&fr->icy);
- /* Clean up possible mess from LFS wrapper. */
- if(fr->wrapperclean != NULL)
- {
- fr->wrapperclean(fr->wrapperdata);
- fr->wrapperdata = NULL;
- }
-}
-
-int attribute_align_arg mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi)
-{
- if(mh == NULL) return MPG123_ERR;
- if(mi == NULL)
- {
- mh->err = MPG123_ERR_NULL;
- return MPG123_ERR;
- }
- mi->version = mh->mpeg25 ? MPG123_2_5 : (mh->lsf ? MPG123_2_0 : MPG123_1_0);
- mi->layer = mh->lay;
- mi->rate = frame_freq(mh);
- switch(mh->mode)
- {
- case 0: mi->mode = MPG123_M_STEREO; break;
- case 1: mi->mode = MPG123_M_JOINT; break;
- case 2: mi->mode = MPG123_M_DUAL; break;
- case 3: mi->mode = MPG123_M_MONO; break;
- default: error("That mode cannot be!");
- }
- mi->mode_ext = mh->mode_ext;
- mi->framesize = mh->framesize+4; /* Include header. */
- mi->flags = 0;
- if(mh->error_protection) mi->flags |= MPG123_CRC;
- if(mh->copyright) mi->flags |= MPG123_COPYRIGHT;
- if(mh->extension) mi->flags |= MPG123_PRIVATE;
- if(mh->original) mi->flags |= MPG123_ORIGINAL;
- mi->emphasis = mh->emphasis;
- mi->bitrate = frame_bitrate(mh);
- mi->abr_rate = mh->abr_rate;
- mi->vbr = mh->vbr;
- return MPG123_OK;
-}
-
-
-/*
- Fuzzy frame offset searching (guessing).
- When we don't have an accurate position, we may use an inaccurate one.
- Possibilities:
- - use approximate positions from Xing TOC (not yet parsed)
- - guess wildly from mean framesize and offset of first frame / beginning of file.
-*/
-
-off_t frame_fuzzy_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame)
-{
- /* Default is to go to the beginning. */
- off_t ret = fr->audio_start;
- *get_frame = 0;
-
- /* But we try to find something better. */
- /* Xing VBR TOC works with relative positions, both in terms of audio frames and stream bytes.
- Thus, it only works when whe know the length of things.
- Oh... I assume the offsets are relative to the _total_ file length. */
- if(fr->xing_toc != NULL && fr->track_frames > 0 && fr->rdat.filelen > 0)
- {
- /* One could round... */
- int toc_entry = (int) ((double)want_frame*100./fr->track_frames);
- /* It is an index in the 100-entry table. */
- if(toc_entry < 0) toc_entry = 0;
- if(toc_entry > 99) toc_entry = 99;
-
- /* Now estimate back what frame we get. */
- *get_frame = (off_t) ((double)toc_entry/100. * fr->track_frames);
- fr->accurate = FALSE;
- fr->silent_resync = 1;
- /* Question: Is the TOC for whole file size (with/without ID3) or the "real" audio data only?
- ID3v1 info could also matter. */
- ret = (off_t) ((double)fr->xing_toc[toc_entry]/256.* fr->rdat.filelen);
- }
- else if(fr->mean_framesize > 0)
- { /* Just guess with mean framesize (may be exact with CBR files). */
- /* Query filelen here or not? */
- fr->accurate = FALSE; /* Fuzzy! */
- fr->silent_resync = 1;
- *get_frame = want_frame;
- ret = (off_t) (fr->audio_start+fr->mean_framesize*want_frame);
- }
- debug5("fuzzy: want %li of %li, get %li at %li B of %li B",
- (long)want_frame, (long)fr->track_frames, (long)*get_frame, (long)ret, (long)(fr->rdat.filelen-fr->audio_start));
- return ret;
-}
-
-/*
- find the best frame in index just before the wanted one, seek to there
- then step to just before wanted one with read_frame
- do not care tabout the stuff that was in buffer but not played back
- everything that left the decoder is counted as played
-
- Decide if you want low latency reaction and accurate timing info or stable long-time playback with buffer!
-*/
-
-off_t frame_index_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame)
-{
- /* default is file start if no index position */
- off_t gopos = 0;
- *get_frame = 0;
-#ifdef FRAME_INDEX
- /* Possibly use VBRI index, too? I'd need an example for this... */
- if(fr->index.fill)
- {
- /* find in index */
- size_t fi;
- /* at index fi there is frame step*fi... */
- fi = want_frame/fr->index.step;
- if(fi >= fr->index.fill) /* If we are beyond the end of frame index...*/
- {
- /* When fuzzy seek is allowed, we have some limited tolerance for the frames we want to read rather then jump over. */
- if(fr->p.flags & MPG123_FUZZY && want_frame - (fr->index.fill-1)*fr->index.step > 10)
- {
- gopos = frame_fuzzy_find(fr, want_frame, get_frame);
- if(gopos > fr->audio_start) return gopos; /* Only in that case, we have a useful guess. */
- /* Else... just continue, fuzzyness didn't help. */
- }
- /* Use the last available position, slowly advancing from that one. */
- fi = fr->index.fill - 1;
- }
- /* We have index position, that yields frame and byte offsets. */
- *get_frame = fi*fr->index.step;
- gopos = fr->index.data[fi];
- fr->accurate = TRUE; /* When using the frame index, we are accurate. */
- }
- else
- {
-#endif
- if(fr->p.flags & MPG123_FUZZY)
- return frame_fuzzy_find(fr, want_frame, get_frame);
- /* A bit hackish here... but we need to be fresh when looking for the first header again. */
- fr->firsthead = 0;
- fr->oldhead = 0;
-#ifdef FRAME_INDEX
- }
-#endif
- debug2("index: 0x%lx for frame %li", (unsigned long)gopos, (long) *get_frame);
- return gopos;
-}
-
-off_t frame_ins2outs(mpg123_handle *fr, off_t ins)
-{
- off_t outs = 0;
- switch(fr->down_sample)
- {
- case 0:
-# ifndef NO_DOWNSAMPLE
- case 1:
- case 2:
-# endif
- outs = ins>>fr->down_sample;
- break;
-# ifndef NO_NTOM
- case 3: outs = ntom_ins2outs(fr, ins); break;
-# endif
- default: error1("Bad down_sample (%i) ... should not be possible!!", fr->down_sample);
- }
- return outs;
-}
-
-off_t frame_outs(mpg123_handle *fr, off_t num)
-{
- off_t outs = 0;
- switch(fr->down_sample)
- {
- case 0:
-# ifndef NO_DOWNSAMPLE
- case 1:
- case 2:
-# endif
- outs = (spf(fr)>>fr->down_sample)*num;
- break;
-#ifndef NO_NTOM
- case 3: outs = ntom_frmouts(fr, num); break;
-#endif
- default: error1("Bad down_sample (%i) ... should not be possible!!", fr->down_sample);
- }
- return outs;
-}
-
-/* Compute the number of output samples we expect from this frame.
- This is either simple spf() or a tad more elaborate for ntom. */
-off_t frame_expect_outsamples(mpg123_handle *fr)
-{
- off_t outs = 0;
- switch(fr->down_sample)
- {
- case 0:
-# ifndef NO_DOWNSAMPLE
- case 1:
- case 2:
-# endif
- outs = spf(fr)>>fr->down_sample;
- break;
-#ifndef NO_NTOM
- case 3: outs = ntom_frame_outsamples(fr); break;
-#endif
- default: error1("Bad down_sample (%i) ... should not be possible!!", fr->down_sample);
- }
- return outs;
-}
-
-off_t frame_offset(mpg123_handle *fr, off_t outs)
-{
- off_t num = 0;
- switch(fr->down_sample)
- {
- case 0:
-# ifndef NO_DOWNSAMPLE
- case 1:
- case 2:
-# endif
- num = outs/(spf(fr)>>fr->down_sample);
- break;
-#ifndef NO_NTOM
- case 3: num = ntom_frameoff(fr, outs); break;
-#endif
- default: error("Bad down_sample ... should not be possible!!");
- }
- return num;
-}
-
-#ifdef GAPLESS
-/* input in _input_ samples */
-void frame_gapless_init(mpg123_handle *fr, off_t b, off_t e)
-{
- fr->begin_s = b;
- fr->end_s = e;
- /* These will get proper values later, from above plus resampling info. */
- fr->begin_os = 0;
- fr->end_os = 0;
- debug2("frame_gapless_init: from %lu to %lu samples", (long unsigned)fr->begin_s, (long unsigned)fr->end_s);
-}
-
-void frame_gapless_realinit(mpg123_handle *fr)
-{
- fr->begin_os = frame_ins2outs(fr, fr->begin_s);
- fr->end_os = frame_ins2outs(fr, fr->end_s);
- debug2("frame_gapless_realinit: from %lu to %lu samples", (long unsigned)fr->begin_os, (long unsigned)fr->end_os);
-}
-
-/* When we got a new sample count, update the gaplessness. */
-void frame_gapless_update(mpg123_handle *fr, off_t total_samples)
-{
- if(fr->end_s < 1)
- {
- fr->end_s = total_samples;
- frame_gapless_realinit(fr);
- }
- else if(fr->end_s > total_samples)
- {
- if(NOQUIET) error2("end sample count smaller than gapless end! (%"OFF_P" < %"OFF_P").", (off_p)total_samples, (off_p)fr->end_s);
- /* Humbly disabling gapless stuff on track end. */
- fr->end_s = 0;
- frame_gapless_realinit(fr);
- fr->lastframe = -1;
- fr->lastoff = 0;
- }
-}
-
-#endif
-
-/* Compute the needed frame to ignore from, for getting accurate/consistent output for intended firstframe. */
-static off_t ignoreframe(mpg123_handle *fr)
-{
- off_t preshift = fr->p.preframes;
- /* Layer 3 _really_ needs at least one frame before. */
- if(fr->lay==3 && preshift < 1) preshift = 1;
- /* Layer 1 & 2 reall do not need more than 2. */
- if(fr->lay!=3 && preshift > 2) preshift = 2;
-
- return fr->firstframe - preshift;
-}
-
-/* The frame seek... This is not simply the seek to fe*spf(fr) samples in output because we think of _input_ frames here.
- Seek to frame offset 1 may be just seek to 200 samples offset in output since the beginning of first frame is delay/padding.
- Hm, is that right? OK for the padding stuff, but actually, should the decoder delay be better totally hidden or not?
- With gapless, even the whole frame position could be advanced further than requested (since Homey don't play dat). */
-void frame_set_frameseek(mpg123_handle *fr, off_t fe)
-{
- fr->firstframe = fe;
-#ifdef GAPLESS
- if(fr->p.flags & MPG123_GAPLESS)
- {
- /* Take care of the beginning... */
- off_t beg_f = frame_offset(fr, fr->begin_os);
- if(fe <= beg_f)
- {
- fr->firstframe = beg_f;
- fr->firstoff = fr->begin_os - frame_outs(fr, beg_f);
- }
- else fr->firstoff = 0;
- /* The end is set once for a track at least, on the frame_set_frameseek called in get_next_frame() */
- if(fr->end_os > 0)
- {
- fr->lastframe = frame_offset(fr,fr->end_os);
- fr->lastoff = fr->end_os - frame_outs(fr, fr->lastframe);
- } else fr->lastoff = 0;
- } else { fr->firstoff = fr->lastoff = 0; fr->lastframe = -1; }
-#endif
- fr->ignoreframe = ignoreframe(fr);
-#ifdef GAPLESS
- debug5("frame_set_frameseek: begin at %li frames and %li samples, end at %li and %li; ignore from %li",
- (long) fr->firstframe, (long) fr->firstoff,
- (long) fr->lastframe, (long) fr->lastoff, (long) fr->ignoreframe);
-#else
- debug3("frame_set_frameseek: begin at %li frames, end at %li; ignore from %li",
- (long) fr->firstframe, (long) fr->lastframe, (long) fr->ignoreframe);
-#endif
-}
-
-void frame_skip(mpg123_handle *fr)
-{
-#ifndef NO_LAYER3
- if(fr->lay == 3) set_pointer(fr, 512);
-#endif
-}
-
-/* Sample accurate seek prepare for decoder. */
-/* This gets unadjusted output samples and takes resampling into account */
-void frame_set_seek(mpg123_handle *fr, off_t sp)
-{
- fr->firstframe = frame_offset(fr, sp);
-#ifndef NO_NTOM
- if(fr->down_sample == 3) ntom_set_ntom(fr, fr->firstframe);
-#endif
- fr->ignoreframe = ignoreframe(fr);
-#ifdef GAPLESS /* The sample offset is used for non-gapless mode, too! */
- fr->firstoff = sp - frame_outs(fr, fr->firstframe);
- debug5("frame_set_seek: begin at %li frames and %li samples, end at %li and %li; ignore from %li",
- (long) fr->firstframe, (long) fr->firstoff,
- (long) fr->lastframe, (long) fr->lastoff, (long) fr->ignoreframe);
-#else
- debug3("frame_set_seek: begin at %li frames, end at %li; ignore from %li",
- (long) fr->firstframe, (long) fr->lastframe, (long) fr->ignoreframe);
-#endif
- /* Old bit reservoir should be invalid, eh? */
- fr->bitreservoir = 0;
-}
-
-int attribute_align_arg mpg123_volume_change(mpg123_handle *mh, double change)
-{
- if(mh == NULL) return MPG123_ERR;
- return mpg123_volume(mh, change + (double) mh->p.outscale);
-}
-
-int attribute_align_arg mpg123_volume(mpg123_handle *mh, double vol)
-{
- if(mh == NULL) return MPG123_ERR;
-
- if(vol >= 0) mh->p.outscale = vol;
- else mh->p.outscale = 0.;
-
- do_rva(mh);
- return MPG123_OK;
-}
-
-static int get_rva(mpg123_handle *fr, double *peak, double *gain)
-{
- double p = -1;
- double g = 0;
- int ret = 0;
- if(fr->p.rva)
- {
- int rt = 0;
- /* Should one assume a zero RVA as no RVA? */
- if(fr->p.rva == 2 && fr->rva.level[1] != -1) rt = 1;
- if(fr->rva.level[rt] != -1)
- {
- p = fr->rva.peak[rt];
- g = fr->rva.gain[rt];
- ret = 1; /* Success. */
- }
- }
- if(peak != NULL) *peak = p;
- if(gain != NULL) *gain = g;
- return ret;
-}
-
-/* adjust the volume, taking both fr->outscale and rva values into account */
-void do_rva(mpg123_handle *fr)
-{
- double peak = 0;
- double gain = 0;
- double newscale;
- double rvafact = 1;
- if(get_rva(fr, &peak, &gain))
- {
- if(NOQUIET && fr->p.verbose > 1) fprintf(stderr, "Note: doing RVA with gain %f\n", gain);
- rvafact = pow(10,gain/20);
- }
-
- newscale = fr->p.outscale*rvafact;
-
- /* if peak is unknown (== 0) this check won't hurt */
- if((peak*newscale) > 1.0)
- {
- newscale = 1.0/peak;
- warning2("limiting scale value to %f to prevent clipping with indicated peak factor of %f", newscale, peak);
- }
- /* first rva setting is forced with fr->lastscale < 0 */
- if(newscale != fr->lastscale || fr->decoder_change)
- {
- debug3("changing scale value from %f to %f (peak estimated to %f)", fr->lastscale != -1 ? fr->lastscale : fr->p.outscale, newscale, (double) (newscale*peak));
- fr->lastscale = newscale;
- /* It may be too early, actually. */
- if(fr->make_decode_tables != NULL) fr->make_decode_tables(fr); /* the actual work */
- }
-}
-
-
-int attribute_align_arg mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db)
-{
- if(mh == NULL) return MPG123_ERR;
- if(base) *base = mh->p.outscale;
- if(really) *really = mh->lastscale;
- get_rva(mh, NULL, rva_db);
- return MPG123_OK;
-}
-
diff --git a/src/mpg123/libmpg123/frame.h b/src/mpg123/libmpg123/frame.h
deleted file mode 100644
index bdb7ccc..0000000
--- a/src/mpg123/libmpg123/frame.h
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- frame: Central data structures and opmitization hooks.
-
- copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#ifndef MPG123_FRAME_H
-#define MPG123_FRAME_H
-
-#include <stdio.h>
-#include "config.h"
-#include "mpg123.h"
-#include "optimize.h"
-#include "id3.h"
-#include "icy.h"
-#include "reader.h"
-#ifdef FRAME_INDEX
-#include "index.h"
-#endif
-#include "synths.h"
-
-#ifdef OPT_DITHER
-#include "dither.h"
-int frame_dither_init(mpg123_handle *fr);
-#endif
-
-/* max = 1728 */
-#define MAXFRAMESIZE 3456
-
-struct al_table
-{
- short bits;
- short d;
-};
-
-/* the output buffer, used to be pcm_sample, pcm_point and audiobufsize */
-struct outbuffer
-{
- unsigned char *data;
- unsigned char *p; /* read pointer */
- size_t fill; /* fill from read pointer */
- size_t size; /* that's actually more like a safe size, after we have more than that, flush it */
-};
-
-struct audioformat
-{
- int encoding;
- int encsize; /* Size of one sample in bytes, plain int should be fine here... */
- int channels;
- long rate;
-};
-
-void invalidate_format(struct audioformat *af);
-
-struct mpg123_pars_struct
-{
- int verbose; /* verbose level */
- long flags; /* combination of above */
-#ifndef NO_NTOM
- long force_rate;
-#endif
- int down_sample;
- int rva; /* (which) rva to do: 0: nothing, 1: radio/mix/track 2: album/audiophile */
- long halfspeed;
- long doublespeed;
- long timeout;
-#define NUM_CHANNELS 2
- char audio_caps[NUM_CHANNELS][MPG123_RATES+1][MPG123_ENCODINGS];
-/* long start_frame; */ /* frame offset to begin with */
-/* long frame_number;*/ /* number of frames to decode */
-#ifndef NO_ICY
- long icy_interval;
-#endif
- double outscale;
- long resync_limit;
- long index_size; /* Long, because: negative values have a meaning. */
- long preframes;
-};
-
-
-
-/* There is a lot to condense here... many ints can be merged as flags; though the main space is still consumed by buffers. */
-struct mpg123_handle_struct
-{
- int fresh; /* to be moved into flags */
- int new_format;
- real hybrid_block[2][2][SBLIMIT*SSLIMIT];
- int hybrid_blc[2];
- /* the scratch vars for the decoders, sometimes real, sometimes short... sometimes int/long */
- short *short_buffs[2][2];
- real *real_buffs[2][2];
- unsigned char *rawbuffs;
- int rawbuffss;
-#ifdef OPT_I486
- int i486bo[2];
-#endif
- int bo; /* Just have it always here. */
-#ifdef OPT_DITHER
- int ditherindex;
- float *dithernoise;
-#endif
- unsigned char* rawdecwin; /* the block with all decwins */
- int rawdecwins; /* size of rawdecwin memory */
- real *decwin; /* _the_ decode table */
-#ifdef OPT_MMXORSSE
- /* I am not really sure that I need both of them... used in assembler */
- float *decwin_mmx;
- float *decwins;
-#endif
- int have_eq_settings;
- real equalizer[2][32];
-
- /* for halfspeed mode */
- unsigned char ssave[34];
- int halfphase;
-#ifndef NO_8BIT
- /* a raw buffer and a pointer into the middle for signed short conversion, only allocated on demand */
- unsigned char *conv16to8_buf;
- unsigned char *conv16to8;
-#endif
- /* There's some possible memory saving for stuff that is not _really_ dynamic. */
-
- /* layer3 */
- int longLimit[9][23];
- int shortLimit[9][14];
- real gainpow2[256+118+4]; /* not really dynamic, just different for mmx */
-
- /* layer2 */
- real muls[27][64]; /* also used by layer 1 */
-
-#ifndef NO_NTOM
- /* decode_ntom */
- unsigned long ntom_val[2];
- unsigned long ntom_step;
-#endif
- /* special i486 fun */
-#ifdef OPT_I486
- int *int_buffs[2][2];
-#endif
- /* special altivec... */
-#ifdef OPT_ALTIVEC
- real *areal_buffs[4][4];
-#endif
- struct synth_s synths;
- struct
- {
-#ifdef OPT_MULTI
-
-#ifndef NO_LAYER3
-#if (defined OPT_3DNOW || defined OPT_3DNOWEXT)
- void (*the_dct36)(real *,real *,real *,real *,real *);
-#endif
-#endif
-
-#endif
- enum optdec type;
- enum optcla class;
- } cpu_opts;
-
- int verbose; /* 0: nothing, 1: just print chosen decoder, 2: be verbose */
-
- const struct al_table *alloc;
- /* The runtime-chosen decoding, based on input and output format. */
- func_synth synth;
- func_synth_stereo synth_stereo;
- func_synth_mono synth_mono;
- /* Yes, this function is runtime-switched, too. */
- void (*make_decode_tables)(mpg123_handle *fr); /* That is the volume control. */
-
- int stereo; /* I _think_ 1 for mono and 2 for stereo */
- int jsbound;
-#define SINGLE_STEREO -1
-#define SINGLE_LEFT 0
-#define SINGLE_RIGHT 1
-#define SINGLE_MIX 3
- int single;
- int II_sblimit;
- int down_sample_sblimit;
- int lsf; /* 0: MPEG 1.0; 1: MPEG 2.0/2.5 -- both used as bool and array index! */
- /* Many flags in disguise as integers... wasting bytes. */
- int mpeg25;
- int down_sample;
- int header_change;
- int lay;
- int (*do_layer)(mpg123_handle *);
- int error_protection;
- int bitrate_index;
- int sampling_frequency;
- int padding;
- int extension;
- int mode;
- int mode_ext;
- int copyright;
- int original;
- int emphasis;
- int framesize; /* computed framesize */
- int freesize; /* free format frame size */
- enum mpg123_vbr vbr; /* 1 if variable bitrate was detected */
- off_t num; /* frame offset ... */
- off_t playnum; /* playback offset... includes repetitions, reset at seeks */
- off_t audio_start; /* The byte offset in the file where audio data begins. */
- char accurate; /* Flag to see if we trust the frame number. */
- char silent_resync; /* Do not complain for the next n resyncs. */
- unsigned char* xing_toc; /* The seek TOC from Xing header. */
- int freeformat;
- long freeformat_framesize;
-
- /* bitstream info; bsi */
- int bitindex;
- unsigned char *wordpointer;
- /* temporary storage for getbits stuff */
- unsigned long ultmp;
- unsigned char uctmp;
-
- /* rva data, used in common.c, set in id3.c */
-
- double maxoutburst; /* The maximum amplitude in current sample represenation. */
- double lastscale;
- struct
- {
- int level[2];
- float gain[2];
- float peak[2];
- } rva;
-
- /* input data */
- off_t track_frames;
- off_t track_samples;
- double mean_framesize;
- off_t mean_frames;
- int fsizeold;
- int ssize;
- unsigned int bitreservoir;
- unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */
- unsigned char *bsbuf;
- unsigned char *bsbufold;
- int bsnum;
- unsigned long oldhead;
- unsigned long firsthead;
- int abr_rate;
-#ifdef FRAME_INDEX
- struct frame_index index;
-#endif
-
- /* output data */
- struct outbuffer buffer;
- struct audioformat af;
- int own_buffer;
- size_t outblock; /* number of bytes that this frame produces (upper bound) */
- int to_decode; /* this frame holds data to be decoded */
- int to_ignore; /* the same, somehow */
- off_t firstframe; /* start decoding from here */
- off_t lastframe; /* last frame to decode (for gapless or num_frames limit) */
- off_t ignoreframe; /* frames to decode but discard before firstframe */
-#ifdef GAPLESS
- off_t firstoff; /* number of samples to ignore from firstframe */
- off_t lastoff; /* number of samples to use from lastframe */
- off_t begin_s; /* overall begin offset in samples */
- off_t begin_os;
- off_t end_s; /* overall end offset in samples */
- off_t end_os;
-#endif
- unsigned int crc; /* Well, I need a safe 16bit type, actually. But wider doesn't hurt. */
- struct reader *rd; /* pointer to the reading functions */
- struct reader_data rdat; /* reader data and state info */
- struct mpg123_pars_struct p;
- int err;
- int decoder_change;
- int delayed_change;
- long clip;
- /* the meta crap */
- int metaflags;
- unsigned char id3buf[128];
-#ifndef NO_ID3V2
- mpg123_id3v2 id3v2;
-#endif
-#ifndef NO_ICY
- struct icy_meta icy;
-#endif
- /*
- More variables needed for decoders, layerX.c.
- This time it is not about static variables but about the need for alignment which cannot be guaranteed on the stack by certain compilers (Sun Studio).
- We do not require the compiler to align stuff for our hand-written assembly. We only hope that it's able to align stuff for SSE and similar ops it generates itself.
- */
- /*
- Those layer-specific structs could actually share memory, as they are not in use simultaneously. One might allocate on decoder switch, too.
- They all reside in one lump of memory (after each other), allocated to layerscratch.
- */
- real *layerscratch;
-#ifndef NO_LAYER1
- struct
- {
- real (*fraction)[SBLIMIT]; /* ALIGNED(16) real fraction[2][SBLIMIT]; */
- } layer1;
-#endif
-#ifndef NO_LAYER2
- struct
- {
- real (*fraction)[4][SBLIMIT]; /* ALIGNED(16) real fraction[2][4][SBLIMIT] */
- } layer2;
-#endif
-#ifndef NO_LAYER3
- /* These are significant chunks of memory already... */
- struct
- {
- real (*hybrid_in)[SBLIMIT][SSLIMIT]; /* ALIGNED(16) real hybridIn[2][SBLIMIT][SSLIMIT]; */
- real (*hybrid_out)[SSLIMIT][SBLIMIT]; /* ALIGNED(16) real hybridOut[2][SSLIMIT][SBLIMIT]; */
- } layer3;
-#endif
- /* A place for storing additional data for the large file wrapper.
- This is cruft! */
- void *wrapperdata;
- /* A callback used to properly destruct the wrapper data. */
- void (*wrapperclean)(void*);
-};
-
-/* generic init, does not include dynamic buffers */
-void frame_init(mpg123_handle *fr);
-void frame_init_par(mpg123_handle *fr, mpg123_pars *mp);
-/* output buffer and format */
-int frame_outbuffer(mpg123_handle *fr);
-int frame_output_format(mpg123_handle *fr);
-
-int frame_buffers(mpg123_handle *fr); /* various decoder buffers, needed once */
-int frame_reset(mpg123_handle* fr); /* reset for next track */
-int frame_buffers_reset(mpg123_handle *fr);
-void frame_exit(mpg123_handle *fr); /* end, free all buffers */
-
-/* Index functions... */
-/* Well... print it... */
-int mpg123_print_index(mpg123_handle *fr, FILE* out);
-/* Find a seek position in index. */
-off_t frame_index_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame);
-/* Apply index_size setting. */
-int frame_index_setup(mpg123_handle *fr);
-
-void do_volume(mpg123_handle *fr, double factor);
-void do_rva(mpg123_handle *fr);
-
-/* samples per frame ...
-Layer I
-Layer II
-Layer III
-MPEG-1
-384
-1152
-1152
-MPEG-2 LSF
-384
-1152
-576
-MPEG 2.5
-384
-1152
-576
-*/
-#define spf(fr) ((fr)->lay == 1 ? 384 : ((fr)->lay==2 ? 1152 : ((fr)->lsf || (fr)->mpeg25 ? 576 : 1152)))
-
-#ifdef GAPLESS
-/* well, I take that one for granted... at least layer3 */
-#define GAPLESS_DELAY 529
-/* still fine-tuning the "real music" window... see read_frame */
-void frame_gapless_init(mpg123_handle *fr, off_t b, off_t e);
-void frame_gapless_realinit(mpg123_handle *fr);
-void frame_gapless_update(mpg123_handle *mh, off_t total_samples);
-/*void frame_gapless_position(mpg123_handle* fr);
-void frame_gapless_bytify(mpg123_handle *fr);
-void frame_gapless_ignore(mpg123_handle *fr, off_t frames);*/
-/* void frame_gapless_buffercheck(mpg123_handle *fr); */
-#endif
-
-/* Number of samples the decoding of the current frame should yield. */
-off_t frame_expect_outsamples(mpg123_handle *fr);
-
-/* Skip this frame... do some fake action to get away without actually decoding it. */
-void frame_skip(mpg123_handle *fr);
-
-/*
- Seeking core functions:
- - convert input sample offset to output sample offset
- - convert frame offset to output sample offset
- - get leading frame offset for output sample offset
- The offsets are "unadjusted"/internal; resampling is being taken care of.
-*/
-off_t frame_ins2outs(mpg123_handle *fr, off_t ins);
-off_t frame_outs(mpg123_handle *fr, off_t num);
-/* This one just computes the expected sample count for _this_ frame. */
-off_t frame_expect_outsampels(mpg123_handle *fr);
-off_t frame_offset(mpg123_handle *fr, off_t outs);
-void frame_set_frameseek(mpg123_handle *fr, off_t fe);
-void frame_set_seek(mpg123_handle *fr, off_t sp);
-off_t frame_tell_seek(mpg123_handle *fr);
-/* Take a copy of the Xing VBR TOC for fuzzy seeking. */
-int frame_fill_toc(mpg123_handle *fr, unsigned char* in);
-
-
-/* adjust volume to current outscale and rva values if wanted */
-void do_rva(mpg123_handle *fr);
-#endif
diff --git a/src/mpg123/libmpg123/getbits.h b/src/mpg123/libmpg123/getbits.h
deleted file mode 100644
index 8eff00e..0000000
--- a/src/mpg123/libmpg123/getbits.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- getbits
-
- copyright ?-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-
- All code is in the header to suggest/force inlining of these small often-used functions.
- This indeed has some impact on performance.
-*/
-
-#ifndef _MPG123_GETBITS_H_
-#define _MPG123_GETBITS_H_
-
-#include "mpg123lib_intern.h"
-
-#define backbits(fr,nob) ((void)( \
- fr->bitindex -= nob, \
- fr->wordpointer += (fr->bitindex>>3), \
- fr->bitindex &= 0x7 ))
-
-#define getbitoffset(fr) ((-fr->bitindex)&0x7)
-#define getbyte(fr) (*fr->wordpointer++)
-
-/* There is something wrong with that macro... the function below works also for the layer1 test case. */
-#define macro_getbits(fr, nob) ( \
- fr->ultmp = fr->wordpointer[0],\
- fr->ultmp <<= 8, \
- fr->ultmp |= fr->wordpointer[1], \
- fr->ultmp <<= 8, \
- fr->ultmp |= fr->wordpointer[2], \
- fr->ultmp <<= fr->bitindex, \
- fr->ultmp &= 0xffffff, \
- fr->bitindex += nob, \
- fr->ultmp >>= (24-nob), \
- fr->wordpointer += (fr->bitindex>>3), \
- fr->bitindex &= 7, \
- fr->ultmp)
-
-static unsigned int getbits(mpg123_handle *fr, int number_of_bits)
-{
- unsigned long rval;
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,"g%d",number_of_bits);
-#endif
-
-/* This is actually slow: if(!number_of_bits)
- return 0; */
-
-#if 0
- check_buffer_range(number_of_bits+fr->bitindex);
-#endif
-
- {
- rval = fr->wordpointer[0];
- rval <<= 8;
- rval |= fr->wordpointer[1];
- rval <<= 8;
- rval |= fr->wordpointer[2];
-
- rval <<= fr->bitindex;
- rval &= 0xffffff;
-
- fr->bitindex += number_of_bits;
-
- rval >>= (24-number_of_bits);
-
- fr->wordpointer += (fr->bitindex>>3);
- fr->bitindex &= 7;
- }
-
-#ifdef DEBUG_GETBITS
-fprintf(stderr,":%lx\n",rval);
-#endif
-
- return rval;
-}
-
-
-#define skipbits(fr, nob) fr->ultmp = ( \
- fr->ultmp = fr->wordpointer[0], fr->ultmp <<= 8, fr->ultmp |= fr->wordpointer[1], \
- fr->ultmp <<= 8, fr->ultmp |= fr->wordpointer[2], fr->ultmp <<= fr->bitindex, \
- fr->ultmp &= 0xffffff, fr->bitindex += nob, \
- fr->ultmp >>= (24-nob), fr->wordpointer += (fr->bitindex>>3), \
- fr->bitindex &= 7 )
-
-#define getbits_fast(fr, nob) ( \
- fr->ultmp = (unsigned char) (fr->wordpointer[0] << fr->bitindex), \
- fr->ultmp |= ((unsigned long) fr->wordpointer[1]<<fr->bitindex)>>8, \
- fr->ultmp <<= nob, fr->ultmp >>= 8, \
- fr->bitindex += nob, fr->wordpointer += (fr->bitindex>>3), \
- fr->bitindex &= 7, fr->ultmp )
-
-#define get1bit(fr) ( \
- fr->uctmp = *fr->wordpointer << fr->bitindex, fr->bitindex++, \
- fr->wordpointer += (fr->bitindex>>3), fr->bitindex &= 7, fr->uctmp>>7 )
-
-
-#endif
diff --git a/src/mpg123/libmpg123/getcpuflags.h b/src/mpg123/libmpg123/getcpuflags.h
deleted file mode 100644
index ec56541..0000000
--- a/src/mpg123/libmpg123/getcpuflags.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- getcpucpuflags: get cpuflags for ia32
-
- copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http:#mpg123.org
- initially written by KIMURA Takuhiro (for 3DNow!)
- extended for general use by Thomas Orgis
-*/
-
-#ifndef MPG123_H_GETCPUFLAGS
-#define MPG123_H_GETCPUFLAGS
-
-/* standard level flags part 1 (ECX)*/
-#define FLAG_SSE3 0x00000001
-
-/* standard level flags part 2 (EDX) */
-#define FLAG2_MMX 0x00800000
-#define FLAG2_SSE 0x02000000
-#define FLAG2_SSE2 0x04000000
-#define FLAG2_FPU 0x00000001
-/* cpuid extended level 1 (AMD) */
-#define XFLAG_MMX 0x00800000
-#define XFLAG_3DNOW 0x80000000
-#define XFLAG_3DNOWEXT 0x40000000
-
-struct cpuflags
-{
- unsigned int id;
- unsigned int std;
- unsigned int std2;
- unsigned int ext;
-};
-
-extern struct cpuflags cpu_flags;
-
-unsigned int getcpuflags(struct cpuflags* cf);
-
-/* checks the family */
-#define cpu_i586(s) ( ((s.id & 0xf00)>>8) == 0 || ((s.id & 0xf00)>>8) > 4 )
-/* checking some flags... */
-#define cpu_fpu(s) (FLAG2_FPU & s.std2)
-#define cpu_mmx(s) (FLAG2_MMX & s.std2 || XFLAG_MMX & s.ext)
-#define cpu_3dnow(s) (XFLAG_3DNOW & s.ext)
-#define cpu_3dnowext(s) (XFLAG_3DNOWEXT & s.ext)
-#define cpu_sse(s) (FLAG2_SSE & s.std2)
-#define cpu_sse2(s) (FLAG2_SSE2 & s.std2)
-#define cpu_sse3(s) (FLAG_SSE3 & s.std)
-
-#endif
diff --git a/src/mpg123/libmpg123/huffman.h b/src/mpg123/libmpg123/huffman.h
deleted file mode 100644
index 74b543c..0000000
--- a/src/mpg123/libmpg123/huffman.h
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- huffman.h: huffman tables ... recalcualted to work with optimzed decoder scheme (MH)
-
- copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-
- probably we could save a few bytes of memory, because the
- smaller tables are often the part of a bigger table
-*/
-
-
-#ifndef _MPG123_HUFFMAN_H_
-#define _MPG123_HUFFMAN_H_
-
-struct newhuff
-{
- unsigned int linbits;
- short *table;
-};
-
-static short tab0[] =
-{
- 0
-};
-
-static short tab1[] =
-{
- -5, -3, -1, 17, 1, 16, 0
-};
-
-static short tab2[] =
-{
- -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1,
- 16, 0
-};
-
-static short tab3[] =
-{
- -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1,
- 1, 0
-};
-
-static short tab5[] =
-{
- -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19,
- 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16,
- 0
-};
-
-static short tab6[] =
-{
- -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19,
- 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16,
- 0
-};
-
-static short tab7[] =
-{
- -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83,
- -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1,
- 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, 65, 64, -11, -7,
- -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, 34, 18,
- -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0
-};
-
-static short tab8[] =
-{
- -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83,
- -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52,
- 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, 65, -3, -1, 4,
- 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, 34, -1,
- 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0
-};
-
-static short tab9[] =
-{
- -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1,
- 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67,
- -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, 20, 65, -5,
- -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, 2,
- 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0
-};
-
-static short tab10[] =
-{
--125,-121,-111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1, 118,
- 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3,
- -1, 115, 70, -3, -1, 85, 84, 99, -1, 39, 114, -11, -5, -3, -1,
- 100, 7, 112, -1, 98, -1, 69, 53, -5, -1, 6, -1, 83, 68, 23,
- -17, -5, -1, 113, -1, 54, 38, -5, -3, -1, 37, 82, 21, -1, 81,
- -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, 80, -19, -11, -7,
- -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, 64, 35, -1,
- 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, -1,
- 2, 32, 17, -1, 1, 16, 0
-};
-
-static short tab11[] =
-{
--121,-113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118, 117,
- -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55,
- -1, 115, 70, -9, -7, -3, -1, 69, 84, -1, 53, 83, 39, -1, 114,
- -1, 100, 7, -5, -1, 113, -1, 23, 112, -3, -1, 54, 99, -1, 96,
- -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, 98, -3, -1, 38,
- 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, 51, -1,
- 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, 50,
- -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2,
- 32, 17, -3, -1, 1, 16, 0
-};
-
-static short tab12[] =
-{
--115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87,
- 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115,
- 85, 39, -7, -3, -1, 114, 70, -1, 100, 23, -5, -1, 113, -1, 7,
- 112, -1, 54, 99, -13, -9, -3, -1, 69, 84, -1, 68, -1, 6, 5,
- -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, 53, 83, -1, 37,
- 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, -1, 80, 4,
- 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, -3,
- -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1,
- 2, 32, 0, 17, -1, 1, 16
-};
-
-static short tab13[] =
-{
--509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13, -9,
- -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238,
- 207, -1, 222, 191, -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1,
- 236, 221, -9, -5, -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249,
- 234, -1, 189, 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158,
- -5, -1, 142, -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1,
- 203, 246, 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245,
- 231, -1, 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1,
- 63, -1, 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15,
- -5, -3, -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1,
- 200, 214, 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1,
- 240, -1, 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1,
- 46, 14, -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3,
- -1, 199, 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1,
- 198, 61, -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5,
- -1, 183, -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167,
- 151, 75, 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76,
- 196, -1, 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137,
- 28, -43, -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106,
- -5, -3, -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43,
- -1, 165, 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178,
- -11, -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1,
- 58, 163, -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161,
- -3, -1, 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88,
- -1, 133, 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1,
- 131, -1, 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25,
- 145, -3, -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100,
- 40, -1, 130, 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113,
- -1, 85, 7, -7, -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38,
- -1, 98, 53, -5, -1, 129, -1, 8, 128, -3, -1, 22, 97, -1, 6,
- 96, -13, -9, -5, -3, -1, 83, 68, 37, -1, 82, 5, -1, 21, 81,
- -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -19, -11,
- -5, -1, 65, -1, 4, 64, -3, -1, 35, 50, 19, -3, -1, 49, 3,
- -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
- 0
-};
-
-static short tab15[] =
-{
--495,-445,-355,-263,-183,-115, -77, -43, -27, -13, -7, -3, -1, 255, 239,
- -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237,
- 191, -1, 251, -1, 206, 236, -7, -3, -1, 221, 175, -1, 250, 190, -3,
- -1, 235, 205, -1, 220, 159, -15, -7, -3, -1, 249, 234, -1, 189, 219,
- -3, -1, 143, 248, -1, 204, 158, -7, -3, -1, 233, 127, -1, 247, 173,
- -3, -1, 218, 188, -1, 111, -1, 174, 15, -19, -11, -3, -1, 203, 246,
- -3, -1, 142, 232, -1, 95, 157, -3, -1, 245, 126, -1, 231, 172, -9,
- -3, -1, 202, 187, -3, -1, 217, 141, 79, -3, -1, 244, 63, -1, 243,
- 216, -33, -17, -9, -3, -1, 230, 47, -1, 242, -1, 110, 240, -3, -1,
- 31, 241, -1, 156, 201, -7, -3, -1, 94, 171, -1, 186, 229, -3, -1,
- 125, 215, -1, 78, 228, -15, -7, -3, -1, 140, 200, -1, 62, 109, -3,
- -1, 214, 227, -1, 155, 185, -7, -3, -1, 46, 170, -1, 226, 30, -5,
- -1, 225, -1, 14, 224, -1, 93, 213, -45, -25, -13, -7, -3, -1, 124,
- 199, -1, 77, 139, -1, 212, -1, 184, 154, -7, -3, -1, 169, 108, -1,
- 198, 61, -1, 211, 210, -9, -5, -3, -1, 45, 13, 29, -1, 123, 183,
- -5, -1, 209, -1, 92, 208, -1, 197, 138, -17, -7, -3, -1, 168, 76,
- -1, 196, 107, -5, -1, 182, -1, 153, 12, -1, 60, 195, -9, -3, -1,
- 122, 167, -1, 166, -1, 192, 11, -1, 194, -1, 44, 91, -55, -29, -15,
- -7, -3, -1, 181, 28, -1, 137, 152, -3, -1, 193, 75, -1, 180, 106,
- -5, -3, -1, 59, 121, 179, -3, -1, 151, 136, -1, 43, 90, -11, -5,
- -1, 178, -1, 165, 27, -1, 177, -1, 176, 105, -7, -3, -1, 150, 74,
- -1, 164, 120, -3, -1, 135, 58, 163, -17, -7, -3, -1, 89, 149, -1,
- 42, 162, -3, -1, 26, 161, -3, -1, 10, 160, 104, -7, -3, -1, 134,
- 73, -1, 148, 57, -5, -1, 147, -1, 119, 9, -1, 88, 133, -53, -29,
- -13, -7, -3, -1, 41, 103, -1, 118, 146, -1, 145, -1, 25, 144, -7,
- -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 71, -7,
- -3, -1, 40, 130, -1, 24, 129, -7, -3, -1, 116, 8, -1, 128, 86,
- -3, -1, 101, 55, -1, 115, 70, -17, -7, -3, -1, 39, 114, -1, 100,
- 23, -3, -1, 85, 113, -3, -1, 7, 112, 54, -7, -3, -1, 99, 69,
- -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, 96, 53, -33, -19, -9,
- -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, 21, 81, -3, -1,
- 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, -1, 20,
- 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48,
- 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16,
- 0
-};
-
-static short tab16[] =
-{
--509,-503,-461,-323,-103, -37, -27, -15, -7, -3, -1, 239, 254, -1, 223,
- 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3,
- -1, 249, 248, 143, -7, -3, -1, 127, 247, -1, 111, 246, 255, -9, -5,
- -3, -1, 95, 245, 79, -1, 244, 243, -53, -1, 240, -1, 63, -29, -19,
- -13, -7, -5, -1, 206, -1, 236, 221, 222, -1, 233, -1, 234, 217, -1,
- 238, -1, 237, 235, -3, -1, 190, 205, -3, -1, 220, 219, 174, -11, -5,
- -1, 204, -1, 173, 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125,
- 94, 189, 242, -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13,
- -5, -1, 158, -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3,
- -1, 187, 141, -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186,
- -1, 229, 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1,
- 214, 155, -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169,
- -5, -1, 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213,
- -3, -1, 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154,
- 108, -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1,
- 153, 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1,
- 192, -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45,
- -1, 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107,
- -1, 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12,
- -1, 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1,
- 178, 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74,
- 164, -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33,
- -19, -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3,
- -1, 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147,
- -1, 88, 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1,
- 145, -1, 144, 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3,
- -1, 102, 40, 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1,
- 8, 86, 55, -9, -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3,
- -1, 100, 85, 7, 23, -23, -13, -5, -1, 113, -1, 112, 54, -3, -1,
- 99, 69, -1, 84, 38, -3, -1, 98, 22, -1, 97, -1, 6, 96, -9,
- -5, -1, 83, -1, 53, 68, -1, 37, 82, -1, 81, -1, 21, 5, -33,
- -23, -13, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20,
- -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, 19, 49, -3, -1,
- 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
- 0
-};
-
-static short tab24[] =
-{
--451,-117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1,
- 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9,
- -5, -3, -1, 143, 127, 247, -1, 111, 246, -3, -1, 95, 245, -1, 79,
- 244, -71, -7, -3, -1, 63, 243, -1, 47, 242, -5, -1, 241, -1, 31,
- 240, -25, -9, -1, 15, -3, -1, 238, 222, -1, 237, 206, -7, -3, -1,
- 236, 221, -1, 190, 235, -3, -1, 205, 220, -1, 174, 234, -15, -7, -3,
- -1, 189, 219, -1, 204, 158, -3, -1, 233, 173, -1, 218, 188, -7, -3,
- -1, 203, 142, -1, 232, 157, -3, -1, 217, 126, -1, 231, 172, 255,-235,
--143, -77, -45, -25, -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3,
- -1, 14, 224, 13, 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9,
- -5, -1, 229, -1, 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1,
- 78, 46, 62, -15, -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185,
- 170, -1, 226, 30, -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199,
- 77, -1, 139, 184, -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3,
- -1, 198, 61, -1, 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3,
- -1, 209, 92, -1, 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196,
- -3, -1, 107, 182, -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1,
- 167, 44, -3, -1, 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1,
- 137, 152, -1, 193, 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10,
- 26, -5, -1, 180, -1, 106, 166, -3, -1, 121, 151, -3, -1, 160, 9,
- 144, -9, -3, -1, 179, 136, -3, -1, 43, 90, 178, -7, -3, -1, 165,
- 27, -1, 177, 105, -1, 150, 164, -17, -9, -5, -3, -1, 74, 120, 135,
- -1, 58, 163, -3, -1, 89, 149, -1, 42, 162, -7, -3, -1, 161, 104,
- -1, 134, 119, -3, -1, 73, 148, -1, 57, 147, -63, -31, -15, -7, -3,
- -1, 88, 133, -1, 41, 103, -3, -1, 118, 146, -1, 25, 145, -7, -3,
- -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 40, -17, -7,
- -3, -1, 130, 24, -1, 71, 116, -5, -1, 129, -1, 8, 128, -1, 86,
- 101, -7, -5, -1, 23, -1, 7, 112, 115, -3, -1, 55, 39, 114, -15,
- -7, -3, -1, 70, 100, -1, 85, 113, -3, -1, 54, 99, -1, 69, 84,
- -7, -3, -1, 38, 98, -1, 22, 97, -5, -3, -1, 6, 96, 53, -1,
- 83, 68, -51, -37, -23, -15, -9, -3, -1, 37, 82, -1, 21, -1, 5,
- 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, 51, 20, -9, -5,
- -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, -3, -1,
- 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16,
- 0
-};
-
-static short tab_c0[] =
-{
- -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5,
- 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8,
- 0
-};
-
-static short tab_c1[] =
-{
- -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9,
- 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1,
- 0
-};
-
-
-
-static struct newhuff ht[] =
-{
- { /* 0 */ 0 , tab0 } ,
- { /* 2 */ 0 , tab1 } ,
- { /* 3 */ 0 , tab2 } ,
- { /* 3 */ 0 , tab3 } ,
- { /* 0 */ 0 , tab0 } ,
- { /* 4 */ 0 , tab5 } ,
- { /* 4 */ 0 , tab6 } ,
- { /* 6 */ 0 , tab7 } ,
- { /* 6 */ 0 , tab8 } ,
- { /* 6 */ 0 , tab9 } ,
- { /* 8 */ 0 , tab10 } ,
- { /* 8 */ 0 , tab11 } ,
- { /* 8 */ 0 , tab12 } ,
- { /* 16 */ 0 , tab13 } ,
- { /* 0 */ 0 , tab0 } ,
- { /* 16 */ 0 , tab15 } ,
-
- { /* 16 */ 1 , tab16 } ,
- { /* 16 */ 2 , tab16 } ,
- { /* 16 */ 3 , tab16 } ,
- { /* 16 */ 4 , tab16 } ,
- { /* 16 */ 6 , tab16 } ,
- { /* 16 */ 8 , tab16 } ,
- { /* 16 */ 10, tab16 } ,
- { /* 16 */ 13, tab16 } ,
- { /* 16 */ 4 , tab24 } ,
- { /* 16 */ 5 , tab24 } ,
- { /* 16 */ 6 , tab24 } ,
- { /* 16 */ 7 , tab24 } ,
- { /* 16 */ 8 , tab24 } ,
- { /* 16 */ 9 , tab24 } ,
- { /* 16 */ 11, tab24 } ,
- { /* 16 */ 13, tab24 }
-};
-
-static struct newhuff htc[] =
-{
- { /* 1 , 1 , */ 0 , tab_c0 } ,
- { /* 1 , 1 , */ 0 , tab_c1 }
-};
-
-
-#endif
diff --git a/src/mpg123/libmpg123/icy.c b/src/mpg123/libmpg123/icy.c
deleted file mode 100644
index dca2c5d..0000000
--- a/src/mpg123/libmpg123/icy.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- icy: Puny code to pretend for a serious ICY data structure.
-
- copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#include "icy.h"
-
-void init_icy(struct icy_meta *icy)
-{
- icy->data = NULL;
-}
-
-void clear_icy(struct icy_meta *icy)
-{
- if(icy->data != NULL) free(icy->data);
- init_icy(icy);
-}
-
-void reset_icy(struct icy_meta *icy)
-{
- clear_icy(icy);
- init_icy(icy);
-}
-/*void set_icy(struct icy_meta *icy, char* new_data)
-{
- if(icy->data) free(icy->data);
- icy->data = new_data;
- icy->changed = 1;
-}*/
diff --git a/src/mpg123/libmpg123/icy.h b/src/mpg123/libmpg123/icy.h
deleted file mode 100644
index 050a056..0000000
--- a/src/mpg123/libmpg123/icy.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- icy: support for SHOUTcast ICY meta info, an attempt to keep it organized
-
- copyright 2006-7 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis and modelled after patch by Honza
-*/
-#ifndef MPG123_ICY_H
-#define MPG123_ICY_H
-
-#ifndef NO_ICY
-
-#include "compat.h"
-#include "mpg123.h"
-
-struct icy_meta
-{
- char* data;
- off_t interval;
- off_t next;
-};
-
-void init_icy(struct icy_meta *);
-void clear_icy(struct icy_meta *);
-void reset_icy(struct icy_meta *);
-
-#else
-
-#define init_icy(a)
-#define clear_icy(a)
-#define reset_icy(a)
-
-#endif /* NO_ICY */
-
-#endif
diff --git a/src/mpg123/libmpg123/icy2utf8.c b/src/mpg123/libmpg123/icy2utf8.c
deleted file mode 100644
index 4e72162..0000000
--- a/src/mpg123/libmpg123/icy2utf8.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/* mpg123 note: This is BSD-licensed code that is no problem for mpg123 usage under LGPL.
- It's Free, understood? ;-) */
-
-/* Another note: This code is basically written by Thorsten Glaser,
- Thomas Orgis did just some rearrangements and comments. */
-
-/*-
- * Copyright (c) 2008
- * Thorsten Glaser <tg@mirbsd.org>
- *
- * Provided that these terms and disclaimer and all copyright notices
- * are retained or reproduced in an accompanying document, permission
- * is granted to deal in this work without restriction, including un-
- * limited rights to use, publicly perform, distribute, sell, modify,
- * merge, give away, or sublicence.
- *
- * This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
- * the utmost extent permitted by applicable law, neither express nor
- * implied; without malicious intent or gross negligence. In no event
- * may a licensor, author or contributor be held liable for indirect,
- * direct, other damage, loss, or other issues arising in any way out
- * of dealing in the work, even if advised of the possibility of such
- * damage or existence of a defect, except proven that it results out
- * of said person's immediate fault when using the work as intended.
- *-
- * Convert from ICY encoding (windows-1252 codepage) to UTF-8
- */
-
-/* Includes string and stdlib headers... */
-#include "compat.h"
-
-/* ThOr: too lazy for this type check; also we use char/short all around anyway.
- Of cource, it would be the proper way to use _these_ kind of types all around. */
-#define uint8_t unsigned char
-#define uint16_t unsigned short
-
-static const uint8_t cp1252_utf8[] = {
- /* 0x00 @ 0 */ 0x00,
- /* 0x01 @ 1 */ 0x01,
- /* 0x02 @ 2 */ 0x02,
- /* 0x03 @ 3 */ 0x03,
- /* 0x04 @ 4 */ 0x04,
- /* 0x05 @ 5 */ 0x05,
- /* 0x06 @ 6 */ 0x06,
- /* 0x07 @ 7 */ 0x07,
- /* 0x08 @ 8 */ 0x08,
- /* 0x09 @ 9 */ 0x09,
- /* 0x0A @ 10 */ 0x0A,
- /* 0x0B @ 11 */ 0x0B,
- /* 0x0C @ 12 */ 0x0C,
- /* 0x0D @ 13 */ 0x0D,
- /* 0x0E @ 14 */ 0x0E,
- /* 0x0F @ 15 */ 0x0F,
- /* 0x10 @ 16 */ 0x10,
- /* 0x11 @ 17 */ 0x11,
- /* 0x12 @ 18 */ 0x12,
- /* 0x13 @ 19 */ 0x13,
- /* 0x14 @ 20 */ 0x14,
- /* 0x15 @ 21 */ 0x15,
- /* 0x16 @ 22 */ 0x16,
- /* 0x17 @ 23 */ 0x17,
- /* 0x18 @ 24 */ 0x18,
- /* 0x19 @ 25 */ 0x19,
- /* 0x1A @ 26 */ 0x1A,
- /* 0x1B @ 27 */ 0x1B,
- /* 0x1C @ 28 */ 0x1C,
- /* 0x1D @ 29 */ 0x1D,
- /* 0x1E @ 30 */ 0x1E,
- /* 0x1F @ 31 */ 0x1F,
- /* 0x20 @ 32 */ 0x20,
- /* 0x21 @ 33 */ 0x21,
- /* 0x22 @ 34 */ 0x22,
- /* 0x23 @ 35 */ 0x23,
- /* 0x24 @ 36 */ 0x24,
- /* 0x25 @ 37 */ 0x25,
- /* 0x26 @ 38 */ 0x26,
- /* 0x27 @ 39 */ 0x27,
- /* 0x28 @ 40 */ 0x28,
- /* 0x29 @ 41 */ 0x29,
- /* 0x2A @ 42 */ 0x2A,
- /* 0x2B @ 43 */ 0x2B,
- /* 0x2C @ 44 */ 0x2C,
- /* 0x2D @ 45 */ 0x2D,
- /* 0x2E @ 46 */ 0x2E,
- /* 0x2F @ 47 */ 0x2F,
- /* 0x30 @ 48 */ 0x30,
- /* 0x31 @ 49 */ 0x31,
- /* 0x32 @ 50 */ 0x32,
- /* 0x33 @ 51 */ 0x33,
- /* 0x34 @ 52 */ 0x34,
- /* 0x35 @ 53 */ 0x35,
- /* 0x36 @ 54 */ 0x36,
- /* 0x37 @ 55 */ 0x37,
- /* 0x38 @ 56 */ 0x38,
- /* 0x39 @ 57 */ 0x39,
- /* 0x3A @ 58 */ 0x3A,
- /* 0x3B @ 59 */ 0x3B,
- /* 0x3C @ 60 */ 0x3C,
- /* 0x3D @ 61 */ 0x3D,
- /* 0x3E @ 62 */ 0x3E,
- /* 0x3F @ 63 */ 0x3F,
- /* 0x40 @ 64 */ 0x40,
- /* 0x41 @ 65 */ 0x41,
- /* 0x42 @ 66 */ 0x42,
- /* 0x43 @ 67 */ 0x43,
- /* 0x44 @ 68 */ 0x44,
- /* 0x45 @ 69 */ 0x45,
- /* 0x46 @ 70 */ 0x46,
- /* 0x47 @ 71 */ 0x47,
- /* 0x48 @ 72 */ 0x48,
- /* 0x49 @ 73 */ 0x49,
- /* 0x4A @ 74 */ 0x4A,
- /* 0x4B @ 75 */ 0x4B,
- /* 0x4C @ 76 */ 0x4C,
- /* 0x4D @ 77 */ 0x4D,
- /* 0x4E @ 78 */ 0x4E,
- /* 0x4F @ 79 */ 0x4F,
- /* 0x50 @ 80 */ 0x50,
- /* 0x51 @ 81 */ 0x51,
- /* 0x52 @ 82 */ 0x52,
- /* 0x53 @ 83 */ 0x53,
- /* 0x54 @ 84 */ 0x54,
- /* 0x55 @ 85 */ 0x55,
- /* 0x56 @ 86 */ 0x56,
- /* 0x57 @ 87 */ 0x57,
- /* 0x58 @ 88 */ 0x58,
- /* 0x59 @ 89 */ 0x59,
- /* 0x5A @ 90 */ 0x5A,
- /* 0x5B @ 91 */ 0x5B,
- /* 0x5C @ 92 */ 0x5C,
- /* 0x5D @ 93 */ 0x5D,
- /* 0x5E @ 94 */ 0x5E,
- /* 0x5F @ 95 */ 0x5F,
- /* 0x60 @ 96 */ 0x60,
- /* 0x61 @ 97 */ 0x61,
- /* 0x62 @ 98 */ 0x62,
- /* 0x63 @ 99 */ 0x63,
- /* 0x64 @ 100 */ 0x64,
- /* 0x65 @ 101 */ 0x65,
- /* 0x66 @ 102 */ 0x66,
- /* 0x67 @ 103 */ 0x67,
- /* 0x68 @ 104 */ 0x68,
- /* 0x69 @ 105 */ 0x69,
- /* 0x6A @ 106 */ 0x6A,
- /* 0x6B @ 107 */ 0x6B,
- /* 0x6C @ 108 */ 0x6C,
- /* 0x6D @ 109 */ 0x6D,
- /* 0x6E @ 110 */ 0x6E,
- /* 0x6F @ 111 */ 0x6F,
- /* 0x70 @ 112 */ 0x70,
- /* 0x71 @ 113 */ 0x71,
- /* 0x72 @ 114 */ 0x72,
- /* 0x73 @ 115 */ 0x73,
- /* 0x74 @ 116 */ 0x74,
- /* 0x75 @ 117 */ 0x75,
- /* 0x76 @ 118 */ 0x76,
- /* 0x77 @ 119 */ 0x77,
- /* 0x78 @ 120 */ 0x78,
- /* 0x79 @ 121 */ 0x79,
- /* 0x7A @ 122 */ 0x7A,
- /* 0x7B @ 123 */ 0x7B,
- /* 0x7C @ 124 */ 0x7C,
- /* 0x7D @ 125 */ 0x7D,
- /* 0x7E @ 126 */ 0x7E,
- /* 0x7F @ 127 */ 0x7F,
- /* 0x80 @ 128 */ 0xE2, 0x82, 0xAC,
- /* 0x81 @ 131 */ 0xEF, 0xBF, 0xBD,
- /* 0x82 @ 134 */ 0xE2, 0x80, 0x9A,
- /* 0x83 @ 137 */ 0xC6, 0x92,
- /* 0x84 @ 139 */ 0xE2, 0x80, 0x9E,
- /* 0x85 @ 142 */ 0xE2, 0x80, 0xA6,
- /* 0x86 @ 145 */ 0xE2, 0x80, 0xA0,
- /* 0x87 @ 148 */ 0xE2, 0x80, 0xA1,
- /* 0x88 @ 151 */ 0xCB, 0x86,
- /* 0x89 @ 153 */ 0xE2, 0x80, 0xB0,
- /* 0x8A @ 156 */ 0xC5, 0xA0,
- /* 0x8B @ 158 */ 0xE2, 0x80, 0xB9,
- /* 0x8C @ 161 */ 0xC5, 0x92,
- /* 0x8D @ 163 */ 0xEF, 0xBF, 0xBD,
- /* 0x8E @ 166 */ 0xC5, 0xBD,
- /* 0x8F @ 168 */ 0xEF, 0xBF, 0xBD,
- /* 0x90 @ 171 */ 0xEF, 0xBF, 0xBD,
- /* 0x91 @ 174 */ 0xE2, 0x80, 0x98,
- /* 0x92 @ 177 */ 0xE2, 0x80, 0x99,
- /* 0x93 @ 180 */ 0xE2, 0x80, 0x9C,
- /* 0x94 @ 183 */ 0xE2, 0x80, 0x9D,
- /* 0x95 @ 186 */ 0xE2, 0x80, 0xA2,
- /* 0x96 @ 189 */ 0xE2, 0x80, 0x93,
- /* 0x97 @ 192 */ 0xE2, 0x80, 0x94,
- /* 0x98 @ 195 */ 0xCB, 0x9C,
- /* 0x99 @ 197 */ 0xE2, 0x84, 0xA2,
- /* 0x9A @ 200 */ 0xC5, 0xA1,
- /* 0x9B @ 202 */ 0xE2, 0x80, 0xBA,
- /* 0x9C @ 205 */ 0xC5, 0x93,
- /* 0x9D @ 207 */ 0xEF, 0xBF, 0xBD,
- /* 0x9E @ 210 */ 0xC5, 0xBE,
- /* 0x9F @ 212 */ 0xC5, 0xB8,
- /* 0xA0 @ 214 */ 0xC2, 0xA0,
- /* 0xA1 @ 216 */ 0xC2, 0xA1,
- /* 0xA2 @ 218 */ 0xC2, 0xA2,
- /* 0xA3 @ 220 */ 0xC2, 0xA3,
- /* 0xA4 @ 222 */ 0xC2, 0xA4,
- /* 0xA5 @ 224 */ 0xC2, 0xA5,
- /* 0xA6 @ 226 */ 0xC2, 0xA6,
- /* 0xA7 @ 228 */ 0xC2, 0xA7,
- /* 0xA8 @ 230 */ 0xC2, 0xA8,
- /* 0xA9 @ 232 */ 0xC2, 0xA9,
- /* 0xAA @ 234 */ 0xC2, 0xAA,
- /* 0xAB @ 236 */ 0xC2, 0xAB,
- /* 0xAC @ 238 */ 0xC2, 0xAC,
- /* 0xAD @ 240 */ 0xC2, 0xAD,
- /* 0xAE @ 242 */ 0xC2, 0xAE,
- /* 0xAF @ 244 */ 0xC2, 0xAF,
- /* 0xB0 @ 246 */ 0xC2, 0xB0,
- /* 0xB1 @ 248 */ 0xC2, 0xB1,
- /* 0xB2 @ 250 */ 0xC2, 0xB2,
- /* 0xB3 @ 252 */ 0xC2, 0xB3,
- /* 0xB4 @ 254 */ 0xC2, 0xB4,
- /* 0xB5 @ 256 */ 0xC2, 0xB5,
- /* 0xB6 @ 258 */ 0xC2, 0xB6,
- /* 0xB7 @ 260 */ 0xC2, 0xB7,
- /* 0xB8 @ 262 */ 0xC2, 0xB8,
- /* 0xB9 @ 264 */ 0xC2, 0xB9,
- /* 0xBA @ 266 */ 0xC2, 0xBA,
- /* 0xBB @ 268 */ 0xC2, 0xBB,
- /* 0xBC @ 270 */ 0xC2, 0xBC,
- /* 0xBD @ 272 */ 0xC2, 0xBD,
- /* 0xBE @ 274 */ 0xC2, 0xBE,
- /* 0xBF @ 276 */ 0xC2, 0xBF,
- /* 0xC0 @ 278 */ 0xC3, 0x80,
- /* 0xC1 @ 280 */ 0xC3, 0x81,
- /* 0xC2 @ 282 */ 0xC3, 0x82,
- /* 0xC3 @ 284 */ 0xC3, 0x83,
- /* 0xC4 @ 286 */ 0xC3, 0x84,
- /* 0xC5 @ 288 */ 0xC3, 0x85,
- /* 0xC6 @ 290 */ 0xC3, 0x86,
- /* 0xC7 @ 292 */ 0xC3, 0x87,
- /* 0xC8 @ 294 */ 0xC3, 0x88,
- /* 0xC9 @ 296 */ 0xC3, 0x89,
- /* 0xCA @ 298 */ 0xC3, 0x8A,
- /* 0xCB @ 300 */ 0xC3, 0x8B,
- /* 0xCC @ 302 */ 0xC3, 0x8C,
- /* 0xCD @ 304 */ 0xC3, 0x8D,
- /* 0xCE @ 306 */ 0xC3, 0x8E,
- /* 0xCF @ 308 */ 0xC3, 0x8F,
- /* 0xD0 @ 310 */ 0xC3, 0x90,
- /* 0xD1 @ 312 */ 0xC3, 0x91,
- /* 0xD2 @ 314 */ 0xC3, 0x92,
- /* 0xD3 @ 316 */ 0xC3, 0x93,
- /* 0xD4 @ 318 */ 0xC3, 0x94,
- /* 0xD5 @ 320 */ 0xC3, 0x95,
- /* 0xD6 @ 322 */ 0xC3, 0x96,
- /* 0xD7 @ 324 */ 0xC3, 0x97,
- /* 0xD8 @ 326 */ 0xC3, 0x98,
- /* 0xD9 @ 328 */ 0xC3, 0x99,
- /* 0xDA @ 330 */ 0xC3, 0x9A,
- /* 0xDB @ 332 */ 0xC3, 0x9B,
- /* 0xDC @ 334 */ 0xC3, 0x9C,
- /* 0xDD @ 336 */ 0xC3, 0x9D,
- /* 0xDE @ 338 */ 0xC3, 0x9E,
- /* 0xDF @ 340 */ 0xC3, 0x9F,
- /* 0xE0 @ 342 */ 0xC3, 0xA0,
- /* 0xE1 @ 344 */ 0xC3, 0xA1,
- /* 0xE2 @ 346 */ 0xC3, 0xA2,
- /* 0xE3 @ 348 */ 0xC3, 0xA3,
- /* 0xE4 @ 350 */ 0xC3, 0xA4,
- /* 0xE5 @ 352 */ 0xC3, 0xA5,
- /* 0xE6 @ 354 */ 0xC3, 0xA6,
- /* 0xE7 @ 356 */ 0xC3, 0xA7,
- /* 0xE8 @ 358 */ 0xC3, 0xA8,
- /* 0xE9 @ 360 */ 0xC3, 0xA9,
- /* 0xEA @ 362 */ 0xC3, 0xAA,
- /* 0xEB @ 364 */ 0xC3, 0xAB,
- /* 0xEC @ 366 */ 0xC3, 0xAC,
- /* 0xED @ 368 */ 0xC3, 0xAD,
- /* 0xEE @ 370 */ 0xC3, 0xAE,
- /* 0xEF @ 372 */ 0xC3, 0xAF,
- /* 0xF0 @ 374 */ 0xC3, 0xB0,
- /* 0xF1 @ 376 */ 0xC3, 0xB1,
- /* 0xF2 @ 378 */ 0xC3, 0xB2,
- /* 0xF3 @ 380 */ 0xC3, 0xB3,
- /* 0xF4 @ 382 */ 0xC3, 0xB4,
- /* 0xF5 @ 384 */ 0xC3, 0xB5,
- /* 0xF6 @ 386 */ 0xC3, 0xB6,
- /* 0xF7 @ 388 */ 0xC3, 0xB7,
- /* 0xF8 @ 390 */ 0xC3, 0xB8,
- /* 0xF9 @ 392 */ 0xC3, 0xB9,
- /* 0xFA @ 394 */ 0xC3, 0xBA,
- /* 0xFB @ 396 */ 0xC3, 0xBB,
- /* 0xFC @ 398 */ 0xC3, 0xBC,
- /* 0xFD @ 400 */ 0xC3, 0xBD,
- /* 0xFE @ 402 */ 0xC3, 0xBE,
- /* 0xFF @ 404 */ 0xC3, 0xBF,
-};
-
-static const uint16_t tblofs[257] = {
- /* 0x00 */ 0, 1, 2, 3, 4, 5, 6, 7,
- /* 0x08 */ 8, 9, 10, 11, 12, 13, 14, 15,
- /* 0x10 */ 16, 17, 18, 19, 20, 21, 22, 23,
- /* 0x18 */ 24, 25, 26, 27, 28, 29, 30, 31,
- /* 0x20 */ 32, 33, 34, 35, 36, 37, 38, 39,
- /* 0x28 */ 40, 41, 42, 43, 44, 45, 46, 47,
- /* 0x30 */ 48, 49, 50, 51, 52, 53, 54, 55,
- /* 0x38 */ 56, 57, 58, 59, 60, 61, 62, 63,
- /* 0x40 */ 64, 65, 66, 67, 68, 69, 70, 71,
- /* 0x48 */ 72, 73, 74, 75, 76, 77, 78, 79,
- /* 0x50 */ 80, 81, 82, 83, 84, 85, 86, 87,
- /* 0x58 */ 88, 89, 90, 91, 92, 93, 94, 95,
- /* 0x60 */ 96, 97, 98, 99, 100, 101, 102, 103,
- /* 0x68 */ 104, 105, 106, 107, 108, 109, 110, 111,
- /* 0x70 */ 112, 113, 114, 115, 116, 117, 118, 119,
- /* 0x78 */ 120, 121, 122, 123, 124, 125, 126, 127,
- /* 0x80 */ 128, 131, 134, 137, 139, 142, 145, 148,
- /* 0x88 */ 151, 153, 156, 158, 161, 163, 166, 168,
- /* 0x90 */ 171, 174, 177, 180, 183, 186, 189, 192,
- /* 0x98 */ 195, 197, 200, 202, 205, 207, 210, 212,
- /* 0xA0 */ 214, 216, 218, 220, 222, 224, 226, 228,
- /* 0xA8 */ 230, 232, 234, 236, 238, 240, 242, 244,
- /* 0xB0 */ 246, 248, 250, 252, 254, 256, 258, 260,
- /* 0xB8 */ 262, 264, 266, 268, 270, 272, 274, 276,
- /* 0xC0 */ 278, 280, 282, 284, 286, 288, 290, 292,
- /* 0xC8 */ 294, 296, 298, 300, 302, 304, 306, 308,
- /* 0xD0 */ 310, 312, 314, 316, 318, 320, 322, 324,
- /* 0xD8 */ 326, 328, 330, 332, 334, 336, 338, 340,
- /* 0xE0 */ 342, 344, 346, 348, 350, 352, 354, 356,
- /* 0xE8 */ 358, 360, 362, 364, 366, 368, 370, 372,
- /* 0xF0 */ 374, 376, 378, 380, 382, 384, 386, 388,
- /* 0xF8 */ 390, 392, 394, 396, 398, 400, 402, 404,
- /* sizeof (cp1252_utf8) */ 406
-};
-
-/* Check if a string qualifies as UTF-8. */
-static int
-is_utf8(const char* src)
-{
- uint8_t ch;
- size_t i;
- const uint8_t* s = (const uint8_t*) src;
-
- /* We make a loop over every character, until we find a null one.
- Remember: The string is supposed to end with a NUL, so ahead checks are safe. */
- while ((ch = *s++)) {
- /* Ye olde 7bit ASCII chars 'rr fine for anything */
- if(ch < 0x80) continue;
-
- /* Now, we watch out for non-UTF conform sequences. */
- else if ((ch < 0xC2) || (ch > 0xFD))
- return 0;
- /* check for some misformed sequences */
- if (((ch == 0xC2) && (s[0] < 0xA0)) ||
- ((ch == 0xEF) && (s[0] == 0xBF) && (s[1] > 0xBD)))
- /* XXX add more for outside the BMP */
- return 0;
-
- /* Check the continuation bytes. */
- if (ch < 0xE0) i = 1;
- else if (ch < 0xF0) i = 2;
- else if (ch < 0xF8) i = 3;
- else if (ch < 0xFC) i = 4;
- else
- i = 5;
-
- while (i--)
- if ((*s++ & 0xC0) != 0x80)
- return 0;
- }
-
- /* If no check failed, the string indeed looks like valid UTF-8. */
- return 1;
-}
-
-/* The main conversion routine.
- ICY in CP-1252 (or UTF-8 alreay) to UTF-8 encoded string.
- If force is applied, it will always encode to UTF-8, without checking. */
-char *
-icy2utf8(const char *src, int force)
-{
- const uint8_t *s = (const uint8_t *)src;
- size_t srclen, dstlen, i, k;
- uint8_t ch, *d;
- char *dst;
-
- /* Some funny streams from Apple/iTunes give ICY info in UTF-8 already.
- So, be prepared and don't try to re-encode such. Unless forced. */
- if(!force && is_utf8(src)) return (strdup(src));
-
- srclen = strlen(src) + 1;
- /* allocate conservatively */
- if ((d = malloc(srclen * 3)) == NULL)
- return (NULL);
-
- i = 0;
- dstlen = 0;
- while (i < srclen) {
- ch = s[i++];
- k = tblofs[ch];
- while (k < tblofs[ch + 1])
- d[dstlen++] = cp1252_utf8[k++];
- }
-
- /* dstlen includes trailing NUL since srclen also does */
- if ((dst = realloc(d, dstlen)) == NULL) {
- free(d);
- return (NULL);
- }
- return (dst);
-}
-
-/* This stuff is for testing only. */
-#ifdef TEST
-static const char intext[] = "\225 Gr\374\337e kosten 0,55 \200\205";
-
-#include <stdio.h>
-
-int
-main(void)
-{
- char *t, *t2;
-
- if ((t = icy2utf8(intext, 0)) == NULL) {
- fprintf(stderr, "out of memory\n");
- return (1);
- }
-
- /* make sure it won't be converted twice */
- if ((t2 = icy2utf8(t), 0) == NULL) {
- fprintf(stderr, "out of memory\n");
- return (1);
- }
-
- printf("Result is:\t\343\200\214%s\343\200\215\n"
- "\t\t\343\200\214%s\343\200\215\n", t, t2);
-
- free(t);
- free(t2);
- return (0);
-}
-#endif
diff --git a/src/mpg123/libmpg123/icy2utf8.h b/src/mpg123/libmpg123/icy2utf8.h
deleted file mode 100644
index aeec012..0000000
--- a/src/mpg123/libmpg123/icy2utf8.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* You expect a license plate for _this_ file? */
-#ifndef MPG123_ICY2UTF_H
-#define MPG123_ICY2UTF_H
-
-#ifndef NO_ICY
-/* (string, force conversion) */
-char *icy2utf8(const char *, int);
-#endif
-
-#endif
diff --git a/src/mpg123/libmpg123/id3.c b/src/mpg123/libmpg123/id3.c
deleted file mode 100644
index ef7e26a..0000000
--- a/src/mpg123/libmpg123/id3.c
+++ /dev/null
@@ -1,991 +0,0 @@
-/*
- id3: ID3v2.3 and ID3v2.4 parsing (a relevant subset)
-
- copyright 2006-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#include "mpg123lib_intern.h"
-#include "id3.h"
-#include "debug.h"
-
-#ifndef NO_ID3V2 /* Only the main parsing routine will always be there. */
-
-/* We know the usual text frames plus some specifics. */
-#define KNOWN_FRAMES 4
-static const char frame_type[KNOWN_FRAMES][5] = { "COMM", "TXXX", "RVA2", "USLT" };
-enum frame_types { unknown = -2, text = -1, comment, extra, rva2, uslt };
-
-/* UTF support definitions */
-
-typedef void (*text_converter)(mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet);
-
-static void convert_latin1 (mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet);
-static void convert_utf16bom(mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet);
-static void convert_utf8 (mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet);
-
-static const text_converter text_converters[4] =
-{
- convert_latin1,
- /* We always check for (multiple) BOM in 16bit unicode. Without BOM, UTF16 BE is the default.
- Errors in encoding are detected anyway. */
- convert_utf16bom,
- convert_utf16bom,
- convert_utf8
-};
-
-const unsigned int encoding_widths[4] = { 1, 2, 2, 1 };
-
-/* the code starts here... */
-
-static void null_id3_links(mpg123_handle *fr)
-{
- fr->id3v2.title = NULL;
- fr->id3v2.artist = NULL;
- fr->id3v2.album = NULL;
- fr->id3v2.year = NULL;
- fr->id3v2.genre = NULL;
- fr->id3v2.comment = NULL;
-}
-
-void init_id3(mpg123_handle *fr)
-{
- fr->id3v2.version = 0; /* nothing there */
- null_id3_links(fr);
- fr->id3v2.comments = 0;
- fr->id3v2.comment_list = NULL;
- fr->id3v2.texts = 0;
- fr->id3v2.text = NULL;
- fr->id3v2.extras = 0;
- fr->id3v2.extra = NULL;
-}
-
-/* Managing of the text, comment and extra lists. */
-
-/* Initialize one element. */
-static void init_mpg123_text(mpg123_text *txt)
-{
- mpg123_init_string(&txt->text);
- mpg123_init_string(&txt->description);
- txt->id[0] = 0;
- txt->id[1] = 0;
- txt->id[2] = 0;
- txt->id[3] = 0;
- txt->lang[0] = 0;
- txt->lang[1] = 0;
- txt->lang[2] = 0;
-}
-
-/* Free memory of one element. */
-static void free_mpg123_text(mpg123_text *txt)
-{
- mpg123_free_string(&txt->text);
- mpg123_free_string(&txt->description);
-}
-
-/* Free memory of whole list. */
-#define free_comment(mh) free_id3_text(&((mh)->id3v2.comment_list), &((mh)->id3v2.comments))
-#define free_text(mh) free_id3_text(&((mh)->id3v2.text), &((mh)->id3v2.texts))
-#define free_extra(mh) free_id3_text(&((mh)->id3v2.extra), &((mh)->id3v2.extras))
-static void free_id3_text(mpg123_text **list, size_t *size)
-{
- size_t i;
- for(i=0; i<*size; ++i) free_mpg123_text(&((*list)[i]));
-
- free(*list);
- *list = NULL;
- *size = 0;
-}
-
-/* Add items to the list. */
-#define add_comment(mh) add_id3_text(&((mh)->id3v2.comment_list), &((mh)->id3v2.comments))
-#define add_text(mh) add_id3_text(&((mh)->id3v2.text), &((mh)->id3v2.texts))
-#define add_extra(mh) add_id3_text(&((mh)->id3v2.extra), &((mh)->id3v2.extras))
-static mpg123_text *add_id3_text(mpg123_text **list, size_t *size)
-{
- mpg123_text *x = safe_realloc(*list, sizeof(mpg123_text)*(*size+1));
- if(x == NULL) return NULL; /* bad */
-
- *list = x;
- *size += 1;
- init_mpg123_text(&((*list)[*size-1]));
-
- return &((*list)[*size-1]); /* Return pointer to the added text. */
-}
-
-/* Remove the last item. */
-#define pop_comment(mh) pop_id3_text(&((mh)->id3v2.comment_list), &((mh)->id3v2.comments))
-#define pop_text(mh) pop_id3_text(&((mh)->id3v2.text), &((mh)->id3v2.texts))
-#define pop_extra(mh) pop_id3_text(&((mh)->id3v2.extra), &((mh)->id3v2.extras))
-static void pop_id3_text(mpg123_text **list, size_t *size)
-{
- mpg123_text *x;
- if(*size < 1) return;
-
- free_mpg123_text(&((*list)[*size-1]));
- if(*size > 1)
- {
- x = safe_realloc(*list, sizeof(mpg123_text)*(*size-1));
- if(x != NULL){ *list = x; *size -= 1; }
- }
- else
- {
- free(*list);
- *list = NULL;
- *size = 0;
- }
-}
-
-/* OK, back t the higher level functions. */
-
-void exit_id3(mpg123_handle *fr)
-{
- free_comment(fr);
- free_extra(fr);
- free_text(fr);
-}
-
-void reset_id3(mpg123_handle *fr)
-{
- exit_id3(fr);
- init_id3(fr);
-}
-
-/* Set the id3v2.artist id3v2.title ... links to elements of the array. */
-void id3_link(mpg123_handle *fr)
-{
- size_t i;
- mpg123_id3v2 *v2 = &fr->id3v2;
- debug("linking ID3v2");
- null_id3_links(fr);
- for(i=0; i<v2->texts; ++i)
- {
- mpg123_text *entry = &v2->text[i];
- if (!strncmp("TIT2", entry->id, 4)) v2->title = &entry->text;
- else if(!strncmp("TALB", entry->id, 4)) v2->album = &entry->text;
- else if(!strncmp("TPE1", entry->id, 4)) v2->artist = &entry->text;
- else if(!strncmp("TYER", entry->id, 4)) v2->year = &entry->text;
- else if(!strncmp("TCON", entry->id, 4)) v2->genre = &entry->text;
- }
- for(i=0; i<v2->comments; ++i)
- {
- mpg123_text *entry = &v2->comment_list[i];
- if(entry->description.fill == 0 || entry->description.p[0] == 0)
- v2->comment = &entry->text;
- }
- /* When no generic comment found, use the last non-generic one. */
- if(v2->comment == NULL && v2->comments > 0)
- v2->comment = &v2->comment_list[v2->comments-1].text;
-}
-
-/*
- Store ID3 text data in an mpg123_string; either verbatim copy or everything translated to UTF-8 encoding.
- Preserve the zero string separator (I don't need strlen for the total size).
-
- ID3v2 standard says that there should be one text frame of specific type per tag, and subsequent tags overwrite old values.
- So, I always replace the text that may be stored already (perhaps with a list of zero-separated strings, though).
-*/
-void store_id3_text(mpg123_string *sb, char *source, size_t source_size, const int noquiet, const int notranslate)
-{
- if(!source_size)
- {
- debug("Empty id3 data!");
- return;
- }
-
- /* We shall just copy the data. Client wants to decode itself. */
- if(notranslate)
- {
- /* Future: Add a path for ID3 errors. */
- if(!mpg123_resize_string(sb, source_size))
- {
- if(noquiet) error("Cannot resize target string, out of memory?");
- return;
- }
- memcpy(sb->p, source, source_size);
- sb->fill = source_size;
- debug1("stored undecoded ID3 text of size %"SIZE_P, (size_p)source_size);
- return;
- }
-
- id3_to_utf8(sb, ((unsigned char *)source)[0], (unsigned char*)source+1, source_size-1, noquiet);
-
- if(sb->fill) debug1("UTF-8 string (the first one): %s", sb->p);
- else if(noquiet) error("unable to convert string to UTF-8 (out of memory, junk input?)!");
-}
-
-/* On error, sb->size is 0. */
-void id3_to_utf8(mpg123_string *sb, unsigned char encoding, const unsigned char *source, size_t source_size, int noquiet)
-{
- unsigned int bwidth;
- debug1("encoding: %u", encoding);
- /* A note: ID3v2.3 uses UCS-2 non-variable 16bit encoding, v2.4 uses UTF16.
- UTF-16 uses a reserved/private range in UCS-2 to add the magic, so we just always treat it as UTF. */
- if(encoding > mpg123_id3_enc_max)
- {
- if(noquiet) error1("Unknown text encoding %u, I take no chances, sorry!", encoding);
-
- mpg123_free_string(sb);
- return;
- }
- bwidth = encoding_widths[encoding];
- /* Hack! I've seen a stray zero byte before BOM. Is that supposed to happen? */
- if(encoding != mpg123_id3_utf16be) /* UTF16be _can_ beging with a null byte! */
- while(source_size > bwidth && source[0] == 0)
- {
- --source_size;
- ++source;
- debug("skipped leading zero");
- }
- if(source_size % bwidth)
- {
- /* When we need two bytes for a character, it's strange to have an uneven bytestream length. */
- if(noquiet) warning2("Weird tag size %d for encoding %u - I will probably trim too early or something but I think the MP3 is broken.", (int)source_size, encoding);
- source_size -= source_size % bwidth;
- }
- text_converters[encoding](sb, source, source_size, noquiet);
-}
-
-char *next_text(char* prev, int encoding, size_t limit)
-{
- char *text = prev;
- size_t width = encoding_widths[encoding];
-
- /* So I go lengths to find zero or double zero...
- Remember bug 2834636: Only check for aligned NULLs! */
- while(text-prev < (ssize_t)limit)
- {
- if(text[0] == 0)
- {
- if(width <= limit-(text-prev))
- {
- size_t i = 1;
- for(; i<width; ++i) if(text[i] != 0) break;
-
- if(i == width) /* found a null wide enough! */
- {
- text += width;
- break;
- }
- }
- else return NULL; /* No full character left? This text is broken */
- }
-
- text += width;
- }
- if((size_t)(text-prev) >= limit) text = NULL;
-
- return text;
-}
-
-static const char *enc_name(int enc)
-{
- switch(enc)
- {
- case 0: return "Latin 1";
- case 1: return "UTF-16 BOM";
- case 2: return "UTF-16 BE";
- case 3: return "UTF-8";
- default: return "unknown!";
- }
-}
-
-static void process_text(mpg123_handle *fr, char *realdata, size_t realsize, char *id)
-{
- /* Text encoding $xx */
- /* The text (encoded) ... */
- mpg123_text *t = add_text(fr);
- if(VERBOSE4) fprintf(stderr, "Note: Storing text from %s encoding\n", enc_name(realdata[0]));
- if(t == NULL)
- {
- if(NOQUIET) error("Unable to attach new text!");
- return;
- }
- memcpy(t->id, id, 4);
- store_id3_text(&t->text, realdata, realsize, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT);
- if(VERBOSE4) fprintf(stderr, "Note: ID3v2 %c%c%c%c text frame: %s\n", id[0], id[1], id[2], id[3], t->text.p);
-}
-
-/* Store a new comment that perhaps is a RVA / RVA_ALBUM/AUDIOPHILE / RVA_MIX/RADIO one
- Special gimmik: It also stores USLT to the texts. Stucture is the same as for comments. */
-static void process_comment(mpg123_handle *fr, enum frame_types tt, char *realdata, size_t realsize, int rva_level, char *id)
-{
- /* Text encoding $xx */
- /* Language $xx xx xx */
- /* Short description (encoded!) <text> $00 (00) */
- /* Then the comment text (encoded) ... */
- char encoding = realdata[0];
- char *lang = realdata+1; /* I'll only use the 3 bytes! */
- char *descr = realdata+4;
- char *text = NULL;
- mpg123_text *xcom = NULL;
- mpg123_text localcom; /* UTF-8 variant for local processing. */
-
- if((int)realsize < descr-realdata)
- {
- if(NOQUIET) error1("Invalid frame size of %lu (too small for anything).", (unsigned long)realsize);
- return;
- }
- xcom = (tt == uslt ? add_text(fr) : add_comment(fr));
- if(VERBOSE4) fprintf(stderr, "Note: Storing comment from %s encoding\n", enc_name(realdata[0]));
- if(xcom == NULL)
- {
- if(NOQUIET) error("Unable to attach new comment!");
- return;
- }
- memcpy(xcom->lang, lang, 3);
- memcpy(xcom->id, id, 4);
- /* Now I can abuse a byte from lang for the encoding. */
- descr[-1] = encoding;
- /* Be careful with finding the end of description, I have to honor encoding here. */
- text = next_text(descr, encoding, realsize-(descr-realdata));
- if(text == NULL)
- {
- if(NOQUIET) error("No comment text / valid description?");
- pop_comment(fr);
- return;
- }
-
- init_mpg123_text(&localcom);
- /* Store the text, without translation to UTF-8, but for comments always a local copy in UTF-8.
- Reminder: No bailing out from here on without freeing the local comment data! */
- store_id3_text(&xcom->description, descr-1, text-descr+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT);
- if(tt == comment)
- store_id3_text(&localcom.description, descr-1, text-descr+1, NOQUIET, 0);
-
- text[-1] = encoding; /* Byte abusal for encoding... */
- store_id3_text(&xcom->text, text-1, realsize+1-(text-realdata), NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT);
- /* Remember: I will probably decode the above (again) for rva comment checking. So no messing around, please. */
-
- if(VERBOSE4) /* Do _not_ print the verbatim text: The encoding might be funny! */
- {
- fprintf(stderr, "Note: ID3 comm/uslt desc of length %"SIZE_P".\n", (size_p)xcom->description.fill);
- fprintf(stderr, "Note: ID3 comm/uslt text of length %"SIZE_P".\n", (size_p)xcom->text.fill);
- }
- /* Look out for RVA info only when we really deal with a straight comment. */
- if(tt == comment && localcom.description.fill > 0)
- {
- int rva_mode = -1; /* mix / album */
- if( !strcasecmp(localcom.description.p, "rva")
- || !strcasecmp(localcom.description.p, "rva_mix")
- || !strcasecmp(localcom.description.p, "rva_track")
- || !strcasecmp(localcom.description.p, "rva_radio") )
- rva_mode = 0;
- else if( !strcasecmp(localcom.description.p, "rva_album")
- || !strcasecmp(localcom.description.p, "rva_audiophile")
- || !strcasecmp(localcom.description.p, "rva_user") )
- rva_mode = 1;
- if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level))
- {
- /* Only translate the contents in here where we really need them. */
- store_id3_text(&localcom.text, text-1, realsize+1-(text-realdata), NOQUIET, 0);
- if(localcom.text.fill > 0)
- {
- fr->rva.gain[rva_mode] = (float) atof(localcom.text.p);
- if(VERBOSE3) fprintf(stderr, "Note: RVA value %fdB\n", fr->rva.gain[rva_mode]);
- fr->rva.peak[rva_mode] = 0;
- fr->rva.level[rva_mode] = rva_level;
- }
- }
- }
- /* Make sure to free the local memory... */
- free_mpg123_text(&localcom);
-}
-
-void process_extra(mpg123_handle *fr, char* realdata, size_t realsize, int rva_level, char *id)
-{
- /* Text encoding $xx */
- /* Description ... $00 (00) */
- /* Text ... */
- char encoding = realdata[0];
- char *descr = realdata+1; /* remember, the encoding is descr[-1] */
- char *text;
- mpg123_text *xex;
- mpg123_text localex;
-
- if((int)realsize < descr-realdata)
- {
- if(NOQUIET) error1("Invalid frame size of %lu (too small for anything).", (unsigned long)realsize);
- return;
- }
- text = next_text(descr, encoding, realsize-(descr-realdata));
- if(VERBOSE4) fprintf(stderr, "Note: Storing extra from %s encoding\n", enc_name(realdata[0]));
- if(text == NULL)
- {
- if(NOQUIET) error("No extra frame text / valid description?");
- return;
- }
- xex = add_extra(fr);
- if(xex == NULL)
- {
- if(NOQUIET) error("Unable to attach new extra text!");
- return;
- }
- memcpy(xex->id, id, 4);
- init_mpg123_text(&localex); /* For our local copy. */
-
- /* The outside storage gets reencoded to UTF-8 only if not requested otherwise.
- Remember that we really need the -1 here to hand in the encoding byte!*/
- store_id3_text(&xex->description, descr-1, text-descr+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT);
- /* Our local copy is always stored in UTF-8! */
- store_id3_text(&localex.description, descr-1, text-descr+1, NOQUIET, 0);
- /* At first, only store the outside copy of the payload. We may not need the local copy. */
- text[-1] = encoding;
- store_id3_text(&xex->text, text-1, realsize-(text-realdata)+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT);
-
- /* Now check if we would like to interpret this extra info for RVA. */
- if(localex.description.fill > 0)
- {
- int is_peak = 0;
- int rva_mode = -1; /* mix / album */
-
- if(!strncasecmp(localex.description.p, "replaygain_track_",17))
- {
- if(VERBOSE3) fprintf(stderr, "Note: RVA ReplayGain track gain/peak\n");
-
- rva_mode = 0;
- if(!strcasecmp(localex.description.p, "replaygain_track_peak")) is_peak = 1;
- else if(strcasecmp(localex.description.p, "replaygain_track_gain")) rva_mode = -1;
- }
- else
- if(!strncasecmp(localex.description.p, "replaygain_album_",17))
- {
- if(VERBOSE3) fprintf(stderr, "Note: RVA ReplayGain album gain/peak\n");
-
- rva_mode = 1;
- if(!strcasecmp(localex.description.p, "replaygain_album_peak")) is_peak = 1;
- else if(strcasecmp(localex.description.p, "replaygain_album_gain")) rva_mode = -1;
- }
- if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level))
- {
- /* Now we need the translated copy of the data. */
- store_id3_text(&localex.text, text-1, realsize-(text-realdata)+1, NOQUIET, 0);
- if(localex.text.fill > 0)
- {
- if(is_peak)
- {
- fr->rva.peak[rva_mode] = (float) atof(localex.text.p);
- if(VERBOSE3) fprintf(stderr, "Note: RVA peak %f\n", fr->rva.peak[rva_mode]);
- }
- else
- {
- fr->rva.gain[rva_mode] = (float) atof(localex.text.p);
- if(VERBOSE3) fprintf(stderr, "Note: RVA gain %fdB\n", fr->rva.gain[rva_mode]);
- }
- fr->rva.level[rva_mode] = rva_level;
- }
- }
- }
-
- free_mpg123_text(&localex);
-}
-
-/* Make a ID3v2.3+ 4-byte ID from a ID3v2.2 3-byte ID
- Note that not all frames survived to 2.4; the mapping goes to 2.3 .
- A notable miss is the old RVA frame, which is very unspecific anyway.
- This function returns -1 when a not known 3 char ID was encountered, 0 otherwise. */
-int promote_framename(mpg123_handle *fr, char *id) /* fr because of VERBOSE macros */
-{
- size_t i;
- char *old[] =
- {
- "COM", "TAL", "TBP", "TCM", "TCO", "TCR", "TDA", "TDY", "TEN", "TFT",
- "TIM", "TKE", "TLA", "TLE", "TMT", "TOA", "TOF", "TOL", "TOR", "TOT",
- "TP1", "TP2", "TP3", "TP4", "TPA", "TPB", "TRC", "TDA", "TRK", "TSI",
- "TSS", "TT1", "TT2", "TT3", "TXT", "TXX", "TYE"
- };
- char *new[] =
- {
- "COMM", "TALB", "TBPM", "TCOM", "TCON", "TCOP", "TDAT", "TDLY", "TENC", "TFLT",
- "TIME", "TKEY", "TLAN", "TLEN", "TMED", "TOPE", "TOFN", "TOLY", "TORY", "TOAL",
- "TPE1", "TPE2", "TPE3", "TPE4", "TPOS", "TPUB", "TSRC", "TRDA", "TRCK", "TSIZ",
- "TSSE", "TIT1", "TIT2", "TIT3", "TEXT", "TXXX", "TYER"
- };
- for(i=0; i<sizeof(old)/sizeof(char*); ++i)
- {
- if(!strncmp(id, old[i], 3))
- {
- memcpy(id, new[i], 4);
- if(VERBOSE3) fprintf(stderr, "Translated ID3v2.2 frame %s to %s\n", old[i], new[i]);
- return 0;
- }
- }
- if(VERBOSE3) fprintf(stderr, "Ignoring untranslated ID3v2.2 frame %c%c%c\n", id[0], id[1], id[2]);
- return -1;
-}
-
-#endif /* NO_ID3V2 */
-
-/*
- trying to parse ID3v2.3 and ID3v2.4 tags...
-
- returns: 0: bad or just unparseable tag
- 1: good, (possibly) new tag info
- <0: reader error (may need more data feed, try again)
-*/
-int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes)
-{
- #define UNSYNC_FLAG 128
- #define EXTHEAD_FLAG 64
- #define EXP_FLAG 32
- #define FOOTER_FLAG 16
- #define UNKNOWN_FLAGS 15 /* 00001111*/
- unsigned char buf[6];
- unsigned long length=0;
- unsigned char flags = 0;
- int ret = 1;
- int ret2;
- unsigned char major = first4bytes & 0xff;
- debug1("ID3v2: major tag version: %i", major);
- if(major == 0xff) return 0; /* Invalid... */
- if((ret2 = fr->rd->read_frame_body(fr, buf, 6)) < 0) /* read more header information */
- return ret2;
-
- if(buf[0] == 0xff) return 0; /* Revision, will never be 0xff. */
-
- /* second new byte are some nice flags, if these are invalid skip the whole thing */
- flags = buf[1];
- debug1("ID3v2: flags 0x%08x", flags);
- /* use 4 bytes from buf to construct 28bit uint value and return 1; return 0 if bytes are not synchsafe */
- #define synchsafe_to_long(buf,res) \
- ( \
- (((buf)[0]|(buf)[1]|(buf)[2]|(buf)[3]) & 0x80) ? 0 : \
- (res = (((unsigned long) (buf)[0]) << 21) \
- | (((unsigned long) (buf)[1]) << 14) \
- | (((unsigned long) (buf)[2]) << 7) \
- | ((unsigned long) (buf)[3]) \
- ,1) \
- )
- /* id3v2.3 does not store synchsafe frame sizes, but synchsafe tag size - doh! */
- #define bytes_to_long(buf,res) \
- ( \
- major == 3 ? \
- (res = (((unsigned long) (buf)[0]) << 24) \
- | (((unsigned long) (buf)[1]) << 16) \
- | (((unsigned long) (buf)[2]) << 8) \
- | ((unsigned long) (buf)[3]) \
- ,1) : synchsafe_to_long(buf,res) \
- )
- /* for id3v2.2 only */
- #define threebytes_to_long(buf,res) \
- ( \
- res = (((unsigned long) (buf)[0]) << 16) \
- | (((unsigned long) (buf)[1]) << 8) \
- | ((unsigned long) (buf)[2]) \
- ,1 \
- )
-
- /* length-10 or length-20 (footer present); 4 synchsafe integers == 28 bit number */
- /* we have already read 10 bytes, so left are length or length+10 bytes belonging to tag */
- if(!synchsafe_to_long(buf+2,length))
- {
- if(NOQUIET) error4("Bad tag length (not synchsafe): 0x%02x%02x%02x%02x; You got a bad ID3 tag here.", buf[2],buf[3],buf[4],buf[5]);
- return 0;
- }
- debug1("ID3v2: tag data length %lu", length);
-#ifndef NO_ID3V2
- if(VERBOSE2) fprintf(stderr,"Note: ID3v2.%i rev %i tag of %lu bytes\n", major, buf[0], length);
- /* skip if unknown version/scary flags, parse otherwise */
- if((flags & UNKNOWN_FLAGS) || (major > 4) || (major < 2))
- {
- /* going to skip because there are unknown flags set */
- if(NOQUIET) warning2("ID3v2: Won't parse the ID3v2 tag with major version %u and flags 0x%xu - some extra code may be needed", major, flags);
-#endif
- if((ret2 = fr->rd->skip_bytes(fr,length)) < 0) /* will not store data in backbuff! */
- ret = ret2;
-#ifndef NO_ID3V2
- }
- else
- {
- unsigned char* tagdata = NULL;
- fr->id3v2.version = major;
- /* try to interpret that beast */
- if((tagdata = (unsigned char*) malloc(length+1)) != NULL)
- {
- debug("ID3v2: analysing frames...");
- if((ret2 = fr->rd->read_frame_body(fr,tagdata,length)) > 0)
- {
- unsigned long tagpos = 0;
- debug1("ID3v2: have read at all %lu bytes for the tag now", (unsigned long)length+6);
- /* going to apply strlen for strings inside frames, make sure that it doesn't overflow! */
- tagdata[length] = 0;
- if(flags & EXTHEAD_FLAG)
- {
- debug("ID3v2: skipping extended header");
- if(!bytes_to_long(tagdata, tagpos))
- {
- ret = 0;
- if(NOQUIET) error4("Bad (non-synchsafe) tag offset: 0x%02x%02x%02x%02x", tagdata[0], tagdata[1], tagdata[2], tagdata[3]);
- }
- }
- if(ret > 0)
- {
- char id[5];
- unsigned long framesize;
- unsigned long fflags; /* need 16 bits, actually */
- id[4] = 0;
- /* pos now advanced after ext head, now a frame has to follow */
- while(tagpos < length-10) /* I want to read at least a full header */
- {
- int i = 0;
- unsigned long pos = tagpos;
- int head_part = fr->id3v2.version == 2 ? 3 : 4; /* bytes of frame title and of framesize value */
- /* level 1,2,3 - 0 is info from lame/info tag! */
- /* rva tags with ascending significance, then general frames */
- enum frame_types tt = unknown;
- /* we may have entered the padding zone or any other strangeness: check if we have valid frame id characters */
- for(i=0; i< head_part; ++i)
- if( !( ((tagdata[tagpos+i] > 47) && (tagdata[tagpos+i] < 58))
- || ((tagdata[tagpos+i] > 64) && (tagdata[tagpos+i] < 91)) ) )
- {
- debug5("ID3v2: real tag data apparently ended after %lu bytes with 0x%02x%02x%02x%02x", tagpos, tagdata[tagpos], tagdata[tagpos+1], tagdata[tagpos+2], tagdata[tagpos+3]);
- /* This is no hard error... let's just hope that we got something meaningful already (ret==1 in that case). */
- goto tagparse_cleanup; /* Need to escape two loops here. */
- }
- if(ret > 0)
- {
- /* 4 or 3 bytes id */
- strncpy(id, (char*) tagdata+pos, head_part);
- pos += head_part;
- tagpos += head_part;
- /* size as 32 bits or 28 bits */
- if(fr->id3v2.version == 2) threebytes_to_long(tagdata+pos, framesize);
- else
- if(!bytes_to_long(tagdata+pos, framesize))
- {
- /* Just assume that up to now there was some good data. */
- if(NOQUIET) error1("ID3v2: non-syncsafe size of %s frame, skipping the remainder of tag", id);
- break;
- }
- if(VERBOSE3) fprintf(stderr, "Note: ID3v2 %s frame of size %lu\n", id, framesize);
- tagpos += head_part + framesize; /* the important advancement in whole tag */
- if(tagpos > length)
- {
- if(NOQUIET) error("Whoa! ID3v2 frame claims to be larger than the whole rest of the tag.");
- break;
- }
- pos += head_part;
- if(fr->id3v2.version > 2)
- {
- fflags = (((unsigned long) tagdata[pos]) << 8) | ((unsigned long) tagdata[pos+1]);
- pos += 2;
- tagpos += 2;
- }
- else fflags = 0;
- /* for sanity, after full parsing tagpos should be == pos */
- /* debug4("ID3v2: found %s frame, size %lu (as bytes: 0x%08lx), flags 0x%016lx", id, framesize, framesize, fflags); */
- /* %0abc0000 %0h00kmnp */
- #define BAD_FFLAGS (unsigned long) 36784
- #define PRES_TAG_FFLAG 16384
- #define PRES_FILE_FFLAG 8192
- #define READ_ONLY_FFLAG 4096
- #define GROUP_FFLAG 64
- #define COMPR_FFLAG 8
- #define ENCR_FFLAG 4
- #define UNSYNC_FFLAG 2
- #define DATLEN_FFLAG 1
- if(head_part < 4 && promote_framename(fr, id) != 0) continue;
-
- /* shall not or want not handle these */
- if(fflags & (BAD_FFLAGS | COMPR_FFLAG | ENCR_FFLAG))
- {
- if(NOQUIET) warning("ID3v2: skipping invalid/unsupported frame");
- continue;
- }
-
- for(i = 0; i < KNOWN_FRAMES; ++i)
- if(!strncmp(frame_type[i], id, 4)){ tt = i; break; }
-
- if(id[0] == 'T' && tt != extra) tt = text;
-
- if(tt != unknown)
- {
- int rva_mode = -1; /* mix / album */
- unsigned long realsize = framesize;
- unsigned char* realdata = tagdata+pos;
- if((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG))
- {
- unsigned long ipos = 0;
- unsigned long opos = 0;
- debug("Id3v2: going to de-unsync the frame data");
- /* de-unsync: FF00 -> FF; real FF00 is simply represented as FF0000 ... */
- /* damn, that means I have to delete bytes from withing the data block... thus need temporal storage */
- /* standard mandates that de-unsync should always be safe if flag is set */
- realdata = (unsigned char*) malloc(framesize); /* will need <= bytes */
- if(realdata == NULL)
- {
- if(NOQUIET) error("ID3v2: unable to allocate working buffer for de-unsync");
- continue;
- }
- /* now going byte per byte through the data... */
- realdata[0] = tagdata[pos];
- opos = 1;
- for(ipos = pos+1; ipos < pos+framesize; ++ipos)
- {
- if(!((tagdata[ipos] == 0) && (tagdata[ipos-1] == 0xff)))
- {
- realdata[opos++] = tagdata[ipos];
- }
- }
- realsize = opos;
- debug2("ID3v2: de-unsync made %lu out of %lu bytes", realsize, framesize);
- }
- pos = 0; /* now at the beginning again... */
- switch(tt)
- {
- case comment:
- case uslt:
- process_comment(fr, tt, (char*)realdata, realsize, comment+1, id);
- break;
- case extra: /* perhaps foobar2000's work */
- process_extra(fr, (char*)realdata, realsize, extra+1, id);
- break;
- case rva2: /* "the" RVA tag */
- {
- /* starts with null-terminated identification */
- if(VERBOSE3) fprintf(stderr, "Note: RVA2 identification \"%s\"\n", realdata);
- /* default: some individual value, mix mode */
- rva_mode = 0;
- if( !strncasecmp((char*)realdata, "album", 5)
- || !strncasecmp((char*)realdata, "audiophile", 10)
- || !strncasecmp((char*)realdata, "user", 4))
- rva_mode = 1;
- if(fr->rva.level[rva_mode] <= rva2+1)
- {
- pos += strlen((char*) realdata) + 1;
- if(realdata[pos] == 1)
- {
- ++pos;
- /* only handle master channel */
- debug("ID3v2: it is for the master channel");
- /* two bytes adjustment, one byte for bits representing peak - n bytes, eh bits, for peak */
- /* 16 bit signed integer = dB * 512 ... the double cast is needed to preserve the sign of negative values! */
- fr->rva.gain[rva_mode] = (float) ( (((short)((signed char)realdata[pos])) << 8) | realdata[pos+1] ) / 512;
- pos += 2;
- if(VERBOSE3) fprintf(stderr, "Note: RVA value %fdB\n", fr->rva.gain[rva_mode]);
- /* heh, the peak value is represented by a number of bits - but in what manner? Skipping that part */
- fr->rva.peak[rva_mode] = 0;
- fr->rva.level[rva_mode] = rva2+1;
- }
- }
- }
- break;
- /* non-rva metainfo, simply store... */
- case text:
- process_text(fr, (char*)realdata, realsize, id);
- break;
- default: if(NOQUIET) error1("ID3v2: unknown frame type %i", tt);
- }
- if((flags & UNSYNC_FLAG) || (fflags & UNSYNC_FFLAG)) free(realdata);
- }
- #undef BAD_FFLAGS
- #undef PRES_TAG_FFLAG
- #undef PRES_FILE_FFLAG
- #undef READ_ONLY_FFLAG
- #undef GROUP_FFLAG
- #undef COMPR_FFLAG
- #undef ENCR_FFLAG
- #undef UNSYNC_FFLAG
- #undef DATLEN_FFLAG
- }
- else break;
- #undef KNOWN_FRAMES
- }
- }
- }
- else
- {
- /* There are tags with zero length. Strictly not an error, then. */
- if(length > 0 && NOQUIET) error("ID3v2: Duh, not able to read ID3v2 tag data.");
- ret = ret2;
- }
-tagparse_cleanup:
- free(tagdata);
- }
- else
- {
- if(NOQUIET) error1("ID3v2: Arrg! Unable to allocate %lu bytes for interpreting ID3v2 data - trying to skip instead.", length);
- if((ret2 = fr->rd->skip_bytes(fr,length)) < 0) ret = ret2; /* will not store data in backbuff! */
- else ret = 0;
- }
- }
-#endif /* NO_ID3V2 */
- /* skip footer if present */
- if((ret > 0) && (flags & FOOTER_FLAG) && ((ret2 = fr->rd->skip_bytes(fr,length)) < 0)) ret = ret2;
-
- return ret;
- #undef UNSYNC_FLAG
- #undef EXTHEAD_FLAG
- #undef EXP_FLAG
- #undef FOOTER_FLAG
- #undef UNKOWN_FLAGS
-}
-
-#ifndef NO_ID3V2 /* Disabling all the rest... */
-
-static void convert_latin1(mpg123_string *sb, const unsigned char* s, size_t l, const int noquiet)
-{
- size_t length = l;
- size_t i;
- unsigned char *p;
- /* determine real length, a latin1 character can at most take 2 in UTF8 */
- for(i=0; i<l; ++i)
- if(s[i] >= 0x80) ++length;
-
- debug1("UTF-8 length: %lu", (unsigned long)length);
- /* one extra zero byte for paranoia */
- if(!mpg123_resize_string(sb, length+1)){ mpg123_free_string(sb); return ; }
-
- p = (unsigned char*) sb->p; /* Signedness doesn't matter but it shows I thought about the non-issue */
- for(i=0; i<l; ++i)
- if(s[i] < 0x80){ *p = s[i]; ++p; }
- else /* two-byte encoding */
- {
- *p = 0xc0 | (s[i]>>6);
- *(p+1) = 0x80 | (s[i] & 0x3f);
- p+=2;
- }
-
- sb->p[length] = 0;
- sb->fill = length+1;
-}
-
-/*
- Check if we have a byte oder mark(s) there, return:
- -1: little endian
- 0: no BOM
- 1: big endian
-
- This modifies source and len to indicate the data _after_ the BOM(s).
- Note on nasty data: The last encountered BOM determines the endianess.
- I have seen data with multiple BOMS, namely from "the" id3v2 program.
- Not nice, but what should I do?
-*/
-static int check_bom(const unsigned char** source, size_t *len)
-{
- int this_bom = 0;
- int further_bom = 0;
-
- if(*len < 2) return 0;
-
- if((*source)[0] == 0xff && (*source)[1] == 0xfe)
- this_bom = -1;
-
- if((*source)[0] == 0xfe && (*source)[1] == 0xff)
- this_bom = 1;
-
- /* Skip the detected BOM. */
- if(this_bom != 0)
- {
- *source += 2;
- *len -= 2;
- /* Check for following BOMs. The last one wins! */
- further_bom = check_bom(source, len);
- if(further_bom == 0) return this_bom; /* End of the recursion. */
- else return further_bom;
- }
- else return 0;
-}
-
-#define FULLPOINT(f,s) ( (((f)&0x3ff)<<10) + ((s)&0x3ff) + 0x10000 )
-/* Remember: There's a limit at 0x1ffff. */
-#define UTF8LEN(x) ( (x)<0x80 ? 1 : ((x)<0x800 ? 2 : ((x)<0x10000 ? 3 : 4)))
-static void convert_utf16bom(mpg123_string *sb, const unsigned char* s, size_t l, const int noquiet)
-{
- size_t i;
- size_t n; /* number bytes that make up full pairs */
- unsigned char *p;
- size_t length = 0; /* the resulting UTF-8 length */
- /* Determine real length... extreme case can be more than utf-16 length. */
- size_t high = 0;
- size_t low = 1;
- int bom_endian;
-
- debug1("convert_utf16 with length %lu", (unsigned long)l);
-
- bom_endian = check_bom(&s, &l);
- debug1("UTF16 endianess check: %i", bom_endian);
-
- if(bom_endian == -1) /* little-endian */
- {
- high = 1; /* The second byte is the high byte. */
- low = 0; /* The first byte is the low byte. */
- }
-
- n = (l/2)*2; /* number bytes that make up full pairs */
-
- /* first: get length, check for errors -- stop at first one */
- for(i=0; i < n; i+=2)
- {
- unsigned long point = ((unsigned long) s[i+high]<<8) + s[i+low];
- if((point & 0xd800) == 0xd800) /* lead surrogate */
- {
- unsigned short second = (i+3 < l) ? (s[i+2+high]<<8) + s[i+2+low] : 0;
- if((second & 0xdc00) == 0xdc00) /* good... */
- {
- point = FULLPOINT(point,second);
- length += UTF8LEN(point); /* possibly 4 bytes */
- i+=2; /* We overstepped one word. */
- }
- else /* if no valid pair, break here */
- {
- if(noquiet) error2("Invalid UTF16 surrogate pair at %li (0x%04lx).", (unsigned long)i, point);
- n = i; /* Forget the half pair, END! */
- break;
- }
- }
- else length += UTF8LEN(point); /* 1,2 or 3 bytes */
- }
-
- if(!mpg123_resize_string(sb, length+1)){ mpg123_free_string(sb); return ; }
-
- /* Now really convert, skip checks as these have been done just before. */
- p = (unsigned char*) sb->p; /* Signedness doesn't matter but it shows I thought about the non-issue */
- for(i=0; i < n; i+=2)
- {
- unsigned long codepoint = ((unsigned long) s[i+high]<<8) + s[i+low];
- if((codepoint & 0xd800) == 0xd800) /* lead surrogate */
- {
- unsigned short second = (s[i+2+high]<<8) + s[i+2+low];
- codepoint = FULLPOINT(codepoint,second);
- i+=2; /* We overstepped one word. */
- }
- if(codepoint < 0x80) *p++ = (unsigned char) codepoint;
- else if(codepoint < 0x800)
- {
- *p++ = (unsigned char) (0xc0 | (codepoint>>6));
- *p++ = (unsigned char) (0x80 | (codepoint & 0x3f));
- }
- else if(codepoint < 0x10000)
- {
- *p++ = (unsigned char) (0xe0 | (codepoint>>12));
- *p++ = 0x80 | ((codepoint>>6) & 0x3f);
- *p++ = 0x80 | (codepoint & 0x3f);
- }
- else if (codepoint < 0x200000)
- {
- *p++ = (unsigned char) (0xf0 | codepoint>>18);
- *p++ = (unsigned char) (0x80 | ((codepoint>>12) & 0x3f));
- *p++ = (unsigned char) (0x80 | ((codepoint>>6) & 0x3f));
- *p++ = (unsigned char) (0x80 | (codepoint & 0x3f));
- } /* ignore bigger ones (that are not possible here anyway) */
- }
- sb->p[sb->size-1] = 0; /* paranoia... */
- sb->fill = sb->size;
-}
-#undef UTF8LEN
-#undef FULLPOINT
-
-static void convert_utf8(mpg123_string *sb, const unsigned char* source, size_t len, const int noquiet)
-{
- if(mpg123_resize_string(sb, len+1))
- {
- memcpy(sb->p, source, len);
- sb->p[len] = 0;
- sb->fill = len+1;
- }
- else mpg123_free_string(sb);
-}
-
-#endif
diff --git a/src/mpg123/libmpg123/id3.h b/src/mpg123/libmpg123/id3.h
deleted file mode 100644
index b172040..0000000
--- a/src/mpg123/libmpg123/id3.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- id3: ID3v2.3 and ID3v2.4 parsing (a relevant subset)
-
- copyright 2006-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#ifndef MPG123_ID3_H
-#define MPG123_ID3_H
-
-/* really need it _here_! */
-#include "frame.h"
-
-#ifdef NO_ID3V2
-# define init_id3(fr)
-# define exit_id3(fr)
-# define reset_id3(fr)
-# define id3_link(fr)
-#else
-void init_id3(mpg123_handle *fr);
-void exit_id3(mpg123_handle *fr);
-void reset_id3(mpg123_handle *fr);
-void id3_link(mpg123_handle *fr);
-#endif
-int parse_new_id3(mpg123_handle *fr, unsigned long first4bytes);
-/* Convert text from some ID3 encoding to UTf-8.
- On error, sb->fill is 0. The noquiet flag enables warning/error messages. */
-void id3_to_utf8(mpg123_string *sb, unsigned char encoding, const unsigned char *source, size_t source_size, int noquiet);
-
-#endif
diff --git a/src/mpg123/libmpg123/index.c b/src/mpg123/libmpg123/index.c
deleted file mode 100644
index bb5af32..0000000
--- a/src/mpg123/libmpg123/index.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- index: frame index data structure and functions
-
- copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#include "index.h"
-#include "debug.h"
-
-/* The next expected frame offset, one step ahead. */
-static off_t fi_next(struct frame_index *fi)
-{
- return (off_t)fi->fill*fi->step;
-}
-
-/* Shrink down the used index to the half.
- Be careful with size = 1 ... there's no shrinking possible there. */
-static void fi_shrink(struct frame_index *fi)
-{
- if(fi->fill < 2) return; /* Won't shrink below 1. */
- else
- { /* Double the step, half the fill. Should work as well for fill%2 = 1 */
- size_t c;
- debug2("shrink index with fill %lu and step %lu", (unsigned long)fi->fill, (unsigned long)fi->step);
- fi->step *= 2;
- fi->fill /= 2;
- /* Move the data down. */
- for(c = 0; c < fi->fill; ++c)
- fi->data[c] = fi->data[2*c];
- }
-
- fi->next = fi_next(fi);
-}
-
-void fi_init(struct frame_index *fi)
-{
- fi->data = NULL;
- fi->step = 1;
- fi->fill = 0;
- fi->size = 0;
- fi->grow_size = 0;
- fi->next = fi_next(fi);
-}
-
-void fi_exit(struct frame_index *fi)
-{
- debug2("fi_exit: %p and %lu", (void*)fi->data, (unsigned long)fi->size);
- if(fi->size && fi->data != NULL) free(fi->data);
-
- fi_init(fi); /* Be prepared for further fun, still. */
-}
-
-int fi_resize(struct frame_index *fi, size_t newsize)
-{
- off_t *newdata = NULL;
- if(newsize == fi->size) return 0;
-
- if(newsize > 0 && newsize < fi->size)
- { /* When we reduce buffer size a bit, shrink stuff. */
- while(fi->fill > newsize){ fi_shrink(fi); }
- }
-
- newdata = safe_realloc(fi->data, newsize*sizeof(off_t));
- if(newsize == 0 || newdata != NULL)
- {
- fi->data = newdata;
- fi->size = newsize;
- if(fi->fill > fi->size) fi->fill = fi->size;
-
- fi->next = fi_next(fi);
- debug2("new index of size %lu at %p", (unsigned long)fi->size, (void*)fi->data);
- return 0;
- }
- else
- {
- error("failed to resize index!");
- return -1;
- }
-}
-
-void fi_add(struct frame_index *fi, off_t pos)
-{
- debug3("wanting to add to fill %lu, step %lu, size %lu", (unsigned long)fi->fill, (unsigned long)fi->step, (unsigned long)fi->size);
- if(fi->fill == fi->size)
- { /* Index is full, we need to shrink... or grow. */
- /* Store the current frame number to check later if we still want it. */
- off_t framenum = fi->fill*fi->step;
- /* If we want not / cannot grow, we shrink. */
- if( !(fi->grow_size && fi_resize(fi, fi->size+fi->grow_size)==0) )
- fi_shrink(fi);
-
- /* Now check if we still want to add this frame (could be that not, because of changed step). */
- if(fi->next != framenum) return;
- }
- /* When we are here, we want that frame. */
- if(fi->fill < fi->size) /* safeguard for size=1, or just generally */
- {
- debug1("adding to index at %p", (void*)(fi->data+fi->fill));
- fi->data[fi->fill] = pos;
- ++fi->fill;
- fi->next = fi_next(fi);
- debug3("added pos %li to index with fill %lu and step %lu", (long) pos, (unsigned long)fi->fill, (unsigned long)fi->step);
- }
-}
-
-int fi_set(struct frame_index *fi, off_t *offsets, off_t step, size_t fill)
-{
- if(fi_resize(fi, fill) == -1) return -1;
- fi->step = step;
- if(offsets != NULL)
- {
- memcpy(fi->data, offsets, fill*sizeof(off_t));
- fi->fill = fill;
- }
- else
- {
- /* allocation only, no entries in index yet */
- fi->fill = 0;
- }
- fi->next = fi_next(fi);
- debug3("set new index of fill %lu, size %lu at %p",
- (unsigned long)fi->fill, (unsigned long)fi->size, (void*)fi->data);
- return 0;
-}
-
-void fi_reset(struct frame_index *fi)
-{
- debug1("reset with size %"SIZE_P, (size_p)fi->size);
- fi->fill = 0;
- fi->step = 1;
- fi->next = fi_next(fi);
-}
diff --git a/src/mpg123/libmpg123/index.h b/src/mpg123/libmpg123/index.h
deleted file mode 100644
index 3e1ca64..0000000
--- a/src/mpg123/libmpg123/index.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef MPG123_H_INDEX
-#define MPG123_H_INDEX
-
-/*
- index: frame index data structure and functions
-
- This is for keeping track of frame positions for accurate seeking.
- Now in it's own file, with initial code from frame.c and parse.c .
-
- The idea of the index with a certain amount of entries is to cover
- all yet-encountered frame positions with minimal coarseness.
- Meaning: At first every frame position is recorded, then, when
- the index is full, every second position is trown away to make
- space. Next time it is full, the same happens. And so on.
- In this manner we maintain a good resolution with the given
- maximum index size while covering the whole stream.
-
- copyright 2007-8 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#include "config.h"
-#include "compat.h"
-
-struct frame_index
-{
- off_t *data; /* actual data, the frame positions */
- off_t step; /* advancement in frame number per index point */
- off_t next; /* frame offset supposed to come next into the index */
- size_t size; /* total number of possible entries */
- size_t fill; /* number of used entries */
- size_t grow_size; /* if > 0: index allowed to grow on need with these steps, instead of lowering resolution */
-};
-
-/* The condition for a framenum to be appended to the index.
- if(FI_NEXT(fr->index, fr->num)) fi_add(offset); */
-#define FI_NEXT(fi, framenum) ((fi).size && framenum == (fi).next)
-
-/* Initialize stuff, set things to zero and NULL... */
-void fi_init(struct frame_index *fi);
-/* Deallocate/zero things. */
-void fi_exit(struct frame_index *fi);
-
-/* Prepare a given size, preserving current fill, if possible.
- If the new size is smaller than fill, the entry density is reduced.
- Return 0 on success. */
-int fi_resize(struct frame_index *fi, size_t newsize);
-
-/* Append a frame position, reducing index density if needed. */
-void fi_add(struct frame_index *fi, off_t pos);
-
-/* Replace the frame index */
-int fi_set(struct frame_index *fi, off_t *offsets, off_t step, size_t fill);
-
-/* Empty the index (setting fill=0 and step=1), but keep current size. */
-void fi_reset(struct frame_index *fi);
-
-#endif
diff --git a/src/mpg123/libmpg123/l12_integer_tables.h b/src/mpg123/libmpg123/l12_integer_tables.h
deleted file mode 100644
index e306fa9..0000000
--- a/src/mpg123/libmpg123/l12_integer_tables.h
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- l12_integer_tables.h: Layer1/2 Constant tables for integer decoders
-
- copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Taihei Monma
-*/
-
-#ifndef MPG123_L12_INTEGER_TABLES_H
-#define MPG123_L12_INTEGER_TABLES_H
-
-static const real layer12_table[27][64] =
-{
- {
- },
- {
- -1431655765,-1136305934,-901886617,-715827883,-568152967,-450943309,-357913941,-284076483,
- -225471654,-178956971,-142038242,-112735827,-89478485,-71019121,-56367914,-44739243,
- -35509560,-28183957,-22369621,-17754780,-14091978,-11184811,-8877390,-7045989,
- -5592405,-4438695,-3522995,-2796203,-2219348,-1761497,-1398101,-1109674,
- -880749,-699051,-554837,-440374,-349525,-277418,-220187,-174763,
- -138709,-110094,-87381,-69355,-55047,-43691,-34677,-27523,
- -21845,-17339,-13762,-10923,-8669,-6881,-5461,-4335,
- -3440,-2731,-2167,-1720,-1365,-1084,-860,0
- },
- {
- 1431655765,1136305934,901886617,715827883,568152967,450943309,357913941,284076483,
- 225471654,178956971,142038242,112735827,89478485,71019121,56367914,44739243,
- 35509560,28183957,22369621,17754780,14091978,11184811,8877390,7045989,
- 5592405,4438695,3522995,2796203,2219348,1761497,1398101,1109674,
- 880749,699051,554837,440374,349525,277418,220187,174763,
- 138709,110094,87381,69355,55047,43691,34677,27523,
- 21845,17339,13762,10923,8669,6881,5461,4335,
- 3440,2731,2167,1720,1365,1084,860,0
- },
- {
- 613566757,486988257,386522836,306783378,243494129,193261418,153391689,121747064,
- 96630709,76695845,60873532,48315355,38347922,30436766,24157677,19173961,
- 15218383,12078839,9586981,7609192,6039419,4793490,3804596,3019710,
- 2396745,1902298,1509855,1198373,951149,754927,599186,475574,
- 377464,299593,237787,188732,149797,118894,94366,74898,
- 59447,47183,37449,29723,23591,18725,14862,11796,
- 9362,7431,5898,4681,3715,2949,2341,1858,
- 1474,1170,929,737,585,464,369,0
- },
- {
- 286331153,227261187,180377323,143165577,113630593,90188662,71582788,56815297,
- 45094331,35791394,28407648,22547165,17895697,14203824,11273583,8947849,
- 7101912,5636791,4473924,3550956,2818396,2236962,1775478,1409198,
- 1118481,887739,704599,559241,443870,352299,279620,221935,
- 176150,139810,110967,88075,69905,55484,44037,34953,
- 27742,22019,17476,13871,11009,8738,6935,5505,
- 4369,3468,2752,2185,1734,1376,1092,867,
- 688,546,433,344,273,217,172,0
- },
- {
- 138547332,109965090,87279350,69273666,54982545,43639675,34636833,27491273,
- 21819838,17318417,13745636,10909919,8659208,6872818,5454959,4329604,
- 3436409,2727480,2164802,1718205,1363740,1082401,859102,681870,
- 541201,429551,340935,270600,214776,170467,135300,107388,
- 85234,67650,53694,42617,33825,26847,21308,16913,
- 13423,10654,8456,6712,5327,4228,3356,2664,
- 2114,1678,1332,1057,839,666,529,419,
- 333,264,210,166,132,105,83,0
- },
- {
- 68174084,54109806,42946982,34087042,27054903,21473491,17043521,13527452,
- 10736745,8521761,6763726,5368373,4260880,3381863,2684186,2130440,
- 1690931,1342093,1065220,845466,671047,532610,422733,335523,
- 266305,211366,167762,133153,105683,83881,66576,52842,
- 41940,33288,26421,20970,16644,13210,10485,8322,
- 6605,5243,4161,3303,2621,2081,1651,1311,
- 1040,826,655,520,413,328,260,206,
- 164,130,103,82,65,52,41,0
- },
- {
- 33818640,26841872,21304408,16909320,13420936,10652204,8454660,6710468,
- 5326102,4227330,3355234,2663051,2113665,1677617,1331526,1056833,
- 838809,665763,528416,419404,332881,264208,209702,166441,
- 132104,104851,83220,66052,52426,41610,33026,26213,
- 20805,16513,13106,10403,8257,6553,5201,4128,
- 3277,2601,2064,1638,1300,1032,819,650,
- 516,410,325,258,205,163,129,102,
- 81,65,51,41,32,26,20,0
- },
- {
- 16843009,13368305,10610431,8421505,6684153,5305215,4210752,3342076,
- 2652608,2105376,1671038,1326304,1052688,835519,663152,526344,
- 417760,331576,263172,208880,165788,131586,104440,82894,
- 65793,52220,41447,32897,26110,20723,16448,13055,
- 10362,8224,6527,5181,4112,3264,2590,2056,
- 1632,1295,1028,816,648,514,408,324,
- 257,204,162,129,102,81,64,51,
- 40,32,25,20,16,13,10,0
- },
- {
- 8405024,6671072,5294833,4202512,3335536,2647417,2101256,1667768,
- 1323708,1050628,833884,661854,525314,416942,330927,262657,
- 208471,165464,131329,104236,82732,65664,52118,41366,
- 32832,26059,20683,16416,13029,10341,8208,6515,
- 5171,4104,3257,2585,2052,1629,1293,1026,
- 814,646,513,407,323,257,204,162,
- 128,102,81,64,51,40,32,25,
- 20,16,13,10,8,6,5,0
- },
- {
- 4198404,3332275,2644829,2099202,1666138,1322414,1049601,833069,
- 661207,524801,416534,330604,262400,208267,165302,131200,
- 104134,82651,65600,52067,41325,32800,26033,20663,
- 16400,13017,10331,8200,6508,5166,4100,3254,
- 2583,2050,1627,1291,1025,814,646,513,
- 407,323,256,203,161,128,102,81,
- 64,51,40,32,25,20,16,13,
- 10,8,6,5,4,3,3,0
- },
- {
- 2098177,1665324,1321768,1049088,832662,660884,524544,416331,
- 330442,262272,208165,165221,131136,104083,82611,65568,
- 52041,41305,32784,26021,20653,16392,13010,10326,
- 8196,6505,5163,4098,3253,2582,2049,1626,
- 1291,1025,813,645,512,407,323,256,
- 203,161,128,102,81,64,51,40,
- 32,25,20,16,13,10,8,6,
- 5,4,3,3,2,2,1,0
- },
- {
- 1048832,832459,660723,524416,416229,330361,262208,208115,
- 165181,131104,104057,82590,65552,52029,41295,32776,
- 26014,20648,16388,13007,10324,8194,6504,5162,
- 4097,3252,2581,2049,1626,1290,1024,813,
- 645,512,406,323,256,203,161,128,
- 102,81,64,51,40,32,25,20,
- 16,13,10,8,6,5,4,3,
- 3,2,2,1,1,1,1,0
- },
- {
- 524352,416178,330321,262176,208089,165161,131088,104045,
- 82580,65544,52022,41290,32772,26011,20645,16386,
- 13006,10323,8193,6503,5161,4097,3251,2581,
- 2048,1626,1290,1024,813,645,512,406,
- 323,256,203,161,128,102,81,64,
- 51,40,32,25,20,16,13,10,
- 8,6,5,4,3,3,2,2,
- 1,1,1,1,1,0,0,0
- },
- {
- 262160,208077,165150,131080,104038,82575,65540,52019,
- 41288,32770,26010,20644,16385,13005,10322,8193,
- 6502,5161,4096,3251,2580,2048,1626,1290,
- 1024,813,645,512,406,323,256,203,
- 161,128,102,81,64,51,40,32,
- 25,20,16,13,10,8,6,5,
- 4,3,3,2,2,1,1,1,
- 1,1,0,0,0,0,0,0
- },
- {
- 131076,104035,82573,65538,52018,41286,32769,26009,
- 20643,16385,13004,10322,8192,6502,5161,4096,
- 3251,2580,2048,1626,1290,1024,813,645,
- 512,406,323,256,203,161,128,102,
- 81,64,51,40,32,25,20,16,
- 13,10,8,6,5,4,3,3,
- 2,2,1,1,1,1,1,0,
- 0,0,0,0,0,0,0,0
- },
- {
- 65537,52017,41286,32769,26008,20643,16384,13004,
- 10321,8192,6502,5161,4096,3251,2580,2048,
- 1626,1290,1024,813,645,512,406,323,
- 256,203,161,128,102,81,64,51,
- 40,32,25,20,16,13,10,8,
- 6,5,4,3,3,2,2,1,
- 1,1,1,1,0,0,0,0,
- 0,0,0,0,0,0,0,0
- },
- {
- -1717986918,-1363567121,-1082263941,-858993459,-681783560,-541131970,-429496730,-340891780,
- -270565985,-214748365,-170445890,-135282993,-107374182,-85222945,-67641496,-53687091,
- -42611473,-33820748,-26843546,-21305736,-16910374,-13421773,-10652868,-8455187,
- -6710886,-5326434,-4227594,-3355443,-2663217,-2113797,-1677722,-1331609,
- -1056898,-838861,-665804,-528449,-419430,-332902,-264225,-209715,
- -166451,-132112,-104858,-83226,-66056,-52429,-41613,-33028,
- -26214,-20806,-16514,-13107,-10403,-8257,-6554,-5202,
- -4129,-3277,-2601,-2064,-1638,-1300,-1032,0
- },
- {
- -858993459,-681783560,-541131970,-429496730,-340891780,-270565985,-214748365,-170445890,
- -135282993,-107374182,-85222945,-67641496,-53687091,-42611473,-33820748,-26843546,
- -21305736,-16910374,-13421773,-10652868,-8455187,-6710886,-5326434,-4227594,
- -3355443,-2663217,-2113797,-1677722,-1331609,-1056898,-838861,-665804,
- -528449,-419430,-332902,-264225,-209715,-166451,-132112,-104858,
- -83226,-66056,-52429,-41613,-33028,-26214,-20806,-16514,
- -13107,-10403,-8257,-6554,-5202,-4129,-3277,-2601,
- -2064,-1638,-1300,-1032,-819,-650,-516,0
- },
- {
- 858993459,681783560,541131970,429496730,340891780,270565985,214748365,170445890,
- 135282993,107374182,85222945,67641496,53687091,42611473,33820748,26843546,
- 21305736,16910374,13421773,10652868,8455187,6710886,5326434,4227594,
- 3355443,2663217,2113797,1677722,1331609,1056898,838861,665804,
- 528449,419430,332902,264225,209715,166451,132112,104858,
- 83226,66056,52429,41613,33028,26214,20806,16514,
- 13107,10403,8257,6554,5202,4129,3277,2601,
- 2064,1638,1300,1032,819,650,516,0
- },
- {
- 1717986918,1363567121,1082263941,858993459,681783560,541131970,429496730,340891780,
- 270565985,214748365,170445890,135282993,107374182,85222945,67641496,53687091,
- 42611473,33820748,26843546,21305736,16910374,13421773,10652868,8455187,
- 6710886,5326434,4227594,3355443,2663217,2113797,1677722,1331609,
- 1056898,838861,665804,528449,419430,332902,264225,209715,
- 166451,132112,104858,83226,66056,52429,41613,33028,
- 26214,20806,16514,13107,10403,8257,6554,5202,
- 4129,3277,2601,2064,1638,1300,1032,0
- },
- {
- -1908874354,-1515074579,-1202515490,-954437177,-757537289,-601257745,-477218588,-378768645,
- -300628872,-238609294,-189384322,-150314436,-119304647,-94692161,-75157218,-59652324,
- -47346081,-37578609,-29826162,-23673040,-18789305,-14913081,-11836520,-9394652,
- -7456540,-5918260,-4697326,-3728270,-2959130,-2348663,-1864135,-1479565,
- -1174332,-932068,-739783,-587166,-466034,-369891,-293583,-233017,
- -184946,-146791,-116508,-92473,-73396,-58254,-46236,-36698,
- -29127,-23118,-18349,-14564,-11559,-9174,-7282,-5780,
- -4587,-3641,-2890,-2294,-1820,-1445,-1147,0
- },
- {
- -954437177,-757537289,-601257745,-477218588,-378768645,-300628872,-238609294,-189384322,
- -150314436,-119304647,-94692161,-75157218,-59652324,-47346081,-37578609,-29826162,
- -23673040,-18789305,-14913081,-11836520,-9394652,-7456540,-5918260,-4697326,
- -3728270,-2959130,-2348663,-1864135,-1479565,-1174332,-932068,-739783,
- -587166,-466034,-369891,-293583,-233017,-184946,-146791,-116508,
- -92473,-73396,-58254,-46236,-36698,-29127,-23118,-18349,
- -14564,-11559,-9174,-7282,-5780,-4587,-3641,-2890,
- -2294,-1820,-1445,-1147,-910,-722,-573,0
- },
- {
- -477218588,-378768645,-300628872,-238609294,-189384322,-150314436,-119304647,-94692161,
- -75157218,-59652324,-47346081,-37578609,-29826162,-23673040,-18789305,-14913081,
- -11836520,-9394652,-7456540,-5918260,-4697326,-3728270,-2959130,-2348663,
- -1864135,-1479565,-1174332,-932068,-739783,-587166,-466034,-369891,
- -293583,-233017,-184946,-146791,-116508,-92473,-73396,-58254,
- -46236,-36698,-29127,-23118,-18349,-14564,-11559,-9174,
- -7282,-5780,-4587,-3641,-2890,-2294,-1820,-1445,
- -1147,-910,-722,-573,-455,-361,-287,0
- },
- {
- 477218588,378768645,300628872,238609294,189384322,150314436,119304647,94692161,
- 75157218,59652324,47346081,37578609,29826162,23673040,18789305,14913081,
- 11836520,9394652,7456540,5918260,4697326,3728270,2959130,2348663,
- 1864135,1479565,1174332,932068,739783,587166,466034,369891,
- 293583,233017,184946,146791,116508,92473,73396,58254,
- 46236,36698,29127,23118,18349,14564,11559,9174,
- 7282,5780,4587,3641,2890,2294,1820,1445,
- 1147,910,722,573,455,361,287,0
- },
- {
- 954437177,757537289,601257745,477218588,378768645,300628872,238609294,189384322,
- 150314436,119304647,94692161,75157218,59652324,47346081,37578609,29826162,
- 23673040,18789305,14913081,11836520,9394652,7456540,5918260,4697326,
- 3728270,2959130,2348663,1864135,1479565,1174332,932068,739783,
- 587166,466034,369891,293583,233017,184946,146791,116508,
- 92473,73396,58254,46236,36698,29127,23118,18349,
- 14564,11559,9174,7282,5780,4587,3641,2890,
- 2294,1820,1445,1147,910,722,573,0
- },
- {
- 1908874354,1515074579,1202515490,954437177,757537289,601257745,477218588,378768645,
- 300628872,238609294,189384322,150314436,119304647,94692161,75157218,59652324,
- 47346081,37578609,29826162,23673040,18789305,14913081,11836520,9394652,
- 7456540,5918260,4697326,3728270,2959130,2348663,1864135,1479565,
- 1174332,932068,739783,587166,466034,369891,293583,233017,
- 184946,146791,116508,92473,73396,58254,46236,36698,
- 29127,23118,18349,14564,11559,9174,7282,5780,
- 4587,3641,2890,2294,1820,1445,1147,0
- },
-};
-
-#endif
diff --git a/src/mpg123/libmpg123/l2tables.h b/src/mpg123/libmpg123/l2tables.h
deleted file mode 100644
index c671ea1..0000000
--- a/src/mpg123/libmpg123/l2tables.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- l2tables.h: Layer 2 Alloc tables
-
- copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-
- most other tables are calculated on program start (which is (of course) not ISO-conform)
- Layer-3 huffman table is in huffman.h
-*/
-
-
-#ifndef _MPG123_L2TABLES_H_
-#define _MPG123_L2TABLES_H_
-
-const struct al_table alloc_0[] = {
- {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
- {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
- {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
- {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
- {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
- {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767} };
-
-const struct al_table alloc_1[] = {
- {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
- {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
- {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
- {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
- {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
- {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767},
- {2,0},{5,3},{7,5},{16,-32767} };
-
-const struct al_table alloc_2[] = {
- {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
- {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
- {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
- {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
-
-const struct al_table alloc_3[] = {
- {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
- {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
- {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
- {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
-
-const struct al_table alloc_4[] = {
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
- {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
- {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9},
- {2,0},{5,3},{7,5},{10,9} };
-
-#endif
-
diff --git a/src/mpg123/libmpg123/l3_integer_tables.h b/src/mpg123/libmpg123/l3_integer_tables.h
deleted file mode 100644
index f600c31..0000000
--- a/src/mpg123/libmpg123/l3_integer_tables.h
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
- l3_integer_tables.h: Layer3 Constant tables for integer decoders
-
- copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Taihei Monma
-*/
-
-#ifndef MPG123_L3_INTEGER_TABLES_H
-#define MPG123_L3_INTEGER_TABLES_H
-
-#ifdef PRECALC_TABLES
-static const real ispow[8207] =
-{
- 0,8192,20643,35445,52016,70041,89315,109695,131072,153360,
- 176491,200407,225060,250408,276414,303048,330281,358087,386444,415331,
- 444730,474623,504995,535830,567116,598839,630988,663552,696521,729884,
- 763633,797760,832255,867112,902323,937880,973778,1010010,1046569,1083451,
- 1120650,1158160,1195976,1234093,1272507,1311213,1350207,1389485,1429042,1468875,
- 1508979,1549352,1589990,1630889,1672046,1713458,1755122,1797035,1839193,1881594,
- 1924236,1967115,2010229,2053576,2097152,2140956,2184985,2229238,2273710,2318402,
- 2363310,2408432,2453767,2499312,2545065,2591025,2637190,2683558,2730126,2776895,
- 2823861,2871023,2918379,2965929,3013670,3061600,3109719,3158025,3206517,3255192,
- 3304050,3353089,3402309,3451707,3501282,3551033,3600960,3651060,3701332,3751776,
- 3802390,3853172,3904123,3955241,4006524,4057972,4109583,4161357,4213293,4265389,
- 4317644,4370058,4422630,4475359,4528243,4581282,4634476,4687822,4741320,4794970,
- 4848770,4902720,4956819,5011066,5065460,5120000,5174686,5229517,5284492,5339610,
- 5394871,5450274,5505818,5561502,5617327,5673290,5729391,5785631,5842007,5898519,
- 5955168,6011951,6068869,6125920,6183105,6240422,6297871,6355451,6413162,6471004,
- 6528974,6587074,6645302,6703658,6762141,6820751,6879487,6938349,6997336,7056447,
- 7115683,7175042,7234524,7294129,7353855,7413703,7473672,7533762,7593972,7654301,
- 7714750,7775317,7836002,7896805,7957725,8018762,8079916,8141185,8202570,8264070,
- 8325685,8387413,8449256,8511212,8573281,8635462,8697756,8760161,8822678,8885305,
- 8948043,9010892,9073850,9136917,9200094,9263379,9326772,9390274,9453882,9517598,
- 9581421,9645351,9709386,9773527,9837774,9902125,9966582,10031143,10095807,10160576,
- 10225448,10290423,10355500,10420681,10485963,10551347,10616832,10682419,10748106,10813894,
- 10879782,10945770,11011857,11078044,11144330,11210715,11277198,11343779,11410458,11477234,
- 11544108,11611079,11678147,11745311,11812571,11879927,11947378,12014925,12082567,12150304,
- 12218135,12286061,12354081,12422194,12490401,12558701,12627094,12695580,12764158,12832829,
- 12901592,12970446,13039392,13108429,13177557,13246776,13316085,13385485,13454975,13524554,
- 13594224,13663982,13733830,13803767,13873792,13943906,14014108,14084398,14154776,14225242,
- 14295794,14366435,14437162,14507975,14578876,14649862,14720935,14792093,14863337,14934667,
- 15006082,15077582,15149167,15220837,15292591,15364429,15436351,15508358,15580448,15652621,
- 15724878,15797217,15869640,15942146,16014734,16087404,16160156,16232991,16305907,16378905,
- 16451984,16525145,16598386,16671709,16745112,16818596,16892160,16965804,17039528,17113332,
- 17187216,17261179,17335222,17409343,17483544,17557824,17632182,17706618,17781133,17855726,
- 17930397,18005146,18079973,18154877,18229858,18304917,18380052,18455265,18530554,18605920,
- 18681362,18756880,18832475,18908145,18983891,19059713,19135610,19211583,19287630,19363753,
- 19439951,19516223,19592571,19668992,19745488,19822058,19898702,19975420,20052211,20129076,
- 20206015,20283027,20360112,20437270,20514501,20591805,20669181,20746630,20824151,20901745,
- 20979410,21057148,21134957,21212838,21290791,21368815,21446910,21525076,21603314,21681622,
- 21760001,21838451,21916971,21995561,22074222,22152953,22231754,22310625,22389566,22468576,
- 22547656,22626806,22706024,22785312,22864669,22944094,23023589,23103152,23182783,23262484,
- 23342252,23422089,23501993,23581966,23662007,23742115,23822291,23902534,23982845,24063223,
- 24143669,24224181,24304761,24385407,24466120,24546899,24627745,24708658,24789637,24870682,
- 24951793,25032970,25114213,25195521,25276895,25358335,25439841,25521411,25603047,25684748,
- 25766514,25848345,25930241,26012201,26094226,26176316,26258469,26340688,26422970,26505317,
- 26587727,26670202,26752740,26835342,26918008,27000737,27083530,27166386,27249305,27332287,
- 27415332,27498440,27581611,27664845,27748142,27831501,27914922,27998406,28081952,28165561,
- 28249231,28332963,28416758,28500614,28584532,28668511,28752552,28836655,28920819,29005044,
- 29089330,29173677,29258086,29342555,29427085,29511676,29596328,29681040,29765813,29850646,
- 29935539,30020493,30105507,30190581,30275714,30360908,30446162,30531475,30616848,30702280,
- 30787772,30873323,30958934,31044604,31130332,31216120,31301967,31387873,31473838,31559862,
- 31645944,31732084,31818284,31904541,31990857,32077231,32163664,32250154,32336703,32423309,
- 32509974,32596696,32683476,32770313,32857208,32944161,33031171,33118238,33205363,33292544,
- 33379783,33467079,33554432,33641842,33729308,33816832,33904412,33992048,34079741,34167491,
- 34255297,34343159,34431078,34519052,34607083,34695170,34783312,34871511,34959765,35048075,
- 35136441,35224862,35313339,35401872,35490459,35579102,35667801,35756554,35845363,35934226,
- 36023145,36112118,36201147,36290230,36379367,36468560,36557807,36647108,36736464,36825875,
- 36915339,37004858,37094431,37184058,37273739,37363474,37453263,37543106,37633003,37722953,
- 37812957,37903015,37993126,38083291,38173509,38263780,38354105,38444483,38534914,38625398,
- 38715935,38806525,38897168,38987864,39078612,39169414,39260268,39351174,39442133,39533145,
- 39624209,39715325,39806494,39897714,39988987,40080312,40171690,40263119,40354600,40446133,
- 40537718,40629354,40721042,40812782,40904574,40996417,41088311,41180257,41272254,41364303,
- 41456402,41548553,41640755,41733008,41825313,41917668,42010074,42102530,42195038,42287596,
- 42380205,42472865,42565575,42658336,42751147,42844009,42936921,43029883,43122895,43215958,
- 43309070,43402233,43495446,43588709,43682022,43775384,43868797,43962259,44055771,44149332,
- 44242943,44336604,44430314,44524073,44617882,44711741,44805648,44899605,44993611,45087666,
- 45181770,45275923,45370126,45464377,45558677,45653025,45747423,45841869,45936364,46030908,
- 46125500,46220141,46314830,46409567,46504353,46599187,46694070,46789001,46883980,46979007,
- 47074082,47169205,47264376,47359595,47454862,47550177,47645540,47740950,47836408,47931914,
- 48027467,48123068,48218716,48314412,48410155,48505945,48601783,48697668,48793601,48889580,
- 48985607,49081681,49177802,49273969,49370184,49466446,49562754,49659109,49755511,49851960,
- 49948456,50044998,50141586,50238222,50334903,50431631,50528406,50625227,50722094,50819007,
- 50915967,51012973,51110025,51207123,51304267,51401457,51498694,51595976,51693304,51790677,
- 51888097,51985562,52083073,52180630,52278232,52375880,52473573,52571312,52669097,52766926,
- 52864801,52962722,53060688,53158699,53256755,53354856,53453002,53551194,53649430,53747712,
- 53846038,53944410,54042826,54141287,54239793,54338344,54436939,54535579,54634263,54732993,
- 54831766,54930585,55029447,55128354,55227306,55326302,55425342,55524426,55623555,55722728,
- 55821945,55921206,56020511,56119860,56219253,56318690,56418171,56517696,56617265,56716877,
- 56816534,56916234,57015977,57115764,57215595,57315470,57415388,57515349,57615354,57715403,
- 57815494,57915629,58015808,58116029,58216294,58316602,58416954,58517348,58617785,58718266,
- 58818789,58919356,59019965,59120617,59221312,59322050,59422831,59523654,59624521,59725429,
- 59826381,59927375,60028412,60129491,60230613,60331777,60432983,60534232,60635524,60736857,
- 60838233,60939651,61041112,61142614,61244159,61345746,61447375,61549046,61650759,61752513,
- 61854310,61956149,62058030,62159952,62261916,62363922,62465970,62568059,62670191,62772363,
- 62874578,62976833,63079131,63181470,63283850,63386272,63488735,63591239,63693785,63796372,
- 63899001,64001670,64104381,64207133,64309926,64412760,64515636,64618552,64721509,64824507,
- 64927546,65030627,65133747,65236909,65340112,65443355,65546639,65649964,65753329,65856735,
- 65960182,66063669,66167197,66270765,66374374,66478023,66581713,66685443,66789213,66893024,
- 66996875,67100766,67204698,67308669,67412681,67516733,67620825,67724957,67829130,67933342,
- 68037594,68141886,68246218,68350590,68455002,68559454,68663945,68768476,68873047,68977658,
- 69082308,69186998,69291728,69396497,69501306,69606154,69711042,69815969,69920936,70025942,
- 70130987,70236072,70341196,70446360,70551562,70656804,70762085,70867406,70972765,71078164,
- 71183601,71289078,71394594,71500149,71605742,71711375,71817046,71922757,72028506,72134294,
- 72240121,72345987,72451891,72557835,72663817,72769837,72875896,72981994,73088130,73194305,
- 73300519,73406770,73513061,73619389,73725757,73832162,73938606,74045088,74151609,74258168,
- 74364765,74471400,74578073,74684785,74791535,74898323,75005149,75112012,75218914,75325854,
- 75432832,75539848,75646902,75753994,75861123,75968291,76075496,76182739,76290020,76397338,
- 76504694,76612088,76719520,76826989,76934495,77042040,77149622,77257241,77364898,77472592,
- 77580324,77688093,77795899,77903743,78011625,78119543,78227499,78335492,78443522,78551590,
- 78659695,78767836,78876015,78984232,79092485,79200775,79309102,79417467,79525868,79634306,
- 79742781,79851293,79959842,80068428,80177050,80285710,80394406,80503139,80611908,80720715,
- 80829558,80938438,81047354,81156307,81265296,81374322,81483385,81592484,81701620,81810792,
- 81920000,82029245,82138526,82247844,82357198,82466588,82576014,82685477,82794976,82904512,
- 83014083,83123691,83233334,83343014,83452730,83562482,83672271,83782095,83891955,84001851,
- 84111783,84221751,84331755,84441795,84551870,84661982,84772129,84882312,84992531,85102786,
- 85213076,85323402,85433764,85544161,85654594,85765063,85875567,85986107,86096682,86207293,
- 86317939,86428621,86539338,86650091,86760879,86871702,86982561,87093455,87204384,87315349,
- 87426349,87537384,87648455,87759560,87870701,87981877,88093088,88204334,88315616,88426932,
- 88538283,88649670,88761091,88872548,88984039,89095565,89207126,89318723,89430353,89542019,
- 89653720,89765455,89877226,89989030,90100870,90212745,90324654,90436598,90548576,90660589,
- 90772637,90884719,90996836,91108987,91221173,91333394,91445648,91557938,91670262,91782620,
- 91895012,92007439,92119901,92232396,92344926,92457491,92570089,92682722,92795389,92908090,
- 93020826,93133595,93246399,93359237,93472109,93585015,93697955,93810929,93923937,94036980,
- 94150056,94263166,94376310,94489488,94602700,94715946,94829225,94942539,95055886,95169267,
- 95282682,95396131,95509613,95623129,95736679,95850263,95963880,96077530,96191215,96304933,
- 96418684,96532470,96646288,96760140,96874026,96987945,97101898,97215884,97329904,97443956,
- 97558043,97672162,97786315,97900502,98014721,98128974,98243260,98357580,98471933,98586318,
- 98700737,98815190,98929675,99044194,99158745,99273330,99387948,99502598,99617282,99731999,
- 99846749,99961532,100076348,100191197,100306078,100420993,100535940,100650921,100765934,100880980,
- 100996059,101111170,101226315,101341492,101456702,101571944,101687220,101802528,101917868,102033241,
- 102148647,102264086,102379557,102495061,102610597,102726166,102841767,102957401,103073067,103188765,
- 103304497,103420260,103536056,103651884,103767745,103883638,103999563,104115521,104231511,104347533,
- 104463588,104579675,104695794,104811945,104928128,105044344,105160592,105276871,105393183,105509527,
- 105625904,105742312,105858752,105975224,106091729,106208265,106324833,106441433,106558066,106674730,
- 106791426,106908154,107024913,107141705,107258528,107375384,107492271,107609190,107726140,107843123,
- 107960137,108077182,108194260,108311369,108428510,108545683,108662887,108780122,108897390,109014689,
- 109132019,109249381,109366775,109484200,109601656,109719144,109836664,109954215,110071797,110189411,
- 110307056,110424733,110542441,110660180,110777950,110895752,111013585,111131450,111249346,111367273,
- 111485231,111603220,111721241,111839292,111957375,112075489,112193635,112311811,112430018,112548257,
- 112666526,112784827,112903159,113021521,113139915,113258339,113376795,113495282,113613799,113732347,
- 113850927,113969537,114088178,114206850,114325552,114444286,114563050,114681845,114800671,114919528,
- 115038415,115157333,115276282,115395262,115514272,115633313,115752384,115871486,115990619,116109783,
- 116228976,116348201,116467456,116586742,116706058,116825404,116944781,117064189,117183627,117303095,
- 117422594,117542124,117661683,117781273,117900894,118020545,118140226,118259937,118379679,118499451,
- 118619253,118739086,118858948,118978842,119098765,119218718,119338702,119458716,119578759,119698834,
- 119818938,119939072,120059236,120179431,120299655,120419910,120540194,120660509,120780854,120901228,
- 121021633,121142067,121262532,121383026,121503550,121624105,121744689,121865303,121985946,122106620,
- 122227323,122348057,122468820,122589613,122710435,122831287,122952170,123073081,123194023,123314994,
- 123435995,123557025,123678085,123799175,123920295,124041444,124162622,124283830,124405068,124526335,
- 124647632,124768959,124890314,125011700,125133114,125254559,125376032,125497536,125619068,125740630,
- 125862221,125983842,126105492,126227171,126348880,126470618,126592386,126714182,126836008,126957863,
- 127079748,127201661,127323604,127445576,127567578,127689608,127811668,127933756,128055874,128178021,
- 128300197,128422403,128544637,128666900,128789193,128911514,129033865,129156244,129278652,129401090,
- 129523556,129646052,129768576,129891129,130013711,130136323,130258963,130381631,130504329,130627056,
- 130749811,130872595,130995408,131118250,131241120,131364020,131486948,131609905,131732890,131855904,
- 131978947,132102019,132225119,132348248,132471406,132594592,132717807,132841050,132964323,133087623,
- 133210952,133334310,133457696,133581111,133704554,133828026,133951527,134075055,134198613,134322198,
- 134445812,134569455,134693126,134816825,134940553,135064309,135188094,135311906,135435747,135559617,
- 135683515,135807441,135931395,136055378,136179388,136303427,136427495,136551590,136675714,136799866,
- 136924046,137048254,137172490,137296755,137421048,137545368,137669717,137794094,137918499,138042932,
- 138167393,138291882,138416400,138540945,138665518,138790119,138914748,139039405,139164090,139288803,
- 139413544,139538313,139663110,139787934,139912787,140037667,140162575,140287511,140412475,140537467,
- 140662486,140787533,140912608,141037711,141162842,141288000,141413186,141538399,141663641,141788910,
- 141914207,142039531,142164883,142290263,142415670,142541105,142666567,142792057,142917575,143043120,
- 143168693,143294294,143419921,143545577,143671260,143796970,143922708,144048473,144174266,144300086,
- 144425934,144551809,144677712,144803641,144929599,145055583,145181595,145307635,145433701,145559795,
- 145685917,145812065,145938241,146064445,146190675,146316933,146443218,146569530,146695869,146822236,
- 146948630,147075051,147201499,147327974,147454477,147581007,147707563,147834147,147960758,148087396,
- 148214061,148340754,148467473,148594219,148720993,148847793,148974620,149101475,149228356,149355264,
- 149482200,149609162,149736151,149863167,149990210,150117280,150244377,150371501,150498652,150625829,
- 150753033,150880265,151007523,151134807,151262119,151389457,151516823,151644215,151771633,151899079,
- 152026551,152154050,152281576,152409128,152536707,152664313,152791945,152919604,153047290,153175002,
- 153302741,153430507,153558299,153686118,153813963,153941835,154069734,154197659,154325610,154453588,
- 154581593,154709624,154837682,154965766,155093876,155222013,155350177,155478367,155606583,155734826,
- 155863095,155991391,156119713,156248061,156376436,156504837,156633264,156761718,156890198,157018704,
- 157147237,157275796,157404381,157532993,157661630,157790294,157918985,158047701,158176444,158305212,
- 158434008,158562829,158691676,158820550,158949449,159078375,159207327,159336305,159465310,159594340,
- 159723396,159852479,159981587,160110722,160239882,160369069,160498282,160627520,160756785,160886076,
- 161015392,161144735,161274103,161403498,161532918,161662365,161791837,161921335,162050859,162180409,
- 162309985,162439587,162569215,162698868,162828547,162958252,163087983,163217740,163347523,163477331,
- 163607165,163737025,163866910,163996822,164126759,164256722,164386710,164516724,164646764,164776830,
- 164906921,165037038,165167181,165297349,165427543,165557762,165688007,165818278,165948574,166078896,
- 166209243,166339616,166470015,166600439,166730888,166861363,166991864,167122390,167252942,167383519,
- 167514122,167644750,167775403,167906082,168036786,168167516,168298271,168429052,168559858,168690689,
- 168821546,168952428,169083335,169214268,169345226,169476210,169607219,169738253,169869312,170000397,
- 170131507,170262642,170393802,170524988,170656199,170787435,170918696,171049983,171181295,171312632,
- 171443994,171575381,171706793,171838231,171969694,172101182,172232695,172364233,172495796,172627384,
- 172758997,172890636,173022299,173153988,173285702,173417440,173549204,173680993,173812806,173944645,
- 174076509,174208397,174340311,174472249,174604213,174736201,174868215,175000253,175132316,175264404,
- 175396517,175528655,175660818,175793005,175925218,176057455,176189717,176322004,176454316,176586653,
- 176719014,176851400,176983811,177116247,177248708,177381193,177513703,177646237,177778797,177911381,
- 178043990,178176624,178309282,178441965,178574672,178707405,178840162,178972943,179105749,179238580,
- 179371435,179504316,179637220,179770149,179903103,180036082,180169084,180302112,180435164,180568240,
- 180701342,180834467,180967617,181100792,181233991,181367214,181500462,181633735,181767032,181900353,
- 182033699,182167069,182300464,182433883,182567326,182700794,182834286,182967803,183101344,183234909,
- 183368499,183502113,183635751,183769414,183903101,184036812,184170548,184304307,184438092,184571900,
- 184705732,184839589,184973470,185107376,185241305,185375259,185509237,185643239,185777266,185911316,
- 186045391,186179490,186313613,186447760,186581931,186716126,186850346,186984590,187118857,187253149,
- 187387465,187521805,187656169,187790557,187924969,188059405,188193866,188328350,188462858,188597390,
- 188731946,188866527,189001131,189135759,189270411,189405087,189539787,189674511,189809259,189944031,
- 190078827,190213646,190348490,190483357,190618249,190753164,190888103,191023066,191158052,191293063,
- 191428097,191563155,191698237,191833343,191968473,192103626,192238803,192374004,192509229,192644477,
- 192779749,192915045,193050365,193185708,193321075,193456466,193591881,193727319,193862781,193998266,
- 194133775,194269308,194404864,194540444,194676048,194811675,194947326,195083001,195218699,195354421,
- 195490166,195625935,195761727,195897543,196033383,196169246,196305132,196441042,196576976,196712933,
- 196848914,196984918,197120945,197256996,197393071,197529169,197665290,197801435,197937603,198073795,
- 198210010,198346249,198482510,198618796,198755104,198891437,199027792,199164171,199300573,199436998,
- 199573447,199709919,199846415,199982934,200119476,200256041,200392630,200529242,200665877,200802535,
- 200939217,201075922,201212650,201349402,201486176,201622974,201759795,201896639,202033507,202170398,
- 202307311,202444248,202581209,202718192,202855198,202992228,203129281,203266357,203403456,203540578,
- 203677723,203814891,203952082,204089297,204226534,204363795,204501078,204638385,204775715,204913067,
- 205050443,205187842,205325264,205462708,205600176,205737667,205875180,206012717,206150277,206287859,
- 206425465,206563093,206700745,206838419,206976116,207113836,207251579,207389345,207527134,207664946,
- 207802780,207940638,208078518,208216421,208354347,208492295,208630267,208768261,208906279,209044319,
- 209182381,209320467,209458575,209596706,209734860,209873037,210011236,210149458,210287703,210425971,
- 210564261,210702574,210840910,210979268,211117649,211256053,211394480,211532929,211671400,211809895,
- 211948412,212086952,212225514,212364099,212502706,212641337,212779989,212918665,213057363,213196083,
- 213334826,213473592,213612380,213751191,213890024,214028880,214167758,214306659,214445582,214584528,
- 214723497,214862488,215001501,215140537,215279595,215418676,215557779,215696904,215836053,215975223,
- 216114416,216253631,216392869,216532129,216671412,216810717,216950044,217089394,217228766,217368160,
- 217507577,217647016,217786477,217925961,218065467,218204996,218344546,218484119,218623715,218763332,
- 218902972,219042634,219182319,219322026,219461754,219601506,219741279,219881075,220020893,220160733,
- 220300595,220440479,220580386,220720315,220860266,221000239,221140235,221280252,221420292,221560354,
- 221700438,221840544,221980672,222120823,222260995,222401190,222541406,222681645,222821906,222962189,
- 223102494,223242821,223383170,223523541,223663934,223804350,223944787,224085246,224225728,224366231,
- 224506756,224647303,224787873,224928464,225069077,225209712,225350370,225491049,225631750,225772473,
- 225913218,226053985,226194773,226335584,226476417,226617271,226758148,226899046,227039966,227180908,
- 227321872,227462858,227603865,227744895,227885946,228027019,228168114,228309231,228450369,228591529,
- 228732712,228873916,229015141,229156389,229297658,229438949,229580262,229721596,229862953,230004331,
- 230145730,230287152,230428595,230570060,230711546,230853055,230994585,231136136,231277709,231419304,
- 231560921,231702559,231844219,231985901,232127604,232269329,232411076,232552844,232694633,232836445,
- 232978278,233120132,233262008,233403906,233545825,233687766,233829728,233971712,234113717,234255744,
- 234397793,234539863,234681954,234824068,234966202,235108358,235250536,235392735,235534955,235677197,
- 235819461,235961746,236104052,236246380,236388729,236531100,236673492,236815905,236958340,237100797,
- 237243274,237385774,237528294,237670836,237813399,237955984,238098590,238241217,238383866,238526536,
- 238669228,238811940,238954674,239097430,239240207,239383005,239525824,239668664,239811526,239954409,
- 240097314,240240240,240383187,240526155,240669144,240812155,240955187,241098240,241241314,241384410,
- 241527527,241670665,241813824,241957005,242100206,242243429,242386673,242529938,242673224,242816532,
- 242959860,243103210,243246581,243389973,243533386,243676820,243820276,243963752,244107249,244250768,
- 244394308,244537869,244681450,244825053,244968677,245112322,245255989,245399676,245543384,245687113,
- 245830863,245974635,246118427,246262240,246406074,246549930,246693806,246837703,246981621,247125560,
- 247269521,247413502,247557504,247701527,247845571,247989635,248133721,248277828,248421956,248566104,
- 248710273,248854464,248998675,249142907,249287160,249431434,249575729,249720044,249864381,250008738,
- 250153116,250297515,250441935,250586375,250730837,250875319,251019822,251164346,251308890,251453456,
- 251598042,251742649,251887277,252031925,252176594,252321284,252465995,252610727,252755479,252900252,
- 253045045,253189860,253334695,253479551,253624427,253769324,253914242,254059181,254204140,254349120,
- 254494121,254639142,254784184,254929246,255074329,255219433,255364558,255509703,255654868,255800054,
- 255945261,256090489,256235737,256381006,256526295,256671605,256816935,256962286,257107657,257253049,
- 257398462,257543895,257689349,257834823,257980318,258125833,258271369,258416925,258562502,258708099,
- 258853717,258999355,259145014,259290693,259436392,259582112,259727853,259873614,260019395,260165197,
- 260311019,260456862,260602725,260748609,260894513,261040437,261186382,261332347,261478333,261624339,
- 261770365,261916411,262062478,262208566,262354674,262500802,262646950,262793119,262939308,263085517,
- 263231747,263377997,263524267,263670558,263816869,263963200,264109551,264255923,264402315,264548728,
- 264695160,264841613,264988086,265134579,265281093,265427627,265574181,265720755,265867349,266013964,
- 266160599,266307254,266453929,266600625,266747340,266894076,267040832,267187608,267334404,267481221,
- 267628057,267774914,267921791,268068688,268215605,268362542,268509500,268656477,268803475,268950493,
- 269097530,269244588,269391666,269538764,269685882,269833021,269980179,270127357,270274555,270421774,
- 270569012,270716271,270863549,271010848,271158166,271305505,271452863,271600242,271747640,271895059,
- 272042497,272189956,272337434,272484933,272632451,272779990,272927548,273075126,273222724,273370342,
- 273517981,273665639,273813316,273961014,274108732,274256470,274404227,274552005,274699802,274847619,
- 274995456,275143313,275291190,275439087,275587003,275734940,275882896,276030872,276178868,276326884,
- 276474919,276622975,276771050,276919145,277067260,277215394,277363549,277511723,277659917,277808130,
- 277956364,278104617,278252890,278401183,278549496,278697828,278846180,278994552,279142943,279291354,
- 279439785,279588236,279736706,279885196,280033706,280182236,280330785,280479353,280627942,280776550,
- 280925178,281073825,281222493,281371179,281519886,281668612,281817358,281966123,282114908,282263713,
- 282412537,282561381,282710244,282859127,283008030,283156952,283305894,283454855,283603836,283752836,
- 283901856,284050896,284199955,284349034,284498132,284647250,284796387,284945544,285094721,285243917,
- 285393132,285542367,285691621,285840895,285990189,286139502,286288834,286438186,286587557,286736948,
- 286886358,287035788,287185237,287334706,287484194,287633701,287783228,287932774,288082340,288231925,
- 288381530,288531154,288680797,288830460,288980142,289129844,289279565,289429305,289579065,289728844,
- 289878642,290028460,290178297,290328153,290478029,290627924,290777839,290927773,291077726,291227698,
- 291377690,291527701,291677731,291827781,291977850,292127938,292278045,292428172,292578318,292728484,
- 292878668,293028872,293179095,293329337,293479599,293629880,293780180,293930499,294080837,294231195,
- 294381572,294531968,294682383,294832818,294983272,295133744,295284237,295434748,295585278,295735828,
- 295886396,296036984,296187591,296338218,296488863,296639527,296790211,296940914,297091636,297242377,
- 297393137,297543916,297694714,297845532,297996368,298147224,298298098,298448992,298599905,298750837,
- 298901788,299052758,299203747,299354755,299505782,299656829,299807894,299958978,300110081,300261204,
- 300412345,300563505,300714685,300865883,301017101,301168337,301319592,301470867,301622160,301773472,
- 301924804,302076154,302227523,302378911,302530318,302681744,302833189,302984653,303136136,303287638,
- 303439159,303590698,303742257,303893834,304045431,304197046,304348680,304500333,304652005,304803696,
- 304955405,305107134,305258881,305410648,305562433,305714237,305866060,306017901,306169762,306321641,
- 306473539,306625456,306777392,306929347,307081320,307233312,307385323,307537353,307689402,307841469,
- 307993555,308145660,308297784,308449927,308602088,308754268,308906467,309058684,309210921,309363176,
- 309515449,309667742,309820053,309972383,310124732,310277099,310429485,310581890,310734313,310886755,
- 311039216,311191696,311344194,311496711,311649247,311801801,311954374,312106965,312259575,312412204,
- 312564852,312717518,312870203,313022906,313175628,313328369,313481128,313633906,313786703,313939518,
- 314092351,314245204,314398074,314550964,314703872,314856799,315009744,315162708,315315690,315468691,
- 315621710,315774748,315927805,316080880,316233973,316387086,316540216,316693365,316846533,316999719,
- 317152924,317306147,317459389,317612649,317765928,317919225,318072541,318225875,318379228,318532599,
- 318685988,318839396,318992823,319146268,319299731,319453213,319606713,319760232,319913769,320067324,
- 320220898,320374491,320528101,320681731,320835378,320989044,321142729,321296431,321450153,321603892,
- 321757650,321911426,322065221,322219034,322372865,322526715,322680583,322834470,322988374,323142297,
- 323296239,323450199,323604177,323758173,323912188,324066221,324220272,324374342,324528430,324682536,
- 324836660,324990803,325144964,325299144,325453341,325607557,325761791,325916044,326070314,326224603,
- 326378910,326533236,326687579,326841941,326996321,327150720,327305136,327459571,327614024,327768495,
- 327922984,328077492,328232018,328386562,328541124,328695704,328850302,329004919,329159554,329314207,
- 329468878,329623567,329778275,329933000,330087744,330242506,330397286,330552084,330706900,330861735,
- 331016587,331171458,331326347,331481254,331636178,331791121,331946083,332101062,332256059,332411074,
- 332566108,332721159,332876229,333031317,333186422,333341546,333496688,333651848,333807026,333962221,
- 334117435,334272667,334427917,334583185,334738471,334893776,335049098,335204438,335359796,335515172,
- 335670566,335825978,335981408,336136856,336292322,336447806,336603308,336758828,336914365,337069921,
- 337225495,337381087,337536696,337692324,337847969,338003633,338159314,338315013,338470730,338626465,
- 338782218,338937989,339093778,339249585,339405409,339561252,339717112,339872990,340028886,340184800,
- 340340732,340496682,340652650,340808635,340964638,341120659,341276698,341432755,341588830,341744922,
- 341901032,342057161,342213306,342369470,342525652,342681851,342838068,342994303,343150556,343306826,
- 343463115,343619421,343775745,343932086,344088446,344244823,344401218,344557631,344714061,344870509,
- 345026975,345183459,345339960,345496480,345653016,345809571,345966143,346122733,346279341,346435967,
- 346592610,346749271,346905949,347062646,347219359,347376091,347532840,347689607,347846392,348003194,
- 348160014,348316852,348473707,348630580,348787471,348944379,349101305,349258249,349415210,349572189,
- 349729185,349886199,350043231,350200280,350357347,350514432,350671534,350828653,350985791,351142946,
- 351300118,351457308,351614516,351771741,351928984,352086244,352243522,352400817,352558130,352715461,
- 352872809,353030175,353187558,353344959,353502377,353659813,353817266,353974737,354132225,354289731,
- 354447254,354604795,354762354,354919929,355077523,355235134,355392762,355550408,355708071,355865752,
- 356023450,356181166,356338899,356496649,356654418,356812203,356970006,357127826,357285664,357443520,
- 357601392,357759282,357917190,358075115,358233057,358391017,358548994,358706989,358865001,359023030,
- 359181077,359339141,359497223,359655322,359813438,359971572,360129723,360287891,360446077,360604280,
- 360762501,360920738,361078994,361237266,361395556,361553863,361712188,361870530,362028889,362187265,
- 362345659,362504070,362662499,362820944,362979407,363137888,363296385,363454900,363613432,363771982,
- 363930549,364089133,364247734,364406353,364564988,364723642,364882312,365041000,365199704,365358426,
- 365517166,365675922,365834696,365993487,366152296,366311121,366469964,366628824,366787701,366946595,
- 367105507,367264435,367423381,367582344,367741325,367900322,368059337,368218369,368377418,368536484,
- 368695567,368854668,369013785,369172920,369332072,369491241,369650428,369809631,369968852,370128089,
- 370287344,370446616,370605905,370765211,370924535,371083875,371243232,371402607,371561999,371721408,
- 371880833,372040276,372199737,372359214,372518708,372678219,372837748,372997293,373156856,373316435,
- 373476032,373635645,373795276,373954924,374114589,374274270,374433969,374593685,374753418,374913168,
- 375072935,375232719,375392520,375552338,375712173,375872025,376031894,376191780,376351683,376511603,
- 376671540,376831494,376991465,377151453,377311458,377471479,377631518,377791574,377951647,378111736,
- 378271843,378431966,378592107,378752264,378912439,379072630,379232838,379393063,379553305,379713564,
- 379873840,380034133,380194443,380354769,380515113,380675473,380835850,380996244,381156655,381317083,
- 381477528,381637990,381798468,381958964,382119476,382280005,382440551,382601114,382761694,382922290,
- 383082903,383243534,383404181,383564844,383725525,383886223,384046937,384207668,384368416,384529181,
- 384689962,384850761,385011576,385172408,385333256,385494122,385655004,385815903,385976819,386137752,
- 386298701,386459667,386620650,386781650,386942667,387103700,387264750,387425816,387586900,387748000,
- 387909117,388070251,388231401,388392568,388553752,388714952,388876170,389037404,389198654,389359922,
- 389521206,389682507,389843824,390005158,390166509,390327877,390489261,390650662,390812079,390973513,
- 391134964,391296432,391457916,391619417,391780934,391942469,392104019,392265587,392427171,392588772,
- 392750389,392912023,393073674,393235341,393397025,393558725,393720442,393882176,394043926,394205693,
- 394367477,394529277,394691093,394852927,395014776,395176643,395338526,395500425,395662342,395824274,
- 395986224,396148189,396310172,396472171,396634186,396796218,396958267,397120332,397282414,397444512,
- 397606627,397768758,397930906,398093070,398255251,398417448,398579662,398741892,398904139,399066402,
- 399228682,399390979,399553291,399715621,399877966,400040329,400202707,400365103,400527514,400689943,
- 400852387,401014848,401177326,401339820,401502330,401664857,401827400,401989960,402152536,402315129,
- 402477738,402640363,402803005,402965664,403128338,403291030,403453737,403616461,403779201,403941958,
- 404104731,404267521,404430327,404593149,404755988,404918843,405081715,405244602,405407507,405570427,
- 405733364,405896317,406059287,406222273,406385275,406548294,406711329,406874381,407037448,407200532,
- 407363633,407526750,407689883,407853032,408016198,408179380,408342578,408505793,408669024,408832271,
- 408995534,409158814,409322110,409485423,409648751,409812096,409975457,410138835,410302229,410465639,
- 410629065,410792508,410955967,411119442,411282933,411446441,411609964,411773505,411937061,412100633,
- 412264222,412427827,412591449,412755086,412918740,413082410,413246096,413409798,413573517,413737251,
- 413901002,414064769,414228553,414392352,414556168,414720000,414883848,415047712,415211593,415375489,
- 415539402,415703331,415867276,416031238,416195215,416359209,416523218,416687244,416851286,417015344,
- 417179419,417343509,417507616,417671738,417835877,418000032,418164203,418328390,418492594,418656813,
- 418821048,418985300,419149568,419313852,419478151,419642467,419806800,419971148,420135512,420299892,
- 420464289,420628701,420793130,420957574,421122035,421286511,421451004,421615513,421780038,421944579,
- 422109136,422273709,422438298,422602903,422767524,422932161,423096814,423261483,423426168,423590870,
- 423755587,423920320,424085069,424249834,424414616,424579413,424744226,424909055,425073900,425238762,
- 425403639,425568532,425733441,425898366,426063307,426228264,426393237,426558226,426723231,426888252,
- 427053288,427218341,427383410,427548494,427713595,427878711,428043844,428208992,428374156,428539337,
- 428704533,428869745,429034973,429200217,429365476,429530752,429696043,429861351,430026674,430192013,
- 430357369,430522740,430688126,430853529,431018948,431184382,431349833,431515299,431680781,431846279,
- 432011793,432177323,432342868,432508430,432674007,432839600,433005209,433170834,433336474,433502131,
- 433667803,433833491,433999195,434164914,434330650,434496401,434662168,434827951,434993750,435159565,
- 435325395,435491241,435657103,435822981,435988874,436154784,436320709,436486650,436652606,436818579,
- 436984567,437150571,437316590,437482626,437648677,437814744,437980827,438146925,438313039,438479169,
- 438645315,438811476,438977653,439143846,439310055,439476279,439642519,439808775,439975046,440141333,
- 440307636,440473955,440640289,440806639,440973005,441139386,441305783,441472196,441638624,441805068,
- 441971528,442138004,442304495,442471002,442637524,442804062,442970616,443137185,443303770,443470371,
- 443636988,443803620,443970267,444136931,444303610,444470304,444637014,444803740,444970482,445137239,
- 445304012,445470800,445637604,445804423,445971259,446138109,446304976,446471858,446638755,446805668,
- 446972597,447139542,447306501,447473477,447640468,447807475,447974497,448141535,448308588,448475657,
- 448642742,448809842,448976957,449144088,449311235,449478397,449645575,449812768,449979977,450147202,
- 450314442,450481697,450648968,450816255,450983557,451150874,451318207,451485556,451652920,451820300,
- 451987695,452155105,452322531,452489973,452657430,452824903,452992391,453159894,453327413,453494948,
- 453662498,453830063,453997644,454165240,454332852,454500480,454668122,454835781,455003454,455171143,
- 455338848,455506568,455674303,455842054,456009821,456177602,456345399,456513212,456681040,456848884,
- 457016742,457184617,457352506,457520411,457688332,457856268,458024219,458192186,458360168,458528165,
- 458696178,458864207,459032250,459200309,459368384,459536474,459704579,459872699,460040835,460208986,
- 460377153,460545335,460713532,460881745,461049973,461218216,461386475,461554749,461723039,461891343,
- 462059663,462227999,462396350,462564716,462733097,462901494,463069906,463238333,463406776,463575234,
- 463743707,463912196,464080699,464249219,464417753,464586303,464754868,464923448,465092044,465260655,
- 465429281,465597922,465766579,465935251,466103938,466272641,466441358,466610091,466778840,466947603,
- 467116382,467285176,467453985,467622810,467791650,467960505,468129375,468298260,468467161,468636077,
- 468805008,468973954,469142916,469311893,469480885,469649892,469818914,469987952,470157005,470326073,
- 470495156,470664254,470833368,471002497,471171641,471340800,471509974,471679164,471848368,472017588,
- 472186823,472356073,472525339,472694619,472863915,473033226,473202552,473371893,473541249,473710620,
- 473880007,474049409,474218825,474388257,474557704,474727167,474896644,475066136,475235644,475405167,
- 475574704,475744257,475913825,476083408,476253007,476422620,476592248,476761892,476931550,477101224,
- 477270913,477440617,477610336,477780070,477949819,478119583,478289362,478459157,478628966,478798790,
- 478968630,479138484,479308354,479478239,479648138,479818053,479987983,480157928,480327888,480497863,
- 480667853,480837858,481007878,481177913,481347963,481518028,481688108,481858203,482028313,482198438,
- 482368578,482538734,482708904,482879089,483049289,483219504,483389734,483559979,483730240,483900515,
- 484070805,484241110,484411430,484581765,484752115,484922480,485092860,485263254,485433664,485604089,
- 485774529,485944983,486115453,486285938,486456437,486626952,486797481,486968025,487138585,487309159,
- 487479748,487650352,487820971,487991605,488162254,488332917,488503596,488674290,488844998,489015721,
- 489186460,489357213,489527981,489698764,489869562,490040374,490211202,490382044,490552902,490723774,
- 490894661,491065563,491236480,491407412,491578358,491749320,491920296,492091287,492262294,492433314,
- 492604350,492775401,492946466,493117547,493288642,493459752,493630876,493802016,493973171,494144340,
- 494315524,494486723,494657937,494829165,495000409,495171667,495342940,495514228,495685530,495856848,
- 496028180,496199527,496370889,496542265,496713657,496885063,497056484,497227919,497399370,497570835,
- 497742315,497913810,498085320,498256844,498428383,498599937,498771506,498943089,499114687,499286300,
- 499457928,499629570,499801227,499972899,500144586,500316287,500488003,500659734,500831480,501003240,
- 501175015,501346805,501518609,501690428,501862262,502034111,502205974,502377852,502549745,502721652,
- 502893574,503065511,503237462,503409429,503581409,503753405,503925415,504097440,504269480,504441534,
- 504613603,504785686,504957785,505129897,505302025,505474167,505646324,505818496,505990682,506162883,
- 506335098,506507328,506679573,506851833,507024107,507196395,507368699,507541017,507713349,507885697,
- 508058058,508230435,508402826,508575232,508747652,508920087,509092536,509265000,509437479,509609972,
- 509782480,509955003,510127540,510300092,510472658,510645239,510817834,510990444,511163069,511335708,
- 511508362,511681030,511853713,512026411,512199123,512371849,512544590,512717346,512890116,513062901,
- 513235701,513408514,513581343,513754186,513927043,514099916,514272802,514445703,514618619,514791549,
- 514964494,515137453,515310427,515483415,515656418,515829435,516002467,516175513,516348574,516521649,
- 516694739,516867844,517040962,517214096,517387243,517560406,517733582,517906774,518079979,518253200,
- 518426434,518599683,518772947,518946225,519119518,519292825,519466146,519639482,519812833,519986197,
- 520159577,520332970,520506379,520679801,520853238,521026690,521200156,521373636,521547131,521720640,
- 521894164,522067702,522241255,522414822,522588403,522761999,522935609,523109234,523282873,523456526,
- 523630194,523803876,523977573,524151284,524325009,524498749,524672503,524846272,525020055,525193852,
- 525367664,525541490,525715330,525889185,526063054,526236938,526410836,526584748,526758675,526932616,
- 527106571,527280541,527454525,527628524,527802536,527976563,528150605,528324661,528498731,528672815,
- 528846914,529021027,529195155,529369297,529543453,529717623,529891808,530066007,530240220,530414448,
- 530588690,530762946,530937217,531111502,531285801,531460115,531634442,531808785,531983141,532157512,
- 532331897,532506296,532680709,532855137,533029579,533204036,533378506,533552991,533727490,533902004,
- 534076531,534251073,534425630,534600200,534774785,534949384,535123997,535298624,535473266,535647922,
- 535822592,535997276,536171975,536346688,536521415,536696156,536870912,537045682,537220466,537395264,
- 537570076,537744903,537919744,538094599,538269468,538444352,538619249,538794161,538969087,539144028,
- 539318982,539493951,539668934,539843931,540018942,540193967,540369007,540544060,540719128,540894210,
- 541069307,541244417,541419542,541594680,541769833,541945000,542120182,542295377,542470587,542645810,
- 542821048,542996300,543171566,543346846,543522141,543697449,543872772,544048109,544223460,544398825,
- 544574204,544749597,544925004,545100426,545275862,545451311,545626775,545802253,545977745,546153251,
- 546328772,546504306,546679854,546855417,547030994,547206584,547382189,547557808,547733441,547909088,
- 548084749,548260425,548436114,548611817,548787535,548963266,549139012,549314771,549490545,549666333,
- 549842135,550017950,550193780,550369624,550545482,550721354,550897241,551073141,551249055,551424983,
- 551600925,551776882,551952852,552128836,552304835,552480847,552656873,552832914,553008968,553185037,
- 553361119,553537215,553713326,553889450,554065589,554241741,554417908,554594088,554770283,554946491,
- 555122714,555298950,555475201,555651465,555827743,556004036,556180342,556356662,556532997,556709345,
- 556885707,557062083,557238473,557414877,557591295,557767727,557944173,558120633,558297107,558473595,
- 558650097,558826612,559003142,559179686,559356243,559532814,559709400,559885999,560062612,560239240,
- 560415881,560592536,560769205,560945887,561122584,561299295,561476019,561652758,561829510,562006276,
- 562183057,562359851,562536659,562713480,562890316,563067166,563244029,563420907,563597798,563774703,
- 563951622,564128555,564305502,564482463,564659437,564836426,565013428,565190444,565367474,565544518,
- 565721576,565898647,566075733,566252832,566429945,566607072,566784213,566961368,567138536,567315719,
- 567492915,567670125,567847349,568024586,568201838,568379103,568556382,568733675,568910982,569088303,
- 569265637,569442985,569620347,569797723,569975113,570152516,570329933,570507365,570684809,570862268,
- 571039740,571217227,571394727,571572240,571749768,571927309,572104865,572282433,572460016,572637613,
- 572815223,572992847,573170485,573348136,573525802,573703481,573881173,574058880,574236600,574414334,
- 574592082,574769844,574947619,575125408,575303211,575481028,575658858,575836702,576014560,576192431,
- 576370316,576548215,576726128,576904054,577081994,577259948,577437916,577615897,577793892,577971901,
- 578149923,578327959,578506009,578684072,578862149,579040240,579218345,579396463,579574595,579752741,
- 579930900,580109073,580287260,580465460,580643674,580821902,581000143,581178399,581356667,581534950,
- 581713246,581891555,582069879,582248216,582426567,582604931,582783309,582961701,583140106,583318525,
- 583496958,583675404,583853864,584032337,584210825,584389325,584567840,584746368,584924910,585103465,
- 585282034,585460616,585639213,585817822,585996446,586175083,586353733,586532398,586711076,586889767,
- 587068472,587247191,587425923,587604669,587783428,587962201,588140988,588319788,588498602,588677429,
- 588856270,589035125,589213993,589392875,589571770,589750679,589929601,590108537,590287487,590466450,
- 590645427,590824417,591003421,591182438,591361469,591540513,591719571,591898643,592077728,592256827,
- 592435939,592615065,592794204,592973357,593152523,593331703,593510896,593690103,593869324,594048558,
- 594227805,594407066,594586341,594765629,594944930,595124245,595303574,595482916,595662271,595841640,
- 596021023,596200419,596379829,596559252,596738688,596918138,597097602,597277079,597456569,597636073,
- 597815591,597995122,598174666,598354224,598533795,598713380,598892979,599072590,599252216,599431854,
- 599611506,599791172,599970851,600150544,600330250,600509969,600689702,600869448,601049208,601228981,
- 601408768,601588568,601768381,601948208,602128049,602307902,602487770,602667650,602847544,603027452,
- 603207373,603387307,603567255,603747216,603927191,604107179,604287180,604467195,604647223,604827265,
- 605007320,605187388,605367470,605547565,605727674,605907796,606087931,606268080,606448242,606628417,
- 606808606,606988808,607169024,607349253,607529496,607709751,607890020,608070303,608250599,608430908,
- 608611231,608791566,608971916,609152278,609332654,609513044,609693446,609873862,610054292,610234735,
- 610415191,610595660,610776143,610956639,611137148,611317671,611498207,611678756,611859319,612039895,
- 612220484,612401087,612581703,612762332,612942975,613123631,613304300,613484983,613665679,613846388,
- 614027110,614207846,614388595,614569357,614750133,614930922,615111724,615292540,615473368,615654210,
- 615835066,616015934,616196816,616377712,616558620,616739542,616920477,617101425,617282386,617463361,
- 617644349,617825351,618006365,618187393,618368434,618549488,618730556,618911637,619092731,619273838,
- 619454959,619636093,619817240,619998400,620179573,620360760,620541960,620723173,620904400,621085639,
- 621266892,621448158,621629438,621810730,621992036,622173355,622354687,622536032,622717391,622898763,
- 623080148,623261546,623442957,623624382,623805820,623987271,624168735,624350212,624531703,624713207,
- 624894724,625076254,625257797,625439354,625620923,625802506,625984102,626165711,626347334,626528969,
- 626710618,626892280,627073955,627255643,627437344,627619058,627800786,627982527,628164281,628346048,
- 628527828,628709621,628891428,629073248,629255080,629436926,629618785,629800658,629982543,630164441,
- 630346353,630528278,630710215,630892166,631074130,631256108,631438098,631620101,631802118,631984147,
- 632166190,632348246,632530315,632712397,632894492,633076600,633258722,633440856,633623004,633805164,
- 633987338,634169525,634351725,634533938,634716164,634898403,635080655,635262921,635445199,635627490,
- 635809795,635992113,636174443,636356787,636539144,636721514,636903896,637086292,637268701,637451123,
- 637633559,637816007,637998468,638180942,638363430,638545930,638728443,638910970,639093509,639276062,
- 639458627,639641206,639823797,640006402,640189020,640371650,640554294,640736951,640919621,641102303,
- 641284999,641467708,641650430,641833165,642015912,642198673,642381447,642564234,642747034,642929846,
- 643112672,643295511,643478363,643661228,643844105,644026996,644209900,644392817,644575746,644758689,
- 644941645,645124613,645307595,645490590,645673597,645856618,646039651,646222698,646405757,646588830,
- 646771915,646955013,647138125,647321249,647504386,647687536,647870699,648053875,648237064,648420266,
- 648603481,648786709,648969949,649153203,649336470,649519749,649703042,649886347,650069665,650252997,
- 650436341,650619698,650803068,650986451,651169847,651353255,651536677,651720112,651903559,652087020,
- 652270493,652453979,652637478,652820990,653004515,653188053,653371604,653555167,653738744,653922333,
- 654105935,654289550,654473178,654656819,654840473,655024140,655207819,655391512,655575217,655758935,
- 655942666,656126410,656310167,656493936,656677719,656861514,657045322,657229143,657412977,657596824,
- 657780683,657964556,658148441,658332339,658516250,658700174,658884111,659068060,659252023,659435998,
- 659619986,659803987,659988000,660172027,660356066,660540118,660724183,660908261,661092351,661276455,
- 661460571,661644700,661828842,662012997,662197164,662381344,662565538,662749743,662933962,663118194,
- 663302438,663486695,663670965,663855247,664039543,664223851,664408172,664592506,664776853,664961212,
- 665145584,665329969,665514367,665698777,665883200,666067636,666252085,666436547,666621021,666805508,
- 666990008,667174521,667359046,667543584,667728135,667912699,668097275,668281864,668466466,668651081,
- 668835708,669020348,669205001,669389667,669574345,669759036,669943740,670128456,670313185,670497927,
- 670682682,670867450,671052230,671237023,671421828,671606647,671791478,671976321,672161178,672346047,
- 672530929,672715823,672900731,673085651,673270583,673455529,673640487,673825458,674010441,674195437,
- 674380446,674565468,674750502,674935549,675120609,675305681,675490766,675675863,675860974,676046097,
- 676231232,676416381,676601542,676786716,676971902,677157101,677342313,677527537,677712774,677898024,
- 678083286,678268561,678453849,678639149,678824462,679009787,679195126,679380477,679565840,679751216,
- 679936605,680122006,680307421,680492847,680678287,680863739,681049203,681234680,681420170,681605673,
- 681791188,681976716,682162256,682347809,682533374,682718953,682904543,683090147,683275763,683461391,
- 683647033,683832687,684018353,684204032,684389724,684575428,684761145,684946874,685132616,685318371,
- 685504138,685689918,685875710,686061515,686247332,686433163,686619005,686804861,686990728,687176609,
- 687362502,687548407,687734325,687920256,688106199,688292155,688478123,688664104,688850098,689036104,
- 689222122,689408154,689594197,689780254,689966322,690152404,690338498,690524604,690710723,690896854,
- 691082998,691269155,691455324,691641506,691827700,692013907,692200126,692386358,692572602,692758859,
- 692945128,693131410,693317704,693504011,693690330,693876662,694063007,694249364,694435733,694622115,
- 694808509,694994916,695181336,695367768,695554212,695740669,695927138,696113620,696300115,696486621,
- 696673141,696859673,697046217,697232774,697419343,697605925,697792519,697979126,698165745,698352377,
- 698539021,698725677,698912347,699099028,699285722,699472429,699659147,699845879,700032623,700219379,
- 700406148,700592929,700779723,700966529,701153347,701340178,701527022,701713878,701900746,702087627,
- 702274520,702461425,702648343,702835274,703022217,703209172,703396140,703583120,703770113,703957118,
- 704144135,704331165,704518208,704705262,704892329,705079409,705266501,705453605,705640722,705827851,
- 706014993,706202147,706389313,706576492,706763683,706950887,707138103,707325331,707512572,707699825,
- 707887090,708074368,708261659,708448961,708636276,708823604,709010944,709198296,709385660,709573037,
- 709760427,709947828,710135242,710322669,710510107,710697559,710885022,711072498,711259986,711447487,
- 711635000,711822525,712010063,712197613,712385175,712572750,712760337,712947936,713135548,713323172,
- 713510808,713698457,713886118,714073791,714261477,714449175,714636885,714824608,715012343,715200090,
- 715387850,715575622,715763406,715951203,716139012,716326833,716514667,716702513,716890371,717078242,
- 717266124,717454019,717641927,717829847,718017779,718205723,718393680,718581648,718769630,718957623,
- 719145629,719333647,719521677,719709720,719897775,720085842,720273922,720462013,720650117,720838234,
- 721026362,721214503,721402656,721590822,721778999,721967189,722155392,722343606,722531833,722720072,
- 722908323,723096587,723284862,723473150,723661451,723849763,724038088,724226425,724414774,724603136,
- 724791509,724979895,725168294,725356704,725545127,725733562,725922009,726110468,726298940,726487424,
- 726675920,726864428,727052949,727241481,727430026,727618583,727807153,727995734,728184328,728372934,
- 728561553,728750183,728938826,729127480,729316148,729504827,729693518,729882222,730070938,730259666,
- 730448406,730637159,730825923,731014700,731203489,731392290,731581104,731769929,731958767,732147617,
- 732336479,732525353,732714240,732903139,733092049,733280972,733469908,733658855,733847814,734036786,
- 734225770,734414766,734603774,734792794,734981827,735170871,735359928,735548997,735738078,735927171,
- 736116277,736305394,736494524,736683666,736872820,737061986,737251164,737440354,737629557,737818771,
- 738007998,738197237,738386488,738575751,738765026,738954314,739143613,739332925,739522249,739711585,
- 739900933,740090293,740279665,740469049,740658446,740847854,741037275,741226708,741416152,741605609,
- 741795078,741984560,742174053,742363558,742553076,742742605,742932147,743121701,743311266,743500844,
- 743690434,743880036,744069651,744259277,744448915,744638566,744828228,745017903,745207589,745397288,
- 745586999,745776721,745966456,746156203,746345962,746535733,746725517,746915312,747105119,747294938,
- 747484770,747674613,747864469,748054336,748244216,748434107,748624011,748813927,749003855,749193794,
- 749383746,749573710,749763686,749953674,750143674,750333686,750523710,750713746,750903794,751093854,
- 751283926,751474011,751664107,751854215,752044335,752234467,752424612,752614768,752804936,752995117,
- 753185309,753375513,753565729,753755958,753946198,754136450,754326715,754516991,754707279,754897580,
- 755087892,755278216,755468553,755658901,755849261,756039633,756230018,756420414,756610822,756801242,
- 756991675,757182119,757372575,757563043,757753523,757944015,758134519,758325035,758515563,758706103,
- 758896655,759087219,759277794,759468382,759658982,759849593,760040217,760230853,760421500,760612160,
- 760802831,760993514,761184210,761374917,761565636,761756367,761947110,762137866,762328632,762519411,
- 762710202,762901005,763091820,763282646,763473485,763664335,763855198,764046072,764236958,764427856,
- 764618767,764809689,765000622,765191568,765382526,765573496,765764477,765955471,766146476,766337493,
- 766528523,766719564,766910617,767101682,767292758,767483847,767674948,767866060,768057185,768248321,
- 768439469,768630629,768821801,769012985,769204180,769395388,769586607,769777839,769969082,770160337,
- 770351604,770542883,770734174,770925476,771116791,771308117,771499455,771690805,771882167,772073541,
- 772264926,772456324,772647733,772839155,773030588,773222032,773413489,773604958,773796438,773987931,
- 774179435,774370951,774562479,774754018,774945570,775137133,775328708,775520295,775711894,775903505,
- 776095127,776286762,776478408,776670066,776861736,777053417,777245111,777436816,777628533,777820262,
- 778012003,778203755,778395520,778587296,778779084,778970884,779162695,779354519,779546354,779738201,
- 779930060,780121930,780313813,780505707,780697613,780889531,781081460,781273402,781465355,781657320,
- 781849297,782041285,782233285,782425297,782617321,782809357,783001404,783193464,783385535,783577617,
- 783769712,783961818,784153936,784346066,784538208,784730361,784922526,785114703,785306892,785499092,
- 785691304,785883528,786075764,786268012,786460271,786652542,786844824,787037119,787229425,787421743,
- 787614073,787806414,787998767,788191132,788383509,788575897,788768297,788960709,789153133,789345568,
- 789538015,789730474,789922944,790115426,790307920,790500426,790692943,790885472,791078013,791270566,
- 791463130,791655706,791848294,792040893,792233504,792426127,792618762,792811408,793004066,793196735,
- 793389417,793582110,793774814,793967531,794160259,794352999,794545750,794738513,794931288,795124075,
- 795316873,795509683,795702505,795895338,796088183,796281039,796473908,796666788,796859680,797052583,
- 797245498,797438425,797631363,797824313,798017275,798210248,798403233,798596230,798789238,798982258,
- 799175290,799368333,799561388,799754455,799947533,800140623,800333725,800526838,800719963,800913099,
- 801106248,801299407,801492579,801685762,801878957,802072163,802265381,802458611,802651852,802845105,
- 803038370,803231646,803424934,803618233,803811544,804004867,804198201,804391547,804584905,804778274,
- 804971654,805165047,805358451,805551866,805745294,805938733,806132183,806325645,806519119,806712604,
- 806906101,807099609,807293129,807486661,807680204,807873759,808067326,808260904,808454493,808648094,
- 808841707,809035332,809228968,809422615,809616274,809809945,810003627,810197321,810391027,810584744,
- 810778472,810972213,811165964,811359728,811553503,811747289,811941087,812134897,812328718,812522551,
- 812716395,812910251,813104118,813297997,813491888,813685790,813879703,814073628,814267565,814461513,
- 814655473,814849445,815043427,815237422,815431428,815625445,815819475,816013515,816207567,816401631,
- 816595706,816789793,816983891,817178001,817372122,817566255,817760400,817954555,818148723,818342902,
- 818537092,818731294,818925508,819119733,819313969,819508217,819702477,819896748,820091031,820285325,
- 820479630,820673947,820868276,821062616,821256968,821451331,821645705,821840091,822034489,822228898,
- 822423319,822617751,822812194,823006649,823201116,823395594,823590083,823784584,823979097,824173621,
- 824368156,824562703,824757261,824951831,825146413,825341005,825535610,825730225,825924853,826119491,
- 826314141,826508803,826703476,826898160,827092856,827287564,827482283,827677013,827871755,828066508,
- 828261273,828456049,828650837,828845636,829040446,829235268,829430102,829624946,829819803,830014670,
- 830209550,830404440,830599342,830794256,830989181,831184117,831379065,831574024,831768994,831963976,
- 832158970,832353975,832548991,832744019,832939058,833134109,833329170,833524244,833719329,833914425,
- 834109533,834304652,834499782,834694924,834890077,835085242,835280418,835475605,835670804,835866015,
- 836061236,836256469,836451714,836646970,836842237,837037516,837232806,837428107,837623420,837818744,
- 838014080,838209427,838404785,838600155,838795536,838990928,839186332,839381747,839577174,839772612,
- 839968061,840163522,840358994,840554478,840749972,840945479,841140996,841336525,841532065,841727617,
- 841923180,842118754,842314340,842509937,842705546,842901165,843096797,843292439,843488093,843683758,
- 843879435,844075122,844270822,844466532,844662254,844857987,845053732,845249488,845445255,845641034,
- 845836823,846032625,846228437,846424261,846620096,846815943,847011801,847207670,847403550,847599442,
- 847795345,847991260,848187186,848383123,848579071,848775031,848971002,849166984,849362978,849558983,
- 849754999,849951027,850147065,850343116,850539177,850735250,850931334,851127429,851323536,851519654,
- 851715783,851911924,852108076,852304239,852500413,852696599,852892796,853089004,853285224,853481454,
- 853677697,853873950,854070215,854266491,854462778,854659076,854855386,855051707,855248039,855444383,
- 855640738,855837104,856033481,856229870,856426270,856622681,856819103,857015537,857211982,857408438,
- 857604905,857801384,857997874,858194375,858390888,858587411,858783946,858980492,859177050,859373619,
- 859570198,859766790,859963392,860160006,860356630,860553267,860749914,860946572,861143242,861339923,
- 861536615,861733319,861930034,862126760,862323497,862520245,862717005,862913775,863110557,863307351,
- 863504155,863700971,863897798,864094636,864291485,864488346,864685217,864882100,865078994,865275900,
- 865472816,865669744,865866683,866063633,866260595,866457567,866654551,866851546,867048552,867245569,
- 867442598,867639637,867836688,868033750,868230823,868427908,868625004,868822110,869019228,869216357,
- 869413498,869610649,869807812,870004986,870202171,870399367,870596574,870793793,870991023,871188264,
- 871385516,871582779,871780053,871977339,872174635,872371943,872569262,872766592,872963934,873161286,
- 873358650,873556024,873753410,873950807,874148216,874345635,874543065,874740507,874937960,875135424,
- 875332899,875530385,875727882,875925391,876122910,876320441,876517983,876715536,876913100,877110675,
- 877308262,877505859,877703468,877901088,878098719,878296361,878494014,878691678,878889353,879087040,
- 879284737,879482446,879680166,879877897,880075639,880273392,880471156,880668932,880866718,881064516,
- 881262324,881460144,881657975,881855817,882053670,882251534,882449409,882647296,882845193,883043102,
- 883241021,883438952,883636894,883834847,884032811,884230786,884428772,884626769,884824777,885022797,
- 885220827,885418869,885616921,885814985,886013060,886211145,886409242,886607350,886805469,887003599,
- 887201741,887399893,887598056,887796230,887994416,888192612,888390820,888589038,888787268,888985509,
- 889183760,889382023,889580297,889778582,889976878,890175185,890373503,890571832,890770172,890968523,
- 891166885,891365258,891563643,891762038,891960444,892158862,892357290,892555729,892754180,892952641,
- 893151114,893349597,893548092,893746597,893945114,894143642,894342180,894540730,894739291,894937862,
- 895136445,895335039,895533644,895732259,895930886,896129524,896328173,896526833,896725503,896924185,
- 897122878,897321582,897520297,897719022,897917759,898116507,898315266,898514036,898712816,898911608,
- 899110411,899309225,899508050,899706885,899905732,900104590,900303458,900502338,900701229,900900130,
- 901099043,901297967,901496901,901695847,901894803,902093771,902292749,902491739,902690739,902889750,
- 903088773,903287806,903486850,903685906,903884972,904084049,904283137,904482236,904681346,904880467,
- 905079599,905278742,905477896,905677061,905876237,906075423,906274621,906473829,906673049,906872279,
- 907071521,907270773,907470037,907669311,907868596,908067892,908267199,908466517,908665846,908865186,
- 909064537,909263899,909463271,909662655,909862049,910061455,910260871,910460298,910659737,910859186,
- 911058646,911258117,911457599,911657091,911856595,912056110,912255635,912455172,912654719,912854277,
- 913053846,913253426,913453017,913652619,913852232,914051856,914251490,914451136,914650792,914850459,
- 915050138,915249827,915449527,915649237,915848959,916048692,916248435,916448190,916647955,916847731,
- 917047518,917247316,917447125,917646945,917846775,918046617,918246469,918446332,918646206,918846091,
- 919045987,919245894,919445811,919645740,919845679,920045629,920245590,920445562,920645545,920845538,
- 921045543,921245558,921445584,921645621,921845669,922045728,922245797,922445878,922645969,922846071,
- 923046184,923246308,923446443,923646588,923846745,924046912,924247090,924447279,924647479,924847689,
- 925047911,925248143,925448386,925648640,925848904,926049180,926249466,926449764,926650072,926850391,
- 927050720,927251061,927451412,927651774,927852147,928052531,928252926,928453331,928653747,928854174,
- 929054612,929255061,929455521,929655991,929856472,930056964,930257467,930457980,930658504,930859040,
- 931059586,931260142,931460710,931661288,931861877,932062477,932263088,932463709,932664342,932864985,
- 933065639,933266303,933466979,933667665,933868362,934069070,934269789,934470518,934671258,934872009,
- 935072771,935273543,935474326,935675120,935875925,936076741,936277567,936478404,936679252,936880111,
- 937080980,937281861,937482751,937683653,937884566,938085489,938286423,938487368,938688323,938889289,
- 939090266,939291254,939492253,939693262,939894282,940095313,940296354,940497407,940698470,940899543,
- 941100628,941301723,941502829,941703946,941905073,942106212,942307361,942508520,942709691,942910872,
- 943112064,943313266,943514480,943715704,943916938,944118184,944319440,944520707,944721985,944923273,
- 945124572,945325882,945527203,945728534,945929876,946131229,946332592,946533966,946735351,946936747,
- 947138153,947339570,947540998,947742436,947943885,948145345,948346815,948548297,948749789,948951291,
- 949152804,949354328,949555863,949757409,949958965,950160531,950362109,950563697,950765296,950966905,
- 951168526,951370156,951571798,951773450,951975113,952176787,952378471,952580166,952781872,952983588,
- 953185315,953387053,953588801,953790560,953992330,954194110,954395901,954597703,954799515,955001338,
- 955203172,955405016,955606871,955808737,956010613,956212500,956414398,956616306,956818225,957020155,
- 957222095,957424046,957626008,957827980,958029963,958231956,958433960,958635975,958838001,959040037,
- 959242083,959444141,959646209,959848287,960050377,960252477,960454587,960656708,960858840,961060983,
- 961263136,961465299,961667474,961869659,962071854,962274060,962476277,962678505,962880743,963082991,
- 963285251,963487521,963689801,963892092,964094394,964296707,964499030,964701363,964903707,965106062,
- 965308428,965510804,965713190,965915588,966117995,966320414,966522843,966725283,966927733,967130194,
- 967332665,967535147,967737640,967940143,968142657,968345181,968547716,968750262,968952818,969155385,
- 969357962,969560550,969763149,969965758,970168378,970371008,970573649,970776300,970978962,971181635,
- 971384318,971587011,971789716,971992431,972195156,972397892,972600639,972803396,973006163,973208942,
- 973411731,973614530,973817340,974020160,974222991,974425833,974628685,974831548,975034421,975237305,
- 975440200,975643105,975846020,976048946,976251883,976454830,976657788,976860756,977063735,977266724,
- 977469724,977672734,977875755,978078787,978281829,978484881,978687944,978891018,979094102,979297197,
- 979500302,979703418,979906544,980109681,980312828,980515986,980719154,980922333,981125523,981328723,
- 981531933,981735154,981938386,982141628,982344880,982548143,982751417,982954701,983157995,983361300,
- 983564616,983767942,983971279,984174626,984377983,984581352,984784730,984988119,985191519,985394929,
- 985598350,985801781,986005222,986208675,986412137,986615610,986819094,987022588,987226092,987429608,
- 987633133,987836669,988040216,988243773,988447340,988650918,988854506,989058105,989261715,989465335,
- 989668965,989872606,990076257,990279919,990483591,990687274,990890967,991094671,991298385,991502109,
- 991705844,991909590,992113346,992317112,992520889,992724677,992928475,993132283,993336102,993539931,
- 993743770,993947620,994151481,994355352,994559234,994763125,994967028,995170941,995374864,995578798,
- 995782742,995986696,996190661,996394637,996598623,996802619,997006626,997210643,997414671,997618709,
- 997822757,998026816,998230886,998434965,998639056,998843156,999047267,999251389,999455521,999659663,
- 999863816,1000067979,1000272153,1000476337,1000680531,1000884736,1001088952,1001293177,1001497413,1001701660,
- 1001905917,1002110184,1002314462,1002518750,1002723049,1002927358,1003131677,1003336007,1003540347,1003744698,
- 1003949059,1004153430,1004357812,1004562204,1004766607,1004971020,1005175443,1005379877,1005584321,1005788776,
- 1005993241,1006197716,1006402202,1006606698,1006811205,1007015722,1007220249,1007424787,1007629335,1007833893,
- 1008038462,1008243041,1008447631,1008652231,1008856841,1009061462,1009266093,1009470734,1009675386,1009880048,
- 1010084721,1010289404,1010494097,1010698801,1010903515,1011108239,1011312974,1011517719,1011722475,1011927241,
- 1012132017,1012336803,1012541600,1012746407,1012951225,1013156053,1013360891,1013565740,1013770599,1013975469,
- 1014180348,1014385238,1014590139,1014795050,1014999971,1015204902,1015409844,1015614796,1015819759,1016024732,
- 1016229715,1016434708,1016639712,1016844726,1017049751,1017254786,1017459831,1017664886,1017869952,1018075028,
- 1018280115,1018485212,1018690319,1018895436,1019100564,1019305702,1019510851,1019716009,1019921179,1020126358,
- 1020331548,1020536748,1020741958,1020947179,1021152410,1021357651,1021562903,1021768165,1021973437,1022178719,
- 1022384012,1022589315,1022794629,1022999953,1023205287,1023410631,1023615986,1023821351,1024026726,1024232111,
- 1024437507,1024642913,1024848330,1025053757,1025259194,1025464641,1025670099,1025875566,1026081045,1026286533,
- 1026492032,1026697541,1026903060,1027108590,1027314130,1027519680,1027725240,1027930811,1028136392,1028341984,
- 1028547585,1028753197,1028958819,1029164451,1029370094,1029575747,1029781410,1029987084,1030192768,1030398462,
- 1030604166,1030809880,1031015605,1031221340,1031427086,1031632841,1031838607,1032044383,1032250170,1032455966,
- 1032661773,1032867590,1033073418,1033279255,1033485103,1033690961,1033896830,1034102708,1034308597,1034514496,
- 1034720406,1034926325,1035132255,1035338195,1035544146,1035750106,1035956077,1036162058,1036368050,1036574051,
- 1036780063,1036986085,1037192117,1037398160,1037604212,1037810275,1038016348,1038222432,1038428526,1038634629,
- 1038840743,1039046868,1039253002,1039459147,1039665302,1039871467,1040077643,1040283828,1040490024,1040696230,
- 1040902446,1041108673,1041314910,1041521157,1041727414,1041933681,1042139959,1042346246,1042552544,1042758852,
- 1042965171,1043171499,1043377838,1043584187,1043790546,1043996916,1044203295,1044409685,1044616085,1044822495,
- 1045028916,1045235346,1045441787,1045648238,1045854699,1046061170,1046267652,1046474144,1046680645,1046887158,
- 1047093680,1047300212,1047506755,1047713308,1047919871,1048126444,1048333027,1048539621,1048746224,1048952838,
- 1049159462,1049366097,1049572741,1049779396,1049986060,1050192735,1050399420,1050606116,1050812821,1051019537,
- 1051226262,1051432998,1051639744,1051846500,1052053267,1052260043,1052466830,1052673627,1052880434,1053087251,
- 1053294079,1053500916,1053707764,1053914622,1054121489,1054328368,1054535256,1054742154,1054949063,1055155981,
- 1055362910,1055569849,1055776798,1055983758,1056190727,1056397707,1056604696,1056811696,1057018706,1057225726,
- 1057432756,1057639797,1057846847,1058053908,1058260979,1058468059,1058675150,1058882252,1059089363,1059296484,
- 1059503616,1059710757,1059917909,1060125071,1060332243,1060539425,1060746617,1060953820,1061161032,1061368255,
- 1061575488,1061782730,1061989983,1062197246,1062404520,1062611803,1062819096,1063026400,1063233713,1063441037,
- 1063648371,1063855715,1064063069,1064270433,1064477807,1064685192,1064892586,1065099990,1065307405,1065514830,
- 1065722265,1065929709,1066137164,1066344630,1066552105,1066759590,1066967085,1067174591,1067382106,1067589632,
- 1067797168,1068004714,1068212269,1068419835,1068627411,1068834998,1069042594,1069250200,1069457816,1069665443,
- 1069873079,1070080726,1070288383,1070496049,1070703726,1070911413,1071119110,1071326817,1071534534,1071742261,
- 1071949998,1072157746,1072365503,1072573270,1072781048,1072988835,1073196633,1073404441,1073612258,1073820086,
- 1074027924,1074235772,1074443630,1074651498,1074859376,1075067264,1075275162,1075483070,1075690988,1075898917,
- 1076106855,1076314803,1076522762,1076730730,1076938709,1077146697,1077354696,1077562705,1077770723,1077978752,
- 1078186791,1078394839,1078602898,1078810967,1079019046,1079227135,1079435234,1079643343,1079851462,1080059591,
- 1080267730,1080475879,1080684038,1080892207,1081100386,1081308576,1081516775,1081724984,1081933203,1082141432,
- 1082349672,1082557921,1082766180,1082974450,1083182729,1083391018,1083599318,1083807627,1084015947,1084224276,
- 1084432615,1084640965,1084849324,1085057694,1085266073,1085474462,1085682862,1085891271,1086099691,1086308120,
- 1086516560,1086725009,1086933468,1087141938,1087350417,1087558907,1087767406,1087975915,1088184435,1088392964,
- 1088601503,1088810053,1089018612,1089227181,1089435761,1089644350,1089852949,1090061559,1090270178,1090478807,
- 1090687446,1090896095,1091104754,1091313424,1091522103,1091730792,1091939491,1092148200,1092356919,1092565648,
- 1092774387,1092983136,1093191894,1093400663,1093609442,1093818231,1094027030,1094235838,1094444657,1094653486,
- 1094862324,1095071173,1095280031,1095488900,1095697778,1095906666,1096115565,1096324473,1096533391,1096742319,
- 1096951257,1097160206,1097369164,1097578132,1097787109,1097996097,1098205095,1098414103,1098623121,1098832148,
- 1099041186,1099250233,1099459291,1099668358,1099877435,1100086523,1100295620,1100504727,1100713844,1100922971,
- 1101132108,1101341255,1101550412,1101759578,1101968755,1102177942,1102387138,1102596345,1102805561,1103014787,
- 1103224023,1103433270,1103642526,1103851792,1104061067,1104270353,1104479649,1104688955,1104898270,1105107596,
- 1105316931,1105526276,1105735631,1105944997,1106154372,1106363756,1106573151,1106782556,1106991971,1107201395,
- 1107410830,1107620274,1107829728,1108039192,1108248667,1108458150,1108667644,1108877148,1109086662,1109296185,
- 1109505719,1109715262,1109924815,1110134378,1110343951,1110553534,1110763127,1110972730,1111182342,1111391965,
- 1111601597,1111811239,1112020891,1112230553,1112440225,1112649907,1112859598,1113069300,1113279011,1113488733,
- 1113698464,1113908205,1114117956,1114327716,1114537487,1114747267,1114957058,1115166858,1115376668,1115586488,
- 1115796318,1116006157,1116216007,1116425866,1116635736,1116845615,1117055504,1117265403,1117475311,1117685230,
- 1117895158,1118105097,1118315045,1118525003,1118734971,1118944948,1119154936,1119364933,1119574941,1119784958,
- 1119994985,1120205022,1120415068,1120625125,1120835191,1121045267,1121255353,1121465449,1121675555,1121885670,
- 1122095796,1122305931,1122516076,1122726231,1122936396,1123146570,1123356755,1123566949,1123777153,1123987367,
- 1124197590,1124407824,1124618067,1124828321,1125038584,1125248856,1125459139,1125669432,1125879734,1126090046,
- 1126300368,1126510700,1126721041,1126931393,1127141754,1127352125,1127562506,1127772897,1127983297,1128193707,
- 1128404127,1128614557,1128824997,1129035447,1129245906,1129456375,1129666854,1129877343,1130087841,1130298350,
- 1130508868,1130719396,1130929934,1131140481,1131351039,1131561606,1131772183,1131982769,1132193366,1132403972,
- 1132614588,1132825214,1133035850,1133246496,1133457151,1133667816,1133878491,1134089176,1134299870,1134510574,
- 1134721288,1134932012,1135142746,1135353489,1135564242,1135775005,1135985778,1136196560,1136407352,1136618154,
- 1136828966,1137039788,1137250619,1137461460,1137672311,1137883172,1138094042,1138304922,1138515812,1138726712,
- 1138937622,1139148541,1139359470,1139570409,1139781357,1139992315,1140203284,1140414261,1140625249,1140836246,
- 1141047253,1141258270,1141469297,1141680333,1141891379,1142102435,1142313501,1142524576,1142735661,1142946756,
- 1143157861,1143368975,1143580099,1143791233,1144002377,1144213530,1144424693,1144635866,1144847048,1145058241,
- 1145269443,1145480655,1145691876,1145903107,1146114348,1146325599,1146536859,1146748130,1146959410,1147170699,
- 1147381999,1147593308,1147804626,1148015955,1148227293,1148438641,1148649999,1148861367,1149072744,1149284131,
- 1149495527,1149706934,1149918350,1150129775,1150341211,1150552656,1150764111,1150975576,1151187050,1151398534,
- 1151610028,1151821531,1152033044,1152244567,1152456100,1152667642,1152879194,1153090756,1153302327,1153513909,
- 1153725499,1153937100,1154148710,1154360330,1154571960,1154783599,1154995248,1155206907,1155418575,1155630253,
- 1155841941,1156053639,1156265346,1156477063,1156688789,1156900526,1157112272,1157324027,1157535793,1157747568,
- 1157959352,1158171147,1158382951,1158594765,1158806588,1159018421,1159230264,1159442116,1159653979,1159865850,
- 1160077732,1160289623,1160501524,1160713435,1160925355,1161137285,1161349224,1161561173,1161773132,1161985101,
- 1162197079,1162409067,1162621064,1162833072,1163045089,1163257115,1163469151,1163681197,1163893253,1164105318,
- 1164317393,1164529477,1164741571,1164953675,1165165789,1165377912,1165590045,1165802187,1166014339,1166226501,
- 1166438672,1166650853,1166863044,1167075244,1167287454,1167499674,1167711903,1167924142,1168136390,1168348649,
- 1168560916,1168773194,1168985481,1169197778,1169410084,1169622400,1169834726,1170047061,1170259406,1170471761,
- 1170684125,1170896499,1171108882,1171321275,1171533678,1171746090,1171958512,1172170944,1172383385,1172595836,
- 1172808296,1173020766,1173233246,1173445735,1173658234,1173870743,1174083261,1174295789,1174508326,1174720873,
- 1174933430,1175145996,1175358572,1175571158,1175783753,1175996357,1176208972,1176421596,1176634229,1176846872,
- 1177059525,1177272187,1177484859,1177697541,1177910232,1178122933,1178335643,1178548363,1178761093,1178973832,
- 1179186581,1179399339,1179612107,1179824884,1180037672,1180250468,1180463275,1180676090,1180888916,1181101751,
- 1181314596,1181527450,1181740314,1181953187,1182166070,1182378963,1182591865,1182804777,1183017698,1183230629,
- 1183443570,1183656520,1183869480,1184082449,1184295428,1184508416,1184721414,1184934422,1185147439,1185360465,
- 1185573502,1185786548,1185999603,1186212668,1186425743,1186638827,1186851920,1187065024,1187278136,1187491259,
- 1187704391,1187917532,1188130683,1188343844,1188557014,1188770194,1188983383,1189196582,1189409790,1189623008,
- 1189836236,1190049473,1190262720,1190475976,1190689242,1190902517,1191115802,1191329096,1191542400,1191755713,
- 1191969036,1192182369,1192395711,1192609063,1192822424,1193035795,1193249175,1193462565,1193675964,1193889373,
- 1194102791,1194316219,1194529657,1194743104,1194956561,1195170027,1195383502,1195596987,1195810482,1196023986,
- 1196237500,1196451023,1196664556,1196878099,1197091650,1197305212,1197518783,1197732363,1197945953,1198159553,
- 1198373162,1198586780,1198800408,1199014046,1199227693,1199441349,1199655015,1199868691,1200082376,1200296071,
- 1200509775,1200723489,1200937212,1201150944,1201364687,1201578438,1201792200,1202005970,1202219750,1202433540,
- 1202647339,1202861148,1203074966,1203288794,1203502631,1203716478,1203930334,1204144200,1204358075,1204571960,
- 1204785854,1204999758,1205213671,1205427594,1205641526,1205855467,1206069419,1206283379,1206497349,1206711329,
- 1206925318,1207139317,1207353325,1207567342,1207781369,1207995406,1208209452,1208423507,1208637572,1208851647,
- 1209065731,1209279824,1209493927,1209708039,1209922161,1210136293,1210350433,1210564584,1210778743,1210992912,
- 1211207091,1211421279,1211635477,1211849684,1212063900,1212278126,1212492362,1212706607,1212920861,1213135125,
- 1213349398,1213563681,1213777973,1213992275,1214206586,1214420907,1214635237,1214849576,1215063925,1215278284,
- 1215492652,1215707029,1215921416,1216135812,1216350218,1216564633,1216779057,1216993491,1217207935,1217422388,
- 1217636850,1217851322,1218065803,1218280294,1218494794,1218709304,1218923823,1219138351,1219352889,1219567436,
- 1219781993,1219996559,1220211135,1220425720,1220640314,1220854918,1221069532,1221284154,1221498787,1221713428,
- 1221928079,1222142740,1222357410,1222572089,1222786778,1223001476,1223216184,1223430901,1223645627,1223860363,
- 1224075109,1224289863,1224504627,1224719401,1224934184,1225148976,1225363778,1225578589,1225793410,1226008240,
- 1226223080,1226437928,1226652787,1226867654,1227082531,1227297418,1227512314,1227727219,1227942134,1228157058,
- 1228371992,1228586934,1228801887,1229016849,1229231820,1229446800,1229661790,1229876789,1230091798,1230306816,
- 1230521844,1230736881,1230951927,1231166983,1231382048,1231597122,1231812206,1232027299,1232242402,1232457514,
- 1232672636,1232887766,1233102907,1233318056,1233533215,1233748383,1233963561,1234178748,1234393945,1234609151,
- 1234824366,1235039590,1235254824,1235470068,1235685321,1235900583,1236115854,1236331135,1236546425,1236761725,
- 1236977034,1237192352,1237407680,1237623017,1237838364,1238053719,1238269085,1238484459,1238699843,1238915236,
- 1239130639,1239346051,1239561472,1239776903,1239992343,1240207793,1240423251,1240638720,1240854197,1241069684,
- 1241285180,1241500686,1241716201,1241931725,1242147259,1242362802,1242578354,1242793916,1243009487,1243225067,
- 1243440657,1243656256,1243871864,1244087482,1244303109,1244518745,1244734391,1244950046,1245165711,1245381385,
- 1245597068,1245812760,1246028462,1246244173,1246459894,1246675623,1246891363,1247107111,1247322869,1247538636,
- 1247754413,1247970198,1248185993,1248401798,1248617612,1248833435,1249049267,1249265109,1249480960,1249696820,
- 1249912690,1250128569,1250344458,1250560355,1250776262,1250992179,1251208104,1251424039,1251639983,1251855937,
- 1252071900,1252287872,1252503854,1252719845,1252935845,1253151854,1253367873,1253583901,1253799938,1254015985,
- 1254232041,1254448106,1254664181,1254880265,1255096358,1255312461,1255528572,1255744693,1255960824,1256176964,
- 1256393113,1256609271,1256825438,1257041615,1257257802,1257473997,1257690202,1257906416,1258122639,1258338872,
- 1258555114,1258771365,1258987626,1259203895,1259420174,1259636463,1259852760,1260069067,1260285384,1260501709,
- 1260718044,1260934388,1261150741,1261367104,1261583476,1261799857,1262016248,1262232647,1262449056,1262665475,
- 1262881902,1263098339,1263314785,1263531241,1263747705,1263964179,1264180662,1264397155,1264613657,1264830168,
- 1265046688,1265263217,1265479756,1265696304,1265912861,1266129428,1266346004,1266562589,1266779183,1266995787,
- 1267212400,1267429022,1267645653,1267862294,1268078944,1268295603,1268512271,1268728949,1268945636,1269162332,
- 1269379038,1269595752,1269812476,1270029209,1270245952,1270462703,1270679464,1270896234,1271113014,1271329802,
- 1271546600,1271763407,1271980224,1272197049,1272413884,1272630728,1272847582,1273064444,1273281316,1273498197,
- 1273715087,1273931987,1274148895,1274365813,1274582740,1274799677,1275016622,1275233577,1275450541,1275667515,
- 1275884497,1276101489,1276318490,1276535500,1276752520,1276969548,1277186586,1277403633,1277620690,1277837755,
- 1278054830,1278271914,1278489007,1278706110,1278923221,1279140342,1279357472,1279574611,1279791760,1280008918,
- 1280226085,1280443261,1280660446,1280877641,1281094844,1281312057,1281529279,1281746511,1281963751,1282181001,
- 1282398260,1282615528,1282832806,1283050092,1283267388,1283484693,1283702007,1283919331,1284136663,1284354005,
- 1284571356,1284788716,1285006085,1285223464,1285440852,1285658249,1285875655,1286093070,1286310494,1286527928,
- 1286745371,1286962823,1287180284,1287397755,1287615234,1287832723,1288050221,1288267728,1288485245,1288702770,
- 1288920305,1289137849,1289355402,1289572964,1289790535,1290008116,1290225706,1290443305,1290660913,1290878530,
- 1291096157,1291313792,1291531437,1291749091,1291966754,1292184426,1292402108,1292619799,1292837498,1293055207,
- 1293272925,1293490653,1293708389,1293926135,1294143890,1294361654,1294579427,1294797209,1295015000,1295232801,
- 1295450611,1295668430,1295886258,1296104095,1296321941,1296539797,1296757661,1296975535,1297193418,1297411310,
- 1297629211,1297847122,1298065041,1298282970,1298500908,1298718855,1298936811,1299154776,1299372751,1299590734,
- 1299808727,1300026729,1300244740,1300462760,1300680789,1300898828,1301116875,1301334932,1301552998,1301771072,
- 1301989157,1302207250,1302425352,1302643464,1302861584,1303079714,1303297853,1303516001,1303734158,1303952324,
- 1304170499,1304388684,1304606878,1304825080,1305043292,1305261513,1305479743,1305697982,1305916231,1306134488,
- 1306352755,1306571030,1306789315,1307007609,1307225912,1307444224,1307662546,1307880876,1308099216,1308317564,
- 1308535922,1308754289,1308972665,1309191050,1309409444,1309627847,1309846259,1310064681,1310283112,1310501551,
- 1310720000,1310938458,1311156925,1311375401,1311593886,1311812380,1312030884,1312249396,1312467918,1312686449,
- 1312904988,1313123537,1313342095,1313560662,1313779238,1313997824,1314216418,1314435021,1314653634,1314872255,
- 1315090886,1315309526,1315528175,1315746833,1315965500,1316184176,1316402861,1316621555,1316840259,1317058971,
- 1317277693,1317496423,1317715163,1317933912,1318152669,1318371436,1318590212,1318808997,1319027792,1319246595,
- 1319465407,1319684228,1319903059,1320121898,1320340747,1320559605,1320778471,1320997347,1321216232,1321435126,
- 1321654029,1321872941,1322091862,1322310792,1322529731,1322748679,1322967637,1323186603,1323405579,1323624563,
- 1323843557,1324062559,1324281571,1324500592,1324719622,1324938661,1325157708,1325376765,1325595831,1325814906,
- 1326033991,1326253084,1326472186,1326691297,1326910418,1327129547,1327348685,1327567833,1327786989,1328006155,
- 1328225329,1328444513,1328663706,1328882907,1329102118,1329321338,1329540567,1329759804,1329979051,1330198307,
- 1330417572,1330636846,1330856129,1331075421,1331294722,1331514033,1331733352,1331952680,1332172017,1332391363,
- 1332610719,1332830083,1333049456,1333268839,1333488230,1333707630,1333927040,1334146458,1334365886,1334585322,
- 1334804768,1335024222,1335243686,1335463158,1335682640,1335902131,1336121630,1336341139,1336560657,1336780183,
- 1336999719,1337219264,1337438817,1337658380,1337877952,1338097532,1338317122,1338536721,1338756329,1338975945,
- 1339195571,1339415206,1339634850,1339854503,1340074164,1340293835,1340513515,1340733204,1340952901,1341172608,
- 1341392324,1341612049,1341831783,1342051525,1342271277,1342491038,1342710808,1342930586,1343150374,1343370171,
- 1343589977,1343809791,1344029615,1344249448,1344469289,1344689140,1344909000,1345128868,1345348746,1345568633,
- 1345788528,1346008433,1346228346,1346448269,1346668200,1346888141,1347108090,1347328049,1347548016,1347767993,
- 1347987978,1348207972,1348427976,1348647988,1348868009,1349088040,1349308079,1349528127,1349748184,1349968250,
- 1350188326,1350408410,1350628503,1350848605,1351068716,1351288836,1351508965,1351729102,1351949249,1352169405,
- 1352389570,1352609744,1352829926,1353050118,1353270318,1353490528,1353710747,1353930974,1354151210,1354371456,
- 1354591710,1354811973,1355032246,1355252527,1355472817,1355693116,1355913424,
-};
-
-static real aa_cs[8] =
-{
- 14386344,14793176,15932125,16497281,16702017,16763133,16775525,16777101
-};
-
-static real aa_ca[8] =
-{
- -8631806,-7914349,-5257601,-3051997,-1586692,-687288,-238212,-62075
-};
-
-static real win[4][36] =
-{
- {
- 541609,1798624,3379171,5462936,8388608,12881122,20824265,39123649,129925287,-141788570,-50986933,-32687548,
- -24744405,-20251891,-17326219,-15242454,-13661907,-12404893,-11366990,-10483150,-9710514,-9019459,-8388608,-7801881,
- -7246655,-6712557,-6190623,-5672661,-5150726,-4616628,-4061402,-3474675,-2843824,-2152769,-1380133,-496293
- },
- {
- 541609,1798624,3379171,5462936,8388608,12881122,20824265,39123649,129925287,-141788570,-50986933,-32687548,
- -24744405,-20251891,-17326219,-15242454,-13661907,-12404893,-11377819,-10573609,-9946281,-9457165,-9079764,-8795700,
- -8518771,-7816938,-6661470,-5111526,-3237882,-1121518,
- },
- {
- 1798624,8388608,39123649,-50986933,-20251891,-13661907,-10483150,-8388608,-6712557,-5150726,-3474675,-1380133,
- },
- {
- 0,0,0,0,0,0,5058839,24594154,117073194,-152572757,-59375541,-38425694,
- -27896396,-21920489,-18167045,-15612533,-13779795,-12416710,-11366990,-10483150,-9710514,-9019459,-8388608,-7801881,
- -7246655,-6712557,-6190623,-5672661,-5150726,-4616628,-4061402,-3474675,-2843824,-2152769,-1380133,-496293
- }
-};
-
-const real COS9[9] =
-{
- 16777216,16522332,15765426,14529495,12852093,10784187,8388608,5738146,2913333
-};
-
-static const real COS6_1 = 14529495;
-
-static const real COS6_2 = 8388608;
-
-const real tfcos36[9] =
-{
- 8420651,8684526,9255805,10240599,11863283,14625092,19849138,32411092,96248483
-};
-
-static const real tfcos12[3] =
-{
- 8684526,11863283,32411092
-};
-
-#ifdef NEW_DCT9
-static const real cos9[3] =
-{
- 15765426,-2913333,-12852093
-};
-
-static const real cos18[3] =
-{
- 16522332,-5738146,-10784187
-};
-#endif
-
-static const real tan1_1[16] =
-{
- 0,6925,11994,16384,20774,25843,32768,44762,77530,2147483647,-44762,-11994,0,6925,11994,16384
-};
-
-static const real tan2_1[16] =
-{
- 32768,25843,20774,16384,11994,6925,0,-11994,-44762,2147483647,77530,44762,32768,25843,20774,16384
-};
-
-static const real tan1_2[16] =
-{
- 0,9793,16962,23170,29379,36548,46341,63303,109644,2147483647,-63303,-16962,0,9793,16962,23170
-};
-
-static real tan2_2[16] =
-{
- 46341,36548,29379,23170,16962,9793,0,-16962,-63303,2147483647,109644,63303,46341,36548,29379,23170
-};
-
-static const real pow1_1[2][16] =
-{
- {32768,27554,32768,23170,32768,19484,32768,16384,32768,13777,32768,11585,32768,9742,32768,8192},
- {32768,23170,32768,16384,32768,11585,32768,8192,32768,5793,32768,4096,32768,2896,32768,2048}
-};
-
-static const real pow2_1[2][16] =
-{
- {32768,32768,27554,32768,23170,32768,19484,32768,16384,32768,13777,32768,11585,32768,9742,32768},
- {32768,32768,23170,32768,16384,32768,11585,32768,8192,32768,5793,32768,4096,32768,2896,32768}
-};
-
-static const real pow1_2[2][16] =
-{
- {46341,38968,46341,32768,46341,27554,46341,23170,46341,19484,46341,16384,46341,13777,46341,11585},
- {46341,32768,46341,23170,46341,16384,46341,11585,46341,8192,46341,5793,46341,4096,46341,2896}
-};
-
-static const real pow2_2[2][16] =
-{
- {46341,46341,38968,46341,32768,46341,27554,46341,23170,46341,19484,46341,16384,46341,13777,46341},
- {46341,46341,32768,46341,23170,46341,16384,46341,11585,46341,8192,46341,5793,46341,4096,46341}
-};
-
-static const real gainpow2[256+118+4] =
-{
- 1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,
- 1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,
- 1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,
- 1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,
- 1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,
- 1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,1518500250,1276901417,1073741824,1805811301,
- 1518500250,1276901417,1073741824,902905651,759250125,638450708,536870912,451452825,379625062,319225354,
- 268435456,225726413,189812531,159612677,134217728,112863206,94906266,79806339,67108864,56431603,
- 47453133,39903169,33554432,28215802,23726566,19951585,16777216,14107901,11863283,9975792,
- 8388608,7053950,5931642,4987896,4194304,3526975,2965821,2493948,2097152,1763488,
- 1482910,1246974,1048576,881744,741455,623487,524288,440872,370728,311744,
- 262144,220436,185364,155872,131072,110218,92682,77936,65536,55109,
- 46341,38968,32768,27554,23170,19484,16384,13777,11585,9742,
- 8192,6889,5793,4871,4096,3444,2896,2435,2048,1722,
- 1448,1218,1024,861,724,609,512,431,362,304,
- 256,215,181,152,128,108,91,76,64,54,
- 45,38,32,27,23,19,16,13,11,10,
- 8,7,6,5,4,3,3,2,2,2,
- 1,1,1,1,1,1,1,
-};
-
-#else
-static real ispow[8207];
-static real aa_ca[8],aa_cs[8];
-static real win[4][36];
-static real win1[4][36];
-real COS9[9]; /* dct36_3dnow wants to use that */
-static real COS6_1,COS6_2;
-real tfcos36[9]; /* dct36_3dnow wants to use that */
-static real tfcos12[3];
-#ifdef NEW_DCT9
-static real cos9[3],cos18[3];
-static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16];
-static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16];
-#endif
-#endif
-
-static real win1[4][36];
-
-static const char gainpow2_scale[256+118+4+1] =
-{
- 19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,
- 27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
- 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,0
-};
-
-#endif
diff --git a/src/mpg123/libmpg123/layer1.c b/src/mpg123/libmpg123/layer1.c
deleted file mode 100644
index 6894a33..0000000
--- a/src/mpg123/libmpg123/layer1.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- layer1.c: the layer 1 decoder
-
- copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-
- may have a few bugs after last optimization ...
-*/
-
-#include "mpg123lib_intern.h"
-#include "getbits.h"
-
-void I_step_one(unsigned int balloc[], unsigned int scale_index[2][SBLIMIT],mpg123_handle *fr)
-{
- unsigned int *ba=balloc;
- unsigned int *sca = (unsigned int *) scale_index;
-
- if(fr->stereo == 2)
- {
- int i;
- int jsbound = fr->jsbound;
- for(i=0;i<jsbound;i++)
- {
- *ba++ = getbits(fr, 4);
- *ba++ = getbits(fr, 4);
- }
- for(i=jsbound;i<SBLIMIT;i++) *ba++ = getbits(fr, 4);
-
- ba = balloc;
-
- for(i=0;i<jsbound;i++)
- {
- if ((*ba++))
- *sca++ = getbits(fr, 6);
- if ((*ba++))
- *sca++ = getbits(fr, 6);
- }
- for (i=jsbound;i<SBLIMIT;i++)
- if((*ba++))
- {
- *sca++ = getbits(fr, 6);
- *sca++ = getbits(fr, 6);
- }
- }
- else
- {
- int i;
- for(i=0;i<SBLIMIT;i++) *ba++ = getbits(fr, 4);
-
- ba = balloc;
- for (i=0;i<SBLIMIT;i++)
- if ((*ba++))
- *sca++ = getbits(fr, 6);
- }
-}
-
-void I_step_two(real fraction[2][SBLIMIT],unsigned int balloc[2*SBLIMIT], unsigned int scale_index[2][SBLIMIT],mpg123_handle *fr)
-{
- int i,n;
- int smpb[2*SBLIMIT]; /* values: 0-65535 */
- int *sample;
- register unsigned int *ba;
- register unsigned int *sca = (unsigned int *) scale_index;
-
- if(fr->stereo == 2)
- {
- int jsbound = fr->jsbound;
- register real *f0 = fraction[0];
- register real *f1 = fraction[1];
- ba = balloc;
- for(sample=smpb,i=0;i<jsbound;i++)
- {
- if((n = *ba++)) *sample++ = getbits(fr, n+1);
-
- if((n = *ba++)) *sample++ = getbits(fr, n+1);
- }
- for(i=jsbound;i<SBLIMIT;i++)
- if((n = *ba++))
- *sample++ = getbits(fr, n+1);
-
- ba = balloc;
- for(sample=smpb,i=0;i<jsbound;i++)
- {
- if((n=*ba++))
- *f0++ = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15( ((-1)<<n) + (*sample++) + 1), fr->muls[n+1][*sca++]);
- else *f0++ = DOUBLE_TO_REAL(0.0);
-
- if((n=*ba++))
- *f1++ = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15( ((-1)<<n) + (*sample++) + 1), fr->muls[n+1][*sca++]);
- else *f1++ = DOUBLE_TO_REAL(0.0);
- }
- for(i=jsbound;i<SBLIMIT;i++)
- {
- if((n=*ba++))
- {
- real samp = DOUBLE_TO_REAL_15( ((-1)<<n) + (*sample++) + 1);
- *f0++ = REAL_MUL_SCALE_LAYER12(samp, fr->muls[n+1][*sca++]);
- *f1++ = REAL_MUL_SCALE_LAYER12(samp, fr->muls[n+1][*sca++]);
- }
- else *f0++ = *f1++ = DOUBLE_TO_REAL(0.0);
- }
- for(i=fr->down_sample_sblimit;i<32;i++)
- fraction[0][i] = fraction[1][i] = 0.0;
- }
- else
- {
- register real *f0 = fraction[0];
- ba = balloc;
- for(sample=smpb,i=0;i<SBLIMIT;i++)
- if ((n = *ba++))
- *sample++ = getbits(fr, n+1);
-
- ba = balloc;
- for(sample=smpb,i=0;i<SBLIMIT;i++)
- {
- if((n=*ba++))
- *f0++ = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15( ((-1)<<n) + (*sample++) + 1), fr->muls[n+1][*sca++]);
- else *f0++ = DOUBLE_TO_REAL(0.0);
- }
- for(i=fr->down_sample_sblimit;i<32;i++)
- fraction[0][i] = DOUBLE_TO_REAL(0.0);
- }
-}
-
-int do_layer1(mpg123_handle *fr)
-{
- int clip=0;
- int i,stereo = fr->stereo;
- unsigned int balloc[2*SBLIMIT];
- unsigned int scale_index[2][SBLIMIT];
- real (*fraction)[SBLIMIT] = fr->layer1.fraction; /* fraction[2][SBLIMIT] */
- int single = fr->single;
-
- fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : 32;
-
- if(stereo == 1 || single == SINGLE_MIX) /* I don't see mixing handled here */
- single = SINGLE_LEFT;
-
- I_step_one(balloc,scale_index,fr);
-
- for(i=0;i<SCALE_BLOCK;i++)
- {
- I_step_two(fraction,balloc,scale_index,fr);
-
- if(single != SINGLE_STEREO)
- clip += (fr->synth_mono)(fraction[single], fr);
- else
- clip += (fr->synth_stereo)(fraction[0], fraction[1], fr);
- }
-
- return clip;
-}
-
-
diff --git a/src/mpg123/libmpg123/layer2.c b/src/mpg123/libmpg123/layer2.c
deleted file mode 100644
index acaeba2..0000000
--- a/src/mpg123/libmpg123/layer2.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- layer2.c: the layer 2 decoder, root of mpg123
-
- copyright 1994-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-
- mpg123 started as mp2 decoder a long time ago...
- part of this file is required for layer 1, too.
-*/
-
-
-#include "mpg123lib_intern.h"
-#ifndef NO_LAYER2
-#include "l2tables.h"
-#endif
-#include "getbits.h"
-
-#ifndef NO_LAYER12 /* Stuff needed for layer I and II. */
-
-static int grp_3tab[32 * 3] = { 0, }; /* used: 27 */
-static int grp_5tab[128 * 3] = { 0, }; /* used: 125 */
-static int grp_9tab[1024 * 3] = { 0, }; /* used: 729 */
-
-#if defined(REAL_IS_FIXED) && defined(PRECALC_TABLES)
-#include "l12_integer_tables.h"
-#else
-static const double mulmul[27] =
-{
- 0.0 , -2.0/3.0 , 2.0/3.0 ,
- 2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 ,
- 2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 ,
- 2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 ,
- -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 ,
- -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0
-};
-#endif
-
-void init_layer12(void)
-{
- const int base[3][9] =
- {
- { 1 , 0, 2 , } ,
- { 17, 18, 0 , 19, 20 , } ,
- { 21, 1, 22, 23, 0, 24, 25, 2, 26 }
- };
- int i,j,k,l,len;
- const int tablen[3] = { 3 , 5 , 9 };
- int *itable;
- int *tables[3] = { grp_3tab , grp_5tab , grp_9tab };
-
- for(i=0;i<3;i++)
- {
- itable = tables[i];
- len = tablen[i];
- for(j=0;j<len;j++)
- for(k=0;k<len;k++)
- for(l=0;l<len;l++)
- {
- *itable++ = base[i][l];
- *itable++ = base[i][k];
- *itable++ = base[i][j];
- }
- }
-}
-
-void init_layer12_stuff(mpg123_handle *fr, real* (*init_table)(mpg123_handle *fr, real *table, int m))
-{
- int k;
- real *table;
- for(k=0;k<27;k++)
- {
- table = init_table(fr, fr->muls[k], k);
- *table++ = 0.0;
- }
-}
-
-real* init_layer12_table(mpg123_handle *fr, real *table, int m)
-{
-#if defined(REAL_IS_FIXED) && defined(PRECALC_TABLES)
- int i;
- for(i=0;i<63;i++)
- *table++ = layer12_table[m][i];
-#else
- int i,j;
- for(j=3,i=0;i<63;i++,j--)
- *table++ = DOUBLE_TO_REAL_SCALE_LAYER12(mulmul[m] * pow(2.0,(double) j / 3.0));
-#endif
-
- return table;
-}
-
-#ifdef OPT_MMXORSSE
-real* init_layer12_table_mmx(mpg123_handle *fr, real *table, int m)
-{
- int i,j;
- if(!fr->p.down_sample)
- {
- for(j=3,i=0;i<63;i++,j--)
- *table++ = DOUBLE_TO_REAL(16384 * mulmul[m] * pow(2.0,(double) j / 3.0));
- }
- else
- {
- for(j=3,i=0;i<63;i++,j--)
- *table++ = DOUBLE_TO_REAL(mulmul[m] * pow(2.0,(double) j / 3.0));
- }
- return table;
-}
-#endif
-
-#endif /* NO_LAYER12 */
-
-/* The rest is the actual decoding of layer II data. */
-
-#ifndef NO_LAYER2
-
-void II_step_one(unsigned int *bit_alloc,int *scale,mpg123_handle *fr)
-{
- int stereo = fr->stereo-1;
- int sblimit = fr->II_sblimit;
- int jsbound = fr->jsbound;
- int sblimit2 = fr->II_sblimit<<stereo;
- const struct al_table *alloc1 = fr->alloc;
- int i;
- unsigned int scfsi_buf[64];
- unsigned int *scfsi,*bita;
- int sc,step;
-
- bita = bit_alloc;
- if(stereo)
- {
- for(i=jsbound;i;i--,alloc1+=(1<<step))
- {
- step=alloc1->bits;
- *bita++ = (char) getbits(fr, step);
- *bita++ = (char) getbits(fr, step);
- }
- for(i=sblimit-jsbound;i;i--,alloc1+=(1<<step))
- {
- step=alloc1->bits;
- bita[0] = (char) getbits(fr, step);
- bita[1] = bita[0];
- bita+=2;
- }
- bita = bit_alloc;
- scfsi=scfsi_buf;
-
- for(i=sblimit2;i;i--)
- if(*bita++) *scfsi++ = (char) getbits_fast(fr, 2);
- }
- else /* mono */
- {
- for(i=sblimit;i;i--,alloc1+=(1<<step))
- {
- step=alloc1->bits;
- *bita++ = (char) getbits(fr, step);
- }
- bita = bit_alloc;
- scfsi=scfsi_buf;
- for(i=sblimit;i;i--)
- if(*bita++) *scfsi++ = (char) getbits_fast(fr, 2);
- }
-
- bita = bit_alloc;
- scfsi=scfsi_buf;
- for(i=sblimit2;i;i--)
- if(*bita++)
- switch(*scfsi++)
- {
- case 0:
- *scale++ = getbits_fast(fr, 6);
- *scale++ = getbits_fast(fr, 6);
- *scale++ = getbits_fast(fr, 6);
- break;
- case 1 :
- *scale++ = sc = getbits_fast(fr, 6);
- *scale++ = sc;
- *scale++ = getbits_fast(fr, 6);
- break;
- case 2:
- *scale++ = sc = getbits_fast(fr, 6);
- *scale++ = sc;
- *scale++ = sc;
- break;
- default: /* case 3 */
- *scale++ = getbits_fast(fr, 6);
- *scale++ = sc = getbits_fast(fr, 6);
- *scale++ = sc;
- break;
- }
-}
-
-
-void II_step_two(unsigned int *bit_alloc,real fraction[2][4][SBLIMIT],int *scale,mpg123_handle *fr,int x1)
-{
- int i,j,k,ba;
- int stereo = fr->stereo;
- int sblimit = fr->II_sblimit;
- int jsbound = fr->jsbound;
- const struct al_table *alloc2,*alloc1 = fr->alloc;
- unsigned int *bita=bit_alloc;
- int d1,step;
-
- for(i=0;i<jsbound;i++,alloc1+=(1<<step))
- {
- step = alloc1->bits;
- for(j=0;j<stereo;j++)
- {
- if( (ba=*bita++) )
- {
- k=(alloc2 = alloc1+ba)->bits;
- if( (d1=alloc2->d) < 0)
- {
- real cm=fr->muls[k][scale[x1]];
- fraction[j][0][i] = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1), cm);
- fraction[j][1][i] = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1), cm);
- fraction[j][2][i] = REAL_MUL_SCALE_LAYER12(DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1), cm);
- }
- else
- {
- const int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab };
- unsigned int idx,*tab,m=scale[x1];
- idx = (unsigned int) getbits(fr, k);
- tab = (unsigned int *) (table[d1] + idx + idx + idx);
- fraction[j][0][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m]);
- fraction[j][1][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m]);
- fraction[j][2][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m]);
- }
- scale+=3;
- }
- else
- fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = DOUBLE_TO_REAL(0.0);
- }
- }
-
- for(i=jsbound;i<sblimit;i++,alloc1+=(1<<step))
- {
- step = alloc1->bits;
- bita++; /* channel 1 and channel 2 bitalloc are the same */
- if( (ba=*bita++) )
- {
- k=(alloc2 = alloc1+ba)->bits;
- if( (d1=alloc2->d) < 0)
- {
- real cm;
- cm=fr->muls[k][scale[x1+3]];
- fraction[0][0][i] = DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1);
- fraction[0][1][i] = DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1);
- fraction[0][2][i] = DOUBLE_TO_REAL_15((int)getbits(fr, k) + d1);
- fraction[1][0][i] = REAL_MUL_SCALE_LAYER12(fraction[0][0][i], cm);
- fraction[1][1][i] = REAL_MUL_SCALE_LAYER12(fraction[0][1][i], cm);
- fraction[1][2][i] = REAL_MUL_SCALE_LAYER12(fraction[0][2][i], cm);
- cm=fr->muls[k][scale[x1]];
- fraction[0][0][i] = REAL_MUL_SCALE_LAYER12(fraction[0][0][i], cm);
- fraction[0][1][i] = REAL_MUL_SCALE_LAYER12(fraction[0][1][i], cm);
- fraction[0][2][i] = REAL_MUL_SCALE_LAYER12(fraction[0][2][i], cm);
- }
- else
- {
- const int *table[] = { 0,0,0,grp_3tab,0,grp_5tab,0,0,0,grp_9tab };
- unsigned int idx,*tab,m1,m2;
- m1 = scale[x1]; m2 = scale[x1+3];
- idx = (unsigned int) getbits(fr, k);
- tab = (unsigned int *) (table[d1] + idx + idx + idx);
- fraction[0][0][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m1]); fraction[1][0][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m2]);
- fraction[0][1][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m1]); fraction[1][1][i] = REAL_SCALE_LAYER12(fr->muls[*tab++][m2]);
- fraction[0][2][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m1]); fraction[1][2][i] = REAL_SCALE_LAYER12(fr->muls[*tab][m2]);
- }
- scale+=6;
- }
- else
- {
- fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] =
- fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = DOUBLE_TO_REAL(0.0);
- }
-/*
- Historic comment...
- should we use individual scalefac for channel 2 or
- is the current way the right one , where we just copy channel 1 to
- channel 2 ??
- The current 'strange' thing is, that we throw away the scalefac
- values for the second channel ...!!
- -> changed .. now we use the scalefac values of channel one !!
-*/
- }
-
- if(sblimit > (fr->down_sample_sblimit) )
- sblimit = fr->down_sample_sblimit;
-
- for(i=sblimit;i<SBLIMIT;i++)
- for (j=0;j<stereo;j++)
- fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = DOUBLE_TO_REAL(0.0);
-}
-
-
-static void II_select_table(mpg123_handle *fr)
-{
- const int translate[3][2][16] =
- {
- {
- { 0,2,2,2,2,2,2,0,0,0,1,1,1,1,1,0 },
- { 0,2,2,0,0,0,1,1,1,1,1,1,1,1,1,0 }
- },
- {
- { 0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0 },
- { 0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0 }
- },
- {
- { 0,3,3,3,3,3,3,0,0,0,1,1,1,1,1,0 },
- { 0,3,3,0,0,0,1,1,1,1,1,1,1,1,1,0 }
- }
- };
-
- int table,sblim;
- const struct al_table *tables[5] = { alloc_0, alloc_1, alloc_2, alloc_3 , alloc_4 };
- const int sblims[5] = { 27 , 30 , 8, 12 , 30 };
-
- if(fr->sampling_frequency >= 3) /* Or equivalent: (fr->lsf == 1) */
- table = 4;
- else
- table = translate[fr->sampling_frequency][2-fr->stereo][fr->bitrate_index];
-
- sblim = sblims[table];
- fr->alloc = tables[table];
- fr->II_sblimit = sblim;
-}
-
-
-int do_layer2(mpg123_handle *fr)
-{
- int clip=0;
- int i,j;
- int stereo = fr->stereo;
- /* pick_table clears unused subbands */
- /* replacement for real fraction[2][4][SBLIMIT], needs alignment. */
- real (*fraction)[4][SBLIMIT] = fr->layer2.fraction;
- unsigned int bit_alloc[64];
- int scale[192];
- int single = fr->single;
-
- II_select_table(fr);
- fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext<<2)+4 : fr->II_sblimit;
-
- if(fr->jsbound > fr->II_sblimit)
- {
- fprintf(stderr, "Truncating stereo boundary to sideband limit.\n");
- fr->jsbound=fr->II_sblimit;
- }
-
- /* TODO: What happens with mono mixing, actually? */
- if(stereo == 1 || single == SINGLE_MIX) /* also, mix not really handled */
- single = SINGLE_LEFT;
-
- II_step_one(bit_alloc, scale, fr);
-
- for(i=0;i<SCALE_BLOCK;i++)
- {
- II_step_two(bit_alloc,fraction,scale,fr,i>>2);
- for(j=0;j<3;j++)
- {
- if(single != SINGLE_STEREO)
- clip += (fr->synth_mono)(fraction[single][j], fr);
- else
- clip += (fr->synth_stereo)(fraction[0][j], fraction[1][j], fr);
- }
- }
-
- return clip;
-}
-
-#endif /* NO_LAYER2 */
diff --git a/src/mpg123/libmpg123/layer3.c b/src/mpg123/libmpg123/layer3.c
deleted file mode 100644
index b8d51fa..0000000
--- a/src/mpg123/libmpg123/layer3.c
+++ /dev/null
@@ -1,2058 +0,0 @@
-/*
- layer3.c: the layer 3 decoder
-
- copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-
- Dear visitor:
- If you feel you don't understand fully the works of this file, your feeling might be correct.
-
- Optimize-TODO: put short bands into the band-field without the stride of 3 reals
- Length-optimze: unify long and short band code where it is possible
-
- The int-vs-pointer situation has to be cleaned up.
-*/
-
-#include "mpg123lib_intern.h"
-#include "huffman.h"
-#include "getbits.h"
-#include "debug.h"
-
-/* define CUT_SFB21 if you want to cut-off the frequency above 16kHz */
-#if 0
-#define CUT_SFB21
-#endif
-
-#ifdef REAL_IS_FIXED
-#define NEW_DCT9
-#include "l3_integer_tables.h"
-#else
-/* static one-time calculated tables... or so */
-static real ispow[8207];
-static real aa_ca[8],aa_cs[8];
-static real win[4][36];
-static real win1[4][36];
-real COS9[9]; /* dct36_3dnow wants to use that */
-static real COS6_1,COS6_2;
-real tfcos36[9]; /* dct36_3dnow wants to use that */
-static real tfcos12[3];
-#define NEW_DCT9
-#ifdef NEW_DCT9
-static real cos9[3],cos18[3];
-static real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16];
-static real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16];
-#endif
-#endif
-
-/* Decoder state data, living on the stack of do_layer3. */
-
-struct gr_info_s
-{
- int scfsi;
- unsigned part2_3_length;
- unsigned big_values;
- unsigned scalefac_compress;
- unsigned block_type;
- unsigned mixed_block_flag;
- unsigned table_select[3];
- /* Making those two signed int as workaround for open64/pathscale/sun compilers, and also for consistency, since they're worked on together with other signed variables. */
- int maxband[3];
- int maxbandl;
- unsigned maxb;
- unsigned region1start;
- unsigned region2start;
- unsigned preflag;
- unsigned scalefac_scale;
- unsigned count1table_select;
- real *full_gain[3];
- real *pow2gain;
-};
-
-struct III_sideinfo
-{
- unsigned main_data_begin;
- unsigned private_bits;
- /* Hm, funny... struct inside struct... */
- struct { struct gr_info_s gr[2]; } ch[2];
-};
-
-struct bandInfoStruct
-{
- int longIdx[23];
- int longDiff[22];
- int shortIdx[14];
- int shortDiff[13];
-};
-
-/* Techy details about our friendly MPEG data. Fairly constant over the years;-) */
-const struct bandInfoStruct bandInfo[9] =
-{
- { /* MPEG 1.0 */
- {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
- {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
- {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
- {4,4,4,4,6,8,10,12,14,18,22,30,56}
- },
- {
- {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
- {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
- {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
- {4,4,4,4,6,6,10,12,14,16,20,26,66}
- },
- {
- {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
- {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26},
- {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3},
- {4,4,4,4,6,8,12,16,20,26,34,42,12}
- },
- { /* MPEG 2.0 */
- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
- {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
- {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
- {4,4,4,6,6,8,10,14,18,26,32,42,18 }
- },
- { /* Twiddling 3 values here (not just 330->332!) fixed bug 1895025. */
- {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576},
- {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 },
- {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3},
- {4,4,4,6,8,10,12,14,18,24,32,44,12 }
- },
- {
- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
- {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
- {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
- {4,4,4,6,8,10,12,14,18,24,30,40,18 }
- },
- { /* MPEG 2.5 */
- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
- {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
- {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
- {4,4,4,6,8,10,12,14,18,24,30,40,18}
- },
- {
- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
- {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
- {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
- {4,4,4,6,8,10,12,14,18,24,30,40,18}
- },
- {
- {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
- {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
- {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
- {8,8,8,12,16,20,24,28,36,2,2,2,26}
- }
-};
-
-static int mapbuf0[9][152];
-static int mapbuf1[9][156];
-static int mapbuf2[9][44];
-static int *map[9][3];
-static int *mapend[9][3];
-
-static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
-static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
-
-/* Some helpers used in init_layer3 */
-
-#ifdef OPT_MMXORSSE
-real init_layer3_gainpow2_mmx(mpg123_handle *fr, int i)
-{
- if(!fr->p.down_sample) return DOUBLE_TO_REAL(16384.0 * pow((double)2.0,-0.25 * (double) (i+210) ));
- else return DOUBLE_TO_REAL(pow((double)2.0,-0.25 * (double) (i+210)));
-}
-#endif
-
-real init_layer3_gainpow2(mpg123_handle *fr, int i)
-{
-#if defined(REAL_IS_FIXED) && defined(PRECALC_TABLES)
- return gainpow2[i+256];
-#else
- return DOUBLE_TO_REAL_SCALE_LAYER3(pow((double)2.0,-0.25 * (double) (i+210)),i+256);
-#endif
-}
-
-
-/* init tables for layer-3 ... specific with the downsampling... */
-void init_layer3(void)
-{
- int i,j,k,l;
-
-#if !defined(REAL_IS_FIXED) || !defined(PRECALC_TABLES)
- for(i=0;i<8207;i++)
- ispow[i] = DOUBLE_TO_REAL_POW43(pow((double)i,(double)4.0/3.0));
-
- for(i=0;i<8;i++)
- {
- const double Ci[8] = {-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
- double sq = sqrt(1.0+Ci[i]*Ci[i]);
- aa_cs[i] = DOUBLE_TO_REAL(1.0/sq);
- aa_ca[i] = DOUBLE_TO_REAL(Ci[i]/sq);
- }
-
- for(i=0;i<18;i++)
- {
- win[0][i] = win[1][i] =
- DOUBLE_TO_REAL( 0.5*sin(M_PI/72.0 * (double)(2*(i+0) +1)) / cos(M_PI * (double)(2*(i+0) +19) / 72.0) );
- win[0][i+18] = win[3][i+18] =
- DOUBLE_TO_REAL( 0.5*sin(M_PI/72.0 * (double)(2*(i+18)+1)) / cos(M_PI * (double)(2*(i+18)+19) / 72.0) );
- }
- for(i=0;i<6;i++)
- {
- win[1][i+18] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 ));
- win[3][i+12] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 ));
- win[1][i+24] = DOUBLE_TO_REAL(0.5 * sin( M_PI / 24.0 * (double) (2*i+13) ) / cos ( M_PI * (double) (2*(i+24)+19) / 72.0 ));
- win[1][i+30] = win[3][i] = DOUBLE_TO_REAL(0.0);
- win[3][i+6 ] = DOUBLE_TO_REAL(0.5 * sin( M_PI / 24.0 * (double) (2*i+1 ) ) / cos ( M_PI * (double) (2*(i+6 )+19) / 72.0 ));
- }
-
- for(i=0;i<9;i++)
- COS9[i] = DOUBLE_TO_REAL(cos( M_PI / 18.0 * (double) i));
-
- for(i=0;i<9;i++)
- tfcos36[i] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (i*2+1) / 36.0 ));
-
- for(i=0;i<3;i++)
- tfcos12[i] = DOUBLE_TO_REAL(0.5 / cos ( M_PI * (double) (i*2+1) / 12.0 ));
-
- COS6_1 = DOUBLE_TO_REAL(cos( M_PI / 6.0 * (double) 1));
- COS6_2 = DOUBLE_TO_REAL(cos( M_PI / 6.0 * (double) 2));
-
-#ifdef NEW_DCT9
- cos9[0] = DOUBLE_TO_REAL(cos(1.0*M_PI/9.0));
- cos9[1] = DOUBLE_TO_REAL(cos(5.0*M_PI/9.0));
- cos9[2] = DOUBLE_TO_REAL(cos(7.0*M_PI/9.0));
- cos18[0] = DOUBLE_TO_REAL(cos(1.0*M_PI/18.0));
- cos18[1] = DOUBLE_TO_REAL(cos(11.0*M_PI/18.0));
- cos18[2] = DOUBLE_TO_REAL(cos(13.0*M_PI/18.0));
-#endif
-
- for(i=0;i<12;i++)
- {
- win[2][i] = DOUBLE_TO_REAL(0.5 * sin( M_PI / 24.0 * (double) (2*i+1) ) / cos ( M_PI * (double) (2*i+7) / 24.0 ));
- }
-
- for(i=0;i<16;i++)
- {
- double t = tan( (double) i * M_PI / 12.0 );
- tan1_1[i] = DOUBLE_TO_REAL_15(t / (1.0+t));
- tan2_1[i] = DOUBLE_TO_REAL_15(1.0 / (1.0 + t));
- tan1_2[i] = DOUBLE_TO_REAL_15(M_SQRT2 * t / (1.0+t));
- tan2_2[i] = DOUBLE_TO_REAL_15(M_SQRT2 / (1.0 + t));
-
- for(j=0;j<2;j++)
- {
- double base = pow(2.0,-0.25*(j+1.0));
- double p1=1.0,p2=1.0;
- if(i > 0)
- {
- if( i & 1 ) p1 = pow(base,(i+1.0)*0.5);
- else p2 = pow(base,i*0.5);
- }
- pow1_1[j][i] = DOUBLE_TO_REAL_15(p1);
- pow2_1[j][i] = DOUBLE_TO_REAL_15(p2);
- pow1_2[j][i] = DOUBLE_TO_REAL_15(M_SQRT2 * p1);
- pow2_2[j][i] = DOUBLE_TO_REAL_15(M_SQRT2 * p2);
- }
- }
-#endif
-
- for(j=0;j<4;j++)
- {
- const int len[4] = { 36,36,12,36 };
- for(i=0;i<len[j];i+=2) win1[j][i] = + win[j][i];
-
- for(i=1;i<len[j];i+=2) win1[j][i] = - win[j][i];
- }
-
- for(j=0;j<9;j++)
- {
- const struct bandInfoStruct *bi = &bandInfo[j];
- int *mp;
- int cb,lwin;
- const int *bdf;
-
- mp = map[j][0] = mapbuf0[j];
- bdf = bi->longDiff;
- for(i=0,cb = 0; cb < 8 ; cb++,i+=*bdf++)
- {
- *mp++ = (*bdf) >> 1;
- *mp++ = i;
- *mp++ = 3;
- *mp++ = cb;
- }
- bdf = bi->shortDiff+3;
- for(cb=3;cb<13;cb++)
- {
- int l = (*bdf++) >> 1;
- for(lwin=0;lwin<3;lwin++)
- {
- *mp++ = l;
- *mp++ = i + lwin;
- *mp++ = lwin;
- *mp++ = cb;
- }
- i += 6*l;
- }
- mapend[j][0] = mp;
-
- mp = map[j][1] = mapbuf1[j];
- bdf = bi->shortDiff+0;
- for(i=0,cb=0;cb<13;cb++)
- {
- int l = (*bdf++) >> 1;
- for(lwin=0;lwin<3;lwin++)
- {
- *mp++ = l;
- *mp++ = i + lwin;
- *mp++ = lwin;
- *mp++ = cb;
- }
- i += 6*l;
- }
- mapend[j][1] = mp;
-
- mp = map[j][2] = mapbuf2[j];
- bdf = bi->longDiff;
- for(cb = 0; cb < 22 ; cb++)
- {
- *mp++ = (*bdf++) >> 1;
- *mp++ = cb;
- }
- mapend[j][2] = mp;
- }
-
- /* Now for some serious loopings! */
- for(i=0;i<5;i++)
- for(j=0;j<6;j++)
- for(k=0;k<6;k++)
- {
- int n = k + j * 6 + i * 36;
- i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12);
- }
- for(i=0;i<4;i++)
- for(j=0;j<4;j++)
- for(k=0;k<4;k++)
- {
- int n = k + j * 4 + i * 16;
- i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12);
- }
- for(i=0;i<4;i++)
- for(j=0;j<3;j++)
- {
- int n = j + i * 3;
- i_slen2[n+244] = i|(j<<3) | (5<<12);
- n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15);
- }
- for(i=0;i<5;i++)
- for(j=0;j<5;j++)
- for(k=0;k<4;k++)
- for(l=0;l<4;l++)
- {
- int n = l + k * 4 + j * 16 + i * 80;
- n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12);
- }
- for(i=0;i<5;i++)
- for(j=0;j<5;j++)
- for(k=0;k<4;k++)
- {
- int n = k + j * 4 + i * 20;
- n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12);
- }
-}
-
-
-void init_layer3_stuff(mpg123_handle *fr, real (*gainpow2)(mpg123_handle *fr, int i))
-{
- int i,j;
-
- for(i=-256;i<118+4;i++) fr->gainpow2[i+256] = gainpow2(fr,i);
-
- for(j=0;j<9;j++)
- {
- for(i=0;i<23;i++)
- {
- fr->longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
- if(fr->longLimit[j][i] > (fr->down_sample_sblimit) )
- fr->longLimit[j][i] = fr->down_sample_sblimit;
- }
- for(i=0;i<14;i++)
- {
- fr->shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
- if(fr->shortLimit[j][i] > (fr->down_sample_sblimit) )
- fr->shortLimit[j][i] = fr->down_sample_sblimit;
- }
- }
-}
-
-/*
- Observe!
- Now come the actualy decoding routines.
-*/
-
-/* read additional side information (for MPEG 1 and MPEG 2) */
-static int III_get_side_info(mpg123_handle *fr, struct III_sideinfo *si,int stereo, int ms_stereo,long sfreq,int single)
-{
- int ch, gr;
- int powdiff = (single == SINGLE_MIX) ? 4 : 0;
-
- const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
- const int *tab = tabs[fr->lsf];
-
- si->main_data_begin = getbits(fr, tab[1]);
-
- if(si->main_data_begin > fr->bitreservoir)
- {
- if(VERBOSE2) fprintf(stderr, "Note: missing %d bytes in bit reservoir for frame %li\n", (int)(si->main_data_begin - fr->bitreservoir), (long)fr->num);
-
- /* overwrite main_data_begin for the really available bit reservoir */
- backbits(fr, tab[1]);
- if(fr->lsf == 0)
- {
- fr->wordpointer[0] = (unsigned char) (fr->bitreservoir >> 1);
- fr->wordpointer[1] = (unsigned char) ((fr->bitreservoir & 1) << 7);
- }
- else fr->wordpointer[0] = (unsigned char) fr->bitreservoir;
-
- /* zero "side-info" data for a silence-frame
- without touching audio data used as bit reservoir for following frame */
- memset(fr->wordpointer+2, 0, fr->ssize-2);
-
- /* reread the new bit reservoir offset */
- si->main_data_begin = getbits(fr, tab[1]);
- }
-
- /* Keep track of the available data bytes for the bit reservoir.
- Think: Substract the 2 crc bytes in parser already? */
- fr->bitreservoir = fr->bitreservoir + fr->framesize - fr->ssize - (fr->error_protection ? 2 : 0);
- /* Limit the reservoir to the max for MPEG 1.0 or 2.x . */
- if(fr->bitreservoir > (unsigned int) (fr->lsf == 0 ? 511 : 255))
- fr->bitreservoir = (fr->lsf == 0 ? 511 : 255);
-
- /* Now back into less commented territory. It's code. It works. */
-
- if (stereo == 1)
- si->private_bits = getbits_fast(fr, tab[2]);
- else
- si->private_bits = getbits_fast(fr, tab[3]);
-
- if(!fr->lsf) for(ch=0; ch<stereo; ch++)
- {
- si->ch[ch].gr[0].scfsi = -1;
- si->ch[ch].gr[1].scfsi = getbits_fast(fr, 4);
- }
-
- for (gr=0; gr<tab[0]; gr++)
- for (ch=0; ch<stereo; ch++)
- {
- register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
-
- gr_info->part2_3_length = getbits(fr, 12);
- gr_info->big_values = getbits(fr, 9);
- if(gr_info->big_values > 288)
- {
- if(NOQUIET) error("big_values too large!");
- gr_info->big_values = 288;
- }
- gr_info->pow2gain = fr->gainpow2+256 - getbits_fast(fr, 8) + powdiff;
- if(ms_stereo) gr_info->pow2gain += 2;
-
- gr_info->scalefac_compress = getbits(fr, tab[4]);
-
- if(get1bit(fr))
- { /* window switch flag */
- int i;
- gr_info->block_type = getbits_fast(fr, 2);
- gr_info->mixed_block_flag = get1bit(fr);
- gr_info->table_select[0] = getbits_fast(fr, 5);
- gr_info->table_select[1] = getbits_fast(fr, 5);
- /*
- table_select[2] not needed, because there is no region2,
- but to satisfy some verification tools we set it either.
- */
- gr_info->table_select[2] = 0;
- for(i=0;i<3;i++)
- gr_info->full_gain[i] = gr_info->pow2gain + (getbits_fast(fr, 3)<<3);
-
- if(gr_info->block_type == 0)
- {
- if(NOQUIET) error("Blocktype == 0 and window-switching == 1 not allowed.");
- return 1;
- }
-
- /* region_count/start parameters are implicit in this case. */
- if( (!fr->lsf || (gr_info->block_type == 2)) && !fr->mpeg25)
- {
- gr_info->region1start = 36>>1;
- gr_info->region2start = 576>>1;
- }
- else
- {
- if(fr->mpeg25)
- {
- int r0c,r1c;
- if((gr_info->block_type == 2) && (!gr_info->mixed_block_flag) ) r0c = 5;
- else r0c = 7;
-
- r1c = 20 - r0c;
- gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
- gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
- }
- else
- {
- gr_info->region1start = 54>>1;
- gr_info->region2start = 576>>1;
- }
- }
- }
- else
- {
- int i,r0c,r1c;
- for (i=0; i<3; i++)
- gr_info->table_select[i] = getbits_fast(fr, 5);
-
- r0c = getbits_fast(fr, 4);
- r1c = getbits_fast(fr, 3);
- gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
- gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
-
- if(r0c + r1c + 2 > 22) gr_info->region2start = 576>>1;
- else gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
-
- gr_info->block_type = 0;
- gr_info->mixed_block_flag = 0;
- }
- if(!fr->lsf) gr_info->preflag = get1bit(fr);
-
- gr_info->scalefac_scale = get1bit(fr);
- gr_info->count1table_select = get1bit(fr);
- }
- return 0;
-}
-
-
-/* read scalefactors */
-static int III_get_scale_factors_1(mpg123_handle *fr, int *scf,struct gr_info_s *gr_info,int ch,int gr)
-{
- const unsigned char slen[2][16] =
- {
- {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
- {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
- };
- int numbits;
- int num0 = slen[0][gr_info->scalefac_compress];
- int num1 = slen[1][gr_info->scalefac_compress];
-
- if(gr_info->block_type == 2)
- {
- int i=18;
- numbits = (num0 + num1) * 18;
-
- if(gr_info->mixed_block_flag)
- {
- for (i=8;i;i--)
- *scf++ = getbits_fast(fr, num0);
-
- i = 9;
- numbits -= num0; /* num0 * 17 + num1 * 18 */
- }
-
- for(;i;i--) *scf++ = getbits_fast(fr, num0);
-
- for(i = 18; i; i--) *scf++ = getbits_fast(fr, num1);
-
- *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */
- }
- else
- {
- int i;
- int scfsi = gr_info->scfsi;
-
- if(scfsi < 0)
- { /* scfsi < 0 => granule == 0 */
- for(i=11;i;i--) *scf++ = getbits_fast(fr, num0);
-
- for(i=10;i;i--) *scf++ = getbits_fast(fr, num1);
-
- numbits = (num0 + num1) * 10 + num0;
- *scf++ = 0;
- }
- else
- {
- numbits = 0;
- if(!(scfsi & 0x8))
- {
- for (i=0;i<6;i++) *scf++ = getbits_fast(fr, num0);
-
- numbits += num0 * 6;
- }
- else scf += 6;
-
- if(!(scfsi & 0x4))
- {
- for (i=0;i<5;i++) *scf++ = getbits_fast(fr, num0);
-
- numbits += num0 * 5;
- }
- else scf += 5;
-
- if(!(scfsi & 0x2))
- {
- for(i=0;i<5;i++) *scf++ = getbits_fast(fr, num1);
-
- numbits += num1 * 5;
- }
- else scf += 5;
-
- if(!(scfsi & 0x1))
- {
- for (i=0;i<5;i++) *scf++ = getbits_fast(fr, num1);
-
- numbits += num1 * 5;
- }
- else scf += 5;
-
- *scf++ = 0; /* no l[21] in original sources */
- }
- }
- return numbits;
-}
-
-
-static int III_get_scale_factors_2(mpg123_handle *fr, int *scf,struct gr_info_s *gr_info,int i_stereo)
-{
- const unsigned char *pnt;
- int i,j,n=0,numbits=0;
- unsigned int slen;
-
- const unsigned char stab[3][6][4] =
- {
- {
- { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0},
- { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0}
- },
- {
- { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0},
- {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0}
- },
- {
- { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0},
- { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0}
- }
- };
-
- if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */
- slen = i_slen2[gr_info->scalefac_compress>>1];
- else
- slen = n_slen2[gr_info->scalefac_compress];
-
- gr_info->preflag = (slen>>15) & 0x1;
-
- n = 0;
- if( gr_info->block_type == 2 )
- {
- n++;
- if(gr_info->mixed_block_flag) n++;
- }
-
- pnt = stab[n][(slen>>12)&0x7];
-
- for(i=0;i<4;i++)
- {
- int num = slen & 0x7;
- slen >>= 3;
- if(num)
- {
- for(j=0;j<(int)(pnt[i]);j++) *scf++ = getbits_fast(fr, num);
-
- numbits += pnt[i] * num;
- }
- else
- for(j=0;j<(int)(pnt[i]);j++) *scf++ = 0;
- }
-
- n = (n << 1) + 1;
- for(i=0;i<n;i++) *scf++ = 0;
-
- return numbits;
-}
-
-static const int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
-static const int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-
-/*
- Dequantize samples
- ...includes Huffman decoding
-*/
-
-/* 24 is enough because tab13 has max. a 19 bit huffvector */
-#define BITSHIFT ((sizeof(long)-1)*8)
-#define REFRESH_MASK \
- while(num < BITSHIFT) { \
- mask |= ((unsigned long)getbyte(fr))<<(BITSHIFT-num); \
- num += 8; \
- part2remain -= 8; }
-
-static int III_dequantize_sample(mpg123_handle *fr, real xr[SBLIMIT][SSLIMIT],int *scf, struct gr_info_s *gr_info,int sfreq,int part2bits)
-{
- int shift = 1 + gr_info->scalefac_scale;
- real *xrpnt = (real *) xr;
- int l[3],l3;
- int part2remain = gr_info->part2_3_length - part2bits;
- int *me;
-#ifdef REAL_IS_FIXED
- int gainpow2_scale_idx = 378;
-#endif
-
- /* mhipp tree has this split up a bit... */
- int num=getbitoffset(fr);
- long mask;
- /* We must split this, because for num==0 the shift is undefined if you do it in one step. */
- mask = ((unsigned long) getbits(fr, num))<<BITSHIFT;
- mask <<= 8-num;
- part2remain -= num;
-
- {
- int bv = gr_info->big_values;
- int region1 = gr_info->region1start;
- int region2 = gr_info->region2start;
- if(region1 > region2)
- {
- /*
- That's not optimal: it fixes a segfault with fuzzed data, but also apparently triggers where it shouldn't, see bug 1641196.
- The benefit of not crashing / having this security risk is bigger than these few frames of a lame-3.70 file that aren't audible anyway.
- But still, I want to know if indeed this check or the old lame is at fault.
- */
- if(NOQUIET) error("You got some really nasty file there... region1>region2!");
- return 1;
- }
- l3 = ((576>>1)-bv)>>1;
-
- /* we may lose the 'odd' bit here !! check this later again */
- if(bv <= region1)
- {
- l[0] = bv;
- l[1] = 0;
- l[2] = 0;
- }
- else
- {
- l[0] = region1;
- if(bv <= region2)
- {
- l[1] = bv - l[0];
- l[2] = 0;
- }
- else
- {
- l[1] = region2 - l[0];
- l[2] = bv - region2;
- }
- }
- }
-
- if(gr_info->block_type == 2)
- {
- /* decoding with short or mixed mode BandIndex table */
- int i,max[4];
- int step=0,lwin=3,cb=0;
- register real v = 0.0;
- register int *m,mc;
-
- if(gr_info->mixed_block_flag)
- {
- max[3] = -1;
- max[0] = max[1] = max[2] = 2;
- m = map[sfreq][0];
- me = mapend[sfreq][0];
- }
- else
- {
- max[0] = max[1] = max[2] = max[3] = -1;
- /* max[3] not really needed in this case */
- m = map[sfreq][1];
- me = mapend[sfreq][1];
- }
-
- mc = 0;
- for(i=0;i<2;i++)
- {
- int lp = l[i];
- struct newhuff *h = ht+gr_info->table_select[i];
- for(;lp;lp--,mc--)
- {
- register int x,y;
- if( (!mc) )
- {
- mc = *m++;
- xrpnt = ((real *) xr) + (*m++);
- lwin = *m++;
- cb = *m++;
- if(lwin == 3)
- {
-#ifdef REAL_IS_FIXED
- gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2);
-#endif
- v = gr_info->pow2gain[(*scf++) << shift];
- step = 1;
- }
- else
- {
-#ifdef REAL_IS_FIXED
- gainpow2_scale_idx = (int)(gr_info->full_gain[lwin] + (*scf << shift) - fr->gainpow2);
-#endif
- v = gr_info->full_gain[lwin][(*scf++) << shift];
- step = 3;
- }
- }
- {
- register short *val = h->table;
- REFRESH_MASK;
- while((y=*val++)<0)
- {
- if (mask < 0) val -= y;
-
- num--;
- mask <<= 1;
- }
- x = y >> 4;
- y &= 0xf;
- }
- if(x == 15 && h->linbits)
- {
- max[lwin] = cb;
- REFRESH_MASK;
- x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
- num -= h->linbits+1;
- mask <<= h->linbits;
- if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx);
- else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx);
-
- mask <<= 1;
- }
- else if(x)
- {
- max[lwin] = cb;
- if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx);
- else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx);
-
- num--;
- mask <<= 1;
- }
- else *xrpnt = DOUBLE_TO_REAL(0.0);
-
- xrpnt += step;
- if(y == 15 && h->linbits)
- {
- max[lwin] = cb;
- REFRESH_MASK;
- y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
- num -= h->linbits+1;
- mask <<= h->linbits;
- if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx);
- else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx);
-
- mask <<= 1;
- }
- else if(y)
- {
- max[lwin] = cb;
- if(mask < 0) *xrpnt = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx);
- else *xrpnt = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx);
-
- num--;
- mask <<= 1;
- }
- else *xrpnt = DOUBLE_TO_REAL(0.0);
-
- xrpnt += step;
- }
- }
-
- for(;l3 && (part2remain+num > 0);l3--)
- {
- struct newhuff* h;
- register short* val;
- register short a;
- /*
- This is only a humble hack to prevent a special segfault.
- More insight into the real workings is still needed.
- Especially why there are (valid?) files that make xrpnt exceed the array with 4 bytes without segfaulting, more seems to be really bad, though.
- */
- #ifdef DEBUG
- if(!(xrpnt < &xr[SBLIMIT][0]))
- {
- if(VERBOSE) debug2("attempted soft xrpnt overflow (%p !< %p) ?", (void*) xrpnt, (void*) &xr[SBLIMIT][0]);
- }
- #endif
- if(!(xrpnt < &xr[SBLIMIT][0]+5))
- {
- if(NOQUIET) error2("attempted xrpnt overflow (%p !< %p)", (void*) xrpnt, (void*) &xr[SBLIMIT][0]);
- return 2;
- }
- h = htc+gr_info->count1table_select;
- val = h->table;
-
- REFRESH_MASK;
- while((a=*val++)<0)
- {
- if(mask < 0) val -= a;
-
- num--;
- mask <<= 1;
- }
- if(part2remain+num <= 0)
- {
- num -= part2remain+num;
- break;
- }
-
- for(i=0;i<4;i++)
- {
- if(!(i & 1))
- {
- if(!mc)
- {
- mc = *m++;
- xrpnt = ((real *) xr) + (*m++);
- lwin = *m++;
- cb = *m++;
- if(lwin == 3)
- {
-#ifdef REAL_IS_FIXED
- gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2);
-#endif
- v = gr_info->pow2gain[(*scf++) << shift];
- step = 1;
- }
- else
- {
-#ifdef REAL_IS_FIXED
- gainpow2_scale_idx = (int)(gr_info->full_gain[lwin] + (*scf << shift) - fr->gainpow2);
-#endif
- v = gr_info->full_gain[lwin][(*scf++) << shift];
- step = 3;
- }
- }
- mc--;
- }
- if( (a & (0x8>>i)) )
- {
- max[lwin] = cb;
- if(part2remain+num <= 0)
- break;
-
- if(mask < 0) *xrpnt = -REAL_SCALE_LAYER3(v, gainpow2_scale_idx);
- else *xrpnt = REAL_SCALE_LAYER3(v, gainpow2_scale_idx);
-
- num--;
- mask <<= 1;
- }
- else *xrpnt = DOUBLE_TO_REAL(0.0);
-
- xrpnt += step;
- }
- }
-
- if(lwin < 3)
- { /* short band? */
- while(1)
- {
- for(;mc > 0;mc--)
- {
- *xrpnt = DOUBLE_TO_REAL(0.0); xrpnt += 3; /* short band -> step=3 */
- *xrpnt = DOUBLE_TO_REAL(0.0); xrpnt += 3;
- }
- if(m >= me)
- break;
-
- mc = *m++;
- xrpnt = ((real *) xr) + *m++;
- if(*m++ == 0)
- break; /* optimize: field will be set to zero at the end of the function */
-
- m++; /* cb */
- }
- }
-
- gr_info->maxband[0] = max[0]+1;
- gr_info->maxband[1] = max[1]+1;
- gr_info->maxband[2] = max[2]+1;
- gr_info->maxbandl = max[3]+1;
-
- {
- int rmax = max[0] > max[1] ? max[0] : max[1];
- rmax = (rmax > max[2] ? rmax : max[2]) + 1;
- gr_info->maxb = rmax ? fr->shortLimit[sfreq][rmax] : fr->longLimit[sfreq][max[3]+1];
- }
-
- }
- else
- {
- /* decoding with 'long' BandIndex table (block_type != 2) */
- const int *pretab = gr_info->preflag ? pretab1 : pretab2;
- int i,max = -1;
- int cb = 0;
- int *m = map[sfreq][2];
- register real v = 0.0;
- int mc = 0;
-
- /* long hash table values */
- for(i=0;i<3;i++)
- {
- int lp = l[i];
- struct newhuff *h = ht+gr_info->table_select[i];
-
- for(;lp;lp--,mc--)
- {
- int x,y;
- if(!mc)
- {
- mc = *m++;
- cb = *m++;
-#ifdef CUT_SFB21
- if(cb == 21)
- v = 0.0;
- else
-#endif
- {
-#ifdef REAL_IS_FIXED
- gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2);
-#endif
- v = gr_info->pow2gain[(*(scf++) + (*pretab++)) << shift];
- }
- }
- {
- register short *val = h->table;
- REFRESH_MASK;
- while((y=*val++)<0)
- {
- if (mask < 0) val -= y;
-
- num--;
- mask <<= 1;
- }
- x = y >> 4;
- y &= 0xf;
- }
-
- if(x == 15 && h->linbits)
- {
- max = cb;
- REFRESH_MASK;
- x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
- num -= h->linbits+1;
- mask <<= h->linbits;
- if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx);
- else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx);
-
- mask <<= 1;
- }
- else if(x)
- {
- max = cb;
- if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[x], v, gainpow2_scale_idx);
- else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[x], v, gainpow2_scale_idx);
- num--;
-
- mask <<= 1;
- }
- else *xrpnt++ = DOUBLE_TO_REAL(0.0);
-
- if(y == 15 && h->linbits)
- {
- max = cb;
- REFRESH_MASK;
- y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
- num -= h->linbits+1;
- mask <<= h->linbits;
- if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx);
- else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx);
-
- mask <<= 1;
- }
- else if(y)
- {
- max = cb;
- if(mask < 0) *xrpnt++ = REAL_MUL_SCALE_LAYER3(-ispow[y], v, gainpow2_scale_idx);
- else *xrpnt++ = REAL_MUL_SCALE_LAYER3( ispow[y], v, gainpow2_scale_idx);
-
- num--;
- mask <<= 1;
- }
- else *xrpnt++ = DOUBLE_TO_REAL(0.0);
- }
- }
-
- /* short (count1table) values */
- for(;l3 && (part2remain+num > 0);l3--)
- {
- struct newhuff *h = htc+gr_info->count1table_select;
- register short *val = h->table,a;
-
- REFRESH_MASK;
- while((a=*val++)<0)
- {
- if (mask < 0) val -= a;
-
- num--;
- mask <<= 1;
- }
- if(part2remain+num <= 0)
- {
- num -= part2remain+num;
- break;
- }
-
- for(i=0;i<4;i++)
- {
- if(!(i & 1))
- {
- if(!mc)
- {
- mc = *m++;
- cb = *m++;
-#ifdef CUT_SFB21
- if(cb == 21)
- v = 0.0;
- else
-#endif
- {
-#ifdef REAL_IS_FIXED
- gainpow2_scale_idx = (int)(gr_info->pow2gain + (*scf << shift) - fr->gainpow2);
-#endif
- v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
- }
- }
- mc--;
- }
- if( (a & (0x8>>i)) )
- {
- max = cb;
- if(part2remain+num <= 0)
- break;
-
- if(mask < 0) *xrpnt++ = -REAL_SCALE_LAYER3(v, gainpow2_scale_idx);
- else *xrpnt++ = REAL_SCALE_LAYER3(v, gainpow2_scale_idx);
-
- num--;
- mask <<= 1;
- }
- else *xrpnt++ = DOUBLE_TO_REAL(0.0);
- }
- }
-
- gr_info->maxbandl = max+1;
- gr_info->maxb = fr->longLimit[sfreq][gr_info->maxbandl];
- }
-
- part2remain += num;
- backbits(fr, num);
- num = 0;
-
- while(xrpnt < &xr[SBLIMIT][0])
- *xrpnt++ = DOUBLE_TO_REAL(0.0);
-
- while( part2remain > 16 )
- {
- skipbits(fr, 16); /* Dismiss stuffing Bits */
- part2remain -= 16;
- }
- if(part2remain > 0) skipbits(fr, part2remain);
- else if(part2remain < 0)
- {
- debug1("Can't rewind stream by %d bits!",-part2remain);
- return 1; /* -> error */
- }
- return 0;
-}
-
-
-/* calculate real channel values for Joint-I-Stereo-mode */
-static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac, struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
-{
- real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
- const struct bandInfoStruct *bi = &bandInfo[sfreq];
-
- const real *tab1,*tab2;
-
-#if 1
- int tab;
-/* TODO: optimize as static */
- const real *tabs[3][2][2] =
- {
- { { tan1_1,tan2_1 } , { tan1_2,tan2_2 } },
- { { pow1_1[0],pow2_1[0] } , { pow1_2[0],pow2_2[0] } },
- { { pow1_1[1],pow2_1[1] } , { pow1_2[1],pow2_2[1] } }
- };
-
- tab = lsf + (gr_info->scalefac_compress & lsf);
- tab1 = tabs[tab][ms_stereo][0];
- tab2 = tabs[tab][ms_stereo][1];
-#else
- if(lsf)
- {
- int p = gr_info->scalefac_compress & 0x1;
- if(ms_stereo)
- {
- tab1 = pow1_2[p];
- tab2 = pow2_2[p];
- }
- else
- {
- tab1 = pow1_1[p];
- tab2 = pow2_1[p];
- }
- }
- else
- {
- if(ms_stereo)
- {
- tab1 = tan1_2;
- tab2 = tan2_2;
- }
- else
- {
- tab1 = tan1_1;
- tab2 = tan2_1;
- }
- }
-#endif
-
- if(gr_info->block_type == 2)
- {
- int lwin,do_l = 0;
- if( gr_info->mixed_block_flag ) do_l = 1;
-
- for(lwin=0;lwin<3;lwin++)
- { /* process each window */
- /* get first band with zero values */
- int is_p,sb,idx,sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */
- if(sfb > 3) do_l = 0;
-
- for(;sfb<12;sfb++)
- {
- is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
- if(is_p != 7)
- {
- real t1,t2;
- sb = bi->shortDiff[sfb];
- idx = bi->shortIdx[sfb] + lwin;
- t1 = tab1[is_p]; t2 = tab2[is_p];
- for (; sb > 0; sb--,idx+=3)
- {
- real v = xr[0][idx];
- xr[0][idx] = REAL_MUL_15(v, t1);
- xr[1][idx] = REAL_MUL_15(v, t2);
- }
- }
- }
-
-#if 1
-/* in the original: copy 10 to 11 , here: copy 11 to 12
-maybe still wrong??? (copy 12 to 13?) */
- is_p = scalefac[11*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
- sb = bi->shortDiff[12];
- idx = bi->shortIdx[12] + lwin;
-#else
- is_p = scalefac[10*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
- sb = bi->shortDiff[11];
- idx = bi->shortIdx[11] + lwin;
-#endif
- if(is_p != 7)
- {
- real t1,t2;
- t1 = tab1[is_p]; t2 = tab2[is_p];
- for( ; sb > 0; sb--,idx+=3 )
- {
- real v = xr[0][idx];
- xr[0][idx] = REAL_MUL_15(v, t1);
- xr[1][idx] = REAL_MUL_15(v, t2);
- }
- }
- } /* end for(lwin; .. ; . ) */
-
- /* also check l-part, if ALL bands in the three windows are 'empty' and mode = mixed_mode */
- if(do_l)
- {
- int sfb = gr_info->maxbandl;
- int idx;
- if(sfb > 21) return; /* similarity fix related to CVE-2006-1655 */
-
- idx = bi->longIdx[sfb];
- for( ; sfb<8; sfb++ )
- {
- int sb = bi->longDiff[sfb];
- int is_p = scalefac[sfb]; /* scale: 0-15 */
- if(is_p != 7)
- {
- real t1,t2;
- t1 = tab1[is_p]; t2 = tab2[is_p];
- for( ; sb > 0; sb--,idx++)
- {
- real v = xr[0][idx];
- xr[0][idx] = REAL_MUL_15(v, t1);
- xr[1][idx] = REAL_MUL_15(v, t2);
- }
- }
- else idx += sb;
- }
- }
- }
- else
- { /* ((gr_info->block_type != 2)) */
- int sfb = gr_info->maxbandl;
- int is_p,idx;
- if(sfb > 21) return; /* tightened fix for CVE-2006-1655 */
-
- idx = bi->longIdx[sfb];
- for ( ; sfb<21; sfb++)
- {
- int sb = bi->longDiff[sfb];
- is_p = scalefac[sfb]; /* scale: 0-15 */
- if(is_p != 7)
- {
- real t1,t2;
- t1 = tab1[is_p]; t2 = tab2[is_p];
- for( ; sb > 0; sb--,idx++)
- {
- real v = xr[0][idx];
- xr[0][idx] = REAL_MUL_15(v, t1);
- xr[1][idx] = REAL_MUL_15(v, t2);
- }
- }
- else idx += sb;
- }
-
- is_p = scalefac[20];
- if(is_p != 7)
- { /* copy l-band 20 to l-band 21 */
- int sb;
- real t1 = tab1[is_p],t2 = tab2[is_p];
-
- for( sb = bi->longDiff[21]; sb > 0; sb--,idx++ )
- {
- real v = xr[0][idx];
- xr[0][idx] = REAL_MUL_15(v, t1);
- xr[1][idx] = REAL_MUL_15(v, t2);
- }
- }
- }
-}
-
-
-static void III_antialias(real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info)
-{
- int sblim;
-
- if(gr_info->block_type == 2)
- {
- if(!gr_info->mixed_block_flag) return;
-
- sblim = 1;
- }
- else sblim = gr_info->maxb-1;
-
- /* 31 alias-reduction operations between each pair of sub-bands */
- /* with 8 butterflies between each pair */
-
- {
- int sb;
- real *xr1=(real *) xr[1];
-
- for(sb=sblim; sb; sb--,xr1+=10)
- {
- int ss;
- real *cs=aa_cs,*ca=aa_ca;
- real *xr2 = xr1;
-
- for(ss=7;ss>=0;ss--)
- { /* upper and lower butterfly inputs */
- register real bu = *--xr2,bd = *xr1;
- *xr2 = REAL_MUL(bu, *cs) - REAL_MUL(bd, *ca);
- *xr1++ = REAL_MUL(bd, *cs++) + REAL_MUL(bu, *ca++);
- }
- }
- }
-}
-
-/*
- This is an optimized DCT from Jeff Tsay's maplay 1.2+ package.
- Saved one multiplication by doing the 'twiddle factor' stuff
- together with the window mul. (MH)
-
- This uses Byeong Gi Lee's Fast Cosine Transform algorithm, but the
- 9 point IDCT needs to be reduced further. Unfortunately, I don't
- know how to do that, because 9 is not an even number. - Jeff.
-
- Original Message:
-
- 9 Point Inverse Discrete Cosine Transform
-
- This piece of code is Copyright 1997 Mikko Tommila and is freely usable
- by anybody. The algorithm itself is of course in the public domain.
-
- Again derived heuristically from the 9-point WFTA.
-
- The algorithm is optimized (?) for speed, not for small rounding errors or
- good readability.
-
- 36 additions, 11 multiplications
-
- Again this is very likely sub-optimal.
-
- The code is optimized to use a minimum number of temporary variables,
- so it should compile quite well even on 8-register Intel x86 processors.
- This makes the code quite obfuscated and very difficult to understand.
-
- References:
- [1] S. Winograd: "On Computing the Discrete Fourier Transform",
- Mathematics of Computation, Volume 32, Number 141, January 1978,
- Pages 175-199
-*/
-
-/* Calculation of the inverse MDCT
- used to be static without 3dnow - does that really matter? */
-void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
-{
-#ifdef NEW_DCT9
- real tmp[18];
-#endif
-
- {
- register real *in = inbuf;
-
- in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
- in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
- in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
- in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
- in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
- in[2] +=in[1]; in[1] +=in[0];
-
- in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
- in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
-
-
-#ifdef NEW_DCT9
-#if 1
- {
- real t3;
- {
- real t0, t1, t2;
-
- t0 = REAL_MUL(COS6_2, (in[8] + in[16] - in[4]));
- t1 = REAL_MUL(COS6_2, in[12]);
-
- t3 = in[0];
- t2 = t3 - t1 - t1;
- tmp[1] = tmp[7] = t2 - t0;
- tmp[4] = t2 + t0 + t0;
- t3 += t1;
-
- t2 = REAL_MUL(COS6_1, (in[10] + in[14] - in[2]));
- tmp[1] -= t2;
- tmp[7] += t2;
- }
- {
- real t0, t1, t2;
-
- t0 = REAL_MUL(cos9[0], (in[4] + in[8] ));
- t1 = REAL_MUL(cos9[1], (in[8] - in[16]));
- t2 = REAL_MUL(cos9[2], (in[4] + in[16]));
-
- tmp[2] = tmp[6] = t3 - t0 - t2;
- tmp[0] = tmp[8] = t3 + t0 + t1;
- tmp[3] = tmp[5] = t3 - t1 + t2;
- }
- }
- {
- real t1, t2, t3;
-
- t1 = REAL_MUL(cos18[0], (in[2] + in[10]));
- t2 = REAL_MUL(cos18[1], (in[10] - in[14]));
- t3 = REAL_MUL(COS6_1, in[6]);
-
- {
- real t0 = t1 + t2 + t3;
- tmp[0] += t0;
- tmp[8] -= t0;
- }
-
- t2 -= t3;
- t1 -= t3;
-
- t3 = REAL_MUL(cos18[2], (in[2] + in[14]));
-
- t1 += t3;
- tmp[3] += t1;
- tmp[5] -= t1;
-
- t2 -= t3;
- tmp[2] += t2;
- tmp[6] -= t2;
- }
-
-#else
- {
- real t0, t1, t2, t3, t4, t5, t6, t7;
-
- t1 = REAL_MUL(COS6_2, in[12]);
- t2 = REAL_MUL(COS6_2, (in[8] + in[16] - in[4]));
-
- t3 = in[0] + t1;
- t4 = in[0] - t1 - t1;
- t5 = t4 - t2;
- tmp[4] = t4 + t2 + t2;
-
- t0 = REAL_MUL(cos9[0], (in[4] + in[8]));
- t1 = REAL_MUL(cos9[1], (in[8] - in[16]));
-
- t2 = REAL_MUL(cos9[2], (in[4] + in[16]));
-
- t6 = t3 - t0 - t2;
- t0 += t3 + t1;
- t3 += t2 - t1;
-
- t2 = REAL_MUL(cos18[0], (in[2] + in[10]));
- t4 = REAL_MUL(cos18[1], (in[10] - in[14]));
- t7 = REAL_MUL(COS6_1, in[6]);
-
- t1 = t2 + t4 + t7;
- tmp[0] = t0 + t1;
- tmp[8] = t0 - t1;
- t1 = REAL_MUL(cos18[2], (in[2] + in[14]));
- t2 += t1 - t7;
-
- tmp[3] = t3 + t2;
- t0 = REAL_MUL(COS6_1, (in[10] + in[14] - in[2]));
- tmp[5] = t3 - t2;
-
- t4 -= t1 + t7;
-
- tmp[1] = t5 - t0;
- tmp[7] = t5 + t0;
- tmp[2] = t6 + t4;
- tmp[6] = t6 - t4;
- }
-#endif
-
- {
- real t0, t1, t2, t3, t4, t5, t6, t7;
-
- t1 = REAL_MUL(COS6_2, in[13]);
- t2 = REAL_MUL(COS6_2, (in[9] + in[17] - in[5]));
-
- t3 = in[1] + t1;
- t4 = in[1] - t1 - t1;
- t5 = t4 - t2;
-
- t0 = REAL_MUL(cos9[0], (in[5] + in[9]));
- t1 = REAL_MUL(cos9[1], (in[9] - in[17]));
-
- tmp[13] = REAL_MUL((t4 + t2 + t2), tfcos36[17-13]);
- t2 = REAL_MUL(cos9[2], (in[5] + in[17]));
-
- t6 = t3 - t0 - t2;
- t0 += t3 + t1;
- t3 += t2 - t1;
-
- t2 = REAL_MUL(cos18[0], (in[3] + in[11]));
- t4 = REAL_MUL(cos18[1], (in[11] - in[15]));
- t7 = REAL_MUL(COS6_1, in[7]);
-
- t1 = t2 + t4 + t7;
- tmp[17] = REAL_MUL((t0 + t1), tfcos36[17-17]);
- tmp[9] = REAL_MUL((t0 - t1), tfcos36[17-9]);
- t1 = REAL_MUL(cos18[2], (in[3] + in[15]));
- t2 += t1 - t7;
-
- tmp[14] = REAL_MUL((t3 + t2), tfcos36[17-14]);
- t0 = REAL_MUL(COS6_1, (in[11] + in[15] - in[3]));
- tmp[12] = REAL_MUL((t3 - t2), tfcos36[17-12]);
-
- t4 -= t1 + t7;
-
- tmp[16] = REAL_MUL((t5 - t0), tfcos36[17-16]);
- tmp[10] = REAL_MUL((t5 + t0), tfcos36[17-10]);
- tmp[15] = REAL_MUL((t6 + t4), tfcos36[17-15]);
- tmp[11] = REAL_MUL((t6 - t4), tfcos36[17-11]);
- }
-
-#define MACRO(v) { \
- real tmpval; \
- tmpval = tmp[(v)] + tmp[17-(v)]; \
- out2[9+(v)] = REAL_MUL(tmpval, w[27+(v)]); \
- out2[8-(v)] = REAL_MUL(tmpval, w[26-(v)]); \
- tmpval = tmp[(v)] - tmp[17-(v)]; \
- ts[SBLIMIT*(8-(v))] = out1[8-(v)] + REAL_MUL(tmpval, w[8-(v)]); \
- ts[SBLIMIT*(9+(v))] = out1[9+(v)] + REAL_MUL(tmpval, w[9+(v)]); }
-
- {
- register real *out2 = o2;
- register real *w = wintab;
- register real *out1 = o1;
- register real *ts = tsbuf;
-
- MACRO(0);
- MACRO(1);
- MACRO(2);
- MACRO(3);
- MACRO(4);
- MACRO(5);
- MACRO(6);
- MACRO(7);
- MACRO(8);
- }
-
-#else
-
- {
-
-#define MACRO0(v) { \
- real tmp; \
- out2[9+(v)] = REAL_MUL((tmp = sum0 + sum1), w[27+(v)]); \
- out2[8-(v)] = REAL_MUL(tmp, w[26-(v)]); } \
- sum0 -= sum1; \
- ts[SBLIMIT*(8-(v))] = out1[8-(v)] + REAL_MUL(sum0, w[8-(v)]); \
- ts[SBLIMIT*(9+(v))] = out1[9+(v)] + REAL_MUL(sum0, w[9+(v)]);
-#define MACRO1(v) { \
- real sum0,sum1; \
- sum0 = tmp1a + tmp2a; \
- sum1 = REAL_MUL((tmp1b + tmp2b), tfcos36[(v)]); \
- MACRO0(v); }
-#define MACRO2(v) { \
- real sum0,sum1; \
- sum0 = tmp2a - tmp1a; \
- sum1 = REAL_MUL((tmp2b - tmp1b), tfcos36[(v)]); \
- MACRO0(v); }
-
- register const real *c = COS9;
- register real *out2 = o2;
- register real *w = wintab;
- register real *out1 = o1;
- register real *ts = tsbuf;
-
- real ta33,ta66,tb33,tb66;
-
- ta33 = REAL_MUL(in[2*3+0], c[3]);
- ta66 = REAL_MUL(in[2*6+0], c[6]);
- tb33 = REAL_MUL(in[2*3+1], c[3]);
- tb66 = REAL_MUL(in[2*6+1], c[6]);
-
- {
- real tmp1a,tmp2a,tmp1b,tmp2b;
- tmp1a = REAL_MUL(in[2*1+0], c[1]) + ta33 + REAL_MUL(in[2*5+0], c[5]) + REAL_MUL(in[2*7+0], c[7]);
- tmp1b = REAL_MUL(in[2*1+1], c[1]) + tb33 + REAL_MUL(in[2*5+1], c[5]) + REAL_MUL(in[2*7+1], c[7]);
- tmp2a = REAL_MUL(in[2*2+0], c[2]) + REAL_MUL(in[2*4+0], c[4]) + ta66 + REAL_MUL(in[2*8+0], c[8]);
- tmp2b = REAL_MUL(in[2*2+1], c[2]) + REAL_MUL(in[2*4+1], c[4]) + tb66 + REAL_MUL(in[2*8+1], c[8]);
-
- MACRO1(0);
- MACRO2(8);
- }
-
- {
- real tmp1a,tmp2a,tmp1b,tmp2b;
- tmp1a = REAL_MUL(( in[2*1+0] - in[2*5+0] - in[2*7+0] ), c[3]);
- tmp1b = REAL_MUL(( in[2*1+1] - in[2*5+1] - in[2*7+1] ), c[3]);
- tmp2a = REAL_MUL(( in[2*2+0] - in[2*4+0] - in[2*8+0] ), c[6]) - in[2*6+0] + in[2*0+0];
- tmp2b = REAL_MUL(( in[2*2+1] - in[2*4+1] - in[2*8+1] ), c[6]) - in[2*6+1] + in[2*0+1];
-
- MACRO1(1);
- MACRO2(7);
- }
-
- {
- real tmp1a,tmp2a,tmp1b,tmp2b;
- tmp1a = REAL_MUL(in[2*1+0], c[5]) - ta33 - REAL_MUL(in[2*5+0], c[7]) + REAL_MUL(in[2*7+0], c[1]);
- tmp1b = REAL_MUL(in[2*1+1], c[5]) - tb33 - REAL_MUL(in[2*5+1], c[7]) + REAL_MUL(in[2*7+1], c[1]);
- tmp2a = - REAL_MUL(in[2*2+0], c[8]) - REAL_MUL(in[2*4+0], c[2]) + ta66 + REAL_MUL(in[2*8+0], c[4]);
- tmp2b = - REAL_MUL(in[2*2+1], c[8]) - REAL_MUL(in[2*4+1], c[2]) + tb66 + REAL_MUL(in[2*8+1], c[4]);
-
- MACRO1(2);
- MACRO2(6);
- }
-
- {
- real tmp1a,tmp2a,tmp1b,tmp2b;
- tmp1a = REAL_MUL(in[2*1+0], c[7]) - ta33 + REAL_MUL(in[2*5+0], c[1]) - REAL_MUL(in[2*7+0], c[5]);
- tmp1b = REAL_MUL(in[2*1+1], c[7]) - tb33 + REAL_MUL(in[2*5+1], c[1]) - REAL_MUL(in[2*7+1], c[5]);
- tmp2a = - REAL_MUL(in[2*2+0], c[4]) + REAL_MUL(in[2*4+0], c[8]) + ta66 - REAL_MUL(in[2*8+0], c[2]);
- tmp2b = - REAL_MUL(in[2*2+1], c[4]) + REAL_MUL(in[2*4+1], c[8]) + tb66 - REAL_MUL(in[2*8+1], c[2]);
-
- MACRO1(3);
- MACRO2(5);
- }
-
- {
- real sum0,sum1;
- sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
- sum1 = REAL_MUL((in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ), tfcos36[4]);
- MACRO0(4);
- }
- }
-#endif
-
- }
-}
-
-
-/* new DCT12 */
-static void dct12(real *in,real *rawout1,real *rawout2,register real *wi,register real *ts)
-{
-#define DCT12_PART1 \
- in5 = in[5*3]; \
- in5 += (in4 = in[4*3]); \
- in4 += (in3 = in[3*3]); \
- in3 += (in2 = in[2*3]); \
- in2 += (in1 = in[1*3]); \
- in1 += (in0 = in[0*3]); \
- \
- in5 += in3; in3 += in1; \
- \
- in2 = REAL_MUL(in2, COS6_1); \
- in3 = REAL_MUL(in3, COS6_1);
-
-#define DCT12_PART2 \
- in0 += REAL_MUL(in4, COS6_2); \
- \
- in4 = in0 + in2; \
- in0 -= in2; \
- \
- in1 += REAL_MUL(in5, COS6_2); \
- \
- in5 = REAL_MUL((in1 + in3), tfcos12[0]); \
- in1 = REAL_MUL((in1 - in3), tfcos12[2]); \
- \
- in3 = in4 + in5; \
- in4 -= in5; \
- \
- in2 = in0 + in1; \
- in0 -= in1;
-
- {
- real in0,in1,in2,in3,in4,in5;
- register real *out1 = rawout1;
- ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
- ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
-
- DCT12_PART1
-
- {
- real tmp0,tmp1 = (in0 - in4);
- {
- real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]);
- tmp0 = tmp1 + tmp2;
- tmp1 -= tmp2;
- }
- ts[(17-1)*SBLIMIT] = out1[17-1] + REAL_MUL(tmp0, wi[11-1]);
- ts[(12+1)*SBLIMIT] = out1[12+1] + REAL_MUL(tmp0, wi[6+1]);
- ts[(6 +1)*SBLIMIT] = out1[6 +1] + REAL_MUL(tmp1, wi[1]);
- ts[(11-1)*SBLIMIT] = out1[11-1] + REAL_MUL(tmp1, wi[5-1]);
- }
-
- DCT12_PART2
-
- ts[(17-0)*SBLIMIT] = out1[17-0] + REAL_MUL(in2, wi[11-0]);
- ts[(12+0)*SBLIMIT] = out1[12+0] + REAL_MUL(in2, wi[6+0]);
- ts[(12+2)*SBLIMIT] = out1[12+2] + REAL_MUL(in3, wi[6+2]);
- ts[(17-2)*SBLIMIT] = out1[17-2] + REAL_MUL(in3, wi[11-2]);
-
- ts[(6 +0)*SBLIMIT] = out1[6+0] + REAL_MUL(in0, wi[0]);
- ts[(11-0)*SBLIMIT] = out1[11-0] + REAL_MUL(in0, wi[5-0]);
- ts[(6 +2)*SBLIMIT] = out1[6+2] + REAL_MUL(in4, wi[2]);
- ts[(11-2)*SBLIMIT] = out1[11-2] + REAL_MUL(in4, wi[5-2]);
- }
-
- in++;
-
- {
- real in0,in1,in2,in3,in4,in5;
- register real *out2 = rawout2;
-
- DCT12_PART1
-
- {
- real tmp0,tmp1 = (in0 - in4);
- {
- real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]);
- tmp0 = tmp1 + tmp2;
- tmp1 -= tmp2;
- }
- out2[5-1] = REAL_MUL(tmp0, wi[11-1]);
- out2[0+1] = REAL_MUL(tmp0, wi[6+1]);
- ts[(12+1)*SBLIMIT] += REAL_MUL(tmp1, wi[1]);
- ts[(17-1)*SBLIMIT] += REAL_MUL(tmp1, wi[5-1]);
- }
-
- DCT12_PART2
-
- out2[5-0] = REAL_MUL(in2, wi[11-0]);
- out2[0+0] = REAL_MUL(in2, wi[6+0]);
- out2[0+2] = REAL_MUL(in3, wi[6+2]);
- out2[5-2] = REAL_MUL(in3, wi[11-2]);
-
- ts[(12+0)*SBLIMIT] += REAL_MUL(in0, wi[0]);
- ts[(17-0)*SBLIMIT] += REAL_MUL(in0, wi[5-0]);
- ts[(12+2)*SBLIMIT] += REAL_MUL(in4, wi[2]);
- ts[(17-2)*SBLIMIT] += REAL_MUL(in4, wi[5-2]);
- }
-
- in++;
-
- {
- real in0,in1,in2,in3,in4,in5;
- register real *out2 = rawout2;
- out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
-
- DCT12_PART1
-
- {
- real tmp0,tmp1 = (in0 - in4);
- {
- real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]);
- tmp0 = tmp1 + tmp2;
- tmp1 -= tmp2;
- }
- out2[11-1] = REAL_MUL(tmp0, wi[11-1]);
- out2[6 +1] = REAL_MUL(tmp0, wi[6+1]);
- out2[0+1] += REAL_MUL(tmp1, wi[1]);
- out2[5-1] += REAL_MUL(tmp1, wi[5-1]);
- }
-
- DCT12_PART2
-
- out2[11-0] = REAL_MUL(in2, wi[11-0]);
- out2[6 +0] = REAL_MUL(in2, wi[6+0]);
- out2[6 +2] = REAL_MUL(in3, wi[6+2]);
- out2[11-2] = REAL_MUL(in3, wi[11-2]);
-
- out2[0+0] += REAL_MUL(in0, wi[0]);
- out2[5-0] += REAL_MUL(in0, wi[5-0]);
- out2[0+2] += REAL_MUL(in4, wi[2]);
- out2[5-2] += REAL_MUL(in4, wi[5-2]);
- }
-}
-
-
-static void III_hybrid(real fsIn[SBLIMIT][SSLIMIT], real tsOut[SSLIMIT][SBLIMIT], int ch,struct gr_info_s *gr_info, mpg123_handle *fr)
-{
- real (*block)[2][SBLIMIT*SSLIMIT] = fr->hybrid_block;
- int *blc = fr->hybrid_blc;
-
- real *tspnt = (real *) tsOut;
- real *rawout1,*rawout2;
- int bt = 0;
- size_t sb = 0;
-
- {
- int b = blc[ch];
- rawout1=block[b][ch];
- b=-b+1;
- rawout2=block[b][ch];
- blc[ch] = b;
- }
-
- if(gr_info->mixed_block_flag)
- {
- sb = 2;
- opt_dct36(fr)(fsIn[0],rawout1,rawout2,win[0],tspnt);
- opt_dct36(fr)(fsIn[1],rawout1+18,rawout2+18,win1[0],tspnt+1);
- rawout1 += 36; rawout2 += 36; tspnt += 2;
- }
-
- bt = gr_info->block_type;
- if(bt == 2)
- {
- for(; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36)
- {
- dct12(fsIn[sb] ,rawout1 ,rawout2 ,win[2] ,tspnt);
- dct12(fsIn[sb+1],rawout1+18,rawout2+18,win1[2],tspnt+1);
- }
- }
- else
- {
- for(; sb<gr_info->maxb; sb+=2,tspnt+=2,rawout1+=36,rawout2+=36)
- {
- opt_dct36(fr)(fsIn[sb],rawout1,rawout2,win[bt],tspnt);
- opt_dct36(fr)(fsIn[sb+1],rawout1+18,rawout2+18,win1[bt],tspnt+1);
- }
- }
-
- for(;sb<SBLIMIT;sb++,tspnt++)
- {
- int i;
- for(i=0;i<SSLIMIT;i++)
- {
- tspnt[i*SBLIMIT] = *rawout1++;
- *rawout2++ = DOUBLE_TO_REAL(0.0);
- }
- }
-}
-
-
-/* And at the end... the main layer3 handler */
-int do_layer3(mpg123_handle *fr)
-{
- int gr, ch, ss,clip=0;
- int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
- struct III_sideinfo sideinfo;
- int stereo = fr->stereo;
- int single = fr->single;
- int ms_stereo,i_stereo;
- int sfreq = fr->sampling_frequency;
- int stereo1,granules;
-
- if(stereo == 1)
- { /* stream is mono */
- stereo1 = 1;
- single = SINGLE_LEFT;
- }
- else if(single != SINGLE_STEREO) /* stream is stereo, but force to mono */
- stereo1 = 1;
- else
- stereo1 = 2;
-
- if(fr->mode == MPG_MD_JOINT_STEREO)
- {
- ms_stereo = (fr->mode_ext & 0x2)>>1;
- i_stereo = fr->mode_ext & 0x1;
- }
- else ms_stereo = i_stereo = 0;
-
- granules = fr->lsf ? 1 : 2;
-
- /* quick hack to keep the music playing */
- /* after having seen this nasty test file... */
- if(III_get_side_info(fr, &sideinfo,stereo,ms_stereo,sfreq,single))
- {
- if(NOQUIET) error("bad frame - unable to get valid sideinfo");
- return clip;
- }
-
- set_pointer(fr,sideinfo.main_data_begin);
-
- for(gr=0;gr<granules;gr++)
- {
- /* hybridIn[2][SBLIMIT][SSLIMIT] */
- real (*hybridIn)[SBLIMIT][SSLIMIT] = fr->layer3.hybrid_in;
- /* hybridOut[2][SSLIMIT][SBLIMIT] */
- real (*hybridOut)[SSLIMIT][SBLIMIT] = fr->layer3.hybrid_out;
-
- {
- struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
- long part2bits;
- if(fr->lsf)
- part2bits = III_get_scale_factors_2(fr, scalefacs[0],gr_info,0);
- else
- part2bits = III_get_scale_factors_1(fr, scalefacs[0],gr_info,0,gr);
-
- if(III_dequantize_sample(fr, hybridIn[0], scalefacs[0],gr_info,sfreq,part2bits))
- {
- if(VERBOSE2) error("dequantization failed!");
- return clip;
- }
- }
-
- if(stereo == 2)
- {
- struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
- long part2bits;
- if(fr->lsf)
- part2bits = III_get_scale_factors_2(fr, scalefacs[1],gr_info,i_stereo);
- else
- part2bits = III_get_scale_factors_1(fr, scalefacs[1],gr_info,1,gr);
-
- if(III_dequantize_sample(fr, hybridIn[1],scalefacs[1],gr_info,sfreq,part2bits))
- {
- if(VERBOSE2) error("dequantization failed!");
- return clip;
- }
-
- if(ms_stereo)
- {
- int i;
- unsigned int maxb = sideinfo.ch[0].gr[gr].maxb;
- if(sideinfo.ch[1].gr[gr].maxb > maxb) maxb = sideinfo.ch[1].gr[gr].maxb;
-
- for(i=0;i<SSLIMIT*(int)maxb;i++)
- {
- real tmp0 = ((real *)hybridIn[0])[i];
- real tmp1 = ((real *)hybridIn[1])[i];
- ((real *)hybridIn[0])[i] = tmp0 + tmp1;
- ((real *)hybridIn[1])[i] = tmp0 - tmp1;
- }
- }
-
- if(i_stereo) III_i_stereo(hybridIn,scalefacs[1],gr_info,sfreq,ms_stereo,fr->lsf);
-
- if(ms_stereo || i_stereo || (single == SINGLE_MIX) )
- {
- if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
- sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
- else
- gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
- }
-
- switch(single)
- {
- case SINGLE_MIX:
- {
- register int i;
- register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
- for(i=0;i<SSLIMIT*(int)gr_info->maxb;i++,in0++)
- *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */
- }
- break;
- case SINGLE_RIGHT:
- {
- register int i;
- register real *in0 = (real *) hybridIn[0],*in1 = (real *) hybridIn[1];
- for(i=0;i<SSLIMIT*(int)gr_info->maxb;i++)
- *in0++ = *in1++;
- }
- break;
- }
- }
-
- for(ch=0;ch<stereo1;ch++)
- {
- struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
- III_antialias(hybridIn[ch],gr_info);
- III_hybrid(hybridIn[ch], hybridOut[ch], ch,gr_info, fr);
- }
-
-#ifdef OPT_I486
- if(single != SINGLE_STEREO || fr->af.encoding != MPG123_ENC_SIGNED_16 || fr->down_sample != 0)
- {
-#endif
- for(ss=0;ss<SSLIMIT;ss++)
- {
- if(single != SINGLE_STEREO)
- clip += (fr->synth_mono)(hybridOut[0][ss], fr);
- else
- clip += (fr->synth_stereo)(hybridOut[0][ss], hybridOut[1][ss], fr);
-
- }
-#ifdef OPT_I486
- } else
- {
- /* Only stereo, 16 bits benefit from the 486 optimization. */
- ss=0;
- while(ss < SSLIMIT)
- {
- int n;
- n=(fr->buffer.size - fr->buffer.fill) / (2*2*32);
- if(n > (SSLIMIT-ss)) n=SSLIMIT-ss;
-
- /* Clip counting makes no sense with this function. */
- absynth_1to1_i486(hybridOut[0][ss], 0, fr, n);
- absynth_1to1_i486(hybridOut[1][ss], 1, fr, n);
- ss+=n;
- fr->buffer.fill+=(2*2*32)*n;
- }
- }
-#endif
- }
-
- return clip;
-}
diff --git a/src/mpg123/libmpg123/libmpg123.c b/src/mpg123/libmpg123/libmpg123.c
deleted file mode 100644
index b781f04..0000000
--- a/src/mpg123/libmpg123/libmpg123.c
+++ /dev/null
@@ -1,1673 +0,0 @@
-/*
- libmpg123: MPEG Audio Decoder library
-
- copyright 1995-2010 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
-
-*/
-
-#include "mpg123lib_intern.h"
-#include "icy2utf8.h"
-#include "debug.h"
-
-#ifdef GAPLESS
-#define SAMPLE_ADJUST(x) ((x) - ((mh->p.flags & MPG123_GAPLESS) ? mh->begin_os : 0))
-#define SAMPLE_UNADJUST(x) ((x) + ((mh->p.flags & MPG123_GAPLESS) ? mh->begin_os : 0))
-#else
-#define SAMPLE_ADJUST(x) (x)
-#define SAMPLE_UNADJUST(x) (x)
-#endif
-
-#define SEEKFRAME(mh) ((mh)->ignoreframe < 0 ? 0 : (mh)->ignoreframe)
-
-static int initialized = 0;
-
-#include "aligncheck.h"
-
-#ifdef GAPLESS
-/*
- Take the buffer after a frame decode (strictly: it is the data from frame fr->num!) and cut samples out.
- fr->buffer.fill may then be smaller than before...
-*/
-static void frame_buffercheck(mpg123_handle *fr)
-{
- /* When we have no accurate position, gapless code does not make sense. */
- if(!fr->accurate) return;
-
- /* Important: We first cut samples from the end, then cut from beginning (including left-shift of the buffer).
- This order works also for the case where firstframe == lastframe. */
-
- /* The last interesting (planned) frame: Only use some leading samples.
- Note a difference from the below: The last frame and offset are unchanges by seeks.
- The lastoff keeps being valid. */
- if(fr->lastframe > -1 && fr->num >= fr->lastframe)
- {
- /* There can be more than one frame of padding at the end, so we ignore the whole frame if we are beyond lastframe. */
- off_t byteoff = (fr->num == fr->lastframe) ? samples_to_bytes(fr, fr->lastoff) : 0;
- if((off_t)fr->buffer.fill > byteoff)
- {
- fr->buffer.fill = byteoff;
- }
- debug1("Cut frame buffer on end of stream, fill now %"SIZE_P" bytes.", (size_p)fr->buffer.fill);
- }
-
- /* The first interesting frame: Skip some leading samples. */
- if(fr->firstoff && fr->num == fr->firstframe)
- {
- off_t byteoff = samples_to_bytes(fr, fr->firstoff);
- if((off_t)fr->buffer.fill > byteoff)
- {
- fr->buffer.fill -= byteoff;
- /* buffer.p != buffer.data only for own buffer */
- debug6("cutting %li samples/%li bytes on begin, own_buffer=%i at %p=%p, buf[1]=%i",
- (long)fr->firstoff, (long)byteoff, fr->own_buffer, (void*)fr->buffer.p, (void*)fr->buffer.data, ((short*)fr->buffer.p)[2]);
- if(fr->own_buffer) fr->buffer.p = fr->buffer.data + byteoff;
- else memmove(fr->buffer.data, fr->buffer.data + byteoff, fr->buffer.fill);
- debug3("done cutting, buffer at %p =? %p, buf[1]=%i",
- (void*)fr->buffer.p, (void*)fr->buffer.data, ((short*)fr->buffer.p)[2]);
- }
- else fr->buffer.fill = 0;
- /* We can only reach this frame again by seeking. And on seeking, firstoff will be recomputed.
- So it is safe to null it here (and it makes the if() decision abort earlier). */
- fr->firstoff = 0;
- }
-}
-#endif
-
-int attribute_align_arg mpg123_init(void)
-{
- ALIGNCHECKK
- if((sizeof(short) != 2) || (sizeof(long) < 4)) return MPG123_BAD_TYPES;
-
- if(initialized) return MPG123_OK; /* no need to initialize twice */
-
-#ifndef NO_LAYER12
- init_layer12(); /* inits also shared tables with layer1 */
-#endif
-#ifndef NO_LAYER3
- init_layer3();
-#endif
- prepare_decode_tables();
- check_decoders();
- initialized = 1;
- return MPG123_OK;
-}
-
-void attribute_align_arg mpg123_exit(void)
-{
- /* nothing yet, but something later perhaps */
-}
-
-/* create a new handle with specified decoder, decoder can be "", "auto" or NULL for auto-detection */
-mpg123_handle attribute_align_arg *mpg123_new(const char* decoder, int *error)
-{
- return mpg123_parnew(NULL, decoder, error);
-}
-
-/* ...the full routine with optional initial parameters to override defaults. */
-mpg123_handle attribute_align_arg *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error)
-{
- mpg123_handle *fr = NULL;
- int err = MPG123_OK;
-#if (defined CCALIGN) && (defined NEED_ALIGNCHECK) && ((defined DEBUG) || (defined CHECK_ALIGN))
-#ifdef CCALIGN
- double ALIGNED(16) altest[4];
- if(((size_t)altest) % 16 != 0)
- {
- error("Stack variable is not aligned! Your combination of compiler/library is dangerous!");
- *error = MPG123_BAD_ALIGN;
- return NULL;
- }
-#endif
-#endif
- if(initialized) fr = (mpg123_handle*) malloc(sizeof(mpg123_handle));
- else err = MPG123_NOT_INITIALIZED;
- if(fr != NULL)
- {
- frame_init_par(fr, mp);
- debug("cpu opt setting");
- if(frame_cpu_opt(fr, decoder) != 1)
- {
- err = MPG123_BAD_DECODER;
- frame_exit(fr);
- free(fr);
- fr = NULL;
- }
- }
- if(fr != NULL)
- {
- /* Cleanup that mess! ... use mpg123_decoder / decode_update! */
- if(frame_outbuffer(fr) != 0)
- {
- err = MPG123_NO_BUFFERS;
- frame_exit(fr);
- free(fr);
- fr = NULL;
- }
- else
- {
- /* I smell cleanup here... with get_next_frame() */
-/* if(decode_update(fr) != 0)
- {
- err = fr->err != MPG123_OK ? fr->err : MPG123_BAD_DECODER;
- frame_exit(fr);
- free(fr);
- fr = NULL;
- }
- else */
- fr->decoder_change = 1;
- }
- }
- else if(err == MPG123_OK) err = MPG123_OUT_OF_MEM;
-
- if(error != NULL) *error = err;
- return fr;
-}
-
-int attribute_align_arg mpg123_decoder(mpg123_handle *mh, const char* decoder)
-{
- enum optdec dt = dectype(decoder);
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- if(dt == nodec)
- {
- mh->err = MPG123_BAD_DECODER;
- return MPG123_ERR;
- }
- if(dt == mh->cpu_opts.type) return MPG123_OK;
-
- /* Now really change. */
- /* frame_exit(mh);
- frame_init(mh); */
- debug("cpu opt setting");
- if(frame_cpu_opt(mh, decoder) != 1)
- {
- mh->err = MPG123_BAD_DECODER;
- frame_exit(mh);
- return MPG123_ERR;
- }
- /* New buffers for decoder are created in frame_buffers() */
- if((frame_outbuffer(mh) != 0))
- {
- mh->err = MPG123_NO_BUFFERS;
- frame_exit(mh);
- return MPG123_ERR;
- }
- /* I smell cleanup here... with get_next_frame() */
- decode_update(mh);
- mh->decoder_change = 1;
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_param(mpg123_handle *mh, enum mpg123_parms key, long val, double fval)
-{
- int r;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- r = mpg123_par(&mh->p, key, val, fval);
- if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; }
- else
- { /* Special treatment for some settings. */
-#ifdef FRAME_INDEX
- if(key == MPG123_INDEX_SIZE)
- { /* Apply frame index size and grow property on the fly. */
- r = frame_index_setup(mh);
- if(r != MPG123_OK) mh->err = MPG123_INDEX_FAIL;
- }
-#endif
- }
- return r;
-}
-
-int attribute_align_arg mpg123_par(mpg123_pars *mp, enum mpg123_parms key, long val, double fval)
-{
- int ret = MPG123_OK;
- ALIGNCHECKK
- if(mp == NULL) return MPG123_BAD_PARS;
- switch(key)
- {
- case MPG123_VERBOSE:
- mp->verbose = val;
- break;
- case MPG123_FLAGS:
-#ifndef GAPLESS
- if(val & MPG123_GAPLESS) ret = MPG123_NO_GAPLESS;
-#endif
- if(ret == MPG123_OK) mp->flags = val;
- debug1("set flags to 0x%lx", (unsigned long) mp->flags);
- break;
- case MPG123_ADD_FLAGS:
-#ifndef GAPLESS
- /* Enabling of gapless mode doesn't work when it's not there, but disabling (below) is no problem. */
- if(val & MPG123_GAPLESS) ret = MPG123_NO_GAPLESS;
- else
-#endif
- mp->flags |= val;
- debug1("set flags to 0x%lx", (unsigned long) mp->flags);
- break;
- case MPG123_REMOVE_FLAGS:
- mp->flags &= ~val;
- debug1("set flags to 0x%lx", (unsigned long) mp->flags);
- break;
- case MPG123_FORCE_RATE: /* should this trigger something? */
-#ifdef NO_NTOM
- if(val > 0)
- ret = MPG123_BAD_RATE;
-#else
- if(val > 96000) ret = MPG123_BAD_RATE;
- else mp->force_rate = val < 0 ? 0 : val; /* >0 means enable, 0 disable */
-#endif
- break;
- case MPG123_DOWN_SAMPLE:
-#ifdef NO_DOWNSAMPLE
- if(val != 0) ret = MPG123_BAD_RATE;
-#else
- if(val < 0 || val > 2) ret = MPG123_BAD_RATE;
- else mp->down_sample = (int)val;
-#endif
- break;
- case MPG123_RVA:
- if(val < 0 || val > MPG123_RVA_MAX) ret = MPG123_BAD_RVA;
- else mp->rva = (int)val;
- break;
- case MPG123_DOWNSPEED:
- mp->halfspeed = val < 0 ? 0 : val;
- break;
- case MPG123_UPSPEED:
- mp->doublespeed = val < 0 ? 0 : val;
- break;
- case MPG123_ICY_INTERVAL:
-#ifndef NO_ICY
- mp->icy_interval = val > 0 ? val : 0;
-#else
- if(val > 0) ret = MPG123_BAD_PARAM;
-#endif
- break;
- case MPG123_OUTSCALE:
- /* Choose the value that is non-zero, if any.
- Downscaling integers to 1.0 . */
- mp->outscale = val == 0 ? fval : (double)val/SHORT_SCALE;
- break;
- case MPG123_TIMEOUT:
-#ifdef TIMEOUT_READ
- mp->timeout = val >= 0 ? val : 0;
-#else
- if(val > 0) ret = MPG123_NO_TIMEOUT;
-#endif
- break;
- case MPG123_RESYNC_LIMIT:
- mp->resync_limit = val;
- break;
- case MPG123_INDEX_SIZE:
-#ifdef FRAME_INDEX
- mp->index_size = val;
-#else
- ret = MPG123_NO_INDEX;
-#endif
- break;
- case MPG123_PREFRAMES:
- if(val >= 0) mp->preframes = val;
- else ret = MPG123_BAD_VALUE;
- break;
- default:
- ret = MPG123_BAD_PARAM;
- }
- return ret;
-}
-
-int attribute_align_arg mpg123_getparam(mpg123_handle *mh, enum mpg123_parms key, long *val, double *fval)
-{
- int r;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- r = mpg123_getpar(&mh->p, key, val, fval);
- if(r != MPG123_OK){ mh->err = r; r = MPG123_ERR; }
- return r;
-}
-
-int attribute_align_arg mpg123_getpar(mpg123_pars *mp, enum mpg123_parms key, long *val, double *fval)
-{
- int ret = 0;
- ALIGNCHECKK
- if(mp == NULL) return MPG123_BAD_PARS;
- switch(key)
- {
- case MPG123_VERBOSE:
- if(val) *val = mp->verbose;
- break;
- case MPG123_FLAGS:
- case MPG123_ADD_FLAGS:
- if(val) *val = mp->flags;
- break;
- case MPG123_FORCE_RATE:
- if(val)
-#ifdef NO_NTOM
- *val = 0;
-#else
- *val = mp->force_rate;
-#endif
- break;
- case MPG123_DOWN_SAMPLE:
- if(val) *val = mp->down_sample;
- break;
- case MPG123_RVA:
- if(val) *val = mp->rva;
- break;
- case MPG123_DOWNSPEED:
- if(val) *val = mp->halfspeed;
- break;
- case MPG123_UPSPEED:
- if(val) *val = mp->doublespeed;
- break;
- case MPG123_ICY_INTERVAL:
-#ifndef NO_ICY
- if(val) *val = (long)mp->icy_interval;
-#else
- if(val) *val = 0;
-#endif
- break;
- case MPG123_OUTSCALE:
- if(fval) *fval = mp->outscale;
- if(val) *val = (long)(mp->outscale*SHORT_SCALE);
- break;
- case MPG123_RESYNC_LIMIT:
- if(val) *val = mp->resync_limit;
- break;
- case MPG123_INDEX_SIZE:
- if(val)
-#ifdef FRAME_INDEX
- *val = mp->index_size;
-#else
- *val = 0; /* graceful fallback: no index is index of zero size */
-#endif
- break;
- case MPG123_PREFRAMES:
- *val = mp->preframes;
- break;
- default:
- ret = MPG123_BAD_PARAM;
- }
- return ret;
-}
-
-int attribute_align_arg mpg123_getstate(mpg123_handle *mh, enum mpg123_state key, long *val, double *fval)
-{
- int ret = MPG123_OK;
- long theval = 0;
- double thefval = 0.;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- switch(key)
- {
- case MPG123_ACCURATE:
- theval = mh->accurate;
- break;
- default:
- mh->err = MPG123_BAD_KEY;
- ret = MPG123_ERR;
- }
-
- if(val != NULL) *val = theval;
- if(fval != NULL) *fval = thefval;
-
- return ret;
-}
-
-int attribute_align_arg mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if(band < 0 || band > 31){ mh->err = MPG123_BAD_BAND; return MPG123_ERR; }
- switch(channel)
- {
- case MPG123_LEFT|MPG123_RIGHT:
- mh->equalizer[0][band] = mh->equalizer[1][band] = DOUBLE_TO_REAL(val);
- break;
- case MPG123_LEFT: mh->equalizer[0][band] = DOUBLE_TO_REAL(val); break;
- case MPG123_RIGHT: mh->equalizer[1][band] = DOUBLE_TO_REAL(val); break;
- default:
- mh->err=MPG123_BAD_CHANNEL;
- return MPG123_ERR;
- }
- mh->have_eq_settings = TRUE;
- return MPG123_OK;
-}
-
-double attribute_align_arg mpg123_geteq(mpg123_handle *mh, enum mpg123_channels channel, int band)
-{
- double ret = 0.;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- /* Handle this gracefully. When there is no band, it has no volume. */
- if(band > -1 && band < 32)
- switch(channel)
- {
- case MPG123_LEFT|MPG123_RIGHT:
- ret = 0.5*(REAL_TO_DOUBLE(mh->equalizer[0][band])+REAL_TO_DOUBLE(mh->equalizer[1][band]));
- break;
- case MPG123_LEFT: ret = REAL_TO_DOUBLE(mh->equalizer[0][band]); break;
- case MPG123_RIGHT: ret = REAL_TO_DOUBLE(mh->equalizer[1][band]); break;
- /* Default case is already handled: ret = 0 */
- }
-
- return ret;
-}
-
-
-/* plain file access, no http! */
-int attribute_align_arg mpg123_open(mpg123_handle *mh, const char *path)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mpg123_close(mh);
- return open_stream(mh, path, -1);
-}
-
-int attribute_align_arg mpg123_open_fd(mpg123_handle *mh, int fd)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mpg123_close(mh);
- return open_stream(mh, NULL, fd);
-}
-
-int attribute_align_arg mpg123_open_handle(mpg123_handle *mh, void *iohandle)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mpg123_close(mh);
- if(mh->rdat.r_read_handle == NULL)
- {
- mh->err = MPG123_BAD_CUSTOM_IO;
- return MPG123_ERR;
- }
- return open_stream_handle(mh, iohandle);
-}
-
-int attribute_align_arg mpg123_open_feed(mpg123_handle *mh)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mpg123_close(mh);
- return open_feed(mh);
-}
-
-int attribute_align_arg mpg123_replace_reader( mpg123_handle *mh,
- ssize_t (*r_read) (int, void *, size_t),
- off_t (*r_lseek)(int, off_t, int) )
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mpg123_close(mh);
- mh->rdat.r_read = r_read;
- mh->rdat.r_lseek = r_lseek;
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_replace_reader_handle( mpg123_handle *mh,
- ssize_t (*r_read) (void*, void *, size_t),
- off_t (*r_lseek)(void*, off_t, int),
- void (*cleanup)(void*) )
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mpg123_close(mh);
- mh->rdat.r_read_handle = r_read;
- mh->rdat.r_lseek_handle = r_lseek;
- mh->rdat.cleanup_handle = cleanup;
- return MPG123_OK;
-}
-
-int decode_update(mpg123_handle *mh)
-{
- long native_rate;
- int b;
- ALIGNCHECK(mh);
- native_rate = frame_freq(mh);
-
- b = frame_output_format(mh); /* Select the new output format based on given constraints. */
- if(b < 0) return MPG123_ERR;
-
- if(b == 1) mh->new_format = 1; /* Store for later... */
-
- debug3("updating decoder structure with native rate %li and af.rate %li (new format: %i)", native_rate, mh->af.rate, mh->new_format);
- if(mh->af.rate == native_rate) mh->down_sample = 0;
- else if(mh->af.rate == native_rate>>1) mh->down_sample = 1;
- else if(mh->af.rate == native_rate>>2) mh->down_sample = 2;
- else mh->down_sample = 3; /* flexible (fixed) rate */
- switch(mh->down_sample)
- {
- case 0:
- case 1:
- case 2:
- mh->down_sample_sblimit = SBLIMIT>>(mh->down_sample);
- /* With downsampling I get less samples per frame */
- mh->outblock = samples_to_bytes(mh, (spf(mh)>>mh->down_sample));
- break;
-#ifndef NO_NTOM
- case 3:
- {
- if(synth_ntom_set_step(mh) != 0) return -1;
- if(frame_freq(mh) > mh->af.rate)
- {
- mh->down_sample_sblimit = SBLIMIT * mh->af.rate;
- mh->down_sample_sblimit /= frame_freq(mh);
- }
- else mh->down_sample_sblimit = SBLIMIT;
- mh->outblock = mh->af.encsize * mh->af.channels *
- ( ( NTOM_MUL-1+spf(mh)
- * (((size_t)NTOM_MUL*mh->af.rate)/frame_freq(mh))
- )/NTOM_MUL );
- }
- break;
-#endif
- }
-
- if(!(mh->p.flags & MPG123_FORCE_MONO))
- {
- if(mh->af.channels == 1) mh->single = SINGLE_MIX;
- else mh->single = SINGLE_STEREO;
- }
- else mh->single = (mh->p.flags & MPG123_FORCE_MONO)-1;
- if(set_synth_functions(mh) != 0) return -1;;
-
- do_rva(mh);
- debug3("done updating decoder structure with native rate %li and af.rate %li and down_sample %i", frame_freq(mh), mh->af.rate, mh->down_sample);
-
- return 0;
-}
-
-size_t attribute_align_arg mpg123_safe_buffer(void)
-{
- /* real is the largest possible output (it's 32bit float, 32bit int or 64bit double). */
- return sizeof(real)*2*1152*NTOM_MAX;
-}
-
-size_t attribute_align_arg mpg123_outblock(mpg123_handle *mh)
-{
- if(mh != NULL) return mh->outblock;
- else return mpg123_safe_buffer();
-}
-
-static int get_next_frame(mpg123_handle *mh)
-{
- int change = mh->decoder_change;
- do
- {
- int b;
- /* Decode & discard some frame(s) before beginning. */
- if(mh->to_ignore && mh->num < mh->firstframe && mh->num >= mh->ignoreframe)
- {
- debug1("ignoring frame %li", (long)mh->num);
- /* Decoder structure must be current! decode_update has been called before... */
- (mh->do_layer)(mh); mh->buffer.fill = 0;
-#ifndef NO_NTOM
- /* The ignored decoding may have failed. Make sure ntom stays consistent. */
- if(mh->down_sample == 3) ntom_set_ntom(mh, mh->num+1);
-#endif
- mh->to_ignore = mh->to_decode = FALSE;
- }
- /* Read new frame data; possibly breaking out here for MPG123_NEED_MORE. */
- debug("read frame");
- mh->to_decode = FALSE;
- b = read_frame(mh); /* That sets to_decode only if a full frame was read. */
- debug4("read of frame %li returned %i (to_decode=%i) at sample %li", (long)mh->num, b, mh->to_decode, (long)mpg123_tell(mh));
- if(b == MPG123_NEED_MORE) return MPG123_NEED_MORE; /* need another call with data */
- else if(b <= 0)
- {
- /* More sophisticated error control? */
- if(b==0 || mh->rdat.filepos == mh->rdat.filelen)
- { /* We simply reached the end. */
- mh->track_frames = mh->num + 1;
- debug("What about updating/checking gapless sample count here?");
- return MPG123_DONE;
- }
- else return MPG123_ERR; /* Some real error. */
- }
- /* Now, there should be new data to decode ... and also possibly new stream properties */
- if(mh->header_change > 1)
- {
- debug("big header change");
- change = 1;
- }
- /* Now some accounting: Look at the numbers and decide if we want this frame. */
- ++mh->playnum;
- /* Plain skipping without decoding, only when frame is not ignored on next cycle. */
- if(mh->num < mh->firstframe || (mh->p.doublespeed && (mh->playnum % mh->p.doublespeed)))
- {
- if(!(mh->to_ignore && mh->num < mh->firstframe && mh->num >= mh->ignoreframe))
- {
- frame_skip(mh);
- /* Should one fix NtoM here or not?
- It is not work the trouble for doublespeed, but what with leading frames? */
- }
- }
- /* Or, we are finally done and have a new frame. */
- else break;
- } while(1);
-
- if(change)
- {
- if(decode_update(mh) < 0) /* dito... */
- return MPG123_ERR;
-
-debug1("new format: %i", mh->new_format);
-
- mh->decoder_change = 0;
- if(mh->fresh)
- {
-#ifdef GAPLESS
- int b=0;
- /* Prepare offsets for gapless decoding. */
- debug1("preparing gapless stuff with native rate %li", frame_freq(mh));
- frame_gapless_realinit(mh);
- frame_set_frameseek(mh, mh->num);
-#endif
- mh->fresh = 0;
-#ifdef GAPLESS
- /* Could this possibly happen? With a real big gapless offset... */
- if(mh->num < mh->firstframe) b = get_next_frame(mh);
- if(b < 0) return b; /* Could be error, need for more, new format... */
-#endif
- }
- }
- return MPG123_OK;
-}
-
-/* Assumption: A buffer full of zero samples can be constructed by repetition of this byte.
- Only to be used by decode_the_frame() ... */
-static int zero_byte(mpg123_handle *fr)
-{
-#ifndef NO_8BIT
- return fr->af.encoding & MPG123_ENC_8 ? fr->conv16to8[0] : 0;
-#else
- return 0; /* All normal signed formats have the zero here (even in byte form -- that may be an assumption for your funny machine...). */
-#endif
-}
-
-/*
- Not part of the api. This just decodes the frame and fills missing bits with zeroes.
- There can be frames that are broken and thus make do_layer() fail.
-*/
-void decode_the_frame(mpg123_handle *fr)
-{
- size_t needed_bytes = samples_to_bytes(fr, frame_expect_outsamples(fr)); fr->clip += (fr->do_layer)(fr);
- /*fprintf(stderr, "frame %"OFF_P": got %"SIZE_P" / %"SIZE_P"\n", fr->num,(size_p)fr->buffer.fill, (size_p)needed_bytes);*/
- /* There could be less data than promised.
- Also, then debugging, we look out for coding errors that could result in _more_ data than expected. */
-#ifdef DEBUG
- if(fr->buffer.fill != needed_bytes)
- {
-#endif
- if(fr->buffer.fill < needed_bytes)
- {
- if(VERBOSE2)
- fprintf(stderr, "Note: broken frame %li, filling up with %"SIZE_P" zeroes, from %"SIZE_P"\n", (long)fr->num, (size_p)(needed_bytes-fr->buffer.fill), (size_p)fr->buffer.fill);
-
- /*
- One could do a loop with individual samples instead... but zero is zero
- Actually, that is wrong: zero is mostly a series of null bytes,
- but we have funny 8bit formats that have a different opinion on zero...
- Unsigned 16 or 32 bit formats are handled later.
- */
- memset( fr->buffer.data + fr->buffer.fill, zero_byte(fr), needed_bytes - fr->buffer.fill );
-
- fr->buffer.fill = needed_bytes;
-#ifndef NO_NTOM
- /* ntom_val will be wrong when the decoding wasn't carried out completely */
- ntom_set_ntom(fr, fr->num+1);
-#endif
- }
-#ifdef DEBUG
- else
- {
- if(NOQUIET)
- error2("I got _more_ bytes than expected (%"SIZE_P" / %"SIZE_P"), that should not be possible!", (size_p)fr->buffer.fill, (size_p)needed_bytes);
- }
- }
-#endif
- /* Handle unsigned output formats via reshifting after decode here. */
-#ifndef NO_32BIT
- if(fr->af.encoding == MPG123_ENC_UNSIGNED_32)
- { /* 32bit signed -> unsigned */
- size_t i;
- int32_t *ssamples;
- uint32_t *usamples;
- ssamples = (int32_t*)fr->buffer.data;
- usamples = (uint32_t*)fr->buffer.data;
- debug("converting output to unsigned 32 bit integer");
- for(i=0; i<fr->buffer.fill/sizeof(int32_t); ++i)
- {
- /* Different strategy since we don't have a larger type at hand.
- Also watch out for silly +-1 fun because integer constants are signed in C90! */
- if(ssamples[i] >= 0)
- usamples[i] = (uint32_t)ssamples[i] + 2147483647+1;
- /* The smalles value goes zero. */
- else if(ssamples[i] == ((int32_t)-2147483647-1))
- usamples[i] = 0;
- /* Now -value is in the positive range of signed int ... so it's a possible value at all. */
- else
- usamples[i] = (uint32_t)2147483647+1 - (uint32_t)(-ssamples[i]);
- }
- }
-#endif
-#ifndef NO_16BIT
- if(fr->af.encoding == MPG123_ENC_UNSIGNED_16)
- {
- size_t i;
- short *ssamples;
- unsigned short *usamples;
- ssamples = (short*)fr->buffer.data;
- usamples = (unsigned short*)fr->buffer.data;
- debug("converting output to unsigned 16 bit integer");
- for(i=0; i<fr->buffer.fill/sizeof(short); ++i)
- {
- long tmp = (long)ssamples[i]+32768;
- usamples[i] = (unsigned short)tmp;
- }
- }
-#endif
-}
-
-/*
- Decode the current frame into the frame structure's buffer, accessible at the location stored in <audio>, with <bytes> bytes available.
- <num> will contain the last decoded frame number. This function should be called after mpg123_framebyframe_next positioned the stream at a
- valid mp3 frame. The buffer contents will get lost on the next call to mpg123_framebyframe_next or mpg123_framebyframe_decode.
- returns
- MPG123_OK -- successfully decoded or ignored the frame, you get your output data or in case of ignored frames 0 bytes
- MPG123_DONE -- decoding finished, should not happen
- MPG123_ERR -- some error occured.
- MPG123_ERR_NULL -- audio or bytes are not pointing to valid storage addresses
- MPG123_BAD_HANDLE -- mh has not been initialized
- MPG123_NO_SPACE -- not enough space in buffer for safe decoding, should not happen
-*/
-int attribute_align_arg mpg123_framebyframe_decode(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes)
-{
- ALIGNCHECK(mh);
- if(bytes == NULL) return MPG123_ERR_NULL;
- if(audio == NULL) return MPG123_ERR_NULL;
- if(mh == NULL) return MPG123_BAD_HANDLE;
- if(mh->buffer.size < mh->outblock) return MPG123_NO_SPACE;
-
- *bytes = 0;
- mh->buffer.fill = 0; /* always start fresh */
- if(!mh->to_decode) return MPG123_OK;
-
- if(num != NULL) *num = mh->num;
- debug("decoding");
- decode_the_frame(mh);
- mh->to_decode = mh->to_ignore = FALSE;
- mh->buffer.p = mh->buffer.data;
-#ifdef GAPLESS
- /* This checks for individual samples to skip, for gapless mode or sample-accurate seek. */
- frame_buffercheck(mh);
-#endif
- *audio = mh->buffer.p;
- *bytes = mh->buffer.fill;
- return MPG123_OK;
-}
-
-/*
- Find, read and parse the next mp3 frame while skipping junk and parsing id3 tags, lame headers, etc.
- Prepares everything for decoding using mpg123_framebyframe_decode.
- returns
- MPG123_OK -- new frame was read and parsed, call mpg123_framebyframe_decode to actually decode
- MPG123_NEW_FORMAT -- new frame was read, it results in changed output format, call mpg123_framebyframe_decode to actually decode
- MPG123_BAD_HANDLE -- mh has not been initialized
- MPG123_NEED_MORE -- more input data is needed to advance to the next frame. supply more input data using mpg123_feed
-*/
-int attribute_align_arg mpg123_framebyframe_next(mpg123_handle *mh)
-{
- int b;
- if(mh == NULL) return MPG123_BAD_HANDLE;
-
- mh->to_decode = mh->to_ignore = FALSE;
- mh->buffer.fill = 0;
-
- b = get_next_frame(mh);
- if(b < 0) return b;
- debug1("got next frame, %i", mh->to_decode);
-
- /* mpg123_framebyframe_decode will return MPG123_OK with 0 bytes decoded if mh->to_decode is 0 */
- if(!mh->to_decode)
- return MPG123_OK;
-
- if(mh->new_format)
- {
- debug("notifiying new format");
- mh->new_format = 0;
- return MPG123_NEW_FORMAT;
- }
-
- return MPG123_OK;
-}
-
-/*
- Put _one_ decoded frame into the frame structure's buffer, accessible at the location stored in <audio>, with <bytes> bytes available.
- The buffer contents will be lost on next call to mpg123_decode_frame.
- MPG123_OK -- successfully decoded the frame, you get your output data
- MPg123_DONE -- This is it. End.
- MPG123_ERR -- some error occured...
- MPG123_NEW_FORMAT -- new frame was read, it results in changed output format -> will be decoded on next call
- MPG123_NEED_MORE -- that should not happen as this function is intended for in-library stream reader but if you force it...
- MPG123_NO_SPACE -- not enough space in buffer for safe decoding, also should not happen
-
- num will be updated to the last decoded frame number (may possibly _not_ increase, p.ex. when format changed).
-*/
-int attribute_align_arg mpg123_decode_frame(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes)
-{
- ALIGNCHECK(mh);
- if(bytes != NULL) *bytes = 0;
- if(mh == NULL) return MPG123_ERR;
- if(mh->buffer.size < mh->outblock) return MPG123_NO_SPACE;
- mh->buffer.fill = 0; /* always start fresh */
- while(TRUE)
- {
- /* decode if possible */
- if(mh->to_decode)
- {
- if(mh->new_format)
- {
- debug("notifiying new format");
- mh->new_format = 0;
- return MPG123_NEW_FORMAT;
- }
- if(num != NULL) *num = mh->num;
- debug("decoding");
-
- decode_the_frame(mh);
-
- mh->to_decode = mh->to_ignore = FALSE;
- mh->buffer.p = mh->buffer.data;
-#ifdef GAPLESS
- /* This checks for individual samples to skip, for gapless mode or sample-accurate seek. */
- frame_buffercheck(mh);
-#endif
- if(audio != NULL) *audio = mh->buffer.p;
- if(bytes != NULL) *bytes = mh->buffer.fill;
-
- return MPG123_OK;
- }
- else
- {
- int b = get_next_frame(mh);
- if(b < 0) return b;
- debug1("got next frame, %i", mh->to_decode);
- }
- }
-}
-
-int attribute_align_arg mpg123_read(mpg123_handle *mh, unsigned char *out, size_t size, size_t *done)
-{
- return mpg123_decode(mh, NULL, 0, out, size, done);
-}
-
-int attribute_align_arg mpg123_feed(mpg123_handle *mh, const unsigned char *in, size_t size)
-{
- if(mh == NULL) return MPG123_ERR;
- if(size > 0)
- {
- if(in != NULL)
- {
- if(feed_more(mh, in, size) != 0) return MPG123_ERR;
- else
- {
- /* The need for more data might have triggered an error.
- This one is outdated now with the new data. */
- if(mh->err == MPG123_ERR_READER) mh->err = MPG123_OK;
-
- return MPG123_OK;
- }
- }
- else
- {
- mh->err = MPG123_NULL_BUFFER;
- return MPG123_ERR;
- }
- }
- return MPG123_OK;
-}
-
-/*
- The old picture:
- while(1) {
- len = read(0,buf,16384);
- if(len <= 0)
- break;
- ret = decodeMP3(&mp,buf,len,out,8192,&size);
- while(ret == MP3_OK) {
- write(1,out,size);
- ret = decodeMP3(&mp,NULL,0,out,8192,&size);
- }
- }
-*/
-
-int attribute_align_arg mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmemsize, unsigned char *outmemory, size_t outmemsize, size_t *done)
-{
- int ret = MPG123_OK;
- size_t mdone = 0;
- ALIGNCHECK(mh);
- if(done != NULL) *done = 0;
- if(mh == NULL) return MPG123_ERR;
- if(inmemsize > 0 && mpg123_feed(mh, inmemory, inmemsize) != MPG123_OK)
- {
- ret = MPG123_ERR;
- goto decodeend;
- }
- if(outmemory == NULL) outmemsize = 0; /* Not just give error, give chance to get a status message. */
-
- while(ret == MPG123_OK)
- {
- debug4("decode loop, fill %i (%li vs. %li); to_decode: %i", (int)mh->buffer.fill, (long)mh->num, (long)mh->firstframe, mh->to_decode);
- /* Decode a frame that has been read before.
- This only happens when buffer is empty! */
- if(mh->to_decode)
- {
- if(mh->new_format)
- {
- debug("notifiying new format");
- mh->new_format = 0;
- ret = MPG123_NEW_FORMAT;
- goto decodeend;
- }
- if(mh->buffer.size - mh->buffer.fill < mh->outblock)
- {
- ret = MPG123_NO_SPACE;
- goto decodeend;
- }
- decode_the_frame(mh);
- mh->to_decode = mh->to_ignore = FALSE;
- mh->buffer.p = mh->buffer.data;
- debug2("decoded frame %li, got %li samples in buffer", (long)mh->num, (long)(mh->buffer.fill / (samples_to_bytes(mh, 1))));
-#ifdef GAPLESS
- frame_buffercheck(mh); /* Seek & gapless. */
-#endif
- }
- if(mh->buffer.fill) /* Copy (part of) the decoded data to the caller's buffer. */
- {
- /* get what is needed - or just what is there */
- int a = mh->buffer.fill > (outmemsize - mdone) ? outmemsize - mdone : mh->buffer.fill;
- debug4("buffer fill: %i; copying %i (%i - %li)", (int)mh->buffer.fill, a, (int)outmemsize, (long)mdone);
- memcpy(outmemory, mh->buffer.p, a);
- /* less data in frame buffer, less needed, output pointer increase, more data given... */
- mh->buffer.fill -= a;
- outmemory += a;
- mdone += a;
- mh->buffer.p += a;
- if(!(outmemsize > mdone)) goto decodeend;
- }
- else /* If we didn't have data, get a new frame. */
- {
- int b = get_next_frame(mh);
- if(b < 0){ ret = b; goto decodeend; }
- }
- }
-decodeend:
- if(done != NULL) *done = mdone;
- return ret;
-}
-
-long attribute_align_arg mpg123_clip(mpg123_handle *mh)
-{
- long ret = 0;
- ALIGNCHECK(mh);
- if(mh != NULL)
- {
- ret = mh->clip;
- mh->clip = 0;
- }
- return ret;
-}
-
-#define track_need_init(mh) (!(mh)->to_decode && (mh)->fresh)
-
-static int init_track(mpg123_handle *mh)
-{
- if(track_need_init(mh))
- {
- /* Fresh track, need first frame for basic info. */
- int b = get_next_frame(mh);
- if(b < 0) return b;
- }
- return 0;
-}
-
-int attribute_align_arg mpg123_getformat(mpg123_handle *mh, long *rate, int *channels, int *encoding)
-{
- int b;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- b = init_track(mh);
- if(b < 0) return b;
-
- if(rate != NULL) *rate = mh->af.rate;
- if(channels != NULL) *channels = mh->af.channels;
- if(encoding != NULL) *encoding = mh->af.encoding;
- mh->new_format = 0;
- return MPG123_OK;
-}
-
-off_t attribute_align_arg mpg123_timeframe(mpg123_handle *mh, double seconds)
-{
- off_t b;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- b = init_track(mh);
- if(b<0) return b;
- return (off_t)(seconds/mpg123_tpf(mh));
-}
-
-/*
- Now, where are we? We need to know the last decoded frame... and what's left of it in buffer.
- The current frame number can mean the last decoded frame or the to-be-decoded frame.
- If mh->to_decode, then mh->num frames have been decoded, the frame mh->num now coming next.
- If not, we have the possibility of mh->num+1 frames being decoded or nothing at all.
- Then, there is firstframe...when we didn't reach it yet, then the next data will come from there.
- mh->num starts with -1
-*/
-off_t attribute_align_arg mpg123_tell(mpg123_handle *mh)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if(track_need_init(mh)) return 0;
- /* Now we have all the info at hand. */
- debug5("tell: %li/%i first %li buffer %lu; frame_outs=%li", (long)mh->num, mh->to_decode, (long)mh->firstframe, (unsigned long)mh->buffer.fill, (long)frame_outs(mh, mh->num));
-
- { /* Funny block to keep C89 happy. */
- off_t pos = 0;
- if((mh->num < mh->firstframe) || (mh->num == mh->firstframe && mh->to_decode))
- { /* We are at the beginning, expect output from firstframe on. */
- pos = frame_outs(mh, mh->firstframe);
-#ifdef GAPLESS
- pos += mh->firstoff;
-#endif
- }
- else if(mh->to_decode)
- { /* We start fresh with this frame. Buffer should be empty, but we make sure to count it in. */
- pos = frame_outs(mh, mh->num) - bytes_to_samples(mh, mh->buffer.fill);
- }
- else
- { /* We serve what we have in buffer and then the beginning of next frame... */
- pos = frame_outs(mh, mh->num+1) - bytes_to_samples(mh, mh->buffer.fill);
- }
- /* Substract padding and delay from the beginning. */
- pos = SAMPLE_ADJUST(pos);
- /* Negative sample offsets are not right, less than nothing is still nothing. */
- return pos>0 ? pos : 0;
- }
-}
-
-off_t attribute_align_arg mpg123_tellframe(mpg123_handle *mh)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if(mh->num < mh->firstframe) return mh->firstframe;
- if(mh->to_decode) return mh->num;
- /* Consider firstoff? */
- return mh->buffer.fill ? mh->num : mh->num + 1;
-}
-
-off_t attribute_align_arg mpg123_tell_stream(mpg123_handle *mh)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- /* mh->rd is at least a bad_reader, so no worry. */
- return mh->rd->tell(mh);
-}
-
-static int do_the_seek(mpg123_handle *mh)
-{
- int b;
- off_t fnum = SEEKFRAME(mh);
- mh->buffer.fill = 0;
-
- /* If we are inside the ignoreframe - firstframe window, we may get away without actual seeking. */
- if(mh->num < mh->firstframe)
- {
- mh->to_decode = FALSE; /* In any case, don't decode the current frame, perhaps ignore instead. */
- if(mh->num > fnum) return MPG123_OK;
- }
-
- /* If we are already there, we are fine either for decoding or for ignoring. */
- if(mh->num == fnum && (mh->to_decode || fnum < mh->firstframe)) return MPG123_OK;
- /* We have the frame before... just go ahead as normal. */
- if(mh->num == fnum-1)
- {
- mh->to_decode = FALSE;
- return MPG123_OK;
- }
-
- /* OK, real seeking follows... clear buffers and go for it. */
- frame_buffers_reset(mh);
-#ifndef NO_NTOM
- if(mh->down_sample == 3)
- {
- ntom_set_ntom(mh, fnum);
- debug3("fixed ntom for frame %"OFF_P" to %lu, num=%"OFF_P, (off_p)fnum, mh->ntom_val[0], (off_p)mh->num);
- }
-#endif
- b = mh->rd->seek_frame(mh, fnum);
- debug1("seek_frame returned: %i", b);
- if(b<0) return b;
- /* Only mh->to_ignore is TRUE. */
- if(mh->num < mh->firstframe) mh->to_decode = FALSE;
-
- mh->playnum = mh->num;
- return 0;
-}
-
-off_t attribute_align_arg mpg123_seek(mpg123_handle *mh, off_t sampleoff, int whence)
-{
- int b;
- off_t pos;
- ALIGNCHECK(mh);
- pos = mpg123_tell(mh); /* adjusted samples */
- /* pos < 0 also can mean that simply a former seek failed at the lower levels.
- In that case, we only allow absolute seeks. */
- if(pos < 0 && whence != SEEK_SET)
- { /* Unless we got the obvious error of NULL handle, this is a special seek failure. */
- if(mh != NULL) mh->err = MPG123_NO_RELSEEK;
- return MPG123_ERR;
- }
- if((b=init_track(mh)) < 0) return b;
- switch(whence)
- {
- case SEEK_CUR: pos += sampleoff; break;
- case SEEK_SET: pos = sampleoff; break;
- case SEEK_END:
- /* When we do not know the end already, we can try to find it. */
- if(mh->track_frames < 1 && (mh->rdat.flags & READER_SEEKABLE))
- mpg123_scan(mh);
-#ifdef GAPLESS
- if(mh->end_os > 0) pos = SAMPLE_ADJUST(mh->end_os) - sampleoff;
-#else
- if(mh->track_frames > 0) pos = SAMPLE_ADJUST(frame_outs(mh, mh->track_frames)) - sampleoff;
-#endif
- else
- {
- mh->err = MPG123_NO_SEEK_FROM_END;
- return MPG123_ERR;
- }
- break;
- default: mh->err = MPG123_BAD_WHENCE; return MPG123_ERR;
- }
- if(pos < 0) pos = 0;
- /* pos now holds the wanted sample offset in adjusted samples */
- frame_set_seek(mh, SAMPLE_UNADJUST(pos));
- pos = do_the_seek(mh);
- if(pos < 0) return pos;
-
- return mpg123_tell(mh);
-}
-
-/*
- A bit more tricky... libmpg123 does not do the seeking itself.
- All it can do is to ignore frames until the wanted one is there.
- The caller doesn't know where a specific frame starts and mpg123 also only knows the general region after it scanned the file.
- Well, it is tricky...
-*/
-off_t attribute_align_arg mpg123_feedseek(mpg123_handle *mh, off_t sampleoff, int whence, off_t *input_offset)
-{
- int b;
- off_t pos;
- ALIGNCHECK(mh);
- pos = mpg123_tell(mh); /* adjusted samples */
- debug3("seek from %li to %li (whence=%i)", (long)pos, (long)sampleoff, whence);
- /* The special seek error handling does not apply here... there is no lowlevel I/O. */
- if(pos < 0) return pos; /* mh == NULL is covered in mpg123_tell() */
- if(input_offset == NULL)
- {
- mh->err = MPG123_NULL_POINTER;
- return MPG123_ERR;
- }
-
- if((b=init_track(mh)) < 0) return b; /* May need more to do anything at all. */
-
- switch(whence)
- {
- case SEEK_CUR: pos += sampleoff; break;
- case SEEK_SET: pos = sampleoff; break;
- case SEEK_END:
-#ifdef GAPLESS
- if(mh->end_os >= 0) pos = SAMPLE_ADJUST(mh->end_os) - sampleoff;
-#else
- if(mh->track_frames > 0) pos = SAMPLE_ADJUST(frame_outs(mh, mh->track_frames)) - sampleoff;
-#endif
- else
- {
- mh->err = MPG123_NO_SEEK_FROM_END;
- return MPG123_ERR;
- }
- break;
- default: mh->err = MPG123_BAD_WHENCE; return MPG123_ERR;
- }
- if(pos < 0) pos = 0;
- frame_set_seek(mh, SAMPLE_UNADJUST(pos));
- pos = SEEKFRAME(mh);
- mh->buffer.fill = 0;
-
- /* Shortcuts without modifying input stream. */
- *input_offset = mh->rdat.buffer.fileoff + mh->rdat.buffer.size;
- if(mh->num < mh->firstframe) mh->to_decode = FALSE;
- if(mh->num == pos && mh->to_decode) goto feedseekend;
- if(mh->num == pos-1) goto feedseekend;
- /* Whole way. */
- *input_offset = feed_set_pos(mh, frame_index_find(mh, SEEKFRAME(mh), &pos));
- mh->num = pos-1; /* The next read frame will have num = pos. */
- if(*input_offset < 0) return MPG123_ERR;
-
-feedseekend:
- return mpg123_tell(mh);
-}
-
-off_t attribute_align_arg mpg123_seek_frame(mpg123_handle *mh, off_t offset, int whence)
-{
- int b;
- off_t pos = 0;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if((b=init_track(mh)) < 0) return b;
-
- /* Could play games here with to_decode... */
- pos = mh->num;
- switch(whence)
- {
- case SEEK_CUR: pos += offset; break;
- case SEEK_SET: pos = offset; break;
- case SEEK_END:
- if(mh->track_frames > 0) pos = mh->track_frames - offset;
- else
- {
- mh->err = MPG123_NO_SEEK_FROM_END;
- return MPG123_ERR;
- }
- break;
- default:
- mh->err = MPG123_BAD_WHENCE;
- return MPG123_ERR;
- }
- if(pos < 0) pos = 0;
- /* Hm, do we need to seek right past the end? */
- else if(mh->track_frames > 0 && pos >= mh->track_frames) pos = mh->track_frames;
-
- frame_set_frameseek(mh, pos);
- pos = do_the_seek(mh);
- if(pos < 0) return pos;
-
- return mpg123_tellframe(mh);
-}
-
-int attribute_align_arg mpg123_set_filesize(mpg123_handle *mh, off_t size)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-
- mh->rdat.filelen = size;
- return MPG123_OK;
-}
-
-off_t attribute_align_arg mpg123_length(mpg123_handle *mh)
-{
- int b;
- off_t length;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- b = init_track(mh);
- if(b<0) return b;
- if(mh->track_samples > -1) length = mh->track_samples;
- else if(mh->track_frames > 0) length = mh->track_frames*spf(mh);
- else if(mh->rdat.filelen > 0) /* Let the case of 0 length just fall through. */
- {
- /* A bad estimate. Ignoring tags 'n stuff. */
- double bpf = mh->mean_framesize ? mh->mean_framesize : compute_bpf(mh);
- length = (off_t)((double)(mh->rdat.filelen)/bpf*spf(mh));
- }
- else if(mh->rdat.filelen == 0) return mpg123_tell(mh); /* we could be in feeder mode */
- else return MPG123_ERR; /* No length info there! */
-
- debug1("mpg123_length: internal sample length: %"OFF_P, (off_p)length);
-
- length = frame_ins2outs(mh, length);
- debug1("mpg123_length: external sample length: %"OFF_P, (off_p)length);
-#ifdef GAPLESS
- if(mh->p.flags & MPG123_GAPLESS)
- {
- debug2("mpg123_length: begin_os = %"OFF_P", end_os = %"OFF_P, (off_p)mh->begin_os, (off_p)mh->end_os);
- if(mh->end_os > 0 && length > mh->end_os) length = mh->end_os;
- length -= mh->begin_os;
- debug1("mpg123_length: after gapless correction: %"OFF_P, (off_p)length);
- }
-#endif
- return length;
-}
-
-int attribute_align_arg mpg123_scan(mpg123_handle *mh)
-{
- int b;
- off_t backframe;
- int to_decode, to_ignore;
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if(!(mh->rdat.flags & READER_SEEKABLE)){ mh->err = MPG123_NO_SEEK; return MPG123_ERR; }
- /* Scan through the _whole_ file, since the current position is no count but computed assuming constant samples per frame. */
- /* Also, we can just keep the current buffer and seek settings. Just operate on input frames here. */
- debug("issuing scan");
- b = init_track(mh); /* mh->num >= 0 !! */
- if(b<0)
- {
- if(b == MPG123_DONE) return MPG123_OK;
- else return MPG123_ERR; /* Must be error here, NEED_MORE is not for seekable streams. */
- }
- backframe = mh->num;
- to_decode = mh->to_decode;
- to_ignore = mh->to_ignore;
- b = mh->rd->seek_frame(mh, 0);
- if(b<0 || mh->num != 0) return MPG123_ERR;
- /* One frame must be there now. */
- mh->track_frames = 1;
- mh->track_samples = spf(mh); /* Internal samples. */
- debug("TODO: We should disable gapless code when encountering inconsistent spf(mh)!");
- while(read_frame(mh) == 1)
- {
- ++mh->track_frames;
- mh->track_samples += spf(mh);
- }
- debug2("Scanning yielded %"OFF_P" track samples, %"OFF_P" frames.", (off_p)mh->track_samples, (off_p)mh->track_frames);
-#ifdef GAPLESS
- /* Also, think about usefulness of that extra value track_samples ... it could be used for consistency checking. */
- frame_gapless_update(mh, mh->track_samples);
-#endif
- b = mh->rd->seek_frame(mh, backframe);
- if(b<0 || mh->num != backframe) return MPG123_ERR;
- mh->to_decode = to_decode;
- mh->to_ignore = to_ignore;
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_meta_check(mpg123_handle *mh)
-{
- if(mh != NULL) return mh->metaflags;
- else return 0;
-}
-
-int attribute_align_arg mpg123_id3(mpg123_handle *mh, mpg123_id3v1 **v1, mpg123_id3v2 **v2)
-{
- ALIGNCHECK(mh);
- if(v1 != NULL) *v1 = NULL;
- if(v2 != NULL) *v2 = NULL;
- if(mh == NULL) return MPG123_ERR;
-
- if(mh->metaflags & MPG123_ID3)
- {
- id3_link(mh);
- if(v1 != NULL && mh->rdat.flags & READER_ID3TAG) *v1 = (mpg123_id3v1*) mh->id3buf;
- if(v2 != NULL)
-#ifdef NO_ID3V2
- *v2 = NULL;
-#else
- *v2 = &mh->id3v2;
-#endif
-
- mh->metaflags |= MPG123_ID3;
- mh->metaflags &= ~MPG123_NEW_ID3;
- }
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_icy(mpg123_handle *mh, char **icy_meta)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-#ifndef NO_ICY
- if(icy_meta == NULL)
- {
- mh->err = MPG123_NULL_POINTER;
- return MPG123_ERR;
- }
- *icy_meta = NULL;
-
- if(mh->metaflags & MPG123_ICY)
- {
- *icy_meta = mh->icy.data;
- mh->metaflags |= MPG123_ICY;
- mh->metaflags &= ~MPG123_NEW_ICY;
- }
- return MPG123_OK;
-#else
- mh->err = MPG123_MISSING_FEATURE;
- return MPG123_ERR;
-#endif
-}
-
-/*
- Simple utility functions that do not possibly call code with extra alignment requirements do not use the ALIGNCHECK.
- I am aware of the chance that the compiler could have introduced such code outside assembly functions, but such a modern compiler (gcc) can also honour attribute_align_arg.
-*/
-
-char* attribute_align_arg mpg123_icy2utf8(const char* icy_text)
-{
-#ifndef NO_ICY
- return icy2utf8(icy_text, 0);
-#else
- return NULL;
-#endif
-}
-
-/* That one is always defined... it's not worth it to remove it for NO_ID3V2. */
-enum mpg123_text_encoding attribute_align_arg mpg123_enc_from_id3(unsigned char id3_enc_byte)
-{
- switch(id3_enc_byte)
- {
- case mpg123_id3_latin1: return mpg123_text_latin1;
- case mpg123_id3_utf16bom: return mpg123_text_utf16bom; /* ID3v2.3 has UCS-2 with BOM here. */
- case mpg123_id3_utf16be: return mpg123_text_utf16be;
- case mpg123_id3_utf8: return mpg123_text_utf8;
- default: return mpg123_text_unknown;
- }
-}
-
-#ifndef NO_STRING
-int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size)
-{
- switch(enc)
- {
-#ifndef NO_ID3V2
- /* The encodings we get from ID3v2 tags. */
- case mpg123_text_utf8:
- id3_to_utf8(sb, mpg123_id3_utf8, source, source_size, 0);
- break;
- case mpg123_text_latin1:
- id3_to_utf8(sb, mpg123_id3_latin1, source, source_size, 0);
- break;
- case mpg123_text_utf16bom:
- case mpg123_text_utf16:
- id3_to_utf8(sb, mpg123_id3_utf16bom, source, source_size, 0);
- break;
- /* Special because one cannot skip zero bytes here. */
- case mpg123_text_utf16be:
- id3_to_utf8(sb, mpg123_id3_utf16be, source, source_size, 0);
- break;
-#endif
-#ifndef NO_ICY
- /* ICY encoding... */
- case mpg123_text_icy:
- case mpg123_text_cp1252:
- {
- mpg123_free_string(sb);
- /* Paranoia: Make sure that the string ends inside the buffer... */
- if(source[source_size-1] == 0)
- {
- /* Convert from ICY encoding... with force applied or not. */
- char *tmpstring = icy2utf8((const char*)source, enc == mpg123_text_cp1252 ? 1 : 0);
- if(tmpstring != NULL)
- {
- mpg123_set_string(sb, tmpstring);
- free(tmpstring);
- }
- }
- }
- break;
-#endif
- default:
- mpg123_free_string(sb);
- }
- /* At least a trailing null of some form should be there... */
- return (sb->fill > 0) ? 1 : 0;
-}
-#endif
-
-int attribute_align_arg mpg123_index(mpg123_handle *mh, off_t **offsets, off_t *step, size_t *fill)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if(offsets == NULL || step == NULL || fill == NULL)
- {
- mh->err = MPG123_BAD_INDEX_PAR;
- return MPG123_ERR;
- }
-#ifdef FRAME_INDEX
- *offsets = mh->index.data;
- *step = mh->index.step;
- *fill = mh->index.fill;
-#else
- *offsets = NULL;
- *step = 0;
- *fill = 0;
-#endif
- return MPG123_OK;
-}
-
-int attribute_align_arg mpg123_set_index(mpg123_handle *mh, off_t *offsets, off_t step, size_t fill)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
-#ifdef FRAME_INDEX
- if(step == 0)
- {
- mh->err = MPG123_BAD_INDEX_PAR;
- return MPG123_ERR;
- }
- if(fi_set(&mh->index, offsets, step, fill) == -1)
- {
- mh->err = MPG123_OUT_OF_MEM;
- return MPG123_ERR;
- }
- return MPG123_OK;
-#else
- mh->err = MPG123_MISSING_FEATURE;
- return MPG123_ERR;
-#endif
-}
-
-int attribute_align_arg mpg123_close(mpg123_handle *mh)
-{
- ALIGNCHECK(mh);
- if(mh == NULL) return MPG123_ERR;
- if(mh->rd != NULL && mh->rd->close != NULL) mh->rd->close(mh);
- mh->rd = NULL;
- if(mh->new_format)
- {
- debug("Hey, we are closing a track before the new format has been queried...");
- invalidate_format(&mh->af);
- mh->new_format = 0;
- }
- /* Always reset the frame buffers on close, so we cannot forget it in funky opening routines (wrappers, even). */
- frame_reset(mh);
- return MPG123_OK;
-}
-
-void attribute_align_arg mpg123_delete(mpg123_handle *mh)
-{
- if(mh != NULL)
- {
- mpg123_close(mh);
- frame_exit(mh); /* free buffers in frame */
- free(mh); /* free struct; cast? */
- }
-}
-
-static const char *mpg123_error[] =
-{
- "No error... (code 0)",
- "Unable to set up output format! (code 1)",
- "Invalid channel number specified. (code 2)",
- "Invalid sample rate specified. (code 3)",
- "Unable to allocate memory for 16 to 8 converter table! (code 4)",
- "Bad parameter id! (code 5)",
- "Bad buffer given -- invalid pointer or too small size. (code 6)",
- "Out of memory -- some malloc() failed. (code 7)",
- "You didn't initialize the library! (code 8)",
- "Invalid decoder choice. (code 9)",
- "Invalid mpg123 handle. (code 10)",
- "Unable to initialize frame buffers (out of memory?)! (code 11)",
- "Invalid RVA mode. (code 12)",
- "This build doesn't support gapless decoding. (code 13)",
- "Not enough buffer space. (code 14)",
- "Incompatible numeric data types. (code 15)",
- "Bad equalizer band. (code 16)",
- "Null pointer given where valid storage address needed. (code 17)",
- "Error reading the stream. (code 18)",
- "Cannot seek from end (end is not known). (code 19)",
- "Invalid 'whence' for seek function. (code 20)",
- "Build does not support stream timeouts. (code 21)",
- "File access error. (code 22)",
- "Seek not supported by stream. (code 23)",
- "No stream opened. (code 24)",
- "Bad parameter handle. (code 25)",
- "Invalid parameter addresses for index retrieval. (code 26)",
- "Lost track in the bytestream and did not attempt resync. (code 27)",
- "Failed to find valid MPEG data within limit on resync. (code 28)",
- "No 8bit encoding possible. (code 29)",
- "Stack alignment is not good. (code 30)",
- "You gave me a NULL buffer? (code 31)",
- "File position is screwed up, please do an absolute seek (code 32)",
- "Inappropriate NULL-pointer provided.",
- "Bad key value given.",
- "There is no frame index (disabled in this build).",
- "Frame index operation failed.",
- "Decoder setup failed (invalid combination of settings?)",
- "Feature not in this build."
- ,"Some bad value has been provided."
- ,"Low-level seeking has failed (call to lseek(), usually)."
- ,"Custom I/O obviously not prepared."
- ,"Overflow in LFS (large file support) conversion."
-};
-
-const char* attribute_align_arg mpg123_plain_strerror(int errcode)
-{
- if(errcode >= 0 && errcode < sizeof(mpg123_error)/sizeof(char*))
- return mpg123_error[errcode];
- else switch(errcode)
- {
- case MPG123_ERR:
- return "A generic mpg123 error.";
- case MPG123_DONE:
- return "Message: I am done with this track.";
- case MPG123_NEED_MORE:
- return "Message: Feed me more input data!";
- case MPG123_NEW_FORMAT:
- return "Message: Prepare for a changed audio format (query the new one)!";
- default:
- return "I have no idea - an unknown error code!";
- }
-}
-
-int attribute_align_arg mpg123_errcode(mpg123_handle *mh)
-{
- if(mh != NULL) return mh->err;
- return MPG123_BAD_HANDLE;
-}
-
-const char* attribute_align_arg mpg123_strerror(mpg123_handle *mh)
-{
- return mpg123_plain_strerror(mpg123_errcode(mh));
-}
diff --git a/src/mpg123/libmpg123/mpg123.h b/src/mpg123/libmpg123/mpg123.h
deleted file mode 100644
index 0ff1f35..0000000
--- a/src/mpg123/libmpg123/mpg123.h
+++ /dev/null
@@ -1,944 +0,0 @@
-/*
- libmpg123: MPEG Audio Decoder library (version 1.12.3)
-
- copyright 1995-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
-*/
-
-#ifndef MPG123_LIB_H
-#define MPG123_LIB_H
-
-/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */
-
-/* A macro to check at compile time which set of API functions to expect.
- This should be incremented at least each time a new symbol is added to the header. */
-#define MPG123_API_VERSION 25
-
-/* Nothing on normal/UNIX builds */
-#define EXPORT
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \defgroup mpg123_init mpg123 library and handle setup
- *
- * Functions to initialise and shutdown the mpg123 library and handles.
- * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-)
- * Tip: Use a RVA setting...
- *
- * @{
- */
-
-/** Opaque structure for the libmpg123 decoder handle. */
-struct mpg123_handle_struct;
-
-/** Opaque structure for the libmpg123 decoder handle.
- * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner.
- */
-typedef struct mpg123_handle_struct mpg123_handle;
-
-/** Function to initialise the mpg123 library.
- * This function is not thread-safe. Call it exactly once per process, before any other (possibly threaded) work with the library.
- *
- * \return MPG123_OK if successful, otherwise an error number.
- */
-EXPORT int mpg123_init(void);
-
-/** Function to close down the mpg123 library.
- * This function is not thread-safe. Call it exactly once per process, before any other (possibly threaded) work with the library. */
-EXPORT void mpg123_exit(void);
-
-/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()).
- * and optional retrieval of an error code to feed to mpg123_plain_strerror().
- * Optional means: Any of or both the parameters may be NULL.
- *
- * \return Non-NULL pointer when successful.
- */
-EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error);
-
-/** Delete handle, mh is either a valid mpg123 handle or NULL. */
-EXPORT void mpg123_delete(mpg123_handle *mh);
-
-/** Enumeration of the parameters types that it is possible to set/get. */
-enum mpg123_parms
-{
- MPG123_VERBOSE, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */
- MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */
- MPG123_ADD_FLAGS, /**< add some flags (integer) */
- MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */
- MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */
- MPG123_RVA, /**< one of the RVA choices above (integer) */
- MPG123_DOWNSPEED, /**< play a frame N times (integer) */
- MPG123_UPSPEED, /**< play every Nth frame (integer) */
- MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */
- MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */
- MPG123_ICY_INTERVAL, /**< stream contains ICY metadata with this interval (integer) */
- MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */
- MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */
- MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */
- MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). */
- MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */
- ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/
-};
-
-/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */
-enum mpg123_param_flags
-{
- MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */
- ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */
- ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */
- ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */
- ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */
- ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */
- ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */
- ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */
- ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */
- ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */
- ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */
- ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */
- ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */
- ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */
-};
-
-/** choices for MPG123_RVA */
-enum mpg123_param_rva
-{
- MPG123_RVA_OFF = 0 /**< RVA disabled (default). */
- ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */
- ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */
- ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */
-};
-
-/* TODO: Assess the possibilities and troubles of changing parameters during playback. */
-
-/** Set a specific parameter, for a specific mpg123_handle, using a parameter
- * type key chosen from the mpg123_parms enumeration, to the specified value. */
-EXPORT int mpg123_param(mpg123_handle *mh, enum mpg123_parms type, long value, double fvalue);
-
-/** Get a specific parameter, for a specific mpg123_handle.
- * See the mpg123_parms enumeration for a list of available parameters. */
-EXPORT int mpg123_getparam(mpg123_handle *mh, enum mpg123_parms type, long *val, double *fval);
-
-/** Feature set available for query with mpg123_feature. */
-enum mpg123_feature_set
-{
- MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */
- ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */
- ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */
- ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */
- ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */
- ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */
- ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */
- ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */
- ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */
- ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */
- ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */
- ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */
- ,MPG123_FEATURE_PARSE_ICY /**< ICY support */
- ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */
-};
-
-/** Query libmpg123 feature, 1 for success, 0 for unimplemented functions. */
-EXPORT int mpg123_feature(const enum mpg123_feature_set key);
-
-/* @} */
-
-
-/** \defgroup mpg123_error mpg123 error handling
- *
- * Functions to get text version of the error numbers and an enumeration
- * of the error codes returned by libmpg123.
- *
- * Most functions operating on a mpg123_handle simply return MPG123_OK on success and MPG123_ERR on failure (setting the internal error variable of the handle to the specific error code).
- * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
- * The positive range of return values is used for "useful" values when appropriate.
- *
- * @{
- */
-
-/** Enumeration of the message and error codes and returned by libmpg123 functions. */
-enum mpg123_errors
-{
- MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */
- MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */
- MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */
- MPG123_ERR=-1, /**< Generic Error */
- MPG123_OK=0, /**< Success */
- MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */
- MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */
- MPG123_BAD_RATE, /**< Invalid sample rate specified. */
- MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */
- MPG123_BAD_PARAM, /**< Bad parameter id! */
- MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */
- MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */
- MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */
- MPG123_BAD_DECODER, /**< Invalid decoder choice. */
- MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */
- MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */
- MPG123_BAD_RVA, /**< Invalid RVA mode. */
- MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */
- MPG123_NO_SPACE, /**< Not enough buffer space. */
- MPG123_BAD_TYPES, /**< Incompatible numeric data types. */
- MPG123_BAD_BAND, /**< Bad equalizer band. */
- MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */
- MPG123_ERR_READER, /**< Error reading the stream. */
- MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */
- MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/
- MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */
- MPG123_BAD_FILE, /**< File access error. */
- MPG123_NO_SEEK, /**< Seek not supported by stream. */
- MPG123_NO_READER, /**< No stream opened. */
- MPG123_BAD_PARS, /**< Bad parameter handle. */
- MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */
- MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */
- MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */
- MPG123_NO_8BIT, /**< No 8bit encoding possible. */
- MPG123_BAD_ALIGN, /**< Stack aligmnent error */
- MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */
- MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */
- MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */
- MPG123_BAD_KEY, /**< Bad key value given. */
- MPG123_NO_INDEX, /**< No frame index in this build. */
- MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */
- MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */
- MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */
- ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */
- ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */
- ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */
- ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */
-};
-
-/** Return a string describing that error errcode means. */
-EXPORT const char* mpg123_plain_strerror(int errcode);
-
-/** Give string describing what error has occured in the context of handle mh.
- * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via
- * char *errmsg = mpg123_strerror(mh)
- * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE. */
-EXPORT const char* mpg123_strerror(mpg123_handle *mh);
-
-/** Return the plain errcode intead of a string. */
-EXPORT int mpg123_errcode(mpg123_handle *mh);
-
-/*@}*/
-
-
-/** \defgroup mpg123_decoder mpg123 decoder selection
- *
- * Functions to list and select the available decoders.
- * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is).
- *
- * @{
- */
-
-/** Return a NULL-terminated array of generally available decoder names (plain 8bit ASCII). */
-EXPORT const char **mpg123_decoders(void);
-
-/** Return a NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII). */
-EXPORT const char **mpg123_supported_decoders(void);
-
-/** Set the chosen decoder to 'decoder_name' */
-EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name);
-
-/** Get the currently active decoder engine name.
- The active decoder engine can vary depening on output constraints,
- mostly non-resampling, integer output is accelerated via 3DNow & Co. but for other modes a fallback engine kicks in.
- Note that this can return a decoder that is ony active in the hidden and not available as decoder choice from the outside.
- \return The decoder name or NULL on error. */
-EXPORT const char* mpg123_current_decoder(mpg123_handle *mh);
-
-/*@}*/
-
-
-/** \defgroup mpg123_output mpg123 output audio format
- *
- * Functions to get and select the format of the decoded audio.
- *
- * @{
- */
-
-/** An enum over all sample types possibly known to mpg123.
- * The values are designed as bit flags to allow bitmasking for encoding families.
- *
- * Note that (your build of) libmpg123 does not necessarily support all these.
- * Usually, you can expect the 8bit encodings and signed 16 bit.
- * Also 32bit float will be usual beginning with mpg123-1.7.0 .
- * What you should bear in mind is that (SSE, etc) optimized routines are just for
- * signed 16bit (and 8bit derived from that). Other formats use plain C code.
- *
- * All formats are in native byte order. On a little endian machine this should mean
- * that you can just feed the MPG123_ENC_SIGNED_32 data to common 24bit hardware that
- * ignores the lowest byte (or you could choose to do rounding with these lower bits).
- */
-enum mpg123_enc_enum
-{
- MPG123_ENC_8 = 0x00f /**< 0000 0000 1111 Some 8 bit integer encoding. */
- ,MPG123_ENC_16 = 0x040 /**< 0000 0100 0000 Some 16 bit integer encoding. */
- ,MPG123_ENC_32 = 0x100 /**< 0001 0000 0000 Some 32 bit integer encoding. */
- ,MPG123_ENC_SIGNED = 0x080 /**< 0000 1000 0000 Some signed integer encoding. */
- ,MPG123_ENC_FLOAT = 0xe00 /**< 1110 0000 0000 Some float encoding. */
- ,MPG123_ENC_SIGNED_16 = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10) /**< 1101 0000 signed 16 bit */
- ,MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20) /**< 0110 0000 unsigned 16 bit */
- ,MPG123_ENC_UNSIGNED_8 = 0x01 /**< 0000 0001 unsigned 8 bit */
- ,MPG123_ENC_SIGNED_8 = (MPG123_ENC_SIGNED|0x02) /**< 1000 0010 signed 8 bit */
- ,MPG123_ENC_ULAW_8 = 0x04 /**< 0000 0100 ulaw 8 bit */
- ,MPG123_ENC_ALAW_8 = 0x08 /**< 0000 1000 alaw 8 bit */
- ,MPG123_ENC_SIGNED_32 = MPG123_ENC_32|MPG123_ENC_SIGNED|0x1000 /**< 0001 0001 1000 0000 signed 32 bit */
- ,MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x2000 /**< 0010 0001 0000 0000 unsigned 32 bit */
- ,MPG123_ENC_FLOAT_32 = 0x200 /**< 0010 0000 0000 32bit float */
- ,MPG123_ENC_FLOAT_64 = 0x400 /**< 0100 0000 0000 64bit float */
- ,MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16 | MPG123_ENC_UNSIGNED_16 | MPG123_ENC_UNSIGNED_8
- | MPG123_ENC_SIGNED_8 | MPG123_ENC_ULAW_8 | MPG123_ENC_ALAW_8
- | MPG123_ENC_SIGNED_32 | MPG123_ENC_UNSIGNED_32
- | MPG123_ENC_FLOAT_32 | MPG123_ENC_FLOAT_64 ) /**< any encoding */
-};
-
-/** They can be combined into one number (3) to indicate mono and stereo... */
-enum mpg123_channelcount
-{
- MPG123_MONO = 1
- ,MPG123_STEREO = 2
-};
-
-/** An array of supported standard sample rates
- * These are possible native sample rates of MPEG audio files.
- * You can still force mpg123 to resample to a different one, but by default you will only get audio in one of these samplings.
- * \param list Store a pointer to the sample rates array there.
- * \param number Store the number of sample rates there. */
-EXPORT void mpg123_rates(const long **list, size_t *number);
-
-/** An array of supported audio encodings.
- * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED).
- * \param list Store a pointer to the encodings array there.
- * \param number Store the number of encodings there. */
-EXPORT void mpg123_encodings(const int **list, size_t *number);
-
-/** Configure a mpg123 handle to accept no output format at all,
- * use before specifying supported formats with mpg123_format */
-EXPORT int mpg123_format_none(mpg123_handle *mh);
-
-/** Configure mpg123 handle to accept all formats
- * (also any custom rate you may set) -- this is default. */
-EXPORT int mpg123_format_all(mpg123_handle *mh);
-
-/** Set the audio format support of a mpg123_handle in detail:
- * \param mh audio decoder handle
- * \param rate The sample rate value (in Hertz).
- * \param channels A combination of MPG123_STEREO and MPG123_MONO.
- * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here.
- * \return MPG123_OK on success, MPG123_ERR if there was an error. */
-EXPORT int mpg123_format(mpg123_handle *mh, long rate, int channels, int encodings);
-
-/** Check to see if a specific format at a specific rate is supported
- * by mpg123_handle.
- * \return 0 for no support (that includes invalid parameters), MPG123_STEREO,
- * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */
-EXPORT int mpg123_format_support(mpg123_handle *mh, long rate, int encoding);
-
-/** Get the current output format written to the addresses givenr. */
-EXPORT int mpg123_getformat(mpg123_handle *mh, long *rate, int *channels, int *encoding);
-
-/*@}*/
-
-
-/** \defgroup mpg123_input mpg123 file input and decoding
- *
- * Functions for input bitstream and decoding operations.
- * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
- * @{
- */
-
-/* reading samples / triggering decoding, possible return values: */
-/** Enumeration of the error codes returned by libmpg123 functions. */
-
-/** Open and prepare to decode the specified file by filesystem path.
- * This does not open HTTP urls; libmpg123 contains no networking code.
- * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed().
- */
-EXPORT int mpg123_open(mpg123_handle *mh, const char *path);
-
-/** Use an already opened file descriptor as the bitstream input
- * mpg123_close() will _not_ close the file descriptor.
- */
-EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd);
-
-/** Use an opaque handle as bitstream input. This works only with the
- * replaced I/O from mpg123_replace_reader_handle()!
- * mpg123_close() will call the cleanup callback for your handle (if you gave one).
- */
-EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle);
-
-/** Open a new bitstream and prepare for direct feeding
- * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream.
- */
-EXPORT int mpg123_open_feed(mpg123_handle *mh);
-
-/** Closes the source, if libmpg123 opened it. */
-EXPORT int mpg123_close(mpg123_handle *mh);
-
-/** Read from stream and decode up to outmemsize bytes.
- * \param outmemory address of output buffer to write to
- * \param outmemsize maximum number of bytes to write
- * \param done address to store the number of actually decoded bytes to
- * \return error/message code (watch out for MPG123_DONE and friends!) */
-EXPORT int mpg123_read(mpg123_handle *mh, unsigned char *outmemory, size_t outmemsize, size_t *done);
-
-/** Feed data for a stream that has been opened with mpg123_open_feed().
- * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples.
- * \param in input buffer
- * \param size number of input bytes
- * \return error/message code. */
-EXPORT int mpg123_feed(mpg123_handle *mh, const unsigned char *in, size_t size);
-
-/** Decode MPEG Audio from inmemory to outmemory.
- * This is very close to a drop-in replacement for old mpglib.
- * When you give zero-sized output buffer the input will be parsed until
- * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it)
- * without taking decoded data.
- * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-).
- * You can actually always decide if you want those specialized functions in separate steps or one call this one here.
- * \param inmemory input buffer
- * \param inmemsize number of input bytes
- * \param outmemory output buffer
- * \param outmemsize maximum number of output bytes
- * \param done address to store the number of actually decoded bytes to
- * \return error/message code (watch out especially for MPG123_NEED_MORE)
- */
-EXPORT int mpg123_decode(mpg123_handle *mh, const unsigned char *inmemory, size_t inmemsize, unsigned char *outmemory, size_t outmemsize, size_t *done);
-
-/** Decode next MPEG frame to internal buffer
- * or read a frame and return after setting a new format.
- * \param num current frame offset gets stored there
- * \param audio This pointer is set to the internal buffer to read the decoded audio from.
- * \param bytes number of output bytes ready in the buffer
- */
-EXPORT int mpg123_decode_frame(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes);
-
-/** Decode current MPEG frame to internal buffer.
- * Warning: This is experimental API that might change in future releases!
- * Please watch mpg123 development closely when using it.
- * \param num last frame offset gets stored there
- * \param audio this pointer is set to the internal buffer to read the decoded audio from.
- * \param bytes number of output bytes ready in the buffer
- */
-EXPORT int mpg123_framebyframe_decode(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes);
-
-/** Find, read and parse the next mp3 frame
- * Warning: This is experimental API that might change in future releases!
- * Please watch mpg123 development closely when using it.
- */
-EXPORT int mpg123_framebyframe_next(mpg123_handle *mh);
-
-/*@}*/
-
-
-/** \defgroup mpg123_seek mpg123 position and seeking
- *
- * Functions querying and manipulating position in the decoded audio bitstream.
- * The position is measured in decoded audio samples, or MPEG frame offset for the specific functions.
- * If gapless code is in effect, the positions are adjusted to compensate the skipped padding/delay - meaning, you should not care about that at all and just use the position defined for the samples you get out of the decoder;-)
- * The general usage is modelled after stdlib's ftell() and fseek().
- * Especially, the whence parameter for the seek functions has the same meaning as the one for fseek() and needs the same constants from stdlib.h:
- * - SEEK_SET: set position to (or near to) specified offset
- * - SEEK_CUR: change position by offset from now
- * - SEEK_END: set position to offset from end
- *
- * Note that sample-accurate seek only works when gapless support has been enabled at compile time; seek is frame-accurate otherwise.
- * Also, really sample-accurate seeking (meaning that you get the identical sample value after seeking compared to plain decoding up to the position) is only guaranteed when you do not mess with the position code by using MPG123_UPSPEED, MPG123_DOWNSPEED or MPG123_START_FRAME. The first two mainly should cause trouble with NtoM resampling, but in any case with these options in effect, you have to keep in mind that the sample offset is not the same as counting the samples you get from decoding since mpg123 counts the skipped samples, too (or the samples played twice only once)!
- * Short: When you care about the sample position, don't mess with those parameters;-)
- * Also, seeking is not guaranteed to work for all streams (underlying stream may not support it).
- *
- * @{
- */
-
-/** Returns the current position in samples.
- * On the next read, you'd get that sample. */
-EXPORT off_t mpg123_tell(mpg123_handle *mh);
-
-/** Returns the frame number that the next read will give you data from. */
-EXPORT off_t mpg123_tellframe(mpg123_handle *mh);
-
-/** Returns the current byte offset in the input stream. */
-EXPORT off_t mpg123_tell_stream(mpg123_handle *mh);
-
-/** Seek to a desired sample offset.
- * Set whence to SEEK_SET, SEEK_CUR or SEEK_END.
- * \return The resulting offset >= 0 or error/message code */
-EXPORT off_t mpg123_seek(mpg123_handle *mh, off_t sampleoff, int whence);
-
-/** Seek to a desired sample offset in data feeding mode.
- * This just prepares things to be right only if you ensure that the next chunk of input data will be from input_offset byte position.
- * \param input_offset The position it expects to be at the
- * next time data is fed to mpg123_decode().
- * \return The resulting offset >= 0 or error/message code */
-EXPORT off_t mpg123_feedseek(mpg123_handle *mh, off_t sampleoff, int whence, off_t *input_offset);
-
-/** Seek to a desired MPEG frame index.
- * Set whence to SEEK_SET, SEEK_CUR or SEEK_END.
- * \return The resulting offset >= 0 or error/message code */
-EXPORT off_t mpg123_seek_frame(mpg123_handle *mh, off_t frameoff, int whence);
-
-/** Return a MPEG frame offset corresponding to an offset in seconds.
- * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only.
- * \return frame offset >= 0 or error/message code */
-EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec);
-
-/** Give access to the frame index table that is managed for seeking.
- * You are asked not to modify the values... Use mpg123_set_index to set the
- * seek index
- * \param offsets pointer to the index array
- * \param step one index byte offset advances this many MPEG frames
- * \param fill number of recorded index offsets; size of the array */
-EXPORT int mpg123_index(mpg123_handle *mh, off_t **offsets, off_t *step, size_t *fill);
-
-/** Set the frame index table
- * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets
- * to NULL and fill to 0 will clear the index and free the allocated memory used by the index.
- * \param offsets pointer to the index array
- * \param step one index byte offset advances this many MPEG frames
- * \param fill number of recorded index offsets; size of the array */
-EXPORT int mpg123_set_index(mpg123_handle *mh, off_t *offsets, off_t step, size_t fill);
-
-/** Get information about current and remaining frames/seconds.
- * WARNING: This function is there because of special usage by standalone mpg123 and may be removed in the final version of libmpg123!
- * You provide an offset (in frames) from now and a number of output bytes
- * served by libmpg123 but not yet played. You get the projected current frame
- * and seconds, as well as the remaining frames/seconds. This does _not_ care
- * about skipped samples due to gapless playback. */
-EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left);
-
-/*@}*/
-
-
-/** \defgroup mpg123_voleq mpg123 volume and equalizer
- *
- * @{
- */
-
-enum mpg123_channels
-{
- MPG123_LEFT=0x1 /**< The Left Channel. */
- ,MPG123_RIGHT=0x2 /**< The Right Channel. */
- ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */
-};
-
-/** Set the 32 Band Audio Equalizer settings.
- * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both.
- * \param band The equaliser band to change (from 0 to 31)
- * \param val The (linear) adjustment factor. */
-EXPORT int mpg123_eq(mpg123_handle *mh, enum mpg123_channels channel, int band, double val);
-
-/** Get the 32 Band Audio Equalizer settings.
- * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both.
- * \param band The equaliser band to change (from 0 to 31)
- * \return The (linear) adjustment factor. */
-EXPORT double mpg123_geteq(mpg123_handle *mh, enum mpg123_channels channel, int band);
-
-/** Reset the 32 Band Audio Equalizer settings to flat */
-EXPORT int mpg123_reset_eq(mpg123_handle *mh);
-
-/** Set the absolute output volume including the RVA setting,
- * vol<0 just applies (a possibly changed) RVA setting. */
-EXPORT int mpg123_volume(mpg123_handle *mh, double vol);
-
-/** Adjust output volume including the RVA setting by chosen amount */
-EXPORT int mpg123_volume_change(mpg123_handle *mh, double change);
-
-/** Return current volume setting, the actual value due to RVA, and the RVA
- * adjustment itself. It's all as double float value to abstract the sample
- * format. The volume values are linear factors / amplitudes (not percent)
- * and the RVA value is in decibels. */
-EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db);
-
-/* TODO: Set some preamp in addition / to replace internal RVA handling? */
-
-/*@}*/
-
-
-/** \defgroup mpg123_status mpg123 status and information
- *
- * @{
- */
-
-/** Enumeration of the mode types of Variable Bitrate */
-enum mpg123_vbr {
- MPG123_CBR=0, /**< Constant Bitrate Mode (default) */
- MPG123_VBR, /**< Variable Bitrate Mode */
- MPG123_ABR /**< Average Bitrate Mode */
-};
-
-/** Enumeration of the MPEG Versions */
-enum mpg123_version {
- MPG123_1_0=0, /**< MPEG Version 1.0 */
- MPG123_2_0, /**< MPEG Version 2.0 */
- MPG123_2_5 /**< MPEG Version 2.5 */
-};
-
-
-/** Enumeration of the MPEG Audio mode.
- * Only the mono mode has 1 channel, the others have 2 channels. */
-enum mpg123_mode {
- MPG123_M_STEREO=0, /**< Standard Stereo. */
- MPG123_M_JOINT, /**< Joint Stereo. */
- MPG123_M_DUAL, /**< Dual Channel. */
- MPG123_M_MONO /**< Single Channel. */
-};
-
-
-/** Enumeration of the MPEG Audio flag bits */
-enum mpg123_flags {
- MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */
- MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */
- MPG123_PRIVATE=0x4, /**< The private bit has been set. */
- MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */
-};
-
-/** Data structure for storing information about a frame of MPEG Audio */
-struct mpg123_frameinfo
-{
- enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */
- int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */
- long rate; /**< The sampling rate in Hz. */
- enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */
- int mode_ext; /**< The mode extension bit flag. */
- int framesize; /**< The size of the frame (in bytes). */
- enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */
- int emphasis; /**< The emphasis type. */
- int bitrate; /**< Bitrate of the frame (kbps). */
- int abr_rate; /**< The target average bitrate. */
- enum mpg123_vbr vbr; /**< The VBR mode. */
-};
-
-/** Get frame information about the MPEG audio bitstream and store it in a mpg123_frameinfo structure. */
-EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi);
-
-/** Get the safe output buffer size for all cases (when you want to replace the internal buffer) */
-EXPORT size_t mpg123_safe_buffer(void);
-
-/** Make a full parsing scan of each frame in the file. ID3 tags are found. An accurate length
- * value is stored. Seek index will be filled. A seek back to current position
- * is performed. At all, this function refuses work when stream is
- * not seekable.
- * \return MPG123_OK or MPG123_ERR.
- */
-EXPORT int mpg123_scan(mpg123_handle *mh);
-
-/** Return, if possible, the full (expected) length of current track in samples.
- * \return length >= 0 or MPG123_ERR if there is no length guess possible. */
-EXPORT off_t mpg123_length(mpg123_handle *mh);
-
-/** Override the value for file size in bytes.
- * Useful for getting sensible track length values in feed mode or for HTTP streams.
- * \return MPG123_OK or MPG123_ERR */
-EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size);
-
-/** Returns the time (seconds) per frame; <0 is error. */
-EXPORT double mpg123_tpf(mpg123_handle *mh);
-
-/** Get and reset the clip count. */
-EXPORT long mpg123_clip(mpg123_handle *mh);
-
-
-/** The key values for state information from mpg123_getstate(). */
-enum mpg123_state
-{
- MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true) */
-};
-
-/** Get various current decoder/stream state information.
- * \param key the key to identify the information to give.
- * \param val the address to return (long) integer values to
- * \param fval the address to return floating point values to
- * \return MPG123_OK or MPG123_ERR for success
- */
-EXPORT int mpg123_getstate(mpg123_handle *mh, enum mpg123_state key, long *val, double *fval);
-
-/*@}*/
-
-
-/** \defgroup mpg123_metadata mpg123 metadata handling
- *
- * Functions to retrieve the metadata from MPEG Audio files and streams.
- * Also includes string handling functions.
- *
- * @{
- */
-
-/** Data structure for storing strings in a safer way than a standard C-String.
- * Can also hold a number of null-terminated strings. */
-typedef struct
-{
- char* p; /**< pointer to the string data */
- size_t size; /**< raw number of bytes allocated */
- size_t fill; /**< number of used bytes (including closing zero byte) */
-} mpg123_string;
-
-/** Create and allocate memory for a new mpg123_string */
-EXPORT void mpg123_init_string(mpg123_string* sb);
-
-/** Free-up mempory for an existing mpg123_string */
-EXPORT void mpg123_free_string(mpg123_string* sb);
-
-/** Change the size of a mpg123_string
- * \return 0 on error, 1 on success */
-EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news);
-
-/** Increase size of a mpg123_string if necessary (it may stay larger).
- * Note that the functions for adding and setting in current libmpg123 use this instead of mpg123_resize_string().
- * That way, you can preallocate memory and safely work afterwards with pieces.
- * \return 0 on error, 1 on success */
-EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news);
-
-/** Copy the contents of one mpg123_string string to another.
- * \return 0 on error, 1 on success */
-EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to);
-
-/** Append a C-String to an mpg123_string
- * \return 0 on error, 1 on success */
-EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff);
-
-/** Append a C-substring to an mpg123 string
- * \return 0 on error, 1 on success
- * \param from offset to copy from
- * \param count number of characters to copy (a null-byte is always appended) */
-EXPORT int mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
-
-/** Set the conents of a mpg123_string to a C-string
- * \return 0 on error, 1 on success */
-EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff);
-
-/** Set the contents of a mpg123_string to a C-substring
- * \return 0 on error, 1 on success
- * \param from offset to copy from
- * \param count number of characters to copy (a null-byte is always appended) */
-EXPORT int mpg123_set_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count);
-
-/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */
-enum mpg123_text_encoding
-{
- mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */
- ,mpg123_text_utf8 = 1 /**< UTF-8 */
- ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */
- ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */
- ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */
- ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules.
- * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when
- * you don't mess with the reserved code points. If you want to decode little endian data
- * without BOM you need to prepend 0xff 0xfe yourself. */
- ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */
- ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality,
- * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123
- * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16
- * types (we expect a BOM before real data there), not so for utf16be!*/
- ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */
-};
-
-/** The encoding byte values from ID3v2. */
-enum mpg123_id3_enc
-{
- mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */
- ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */
- ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */
- ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */
- ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */
-};
-
-/** Convert ID3 encoding byte to mpg123 encoding index. */
-EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte);
-
-/** Store text data in string, after converting to UTF-8 from indicated encoding
- * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb)
- * \param sb target string
- * \param enc mpg123 text encoding value
- * \param source source buffer with plain unsigned bytes (you might need to cast from char *)
- * \param source_size number of bytes in the source buffer
- *
- * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing).
- * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that).
- */
-EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size);
-
-/** Sub data structure for ID3v2, for storing various text fields (including comments).
- * This is for ID3v2 COMM, TXXX and all the other text fields.
- * Only COMM and TXXX have a description, only COMM and USLT have a language.
- * You should consult the ID3v2 specification for the use of the various text fields ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */
-typedef struct
-{
- char lang[3]; /**< Three-letter language code (not terminated). */
- char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */
- mpg123_string description; /**< Empty for the generic comment... */
- mpg123_string text; /**< ... */
-} mpg123_text;
-
-/** Data structure for storing IDV3v2 tags.
- * This structure is not a direct binary mapping with the file contents.
- * The ID3v2 text frames are allowed to contain multiple strings.
- * So check for null bytes until you reach the mpg123_string fill.
- * All text is encoded in UTF-8. */
-typedef struct
-{
- unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */
- mpg123_string *title; /**< Title string (pointer into text_list). */
- mpg123_string *artist; /**< Artist string (pointer into text_list). */
- mpg123_string *album; /**< Album string (pointer into text_list). */
- mpg123_string *year; /**< The year as a string (pointer into text_list). */
- mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */
- mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */
- /* Encountered ID3v2 fields are appended to these lists.
- There can be multiple occurences, the pointers above always point to the last encountered data. */
- mpg123_text *comment_list; /**< Array of comments. */
- size_t comments; /**< Number of comments. */
- mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */
- size_t texts; /**< Numer of text fields. */
- mpg123_text *extra; /**< The array of extra (TXXX) fields. */
- size_t extras; /**< Number of extra text (TXXX) fields. */
-} mpg123_id3v2;
-
-/** Data structure for ID3v1 tags (the last 128 bytes of a file).
- * Don't take anything for granted (like string termination)!
- * Also note the change ID3v1.1 did: comment[28] = 0; comment[19] = track_number
- * It is your task to support ID3v1 only or ID3v1.1 ...*/
-typedef struct
-{
- char tag[3]; /**< Always the string "TAG", the classic intro. */
- char title[30]; /**< Title string. */
- char artist[30]; /**< Artist string. */
- char album[30]; /**< Album string. */
- char year[4]; /**< Year string. */
- char comment[30]; /**< Comment string. */
- unsigned char genre; /**< Genre index. */
-} mpg123_id3v1;
-
-#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */
-#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */
-#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/
-#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */
-
-/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future).
- The check function returns a combination of flags. */
-EXPORT int mpg123_meta_check(mpg123_handle *mh); /* On error (no valid handle) just 0 is returned. */
-
-/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call.
- * v1 and/or v2 can be set to NULL when there is no corresponding data.
- * \return Return value is MPG123_OK or MPG123_ERR, */
-EXPORT int mpg123_id3(mpg123_handle *mh, mpg123_id3v1 **v1, mpg123_id3v2 **v2);
-
-/** Point icy_meta to existing data structure wich may change on any next read/decode function call.
- * \return Return value is MPG123_OK or MPG123_ERR, */
-EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); /* same for ICY meta string */
-
-/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8.
- * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) .
- * \param icy_text The input data in ICY encoding
- * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */
-EXPORT char* mpg123_icy2utf8(const char* icy_text);
-
-
-/* @} */
-
-
-/** \defgroup mpg123_advpar mpg123 advanced parameter API
- *
- * Direct access to a parameter set without full handle around it.
- * Possible uses:
- * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE).
- * - Use one set of parameters for multiple handles.
- *
- * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt()
- * family) directly return a fully qualified mpg123 error code, the ones
- * operating on full handles normally MPG123_OK or MPG123_ERR, storing the
- * specific error code itseld inside the handle.
- *
- * @{
- */
-
-/** Opaque structure for the libmpg123 decoder parameters. */
-struct mpg123_pars_struct;
-
-/** Opaque structure for the libmpg123 decoder parameters. */
-typedef struct mpg123_pars_struct mpg123_pars;
-
-/** Create a handle with preset parameters. */
-EXPORT mpg123_handle *mpg123_parnew(mpg123_pars *mp, const char* decoder, int *error);
-
-/** Allocate memory for and return a pointer to a new mpg123_pars */
-EXPORT mpg123_pars *mpg123_new_pars(int *error);
-
-/** Delete and free up memory used by a mpg123_pars data structure */
-EXPORT void mpg123_delete_pars(mpg123_pars* mp);
-
-/** Configure mpg123 parameters to accept no output format at all,
- * use before specifying supported formats with mpg123_format */
-EXPORT int mpg123_fmt_none(mpg123_pars *mp);
-
-/** Configure mpg123 parameters to accept all formats
- * (also any custom rate you may set) -- this is default. */
-EXPORT int mpg123_fmt_all(mpg123_pars *mp);
-
-/** Set the audio format support of a mpg123_pars in detail:
- \param rate The sample rate value (in Hertz).
- \param channels A combination of MPG123_STEREO and MPG123_MONO.
- \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no support).
- \return 0 on success, -1 if there was an error. /
-*/
-EXPORT int mpg123_fmt(mpg123_pars *mh, long rate, int channels, int encodings); /* 0 is good, -1 is error */
-
-/** Check to see if a specific format at a specific rate is supported
- * by mpg123_pars.
- * \return 0 for no support (that includes invalid parameters), MPG123_STEREO,
- * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */
-EXPORT int mpg123_fmt_support(mpg123_pars *mh, long rate, int encoding);
-
-/** Set a specific parameter, for a specific mpg123_pars, using a parameter
- * type key chosen from the mpg123_parms enumeration, to the specified value. */
-EXPORT int mpg123_par(mpg123_pars *mp, enum mpg123_parms type, long value, double fvalue);
-
-/** Get a specific parameter, for a specific mpg123_pars.
- * See the mpg123_parms enumeration for a list of available parameters. */
-EXPORT int mpg123_getpar(mpg123_pars *mp, enum mpg123_parms type, long *val, double *fval);
-
-/* @} */
-
-
-/** \defgroup mpg123_lowio mpg123 low level I/O
- * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket...
- *
- * @{ */
-
-/** Replace default internal buffer with user-supplied buffer.
- * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio. */
-EXPORT int mpg123_replace_buffer(mpg123_handle *mh, unsigned char *data, size_t size);
-
-/** The max size of one frame's decoded output with current settings.
- * Use that to determine an appropriate minimum buffer size for decoding one frame. */
-EXPORT size_t mpg123_outblock(mpg123_handle *mh);
-
-/** Replace low-level stream access functions; read and lseek as known in POSIX.
- * You can use this to make any fancy file opening/closing yourself,
- * using mpg123_open_fd() to set the file descriptor for your read/lseek (doesn't need to be a "real" file descriptor...).
- * Setting a function to NULL means that the default internal read is
- * used (active from next mpg123_open call on).
- * Note: As it would be troublesome to mess with this while having a file open,
- * this implies mpg123_close(). */
-EXPORT int mpg123_replace_reader(mpg123_handle *mh, ssize_t (*r_read) (int, void *, size_t), off_t (*r_lseek)(int, off_t, int));
-
-/** Replace I/O functions with your own ones operating on some kind of handle instead of integer descriptors.
- * The handle is a void pointer, so you can pass any data you want...
- * mpg123_open_handle() is the call you make to use the I/O defined here.
- * There is no fallback to internal read/seek here.
- * Note: As it would be troublesome to mess with this while having a file open,
- * this mpg123_close() is implied here.
- * \param r_read The callback for reading (behaviour like posix read).
- * \param r_lseek The callback for seeking (like posix lseek).
- * \param cleanup A callback to clean up an I/O handle on mpg123_close, can be NULL for none (you take care of cleaning your handles). */
-EXPORT int mpg123_replace_reader_handle(mpg123_handle *mh, ssize_t (*r_read) (void *, void *, size_t), off_t (*r_lseek)(void *, off_t, int), void (*cleanup)(void*));
-
-/* @} */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/src/mpg123/libmpg123/mpg123lib_intern.h b/src/mpg123/libmpg123/mpg123lib_intern.h
deleted file mode 100644
index 55935bc..0000000
--- a/src/mpg123/libmpg123/mpg123lib_intern.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- mpg123lib_intern: Common non-public stuff for libmpg123
-
- copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
-
- derived from the old mpg123.h
-*/
-
-#ifndef MPG123_H_INTERN
-#define MPG123_H_INTERN
-
-#define MPG123_RATES 9
-#define MPG123_ENCODINGS 10
-
-#include "config.h" /* Load this before _anything_ */
-
-/* ABI conformance for other compilers.
- mpg123 needs 16byte-aligned stack for SSE and friends.
- gcc provides that, but others don't necessarily. */
-#ifdef ABI_ALIGN_FUN
-#ifndef attribute_align_arg
-#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1)
-# define attribute_align_arg __attribute__((force_align_arg_pointer))
-/* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */
-#else
-
-# define attribute_align_arg
-/* Other compilers get code to catch misaligned stack.
- Well, except Sun Studio, which accepts the aligned attribute but does not honor it. */
-#if !defined(__SUNPRO_C)
-# define NEED_ALIGNCHECK
-#endif
-
-#endif
-#endif
-#else
-#define attribute_align_arg
-/* We won't try the align check... */
-#endif
-
-/* export DLL symbols */
-#if defined(WIN32) && defined(DYNAMIC_BUILD)
-#define BUILD_MPG123_DLL
-#endif
-#include "compat.h"
-#include "mpg123.h"
-
-#define SKIP_JUNK 1
-
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-#ifndef M_SQRT2
-# define M_SQRT2 1.41421356237309504880
-#endif
-
-#ifdef SUNOS
-#define memmove(dst,src,size) bcopy(src,dst,size)
-#endif
-
-/* some stuff has to go back to mpg123.h */
-#ifdef REAL_IS_FLOAT
-# define real float
-# define REAL_SCANF "%f"
-# define REAL_PRINTF "%f"
-#elif defined(REAL_IS_LONG_DOUBLE)
-# define real long double
-# define REAL_SCANF "%Lf"
-# define REAL_PRINTF "%Lf"
-#elif defined(REAL_IS_FIXED)
-/* Disable some output formats for fixed point decoder... */
-
-# define real long
-
-/*
- for fixed-point decoders, use pre-calculated tables to avoid expensive floating-point maths
- undef this macro for run-time calculation
-*/
-#define PRECALC_TABLES
-
-# define REAL_RADIX 24
-# define REAL_FACTOR 16777216.0
-
-static inline long double_to_long_rounded(double x, double scalefac)
-{
- x *= scalefac;
- x += (x > 0) ? 0.5 : -0.5;
- return (long)x;
-}
-
-static inline long scale_rounded(long x, int shift)
-{
- x += (x >> 31);
- x >>= (shift - 1);
- x += (x & 1);
- return (x >> 1);
-}
-
-# ifdef __GNUC__
-# if defined(OPT_I386)
-/* for i386_nofpu decoder */
-# define REAL_MUL_ASM(x, y, radix) \
-({ \
- long _x=(x), _y=(y); \
- __asm__ ( \
- "imull %1 \n\t" \
- "shrdl %2, %%edx, %0 \n\t" \
- : "+&a" (_x) \
- : "mr" (_y), "I" (radix) \
- : "%edx", "cc" \
- ); \
- _x; \
-})
-
-# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
-({ \
- long _x=(x), _y=(y), _radix=(radix); \
- __asm__ ( \
- "imull %1 \n\t" \
- "shrdl %%cl, %%edx, %0 \n\t" \
- : "+&a" (_x) \
- : "mr" (_y), "c" (_radix) \
- : "%edx", "cc" \
- ); \
- _x; \
-})
-# elif defined(OPT_PPC)
-/* for powerpc */
-# define REAL_MUL_ASM(x, y, radix) \
-({ \
- long _x=(x), _y=(y), _mull, _mulh; \
- __asm__ ( \
- "mullw %0, %2, %3 \n\t" \
- "mulhw %1, %2, %3 \n\t" \
- "srwi %0, %0, %4 \n\t" \
- "rlwimi %0, %1, %5, 0, %6 \n\t" \
- : "=&r" (_mull), "=&r" (_mulh) \
- : "%r" (_x), "r" (_y), "i" (radix), "i" (32-(radix)), "i" ((radix)-1) \
- ); \
- _mull; \
-})
-
-# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
-({ \
- long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \
- __asm__ ( \
- "mullw %0, %3, %4 \n\t" \
- "mulhw %1, %3, %4 \n\t" \
- "subfic %2, %5, 32 \n\t" \
- "srw %0, %0, %5 \n\t" \
- "slw %1, %1, %2 \n\t" \
- "or %0, %0, %1 \n\t" \
- : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \
- : "%r" (_x), "r" (_y), "r" (_radix) \
- : "cc" \
- ); \
- _mull; \
-})
-# elif defined(OPT_ARM)
-/* for arm */
-# define REAL_MUL_ASM(x, y, radix) \
-({ \
- long _x=(x), _y=(y), _mull, _mulh; \
- __asm__ ( \
- "smull %0, %1, %2, %3 \n\t" \
- "mov %0, %0, lsr %4 \n\t" \
- "orr %0, %0, %1, lsl %5 \n\t" \
- : "=&r" (_mull), "=&r" (_mulh) \
- : "%r" (_x), "r" (_y), "M" (radix), "M" (32-(radix)) \
- ); \
- _mull; \
-})
-
-# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
-({ \
- long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \
- __asm__ ( \
- "smull %0, %1, %3, %4 \n\t" \
- "mov %0, %0, lsr %5 \n\t" \
- "rsb %2, %5, #32 \n\t" \
- "orr %0, %0, %1, lsl %2 \n\t" \
- : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \
- : "%r" (_x), "r" (_y), "r" (_radix) \
- ); \
- _mull; \
-})
-# endif
-# endif
-
-/* I just changed the (int) to (long) there... seemed right. */
-# define DOUBLE_TO_REAL(x) (double_to_long_rounded(x, REAL_FACTOR))
-# define DOUBLE_TO_REAL_15(x) (double_to_long_rounded(x, 32768.0))
-# define DOUBLE_TO_REAL_POW43(x) (double_to_long_rounded(x, 8192.0))
-# define DOUBLE_TO_REAL_SCALE_LAYER12(x) (double_to_long_rounded(x, 1073741824.0))
-# define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (double_to_long_rounded(x, pow(2.0,gainpow2_scale[y])))
-# define REAL_TO_DOUBLE(x) ((double)(x) / REAL_FACTOR)
-# ifdef REAL_MUL_ASM
-# define REAL_MUL(x, y) REAL_MUL_ASM(x, y, REAL_RADIX)
-# define REAL_MUL_15(x, y) REAL_MUL_ASM(x, y, 15)
-# define REAL_MUL_SCALE_LAYER12(x, y) REAL_MUL_ASM(x, y, 15 + 30 - REAL_RADIX)
-# else
-# define REAL_MUL(x, y) (((long long)(x) * (long long)(y)) >> REAL_RADIX)
-# define REAL_MUL_15(x, y) (((long long)(x) * (long long)(y)) >> 15)
-# define REAL_MUL_SCALE_LAYER12(x, y) (((long long)(x) * (long long)(y)) >> (15 + 30 - REAL_RADIX))
-# endif
-# ifdef REAL_MUL_SCALE_LAYER3_ASM
-# define REAL_MUL_SCALE_LAYER3(x, y, z) REAL_MUL_SCALE_LAYER3_ASM(x, y, 13 + gainpow2_scale[z] - REAL_RADIX)
-# else
-# define REAL_MUL_SCALE_LAYER3(x, y, z) (((long long)(x) * (long long)(y)) >> (13 + gainpow2_scale[z] - REAL_RADIX))
-# endif
-# define REAL_SCALE_LAYER12(x) ((long)((x) >> (30 - REAL_RADIX)))
-# define REAL_SCALE_LAYER3(x, y) ((long)((x) >> (gainpow2_scale[y] - REAL_RADIX)))
-# ifdef ACCURATE_ROUNDING
-# define REAL_MUL_SYNTH(x, y) REAL_MUL(x, y)
-# define REAL_SCALE_DCT64(x) (x)
-# define REAL_SCALE_WINDOW(x) (x)
-# else
-# define REAL_MUL_SYNTH(x, y) ((x) * (y))
-# define REAL_SCALE_DCT64(x) ((x) >> 8)
-# define REAL_SCALE_WINDOW(x) scale_rounded(x, 16)
-# endif
-# define REAL_SCANF "%ld"
-# define REAL_PRINTF "%ld"
-
-#else
-# define real double
-# define REAL_SCANF "%lf"
-# define REAL_PRINTF "%f"
-#endif
-
-#ifndef REAL_IS_FIXED
-# if (defined SIZEOF_INT32_T) && (SIZEOF_INT32_T != 4)
-# error "Bad 32bit types!!!"
-# endif
-#endif
-
-#ifndef DOUBLE_TO_REAL
-# define DOUBLE_TO_REAL(x) (real)(x)
-#endif
-#ifndef DOUBLE_TO_REAL_15
-# define DOUBLE_TO_REAL_15(x) (real)(x)
-#endif
-#ifndef DOUBLE_TO_REAL_POW43
-# define DOUBLE_TO_REAL_POW43(x) (real)(x)
-#endif
-#ifndef DOUBLE_TO_REAL_SCALE_LAYER12
-# define DOUBLE_TO_REAL_SCALE_LAYER12(x) (real)(x)
-#endif
-#ifndef DOUBLE_TO_REAL_SCALE_LAYER3
-# define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (real)(x)
-#endif
-#ifndef REAL_TO_DOUBLE
-# define REAL_TO_DOUBLE(x) (x)
-#endif
-
-#ifndef REAL_MUL
-# define REAL_MUL(x, y) ((x) * (y))
-#endif
-#ifndef REAL_MUL_SYNTH
-# define REAL_MUL_SYNTH(x, y) ((x) * (y))
-#endif
-#ifndef REAL_MUL_15
-# define REAL_MUL_15(x, y) ((x) * (y))
-#endif
-#ifndef REAL_MUL_SCALE_LAYER12
-# define REAL_MUL_SCALE_LAYER12(x, y) ((x) * (y))
-#endif
-#ifndef REAL_MUL_SCALE_LAYER3
-# define REAL_MUL_SCALE_LAYER3(x, y, z) ((x) * (y))
-#endif
-#ifndef REAL_SCALE_LAYER12
-# define REAL_SCALE_LAYER12(x) (x)
-#endif
-#ifndef REAL_SCALE_LAYER3
-# define REAL_SCALE_LAYER3(x, y) (x)
-#endif
-#ifndef REAL_SCALE_DCT64
-# define REAL_SCALE_DCT64(x) (x)
-#endif
-
-/* used to be: AUDIOBUFSIZE = n*64 with n=1,2,3 ...
- now: factor on minimum frame buffer size (which takes upsampling into account) */
-#define AUDIOBUFSIZE 2
-
-#include "true.h"
-
-#define MAX_NAME_SIZE 81
-#define SBLIMIT 32
-#define SCALE_BLOCK 12
-#define SSLIMIT 18
-
-/* Same as MPG_M_* */
-#define MPG_MD_STEREO 0
-#define MPG_MD_JOINT_STEREO 1
-#define MPG_MD_DUAL_CHANNEL 2
-#define MPG_MD_MONO 3
-
-/* We support short or float output samples...
- Short integer amplitude is scaled by this. */
-#define SHORT_SCALE 32768
-/* That scales a short-scaled value to a 32bit integer scaled one
- value = 2**31/2**15 */
-#define S32_RESCALE 65536
-
-/* Pre Shift fo 16 to 8 bit converter table */
-#define AUSHIFT (3)
-
-#include "optimize.h"
-#include "decode.h"
-#include "parse.h"
-#include "frame.h"
-
-/* fr is a mpg123_handle* by convention here... */
-#define NOQUIET (!(fr->p.flags & MPG123_QUIET))
-#define VERBOSE (NOQUIET && fr->p.verbose)
-#define VERBOSE2 (NOQUIET && fr->p.verbose > 1)
-#define VERBOSE3 (NOQUIET && fr->p.verbose > 2)
-#define VERBOSE4 (NOQUIET && fr->p.verbose > 3)
-#define PVERB(mp, level) (!((mp)->flags & MPG123_QUIET) && (mp)->verbose >= (level))
-
-int decode_update(mpg123_handle *mh);
-/* residing in format.c */
-off_t samples_to_bytes(mpg123_handle *fr , off_t s);
-off_t bytes_to_samples(mpg123_handle *fr , off_t b);
-
-/* If networking is enabled and we really mean internal networking, the timeout_read function is available. */
-#if defined (NETWORK) && !defined (WANT_WIN32_SOCKETS)
-/* Does not work with win32 */
-#define TIMEOUT_READ
-#endif
-
-#endif
diff --git a/src/mpg123/libmpg123/optimize.c b/src/mpg123/libmpg123/optimize.c
deleted file mode 100644
index b843bbb..0000000
--- a/src/mpg123/libmpg123/optimize.c
+++ /dev/null
@@ -1,920 +0,0 @@
-/*
- optimize: get a grip on the different optimizations
-
- copyright 2006-9 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis, inspired by 3DNow stuff in mpg123.[hc]
-
- Currently, this file contains the struct and function to choose an optimization variant and works only when OPT_MULTI is in effect.
-*/
-
-#include "mpg123lib_intern.h" /* includes optimize.h */
-#include "debug.h"
-
-/* Must match the enum dectype! */
-
-/*
- It SUCKS having to define these names that way, but compile-time intialization of string arrays is a bitch.
- GCC doesn't see constant stuff when it's wiggling in front of it!
- Anyhow: Have a script for that:
-names="generic generic_dither i386 i486 i586 i586_dither MMX 3DNow 3DNowExt AltiVec SSE x86-64"
-for i in $names; do echo "##define dn_${i/-/_} \"$i\""; done
-echo -n "static const char* decname[] =
-{
- \"auto\"
- "
-for i in $names; do echo -n ", dn_${i/-/_}"; done
-echo "
- , \"nodec\"
-};"
-*/
-#define dn_generic "generic"
-#define dn_generic_dither "generic_dither"
-#define dn_i386 "i386"
-#define dn_i486 "i486"
-#define dn_i586 "i586"
-#define dn_i586_dither "i586_dither"
-#define dn_MMX "MMX"
-#define dn_3DNow "3DNow"
-#define dn_3DNowExt "3DNowExt"
-#define dn_AltiVec "AltiVec"
-#define dn_SSE "SSE"
-#define dn_x86_64 "x86-64"
-#define dn_ARM "ARM"
-static const char* decname[] =
-{
- "auto"
- , dn_generic, dn_generic_dither, dn_i386, dn_i486, dn_i586, dn_i586_dither, dn_MMX, dn_3DNow, dn_3DNowExt, dn_AltiVec, dn_SSE, dn_x86_64, dn_ARM
- , "nodec"
-};
-
-#if (defined OPT_X86) && (defined OPT_MULTI)
-#include "getcpuflags.h"
-struct cpuflags cpu_flags;
-#else
-/* Faking stuff for non-multi builds. The same code for synth function choice is used.
- Just no runtime dependency of result... */
-char cpu_flags;
-#define cpu_i586(s) 1
-#define cpu_fpu(s) 1
-#define cpu_mmx(s) 1
-#define cpu_3dnow(s) 1
-#define cpu_3dnowext(s) 1
-#define cpu_sse(s) 1
-#define cpu_sse2(s) 1
-#define cpu_sse3(s) 1
-#endif
-
-/* Ugly macros to build conditional synth function array values. */
-
-#ifndef NO_8BIT
-#define IF8(synth) synth,
-#else
-#define IF8(synth)
-#endif
-
-#ifndef NO_REAL
-#define IFREAL(synth) synth,
-#else
-#define IFREAL(synth)
-#endif
-
-#ifndef NO_32BIT
-#define IF32(synth) synth
-#else
-#define IF32(synth)
-#endif
-
-#ifndef NO_16BIT
-# define OUT_SYNTHS(synth_16, synth_8, synth_real, synth_32) { synth_16, IF8(synth_8) IFREAL(synth_real) IF32(synth_32) }
-#else
-# define OUT_SYNTHS(synth_16, synth_8, synth_real, synth_32) { IF8(synth_8) IFREAL(synth_real) IF32(synth_32) }
-#endif
-
-/* The call of left and right plain synth, wrapped.
- This may be replaced by a direct stereo optimized synth. */
-int synth_stereo_wrap(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
-{
- int clip;
- clip = (fr->synth)(bandPtr_l, 0, fr, 0);
- clip += (fr->synth)(bandPtr_r, 1, fr, 1);
- return clip;
-}
-
-const struct synth_s synth_base =
-{
- { /* plain */
- OUT_SYNTHS(synth_1to1, synth_1to1_8bit, synth_1to1_real, synth_1to1_s32)
-# ifndef NO_DOWNSAMPLE
- ,OUT_SYNTHS(synth_2to1, synth_2to1_8bit, synth_2to1_real, synth_2to1_s32)
- ,OUT_SYNTHS(synth_4to1, synth_4to1_8bit, synth_4to1_real, synth_4to1_s32)
-# endif
-# ifndef NO_NTOM
- ,OUT_SYNTHS(synth_ntom, synth_ntom_8bit, synth_ntom_real, synth_ntom_s32)
-# endif
- },
- { /* stereo, by default only wrappers over plain synth */
- OUT_SYNTHS(synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap)
-# ifndef NO_DOWNSAMPLE
- ,OUT_SYNTHS(synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap)
- ,OUT_SYNTHS(synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap)
-# endif
-# ifndef NO_NTOM
- ,OUT_SYNTHS(synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap, synth_stereo_wrap)
-# endif
- },
- { /* mono2stereo */
- OUT_SYNTHS(synth_1to1_mono2stereo, synth_1to1_8bit_mono2stereo, synth_1to1_real_mono2stereo, synth_1to1_s32_mono2stereo)
-# ifndef NO_DOWNSAMPLE
- ,OUT_SYNTHS(synth_2to1_mono2stereo, synth_2to1_8bit_mono2stereo, synth_2to1_real_mono2stereo, synth_2to1_s32_mono2stereo)
- ,OUT_SYNTHS(synth_4to1_mono2stereo, synth_4to1_8bit_mono2stereo, synth_4to1_real_mono2stereo, synth_4to1_s32_mono2stereo)
-# endif
-# ifndef NO_NTOM
- ,OUT_SYNTHS(synth_ntom_mono2stereo, synth_ntom_8bit_mono2stereo, synth_ntom_real_mono2stereo, synth_ntom_s32_mono2stereo)
-# endif
- },
- { /* mono*/
- OUT_SYNTHS(synth_1to1_mono, synth_1to1_8bit_mono, synth_1to1_real_mono, synth_1to1_s32_mono)
-# ifndef NO_DOWNSAMPLE
- ,OUT_SYNTHS(synth_2to1_mono, synth_2to1_8bit_mono, synth_2to1_real_mono, synth_2to1_s32_mono)
- ,OUT_SYNTHS(synth_4to1_mono, synth_4to1_8bit_mono, synth_4to1_real_mono, synth_4to1_s32_mono)
-# endif
-# ifndef NO_NTOM
- ,OUT_SYNTHS(synth_ntom_mono, synth_ntom_8bit_mono, synth_ntom_real_mono, synth_ntom_s32_mono)
-#endif
- }
-};
-
-#ifdef OPT_X86
-/* More plain synths for i386 */
-const func_synth plain_i386[r_limit][f_limit] =
-{ /* plain */
- OUT_SYNTHS(synth_1to1_i386, synth_1to1_8bit_i386, synth_1to1_real_i386, synth_1to1_s32_i386)
-# ifndef NO_DOWNSAMPLE
- ,OUT_SYNTHS(synth_2to1_i386, synth_2to1_8bit_i386, synth_2to1_real_i386, synth_2to1_s32_i386)
- ,OUT_SYNTHS(synth_4to1_i386, synth_4to1_8bit_i386, synth_4to1_real_i386, synth_4to1_s32_i386)
-# endif
-# ifndef NO_NTOM
- ,OUT_SYNTHS(synth_ntom, synth_ntom_8bit, synth_ntom_real, synth_ntom_s32)
-# endif
-};
-#endif
-
-
-enum optdec defdec(void){ return defopt; }
-
-enum optcla decclass(const enum optdec type)
-{
- return (type == mmx || type == sse || type == dreidnowext || type == x86_64 ) ? mmxsse : normal;
-}
-
-
-static int find_synth(func_synth synth, const func_synth synths[r_limit][f_limit])
-{
- enum synth_resample ri;
- enum synth_format fi;
- for(ri=0; ri<r_limit; ++ri)
- for(fi=0; fi<f_limit; ++fi)
- if(synth == synths[ri][fi])
- return TRUE;
-
- return FALSE;
-}
-
-/* Determine what kind of decoder is actually active
- This depends on runtime choices which may cause fallback to i386 or generic code. */
-static int find_dectype(mpg123_handle *fr)
-{
- enum optdec type = nodec;
- /* Direct and indirect usage, 1to1 stereo decoding.
- Concentrating on the plain stereo synth should be fine, mono stuff is derived. */
- func_synth basic_synth = fr->synth;
-#ifndef NO_8BIT
-#ifndef NO_16BIT
- if(basic_synth == synth_1to1_8bit_wrap)
- basic_synth = fr->synths.plain[r_1to1][f_16]; /* That is what's really below the surface. */
-#endif
-#endif
-
- if(FALSE) ; /* Just to initialize the else if ladder. */
-#ifndef NO_16BIT
-#ifdef OPT_3DNOWEXT
- else if(basic_synth == synth_1to1_3dnowext) type = dreidnowext;
-#endif
-#ifdef OPT_SSE
- else if(basic_synth == synth_1to1_sse) type = sse;
-#endif
-#ifdef OPT_3DNOW
- else if(basic_synth == synth_1to1_3dnow) type = dreidnow;
-#endif
-#ifdef OPT_MMX
- else if(basic_synth == synth_1to1_mmx) type = mmx;
-#endif
-#ifdef OPT_I586_DITHER
- else if(basic_synth == synth_1to1_i586_dither) type = ifuenf_dither;
-#endif
-#ifdef OPT_I586
- else if(basic_synth == synth_1to1_i586) type = ifuenf;
-#endif
-#ifdef OPT_ALTIVEC
- else if(basic_synth == synth_1to1_altivec) type = altivec;
-#endif
-#ifdef OPT_X86_64
- else if(basic_synth == synth_1to1_x86_64) type = x86_64;
-#endif
-#ifdef OPT_ARM
- else if(basic_synth == synth_1to1_arm) type = arm;
-#endif
-#ifdef OPT_GENERIC_DITHER
- else if(basic_synth == synth_1to1_dither) type = generic_dither;
-#endif
-#ifdef OPT_DITHER /* either i586 or generic! */
-#ifndef NO_DOWNSAMPLE
- else if
- (
- basic_synth == synth_2to1_dither
- || basic_synth == synth_4to1_dither
- ) type = generic_dither;
-#endif
-#endif
-#endif /* 16bit */
-
-#ifndef NO_REAL
-#ifdef OPT_SSE
- else if(basic_synth == synth_1to1_real_sse) type = sse;
-#endif
-#ifdef OPT_X86_64
- else if(basic_synth == synth_1to1_real_x86_64) type = x86_64;
-#endif
-#ifdef OPT_ALTIVEC
- else if(basic_synth == synth_1to1_real_altivec) type = altivec;
-#endif
-
-#endif /* real */
-
-#ifndef NO_32BIT
-#ifdef OPT_SSE
- else if(basic_synth == synth_1to1_s32_sse) type = sse;
-#endif
-#ifdef OPT_X86_64
- else if(basic_synth == synth_1to1_s32_x86_64) type = x86_64;
-#endif
-#ifdef OPT_ALTIVEC
- else if(basic_synth == synth_1to1_s32_altivec) type = altivec;
-#endif
-#endif /* 32bit */
-
-#ifdef OPT_X86
- else if(find_synth(basic_synth, plain_i386))
- type = idrei;
-#endif
-
- else if(find_synth(basic_synth, synth_base.plain))
- type = generic;
-
-
-
-#ifdef OPT_I486
- /* i486 is special ... the specific code is in use for 16bit 1to1 stereo
- otherwise we have i386 active... but still, the distinction doesn't matter*/
- type = ivier;
-#endif
-
- if(type != nodec)
- {
- fr->cpu_opts.type = type;
- fr->cpu_opts.class = decclass(type);
-
- debug3("determined active decoder type %i (%s) of class %i", type, decname[type], fr->cpu_opts.class);
- return MPG123_OK;
- }
- else
- {
- if(NOQUIET) error("Unable to determine active decoder type -- this is SERIOUS b0rkage!");
-
- fr->err = MPG123_BAD_DECODER_SETUP;
- return MPG123_ERR;
- }
-}
-
-/* set synth functions for current frame, optimizations handled by opt_* macros */
-int set_synth_functions(mpg123_handle *fr)
-{
- enum synth_resample resample = r_none;
- enum synth_format basic_format = f_none; /* Default is always 16bit, or whatever. */
-
- /* Select the basic output format, different from 16bit: 8bit, real. */
- if(FALSE){}
-#ifndef NO_16BIT
- else if(fr->af.encoding & MPG123_ENC_16)
- basic_format = f_16;
-#endif
-#ifndef NO_8BIT
- else if(fr->af.encoding & MPG123_ENC_8)
- basic_format = f_8;
-#endif
-#ifndef NO_REAL
- else if(fr->af.encoding & MPG123_ENC_FLOAT)
- basic_format = f_real;
-#endif
-#ifndef NO_32BIT
- else if(fr->af.encoding & MPG123_ENC_32)
- basic_format = f_32;
-#endif
-
- /* Make sure the chosen format is compiled into this lib. */
- if(basic_format == f_none)
- {
- if(NOQUIET) error("set_synth_functions: This output format is disabled in this build!");
-
- return -1;
- }
-
- /* Be explicit about downsampling variant. */
- switch(fr->down_sample)
- {
- case 0: resample = r_1to1; break;
-#ifndef NO_DOWNSAMPLE
- case 1: resample = r_2to1; break;
- case 2: resample = r_4to1; break;
-#endif
-#ifndef NO_NTOM
- case 3: resample = r_ntom; break;
-#endif
- }
-
- if(resample == r_none)
- {
- if(NOQUIET) error("set_synth_functions: This resampling mode is not supported in this build!");
-
- return -1;
- }
-
- debug2("selecting synth: resample=%i format=%i", resample, basic_format);
- /* Finally selecting the synth functions for stereo / mono. */
- fr->synth = fr->synths.plain[resample][basic_format];
- fr->synth_stereo = fr->synths.stereo[resample][basic_format];
- fr->synth_mono = fr->af.channels==2
- ? fr->synths.mono2stereo[resample][basic_format] /* Mono MPEG file decoded to stereo. */
- : fr->synths.mono[resample][basic_format]; /* Mono MPEG file decoded to mono. */
-
- if(find_dectype(fr) != MPG123_OK) /* Actually determine the currently active decoder breed. */
- {
- fr->err = MPG123_BAD_DECODER_SETUP;
- return MPG123_ERR;
- }
-
- if(frame_buffers(fr) != 0)
- {
- fr->err = MPG123_NO_BUFFERS;
- if(NOQUIET) error("Failed to set up decoder buffers!");
-
- return MPG123_ERR;
- }
-
-#ifndef NO_8BIT
- if(basic_format == f_8)
- {
- if(make_conv16to8_table(fr) != 0)
- {
- if(NOQUIET) error("Failed to set up conv16to8 table!");
- /* it's a bit more work to get proper error propagation up */
- return -1;
- }
- }
-#endif
-
-#ifdef OPT_MMXORSSE
- /* Special treatment for MMX, SSE and 3DNowExt stuff.
- The real-decoding SSE for x86-64 uses normal tables! */
- if(fr->cpu_opts.class == mmxsse
-# ifndef NO_REAL
- && basic_format != f_real
-# endif
-# ifndef NO_32BIT
- && basic_format != f_32
-# endif
-# ifdef ACCURATE_ROUNDING
- && fr->cpu_opts.type != sse
- && fr->cpu_opts.type != x86_64
-# endif
- )
- {
-#ifndef NO_LAYER3
- init_layer3_stuff(fr, init_layer3_gainpow2_mmx);
-#endif
-#ifndef NO_LAYER12
- init_layer12_stuff(fr, init_layer12_table_mmx);
-#endif
- fr->make_decode_tables = make_decode_tables_mmx;
- }
- else
-#endif
- {
-#ifndef NO_LAYER3
- init_layer3_stuff(fr, init_layer3_gainpow2);
-#endif
-#ifndef NO_LAYER12
- init_layer12_stuff(fr, init_layer12_table);
-#endif
- fr->make_decode_tables = make_decode_tables;
- }
-
- /* We allocated the table buffers just now, so (re)create the tables. */
- fr->make_decode_tables(fr);
-
- return 0;
-}
-
-int frame_cpu_opt(mpg123_handle *fr, const char* cpu)
-{
- const char* chosen = ""; /* the chosen decoder opt as string */
- enum optdec want_dec = nodec;
- int done = 0;
- int auto_choose = 0;
-#ifdef OPT_DITHER
- int dithered = FALSE; /* If some dithered decoder is chosen. */
-#endif
-
- want_dec = dectype(cpu);
- auto_choose = want_dec == autodec;
- /* Fill whole array of synth functions with generic code first. */
- fr->synths = synth_base;
-
-#ifndef OPT_MULTI
- {
- if(!auto_choose && want_dec != defopt)
- {
- if(NOQUIET) error2("you wanted decoder type %i, I only have %i", want_dec, defopt);
- }
- auto_choose = TRUE; /* There will be only one choice anyway. */
- }
-#endif
-
- fr->cpu_opts.type = nodec;
- /* covers any i386+ cpu; they actually differ only in the synth_1to1 function, mostly... */
-#ifdef OPT_X86
-
-#ifdef OPT_MULTI
-#ifndef NO_LAYER3
-#if (defined OPT_3DNOW || defined OPT_3DNOWEXT)
- fr->cpu_opts.the_dct36 = dct36;
-#endif
-#endif
-#endif
-
- if(cpu_i586(cpu_flags))
- {
-# ifdef OPT_MULTI
- debug2("standard flags: 0x%08x\textended flags: 0x%08x", cpu_flags.std, cpu_flags.ext);
-# endif
- #ifdef OPT_SSE
- if( !done && (auto_choose || want_dec == sse)
- && cpu_sse(cpu_flags) && cpu_mmx(cpu_flags) )
- {
- chosen = "SSE";
- fr->cpu_opts.type = sse;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_sse;
-# ifdef ACCURATE_ROUNDING
- fr->synths.stereo[r_1to1][f_16] = synth_1to1_stereo_sse;
-# endif
-# endif
-# ifndef NO_REAL
- fr->synths.plain[r_1to1][f_real] = synth_1to1_real_sse;
- fr->synths.stereo[r_1to1][f_real] = synth_1to1_real_stereo_sse;
-# endif
-# ifndef NO_32BIT
- fr->synths.plain[r_1to1][f_32] = synth_1to1_s32_sse;
- fr->synths.stereo[r_1to1][f_32] = synth_1to1_s32_stereo_sse;
-# endif
- done = 1;
- }
- #endif
-# ifdef OPT_3DNOWEXT
- if( !done && (auto_choose || want_dec == dreidnowext )
- && cpu_3dnow(cpu_flags)
- && cpu_3dnowext(cpu_flags)
- && cpu_mmx(cpu_flags) )
- {
- chosen = "3DNowExt";
- fr->cpu_opts.type = dreidnowext;
-#ifdef OPT_MULTI
-# ifndef NO_LAYER3
- fr->cpu_opts.the_dct36 = dct36_3dnowext;
-# endif
-#endif
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_3dnowext;
-# endif
- done = 1;
- }
- #endif
- #ifdef OPT_3DNOW
- if( !done && (auto_choose || want_dec == dreidnow)
- && cpu_3dnow(cpu_flags) && cpu_mmx(cpu_flags) )
- {
- chosen = "3DNow";
- fr->cpu_opts.type = dreidnow;
-#ifdef OPT_MULTI
-# ifndef NO_LAYER3
- fr->cpu_opts.the_dct36 = dct36_3dnow;
-# endif
-#endif
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_3dnow;
-# endif
- done = 1;
- }
- #endif
- #ifdef OPT_MMX
- if( !done && (auto_choose || want_dec == mmx)
- && cpu_mmx(cpu_flags) )
- {
- chosen = "MMX";
- fr->cpu_opts.type = mmx;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_mmx;
-# endif
- done = 1;
- }
- #endif
- #ifdef OPT_I586
- if(!done && (auto_choose || want_dec == ifuenf))
- {
- chosen = "i586/pentium";
- fr->cpu_opts.type = ifuenf;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_i586;
-# endif
- done = 1;
- }
- #endif
- #ifdef OPT_I586_DITHER
- if(!done && (auto_choose || want_dec == ifuenf_dither))
- {
- chosen = "dithered i586/pentium";
- fr->cpu_opts.type = ifuenf_dither;
- dithered = TRUE;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_i586_dither;
-# ifndef NO_DOWNSAMPLE
- fr->synths.plain[r_2to1][f_16] = synth_2to1_dither;
- fr->synths.plain[r_4to1][f_16] = synth_4to1_dither;
-# endif
-# endif
- done = 1;
- }
- #endif
- }
- #ifdef OPT_I486
- /* That won't cooperate in multi opt mode - forcing i486 in layer3.c
- But still... here it is... maybe for real use in future. */
- if(!done && (auto_choose || want_dec == ivier))
- {
- chosen = "i486";
- fr->cpu_opts.type = ivier;
- done = 1;
- }
- #endif
- #ifdef OPT_I386
- if(!done && (auto_choose || want_dec == idrei))
- {
- chosen = "i386";
- fr->cpu_opts.type = idrei;
- done = 1;
- }
- #endif
-
- if(done)
- {
- /*
- We have chosen some x86 decoder... fillup some i386 stuff.
- There is an open question about using dithered synth_1to1 for 8bit wrappers.
- For quality it won't make sense, but wrapped i586_dither wrapped may still be faster...
- */
- enum synth_resample ri;
- enum synth_format fi;
-# ifndef NO_8BIT
-# ifndef NO_16BIT /* possibility to use a 16->8 wrapper... */
- if(fr->synths.plain[r_1to1][f_16] != synth_base.plain[r_1to1][f_16])
- {
- fr->synths.plain[r_1to1][f_8] = synth_1to1_8bit_wrap;
- fr->synths.mono[r_1to1][f_8] = synth_1to1_8bit_wrap_mono;
- fr->synths.mono2stereo[r_1to1][f_8] = synth_1to1_8bit_wrap_mono2stereo;
- }
-# endif
-# endif
- for(ri=0; ri<r_limit; ++ri)
- for(fi=0; fi<f_limit; ++fi)
- {
- if(fr->synths.plain[ri][fi] == synth_base.plain[ri][fi])
- fr->synths.plain[ri][fi] = plain_i386[ri][fi];
- }
- }
-
-#endif /* OPT_X86 */
-
-#ifdef OPT_X86_64
- if(!done && (auto_choose || want_dec == x86_64))
- {
- chosen = "x86-64 (SSE)";
- fr->cpu_opts.type = x86_64;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_x86_64;
- fr->synths.stereo[r_1to1][f_16] = synth_1to1_stereo_x86_64;
-# endif
-# ifndef NO_REAL
- fr->synths.plain[r_1to1][f_real] = synth_1to1_real_x86_64;
- fr->synths.stereo[r_1to1][f_real] = synth_1to1_real_stereo_x86_64;
-# endif
-# ifndef NO_32BIT
- fr->synths.plain[r_1to1][f_32] = synth_1to1_s32_x86_64;
- fr->synths.stereo[r_1to1][f_32] = synth_1to1_s32_stereo_x86_64;
-# endif
- done = 1;
- }
-#endif
-
-#ifdef OPT_GENERIC_DITHER
- if(!done && (auto_choose || want_dec == generic_dither))
- {
- chosen = "dithered generic";
- fr->cpu_opts.type = generic_dither;
- dithered = TRUE;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_dither;
-# ifndef NO_DOWNSAMPLE
- fr->synths.plain[r_2to1][f_16] = synth_2to1_dither;
- fr->synths.plain[r_4to1][f_16] = synth_4to1_dither;
-# endif
-# endif
- done = 1;
- }
-#endif
-
-# ifdef OPT_ALTIVEC
- if(!done && (auto_choose || want_dec == altivec))
- {
- chosen = "AltiVec";
- fr->cpu_opts.type = altivec;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_altivec;
- fr->synths.stereo[r_1to1][f_16] = synth_1to1_stereo_altivec;
-# endif
-# ifndef NO_REAL
- fr->synths.plain[r_1to1][f_real] = synth_1to1_real_altivec;
- fr->synths.stereo[r_1to1][f_real] = synth_1to1_real_stereo_altivec;
-# endif
-# ifndef NO_32BIT
- fr->synths.plain[r_1to1][f_32] = synth_1to1_s32_altivec;
- fr->synths.stereo[r_1to1][f_32] = synth_1to1_s32_stereo_altivec;
-# endif
- done = 1;
- }
-# endif
-
-# ifdef OPT_ARM
- if(!done && (auto_choose || want_dec == arm))
- {
- chosen = "ARM";
- fr->cpu_opts.type = arm;
-# ifndef NO_16BIT
- fr->synths.plain[r_1to1][f_16] = synth_1to1_arm;
-# endif
- done = 1;
- }
-# endif
-
-# ifdef OPT_GENERIC
- if(!done && (auto_choose || want_dec == generic))
- {
- chosen = "generic";
- fr->cpu_opts.type = generic;
- done = 1;
- }
-# endif
-
- fr->cpu_opts.class = decclass(fr->cpu_opts.type);
-
-# ifndef NO_8BIT
-# ifndef NO_16BIT /* possibility to use a 16->8 wrapper... */
- /* Last chance to use some optimized routine via generic wrappers (for 8bit). */
- if( fr->cpu_opts.type != ifuenf_dither
- && fr->cpu_opts.type != generic_dither
- && fr->synths.plain[r_1to1][f_16] != synth_base.plain[r_1to1][f_16] )
- {
- fr->synths.plain[r_1to1][f_8] = synth_1to1_8bit_wrap;
- fr->synths.mono[r_1to1][f_8] = synth_1to1_8bit_wrap_mono;
- fr->synths.mono2stereo[r_1to1][f_8] = synth_1to1_8bit_wrap_mono2stereo;
- }
-# endif
-# endif
-
-#ifdef OPT_DITHER
- if(done && dithered)
- {
- /* run-time dither noise table generation */
- if(!frame_dither_init(fr))
- {
- if(NOQUIET) error("Dither noise setup failed!");
- return 0;
- }
- }
-#endif
-
- if(done)
- {
- if(VERBOSE) fprintf(stderr, "Decoder: %s\n", chosen);
- return 1;
- }
- else
- {
- if(NOQUIET) error("Could not set optimization!");
- return 0;
- }
-}
-
-enum optdec dectype(const char* decoder)
-{
- enum optdec dt;
- if( (decoder == NULL)
- || (decoder[0] == 0) )
- return autodec;
-
- for(dt=autodec; dt<nodec; ++dt)
- if(!strcasecmp(decoder, decname[dt])) return dt;
-
- return nodec; /* If we found nothing... */
-}
-
-#ifdef OPT_MULTI
-
-/* same number of entries as full list, but empty at beginning */
-static const char *mpg123_supported_decoder_list[] =
-{
- #ifdef OPT_SSE
- NULL,
- #endif
- #ifdef OPT_3DNOWEXT
- NULL,
- #endif
- #ifdef OPT_3DNOW
- NULL,
- #endif
- #ifdef OPT_MMX
- NULL,
- #endif
- #ifdef OPT_I586
- NULL,
- #endif
- #ifdef OPT_I586_DITHER
- NULL,
- #endif
- #ifdef OPT_I486
- NULL,
- #endif
- #ifdef OPT_I386
- NULL,
- #endif
- #ifdef OPT_ALTIVEC
- NULL,
- #endif
- #ifdef OPT_X86_64
- NULL,
- #endif
- #ifdef OPT_ARM
- NULL,
- #endif
- #ifdef OPT_GENERIC_FLOAT
- NULL,
- #endif
-# ifdef OPT_GENERIC
- NULL,
-# endif
-# ifdef OPT_GENERIC_DITHER
- NULL,
-# endif
- NULL
-};
-#endif
-
-static const char *mpg123_decoder_list[] =
-{
- #ifdef OPT_SSE
- dn_SSE,
- #endif
- #ifdef OPT_3DNOWEXT
- dn_3DNowExt,
- #endif
- #ifdef OPT_3DNOW
- dn_3DNow,
- #endif
- #ifdef OPT_MMX
- dn_MMX,
- #endif
- #ifdef OPT_I586
- dn_i586,
- #endif
- #ifdef OPT_I586_DITHER
- dn_i586_dither,
- #endif
- #ifdef OPT_I486
- dn_i486,
- #endif
- #ifdef OPT_I386
- dn_i386,
- #endif
- #ifdef OPT_ALTIVEC
- dn_AltiVec,
- #endif
- #ifdef OPT_X86_64
- dn_x86_64,
- #endif
- #ifdef OPT_ARM
- dn_ARM,
- #endif
- #ifdef OPT_GENERIC
- dn_generic,
- #endif
- #ifdef OPT_GENERIC_DITHER
- dn_generic_dither,
- #endif
- NULL
-};
-
-void check_decoders(void )
-{
-#ifndef OPT_MULTI
- /* In non-multi mode, only the full list (one entry) is used. */
- return;
-#else
- const char **d = mpg123_supported_decoder_list;
-#ifdef OPT_X86
- getcpuflags(&cpu_flags);
- if(cpu_i586(cpu_flags))
- {
- /* not yet: if(cpu_sse2(cpu_flags)) printf(" SSE2");
- if(cpu_sse3(cpu_flags)) printf(" SSE3"); */
-#ifdef OPT_SSE
- if(cpu_sse(cpu_flags)) *(d++) = decname[sse];
-#endif
-#ifdef OPT_3DNOWEXT
- if(cpu_3dnowext(cpu_flags)) *(d++) = decname[dreidnowext];
-#endif
-#ifdef OPT_3DNOW
- if(cpu_3dnow(cpu_flags)) *(d++) = decname[dreidnow];
-#endif
-#ifdef OPT_MMX
- if(cpu_mmx(cpu_flags)) *(d++) = decname[mmx];
-#endif
-#ifdef OPT_I586
- *(d++) = decname[ifuenf];
-#endif
-#ifdef OPT_I586_DITHER
- *(d++) = decname[ifuenf_dither];
-#endif
- }
-#endif
-/* just assume that the i486 built is run on a i486 cpu... */
-#ifdef OPT_I486
- *(d++) = decname[ivier];
-#endif
-#ifdef OPT_ALTIVEC
- *(d++) = decname[altivec];
-#endif
-/* every supported x86 can do i386, any cpu can do generic */
-#ifdef OPT_I386
- *(d++) = decname[idrei];
-#endif
-#ifdef OPT_X86_64
- *(d++) = decname[x86_64];
-#endif
-#ifdef OPT_ARM
- *(d++) = decname[arm];
-#endif
-#ifdef OPT_GENERIC
- *(d++) = decname[generic];
-#endif
-#ifdef OPT_GENERIC_DITHER
- *(d++) = decname[generic_dither];
-#endif
-#endif /* ndef OPT_MULTI */
-}
-
-const char* attribute_align_arg mpg123_current_decoder(mpg123_handle *mh)
-{
- if(mh == NULL) return NULL;
-
- return decname[mh->cpu_opts.type];
-}
-
-const char attribute_align_arg **mpg123_decoders(void){ return mpg123_decoder_list; }
-const char attribute_align_arg **mpg123_supported_decoders(void)
-{
-#ifdef OPT_MULTI
- return mpg123_supported_decoder_list;
-#else
- return mpg123_decoder_list;
-#endif
-}
diff --git a/src/mpg123/libmpg123/optimize.h b/src/mpg123/libmpg123/optimize.h
deleted file mode 100644
index 620c3ad..0000000
--- a/src/mpg123/libmpg123/optimize.h
+++ /dev/null
@@ -1,211 +0,0 @@
-#ifndef MPG123_H_OPTIMIZE
-#define MPG123_H_OPTIMIZE
-/*
- optimize: get a grip on the different optimizations
-
- copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis, taking from mpg123.[hc]
-
- for building mpg123 with one optimization only, you have to choose exclusively between
- OPT_GENERIC (generic C code for everyone)
- OPT_GENERIC_DITHER (same with dithering for 1to1)
- OPT_I386 (Intel i386)
- OPT_I486 (Somewhat special code for i486; does not work together with others.)
- OPT_I586 (Intel Pentium)
- OPT_I586_DITHER (Intel Pentium with dithering/noise shaping for enhanced quality)
- OPT_MMX (Intel Pentium and compatibles with MMX, fast, but not the best accuracy)
- OPT_3DNOW (AMD 3DNow!, K6-2/3, Athlon, compatibles...)
- OPT_3DNOWEXT (AMD 3DNow! extended, generally Athlon, compatibles...)
- OPT_ALTIVEC (Motorola/IBM PPC with AltiVec under MacOSX)
- OPT_X86_64 (x86-64 / AMD64 / Intel 64)
-
- or you define OPT_MULTI and give a combination which makes sense (do not include i486, do not mix altivec and x86).
-
- I still have to examine the dynamics of this here together with REAL_IS_FIXED.
- Basic point is: Don't use REAL_IS_FIXED with something else than generic or i386.
-
- Also, one should minimize code size by really ensuring that only functions that are really needed are included.
- Currently, all generic functions will be always there (to be safe for fallbacks for advanced decoders).
- Strictly, at least the synth_1to1 should not be necessary for single-decoder mode.
-*/
-
-
-/* Runtime optimization interface now here: */
-
-enum optdec
-{ /* autodec needs to be =0 and the first, nodec needs to be the last -- for loops! */
- autodec=0, generic, generic_dither, idrei,
- ivier, ifuenf, ifuenf_dither, mmx,
- dreidnow, dreidnowext, altivec, sse, x86_64, arm,
- nodec
-};
-enum optcla { nocla=0, normal, mmxsse };
-
-/* - Set up the table of synth functions for current decoder choice. */
-int frame_cpu_opt(mpg123_handle *fr, const char* cpu);
-/* - Choose, from the synth table, the synth functions to use for current output format/rate. */
-int set_synth_functions(mpg123_handle *fr);
-/* - Parse decoder name and return numerical code. */
-enum optdec dectype(const char* decoder);
-/* - Return the default decoder type. */
-enum optdec defdec(void);
-/* - Return the class of a decoder type (mmxsse or normal). */
-enum optcla decclass(const enum optdec);
-
-/* Now comes a whole lot of definitions, for multi decoder mode and single decoder mode.
- Because of the latter, it may look redundant at times. */
-
-/* this is included in mpg123.h, which includes config.h */
-#ifdef CCALIGN
-#define ALIGNED(a) __attribute__((aligned(a)))
-#else
-#define ALIGNED(a)
-#endif
-
-/* Safety catch for invalid decoder choice. */
-#ifdef REAL_IS_FIXED
-#if (defined OPT_I486) || (defined OPT_I586) || (defined OPT_I586_DITHER) \
- || (defined OPT_MMX) || (defined OPT_SSE) || (defined_OPT_ALTIVEC) \
- || (defined OPT_3DNOW) || (defined OPT_3DNOWEXT) || (defined OPT_X86_64) || (defined OPT_GENERIC_DITHER)
-#error "Bad decoder choice together with fixed point math!"
-#endif
-#endif
-
-#if (defined NO_LAYER1 && defined NO_LAYER2)
-#define NO_LAYER12
-#endif
-
-#ifdef OPT_GENERIC
-#ifndef OPT_MULTI
-# define defopt generic
-#endif
-#endif
-
-#ifdef OPT_GENERIC_DITHER
-#define OPT_DITHER
-#ifndef OPT_MULTI
-# define defopt generic_dither
-#endif
-#endif
-
-/* i486 is special... always alone! */
-#ifdef OPT_I486
-#define OPT_X86
-#define defopt ivier
-#ifdef OPT_MULTI
-#error "i486 can only work alone!"
-#endif
-#define FIR_BUFFER_SIZE 128
-#define FIR_SIZE 16
-#endif
-
-#ifdef OPT_I386
-#define OPT_X86
-#ifndef OPT_MULTI
-# define defopt idrei
-#endif
-#endif
-
-#ifdef OPT_I586
-#define OPT_X86
-#ifndef OPT_MULTI
-# define defopt ifuenf
-#endif
-#endif
-
-#ifdef OPT_I586_DITHER
-#define OPT_X86
-#define OPT_DITHER
-#ifndef OPT_MULTI
-# define defopt ifuenf_dither
-#endif
-#endif
-
-/* We still have some special code around MMX tables. */
-
-#ifdef OPT_MMX
-#define OPT_MMXORSSE
-#define OPT_X86
-#ifndef OPT_MULTI
-# define defopt mmx
-#endif
-#endif
-
-#ifdef OPT_SSE
-#define OPT_MMXORSSE
-#define OPT_MPLAYER
-#define OPT_X86
-#ifndef OPT_MULTI
-# define defopt sse
-#endif
-#endif
-
-#ifdef OPT_3DNOWEXT
-#define OPT_MMXORSSE
-#define OPT_MPLAYER
-#define OPT_X86
-#ifndef OPT_MULTI
-# define defopt dreidnowext
-# define opt_dct36(fr) dct36_3dnowext
-#endif
-#endif
-
-#ifdef OPT_MPLAYER
-extern const int costab_mmxsse[];
-#endif
-
-/* 3dnow used to use synth_1to1_i586 for mono / 8bit conversion - was that intentional? */
-/* I'm trying to skip the pentium code here ... until I see that that is indeed a bad idea */
-#ifdef OPT_3DNOW
-#define OPT_X86
-#ifndef OPT_MULTI
-# define defopt dreidnow
-# define opt_dct36(fr) dct36_3dnow
-#endif
-#endif
-
-#ifdef OPT_ALTIVEC
-#ifndef OPT_MULTI
-# define defopt altivec
-#endif
-#endif
-
-#ifdef OPT_X86_64
-#define OPT_MMXORSSE
-#ifndef OPT_MULTI
-# define defopt x86_64
-#endif
-#endif
-
-#ifdef OPT_ARM
-#ifndef OPT_MULTI
-# define defopt arm
-#endif
-#endif
-
-/* used for multi opt mode and the single 3dnow mode to have the old 3dnow test flag still working */
-void check_decoders(void);
-
-/*
- Now come two blocks of standard definitions for multi-decoder mode and single-decoder mode.
- Most stuff is so automatic that it's indeed generated by some inline shell script.
- Remember to use these scripts when possible, instead of direct repetitive hacking.
-*/
-
-#ifdef OPT_MULTI
-
-# define defopt nodec
-
-# if (defined OPT_3DNOW || defined OPT_3DNOWEXT)
-# define opt_dct36(fr) ((fr)->cpu_opts.the_dct36)
-# endif
-
-#endif /* OPT_MULTI else */
-
-# ifndef opt_dct36
-# define opt_dct36(fr) dct36
-# endif
-
-#endif /* MPG123_H_OPTIMIZE */
-
diff --git a/src/mpg123/libmpg123/parse.c b/src/mpg123/libmpg123/parse.c
deleted file mode 100644
index 0fd51c5..0000000
--- a/src/mpg123/libmpg123/parse.c
+++ /dev/null
@@ -1,1152 +0,0 @@
-/*
- parse: spawned from common; clustering around stream/frame parsing
-
- copyright ?-2009 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp & Thomas Orgis
-*/
-
-#include "mpg123lib_intern.h"
-
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "getbits.h"
-
-#if defined (WANT_WIN32_SOCKETS)
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#endif
-
-/* a limit for number of frames in a track; beyond that unsigned long may not be enough to hold byte addresses */
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef ULONG_MAX
-/* hm, is this portable across preprocessors? */
-#define ULONG_MAX ((unsigned long)-1)
-#endif
-#define TRACK_MAX_FRAMES ULONG_MAX/4/1152
-
-#include "debug.h"
-
-#define bsbufid(fr) (fr)->bsbuf==(fr)->bsspace[0] ? 0 : ((fr)->bsbuf==fr->bsspace[1] ? 1 : ( (fr)->bsbuf==(fr)->bsspace[0]+512 ? 2 : ((fr)->bsbuf==fr->bsspace[1]+512 ? 3 : -1) ) )
-
-/*
- AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
- A: sync
- B: mpeg version
- C: layer
- D: CRC
- E: bitrate
- F:sampling rate
- G: padding
- H: private
- I: channel mode
- J: mode ext
- K: copyright
- L: original
- M: emphasis
-
- old compare mask 0xfffffd00:
- 11111111 11111111 11111101 00000000
-
- means: everything must match excluding padding and channel mode, ext mode, ...
- But a vbr stream's headers will differ in bitrate!
- We are already strict in allowing only frames of same type in stream, we should at least watch out for VBR while being strict.
-
- So a better mask is:
- 11111111 11111111 00001101 00000000
-
- Even more, I'll allow varying crc bit.
- 11111111 11111110 00001101 00000000
-
- (still unsure about this private bit)
-*/
-#define HDRCMPMASK 0xfffe0d00
-#define HDRSAMPMASK 0xc00 /* 1100 00000000, FF bits (sample rate) */
-
-/* bitrates for [mpeg1/2][layer] */
-static const int tabsel_123[2][3][16] =
-{
- {
- {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
- {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
- {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,}
- },
- {
- {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
- {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
- {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,}
- }
-};
-
-const long freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
-
-static int decode_header(mpg123_handle *fr,unsigned long newhead);
-
-/* These two are to be replaced by one function that gives all the frame parameters (for outsiders).*/
-
-int frame_bitrate(mpg123_handle *fr)
-{
- return tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index];
-}
-
-long frame_freq(mpg123_handle *fr)
-{
- return freqs[fr->sampling_frequency];
-}
-
-#define free_format_header(head) ( ((head & 0xffe00000) == 0xffe00000) && ((head>>17)&3) && (((head>>12)&0xf) == 0x0) && (((head>>10)&0x3) != 0x3 ))
-
-/* compiler is smart enought to inline this one or should I really do it as macro...? */
-int head_check(unsigned long head)
-{
- if
- (
- /* first 11 bits are set to 1 for frame sync */
- ((head & 0xffe00000) != 0xffe00000)
- ||
- /* layer: 01,10,11 is 1,2,3; 00 is reserved */
- (!((head>>17)&3))
- ||
- /* 1111 means bad bitrate */
- (((head>>12)&0xf) == 0xf)
- ||
- /* sampling freq: 11 is reserved */
- (((head>>10)&0x3) == 0x3 )
- /* here used to be a mpeg 2.5 check... re-enabled 2.5 decoding due to lack of evidence that it is really not good */
- )
- {
- return FALSE;
- }
- /* if no check failed, the header is valid (hopefully)*/
- else
- {
- return TRUE;
- }
-}
-
-static int check_lame_tag(mpg123_handle *fr)
-{
- /*
- going to look for Xing or Info at some position after the header
- MPEG 1 MPEG 2/2.5 (LSF)
- Stereo, Joint Stereo, Dual Channel 32 17
- Mono 17 9
-
- Also, how to avoid false positives? I guess I should interpret more of the header to rule that out(?).
- I hope that ensuring all zeros until tag start is enough.
- */
- int lame_offset = (fr->stereo == 2) ? (fr->lsf ? 17 : 32 ) : (fr->lsf ? 9 : 17);
- /* At least skip the decoder delay. */
-#ifdef GAPLESS
- if(fr->p.flags & MPG123_GAPLESS)
- {
- if(fr->begin_s == 0) frame_gapless_init(fr, GAPLESS_DELAY, 0);
- }
-#endif
-
- if(fr->framesize >= 120+lame_offset) /* traditional Xing header is 120 bytes */
- {
- int i;
- int lame_type = 0;
- debug("do we have lame tag?");
- /* only search for tag when all zero before it (apart from checksum) */
- for(i=2; i < lame_offset; ++i) if(fr->bsbuf[i] != 0) break;
- if(i == lame_offset)
- {
- debug("possibly...");
- if
- (
- (fr->bsbuf[lame_offset] == 'I')
- && (fr->bsbuf[lame_offset+1] == 'n')
- && (fr->bsbuf[lame_offset+2] == 'f')
- && (fr->bsbuf[lame_offset+3] == 'o')
- )
- {
- lame_type = 1; /* We still have to see what there is */
- }
- else if
- (
- (fr->bsbuf[lame_offset] == 'X')
- && (fr->bsbuf[lame_offset+1] == 'i')
- && (fr->bsbuf[lame_offset+2] == 'n')
- && (fr->bsbuf[lame_offset+3] == 'g')
- )
- {
- lame_type = 2;
- fr->vbr = MPG123_VBR; /* Xing header means always VBR */
- }
- if(lame_type)
- {
- unsigned long xing_flags;
-
- /* we have one of these headers... */
- if(VERBOSE2) fprintf(stderr, "Note: Xing/Lame/Info header detected\n");
- /* now interpret the Xing part, I have 120 bytes total for sure */
- /* there are 4 bytes for flags, but only the last byte contains known ones */
- lame_offset += 4; /* now first byte after Xing/Name */
- /* 4 bytes dword for flags */
- #define make_long(a, o) ((((unsigned long) a[o]) << 24) | (((unsigned long) a[o+1]) << 16) | (((unsigned long) a[o+2]) << 8) | ((unsigned long) a[o+3]))
- /* 16 bit */
- #define make_short(a,o) ((((unsigned short) a[o]) << 8) | ((unsigned short) a[o+1]))
- xing_flags = make_long(fr->bsbuf, lame_offset);
- lame_offset += 4;
- debug1("Xing: flags 0x%08lx", xing_flags);
- if(xing_flags & 1) /* frames */
- {
- if(fr->p.flags & MPG123_IGNORE_STREAMLENGTH)
- {
- if(VERBOSE3)
- fprintf(stderr, "Note: Ignoring Xing frames because of MPG123_IGNORE_STREAMLENGTH\n");
- }
- else
- {
- /*
- In theory, one should use that value for skipping...
- When I know the exact number of samples I could simply count in flush_output,
- but that's problematic with seeking and such.
- I still miss the real solution for detecting the end.
- */
- fr->track_frames = (off_t) make_long(fr->bsbuf, lame_offset);
- if(fr->track_frames > TRACK_MAX_FRAMES) fr->track_frames = 0; /* endless stream? */
- #ifdef GAPLESS
- /* if no further info there, remove/add at least the decoder delay */
- if(fr->p.flags & MPG123_GAPLESS)
- {
- off_t length = fr->track_frames * spf(fr);
- if(length > 1)
- frame_gapless_init(fr, GAPLESS_DELAY, length+GAPLESS_DELAY);
- }
- #endif
- if(VERBOSE3) fprintf(stderr, "Note: Xing: %lu frames\n", (long unsigned)fr->track_frames);
- }
-
- lame_offset += 4;
- }
- if(xing_flags & 0x2) /* bytes */
- {
- if(fr->p.flags & MPG123_IGNORE_STREAMLENGTH)
- {
- if(VERBOSE3)
- fprintf(stderr, "Note: Ignoring Xing bytes because of MPG123_IGNORE_STREAMLENGTH\n");
- }
- else
- {
- unsigned long xing_bytes = make_long(fr->bsbuf, lame_offset); /* We assume that this is the _total_ size of the file, including Xing frame ... and ID3 frames...
- It's not that clearly documented... */
- if(fr->rdat.filelen < 1)
- fr->rdat.filelen = (off_t) xing_bytes; /* One could start caring for overflow here. */
- else
- {
- if((off_t) xing_bytes != fr->rdat.filelen && NOQUIET)
- {
- double diff = 1.0/fr->rdat.filelen * (fr->rdat.filelen - (off_t)xing_bytes);
- if(diff < 0.) diff = -diff;
-
- if(VERBOSE3)
- fprintf(stderr, "Note: Xing stream size %lu differs by %f%% from determined/given file size!\n", xing_bytes, diff);
-
- if(diff > 1.)
- fprintf(stderr, "Warning: Xing stream size off by more than 1%%, fuzzy seeking may be even more fuzzy than by design!\n");
- }
- }
-
- if(VERBOSE3)
- fprintf(stderr, "Note: Xing: %lu bytes\n", (long unsigned)xing_bytes);
- }
-
- lame_offset += 4;
- }
- if(xing_flags & 0x4) /* TOC */
- {
- frame_fill_toc(fr, fr->bsbuf+lame_offset);
- lame_offset += 100; /* just skip */
- }
- if(xing_flags & 0x8) /* VBR quality */
- {
- if(VERBOSE3)
- {
- unsigned long xing_quality = make_long(fr->bsbuf, lame_offset);
- fprintf(stderr, "Note: Xing: quality = %lu\n", (long unsigned)xing_quality);
- }
- lame_offset += 4;
- }
- /* I guess that either 0 or LAME extra data follows */
- /* there may this crc16 be floating around... (?) */
- if(fr->bsbuf[lame_offset] != 0)
- {
- unsigned char lame_vbr;
- float replay_gain[2] = {0,0};
- float peak = 0;
- float gain_offset = 0; /* going to be +6 for old lame that used 83dB */
- char nb[10];
- memcpy(nb, fr->bsbuf+lame_offset, 9);
- nb[9] = 0;
- if(VERBOSE3) fprintf(stderr, "Note: Info: Encoder: %s\n", nb);
- if(!strncmp("LAME", nb, 4))
- {
- gain_offset = 6;
- debug("TODO: finish lame detetcion...");
- }
- lame_offset += 9;
- /* the 4 big bits are tag revision, the small bits vbr method */
- lame_vbr = fr->bsbuf[lame_offset] & 15;
- if(VERBOSE3)
- {
- fprintf(stderr, "Note: Info: rev %u\n", fr->bsbuf[lame_offset] >> 4);
- fprintf(stderr, "Note: Info: vbr mode %u\n", lame_vbr);
- }
- lame_offset += 1;
- switch(lame_vbr)
- {
- /* from rev1 proposal... not sure if all good in practice */
- case 1:
- case 8: fr->vbr = MPG123_CBR; break;
- case 2:
- case 9: fr->vbr = MPG123_ABR; break;
- default: fr->vbr = MPG123_VBR; /* 00==unknown is taken as VBR */
- }
- /* skipping: lowpass filter value */
- lame_offset += 1;
- /* replaygain */
- /* 32bit float: peak amplitude -- why did I parse it as int before??*/
- /* Ah, yes, lame seems to store it as int since some day in 2003; I've only seen zeros anyway until now, bah! */
- if
- (
- (fr->bsbuf[lame_offset] != 0)
- || (fr->bsbuf[lame_offset+1] != 0)
- || (fr->bsbuf[lame_offset+2] != 0)
- || (fr->bsbuf[lame_offset+3] != 0)
- )
- {
- debug("Wow! Is there _really_ a non-zero peak value? Now is it stored as float or int - how should I know?");
- /* byte*peak_bytes = (byte*) &peak;
- ... endianess ... just copy bytes to avoid floating point operation on unaligned memory?
- peak_bytes[0] = ...
- peak = *(float*) (fr->bsbuf+lame_offset); */
- }
- if(VERBOSE3) fprintf(stderr, "Note: Info: peak = %f (I won't use this)\n", peak);
- peak = 0; /* until better times arrived */
- lame_offset += 4;
- /*
- ReplayGain values - lame only writes radio mode gain...
- 16bit gain, 3 bits name, 3 bits originator, sign (1=-, 0=+), dB value*10 in 9 bits (fixed point)
- ignore the setting if name or originator == 000!
- radio 0 0 1 0 1 1 1 0 0 1 1 1 1 1 0 1
- audiophile 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0
- */
-
- for(i =0; i < 2; ++i)
- {
- unsigned char origin = (fr->bsbuf[lame_offset] >> 2) & 0x7; /* the 3 bits after that... */
- if(origin != 0)
- {
- unsigned char gt = fr->bsbuf[lame_offset] >> 5; /* only first 3 bits */
- if(gt == 1) gt = 0; /* radio */
- else if(gt == 2) gt = 1; /* audiophile */
- else continue;
- /* get the 9 bits into a number, divide by 10, multiply sign... happy bit banging */
- replay_gain[0] = (float) ((fr->bsbuf[lame_offset] & 0x2) ? -0.1 : 0.1) * (make_short(fr->bsbuf, lame_offset) & 0x1f);
- }
- lame_offset += 2;
- }
- if(VERBOSE3)
- {
- fprintf(stderr, "Note: Info: Radio Gain = %03.1fdB\n", replay_gain[0]);
- fprintf(stderr, "Note: Info: Audiophile Gain = %03.1fdB\n", replay_gain[1]);
- }
- for(i=0; i < 2; ++i)
- {
- if(fr->rva.level[i] <= 0)
- {
- fr->rva.peak[i] = 0; /* at some time the parsed peak should be used */
- fr->rva.gain[i] = replay_gain[i];
- fr->rva.level[i] = 0;
- }
- }
- lame_offset += 1; /* skipping encoding flags byte */
- if(fr->vbr == MPG123_ABR)
- {
- fr->abr_rate = fr->bsbuf[lame_offset];
- if(VERBOSE3) fprintf(stderr, "Note: Info: ABR rate = %u\n", fr->abr_rate);
- }
- lame_offset += 1;
- /* encoder delay and padding, two 12 bit values... lame does write them from int ...*/
- if(VERBOSE3)
- fprintf(stderr, "Note: Encoder delay = %i; padding = %i\n",
- ((((int) fr->bsbuf[lame_offset]) << 4) | (((int) fr->bsbuf[lame_offset+1]) >> 4)),
- (((((int) fr->bsbuf[lame_offset+1]) << 8) | (((int) fr->bsbuf[lame_offset+2]))) & 0xfff) );
- #ifdef GAPLESS
- if(fr->p.flags & MPG123_GAPLESS)
- {
- off_t length = fr->track_frames * spf(fr);
- off_t skipbegin = GAPLESS_DELAY + ((((int) fr->bsbuf[lame_offset]) << 4) | (((int) fr->bsbuf[lame_offset+1]) >> 4));
- off_t skipend = -GAPLESS_DELAY + (((((int) fr->bsbuf[lame_offset+1]) << 8) | (((int) fr->bsbuf[lame_offset+2]))) & 0xfff);
- debug3("preparing gapless mode for layer3: length %lu, skipbegin %lu, skipend %lu",
- (long unsigned)length, (long unsigned)skipbegin, (long unsigned)skipend);
- if(length > 1)
- frame_gapless_init(fr, skipbegin, (skipend < length) ? length-skipend : length);
- }
- #endif
- }
- /* switch buffer back ... */
- fr->bsbuf = fr->bsspace[fr->bsnum]+512;
- fr->bsnum = (fr->bsnum + 1) & 1;
- return 1; /* got it! */
- }
- }
- }
- return 0; /* no lame tag */
-}
-
-/* Just tell if the header is some mono. */
-static int header_mono(unsigned long newhead)
-{
- return ((newhead>>6)&0x3) == MPG_MD_MONO ? TRUE : FALSE;
-}
-
-/*
- That's a big one: read the next frame. 1 is success, <= 0 is some error
- Special error READER_MORE means: Please feed more data and try again.
-*/
-int read_frame(mpg123_handle *fr)
-{
- /* TODO: rework this thing */
- unsigned long newhead;
- off_t framepos;
- int ret;
- /* stuff that needs resetting if complete frame reading fails */
- int oldsize = fr->framesize;
- int oldphase = fr->halfphase;
-
- /* The counter for the search-first-header loop.
- It is persistent outside the loop to prevent seemingly endless loops
- when repeatedly headers are found that do not have valid followup headers. */
- int headcount = 0;
-
- fr->fsizeold=fr->framesize; /* for Layer3 */
-
- /* Speed-down hack: Play it again, Sam (the frame, I mean). */
- if (fr->p.halfspeed)
- {
- if(fr->halfphase) /* repeat last frame */
- {
- debug("repeat!");
- fr->to_decode = fr->to_ignore = TRUE;
- --fr->halfphase;
- fr->bitindex = 0;
- fr->wordpointer = (unsigned char *) fr->bsbuf;
- if(fr->lay == 3) memcpy (fr->bsbuf, fr->ssave, fr->ssize);
- if(fr->error_protection) fr->crc = getbits(fr, 16); /* skip crc */
- return 1;
- }
- else
- {
- fr->halfphase = fr->p.halfspeed - 1;
- }
- }
-
-read_again:
- /* In case we are looping to find a valid frame, discard any buffered data before the current position.
- This is essential to prevent endless looping, always going back to the beginning when feeder buffer is exhausted. */
- if(fr->rd->forget != NULL) fr->rd->forget(fr);
-
- debug2("trying to get frame %"OFF_P" at %"OFF_P, (off_p)fr->num+1, (off_p)fr->rd->tell(fr));
- if((ret = fr->rd->head_read(fr,&newhead)) <= 0){ debug("need more?"); goto read_frame_bad;}
-
-init_resync:
-
- fr->header_change = 2; /* output format change is possible... */
- if(fr->oldhead) /* check a following header for change */
- {
- if(fr->oldhead == newhead) fr->header_change = 0;
- else
- /* If they have the same sample rate. Note that only is _not_ the case for the first header, as we enforce sample rate match for following frames.
- So, during one stream, only change of stereoness is possible and indicated by header_change == 2. */
- if((fr->oldhead & HDRSAMPMASK) == (newhead & HDRSAMPMASK))
- {
- /* Now if both channel modes are mono or both stereo, it's no big deal. */
- if( header_mono(fr->oldhead) == header_mono(newhead))
- fr->header_change = 1;
- }
- }
-
-#ifdef SKIP_JUNK
- /* watch out for junk/tags on beginning of stream by invalid header */
- if(!fr->firsthead && !head_check(newhead)) {
-
- /* check for id3v2; first three bytes (of 4) are "ID3" */
- if((newhead & (unsigned long) 0xffffff00) == (unsigned long) 0x49443300)
- {
- int id3ret = 0;
- id3ret = parse_new_id3(fr, newhead);
- if (id3ret < 0){ debug("need more?"); ret = id3ret; goto read_frame_bad; }
-#ifndef NO_ID3V2
- else if(id3ret > 0){ debug("got ID3v2"); fr->metaflags |= MPG123_NEW_ID3|MPG123_ID3; }
- else debug("no useful ID3v2");
-#endif
-
- fr->oldhead = 0;
- goto read_again; /* Also in case of invalid ID3 tag (ret==0), try to get on track again. */
- }
- else if(VERBOSE2 && fr->silent_resync == 0) fprintf(stderr,"Note: Junk at the beginning (0x%08lx)\n",newhead);
-
- /* I even saw RIFF headers at the beginning of MPEG streams ;( */
- if(newhead == ('R'<<24)+('I'<<16)+('F'<<8)+'F') {
- if(VERBOSE2 && fr->silent_resync == 0) fprintf(stderr, "Note: Looks like a RIFF header.\n");
-
- if((ret=fr->rd->head_read(fr,&newhead))<=0){ debug("need more?"); goto read_frame_bad; }
-
- while(newhead != ('d'<<24)+('a'<<16)+('t'<<8)+'a')
- {
- if((ret=fr->rd->head_shift(fr,&newhead))<=0){ debug("need more?"); goto read_frame_bad; }
- }
- if((ret=fr->rd->head_read(fr,&newhead))<=0){ debug("need more?"); goto read_frame_bad; }
-
- if(VERBOSE2 && fr->silent_resync == 0) fprintf(stderr,"Note: Skipped RIFF header!\n");
-
- fr->oldhead = 0;
- goto read_again;
- }
- /* unhandled junk... just continue search for a header */
- /* step in byte steps through next 64K */
- debug("searching for header...");
-
- ret = 0; /* We will check the value after the loop. */
- for(; headcount<65536; headcount++)
- {
- if((ret=fr->rd->head_shift(fr,&newhead))<=0){ debug("need more?"); goto read_frame_bad; }
- /* if(head_check(newhead)) */
- if(head_check(newhead) && (ret=decode_header(fr, newhead)))
- break;
- }
- if(ret<0){ debug("need more?"); goto read_frame_bad; }
-
- if(headcount == 65536)
- {
- if(NOQUIET) error("Giving up searching valid MPEG header after (over) 64K of junk.");
- return 0;
- }
- else debug1("hopefully found one at %"OFF_P, (off_p)fr->rd->tell(fr));
- /*
- * should we additionaly check, whether a new frame starts at
- * the next expected position? (some kind of read ahead)
- * We could implement this easily, at least for files.
- */
- }
-#endif
-
- /* first attempt of read ahead check to find the real first header; cannot believe what junk is out there! */
- if(!fr->firsthead && fr->rdat.flags & (READER_SEEKABLE|READER_BUFFERED) && head_check(newhead) && (ret=decode_header(fr, newhead)))
- {
- unsigned long nexthead = 0;
- int hd = 0;
- off_t start = fr->rd->tell(fr);
- if(ret<0){ debug("need more?"); goto read_frame_bad; }
-
- debug2("doing ahead check with BPF %d at %"OFF_P, fr->framesize+4, (off_p)start);
- /* step framesize bytes forward and read next possible header*/
- if((ret=fr->rd->skip_bytes(fr, fr->framesize))<0)
- {
- if(ret==READER_ERROR && NOQUIET) error("cannot seek!");
- goto read_frame_bad;
- }
- hd = fr->rd->head_read(fr,&nexthead);
- if(hd==MPG123_NEED_MORE){ debug("need more?"); ret = hd; goto read_frame_bad; }
- if((ret=fr->rd->back_bytes(fr, fr->rd->tell(fr)-start))<0)
- {
- if(ret==READER_ERROR && NOQUIET) error("cannot seek!");
- else debug("need more?");
- goto read_frame_bad;
- }
- debug1("After fetching next header, at %"OFF_P, (off_p)fr->rd->tell(fr));
- if(!hd)
- {
- if(NOQUIET) warning("cannot read next header, a one-frame stream? Duh...");
- }
- else
- {
- debug2("does next header 0x%08lx match first 0x%08lx?", nexthead, newhead);
- /* not allowing free format yet */
- if(!head_check(nexthead) || (nexthead & HDRCMPMASK) != (newhead & HDRCMPMASK))
- {
- debug("No, the header was not valid, start from beginning...");
- fr->oldhead = 0; /* start over */
- /* try next byte for valid header */
- if((ret=fr->rd->back_bytes(fr, 3))<0)
- {
- if(NOQUIET) error("cannot seek!");
- else debug("need more?");
- goto read_frame_bad;
- }
- goto read_again;
- }
- }
- }
-
- /* why has this head check been avoided here before? */
- if(!head_check(newhead))
- {
- /* and those ugly ID3 tags */
- if((newhead & 0xffffff00) == ('T'<<24)+('A'<<16)+('G'<<8))
- {
- fr->id3buf[0] = (unsigned char) ((newhead >> 24) & 0xff);
- fr->id3buf[1] = (unsigned char) ((newhead >> 16) & 0xff);
- fr->id3buf[2] = (unsigned char) ((newhead >> 8) & 0xff);
- fr->id3buf[3] = (unsigned char) ( newhead & 0xff);
- if((ret=fr->rd->fullread(fr,fr->id3buf+4,124)) < 0){ debug("need more?"); goto read_frame_bad; }
- fr->metaflags |= MPG123_NEW_ID3|MPG123_ID3;
- fr->rdat.flags |= READER_ID3TAG; /* that marks id3v1 */
- if (VERBOSE3) fprintf(stderr,"Note: Skipped ID3v1 tag.\n");
- goto read_again;
- }
- /* duplicated code from above! */
- /* check for id3v2; first three bytes (of 4) are "ID3" */
- if((newhead & (unsigned long) 0xffffff00) == (unsigned long) 0x49443300)
- {
- int id3length = 0;
- id3length = parse_new_id3(fr, newhead);
- if(id3length < 0){ debug("need more?"); ret = id3length; goto read_frame_bad; }
-
- fr->metaflags |= MPG123_NEW_ID3|MPG123_ID3;
- goto read_again;
- }
- else if(NOQUIET && fr->silent_resync == 0)
- {
- fprintf(stderr,"Note: Illegal Audio-MPEG-Header 0x%08lx at offset %"OFF_P".\n",
- newhead, (off_p)fr->rd->tell(fr)-4);
- }
-
- if(NOQUIET && (newhead & 0xffffff00) == ('b'<<24)+('m'<<16)+('p'<<8)) fprintf(stderr,"Note: Could be a BMP album art.\n");
- /* Do resync if not forbidden by flag.
- I used to have a check for not-icy-meta here, but concluded that the desync issues came from a reader bug, not the stream. */
- if( !(fr->p.flags & MPG123_NO_RESYNC) )
- {
- long try = 0;
- long limit = fr->p.resync_limit;
-
- /* If a resync is needed the bitreservoir of previous frames is no longer valid */
- fr->bitreservoir = 0;
-
- /* TODO: make this more robust, I'd like to cat two mp3 fragments together (in a dirty way) and still have mpg123 beign able to decode all it somehow. */
- if(NOQUIET && fr->silent_resync == 0) fprintf(stderr, "Note: Trying to resync...\n");
- /* Read more bytes until we find something that looks
- reasonably like a valid header. This is not a
- perfect strategy, but it should get us back on the
- track within a short time (and hopefully without
- too much distortion in the audio output). */
- do
- {
- ++try;
- if(limit >= 0 && try >= limit) break;
-
- if((ret=fr->rd->head_shift(fr,&newhead)) <= 0)
- {
- debug("need more?");
- if(NOQUIET) fprintf (stderr, "Note: Hit end of (available) data during resync.\n");
-
- goto read_frame_bad;
- }
- if(VERBOSE3) debug3("resync try %li at %"OFF_P", got newhead 0x%08lx", try, (off_p)fr->rd->tell(fr), newhead);
-
- if(!fr->oldhead)
- {
- debug("going to init_resync...");
- goto init_resync; /* "considered harmful", eh? */
- }
- /* we should perhaps collect a list of valid headers that occured in file... there can be more */
- /* Michael's new resync routine seems to work better with the one frame readahead (and some input buffering?) */
- } while
- (
- !head_check(newhead) /* Simply check for any valid header... we have the readahead to get it straight now(?) */
- /* (newhead & HDRCMPMASK) != (fr->oldhead & HDRCMPMASK)
- && (newhead & HDRCMPMASK) != (fr->firsthead & HDRCMPMASK)*/
- );
- /* too many false positives
- }while (!(head_check(newhead) && decode_header(fr, newhead))); */
- if(NOQUIET && fr->silent_resync == 0) fprintf (stderr, "Note: Skipped %li bytes in input.\n", try);
-
- if(limit >= 0 && try >= limit)
- {
- if(NOQUIET)
- error1("Giving up resync after %li bytes - your stream is not nice... (maybe increasing resync limit could help).", try);
-
- fr->err = MPG123_RESYNC_FAIL;
- return READER_ERROR;
- }
- else
- {
- debug1("Found valid header 0x%lx... unsetting firsthead to reinit stream.", newhead);
- fr->firsthead = 0;
- goto init_resync;
- }
- }
- else
- {
- if(NOQUIET) error("not attempting to resync...");
-
- fr->err = MPG123_OUT_OF_SYNC;
- return READER_ERROR;
- }
- }
-
- /* Man, that code looks awfully redundant...
- I need to untangle the spaghetti here in a future version. */
- if(!fr->firsthead)
- {
- ret=decode_header(fr,newhead);
- if(ret == 0)
- {
- if(NOQUIET) error("decode header failed before first valid one, going to read again");
-
- goto read_again;
- }
- else if(ret < 0){ debug("need more?"); goto read_frame_bad; }
- }
- else
- {
- ret=decode_header(fr,newhead);
- if(ret == 0)
- {
- if(NOQUIET) error("decode header failed - goto resync");
- /* return 0; */
- goto init_resync;
- }
- else if(ret < 0){ debug("need more?"); goto read_frame_bad; }
- }
-
- /* if filepos is invalid, so is framepos */
- framepos = fr->rd->tell(fr) - 4;
- /* flip/init buffer for Layer 3 */
- {
- unsigned char *newbuf = fr->bsspace[fr->bsnum]+512;
- /* read main data into memory */
- if((ret=fr->rd->read_frame_body(fr,newbuf,fr->framesize))<0)
- {
- /* if failed: flip back */
- debug("need more?");
- goto read_frame_bad;
- }
- fr->bsbufold = fr->bsbuf;
- fr->bsbuf = newbuf;
- }
- fr->bsnum = (fr->bsnum + 1) & 1;
-
- if(!fr->firsthead)
- {
- fr->firsthead = newhead; /* _now_ it's time to store it... the first real header */
- /* This is the first header of our current stream segment.
- It is only the actual first header of the whole stream when fr->num is still below zero!
- Think of resyncs where firsthead has been reset for format flexibility. */
- if(fr->num < 0)
- {
- fr->audio_start = framepos;
- /* Only check for LAME tag at beginning of whole stream
- ... when there indeed is one in between, it's the user's problem. */
- if(fr->lay == 3 && check_lame_tag(fr) == 1)
- { /* ...in practice, Xing/LAME tags are layer 3 only. */
- if(fr->rd->forget != NULL) fr->rd->forget(fr);
-
- fr->oldhead = 0;
- goto read_again;
- }
- /* now adjust volume */
- do_rva(fr);
- }
-
- debug2("fr->firsthead: %08lx, audio_start: %li", fr->firsthead, (long int)fr->audio_start);
- }
-
- fr->bitindex = 0;
- fr->wordpointer = (unsigned char *) fr->bsbuf;
- /* Question: How bad does the floating point value get with repeated recomputation?
- Also, considering that we can play the file or parts of many times. */
- if(++fr->mean_frames != 0)
- {
- fr->mean_framesize = ((fr->mean_frames-1)*fr->mean_framesize+compute_bpf(fr)) / fr->mean_frames ;
- }
- ++fr->num; /* 0 for first frame! */
- debug4("Frame %"OFF_P" %08lx %i, next filepos=%"OFF_P,
- (off_p)fr->num, newhead, fr->framesize, (off_p)fr->rd->tell(fr));
-
- /* save for repetition */
- if(fr->p.halfspeed && fr->lay == 3)
- {
- debug("halfspeed - reusing old bsbuf ");
- memcpy (fr->ssave, fr->bsbuf, fr->ssize);
- }
-
- /* index the position */
-#ifdef FRAME_INDEX
- /* Keep track of true frame positions in our frame index.
- but only do so when we are sure that the frame number is accurate... */
- if(fr->accurate && FI_NEXT(fr->index, fr->num))
- fi_add(&fr->index, framepos);
-#endif
-
- if(fr->silent_resync > 0) --fr->silent_resync;
-
- if(fr->rd->forget != NULL) fr->rd->forget(fr);
-
- fr->to_decode = fr->to_ignore = TRUE;
- if(fr->error_protection) fr->crc = getbits(fr, 16); /* skip crc */
-
- return 1;
-read_frame_bad:
- /* Also if we searched for valid data in vain, we can forget skipped data.
- Otherwise, the feeder would hold every dead old byte in memory until the first valid frame! */
- if(fr->rd->forget != NULL) fr->rd->forget(fr);
-
- fr->silent_resync = 0;
- if(fr->err == MPG123_OK) fr->err = MPG123_ERR_READER;
- fr->framesize = oldsize;
- fr->halfphase = oldphase;
- /* That return code might be inherited from some feeder action, or reader error. */
- return ret;
-}
-
-
-/*
- * read ahead and find the next MPEG header, to guess framesize
- * return value: success code
- * 1: found a valid frame size (stored in the handle).
- * <0: error codes, possibly from feeder buffer (NEED_MORE)
- * 0: cannot get the framesize for some reason and shall silentry try the next possible header (if this is no free format stream after all...)
- */
-static int guess_freeformat_framesize(mpg123_handle *fr)
-{
- long i;
- int ret;
- unsigned long head;
- if(!(fr->rdat.flags & (READER_SEEKABLE|READER_BUFFERED)))
- {
- if(NOQUIET) error("Cannot look for freeformat frame size with non-seekable and non-buffered stream!");
-
- return 0;
- }
- if((ret=fr->rd->head_read(fr,&head))<=0)
- return ret;
-
- /* We are already 4 bytes into it */
-/* fix that limit to be absolute for the first header search! */
- for(i=4;i<65536;i++) {
- if((ret=fr->rd->head_shift(fr,&head))<=0)
- {
- return ret;
- }
- if(head_check(head))
- {
- int sampling_frequency,mpeg25,lsf;
-
- if(head & (1<<20))
- {
- lsf = (head & (1<<19)) ? 0x0 : 0x1;
- mpeg25 = 0;
- }
- else
- {
- lsf = 1;
- mpeg25 = 1;
- }
-
- if(mpeg25)
- sampling_frequency = 6 + ((head>>10)&0x3);
- else
- sampling_frequency = ((head>>10)&0x3) + (lsf*3);
-
- if((lsf==fr->lsf) && (mpeg25==fr->mpeg25) && (sampling_frequency == fr->sampling_frequency))
- {
- fr->rd->back_bytes(fr,i+1);
- fr->framesize = i-3;
- return 1; /* Success! */
- }
- }
- }
- fr->rd->back_bytes(fr,i);
- return 0;
-}
-
-
-/*
- * decode a header and write the information
- * into the frame structure
- * Return values are compatible with those of read_frame, namely:
- * 1: success
- * 0: no valid header
- * <0: some error
- */
-static int decode_header(mpg123_handle *fr,unsigned long newhead)
-{
- if(!head_check(newhead))
- {
- if(NOQUIET) error("tried to decode obviously invalid header");
-
- return 0;
- }
- if( newhead & (1<<20) )
- {
- fr->lsf = (newhead & (1<<19)) ? 0x0 : 0x1;
- fr->mpeg25 = 0;
- }
- else
- {
- fr->lsf = 1;
- fr->mpeg25 = 1;
- }
-
- if( (fr->p.flags & MPG123_NO_RESYNC) || !fr->oldhead
- || (((fr->oldhead>>19)&0x3) ^ ((newhead>>19)&0x3)) )
- {
- /* If "tryresync" is false, assume that certain
- parameters do not change within the stream!
- Force an update if lsf or mpeg25 settings
- have changed. */
- fr->lay = 4-((newhead>>17)&3);
- if( ((newhead>>10)&0x3) == 0x3)
- {
- if(NOQUIET) error("Stream error");
-
- return 0; /* exit() here really is too much, isn't it? */
- }
- if(fr->mpeg25)
- fr->sampling_frequency = 6 + ((newhead>>10)&0x3);
- else
- fr->sampling_frequency = ((newhead>>10)&0x3) + (fr->lsf*3);
- }
-
- #ifdef DEBUG
- if((((newhead>>16)&0x1)^0x1) != fr->error_protection) debug("changed crc bit!");
- #endif
- fr->error_protection = ((newhead>>16)&0x1)^0x1; /* seen a file where this varies (old lame tag without crc, track with crc) */
- fr->bitrate_index = ((newhead>>12)&0xf);
- fr->padding = ((newhead>>9)&0x1);
- fr->extension = ((newhead>>8)&0x1);
- fr->mode = ((newhead>>6)&0x3);
- fr->mode_ext = ((newhead>>4)&0x3);
- fr->copyright = ((newhead>>3)&0x1);
- fr->original = ((newhead>>2)&0x1);
- fr->emphasis = newhead & 0x3;
- fr->freeformat = free_format_header(newhead);
-
- fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2;
-
- fr->oldhead = newhead;
-
- /* we can't use tabsel_123 for freeformat, so trying to guess framesize... */
- if(fr->freeformat)
- {
- /* when we first encounter the frame with freeformat, guess framesize */
- if(fr->freeformat_framesize < 0)
- {
- int ret;
- ret = guess_freeformat_framesize(fr);
- if(ret>0)
- {
- fr->freeformat_framesize = fr->framesize - fr->padding;
- if(VERBOSE2)
- fprintf(stderr, "Note: free format frame size %li\n", fr->freeformat_framesize);
- }
- else
- {
- if(ret == MPG123_NEED_MORE)
- debug("Need more data to guess free format frame size.");
- else
- error("Encountered free format header, but failed to guess frame size.");
- return ret;
- }
- }
- /* freeformat should be CBR, so the same framesize can be used at the 2nd reading or later */
- else
- {
- fr->framesize = fr->freeformat_framesize + fr->padding;
- }
- }
-
- switch(fr->lay)
- {
-#ifndef NO_LAYER1
- case 1:
- fr->do_layer = do_layer1;
- if(!fr->freeformat)
- {
- fr->framesize = (long) tabsel_123[fr->lsf][0][fr->bitrate_index] * 12000;
- fr->framesize /= freqs[fr->sampling_frequency];
- fr->framesize = ((fr->framesize+fr->padding)<<2)-4;
- }
- break;
-#endif
-#ifndef NO_LAYER2
- case 2:
- fr->do_layer = do_layer2;
- if(!fr->freeformat)
- {
- debug2("bitrate index: %i (%i)", fr->bitrate_index, tabsel_123[fr->lsf][1][fr->bitrate_index] );
- fr->framesize = (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000;
- fr->framesize /= freqs[fr->sampling_frequency];
- fr->framesize += fr->padding - 4;
- }
- break;
-#endif
-#ifndef NO_LAYER3
- case 3:
- fr->do_layer = do_layer3;
- if(fr->lsf)
- fr->ssize = (fr->stereo == 1) ? 9 : 17;
- else
- fr->ssize = (fr->stereo == 1) ? 17 : 32;
-
- if(fr->error_protection)
- fr->ssize += 2;
-
- if(!fr->freeformat)
- {
- fr->framesize = (long) tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000;
- fr->framesize /= freqs[fr->sampling_frequency]<<(fr->lsf);
- fr->framesize = fr->framesize + fr->padding - 4;
- }
- break;
-#endif
- default:
- if(NOQUIET) error1("Layer type %i not supported in this build!", fr->lay);
-
- return 0;
- }
- if (fr->framesize > MAXFRAMESIZE)
- {
- if(NOQUIET) error1("Frame size too big: %d", fr->framesize+4-fr->padding);
-
- return (0);
- }
- return 1;
-}
-
-void set_pointer(mpg123_handle *fr, long backstep)
-{
- fr->wordpointer = fr->bsbuf + fr->ssize - backstep;
- if (backstep)
- memcpy(fr->wordpointer,fr->bsbufold+fr->fsizeold-backstep,backstep);
-
- fr->bitindex = 0;
-}
-
-/********************************/
-
-double compute_bpf(mpg123_handle *fr)
-{
- double bpf;
-
- switch(fr->lay)
- {
- case 1:
- bpf = tabsel_123[fr->lsf][0][fr->bitrate_index];
- bpf *= 12000.0 * 4.0;
- bpf /= freqs[fr->sampling_frequency] <<(fr->lsf);
- break;
- case 2:
- case 3:
- bpf = tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index];
- bpf *= 144000;
- bpf /= freqs[fr->sampling_frequency] << (fr->lsf);
- break;
- default:
- bpf = 1.0;
- }
-
- return bpf;
-}
-
-double attribute_align_arg mpg123_tpf(mpg123_handle *fr)
-{
- static int bs[4] = { 0,384,1152,1152 };
- double tpf;
- if(fr == NULL) return -1;
-
- tpf = (double) bs[fr->lay];
- tpf /= freqs[fr->sampling_frequency] << (fr->lsf);
- return tpf;
-}
-
-int attribute_align_arg mpg123_position(mpg123_handle *fr, off_t no, off_t buffsize,
- off_t *current_frame, off_t *frames_left,
- double *current_seconds, double *seconds_left)
-{
- double tpf;
- double dt = 0.0;
- off_t cur, left;
- double curs, lefts;
-
- if(!fr || !fr->rd) /* Isn't this too paranoid? */
- {
- debug("reader troubles!");
- return MPG123_ERR;
- }
-
- no += fr->num; /* no starts out as offset */
- cur = no;
- tpf = mpg123_tpf(fr);
- if(buffsize > 0 && fr->af.rate > 0 && fr->af.channels > 0)
- {
- dt = (double) buffsize / fr->af.rate / fr->af.channels;
- if(fr->af.encoding & MPG123_ENC_16) dt *= 0.5;
- }
-
- left = 0;
-
- if((fr->track_frames != 0) && (fr->track_frames >= fr->num)) left = no < fr->track_frames ? fr->track_frames - no : 0;
- else
- if(fr->rdat.filelen >= 0)
- {
- double bpf;
- off_t t = fr->rd->tell(fr);
- bpf = fr->mean_framesize ? fr->mean_framesize : compute_bpf(fr);
- left = (off_t)((double)(fr->rdat.filelen-t)/bpf);
- /* no can be different for prophetic purposes, file pointer is always associated with fr->num! */
- if(fr->num != no)
- {
- if(fr->num > no) left += fr->num - no;
- else
- {
- if(left >= (no - fr->num)) left -= no - fr->num;
- else left = 0; /* uh, oh! */
- }
- }
- /* I totally don't understand why we should re-estimate the given correct(?) value */
- /* fr->num = (unsigned long)((double)t/bpf); */
- }
-
- /* beginning with 0 or 1?*/
- curs = (double) no*tpf-dt;
- lefts = (double)left*tpf+dt;
-#if 0
- curs = curs < 0 ? 0.0 : curs;
-#endif
- if(left < 0 || lefts < 0)
- { /* That is the case for non-seekable streams. */
- left = 0;
- lefts = 0.0;
- }
- if(current_frame != NULL) *current_frame = cur;
- if(frames_left != NULL) *frames_left = left;
- if(current_seconds != NULL) *current_seconds = curs;
- if(seconds_left != NULL) *seconds_left = lefts;
- return MPG123_OK;
-}
-
-int get_songlen(mpg123_handle *fr,int no)
-{
- double tpf;
-
- if(!fr)
- return 0;
-
- if(no < 0) {
- if(!fr->rd || fr->rdat.filelen < 0)
- return 0;
- no = (int) ((double) fr->rdat.filelen / compute_bpf(fr));
- }
-
- tpf = mpg123_tpf(fr);
- return (int) (no*tpf);
-}
diff --git a/src/mpg123/libmpg123/parse.h b/src/mpg123/libmpg123/parse.h
deleted file mode 100644
index 91f9f7d..0000000
--- a/src/mpg123/libmpg123/parse.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- parse: spawned from common; clustering around stream/frame parsing
-
- copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp & Thomas Orgis
-*/
-
-#ifndef MPG123_PARSE_H
-#define MPG123_PARSE_H
-
-#include "frame.h"
-
-int read_frame_init(mpg123_handle* fr);
-int frame_bitrate(mpg123_handle *fr);
-long frame_freq(mpg123_handle *fr);
-int read_frame_recover(mpg123_handle* fr); /* dead? */
-int read_frame(mpg123_handle *fr);
-void set_pointer(mpg123_handle *fr, long backstep);
-int position_info(mpg123_handle* fr, unsigned long no, long buffsize, unsigned long* frames_left, double* current_seconds, double* seconds_left);
-double compute_bpf(mpg123_handle *fr);
-long time_to_frame(mpg123_handle *fr, double seconds);
-int get_songlen(mpg123_handle *fr,int no);
-
-#endif
diff --git a/src/mpg123/libmpg123/reader.h b/src/mpg123/libmpg123/reader.h
deleted file mode 100644
index bcc4ce6..0000000
--- a/src/mpg123/libmpg123/reader.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- reader: reading input data
-
- copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis (after code from Michael Hipp)
-*/
-
-#ifndef MPG123_READER_H
-#define MPG123_READER_H
-
-#include "config.h"
-#include "mpg123.h"
-
-struct buffy
-{
- unsigned char *data;
- ssize_t size;
- ssize_t realsize;
- struct buffy *next;
-};
-
-struct bufferchain
-{
- struct buffy* first; /* The beginning of the chain. */
- struct buffy* last; /* The end... of the chain. */
- ssize_t size; /* Aggregated size of all buffies. */
- /* These positions are relative to buffer chain beginning. */
- ssize_t pos; /* Position in whole chain. */
- ssize_t firstpos; /* The point of return on non-forget() */
- /* The "real" filepos is fileoff + pos. */
- off_t fileoff; /* Beginning of chain is at this file offset. */
-};
-
-struct reader_data
-{
- off_t filelen; /* total file length or total buffer size */
- off_t filepos; /* position in file or position in buffer chain */
- int filept;
- /* Custom opaque I/O handle from the client. */
- void *iohandle;
- int flags;
- long timeout_sec;
- ssize_t (*fdread) (mpg123_handle *, void *, size_t);
- /* User can replace the read and lseek functions. The r_* are the stored replacement functions or NULL. */
- ssize_t (*r_read) (int fd, void *buf, size_t count);
- off_t (*r_lseek)(int fd, off_t offset, int whence);
- /* These are custom I/O routines for opaque user handles.
- They get picked if there's some iohandle set. */
- ssize_t (*r_read_handle) (void *handle, void *buf, size_t count);
- off_t (*r_lseek_handle)(void *handle, off_t offset, int whence);
- /* An optional cleaner for the handle on closing the stream. */
- void (*cleanup_handle)(void *handle);
- /* These two pointers are the actual workers (default map to POSIX read/lseek). */
- ssize_t (*read) (int fd, void *buf, size_t count);
- off_t (*lseek)(int fd, off_t offset, int whence);
- /* Buffered readers want that abstracted, set internally. */
- ssize_t (*fullread)(mpg123_handle *, unsigned char *, ssize_t);
- struct bufferchain buffer; /* Not dynamically allocated, these few struct bytes aren't worth the trouble. */
-};
-
-/* start to use off_t to properly do LFS in future ... used to be long */
-struct reader
-{
- int (*init) (mpg123_handle *);
- void (*close) (mpg123_handle *);
- ssize_t (*fullread) (mpg123_handle *, unsigned char *, ssize_t);
- int (*head_read) (mpg123_handle *, unsigned long *newhead); /* succ: TRUE, else <= 0 (FALSE or READER_MORE) */
- int (*head_shift) (mpg123_handle *, unsigned long *head); /* succ: TRUE, else <= 0 (FALSE or READER_MORE) */
- off_t (*skip_bytes) (mpg123_handle *, off_t len); /* succ: >=0, else error or READER_MORE */
- int (*read_frame_body)(mpg123_handle *, unsigned char *, int size);
- int (*back_bytes) (mpg123_handle *, off_t bytes);
- int (*seek_frame) (mpg123_handle *, off_t num);
- off_t (*tell) (mpg123_handle *);
- void (*rewind) (mpg123_handle *);
- void (*forget) (mpg123_handle *);
-};
-
-/* Open a file by path or use an opened file descriptor. */
-int open_stream(mpg123_handle *, const char *path, int fd);
-/* Open an external handle. */
-int open_stream_handle(mpg123_handle *, void *iohandle);
-
-/* feed based operation has some specials */
-int open_feed(mpg123_handle *);
-/* externally called function, returns 0 on success, -1 on error */
-int feed_more(mpg123_handle *fr, const unsigned char *in, long count);
-void feed_forget(mpg123_handle *fr); /* forget the data that has been read (free some buffers) */
-off_t feed_set_pos(mpg123_handle *fr, off_t pos); /* Set position (inside available data if possible), return wanted byte offset of next feed. */
-
-void open_bad(mpg123_handle *);
-
-#define READER_FD_OPENED 0x1
-#define READER_ID3TAG 0x2
-#define READER_SEEKABLE 0x4
-#define READER_BUFFERED 0x8
-#define READER_NONBLOCK 0x20
-#define READER_HANDLEIO 0x40
-
-#define READER_STREAM 0
-#define READER_ICY_STREAM 1
-#define READER_FEED 2
-/* These two add a little buffering to enable small seeks for peek ahead. */
-#define READER_BUF_STREAM 3
-#define READER_BUF_ICY_STREAM 4
-
-#ifdef READ_SYSTEM
-#define READER_SYSTEM 5
-#define READERS 6
-#else
-#define READERS 5
-#endif
-
-#define READER_ERROR MPG123_ERR
-#define READER_MORE MPG123_NEED_MORE
-
-#endif
diff --git a/src/mpg123/libmpg123/readers.c b/src/mpg123/libmpg123/readers.c
deleted file mode 100644
index 1233456..0000000
--- a/src/mpg123/libmpg123/readers.c
+++ /dev/null
@@ -1,1113 +0,0 @@
-/* TODO: Check all read calls (in loops, especially!) for return value 0 (EOF)! */
-
-/*
- readers.c: reading input data
-
- copyright ?-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-*/
-
-#include "mpg123lib_intern.h"
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-/* For select(), I need select.h according to POSIX 2001, else: sys/time.h sys/types.h unistd.h (the latter two included in compat.h already). */
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef _MSC_VER
-#include <io.h>
-#endif
-
-#include "compat.h"
-#include "debug.h"
-
-static int default_init(mpg123_handle *fr);
-static off_t get_fileinfo(mpg123_handle *);
-static ssize_t posix_read(int fd, void *buf, size_t count){ return read(fd, buf, count); }
-static off_t posix_lseek(int fd, off_t offset, int whence){ return lseek(fd, offset, whence); }
-
-static ssize_t plain_fullread(mpg123_handle *fr,unsigned char *buf, ssize_t count);
-
-/* Wrapper to decide between descriptor-based and external handle-based I/O. */
-static off_t io_seek(struct reader_data *rdat, off_t offset, int whence);
-static ssize_t io_read(struct reader_data *rdat, void *buf, size_t count);
-
-#ifndef NO_FEEDER
-/* Bufferchain methods. */
-static void bc_init(struct bufferchain *bc);
-static void bc_reset(struct bufferchain *bc);
-static int bc_append(struct bufferchain *bc, ssize_t size);
-#if 0
-static void bc_drop(struct bufferchain *bc);
-#endif
-static int bc_add(struct bufferchain *bc, const unsigned char *data, ssize_t size);
-static ssize_t bc_give(struct bufferchain *bc, unsigned char *out, ssize_t size);
-static ssize_t bc_skip(struct bufferchain *bc, ssize_t count);
-static ssize_t bc_seekback(struct bufferchain *bc, ssize_t count);
-static void bc_forget(struct bufferchain *bc);
-#else
-#define bc_init(a)
-#define bc_reset(a)
-#endif
-
-/* A normal read and a read with timeout. */
-static ssize_t plain_read(mpg123_handle *fr, void *buf, size_t count)
-{
- ssize_t ret = io_read(&fr->rdat, buf, count);
- if(VERBOSE3) debug2("read %li bytes of %li", (long)ret, (long)count);
- return ret;
-}
-
-#ifdef TIMEOUT_READ
-
-/* Wait for data becoming available, allowing soft-broken network connection to die
- This is needed for Shoutcast servers that have forgotten about us while connection was temporarily down. */
-static ssize_t timeout_read(mpg123_handle *fr, void *buf, size_t count)
-{
- struct timeval tv;
- ssize_t ret = 0;
- fd_set fds;
- tv.tv_sec = fr->rdat.timeout_sec;
- tv.tv_usec = 0;
- FD_ZERO(&fds);
- FD_SET(fr->rdat.filept, &fds);
- ret = select(fr->rdat.filept+1, &fds, NULL, NULL, &tv);
- /* This works only with "my" read function. Not user-replaced. */
- if(ret > 0) ret = read(fr->rdat.filept, buf, count);
- else
- {
- ret=-1; /* no activity is the error */
- if(NOQUIET) error("stream timed out");
- }
- return ret;
-}
-#endif
-
-#ifndef NO_ICY
-/* stream based operation with icy meta data*/
-static ssize_t icy_fullread(mpg123_handle *fr, unsigned char *buf, ssize_t count)
-{
- ssize_t ret,cnt;
- cnt = 0;
- if(fr->rdat.flags & READER_SEEKABLE)
- {
- if(NOQUIET) error("mpg123 programmer error: I don't do ICY on seekable streams.");
- return -1;
- }
- /*
- There used to be a check for expected file end here (length value or ID3 flag).
- This is not needed:
- 1. EOF is indicated by fdread returning zero bytes anyway.
- 2. We get false positives of EOF for either files that grew or
- 3. ... files that have ID3v1 tags in between (stream with intro).
- */
-
- while(cnt < count)
- {
- /* all icy code is inside this if block, everything else is the plain fullread we know */
- /* debug1("read: %li left", (long) count-cnt); */
- if(fr->icy.next < count-cnt)
- {
- unsigned char temp_buff;
- size_t meta_size;
- ssize_t cut_pos;
-
- /* we are near icy-metaint boundary, read up to the boundary */
- if(fr->icy.next > 0)
- {
- cut_pos = fr->icy.next;
- ret = fr->rdat.fdread(fr,buf+cnt,cut_pos);
- if(ret < 1)
- {
- if(ret == 0) break; /* Just EOF. */
- if(NOQUIET) error("icy boundary read");
-
- return READER_ERROR;
- }
-
- if(!(fr->rdat.flags & READER_BUFFERED)) fr->rdat.filepos += ret;
- cnt += ret;
- fr->icy.next -= ret;
- if(fr->icy.next > 0)
- {
- debug1("another try... still %li left", (long)fr->icy.next);
- continue;
- }
- }
- /* now off to read icy data */
-
- /* one byte icy-meta size (must be multiplied by 16 to get icy-meta length) */
-
- ret = fr->rdat.fdread(fr,&temp_buff,1); /* Getting one single byte hast to suceed. */
- if(ret < 0){ if(NOQUIET) error("reading icy size"); return READER_ERROR; }
- if(ret == 0) break;
-
- debug2("got meta-size byte: %u, at filepos %li", temp_buff, (long)fr->rdat.filepos );
- if(!(fr->rdat.flags & READER_BUFFERED)) fr->rdat.filepos += ret; /* 1... */
-
- if((meta_size = ((size_t) temp_buff) * 16))
- {
- /* we have got some metadata */
- char *meta_buff;
- meta_buff = malloc(meta_size+1);
- if(meta_buff != NULL)
- {
- ssize_t left = meta_size;
- while(left > 0)
- {
- ret = fr->rdat.fdread(fr,meta_buff+meta_size-left,left);
- /* 0 is error here, too... there _must_ be the ICY data, the server promised! */
- if(ret < 1){ if(NOQUIET) error("reading icy-meta"); return READER_ERROR; }
- left -= ret;
- }
- meta_buff[meta_size] = 0; /* string paranoia */
- if(!(fr->rdat.flags & READER_BUFFERED)) fr->rdat.filepos += ret;
-
- if(fr->icy.data) free(fr->icy.data);
- fr->icy.data = meta_buff;
- fr->metaflags |= MPG123_NEW_ICY;
- debug2("icy-meta: %s size: %d bytes", fr->icy.data, (int)meta_size);
- }
- else
- {
- if(NOQUIET) error1("cannot allocate memory for meta_buff (%lu bytes) ... trying to skip the metadata!", (unsigned long)meta_size);
- fr->rd->skip_bytes(fr, meta_size);
- }
- }
- fr->icy.next = fr->icy.interval;
- }
- else
- {
- ret = plain_fullread(fr, buf+cnt, count-cnt);
- if(ret < 0){ if(NOQUIET) error1("reading the rest of %li", (long)(count-cnt)); return READER_ERROR; }
- if(ret == 0) break;
-
- cnt += ret;
- fr->icy.next -= ret;
- }
- }
- /* debug1("done reading, got %li", (long)cnt); */
- return cnt;
-}
-#else
-#define icy_fullread NULL
-#endif /* NO_ICY */
-
-/* stream based operation */
-static ssize_t plain_fullread(mpg123_handle *fr,unsigned char *buf, ssize_t count)
-{
- ssize_t ret,cnt=0;
-
- /*
- There used to be a check for expected file end here (length value or ID3 flag).
- This is not needed:
- 1. EOF is indicated by fdread returning zero bytes anyway.
- 2. We get false positives of EOF for either files that grew or
- 3. ... files that have ID3v1 tags in between (stream with intro).
- */
- while(cnt < count)
- {
- ret = fr->rdat.fdread(fr,buf+cnt,count-cnt);
- if(ret < 0) return READER_ERROR;
- if(ret == 0) break;
- if(!(fr->rdat.flags & READER_BUFFERED)) fr->rdat.filepos += ret;
- cnt += ret;
- }
- return cnt;
-}
-
-static off_t stream_lseek(mpg123_handle *fr, off_t pos, int whence)
-{
- off_t ret;
- ret = io_seek(&fr->rdat, pos, whence);
- if (ret >= 0) fr->rdat.filepos = ret;
- else
- {
- fr->err = MPG123_LSEEK_FAILED;
- ret = READER_ERROR; /* not the original value */
- }
- return ret;
-}
-
-static void stream_close(mpg123_handle *fr)
-{
- if(fr->rdat.flags & READER_FD_OPENED) compat_close(fr->rdat.filept);
-
- fr->rdat.filept = 0;
-
- if(fr->rdat.flags & READER_BUFFERED) bc_reset(&fr->rdat.buffer);
- if(fr->rdat.flags & READER_HANDLEIO)
- {
- if(fr->rdat.cleanup_handle != NULL) fr->rdat.cleanup_handle(fr->rdat.iohandle);
-
- fr->rdat.iohandle = NULL;
- }
-}
-
-static int stream_seek_frame(mpg123_handle *fr, off_t newframe)
-{
- debug2("seek_frame to %"OFF_P" (from %"OFF_P")", (off_p)newframe, (off_p)fr->num);
- /* Seekable streams can go backwards and jump forwards.
- Non-seekable streams still can go forward, just not jump. */
- if((fr->rdat.flags & READER_SEEKABLE) || (newframe >= fr->num))
- {
- off_t preframe; /* a leading frame we jump to */
- off_t seek_to; /* the byte offset we want to reach */
- off_t to_skip; /* bytes to skip to get there (can be negative) */
- /*
- now seek to nearest leading index position and read from there until newframe is reached.
- We use skip_bytes, which handles seekable and non-seekable streams
- (the latter only for positive offset, which we ensured before entering here).
- */
- seek_to = frame_index_find(fr, newframe, &preframe);
- /* No need to seek to index position if we are closer already.
- But I am picky about fr->num == newframe, play safe by reading the frame again.
- If you think that's stupid, don't call a seek to the current frame. */
- if(fr->num >= newframe || fr->num < preframe)
- {
- to_skip = seek_to - fr->rd->tell(fr);
- if(fr->rd->skip_bytes(fr, to_skip) != seek_to)
- return READER_ERROR;
-
- debug2("going to %lu; just got %lu", (long unsigned)newframe, (long unsigned)preframe);
- fr->num = preframe-1; /* Watch out! I am going to read preframe... fr->num should indicate the frame before! */
- }
- while(fr->num < newframe)
- {
- /* try to be non-fatal now... frameNum only gets advanced on success anyway */
- if(!read_frame(fr)) break;
- }
- /* Now the wanted frame should be ready for decoding. */
- debug1("arrived at %lu", (long unsigned)fr->num);
-
- return MPG123_OK;
- }
- else
- {
- fr->err = MPG123_NO_SEEK;
- return READER_ERROR; /* invalid, no seek happened */
- }
-}
-
-/* return FALSE on error, TRUE on success, READER_MORE on occasion */
-static int generic_head_read(mpg123_handle *fr,unsigned long *newhead)
-{
- unsigned char hbuf[4];
- int ret = fr->rd->fullread(fr,hbuf,4);
- if(ret == READER_MORE) return ret;
- if(ret != 4) return FALSE;
-
- *newhead = ((unsigned long) hbuf[0] << 24) |
- ((unsigned long) hbuf[1] << 16) |
- ((unsigned long) hbuf[2] << 8) |
- (unsigned long) hbuf[3];
-
- return TRUE;
-}
-
-/* return FALSE on error, TRUE on success, READER_MORE on occasion */
-static int generic_head_shift(mpg123_handle *fr,unsigned long *head)
-{
- unsigned char hbuf;
- int ret = fr->rd->fullread(fr,&hbuf,1);
- if(ret == READER_MORE) return ret;
- if(ret != 1) return FALSE;
-
- *head <<= 8;
- *head |= hbuf;
- *head &= 0xffffffff;
- return TRUE;
-}
-
-/* returns reached position... negative ones are bad... */
-static off_t stream_skip_bytes(mpg123_handle *fr,off_t len)
-{
- if(fr->rdat.flags & READER_SEEKABLE)
- {
- off_t ret = stream_lseek(fr, len, SEEK_CUR);
- return (ret < 0) ? READER_ERROR : ret;
- }
- else if(len >= 0)
- {
- unsigned char buf[1024]; /* ThOr: Compaq cxx complained and it makes sense to me... or should one do a cast? What for? */
- ssize_t ret;
- while (len > 0)
- {
- ssize_t num = len < (off_t)sizeof(buf) ? (ssize_t)len : (ssize_t)sizeof(buf);
- ret = fr->rd->fullread(fr, buf, num);
- if (ret < 0) return ret;
- else if(ret == 0) break; /* EOF... an error? interface defined to tell the actual position... */
- len -= ret;
- }
- return fr->rd->tell(fr);
- }
- else if(fr->rdat.flags & READER_BUFFERED)
- { /* Perhaps we _can_ go a bit back. */
- if(fr->rdat.buffer.pos >= -len)
- {
- fr->rdat.buffer.pos += len;
- return fr->rd->tell(fr);
- }
- else
- {
- fr->err = MPG123_NO_SEEK;
- return READER_ERROR;
- }
- }
- else
- {
- fr->err = MPG123_NO_SEEK;
- return READER_ERROR;
- }
-}
-
-/* Return 0 on success... */
-static int stream_back_bytes(mpg123_handle *fr, off_t bytes)
-{
- off_t want = fr->rd->tell(fr)-bytes;
- if(want < 0) return READER_ERROR;
- if(stream_skip_bytes(fr,-bytes) != want) return READER_ERROR;
-
- return 0;
-}
-
-
-/* returns size on success... */
-static int generic_read_frame_body(mpg123_handle *fr,unsigned char *buf, int size)
-{
- long l;
-
- if((l=fr->rd->fullread(fr,buf,size)) != size)
- {
- long ll = l;
- if(ll <= 0) ll = 0;
- return READER_MORE;
- }
- return l;
-}
-
-static off_t generic_tell(mpg123_handle *fr)
-{
- if(fr->rdat.flags & READER_BUFFERED)
- fr->rdat.filepos = fr->rdat.buffer.fileoff+fr->rdat.buffer.pos;
-
- return fr->rdat.filepos;
-}
-
-/* This does not (fully) work for non-seekable streams... You have to check for that flag, pal! */
-static void stream_rewind(mpg123_handle *fr)
-{
- if(fr->rdat.flags & READER_SEEKABLE)
- fr->rdat.buffer.fileoff = fr->rdat.filepos = stream_lseek(fr,0,SEEK_SET);
- if(fr->rdat.flags & READER_BUFFERED)
- {
- fr->rdat.buffer.pos = 0;
- fr->rdat.buffer.firstpos = 0;
- fr->rdat.filepos = fr->rdat.buffer.fileoff;
- }
-}
-
-/*
- * returns length of a file (if filept points to a file)
- * reads the last 128 bytes information into buffer
- * ... that is not totally safe...
- */
-static off_t get_fileinfo(mpg123_handle *fr)
-{
- off_t len;
-
- if((len=io_seek(&fr->rdat,0,SEEK_END)) < 0) return -1;
-
- if(io_seek(&fr->rdat,-128,SEEK_END) < 0) return -1;
-
- if(fr->rd->fullread(fr,(unsigned char *)fr->id3buf,128) != 128) return -1;
-
- if(!strncmp((char*)fr->id3buf,"TAG",3)) len -= 128;
-
- if(io_seek(&fr->rdat,0,SEEK_SET) < 0) return -1;
-
- if(len <= 0) return -1;
-
- return len;
-}
-
-/* Let's work in nice 4K blocks, that may be nicely reusable (by malloc(), even). */
-#define BUFFBLOCK 4096
-
-#ifndef NO_FEEDER
-/* Methods for the buffer chain, mainly used for feed reader, but not just that. */
-
-static void bc_init(struct bufferchain *bc)
-{
- bc->first = NULL;
- bc->last = bc->first;
- bc->size = 0;
- bc->pos = 0;
- bc->firstpos = 0;
- bc->fileoff = 0;
-}
-
-static void bc_reset(struct bufferchain *bc)
-{
- /* free the buffer chain */
- struct buffy *b = bc->first;
- while(b != NULL)
- {
- struct buffy *n = b->next;
- free(b->data);
- free(b);
- b = n;
- }
- bc_init(bc);
-}
-
-/* Create a new buffy at the end to be filled. */
-static int bc_append(struct bufferchain *bc, ssize_t size)
-{
- struct buffy *newbuf;
- if(size < 1) return -1;
-
- newbuf = malloc(sizeof(struct buffy));
- if(newbuf == NULL) return -2;
-
- newbuf->realsize = size > BUFFBLOCK ? size : BUFFBLOCK;
- newbuf->data = malloc(newbuf->realsize);
- if(newbuf->data == NULL)
- {
- free(newbuf);
- return -3;
- }
- newbuf->size = size;
- newbuf->next = NULL;
- if(bc->last != NULL) bc->last->next = newbuf;
- else if(bc->first == NULL) bc->first = newbuf;
-
- bc->last = newbuf;
- bc->size += size;
- return 0;
-}
-
-#if 0
-/* Drop the last one (again).
- This is not optimal but should happen on error situations only, anyway. */
-static void bc_drop(struct bufferchain *bc)
-{
- struct buffy *cur = bc->first;
- if(bc->first == NULL || bc->last == NULL) return;
- /* Special case: only one buffer there. */
- if(cur->next == NULL)
- {
- free(cur->data);
- free(cur);
- bc->first = bc->last = NULL;
- bc->size = 0;
- return;
- }
- /* Find the pre-last buffy. If chain is consistent, this _will_ succeed. */
- while(cur->next != bc->last){ cur = cur->next; }
-
- bc->size -= bc->last->size;
- free(bc->last->data);
- free(bc->last);
- cur->next = NULL;
- bc->last = cur;
-}
-#endif
-
-/* Append a new buffer and copy content to it. */
-static int bc_add(struct bufferchain *bc, const unsigned char *data, ssize_t size)
-{
- int ret = 0;
- ssize_t part = 0;
- debug2("bc_add: adding %"SSIZE_P" bytes at %"OFF_P, (ssize_p)size, (off_p)(bc->fileoff+bc->size));
- if(size >=4) debug4("first bytes: %02x %02x %02x %02x", data[0], data[1], data[2], data[3]);
-
- /* Try to fill up the last buffer block. */
- if(bc->last != NULL && bc->last->size < bc->last->realsize)
- {
- part = bc->last->realsize - bc->last->size;
- if(part > size) part = size;
-
- memcpy(bc->last->data+bc->last->size, data, part);
- bc->last->size += part;
- size -= part;
- bc->size += part;
- }
-
-
- /* If there is still data left, put it into a new buffer block. */
- if(size > 0 && (ret = bc_append(bc, size)) == 0)
- memcpy(bc->last->data, data+part, size);
-
- return ret;
-}
-
-/* Common handler for "You want more than I can give." situation. */
-static ssize_t bc_need_more(struct bufferchain *bc)
-{
- debug3("hit end, back to beginning (%li - %li < %li)", (long)bc->size, (long)bc->pos, (long)bc->size);
- /* go back to firstpos, undo the previous reads */
- bc->pos = bc->firstpos;
- return READER_MORE;
-}
-
-/* Give some data, advancing position but not forgetting yet. */
-static ssize_t bc_give(struct bufferchain *bc, unsigned char *out, ssize_t size)
-{
- struct buffy *b = bc->first;
- ssize_t gotcount = 0;
- ssize_t offset = 0;
- if(bc->size - bc->pos < size) return bc_need_more(bc);
-
- /* find the current buffer */
- while(b != NULL && (offset + b->size) <= bc->pos)
- {
- offset += b->size;
- b = b->next;
- }
- /* now start copying from there */
- while(gotcount < size && (b != NULL))
- {
- ssize_t loff = bc->pos - offset;
- ssize_t chunk = size - gotcount; /* amount of bytes to get from here... */
- if(chunk > b->size - loff) chunk = b->size - loff;
-
-#ifdef EXTRA_DEBUG
- debug3("copying %liB from %p+%li",(long)chunk, b->data, (long)loff);
-#endif
-
- memcpy(out+gotcount, b->data+loff, chunk);
- gotcount += chunk;
- bc->pos += chunk;
- offset += b->size;
- b = b->next;
- }
-#ifdef EXTRA_DEBUG
- debug2("got %li bytes, pos advanced to %li", (long)gotcount, (long)bc->pos);
-#endif
-
- return gotcount;
-}
-
-/* Skip some bytes and return the new position.
- The buffers are still there, just the read pointer is moved! */
-static ssize_t bc_skip(struct bufferchain *bc, ssize_t count)
-{
- if(count >= 0)
- {
- if(bc->size - bc->pos < count) return bc_need_more(bc);
- else return bc->pos += count;
- }
- else return READER_ERROR;
-}
-
-static ssize_t bc_seekback(struct bufferchain *bc, ssize_t count)
-{
- if(count >= 0 && count <= bc->pos) return bc->pos -= count;
- else return READER_ERROR;
-}
-
-/* Throw away buffies that we passed. */
-static void bc_forget(struct bufferchain *bc)
-{
- struct buffy *b = bc->first;
- /* free all buffers that are def'n'tly outdated */
- /* we have buffers until filepos... delete all buffers fully below it */
- if(b) debug2("bc_forget: block %lu pos %lu", (unsigned long)b->size, (unsigned long)bc->pos);
- else debug("forget with nothing there!");
-
- while(b != NULL && bc->pos >= b->size)
- {
- struct buffy *n = b->next; /* != NULL or this is indeed the end and the last cycle anyway */
- if(n == NULL) bc->last = NULL; /* Going to delete the last buffy... */
- bc->fileoff += b->size;
- bc->pos -= b->size;
- bc->size -= b->size;
-
- debug5("bc_forget: forgot %p with %lu, pos=%li, size=%li, fileoff=%li", (void*)b->data, (long)b->size, (long)bc->pos, (long)bc->size, (long)bc->fileoff);
-
- free(b->data);
- free(b);
- b = n;
- }
- bc->first = b;
- bc->firstpos = bc->pos;
-}
-
-/* reader for input via manually provided buffers */
-
-static int feed_init(mpg123_handle *fr)
-{
- bc_init(&fr->rdat.buffer);
- fr->rdat.filelen = 0;
- fr->rdat.filepos = 0;
- fr->rdat.flags |= READER_BUFFERED;
- return 0;
-}
-
-/* externally called function, returns 0 on success, -1 on error */
-int feed_more(mpg123_handle *fr, const unsigned char *in, long count)
-{
- int ret = 0;
- if(VERBOSE3) debug("feed_more");
- if((ret = bc_add(&fr->rdat.buffer, in, count)) != 0)
- {
- ret = READER_ERROR;
- if(NOQUIET) error1("Failed to add buffer, return: %i", ret);
- }
- else /* Not talking about filelen... that stays at 0. */
-
- if(VERBOSE3) debug3("feed_more: %p %luB bufsize=%lu", fr->rdat.buffer.last->data,
- (unsigned long)fr->rdat.buffer.last->size, (unsigned long)fr->rdat.buffer.size);
- return ret;
-}
-
-static ssize_t feed_read(mpg123_handle *fr, unsigned char *out, ssize_t count)
-{
- ssize_t gotcount = bc_give(&fr->rdat.buffer, out, count);
- if(gotcount >= 0 && gotcount != count) return READER_ERROR;
- else return gotcount;
-}
-
-/* returns reached position... negative ones are bad... */
-static off_t feed_skip_bytes(mpg123_handle *fr,off_t len)
-{
- /* This is either the new buffer offset or some negative error value. */
- off_t res = bc_skip(&fr->rdat.buffer, (ssize_t)len);
- if(res < 0) return res;
-
- return fr->rdat.buffer.fileoff+res;
-}
-
-static int feed_back_bytes(mpg123_handle *fr, off_t bytes)
-{
- if(bytes >=0)
- return bc_seekback(&fr->rdat.buffer, (ssize_t)bytes) >= 0 ? 0 : READER_ERROR;
- else
- return feed_skip_bytes(fr, -bytes) >= 0 ? 0 : READER_ERROR;
-}
-
-static int feed_seek_frame(mpg123_handle *fr, off_t num){ return READER_ERROR; }
-
-/* Not just for feed reader, also for self-feeding buffered reader. */
-static void buffered_forget(mpg123_handle *fr)
-{
- bc_forget(&fr->rdat.buffer);
- fr->rdat.filepos = fr->rdat.buffer.fileoff + fr->rdat.buffer.pos;
-}
-
-off_t feed_set_pos(mpg123_handle *fr, off_t pos)
-{
- struct bufferchain *bc = &fr->rdat.buffer;
- if(pos >= bc->fileoff && pos-bc->fileoff < bc->size)
- { /* We have the position! */
- bc->pos = (ssize_t)(pos - bc->fileoff);
- debug1("feed_set_pos inside, next feed from %"OFF_P, (off_p)(bc->fileoff+bc->size));
- return bc->fileoff+bc->size; /* Next input after end of buffer... */
- }
- else
- { /* I expect to get the specific position on next feed. Forget what I have now. */
- bc_reset(bc);
- bc->fileoff = pos;
- debug1("feed_set_pos outside, buffer reset, next feed from %"OFF_P, (off_p)pos);
- return pos; /* Next input from exactly that position. */
- }
-}
-
-/* The specific stuff for buffered stream reader. */
-
-static ssize_t buffered_fullread(mpg123_handle *fr, unsigned char *out, ssize_t count)
-{
- struct bufferchain *bc = &fr->rdat.buffer;
- ssize_t gotcount;
- if(bc->size - bc->pos < count)
- { /* Add more stuff to buffer. If hitting end of file, adjust count. */
- unsigned char readbuf[BUFFBLOCK];
- ssize_t need = count - (bc->size-bc->pos);
- while(need>0)
- {
- int ret;
- ssize_t got = fr->rdat.fullread(fr, readbuf, BUFFBLOCK);
- if(got < 0)
- {
- if(NOQUIET) error("buffer reading");
- return READER_ERROR;
- }
-
- if(VERBOSE3) debug1("buffered_fullread: buffering %li bytes from stream (if > 0)", (long)got);
- if(got > 0 && (ret=bc_add(bc, readbuf, got)) != 0)
- {
- if(NOQUIET) error1("unable to add to chain, return: %i", ret);
- return READER_ERROR;
- }
-
- need -= got; /* May underflow here... */
- if(got < BUFFBLOCK) /* That naturally catches got == 0, too. */
- {
- if(VERBOSE3) fprintf(stderr, "Note: Input data end.\n");
- break; /* End. */
- }
- }
- if(bc->size - bc->pos < count)
- count = bc->size - bc->pos; /* We want only what we got. */
- }
- gotcount = bc_give(bc, out, count);
-
- if(VERBOSE3) debug2("wanted %li, got %li", (long)count, (long)gotcount);
-
- if(gotcount != count){ if(NOQUIET) error("gotcount != count"); return READER_ERROR; }
- else return gotcount;
-}
-#else
-int feed_more(mpg123_handle *fr, const unsigned char *in, long count)
-{
- fr->err = MPG123_MISSING_FEATURE;
- return -1;
-}
-off_t feed_set_pos(mpg123_handle *fr, off_t pos)
-{
- fr->err = MPG123_MISSING_FEATURE;
- return -1;
-}
-#endif /* NO_FEEDER */
-
-/*****************************************************************
- * read frame helper
- */
-
-#define bugger_off { mh->err = MPG123_NO_READER; return MPG123_ERR; }
-int bad_init(mpg123_handle *mh) bugger_off
-void bad_close(mpg123_handle *mh){}
-ssize_t bad_fullread(mpg123_handle *mh, unsigned char *data, ssize_t count) bugger_off
-int bad_head_read(mpg123_handle *mh, unsigned long *newhead) bugger_off
-int bad_head_shift(mpg123_handle *mh, unsigned long *head) bugger_off
-off_t bad_skip_bytes(mpg123_handle *mh, off_t len) bugger_off
-int bad_read_frame_body(mpg123_handle *mh, unsigned char *data, int size) bugger_off
-int bad_back_bytes(mpg123_handle *mh, off_t bytes) bugger_off
-int bad_seek_frame(mpg123_handle *mh, off_t num) bugger_off
-off_t bad_tell(mpg123_handle *mh) bugger_off
-void bad_rewind(mpg123_handle *mh){}
-#undef bugger_off
-
-#define READER_STREAM 0
-#define READER_ICY_STREAM 1
-#define READER_FEED 2
-#define READER_BUF_STREAM 3
-#define READER_BUF_ICY_STREAM 4
-struct reader readers[] =
-{
- { /* READER_STREAM */
- default_init,
- stream_close,
- plain_fullread,
- generic_head_read,
- generic_head_shift,
- stream_skip_bytes,
- generic_read_frame_body,
- stream_back_bytes,
- stream_seek_frame,
- generic_tell,
- stream_rewind,
- NULL
- } ,
- { /* READER_ICY_STREAM */
- default_init,
- stream_close,
- icy_fullread,
- generic_head_read,
- generic_head_shift,
- stream_skip_bytes,
- generic_read_frame_body,
- stream_back_bytes,
- stream_seek_frame,
- generic_tell,
- stream_rewind,
- NULL
- },
-#ifdef NO_FEEDER
-#define feed_init NULL
-#define feed_read NULL
-#define buffered_fullread NULL
-#define feed_seek_frame NULL
-#define feed_back_bytes NULL
-#define feed_skip_bytes NULL
-#define buffered_forget NULL
-#endif
- { /* READER_FEED */
- feed_init,
- stream_close,
- feed_read,
- generic_head_read,
- generic_head_shift,
- feed_skip_bytes,
- generic_read_frame_body,
- feed_back_bytes,
- feed_seek_frame,
- generic_tell,
- stream_rewind,
- buffered_forget
- },
- { /* READER_BUF_STREAM */
- default_init,
- stream_close,
- buffered_fullread,
- generic_head_read,
- generic_head_shift,
- stream_skip_bytes,
- generic_read_frame_body,
- stream_back_bytes,
- stream_seek_frame,
- generic_tell,
- stream_rewind,
- buffered_forget
- } ,
- { /* READER_BUF_ICY_STREAM */
- default_init,
- stream_close,
- buffered_fullread,
- generic_head_read,
- generic_head_shift,
- stream_skip_bytes,
- generic_read_frame_body,
- stream_back_bytes,
- stream_seek_frame,
- generic_tell,
- stream_rewind,
- buffered_forget
- },
-#ifdef READ_SYSTEM
- ,{
- system_init,
- NULL, /* filled in by system_init() */
- fullread,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- }
-#endif
-};
-
-struct reader bad_reader =
-{
- bad_init,
- bad_close,
- bad_fullread,
- bad_head_read,
- bad_head_shift,
- bad_skip_bytes,
- bad_read_frame_body,
- bad_back_bytes,
- bad_seek_frame,
- bad_tell,
- bad_rewind,
- NULL
-};
-
-static int default_init(mpg123_handle *fr)
-{
-#ifdef TIMEOUT_READ
- if(fr->p.timeout > 0)
- {
- int flags;
- if(fr->rdat.r_read != NULL)
- {
- error("Timeout reading does not work with user-provided read function. Implement it yourself!");
- return -1;
- }
- flags = fcntl(fr->rdat.filept, F_GETFL);
- flags |= O_NONBLOCK;
- fcntl(fr->rdat.filept, F_SETFL, flags);
- fr->rdat.fdread = timeout_read;
- fr->rdat.timeout_sec = fr->p.timeout;
- fr->rdat.flags |= READER_NONBLOCK;
- }
- else
-#endif
- fr->rdat.fdread = plain_read;
-
- fr->rdat.read = fr->rdat.r_read != NULL ? fr->rdat.r_read : posix_read;
- fr->rdat.lseek = fr->rdat.r_lseek != NULL ? fr->rdat.r_lseek : posix_lseek;
- fr->rdat.filelen = get_fileinfo(fr);
- fr->rdat.filepos = 0;
- if(fr->rdat.filelen >= 0)
- {
- fr->rdat.flags |= READER_SEEKABLE;
- if(!strncmp((char*)fr->id3buf,"TAG",3))
- {
- fr->rdat.flags |= READER_ID3TAG;
- fr->metaflags |= MPG123_NEW_ID3;
- }
- }
- /* Switch reader to a buffered one, if allowed. */
- else if(fr->p.flags & MPG123_SEEKBUFFER)
- {
-#ifdef NO_FEEDER
- error("Buffered readers not supported in this build.");
- fr->err = MPG123_MISSING_FEATURE;
- return -1;
-#else
- if (fr->rd == &readers[READER_STREAM])
- {
- fr->rd = &readers[READER_BUF_STREAM];
- fr->rdat.fullread = plain_fullread;
- }
-#ifndef NO_ICY
- else if(fr->rd == &readers[READER_ICY_STREAM])
- {
- fr->rd = &readers[READER_BUF_ICY_STREAM];
- fr->rdat.fullread = icy_fullread;
- }
-#endif
- else
- {
- if(NOQUIET) error("mpg123 Programmer's fault: invalid reader");
- return -1;
- }
- bc_init(&fr->rdat.buffer);
- fr->rdat.filelen = 0; /* We carry the offset, but never know how big the stream is. */
- fr->rdat.flags |= READER_BUFFERED;
-#endif /* NO_FEEDER */
- }
- return 0;
-}
-
-
-void open_bad(mpg123_handle *mh)
-{
-#ifndef NO_ICY
- clear_icy(&mh->icy);
-#endif
- mh->rd = &bad_reader;
- mh->rdat.flags = 0;
- bc_init(&mh->rdat.buffer);
-}
-
-int open_feed(mpg123_handle *fr)
-{
- debug("feed reader");
-#ifdef NO_FEEDER
- error("Buffered readers not supported in this build.");
- fr->err = MPG123_MISSING_FEATURE;
- return -1;
-#else
-#ifndef NO_ICY
- if(fr->p.icy_interval > 0)
- {
- if(NOQUIET) error("Feed reader cannot do ICY parsing!");
-
- return -1;
- }
- clear_icy(&fr->icy);
-#endif
- fr->rd = &readers[READER_FEED];
- fr->rdat.flags = 0;
- if(fr->rd->init(fr) < 0) return -1;
- return 0;
-#endif /* NO_FEEDER */
-}
-
-/* Final code common to open_stream and open_stream_handle. */
-static int open_finish(mpg123_handle *fr)
-{
-#ifndef NO_ICY
- if(fr->p.icy_interval > 0)
- {
- debug("ICY reader");
- fr->icy.interval = fr->p.icy_interval;
- fr->icy.next = fr->icy.interval;
- fr->rd = &readers[READER_ICY_STREAM];
- }
- else
-#endif
- {
- fr->rd = &readers[READER_STREAM];
- debug("stream reader");
- }
-
- if(fr->rd->init(fr) < 0) return -1;
-
- return MPG123_OK;
-}
-
-int open_stream(mpg123_handle *fr, const char *bs_filenam, int fd)
-{
- int filept_opened = 1;
- int filept; /* descriptor of opened file/stream */
-
- clear_icy(&fr->icy); /* can be done inside frame_clear ...? */
-
- if(!bs_filenam) /* no file to open, got a descriptor (stdin) */
- {
- filept = fd;
- filept_opened = 0; /* and don't try to close it... */
- }
- #ifndef O_BINARY
- #define O_BINARY (0)
- #endif
- else if((filept = compat_open(bs_filenam, O_RDONLY|O_BINARY)) < 0) /* a plain old file to open... */
- {
- if(NOQUIET) error2("Cannot open file %s: %s", bs_filenam, strerror(errno));
- fr->err = MPG123_BAD_FILE;
- return MPG123_ERR; /* error... */
- }
-
- /* now we have something behind filept and can init the reader */
- fr->rdat.filelen = -1;
- fr->rdat.filept = filept;
- fr->rdat.flags = 0;
- if(filept_opened) fr->rdat.flags |= READER_FD_OPENED;
-
- return open_finish(fr);
-}
-
-int open_stream_handle(mpg123_handle *fr, void *iohandle)
-{
- clear_icy(&fr->icy); /* can be done inside frame_clear ...? */
- fr->rdat.filelen = -1;
- fr->rdat.filept = -1;
- fr->rdat.iohandle = iohandle;
- fr->rdat.flags = 0;
- fr->rdat.flags |= READER_HANDLEIO;
-
- return open_finish(fr);
-}
-
-/* Wrappers for actual reading/seeking... I'm full of wrappers here. */
-static off_t io_seek(struct reader_data *rdat, off_t offset, int whence)
-{
- if(rdat->flags & READER_HANDLEIO)
- {
- if(rdat->r_lseek_handle != NULL)
- {
- return rdat->r_lseek_handle(rdat->iohandle, offset, whence);
- }
- else return -1;
- }
- else
- return rdat->lseek(rdat->filept, offset, whence);
-}
-
-static ssize_t io_read(struct reader_data *rdat, void *buf, size_t count)
-{
- if(rdat->flags & READER_HANDLEIO)
- {
- if(rdat->r_read_handle != NULL)
- {
- return rdat->r_read_handle(rdat->iohandle, buf, count);
- }
- else return -1;
- }
- else
- return rdat->read(rdat->filept, buf, count);
-}
diff --git a/src/mpg123/libmpg123/sample.h b/src/mpg123/libmpg123/sample.h
deleted file mode 100644
index 08df28b..0000000
--- a/src/mpg123/libmpg123/sample.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- sample.h: The conversion from internal data to output samples of differing formats.
-
- copyright 2007-9 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis, taking WRITE_SAMPLE from decode.c
- Later added the end-conversion specific macros here, too.
-*/
-
-#ifndef SAMPLE_H
-#define SAMPLE_H
-
-/* mpg123lib_intern.h is included already, right? */
-
-/* Special case is fixed point math... which does work, but not that nice yet. */
-#ifdef REAL_IS_FIXED
-static inline short idiv_signed_rounded(long x, int shift)
-{
- x >>= (shift - 1);
- x += (x & 1);
- return (short)(x >> 1);
-}
-# define REAL_PLUS_32767 ( 32767 << 15 )
-# define REAL_MINUS_32768 ( -32768 << 15 )
-# define REAL_TO_SHORT(x) (idiv_signed_rounded(x, 15))
-/* No better code (yet). */
-# define REAL_TO_SHORT_ACCURATE(x) REAL_TO_SHORT(x)
-/* This is just here for completeness, it is not used! */
-# define REAL_TO_S32(x) (x)
-#endif
-
-/* From now on for single precision float... double precision is a possible option once we added some bits. But, it would be rather insane. */
-#ifndef REAL_TO_SHORT
-
-/* Define the accurate rounding function. */
-# if (defined REAL_IS_FLOAT) && (defined IEEE_FLOAT)
-/* This function is only available for IEEE754 single-precision values
- This is nearly identical to proper rounding, just -+0.5 is rounded to 0 */
-static inline short ftoi16(float x)
-{
- union
- {
- float f;
- int32_t i;
- } u_fi;
- u_fi.f = x + 12582912.0f; /* Magic Number: 2^23 + 2^22 */
- return (short)u_fi.i;
-}
-# define REAL_TO_SHORT_ACCURATE(x) ftoi16(x)
-# else
-/* The "proper" rounding, plain C, a bit slow. */
-# define REAL_TO_SHORT_ACCURATE(x) (short)((x)>0.0?(x)+0.5:(x)-0.5)
-# endif
-
-/* Now define the normal rounding. */
-# ifdef ACCURATE_ROUNDING
-# define REAL_TO_SHORT(x) REAL_TO_SHORT_ACCURATE(x)
-# else
-/* Non-accurate rounding... simple truncation. Fastest, most LSB errors. */
-# define REAL_TO_SHORT(x) (short)(x)
-# endif
-
-#endif /* REAL_TO_SHORT */
-
-/* We should add dithering for S32, too? */
-#ifndef REAL_TO_S32
-# ifdef ACCURATE_ROUNDING
-# define REAL_TO_S32(x) (int32_t)((x)>0.0?(x)+0.5:(x)-0.5)
-# else
-# define REAL_TO_S32(x) (int32_t)(x)
-# endif
-#endif
-
-#ifndef REAL_PLUS_32767
-# define REAL_PLUS_32767 32767.0
-#endif
-#ifndef REAL_MINUS_32768
-# define REAL_MINUS_32768 -32768.0
-#endif
-#ifndef REAL_PLUS_S32
-# define REAL_PLUS_S32 2147483647.0
-#endif
-#ifndef REAL_MINUS_S32
-# define REAL_MINUS_S32 -2147483648.0
-#endif
-
-
-/* The actual storage of a decoded sample is separated in the following macros.
- We can handle different types, we could also handle dithering here. */
-
-/* Macro to produce a short (signed 16bit) output sample from internal representation,
- which may be float, double or indeed some integer for fixed point handling. */
-#define WRITE_SHORT_SAMPLE(samples,sum,clip) \
- if( (sum) > REAL_PLUS_32767) { *(samples) = 0x7fff; (clip)++; } \
- else if( (sum) < REAL_MINUS_32768) { *(samples) = -0x8000; (clip)++; } \
- else { *(samples) = REAL_TO_SHORT(sum); }
-
-/* Same as above, but always using accurate rounding. Would we want softer clipping here, too? */
-#define WRITE_SHORT_SAMPLE_ACCURATE(samples,sum,clip) \
- if( (sum) > REAL_PLUS_32767) { *(samples) = 0x7fff; (clip)++; } \
- else if( (sum) < REAL_MINUS_32768) { *(samples) = -0x8000; (clip)++; } \
- else { *(samples) = REAL_TO_SHORT_ACCURATE(sum); }
-
-/*
- 32bit signed
- We do clipping with the same old borders... but different conversion.
- We see here that we need extra work for non-16bit output... we optimized for 16bit.
- -0x7fffffff-1 is the minimum 32 bit signed integer value expressed so that MSVC
- does not give a compile time warning.
-*/
-#define WRITE_S32_SAMPLE(samples,sum,clip) \
- { \
- real tmpsum = REAL_MUL((sum),S32_RESCALE); \
- if( tmpsum > REAL_PLUS_S32 ){ *(samples) = 0x7fffffff; (clip)++; } \
- else if( tmpsum < REAL_MINUS_S32 ) { *(samples) = -0x7fffffff-1; (clip)++; } \
- else { *(samples) = REAL_TO_S32(tmpsum); } \
- }
-
-/* Produce an 8bit sample, via 16bit intermediate. */
-#define WRITE_8BIT_SAMPLE(samples,sum,clip) \
-{ \
- short write_8bit_tmp; \
- if( (sum) > REAL_PLUS_32767) { write_8bit_tmp = 0x7fff; (clip)++; } \
- else if( (sum) < REAL_MINUS_32768) { write_8bit_tmp = -0x8000; (clip)++; } \
- else { write_8bit_tmp = REAL_TO_SHORT(sum); } \
- *(samples) = fr->conv16to8[write_8bit_tmp>>AUSHIFT]; \
-}
-#ifndef REAL_IS_FIXED
-#define WRITE_REAL_SAMPLE(samples,sum,clip) *(samples) = ((real)1./SHORT_SCALE)*(sum)
-#endif
-
-#endif
diff --git a/src/mpg123/libmpg123/stringbuf.c b/src/mpg123/libmpg123/stringbuf.c
deleted file mode 100644
index 29dd1fc..0000000
--- a/src/mpg123/libmpg123/stringbuf.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- stringbuf: mimicking a bit of C++ to more safely handle strings
-
- copyright 2006-8 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Thomas Orgis
-*/
-
-#include "mpg123lib_intern.h"
-#include "config.h"
-#include "mpg123.h"
-#include "compat.h"
-#include <string.h>
-#include "debug.h"
-
-void attribute_align_arg mpg123_init_string(mpg123_string* sb)
-{
- sb->p = NULL;
- sb->size = 0;
- sb->fill = 0;
-}
-
-void attribute_align_arg mpg123_free_string(mpg123_string* sb)
-{
- if(sb->p != NULL) free(sb->p);
- mpg123_init_string(sb);
-}
-
-int attribute_align_arg mpg123_grow_string(mpg123_string* sb, size_t new)
-{
- if(sb->size < new) return mpg123_resize_string(sb, new);
- else return 1;
-}
-
-int attribute_align_arg mpg123_resize_string(mpg123_string* sb, size_t new)
-{
- debug3("resizing string pointer %p from %lu to %lu", (void*) sb->p, (unsigned long)sb->size, (unsigned long)new);
- if(new == 0)
- {
- if(sb->size && sb->p != NULL) free(sb->p);
- mpg123_init_string(sb);
- return 1;
- }
- if(sb->size != new)
- {
- char* t;
- debug("really!");
- t = (char*) safe_realloc(sb->p, new*sizeof(char));
- debug1("safe_realloc returned %p", (void*) t);
- if(t != NULL)
- {
- sb->p = t;
- sb->size = new;
- return 1;
- }
- else return 0;
- }
- else return 1; /* success */
-}
-
-int attribute_align_arg mpg123_copy_string(mpg123_string* from, mpg123_string* to)
-{
- size_t fill;
- char *text;
- if(to == NULL) return -1;
-
- debug2("called copy_string with %p -> %p", (void*)from, (void*)to);
- if(from == NULL)
- {
- fill = 0;
- text = NULL;
- }
- else
- {
- fill = from->fill;
- text = from->p;
- }
-
- if(mpg123_resize_string(to, fill))
- {
- memcpy(to->p, text, fill);
- to->fill = fill;
- return 1;
- }
- else return 0;
-}
-
-int attribute_align_arg mpg123_add_string(mpg123_string* sb, const char* stuff)
-{
- debug1("adding %s", stuff);
- return mpg123_add_substring(sb, stuff, 0, strlen(stuff));
-}
-
-int attribute_align_arg mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count)
-{
- debug("adding a substring");
- if(sb->fill) /* includes zero byte... */
- {
- if( (SIZE_MAX - sb->fill >= count) /* Avoid overflow. */
- && (sb->size >= sb->fill+count || mpg123_grow_string(sb, sb->fill+count)) )
- {
- memcpy(sb->p+sb->fill-1, stuff+from, count);
- sb->fill += count;
- sb->p[sb->fill-1] = 0; /* Terminate! */
- }
- else return 0;
- }
- else
- {
- if( count < SIZE_MAX && mpg123_grow_string(sb, count+1) )
- {
- memcpy(sb->p, stuff+from, count);
- sb->fill = count+1;
- sb->p[sb->fill-1] = 0; /* Terminate! */
- }
- else return 0;
- }
- return 1;
-}
-
-int attribute_align_arg mpg123_set_substring(mpg123_string* sb, const char* stuff, size_t from, size_t count)
-{
- sb->fill = 0;
- return mpg123_add_substring(sb, stuff, from, count);
-}
-
-int attribute_align_arg mpg123_set_string(mpg123_string* sb, const char* stuff)
-{
- sb->fill = 0;
- return mpg123_add_string(sb, stuff);
-}
diff --git a/src/mpg123/libmpg123/synth.c b/src/mpg123/libmpg123/synth.c
deleted file mode 100644
index 7888450..0000000
--- a/src/mpg123/libmpg123/synth.c
+++ /dev/null
@@ -1,634 +0,0 @@
-/*
- synth.c: The functions for synthesizing samples, at the end of decoding.
-
- copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp, heavily dissected and rearranged by Thomas Orgis
-*/
-
-#include "mpg123lib_intern.h"
-#include "sample.h"
-#include "debug.h"
-
-/*
- Part 1: All synth functions that produce signed short.
- That is:
- - synth_1to1 with cpu-specific variants (synth_1to1_i386, synth_1to1_i586 ...)
- - synth_1to1_mono and synth_1to1_mono2stereo; which use fr->synths.plain[r_1to1][f_16].
- Nearly every decoder variant has it's own synth_1to1, while the mono conversion is shared.
-*/
-
-#define SAMPLE_T short
-#define WRITE_SAMPLE(samples,sum,clip) WRITE_SHORT_SAMPLE(samples,sum,clip)
-
-/* Part 1a: All straight 1to1 decoding functions */
-#define BLOCK 0x40 /* One decoding block is 64 samples. */
-
-#define SYNTH_NAME synth_1to1
-#include "synth.h"
-#undef SYNTH_NAME
-
-/* Mono-related synths; they wrap over _some_ synth_1to1. */
-#define SYNTH_NAME fr->synths.plain[r_1to1][f_16]
-#define MONO_NAME synth_1to1_mono
-#define MONO2STEREO_NAME synth_1to1_mono2stereo
-#include "synth_mono.h"
-#undef SYNTH_NAME
-#undef MONO_NAME
-#undef MONO2STEREO_NAME
-
-/* Now we have possibly some special synth_1to1 ...
- ... they produce signed short; the mono functions defined above work on the special synths, too. */
-
-#ifdef OPT_GENERIC_DITHER
-#define SYNTH_NAME synth_1to1_dither
-/* We need the accurate sample writing... */
-#undef WRITE_SAMPLE
-#define WRITE_SAMPLE(samples,sum,clip) WRITE_SHORT_SAMPLE_ACCURATE(samples,sum,clip)
-
-#define USE_DITHER
-#include "synth.h"
-#undef USE_DITHER
-#undef SYNTH_NAME
-
-#undef WRITE_SAMPLE
-#define WRITE_SAMPLE(samples,sum,clip) WRITE_SHORT_SAMPLE(samples,sum,clip)
-
-#endif
-
-#ifdef OPT_X86
-/* The i386-specific C code, here as short variant, later 8bit and float. */
-#define NO_AUTOINCREMENT
-#define SYNTH_NAME synth_1to1_i386
-#include "synth.h"
-#undef SYNTH_NAME
-/* i386 uses the normal mono functions. */
-#undef NO_AUTOINCREMENT
-#endif
-
-#undef BLOCK /* Following functions are so special that they don't need this. */
-
-#ifdef OPT_I586
-/* This is defined in assembler. */
-int synth_1to1_i586_asm(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int *bo, real *decwin);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_i586(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
- int ret;
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- ret = synth_1to1_i586_asm(bandPtr, channel, fr->buffer.data+fr->buffer.fill, fr->rawbuffs, &fr->bo, fr->decwin);
- if(final) fr->buffer.fill += 128;
- return ret;
-}
-#endif
-
-#ifdef OPT_I586_DITHER
-/* This is defined in assembler. */
-int synth_1to1_i586_asm_dither(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int *bo, real *decwin, float *dithernoise);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_i586_dither(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
- int ret;
- int bo_dither[2]; /* Temporary workaround? Could expand the asm code. */
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- /* Applying this hack, to change the asm only bit by bit (adding dithernoise pointer). */
- bo_dither[0] = fr->bo;
- bo_dither[1] = fr->ditherindex;
- ret = synth_1to1_i586_asm_dither(bandPtr, channel, fr->buffer.data+fr->buffer.fill, fr->rawbuffs, bo_dither, fr->decwin, fr->dithernoise);
- fr->bo = bo_dither[0];
- fr->ditherindex = bo_dither[1];
-
- if(final) fr->buffer.fill += 128;
- return ret;
-}
-#endif
-
-#ifdef OPT_3DNOW
-/* Those are defined in assembler. */
-void do_equalizer_3dnow(real *bandPtr,int channel, real equalizer[2][32]);
-int synth_1to1_3dnow_asm(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int *bo, real *decwin);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_3dnow(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
- int ret;
-
- if(fr->have_eq_settings) do_equalizer_3dnow(bandPtr,channel,fr->equalizer);
-
- /* this is in asm, can be dither or not */
- /* uh, is this return from pointer correct? */
- ret = (int) synth_1to1_3dnow_asm(bandPtr, channel, fr->buffer.data+fr->buffer.fill, fr->rawbuffs, &fr->bo, fr->decwin);
- if(final) fr->buffer.fill += 128;
- return ret;
-}
-#endif
-
-#ifdef OPT_MMX
-/* This is defined in assembler. */
-int synth_1to1_MMX(real *bandPtr, int channel, short *out, short *buffs, int *bo, float *decwins);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_mmx(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- /* in asm */
- synth_1to1_MMX(bandPtr, channel, (short*) (fr->buffer.data+fr->buffer.fill), (short *) fr->rawbuffs, &fr->bo, fr->decwins);
- if(final) fr->buffer.fill += 128;
- return 0;
-}
-#endif
-
-#ifdef OPT_SSE
-#ifdef ACCURATE_ROUNDING
-/* This is defined in assembler. */
-int synth_1to1_sse_accurate_asm(real *window, real *b0, short *samples, int bo1);
-int synth_1to1_stereo_sse_accurate_asm(real *window, real *b0l, real *b0r, short *samples, int bo1);
-void dct64_real_sse(real *out0, real *out1, real *samples);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_sse(real *bandPtr,int channel, mpg123_handle *fr, int final)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
- real *b0, **buf;
- int clip;
- int bo1;
-
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- if(!channel)
- {
- fr->bo--;
- fr->bo &= 0xf;
- buf = fr->real_buffs[0];
- }
- else
- {
- samples++;
- buf = fr->real_buffs[1];
- }
-
- if(fr->bo & 0x1)
- {
- b0 = buf[0];
- bo1 = fr->bo;
- dct64_real_sse(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
- }
- else
- {
- b0 = buf[1];
- bo1 = fr->bo+1;
- dct64_real_sse(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
- }
-
- clip = synth_1to1_sse_accurate_asm(fr->decwin, b0, samples, bo1);
-
- if(final) fr->buffer.fill += 128;
-
- return clip;
-}
-
-int synth_1to1_stereo_sse(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
-
- real *b0l, *b0r, **bufl, **bufr;
- int bo1;
- int clip;
-
- if(fr->have_eq_settings)
- {
- do_equalizer(bandPtr_l,0,fr->equalizer);
- do_equalizer(bandPtr_r,1,fr->equalizer);
- }
-
- fr->bo--;
- fr->bo &= 0xf;
- bufl = fr->real_buffs[0];
- bufr = fr->real_buffs[1];
-
- if(fr->bo & 0x1)
- {
- b0l = bufl[0];
- b0r = bufr[0];
- bo1 = fr->bo;
- dct64_real_sse(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
- dct64_real_sse(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
- }
- else
- {
- b0l = bufl[1];
- b0r = bufr[1];
- bo1 = fr->bo+1;
- dct64_real_sse(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
- dct64_real_sse(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
- }
-
- clip = synth_1to1_stereo_sse_accurate_asm(fr->decwin, b0l, b0r, samples, bo1);
-
- fr->buffer.fill += 128;
-
- return clip;
-}
-#else
-/* This is defined in assembler. */
-void synth_1to1_sse_asm(real *bandPtr, int channel, short *samples, short *buffs, int *bo, real *decwin);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_sse(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- synth_1to1_sse_asm(bandPtr, channel, (short*) (fr->buffer.data+fr->buffer.fill), (short *) fr->rawbuffs, &fr->bo, fr->decwins);
- if(final) fr->buffer.fill += 128;
- return 0;
-}
-#endif
-#endif
-
-#ifdef OPT_3DNOWEXT
-/* This is defined in assembler. */
-void synth_1to1_3dnowext_asm(real *bandPtr, int channel, short *samples, short *buffs, int *bo, real *decwin);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_3dnowext(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- synth_1to1_3dnowext_asm(bandPtr, channel, (short*) (fr->buffer.data+fr->buffer.fill), (short *) fr->rawbuffs, &fr->bo, fr->decwins);
- if(final) fr->buffer.fill += 128;
- return 0;
-}
-#endif
-
-#ifdef OPT_X86_64
-#ifdef ACCURATE_ROUNDING
-/* Assembler routines. */
-int synth_1to1_x86_64_accurate_asm(real *window, real *b0, short *samples, int bo1);
-int synth_1to1_stereo_x86_64_accurate_asm(real *window, real *b0l, real *b0r, short *samples, int bo1);
-void dct64_real_x86_64(real *out0, real *out1, real *samples);
-/* Hull for C mpg123 API */
-int synth_1to1_x86_64(real *bandPtr,int channel, mpg123_handle *fr, int final)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
-
- real *b0, **buf;
- int bo1;
- int clip;
-
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- if(!channel)
- {
- fr->bo--;
- fr->bo &= 0xf;
- buf = fr->real_buffs[0];
- }
- else
- {
- samples++;
- buf = fr->real_buffs[1];
- }
-
- if(fr->bo & 0x1)
- {
- b0 = buf[0];
- bo1 = fr->bo;
- dct64_real_x86_64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
- }
- else
- {
- b0 = buf[1];
- bo1 = fr->bo+1;
- dct64_real_x86_64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
- }
-
- clip = synth_1to1_x86_64_accurate_asm(fr->decwin, b0, samples, bo1);
-
- if(final) fr->buffer.fill += 128;
-
- return clip;
-}
-
-int synth_1to1_stereo_x86_64(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
-
- real *b0l, *b0r, **bufl, **bufr;
- int bo1;
- int clip;
-
- if(fr->have_eq_settings)
- {
- do_equalizer(bandPtr_l,0,fr->equalizer);
- do_equalizer(bandPtr_r,1,fr->equalizer);
- }
-
- fr->bo--;
- fr->bo &= 0xf;
- bufl = fr->real_buffs[0];
- bufr = fr->real_buffs[1];
-
- if(fr->bo & 0x1)
- {
- b0l = bufl[0];
- b0r = bufr[0];
- bo1 = fr->bo;
- dct64_real_x86_64(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
- dct64_real_x86_64(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
- }
- else
- {
- b0l = bufl[1];
- b0r = bufr[1];
- bo1 = fr->bo+1;
- dct64_real_x86_64(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
- dct64_real_x86_64(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
- }
-
- clip = synth_1to1_stereo_x86_64_accurate_asm(fr->decwin, b0l, b0r, samples, bo1);
-
- fr->buffer.fill += 128;
-
- return clip;
-}
-#else
-/* This is defined in assembler. */
-int synth_1to1_x86_64_asm(short *window, short *b0, short *samples, int bo1);
-int synth_1to1_stereo_x86_64_asm(short *window, short *b0l, short *b0r, short *samples, int bo1);
-void dct64_x86_64(short *out0, short *out1, real *samples);
-/* This is just a hull to use the mpg123 handle. */
-int synth_1to1_x86_64(real *bandPtr,int channel, mpg123_handle *fr, int final)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
- short *b0, **buf;
- int clip;
- int bo1;
-
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- if(!channel)
- {
- fr->bo--;
- fr->bo &= 0xf;
- buf = fr->short_buffs[0];
- }
- else
- {
- samples++;
- buf = fr->short_buffs[1];
- }
-
- if(fr->bo & 0x1)
- {
- b0 = buf[0];
- bo1 = fr->bo;
- dct64_x86_64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
- }
- else
- {
- b0 = buf[1];
- bo1 = fr->bo+1;
- dct64_x86_64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
- }
-
- clip = synth_1to1_x86_64_asm((short *)fr->decwins, b0, samples, bo1);
-
- if(final) fr->buffer.fill += 128;
-
- return clip;
-}
-
-int synth_1to1_stereo_x86_64(real *bandPtr_l,real *bandPtr_r, mpg123_handle *fr)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
- short *b0l, *b0r, **bufl, **bufr;
- int clip;
- int bo1;
-
- if(fr->have_eq_settings)
- {
- do_equalizer(bandPtr_l,0,fr->equalizer);
- do_equalizer(bandPtr_r,1,fr->equalizer);
- }
-
- fr->bo--;
- fr->bo &= 0xf;
- bufl = fr->short_buffs[0];
- bufr = fr->short_buffs[1];
-
- if(fr->bo & 0x1)
- {
- b0l = bufl[0];
- b0r = bufr[0];
- bo1 = fr->bo;
- dct64_x86_64(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
- dct64_x86_64(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
- }
- else
- {
- b0l = bufl[1];
- b0r = bufr[1];
- bo1 = fr->bo+1;
- dct64_x86_64(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
- dct64_x86_64(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
- }
-
- clip = synth_1to1_stereo_x86_64_asm((short *)fr->decwins, b0l, b0r, samples, bo1);
-
- fr->buffer.fill += 128;
-
- return clip;
-}
-#endif
-#endif
-
-#ifdef OPT_ARM
-#ifdef ACCURATE_ROUNDING
-/* Assembler routines. */
-int synth_1to1_arm_accurate_asm(real *window, real *b0, short *samples, int bo1);
-/* Hull for C mpg123 API */
-int synth_1to1_arm(real *bandPtr,int channel, mpg123_handle *fr, int final)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
-
- real *b0, **buf;
- int bo1;
- int clip;
-
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- if(!channel)
- {
- fr->bo--;
- fr->bo &= 0xf;
- buf = fr->real_buffs[0];
- }
- else
- {
- samples++;
- buf = fr->real_buffs[1];
- }
-
- if(fr->bo & 0x1)
- {
- b0 = buf[0];
- bo1 = fr->bo;
- dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
- }
- else
- {
- b0 = buf[1];
- bo1 = fr->bo+1;
- dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
- }
-
- clip = synth_1to1_arm_accurate_asm(fr->decwin, b0, samples, bo1);
-
- if(final) fr->buffer.fill += 128;
-
- return clip;
-}
-#else
-/* Assembler routines. */
-int synth_1to1_arm_asm(real *window, real *b0, short *samples, int bo1);
-/* Hull for C mpg123 API */
-int synth_1to1_arm(real *bandPtr,int channel, mpg123_handle *fr, int final)
-{
- short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
-
- real *b0, **buf;
- int bo1;
- int clip;
-
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- if(!channel)
- {
- fr->bo--;
- fr->bo &= 0xf;
- buf = fr->real_buffs[0];
- }
- else
- {
- samples++;
- buf = fr->real_buffs[1];
- }
-
- if(fr->bo & 0x1)
- {
- b0 = buf[0];
- bo1 = fr->bo;
- dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
- }
- else
- {
- b0 = buf[1];
- bo1 = fr->bo+1;
- dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
- }
-
- clip = synth_1to1_arm_asm(fr->decwin, b0, samples, bo1);
-
- if(final) fr->buffer.fill += 128;
-
- return clip;
-}
-#endif
-#endif
-
-#ifndef NO_DOWNSAMPLE
-
-/*
- Part 1b: 2to1 synth.
- Only generic and i386 functions this time.
-*/
-#define BLOCK 0x20 /* One decoding block is 32 samples. */
-
-#define SYNTH_NAME synth_2to1
-#include "synth.h"
-#undef SYNTH_NAME
-
-#ifdef OPT_DITHER /* Used for generic_dither and as fallback for i586_dither. */
-#define SYNTH_NAME synth_2to1_dither
-#define USE_DITHER
-#include "synth.h"
-#undef USE_DITHER
-#undef SYNTH_NAME
-#endif
-
-#define SYNTH_NAME fr->synths.plain[r_2to1][f_16]
-#define MONO_NAME synth_2to1_mono
-#define MONO2STEREO_NAME synth_2to1_mono2stereo
-#include "synth_mono.h"
-#undef SYNTH_NAME
-#undef MONO_NAME
-#undef MONO2STEREO_NAME
-
-#ifdef OPT_X86
-#define NO_AUTOINCREMENT
-#define SYNTH_NAME synth_2to1_i386
-#include "synth.h"
-#undef SYNTH_NAME
-/* i386 uses the normal mono functions. */
-#undef NO_AUTOINCREMENT
-#endif
-
-#undef BLOCK
-
-/*
- Part 1c: 4to1 synth.
- Same procedure as above...
-*/
-#define BLOCK 0x10 /* One decoding block is 16 samples. */
-
-#define SYNTH_NAME synth_4to1
-#include "synth.h"
-#undef SYNTH_NAME
-
-#ifdef OPT_DITHER
-#define SYNTH_NAME synth_4to1_dither
-#define USE_DITHER
-#include "synth.h"
-#undef USE_DITHER
-#undef SYNTH_NAME
-#endif
-
-#define SYNTH_NAME fr->synths.plain[r_4to1][f_16] /* This is just for the _i386 one... gotta check if it is really useful... */
-#define MONO_NAME synth_4to1_mono
-#define MONO2STEREO_NAME synth_4to1_mono2stereo
-#include "synth_mono.h"
-#undef SYNTH_NAME
-#undef MONO_NAME
-#undef MONO2STEREO_NAME
-
-#ifdef OPT_X86
-#define NO_AUTOINCREMENT
-#define SYNTH_NAME synth_4to1_i386
-#include "synth.h"
-#undef SYNTH_NAME
-/* i386 uses the normal mono functions. */
-#undef NO_AUTOINCREMENT
-#endif
-
-#undef BLOCK
-
-#endif /* NO_DOWNSAMPLE */
-
-#ifndef NO_NTOM
-/*
- Part 1d: ntom synth.
- Same procedure as above... Just no extra play anymore, straight synth that uses the plain dct64.
-*/
-
-/* These are all in one header, there's no flexibility to gain. */
-#define SYNTH_NAME synth_ntom
-#define MONO_NAME synth_ntom_mono
-#define MONO2STEREO_NAME synth_ntom_mono2stereo
-#include "synth_ntom.h"
-#undef SYNTH_NAME
-#undef MONO_NAME
-#undef MONO2STEREO_NAME
-
-#endif
-
-/* Done with short output. */
-#undef SAMPLE_T
-#undef WRITE_SAMPLE
diff --git a/src/mpg123/libmpg123/synth.h b/src/mpg123/libmpg123/synth.h
deleted file mode 100644
index 6cdac58..0000000
--- a/src/mpg123/libmpg123/synth.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- synth.h: generic synth functions
-
- copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp, generalized by Thomas Orgis
-
- This header is used multiple times to create different variants of these functions.
- See decode.c and friends.
- Hint: BLOCK, MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T as well as WRITE_SAMPLE do vary.
-
- Thomas looked closely at the decode_1to1, decode_2to1 and decode_4to1 contents, seeing that they are too similar to be separate files.
- This is what resulted...
-
- Basically, you need one set of these functions for each output sample type.
- That currently means signed short, 8bit or float/double; though unsigned short may come, too.
-
- Define NO_AUTOINCREMENT i386 code that shall not rely on autoincrement.
- Actual benefit of this has to be examined; may apply to specific (old) compilers, only.
-*/
-
-
-/* Main synth function, uses the plain dct64 or dct64_i386. */
-int SYNTH_NAME(real *bandPtr, int channel, mpg123_handle *fr, int final)
-{
-#ifndef NO_AUTOINCREMENT
-#define BACKPEDAL 0x10 /* We use autoincrement and thus need this re-adjustment for window/b0. */
-#define MY_DCT64 dct64
-#else
-#define BACKPEDAL 0x00 /* i386 code does not need that. */
-#define MY_DCT64 dct64_i386
-#endif
- static const int step = 2;
- SAMPLE_T *samples = (SAMPLE_T *) (fr->buffer.data + fr->buffer.fill);
-
- real *b0, **buf; /* (*buf)[0x110]; */
- int clip = 0;
- int bo1;
-
- if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
-
- if(!channel)
- {
- fr->bo--;
- fr->bo &= 0xf;
- buf = fr->real_buffs[0];
- }
- else
- {
-#ifdef USE_DITHER
- /* We always go forward 32 dither points (and back again for the second channel),
- (re)sampling the noise the same way as the original signal. */
- fr->ditherindex -= 32;
-#endif
- samples++;
- buf = fr->real_buffs[1];
- }
-#ifdef USE_DITHER
- /* We check only once for the overflow of dither index here ...
- this wraps differently than the original i586 dither code, in theory (but when DITHERSIZE % BLOCK/2 == 0 it's the same). */
- if(DITHERSIZE-fr->ditherindex < 32) fr->ditherindex = 0;
- /* And we define a macro for the dither action... */
- #define ADD_DITHER(fr,sum) sum+=fr->dithernoise[fr->ditherindex]; fr->ditherindex += 64/BLOCK;
-#else
- #define ADD_DITHER(fr,sum)
-#endif
-
- if(fr->bo & 0x1)
- {
- b0 = buf[0];
- bo1 = fr->bo;
- MY_DCT64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
- }
- else
- {
- b0 = buf[1];
- bo1 = fr->bo+1;
- MY_DCT64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
- }
-
- {
- register int j;
- real *window = fr->decwin + 16 - bo1;
-
- for(j=(BLOCK/4); j; j--, b0+=0x400/BLOCK-BACKPEDAL, window+=0x800/BLOCK-BACKPEDAL, samples+=step)
- {
- real sum;
-#ifndef NO_AUTOINCREMENT
- sum = REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
- sum += REAL_MUL_SYNTH(*window++, *b0++);
- sum -= REAL_MUL_SYNTH(*window++, *b0++);
-#else
- sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]);
- sum -= REAL_MUL_SYNTH(window[0x1], b0[0x1]);
- sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]);
- sum -= REAL_MUL_SYNTH(window[0x3], b0[0x3]);
- sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]);
- sum -= REAL_MUL_SYNTH(window[0x5], b0[0x5]);
- sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]);
- sum -= REAL_MUL_SYNTH(window[0x7], b0[0x7]);
- sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]);
- sum -= REAL_MUL_SYNTH(window[0x9], b0[0x9]);
- sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]);
- sum -= REAL_MUL_SYNTH(window[0xB], b0[0xB]);
- sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]);
- sum -= REAL_MUL_SYNTH(window[0xD], b0[0xD]);
- sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]);
- sum -= REAL_MUL_SYNTH(window[0xF], b0[0xF]);
-#endif
-
- ADD_DITHER(fr,sum)
- WRITE_SAMPLE(samples,sum,clip);
- }
-
- {
- real sum;
- sum = REAL_MUL_SYNTH(window[0x0], b0[0x0]);
- sum += REAL_MUL_SYNTH(window[0x2], b0[0x2]);
- sum += REAL_MUL_SYNTH(window[0x4], b0[0x4]);
- sum += REAL_MUL_SYNTH(window[0x6], b0[0x6]);
- sum += REAL_MUL_SYNTH(window[0x8], b0[0x8]);
- sum += REAL_MUL_SYNTH(window[0xA], b0[0xA]);
- sum += REAL_MUL_SYNTH(window[0xC], b0[0xC]);
- sum += REAL_MUL_SYNTH(window[0xE], b0[0xE]);
-
- ADD_DITHER(fr,sum)
- WRITE_SAMPLE(samples,sum,clip);
- samples += step;
- b0-=0x400/BLOCK;
- window-=0x800/BLOCK;
- }
- window += bo1<<1;
-
- for(j=(BLOCK/4)-1; j; j--, b0-=0x400/BLOCK+BACKPEDAL, window-=0x800/BLOCK-BACKPEDAL, samples+=step)
- {
- real sum;
-#ifndef NO_AUTOINCREMENT
- sum = -REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
- sum -= REAL_MUL_SYNTH(*(--window), *b0++);
-#else
- sum = -REAL_MUL_SYNTH(window[-0x1], b0[0x0]);
- sum -= REAL_MUL_SYNTH(window[-0x2], b0[0x1]);
- sum -= REAL_MUL_SYNTH(window[-0x3], b0[0x2]);
- sum -= REAL_MUL_SYNTH(window[-0x4], b0[0x3]);
- sum -= REAL_MUL_SYNTH(window[-0x5], b0[0x4]);
- sum -= REAL_MUL_SYNTH(window[-0x6], b0[0x5]);
- sum -= REAL_MUL_SYNTH(window[-0x7], b0[0x6]);
- sum -= REAL_MUL_SYNTH(window[-0x8], b0[0x7]);
- sum -= REAL_MUL_SYNTH(window[-0x9], b0[0x8]);
- sum -= REAL_MUL_SYNTH(window[-0xA], b0[0x9]);
- sum -= REAL_MUL_SYNTH(window[-0xB], b0[0xA]);
- sum -= REAL_MUL_SYNTH(window[-0xC], b0[0xB]);
- sum -= REAL_MUL_SYNTH(window[-0xD], b0[0xC]);
- sum -= REAL_MUL_SYNTH(window[-0xE], b0[0xD]);
- sum -= REAL_MUL_SYNTH(window[-0xF], b0[0xE]);
- sum -= REAL_MUL_SYNTH(window[-0x0], b0[0xF]); /* Is that right? 0x0? Just wondering... */
-#endif
- ADD_DITHER(fr,sum)
- WRITE_SAMPLE(samples,sum,clip);
- }
- }
-
- if(final) fr->buffer.fill += BLOCK*sizeof(SAMPLE_T);
-
- return clip;
-#undef ADD_DITHER
-#undef BACKPEDAL
-#undef MY_DCT64
-}
diff --git a/src/mpg123/libmpg123/synth_mono.h b/src/mpg123/libmpg123/synth_mono.h
deleted file mode 100644
index 907aa25..0000000
--- a/src/mpg123/libmpg123/synth_mono.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- monosynth.h: generic mono related synth functions
-
- copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp, generalized by Thomas Orgis
-
- This header is used multiple times to create different variants of these functions.
- See decode.c and synth.h .
- Hint: BLOCK, MONO_NAME, MONO2STEREO_NAME, SYNTH_NAME and SAMPLE_T do vary.
-
- Thomas looked closely at the decode_1to1, decode_2to1 and decode_4to1 contents, seeing that they are too similar to be separate files.
- This is what resulted...
-
- Reason to separate this from synth.h:
- There are decoders that have a special synth_1to1 but still can use these generic derivations for the mono stuff.
- It generally makes a good deal of sense to set SYNTH_NAME to opt_synth_1to1(fr) (or opt_synth_2to1(fr), etc.).
-*/
-
-/* Mono synth, wrapping over SYNTH_NAME */
-int MONO_NAME(real *bandPtr, mpg123_handle *fr)
-{
- SAMPLE_T samples_tmp[BLOCK];
- SAMPLE_T *tmp1 = samples_tmp;
- int i,ret;
-
- /* save buffer stuff, trick samples_tmp into there, decode, restore */
- unsigned char *samples = fr->buffer.data;
- int pnt = fr->buffer.fill;
- fr->buffer.data = (unsigned char*) samples_tmp;
- fr->buffer.fill = 0;
- ret = SYNTH_NAME(bandPtr, 0, fr, 0); /* decode into samples_tmp */
- fr->buffer.data = samples; /* restore original value */
-
- /* now append samples from samples_tmp */
- samples += pnt; /* just the next mem in frame buffer */
- for(i=0;i<(BLOCK/2);i++)
- {
- *( (SAMPLE_T *)samples) = *tmp1;
- samples += sizeof(SAMPLE_T);
- tmp1 += 2;
- }
- fr->buffer.fill = pnt + (BLOCK/2)*sizeof(SAMPLE_T);
-
- return ret;
-}
-
-/* Mono to stereo synth, wrapping over SYNTH_NAME */
-int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr)
-{
- int i,ret;
- unsigned char *samples = fr->buffer.data;
-
- ret = SYNTH_NAME(bandPtr,0,fr,1);
- samples += fr->buffer.fill - BLOCK*sizeof(SAMPLE_T);
-
- for(i=0;i<(BLOCK/2);i++)
- {
- ((SAMPLE_T *)samples)[1] = ((SAMPLE_T *)samples)[0];
- samples+=2*sizeof(SAMPLE_T);
- }
-
- return ret;
-}
diff --git a/src/mpg123/libmpg123/synths.h b/src/mpg123/libmpg123/synths.h
deleted file mode 100644
index 4113445..0000000
--- a/src/mpg123/libmpg123/synths.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef MPG123_SYNTH_H
-#define MPG123_SYNTH_H
-
-/* This is included inside frame.h, which is included in mpg123lib_intern.h,
- at the appropriate place.
- Explicit header inclusions here would cause circular dependencies. */
-
-/* The handle needs these types for selecting the decoding routine at runtime.
- Not just for optimization, mainly for XtoY, mono/stereo. */
-typedef int (*func_synth)(real *,int, mpg123_handle *,int );
-typedef int (*func_synth_mono)(real *, mpg123_handle *);
-typedef int (*func_synth_stereo)(real *, real *, mpg123_handle *);
-enum synth_channel { c_plain=0, c_stereo, c_mono2stereo, c_mono, c_limit };
-enum synth_resample
-{
- r_none=-1
- ,r_1to1=0
-# ifndef NO_DOWNSAMPLE
- ,r_2to1
- ,r_4to1
-# endif
-# ifndef NO_NTOM
- ,r_ntom
-# endif
- ,r_limit
-};
-enum synth_format
-{
- f_none=-1
-# ifndef NO_16BIT
- ,f_16
-# endif
-# ifndef NO_8BIT
- ,f_8
-# endif
-# ifndef NO_REAL
- ,f_real
-# endif
-# ifndef NO_32BIT
- ,f_32
-# endif
- ,f_limit
-};
-struct synth_s
-{
- func_synth plain[r_limit][f_limit];
- func_synth_stereo stereo[r_limit][f_limit];
- func_synth_mono mono2stereo[r_limit][f_limit];
- func_synth_mono mono[r_limit][f_limit];
-};
-
-#endif
diff --git a/src/mpg123/libmpg123/tabinit.c b/src/mpg123/libmpg123/tabinit.c
deleted file mode 100644
index 9ca7445..0000000
--- a/src/mpg123/libmpg123/tabinit.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- tabinit.c: initialize tables...
-
- copyright ?-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
- initially written by Michael Hipp
-*/
-
-#include "mpg123lib_intern.h"
-#include "debug.h"
-
-/* That altivec alignment part here should not hurt generic code, I hope */
-#ifdef OPT_ALTIVEC
-static ALIGNED(16) real cos64[16];
-static ALIGNED(16) real cos32[8];
-static ALIGNED(16) real cos16[4];
-static ALIGNED(16) real cos8[2];
-static ALIGNED(16) real cos4[1];
-#elif defined(REAL_IS_FIXED) && defined(PRECALC_TABLES)
-static real cos64[16] =
-{
- 8398725,8480395,8647771,8909416,9279544,9780026,10443886,11321405,
- 12491246,14081950,16316987,19619946,24900150,34523836,57170182,170959967
-};
-static real cos32[8] =
-{
- 8429197,8766072,9511743,10851869,13223040,17795219,28897867,85583072
-};
-static real cos16[4] =
-{
- 8552951,10088893,15099095,42998586
-};
-static real cos8[2] =
-{
- 9079764,21920489
-};
-static real cos4[1] =
-{
- 11863283
-};
-#else
-static real cos64[16],cos32[8],cos16[4],cos8[2],cos4[1];
-#endif
-
-real *pnts[] = { cos64,cos32,cos16,cos8,cos4 };
-
-
-static long intwinbase[] = {
- 0, -1, -1, -1, -1, -1, -1, -2, -2, -2,
- -2, -3, -3, -4, -4, -5, -5, -6, -7, -7,
- -8, -9, -10, -11, -13, -14, -16, -17, -19, -21,
- -24, -26, -29, -31, -35, -38, -41, -45, -49, -53,
- -58, -63, -68, -73, -79, -85, -91, -97, -104, -111,
- -117, -125, -132, -139, -147, -154, -161, -169, -176, -183,
- -190, -196, -202, -208, -213, -218, -222, -225, -227, -228,
- -228, -227, -224, -221, -215, -208, -200, -189, -177, -163,
- -146, -127, -106, -83, -57, -29, 2, 36, 72, 111,
- 153, 197, 244, 294, 347, 401, 459, 519, 581, 645,
- 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356,
- 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
- 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000,
- 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970,
- 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388,
- -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
- -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
- -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
- -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
- -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
- -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455,
- 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
- 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
- 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
- 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
- 73415, 73908, 74313, 74630, 74856, 74992, 75038 };
-
-void prepare_decode_tables()
-{
-#if !defined(REAL_IS_FIXED) || !defined(PRECALC_TABLES)
- int i,k,kr,divv;
- real *costab;
-
- for(i=0;i<5;i++)
- {
- kr=0x10>>i; divv=0x40>>i;
- costab = pnts[i];
- for(k=0;k<kr;k++)
- costab[k] = DOUBLE_TO_REAL(1.0 / (2.0 * cos(M_PI * ((double) k * 2.0 + 1.0) / (double) divv)));
- }
-#endif
-}
-
-#ifdef OPT_MMXORSSE
-#ifndef OPT_X86_64
-void make_decode_tables_mmx_asm(long scaleval, float* decwin_mmx, float *decwins);
-void make_decode_tables_mmx(mpg123_handle *fr)
-{
- debug("MMX decode tables");
- /* Take care: The scale should be like before, when we didn't have float output all around. */
- make_decode_tables_mmx_asm((long)((fr->lastscale < 0 ? fr->p.outscale : fr->lastscale)*SHORT_SCALE), fr->decwin_mmx, fr->decwins);
- debug("MMX decode tables done");
-}
-#else
-
-/* This mimics round() as defined in C99. We stay C89. */
-static int rounded(double f)
-{
- return (int)(f>0 ? floor(f+0.5) : ceil(f-0.5));
-}
-
-/* x86-64 doesn't use asm version */
-void make_decode_tables_mmx(mpg123_handle *fr)
-{
- int i,j,val;
- int idx = 0;
- short *ptr = (short *)fr->decwins;
- /* Scale is always based on 1.0 . */
- double scaleval = -0.5*(fr->lastscale < 0 ? fr->p.outscale : fr->lastscale);
- debug1("MMX decode tables with scaleval %g", scaleval);
- for(i=0,j=0;i<256;i++,j++,idx+=32)
- {
- if(idx < 512+16)
- fr->decwin_mmx[idx+16] = fr->decwin_mmx[idx] = DOUBLE_TO_REAL((double) intwinbase[j] * scaleval);
-
- if(i % 32 == 31)
- idx -= 1023;
- if(i % 64 == 63)
- scaleval = - scaleval;
- }
-
- for( /* i=256 */ ;i<512;i++,j--,idx+=32)
- {
- if(idx < 512+16)
- fr->decwin_mmx[idx+16] = fr->decwin_mmx[idx] = DOUBLE_TO_REAL((double) intwinbase[j] * scaleval);
-
- if(i % 32 == 31)
- idx -= 1023;
- if(i % 64 == 63)
- scaleval = - scaleval;
- }
-
- for(i=0; i<512; i++) {
- if(i&1) val = rounded(fr->decwin_mmx[i]*0.5);
- else val = rounded(fr->decwin_mmx[i]*-0.5);
- if(val > 32767) val = 32767;
- else if(val < -32768) val = -32768;
- ptr[i] = val;
- }
- for(i=512; i<512+32; i++) {
- if(i&1) val = rounded(fr->decwin_mmx[i]*0.5);
- else val = 0;
- if(val > 32767) val = 32767;
- else if(val < -32768) val = -32768;
- ptr[i] = val;
- }
- for(i=0; i<512; i++) {
- val = rounded(fr->decwin_mmx[511-i]*-0.5);
- if(val > 32767) val = 32767;
- else if(val < -32768) val = -32768;
- ptr[512+32+i] = val;
- }
- debug("decode tables done");
-}
-#endif
-#endif
-
-void make_decode_tables(mpg123_handle *fr)
-{
- int i,j;
- int idx = 0;
- /* Scale is always based on 1.0 . */
- double scaleval = -0.5*(fr->lastscale < 0 ? fr->p.outscale : fr->lastscale);
- debug1("decode tables with scaleval %g", scaleval);
-#ifdef REAL_IS_FIXED
- long scaleval_long = DOUBLE_TO_REAL_15(scaleval);
-#endif
- for(i=0,j=0;i<256;i++,j++,idx+=32)
- {
- if(idx < 512+16)
-#ifdef REAL_IS_FIXED
- fr->decwin[idx+16] = fr->decwin[idx] = REAL_SCALE_WINDOW(intwinbase[j] * scaleval_long);
-#else
- fr->decwin[idx+16] = fr->decwin[idx] = DOUBLE_TO_REAL((double) intwinbase[j] * scaleval);
-#endif
-
- if(i % 32 == 31)
- idx -= 1023;
- if(i % 64 == 63)
-#ifdef REAL_IS_FIXED
- scaleval_long = - scaleval_long;
-#else
- scaleval = - scaleval;
-#endif
- }
-
- for( /* i=256 */ ;i<512;i++,j--,idx+=32)
- {
- if(idx < 512+16)
-#ifdef REAL_IS_FIXED
- fr->decwin[idx+16] = fr->decwin[idx] = REAL_SCALE_WINDOW(intwinbase[j] * scaleval_long);
-#else
- fr->decwin[idx+16] = fr->decwin[idx] = DOUBLE_TO_REAL((double) intwinbase[j] * scaleval);
-#endif
-
- if(i % 32 == 31)
- idx -= 1023;
- if(i % 64 == 63)
-#ifdef REAL_IS_FIXED
- scaleval_long = - scaleval_long;
-#else
- scaleval = - scaleval;
-#endif
- }
-#if defined(OPT_X86_64) || defined(OPT_ALTIVEC) || defined(OPT_SSE) || defined(OPT_ARM)
- if(fr->cpu_opts.type == x86_64 || fr->cpu_opts.type == altivec || fr->cpu_opts.type == sse || fr->cpu_opts.type == arm)
- { /* for float SSE / AltiVec / ARM decoder */
- for(i=512; i<512+32; i++)
- {
- fr->decwin[i] = (i&1) ? fr->decwin[i] : 0;
- }
- for(i=0; i<512; i++)
- {
- fr->decwin[512+32+i] = -fr->decwin[511-i];
- }
- }
-#endif
- debug("decode tables done");
-}
-
-#ifndef NO_8BIT
-int make_conv16to8_table(mpg123_handle *fr)
-{
- int i;
- int mode = fr->af.encoding;
-
- /*
- * ????: 8.0 is right but on SB cards '2.0' is a better value ???
- */
- const double mul = 8.0;
-
- if(!fr->conv16to8_buf){
- fr->conv16to8_buf = (unsigned char *) malloc(8192);
- if(!fr->conv16to8_buf) {
- fr->err = MPG123_ERR_16TO8TABLE;
- if(NOQUIET) error("Can't allocate 16 to 8 converter table!");
- return -1;
- }
- fr->conv16to8 = fr->conv16to8_buf + 4096;
- }
-
- if(fr->af.encoding == MPG123_ENC_ULAW_8){
- double m=127.0 / log(256.0);
- int c1;
-
- for(i=-4096;i<4096;i++) {
-/* dunno whether this is a valid transformation rule ?!?!? */
- if(i < 0)
- c1 = 127 - (int) (log( 1.0 - 255.0 * (double) i*mul / 32768.0 ) * m);
- else
- c1 = 255 - (int) (log( 1.0 + 255.0 * (double) i*mul / 32768.0 ) * m);
- if((c1 < 0 || c1 > 255) && NOQUIET) error2("Converror %d %d",i,c1);
-
- if(c1 == 0)
- c1 = 2;
- fr->conv16to8[i] = (unsigned char) c1;
- }
- }
- else if(mode == MPG123_ENC_SIGNED_8) {
- for(i=-4096;i<4096;i++) {
- fr->conv16to8[i] = i>>5;
- }
- }
- else if(mode == MPG123_ENC_UNSIGNED_8) {
- for(i=-4096;i<4096;i++) {
- fr->conv16to8[i] = (i>>5)+128;
- }
- }
- else {
- for(i=-4096;i<4096;i++) {
- fr->conv16to8[i] = 0;
- }
- }
- return 0;
-}
-#endif
-
diff --git a/src/mpg123/libmpg123/true.h b/src/mpg123/libmpg123/true.h
deleted file mode 100644
index f40452c..0000000
--- a/src/mpg123/libmpg123/true.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- true: a trivial truth
-
- copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http:#mpg123.org
-*/
-
-#ifndef MPG123_H_TRUE
-#define MPG123_H_TRUE
-
-#define FALSE 0
-#define TRUE 1
-
-#endif
diff --git a/src/mpg123/mpg123.c b/src/mpg123/mpg123.c
index 9829ec3..68f6d37 100644
--- a/src/mpg123/mpg123.c
+++ b/src/mpg123/mpg123.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2010 William Pitcock <nenolod@dereferenced.org>.
- * Copyright (c) 2010 John Lindgren <john.lindgren@tds.net>.
+ * Copyright (c) 2010-2011 John Lindgren <john.lindgren@tds.net>.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -19,7 +19,12 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#undef DEBUG
+/* must come before <mpg123.h> to get _FILE_OFFSET_BITS */
+#include "config.h"
+
+#include <glib.h>
+#include <string.h>
+#include <mpg123.h>
#ifdef DEBUG_MPG123_IO
# define MPG123_IODBG(...) AUDDBG(__VA_ARGS__)
@@ -33,41 +38,12 @@
#include <audacious/plugin.h>
#include <audacious/audtag.h>
-#include "libmpg123/mpg123.h"
-
/* Define to read all frame headers when calculating file length */
/* #define FULL_SCAN */
-/* id3skip.c */
-gint id3_header_size (const guchar * data, gint size);
-
static GMutex *ctrl_mutex = NULL;
static GCond *ctrl_cond = NULL;
-/** utility functions **/
-static gboolean mpg123_prefill (mpg123_handle * decoder, VFSFile * handle,
- gint * _result)
-{
- guchar buffer[16384];
- gsize length;
- gint result;
-
- do
- {
- if ((length = vfs_fread (buffer, 1, 16384, handle)) <= 0)
- return FALSE;
-
- result = mpg123_decode (decoder, buffer, length, NULL, 0, NULL);
- }
- while (result == MPG123_NEED_MORE);
-
- if (result < 0)
- AUDDBG ("mpg123 error: %s\n", mpg123_plain_strerror (result));
-
- * _result = result;
- return TRUE;
-}
-
static ssize_t replace_read (void * file, void * buffer, size_t length)
{
return vfs_fread (buffer, 1, length, file);
@@ -79,8 +55,7 @@ static off_t replace_lseek (void * file, off_t to, int whence)
}
/** plugin glue **/
-static void
-aud_mpg123_init(void)
+static gboolean aud_mpg123_init (void)
{
AUDDBG("initializing mpg123 library\n");
mpg123_init();
@@ -88,6 +63,8 @@ aud_mpg123_init(void)
AUDDBG("initializing control mutex\n");
ctrl_mutex = g_mutex_new();
ctrl_cond = g_cond_new();
+
+ return TRUE;
}
static void
@@ -101,6 +78,17 @@ aud_mpg123_deinit(void)
g_cond_free(ctrl_cond);
}
+static void set_format (mpg123_handle * dec)
+{
+ static const gint rates[] = {8000, 11025, 12000, 16000, 22050, 24000, 32000,
+ 44100, 48000};
+
+ mpg123_format_none (dec);
+ for (gint i = 0; i < G_N_ELEMENTS (rates); i ++)
+ mpg123_format (dec, rates[i], MPG123_MONO | MPG123_STEREO,
+ MPG123_ENC_FLOAT_32);
+}
+
static void make_format_string (const struct mpg123_frameinfo * info, gchar *
buf, gint bsize)
{
@@ -110,10 +98,20 @@ static void make_format_string (const struct mpg123_frameinfo * info, gchar *
static gboolean mpg123_probe_for_fd (const gchar * fname, VFSFile * file)
{
+ if (! file)
+ return FALSE;
+
+ /* MPG123 likes to grab WMA streams, so blacklist anything that starts with
+ * mms://. If there are mms:// streams out there carrying MP3, they will
+ * just have to play in ffaudio. --jlindgren */
+ if (! strncmp (fname, "mms://", 6))
+ return FALSE;
+
mpg123_handle * dec = mpg123_new (NULL, NULL);
g_return_val_if_fail (dec, FALSE);
mpg123_param (dec, MPG123_ADD_FLAGS, MPG123_QUIET, 0);
mpg123_replace_reader_handle (dec, replace_read, replace_lseek, NULL);
+ set_format (dec);
gint res;
if ((res = mpg123_open_handle (dec, file)) < 0)
@@ -124,6 +122,11 @@ ERR:
return FALSE;
}
+#ifdef FULL_SCAN
+ if (mpg123_scan (dec) < 0)
+ goto ERR;
+#endif
+
RETRY:;
glong rate;
gint chan, enc;
@@ -134,7 +137,7 @@ RETRY:;
if ((res = mpg123_info (dec, & info)) < 0)
goto ERR;
- gint16 out[chan * (rate / 10)];
+ gfloat out[chan * (rate / 10)];
size_t done;
while ((res = mpg123_read (dec, (void *) out, sizeof out, & done)) < 0)
{
@@ -153,6 +156,9 @@ RETRY:;
static Tuple * mpg123_probe_for_tuple (const gchar * filename, VFSFile * file)
{
+ if (! file)
+ return NULL;
+
mpg123_handle * decoder = mpg123_new (NULL, NULL);
gint result;
glong rate;
@@ -165,20 +171,26 @@ static Tuple * mpg123_probe_for_tuple (const gchar * filename, VFSFile * file)
mpg123_replace_reader_handle (decoder, replace_read, replace_lseek, NULL);
if ((result = mpg123_open_handle (decoder, file)) < 0)
- goto ERROR;
+ goto ERR;
+
+#ifdef FULL_SCAN
+ if (mpg123_scan (decoder) < 0)
+ goto ERR;
+#endif
+
if ((result = mpg123_getformat (decoder, & rate, & channels, & encoding)) <
0)
- goto ERROR;
+ goto ERR;
if ((result = mpg123_info (decoder, & info)) < 0)
- goto ERROR;
+ goto ERR;
Tuple * tuple = tuple_new_from_filename (filename);
make_format_string (& info, scratch, sizeof scratch);
- tuple_associate_string (tuple, FIELD_CODEC, NULL, scratch);
+ tuple_set_str (tuple, FIELD_CODEC, NULL, scratch);
snprintf (scratch, sizeof scratch, "%s, %d Hz", (channels == 2)
? _("Stereo") : (channels > 2) ? _("Surround") : _("Mono"), (gint) rate);
- tuple_associate_string (tuple, FIELD_QUALITY, NULL, scratch);
- tuple_associate_int (tuple, FIELD_BITRATE, NULL, info.bitrate);
+ tuple_set_str (tuple, FIELD_QUALITY, NULL, scratch);
+ tuple_set_int (tuple, FIELD_BITRATE, NULL, info.bitrate);
if (! vfs_is_streaming (file))
{
@@ -187,23 +199,23 @@ static Tuple * mpg123_probe_for_tuple (const gchar * filename, VFSFile * file)
gint length = (samples > 0) ? samples * 1000 / rate : 0;
if (length > 0)
- tuple_associate_int (tuple, FIELD_LENGTH, NULL, length);
+ tuple_set_int (tuple, FIELD_LENGTH, NULL, length);
if (size > 0 && length > 0)
- tuple_associate_int (tuple, FIELD_BITRATE, NULL, 8 * size / length);
+ tuple_set_int (tuple, FIELD_BITRATE, NULL, 8 * size / length);
}
mpg123_delete (decoder);
if (! vfs_is_streaming (file))
{
- if (! vfs_fseek (file, 0, SEEK_SET))
- tag_tuple_read (tuple, file);
+ vfs_rewind (file);
+ tag_tuple_read (tuple, file);
}
return tuple;
-ERROR:
- fprintf (stderr, "mpg123 error: %s\n", mpg123_plain_strerror (result));
+ERR:
+ fprintf (stderr, "mpg123 probe error for %s: %s\n", filename, mpg123_plain_strerror (result));
mpg123_delete (decoder);
return NULL;
}
@@ -211,11 +223,11 @@ ERROR:
typedef struct {
VFSFile *fd;
mpg123_handle *decoder;
- mpg123_pars *params;
glong rate;
gint channels;
gint encoding;
gint64 seek;
+ gboolean stop;
gboolean stream;
Tuple *tu;
} MPG123PlaybackContext;
@@ -233,25 +245,54 @@ get_stream_metadata(VFSFile *file, const gchar *name)
static gboolean
update_stream_metadata(VFSFile *file, const gchar *name, Tuple *tuple, gint item)
{
- const gchar *old = tuple_get_string(tuple, item, NULL);
+ gchar *old = tuple_get_str(tuple, item, NULL);
gchar *new = get_stream_metadata(file, name);
gboolean changed = (new != NULL && (old == NULL || strcmp(old, new)));
if (changed)
- tuple_associate_string(tuple, item, NULL, new);
+ tuple_set_str(tuple, item, NULL, new);
g_free(new);
+ str_unref(old);
return changed;
}
+static Tuple * get_stream_tuple (InputPlayback * p, const gchar * filename,
+ VFSFile * file)
+{
+ Tuple * tuple = mpg123_probe_for_tuple (filename, file);
+ if (! tuple)
+ tuple = tuple_new_from_filename (filename);
+
+ update_stream_metadata (file, "track-name", tuple, FIELD_TITLE);
+ update_stream_metadata (file, "stream-name", tuple, FIELD_ARTIST);
+
+ tuple_ref (tuple);
+ p->set_tuple (p, tuple);
+
+ return tuple;
+}
+
+static void update_stream_tuple (InputPlayback * p, VFSFile * file,
+ Tuple * tuple)
+{
+ if (update_stream_metadata (file, "track-name", tuple, FIELD_TITLE) ||
+ update_stream_metadata (file, "stream-name", tuple, FIELD_ARTIST))
+ {
+ tuple_ref (tuple);
+ p->set_tuple (p, tuple);
+ }
+}
+
static gboolean mpg123_playback_worker (InputPlayback * data, const gchar *
filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
+ if (! file)
+ return FALSE;
+
+ gboolean error = FALSE;
MPG123PlaybackContext ctx;
gint ret;
- gint i;
- const glong *rates;
- gsize num_rates;
gint bitrate = 0, bitrate_sum = 0, bitrate_count = 0;
gint bitrate_updated = -1000; /* >= a second away from any position */
struct mpg123_frameinfo fi;
@@ -260,73 +301,64 @@ static gboolean mpg123_playback_worker (InputPlayback * data, const gchar *
memset(&ctx, 0, sizeof(MPG123PlaybackContext));
memset(&fi, 0, sizeof(struct mpg123_frameinfo));
- AUDDBG("playback worker started for %s\n", data->filename);
-
- ctx.seek = (start_time > 0) ? start_time : -1;
- data->data = &ctx;
-
- AUDDBG("decoder setup\n");
- mpg123_rates(&rates, &num_rates);
+ AUDDBG("playback worker started for %s\n", filename);
+ ctx.fd = file;
- ctx.params = mpg123_new_pars(&ret);
- mpg123_par(ctx.params, MPG123_ADD_FLAGS, MPG123_QUIET, 0);
- mpg123_par(ctx.params, MPG123_ADD_FLAGS, MPG123_GAPLESS, 0);
- mpg123_par(ctx.params, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0);
- mpg123_par(ctx.params, MPG123_RVA, MPG123_RVA_OFF, 0);
+ AUDDBG ("Checking for streaming ...\n");
+ ctx.stream = vfs_is_streaming (file);
+ ctx.tu = ctx.stream ? get_stream_tuple (data, filename, file) : NULL;
- ctx.decoder = mpg123_parnew(ctx.params, NULL, &ret);
- if (ctx.decoder == NULL)
- {
- AUDDBG("mpg123 error: %s", mpg123_plain_strerror(ret));
- mpg123_delete_pars(ctx.params);
- data->error = TRUE;
- return FALSE;
- }
-
- if ((ret = mpg123_open_feed(ctx.decoder)) != MPG123_OK)
+ ctx.seek = (start_time > 0) ? start_time : -1;
+ ctx.stop = FALSE;
+ data->set_data (data, & ctx);
+
+ ctx.decoder = mpg123_new (NULL, NULL);
+ g_return_val_if_fail (ctx.decoder, FALSE);
+ mpg123_param (ctx.decoder, MPG123_ADD_FLAGS, MPG123_QUIET, 0);
+ mpg123_param (ctx.decoder, MPG123_ADD_FLAGS, MPG123_GAPLESS, 0);
+ mpg123_param (ctx.decoder, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0);
+ mpg123_replace_reader_handle (ctx.decoder, replace_read, replace_lseek, NULL);
+ set_format (ctx.decoder);
+
+ if (mpg123_open_handle (ctx.decoder, file) < 0)
{
- AUDDBG("mpg123 error: %s", mpg123_plain_strerror(ret));
- mpg123_delete(ctx.decoder);
- mpg123_delete_pars(ctx.params);
- data->error = TRUE;
- return FALSE;
+OPEN_ERROR:
+ fprintf (stderr, "mpg123: Error opening %s: %s.\n", filename,
+ mpg123_strerror (ctx.decoder));
+ error = TRUE;
+ goto cleanup;
}
- AUDDBG("decoder format configuration\n");
- mpg123_format_none(ctx.decoder);
- for (i = 0; i < num_rates; i++)
- mpg123_format (ctx.decoder, rates[i], (MPG123_MONO | MPG123_STEREO),
- MPG123_ENC_SIGNED_16);
+ gfloat outbuf[8192];
+ size_t outbuf_size = 0;
- ctx.fd = file;
+#ifdef FULL_SCAN
+ if (mpg123_scan (ctx.decoder) < 0)
+ goto OPEN_ERROR;
+#endif
- AUDDBG("checking if stream @%p is seekable\n", ctx.fd);
- if (vfs_is_streaming(ctx.fd))
- {
- AUDDBG(" ... it's not.\n");
- ctx.stream = TRUE;
- ctx.tu = mpg123_probe_for_tuple (filename, file);
- }
- else
- AUDDBG(" ... it is.\n");
+GET_FORMAT:
+ if (mpg123_getformat (ctx.decoder, & ctx.rate, & ctx.channels,
+ & ctx.encoding) < 0)
+ goto OPEN_ERROR;
- AUDDBG("decoder format identification\n");
- if (! mpg123_prefill (ctx.decoder, ctx.fd, & ret) || ret !=
- MPG123_NEW_FORMAT)
+ while ((ret = mpg123_read (ctx.decoder, (void *) outbuf, sizeof outbuf,
+ & outbuf_size)) < 0)
{
- data->error = TRUE;
- goto cleanup;
+ if (ret == MPG123_NEW_FORMAT)
+ goto GET_FORMAT;
+ goto OPEN_ERROR;
}
- mpg123_getformat(ctx.decoder, &ctx.rate, &ctx.channels, &ctx.encoding);
+ if (mpg123_info (ctx.decoder, & fi) < 0)
+ goto OPEN_ERROR;
- AUDDBG("stream identified as MPEG; %ldHz %d channels, encoding %d\n",
- ctx.rate, ctx.channels, ctx.encoding);
+ bitrate = fi.bitrate * 1000;
+ data->set_params (data, bitrate, ctx.rate, ctx.channels);
- AUDDBG("opening audio\n");
- if (! data->output->open_audio (FMT_S16_NE, ctx.rate, ctx.channels))
+ if (! data->output->open_audio (FMT_FLOAT, ctx.rate, ctx.channels))
{
- data->error = TRUE;
+ error = TRUE;
goto cleanup;
}
@@ -338,16 +370,46 @@ static gboolean mpg123_playback_worker (InputPlayback * data, const gchar *
g_mutex_lock(ctrl_mutex);
AUDDBG("starting decode\n");
- data->playing = TRUE;
data->set_pb_ready(data);
g_mutex_unlock(ctrl_mutex);
- while (data->playing && (stop_time < 0 || data->output->written_time () <
- stop_time))
+ gint64 frames_played = 0;
+ gint64 frames_total = (stop_time - start_time) * ctx.rate / 1000;
+
+ while (1)
{
- gint16 outbuf[ctx.channels * (ctx.rate / 100)];
- gsize outbuf_size;
+ g_mutex_lock (ctrl_mutex);
+
+ if (ctx.stop)
+ {
+ g_mutex_unlock (ctrl_mutex);
+ break;
+ }
+
+ if (ctx.seek >= 0)
+ {
+ if (mpg123_seek (ctx.decoder, (gint64) ctx.seek * ctx.rate / 1000,
+ SEEK_SET) < 0)
+ {
+ fprintf (stderr, "mpg123 error in %s: %s\n", filename,
+ mpg123_strerror (ctx.decoder));
+ ctx.seek = -1;
+ g_cond_signal (ctrl_cond);
+ g_mutex_unlock (ctrl_mutex);
+ }
+ else
+ {
+ data->output->flush (ctx.seek);
+ frames_played = (ctx.seek - start_time) * ctx.rate / 1000;
+ outbuf_size = 0;
+ ctx.seek = -1;
+ }
+
+ g_cond_signal (ctrl_cond);
+ }
+
+ g_mutex_unlock (ctrl_mutex);
mpg123_info(ctx.decoder, &fi);
bitrate_sum += fi.bitrate;
@@ -356,7 +418,7 @@ static gboolean mpg123_playback_worker (InputPlayback * data, const gchar *
if (bitrate_sum / bitrate_count != bitrate && abs
(data->output->written_time () - bitrate_updated) >= 1000)
{
- data->set_params(data, NULL, 0, bitrate_sum / bitrate_count * 1000,
+ data->set_params (data, bitrate_sum / bitrate_count * 1000,
ctx.rate, ctx.channels);
bitrate = bitrate_sum / bitrate_count;
bitrate_sum = 0;
@@ -364,119 +426,58 @@ static gboolean mpg123_playback_worker (InputPlayback * data, const gchar *
bitrate_updated = data->output->written_time ();
}
- /* deal with shoutcast titles nonsense */
if (ctx.stream)
- {
- gboolean changed = FALSE;
-
- if (!ctx.tu)
- ctx.tu = tuple_new_from_filename(data->filename);
+ update_stream_tuple (data, file, ctx.tu);
- changed = changed || update_stream_metadata(ctx.fd, "track-name", ctx.tu, FIELD_TITLE);
- changed = changed || update_stream_metadata(ctx.fd, "stream-name", ctx.tu, FIELD_ALBUM);
-
- if (changed)
- {
- mowgli_object_ref(ctx.tu);
- data->set_tuple(data, ctx.tu);
- }
- }
-
- do
+ if (! outbuf_size && (ret = mpg123_read (ctx.decoder, (void *) outbuf,
+ sizeof outbuf, & outbuf_size)) < 0)
{
- guchar buf[16384];
- gsize len = 0;
-
- if (ret == MPG123_NEED_MORE)
- {
- MPG123_IODBG("mpg123 requested more data\n");
-
- len = vfs_fread(buf, 1, 16384, ctx.fd);
- if (len <= 0)
- {
- if (len == 0)
- {
- MPG123_IODBG("stream EOF (well, read failed)\n");
- mpg123_decode (ctx.decoder, NULL, 0, (guchar *) outbuf,
- sizeof outbuf, & outbuf_size);
-
- MPG123_IODBG("passing %ld bytes of audio\n", outbuf_size);
- data->output->write_audio (outbuf, outbuf_size);
- data->eof = TRUE;
- goto decode_cleanup;
- }
- else
- goto decode_cleanup;
- }
-
- MPG123_IODBG("got %ld bytes for mpg123\n", len);
- }
-
- ret = mpg123_decode (ctx.decoder, buf, len, (guchar *) outbuf,
- sizeof outbuf, & outbuf_size);
- data->output->write_audio (outbuf, outbuf_size);
- } while (ret == MPG123_NEED_MORE);
+ if (ret == MPG123_DONE || ret == MPG123_ERR_READER)
+ goto decode_cleanup;
- if (ret < 0)
- {
- fprintf (stderr, "mpg123 error: %s\n", mpg123_plain_strerror (ret));
+ fprintf (stderr, "mpg123 error in %s: %s\n", filename,
+ mpg123_strerror (ctx.decoder));
if (++ error_count >= 10)
{
- data->error = TRUE;
+ error = TRUE;
goto decode_cleanup;
}
}
else
- error_count = 0;
-
- g_mutex_lock(ctrl_mutex);
-
- if (data->playing == FALSE)
{
- g_mutex_unlock(ctrl_mutex);
- break;
- }
+ error_count = 0;
- if (ctx.seek != -1)
- {
- off_t byteoff, sampleoff;
+ gboolean stop = FALSE;
- sampleoff = mpg123_feedseek (ctx.decoder, (gint64) ctx.seek *
- ctx.rate / 1000, SEEK_SET, & byteoff);
- if (sampleoff < 0)
+ if (stop_time >= 0)
{
- fprintf (stderr, "mpg123 error: %s\n", mpg123_strerror (ctx.decoder));
- ctx.seek = -1;
- g_cond_signal (ctrl_cond);
- g_mutex_unlock(ctrl_mutex);
- continue;
- }
+ gint64 remain = sizeof outbuf[0] * ctx.channels * (frames_total - frames_played);
+ remain = MAX (0, remain);
- AUDDBG ("seeking to %d (byte %d)\n", (gint) ctx.seek, (gint) byteoff);
- if (vfs_fseek (ctx.fd, byteoff, SEEK_SET))
- {
- g_mutex_unlock (ctrl_mutex);
- goto decode_cleanup;
+ if (outbuf_size >= remain)
+ {
+ outbuf_size = remain;
+ stop = TRUE;
+ }
}
- data->output->flush (ctx.seek);
- ctx.seek = -1;
+ data->output->write_audio (outbuf, outbuf_size);
+ frames_played += outbuf_size / (sizeof outbuf[0] * ctx.channels);
+ outbuf_size = 0;
- g_cond_signal(ctrl_cond);
+ if (stop)
+ goto decode_cleanup;
}
-
- g_mutex_unlock(ctrl_mutex);
}
decode_cleanup:
- AUDDBG("eof reached\n");
- while (data->playing && data->output->buffer_playing())
+ while (data->output->buffer_playing ())
g_usleep(10000);
AUDDBG("decode complete\n");
g_mutex_lock (ctrl_mutex);
- data->playing = FALSE;
+ data->set_data (data, NULL);
g_cond_signal (ctrl_cond); /* wake up any waiting request */
g_mutex_unlock (ctrl_mutex);
@@ -484,43 +485,45 @@ decode_cleanup:
cleanup:
mpg123_delete(ctx.decoder);
- mpg123_delete_pars(ctx.params);
if (ctx.tu)
- tuple_free (ctx.tu);
- return ! data->error;
+ tuple_unref (ctx.tu);
+ return ! error;
}
static void mpg123_stop_playback_worker (InputPlayback * data)
{
g_mutex_lock (ctrl_mutex);
+ MPG123PlaybackContext * context = data->get_data (data);
- if (data->playing)
+ if (context != NULL)
{
+ context->stop = TRUE;
data->output->abort_write ();
- data->playing = FALSE;
g_cond_signal (ctrl_cond);
}
g_mutex_unlock (ctrl_mutex);
}
-static void mpg123_pause_playback_worker (InputPlayback * data, gshort pause)
+static void mpg123_pause_playback_worker (InputPlayback * data, gboolean pause)
{
g_mutex_lock (ctrl_mutex);
+ MPG123PlaybackContext * context = data->get_data (data);
- if (data->playing)
- data->output->pause (pause);
+ if (context != NULL)
+ data->output->pause (pause);
g_mutex_unlock (ctrl_mutex);
}
-static void mpg123_seek_time (InputPlayback * data, gulong time)
+static void mpg123_seek_time (InputPlayback * data, gint time)
{
g_mutex_lock (ctrl_mutex);
+ MPG123PlaybackContext * context = data->get_data (data);
- if (data->playing)
+ if (context != NULL)
{
- ((MPG123PlaybackContext *) data->data)->seek = time;
+ context->seek = time;
data->output->abort_write ();
g_cond_signal (ctrl_cond);
g_cond_wait (ctrl_cond, ctrl_mutex);
@@ -531,13 +534,16 @@ static void mpg123_seek_time (InputPlayback * data, gulong time)
static gboolean mpg123_write_tag (const Tuple * tuple, VFSFile * handle)
{
+ if (! handle)
+ return FALSE;
+
return tag_tuple_write (tuple, handle, TAG_TYPE_APE);
}
static gboolean mpg123_get_image (const gchar * filename, VFSFile * handle,
- void * * data, gint * length)
+ void * * data, gint64 * length)
{
- if (handle == NULL || vfs_is_streaming (handle))
+ if (! handle || vfs_is_streaming (handle))
return FALSE;
return tag_image_read (handle, data, length);
@@ -546,11 +552,12 @@ static gboolean mpg123_get_image (const gchar * filename, VFSFile * handle,
/** plugin description header **/
static const gchar *mpg123_fmts[] = { "mp3", "mp2", "mp1", "bmu", NULL };
-static InputPlugin mpg123_ip = {
+AUD_INPUT_PLUGIN
+(
.init = aud_mpg123_init,
.cleanup = aud_mpg123_deinit,
- .description = "MPG123",
- .vfs_extensions = mpg123_fmts,
+ .name = "MPG123",
+ .extensions = mpg123_fmts,
.is_our_file_from_vfs = mpg123_probe_for_fd,
.probe_for_tuple = mpg123_probe_for_tuple,
.play = mpg123_playback_worker,
@@ -559,8 +566,4 @@ static InputPlugin mpg123_ip = {
.pause = mpg123_pause_playback_worker,
.update_song_tuple = mpg123_write_tag,
.get_song_image = mpg123_get_image,
-};
-
-static InputPlugin *mpg123_iplist[] = { &mpg123_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN(mpg123, mpg123_iplist);
+)
diff --git a/src/mpris2/Makefile b/src/mpris2/Makefile
new file mode 100644
index 0000000..097e370
--- /dev/null
+++ b/src/mpris2/Makefile
@@ -0,0 +1,12 @@
+PLUGIN = mpris2${PLUGIN_SUFFIX}
+
+SRCS = object-core.c object-player.c plugin.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
+
+CPPFLAGS += -I../.. ${GLIB_CFLAGS} ${GIO_UNIX_CFLAGS}
+CFLAGS += ${PLUGIN_CFLAGS}
+LIBS += ${GLIB_LIBS} ${GIO_UNIX_LIBS}
diff --git a/src/mpris2/codegen b/src/mpris2/codegen
new file mode 100755
index 0000000..0eeb930
--- /dev/null
+++ b/src/mpris2/codegen
@@ -0,0 +1,3 @@
+#!/bin/sh
+gdbus-codegen --interface-prefix org.mpris. --c-namespace Mpris --generate-c-code object-core mpris2.xml
+gdbus-codegen --interface-prefix org.mpris. --c-namespace Mpris --generate-c-code object-player mpris2-player.xml
diff --git a/src/mpris2/mpris2-player.xml b/src/mpris2/mpris2-player.xml
new file mode 100644
index 0000000..7bfe64e
--- /dev/null
+++ b/src/mpris2/mpris2-player.xml
@@ -0,0 +1,18 @@
+<node>
+ <interface name="org.mpris.MediaPlayer2.Player">
+ <property name="CanControl" type="b" access="read"/>
+ <property name="CanGoNext" type="b" access="read"/>
+ <property name="CanGoPrevious" type="b" access="read"/>
+ <property name="CanPause" type="b" access="read"/>
+ <property name="CanPlay" type="b" access="read"/>
+ <property name="CanSeek" type="b" access="read"/>
+ <property name="Metadata" type="a{sv}" access="read"/>
+ <property name="PlaybackStatus" type="s" access="read"/>
+ <method name="Next"/>
+ <method name="Pause"/>
+ <method name="Play"/>
+ <method name="PlayPause"/>
+ <method name="Previous"/>
+ <method name="Stop"/>
+ </interface>
+</node>
diff --git a/src/mpris2/mpris2.xml b/src/mpris2/mpris2.xml
new file mode 100644
index 0000000..8950755
--- /dev/null
+++ b/src/mpris2/mpris2.xml
@@ -0,0 +1,11 @@
+<node>
+ <interface name="org.mpris.MediaPlayer2">
+ <property name="CanQuit" type="b" access="read"/>
+ <property name="CanRaise" type="b" access="read"/>
+ <property name="DesktopEntry" type="s" access="read"/>
+ <property name="HasTrackList" type="b" access="read"/>
+ <property name="Identity" type="s" access="read"/>
+ <method name="Quit"/>
+ <method name="Raise"/>
+ </interface>
+</node>
diff --git a/src/mpris2/object-core.c b/src/mpris2/object-core.c
new file mode 100644
index 0000000..875d26f
--- /dev/null
+++ b/src/mpris2/object-core.c
@@ -0,0 +1,1806 @@
+/*
+ * Generated by gdbus-codegen 2.30.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "object-core.h"
+
+#ifdef G_OS_UNIX
+# include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+ GDBusArgInfo parent_struct;
+ gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+ GDBusMethodInfo parent_struct;
+ const gchar *signal_name;
+ gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+ GDBusSignalInfo parent_struct;
+ const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+ GDBusPropertyInfo parent_struct;
+ const gchar *hyphen_name;
+ gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+ GDBusInterfaceInfo parent_struct;
+ const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ guint prop_id;
+ GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+ g_value_unset (&data->orig_value);
+ g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+ gboolean ret = FALSE;
+ guint n;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ if (g_strv_length (a) != g_strv_length (b))
+ goto out;
+ for (n = 0; a[n] != NULL; n++)
+ if (g_strcmp0 (a[n], b[n]) != 0)
+ goto out;
+ ret = TRUE;
+out:
+ return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+ gboolean ret = FALSE;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ ret = g_variant_equal (a, b);
+out:
+ return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+ gboolean ret = FALSE;
+ g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+ switch (G_VALUE_TYPE (a))
+ {
+ case G_TYPE_BOOLEAN:
+ ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+ break;
+ case G_TYPE_UCHAR:
+ ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+ break;
+ case G_TYPE_INT:
+ ret = (g_value_get_int (a) == g_value_get_int (b));
+ break;
+ case G_TYPE_UINT:
+ ret = (g_value_get_uint (a) == g_value_get_uint (b));
+ break;
+ case G_TYPE_INT64:
+ ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+ break;
+ case G_TYPE_UINT64:
+ ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+ break;
+ case G_TYPE_DOUBLE:
+ ret = (g_value_get_double (a) == g_value_get_double (b));
+ break;
+ case G_TYPE_STRING:
+ ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+ break;
+ case G_TYPE_VARIANT:
+ ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+ break;
+ default:
+ if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+ ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+ else
+ g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+ break;
+ }
+ return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.mpris.MediaPlayer2
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:MprisMediaPlayer2
+ * @title: MprisMediaPlayer2
+ * @short_description: Generated C code for the org.mpris.MediaPlayer2 D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.mpris.MediaPlayer2 ---- */
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_method_info_quit =
+{
+ {
+ -1,
+ "Quit",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-quit",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_method_info_raise =
+{
+ {
+ -1,
+ "Raise",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-raise",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _mpris_media_player2_method_info_pointers[] =
+{
+ &_mpris_media_player2_method_info_quit,
+ &_mpris_media_player2_method_info_raise,
+ NULL
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_property_info_can_quit =
+{
+ {
+ -1,
+ "CanQuit",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-quit",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_property_info_can_raise =
+{
+ {
+ -1,
+ "CanRaise",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-raise",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_property_info_desktop_entry =
+{
+ {
+ -1,
+ "DesktopEntry",
+ "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "desktop-entry",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_property_info_has_track_list =
+{
+ {
+ -1,
+ "HasTrackList",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "has-track-list",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_property_info_identity =
+{
+ {
+ -1,
+ "Identity",
+ "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "identity",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo * const _mpris_media_player2_property_info_pointers[] =
+{
+ &_mpris_media_player2_property_info_can_quit,
+ &_mpris_media_player2_property_info_can_raise,
+ &_mpris_media_player2_property_info_desktop_entry,
+ &_mpris_media_player2_property_info_has_track_list,
+ &_mpris_media_player2_property_info_identity,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _mpris_media_player2_interface_info =
+{
+ {
+ -1,
+ "org.mpris.MediaPlayer2",
+ (GDBusMethodInfo **) &_mpris_media_player2_method_info_pointers,
+ NULL,
+ (GDBusPropertyInfo **) &_mpris_media_player2_property_info_pointers,
+ NULL
+ },
+ "media-player2",
+};
+
+
+/**
+ * mpris_media_player2_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+mpris_media_player2_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_mpris_media_player2_interface_info;
+}
+
+/**
+ * mpris_media_player2_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #MprisMediaPlayer2 interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+mpris_media_player2_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ g_object_class_override_property (klass, property_id_begin++, "can-quit");
+ g_object_class_override_property (klass, property_id_begin++, "can-raise");
+ g_object_class_override_property (klass, property_id_begin++, "desktop-entry");
+ g_object_class_override_property (klass, property_id_begin++, "has-track-list");
+ g_object_class_override_property (klass, property_id_begin++, "identity");
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * MprisMediaPlayer2:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link>.
+ */
+
+/**
+ * MprisMediaPlayer2Iface:
+ * @parent_iface: The parent interface.
+ * @handle_quit: Handler for the #MprisMediaPlayer2::handle-quit signal.
+ * @handle_raise: Handler for the #MprisMediaPlayer2::handle-raise signal.
+ * @get_can_quit: Getter for the #MprisMediaPlayer2:can-quit property.
+ * @get_can_raise: Getter for the #MprisMediaPlayer2:can-raise property.
+ * @get_desktop_entry: Getter for the #MprisMediaPlayer2:desktop-entry property.
+ * @get_has_track_list: Getter for the #MprisMediaPlayer2:has-track-list property.
+ * @get_identity: Getter for the #MprisMediaPlayer2:identity property.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link>.
+ */
+
+static void
+mpris_media_player2_default_init (MprisMediaPlayer2Iface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * MprisMediaPlayer2::handle-quit:
+ * @object: A #MprisMediaPlayer2.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Quit">Quit()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_complete_quit() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-quit",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2Iface, handle_quit),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * MprisMediaPlayer2::handle-raise:
+ * @object: A #MprisMediaPlayer2.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Raise">Raise()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_complete_raise() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-raise",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2Iface, handle_raise),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /* GObject properties for D-Bus properties: */
+ /**
+ * MprisMediaPlayer2:can-quit:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2.CanQuit">"CanQuit"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-quit", "CanQuit", "CanQuit", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2:can-raise:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2.CanRaise">"CanRaise"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-raise", "CanRaise", "CanRaise", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2:desktop-entry:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2.DesktopEntry">"DesktopEntry"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("desktop-entry", "DesktopEntry", "DesktopEntry", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2:has-track-list:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2.HasTrackList">"HasTrackList"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("has-track-list", "HasTrackList", "HasTrackList", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2:identity:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2.Identity">"Identity"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("identity", "Identity", "Identity", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+typedef MprisMediaPlayer2Iface MprisMediaPlayer2Interface;
+G_DEFINE_INTERFACE (MprisMediaPlayer2, mpris_media_player2, G_TYPE_OBJECT);
+
+/**
+ * mpris_media_player2_get_can_quit: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.CanQuit">"CanQuit"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_get_can_quit (MprisMediaPlayer2 *object)
+{
+ return MPRIS_MEDIA_PLAYER2_GET_IFACE (object)->get_can_quit (object);
+}
+
+/**
+ * mpris_media_player2_set_can_quit: (skip)
+ * @object: A #MprisMediaPlayer2.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2.CanQuit">"CanQuit"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_set_can_quit (MprisMediaPlayer2 *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-quit", value, NULL);
+}
+
+/**
+ * mpris_media_player2_get_can_raise: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.CanRaise">"CanRaise"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_get_can_raise (MprisMediaPlayer2 *object)
+{
+ return MPRIS_MEDIA_PLAYER2_GET_IFACE (object)->get_can_raise (object);
+}
+
+/**
+ * mpris_media_player2_set_can_raise: (skip)
+ * @object: A #MprisMediaPlayer2.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2.CanRaise">"CanRaise"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_set_can_raise (MprisMediaPlayer2 *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-raise", value, NULL);
+}
+
+/**
+ * mpris_media_player2_get_desktop_entry: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.DesktopEntry">"DesktopEntry"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use mpris_media_player2_dup_desktop_entry() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
+ */
+const gchar *
+mpris_media_player2_get_desktop_entry (MprisMediaPlayer2 *object)
+{
+ return MPRIS_MEDIA_PLAYER2_GET_IFACE (object)->get_desktop_entry (object);
+}
+
+/**
+ * mpris_media_player2_dup_desktop_entry: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.DesktopEntry">"DesktopEntry"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free().
+ */
+gchar *
+mpris_media_player2_dup_desktop_entry (MprisMediaPlayer2 *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "desktop-entry", &value, NULL);
+ return value;
+}
+
+/**
+ * mpris_media_player2_set_desktop_entry: (skip)
+ * @object: A #MprisMediaPlayer2.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2.DesktopEntry">"DesktopEntry"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_set_desktop_entry (MprisMediaPlayer2 *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "desktop-entry", value, NULL);
+}
+
+/**
+ * mpris_media_player2_get_has_track_list: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.HasTrackList">"HasTrackList"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_get_has_track_list (MprisMediaPlayer2 *object)
+{
+ return MPRIS_MEDIA_PLAYER2_GET_IFACE (object)->get_has_track_list (object);
+}
+
+/**
+ * mpris_media_player2_set_has_track_list: (skip)
+ * @object: A #MprisMediaPlayer2.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2.HasTrackList">"HasTrackList"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_set_has_track_list (MprisMediaPlayer2 *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "has-track-list", value, NULL);
+}
+
+/**
+ * mpris_media_player2_get_identity: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.Identity">"Identity"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use mpris_media_player2_dup_identity() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
+ */
+const gchar *
+mpris_media_player2_get_identity (MprisMediaPlayer2 *object)
+{
+ return MPRIS_MEDIA_PLAYER2_GET_IFACE (object)->get_identity (object);
+}
+
+/**
+ * mpris_media_player2_dup_identity: (skip)
+ * @object: A #MprisMediaPlayer2.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-mpris-MediaPlayer2.Identity">"Identity"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free().
+ */
+gchar *
+mpris_media_player2_dup_identity (MprisMediaPlayer2 *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "identity", &value, NULL);
+ return value;
+}
+
+/**
+ * mpris_media_player2_set_identity: (skip)
+ * @object: A #MprisMediaPlayer2.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2.Identity">"Identity"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_set_identity (MprisMediaPlayer2 *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "identity", value, NULL);
+}
+
+/**
+ * mpris_media_player2_call_quit:
+ * @proxy: A #MprisMediaPlayer2Proxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Quit">Quit()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_call_quit_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_call_quit_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_call_quit (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Quit",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_call_quit_finish:
+ * @proxy: A #MprisMediaPlayer2Proxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_call_quit().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_call_quit().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_call_quit_finish (
+ MprisMediaPlayer2 *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_call_quit_sync:
+ * @proxy: A #MprisMediaPlayer2Proxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Quit">Quit()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_call_quit() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_call_quit_sync (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Quit",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_call_raise:
+ * @proxy: A #MprisMediaPlayer2Proxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Raise">Raise()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_call_raise_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_call_raise_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_call_raise (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Raise",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_call_raise_finish:
+ * @proxy: A #MprisMediaPlayer2Proxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_call_raise().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_call_raise().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_call_raise_finish (
+ MprisMediaPlayer2 *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_call_raise_sync:
+ * @proxy: A #MprisMediaPlayer2Proxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Raise">Raise()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_call_raise() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_call_raise_sync (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Raise",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_complete_quit:
+ * @object: A #MprisMediaPlayer2.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Quit">Quit()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_complete_quit (
+ MprisMediaPlayer2 *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * mpris_media_player2_complete_raise:
+ * @object: A #MprisMediaPlayer2.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2.Raise">Raise()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_complete_raise (
+ MprisMediaPlayer2 *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * MprisMediaPlayer2Proxy:
+ *
+ * The #MprisMediaPlayer2Proxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * MprisMediaPlayer2ProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #MprisMediaPlayer2Proxy.
+ */
+
+struct _MprisMediaPlayer2ProxyPrivate
+{
+ GData *qdata;
+};
+
+static void mpris_media_player2_proxy_iface_init (MprisMediaPlayer2Iface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MprisMediaPlayer2Proxy, mpris_media_player2_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (MPRIS_TYPE_MEDIA_PLAYER2, mpris_media_player2_proxy_iface_init));
+
+static void
+mpris_media_player2_proxy_finalize (GObject *object)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (mpris_media_player2_proxy_parent_class)->finalize (object);
+}
+
+static void
+mpris_media_player2_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 5);
+ info = _mpris_media_player2_property_info_pointers[prop_id - 1];
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
+ if (info->use_gvariant)
+ {
+ g_value_set_variant (value, variant);
+ }
+ else
+ {
+ if (variant != NULL)
+ g_dbus_gvariant_to_gvalue (variant, value);
+ }
+ if (variant != NULL)
+ g_variant_unref (variant);
+}
+
+static void
+mpris_media_player2_proxy_set_property_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ const _ExtendedGDBusPropertyInfo *info = user_data;
+ GError *error;
+ error = NULL;
+ if (!g_dbus_proxy_call_finish (proxy, res, &error))
+ {
+ g_warning ("Error setting property `%s' on interface org.mpris.MediaPlayer2: %s (%s, %d)",
+ info->parent_struct.name,
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+}
+
+static void
+mpris_media_player2_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 5);
+ info = _mpris_media_player2_property_info_pointers[prop_id - 1];
+ variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_dbus_proxy_call (G_DBUS_PROXY (object),
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_new ("(ssv)", "org.mpris.MediaPlayer2", info->parent_struct.name, variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, (GAsyncReadyCallback) mpris_media_player2_proxy_set_property_cb, (gpointer) info);
+ g_variant_unref (variant);
+}
+
+static void
+mpris_media_player2_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_mpris_media_player2_interface_info, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (&paramv[0], MPRIS_TYPE_MEDIA_PLAYER2);
+ g_value_set_object (&paramv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, MPRIS_TYPE_MEDIA_PLAYER2);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static void
+mpris_media_player2_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_interface_info, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_interface_info, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static gboolean
+mpris_media_player2_proxy_get_can_quit (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanQuit");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_proxy_get_can_raise (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanRaise");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *
+mpris_media_player2_proxy_get_desktop_entry (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "DesktopEntry");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_proxy_get_has_track_list (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "HasTrackList");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static const gchar *
+mpris_media_player2_proxy_get_identity (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Proxy *proxy = MPRIS_MEDIA_PLAYER2_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Identity");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static void
+mpris_media_player2_proxy_init (MprisMediaPlayer2Proxy *proxy)
+{
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, MPRIS_TYPE_MEDIA_PLAYER2_PROXY, MprisMediaPlayer2ProxyPrivate);
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), mpris_media_player2_interface_info ());
+}
+
+static void
+mpris_media_player2_proxy_class_init (MprisMediaPlayer2ProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ g_type_class_add_private (klass, sizeof (MprisMediaPlayer2ProxyPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = mpris_media_player2_proxy_finalize;
+ gobject_class->get_property = mpris_media_player2_proxy_get_property;
+ gobject_class->set_property = mpris_media_player2_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = mpris_media_player2_proxy_g_signal;
+ proxy_class->g_properties_changed = mpris_media_player2_proxy_g_properties_changed;
+
+
+ mpris_media_player2_override_properties (gobject_class, 1);
+}
+
+static void
+mpris_media_player2_proxy_iface_init (MprisMediaPlayer2Iface *iface)
+{
+ iface->get_can_quit = mpris_media_player2_proxy_get_can_quit;
+ iface->get_can_raise = mpris_media_player2_proxy_get_can_raise;
+ iface->get_desktop_entry = mpris_media_player2_proxy_get_desktop_entry;
+ iface->get_has_track_list = mpris_media_player2_proxy_get_has_track_list;
+ iface->get_identity = mpris_media_player2_proxy_get_identity;
+}
+
+/**
+ * mpris_media_player2_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_proxy_new_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+mpris_media_player2_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (MPRIS_TYPE_MEDIA_PLAYER2_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2", NULL);
+}
+
+/**
+ * mpris_media_player2_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with mpris_media_player2_proxy_new().
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2Proxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2 *
+mpris_media_player2_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2 (ret);
+ else
+ return NULL;
+}
+
+/**
+ * mpris_media_player2_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2Proxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2 *
+mpris_media_player2_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (MPRIS_TYPE_MEDIA_PLAYER2_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2", NULL);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2 (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * mpris_media_player2_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like mpris_media_player2_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+mpris_media_player2_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (MPRIS_TYPE_MEDIA_PLAYER2_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2", NULL);
+}
+
+/**
+ * mpris_media_player2_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with mpris_media_player2_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2Proxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2 *
+mpris_media_player2_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2 (ret);
+ else
+ return NULL;
+}
+
+/**
+ * mpris_media_player2_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like mpris_media_player2_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2Proxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2 *
+mpris_media_player2_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (MPRIS_TYPE_MEDIA_PLAYER2_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2", NULL);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2 (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * MprisMediaPlayer2Skeleton:
+ *
+ * The #MprisMediaPlayer2Skeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * MprisMediaPlayer2SkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #MprisMediaPlayer2Skeleton.
+ */
+
+struct _MprisMediaPlayer2SkeletonPrivate
+{
+ GValueArray *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex *lock;
+};
+
+static void
+_mpris_media_player2_skeleton_handle_method_call (
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = {0};
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (&paramv[n], MPRIS_TYPE_MEDIA_PLAYER2);
+ g_value_set_object (&paramv[n++], skeleton);
+ g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (&paramv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, MPRIS_TYPE_MEDIA_PLAYER2);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_mpris_media_player2_skeleton_handle_get_property (
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (user_data);
+ GValue value = {0};
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_interface_info, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_mpris_media_player2_skeleton_handle_set_property (
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (user_data);
+ GValue value = {0};
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_interface_info, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _mpris_media_player2_skeleton_vtable =
+{
+ _mpris_media_player2_skeleton_handle_method_call,
+ _mpris_media_player2_skeleton_handle_get_property,
+ _mpris_media_player2_skeleton_handle_set_property
+};
+
+static GDBusInterfaceInfo *
+mpris_media_player2_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton)
+{
+ return mpris_media_player2_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+mpris_media_player2_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton)
+{
+ return (GDBusInterfaceVTable *) &_mpris_media_player2_skeleton_vtable;
+}
+
+static GVariant *
+mpris_media_player2_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_mpris_media_player2_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _mpris_media_player2_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _mpris_media_player2_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _mpris_media_player2_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.mpris.MediaPlayer2", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static gboolean _mpris_media_player2_emit_changed (gpointer user_data);
+
+static void
+mpris_media_player2_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (_skeleton);
+ gboolean emit_changed = FALSE;
+
+ g_mutex_lock (skeleton->priv->lock);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ {
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ skeleton->priv->changed_properties_idle_source = NULL;
+ emit_changed = TRUE;
+ }
+ g_mutex_unlock (skeleton->priv->lock);
+
+ if (emit_changed)
+ _mpris_media_player2_emit_changed (skeleton);
+}
+
+static void mpris_media_player2_skeleton_iface_init (MprisMediaPlayer2Iface *iface);
+G_DEFINE_TYPE_WITH_CODE (MprisMediaPlayer2Skeleton, mpris_media_player2_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (MPRIS_TYPE_MEDIA_PLAYER2, mpris_media_player2_skeleton_iface_init));
+
+static void
+mpris_media_player2_skeleton_finalize (GObject *object)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ g_value_array_free (skeleton->priv->properties);
+ g_list_foreach (skeleton->priv->changed_properties, (GFunc) _changed_property_free, NULL);
+ g_list_free (skeleton->priv->changed_properties);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ if (skeleton->priv->context != NULL)
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_free (skeleton->priv->lock);
+ G_OBJECT_CLASS (mpris_media_player2_skeleton_parent_class)->finalize (object);
+}
+
+static void
+mpris_media_player2_skeleton_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 5);
+ g_mutex_lock (skeleton->priv->lock);
+ g_value_copy (&skeleton->priv->properties->values[prop_id - 1], value);
+ g_mutex_unlock (skeleton->priv->lock);
+}
+
+static gboolean
+_mpris_media_player2_emit_changed (gpointer user_data)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (user_data);
+ GList *l;
+ GVariantBuilder builder;
+ GVariantBuilder invalidated_builder;
+ guint num_changes;
+
+ g_mutex_lock (skeleton->priv->lock);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
+ for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
+ {
+ ChangedProperty *cp = l->data;
+ GVariant *variant;
+ const GValue *cur_value;
+
+ cur_value = &skeleton->priv->properties->values[cp->prop_id - 1];
+ if (!_g_value_equal (cur_value, &cp->orig_value))
+ {
+ variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));
+ g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
+ g_variant_unref (variant);
+ num_changes++;
+ }
+ }
+ if (num_changes > 0)
+ {
+ g_dbus_connection_emit_signal (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)),
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ g_variant_new ("(sa{sv}as)",
+ "org.mpris.MediaPlayer2",
+ &builder, &invalidated_builder),
+ NULL);
+ }
+ else
+ {
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
+ }
+ g_list_foreach (skeleton->priv->changed_properties, (GFunc) _changed_property_free, NULL);
+ g_list_free (skeleton->priv->changed_properties);
+ skeleton->priv->changed_properties = NULL;
+ skeleton->priv->changed_properties_idle_source = NULL;
+ g_mutex_unlock (skeleton->priv->lock);
+ return FALSE;
+}
+
+static void
+_mpris_media_player2_schedule_emit_changed (MprisMediaPlayer2Skeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
+{
+ ChangedProperty *cp;
+ GList *l;
+ cp = NULL;
+ for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
+ {
+ ChangedProperty *i_cp = l->data;
+ if (i_cp->info == info)
+ {
+ cp = i_cp;
+ break;
+ }
+ }
+ if (cp == NULL)
+ {
+ cp = g_new0 (ChangedProperty, 1);
+ cp->prop_id = prop_id;
+ cp->info = info;
+ skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
+ g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
+ g_value_copy (orig_value, &cp->orig_value);
+ }
+}
+
+static void
+mpris_media_player2_skeleton_notify (GObject *object,
+ GParamSpec *pspec)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ g_mutex_lock (skeleton->priv->lock);
+ if (skeleton->priv->changed_properties != NULL &&
+ skeleton->priv->changed_properties_idle_source == NULL)
+ {
+ skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
+ g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
+ g_source_set_callback (skeleton->priv->changed_properties_idle_source, _mpris_media_player2_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
+ g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
+ g_source_unref (skeleton->priv->changed_properties_idle_source);
+ }
+ g_mutex_unlock (skeleton->priv->lock);
+}
+
+static void
+mpris_media_player2_skeleton_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 5);
+ g_mutex_lock (skeleton->priv->lock);
+ g_object_freeze_notify (object);
+ if (!_g_value_equal (value, &skeleton->priv->properties->values[prop_id - 1]))
+ {
+ if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
+ _mpris_media_player2_schedule_emit_changed (skeleton, _mpris_media_player2_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties->values[prop_id - 1]);
+ g_value_copy (value, &skeleton->priv->properties->values[prop_id - 1]);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ g_mutex_unlock (skeleton->priv->lock);
+ g_object_thaw_notify (object);
+}
+
+static void
+mpris_media_player2_skeleton_init (MprisMediaPlayer2Skeleton *skeleton)
+{
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, MPRIS_TYPE_MEDIA_PLAYER2_SKELETON, MprisMediaPlayer2SkeletonPrivate);
+ skeleton->priv->lock = g_mutex_new ();
+ skeleton->priv->context = g_main_context_get_thread_default ();
+ if (skeleton->priv->context != NULL)
+ g_main_context_ref (skeleton->priv->context);
+ skeleton->priv->properties = g_value_array_new (5);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[0], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[1], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[2], G_TYPE_STRING);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[3], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[4], G_TYPE_STRING);
+}
+
+static gboolean
+mpris_media_player2_skeleton_get_can_quit (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[0]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_skeleton_get_can_raise (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[1]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+mpris_media_player2_skeleton_get_desktop_entry (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties->values[2]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_skeleton_get_has_track_list (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[3]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+mpris_media_player2_skeleton_get_identity (MprisMediaPlayer2 *object)
+{
+ MprisMediaPlayer2Skeleton *skeleton = MPRIS_MEDIA_PLAYER2_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties->values[4]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static void
+mpris_media_player2_skeleton_class_init (MprisMediaPlayer2SkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ g_type_class_add_private (klass, sizeof (MprisMediaPlayer2SkeletonPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = mpris_media_player2_skeleton_finalize;
+ gobject_class->get_property = mpris_media_player2_skeleton_get_property;
+ gobject_class->set_property = mpris_media_player2_skeleton_set_property;
+ gobject_class->notify = mpris_media_player2_skeleton_notify;
+
+
+ mpris_media_player2_override_properties (gobject_class, 1);
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = mpris_media_player2_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = mpris_media_player2_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = mpris_media_player2_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = mpris_media_player2_skeleton_dbus_interface_get_vtable;
+}
+
+static void
+mpris_media_player2_skeleton_iface_init (MprisMediaPlayer2Iface *iface)
+{
+ iface->get_can_quit = mpris_media_player2_skeleton_get_can_quit;
+ iface->get_can_raise = mpris_media_player2_skeleton_get_can_raise;
+ iface->get_desktop_entry = mpris_media_player2_skeleton_get_desktop_entry;
+ iface->get_has_track_list = mpris_media_player2_skeleton_get_has_track_list;
+ iface->get_identity = mpris_media_player2_skeleton_get_identity;
+}
+
+/**
+ * mpris_media_player2_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2.top_of_page">org.mpris.MediaPlayer2</link>.
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2Skeleton): The skeleton object.
+ */
+MprisMediaPlayer2 *
+mpris_media_player2_skeleton_new (void)
+{
+ return MPRIS_MEDIA_PLAYER2 (g_object_new (MPRIS_TYPE_MEDIA_PLAYER2_SKELETON, NULL));
+}
+
diff --git a/src/mpris2/object-core.h b/src/mpris2/object-core.h
new file mode 100644
index 0000000..4a52e3c
--- /dev/null
+++ b/src/mpris2/object-core.h
@@ -0,0 +1,221 @@
+/*
+ * Generated by gdbus-codegen 2.30.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __OBJECT_CORE_H__
+#define __OBJECT_CORE_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.mpris.MediaPlayer2 */
+
+#define MPRIS_TYPE_MEDIA_PLAYER2 (mpris_media_player2_get_type ())
+#define MPRIS_MEDIA_PLAYER2(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MPRIS_TYPE_MEDIA_PLAYER2, MprisMediaPlayer2))
+#define MPRIS_IS_MEDIA_PLAYER2(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MPRIS_TYPE_MEDIA_PLAYER2))
+#define MPRIS_MEDIA_PLAYER2_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), MPRIS_TYPE_MEDIA_PLAYER2, MprisMediaPlayer2Iface))
+
+struct _MprisMediaPlayer2;
+typedef struct _MprisMediaPlayer2 MprisMediaPlayer2;
+typedef struct _MprisMediaPlayer2Iface MprisMediaPlayer2Iface;
+
+struct _MprisMediaPlayer2Iface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_quit) (
+ MprisMediaPlayer2 *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_raise) (
+ MprisMediaPlayer2 *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*get_can_quit) (MprisMediaPlayer2 *object);
+
+ gboolean (*get_can_raise) (MprisMediaPlayer2 *object);
+
+ const gchar * (*get_desktop_entry) (MprisMediaPlayer2 *object);
+
+ gboolean (*get_has_track_list) (MprisMediaPlayer2 *object);
+
+ const gchar * (*get_identity) (MprisMediaPlayer2 *object);
+
+};
+
+GType mpris_media_player2_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *mpris_media_player2_interface_info (void);
+guint mpris_media_player2_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void mpris_media_player2_complete_quit (
+ MprisMediaPlayer2 *object,
+ GDBusMethodInvocation *invocation);
+
+void mpris_media_player2_complete_raise (
+ MprisMediaPlayer2 *object,
+ GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus method calls: */
+void mpris_media_player2_call_quit (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_call_quit_finish (
+ MprisMediaPlayer2 *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_call_quit_sync (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_call_raise (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_call_raise_finish (
+ MprisMediaPlayer2 *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_call_raise_sync (
+ MprisMediaPlayer2 *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* D-Bus property accessors: */
+gboolean mpris_media_player2_get_can_quit (MprisMediaPlayer2 *object);
+void mpris_media_player2_set_can_quit (MprisMediaPlayer2 *object, gboolean value);
+
+gboolean mpris_media_player2_get_can_raise (MprisMediaPlayer2 *object);
+void mpris_media_player2_set_can_raise (MprisMediaPlayer2 *object, gboolean value);
+
+const gchar *mpris_media_player2_get_desktop_entry (MprisMediaPlayer2 *object);
+gchar *mpris_media_player2_dup_desktop_entry (MprisMediaPlayer2 *object);
+void mpris_media_player2_set_desktop_entry (MprisMediaPlayer2 *object, const gchar *value);
+
+gboolean mpris_media_player2_get_has_track_list (MprisMediaPlayer2 *object);
+void mpris_media_player2_set_has_track_list (MprisMediaPlayer2 *object, gboolean value);
+
+const gchar *mpris_media_player2_get_identity (MprisMediaPlayer2 *object);
+gchar *mpris_media_player2_dup_identity (MprisMediaPlayer2 *object);
+void mpris_media_player2_set_identity (MprisMediaPlayer2 *object, const gchar *value);
+
+
+/* ---- */
+
+#define MPRIS_TYPE_MEDIA_PLAYER2_PROXY (mpris_media_player2_proxy_get_type ())
+#define MPRIS_MEDIA_PLAYER2_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MPRIS_TYPE_MEDIA_PLAYER2_PROXY, MprisMediaPlayer2Proxy))
+#define MPRIS_MEDIA_PLAYER2_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MPRIS_TYPE_MEDIA_PLAYER2_PROXY, MprisMediaPlayer2ProxyClass))
+#define MPRIS_MEDIA_PLAYER2_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MPRIS_TYPE_MEDIA_PLAYER2_PROXY, MprisMediaPlayer2ProxyClass))
+#define MPRIS_IS_MEDIA_PLAYER2_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MPRIS_TYPE_MEDIA_PLAYER2_PROXY))
+#define MPRIS_IS_MEDIA_PLAYER2_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MPRIS_TYPE_MEDIA_PLAYER2_PROXY))
+
+typedef struct _MprisMediaPlayer2Proxy MprisMediaPlayer2Proxy;
+typedef struct _MprisMediaPlayer2ProxyClass MprisMediaPlayer2ProxyClass;
+typedef struct _MprisMediaPlayer2ProxyPrivate MprisMediaPlayer2ProxyPrivate;
+
+struct _MprisMediaPlayer2Proxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ MprisMediaPlayer2ProxyPrivate *priv;
+};
+
+struct _MprisMediaPlayer2ProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType mpris_media_player2_proxy_get_type (void) G_GNUC_CONST;
+
+void mpris_media_player2_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+MprisMediaPlayer2 *mpris_media_player2_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+MprisMediaPlayer2 *mpris_media_player2_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+MprisMediaPlayer2 *mpris_media_player2_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+MprisMediaPlayer2 *mpris_media_player2_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define MPRIS_TYPE_MEDIA_PLAYER2_SKELETON (mpris_media_player2_skeleton_get_type ())
+#define MPRIS_MEDIA_PLAYER2_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MPRIS_TYPE_MEDIA_PLAYER2_SKELETON, MprisMediaPlayer2Skeleton))
+#define MPRIS_MEDIA_PLAYER2_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MPRIS_TYPE_MEDIA_PLAYER2_SKELETON, MprisMediaPlayer2SkeletonClass))
+#define MPRIS_MEDIA_PLAYER2_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MPRIS_TYPE_MEDIA_PLAYER2_SKELETON, MprisMediaPlayer2SkeletonClass))
+#define MPRIS_IS_MEDIA_PLAYER2_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MPRIS_TYPE_MEDIA_PLAYER2_SKELETON))
+#define MPRIS_IS_MEDIA_PLAYER2_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MPRIS_TYPE_MEDIA_PLAYER2_SKELETON))
+
+typedef struct _MprisMediaPlayer2Skeleton MprisMediaPlayer2Skeleton;
+typedef struct _MprisMediaPlayer2SkeletonClass MprisMediaPlayer2SkeletonClass;
+typedef struct _MprisMediaPlayer2SkeletonPrivate MprisMediaPlayer2SkeletonPrivate;
+
+struct _MprisMediaPlayer2Skeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ MprisMediaPlayer2SkeletonPrivate *priv;
+};
+
+struct _MprisMediaPlayer2SkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType mpris_media_player2_skeleton_get_type (void) G_GNUC_CONST;
+
+MprisMediaPlayer2 *mpris_media_player2_skeleton_new (void);
+
+
+G_END_DECLS
+
+#endif /* __OBJECT_CORE_H__ */
diff --git a/src/mpris2/object-player.c b/src/mpris2/object-player.c
new file mode 100644
index 0000000..b6d51f8
--- /dev/null
+++ b/src/mpris2/object-player.c
@@ -0,0 +1,2650 @@
+/*
+ * Generated by gdbus-codegen 2.30.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "object-player.h"
+
+#ifdef G_OS_UNIX
+# include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+ GDBusArgInfo parent_struct;
+ gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+ GDBusMethodInfo parent_struct;
+ const gchar *signal_name;
+ gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+ GDBusSignalInfo parent_struct;
+ const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+ GDBusPropertyInfo parent_struct;
+ const gchar *hyphen_name;
+ gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+ GDBusInterfaceInfo parent_struct;
+ const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ guint prop_id;
+ GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+ g_value_unset (&data->orig_value);
+ g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+ gboolean ret = FALSE;
+ guint n;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ if (g_strv_length (a) != g_strv_length (b))
+ goto out;
+ for (n = 0; a[n] != NULL; n++)
+ if (g_strcmp0 (a[n], b[n]) != 0)
+ goto out;
+ ret = TRUE;
+out:
+ return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+ gboolean ret = FALSE;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ ret = g_variant_equal (a, b);
+out:
+ return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+ gboolean ret = FALSE;
+ g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+ switch (G_VALUE_TYPE (a))
+ {
+ case G_TYPE_BOOLEAN:
+ ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+ break;
+ case G_TYPE_UCHAR:
+ ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+ break;
+ case G_TYPE_INT:
+ ret = (g_value_get_int (a) == g_value_get_int (b));
+ break;
+ case G_TYPE_UINT:
+ ret = (g_value_get_uint (a) == g_value_get_uint (b));
+ break;
+ case G_TYPE_INT64:
+ ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+ break;
+ case G_TYPE_UINT64:
+ ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+ break;
+ case G_TYPE_DOUBLE:
+ ret = (g_value_get_double (a) == g_value_get_double (b));
+ break;
+ case G_TYPE_STRING:
+ ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+ break;
+ case G_TYPE_VARIANT:
+ ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+ break;
+ default:
+ if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+ ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+ else
+ g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+ break;
+ }
+ return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.mpris.MediaPlayer2.Player
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:MprisMediaPlayer2Player
+ * @title: MprisMediaPlayer2Player
+ * @short_description: Generated C code for the org.mpris.MediaPlayer2.Player D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.mpris.MediaPlayer2.Player ---- */
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_player_method_info_next =
+{
+ {
+ -1,
+ "Next",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-next",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_player_method_info_pause =
+{
+ {
+ -1,
+ "Pause",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-pause",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_player_method_info_play =
+{
+ {
+ -1,
+ "Play",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-play",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_player_method_info_play_pause =
+{
+ {
+ -1,
+ "PlayPause",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-play-pause",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_player_method_info_previous =
+{
+ {
+ -1,
+ "Previous",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-previous",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _mpris_media_player2_player_method_info_stop =
+{
+ {
+ -1,
+ "Stop",
+ NULL,
+ NULL,
+ NULL
+ },
+ "handle-stop",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _mpris_media_player2_player_method_info_pointers[] =
+{
+ &_mpris_media_player2_player_method_info_next,
+ &_mpris_media_player2_player_method_info_pause,
+ &_mpris_media_player2_player_method_info_play,
+ &_mpris_media_player2_player_method_info_play_pause,
+ &_mpris_media_player2_player_method_info_previous,
+ &_mpris_media_player2_player_method_info_stop,
+ NULL
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_can_control =
+{
+ {
+ -1,
+ "CanControl",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-control",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_can_go_next =
+{
+ {
+ -1,
+ "CanGoNext",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-go-next",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_can_go_previous =
+{
+ {
+ -1,
+ "CanGoPrevious",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-go-previous",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_can_pause =
+{
+ {
+ -1,
+ "CanPause",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-pause",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_can_play =
+{
+ {
+ -1,
+ "CanPlay",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-play",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_can_seek =
+{
+ {
+ -1,
+ "CanSeek",
+ "b",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "can-seek",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_metadata =
+{
+ {
+ -1,
+ "Metadata",
+ "a{sv}",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "metadata",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo _mpris_media_player2_player_property_info_playback_status =
+{
+ {
+ -1,
+ "PlaybackStatus",
+ "s",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
+ NULL
+ },
+ "playback-status",
+ FALSE
+};
+
+static const _ExtendedGDBusPropertyInfo * const _mpris_media_player2_player_property_info_pointers[] =
+{
+ &_mpris_media_player2_player_property_info_can_control,
+ &_mpris_media_player2_player_property_info_can_go_next,
+ &_mpris_media_player2_player_property_info_can_go_previous,
+ &_mpris_media_player2_player_property_info_can_pause,
+ &_mpris_media_player2_player_property_info_can_play,
+ &_mpris_media_player2_player_property_info_can_seek,
+ &_mpris_media_player2_player_property_info_metadata,
+ &_mpris_media_player2_player_property_info_playback_status,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _mpris_media_player2_player_interface_info =
+{
+ {
+ -1,
+ "org.mpris.MediaPlayer2.Player",
+ (GDBusMethodInfo **) &_mpris_media_player2_player_method_info_pointers,
+ NULL,
+ (GDBusPropertyInfo **) &_mpris_media_player2_player_property_info_pointers,
+ NULL
+ },
+ "media-player2-player",
+};
+
+
+/**
+ * mpris_media_player2_player_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+mpris_media_player2_player_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_mpris_media_player2_player_interface_info;
+}
+
+/**
+ * mpris_media_player2_player_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #MprisMediaPlayer2Player interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+mpris_media_player2_player_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ g_object_class_override_property (klass, property_id_begin++, "can-control");
+ g_object_class_override_property (klass, property_id_begin++, "can-go-next");
+ g_object_class_override_property (klass, property_id_begin++, "can-go-previous");
+ g_object_class_override_property (klass, property_id_begin++, "can-pause");
+ g_object_class_override_property (klass, property_id_begin++, "can-play");
+ g_object_class_override_property (klass, property_id_begin++, "can-seek");
+ g_object_class_override_property (klass, property_id_begin++, "metadata");
+ g_object_class_override_property (klass, property_id_begin++, "playback-status");
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * MprisMediaPlayer2Player:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link>.
+ */
+
+/**
+ * MprisMediaPlayer2PlayerIface:
+ * @parent_iface: The parent interface.
+ * @handle_next: Handler for the #MprisMediaPlayer2Player::handle-next signal.
+ * @handle_pause: Handler for the #MprisMediaPlayer2Player::handle-pause signal.
+ * @handle_play: Handler for the #MprisMediaPlayer2Player::handle-play signal.
+ * @handle_play_pause: Handler for the #MprisMediaPlayer2Player::handle-play-pause signal.
+ * @handle_previous: Handler for the #MprisMediaPlayer2Player::handle-previous signal.
+ * @handle_stop: Handler for the #MprisMediaPlayer2Player::handle-stop signal.
+ * @get_can_control: Getter for the #MprisMediaPlayer2Player:can-control property.
+ * @get_can_go_next: Getter for the #MprisMediaPlayer2Player:can-go-next property.
+ * @get_can_go_previous: Getter for the #MprisMediaPlayer2Player:can-go-previous property.
+ * @get_can_pause: Getter for the #MprisMediaPlayer2Player:can-pause property.
+ * @get_can_play: Getter for the #MprisMediaPlayer2Player:can-play property.
+ * @get_can_seek: Getter for the #MprisMediaPlayer2Player:can-seek property.
+ * @get_metadata: Getter for the #MprisMediaPlayer2Player:metadata property.
+ * @get_playback_status: Getter for the #MprisMediaPlayer2Player:playback-status property.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link>.
+ */
+
+static void
+mpris_media_player2_player_default_init (MprisMediaPlayer2PlayerIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * MprisMediaPlayer2Player::handle-next:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Next">Next()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_player_complete_next() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-next",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2PlayerIface, handle_next),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * MprisMediaPlayer2Player::handle-pause:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Pause">Pause()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_player_complete_pause() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-pause",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2PlayerIface, handle_pause),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * MprisMediaPlayer2Player::handle-play:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Play">Play()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_player_complete_play() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-play",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2PlayerIface, handle_play),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * MprisMediaPlayer2Player::handle-play-pause:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.PlayPause">PlayPause()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_player_complete_play_pause() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-play-pause",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2PlayerIface, handle_play_pause),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * MprisMediaPlayer2Player::handle-previous:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Previous">Previous()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_player_complete_previous() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-previous",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2PlayerIface, handle_previous),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * MprisMediaPlayer2Player::handle-stop:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Stop">Stop()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call mpris_media_player2_player_complete_stop() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-stop",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MprisMediaPlayer2PlayerIface, handle_stop),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /* GObject properties for D-Bus properties: */
+ /**
+ * MprisMediaPlayer2Player:can-control:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanControl">"CanControl"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-control", "CanControl", "CanControl", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:can-go-next:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanGoNext">"CanGoNext"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-go-next", "CanGoNext", "CanGoNext", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:can-go-previous:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanGoPrevious">"CanGoPrevious"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-go-previous", "CanGoPrevious", "CanGoPrevious", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:can-pause:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanPause">"CanPause"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-pause", "CanPause", "CanPause", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:can-play:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanPlay">"CanPlay"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-play", "CanPlay", "CanPlay", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:can-seek:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanSeek">"CanSeek"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("can-seek", "CanSeek", "CanSeek", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:metadata:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.Metadata">"Metadata"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_variant ("metadata", "Metadata", "Metadata", G_VARIANT_TYPE ("a{sv}"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * MprisMediaPlayer2Player:playback-status:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.PlaybackStatus">"PlaybackStatus"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("playback-status", "PlaybackStatus", "PlaybackStatus", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+typedef MprisMediaPlayer2PlayerIface MprisMediaPlayer2PlayerInterface;
+G_DEFINE_INTERFACE (MprisMediaPlayer2Player, mpris_media_player2_player, G_TYPE_OBJECT);
+
+/**
+ * mpris_media_player2_player_get_can_control: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanControl">"CanControl"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_player_get_can_control (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_can_control (object);
+}
+
+/**
+ * mpris_media_player2_player_set_can_control: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanControl">"CanControl"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_can_control (MprisMediaPlayer2Player *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-control", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_can_go_next: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanGoNext">"CanGoNext"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_player_get_can_go_next (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_can_go_next (object);
+}
+
+/**
+ * mpris_media_player2_player_set_can_go_next: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanGoNext">"CanGoNext"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_can_go_next (MprisMediaPlayer2Player *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-go-next", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_can_go_previous: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanGoPrevious">"CanGoPrevious"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_player_get_can_go_previous (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_can_go_previous (object);
+}
+
+/**
+ * mpris_media_player2_player_set_can_go_previous: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanGoPrevious">"CanGoPrevious"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_can_go_previous (MprisMediaPlayer2Player *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-go-previous", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_can_pause: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanPause">"CanPause"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_player_get_can_pause (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_can_pause (object);
+}
+
+/**
+ * mpris_media_player2_player_set_can_pause: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanPause">"CanPause"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_can_pause (MprisMediaPlayer2Player *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-pause", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_can_play: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanPlay">"CanPlay"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_player_get_can_play (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_can_play (object);
+}
+
+/**
+ * mpris_media_player2_player_set_can_play: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanPlay">"CanPlay"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_can_play (MprisMediaPlayer2Player *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-play", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_can_seek: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanSeek">"CanSeek"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gboolean
+mpris_media_player2_player_get_can_seek (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_can_seek (object);
+}
+
+/**
+ * mpris_media_player2_player_set_can_seek: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.CanSeek">"CanSeek"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_can_seek (MprisMediaPlayer2Player *object, gboolean value)
+{
+ g_object_set (G_OBJECT (object), "can-seek", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_metadata: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.Metadata">"Metadata"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use mpris_media_player2_player_dup_metadata() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
+ */
+GVariant *
+mpris_media_player2_player_get_metadata (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_metadata (object);
+}
+
+/**
+ * mpris_media_player2_player_dup_metadata: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.Metadata">"Metadata"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref().
+ */
+GVariant *
+mpris_media_player2_player_dup_metadata (MprisMediaPlayer2Player *object)
+{
+ GVariant *value;
+ g_object_get (G_OBJECT (object), "metadata", &value, NULL);
+ return value;
+}
+
+/**
+ * mpris_media_player2_player_set_metadata: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.Metadata">"Metadata"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_metadata (MprisMediaPlayer2Player *object, GVariant *value)
+{
+ g_object_set (G_OBJECT (object), "metadata", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_get_playback_status: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.PlaybackStatus">"PlaybackStatus"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use mpris_media_player2_player_dup_playback_status() if on another thread.</warning>
+ *
+ * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
+ */
+const gchar *
+mpris_media_player2_player_get_playback_status (MprisMediaPlayer2Player *object)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE (object)->get_playback_status (object);
+}
+
+/**
+ * mpris_media_player2_player_dup_playback_status: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ *
+ * Gets a copy of the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.PlaybackStatus">"PlaybackStatus"</link> D-Bus property.
+ *
+ * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free().
+ */
+gchar *
+mpris_media_player2_player_dup_playback_status (MprisMediaPlayer2Player *object)
+{
+ gchar *value;
+ g_object_get (G_OBJECT (object), "playback-status", &value, NULL);
+ return value;
+}
+
+/**
+ * mpris_media_player2_player_set_playback_status: (skip)
+ * @object: A #MprisMediaPlayer2Player.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-mpris-MediaPlayer2-Player.PlaybackStatus">"PlaybackStatus"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
+ */
+void
+mpris_media_player2_player_set_playback_status (MprisMediaPlayer2Player *object, const gchar *value)
+{
+ g_object_set (G_OBJECT (object), "playback-status", value, NULL);
+}
+
+/**
+ * mpris_media_player2_player_call_next:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Next">Next()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_call_next_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_call_next_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_player_call_next (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Next",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_player_call_next_finish:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_call_next().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_player_call_next().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_next_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_next_sync:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Next">Next()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_call_next() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_next_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Next",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_pause:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Pause">Pause()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_call_pause_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_call_pause_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_player_call_pause (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Pause",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_player_call_pause_finish:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_call_pause().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_player_call_pause().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_pause_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_pause_sync:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Pause">Pause()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_call_pause() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_pause_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Pause",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_play:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Play">Play()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_call_play_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_call_play_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_player_call_play (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Play",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_player_call_play_finish:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_call_play().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_player_call_play().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_play_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_play_sync:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Play">Play()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_call_play() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_play_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Play",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_play_pause:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.PlayPause">PlayPause()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_call_play_pause_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_call_play_pause_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_player_call_play_pause (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "PlayPause",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_player_call_play_pause_finish:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_call_play_pause().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_player_call_play_pause().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_play_pause_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_play_pause_sync:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.PlayPause">PlayPause()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_call_play_pause() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_play_pause_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "PlayPause",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_previous:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Previous">Previous()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_call_previous_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_call_previous_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_player_call_previous (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Previous",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_player_call_previous_finish:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_call_previous().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_player_call_previous().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_previous_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_previous_sync:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Previous">Previous()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_call_previous() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_previous_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Previous",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_stop:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Stop">Stop()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_call_stop_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_call_stop_sync() for the synchronous, blocking version of this method.
+ */
+void
+mpris_media_player2_player_call_stop (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Stop",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * mpris_media_player2_player_call_stop_finish:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_call_stop().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with mpris_media_player2_player_call_stop().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_stop_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_call_stop_sync:
+ * @proxy: A #MprisMediaPlayer2PlayerProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Stop">Stop()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_call_stop() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+mpris_media_player2_player_call_stop_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Stop",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * mpris_media_player2_player_complete_next:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Next">Next()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_player_complete_next (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * mpris_media_player2_player_complete_pause:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Pause">Pause()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_player_complete_pause (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * mpris_media_player2_player_complete_play:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Play">Play()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_player_complete_play (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * mpris_media_player2_player_complete_play_pause:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.PlayPause">PlayPause()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_player_complete_play_pause (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * mpris_media_player2_player_complete_previous:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Previous">Previous()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_player_complete_previous (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * mpris_media_player2_player_complete_stop:
+ * @object: A #MprisMediaPlayer2Player.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-mpris-MediaPlayer2-Player.Stop">Stop()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+mpris_media_player2_player_complete_stop (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * MprisMediaPlayer2PlayerProxy:
+ *
+ * The #MprisMediaPlayer2PlayerProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * MprisMediaPlayer2PlayerProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #MprisMediaPlayer2PlayerProxy.
+ */
+
+struct _MprisMediaPlayer2PlayerProxyPrivate
+{
+ GData *qdata;
+};
+
+static void mpris_media_player2_player_proxy_iface_init (MprisMediaPlayer2PlayerIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MprisMediaPlayer2PlayerProxy, mpris_media_player2_player_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER, mpris_media_player2_player_proxy_iface_init));
+
+static void
+mpris_media_player2_player_proxy_finalize (GObject *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (mpris_media_player2_player_proxy_parent_class)->finalize (object);
+}
+
+static void
+mpris_media_player2_player_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 8);
+ info = _mpris_media_player2_player_property_info_pointers[prop_id - 1];
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
+ if (info->use_gvariant)
+ {
+ g_value_set_variant (value, variant);
+ }
+ else
+ {
+ if (variant != NULL)
+ g_dbus_gvariant_to_gvalue (variant, value);
+ }
+ if (variant != NULL)
+ g_variant_unref (variant);
+}
+
+static void
+mpris_media_player2_player_proxy_set_property_cb (GDBusProxy *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ const _ExtendedGDBusPropertyInfo *info = user_data;
+ GError *error;
+ error = NULL;
+ if (!g_dbus_proxy_call_finish (proxy, res, &error))
+ {
+ g_warning ("Error setting property `%s' on interface org.mpris.MediaPlayer2.Player: %s (%s, %d)",
+ info->parent_struct.name,
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+}
+
+static void
+mpris_media_player2_player_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ GVariant *variant;
+ g_assert (prop_id != 0 && prop_id - 1 < 8);
+ info = _mpris_media_player2_player_property_info_pointers[prop_id - 1];
+ variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_dbus_proxy_call (G_DBUS_PROXY (object),
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_new ("(ssv)", "org.mpris.MediaPlayer2.Player", info->parent_struct.name, variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL, (GAsyncReadyCallback) mpris_media_player2_player_proxy_set_property_cb, (gpointer) info);
+ g_variant_unref (variant);
+}
+
+static void
+mpris_media_player2_player_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_mpris_media_player2_player_interface_info, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (&paramv[0], MPRIS_TYPE_MEDIA_PLAYER2_PLAYER);
+ g_value_set_object (&paramv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, MPRIS_TYPE_MEDIA_PLAYER2_PLAYER);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static void
+mpris_media_player2_player_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_player_interface_info, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_player_interface_info, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static gboolean
+mpris_media_player2_player_proxy_get_can_control (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanControl");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_proxy_get_can_go_next (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanGoNext");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_proxy_get_can_go_previous (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanGoPrevious");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_proxy_get_can_pause (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanPause");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_proxy_get_can_play (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanPlay");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_proxy_get_can_seek (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ gboolean value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "CanSeek");
+ if (variant != NULL)
+ {
+ value = g_variant_get_boolean (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static GVariant *
+mpris_media_player2_player_proxy_get_metadata (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ GVariant *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "Metadata");
+ value = variant;
+ if (variant != NULL)
+ g_variant_unref (variant);
+ return value;
+}
+
+static const gchar *
+mpris_media_player2_player_proxy_get_playback_status (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerProxy *proxy = MPRIS_MEDIA_PLAYER2_PLAYER_PROXY (object);
+ GVariant *variant;
+ const gchar *value = NULL;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "PlaybackStatus");
+ if (variant != NULL)
+ {
+ value = g_variant_get_string (variant, NULL);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
+static void
+mpris_media_player2_player_proxy_init (MprisMediaPlayer2PlayerProxy *proxy)
+{
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, MprisMediaPlayer2PlayerProxyPrivate);
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), mpris_media_player2_player_interface_info ());
+}
+
+static void
+mpris_media_player2_player_proxy_class_init (MprisMediaPlayer2PlayerProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ g_type_class_add_private (klass, sizeof (MprisMediaPlayer2PlayerProxyPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = mpris_media_player2_player_proxy_finalize;
+ gobject_class->get_property = mpris_media_player2_player_proxy_get_property;
+ gobject_class->set_property = mpris_media_player2_player_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = mpris_media_player2_player_proxy_g_signal;
+ proxy_class->g_properties_changed = mpris_media_player2_player_proxy_g_properties_changed;
+
+
+ mpris_media_player2_player_override_properties (gobject_class, 1);
+}
+
+static void
+mpris_media_player2_player_proxy_iface_init (MprisMediaPlayer2PlayerIface *iface)
+{
+ iface->get_can_control = mpris_media_player2_player_proxy_get_can_control;
+ iface->get_can_go_next = mpris_media_player2_player_proxy_get_can_go_next;
+ iface->get_can_go_previous = mpris_media_player2_player_proxy_get_can_go_previous;
+ iface->get_can_pause = mpris_media_player2_player_proxy_get_can_pause;
+ iface->get_can_play = mpris_media_player2_player_proxy_get_can_play;
+ iface->get_can_seek = mpris_media_player2_player_proxy_get_can_seek;
+ iface->get_metadata = mpris_media_player2_player_proxy_get_metadata;
+ iface->get_playback_status = mpris_media_player2_player_proxy_get_playback_status;
+}
+
+/**
+ * mpris_media_player2_player_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_proxy_new_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+mpris_media_player2_player_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2.Player", NULL);
+}
+
+/**
+ * mpris_media_player2_player_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with mpris_media_player2_player_proxy_new().
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2PlayerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2Player *
+mpris_media_player2_player_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2_PLAYER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * mpris_media_player2_player_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2PlayerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2Player *
+mpris_media_player2_player_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2.Player", NULL);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2_PLAYER (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * mpris_media_player2_player_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like mpris_media_player2_player_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call mpris_media_player2_player_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See mpris_media_player2_player_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+mpris_media_player2_player_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2.Player", NULL);
+}
+
+/**
+ * mpris_media_player2_player_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to mpris_media_player2_player_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with mpris_media_player2_player_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2PlayerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2Player *
+mpris_media_player2_player_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2_PLAYER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * mpris_media_player2_player_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like mpris_media_player2_player_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See mpris_media_player2_player_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2PlayerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+MprisMediaPlayer2Player *
+mpris_media_player2_player_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.mpris.MediaPlayer2.Player", NULL);
+ if (ret != NULL)
+ return MPRIS_MEDIA_PLAYER2_PLAYER (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * MprisMediaPlayer2PlayerSkeleton:
+ *
+ * The #MprisMediaPlayer2PlayerSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * MprisMediaPlayer2PlayerSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #MprisMediaPlayer2PlayerSkeleton.
+ */
+
+struct _MprisMediaPlayer2PlayerSkeletonPrivate
+{
+ GValueArray *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex *lock;
+};
+
+static void
+_mpris_media_player2_player_skeleton_handle_method_call (
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = {0};
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (&paramv[n], MPRIS_TYPE_MEDIA_PLAYER2_PLAYER);
+ g_value_set_object (&paramv[n++], skeleton);
+ g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (&paramv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, MPRIS_TYPE_MEDIA_PLAYER2_PLAYER);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_mpris_media_player2_player_skeleton_handle_get_property (
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (user_data);
+ GValue value = {0};
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_player_interface_info, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_mpris_media_player2_player_skeleton_handle_set_property (
+ GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (user_data);
+ GValue value = {0};
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_mpris_media_player2_player_interface_info, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _mpris_media_player2_player_skeleton_vtable =
+{
+ _mpris_media_player2_player_skeleton_handle_method_call,
+ _mpris_media_player2_player_skeleton_handle_get_property,
+ _mpris_media_player2_player_skeleton_handle_set_property
+};
+
+static GDBusInterfaceInfo *
+mpris_media_player2_player_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton)
+{
+ return mpris_media_player2_player_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+mpris_media_player2_player_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton)
+{
+ return (GDBusInterfaceVTable *) &_mpris_media_player2_player_skeleton_vtable;
+}
+
+static GVariant *
+mpris_media_player2_player_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_mpris_media_player2_player_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _mpris_media_player2_player_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _mpris_media_player2_player_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _mpris_media_player2_player_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.mpris.MediaPlayer2.Player", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static gboolean _mpris_media_player2_player_emit_changed (gpointer user_data);
+
+static void
+mpris_media_player2_player_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (_skeleton);
+ gboolean emit_changed = FALSE;
+
+ g_mutex_lock (skeleton->priv->lock);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ {
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ skeleton->priv->changed_properties_idle_source = NULL;
+ emit_changed = TRUE;
+ }
+ g_mutex_unlock (skeleton->priv->lock);
+
+ if (emit_changed)
+ _mpris_media_player2_player_emit_changed (skeleton);
+}
+
+static void mpris_media_player2_player_skeleton_iface_init (MprisMediaPlayer2PlayerIface *iface);
+G_DEFINE_TYPE_WITH_CODE (MprisMediaPlayer2PlayerSkeleton, mpris_media_player2_player_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER, mpris_media_player2_player_skeleton_iface_init));
+
+static void
+mpris_media_player2_player_skeleton_finalize (GObject *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ g_value_array_free (skeleton->priv->properties);
+ g_list_foreach (skeleton->priv->changed_properties, (GFunc) _changed_property_free, NULL);
+ g_list_free (skeleton->priv->changed_properties);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ if (skeleton->priv->context != NULL)
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_free (skeleton->priv->lock);
+ G_OBJECT_CLASS (mpris_media_player2_player_skeleton_parent_class)->finalize (object);
+}
+
+static void
+mpris_media_player2_player_skeleton_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 8);
+ g_mutex_lock (skeleton->priv->lock);
+ g_value_copy (&skeleton->priv->properties->values[prop_id - 1], value);
+ g_mutex_unlock (skeleton->priv->lock);
+}
+
+static gboolean
+_mpris_media_player2_player_emit_changed (gpointer user_data)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (user_data);
+ GList *l;
+ GVariantBuilder builder;
+ GVariantBuilder invalidated_builder;
+ guint num_changes;
+
+ g_mutex_lock (skeleton->priv->lock);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
+ for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
+ {
+ ChangedProperty *cp = l->data;
+ GVariant *variant;
+ const GValue *cur_value;
+
+ cur_value = &skeleton->priv->properties->values[cp->prop_id - 1];
+ if (!_g_value_equal (cur_value, &cp->orig_value))
+ {
+ variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));
+ g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
+ g_variant_unref (variant);
+ num_changes++;
+ }
+ }
+ if (num_changes > 0)
+ {
+ g_dbus_connection_emit_signal (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)),
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ g_variant_new ("(sa{sv}as)",
+ "org.mpris.MediaPlayer2.Player",
+ &builder, &invalidated_builder),
+ NULL);
+ }
+ else
+ {
+ g_variant_builder_clear (&builder);
+ g_variant_builder_clear (&invalidated_builder);
+ }
+ g_list_foreach (skeleton->priv->changed_properties, (GFunc) _changed_property_free, NULL);
+ g_list_free (skeleton->priv->changed_properties);
+ skeleton->priv->changed_properties = NULL;
+ skeleton->priv->changed_properties_idle_source = NULL;
+ g_mutex_unlock (skeleton->priv->lock);
+ return FALSE;
+}
+
+static void
+_mpris_media_player2_player_schedule_emit_changed (MprisMediaPlayer2PlayerSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
+{
+ ChangedProperty *cp;
+ GList *l;
+ cp = NULL;
+ for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
+ {
+ ChangedProperty *i_cp = l->data;
+ if (i_cp->info == info)
+ {
+ cp = i_cp;
+ break;
+ }
+ }
+ if (cp == NULL)
+ {
+ cp = g_new0 (ChangedProperty, 1);
+ cp->prop_id = prop_id;
+ cp->info = info;
+ skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
+ g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
+ g_value_copy (orig_value, &cp->orig_value);
+ }
+}
+
+static void
+mpris_media_player2_player_skeleton_notify (GObject *object,
+ GParamSpec *pspec)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ g_mutex_lock (skeleton->priv->lock);
+ if (skeleton->priv->changed_properties != NULL &&
+ skeleton->priv->changed_properties_idle_source == NULL)
+ {
+ skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
+ g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
+ g_source_set_callback (skeleton->priv->changed_properties_idle_source, _mpris_media_player2_player_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
+ g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
+ g_source_unref (skeleton->priv->changed_properties_idle_source);
+ }
+ g_mutex_unlock (skeleton->priv->lock);
+}
+
+static void
+mpris_media_player2_player_skeleton_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ g_assert (prop_id != 0 && prop_id - 1 < 8);
+ g_mutex_lock (skeleton->priv->lock);
+ g_object_freeze_notify (object);
+ if (!_g_value_equal (value, &skeleton->priv->properties->values[prop_id - 1]))
+ {
+ if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
+ _mpris_media_player2_player_schedule_emit_changed (skeleton, _mpris_media_player2_player_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties->values[prop_id - 1]);
+ g_value_copy (value, &skeleton->priv->properties->values[prop_id - 1]);
+ g_object_notify_by_pspec (object, pspec);
+ }
+ g_mutex_unlock (skeleton->priv->lock);
+ g_object_thaw_notify (object);
+}
+
+static void
+mpris_media_player2_player_skeleton_init (MprisMediaPlayer2PlayerSkeleton *skeleton)
+{
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON, MprisMediaPlayer2PlayerSkeletonPrivate);
+ skeleton->priv->lock = g_mutex_new ();
+ skeleton->priv->context = g_main_context_get_thread_default ();
+ if (skeleton->priv->context != NULL)
+ g_main_context_ref (skeleton->priv->context);
+ skeleton->priv->properties = g_value_array_new (8);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[0], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[1], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[2], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[3], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[4], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[5], G_TYPE_BOOLEAN);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[6], G_TYPE_VARIANT);
+ g_value_array_append (skeleton->priv->properties, NULL);
+ g_value_init (&skeleton->priv->properties->values[7], G_TYPE_STRING);
+}
+
+static gboolean
+mpris_media_player2_player_skeleton_get_can_control (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[0]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_skeleton_get_can_go_next (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[1]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_skeleton_get_can_go_previous (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[2]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_skeleton_get_can_pause (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[3]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_skeleton_get_can_play (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[4]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static gboolean
+mpris_media_player2_player_skeleton_get_can_seek (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ gboolean value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_boolean (&(skeleton->priv->properties->values[5]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static GVariant *
+mpris_media_player2_player_skeleton_get_metadata (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ GVariant *value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_variant (&(skeleton->priv->properties->values[6]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static const gchar *
+mpris_media_player2_player_skeleton_get_playback_status (MprisMediaPlayer2Player *object)
+{
+ MprisMediaPlayer2PlayerSkeleton *skeleton = MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON (object);
+ const gchar *value;
+ g_mutex_lock (skeleton->priv->lock);
+ value = g_value_get_string (&(skeleton->priv->properties->values[7]));
+ g_mutex_unlock (skeleton->priv->lock);
+ return value;
+}
+
+static void
+mpris_media_player2_player_skeleton_class_init (MprisMediaPlayer2PlayerSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ g_type_class_add_private (klass, sizeof (MprisMediaPlayer2PlayerSkeletonPrivate));
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = mpris_media_player2_player_skeleton_finalize;
+ gobject_class->get_property = mpris_media_player2_player_skeleton_get_property;
+ gobject_class->set_property = mpris_media_player2_player_skeleton_set_property;
+ gobject_class->notify = mpris_media_player2_player_skeleton_notify;
+
+
+ mpris_media_player2_player_override_properties (gobject_class, 1);
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = mpris_media_player2_player_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = mpris_media_player2_player_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = mpris_media_player2_player_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = mpris_media_player2_player_skeleton_dbus_interface_get_vtable;
+}
+
+static void
+mpris_media_player2_player_skeleton_iface_init (MprisMediaPlayer2PlayerIface *iface)
+{
+ iface->get_can_control = mpris_media_player2_player_skeleton_get_can_control;
+ iface->get_can_go_next = mpris_media_player2_player_skeleton_get_can_go_next;
+ iface->get_can_go_previous = mpris_media_player2_player_skeleton_get_can_go_previous;
+ iface->get_can_pause = mpris_media_player2_player_skeleton_get_can_pause;
+ iface->get_can_play = mpris_media_player2_player_skeleton_get_can_play;
+ iface->get_can_seek = mpris_media_player2_player_skeleton_get_can_seek;
+ iface->get_metadata = mpris_media_player2_player_skeleton_get_metadata;
+ iface->get_playback_status = mpris_media_player2_player_skeleton_get_playback_status;
+}
+
+/**
+ * mpris_media_player2_player_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-mpris-MediaPlayer2-Player.top_of_page">org.mpris.MediaPlayer2.Player</link>.
+ *
+ * Returns: (transfer full) (type MprisMediaPlayer2PlayerSkeleton): The skeleton object.
+ */
+MprisMediaPlayer2Player *
+mpris_media_player2_player_skeleton_new (void)
+{
+ return MPRIS_MEDIA_PLAYER2_PLAYER (g_object_new (MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON, NULL));
+}
+
diff --git a/src/mpris2/object-player.h b/src/mpris2/object-player.h
new file mode 100644
index 0000000..fa87f11
--- /dev/null
+++ b/src/mpris2/object-player.h
@@ -0,0 +1,332 @@
+/*
+ * Generated by gdbus-codegen 2.30.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __OBJECT_PLAYER_H__
+#define __OBJECT_PLAYER_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.mpris.MediaPlayer2.Player */
+
+#define MPRIS_TYPE_MEDIA_PLAYER2_PLAYER (mpris_media_player2_player_get_type ())
+#define MPRIS_MEDIA_PLAYER2_PLAYER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER, MprisMediaPlayer2Player))
+#define MPRIS_IS_MEDIA_PLAYER2_PLAYER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER))
+#define MPRIS_MEDIA_PLAYER2_PLAYER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER, MprisMediaPlayer2PlayerIface))
+
+struct _MprisMediaPlayer2Player;
+typedef struct _MprisMediaPlayer2Player MprisMediaPlayer2Player;
+typedef struct _MprisMediaPlayer2PlayerIface MprisMediaPlayer2PlayerIface;
+
+struct _MprisMediaPlayer2PlayerIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_next) (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_pause) (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_play) (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_play_pause) (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_previous) (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_stop) (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*get_can_control) (MprisMediaPlayer2Player *object);
+
+ gboolean (*get_can_go_next) (MprisMediaPlayer2Player *object);
+
+ gboolean (*get_can_go_previous) (MprisMediaPlayer2Player *object);
+
+ gboolean (*get_can_pause) (MprisMediaPlayer2Player *object);
+
+ gboolean (*get_can_play) (MprisMediaPlayer2Player *object);
+
+ gboolean (*get_can_seek) (MprisMediaPlayer2Player *object);
+
+ GVariant * (*get_metadata) (MprisMediaPlayer2Player *object);
+
+ const gchar * (*get_playback_status) (MprisMediaPlayer2Player *object);
+
+};
+
+GType mpris_media_player2_player_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *mpris_media_player2_player_interface_info (void);
+guint mpris_media_player2_player_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void mpris_media_player2_player_complete_next (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+void mpris_media_player2_player_complete_pause (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+void mpris_media_player2_player_complete_play (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+void mpris_media_player2_player_complete_play_pause (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+void mpris_media_player2_player_complete_previous (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+void mpris_media_player2_player_complete_stop (
+ MprisMediaPlayer2Player *object,
+ GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus method calls: */
+void mpris_media_player2_player_call_next (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_player_call_next_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_player_call_next_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_player_call_pause (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_player_call_pause_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_player_call_pause_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_player_call_play (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_player_call_play_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_player_call_play_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_player_call_play_pause (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_player_call_play_pause_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_player_call_play_pause_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_player_call_previous (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_player_call_previous_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_player_call_previous_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_player_call_stop (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean mpris_media_player2_player_call_stop_finish (
+ MprisMediaPlayer2Player *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean mpris_media_player2_player_call_stop_sync (
+ MprisMediaPlayer2Player *proxy,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* D-Bus property accessors: */
+gboolean mpris_media_player2_player_get_can_control (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_can_control (MprisMediaPlayer2Player *object, gboolean value);
+
+gboolean mpris_media_player2_player_get_can_go_next (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_can_go_next (MprisMediaPlayer2Player *object, gboolean value);
+
+gboolean mpris_media_player2_player_get_can_go_previous (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_can_go_previous (MprisMediaPlayer2Player *object, gboolean value);
+
+gboolean mpris_media_player2_player_get_can_pause (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_can_pause (MprisMediaPlayer2Player *object, gboolean value);
+
+gboolean mpris_media_player2_player_get_can_play (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_can_play (MprisMediaPlayer2Player *object, gboolean value);
+
+gboolean mpris_media_player2_player_get_can_seek (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_can_seek (MprisMediaPlayer2Player *object, gboolean value);
+
+GVariant *mpris_media_player2_player_get_metadata (MprisMediaPlayer2Player *object);
+GVariant *mpris_media_player2_player_dup_metadata (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_metadata (MprisMediaPlayer2Player *object, GVariant *value);
+
+const gchar *mpris_media_player2_player_get_playback_status (MprisMediaPlayer2Player *object);
+gchar *mpris_media_player2_player_dup_playback_status (MprisMediaPlayer2Player *object);
+void mpris_media_player2_player_set_playback_status (MprisMediaPlayer2Player *object, const gchar *value);
+
+
+/* ---- */
+
+#define MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY (mpris_media_player2_player_proxy_get_type ())
+#define MPRIS_MEDIA_PLAYER2_PLAYER_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, MprisMediaPlayer2PlayerProxy))
+#define MPRIS_MEDIA_PLAYER2_PLAYER_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, MprisMediaPlayer2PlayerProxyClass))
+#define MPRIS_MEDIA_PLAYER2_PLAYER_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY, MprisMediaPlayer2PlayerProxyClass))
+#define MPRIS_IS_MEDIA_PLAYER2_PLAYER_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY))
+#define MPRIS_IS_MEDIA_PLAYER2_PLAYER_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_PROXY))
+
+typedef struct _MprisMediaPlayer2PlayerProxy MprisMediaPlayer2PlayerProxy;
+typedef struct _MprisMediaPlayer2PlayerProxyClass MprisMediaPlayer2PlayerProxyClass;
+typedef struct _MprisMediaPlayer2PlayerProxyPrivate MprisMediaPlayer2PlayerProxyPrivate;
+
+struct _MprisMediaPlayer2PlayerProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ MprisMediaPlayer2PlayerProxyPrivate *priv;
+};
+
+struct _MprisMediaPlayer2PlayerProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType mpris_media_player2_player_proxy_get_type (void) G_GNUC_CONST;
+
+void mpris_media_player2_player_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+MprisMediaPlayer2Player *mpris_media_player2_player_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+MprisMediaPlayer2Player *mpris_media_player2_player_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void mpris_media_player2_player_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+MprisMediaPlayer2Player *mpris_media_player2_player_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+MprisMediaPlayer2Player *mpris_media_player2_player_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON (mpris_media_player2_player_skeleton_get_type ())
+#define MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON, MprisMediaPlayer2PlayerSkeleton))
+#define MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON, MprisMediaPlayer2PlayerSkeletonClass))
+#define MPRIS_MEDIA_PLAYER2_PLAYER_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON, MprisMediaPlayer2PlayerSkeletonClass))
+#define MPRIS_IS_MEDIA_PLAYER2_PLAYER_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON))
+#define MPRIS_IS_MEDIA_PLAYER2_PLAYER_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MPRIS_TYPE_MEDIA_PLAYER2_PLAYER_SKELETON))
+
+typedef struct _MprisMediaPlayer2PlayerSkeleton MprisMediaPlayer2PlayerSkeleton;
+typedef struct _MprisMediaPlayer2PlayerSkeletonClass MprisMediaPlayer2PlayerSkeletonClass;
+typedef struct _MprisMediaPlayer2PlayerSkeletonPrivate MprisMediaPlayer2PlayerSkeletonPrivate;
+
+struct _MprisMediaPlayer2PlayerSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ MprisMediaPlayer2PlayerSkeletonPrivate *priv;
+};
+
+struct _MprisMediaPlayer2PlayerSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType mpris_media_player2_player_skeleton_get_type (void) G_GNUC_CONST;
+
+MprisMediaPlayer2Player *mpris_media_player2_player_skeleton_new (void);
+
+
+G_END_DECLS
+
+#endif /* __OBJECT_PLAYER_H__ */
diff --git a/src/mpris2/plugin.c b/src/mpris2/plugin.c
new file mode 100644
index 0000000..81cde2c
--- /dev/null
+++ b/src/mpris2/plugin.c
@@ -0,0 +1,315 @@
+/*
+ * MPRIS 2 Server for Audacious
+ * Copyright 2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <stdio.h>
+
+#include <audacious/drct.h>
+#include <audacious/misc.h>
+#include <audacious/playlist.h>
+#include <audacious/plugin.h>
+#include <libaudcore/hook.h>
+
+#include "object-core.h"
+#include "object-player.h"
+
+static GDBusConnection * bus;
+static GObject * object_core, * object_player;
+static char * last_title, * last_artist, * last_album, * last_file;
+static const char * image_file;
+static GVariantType * metadata_type;
+
+static bool_t quit_cb (MprisMediaPlayer2 * object, GDBusMethodInvocation * call,
+ void * unused)
+{
+ aud_drct_quit ();
+ mpris_media_player2_complete_quit (object, call);
+ return TRUE;
+}
+
+static bool_t raise_cb (MprisMediaPlayer2 * object, GDBusMethodInvocation *
+ call, void * unused)
+{
+ aud_interface_show (TRUE);
+ mpris_media_player2_complete_raise (object, call);
+ return TRUE;
+}
+
+static void update_metadata (void * data, GObject * object)
+{
+ char * title = NULL, * artist = NULL, * album = NULL, * file = NULL;
+
+ if (aud_drct_get_playing ())
+ {
+ int playlist = aud_playlist_get_playing ();
+ int entry = aud_playlist_get_position (playlist);
+ aud_playlist_entry_describe (playlist, entry, & title, & artist, & album, TRUE);
+ file = aud_playlist_entry_get_filename (playlist, entry);
+ }
+
+ if (title == last_title && artist == last_artist && album == last_album &&
+ file == last_file)
+ {
+ str_unref (title);
+ str_unref (artist);
+ str_unref (album);
+ str_unref (file);
+ return;
+ }
+
+ if (file != last_file)
+ {
+ if (image_file)
+ aud_art_unref (last_file);
+ image_file = file ? aud_art_get_file (file) : NULL;
+ }
+
+ str_unref (last_title);
+ str_unref (last_artist);
+ str_unref (last_album);
+ str_unref (last_file);
+ last_title = title;
+ last_artist = artist;
+ last_album = album;
+ last_file = file;
+
+ GVariant * elems[4];
+ int nelems = 0;
+
+ if (title)
+ {
+ GVariant * key = g_variant_new_string ("xesam:title");
+ GVariant * str = g_variant_new_string (title);
+ GVariant * var = g_variant_new_variant (str);
+ elems[nelems ++] = g_variant_new_dict_entry (key, var);
+ }
+
+ if (artist)
+ {
+ GVariant * key = g_variant_new_string ("xesam:artist");
+ GVariant * str = g_variant_new_string (artist);
+ GVariant * array = g_variant_new_array (G_VARIANT_TYPE_STRING, & str, 1);
+ GVariant * var = g_variant_new_variant (array);
+ elems[nelems ++] = g_variant_new_dict_entry (key, var);
+ }
+
+ if (album)
+ {
+ GVariant * key = g_variant_new_string ("xesam:album");
+ GVariant * str = g_variant_new_string (album);
+ GVariant * var = g_variant_new_variant (str);
+ elems[nelems ++] = g_variant_new_dict_entry (key, var);
+ }
+
+ if (image_file)
+ {
+ GVariant * key = g_variant_new_string ("mpris:artUrl");
+ GVariant * str = g_variant_new_string (image_file);
+ GVariant * var = g_variant_new_variant (str);
+ elems[nelems ++] = g_variant_new_dict_entry (key, var);
+ }
+
+ if (! metadata_type)
+ metadata_type = g_variant_type_new ("{sv}");
+
+ GVariant * array = g_variant_new_array (metadata_type, elems, nelems);
+ g_object_set (object, "metadata", array, NULL);
+}
+
+static void update_playback_status (void * data, GObject * object)
+{
+ const char * status;
+
+ if (aud_drct_get_playing ())
+ status = aud_drct_get_paused () ? "Paused" : "Playing";
+ else
+ status = "Stopped";
+
+ g_object_set (object, "playback-status", status, NULL);
+}
+
+static bool_t next_cb (MprisMediaPlayer2Player * object, GDBusMethodInvocation *
+ call, void * unused)
+{
+ aud_drct_pl_next ();
+ mpris_media_player2_player_complete_next (object, call);
+ return TRUE;
+}
+
+static bool_t pause_cb (MprisMediaPlayer2Player * object,
+ GDBusMethodInvocation * call, void * unused)
+{
+ if (aud_drct_get_playing () && ! aud_drct_get_paused ())
+ aud_drct_pause ();
+
+ mpris_media_player2_player_complete_pause (object, call);
+ return TRUE;
+}
+
+static bool_t play_cb (MprisMediaPlayer2Player * object, GDBusMethodInvocation *
+ call, void * unused)
+{
+ if (! aud_drct_get_playing () || aud_drct_get_paused ())
+ aud_drct_play ();
+
+ mpris_media_player2_player_complete_play (object, call);
+ return TRUE;
+}
+
+static bool_t play_pause_cb (MprisMediaPlayer2Player * object,
+ GDBusMethodInvocation * call, void * unused)
+{
+ if (aud_drct_get_playing () && ! aud_drct_get_paused ())
+ aud_drct_pause ();
+ else
+ aud_drct_play ();
+
+ mpris_media_player2_player_complete_play_pause (object, call);
+ return TRUE;
+}
+
+static bool_t previous_cb (MprisMediaPlayer2Player * object,
+ GDBusMethodInvocation * call, void * unused)
+{
+ aud_drct_pl_prev ();
+ mpris_media_player2_player_complete_previous (object, call);
+ return TRUE;
+}
+
+static bool_t stop_cb (MprisMediaPlayer2Player * object, GDBusMethodInvocation *
+ call, void * unused)
+{
+ if (aud_drct_get_playing ())
+ aud_drct_stop ();
+
+ mpris_media_player2_player_complete_stop (object, call);
+ return TRUE;
+}
+
+void mpris2_cleanup (void)
+{
+ hook_dissociate ("playback begin", (HookFunction) update_playback_status);
+ hook_dissociate ("playback pause", (HookFunction) update_playback_status);
+ hook_dissociate ("playback stop", (HookFunction) update_playback_status);
+ hook_dissociate ("playback unpause", (HookFunction) update_playback_status);
+
+ hook_dissociate ("playback begin", (HookFunction) update_metadata);
+ hook_dissociate ("playback stop", (HookFunction) update_metadata);
+ hook_dissociate ("playlist update", (HookFunction) update_metadata);
+
+ g_dbus_connection_close_sync (bus, NULL, NULL);
+ g_object_unref (object_core);
+ g_object_unref (object_player);
+
+ if (image_file)
+ {
+ aud_art_unref (last_file);
+ image_file = NULL;
+ }
+
+ str_unref (last_title);
+ str_unref (last_artist);
+ str_unref (last_album);
+ str_unref (last_file);
+ last_title = last_artist = last_album = last_file = NULL;
+
+ if (metadata_type)
+ {
+ g_variant_type_free (metadata_type);
+ metadata_type = NULL;
+ }
+}
+
+bool_t mpris2_init (void)
+{
+ GError * error = NULL;
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, & error);
+
+ if (! bus)
+ {
+ fprintf (stderr, "mpris2: %s\n", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_bus_own_name_on_connection (bus, "org.mpris.MediaPlayer2.audacious", 0,
+ NULL, NULL, NULL, NULL);
+
+ object_core = (GObject *) mpris_media_player2_skeleton_new ();
+
+ g_object_set (object_core,
+ "can-quit", TRUE,
+ "can-raise", TRUE,
+ "desktop-entry", "audacious",
+ "has-track-list", FALSE,
+ "identity", "Audacious",
+ NULL);
+
+ g_signal_connect (object_core, "handle-quit", (GCallback) quit_cb, NULL);
+ g_signal_connect (object_core, "handle-raise", (GCallback) raise_cb, NULL);
+
+ object_player = (GObject *) mpris_media_player2_player_skeleton_new ();
+
+ g_object_set (object_player,
+ "can-control", TRUE,
+ "can-go-next", TRUE,
+ "can-go-previous", TRUE,
+ "can-pause", TRUE,
+ "can-play", TRUE,
+ "can-seek", FALSE,
+ NULL);
+
+ update_playback_status (NULL, object_player);
+
+ hook_associate ("playback begin", (HookFunction) update_playback_status, object_player);
+ hook_associate ("playback pause", (HookFunction) update_playback_status, object_player);
+ hook_associate ("playback stop", (HookFunction) update_playback_status, object_player);
+ hook_associate ("playback unpause", (HookFunction) update_playback_status, object_player);
+
+ hook_associate ("playback begin", (HookFunction) update_metadata, object_player);
+ hook_associate ("playback stop", (HookFunction) update_metadata, object_player);
+ hook_associate ("playlist update", (HookFunction) update_metadata, object_player);
+
+ g_signal_connect (object_player, "handle-next", (GCallback) next_cb, NULL);
+ g_signal_connect (object_player, "handle-pause", (GCallback) pause_cb, NULL);
+ g_signal_connect (object_player, "handle-play", (GCallback) play_cb, NULL);
+ g_signal_connect (object_player, "handle-play-pause", (GCallback) play_pause_cb, NULL);
+ g_signal_connect (object_player, "handle-previous", (GCallback) previous_cb, NULL);
+ g_signal_connect (object_player, "handle-stop", (GCallback) stop_cb, NULL);
+
+ if (! g_dbus_interface_skeleton_export ((GDBusInterfaceSkeleton *)
+ object_core, bus, "/org/mpris/MediaPlayer2", & error) ||
+ ! g_dbus_interface_skeleton_export ((GDBusInterfaceSkeleton *)
+ object_player, bus, "/org/mpris/MediaPlayer2", & error))
+ {
+ mpris2_cleanup ();
+ fprintf (stderr, "mpris2: %s\n", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+AUD_GENERAL_PLUGIN
+(
+ .name = "MPRIS 2 Server",
+ .enabled_by_default = TRUE,
+ .init = mpris2_init,
+ .cleanup = mpris2_cleanup
+)
diff --git a/src/mtp_up/Makefile b/src/mtp_up/Makefile
index c008ce9..1dd12ed 100644
--- a/src/mtp_up/Makefile
+++ b/src/mtp_up/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. ${MTP_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. ${MTP_CFLAGS}
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MTP_LIBS}
diff --git a/src/mtp_up/mtp.c b/src/mtp_up/mtp.c
index 8219b69..f80dcfe 100644
--- a/src/mtp_up/mtp.c
+++ b/src/mtp_up/mtp.c
@@ -19,6 +19,7 @@
#include <config.h>
#include <glib.h>
+#include <sys/stat.h>
#include <sys/types.h>
#include <libmtp.h>
@@ -32,8 +33,6 @@
#define DEBUG 1
-#define UP_DEFAULT_LABEL _("Upload selected track(s)")
-
GMutex * mutex = NULL;
gboolean mtp_initialised = FALSE;
LIBMTP_mtpdevice_t *mtp_device = NULL;
@@ -42,20 +41,15 @@ LIBMTP_file_t *filelist;
static gboolean plugin_active = FALSE,exiting=FALSE;
-void mtp_init ( void );
+static gboolean mtp_init (void);
void mtp_cleanup ( void );
-GeneralPlugin mtp_gp =
-{
- .description = "MTP Upload",
+AUD_GENERAL_PLUGIN
+(
+ .name = "MTP Upload",
.init = mtp_init,
.cleanup = mtp_cleanup
-};
-GtkWidget *mtp_root_menuitem,*mtp_submenu_item_up,*mtp_submenu_item_free,*mtp_submenu;
-
-GeneralPlugin *mtp_gplist[] = { &mtp_gp, NULL };
-DECLARE_PLUGIN(mtp_gp, NULL, NULL, NULL, NULL, NULL, mtp_gplist, NULL, NULL)
-
+)
void show_dialog(const gchar* message)
{
@@ -73,7 +67,7 @@ void show_dialog(const gchar* message)
}
-gboolean free_device(void)
+static void free_device (void)
{
#if DEBUG
if(mtp_initialised)
@@ -85,23 +79,24 @@ gboolean free_device(void)
"Waiting for the MTP mutex to unlock...\n");
#endif
if(!mutex)
- return TRUE;
+ return;
g_mutex_lock(mutex);
if(mtp_device!= NULL)
{
LIBMTP_Release_Device(mtp_device);
mtp_device = NULL;
mtp_initialised = FALSE;
+#if 0
gtk_widget_hide(mtp_submenu_item_free);
+#endif
}
g_mutex_unlock(mutex);
- return TRUE;
+ return;
}
GList *
get_upload_list(void)
{
- const Tuple * tuple;
GList *up_list=NULL;
gint current_play = aud_playlist_get_active();
gint i = (aud_playlist_entry_count(current_play) - 1);
@@ -110,25 +105,64 @@ get_upload_list(void)
{
if (aud_playlist_entry_get_selected(current_play, i))
{
- tuple = aud_playlist_entry_get_tuple (current_play, i, FALSE);
+ Tuple * tuple = aud_playlist_entry_get_tuple (current_play, i, FALSE);
aud_playlist_entry_set_selected(current_play, i, FALSE);
up_list = g_list_prepend (up_list, (void *) tuple);
+
+ if (tuple)
+ tuple_unref (tuple);
}
}
return g_list_reverse(up_list);
}
+static char * strdup_tuple_filename (const Tuple * tuple)
+{
+ gchar * fpath = tuple_get_str (tuple, FIELD_FILE_PATH, NULL);
+ gchar * fname = tuple_get_str (tuple, FIELD_FILE_NAME, NULL);
+
+ gchar * filename = g_strdup_printf ("%s/%s", fpath, fname);
+
+ str_unref (fpath);
+ str_unref (fname);
+
+ return filename;
+}
+
+static char * strdup_tuple_field (const Tuple * tuple, int field)
+{
+ char * sval, * dup;
+ int ival;
+
+ switch (tuple_get_value_type (tuple, field, NULL))
+ {
+ case TUPLE_INT:
+ ival = tuple_get_int (tuple, field, NULL);
+ dup = g_strdup_printf ("%d", ival);
+ break;
+ case TUPLE_STRING:
+ sval = tuple_get_str (tuple, field, NULL);
+ dup = g_strdup (sval);
+ str_unref (sval);
+ break;
+ default:
+ dup = NULL;
+ break;
+ }
+
+ return dup;
+}
+
LIBMTP_track_t *track_metadata(Tuple *from_tuple)
{
LIBMTP_track_t *tr;
gchar *filename, *uri_path;
VFSFile *f;
uint64_t filesize;
- uint32_t parent_id = 0;
struct stat sb;
- uri_path = g_strdup_printf("%s/%s", tuple_get_string(from_tuple, FIELD_FILE_PATH, NULL), tuple_get_string(from_tuple, FIELD_FILE_NAME, NULL));
+ uri_path = strdup_tuple_filename (from_tuple);
gchar *tmp = g_strescape(uri_path,NULL);
filename=g_filename_from_uri(tmp,NULL,NULL);
g_free(tmp);
@@ -160,19 +194,18 @@ LIBMTP_track_t *track_metadata(Tuple *from_tuple)
return NULL;
}
filesize = (uint64_t) sb.st_size;
- parent_id = mtp_device->default_music_folder;
/* track metadata*/
tr = LIBMTP_new_track_t();
- tr->title = g_strdup((gchar*) tuple_get_string(from_tuple, FIELD_TITLE, NULL));
- tr->artist = g_strdup((gchar*) tuple_get_string(from_tuple, FIELD_ARTIST, NULL));
- tr->album = g_strdup((gchar*)tuple_get_string(from_tuple, FIELD_ALBUM, NULL));
+ tr->title = strdup_tuple_field (from_tuple, FIELD_TITLE);
+ tr->artist = strdup_tuple_field (from_tuple, FIELD_ARTIST);
+ tr->album = strdup_tuple_field (from_tuple, FIELD_ALBUM);
tr->filesize = filesize;
- tr->filename = g_strdup(tuple_get_string(from_tuple, FIELD_FILE_NAME, NULL));
+ tr->filename = strdup_tuple_field (from_tuple, FIELD_FILE_NAME);
tr->duration = (uint32_t)tuple_get_int(from_tuple, FIELD_LENGTH, NULL);
tr->filetype = find_filetype (filename);
- tr->genre = g_strdup((gchar*)tuple_get_string(from_tuple, FIELD_GENRE, NULL));
- tr->date = g_strdup_printf("%d",tuple_get_int(from_tuple, FIELD_YEAR, NULL));
+ tr->genre = strdup_tuple_field (from_tuple, FIELD_GENRE);
+ tr->date = strdup_tuple_field (from_tuple, FIELD_YEAR);
g_free(filename);
return tr;
}
@@ -183,8 +216,12 @@ gint upload_file(Tuple *from_tuple)
gchar *tmp, *from_path = NULL, *filename;
LIBMTP_track_t *gentrack;
gentrack = track_metadata(from_tuple);
- from_path = g_strdup_printf("%s/%s", tuple_get_string(from_tuple, FIELD_FILE_PATH, NULL), tuple_get_string(from_tuple, FIELD_FILE_NAME, NULL));
- if(gentrack == NULL) return 1;
+ from_path = strdup_tuple_filename (from_tuple);
+ if(gentrack == NULL)
+ {
+ g_free(from_path);
+ return 1;
+ }
tmp = g_strescape(from_path,NULL);
filename=g_filename_from_uri(tmp,NULL,NULL);
@@ -213,18 +250,24 @@ gint upload_file(Tuple *from_tuple)
gpointer upload(gpointer arg)
{
+#if 0
gtk_widget_hide(mtp_submenu_item_free);
+#endif
if(!mutex)
{
+#if 0
gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mtp_submenu_item_up))),UP_DEFAULT_LABEL);
gtk_widget_set_sensitive(mtp_submenu_item_up, TRUE);
+#endif
return NULL;
}
g_mutex_lock(mutex);
if(!mtp_device)
{
+#if 0
gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mtp_submenu_item_up))),UP_DEFAULT_LABEL);
gtk_widget_set_sensitive(mtp_submenu_item_up, TRUE);
+#endif
g_mutex_unlock(mutex);
return NULL;
}
@@ -251,21 +294,25 @@ gpointer upload(gpointer arg)
node = g_list_next(node);
}
g_list_free(up_list);
+#if 0
gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mtp_submenu_item_up))),UP_DEFAULT_LABEL);
gtk_widget_set_sensitive(mtp_submenu_item_up, TRUE);
+#endif
g_mutex_unlock(mutex);
#if DEBUG
g_print("MTP upload process finished\n");
#endif
+#if 0
gtk_widget_show(mtp_submenu_item_free);
+#endif
g_thread_exit(NULL);
return NULL;
}
-gboolean mtp_press()
+static void mtp_press (void)
{
if(!mutex)
- return TRUE;
+ return;
g_mutex_lock(mutex);
if(!mtp_initialised)
{
@@ -275,8 +322,9 @@ gboolean mtp_press()
LIBMTP_Init();
mtp_device = LIBMTP_Get_First_Device();
mtp_initialised = TRUE;
+#if 0
gtk_widget_show(mtp_submenu_item_free);
-
+#endif
}
g_mutex_unlock(mutex);
if(mtp_device == NULL)
@@ -286,49 +334,33 @@ gboolean mtp_press()
#endif
/* show_dialog("No MTP devices have been found !!!"); */
mtp_initialised = FALSE;
- return TRUE;
-
+ return;
}
+#if 0
gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(mtp_submenu_item_up))), _("Upload in progress..."));
gtk_widget_set_sensitive(mtp_submenu_item_up, FALSE);
+#endif
g_thread_create(upload,NULL,FALSE,NULL);
- return TRUE;
-
}
-void mtp_init(void)
+static gboolean mtp_init (void)
{
- mtp_root_menuitem=gtk_menu_item_new_with_label(_("MTP device handler"));
- mtp_submenu=gtk_menu_new();
-
- mtp_submenu_item_up=gtk_menu_item_new_with_label(UP_DEFAULT_LABEL);
- mtp_submenu_item_free=gtk_menu_item_new_with_label(_("Disconnect the device"));
-
-
- gtk_menu_shell_append (GTK_MENU_SHELL (mtp_submenu), mtp_submenu_item_up);
- gtk_widget_show (mtp_submenu_item_up);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (mtp_submenu), mtp_submenu_item_free);
-
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(mtp_root_menuitem),mtp_submenu);
- gtk_widget_show (mtp_submenu);
- gtk_widget_show (mtp_root_menuitem);
-
-
- aud_menu_plugin_item_add(AUDACIOUS_MENU_MAIN, mtp_root_menuitem);
-
- g_signal_connect (G_OBJECT (mtp_submenu_item_up), "button_press_event",G_CALLBACK (mtp_press), NULL);
- g_signal_connect (G_OBJECT (mtp_submenu_item_free), "button_press_event",G_CALLBACK (free_device), NULL);
-
mutex = g_mutex_new();
plugin_active = TRUE;
exiting=FALSE;
+
+ aud_plugin_menu_add (AUD_MENU_MAIN, mtp_press, _("Upload to MTP Device"), NULL);
+ aud_plugin_menu_add (AUD_MENU_MAIN, free_device, _("Disconnect MTP Device"), NULL);
+
+ return TRUE;
}
void mtp_cleanup(void)
{
if (plugin_active)
{
+ aud_plugin_menu_remove (AUD_MENU_MAIN, mtp_press);
+ aud_plugin_menu_remove (AUD_MENU_MAIN, free_device);
#if DEBUG
if(mtp_initialised)
@@ -354,14 +386,6 @@ void mtp_cleanup(void)
if(mtp_initialised)
g_print("The MTP mutex has been unlocked\n");
#endif
- aud_menu_plugin_item_remove(AUDACIOUS_MENU_MAIN, mtp_root_menuitem);
-
- gtk_widget_destroy(mtp_submenu_item_up);
- gtk_widget_destroy(mtp_submenu_item_free);
-
- gtk_widget_destroy(mtp_submenu);
-
- gtk_widget_destroy(mtp_root_menuitem);
g_mutex_free (mutex);
mutex = NULL;
diff --git a/src/neon/Makefile b/src/neon/Makefile
index d219d25..30dc133 100644
--- a/src/neon/Makefile
+++ b/src/neon/Makefile
@@ -10,5 +10,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${TRANSPORT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${NEON_CFLAGS} -I../.. -D_RB_USE_GLIB
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${NEON_CFLAGS} -I../.. -D_RB_USE_GLIB
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${NEON_LIBS}
diff --git a/src/neon/cert_verification.c b/src/neon/cert_verification.c
index 84e0f62..f65d2c4 100644
--- a/src/neon/cert_verification.c
+++ b/src/neon/cert_verification.c
@@ -17,14 +17,13 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <malloc.h>
+#include <glib.h>
+#include <stdlib.h>
#include <string.h>
#include <ne_ssl.h>
#include <ne_session.h>
-#include <libaudcore/md5.h>
-
#include "cert_verification.h"
// Certificate validation handling.
@@ -282,12 +281,13 @@ gboolean cert_get_hash(const ne_ssl_certificate* cert, guint32* out_hash) {
g_return_val_if_fail(ASNTYPE_SEQUENCE == content.type, FALSE);
// Calculate MD5 sum of subject.
- aud_md5state_t md5state;
- aud_md5_init(&md5state);
- aud_md5_append(&md5state, content.start, content.nextStart - content.start);
- g_free(certDer);
unsigned char md5pword[16];
- aud_md5_finish(&md5state, md5pword);
+ gsize md5len = 16;
+
+ GChecksum * state = g_checksum_new (G_CHECKSUM_MD5);
+ g_checksum_update (state, content.start, content.nextStart - content.start);
+ g_checksum_get_digest (state, md5pword, & md5len);
+ g_checksum_free (state);
guint32 hash = 0;
gint i = 0;
@@ -298,6 +298,8 @@ gboolean cert_get_hash(const ne_ssl_certificate* cert, guint32* out_hash) {
hash |= md5pword[i];
}
*out_hash = hash;
+
+ g_free(certDer);
return TRUE;
}
diff --git a/src/neon/neon.c b/src/neon/neon.c
index 93dab2c..fd8d218 100644
--- a/src/neon/neon.c
+++ b/src/neon/neon.c
@@ -18,6 +18,7 @@
*/
#include <stdint.h>
+#include <string.h>
#ifdef DEBUG
#define NEON_DEBUG
@@ -25,8 +26,9 @@
#include "neon.h"
-#include <audacious/configdb.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
+#include <libaudcore/audstrings.h>
#include <ne_socket.h>
#include <ne_utils.h>
@@ -43,78 +45,16 @@
#define NEON_ICY_BUFSIZE (4096)
#define NEON_RETRY_COUNT 6
-
-VFSFile *neon_vfs_fopen_impl(const gchar* path, const gchar* mode);
-gint neon_vfs_fclose_impl(VFSFile* file);
-gint64 neon_vfs_fread_impl (void * ptr, gint64 size, gint64 nmemb, VFSFile *
- file);
-gint64 neon_vfs_fwrite_impl (const void * ptr, gint64 size, gint64 nmemb,
- VFSFile * file);
-gint neon_vfs_getc_impl(VFSFile* file);
-gint neon_vfs_ungetc_impl(gint c, VFSFile* file);
-void neon_vfs_rewind_impl(VFSFile* file);
-gint64 neon_vfs_ftell_impl (VFSFile * file);
-gboolean neon_vfs_feof_impl(VFSFile* file);
-gint neon_vfs_truncate_impl (VFSFile * file, gint64 size);
-gint neon_vfs_fseek_impl (VFSFile * file, gint64 offset, gint whence);
-gchar *neon_vfs_metadata_impl(VFSFile* file, const gchar * field);
-gint64 neon_vfs_fsize_impl (VFSFile * file);
-
-
-VFSConstructor neon_http_const = {
- "http://",
- neon_vfs_fopen_impl,
- neon_vfs_fclose_impl,
- neon_vfs_fread_impl,
- neon_vfs_fwrite_impl,
- neon_vfs_getc_impl,
- neon_vfs_ungetc_impl,
- neon_vfs_fseek_impl,
- neon_vfs_rewind_impl,
- neon_vfs_ftell_impl,
- neon_vfs_feof_impl,
- neon_vfs_truncate_impl,
- neon_vfs_fsize_impl,
- neon_vfs_metadata_impl
-};
-
-VFSConstructor neon_https_const = {
- "https://",
- neon_vfs_fopen_impl,
- neon_vfs_fclose_impl,
- neon_vfs_fread_impl,
- neon_vfs_fwrite_impl,
- neon_vfs_getc_impl,
- neon_vfs_ungetc_impl,
- neon_vfs_fseek_impl,
- neon_vfs_rewind_impl,
- neon_vfs_ftell_impl,
- neon_vfs_feof_impl,
- neon_vfs_truncate_impl,
- neon_vfs_fsize_impl,
- neon_vfs_metadata_impl
-};
-
-
-/*
- * ----
- */
-
-static void neon_plugin_init(void) {
+static gboolean neon_plugin_init(void) {
gint ret;
if (0 != (ret = ne_sock_init())) {
_ERROR("Could not initialize neon library: %d\n", ret);
- return;
+ return FALSE;
}
- vfs_register_transport(&neon_http_const);
-
- if (0 != ne_has_support(NE_FEATURE_SSL)) {
- _DEBUG("neon compiled with thread-safe SSL, enabling https:// transport");
- vfs_register_transport(&neon_https_const);
- }
+ return TRUE;
}
/*
@@ -125,13 +65,6 @@ static void neon_plugin_fini(void) {
ne_sock_exit();
}
-DECLARE_PLUGIN(neon, neon_plugin_init, neon_plugin_fini)
-
-
-/*
- * ========
- */
-
static struct neon_handle* handle_init(void) {
struct neon_handle* h;
@@ -213,7 +146,6 @@ static void parse_icy(struct icy_metadata* m, gchar* metadata, gsize len) {
gchar* p;
gchar* tstart;
- gchar* tend;
gchar name[NEON_ICY_BUFSIZE];
gchar value[NEON_ICY_BUFSIZE];
gint state;
@@ -225,7 +157,6 @@ static void parse_icy(struct icy_metadata* m, gchar* metadata, gsize len) {
name[0] = '\0';
value[0] = '\0';
tstart = metadata;
- tend = metadata;
while ((pos < len) && (*p != '\0')) {
switch (state) {
case 1:
@@ -240,9 +171,7 @@ static void parse_icy(struct icy_metadata* m, gchar* metadata, gsize len) {
g_strlcpy(name, tstart, NEON_ICY_BUFSIZE);
_DEBUG("Found tag name: %s", name);
state = 2;
- } else {
- tend = p;
- };
+ }
break;
case 2:
/*
@@ -252,7 +181,7 @@ static void parse_icy(struct icy_metadata* m, gchar* metadata, gsize len) {
/*
* Leading ' of value
*/
- tend = tstart = p + 1;
+ tstart = p + 1;
state = 3;
value[0] = '\0';
}
@@ -270,8 +199,6 @@ static void parse_icy(struct icy_metadata* m, gchar* metadata, gsize len) {
_DEBUG("Found tag value: %s", value);
add_icy(m, name, value);
state = 4;
- } else {
- tend = p;
}
break;
case 4:
@@ -282,7 +209,7 @@ static void parse_icy(struct icy_metadata* m, gchar* metadata, gsize len) {
/*
* Next tag name starts after this char
*/
- tend = tstart = p + 1;
+ tstart = p + 1;
state = 1;
name[0] = '\0';
value[0] = '\0';
@@ -470,35 +397,17 @@ static void handle_headers(struct neon_handle* h) {
* -----
*/
-static int neon_proxy_auth_cb(void *userdata, const char *realm, int attempt, char *username, char *password) {
-
- mcs_handle_t *db;
- gchar *value = NULL;
-
- if ((db = aud_cfg_db_open()) == NULL) {
- _DEBUG("<%p> configdb failed to open!", userdata);
- return -1;
- }
-
- aud_cfg_db_get_string(db, NULL, "proxy_user", &value);
- if (!value) {
- _DEBUG("<%p> proxy_auth requested but no proxy_user", userdata);
- aud_cfg_db_close(db);
- return -1;
- }
- g_strlcpy(username, value, NE_ABUFSIZ);
- value = NULL;
+static int neon_proxy_auth_cb (void * userdata, const char * realm, int attempt,
+ char * username, char * password)
+{
+ gchar * value = aud_get_string (NULL, "proxy_user");
+ g_strlcpy (username, value, NE_ABUFSIZ);
+ g_free (value);
- aud_cfg_db_get_string(db, NULL, "proxy_pass", &value);
- if (!value) {
- _DEBUG("<%p> proxy_auth requested but no proxy_pass", userdata);
- aud_cfg_db_close(db);
- return -1;
- }
- g_strlcpy(password, value, NE_ABUFSIZ);
- value = NULL;
+ value = aud_get_string (NULL, "proxy_pass");
+ g_strlcpy (password, value, NE_ABUFSIZ);
+ g_free (value);
- aud_cfg_db_close(db);
return attempt;
}
@@ -574,9 +483,6 @@ static int open_request(struct neon_handle* handle, gulong startbyte) {
handle_headers(handle);
return 0;
}
- else
- goto ERROR;
-
break;
case NE_REDIRECT:
@@ -596,22 +502,19 @@ static int open_request(struct neon_handle* handle, gulong startbyte) {
ne_uri_copy(handle->purl, rediruri);
return 1;
break;
+ }
- default:
- ERROR:
- /* Something went wrong. */
- _ERROR ("<%p> Could not open URL: %d (%d)", (void *) handle, ret,
- status->code);
+ /* Something went wrong. */
+ _ERROR ("<%p> Could not open URL: %d (%d)", (void *) handle, ret,
+ status->code);
- if (ret)
- _ERROR ("<%p> neon error string: %s", (void *) handle,
- ne_get_error (handle->session));
+ if (ret)
+ _ERROR ("<%p> neon error string: %s", (void *) handle,
+ ne_get_error (handle->session));
- ne_request_destroy(handle->request);
- handle->request = NULL;
- return -1;
- break;
- }
+ ne_request_destroy(handle->request);
+ handle->request = NULL;
+ return -1;
}
/*
@@ -621,44 +524,17 @@ static int open_request(struct neon_handle* handle, gulong startbyte) {
static gint open_handle(struct neon_handle* handle, gulong startbyte) {
gint ret;
- mcs_handle_t* db;
gchar* proxy_host = NULL;
- gchar* proxy_port_s = NULL;
- gchar* endptr;
guint proxy_port = 0;
- gboolean use_proxy, proxy_use_auth;
- db = aud_cfg_db_open();
- if (FALSE == aud_cfg_db_get_bool(db, NULL, "use_proxy", &use_proxy)) {
- use_proxy = FALSE;
- }
-
- if (FALSE == aud_cfg_db_get_bool(db, NULL, "proxy_use_auth", &proxy_use_auth)) {
- proxy_use_auth = FALSE;
- }
+ gboolean use_proxy = aud_get_bool (NULL, "use_proxy");
+ gboolean proxy_use_auth = aud_get_bool (NULL, "proxy_use_auth");
- if (use_proxy) {
- if (FALSE == aud_cfg_db_get_string(db, NULL, "proxy_host", &proxy_host)) {
- _ERROR ("<%p> Could not read proxy host, disabling proxy use",
- (void *) handle);
- use_proxy = FALSE;
- }
- if (FALSE == aud_cfg_db_get_string(db, NULL, "proxy_port", &proxy_port_s)) {
- _ERROR ("<%p> Could not read proxy port, disabling proxy use",
- (void *) handle);
- use_proxy = FALSE;
- }
- proxy_port = strtoul(proxy_port_s, &endptr, 10);
- if (!((*proxy_port_s != '\0') && (*endptr == '\0') && (proxy_port < 65536))) {
- /*
- * Invalid data
- */
- _ERROR ("<%p> Invalid proxy port, disabling proxy use", (void *)
- handle);
- use_proxy = FALSE;
- }
+ if (use_proxy)
+ {
+ proxy_host = aud_get_string (NULL, "proxy_host");
+ proxy_port = aud_get_int (NULL, "proxy_port");
}
- aud_cfg_db_close(db);
handle->redircount = 0;
@@ -706,11 +582,16 @@ static gint open_handle(struct neon_handle* handle, gulong startbyte) {
_DEBUG("<%p> Creating request", handle);
ret = open_request(handle, startbyte);
- if (0 == ret) {
+ if (ret == 0)
+ {
+ g_free (proxy_host);
return 0;
- } else if (-1 == ret) {
+ }
+ else if (ret == -1)
+ {
ne_session_destroy(handle->session);
handle->session = NULL;
+ g_free (proxy_host);
return -1;
}
@@ -726,6 +607,7 @@ static gint open_handle(struct neon_handle* handle, gulong startbyte) {
_ERROR ("<%p> Redirect count exceeded for URL %s", (void *) handle,
handle->url);
+ g_free (proxy_host);
return 1;
}
@@ -827,47 +709,33 @@ static gpointer reader_thread(void* data) {
return NULL;
}
+
/*
* -----
*/
-VFSFile* neon_vfs_fopen_impl(const gchar* path, const gchar* mode) {
- VFSFile* file;
+void * neon_vfs_fopen_impl (const gchar * path, const gchar * mode)
+{
struct neon_handle* handle;
_DEBUG("Trying to open '%s' with neon", path);
- if (NULL == (file = g_new0(VFSFile, 1))) {
- _ERROR("Could not allocate memory for filehandle");
- return NULL;
- }
-
if (NULL == (handle = handle_init())) {
_ERROR("Could not allocate memory for neon handle");
- g_free(file);
return NULL;
}
_DEBUG("Allocated new handle: %p", handle);
- if (NULL == (handle->url = g_strdup(path))) {
- _ERROR ("<%p> Could not copy URL string", (void *) handle);
- handle_free(handle);
- g_free(file);
- return NULL;
- }
+ handle->url = g_strdup (path);
if (0 != open_handle(handle, 0)) {
_ERROR ("<%p> Could not open URL", (void *) handle);
handle_free(handle);
- g_free(file);
return NULL;
}
- file->handle = handle;
- file->base = &neon_http_const;
-
- return file;
+ return handle;
}
/*
@@ -876,7 +744,7 @@ VFSFile* neon_vfs_fopen_impl(const gchar* path, const gchar* mode) {
gint neon_vfs_fclose_impl(VFSFile* file) {
- struct neon_handle* h = (struct neon_handle *)file->handle;
+ struct neon_handle* h = (struct neon_handle *)vfs_get_handle (file);
if (NULL != h->reader) {
kill_reader(h);
@@ -904,7 +772,7 @@ gint neon_vfs_fclose_impl(VFSFile* file) {
static gint64 neon_fread_real (void * ptr_, gint64 size, gint64 nmemb,
VFSFile * file)
{
- struct neon_handle* h = (struct neon_handle*)file->handle;
+ struct neon_handle* h = (struct neon_handle*)vfs_get_handle (file);
gint belem;
gint relem;
gint ret;
@@ -1140,7 +1008,7 @@ gint64 neon_vfs_fread_impl (void * buffer, gint64 size, gint64 count,
gint64 neon_vfs_fwrite_impl (const void * ptr, gint64 size, gint64 nmemb,
VFSFile * file)
{
- _ERROR ("<%p> NOT IMPLEMENTED", (void *) file->handle);
+ _ERROR ("<%p> NOT IMPLEMENTED", (void *) vfs_get_handle (file));
return 0;
}
@@ -1153,7 +1021,7 @@ gint neon_vfs_getc_impl(VFSFile* file) {
unsigned char c;
if (1 != neon_vfs_fread_impl(&c, 1, 1, file)) {
- _ERROR ("<%p> Could not getc()!", (void *) file->handle);
+ _ERROR ("<%p> Could not getc()!", (void *) vfs_get_handle (file));
return -1;
}
@@ -1165,26 +1033,14 @@ gint neon_vfs_getc_impl(VFSFile* file) {
*/
gint neon_vfs_ungetc_impl(gint c, VFSFile* stream) {
- _ERROR ("<%p> NOT IMPLEMENTED", (void *) stream->handle);
+ _ERROR ("<%p> NOT IMPLEMENTED", (void *) vfs_get_handle (stream));
return 0;
}
-/*
- * -----
- */
-
-void neon_vfs_rewind_impl(VFSFile* file) {
- (void)neon_vfs_fseek_impl(file, 0L, SEEK_SET);
-}
-
-/*
- * -----
- */
-
gint64 neon_vfs_ftell_impl (VFSFile * file)
{
- struct neon_handle* h = (struct neon_handle *)file->handle;
+ struct neon_handle* h = (struct neon_handle *)vfs_get_handle (file);
_DEBUG("<%p> Current file position: %ld", h, h->pos);
@@ -1197,7 +1053,7 @@ gint64 neon_vfs_ftell_impl (VFSFile * file)
gboolean neon_vfs_feof_impl(VFSFile* file) {
- struct neon_handle* h = (struct neon_handle*)file->handle;
+ struct neon_handle* h = (struct neon_handle*)vfs_get_handle (file);
_DEBUG("<%p> EOF status: %s", h, h->eof?"TRUE":"FALSE");
@@ -1210,7 +1066,7 @@ gboolean neon_vfs_feof_impl(VFSFile* file) {
gint neon_vfs_truncate_impl (VFSFile * file, gint64 size)
{
- _ERROR ("<%p> NOT IMPLEMENTED", (void *) file->handle);
+ _ERROR ("<%p> NOT IMPLEMENTED", (void *) vfs_get_handle (file));
return 0;
}
@@ -1221,7 +1077,7 @@ gint neon_vfs_truncate_impl (VFSFile * file, gint64 size)
gint neon_vfs_fseek_impl (VFSFile * file, gint64 offset, gint whence)
{
- struct neon_handle* h = (struct neon_handle*)file->handle;
+ struct neon_handle* h = (struct neon_handle*)vfs_get_handle (file);
glong newpos;
glong content_length;
@@ -1318,31 +1174,28 @@ gint neon_vfs_fseek_impl (VFSFile * file, gint64 offset, gint whence)
return 0;
}
+void neon_vfs_rewind_impl(VFSFile* file) {
+ (void)neon_vfs_fseek_impl(file, 0L, SEEK_SET);
+}
+
/*
* -----
*/
gchar *neon_vfs_metadata_impl(VFSFile* file, const gchar* field) {
- struct neon_handle* h = (struct neon_handle*)file->handle;
+ struct neon_handle* h = (struct neon_handle*)vfs_get_handle (file);
_DEBUG("<%p> Field name: %s", h, field);
- if (neon_strcmp(field, "track-name")) {
- return g_strdup(h->icy_metadata.stream_title);
- }
-
- if (neon_strcmp(field, "stream-name")) {
- return g_strdup(h->icy_metadata.stream_name);
- }
-
- if (neon_strcmp(field, "content-type")) {
- return g_strdup(h->icy_metadata.stream_contenttype);
- }
-
- if (neon_strcmp(field, "content-bitrate")) {
- return g_strdup_printf("%d", h->icy_metadata.stream_bitrate * 1000);
- }
+ if (! strcmp (field, "track-name"))
+ return str_to_utf8 (h->icy_metadata.stream_title);
+ if (! strcmp (field, "stream-name"))
+ return str_to_utf8 (h->icy_metadata.stream_name);
+ if (! strcmp (field, "content-type"))
+ return str_to_utf8 (h->icy_metadata.stream_contenttype);
+ if (! strcmp (field, "content-bitrate"))
+ return g_strdup_printf ("%d", h->icy_metadata.stream_bitrate * 1000);
return NULL;
}
@@ -1353,7 +1206,7 @@ gchar *neon_vfs_metadata_impl(VFSFile* file, const gchar* field) {
gint64 neon_vfs_fsize_impl (VFSFile * file)
{
- struct neon_handle* h = (struct neon_handle*)file->handle;
+ struct neon_handle* h = (struct neon_handle*)vfs_get_handle (file);
if (-1 == h->content_length) {
_DEBUG("<%p> Unknown content length", h);
@@ -1362,3 +1215,30 @@ gint64 neon_vfs_fsize_impl (VFSFile * file)
return (h->content_start + h->content_length);
}
+
+static const gchar * const neon_schemes[] = {"http", "https", NULL};
+
+static VFSConstructor constructor = {
+ .vfs_fopen_impl = neon_vfs_fopen_impl,
+ .vfs_fclose_impl = neon_vfs_fclose_impl,
+ .vfs_fread_impl = neon_vfs_fread_impl,
+ .vfs_fwrite_impl = neon_vfs_fwrite_impl,
+ .vfs_getc_impl = neon_vfs_getc_impl,
+ .vfs_ungetc_impl = neon_vfs_ungetc_impl,
+ .vfs_fseek_impl = neon_vfs_fseek_impl,
+ .vfs_rewind_impl = neon_vfs_rewind_impl,
+ .vfs_ftell_impl = neon_vfs_ftell_impl,
+ .vfs_feof_impl = neon_vfs_feof_impl,
+ .vfs_ftruncate_impl = neon_vfs_truncate_impl,
+ .vfs_fsize_impl = neon_vfs_fsize_impl,
+ .vfs_get_metadata_impl = neon_vfs_metadata_impl
+};
+
+AUD_TRANSPORT_PLUGIN
+(
+ .name = "Neon HTTP/HTTPS Support",
+ .schemes = neon_schemes,
+ .init = neon_plugin_init,
+ .cleanup = neon_plugin_fini,
+ .vtable = & constructor
+)
diff --git a/src/notify/libnotify-aosd.c b/src/notify/libnotify-aosd.c
index f997cc5..c86a758 100644
--- a/src/notify/libnotify-aosd.c
+++ b/src/notify/libnotify-aosd.c
@@ -23,29 +23,27 @@
#include <audacious/debug.h>
#include "libnotify-aosd_common.h"
-// The pointers to the functions of the plugin
-GeneralPlugin plugin_gp = {
- .description = PLUGIN_NAME " " PLUGIN_VERSION,
+AUD_GENERAL_PLUGIN
+(
+ .name = "Desktop Notifications",
.init = plugin_init,
.about = plugin_about,
.cleanup = plugin_cleanup
-};
-
-GeneralPlugin *plugin_gplist[] = {&plugin_gp, NULL};
-SIMPLE_GENERAL_PLUGIN(libnotifyaosd, plugin_gplist);
+)
short plugin_active = 0;
-void plugin_init() {
+gboolean plugin_init (void)
+{
AUDDBG("started!\n");
if(!osd_init()) {
AUDDBG("osd_init failed!\n");
- return;
+ return FALSE;
}
event_init();
plugin_active = 1;
- AUDDBG("done!\n");
+ return TRUE;
}
diff --git a/src/notify/libnotify-aosd.h b/src/notify/libnotify-aosd.h
index 0b54630..d32085c 100644
--- a/src/notify/libnotify-aosd.h
+++ b/src/notify/libnotify-aosd.h
@@ -22,6 +22,6 @@
#include <audacious/plugin.h>
// Prototypes
-void plugin_init();
+gboolean plugin_init (void);
void plugin_cleanup();
void plugin_about();
diff --git a/src/notify/libnotify-aosd_event.c b/src/notify/libnotify-aosd_event.c
index fd97c67..901ca07 100644
--- a/src/notify/libnotify-aosd_event.c
+++ b/src/notify/libnotify-aosd_event.c
@@ -1,94 +1,114 @@
/************************************************************************
- * libnotify-aosd_event.c *
- * *
- * Copyright (C) 2010 Maximilian Bogner <max@mbogner.de> *
- * *
- * 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 3 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, see <http://www.gnu.org/licenses/>. *
+ * libnotify-aosd_event.c *
+ * *
+ * Copyright (C) 2010 Maximilian Bogner <max@mbogner.de> *
+ * Copyright (C) 2011 John Lindgren <john.lindgren@tds.net> *
+ * *
+ * 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 3 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, see <http://www.gnu.org/licenses/>. *
************************************************************************/
#include <glib.h>
+#include <string.h>
#include <audacious/drct.h>
#include <audacious/i18n.h>
-#include <audacious/plugin.h>
#include <audacious/playlist.h>
-#include <audacious/debug.h>
-#include <libaudcore/audstrings.h>
#include <libaudcore/hook.h>
-#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
#include "config.h"
#include "libnotify-aosd_common.h"
-void event_init() {
- AUDDBG("started!\n");
- hook_associate("playback begin", event_playback_begin, NULL);
- hook_associate("playback pause", event_playback_pause, NULL);
- hook_associate("playback unpause", event_playback_begin, NULL);
- AUDDBG("done!");
-}
+static gchar * last_title = NULL, * last_message = NULL;
-void event_uninit() {
- AUDDBG("started!\n");
- hook_dissociate("playback begin", event_playback_begin);
- hook_dissociate("playback pause", event_playback_pause);
- hook_dissociate("playback unpause", event_playback_begin);
- AUDDBG("done!\n");
+static void clear (void)
+{
+ g_free (last_title);
+ last_title = NULL;
+ g_free (last_message);
+ last_message = NULL;
}
-void event_playback_begin(gpointer p1, gpointer p2) {
- gint playlist, position;
- const gchar *title, *artist, *album;
- const gchar *filename;
- const Tuple *tuple;
- gchar *message;
- GdkPixbuf *pb;
-
- AUDDBG("started!\n");
-
- playlist = aud_playlist_get_playing();
- position = aud_playlist_get_position(playlist);
-
- filename = aud_playlist_entry_get_filename(playlist, position);
- tuple = aud_playlist_entry_get_tuple(playlist, position, FALSE);
-
- title = tuple_get_string(tuple, FIELD_TITLE, NULL);
- if (title == NULL)
- title = aud_playlist_entry_get_title(playlist, position, FALSE);
-
- artist = tuple_get_string(tuple, FIELD_ARTIST, NULL);
- album = tuple_get_string(tuple, FIELD_ALBUM, NULL);
-
- pb = audgui_pixbuf_for_file(filename);
- if (pb != NULL)
- audgui_pixbuf_scale_within(&pb, 128);
-
- message = g_strdup_printf("%s\n%s", (artist != NULL && artist[0]) ? artist :
- _("Unknown artist"), (album != NULL && album[0]) ? album : _("Unknown album"));
-
- osd_show(title, message, "notification-audio-play", pb);
- g_free(message);
-
- if (pb != NULL)
- g_object_unref(pb);
+static void update (void * unused, void * explicit)
+{
+ if (! aud_drct_get_playing () || ! aud_drct_get_ready ())
+ {
+ if (GPOINTER_TO_INT (explicit))
+ osd_show (_("Stopped"), _("Audacious is not playing."), NULL, NULL);
+
+ return;
+ }
+
+ gint list = aud_playlist_get_playing ();
+ gint entry = aud_playlist_get_position (list);
+
+ gchar * title, * artist, * album;
+ aud_playlist_entry_describe (list, entry, & title, & artist, & album, FALSE);
+
+ gchar * message;
+ if (artist)
+ {
+ if (album)
+ message = g_strdup_printf ("%s\n%s", artist, album);
+ else
+ message = g_strdup (artist);
+ }
+ else if (album)
+ message = g_strdup (album);
+ else
+ message = g_strdup ("");
+
+ if (! GPOINTER_TO_INT (explicit) && last_title && last_message && ! strcmp
+ (title, last_title) && ! strcmp (message, last_message))
+ {
+ g_free (message);
+ goto FREE;
+ }
+
+ GdkPixbuf * pb = audgui_pixbuf_for_current ();
+ if (pb)
+ audgui_pixbuf_scale_within (& pb, 96);
+
+ osd_show (title, message, "audio-x-generic", pb);
+
+ if (pb)
+ g_object_unref (pb);
+
+ clear ();
+ last_title = g_strdup (title);
+ last_message = message;
+
+FREE:
+ str_unref (title);
+ str_unref (artist);
+ str_unref (album);
+}
- AUDDBG("done!\n");
+void event_init (void)
+{
+ update (NULL, GINT_TO_POINTER (FALSE));
+ hook_associate ("aosd toggle", (HookFunction) update, GINT_TO_POINTER (TRUE));
+ hook_associate ("playback ready", (HookFunction) update, GINT_TO_POINTER (FALSE));
+ hook_associate ("playlist update", (HookFunction) update, GINT_TO_POINTER (FALSE));
+ hook_associate ("playback stop", (HookFunction) clear, NULL);
}
-void event_playback_pause(gpointer p1, gpointer p2) {
- AUDDBG("started!\n");
- osd_show("Playback paused", NULL, "notification-audio-pause", NULL);
- AUDDBG("done!\n");
+void event_uninit (void)
+{
+ hook_dissociate ("aosd toggle", (HookFunction) update);
+ hook_dissociate ("playback ready", (HookFunction) update);
+ hook_dissociate ("playlist update", (HookFunction) update);
+ hook_dissociate ("playback stop", (HookFunction) clear);
+ clear ();
}
diff --git a/src/notify/libnotify-aosd_event.h b/src/notify/libnotify-aosd_event.h
index 8ebbef8..1f361d9 100644
--- a/src/notify/libnotify-aosd_event.h
+++ b/src/notify/libnotify-aosd_event.h
@@ -24,5 +24,3 @@
// Prototypes
void event_init();
void event_uninit();
-void event_playback_begin(gpointer p1, gpointer p2);
-void event_playback_pause(gpointer p1, gpointer p2);
diff --git a/src/null/Makefile b/src/null/Makefile
index 806b9a1..a55b6ca 100644
--- a/src/null/Makefile
+++ b/src/null/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${MOWGLI_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/null/null.c b/src/null/null.c
index 35df86d..27424f4 100644
--- a/src/null/null.c
+++ b/src/null/null.c
@@ -2,7 +2,7 @@
* Copyright 2006 Christian Birchinger <joker@netswarm.net>
*
* Based on the XMMS plugin:
- * Copyright 2000 H�vard Kv�len <havardk@sol.no>
+ * Copyright 2000 Håvard Kvålen <havardk@sol.no>
*
*
* This program is free software; you can redistribute it and/or modify
@@ -23,7 +23,8 @@
#include <glib.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/misc.h>
+#include <audacious/gtk-compat.h>
#include <audacious/plugin.h>
#include <audacious/i18n.h>
#include <libaudgui/libaudgui.h>
@@ -32,219 +33,212 @@
static GTimer *timer;
static gulong offset_time, written;
static gint bps;
-static gboolean real_time = TRUE;
static gboolean paused, started;
static GtkWidget *configurewin;
static struct {
- gint format;
- gint frequency;
- gint channels;
+ gint format;
+ gint frequency;
+ gint channels;
} input_format;
+static const gchar * const null_defaults[] = {
+ "real_time", "TRUE",
+ NULL};
+
#define ELAPSED_TIME (offset_time + g_timer_elapsed(timer, NULL) * 1000)
-static OutputPluginInitStatus null_init(void)
+static gboolean null_init (void)
{
- mcs_handle_t *db;
- db = aud_cfg_db_open();
- aud_cfg_db_get_bool(db, "null", "real_time", &real_time);
- aud_cfg_db_close(db);
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
+ aud_config_set_defaults("null", null_defaults);
+ return TRUE;
}
static void null_about(void)
{
- static GtkWidget *about;
- gchar *about_text;
+ static GtkWidget *about;
+ gchar *about_text;
- if (about)
- return;
+ if (about)
+ return;
- about_text = g_strjoin("", _("Null output plugin "), VERSION,
- _(" by Christian Birchinger <joker@netswarm.net>\n"
- "based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"), NULL);
+ about_text = g_strjoin("", _("Null output plugin "), VERSION,
+ _(" by Christian Birchinger <joker@netswarm.net>\n"
+ "based on the XMMS plugin by Håvard Kvål <havardk@xmms.org>"), NULL);
- audgui_simple_message (& about, GTK_MESSAGE_INFO, _("About Null Output"),
+ audgui_simple_message (& about, GTK_MESSAGE_INFO, _("About Null Output"),
about_text);
- g_free(about_text);
+ g_free(about_text);
}
static void null_configure_ok_cb(GtkButton *w, gpointer data)
{
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
- real_time = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data));
- aud_cfg_db_set_bool(db, "null", "real_time", real_time);
- aud_cfg_db_close(db);
- gtk_widget_destroy(configurewin);
+ aud_set_bool("null", "real_time", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data)));
+ gtk_widget_destroy(configurewin);
}
static void null_configure(void)
{
- GtkWidget *rt_btn, *ok_button, *cancel_button, *vbox, *bbox;
-
- if (configurewin)
- return;
-
- configurewin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(configurewin), _("Null output preferences"));
- gtk_window_set_policy(GTK_WINDOW(configurewin), FALSE, FALSE, FALSE);
- gtk_container_set_border_width(GTK_CONTAINER(configurewin), 10);
- gtk_signal_connect(GTK_OBJECT(configurewin), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed), &configurewin);
-
- vbox = gtk_vbox_new(FALSE, 10);
- gtk_container_add(GTK_CONTAINER(configurewin), vbox);
-
- rt_btn = gtk_check_button_new_with_label(_("Run in real time"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rt_btn), real_time);
- gtk_box_pack_start(GTK_BOX(vbox), rt_btn, FALSE, FALSE, 0);
- bbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
- ok_button = gtk_button_new_with_label(_("Ok"));
- cancel_button = gtk_button_new_with_label(_("Cancel"));
- GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT);
- GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT);
- gtk_widget_grab_default(ok_button);
- gtk_signal_connect_object(GTK_OBJECT(cancel_button), "clicked",
- GTK_SIGNAL_FUNC(gtk_widget_destroy),
- GTK_OBJECT(configurewin));
- gtk_signal_connect(GTK_OBJECT(ok_button), "clicked",
- GTK_SIGNAL_FUNC(null_configure_ok_cb), rt_btn);
- gtk_box_pack_start_defaults(GTK_BOX(bbox), ok_button);
- gtk_box_pack_start_defaults(GTK_BOX(bbox), cancel_button);
-
- gtk_widget_show_all(configurewin);
+ GtkWidget *rt_btn, *ok_button, *cancel_button, *vbox, *bbox;
+
+ if (configurewin)
+ return;
+
+ configurewin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW(configurewin), _("Null output preferences"));
+ gtk_window_set_type_hint(GTK_WINDOW(configurewin), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable(GTK_WINDOW(configurewin), FALSE);
+ gtk_window_set_position(GTK_WINDOW(configurewin), GTK_WIN_POS_CENTER);
+ gtk_container_set_border_width(GTK_CONTAINER(configurewin), 10);
+ g_signal_connect(G_OBJECT(configurewin), "destroy",
+ G_CALLBACK(gtk_widget_destroyed), &configurewin);
+
+ vbox = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(configurewin), vbox);
+
+ rt_btn = gtk_check_button_new_with_label(_("Run in real time"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rt_btn), aud_get_bool("null", "real_time"));
+ gtk_box_pack_start(GTK_BOX(vbox), rt_btn, FALSE, FALSE, 0);
+ bbox = gtk_hbutton_box_new();
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+ gtk_box_set_spacing(GTK_BOX(bbox), 5);
+ gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
+ ok_button = gtk_button_new_with_label(_("Ok"));
+ cancel_button = gtk_button_new_with_label(_("Cancel"));
+ gtk_widget_set_can_default(ok_button, TRUE);
+ gtk_widget_set_can_default(cancel_button, TRUE);
+ g_signal_connect_swapped(G_OBJECT(cancel_button), "clicked",
+ G_CALLBACK(gtk_widget_destroy), configurewin);
+ g_signal_connect(G_OBJECT(ok_button), "clicked",
+ G_CALLBACK(null_configure_ok_cb), rt_btn);
+ gtk_box_pack_start(GTK_BOX(bbox), ok_button, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(bbox), cancel_button, FALSE, FALSE, 0);
+ gtk_widget_grab_default(ok_button);
+
+ gtk_widget_show_all(configurewin);
}
static int null_open(gint fmt, int rate, int nch)
{
- offset_time = 0;
- written = 0;
- started = FALSE;
- paused = FALSE;
- input_format.format = fmt;
- input_format.frequency = rate;
- input_format.channels = nch;
- bps = rate * nch;
- switch (fmt)
- {
- case FMT_U8:
- case FMT_S8:
- break;
- default:
- bps <<= 1;
- break;
- }
- if (real_time)
- timer = g_timer_new();
- return 1;
+ offset_time = 0;
+ written = 0;
+ started = FALSE;
+ paused = FALSE;
+ input_format.format = fmt;
+ input_format.frequency = rate;
+ input_format.channels = nch;
+ bps = rate * nch;
+ switch (fmt)
+ {
+ case FMT_U8:
+ case FMT_S8:
+ break;
+ default:
+ bps <<= 1;
+ break;
+ }
+ if (aud_get_bool("null", "real_time"))
+ timer = g_timer_new();
+ return 1;
}
static void null_write(void *ptr, int length)
{
- if (timer && !started)
- {
- g_timer_start(timer);
- started = TRUE;
- }
+ if (timer && !started)
+ {
+ g_timer_start(timer);
+ started = TRUE;
+ }
- written += length;
+ written += length;
}
static void null_close(void)
{
- if (timer)
- g_timer_destroy(timer);
- timer = NULL;
+ if (timer)
+ g_timer_destroy(timer);
+ timer = NULL;
}
static void null_flush(int time)
{
- offset_time = time;
- written = ((double)time * bps) / 1000;
- if (timer)
- g_timer_reset(timer);
+ offset_time = time;
+ written = ((double)time * bps) / 1000;
+ if (timer)
+ g_timer_reset(timer);
}
-static void null_pause(short p)
+static void null_pause (gboolean p)
{
- paused = p;
- if (!timer)
- return;
-
- if (paused)
- g_timer_stop(timer);
- else
- {
- offset_time += g_timer_elapsed(timer, NULL) * 1000;
- g_timer_start(timer);
- }
+ paused = p;
+ if (!timer)
+ return;
+
+ if (paused)
+ g_timer_stop(timer);
+ else
+ {
+ offset_time += g_timer_elapsed(timer, NULL) * 1000;
+ g_timer_start(timer);
+ }
}
static int null_buffer_free(void)
{
- if (timer)
- {
- return 10240 - (written - (ELAPSED_TIME * bps) / 1000);
- }
- else
- {
- if (!paused)
- return 10000;
- else
- return 0;
- }
+ if (timer)
+ {
+ return 10240 - (written - (ELAPSED_TIME * bps) / 1000);
+ }
+ else
+ {
+ if (!paused)
+ return 10000;
+ else
+ return 0;
+ }
}
+#if 0
static int null_playing(void)
{
- if (!timer)
- return FALSE;
+ if (!timer)
+ return FALSE;
- if ((gdouble)(written * 1000) / bps > ELAPSED_TIME)
- return TRUE;
- return FALSE;
+ if ((gdouble)(written * 1000) / bps > ELAPSED_TIME)
+ return TRUE;
+ return FALSE;
}
+#endif
static int null_get_written_time(void)
{
- if (!bps)
- return 0;
- return ((gint64)written * 1000) / bps;
+ if (!bps)
+ return 0;
+ return ((gint64)written * 1000) / bps;
}
static int null_get_output_time(void)
{
- if (!timer)
- return null_get_written_time();
+ if (!timer)
+ return null_get_written_time();
- return ELAPSED_TIME;
+ return ELAPSED_TIME;
}
-OutputPlugin null_op =
-{
- .description = "Null Output Plugin",
- .probe_priority = 0,
- .init = null_init,
- .about = null_about,
- .configure = null_configure,
- .open_audio = null_open,
- .write_audio = null_write,
- .close_audio = null_close,
- .flush = null_flush,
- .pause = null_pause,
- .buffer_free = null_buffer_free,
- .buffer_playing = null_playing,
- .output_time = null_get_output_time,
- .written_time = null_get_written_time,
-};
-
-OutputPlugin *null_oplist[] = { &null_op, NULL };
-
-DECLARE_PLUGIN(null, NULL, NULL, NULL, null_oplist, NULL, NULL, NULL, NULL);
+AUD_OUTPUT_PLUGIN
+(
+ .name = "No Output",
+ .probe_priority = 0,
+ .init = null_init,
+ .about = null_about,
+ .configure = null_configure,
+ .open_audio = null_open,
+ .write_audio = null_write,
+ .close_audio = null_close,
+ .flush = null_flush,
+ .pause = null_pause,
+ .buffer_free = null_buffer_free,
+ .output_time = null_get_output_time,
+ .written_time = null_get_written_time,
+ )
diff --git a/src/oss4/Makefile b/src/oss4/Makefile
index b1a5020..6470038 100644
--- a/src/oss4/Makefile
+++ b/src/oss4/Makefile
@@ -11,5 +11,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} -I/usr/lib/oss/include -I../.. ${GTK_CFLAGS} ${GLIB_CFLAGS}
-LIBS += ${OSS_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${OSS_CFLAGS} -I../.. ${GTK_CFLAGS} ${GLIB_CFLAGS}
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/oss4/configure.c b/src/oss4/configure.c
index 57523fc..f83f201 100644
--- a/src/oss4/configure.c
+++ b/src/oss4/configure.c
@@ -1,28 +1,26 @@
/*
- * OSS4 Output Plugin for Audacious
- * Copyright 2010 Michał Lipski <tallica@o2.pl>
+ * configure.c
+ * Copyright 2010-2011 Michał Lipski <tallica@o2.pl>
*
- * 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 3 of the License, or
- * (at your option) any later version.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
*
- * 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.
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
*
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
*/
#include "oss.h"
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
static GtkWidget *window;
-static oss_cfg_t *tmp_cfg;
static void dev_list_changed_cb(GtkComboBox *combo, gpointer data)
{
@@ -36,32 +34,34 @@ static void dev_list_changed_cb(GtkComboBox *combo, gpointer data)
gtk_tree_model_get(model, &iter, 1, &string, -1);
}
- tmp_cfg->device = string;
+ aud_set_string("oss4", "device", string);
+}
+
+static void alt_dev_text_changed_cb(GtkEditable *widget, gpointer data)
+{
+ aud_set_string("oss4", "alt_device", gtk_editable_get_chars(widget, 0, -1));
}
static void alt_dev_toggled_cb(GtkToggleButton *widget, gpointer data)
{
- tmp_cfg->use_alt_device = gtk_toggle_button_get_active(widget);
- gtk_widget_set_sensitive(GTK_WIDGET(data), tmp_cfg->use_alt_device);
+ gboolean active = gtk_toggle_button_get_active(widget);
+ aud_set_bool("oss4", "use_alt_device", active);
+ gtk_widget_set_sensitive(GTK_WIDGET(data), active);
}
static void cookedmode_toggled_cb(GtkToggleButton *widget, gpointer data)
{
- tmp_cfg->cookedmode = gtk_toggle_button_get_active(widget);
+ aud_set_bool("oss4", "cookedmode", gtk_toggle_button_get_active(widget));
}
-static void vol_toggled_cb(GtkToggleButton *widget, gpointer data)
+static void exclusive_toggled_cb(GtkToggleButton *widget, gpointer data)
{
- tmp_cfg->save_volume = gtk_toggle_button_get_active(widget);
+ aud_set_bool("oss4", "exclusive", gtk_toggle_button_get_active(widget));
}
-static void button_ok_clicked_cb(GtkButton *button, gpointer data)
+static void vol_toggled_cb(GtkToggleButton *widget, gpointer data)
{
- g_free(oss_cfg);
- oss_cfg = g_memdup(tmp_cfg, sizeof(oss_cfg_t));
- oss_cfg->alt_device = gtk_editable_get_chars(GTK_EDITABLE(GTK_WIDGET(data)), 0, -1);
- oss_config_save();
- gtk_widget_destroy(window);
+ aud_set_bool("oss4", "save_volume", gtk_toggle_button_get_active(widget));
}
static GtkTreeModel *get_device_list(void)
@@ -73,17 +73,9 @@ static GtkTreeModel *get_device_list(void)
list = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
- if ((mixerfd = open(DEFAULT_MIXER, O_RDWR)) == -1)
- goto FAILED;
-
- if (ioctl(mixerfd, SNDCTL_SYSINFO, &sysinfo) == -1)
- goto FAILED;
-
- if (sysinfo.numaudios < 1)
- {
- errno = ENXIO;
- goto FAILED;
- }
+ CHECK_NOISY(mixerfd = open, DEFAULT_MIXER, O_RDWR);
+ CHECK(ioctl, mixerfd, SNDCTL_SYSINFO, &sysinfo);
+ CHECK_NOISY(oss_probe_for_adev, &sysinfo);
gtk_list_store_append(list, &iter);
gtk_list_store_set(list, &iter, 0, _("1. Default device"), 1, DEFAULT_DSP, -1);
@@ -93,8 +85,7 @@ static GtkTreeModel *get_device_list(void)
oss_audioinfo ainfo;
ainfo.dev = i;
- if (ioctl(mixerfd, SNDCTL_AUDIOINFO, &ainfo) == -1)
- goto FAILED;
+ CHECK(ioctl, mixerfd, SNDCTL_AUDIOINFO, &ainfo);
if (ainfo.caps & PCM_CAP_OUTPUT)
{
@@ -110,7 +101,6 @@ static GtkTreeModel *get_device_list(void)
return GTK_TREE_MODEL(list);
FAILED:
- SHOW_ERROR_MSG;
close(mixerfd);
return NULL;
}
@@ -135,24 +125,21 @@ static void select_combo_item(GtkComboBox *combo, gchar *text)
while (gtk_tree_model_iter_next(model, &iter));
}
-static void window_destroy(void)
-{
- g_free(tmp_cfg);
-}
-
static void window_create(void)
{
GtkWidget *vbox, *dev_list_box, *dev_label, *dev_list_combo, *alt_dev_box, *alt_dev_check,
- *alt_dev_text, *option_box, *vol_check, *cookedmode_check, *button_box, *button_ok, *button_cancel;
+ *alt_dev_text, *option_box, *vol_check, *cookedmode_check, *button_box, *button_ok,
+ *exclusive_check;
GtkTreeModel *dev_list_model;
GtkCellRenderer *cell;
+ gchar *device;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), _("OSS4 Output Plugin Preferences"));
gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
- gtk_container_border_width(GTK_CONTAINER(window), 10);
+ gtk_container_set_border_width(GTK_CONTAINER(window), 10);
vbox = gtk_vbox_new(FALSE, 10);
gtk_container_add(GTK_CONTAINER(window), vbox);
@@ -179,7 +166,9 @@ static void window_create(void)
g_object_unref(G_OBJECT(dev_list_model));
- select_combo_item(GTK_COMBO_BOX(dev_list_combo), tmp_cfg->device);
+ device = aud_get_string("oss4", "device");
+ select_combo_item(GTK_COMBO_BOX(dev_list_combo), device);
+ g_free(device);
gtk_box_pack_start(GTK_BOX(dev_list_box), dev_list_combo, TRUE, TRUE, 5);
@@ -187,44 +176,48 @@ static void window_create(void)
gtk_box_pack_start(GTK_BOX(vbox), alt_dev_box, FALSE, FALSE, 0);
alt_dev_check = gtk_check_button_new_with_label(_("Use alternate device:"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alt_dev_check), tmp_cfg->use_alt_device);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(alt_dev_check), aud_get_bool("oss4", "use_alt_device"));
- gtk_box_pack_start(GTK_BOX(alt_dev_box), alt_dev_check, FALSE, FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(alt_dev_box), alt_dev_check, FALSE, FALSE, 0);
alt_dev_text = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(alt_dev_text), tmp_cfg->alt_device);
- gtk_widget_set_sensitive(alt_dev_text, tmp_cfg->use_alt_device);
+ device = aud_get_string("oss4", "alt_device");
+ gtk_entry_set_text(GTK_ENTRY(alt_dev_text), device);
+ gtk_widget_set_sensitive(alt_dev_text, aud_get_bool("oss4", "use_alt_device"));
gtk_box_pack_start(GTK_BOX(alt_dev_box), alt_dev_text, TRUE, TRUE, 5);
+ g_free(device);
option_box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), option_box, FALSE, FALSE, 0);
vol_check = gtk_check_button_new_with_label(_("Save volume between sessions"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vol_check), tmp_cfg->save_volume);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vol_check), aud_get_bool("oss4", "save_volume"));
gtk_box_pack_start(GTK_BOX(option_box), vol_check, FALSE, FALSE, 5);
cookedmode_check = gtk_check_button_new_with_label(_("Enable format conversions made by the OSS software."));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cookedmode_check), tmp_cfg->cookedmode);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cookedmode_check), aud_get_bool("oss4", "cookedmode"));
gtk_box_pack_start(GTK_BOX(option_box), cookedmode_check, FALSE, FALSE, 5);
+ exclusive_check = gtk_check_button_new_with_label(_("Enable exclusive mode to prevent virtual mixing."));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(exclusive_check), aud_get_bool("oss4", "exclusive"));
+ gtk_box_pack_start(GTK_BOX(option_box), exclusive_check, FALSE, FALSE, 5);
+
button_box = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(button_box), 5);
+ gtk_box_set_spacing(GTK_BOX(button_box), 5);
gtk_box_pack_start(GTK_BOX(vbox), button_box, TRUE, TRUE, 5);
- button_cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- gtk_box_pack_start(GTK_BOX(button_box), button_cancel, FALSE, FALSE, 5);
-
button_ok = gtk_button_new_from_stock(GTK_STOCK_OK);
gtk_box_pack_start(GTK_BOX(button_box), button_ok, FALSE, FALSE, 5);
+ gtk_widget_set_can_default(button_ok, TRUE);
gtk_widget_grab_default(button_ok);
g_signal_connect(G_OBJECT(dev_list_combo), "changed",
G_CALLBACK(dev_list_changed_cb), NULL);
- g_signal_connect(G_OBJECT(window), "destroy",
- G_CALLBACK(window_destroy), NULL);
+ g_signal_connect(G_OBJECT(alt_dev_text), "changed",
+ G_CALLBACK(alt_dev_text_changed_cb), NULL);
g_signal_connect(G_OBJECT(alt_dev_check), "toggled",
G_CALLBACK(alt_dev_toggled_cb), alt_dev_text);
@@ -235,11 +228,11 @@ static void window_create(void)
g_signal_connect(G_OBJECT(cookedmode_check), "toggled",
G_CALLBACK(cookedmode_toggled_cb), NULL);
- g_signal_connect_swapped(G_OBJECT(button_cancel), "clicked",
- G_CALLBACK(gtk_widget_destroy), window);
+ g_signal_connect(G_OBJECT(exclusive_check), "toggled",
+ G_CALLBACK(exclusive_toggled_cb), NULL);
- g_signal_connect(G_OBJECT(button_ok), "clicked",
- G_CALLBACK(button_ok_clicked_cb), alt_dev_text);
+ g_signal_connect_swapped(G_OBJECT(button_ok), "clicked",
+ G_CALLBACK(gtk_widget_destroy), window);
gtk_widget_show_all(window);
}
@@ -252,33 +245,5 @@ void oss_configure(void)
return;
}
- tmp_cfg = g_memdup(oss_cfg, sizeof(oss_cfg_t));
-
window_create();
}
-
-void oss_config_load(void)
-{
- mcs_handle_t *db = aud_cfg_db_open();
-
- aud_cfg_db_get_string(db, "oss4", "device", &oss_cfg->device);
- aud_cfg_db_get_bool(db, "oss4", "use_alt_device", &oss_cfg->use_alt_device);
- aud_cfg_db_get_string(db, "oss4", "alt_device", &oss_cfg->alt_device);
- aud_cfg_db_get_bool(db, "oss4", "save_volume", &oss_cfg->save_volume);
- aud_cfg_db_get_int(db, "oss4", "volume", &oss_cfg->volume);
- aud_cfg_db_get_bool(db, "oss4", "cookedmode", &oss_cfg->cookedmode);
- aud_cfg_db_close(db);
-}
-
-void oss_config_save(void)
-{
- mcs_handle_t *db = aud_cfg_db_open();
-
- aud_cfg_db_set_string(db, "oss4", "device", oss_cfg->device);
- aud_cfg_db_set_bool(db, "oss4", "use_alt_device", oss_cfg->use_alt_device);
- aud_cfg_db_set_string(db, "oss4", "alt_device", oss_cfg->alt_device);
- aud_cfg_db_set_bool(db, "oss4", "save_volume", oss_cfg->save_volume);
- aud_cfg_db_set_int(db, "oss4", "volume", oss_cfg->volume);
- aud_cfg_db_set_bool(db, "oss4", "cookedmode", oss_cfg->cookedmode);
- aud_cfg_db_close(db);
-}
diff --git a/src/oss4/oss.c b/src/oss4/oss.c
index a49088d..48d05eb 100644
--- a/src/oss4/oss.c
+++ b/src/oss4/oss.c
@@ -1,69 +1,60 @@
/*
- * OSS4 Output Plugin for Audacious
- * Copyright 2010 Michał Lipski <tallica@o2.pl>
+ * oss.c
+ * Copyright 2010-2011 Michał Lipski <tallica@o2.pl>
*
* I would like to thank people on #audacious, especially Tony Vroon and
* John Lindgren and of course the authors of the previous OSS plugin.
*
- * 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 3 of the License, or
- * (at your option) any later version.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
*
- * 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.
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
*
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
*/
#include "oss.h"
-#define HARD_DEBUG 0
+static const gchar * const oss_defaults[] = {
+ "device", DEFAULT_DSP,
+ "use_alt_device", "FALSE",
+ "alt_device", DEFAULT_DSP,
+ "save_volume", "TRUE",
+ "volume", "12850", /* 0x3232 */
+ "cookedmode", "TRUE",
+ "exclusive", "FALSE",
+ NULL};
oss_data_t *oss_data;
-oss_cfg_t *oss_cfg;
-gchar *oss_message = NULL;
static gint64 oss_time; /* microseconds */
static gboolean oss_paused;
static gint oss_paused_time;
-static audio_buf_info oss_buffer_info;
static gint oss_delay; /* miliseconds */
static gboolean oss_ioctl_vol = FALSE;
-OutputPluginInitStatus oss_init(void)
+gboolean oss_init(void)
{
AUDDBG("Init.\n");
+ aud_config_set_defaults("oss4", oss_defaults);
oss_data = g_new0(oss_data_t, 1);
- oss_cfg = g_new0(oss_cfg_t, 1);
oss_data->fd = -1;
- oss_cfg->device = DEFAULT_DSP;
- oss_cfg->use_alt_device = FALSE;
- oss_cfg->alt_device = DEFAULT_DSP;
- oss_cfg->save_volume = TRUE;
- oss_cfg->volume = 0x3232;
- oss_cfg->cookedmode = TRUE;
- oss_config_load();
-
- if (oss_hardware_present())
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
- else
- return OUTPUT_PLUGIN_INIT_NO_DEVICES;
+ return oss_hardware_present();
}
void oss_cleanup(void)
{
AUDDBG("Cleanup.\n");
- oss_config_save();
-
g_free(oss_data);
- g_free(oss_cfg);
}
static gboolean set_format(gint format, gint rate, gint channels)
@@ -73,41 +64,22 @@ static gboolean set_format(gint format, gint rate, gint channels)
AUDDBG("Audio format: %s, sample rate: %dHz, number of channels: %d.\n", oss_format_to_text(format), rate, channels);
/* Enable/disable format conversions made by the OSS software */
- if (ioctl(oss_data->fd, SNDCTL_DSP_COOKEDMODE, &oss_cfg->cookedmode) == -1)
- DEBUG_MSG;
-
- param = format;
+ param = aud_get_bool("oss4", "cookedmode");
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_COOKEDMODE, &param);
- if (ioctl(oss_data->fd, SNDCTL_DSP_SETFMT, &param) == -1)
- goto FAILED;
+ AUDDBG("%s format conversions made by the OSS software.\n", param ? "Enabled" : "Disabled");
- if (param != format)
- {
- ERROR("Selected audio format is not supported by the device.\n");
- return FALSE;
- }
+ param = format;
+ CHECK_NOISY(ioctl, oss_data->fd, SNDCTL_DSP_SETFMT, &param);
+ CHECK_VAL(param == format, ERROR_NOISY, "Selected audio format is not supported by the device.\n");
param = rate;
-
- if (ioctl(oss_data->fd, SNDCTL_DSP_SPEED, &param) == -1)
- goto FAILED;
-
- if (param != rate)
- {
- ERROR("Selected sample rate is not supported by the device.\n");
- return FALSE;
- }
+ CHECK_NOISY(ioctl, oss_data->fd, SNDCTL_DSP_SPEED, &param);
+ CHECK_VAL(param == rate, ERROR_NOISY, "Selected sample rate is not supported by the device.\n");
param = channels;
-
- if (ioctl(oss_data->fd, SNDCTL_DSP_CHANNELS, &param) == -1)
- goto FAILED;
-
- if (param != channels)
- {
- ERROR("Selected number of channels is not supported by the device.\n");
- return FALSE;
- }
+ CHECK_NOISY(ioctl, oss_data->fd, SNDCTL_DSP_CHANNELS, &param);
+ CHECK_VAL(param == channels, ERROR_NOISY, "Selected number of channels is not supported by the device.\n");
oss_data->format = format;
oss_data->rate = rate;
@@ -116,9 +88,40 @@ static gboolean set_format(gint format, gint rate, gint channels)
return TRUE;
- FAILED:
- ERROR_MSG;
- return FALSE;
+FAILED:
+ return FALSE;
+}
+
+static gint open_device(void)
+{
+ gint res = -1;
+ gint flags = O_WRONLY;
+ gchar *device = aud_get_string("oss4", "device");
+ gchar *alt_device = aud_get_string("oss4", "alt_device");
+
+ if (aud_get_bool("oss4", "exclusive"))
+ {
+ AUDDBG("Enabled exclusive mode.\n");
+ flags |= O_EXCL;
+ }
+
+ if (aud_get_bool("oss4", "use_alt_device") && alt_device != NULL)
+ res = open(alt_device, flags);
+ else if (device != NULL)
+ res = open(device, flags);
+ else
+ res = open(DEFAULT_DSP, flags);
+
+ g_free(device);
+ g_free(alt_device);
+
+ return res;
+}
+
+static void close_device(void)
+{
+ close(oss_data->fd);
+ oss_data->fd = -1;
}
gint oss_open_audio(gint aud_format, gint rate, gint channels)
@@ -127,135 +130,92 @@ gint oss_open_audio(gint aud_format, gint rate, gint channels)
gint format;
gint vol_left, vol_right;
- gchar *device = DEFAULT_DSP;
+ audio_buf_info buf_info;
- if (oss_cfg->use_alt_device && oss_cfg->alt_device != NULL)
- device = oss_cfg->alt_device;
- else if (oss_cfg->device != NULL)
- device = oss_cfg->device;
-
- oss_data->fd = open(device, O_WRONLY);
-
- if (oss_data->fd == -1)
- {
- ERROR_MSG;
- goto FAILED;
- }
+ CHECK_NOISY(oss_data->fd = open_device);
format = oss_convert_aud_format(aud_format);
if (!set_format(format, rate, channels))
goto FAILED;
- /*gint policy = 8;
- ioctl(oss_data->fd, SNDCTL_DSP_POLICY, &policy);*/
-
- if (ioctl(oss_data->fd, SNDCTL_DSP_GETOSPACE, &oss_buffer_info) == -1)
- DEBUG_MSG;
+ CHECK_NOISY(ioctl, oss_data->fd, SNDCTL_DSP_GETOSPACE, &buf_info);
AUDDBG("Buffer information, fragstotal: %d, fragsize: %d, bytes: %d.\n",
- oss_buffer_info.fragstotal,
- oss_buffer_info.fragsize,
- oss_buffer_info.bytes);
+ buf_info.fragstotal,
+ buf_info.fragsize,
+ buf_info.bytes);
oss_time = 0;
oss_paused = FALSE;
oss_paused_time = 0;
- oss_delay = oss_bytes_to_frames(oss_buffer_info.fragstotal * oss_buffer_info.fragsize) * 1000 / oss_data->rate;
+ oss_delay = oss_bytes_to_frames(buf_info.fragstotal * buf_info.fragsize) * 1000 / oss_data->rate;
oss_ioctl_vol = TRUE;
AUDDBG("Internal OSS buffer size: %dms.\n", oss_delay);
- if (oss_cfg->save_volume)
+ if (aud_get_bool("oss4", "save_volume"))
{
- vol_right = (oss_cfg->volume & 0xFF00) >> 8;
- vol_left = (oss_cfg->volume & 0x00FF);
-
+ vol_right = (aud_get_int("oss4", "volume") & 0xFF00) >> 8;
+ vol_left = (aud_get_int("oss4", "volume") & 0x00FF);
oss_set_volume(vol_left, vol_right);
}
return 1;
- FAILED:
- close(oss_data->fd);
- oss_data->fd = -1;
- return 0;
+FAILED:
+ close_device();
+ return 0;
}
void oss_close_audio(void)
{
AUDDBG ("Closing audio.\n");
- if (ioctl(oss_data->fd, SNDCTL_DSP_HALT_OUTPUT, NULL) == -1)
- DEBUG_MSG;
-
- if (oss_data->fd != -1)
- close(oss_data->fd);
- oss_data->fd = -1;
+ close_device();
}
void oss_write_audio(void *data, gint length)
{
gint written = 0, start = 0;
- if (oss_paused)
- return;
-
- while (1)
+ while (length > 0)
{
- if (oss_paused)
- break;
-
written = write(oss_data->fd, data + start, length);
if (written < 0)
{
- ERROR_MSG;
-
- if (ioctl(oss_data->fd, SNDCTL_DSP_SYNC, NULL) == -1)
- DEBUG_MSG;
-
- break;
+ DESCRIBE_ERROR;
+ return;
}
- if (length >= written)
- length -= written;
-
+ length -= written;
start += written;
oss_time += (gint64) oss_bytes_to_frames(written) * 1000000 / oss_data->rate;
-
-#if HARD_DEBUG == 1
- ioctl(oss_data->fd, SNDCTL_DSP_GETOSPACE, &oss_buffer_info);
-
- printf("fragstotal: \t%d\tfragsize: \t%d\tbytes: \t%d\tlength: \t%d\n",
- oss_buffer_info.fragstotal,
- oss_buffer_info.fragsize,
- oss_buffer_info.bytes,
- length);
-#endif
- if (length == 0) break;
}
}
-gint oss_buffer_playing(void)
+void oss_drain(void)
{
- AUDDBG("Buffer playing.\n");
+ AUDDBG("Drain.\n");
- ioctl(oss_data->fd, SNDCTL_DSP_GETOSPACE, &oss_buffer_info);
-
- if ((oss_buffer_info.fragstotal * oss_buffer_info.fragsize) - oss_buffer_info.bytes > oss_buffer_info.fragsize)
- return TRUE;
-
- return FALSE;
+ if (ioctl(oss_data->fd, SNDCTL_DSP_SYNC, NULL) == -1)
+ DESCRIBE_ERROR;
}
gint oss_buffer_free(void)
{
+ audio_buf_info buf_info;
+
if (oss_paused)
return 0;
- ioctl(oss_data->fd, SNDCTL_DSP_GETOSPACE, &oss_buffer_info);
- return oss_buffer_info.bytes;
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_GETOSPACE, &buf_info);
+
+ return MAX(0, buf_info.fragments - 1) * buf_info.fragsize;
+
+FAILED:
+ return 0;
}
void oss_set_written_time(gint time)
@@ -294,83 +254,73 @@ void oss_flush(gint time)
{
AUDDBG("Flush.\n");
- if (ioctl(oss_data->fd, SNDCTL_DSP_HALT_OUTPUT, NULL) == -1)
- DEBUG_MSG;
-
- if (ioctl(oss_data->fd, SNDCTL_DSP_SKIP, NULL) == -1)
- DEBUG_MSG;
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_RESET, NULL);
+FAILED:
oss_time = (gint64) time * 1000;
oss_paused_time = time;
}
-void oss_pause(gshort pause)
+void oss_pause(gboolean pause)
{
AUDDBG("%sause.\n", pause ? "P" : "Unp");
if (pause)
{
- oss_paused = TRUE;
oss_paused_time = real_output_time();
-
- if (ioctl(oss_data->fd, SNDCTL_DSP_SILENCE, NULL) == -1)
- DEBUG_MSG;
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_SILENCE, NULL);
}
else
- {
- oss_paused = FALSE;
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_SKIP, NULL);
- if (ioctl(oss_data->fd, SNDCTL_DSP_SKIP, NULL) == -1)
- DEBUG_MSG;
- }
+FAILED:
+ oss_paused = pause;
}
void oss_get_volume(gint *left, gint *right)
{
+ *left = *right = 0;
+
gint vol;
if (oss_data->fd == -1 || !oss_ioctl_vol)
{
- if (oss_cfg->save_volume)
+ if (aud_get_int("oss4", "save_volume"))
{
- *right = (oss_cfg->volume & 0xFF00) >> 8;
- *left = (oss_cfg->volume & 0x00FF);
+ *right = (aud_get_int("oss4", "volume") & 0xFF00) >> 8;
+ *left = (aud_get_int("oss4", "volume") & 0x00FF);
}
return;
}
- if (ioctl(oss_data->fd, SNDCTL_DSP_GETPLAYVOL, &vol) == -1)
- {
- if (errno == EINVAL)
- oss_ioctl_vol = FALSE;
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_GETPLAYVOL, &vol);
- DEBUG_MSG;
- }
- else
- {
- *right = (vol & 0xFF00) >> 8;
- *left = (vol & 0x00FF);
- oss_cfg->volume = vol;
- }
+ *right = (vol & 0xFF00) >> 8;
+ *left = (vol & 0x00FF);
+ aud_set_int("oss4", "volume", vol);
+
+ return;
+
+FAILED:
+ if (errno == EINVAL)
+ oss_ioctl_vol = FALSE;
}
void oss_set_volume(gint left, gint right)
{
- gint vol;
+ gint vol = (right << 8) | left;
- vol = (right << 8) | left;
-
- if (oss_cfg->save_volume)
- oss_cfg->volume = vol;
+ if (aud_get_int("oss4", "save_volume"))
+ aud_set_int("oss4", "volume", vol);
if (oss_data->fd == -1 || !oss_ioctl_vol)
return;
- if (ioctl(oss_data->fd, SNDCTL_DSP_SETPLAYVOL, &vol) == -1)
- {
- if (errno == EINVAL)
- oss_ioctl_vol = FALSE;
+ CHECK(ioctl, oss_data->fd, SNDCTL_DSP_SETPLAYVOL, &vol);
- DEBUG_MSG;
- }
+ return;
+
+FAILED:
+ if (errno == EINVAL)
+ oss_ioctl_vol = FALSE;
}
diff --git a/src/oss4/oss.h b/src/oss4/oss.h
index 35bd990..ec86d97 100644
--- a/src/oss4/oss.h
+++ b/src/oss4/oss.h
@@ -1,20 +1,20 @@
/*
- * OSS4 Output Plugin for Audacious
- * Copyright 2010 Michał Lipski <tallica@o2.pl>
+ * oss.h
+ * Copyright 2010-2011 Michał Lipski <tallica@o2.pl>
*
- * 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 3 of the License, or
- * (at your option) any later version.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
*
- * 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.
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
*
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
*/
#ifndef AUDACIOUS_OSS4_H
@@ -22,9 +22,12 @@
#include "config.h"
+#include <unistd.h>
+#include <fcntl.h>
#include <stdio.h>
#include <glib.h>
#include <errno.h>
+#include <string.h>
#include <sys/ioctl.h>
#ifdef HAVE_SYS_SOUNDCARD_H
@@ -36,33 +39,47 @@
#include <audacious/plugin.h>
#include <audacious/i18n.h>
#include <audacious/debug.h>
+#include <audacious/misc.h>
-#define ERROR(...) fprintf(stderr, "OSS4: " __VA_ARGS__)
+#define ERROR(...) \
+do { \
+ fprintf(stderr, "OSS4 %s:%d [%s]: ", __FILE__, __LINE__, __FUNCTION__); \
+ fprintf(stderr, __VA_ARGS__); \
+} while (0)
-#ifdef DEBUG
- #define DEBUG_MSG \
- do { \
- oss_message = oss_describe_error(); \
- AUDDBG("%s", oss_message); \
- g_free(oss_message); \
- } while (0)
-#else
- #define DEBUG_MSG do { } while (0)
-#endif
+#define ERROR_NOISY(...) \
+do { \
+ oss_error(__VA_ARGS__); \
+ ERROR(__VA_ARGS__); \
+} while (0) \
+
+#define DESCRIBE_ERROR ERROR("%s\n", oss_describe_error())
+#define DESCRIBE_ERROR_NOISY ERROR_NOISY("%s\n", oss_describe_error())
-#define ERROR_MSG \
+#define CHECK(function, ...) \
do { \
- oss_message = oss_describe_error(); \
- ERROR("%s", oss_message); \
- g_free(oss_message); \
+ int error = function(__VA_ARGS__); \
+ if (error < 0) { \
+ DESCRIBE_ERROR; \
+ goto FAILED; \
+ } \
} while (0)
-#define SHOW_ERROR_MSG \
+#define CHECK_NOISY(function, ...) \
do { \
- oss_message = oss_describe_error(); \
- oss_show_error(oss_message); \
- ERROR("%s", oss_message); \
- g_free(oss_message); \
+ int error = function(__VA_ARGS__); \
+ if (error < 0) { \
+ DESCRIBE_ERROR_NOISY; \
+ goto FAILED; \
+ } \
+} while (0)
+
+#define CHECK_VAL(value, function, ...) \
+do { \
+ if (!(value)) { \
+ function(__VA_ARGS__); \
+ goto FAILED; \
+ } \
} while (0)
#define DEFAULT_MIXER "/dev/mixer"
@@ -77,39 +94,25 @@ typedef struct
gint bits_per_sample;
} oss_data_t;
-typedef struct
-{
- gchar *device;
- gboolean use_alt_device;
- gchar *alt_device;
- gint volume;
- gboolean save_volume;
- gboolean cookedmode;
-} oss_cfg_t;
-
extern oss_data_t *oss_data;
-extern oss_cfg_t *oss_cfg;
-extern gchar *oss_message;
/* oss.c */
-OutputPluginInitStatus oss_init(void);
+gboolean oss_init(void);
void oss_cleanup(void);
gint oss_open_audio(gint aud_format, gint rate, gint channels);
void oss_close_audio(void);
void oss_write_audio(void *data, gint length);
-gint oss_buffer_playing(void);
+void oss_drain(void);
gint oss_buffer_free(void);
void oss_set_written_time(gint time);
gint oss_written_time(void);
gint oss_output_time(void);
void oss_flush(gint time);
-void oss_pause(gshort pause);
+void oss_pause(gboolean pause);
void oss_get_volume(gint *left, gint *right);
void oss_set_volume(gint left, gint right);
/* configure.c */
-void oss_config_load(void);
-void oss_config_save(void);
void oss_configure(void);
/* plugin.c */
@@ -123,7 +126,9 @@ gint oss_frames_to_bytes(gint frames);
gint oss_bytes_to_frames(gint bytes);
gint oss_calc_bitrate(void);
gchar *oss_describe_error(void);
+gint oss_probe_for_adev(oss_sysinfo *sysinfo);
gboolean oss_hardware_present(void);
-void oss_show_error(const gchar *message);
+gint oss_show_error(gpointer message);
+void oss_error(const gchar *format, ...);
#endif
diff --git a/src/oss4/plugin.c b/src/oss4/plugin.c
index 63999de..347ca10 100644
--- a/src/oss4/plugin.c
+++ b/src/oss4/plugin.c
@@ -1,20 +1,20 @@
/*
- * OSS4 Output Plugin for Audacious
- * Copyright 2010 Michał Lipski <tallica@o2.pl>
+ * plugin.c
+ * Copyright 2010-2011 Michał Lipski <tallica@o2.pl>
*
- * 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 3 of the License, or
- * (at your option) any later version.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
*
- * 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.
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
*
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
*/
#include "oss.h"
@@ -22,15 +22,16 @@
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
-static OutputPlugin plugin = {
- .description = "OSS4 Output Plugin",
- .probe_priority = 1,
+AUD_OUTPUT_PLUGIN
+(
+ .name = "OSS4",
+ .probe_priority = 5,
.init = oss_init,
.cleanup = oss_cleanup,
.open_audio = oss_open_audio,
.close_audio = oss_close_audio,
.write_audio = oss_write_audio,
- .buffer_playing = oss_buffer_playing,
+ .drain = oss_drain,
.buffer_free = oss_buffer_free,
.set_written_time = oss_set_written_time,
.written_time = oss_written_time,
@@ -41,29 +42,25 @@ static OutputPlugin plugin = {
.get_volume = oss_get_volume,
.about = oss_about,
.configure = oss_configure,
-};
-
-static OutputPlugin *list[] = {&plugin, NULL};
-
-SIMPLE_OUTPUT_PLUGIN(oss4, list);
+)
void oss_about(void)
{
static GtkWidget *dialog;
audgui_simple_message(&dialog, GTK_MESSAGE_INFO, _("About OSS4 Plugin"),
- _("OSS4 Output Plugin for Audacious\n"
- "Copyright 2010 Michał Lipski <tallica@o2.pl>\n\n"
+ "OSS4 Output Plugin for Audacious\n"
+ "Copyright 2010-2011 Michał Lipski <tallica@o2.pl>\n\n"
"I would like to thank people on #audacious, especially Tony Vroon and "
"John Lindgren and of course the authors of the previous OSS plugin.\n\n"
- "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 3 of the License, or "
- "(at your option) any later version.\n\n"
- "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.\n\n"
- "You should have received a copy of the GNU General Public License "
- "along with this program. If not, see <http://www.gnu.org/licenses/>.\n"));
+ "Redistribution and use in source and binary forms, with or without "
+ "modification, are permitted provided that the following conditions are met:\n\n"
+ "1. Redistributions of source code must retain the above copyright notice, "
+ "this list of conditions, and the following disclaimer.\n\n"
+ "2. Redistributions in binary form must reproduce the above copyright notice, "
+ "this list of conditions, and the following disclaimer in the documentation "
+ "provided with the distribution.\n\n"
+ "This software is provided \"as is\" and without any warranty, express or "
+ "implied. In no event shall the authors be liable for any damages arising from "
+ "the use of this software.");
}
diff --git a/src/oss4/utils.c b/src/oss4/utils.c
index 71830b8..f0d305d 100644
--- a/src/oss4/utils.c
+++ b/src/oss4/utils.c
@@ -1,20 +1,20 @@
/*
- * OSS4 Output Plugin for Audacious
- * Copyright 2010 Michał Lipski <tallica@o2.pl>
+ * utils.c
+ * Copyright 2010-2011 Michał Lipski <tallica@o2.pl>
*
- * 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 3 of the License, or
- * (at your option) any later version.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
*
- * 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.
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
*
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
*/
#include "oss.h"
@@ -30,7 +30,9 @@ gchar *oss_format_to_text(gint format)
}
table[] =
{
+#ifdef AFMT_FLOAT
{AFMT_FLOAT, "AFMT_FLOAT"},
+#endif
{AFMT_S8, "AFMT_S8"},
{AFMT_U8, "AFMT_U8"},
{AFMT_S16_LE, "AFMT_S16_LE"},
@@ -65,7 +67,9 @@ gint oss_convert_aud_format(gint aud_format)
}
table[] =
{
+#ifdef AFMT_FLOAT
{FMT_FLOAT, AFMT_FLOAT},
+#endif
{FMT_S8, AFMT_S8},
{FMT_U8, AFMT_U8},
{FMT_S16_LE, AFMT_S16_LE},
@@ -113,9 +117,11 @@ gint oss_format_to_bits(gint format)
case AFMT_S32_BE:
bits = 32;
break;
+#ifdef AFMT_FLOAT
case AFMT_FLOAT:
bits = sizeof(float) * 8;
break;
+#endif
default:
bits = 8;
}
@@ -130,7 +136,7 @@ gint oss_frames_to_bytes(gint frames)
gint oss_bytes_to_frames(gint bytes)
{
- return bytes * 8 / oss_data->channels / oss_data->bits_per_sample;
+ return bytes * 8 / oss_data->channels / oss_data->bits_per_sample;
}
gint oss_calc_bitrate(void)
@@ -147,26 +153,38 @@ gchar *oss_describe_error(void)
}
table[] =
{
- {EINVAL, "The ioctl call is not supported by current OSS version.\n"},
- {EACCES, "You do not have permissions to access the device.\n"},
- {EBUSY, "The device is busy. There is some other application using it.\n"},
- {ENXIO, "OSS has not detected any supported sound hardware in your system.\n"},
+ {EINVAL, "The ioctl call is not supported by current OSS version."},
+ {EACCES, "You do not have permissions to access the device."},
+ {EBUSY, "The device is busy. There is some other application using it."},
+ {ENXIO, "OSS has not detected any supported sound hardware in your system."},
{ENODEV, "The device file was found in /dev but OSS is not loaded. You need to "
- "load it by executing the soundon command.\n"},
+ "load it by executing the soundon command."},
{ENOSPC, "Your system cannot allocate memory for the device buffers. Reboot your "
- "machine and try again.\n"},
+ "machine and try again."},
{ENOENT, "The device file is missing from /dev. Perhaps you have not installed "
- "and started Open Sound System yet.\n"},
+ "and started Open Sound System yet."},
};
gint count;
for (count = 0; count < G_N_ELEMENTS(table); count++)
{
if (table[count].error == errno)
- return g_strdup(table[count].text);
+ return table[count].text;
}
- return g_strdup_printf("Unknown OSS error (%d)\n", errno);
+ return strerror(errno);
+}
+
+gint oss_probe_for_adev(oss_sysinfo *sysinfo)
+{
+ gint num;
+ if ((num = sysinfo->numaudios) < 1)
+ {
+ errno = ENXIO;
+ return -1;
+ }
+
+ return num;
}
gboolean oss_hardware_present(void)
@@ -174,32 +192,36 @@ gboolean oss_hardware_present(void)
gint mixerfd;
oss_sysinfo sysinfo;
- if ((mixerfd = open(DEFAULT_MIXER, O_RDWR, 0)) == -1)
- goto FAILED;
+ CHECK_NOISY(mixerfd = open, DEFAULT_MIXER, O_RDWR, 0);
+ CHECK(ioctl, mixerfd, SNDCTL_SYSINFO, &sysinfo);
+ CHECK_NOISY(oss_probe_for_adev, &sysinfo);
- if (ioctl(mixerfd, SNDCTL_SYSINFO, &sysinfo) == -1)
- goto FAILED;
+ close(mixerfd);
+ return TRUE;
- if (sysinfo.numaudios > 0)
- {
- close(mixerfd);
- return TRUE;
- }
- else
- {
- errno = ENXIO;
- goto FAILED;
- }
-
- FAILED:
- SHOW_ERROR_MSG;
- close(mixerfd);
- return FALSE;
+FAILED:
+ close(mixerfd);
+ return FALSE;
}
-void oss_show_error(const gchar *message)
+gint oss_show_error(gpointer message)
{
static GtkWidget *dialog = NULL;
audgui_simple_message (&dialog, GTK_MESSAGE_ERROR, _("OSS4 error"), message);
+ g_free(message);
+
+ return 0;
+}
+
+void oss_error(const gchar * format, ...)
+{
+ va_list args;
+ gchar *message;
+
+ va_start(args, format);
+ message = g_strdup_vprintf(format, args);
+ va_end(args);
+
+ g_timeout_add(0, oss_show_error, message);
}
diff --git a/src/paranormal/Makefile b/src/paranormal/Makefile
deleted file mode 100644
index 08e4d11..0000000
--- a/src/paranormal/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-PLUGIN = paranormal${PLUGIN_SUFFIX}
-
-SRCS = actuators.c \
- beatdetect.c \
- builtins.c \
- cfg.c \
- cmaps.c \
- containers.c \
- drawing.c \
- freq.c \
- general.c \
- misc.c \
- paranormal.c \
- plugin.c \
- presets.c \
- wave.c \
- xform.c \
- libcalc/dict.c \
- libcalc/execute.c \
- libcalc/function.c \
- libcalc/parser.c \
- libcalc/storage.c
-
-SUBDIRS = presets
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${XML_CFLAGS} ${SDL_CFLAGS} -I../.. -I.
-LIBS += -lm ${GTK_LIBS} ${GLIB_LIBS} ${XML_LIBS} ${SDL_LIBS}
diff --git a/src/paranormal/TODO b/src/paranormal/TODO
deleted file mode 100644
index fe47eda..0000000
--- a/src/paranormal/TODO
+++ /dev/null
@@ -1,13 +0,0 @@
-More immediate points:
-
-- blend surface
-
-- container_stepped
- executes <step> amount of instructions.. step increases or decreases
- on beat
-
-- container_repeat
- executes the child instructions <step> amount of times.. step
- increases or decreases on beat
-
-
diff --git a/src/paranormal/actuators.c b/src/paranormal/actuators.c
deleted file mode 100644
index 7e03194..0000000
--- a/src/paranormal/actuators.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <glib.h>
-
-#include "actuators.h"
-//#include "containers.h"
-
-/* FIXME: container options override containees - fix this? */
-/* FIXME: add actuator groups (by a group name string) */
-
-/* FIXME: add support for copying containers' children (optionally) */
-struct pn_actuator *
-copy_actuator (const struct pn_actuator *a)
-{
- struct pn_actuator *actuator;
- int i;
-
- actuator = g_new (struct pn_actuator, 1);
-
- actuator->desc = a->desc;
-
- /* Make an options table */
- if (actuator->desc->option_descs)
- {
- /* count the options */
- for (i=0; actuator->desc->option_descs[i].name; i++);
-
- actuator->options = g_new (struct pn_actuator_option, i + 1);
- for (i=0; actuator->desc->option_descs[i].name; i++)
- {
- actuator->options[i].desc = &actuator->desc->option_descs[i];
-
- /* copy the default options */
- switch (actuator->desc->option_descs[i].type)
- {
- case OPT_TYPE_INT:
- case OPT_TYPE_COLOR_INDEX:
- case OPT_TYPE_FLOAT:
- case OPT_TYPE_COLOR:
- case OPT_TYPE_BOOLEAN:
- memcpy (&actuator->options[i].val,
- &a->options[i].val,
- sizeof (union actuator_option_val));
- break;
- case OPT_TYPE_STRING:
- actuator->options[i].val.sval = g_strdup(a->options[i].val.sval);
- break;
- default:
- break;
- }
- }
-
- /* the NULL option */
- actuator->options[i].desc = NULL;
- }
- else
- actuator->options = NULL;
-
- if (actuator->desc->init)
- actuator->desc->init (&actuator->data);
-
- return actuator;
-}
-
-struct pn_actuator_desc *
-get_actuator_desc (const char *name)
-{
- int i;
-
- for (i=0; builtin_table[i]; i++)
- if (! g_strcasecmp (name, builtin_table[i]->name) || ! g_strcasecmp(name, builtin_table[i]->dispname))
- break;
-
- /* actuator not found */
- if (! builtin_table[i])
- return NULL;
-
- return builtin_table[i];
-}
-
-struct pn_actuator *
-create_actuator (const char *name)
-{
- int i;
- struct pn_actuator_desc *desc;
- struct pn_actuator *actuator;
-
- /* find the actuatoreration */
- desc = get_actuator_desc (name);
-
- if (! desc)
- return NULL;
-
- actuator = g_new (struct pn_actuator, 1);
- actuator->desc = desc;
-
- /* Make an options table */
- if (actuator->desc->option_descs)
- {
- /* count the options */
- for (i=0; actuator->desc->option_descs[i].name != NULL; i++);
-
- actuator->options = g_new0 (struct pn_actuator_option, i + 1);
- for (i=0; actuator->desc->option_descs[i].name != NULL; i++)
- {
- actuator->options[i].desc = &actuator->desc->option_descs[i];
-
- /* copy the default options */
- switch (actuator->desc->option_descs[i].type)
- {
- case OPT_TYPE_INT:
- case OPT_TYPE_COLOR_INDEX:
- case OPT_TYPE_FLOAT:
- case OPT_TYPE_COLOR:
- case OPT_TYPE_BOOLEAN:
- memcpy (&actuator->options[i].val,
- &actuator->desc->option_descs[i].default_val,
- sizeof (union actuator_option_val));
- break;
- case OPT_TYPE_STRING:
- /* NOTE: It's not realloc'ed so don't free it */
- actuator->options[i].val.sval =
- actuator->desc->option_descs[i].default_val.sval;
- break;
- }
- }
-
- /* the NULL option */
- actuator->options[i].desc = NULL;
- }
- else
- actuator->options = NULL;
-
- if (actuator->desc->init)
- actuator->desc->init (&actuator->data);
-
- return actuator;
-}
-
-void
-destroy_actuator (struct pn_actuator *actuator)
-{
- int i;
-
- if (actuator->desc->cleanup)
- actuator->desc->cleanup (actuator->data);
-
- /* find any option val's that need to be freed */
- if (actuator->options)
- for (i=0; actuator->options[i].desc; i++)
- switch (actuator->options[i].desc->type)
- {
- case OPT_TYPE_INT:
- case OPT_TYPE_FLOAT:
- case OPT_TYPE_COLOR:
- case OPT_TYPE_COLOR_INDEX:
- case OPT_TYPE_BOOLEAN:
- break;
- case OPT_TYPE_STRING:
- if (actuator->options[i].val.sval
- != actuator->options[i].desc->default_val.sval)
- g_free ((char *)actuator->options[i].val.sval);
- }
-
- g_free (actuator->options);
- g_free (actuator);
-}
-
-void
-exec_actuator (struct pn_actuator *actuator)
-{
- g_assert (actuator);
- g_assert (actuator->desc);
- g_assert (actuator->desc->exec);
- actuator->desc->exec (actuator->options, actuator->data);
-}
-
diff --git a/src/paranormal/actuators.h b/src/paranormal/actuators.h
deleted file mode 100644
index 1146186..0000000
--- a/src/paranormal/actuators.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: rename actuators to pn_actuators */
-/* FIXME: add a color type to the OPT_TYPE's */
-
-#ifndef _ACTUATORS_H
-#define _ACTUATORS_H
-
-#include <glib.h>
-#include <SDL.h>
-
-/* Helper macros for actuator functions */
-#define PN_ACTUATOR_INIT_FUNC(f) ((void (*) (gpointer *data))f)
-#define PN_ACTUATOR_CLEANUP_FUNC(f) ((void (*) (gpointer data))f)
-#define PN_ACTUATOR_EXEC_FUNC(f) \
-((void (*) (const struct pn_actuator_option *opts, gpointer data))f)
-
-struct pn_color
-{
- guchar r, g, b;
- guchar spluzz; /* gotta look like an SDL_Color */
-};
-
-
-union actuator_option_val
-{
- int ival;
- float fval;
- const char *sval;
- struct pn_color cval;
- gboolean bval;
-};
-
-/* A actuator's option description */
-struct pn_actuator_option_desc
-{
- const char *name;
- const char *doc; /* option documentation */
- enum
- {
- OPT_TYPE_INT = 0,
- OPT_TYPE_FLOAT = 1,
- OPT_TYPE_STRING = 2,
- OPT_TYPE_COLOR = 3,
- OPT_TYPE_COLOR_INDEX = 4, /* uses ival */
- OPT_TYPE_BOOLEAN = 5
- } type;
- union actuator_option_val default_val;
-};
-
-/* The actual option instance */
-struct pn_actuator_option
-{
- const struct pn_actuator_option_desc *desc;
- union actuator_option_val val;
-};
-
-/* An operation's description */
-struct pn_actuator_desc
-{
- const char *name; /* e.g. "container_simple" */
- const char *dispname; /* e.g. "Simple Container" */
- const char *doc; /* documentation txt */
- const enum
- {
- ACTUATOR_FLAG_CONTAINER = 1<<0
- } flags;
-
- /* A null terminating (ie a actuator_option_desc == {0,...,0})
- array - OPTIONAL (optional fields can be NULL) */
- const struct pn_actuator_option_desc *option_descs;
-
- /* Init function - data points to the actuator.data - OPTIONAL */
- void (*init) (gpointer *data);
-
- /* Cleanup actuatortion - OPTIONAL */
- void (*cleanup) (gpointer data);
-
- /* Execute actuatortion - REQUIRED (duh!) */
- void (*exec) (const struct pn_actuator_option *opts, gpointer data);
-};
-
-/* An actual operation instance */
-struct pn_actuator
-{
- const struct pn_actuator_desc *desc;
- struct pn_actuator_option *options;
- gpointer data;
-};
-
-/* The array containing all operations (see builtins.c) */
-extern struct pn_actuator_desc *builtin_table[];
-
-/* functions for actuators */
-struct pn_actuator_desc *get_actuator_desc (const char *name);
-struct pn_actuator *copy_actuator (const struct pn_actuator *a);
-struct pn_actuator *create_actuator (const char *name);
-void destroy_actuator (struct pn_actuator *actuator);
-void exec_actuator (struct pn_actuator *actuator);
-
-#endif /* _ACTUATORS_H */
diff --git a/src/paranormal/beatdetect.c b/src/paranormal/beatdetect.c
deleted file mode 100644
index 86a6224..0000000
--- a/src/paranormal/beatdetect.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "paranormal.h"
-
-/*
- * This algorithm is by Janusz Gregorcyzk, the implementation is
- * mine, however.
- *
- * -- nenolod
- */
-int
-pn_is_new_beat(void)
-{
- gint i;
- gint total = 0;
- gboolean ret = FALSE;
- static gint previous;
-
- for (i = 1; i < 512; i++)
- {
- total += abs (pn_sound_data->pcm_data[0][i] -
- pn_sound_data->pcm_data[0][i - 1]);
- }
-
- total /= 512;
-
- ret = (total > (2 * previous));
-
- previous = total;
-
- return ret;
-}
diff --git a/src/paranormal/builtins.c b/src/paranormal/builtins.c
deleted file mode 100644
index cbc5143..0000000
--- a/src/paranormal/builtins.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include "actuators.h"
-
-#define DECLARE_ACTUATOR(a) extern struct pn_actuator_desc builtin_##a;
-
-/* **************** containers **************** */
-
-DECLARE_ACTUATOR (container_simple);
-DECLARE_ACTUATOR (container_once);
-DECLARE_ACTUATOR (container_cycle);
-DECLARE_ACTUATOR (container_onbeat);
-
-/* **************** cmaps **************** */
-
-DECLARE_ACTUATOR (cmap_bwgradient);
-DECLARE_ACTUATOR (cmap_gradient);
-DECLARE_ACTUATOR (cmap_dynamic);
-
-/* **************** freq **************** */
-DECLARE_ACTUATOR (freq_dots);
-DECLARE_ACTUATOR (freq_drops);
-
-/* **************** general **************** */
-DECLARE_ACTUATOR (general_fade);
-DECLARE_ACTUATOR (general_blur);
-DECLARE_ACTUATOR (general_mosaic);
-DECLARE_ACTUATOR (general_clear);
-DECLARE_ACTUATOR (general_noop);
-DECLARE_ACTUATOR (general_invert);
-DECLARE_ACTUATOR (general_replace);
-DECLARE_ACTUATOR (general_swap);
-DECLARE_ACTUATOR (general_copy);
-DECLARE_ACTUATOR (general_flip);
-DECLARE_ACTUATOR (general_evaluate);
-
-/* **************** misc **************** */
-DECLARE_ACTUATOR (misc_floater);
-
-/* **************** wave **************** */
-DECLARE_ACTUATOR (wave_horizontal);
-DECLARE_ACTUATOR (wave_vertical);
-DECLARE_ACTUATOR (wave_normalize);
-DECLARE_ACTUATOR (wave_smooth);
-DECLARE_ACTUATOR (wave_radial);
-DECLARE_ACTUATOR (wave_scope);
-
-/* **************** xform **************** */
-DECLARE_ACTUATOR (xform_spin);
-DECLARE_ACTUATOR (xform_ripple);
-DECLARE_ACTUATOR (xform_bump_spin);
-DECLARE_ACTUATOR (xform_halfrender);
-DECLARE_ACTUATOR (xform_movement);
-DECLARE_ACTUATOR (xform_dynmovement);
-
-/* **************** builtin_table **************** */
-struct pn_actuator_desc *builtin_table[] =
-{
- /* **************** containers **************** */
- &builtin_container_simple,
- &builtin_container_once,
- &builtin_container_cycle,
- &builtin_container_onbeat,
-
- /* **************** cmaps **************** */
- &builtin_cmap_bwgradient,
- &builtin_cmap_gradient,
- &builtin_cmap_dynamic,
- /* **************** freq **************** */
- &builtin_freq_dots,
- &builtin_freq_drops,
- /* **************** general **************** */
- &builtin_general_fade,
- &builtin_general_blur,
- &builtin_general_mosaic,
- &builtin_general_clear,
- &builtin_general_noop,
- &builtin_general_invert,
- &builtin_general_replace,
- &builtin_general_swap,
- &builtin_general_copy,
- &builtin_general_flip,
- &builtin_general_evaluate,
- /* **************** misc **************** */
- &builtin_misc_floater,
- /* **************** wave **************** */
- &builtin_wave_horizontal,
- &builtin_wave_vertical,
- &builtin_wave_normalize,
- &builtin_wave_smooth,
- &builtin_wave_radial,
- &builtin_wave_scope,
- /* **************** xform **************** */
- &builtin_xform_spin,
- &builtin_xform_ripple,
- &builtin_xform_bump_spin,
- &builtin_xform_halfrender,
- &builtin_xform_movement,
- &builtin_xform_dynmovement,
- /* **************** the end! **************** */
- NULL
-};
diff --git a/src/paranormal/cfg.c b/src/paranormal/cfg.c
deleted file mode 100644
index 9e271dc..0000000
--- a/src/paranormal/cfg.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: prevent the user from dragging something above the root
- actuator */
-
-#include <config.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <math.h>
-
-#include <audacious/configdb.h>
-#include <audacious/plugin.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "containers.h"
-#include "presets.h"
-
-/* DON'T CALL pn_fatal_error () IN HERE!!! */
-
-/* Actuator page stuffs */
-static GtkWidget *cfg_dialog, *actuator_tree, *option_frame, *actuator_option_table;
-static GtkWidget *actuator_add_opmenu, *actuator_add_button, *actuator_remove_button;
-static GtkCTreeNode *selected_actuator_node;
-static GtkTooltips *actuator_tooltips;
-
-/* This is used so that actuator_row_data_destroyed_cb won't free
- the actuator associated w/ the node since we're going to be using it */
-gboolean destroy_row_data = TRUE;
-
-static void
-actuator_row_data_destroyed_cb (struct pn_actuator *a)
-{
- if (a && destroy_row_data)
- destroy_actuator (a);
-}
-
-static void
-add_actuator (struct pn_actuator *a, GtkCTreeNode *parent, gboolean copy)
-{
- GtkCTreeNode *node;
- GSList *l;
-
- g_assert (cfg_dialog);
- g_assert (actuator_tree);
- g_assert (actuator_option_table);
-
- node = gtk_ctree_insert_node (GTK_CTREE (actuator_tree), parent,
- NULL, (gchar**)&a->desc->dispname, 0,
- NULL, NULL, NULL, NULL,
- a->desc->flags & ACTUATOR_FLAG_CONTAINER
- ? FALSE : TRUE,
- TRUE);
-
- if (a->desc->flags & ACTUATOR_FLAG_CONTAINER)
- for (l=*(GSList **)a->data; l; l = l->next)
- {
- add_actuator (l->data, node, copy);
- }
-
- if (copy)
- a = copy_actuator (a);
- else if (a->desc->flags & ACTUATOR_FLAG_CONTAINER)
- container_unlink_actuators (a);
-
- gtk_ctree_node_set_row_data_full (GTK_CTREE (actuator_tree), node, a,
- ((GtkDestroyNotify) actuator_row_data_destroyed_cb));
-}
-
-static guchar
-gdk_colour_to_paranormal_colour(gint16 colour)
-{
- return (guchar) (colour / 255);
-}
-
-static gint16
-paranormal_colour_to_gdk_colour(guchar colour)
-{
- return (gint16) (colour * 255);
-}
-
-static void
-int_changed_cb (GtkSpinButton *sb, int *i)
-{
- *i = gtk_spin_button_get_value_as_int (sb);
-}
-
-static void
-float_changed_cb (GtkSpinButton *sb, float *f)
-{
- *f = gtk_spin_button_get_value_as_float (sb);
-}
-
-static void
-string_changed_cb (GtkEditable *t, char **s)
-{
- if (*s != gtk_object_get_data (GTK_OBJECT (t), "DEFAULT_OP_STRING"))
- g_free (*s);
-
- *s = gtk_editable_get_chars (t, 0, -1);
-}
-
-static void
-color_changed_cb (GtkColorButton *cb, struct pn_color *c)
-{
- GdkColor colour;
-
- gtk_color_button_get_color(cb, &colour);
-
- c->r = gdk_colour_to_paranormal_colour(colour.red);
- c->g = gdk_colour_to_paranormal_colour(colour.green);
- c->b = gdk_colour_to_paranormal_colour(colour.blue);
-}
-
-static void
-boolean_changed_cb (GtkToggleButton *tb, gboolean *b)
-{
- *b = gtk_toggle_button_get_active (tb);
-}
-
-static void
-row_select_cb (GtkCTree *ctree, GtkCTreeNode *node,
- gint column, gpointer data)
-{
- struct pn_actuator *a;
- int opt_count = 0, i, j;
- GtkWidget *w;
- GtkObject *adj;
-
- a = (struct pn_actuator *)gtk_ctree_node_get_row_data (ctree, node);
-
- /* count the actuator's options (plus one) */
- if (a->desc->option_descs)
- while (a->desc->option_descs[opt_count++].name);
- else
- opt_count = 1;
-
- gtk_table_resize (GTK_TABLE (actuator_option_table), opt_count, 2);
-
- /* Actuator name */
- gtk_frame_set_label (GTK_FRAME (option_frame), a->desc->dispname);
-
- /* Actuator description */
- w = gtk_label_new (a->desc->doc);
- gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
- gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
- gtk_misc_set_alignment (GTK_MISC (w), 0, .5);
- gtk_widget_show (w);
- gtk_table_attach (GTK_TABLE (actuator_option_table), w, 0, 2, 0, 1,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
-
- /* now add the options */
- for (i=1, j=0; i<opt_count; j++, i++)
- {
- w = gtk_label_new (a->desc->option_descs[j].name);
- gtk_widget_show (w);
- gtk_table_attach (GTK_TABLE (actuator_option_table), w,
- 0, 1, i, i+1,
- GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
- switch (a->desc->option_descs[j].type)
- {
- case OPT_TYPE_INT:
- adj = gtk_adjustment_new (a->options[j].val.ival,
- G_MININT, G_MAXINT,
- 1, 2, 0);
- w = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1.0, 0);
- gtk_signal_connect (GTK_OBJECT (w), "changed",
- GTK_SIGNAL_FUNC (int_changed_cb),
- &a->options[j].val.ival);
- break;
- case OPT_TYPE_FLOAT:
- adj = gtk_adjustment_new (a->options[j].val.fval,
- -G_MAXFLOAT, G_MAXFLOAT,
- 1, 2, 0);
- w = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1.0, 5);
- gtk_signal_connect (GTK_OBJECT (w), "changed",
- GTK_SIGNAL_FUNC (float_changed_cb),
- &a->options[j].val.fval);
- break;
- case OPT_TYPE_STRING:
- w = gtk_entry_new ();
- gtk_widget_show (w);
- gtk_entry_set_text (GTK_ENTRY (w), a->options[j].val.sval);
- gtk_object_set_data (GTK_OBJECT (w), "DEFAULT_OP_STRING",
- (gpointer)a->desc->option_descs[j].default_val.sval);
- gtk_signal_connect (GTK_OBJECT (w), "changed",
- GTK_SIGNAL_FUNC (string_changed_cb),
- &a->options[j].val.sval);
- break;
- case OPT_TYPE_COLOR:
- {
- /* FIXME: add some color preview */
- GdkColor *colour = g_new0(GdkColor, 1);
-
- colour->red = paranormal_colour_to_gdk_colour(a->options[j].val.cval.r);
- colour->green = paranormal_colour_to_gdk_colour(a->options[j].val.cval.g);
- colour->blue = paranormal_colour_to_gdk_colour(a->options[j].val.cval.b);
-
- w = gtk_color_button_new_with_color(colour);
- g_signal_connect(G_OBJECT (w), "color-set",
- G_CALLBACK (color_changed_cb),
- &a->options[j].val.cval);
- gtk_tooltips_set_tip (actuator_tooltips, GTK_WIDGET(w),
- a->desc->option_descs[j].doc, NULL);
- }
- break;
- case OPT_TYPE_COLOR_INDEX:
- adj = gtk_adjustment_new (a->options[j].val.ival,
- 0, 255,
- 1, 2, 0);
- w = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 1.0, 0);
- gtk_signal_connect (GTK_OBJECT (w), "changed",
- GTK_SIGNAL_FUNC (int_changed_cb),
- &a->options[j].val.ival);
- break;
- case OPT_TYPE_BOOLEAN:
- w = gtk_check_button_new ();
- gtk_widget_show (w);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w),
- a->options[j].val.bval);
- gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (boolean_changed_cb),
- &a->options[j].val.bval);
- break;
- }
- gtk_widget_show (w);
- gtk_tooltips_set_tip (actuator_tooltips, w,
- a->desc->option_descs[j].doc, NULL);
- gtk_table_attach (GTK_TABLE (actuator_option_table), w,
- 1, 2, i, i+1,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL,
- 0,
- 3, 3);
- }
-
- gtk_widget_set_sensitive (actuator_remove_button, TRUE);
- gtk_widget_set_sensitive (actuator_add_button, a->desc->flags & ACTUATOR_FLAG_CONTAINER
- ? TRUE : FALSE);
-
- selected_actuator_node = node;
-}
-
-static void
-table_remove_all_cb (GtkWidget *widget, gpointer data)
-{
- gtk_container_remove (GTK_CONTAINER (actuator_option_table),
- widget);
-}
-
-static void
-row_unselect_cb (GtkCTree *ctree, GList *node, gint column,
- gpointer user_data)
-{
- gtk_frame_set_label (GTK_FRAME (option_frame), NULL);
-
- gtk_container_foreach (GTK_CONTAINER (actuator_option_table),
- table_remove_all_cb, NULL);
-
- /* Can't remove something if nothing's selected */
- gtk_widget_set_sensitive (actuator_remove_button, FALSE);
-
- selected_actuator_node = NULL;
-}
-
-static void
-add_actuator_cb (GtkButton *button, gpointer data)
-{
- char *actuator_name;
- struct pn_actuator *a;
-
- gtk_label_get (GTK_LABEL (GTK_BIN (actuator_add_opmenu)->child),
- &actuator_name);
-
- a = create_actuator (actuator_name);
- g_assert (a);
-
- add_actuator (a, selected_actuator_node, FALSE);
-}
-
-static void
-remove_actuator_cb (GtkButton *button, gpointer data)
-{
- if (selected_actuator_node)
- gtk_ctree_remove_node (GTK_CTREE (actuator_tree),
- selected_actuator_node);
-}
-
-/* Connect a node to its parent and replace the row data with
- a copy of the node */
-static void
-connect_actuators_cb (GtkCTree *ctree, GtkCTreeNode *node,
- struct pn_actuator **root_ptr)
-{
- struct pn_actuator *actuator, *parent, *copy;
-
- actuator = (struct pn_actuator *) gtk_ctree_node_get_row_data (ctree, node);
- if (GTK_CTREE_ROW (node)->parent)
- {
- /* Connect it to the parent */
- parent = (struct pn_actuator *)
- gtk_ctree_node_get_row_data (ctree, GTK_CTREE_ROW (node)->parent);
- container_add_actuator (parent, actuator);
- }
- else
- /* This is the root node; still gotta copy it, but we need to
- save the original to *root_ptr */
- *root_ptr = actuator;
-
- /* we don't want our copy getting destroyed */
- destroy_row_data = FALSE;
-
- copy = copy_actuator (actuator);
- gtk_ctree_node_set_row_data_full (ctree, node, copy,
- ((GtkDestroyNotify)actuator_row_data_destroyed_cb));
-
- /* Ok, now you can destroy it */
- destroy_row_data = TRUE;
-}
-
-/* Extract (and connect) the actuators in the tree */
-static struct pn_actuator *
-extract_actuator (void)
-{
- GtkCTreeNode *root, *selected;
- struct pn_actuator *root_actuator = NULL;
-
- root = gtk_ctree_node_nth (GTK_CTREE (actuator_tree), 0);
- if (root)
- gtk_ctree_post_recursive (GTK_CTREE (actuator_tree), root,
- GTK_CTREE_FUNC (connect_actuators_cb),
- &root_actuator);
-
- if (selected_actuator_node)
- {
- selected = selected_actuator_node;
- gtk_ctree_unselect (GTK_CTREE (actuator_tree), GTK_CTREE_NODE (selected));
- gtk_ctree_select (GTK_CTREE (actuator_tree), GTK_CTREE_NODE (selected));
- }
-
- return root_actuator;
-}
-
-/* If selector != NULL, then it's 'OK', otherwise it's 'Cancel' */
-static void
-load_sel_cb (GtkButton *button, GtkFileSelection *selector)
-{
- if (selector)
- {
- static const char *fname;
- struct pn_actuator *a;
- GtkCTreeNode *root;
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
- fname = (char *) gtk_file_selection_get_filename (selector);
- a = load_preset (fname);
- aud_cfg_db_set_string(db, "paranormal", "last_path", (char*)fname);
- aud_cfg_db_close(db);
- if (! a)
- pn_error ("Unable to load file: \"%s\"", fname);
- else
- {
- if ((root = gtk_ctree_node_nth (GTK_CTREE (actuator_tree), 0)))
- gtk_ctree_remove_node (GTK_CTREE (actuator_tree), root);
- add_actuator (a, NULL, FALSE);
- }
- }
-
- gtk_widget_set_sensitive (cfg_dialog, TRUE);
-}
-
-static void
-load_button_cb (GtkButton *button, gpointer data)
-{
- GtkWidget *selector;
- mcs_handle_t *db;
- gchar *last_path;
-
- db = aud_cfg_db_open();
- selector = gtk_file_selection_new ("Load Preset");
- if(aud_cfg_db_get_string(db, "paranormal", "last_path", &last_path)) {
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(selector), last_path);
- }
- aud_cfg_db_close(db);
-
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (selector)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (load_sel_cb), selector);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (selector)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (load_sel_cb), NULL);
-
- gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (selector)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
- (gpointer) selector);
- gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (selector)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
- (gpointer) selector);
-
- gtk_widget_set_sensitive (cfg_dialog, FALSE);
- gtk_widget_show (selector);
-}
-
-static void
-save_sel_cb (GtkButton *button, GtkFileSelection *selector)
-{
- if (selector)
- {
- const char *fname;
- struct pn_actuator *a;
-
- fname = (char *) gtk_file_selection_get_filename (selector);
- a = extract_actuator ();
-
- if (! save_preset (fname, a))
- pn_error ("unable to save preset to file: %s", fname);
- }
-
- gtk_widget_set_sensitive (cfg_dialog, TRUE);
-}
-
-static void
-save_button_cb (GtkButton *button, gpointer data)
-{
- GtkWidget *selector;
-
- selector = gtk_file_selection_new ("Save Preset");
-
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (selector)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (save_sel_cb), selector);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (selector)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (save_sel_cb), NULL);
-
- gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (selector)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
- (gpointer) selector);
- gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (selector)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
- (gpointer) selector);
-
- gtk_widget_set_sensitive (cfg_dialog, FALSE);
- gtk_widget_show (selector);
-}
-
-static void
-apply_settings (void)
-{
- struct pn_rc rc;
-
- rc.actuator = extract_actuator ();
-
- pn_set_rc (&rc);
-}
-
-static void
-apply_button_cb (GtkButton *button, gpointer data)
-{
- apply_settings ();
-}
-
-static void
-ok_button_cb (GtkButton *button, gpointer data)
-{
- apply_settings ();
- gtk_widget_hide (cfg_dialog);
-}
-
-static void
-cancel_button_cb (GtkButton *button, gpointer data)
-{
- gtk_widget_destroy (cfg_dialog);
- cfg_dialog = NULL;
-}
-
-void
-pn_configure (void)
-{
- GtkWidget *notebook, *label, *scrollwindow, *menu, *menuitem;
- GtkWidget *paned, *vbox, *table, *bbox, *button;
- int i;
-
-
- if (! cfg_dialog)
- {
- /* The dialog */
- cfg_dialog = gtk_dialog_new ();
- gtk_window_set_title (GTK_WINDOW (cfg_dialog), "Paranormal Visualization Studio - Editor");
- gtk_widget_set_usize (cfg_dialog, 530, 370);
- gtk_container_border_width (GTK_CONTAINER (cfg_dialog), 8);
- gtk_signal_connect_object (GTK_OBJECT (cfg_dialog), "delete-event",
- GTK_SIGNAL_FUNC (gtk_widget_hide),
- GTK_OBJECT (cfg_dialog));
-
- /* The notebook */
- notebook = gtk_notebook_new ();
- gtk_widget_show (notebook);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_dialog)->vbox), notebook,
- TRUE, TRUE, 0);
-
- /* Actuator page */
- paned = gtk_hpaned_new ();
- gtk_widget_show (paned);
- label = gtk_label_new ("Actuators");
- gtk_widget_show (label);
- gtk_notebook_append_page (GTK_NOTEBOOK (notebook), paned, label);
- vbox = gtk_vbox_new (FALSE, 3);
- gtk_widget_show (vbox);
- gtk_paned_pack1 (GTK_PANED (paned), vbox, TRUE, FALSE);
- scrollwindow = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_show (scrollwindow);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwindow),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_box_pack_start (GTK_BOX (vbox), scrollwindow, TRUE, TRUE, 3);
- actuator_tree = gtk_ctree_new (1, 0);
- gtk_widget_show (actuator_tree);
- gtk_ctree_set_reorderable (GTK_CTREE (actuator_tree), TRUE);
- gtk_signal_connect (GTK_OBJECT (actuator_tree), "tree-select-row",
- GTK_SIGNAL_FUNC (row_select_cb), NULL);
- gtk_signal_connect (GTK_OBJECT (actuator_tree), "tree-unselect-row",
- GTK_SIGNAL_FUNC (row_unselect_cb), NULL);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwindow),
- actuator_tree);
- table = gtk_table_new (3, 2, TRUE);
- gtk_widget_show (table);
- gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 3);
- actuator_add_opmenu = gtk_option_menu_new ();
- gtk_widget_show (actuator_add_opmenu);
- menu = gtk_menu_new ();
- gtk_widget_show (menu);
- for (i=0; builtin_table[i]; i++)
- {
- /* FIXME: Add actuator group support */
- menuitem = gtk_menu_item_new_with_label (builtin_table[i]->dispname);
- gtk_widget_show (menuitem);
- gtk_menu_append (GTK_MENU (menu), menuitem);
- }
- gtk_option_menu_set_menu (GTK_OPTION_MENU (actuator_add_opmenu), menu);
- gtk_table_attach (GTK_TABLE (table), actuator_add_opmenu,
- 0, 2, 0, 1,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
- actuator_add_button = gtk_button_new_from_stock(GTK_STOCK_ADD);
- gtk_widget_show (actuator_add_button);
- gtk_signal_connect (GTK_OBJECT (actuator_add_button), "clicked",
- GTK_SIGNAL_FUNC (add_actuator_cb), NULL);
- gtk_table_attach (GTK_TABLE (table), actuator_add_button,
- 0, 1, 1, 2,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
- actuator_remove_button = gtk_button_new_from_stock(GTK_STOCK_REMOVE);
- gtk_widget_set_sensitive (actuator_remove_button, FALSE);
- gtk_widget_show (actuator_remove_button);
- gtk_signal_connect (GTK_OBJECT (actuator_remove_button), "clicked",
- GTK_SIGNAL_FUNC (remove_actuator_cb), NULL);
- gtk_table_attach (GTK_TABLE (table), actuator_remove_button,
- 1, 2, 1, 2,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
- button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
- gtk_widget_show (button);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (load_button_cb), NULL);
- gtk_table_attach (GTK_TABLE (table), button,
- 0, 1, 2, 3,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
- button = gtk_button_new_from_stock(GTK_STOCK_SAVE);
- gtk_widget_show (button);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (save_button_cb), NULL);
- gtk_table_attach (GTK_TABLE (table), button,
- 1, 2, 2, 3,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0,
- 3, 3);
-
- /* Option table */
- option_frame = gtk_frame_new (NULL);
- gtk_widget_show (option_frame);
- gtk_container_set_border_width (GTK_CONTAINER (option_frame), 3);
- gtk_paned_pack2 (GTK_PANED (paned), option_frame, TRUE, TRUE);
- scrollwindow = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_show (scrollwindow);
- gtk_container_set_border_width (GTK_CONTAINER (scrollwindow), 3);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwindow),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (option_frame), scrollwindow);
- actuator_option_table = gtk_table_new (0, 2, FALSE);
- gtk_widget_show (actuator_option_table);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwindow),
- actuator_option_table);
- gtk_paned_set_position (GTK_PANED (paned), 0);
- actuator_tooltips = gtk_tooltips_new ();
- gtk_tooltips_enable (actuator_tooltips);
-
- /* Build the initial actuator actuator_tree */
- if (pn_rc->actuator)
- {
- add_actuator (pn_rc->actuator, NULL, TRUE);
- gtk_widget_set_sensitive (actuator_add_button, FALSE);
- }
-
- /* OK / Apply / Cancel */
- bbox = gtk_hbutton_box_new ();
- gtk_widget_show (bbox);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing (GTK_BUTTON_BOX (bbox), 8);
- gtk_button_box_set_child_size (GTK_BUTTON_BOX (bbox), 64, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (cfg_dialog)->action_area),
- bbox, FALSE, FALSE, 0);
-
- button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
- gtk_widget_show (button);
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NORMAL);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (cancel_button_cb), NULL);
- gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
-
- button = gtk_button_new_from_stock (GTK_STOCK_APPLY);
- gtk_widget_show (button);
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NORMAL);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (apply_button_cb), NULL);
- gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
-
- button = gtk_button_new_from_stock (GTK_STOCK_OK);
- gtk_widget_show (button);
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NORMAL);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ok_button_cb), NULL);
- gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, FALSE, 0);
- }
-
- gtk_widget_show (cfg_dialog);
- gtk_widget_grab_focus (cfg_dialog);
-}
diff --git a/src/paranormal/cmaps.c b/src/paranormal/cmaps.c
deleted file mode 100644
index 58b7bdb..0000000
--- a/src/paranormal/cmaps.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <glib.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-
-#include "libcalc/calc.h"
-
-#define STD_CMAP_OPTS { "low_index", "The lowest index of the \
-color map that should be altered", OPT_TYPE_COLOR_INDEX, { ival: 0 } },\
-{ "high_index", "The highest index of the color map that should be \
-altered", OPT_TYPE_COLOR_INDEX, { ival: 255 } }
-
-static struct pn_color black = {0, 0, 0};
-static struct pn_color white = {255, 255, 255};
-
-/* **************** cmap generation funcs **************** */
-static void
-cmap_gen_gradient (int step, const struct pn_color *a,
- const struct pn_color *b,
- struct pn_color *c)
-{
- c->r = a->r + step * ((((float)b->r) - ((float)a->r)) / 256.0);
- c->g = a->g + step * ((((float)b->g) - ((float)a->g)) / 256.0);
- c->b = a->b + step * ((((float)b->b) - ((float)a->b)) / 256.0);
-}
-
-/* **************** cmap_gradient **************** */
-static struct pn_actuator_option_desc cmap_gradient_opts[] =
-{
- STD_CMAP_OPTS,
- { "lcolor", "The low color used in the gradient generation",
- OPT_TYPE_COLOR, { cval: {0, 0, 0} } },
- { "hcolor", "The high color used in the gradient generation",
- OPT_TYPE_COLOR, { cval: {0, 0, 0} } },
- { NULL }
-};
-
-static void
-cmap_gradient_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i;
-
- for (i=opts[0].val.ival; i<=opts[1].val.ival; i++)
- cmap_gen_gradient (((i-opts[0].val.ival)<<8)/(opts[1].val.ival
- - opts[0].val.ival),
- &opts[2].val.cval, &opts[3].val.cval,
- &pn_image_data->cmap[i]);
-}
-
-struct pn_actuator_desc builtin_cmap_gradient =
-{
- "cmap_gradient",
- "Normal colourmap",
- "Sets the colormap to a gradient going from <lcolor> to "
- "<hcolor>",
- 0, cmap_gradient_opts,
- NULL, NULL, cmap_gradient_exec
-};
-
-/* **************** cmap_bwgradient **************** */
-static struct pn_actuator_option_desc cmap_bwgradient_opts[] =
-{
- STD_CMAP_OPTS,
- { "color", "The intermediate color to use in the gradient",
- OPT_TYPE_COLOR, { cval: {191, 191, 191} } },
- { NULL }
-};
-
-static void
-cmap_bwgradient_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i;
-
- for (i=opts[0].val.ival; i<128 && i<=opts[1].val.ival; i++)
- cmap_gen_gradient (i<<1, &black, &opts[2].val.cval,
- &pn_image_data->cmap[i]);
-
- for (i=128; i<256 && i<=opts[1].val.ival; i++)
- cmap_gen_gradient ((i-128)<<1, &opts[2].val.cval, &white,
- &pn_image_data->cmap[i]);
-}
-
-struct pn_actuator_desc builtin_cmap_bwgradient =
-{
- "cmap_bwgradient",
- "Value-based colourmap",
- "Sets the colormap to a gradient going from black to "
- "white, via an intermediate color",
- 0, cmap_bwgradient_opts,
- NULL, NULL, cmap_bwgradient_exec
-};
-
-/* **************** cmap_dynamic **************** */
-static struct pn_actuator_option_desc cmap_dynamic_opts[] =
-{
- STD_CMAP_OPTS,
- { "script", "The script to run on each step.",
- OPT_TYPE_STRING, { sval: "red = red + 0.01; blue = blue + 0.01; green = green + 0.01;" } },
- { NULL }
-};
-
-typedef struct {
- expression_t *expr;
- symbol_dict_t *dict;
-} PnDynamicColourmapData;
-
-static void
-cmap_dynamic_init(gpointer *data)
-{
- *data = g_new0(PnDynamicColourmapData, 1);
-}
-
-static void
-cmap_dynamic_cleanup(gpointer data)
-{
- PnDynamicColourmapData *d = (PnDynamicColourmapData *) data;
-
- if (d->expr)
- expr_free(d->expr);
- if (d->dict)
- dict_free(d->dict);
-
- g_free(d);
-}
-
-static void
-cmap_dynamic_exec(const struct pn_actuator_option *opts,
- gpointer data)
-{
- PnDynamicColourmapData *d = (PnDynamicColourmapData *) data;
- gint i;
- gdouble *rf, *bf, *gf, *inf;
- gint rn, bn, gn;
-
- if (!d->dict && !d->expr)
- {
- d->dict = dict_new();
- if (!d->dict)
- return;
-
- d->expr = expr_compile_string(opts[2].val.sval, d->dict);
- if (!d->expr)
- {
- dict_free(d->dict);
- d->dict = NULL;
- return;
- }
- }
-
- rf = dict_variable(d->dict, "red");
- gf = dict_variable(d->dict, "green");
- bf = dict_variable(d->dict, "blue");
- inf = dict_variable(d->dict, "index");
-
- for (i = opts[0].val.ival; i < 255 && i <= opts[1].val.ival; i++)
- {
- *inf = ((gdouble)i / 255.0);
-
- expr_execute(d->expr, d->dict);
-
- /* Convert rf/bf/gf to realworld values. */
- rn = (gdouble)(*rf * 255);
- gn = (gdouble)(*gf * 255);
- bn = (gdouble)(*bf * 255);
-
- pn_image_data->cmap[i].r = rn;
- pn_image_data->cmap[i].g = gn;
- pn_image_data->cmap[i].b = bn;
- }
-}
-
-struct pn_actuator_desc builtin_cmap_dynamic =
-{
- "cmap_dynamic",
- "Dynamic Colourmap",
- "Scriptable colourmap modifier.",
- 0, cmap_dynamic_opts,
- cmap_dynamic_init, cmap_dynamic_cleanup, cmap_dynamic_exec
-};
diff --git a/src/paranormal/containers.c b/src/paranormal/containers.c
deleted file mode 100644
index c366c10..0000000
--- a/src/paranormal/containers.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <stdio.h>
-
-#include <glib.h>
-
-#include "actuators.h"
-#include "paranormal.h"
-
-/* **************** all containers **************** */
-
-/* Add a actuator to a container (end of list) */
-void
-container_add_actuator (struct pn_actuator *container, struct pn_actuator *a)
-{
- g_assert (container->desc->flags & ACTUATOR_FLAG_CONTAINER);
- g_assert (a);
-
- *((GSList **)container->data) =
- g_slist_append (*(GSList **)container->data, a);
-}
-
-void
-container_remove_actuator (struct pn_actuator *container, struct pn_actuator *a)
-{
- g_assert (container->desc->flags & ACTUATOR_FLAG_CONTAINER);
- g_assert (a);
-
- *((GSList **)container->data) =
- g_slist_remove (*(GSList **)container->data, a);
-}
-
-/* clear the containee list */
-void
-container_unlink_actuators (struct pn_actuator *container)
-{
- g_assert (container->desc->flags & ACTUATOR_FLAG_CONTAINER);
-
- g_slist_free (*(GSList **)container->data);
- *(GSList **)container->data = NULL;
-}
-
-/* this does NOT free data */
-static void
-container_cleanup (GSList** data)
-{
- GSList *child;
-
- for (child = *data; child; child = child->next)
- destroy_actuator ((struct pn_actuator *) child->data);
-
- g_slist_free (*data);
-}
-
-/* **************** container_simple **************** */
-static void
-container_simple_init (GSList ***data)
-{
- *data = g_new0 (GSList *, 1);
-}
-
-static void
-container_simple_cleanup (GSList **data)
-{
- container_cleanup (data);
- g_free (data);
-}
-
-static void
-container_simple_exec (const struct pn_actuator_option *opts,
- GSList **data)
-{
- GSList *child;
-
- for (child = *data; child; child = child->next)
- exec_actuator ((struct pn_actuator *) child->data);
-}
-
-struct pn_actuator_desc builtin_container_simple =
-{
- "container_simple",
- "Simple Container",
- "A simple (unconditional) container\n\n"
- "This is usually used as the root actuator of a list",
- ACTUATOR_FLAG_CONTAINER, NULL,
- PN_ACTUATOR_INIT_FUNC (container_simple_init),
- PN_ACTUATOR_CLEANUP_FUNC (container_simple_cleanup),
- PN_ACTUATOR_EXEC_FUNC (container_simple_exec)
-};
-
-/* **************** container_once **************** */
-struct container_once_data
-{
- GSList *children; /* This MUST be first! */
-
- gboolean done;
-};
-
-static void
-container_once_init (struct container_once_data **data)
-{
- *data = g_new0 (struct container_once_data, 1);
-}
-
-static void
-container_once_cleanup (GSList **data)
-{
- container_cleanup (data);
- g_free (data);
-}
-
-static void
-container_once_exec (const struct pn_actuator_option *opts,
- struct container_once_data *data)
-{
- if (! data->done)
- {
- GSList *child;
-
- for (child = data->children; child; child = child->next)
- exec_actuator ((struct pn_actuator *) child->data);
-
- data->done = TRUE;
- }
-}
-
-struct pn_actuator_desc builtin_container_once =
-{
- "container_once",
- "Initialization Container",
- "A container whose contents get executed exactly once.\n\n"
- "This is often used to set initial graphics states such as the\n"
- "pixel depth, or to display some text (such as credits)",
- ACTUATOR_FLAG_CONTAINER, NULL,
- PN_ACTUATOR_INIT_FUNC (container_once_init),
- PN_ACTUATOR_CLEANUP_FUNC (container_once_cleanup),
- PN_ACTUATOR_EXEC_FUNC (container_once_exec)
-};
-
-/* **************** container_cycle ***************** */
-static struct pn_actuator_option_desc container_cycle_opts[] =
-{
- { "change_interval", "The number of seconds between changing the "
- "child to be executed", OPT_TYPE_INT, { ival: 20 } },
- { "beat", "Whether or not the change should only occur on a beat",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-struct container_cycle_data
-{
- GSList *children;
- GSList *current;
- int last_change;
-};
-
-static void
-container_cycle_init (gpointer *data)
-{
- *data = g_new0 (struct container_cycle_data, 1);
-}
-
-static void
-container_cycle_cleanup (gpointer data)
-{
- container_cleanup (data);
- g_free (data);
-}
-
-static void
-container_cycle_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- struct container_cycle_data *cdata = (struct container_cycle_data*)data;
- int now;
-
- /*
- * Change branch if all of the requirements are met for the branch to change.
- */
- if ((opts[1].val.bval == TRUE && pn_new_beat != FALSE) || opts[1].val.bval == FALSE)
- {
- now = SDL_GetTicks();
-
- if (now - cdata->last_change
- > opts[0].val.ival * 1000)
- {
- cdata->last_change = now;
-
- /* FIXME: add randomization support */
- if (cdata->current)
- cdata->current = cdata->current->next;
- }
- }
-
- if (! cdata->current)
- cdata->current = cdata->children;
-
- if (cdata->current)
- exec_actuator ((struct pn_actuator*)cdata->current->data);
-}
-
-struct pn_actuator_desc builtin_container_cycle =
-{
- "container_cycle",
- "Branched-execution Container",
- "A container that alternates which of its children is executed; it "
- "can either change on an interval, or only on a beat.",
- ACTUATOR_FLAG_CONTAINER, container_cycle_opts,
- container_cycle_init, container_cycle_cleanup, container_cycle_exec
-};
-
-/* **************** container_onbeat **************** */
-static void
-container_onbeat_init (GSList ***data)
-{
- *data = g_new0 (GSList *, 1);
-}
-
-static void
-container_onbeat_cleanup (GSList **data)
-{
- container_cleanup (data);
- g_free (data);
-}
-
-static void
-container_onbeat_exec (const struct pn_actuator_option *opts,
- GSList **data)
-{
- GSList *child;
-
- if (pn_new_beat == TRUE)
- {
- for (child = *data; child; child = child->next)
- exec_actuator ((struct pn_actuator *) child->data);
- }
-}
-
-struct pn_actuator_desc builtin_container_onbeat =
-{
- "container_onbeat",
- "OnBeat Container",
- "A simple container which only triggers on a beat.",
- ACTUATOR_FLAG_CONTAINER, NULL,
- PN_ACTUATOR_INIT_FUNC (container_onbeat_init),
- PN_ACTUATOR_CLEANUP_FUNC (container_onbeat_cleanup),
- PN_ACTUATOR_EXEC_FUNC (container_onbeat_exec)
-};
diff --git a/src/paranormal/containers.h b/src/paranormal/containers.h
deleted file mode 100644
index 78e7b21..0000000
--- a/src/paranormal/containers.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _PN_CONTAINERS_H
-#define _PN_CONTAINERS_H
-
-void container_add_actuator (struct pn_actuator *container, struct pn_actuator *a);
-void container_remove_actuator (struct pn_actuator *container, struct pn_actuator *a);
-void container_unlink_actuators (struct pn_actuator *container);
-
-#endif /* _CONTAINERS_H */
diff --git a/src/paranormal/drawing.c b/src/paranormal/drawing.c
deleted file mode 100644
index b656775..0000000
--- a/src/paranormal/drawing.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <math.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "pn_utils.h"
-
-void
-pn_draw_dot (guint x, guint y, guchar value)
-{
- if (x > pn_image_data->width || x < 0 || y > pn_image_data->height || y < 0)
- return;
-
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)] = value;
-}
-
-void
-pn_draw_line (guint _x0, guint _y0, guint _x1, guint _y1, guchar value)
-{
- gint x0 = _x0;
- gint y0 = _y0;
- gint x1 = _x1;
- gint y1 = _y1;
-
- gint dx = x1 - x0;
- gint dy = y1 - y0;
-
- pn_draw_dot(x0, y0, value);
-
- if (dx != 0)
- {
- gfloat m = (gfloat) dy / (gfloat) dx;
- gfloat b = y0 - m * x0;
-
- dx = (x1 > x0) ? 1 : - 1;
- while (x0 != x1)
- {
- x0 += dx;
- y0 = m * x0 + b;
-
- pn_draw_dot(x0, y0, value);
- }
- }
-}
diff --git a/src/paranormal/drawing.h b/src/paranormal/drawing.h
deleted file mode 100644
index 9fd612c..0000000
--- a/src/paranormal/drawing.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-
-#ifndef PN_DRAWING_H
-#define PN_DRAWING_H
-
-void pn_draw_dot (guint x, guint y, guchar value);
-void pn_draw_line (guint _x0, guint _y0, guint _x1, guint _y1, guchar value);
-
-#endif
diff --git a/src/paranormal/freq.c b/src/paranormal/freq.c
deleted file mode 100644
index 2be35c2..0000000
--- a/src/paranormal/freq.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <glib.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "pn_utils.h"
-
-/* **************** freq_dots **************** */
-/* FIXME: take this piece of crap out */
-static void
-freq_dots_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i, basex;
-
- basex = (pn_image_data->width>>1)-128;
- for (i=basex < 0 ? -basex : 0 ; i < 256; i++)
- {
- pn_image_data->surface[0][PN_IMG_INDEX (basex+i, (pn_image_data->height>>1)
- - CAP (pn_sound_data->freq_data[0][i], 120))]
- = 0xff;
- pn_image_data->surface[0][PN_IMG_INDEX (basex+256-i, (pn_image_data->height>>1)
- + CAP (pn_sound_data->freq_data[1][i], 120))]
- = 0xff;
- }
-}
-
-struct pn_actuator_desc builtin_freq_dots =
-{
- "freq_dots",
- "Frequency Scope",
- "Draws dots varying vertically with the freqency data.",
- 0, NULL,
- NULL, NULL, freq_dots_exec
-};
-
-/* **************** freq_drops **************** */
-static void
-freq_drops_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i,j;
-
- for (i=0; i<256; i++)
- for (j=0; j<pn_sound_data->freq_data[0][i]>>3; i++)
- pn_image_data->surface[0][PN_IMG_INDEX (rand() % pn_image_data->width,
- rand() % pn_image_data->height)]
- = 0xff;
-}
-
-struct pn_actuator_desc builtin_freq_drops =
-{
- "freq_drops",
- "Random Dots",
- "Draws dots at random on the image (louder music = more dots)",
- 0, NULL,
- NULL, NULL, freq_drops_exec
-};
diff --git a/src/paranormal/general.c b/src/paranormal/general.c
deleted file mode 100644
index f74ff02..0000000
--- a/src/paranormal/general.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: what to name this file? */
-
-#include <config.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "pn_utils.h"
-#include "libcalc/calc.h"
-
-/* **************** general_fade **************** */
-static struct pn_actuator_option_desc general_fade_opts[] =
-{
- { "amount", "The amount by which the color index of each "
- "pixel should be decreased by each frame (MAX 255)",
- OPT_TYPE_INT, { ival: 3 } },
- { NULL }
-};
-
-static void
-general_fade_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int amt = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 3 : opts[0].val.ival;
- int i, j;
-
- for (j=0; j<pn_image_data->height; j++)
- for (i=0; i<pn_image_data->width; i++)
- pn_image_data->surface[0][PN_IMG_INDEX (i, j)] =
- CAPLO (pn_image_data->surface[0][PN_IMG_INDEX (i, j)]
- - amt, 0);
-}
-
-struct pn_actuator_desc builtin_general_fade =
-{
- "general_fade", "Fade-out", "Decreases the color index of each pixel",
- 0, general_fade_opts,
- NULL, NULL, general_fade_exec
-};
-
-/* **************** general_blur **************** */
-/* FIXME: add a variable radius */
-/* FIXME: SPEEEED */
-static void
-general_blur_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i,j;
- register guchar *srcptr = pn_image_data->surface[0];
- register guchar *destptr = pn_image_data->surface[1];
- register int sum;
-
- for (j=0; j<pn_image_data->height; j++)
- for (i=0; i<pn_image_data->width; i++)
- {
- sum = *(srcptr)<<2;
-
- /* top */
- if (j > 0)
- {
- sum += *(srcptr-pn_image_data->width)<<1;
- if (i > 0)
- sum += *(srcptr-pn_image_data->width-1);
- if (i < pn_image_data->width-1)
- sum += *(srcptr-pn_image_data->width+1);
- }
- /* bottom */
- if (j < pn_image_data->height-1)
- {
- sum += *(srcptr+pn_image_data->width)<<1;
- if (i > 0)
- sum += *(srcptr+pn_image_data->width-1);
- if (i < pn_image_data->width-1)
- sum += *(srcptr+pn_image_data->width+1);
- }
- /* left */
- if (i > 0)
- sum += *(srcptr-1)<<1;
- /* right */
- if (i < pn_image_data->width-1)
- sum += *(srcptr+1)<<1;
-
- *destptr++ = (guchar)(sum >> 4);
- srcptr++;
- }
-
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_general_blur =
-{
- "general_blur", "Blur", "A simple 1 pixel radius blur",
- 0, NULL,
- NULL, NULL, general_blur_exec
-};
-
-/* **************** general_mosaic **************** */
-/* FIXME: add a variable radius */
-/* FIXME: SPEEEED */
-static struct pn_actuator_option_desc general_mosaic_opts[] =
-{
- { "radius", "The pixel radius that should be used for the effect.",
- OPT_TYPE_INT, { ival: 6 } },
- { NULL }
-};
-
-static void
-general_mosaic_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i,j;
- register guchar *srcptr = pn_image_data->surface[0];
- register guchar *destptr = pn_image_data->surface[1];
- int radius = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 6 : opts[0].val.ival;
-
- for (j=0; j<pn_image_data->height; j += radius)
- for (i=0; i<pn_image_data->width; i += radius)
- {
- int ii = 0, jj = 0;
- guchar bval = 0;
-
- /* find the brightest colour */
- for (jj = 0; jj < radius && (j + jj < pn_image_data->height); jj++)
- for (ii = 0; ii < radius && (i + ii < pn_image_data->width); ii++)
- {
- guchar val = srcptr[PN_IMG_INDEX(i + ii, j + jj)];
-
- if (val > bval)
- bval = val;
- }
-
- for (jj = 0; jj < radius && (j + jj < pn_image_data->height); jj++)
- for (ii = 0; ii < radius && (i + ii < pn_image_data->width); ii++)
- {
- destptr[PN_IMG_INDEX(i + ii, j + jj)] = bval;
- }
- }
-
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_general_mosaic =
-{
- "general_mosaic", "Mosaic", "A simple mosaic effect.",
- 0, general_mosaic_opts,
- NULL, NULL, general_mosaic_exec
-};
-
-/* **************** general_clear **************** */
-static void
-general_clear_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- memset(pn_image_data->surface[0], '\0',
- (pn_image_data->height * pn_image_data->width));
-}
-
-struct pn_actuator_desc builtin_general_clear =
-{
- "general_clear", "Clear Surface", "Clears the surface.",
- 0, NULL,
- NULL, NULL, general_clear_exec
-};
-
-/* **************** general_noop **************** */
-static void
-general_noop_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- return;
-}
-
-struct pn_actuator_desc builtin_general_noop =
-{
- "general_noop", "Do Nothing", "Does absolutely nothing.",
- 0, NULL,
- NULL, NULL, general_noop_exec
-};
-
-/* **************** general_invert **************** */
-static void
-general_invert_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i, j;
-
- for (j=0; j < pn_image_data->height; j++)
- for (i=0; i < pn_image_data->width; i++)
- pn_image_data->surface[0][PN_IMG_INDEX (i, j)] =
- 255 - pn_image_data->surface[0][PN_IMG_INDEX (i, j)];
-}
-
-struct pn_actuator_desc builtin_general_invert =
-{
- "general_invert", "Value Invert", "Performs a value invert.",
- 0, NULL,
- NULL, NULL, general_invert_exec
-};
-
-/* **************** general_replace **************** */
-static struct pn_actuator_option_desc general_replace_opts[] =
-{
- { "start", "The beginning colour value that should be replaced by the value of out.",
- OPT_TYPE_INT, { ival: 250 } },
- { "end", "The ending colour value that should be replaced by the value of out.",
- OPT_TYPE_INT, { ival: 255 } },
- { "out", "The colour value that in is replaced with.",
- OPT_TYPE_INT, { ival: 0 } },
- { NULL }
-};
-
-static void
-general_replace_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- register int i, j;
- register guchar val;
- guchar begin = opts[0].val.ival > 255 || opts[0].val.ival < 0 ? 250 : opts[0].val.ival;
- guchar end = opts[1].val.ival > 255 || opts[1].val.ival < 0 ? 255 : opts[1].val.ival;
- guchar out = opts[2].val.ival > 255 || opts[2].val.ival < 0 ? 0 : opts[2].val.ival;
-
- for (j=0; j < pn_image_data->height; j++)
- for (i=0; i < pn_image_data->width; i++)
- {
- val = pn_image_data->surface[0][PN_IMG_INDEX (i, j)];
- if (val >= begin && val <= end)
- pn_image_data->surface[0][PN_IMG_INDEX (i, j)] = out;
- }
-}
-
-struct pn_actuator_desc builtin_general_replace =
-{
- "general_replace", "Value Replace", "Performs a value replace on a range of values.",
- 0, general_replace_opts,
- NULL, NULL, general_replace_exec
-};
-
-/* **************** general_swap **************** */
-static void
-general_swap_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_general_swap =
-{
- "general_swap", "Swap Surface", "Swaps the surface.",
- 0, NULL,
- NULL, NULL, general_swap_exec
-};
-
-/* **************** general_copy **************** */
-static void
-general_copy_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- memcpy(pn_image_data->surface[1], pn_image_data->surface[0],
- (pn_image_data->width * pn_image_data->height));
-}
-
-struct pn_actuator_desc builtin_general_copy =
-{
- "general_copy", "Copy Surface", "Copies the surface to the other surface.",
- 0, NULL,
- NULL, NULL, general_copy_exec
-};
-
-/* **************** general_flip **************** */
-static struct pn_actuator_option_desc general_flip_opts[] =
-{
- { "direction", "Negative is horizontal, positive is vertical.",
- OPT_TYPE_INT, { ival: -1 } },
- { NULL }
-};
-
-static void
-general_flip_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- gint x, y;
-
- if (opts[0].val.ival < 0)
- {
- for (y = 0; y < pn_image_data->height; y++)
- for (x = 0; x < pn_image_data->width; x++)
- {
- pn_image_data->surface[1][PN_IMG_INDEX(pn_image_data->width - x, y)] =
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
- else
- {
- for (y = 0; y < pn_image_data->height; y++)
- for (x = 0; x < pn_image_data->width; x++)
- {
- pn_image_data->surface[1][PN_IMG_INDEX(x, pn_image_data->height - y)] =
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
-
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_general_flip =
-{
- "general_flip", "Flip Surface", "Flips the surface.",
- 0, general_flip_opts,
- NULL, NULL, general_flip_exec
-};
-
-/* ***************** general_evaluate ***************** */
-
-static struct pn_actuator_option_desc general_evaluate_opts[] =
-{
- { "init_script", "Script to run on start.", OPT_TYPE_STRING, {sval: "global_reg0 = 27;"} },
- { "frame_script", "Script to run.", OPT_TYPE_STRING, {sval: "global_reg0 = global_reg0 + 1;"} },
- { NULL }
-};
-
-struct pn_evaluate_ctx
-{
- expression_t *expr_on_init, *expr_on_frame;
- symbol_dict_t *dict;
- gboolean reset;
-};
-
-static void
-general_evaluate_init(gpointer *data)
-{
- *data = g_new0(struct pn_evaluate_ctx, 1);
-
- ((struct pn_evaluate_ctx *)*data)->reset = TRUE;
-}
-
-static void
-general_evaluate_cleanup(gpointer op_data)
-{
- struct pn_evaluate_ctx *data = (struct pn_evaluate_ctx *) op_data;
-
- g_return_if_fail(data != NULL);
-
- if (data->expr_on_init)
- expr_free(data->expr_on_init);
-
- if (data->expr_on_frame)
- expr_free(data->expr_on_frame);
-
- if (data->dict)
- dict_free(data->dict);
-
- if (data)
- g_free(data);
-}
-
-static void
-general_evaluate_exec(const struct pn_actuator_option *opts,
- gpointer op_data)
-{
- struct pn_evaluate_ctx *data = (struct pn_evaluate_ctx *) op_data;
-
- if (data->reset)
- {
- if (data->dict)
- dict_free(data->dict);
-
- data->dict = dict_new();
-
- if (opts[0].val.sval != NULL);
- data->expr_on_init = expr_compile_string(opts[0].val.sval, data->dict);
-
- if (opts[1].val.sval != NULL);
- data->expr_on_frame = expr_compile_string(opts[1].val.sval, data->dict);
-
- if (data->expr_on_init != NULL)
- expr_execute(data->expr_on_init, data->dict);
-
- data->reset = FALSE;
- }
-
- if (data->expr_on_frame != NULL)
- expr_execute(data->expr_on_frame, data->dict);
-}
-
-struct pn_actuator_desc builtin_general_evaluate =
-{
- "general_evaluate", "Evalulate VM Code",
- "Evaluates arbitrary VM code. Does not draw anything.",
- 0, general_evaluate_opts,
- general_evaluate_init, general_evaluate_cleanup, general_evaluate_exec
-};
-
diff --git a/src/paranormal/libcalc/calc.h b/src/paranormal/libcalc/calc.h
deleted file mode 100644
index 4a41170..0000000
--- a/src/paranormal/libcalc/calc.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* calc.h -- an all-in-one include file for libcalc
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef Included_CALC_H
-#define Included_CALC_H
-
-#include "dict.h"
-#include "execute.h"
-#include "parser.h"
-#include "storage.h"
-
-#endif /* Included_CALC_H */
diff --git a/src/paranormal/libcalc/dict.c b/src/paranormal/libcalc/dict.c
deleted file mode 100644
index aa74db1..0000000
--- a/src/paranormal/libcalc/dict.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* dict.c -- symbol dictionary structures
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#define V_SPACE_INIT 8
-#define V_SPACE_INCR 8
-
-#include <glib.h>
-#include <string.h>
-
-#include "dict.h"
-
-static int global_dict_initialized = 0;
-static symbol_dict_t global_dict;
-
-static void more_variables (symbol_dict_t *dict) {
- var_t *new_var;
-
- dict->v_space += V_SPACE_INCR;
-
- new_var = g_new(var_t, dict->v_space + 1);
- memcpy (new_var, dict->variables, dict->v_count * sizeof(var_t));
- g_free (dict->variables);
-
- dict->variables = new_var;
-}
-
-static int dict_define_variable (symbol_dict_t *dict, const char *name) {
- var_t *var;
-
- if (dict->v_count >= dict->v_space)
- more_variables (dict);
-
- var = &dict->variables[dict->v_count];
-
- var->value = 0.0;
- var->name = g_strdup (name);
-
- return dict->v_count++;
-}
-
-symbol_dict_t *dict_new (void) {
- symbol_dict_t *dict;
-
- if (global_dict_initialized != 1) {
- int i;
-
- global_dict.v_count = 0;
- global_dict.v_space = V_SPACE_INIT;
- global_dict.variables = (var_t *) g_new(var_t, global_dict.v_space + 1);
- global_dict_initialized = 1;
-
- for (i = 0; i < 100; i++) {
- gchar tmpbuf[40];
- g_snprintf(tmpbuf, 40, "global_reg%d", i);
- dict_define_variable(&global_dict, tmpbuf);
- }
- }
-
- dict = g_new(symbol_dict_t, 1);
-
- /* Allocate space for variables. */
- dict->v_count = 0;
- dict->v_space = V_SPACE_INIT;
- dict->variables = (var_t *) g_new (var_t, dict->v_space + 1);
-
- return dict;
-}
-
-void dict_free (symbol_dict_t *dict) {
- int i;
-
- if (!dict)
- return;
-
- /* Free memory used by variables. */
- for (i = 0; i < dict->v_count; i++)
- g_free (dict->variables[i].name);
- g_free (dict->variables);
-
- g_free (dict);
-}
-
-int dict_lookup (symbol_dict_t *dict, const char *name) {
- int i;
-
- for (i = 0; i < global_dict.v_count; i++) {
- if (strcmp (global_dict.variables[i].name, name) == 0)
- return -i;
- }
-
- for (i = 0; i < dict->v_count; i++) {
- if (strcmp (dict->variables[i].name, name) == 0)
- return i;
- }
-
- /* Not defined -- define a new variable. */
- return dict_define_variable (dict, name);
-}
-
-double *dict_variable (symbol_dict_t *dict, const char *var_name) {
- int id = dict_lookup (dict, var_name);
-
- /* global variables are presented as negative offset. negating
- * a negative number results in a positive offset. --nenolod
- */
- if (id < 0)
- return &global_dict.variables[-id].value;
-
- return &dict->variables[id].value;
-}
diff --git a/src/paranormal/libcalc/dict.h b/src/paranormal/libcalc/dict.h
deleted file mode 100644
index 210aec2..0000000
--- a/src/paranormal/libcalc/dict.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* dict.h -- symbol dictionary structures
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef Included_DICT_H
-#define Included_DICT_H
-
-/* A variable. */
-typedef struct {
- char *name;
- double value;
-} var_t;
-
-/* A symbol dictionary. */
-typedef struct {
- /* Variables. */
- var_t *variables;
- int v_count;
- int v_space;
-} symbol_dict_t;
-
-/* Prototypes. */
-symbol_dict_t *dict_new (void);
-void dict_free (symbol_dict_t *dict);
-
-int dict_lookup (symbol_dict_t *calc, const char *name);
-double* dict_variable (symbol_dict_t *calc, const char *var_name);
-
-#endif /* Included_DICT_H */
diff --git a/src/paranormal/libcalc/execute.c b/src/paranormal/libcalc/execute.c
deleted file mode 100644
index c50a267..0000000
--- a/src/paranormal/libcalc/execute.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* execute.c -- execute precompiled expression expr
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-#include <math.h>
-
-#include "execute.h"
-#include "function.h"
-
-/* Execution stack. */
-
-gboolean check_stack (ex_stack *stack, int depth) {
- if (stack->sp < depth) {
- g_warning ("Stack error");
- return FALSE;
- }
-
- return TRUE;
-}
-
-void push (ex_stack *stack, double value) {
- g_assert (stack);
-
- if (stack->sp < STACK_DEPTH) {
- stack->value[stack->sp++] = value;
- } else {
- g_warning ("Stack overflow");
- }
-}
-
-double pop (ex_stack *stack) {
- g_assert (stack);
-
- if (stack->sp > 0) {
- return stack->value[--stack->sp];
- } else {
- g_warning ("Stack error (stack empty)");
- return 0.0;
- }
-}
-
-/* */
-
-void expr_execute (expression_t *expr, symbol_dict_t *dict) {
- char op, *str = expr->data->str;
- ex_stack stack = { 0, { 0.0 }};
-
- while ((op = *str++)) {
- switch (op) {
- case 'l': /* Load a variable. */
- push (&stack, dict->variables[load_int (str)].value);
- str += sizeof (int);
- break;
-
- case 's': /* Store to a variable. */
- dict->variables[load_int (str)].value = pop (&stack);
- str += sizeof (int);
- break;
-
- case 'f': /* Call a function. */
- function_call (load_int (str), &stack);
- str += sizeof (int);
- break;
-
- case 'c': /* Load a constant. */
- push (&stack, load_double (str));
- str += sizeof (double);
- break;
-
- case 'n': /* Do a negation. */
- push (&stack, -pop (&stack));
- break;
-
- case '+': /* Do an addition. */
- push (&stack, pop (&stack) + pop (&stack));
- break;
- case '-': /* Do a subtraction. */
- push (&stack, pop (&stack) - pop (&stack));
- break;
- case '*': /* Do a multiplication. */
- push (&stack, pop (&stack) * pop (&stack));
- break;
- case '/': /* Do a division. */
- if (check_stack (&stack, 2)) {
- double y = stack.value[stack.sp - 2] / stack.value[stack.sp - 1];
- stack.sp -= 2;
- push (&stack, y);
- }
- break;
- case '^': /* Do an exponentiation. */
- if (check_stack (&stack, 2)) {
- double y = pow (stack.value[stack.sp - 2], stack.value[stack.sp - 1]);
- stack.sp -= 2;
- push (&stack, y);
- }
- break;
-
- default:
- g_warning ("Invalid opcode: %c", op);
- return;
- }
- }
-}
diff --git a/src/paranormal/libcalc/execute.h b/src/paranormal/libcalc/execute.h
deleted file mode 100644
index 12bc205..0000000
--- a/src/paranormal/libcalc/execute.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* execute.h -- execute precompiled expression code
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef Included_EXECUTE_H
-#define Included_EXECUTE_H
-
-#include <glib.h>
-
-#include "dict.h"
-#include "storage.h"
-
-/* Execution stack. */
-
-typedef struct {
-#define STACK_DEPTH 64
- int sp; /* stack pointer */
- double value[STACK_DEPTH];
-} ex_stack;
-
-/* Prototypes. */
-
-gboolean check_stack (ex_stack *stack, int depth);
-void push (ex_stack *stack, double value);
-double pop (ex_stack *stack);
-
-void expr_execute (expression_t *expr, symbol_dict_t *dict);
-
-#endif /* Included_EXECUTE_H */
diff --git a/src/paranormal/libcalc/function.c b/src/paranormal/libcalc/function.c
deleted file mode 100644
index bb614f6..0000000
--- a/src/paranormal/libcalc/function.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* function.c --
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-#include <math.h>
-#include <string.h>
-
-#include "function.h"
-
-/* Function pointer type. */
-typedef struct {
- char *name;
- double (*funcptr)(ex_stack *stack);
-} func_t;
-
-/* */
-
-static double f_log (ex_stack *stack) {
- return log (pop (stack));
-}
-
-static double f_sin (ex_stack *stack) {
- return sin (pop (stack));
-}
-
-static double f_cos (ex_stack *stack) {
- return cos (pop (stack));
-}
-
-static double f_tan (ex_stack *stack) {
- return tan (pop (stack));
-}
-
-static double f_asin (ex_stack *stack) {
- return asin (pop (stack));
-}
-
-static double f_acos (ex_stack *stack) {
- return acos (pop (stack));
-}
-
-static double f_atan (ex_stack *stack) {
- return atan (pop (stack));
-}
-
-static double f_if (ex_stack *stack) {
- double a = pop (stack);
- double b = pop (stack);
- return (pop (stack) != 0.0) ? a : b;
-}
-
-static double f_div (ex_stack *stack) {
- int y = (int)pop (stack);
- int x = (int)pop (stack);
- return (y == 0) ? 0 : (x / y);
-}
-
-static double f_rand (ex_stack *stack) {
- return g_random_double_range((double) pop(stack), (double) pop(stack));
-}
-
-/* */
-
-static const func_t init[] = {
- { "sin", f_sin },
- { "cos", f_cos },
- { "tan", f_tan },
- { "asin", f_asin },
- { "acos", f_acos },
- { "atan", f_atan },
- { "log", f_log },
- { "if", f_if },
- { "div", f_div },
- { "rand", f_rand }
-};
-
-int function_lookup (const char *name) {
- int i;
-
- for (i = 0; i < sizeof (init) / sizeof (init[0]); i++)
- if (strcmp (init[i].name, name) == 0)
- return i;
-
- g_warning ("Unknown function: %s\n", name);
- return -1;
-}
-
-void function_call (int func_id, ex_stack *stack) {
- g_assert (func_id >= 0);
- g_assert (func_id < sizeof (init) / sizeof (init[0]));
-
- push (stack, (*init[func_id].funcptr)(stack));
-}
diff --git a/src/paranormal/libcalc/function.h b/src/paranormal/libcalc/function.h
deleted file mode 100644
index e6d657e..0000000
--- a/src/paranormal/libcalc/function.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* function.h --
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef Included_FUNCTION
-#define Included_FUNCTION
-
-#include "execute.h"
-
-/* Prototypes. */
-
-int function_lookup (const char *name);
-void function_call (int func_id, ex_stack *stack);
-
-#endif /* Included_FUNCTION */
diff --git a/src/paranormal/libcalc/parser.c b/src/paranormal/libcalc/parser.c
deleted file mode 100644
index c78a1a5..0000000
--- a/src/paranormal/libcalc/parser.c
+++ /dev/null
@@ -1,1896 +0,0 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1. */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
- 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 3 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, see <http://www.gnu.org/licenses/>. */
-
-/* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
- simplifying the original so-called "semantic" parser. */
-
-/* All symbols defined below should begin with yy or YY, to avoid
- infringing on user name space. This should be done even for local
- variables, as they might otherwise be expanded by user macros.
- There are some unavoidable exceptions within include files to
- define necessary library symbols; they are noted "INFRINGES ON
- USER NAME SPACE" below. */
-
-/* Identify Bison output. */
-#define YYBISON 1
-
-/* Bison version. */
-#define YYBISON_VERSION "2.4.1"
-
-/* Skeleton name. */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers. */
-#define YYPURE 1
-
-/* Push parsers. */
-#define YYPUSH 0
-
-/* Pull parsers. */
-#define YYPULL 1
-
-/* Using locations. */
-#define YYLSP_NEEDED 0
-
-
-
-/* Copy the first part of user declarations. */
-
-/* Line 189 of yacc.c */
-#line 26 "parser.yacc"
-
-#include <ctype.h>
-#include <glib.h>
-#include <locale.h>
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "dict.h"
-#include "execute.h"
-#include "function.h"
-#include "parser.h"
-#include "storage.h"
-
-#define YYPARSE_PARAM yyparam
-#define YYLEX_PARAM yyparam
-
-static gboolean expr_add_compile (expression_t *expr, symbol_dict_t *dict,
- char *str);
-
-#define GENERATE(str) if (!expr_add_compile (((parser_control *)yyparam)->expr, \
- ((parser_control *)yyparam)->dict, str)) \
- YYABORT;
-
-
-/* Line 189 of yacc.c */
-#line 99 "parser.c"
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages. */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-
-/* Tokens. */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- NAME = 258,
- NUMBER = 259,
- NEG = 260
- };
-#endif
-/* Tokens. */
-#define NAME 258
-#define NUMBER 259
-#define NEG 260
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-{
-
-/* Line 214 of yacc.c */
-#line 52 "parser.yacc"
-
-char *s_value;
-char c_value;
-double d_value;
-int i_value;
-
-
-
-/* Line 214 of yacc.c */
-#line 154 "parser.c"
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-/* Copy the second part of user declarations. */
-
-/* Line 264 of yacc.c */
-#line 59 "parser.yacc"
-
-int yyerror (char * s);
-int yylex (YYSTYPE * yylval, void * yyparam);
-
-
-/* Line 264 of yacc.c */
-#line 172 "parser.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-# define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-# else
-# define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-# if ENABLE_NLS
-# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
-# endif
-# endif
-# ifndef YY_
-# define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E. */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
- int yyi;
-#endif
-{
- return yyi;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols. */
-
-# ifdef YYSTACK_USE_ALLOCA
-# if YYSTACK_USE_ALLOCA
-# ifdef __GNUC__
-# define YYSTACK_ALLOC __builtin_alloca
-# elif defined __BUILTIN_VA_ARG_INCR
-# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-# elif defined _AIX
-# define YYSTACK_ALLOC __alloca
-# elif defined _MSC_VER
-# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-# define alloca _alloca
-# else
-# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# endif
-# endif
-# endif
-
-# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-# ifndef YYSTACK_ALLOC_MAXIMUM
- /* The OS might guarantee only one guard page at the bottom of the stack,
- and a page size can be as small as 4096 bytes. So we cannot safely
- invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
- to allow for a few compiler-allocated temporary stack slots. */
-# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-# endif
-# else
-# define YYSTACK_ALLOC YYMALLOC
-# define YYSTACK_FREE YYFREE
-# ifndef YYSTACK_ALLOC_MAXIMUM
-# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
- && ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
-# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
-# endif
-# endif
-# ifndef YYMALLOC
-# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# ifndef YYFREE
-# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-# endif
-# endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
- && (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member. */
-union yyalloc
-{
- yytype_int16 yyss_alloc;
- YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
- N elements. */
-# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
- + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
-
-/* Relocate STACK from its old location to the new one. The
- local variables YYSIZE and YYSTACKSIZE give the old and new number of
- elements in the stack, and YYPTR gives the new location of the
- stack. Advance YYPTR to a properly aligned location for the next
- stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 2
-/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 65
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 18
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 5
-/* YYNRULES -- Number of rules. */
-#define YYNRULES 22
-/* YYNRULES -- Number of states. */
-#define YYNSTATES 37
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
-#define YYUNDEFTOK 2
-#define YYMAXUTOK 260
-
-#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
-static const yytype_uint8 yytranslate[] =
-{
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 14, 15, 8, 7, 13, 6, 2, 9, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 12,
- 17, 5, 16, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 11, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 10
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint8 yyprhs[] =
-{
- 0, 0, 3, 4, 7, 8, 10, 13, 16, 18,
- 22, 24, 26, 30, 35, 39, 43, 47, 51, 55,
- 59, 62, 66
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int8 yyrhs[] =
-{
- 19, 0, -1, -1, 19, 20, -1, -1, 22, -1,
- 20, 12, -1, 1, 12, -1, 22, -1, 21, 13,
- 22, -1, 4, -1, 3, -1, 3, 5, 22, -1,
- 3, 14, 21, 15, -1, 22, 16, 22, -1, 22,
- 17, 22, -1, 22, 7, 22, -1, 22, 6, 22,
- -1, 22, 8, 22, -1, 22, 9, 22, -1, 6,
- 22, -1, 22, 11, 22, -1, 14, 22, 15, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
-static const yytype_uint8 yyrline[] =
-{
- 0, 81, 81, 82, 86, 87, 89, 90, 95, 98,
- 103, 109, 115, 121, 128, 130, 133, 135, 137, 139,
- 141, 143, 145
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
- "$end", "error", "$undefined", "NAME", "NUMBER", "'='", "'-'", "'+'",
- "'*'", "'/'", "NEG", "'^'", "';'", "','", "'('", "')'", "'>'", "'<'",
- "$accept", "input", "expression_list", "argument_list", "expression", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
-static const yytype_uint16 yytoknum[] =
-{
- 0, 256, 257, 258, 259, 61, 45, 43, 42, 47,
- 260, 94, 59, 44, 40, 41, 62, 60
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
-{
- 0, 18, 19, 19, 20, 20, 20, 20, 21, 21,
- 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 0, 2, 0, 1, 2, 2, 1, 3,
- 1, 1, 3, 4, 3, 3, 3, 3, 3, 3,
- 2, 3, 3
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint8 yydefact[] =
-{
- 2, 0, 1, 0, 11, 10, 0, 0, 3, 5,
- 7, 0, 0, 20, 0, 6, 0, 0, 0, 0,
- 0, 0, 0, 12, 0, 8, 22, 17, 16, 18,
- 19, 21, 14, 15, 0, 13, 9
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int8 yydefgoto[] =
-{
- -1, 1, 8, 24, 9
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -10
-static const yytype_int8 yypact[] =
-{
- -10, 17, -10, -8, 22, -10, 47, 47, -3, 38,
- -10, 47, 47, -9, 26, -10, 47, 47, 47, 47,
- 47, 47, 47, 38, 9, 38, -10, 48, 48, -9,
- -9, -9, 38, 38, 47, -10, 38
-};
-
-/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int8 yypgoto[] =
-{
- -10, -10, -10, -10, -6
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -5
-static const yytype_int8 yytable[] =
-{
- 13, 14, 20, 0, 10, 23, 25, 21, 22, 15,
- 27, 28, 29, 30, 31, 32, 33, 2, 3, 0,
- 4, 5, 34, 6, 35, 0, 0, 11, 36, -4,
- 0, 7, 16, 17, 18, 19, 12, 20, 0, 0,
- 0, 26, 21, 22, 16, 17, 18, 19, 0, 20,
- 4, 5, 0, 6, 21, 22, 18, 19, 0, 20,
- 0, 7, 0, 0, 21, 22
-};
-
-static const yytype_int8 yycheck[] =
-{
- 6, 7, 11, -1, 12, 11, 12, 16, 17, 12,
- 16, 17, 18, 19, 20, 21, 22, 0, 1, -1,
- 3, 4, 13, 6, 15, -1, -1, 5, 34, 12,
- -1, 14, 6, 7, 8, 9, 14, 11, -1, -1,
- -1, 15, 16, 17, 6, 7, 8, 9, -1, 11,
- 3, 4, -1, 6, 16, 17, 8, 9, -1, 11,
- -1, 14, -1, -1, 16, 17
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
-{
- 0, 19, 0, 1, 3, 4, 6, 14, 20, 22,
- 12, 5, 14, 22, 22, 12, 6, 7, 8, 9,
- 11, 16, 17, 22, 21, 22, 15, 22, 22, 22,
- 22, 22, 22, 22, 13, 15, 22
-};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-
-#define YYFAIL goto yyerrlab
-
-#define YYRECOVERING() (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
- YYPOPSTACK (1); \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
-
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
- do \
- if (YYID (N)) \
- { \
- (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- } \
- else \
- { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC (Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC (Rhs, 0).last_column; \
- } \
- while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments. */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval)
-#endif
-
-/* Enable debugging if requested. */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-# define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (!yyvaluep)
- return;
-# ifdef YYPRINT
- if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
-# endif
- switch (yytype)
- {
- default:
- break;
- }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
-{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included). |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
-#endif
-{
- YYFPRINTF (stderr, "Stack now");
- for (; yybottom <= yytop; yybottom++)
- {
- int yybot = *yybottom;
- YYFPRINTF (stderr, " %d", yybot);
- }
- YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced. |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
- YYSTYPE *yyvsp;
- int yyrule;
-#endif
-{
- int yynrhs = yyr2[yyrule];
- int yyi;
- unsigned long int yylno = yyrline[yyrule];
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
- /* The symbols being reduced. */
- for (yyi = 0; yyi < yynrhs; yyi++)
- {
- YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
- YYFPRINTF (stderr, "\n");
- }
-}
-
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace. It is left uninitialized so that
- multiple parsers can coexist. */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
- if the built-in stack extension method is used).
-
- Do not make this value too large; the results are undefined if
- YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
- evaluated with infinite-precision integer arithmetic. */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
-# else
-/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
-{
- YYSIZE_T yylen;
- for (yylen = 0; yystr[yylen]; yylen++)
- continue;
- return yylen;
-}
-# endif
-# endif
-
-# ifndef yystpcpy
-# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-# define yystpcpy stpcpy
-# else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
- YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
-{
- char *yyd = yydest;
- const char *yys = yysrc;
-
- while ((*yyd++ = *yys++) != '\0')
- continue;
-
- return yyd - 1;
-}
-# endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
- quotes and backslashes, so that it's suitable for yyerror. The
- heuristic is that double-quoting is unnecessary unless the string
- contains an apostrophe, a comma, or backslash (other than
- backslash-backslash). YYSTR is taken from yytname. If YYRES is
- null, do not copy; instead, return the length of what the result
- would have been. */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
- if (*yystr == '"')
- {
- YYSIZE_T yyn = 0;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
- do_not_strip_quotes: ;
- }
-
- if (! yyres)
- return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
-
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
- {
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
- }
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
-
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
-
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
-
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
- }
-}
-#endif /* YYERROR_VERBOSE */
-
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol. |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
-#endif
-{
- YYUSE (yyvaluep);
-
- if (!yymsg)
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
- switch (yytype)
- {
-
- default:
- break;
- }
-}
-
-/* Prevent warnings from -Wmissing-prototypes. */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-
-
-/*-------------------------.
-| yyparse or yypush_parse. |
-`-------------------------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-/* The lookahead symbol. */
-int yychar;
-
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval;
-
- /* Number of syntax errors so far. */
- int yynerrs;
-
- int yystate;
- /* Number of tokens to shift before error messages enabled. */
- int yyerrstatus;
-
- /* The stacks and their tools:
- `yyss': related to states.
- `yyvs': related to semantic values.
-
- Refer to the stacks thru separate pointers, to allow yyoverflow
- to reallocate them elsewhere. */
-
- /* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss;
- yytype_int16 *yyssp;
-
- /* The semantic value stack. */
- YYSTYPE yyvsa[YYINITDEPTH];
- YYSTYPE *yyvs;
- YYSTYPE *yyvsp;
-
- YYSIZE_T yystacksize;
-
- int yyn;
- int yyresult;
- /* Lookahead token as an internal (translated) token number. */
- int yytoken;
- /* The variables used to return semantic value and location from the
- action routines. */
- YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
- /* Buffer for error messages, and its allocated size. */
- char yymsgbuf[128];
- char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
-
- /* The number of symbols on the RHS of the reduced rule.
- Keep to zero when no symbol should be popped. */
- int yylen = 0;
-
- yytoken = 0;
- yyss = yyssa;
- yyvs = yyvsa;
- yystacksize = YYINITDEPTH;
-
- YYDPRINTF ((stderr, "Starting parse\n"));
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
- yyssp = yyss;
- yyvsp = yyvs;
-
- goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
-`------------------------------------------------------------*/
- yynewstate:
- /* In all cases, when you get here, the value and location stacks
- have just been pushed. So pushing a state here evens the stacks. */
- yyssp++;
-
- yysetstate:
- *yyssp = yystate;
-
- if (yyss + yystacksize - 1 <= yyssp)
- {
- /* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- {
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
- }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
- /* Extend the stack our own way. */
- if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
- yystacksize *= 2;
- if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
-
- {
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
- }
-# endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + yysize - 1;
- yyvsp = yyvs + yysize - 1;
-
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
-
- if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
- }
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
- if (yystate == YYFINAL)
- YYACCEPT;
-
- goto yybackup;
-
-/*-----------.
-| yybackup. |
-`-----------*/
-yybackup:
-
- /* Do appropriate processing given the current state. Read a
- lookahead token if we need one and don't already have one. */
-
- /* First try to decide what to do without reference to lookahead token. */
- yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
- if (yychar == YYEMPTY)
- {
- YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
- }
-
- if (yychar <= YYEOF)
- {
- yychar = yytoken = YYEOF;
- YYDPRINTF ((stderr, "Now at end of input.\n"));
- }
- else
- {
- yytoken = YYTRANSLATE (yychar);
- YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
- }
-
- /* If the proper action on seeing token YYTOKEN is to reduce or to
- detect an error, take that action. */
- yyn += yytoken;
- if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
- goto yydefault;
- yyn = yytable[yyn];
- if (yyn <= 0)
- {
- if (yyn == 0 || yyn == YYTABLE_NINF)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- /* Count tokens shifted since error; after three, turn off error
- status. */
- if (yyerrstatus)
- yyerrstatus--;
-
- /* Shift the lookahead token. */
- YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token. */
- yychar = YYEMPTY;
-
- yystate = yyn;
- *++yyvsp = yylval;
-
- goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state. |
-`-----------------------------------------------------------*/
-yydefault:
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction. |
-`-----------------------------*/
-yyreduce:
- /* yyn is the number of a rule to reduce with. */
- yylen = yyr2[yyn];
-
- /* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
-
- Otherwise, the following line sets YYVAL to garbage.
- This behavior is undocumented and Bison
- users should not rely upon it. Assigning to YYVAL
- unconditionally makes the parser a bit smaller, and it avoids a
- GCC warning that YYVAL may be used uninitialized. */
- yyval = yyvsp[1-yylen];
-
-
- YY_REDUCE_PRINT (yyn);
- switch (yyn)
- {
- case 5:
-
-/* Line 1455 of yacc.c */
-#line 88 "parser.yacc"
- { }
- break;
-
- case 7:
-
-/* Line 1455 of yacc.c */
-#line 91 "parser.yacc"
- { yyerrok; }
- break;
-
- case 8:
-
-/* Line 1455 of yacc.c */
-#line 96 "parser.yacc"
- {
- }
- break;
-
- case 9:
-
-/* Line 1455 of yacc.c */
-#line 99 "parser.yacc"
- {
- }
- break;
-
- case 10:
-
-/* Line 1455 of yacc.c */
-#line 104 "parser.yacc"
- {
- char *buf = g_strdup_printf ("c%f:", (yyvsp[(1) - (1)].d_value));
- GENERATE (buf);
- g_free (buf);
- }
- break;
-
- case 11:
-
-/* Line 1455 of yacc.c */
-#line 110 "parser.yacc"
- {
- char *buf = g_strdup_printf ("l%s:", (yyvsp[(1) - (1)].s_value));
- GENERATE (buf);
- g_free (buf);
- }
- break;
-
- case 12:
-
-/* Line 1455 of yacc.c */
-#line 116 "parser.yacc"
- {
- char *buf = g_strdup_printf ("s%s:", (yyvsp[(1) - (3)].s_value));
- GENERATE (buf);
- g_free (buf);
- }
- break;
-
- case 13:
-
-/* Line 1455 of yacc.c */
-#line 122 "parser.yacc"
- {
- char *buf = g_strdup_printf ("f%s:", (yyvsp[(1) - (4)].s_value));
- GENERATE (buf);
- g_free (buf);
- }
- break;
-
- case 14:
-
-/* Line 1455 of yacc.c */
-#line 129 "parser.yacc"
- { GENERATE (">"); }
- break;
-
- case 15:
-
-/* Line 1455 of yacc.c */
-#line 131 "parser.yacc"
- { GENERATE ("<"); }
- break;
-
- case 16:
-
-/* Line 1455 of yacc.c */
-#line 134 "parser.yacc"
- { GENERATE ("+"); }
- break;
-
- case 17:
-
-/* Line 1455 of yacc.c */
-#line 136 "parser.yacc"
- { GENERATE ("-"); }
- break;
-
- case 18:
-
-/* Line 1455 of yacc.c */
-#line 138 "parser.yacc"
- { GENERATE ("*"); }
- break;
-
- case 19:
-
-/* Line 1455 of yacc.c */
-#line 140 "parser.yacc"
- { GENERATE ("/"); }
- break;
-
- case 20:
-
-/* Line 1455 of yacc.c */
-#line 142 "parser.yacc"
- { GENERATE ("n"); }
- break;
-
- case 21:
-
-/* Line 1455 of yacc.c */
-#line 144 "parser.yacc"
- { GENERATE ("^"); }
- break;
-
- case 22:
-
-/* Line 1455 of yacc.c */
-#line 146 "parser.yacc"
- { }
- break;
-
-
-
-/* Line 1455 of yacc.c */
-#line 1523 "parser.c"
- default: break;
- }
- YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
-
- *++yyvsp = yyval;
-
- /* Now `shift' the result of the reduction. Determine what state
- that goes to, based on the state we popped back to and the rule
- number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
-
- goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
- /* If not already recovering from an error, report this error. */
- if (!yyerrstatus)
- {
- ++yynerrs;
-#if ! YYERROR_VERBOSE
- yyerror (YY_("syntax error"));
-#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
-#endif
- }
-
-
-
- if (yyerrstatus == 3)
- {
- /* If just tried and failed to reuse lookahead token after an
- error, discard it. */
-
- if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
- else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
- }
-
- /* Else will try to reuse lookahead token after shifting the error
- token. */
- goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR. |
-`---------------------------------------------------*/
-yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
-
- /* Do not reclaim the symbols of the rule which action triggered
- this YYERROR. */
- YYPOPSTACK (yylen);
- yylen = 0;
- YY_STACK_PRINT (yyss, yyssp);
- yystate = *yyssp;
- goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR. |
-`-------------------------------------------------------------*/
-yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
-
- for (;;)
- {
- yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- /* Pop the current state because it cannot handle the error token. */
- if (yyssp == yyss)
- YYABORT;
-
-
- yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
- YYPOPSTACK (1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- }
-
- *++yyvsp = yylval;
-
-
- /* Shift the error token. */
- YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
- yystate = yyn;
- goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here. |
-`-------------------------------------*/
-yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here. |
-`-----------------------------------*/
-yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-#if !defined(yyoverflow) || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here. |
-`-------------------------------------------------*/
-yyexhaustedlab:
- yyerror (YY_("memory exhausted"));
- yyresult = 2;
- /* Fall through. */
-#endif
-
-yyreturn:
- if (yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
- /* Do not reclaim the symbols of the rule which action triggered
- this YYABORT or YYACCEPT. */
- YYPOPSTACK (yylen);
- YY_STACK_PRINT (yyss, yyssp);
- while (yyssp != yyss)
- {
- yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
- YYPOPSTACK (1);
- }
-#ifndef yyoverflow
- if (yyss != yyssa)
- YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
-#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
-}
-
-
-
-/* Line 1675 of yacc.c */
-#line 149 "parser.yacc"
-
-/* End of grammar */
-
-/* Called by yyparse on error. */
-int yyerror (char *s) {
- /* Ignore errors, just print a warning. */
- g_warning ("%s\n", s);
- return 0;
-}
-
-int yylex (YYSTYPE *yylval, void *yyparam) {
- int c;
- parser_control *pc = (parser_control *) yyparam;
-
- /* Ignore whitespace, get first nonwhite character. */
- while ((c = vfs_getc (pc->input)) == ' ' || c == '\t' || c == '\n');
-
- /* End of input ? */
- if (c == EOF)
- return 0;
-
- /* Char starts a number => parse the number. */
- if (isdigit (c)) {
- if (vfs_ungetc (c, pc->input) == EOF)
- return 0;
-
- {
- char *old_locale, *saved_locale;
-
- old_locale = setlocale (LC_ALL, NULL);
- saved_locale = g_strdup (old_locale);
- setlocale (LC_ALL, "C");
- sscanf ((gchar *) ((VFSBuffer *)(pc->input->handle))->iter, "%lf", & yylval->d_value);
-
- while (isdigit(c) || c == '.')
- {
- c = vfs_getc(pc->input);
- }
-
- if (c != EOF && vfs_ungetc (c, pc->input) == EOF)
- return 0;
-
- setlocale (LC_ALL, saved_locale);
- g_free (saved_locale);
- }
- return NUMBER;
- }
-
- /* Char starts an identifier => read the name. */
- if (isalpha (c)) {
- GString *sym_name;
-
- sym_name = g_string_new (NULL);
-
- do {
- sym_name = g_string_append_c (sym_name, c);
-
- /* Get another character. */
- c = vfs_getc (pc->input);
- } while (c != EOF && isalnum (c));
-
- if (c != EOF && vfs_ungetc (c, pc->input) == EOF) {
- g_string_free (sym_name, FALSE);
- return 0;
- }
-
- yylval->s_value = sym_name->str;
-
- g_string_free (sym_name, FALSE);
-
- return NAME;
- }
-
- /* Any other character is a token by itself. */
- return c;
-}
-
-static int load_name (char *str, char **name) {
- int count = 0;
- GString *new = g_string_new (NULL);
-
- while (*str != 0 && *str != ':') {
- g_string_append_c (new, *str++);
- count++;
- }
-
- *name = new->str;
- g_string_free (new, FALSE);
-
- return count;
-}
-
-static gboolean expr_add_compile (expression_t *expr, symbol_dict_t *dict,
- char *str) {
- char op;
- double dval;
- int i;
- char *name;
-
- while ((op = *str++)) {
- switch (op) {
- case 'c': /* A constant. */
- store_byte (expr, 'c');
- sscanf (str, "%lf%n", &dval, &i);
- str += i;
- store_double (expr, dval);
- str++; /* Skip ';' */
- break;
-
- case 'f': /* A function call. */
- store_byte (expr, 'f');
- str += load_name (str, &name);
- i = function_lookup (name);
- if (i < 0) return FALSE; /* Fail on error. */
- store_int (expr, i);
- g_free (name);
- str++; /* Skip ';' */
- break;
-
- case 'l': /* Load a variable. */
- case 's': /* Store a variable. */
- store_byte (expr, op);
- str += load_name (str, &name);
- i = dict_lookup (dict, name);
- store_int (expr, i);
- g_free (name);
- str++; /* Skip ';' */
- break;
-
- default: /* Copy verbatim. */
- store_byte (expr, op);
- break;
- }
- }
-
- return TRUE;
-}
-
-expression_t *expr_compile_string (const char* str, symbol_dict_t *dict)
-{
- parser_control pc;
- VFSFile *stream;
-
- g_return_val_if_fail(str != NULL && dict != NULL, NULL);
-
- stream = vfs_buffer_new_from_string ( (char *) str );
-
- pc.input = stream;
- pc.expr = expr_new ();
- pc.dict = dict;
-
- if (yyparse (&pc) != 0) {
- /* Check for error. */
- expr_free (pc.expr);
- pc.expr = NULL;
- }
-
- vfs_fclose (stream);
-
- return pc.expr;
-}
-
diff --git a/src/paranormal/libcalc/parser.h b/src/paranormal/libcalc/parser.h
deleted file mode 100644
index 6b0c978..0000000
--- a/src/paranormal/libcalc/parser.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* parser.h -- header file for libexp
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef Included_PARSER_H
-#define Included_PARSER_H
-
-#include <glib.h>
-#include <stdio.h>
-#include <audacious/plugin.h>
-#include <libaudcore/vfs_buffer.h>
-
-#include "execute.h"
-
-/* Structure passed do yyparse. */
-typedef struct {
- VFSFile *input;
- expression_t *expr;
- symbol_dict_t *dict;
-} parser_control;
-
-/* Prototypes. */
-expression_t *expr_compile_string (const char *str, symbol_dict_t *dict);
-
-#endif /* Included_PARSER_H */
diff --git a/src/paranormal/libcalc/parser.yacc b/src/paranormal/libcalc/parser.yacc
deleted file mode 100644
index 2172f20..0000000
--- a/src/paranormal/libcalc/parser.yacc
+++ /dev/null
@@ -1,309 +0,0 @@
-/* parser.y -- Bison parser for libexp
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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.
- */
-
-/* suppress conflict warnings */
-%expect 37
-
-/* C declarations. */
-%{
-#include <ctype.h>
-#include <glib.h>
-#include <locale.h>
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "dict.h"
-#include "execute.h"
-#include "function.h"
-#include "parser.h"
-#include "storage.h"
-
-#define YYPARSE_PARAM yyparam
-#define YYLEX_PARAM yyparam
-
-static gboolean expr_add_compile (expression_t *expr, symbol_dict_t *dict,
- char *str);
-
-#define GENERATE(str) if (!expr_add_compile (((parser_control *)yyparam)->expr, \
- ((parser_control *)yyparam)->dict, str)) \
- YYABORT;
-%}
-
-/* Data types. */
-%union {
-char *s_value;
-char c_value;
-double d_value;
-int i_value;
-}
-
-%{
-int yyerror (char * s);
-int yylex (YYSTYPE * yylval, void * yyparam);
-%}
-
-%pure_parser
-
-/* Terminal symbols. */
-%token <s_value> NAME
-%token <d_value> NUMBER
-
-/* Precedence rules. */
-%right '='
-%left '-' '+'
-%left '*' '/'
-%left NEG
-%right '^'
-
-/* Grammar follows */
-%%
-
-/* Input consits of a (possibly empty) list of expressions. */
-input: /* empty */
- | input expression_list
-;
-
-/* expression_list is a ';' separated list of expressions. */
-expression_list: /* empty */
- | expression
- { }
- | expression_list ';'
- | error ';'
- { yyerrok; }
-
-/* argument list is a comma separated list od expressions */
-argument_list:
- expression
- {
- }
- | argument_list ',' expression
- {
- }
-
-/* expression is a C-like expression. */
-expression: NUMBER
- {
- char *buf = g_strdup_printf ("c%f:", $1);
- GENERATE (buf);
- g_free (buf);
- }
- | NAME
- {
- char *buf = g_strdup_printf ("l%s:", $1);
- GENERATE (buf);
- g_free (buf);
- }
- | NAME '=' expression
- {
- char *buf = g_strdup_printf ("s%s:", $1);
- GENERATE (buf);
- g_free (buf);
- }
- | NAME '(' argument_list ')'
- {
- char *buf = g_strdup_printf ("f%s:", $1);
- GENERATE (buf);
- g_free (buf);
- }
-
- | expression '>' expression
- { GENERATE (">"); }
- | expression '<' expression
- { GENERATE ("<"); }
-
- | expression '+' expression
- { GENERATE ("+"); }
- | expression '-' expression
- { GENERATE ("-"); }
- | expression '*' expression
- { GENERATE ("*"); }
- | expression '/' expression
- { GENERATE ("/"); }
- | '-' expression %prec NEG
- { GENERATE ("n"); }
- | expression '^' expression
- { GENERATE ("^"); }
- | '(' expression ')'
- { }
-;
-
-%%
-/* End of grammar */
-
-/* Called by yyparse on error. */
-int yyerror (char *s) {
- /* Ignore errors, just print a warning. */
- g_warning ("%s\n", s);
- return 0;
-}
-
-int yylex (YYSTYPE *yylval, void *yyparam) {
- int c;
- parser_control *pc = (parser_control *) yyparam;
-
- /* Ignore whitespace, get first nonwhite character. */
- while ((c = vfs_getc (pc->input)) == ' ' || c == '\t' || c == '\n');
-
- /* End of input ? */
- if (c == EOF)
- return 0;
-
- /* Char starts a number => parse the number. */
- if (isdigit (c)) {
- if (vfs_ungetc (c, pc->input) == EOF)
- return 0;
-
- {
- char *old_locale, *saved_locale;
-
- old_locale = setlocale (LC_ALL, NULL);
- saved_locale = g_strdup (old_locale);
- setlocale (LC_ALL, "C");
- sscanf ((gchar *) ((VFSBuffer *)(pc->input->handle))->iter, "%lf", & yylval->d_value);
-
- while (isdigit(c) || c == '.')
- {
- c = vfs_getc(pc->input);
- }
-
- if (c != EOF && vfs_ungetc (c, pc->input) == EOF)
- return 0;
-
- setlocale (LC_ALL, saved_locale);
- g_free (saved_locale);
- }
- return NUMBER;
- }
-
- /* Char starts an identifier => read the name. */
- if (isalpha (c)) {
- GString *sym_name;
-
- sym_name = g_string_new (NULL);
-
- do {
- sym_name = g_string_append_c (sym_name, c);
-
- /* Get another character. */
- c = vfs_getc (pc->input);
- } while (c != EOF && isalnum (c));
-
- if (c != EOF && vfs_ungetc (c, pc->input) == EOF) {
- g_string_free (sym_name, FALSE);
- return 0;
- }
-
- yylval->s_value = sym_name->str;
-
- g_string_free (sym_name, FALSE);
-
- return NAME;
- }
-
- /* Any other character is a token by itself. */
- return c;
-}
-
-static int load_name (char *str, char **name) {
- int count = 0;
- GString *new = g_string_new (NULL);
-
- while (*str != 0 && *str != ':') {
- g_string_append_c (new, *str++);
- count++;
- }
-
- *name = new->str;
- g_string_free (new, FALSE);
-
- return count;
-}
-
-static gboolean expr_add_compile (expression_t *expr, symbol_dict_t *dict,
- char *str) {
- char op;
- double dval;
- int i;
- char *name;
-
- while ((op = *str++)) {
- switch (op) {
- case 'c': /* A constant. */
- store_byte (expr, 'c');
- sscanf (str, "%lf%n", &dval, &i);
- str += i;
- store_double (expr, dval);
- str++; /* Skip ';' */
- break;
-
- case 'f': /* A function call. */
- store_byte (expr, 'f');
- str += load_name (str, &name);
- i = function_lookup (name);
- if (i < 0) return FALSE; /* Fail on error. */
- store_int (expr, i);
- g_free (name);
- str++; /* Skip ';' */
- break;
-
- case 'l': /* Load a variable. */
- case 's': /* Store a variable. */
- store_byte (expr, op);
- str += load_name (str, &name);
- i = dict_lookup (dict, name);
- store_int (expr, i);
- g_free (name);
- str++; /* Skip ';' */
- break;
-
- default: /* Copy verbatim. */
- store_byte (expr, op);
- break;
- }
- }
-
- return TRUE;
-}
-
-expression_t *expr_compile_string (const char* str, symbol_dict_t *dict)
-{
- parser_control pc;
- VFSFile *stream;
-
- g_return_val_if_fail(str != NULL && dict != NULL, NULL);
-
- stream = vfs_buffer_new_from_string ( (char *) str );
-
- pc.input = stream;
- pc.expr = expr_new ();
- pc.dict = dict;
-
- if (yyparse (&pc) != 0) {
- /* Check for error. */
- expr_free (pc.expr);
- pc.expr = NULL;
- }
-
- vfs_fclose (stream);
-
- return pc.expr;
-}
diff --git a/src/paranormal/libcalc/storage.c b/src/paranormal/libcalc/storage.c
deleted file mode 100644
index 249388a..0000000
--- a/src/paranormal/libcalc/storage.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* storage.c --
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-#include <stddef.h>
-
-#include "storage.h"
-
-/* Code block. */
-
-expression_t *expr_new (void) {
- expression_t *new_expr;
-
- new_expr = (expression_t *)g_malloc (sizeof(expression_t));
- new_expr->data = g_string_new (NULL);
- return new_expr;
-}
-
-void expr_free (expression_t *expr) {
- if (!expr)
- return;
-
- g_string_free (expr->data, TRUE);
- g_free (expr);
-}
-
-static void load_data (char *str, void *dest, size_t size) {
- char *ch = (char *)dest;
- while (size--)
- *ch++ = *str++;
-}
-
-int load_int (char *str) {
- int val;
- load_data (str, &val, sizeof(val));
- return val;
-}
-
-double load_double (char *str) {
- double val;
- load_data (str, &val, sizeof(val));
- return val;
-}
-
-static void store_data (expression_t *expr, void *src, size_t size) {
- char *ch = (char *)src;
- while (size--)
- store_byte (expr, *ch++);
-}
-
-void store_byte (expression_t *expr, char byte) {
- g_string_append_c (expr->data, byte);
-}
-
-void store_int (expression_t *expr, int val) {
- store_data (expr, &val, sizeof(val));
-}
-
-void store_double (expression_t *expr, double val) {
- store_data (expr, &val, sizeof(val));
-}
diff --git a/src/paranormal/libcalc/storage.h b/src/paranormal/libcalc/storage.h
deleted file mode 100644
index a5875b2..0000000
--- a/src/paranormal/libcalc/storage.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* storage.h --
- *
- * Copyright (C) 2001 Janusz Gregorczyk <jgregor@kki.net.pl>
- *
- * This file is part of xvs.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef Included_STORAGE_H
-#define Included_STORAGE_H
-
-#include <glib.h>
-
-typedef struct {
- GString *data;
-} expression_t;
-
-/* Expr block. */
-expression_t *expr_new (void);
-void expr_free (expression_t *expr);
-
-int load_int (char *str);
-double load_double (char *str);
-
-void store_byte (expression_t *expr, char byte);
-void store_int (expression_t *expr, int val);
-void store_double (expression_t *expr, double val);
-
-#endif /* Included_STORAGE_H */
diff --git a/src/paranormal/misc.c b/src/paranormal/misc.c
deleted file mode 100644
index 70abdde..0000000
--- a/src/paranormal/misc.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <glib.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "pn_utils.h"
-
-/* ******************** misc_floater ******************** */
-static struct pn_actuator_option_desc misc_floater_opts[] =
-{
- { "value", "The colour value for the floater.",
- OPT_TYPE_INT, { ival: 255 } },
- { NULL }
-};
-
-typedef enum
-{
- float_up = 0x1,
- float_down = 0x2,
- float_left = 0x4,
- float_right = 0x8,
-} FloaterDirection;
-
-struct floater_state_data
-{
- FloaterDirection dir;
- gint x;
- gint y;
-};
-
-static void
-misc_floater_init(gpointer *data)
-{
- struct floater_state_data *opaque_data = g_new0(struct floater_state_data, 1);
- *data = opaque_data;
- opaque_data->x = rand() % pn_image_data->width;
- opaque_data->y = rand() % pn_image_data->height;
- opaque_data->dir = (FloaterDirection) rand() % 15; /* sum of all dir values */
-}
-
-static void
-misc_floater_cleanup(gpointer data)
-{
- g_free(data);
-}
-
-/*
- * This implementation isn't very great.
- * Anyone want to improve it? :(
- */
-static void
-misc_floater_exec(const struct pn_actuator_option *opts, gpointer data)
-{
- struct floater_state_data *opaque_data = (struct floater_state_data *) data;
- guchar value = (opts[0].val.ival < 0 || opts[0].val.ival > 255) ? 255 : opts[0].val.ival;
-
- /* determine the root coordinate first */
- if (opaque_data->dir & float_up)
- opaque_data->y -= 1;
- if (opaque_data->dir & float_down)
- opaque_data->y += 1;
-
- if (opaque_data->dir & float_left)
- opaque_data->x -= 1;
- if (opaque_data->dir & float_right)
- opaque_data->x += 1;
-
- /* make sure we're within surface boundaries. segfaults suck, afterall. */
- if (opaque_data->x + 1 <= pn_image_data->width &&
- opaque_data->x - 1 >= 0 &&
- opaque_data->y + 1 <= pn_image_data->height &&
- opaque_data->y - 1 >= 0)
- {
- /* draw it. i could use a loop here, but i don't see much reason in it,
- * so i don't think i will at this time. -nenolod
- */
- pn_image_data->surface[0][PN_IMG_INDEX(opaque_data->x, opaque_data->y)] = value;
- pn_image_data->surface[0][PN_IMG_INDEX(opaque_data->x + 1, opaque_data->y)] = value;
- pn_image_data->surface[0][PN_IMG_INDEX(opaque_data->x - 1, opaque_data->y)] = value;
- pn_image_data->surface[0][PN_IMG_INDEX(opaque_data->x, opaque_data->y + 1)] = value;
- pn_image_data->surface[0][PN_IMG_INDEX(opaque_data->x, opaque_data->y - 1)] = value;
- }
-
- /* check if we need to change direction yet, and if so, do so. */
- if (pn_new_beat == TRUE)
- opaque_data->dir = (FloaterDirection) rand() % 15; /* sum of all dir values */
-
- /* now adjust the direction so we stay in boundary */
- if (opaque_data->x - 1 <= 0 && opaque_data->dir & float_left)
- {
- opaque_data->dir &= ~float_left;
- opaque_data->dir |= float_right;
- }
-
- if (opaque_data->x + 1 >= pn_image_data->width && opaque_data->dir & float_right)
- {
- opaque_data->dir &= ~float_right;
- opaque_data->dir |= float_left;
- }
-
- if (opaque_data->y - 1 <= 0 && opaque_data->dir & float_up)
- {
- opaque_data->dir &= ~float_up;
- opaque_data->dir |= float_down;
- }
-
- if (opaque_data->y + 1 >= pn_image_data->height && opaque_data->dir & float_down)
- {
- opaque_data->dir &= ~float_down;
- opaque_data->dir |= float_up;
- }
-}
-
-struct pn_actuator_desc builtin_misc_floater =
-{
- "misc_floater",
- "Floating Particle",
- "A floating particle.",
- 0, misc_floater_opts,
- misc_floater_init, misc_floater_cleanup, misc_floater_exec
-};
-
diff --git a/src/paranormal/paranormal.c b/src/paranormal/paranormal.c
deleted file mode 100644
index 1f4e201..0000000
--- a/src/paranormal/paranormal.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <math.h>
-
-#include <SDL.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-
-/* SDL stuffs */
-SDL_Surface *screen;
-
-/* Globals */
-struct pn_rc *pn_rc;
-struct pn_image_data *pn_image_data;
-struct pn_sound_data *pn_sound_data;
-
-/* Trig Pre-Computes */
-float sin_val[360];
-float cos_val[360];
-
-gboolean pn_new_beat;
-
-/* **************** drawing doodads **************** */
-
-static void
-blit_to_screen (void)
-{
- int j;
-
- SDL_LockSurface (screen);
-
- /* FIXME: add scaling support */
-
- SDL_SetPalette (screen, SDL_LOGPAL|SDL_PHYSPAL,
- (SDL_Color*)pn_image_data->cmap, 0, 256);
- SDL_SetAlpha (screen, 0, 255);
-
- for (j=0; j<pn_image_data->height; j++)
- memcpy (screen->pixels + j*screen->pitch,
- pn_image_data->surface[0] + j*pn_image_data->width,
- pn_image_data->width);
-
-
- SDL_UnlockSurface (screen);
-
- SDL_UpdateRect (screen, 0, 0, 0, 0);
-}
-
-static void
-resize_video (guint w, guint h)
-{
- pn_image_data->width = w;
- pn_image_data->height = h;
-
- if (pn_image_data->surface[0])
- g_free (pn_image_data->surface[0]);
- if (pn_image_data->surface[1])
- g_free (pn_image_data->surface[1]);
-
- pn_image_data->surface[0] = g_malloc0 (w * h);
- pn_image_data->surface[1] = g_malloc0 (w * h);
-
- screen = SDL_SetVideoMode (w, h, 8, SDL_HWSURFACE |
- SDL_HWPALETTE | SDL_RESIZABLE);
- if (! screen)
- pn_fatal_error ("Unable to create a new SDL window: %s",
- SDL_GetError ());
-}
-
-static void
-take_screenshot (void)
-{
- char fname[32];
- struct stat buf;
- int i=0;
-
- do
- sprintf (fname, "pn_%05d.bmp", ++i);
- while (stat (fname, &buf) == 0);
-
- SDL_SaveBMP (screen, fname);
-}
-
-/* FIXME: This should resize the video to a user-set
- fullscreen res */
-static void
-toggle_fullscreen (void)
-{
- SDL_WM_ToggleFullScreen (screen);
- if (SDL_ShowCursor (SDL_QUERY) == SDL_ENABLE)
- SDL_ShowCursor (SDL_DISABLE);
- else
- SDL_ShowCursor (SDL_ENABLE);
-}
-
-/* **************** basic renderer management **************** */
-void
-pn_init (void)
-{
- int i;
-#ifdef FULLSCREEN_HACK
- char SDL_windowhack[32];
- GdkScreen *screen;
-#endif
-
- pn_sound_data = g_new0 (struct pn_sound_data, 1);
- pn_image_data = g_new0 (struct pn_image_data, 1);
-
-#ifdef FULLSCREEN_HACK
- screen = gdk_screen_get_default();
- sprintf(SDL_windowhack,"SDL_WINDOWID=%d",
- GDK_WINDOW_XWINDOW(gdk_screen_get_root_window(screen)));
- putenv(SDL_windowhack);
-#endif
-
- if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE) < 0)
- pn_fatal_error ("Unable to initialize SDL: %s", SDL_GetError ());
-
-#ifndef FULLSCREEN_HACK
- resize_video (640, 360);
-#else
- resize_video (1280, 1024);
-#endif
-
- SDL_WM_SetCaption ("Paranormal Visualization Studio", PACKAGE);
-
- for(i=0; i<360; i++)
- {
- sin_val[i] = sin(i*(M_PI/180.0));
- cos_val[i] = cos(i*(M_PI/180.0));
- }
-}
-
-void
-pn_cleanup (void)
-{
- SDL_FreeSurface (screen);
- SDL_Quit ();
-
-
- if (pn_image_data)
- {
- if (pn_image_data->surface[0])
- g_free (pn_image_data->surface[0]);
- if (pn_image_data->surface[1])
- g_free (pn_image_data->surface[1]);
- g_free (pn_image_data);
- }
- if (pn_sound_data)
- g_free (pn_sound_data);
-}
-
-/* Renders one frame and handles the SDL window */
-void
-pn_render (void)
-{
- SDL_Event event;
-
- /* Handle window events */
- while (SDL_PollEvent (&event))
- {
- switch (event.type)
- {
- case SDL_QUIT:
- pn_quit ();
- g_assert_not_reached ();
- case SDL_KEYDOWN:
- switch (event.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- pn_quit ();
- g_assert_not_reached ();
- case SDLK_RETURN:
- if (event.key.keysym.mod & (KMOD_ALT | KMOD_META))
- toggle_fullscreen ();
- break;
- case SDLK_BACKQUOTE:
- take_screenshot ();
- break;
- default:
- break;
- }
- break;
- case SDL_VIDEORESIZE:
- resize_video (event.resize.w, event.resize.h);
- break;
- }
- }
-
- pn_new_beat = pn_is_new_beat();
-
- if (pn_rc->actuator)
- {
- exec_actuator (pn_rc->actuator);
- blit_to_screen ();
- }
-}
-
-/* this MUST be called if a builtin's output is to surface[1]
- (by the builtin, after it is done) */
-void
-pn_swap_surfaces (void)
-{
- guchar *tmp = pn_image_data->surface[0];
- pn_image_data->surface[0] = pn_image_data->surface[1];
- pn_image_data->surface[1] = tmp;
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/src/paranormal/paranormal.h b/src/paranormal/paranormal.h
deleted file mode 100644
index aeefea6..0000000
--- a/src/paranormal/paranormal.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _PARANORMAL_H
-#define _PARANORMAL_H
-
-#include <glib.h>
-
-#include "actuators.h"
-
-struct pn_sound_data
-{
- gint16 pcm_data[2][512];
- gint16 freq_data[2][256];
-};
-
-struct pn_image_data
-{
- int width, height;
- struct pn_color cmap[256];
- guchar *surface[2];
-};
-
-/* The executable (ie xmms.c or standalone.c)
- is responsible for allocating this and filling
- it with default/saved values */
-struct pn_rc
-{
- struct pn_actuator *actuator;
-};
-
-/* core funcs */
-void pn_init (void);
-void pn_cleanup (void);
-void pn_render (void);
-void pn_swap_surfaces (void);
-
-/* Implemented elsewhere (ie xmms.c or standalone.c) */
-void pn_set_rc ();
-void pn_fatal_error (const char *fmt, ...);
-void pn_error (const char *fmt, ...);
-void pn_quit (void);
-
-/* Implimented in cfg.c */
-void pn_configure (void);
-
-/* globals used for rendering */
-extern struct pn_rc *pn_rc;
-extern struct pn_sound_data *pn_sound_data;
-extern struct pn_image_data *pn_image_data;
-
-extern gboolean pn_new_beat;
-
-/* global trig pre-computes */
-extern float sin_val[360];
-extern float cos_val[360];
-
-/* beat detection */
-int pn_is_new_beat(void);
-
-#endif /* _PARANORMAL_H */
diff --git a/src/paranormal/plugin.c b/src/paranormal/plugin.c
deleted file mode 100644
index 86c6e57..0000000
--- a/src/paranormal/plugin.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: issues with not uniniting variables between
- enables? I wasn't too careful about that, but it
- seems to work fine. If there are problems perhaps
- look for a bug there?
-*/
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <memory.h>
-#include <math.h>
-#include <setjmp.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <audacious/i18n.h>
-
-#include <gtk/gtk.h>
-#include <audacious/plugin.h>
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-#include <SDL.h>
-#include <SDL_thread.h>
-
-#ifdef _POSIX_PRIORITY_SCHEDULING
-#include <sched.h>
-#endif
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "presets.h"
-#include "containers.h"
-
-/* Error reporting dlg */
-static GtkWidget *err_dialog;
-
-/* Draw thread stuff */
-/* FIXME: Do I need mutex for pn_done? */
-static SDL_Thread *draw_thread = NULL;
-static SDL_mutex *sound_data_mutex;
-static SDL_mutex *config_mutex;
-
-static gboolean pn_done = FALSE;
-jmp_buf quit_jmp;
-gboolean timeout_set = FALSE;
-guint quit_timeout;
-
-/* Sound stuffs */
-static gboolean new_pcm_data = FALSE;
-static gboolean new_freq_data = FALSE;
-static gint16 tmp_pcm_data[2][512];
-static gint16 tmp_freq_data[2][256];
-
-/* XMMS interface */
-static void pn_xmms_init (void);
-static void pn_xmms_cleanup (void);
-static void pn_xmms_about (void);
-static void pn_xmms_configure (void);
-static void pn_xmms_render_pcm (gint16 data[2][512]);
-static void pn_xmms_render_freq (gint16 data[2][256]);
-
-static VisPlugin pn_vp =
-{
- .description = "Paranormal Visualization Studio",
- .num_pcm_chs_wanted = 2,
- .num_freq_chs_wanted = 2,
- .init = pn_xmms_init,
- .cleanup = pn_xmms_cleanup,
- .about = pn_xmms_about,
- .configure = pn_xmms_configure,
- .render_pcm = pn_xmms_render_pcm,
- .render_freq = pn_xmms_render_freq
-};
-
-VisPlugin *pn_vplist[] = { &pn_vp, NULL };
-
-DECLARE_PLUGIN(paranormal, NULL, NULL, NULL, NULL, NULL, NULL, pn_vplist,NULL);
-
-static void
-load_pn_rc (void)
-{
- struct pn_actuator *a, *b;
-
- if (! pn_rc)
- pn_rc = g_new0 (struct pn_rc, 1);
-
- /* load a default preset */
- pn_rc->actuator = create_actuator ("container_simple");
- if (! pn_rc->actuator) goto ugh;
- a = create_actuator ("container_once");
- if (! a) goto ugh;
- b = create_actuator ("cmap_bwgradient");
- if (! b) goto ugh;
- b->options[2].val.cval.r = 64;
- b->options[2].val.cval.g = 128;
- container_add_actuator (a, b);
- container_add_actuator (pn_rc->actuator, a);
-
- a = create_actuator ("wave_horizontal");
- if (! a) goto ugh;
- container_add_actuator (pn_rc->actuator, a);
-
- a = create_actuator ("xform_movement");
- if (! a) goto ugh;
- a->options[0].val.sval = g_strdup("d = cos(d)^2;");
- container_add_actuator (pn_rc->actuator, a);
-
- a = create_actuator ("general_fade");
- if (! a) goto ugh;
- container_add_actuator (pn_rc->actuator, a);
-
- a = create_actuator ("general_blur");
- if (! a) goto ugh;
- container_add_actuator (pn_rc->actuator, a);
-
- return;
-
- ugh:
- if (pn_rc->actuator)
- destroy_actuator (pn_rc->actuator);
- pn_error ("Error loading default preset");
-}
-
-static int
-draw_thread_fn (gpointer data)
-{
- gfloat fps = 0.0;
- guint last_time = 0, last_second = 0;
- guint this_time;
- pn_init ();
-
- /* Used when pn_quit is called from this thread */
- if (setjmp (quit_jmp) != 0)
- pn_done = TRUE;
-
- while (! pn_done)
- {
- SDL_mutexP (sound_data_mutex);
- if (new_freq_data)
- {
- memcpy (pn_sound_data->freq_data, tmp_freq_data,
- sizeof (gint16) * 2 * 256);
- new_freq_data = FALSE;
- }
- if (new_pcm_data)
- {
- memcpy (pn_sound_data->pcm_data, tmp_pcm_data,
- sizeof (gint16) * 2 * 512);
- new_freq_data = FALSE;
- }
- SDL_mutexV (sound_data_mutex);
- SDL_mutexP (config_mutex);
- pn_render ();
- SDL_mutexV (config_mutex);
-
- /* Compute the FPS */
- this_time = SDL_GetTicks ();
-
- fps = fps * .95 + (1000. / (gfloat) (this_time - last_time)) * .05;
- if (this_time > 2000 + last_second)
- {
- last_second = this_time;
- g_print ("FPS: %f\n", fps);
- }
- last_time = this_time;
-
-#ifdef _POSIX_PRIORITY_SCHEDULING
- sched_yield();
-#endif
- }
-
- /* Just in case a pn_quit () was called in the loop */
-/* SDL_mutexV (sound_data_mutex); */
-
- pn_cleanup ();
-
- return 0;
-}
-
-/* Is there a better way to do this? this = messy
- It appears that calling disable_plugin () in some
- thread other than the one that called pn_xmms_init ()
- causes a seg fault :( */
-static int
-quit_timeout_fn (gpointer data)
-{
- if (pn_done)
- {
- pn_vp.disable_plugin (&pn_vp);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-pn_xmms_init (void)
-{
- /* If it isn't already loaded, load the run control */
- if (! pn_rc)
- load_pn_rc ();
-
- sound_data_mutex = SDL_CreateMutex ();
- config_mutex = SDL_CreateMutex ();
- if (! sound_data_mutex)
- pn_fatal_error ("Unable to create a new mutex: %s",
- SDL_GetError ());
-
- pn_done = FALSE;
- draw_thread = SDL_CreateThread (draw_thread_fn, NULL);
- if (! draw_thread)
- pn_fatal_error ("Unable to create a new thread: %s",
- SDL_GetError ());
-
- /* Add a gtk timeout to test for quits */
- quit_timeout = gtk_timeout_add (1000, quit_timeout_fn, NULL);
- timeout_set = TRUE;
-}
-
-static void
-pn_xmms_cleanup (void)
-{
- if (timeout_set)
- {
- gtk_timeout_remove (quit_timeout);
- timeout_set = FALSE;
- }
-
- if (draw_thread)
- {
- pn_done = TRUE;
- SDL_WaitThread (draw_thread, NULL);
- draw_thread = NULL;
- }
-
- if (sound_data_mutex)
- {
- SDL_DestroyMutex (sound_data_mutex);
- sound_data_mutex = NULL;
- }
-
- if (config_mutex)
- {
- SDL_DestroyMutex (config_mutex);
- config_mutex = NULL;
- }
-}
-
-static void
-pn_xmms_about (void)
-{
- static GtkWidget * aboutbox = NULL;
- audgui_simple_message (& aboutbox, GTK_MESSAGE_INFO,
- "About Paranormal Visualization Studio",
-"Paranormal Visualization Studio " VERSION "\n\n\
-Copyright (C) 2006, William Pitcock <nenolod -at- nenolod.net>\n\
-Portions Copyright (C) 2001, Jamie Gennis <jgennis -at- mindspring.com>\n\
-\n\
-This program is free software; you can redistribute it and/or modify\n\
-it under the terms of the GNU General Public License as published by\n\
-the Free Software Foundation; either version 2 of the License, or\n\
-(at your option) any later version.\n\
-\n\
-This program is distributed in the hope that it will be useful,\n\
-but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
-GNU General Public License for more details.\n\
-\n\
-You should have received a copy of the GNU General Public License\n\
-along with this program; if not, write to the Free Software\n\
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301\n\
-USA");
-}
-
-static void
-pn_xmms_configure (void)
-{
- /* We should already have a GDK_THREADS_ENTER
- but we need to give it config_mutex */
- if (config_mutex)
- SDL_mutexP (config_mutex);
-
- if (! pn_rc)
- load_pn_rc ();
-
- pn_configure ();
-
- if (config_mutex)
- SDL_mutexV (config_mutex);
-}
-
-static void
-pn_xmms_render_pcm (gint16 data[2][512])
-{
- SDL_mutexP (sound_data_mutex);
- memcpy (tmp_pcm_data, data, sizeof (gint16) * 2 * 512);
- new_pcm_data = TRUE;
- SDL_mutexV (sound_data_mutex);
-}
-
-static void
-pn_xmms_render_freq (gint16 data[2][256])
-{
- SDL_mutexP (sound_data_mutex);
- memcpy (tmp_freq_data, data, sizeof (gint16) * 2 * 256);
- new_freq_data = TRUE;
- SDL_mutexV (sound_data_mutex);
-}
-
-/* **************** paranormal.h stuff **************** */
-
-void
-pn_set_rc (struct pn_rc *new_rc)
-{
- if (config_mutex)
- SDL_mutexP (config_mutex);
-
- if (! pn_rc)
- load_pn_rc ();
-
- if (pn_rc->actuator)
- destroy_actuator (pn_rc->actuator);
- pn_rc->actuator = new_rc->actuator;
-
- if (config_mutex)
- SDL_mutexV (config_mutex);
-}
-
-void
-pn_fatal_error (const char *fmt, ...)
-{
- char *errstr;
- va_list ap;
- GtkWidget *dialog;
- GtkWidget *close, *label;
-
- /* Don't wanna try to lock GDK if we already have it */
- if (draw_thread && SDL_ThreadID () == SDL_GetThreadID (draw_thread))
- GDK_THREADS_ENTER ();
-
- /* now report the error... */
- va_start (ap, fmt);
- errstr = g_strdup_vprintf (fmt, ap);
- va_end (ap);
-
- dialog=gtk_dialog_new();
- gtk_window_set_title(GTK_WINDOW(dialog), "Error - Paranormal Visualization Studio - " VERSION);
- gtk_container_border_width (GTK_CONTAINER (dialog), 8);
-
- label=gtk_label_new(errstr);
- fprintf (stderr, "%s\n", errstr);
- g_free (errstr);
-
- close = gtk_button_new_with_label ("Close");
- gtk_signal_connect_object (GTK_OBJECT (close), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy),
- GTK_OBJECT (dialog));
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE,
- FALSE, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), close,
- FALSE, FALSE, 0);
- gtk_widget_show (label);
- gtk_widget_show (close);
-
- gtk_widget_show (dialog);
- gtk_widget_grab_focus (dialog);
-
- if (draw_thread && SDL_ThreadID () == SDL_GetThreadID (draw_thread))
- GDK_THREADS_LEAVE ();
-
- pn_quit ();
-}
-
-
-void
-pn_error (const char *fmt, ...)
-{
- char *errstr;
- va_list ap;
- static GtkWidget *text;
- static GtkTextBuffer *textbuf;
-
- /* now report the error... */
- va_start (ap, fmt);
- errstr = g_strdup_vprintf (fmt, ap);
- va_end (ap);
- fprintf (stderr, "Paranormal-CRITICAL **: %s\n", errstr);
-
- /* This is the easiest way of making sure we don't
- get stuck trying to lock a mutex that this thread
- already owns since this fn can be called from either
- thread */
- if (draw_thread && SDL_ThreadID () == SDL_GetThreadID (draw_thread))
- GDK_THREADS_ENTER ();
-
- if (! err_dialog)
- {
- GtkWidget *close;
-
- err_dialog=gtk_dialog_new();
- gtk_window_set_title (GTK_WINDOW (err_dialog), "Error - Paranormal Visualization Studio - " VERSION);
- gtk_window_set_policy (GTK_WINDOW (err_dialog), FALSE, FALSE, FALSE);
- gtk_widget_set_usize (err_dialog, 400, 200);
- gtk_container_border_width (GTK_CONTAINER (err_dialog), 8);
-
- textbuf = gtk_text_buffer_new(NULL);
- text = gtk_text_view_new_with_buffer (textbuf);
-
- close = gtk_button_new_with_label ("Close");
- gtk_signal_connect_object (GTK_OBJECT (close), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_hide),
- GTK_OBJECT (err_dialog));
- gtk_signal_connect_object (GTK_OBJECT (err_dialog), "delete-event",
- GTK_SIGNAL_FUNC (gtk_widget_hide),
- GTK_OBJECT (err_dialog));
-
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (err_dialog)->vbox), text, FALSE,
- FALSE, 0);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (err_dialog)->action_area), close,
- FALSE, FALSE, 0);
- gtk_widget_show (text);
- gtk_widget_show (close);
- }
-
- gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuf), errstr, -1);
- g_free (errstr);
-
- gtk_widget_show (err_dialog);
- gtk_widget_grab_focus (err_dialog);
-
- if (draw_thread && SDL_ThreadID () == SDL_GetThreadID (draw_thread))
- GDK_THREADS_LEAVE ();
-}
-
-
-/* This is confusing...
- Don't call this from anywhere but the draw thread or
- the initialization xmms thread (ie NOT the xmms sound
- data functions) */
-void
-pn_quit (void)
-{
- if (draw_thread && SDL_ThreadID () == SDL_GetThreadID (draw_thread))
- {
- /* We're in the draw thread so be careful */
- longjmp (quit_jmp, 1);
- }
- else
- {
- /* We're not in the draw thread, so don't sweat it...
- addendum: looks like we have to bend over backwards (forwards?)
- for xmms here too */
- pn_vp.disable_plugin (&pn_vp);
- while (1)
- gtk_main_iteration ();
- }
-}
diff --git a/src/paranormal/pn_utils.h b/src/paranormal/pn_utils.h
deleted file mode 100644
index 50d9b77..0000000
--- a/src/paranormal/pn_utils.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _PN_UTILS_H
-#define _PN_UTILS_H
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define CAP(i,c) (i > c ? c : i < -(c) ? -(c) : i)
-#define CAPHILO(i,h,l) (i > h ? h : i < l ? l : i)
-#define CAPHI(i,h) (i > h ? h : i)
-#define CAPLO(i,l) (i < l ? l : i)
-
-#define PN_IMG_INDEX(x,y) ((x) + (pn_image_data->width * (y)))
-
-#endif /* _PN_UTILS_H */
diff --git a/src/paranormal/presets.c b/src/paranormal/presets.c
deleted file mode 100644
index c2bf3c6..0000000
--- a/src/paranormal/presets.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: add documentation support to preset files */
-/* FIXME: add multiple-presets-per-file support (maybe) */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <errno.h>
-
-#include <glib.h>
-#include <libxml/parser.h>
-#include <libxml/xmlmemory.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "containers.h"
-
-/* cur->name should be the actuator name */
-static void
-parse_actuator (xmlNodePtr cur, struct pn_actuator *a)
-{
- int i;
- char *content;
- struct pn_actuator *child;
-
- for (cur = cur->xmlChildrenNode; cur; cur = cur->next)
- {
- if (xmlIsBlankNode (cur) || cur->type != XML_ELEMENT_NODE)
- continue;
-
- /* see if it's an option */
- for (i=0; a->options && a->options[i].desc; i++)
- if (! xmlStrcmp (cur->name,
- (const xmlChar *) a->options[i].desc->name))
- break;
-
- if (a->options && a->options[i].desc)
- {
- /* it is an option, so let's set it! */
- content = (char*)xmlNodeGetContent (cur);
-
- /* FIXME: warning? */
- if (! content)
- continue;
-
- /* FIXME: perhaps do a little better job of error checking? */
- switch (a->options[i].desc->type)
- {
- case OPT_TYPE_INT:
- a->options[i].val.ival = (int)strtol (content, NULL, 0);
- break;
- case OPT_TYPE_FLOAT:
- a->options[i].val.fval = (float)strtod (content, NULL);
- break;
- case OPT_TYPE_STRING:
- a->options[i].val.sval = g_strdup (content);
- break;
- case OPT_TYPE_COLOR:
- {
- guint r,g,b;
- char *s = content+1;
- r = strtoul (s, &s, 0);
- if (r > 255 || ! (s = strchr (s, ',')))
- goto bad_color;
- g = strtoul (s+1, &s, 0);
- if (g > 255 || ! (s = strchr (s, ',')))
- goto bad_color;
- b = strtoul (s+1, NULL, 0);
- if (b > 255)
- goto bad_color;
-
- a->options[i].val.cval.r = (guchar)r;
- a->options[i].val.cval.g = (guchar)g;
- a->options[i].val.cval.b = (guchar)b;
-
- break;
- }
- bad_color:
- pn_error ("parse error: invalid color value: option \"%s\" ignored.\n"
- " correct syntax: (r,g,b) where r, g, and b are the\n"
- " red, green, and blue components of the "
- "color, respectively", cur->name);
- break;
-
- case OPT_TYPE_COLOR_INDEX:
- {
- int c = (int)strtol (content, NULL, 0);
- if (c < 0 || c > 255)
- pn_error ("parse error: invalid color index \"%s\" (%d): option ignored.\n"
- " the value must be between 0 and 255",
- cur->name, c);
- else
- a->options[i].val.ival = c;
- break;
- }
- case OPT_TYPE_BOOLEAN:
- {
- char *c, *d;
- for (c=content; isspace (*c); c++);
- for (d=c; !isspace(*d); d++);
- *d = '\0';
- if (g_strcasecmp (c, "true") == 0)
- a->options[i].val.bval = TRUE;
- else if (g_strcasecmp (c, "false") == 0)
- a->options[i].val.bval = FALSE;
- else
- pn_error ("parse error: invalid boolean value \"%s\" (%s): option ignored.\n"
- " the value must be either 'true' or 'false'",
- cur->name, c);
- }
- }
-
- /* gotta free content */
- xmlFree ((xmlChar*)content);
- }
- /* See if we have a child actuator */
- else if (a->desc->flags & ACTUATOR_FLAG_CONTAINER
- && (child = create_actuator ((char*)cur->name)))
- {
- container_add_actuator (a, child);
- parse_actuator (cur, child);
- }
- else
- /* We have an error */
- pn_error ("parse error: unknown entity \"%s\": ignored.", cur->name);
- }
-}
-
-struct pn_actuator *
-load_preset (const char *filename)
-{
- xmlDocPtr doc;
- xmlNodePtr cur;
- struct pn_actuator *a = NULL;
-
- doc = xmlParseFile (filename);
- if (! doc)
- return NULL;
-
- cur = xmlDocGetRootElement (doc);
- if (! cur)
- xmlFreeDoc (doc);
-
- if (xmlStrcmp (cur->name, (const xmlChar *) "paranormal_preset"))
- {
- xmlFreeDoc (doc);
- return NULL;
- }
-
- for (cur = cur->children; cur; cur = cur->next)
- {
- if (xmlIsBlankNode (cur) || cur->type != XML_ELEMENT_NODE)
- continue;
-
- /* if (...) { ... } else if (is_documentation [see top of file]) ... else */
- {
- a = create_actuator ((char*)cur->name);
-
- /* FIXME: warn? */
- if (! a)
- continue;
-
- parse_actuator (cur, a);
- break;
- }
- }
-
- /* Don't need this any longer */
- xmlFreeDoc (doc);
-
- return a;
-}
-
-/* FIXME: do the file writing w/ error checking */
-static gboolean
-save_preset_recursive (FILE *file, const struct pn_actuator *actuator,
- int recursion_depth)
-{
- int i;
- GSList *child;
-
- /* open this actuator */
- fprintf (file, "%*s<%s>\n", recursion_depth, "", actuator->desc->name);
-
- /* options */
- if (actuator->options)
- for (i=0; actuator->options[i].desc; i++)
- {
- fprintf (file, "%*s <%s> ", recursion_depth, "",
- actuator->desc->option_descs[i].name);
- switch (actuator->desc->option_descs[i].type)
- {
- case OPT_TYPE_INT:
- case OPT_TYPE_COLOR_INDEX:
- fprintf (file, "%d", actuator->options[i].val.ival);
- break;
- case OPT_TYPE_FLOAT:
- fprintf (file, "%.5f", actuator->options[i].val.fval);
- break;
- case OPT_TYPE_STRING:
- fprintf (file, "%s", actuator->options[i].val.sval);
- break;
- case OPT_TYPE_COLOR:
- fprintf (file, "%d, %d, %d", actuator->options[i].val.cval.r,
- actuator->options[i].val.cval.g,
- actuator->options[i].val.cval.b);
- break;
- case OPT_TYPE_BOOLEAN:
- if (actuator->options[i].val.bval)
- fprintf (file, "TRUE");
- else
- fprintf (file, "FALSE");
- break;
- }
- fprintf (file, " </%s>\n", actuator->desc->option_descs[i].name);
- }
-
- /* children */
- if (actuator->desc->flags & ACTUATOR_FLAG_CONTAINER)
- for (child = *(GSList **)actuator->data; child; child = child->next)
- if (! save_preset_recursive (file, (struct pn_actuator*) child->data,
- recursion_depth+1))
- return FALSE;
-
- /* close the actuator */
- fprintf (file, "%*s</%s>\n", recursion_depth, "", actuator->desc->name);
-
- return TRUE;
-}
-
-gboolean
-save_preset (const char *filename, const struct pn_actuator *actuator)
-{
- FILE *file;
-
- file = fopen (filename, "w");
- if (! file)
- {
- pn_error ("fopen: %s", strerror (errno));
- return FALSE;
- }
-
- fprintf (file, "<?xml version=\"1.0\"?>\n\n<paranormal_preset>\n");
-
- if (actuator)
- if (! save_preset_recursive (file, actuator, 1))
- {
- fclose (file);
- return FALSE;
- }
-
- fprintf (file, "</paranormal_preset>");
-
- fclose (file);
-
- return TRUE;
-
-}
diff --git a/src/paranormal/presets.h b/src/paranormal/presets.h
deleted file mode 100644
index 18234ad..0000000
--- a/src/paranormal/presets.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _PRESETS_H
-#define _PRESETS_H
-
-#include <glib.h>
-
-#include "actuators.h"
-
-struct pn_actuator *load_preset (const char *filename);
-gboolean save_preset (const char *filename, const struct pn_actuator *actuator);
-
-#endif /* _PRESETS_H */
diff --git a/src/paranormal/presets/Makefile b/src/paranormal/presets/Makefile
deleted file mode 100644
index 6603be5..0000000
--- a/src/paranormal/presets/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
-DATA = nazca_-_smoke_on_the_water.pnv \
- nenolod_-_3d_wave.pnv \
- nenolod_-_aquamarine_dream.pnv \
- nenolod_-_purple_flower.pnv \
- nenolod_-_bumblebees.pnv \
- nenolod_-_flying_into_pastels.pnv \
- nenolod_-_phosphor_flame.pnv \
- nenolod_-_psuedo_starfield.pnv \
- nenolod_-_quakingscope.pnv \
- nenolod_-_beatscope.pnv \
- nenolod_-_branchscope.pnv \
- nenolod_-_retroscope.pnv \
- nenolod_-_technicolour_nightmare.pnv \
- nenolod_-_trapped.pnv \
- nenolod_-_value_replace_fun.pnv \
- nenolod_-_rush.pnv \
- nenolod_-_worms.pnv \
- nenolod_-_scopefun.pnv \
- nenolod_-_smoke.pnv \
- nenolod_-_swarm.pnv \
- nenolod_-_interlaced.pnv \
- nenolod_-_cubism.pnv \
- nenolod_-_transform_fun.pnv \
- nenolod_-_tunnel_vision.pnv \
- nenolod_-_kaliedoscope.pnv \
- nenolod_-_simple_yet_pretty.pnv \
- nenolod_-_quasar.pnv \
- aerdan_-_bloody_vortex.pnv \
- aerdan_-_cloudscape.pnv \
- aerdan_-_cloudscape2.pnv \
- aerdan_-_dancing_snow.pnv \
- aerdan_-_portal_to_hell.pnv \
- aerdan_-_telestatic.pnv \
- ticpu_-_colored_beat-o-scope.pnv
-
-include ../../../buildsys.mk
-
-PACKAGE = audacious/paranormal/Presets
diff --git a/src/paranormal/presets/aerdan_-_bloody_vortex.pnv b/src/paranormal/presets/aerdan_-_bloody_vortex.pnv
deleted file mode 100644
index fad90b2..0000000
--- a/src/paranormal/presets/aerdan_-_bloody_vortex.pnv
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <general_clear>
- </general_clear>
- <cmap_gradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <lcolor> 255, 64, 0 </lcolor>
- <hcolor> 128, 0, 0 </hcolor>
- </cmap_gradient>
- </container_once>
- <general_fade>
- <amount> 4 </amount>
- </general_fade>
- <general_blur>
- </general_blur>
- <general_mosaic>
- <radius> 3 </radius>
- </general_mosaic>
- <wave_radial>
- <base_radius> 39.00000 </base_radius>
- <value> 255 </value>
- </wave_radial>
- <xform_spin>
- <angle> -2.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.94000 </r_scale>
- </xform_spin>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/aerdan_-_cloudscape.pnv b/src/paranormal/presets/aerdan_-_cloudscape.pnv
deleted file mode 100644
index 5a5dc90..0000000
--- a/src/paranormal/presets/aerdan_-_cloudscape.pnv
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 220, 225, 225 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> 0 </channels>
- <value> 251 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.96500 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/aerdan_-_cloudscape2.pnv b/src/paranormal/presets/aerdan_-_cloudscape2.pnv
deleted file mode 100644
index b93a63a..0000000
--- a/src/paranormal/presets/aerdan_-_cloudscape2.pnv
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 220, 225, 225 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 245 </high_index>
- <color> 180, 180, 180 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> 0 </channels>
- <value> 250 </value>
- <lines> FALSE </lines>
- </wave_horizontal>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.12500 </r_add>
- <r_scale> 0.96500 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 255 </value>
- <lines> FALSE </lines>
- </wave_horizontal>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/aerdan_-_dancing_snow.pnv b/src/paranormal/presets/aerdan_-_dancing_snow.pnv
deleted file mode 100644
index 3b0c3e9..0000000
--- a/src/paranormal/presets/aerdan_-_dancing_snow.pnv
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 146, 191, 225 </color>
- </cmap_bwgradient>
- </container_once>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.96500 </r_scale>
- </xform_spin>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- <wave_radial>
- <base_radius> 1.00000 </base_radius>
- <value> 250 </value>
- </wave_radial>
- <general_blur>
- </general_blur>
- <freq_drops>
- </freq_drops>
- <xform_bump_spin>
- <angle> 0.00000 </angle>
- <bumps> 10.00000 </bumps>
- <base_scale> 0.95000 </base_scale>
- <mod_scale> 0.10000 </mod_scale>
- </xform_bump_spin>
- <xform_spin>
- <angle> -5.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.96500 </r_scale>
- </xform_spin>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/aerdan_-_portal_to_hell.pnv b/src/paranormal/presets/aerdan_-_portal_to_hell.pnv
deleted file mode 100644
index 323f276..0000000
--- a/src/paranormal/presets/aerdan_-_portal_to_hell.pnv
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 128, 85, 0 </color>
- </cmap_bwgradient>
- </container_once>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- <general_blur>
- </general_blur>
- <xform_ripple>
- <angle> 0.00000 </angle>
- <ripples> 10.00000 </ripples>
- <base_speed> 2.00000 </base_speed>
- <mod_speed> 1.00000 </mod_speed>
- </xform_ripple>
- <wave_radial>
- <base_radius> 1.50000 </base_radius>
- <value> 250 </value>
- </wave_radial>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.96500 </r_scale>
- </xform_spin>
- <freq_drops>
- </freq_drops>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/aerdan_-_stonervision.pnv b/src/paranormal/presets/aerdan_-_stonervision.pnv
deleted file mode 100644
index 2b27582..0000000
--- a/src/paranormal/presets/aerdan_-_stonervision.pnv
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <wave_smooth>
- <channels> 0 </channels>
- </wave_smooth>
- <cmap_dynamic>
- <low_index> 5 </low_index>
- <high_index> 250 </high_index>
- <script> red = red + 0.05; blue = blue + 0.03; green = green + 0.01; </script>
- </cmap_dynamic>
- </container_once>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- <wave_radial>
- <base_radius> -1.00000 </base_radius>
- <value> 253 </value>
- </wave_radial>
- <xform_ripple>
- <angle> 0.00000 </angle>
- <ripples> 8.00000 </ripples>
- <base_speed> 2.00000 </base_speed>
- <mod_speed> 5.00000 </mod_speed>
- </xform_ripple>
- <misc_floater>
- <value> 256 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <wave_scope>
- <init_script> n = 800; t = -0.05; </init_script>
- <frame_script> t = t + 0.05; </frame_script>
- <sample_script> d = index + value; r = t + index * 3.141952924 * 4; x = cos(r) * d; y = sin(r) * d; </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/aerdan_-_telestatic.pnv b/src/paranormal/presets/aerdan_-_telestatic.pnv
deleted file mode 100644
index 1f158a7..0000000
--- a/src/paranormal/presets/aerdan_-_telestatic.pnv
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 220, 225, 225 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> 0 </channels>
- <value> 251 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.96500 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- <xform_halfrender>
- <direction> -1 </direction>
- </xform_halfrender>
- <freq_drops>
- </freq_drops>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nazca_-_smoke_on_the_water.pnv b/src/paranormal/presets/nazca_-_smoke_on_the_water.pnv
deleted file mode 100644
index ad16fbb..0000000
--- a/src/paranormal/presets/nazca_-_smoke_on_the_water.pnv
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <general_clear>
- </general_clear>
- </container_once>
- <cmap_gradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <lcolor> 0, 0, 0 </lcolor>
- <hcolor> 72, 72, 255 </hcolor>
- </cmap_gradient>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 255 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <wave_horizontal>
- <channels> 1 </channels>
- <value> 255 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_ripple>
- <angle> 0.00000 </angle>
- <ripples> 7.00000 </ripples>
- <base_speed> 1.00000 </base_speed>
- <mod_speed> 1.00000 </mod_speed>
- </xform_ripple>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_3d_wave.pnv b/src/paranormal/presets/nenolod_-_3d_wave.pnv
deleted file mode 100644
index a16efd4..0000000
--- a/src/paranormal/presets/nenolod_-_3d_wave.pnv
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 191, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_scope>
- <init_script> n=7;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> x1=value*sin(p2*index);y1=value * index / cos(z1);z1=r*cos(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <general_fade>
- <amount> 10 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_aquamarine_dream.pnv b/src/paranormal/presets/nenolod_-_aquamarine_dream.pnv
deleted file mode 100644
index 69bd2e0..0000000
--- a/src/paranormal/presets/nenolod_-_aquamarine_dream.pnv
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 161, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_normalize>
- <height> -1 </height>
- <hfrac> -1.00000 </hfrac>
- <vfrac> 0.12500 </vfrac>
- <channels> 0 </channels>
- </wave_normalize>
- <wave_scope>
- <init_script> n = 800; t = -0.05; </init_script>
- <frame_script> t = t + 0.05; </frame_script>
- <sample_script> d = index + value; r = t + index * 3.141952924 * 4; x = cos(r) * d; y = sin(r) * d; </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <general_blur>
- </general_blur>
- <xform_movement>
- <formula> r = sin(r); d = cos(d)^2; </formula>
- <polar> TRUE </polar>
- </xform_movement>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 8 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_beatscope.pnv b/src/paranormal/presets/nenolod_-_beatscope.pnv
deleted file mode 100644
index fa70a2f..0000000
--- a/src/paranormal/presets/nenolod_-_beatscope.pnv
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- </wave_horizontal>
- <general_blur>
- </general_blur>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.98700 </r_scale>
- </xform_spin>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- </container_cycle>
- <xform_spin>
- <angle> 1.25000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.98700 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> -1.25000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- </container_cycle>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_branchscope.pnv b/src/paranormal/presets/nenolod_-_branchscope.pnv
deleted file mode 100644
index 27fba6e..0000000
--- a/src/paranormal/presets/nenolod_-_branchscope.pnv
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- </container_once>
- <container_onbeat>
- <freq_drops>
- </freq_drops>
- </container_onbeat>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <container_simple>
- <wave_horizontal>
- <channels> -1 </channels>
- </wave_horizontal>
- <wave_radial>
- <base_radius> 0.00000 </base_radius>
- </wave_radial>
- </container_simple>
- <container_simple>
- <wave_horizontal>
- <channels> -1 </channels>
- </wave_horizontal>
- </container_simple>
- <container_simple>
- <wave_radial>
- <base_radius> 0.00000 </base_radius>
- </wave_radial>
- </container_simple>
- </container_cycle>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <container_simple>
- <general_blur>
- </general_blur>
- </container_simple>
- <general_noop>
- </general_noop>
- <container_simple>
- <general_mosaic>
- <radius> 3 </radius>
- </general_mosaic>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 30 </amount>
- </general_fade>
- </container_simple>
- </container_cycle>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- <general_noop>
- </general_noop>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- </container_cycle>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.98700 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 1.25000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.98700 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> -1.25000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- </container_cycle>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_bumblebees.pnv b/src/paranormal/presets/nenolod_-_bumblebees.pnv
deleted file mode 100644
index 4a1fd7d..0000000
--- a/src/paranormal/presets/nenolod_-_bumblebees.pnv
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 238, 208, 83 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_normalize>
- <height> -6 </height>
- <hfrac> 6.00000 </hfrac>
- <vfrac> 0.12500 </vfrac>
- <channels> 0 </channels>
- </wave_normalize>
- <wave_radial>
- <base_radius> 0.00000 </base_radius>
- </wave_radial>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_cubism.pnv b/src/paranormal/presets/nenolod_-_cubism.pnv
deleted file mode 100644
index b1069ec..0000000
--- a/src/paranormal/presets/nenolod_-_cubism.pnv
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 0, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 250 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_halfrender>
- <direction> -1 </direction>
- <render_twice> FALSE </render_twice>
- </xform_halfrender>
- <xform_halfrender>
- <direction> 1 </direction>
- <render_twice> FALSE </render_twice>
- </xform_halfrender>
- <xform_spin>
- <angle> -4.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.90000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 1.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> -1.00000 </r_scale>
- </xform_spin>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <general_invert>
- </general_invert>
- <general_noop>
- </general_noop>
- </container_cycle>
- <general_replace>
- <start> 250 </start>
- <end> 255 </end>
- <out> 0 </out>
- </general_replace>
- <general_replace>
- <start> 128 </start>
- <end> 149 </end>
- <out> 0 </out>
- </general_replace>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_flying_into_pastels.pnv b/src/paranormal/presets/nenolod_-_flying_into_pastels.pnv
deleted file mode 100644
index 8e5f555..0000000
--- a/src/paranormal/presets/nenolod_-_flying_into_pastels.pnv
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 140 </low_index>
- <high_index> 255 </high_index>
- <color> 76, 122, 229 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_normalize>
- <height> -6 </height>
- <hfrac> 6.00000 </hfrac>
- <vfrac> 0.12500 </vfrac>
- <channels> 0 </channels>
- </wave_normalize>
- <wave_radial>
- <base_radius> 0.00000 </base_radius>
- </wave_radial>
- <xform_ripple>
- <angle> 0.00000 </angle>
- <ripples> 8.00000 </ripples>
- <base_speed> 1.00000 </base_speed>
- <mod_speed> 1.00000 </mod_speed>
- </xform_ripple>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- <xform_spin>
- <angle> -0.50000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.94000 </r_scale>
- </xform_spin>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_interlaced.pnv b/src/paranormal/presets/nenolod_-_interlaced.pnv
deleted file mode 100644
index fcc6634..0000000
--- a/src/paranormal/presets/nenolod_-_interlaced.pnv
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <general_clear>
- </general_clear>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 151, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <container_simple>
- <misc_floater>
- <value> 180 </value>
- </misc_floater>
- <misc_floater>
- <value> 180 </value>
- </misc_floater>
- <misc_floater>
- <value> 180 </value>
- </misc_floater>
- <misc_floater>
- <value> 180 </value>
- </misc_floater>
- <misc_floater>
- <value> 180 </value>
- </misc_floater>
- <misc_floater>
- <value> 180 </value>
- </misc_floater>
- </container_simple>
- <container_onbeat>
- <freq_drops>
- </freq_drops>
- <general_replace>
- <start> 250 </start>
- <end> 255 </end>
- <out> 150 </out>
- </general_replace>
- <xform_halfrender>
- <direction> 1 </direction>
- <render_twice> TRUE </render_twice>
- </xform_halfrender>
- </container_onbeat>
- <xform_halfrender>
- <direction> -1 </direction>
- <render_twice> TRUE </render_twice>
- </xform_halfrender>
- <general_fade>
- <amount> 3 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_kaliedoscope.pnv b/src/paranormal/presets/nenolod_-_kaliedoscope.pnv
deleted file mode 100644
index 7d017f0..0000000
--- a/src/paranormal/presets/nenolod_-_kaliedoscope.pnv
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_dynamic>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <script> blue = blue + 0.006999; green = green + 0.007; red = red + 0.004599; </script>
- </cmap_dynamic>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 255 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_movement>
- <formula> d=cos(d)^2; </formula>
- </xform_movement>
- <general_blur>
- </general_blur>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_phosphor_flame.pnv b/src/paranormal/presets/nenolod_-_phosphor_flame.pnv
deleted file mode 100644
index 120df56..0000000
--- a/src/paranormal/presets/nenolod_-_phosphor_flame.pnv
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 120, 223, 193 </color>
- </cmap_bwgradient>
- </container_once>
- <freq_drops>
- </freq_drops>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- <general_blur>
- </general_blur>
- <wave_radial>
- <base_radius> 0.00000 </base_radius>
- </wave_radial>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_psuedo_starfield.pnv b/src/paranormal/presets/nenolod_-_psuedo_starfield.pnv
deleted file mode 100644
index e601eb4..0000000
--- a/src/paranormal/presets/nenolod_-_psuedo_starfield.pnv
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 191, 191, 191 </color>
- </cmap_bwgradient>
- </container_once>
- <freq_drops>
- </freq_drops>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.97000 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_purple_flower.pnv b/src/paranormal/presets/nenolod_-_purple_flower.pnv
deleted file mode 100644
index 0a6c0fd..0000000
--- a/src/paranormal/presets/nenolod_-_purple_flower.pnv
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 118, 0, 191 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_radial>
- <base_radius> 0.00000 </base_radius>
- </wave_radial>
- <general_blur>
- </general_blur>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_quakingscope.pnv b/src/paranormal/presets/nenolod_-_quakingscope.pnv
deleted file mode 100644
index c238b29..0000000
--- a/src/paranormal/presets/nenolod_-_quakingscope.pnv
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 138 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 139 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- </wave_horizontal>
- <general_blur>
- </general_blur>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> FALSE </beat>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.98700 </r_scale>
- </xform_spin>
- </container_cycle>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_quasar.pnv b/src/paranormal/presets/nenolod_-_quasar.pnv
deleted file mode 100644
index 41e74c4..0000000
--- a/src/paranormal/presets/nenolod_-_quasar.pnv
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 191, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_scope>
- <init_script> points=513;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> x1=value*sin(p2*index);y1=0;z1=r*cos(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <wave_scope>
- <init_script> points=513;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> y1=value*cos(p2*index);x1=0;z1=r*sin(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <wave_scope>
- <init_script> points=5;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> z1=r*sin(p2*index);x1=0;y1=0*sin(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <general_fade>
- <amount> 10 </amount>
- </general_fade>
- <general_blur>
- </general_blur>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_retroscope.pnv b/src/paranormal/presets/nenolod_-_retroscope.pnv
deleted file mode 100644
index 7f88cd8..0000000
--- a/src/paranormal/presets/nenolod_-_retroscope.pnv
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 119, 239, 163 </color>
- </cmap_bwgradient>
- </container_once>
- <general_fade>
- <amount> 255 </amount>
- </general_fade>
- <wave_horizontal>
- <channels> -1 </channels>
- </wave_horizontal>
- <general_blur>
- </general_blur>
- <general_mosaic>
- </general_mosaic>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_rush.pnv b/src/paranormal/presets/nenolod_-_rush.pnv
deleted file mode 100644
index 2f4859e..0000000
--- a/src/paranormal/presets/nenolod_-_rush.pnv
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_gradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <lcolor> 0, 0, 127 </lcolor>
- <hcolor> 0, 127, 255 </hcolor>
- </cmap_gradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 255 </value>
- <lines> FALSE </lines>
- </wave_horizontal>
- <wave_vertical>
- <channels> -1 </channels>
- <value> 255 </value>
- <lines> FALSE </lines>
- </wave_vertical>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> TRUE </beat>
- <xform_spin>
- <angle> -4.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.75000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 4.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.75000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> -8.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.75000 </r_scale>
- </xform_spin>
- <xform_spin>
- <angle> 8.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.75000 </r_scale>
- </xform_spin>
- </container_cycle>
- <general_fade>
- <amount> 3 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_scopefun.pnv b/src/paranormal/presets/nenolod_-_scopefun.pnv
deleted file mode 100644
index c5a1ee5..0000000
--- a/src/paranormal/presets/nenolod_-_scopefun.pnv
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 191, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <general_invert>
- </general_invert>
- <wave_scope>
- <init_script> n=7;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> x1=value*sin(p2*index);y1=cos(p2*index);z1=r*cos(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <general_fade>
- <amount> 10 </amount>
- </general_fade>
- <general_invert>
- </general_invert>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_simple_yet_pretty.pnv b/src/paranormal/presets/nenolod_-_simple_yet_pretty.pnv
deleted file mode 100644
index a0b1af0..0000000
--- a/src/paranormal/presets/nenolod_-_simple_yet_pretty.pnv
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 105, 32, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> 0 </channels>
- <value> 255 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <wave_vertical>
- <channels> 0 </channels>
- <value> 255 </value>
- <lines> TRUE </lines>
- </wave_vertical>
- <xform_movement>
- <formula> r = sin(r); d = cos(d)^2; </formula>
- <polar> TRUE </polar>
- </xform_movement>
- <general_blur>
- </general_blur>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_smoke.pnv b/src/paranormal/presets/nenolod_-_smoke.pnv
deleted file mode 100644
index e8fbe9c..0000000
--- a/src/paranormal/presets/nenolod_-_smoke.pnv
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 180 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <general_replace>
- <start> 1 </start>
- <end> 15 </end>
- <out> 0 </out>
- </general_replace>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.94000 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_swarm.pnv b/src/paranormal/presets/nenolod_-_swarm.pnv
deleted file mode 100644
index b6d2b45..0000000
--- a/src/paranormal/presets/nenolod_-_swarm.pnv
+++ /dev/null
@@ -1,923 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 127, 255 </color>
- </cmap_bwgradient>
- <general_clear>
- </general_clear>
- </container_once>
- <container_simple>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- </container_simple>
- <container_simple>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- </container_simple>
- <xform_spin>
- <angle> 1.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.96000 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_technicolour_nightmare.pnv b/src/paranormal/presets/nenolod_-_technicolour_nightmare.pnv
deleted file mode 100644
index 0c6a70a..0000000
--- a/src/paranormal/presets/nenolod_-_technicolour_nightmare.pnv
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 100, 62, 191 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 157 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_spin>
- <angle> 0.03000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.04000 </r_scale>
- </xform_spin>
- <xform_halfrender>
- <direction> 1 </direction>
- </xform_halfrender>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 151 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <container_onbeat>
- <xform_halfrender>
- <direction> -1 </direction>
- </xform_halfrender>
- </container_onbeat>
- <container_onbeat>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> FALSE </beat>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 69, 75, 191 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 120, 191, 191 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 100, 62, 191 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 100, 191, 62 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 62, 191, 100 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 239, 123, 227 </color>
- </cmap_bwgradient>
- </container_cycle>
- </container_onbeat>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_transform_fun.pnv b/src/paranormal/presets/nenolod_-_transform_fun.pnv
deleted file mode 100644
index 5ffc7d7..0000000
--- a/src/paranormal/presets/nenolod_-_transform_fun.pnv
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 130, 191 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_scope>
- <init_script> points=512; dt=0.01; t=0; sc=1; </init_script>
- <frame_script> t=t+dt;dt=0.9*dt+0.001; </frame_script>
- <sample_script> x=cos(2*index+t)*0.9*(value*0.5+0.5); y=sin(index*2+t)*0.9*(value*0.5+0.5); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <general_blur>
- </general_blur>
- <xform_movement>
- <formula> r=cos(r*3); d=sin(d*1.1) </formula>
- </xform_movement>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_trapped.pnv b/src/paranormal/presets/nenolod_-_trapped.pnv
deleted file mode 100644
index d88821a..0000000
--- a/src/paranormal/presets/nenolod_-_trapped.pnv
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 161, 226 </color>
- </cmap_bwgradient>
- </container_once>
- <xform_movement>
- <formula> r=(tan(r)^sin(r)) </formula>
- </xform_movement>
- <wave_scope>
- <init_script> points=192; t = -0.05; </init_script>
- <frame_script> t = t + 0.05; </frame_script>
- <sample_script> d = index + value; r = t + tan(index) * 3.141952924 * 4; x = (sin(r) * sin(d)) / 1.3; y = cos(r) * cos(d); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <general_fade>
- <amount> 3 </amount>
- </general_fade>
- <general_blur>
- </general_blur>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_tunnel_vision.pnv b/src/paranormal/presets/nenolod_-_tunnel_vision.pnv
deleted file mode 100644
index e4a81c5..0000000
--- a/src/paranormal/presets/nenolod_-_tunnel_vision.pnv
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 130, 191 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- <value> 255 </value>
- <lines> TRUE </lines>
- </wave_horizontal>
- <xform_dynmovement>
- <init_script> rseek=1.45; dseek=2; </init_script>
- <frame_script> </frame_script>
- <point_script> r=r/rseek; d=d*dseek; </point_script>
- </xform_dynmovement>
- <general_blur>
- </general_blur>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 2 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_value_replace_fun.pnv b/src/paranormal/presets/nenolod_-_value_replace_fun.pnv
deleted file mode 100644
index ed10d75..0000000
--- a/src/paranormal/presets/nenolod_-_value_replace_fun.pnv
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 151, 179, 234 </color>
- </cmap_bwgradient>
- </container_once>
- <wave_horizontal>
- <channels> -1 </channels>
- </wave_horizontal>
- <general_replace>
- <start> 255 </start>
- <end> 255 </end>
- <out> 180 </out>
- </general_replace>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 0.94000 </r_scale>
- </xform_spin>
- <general_blur>
- </general_blur>
- <general_fade>
- <amount> 1 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/nenolod_-_worms.pnv b/src/paranormal/presets/nenolod_-_worms.pnv
deleted file mode 100644
index 18daf66..0000000
--- a/src/paranormal/presets/nenolod_-_worms.pnv
+++ /dev/null
@@ -1,920 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_once>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 255 </high_index>
- <color> 0, 127, 255 </color>
- </cmap_bwgradient>
- </container_once>
- <general_invert>
- </general_invert>
- <container_simple>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- </container_simple>
- <container_simple>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- <misc_floater>
- <value> 255 </value>
- </misc_floater>
- </container_simple>
- <xform_spin>
- <angle> 0.00000 </angle>
- <r_add> 0.00000 </r_add>
- <r_scale> 1.02000 </r_scale>
- </xform_spin>
- <general_invert>
- </general_invert>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/presets/ticpu_-_colored_beat-o-scope.pnv b/src/paranormal/presets/ticpu_-_colored_beat-o-scope.pnv
deleted file mode 100644
index 9e667cf..0000000
--- a/src/paranormal/presets/ticpu_-_colored_beat-o-scope.pnv
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<paranormal_preset>
- <container_simple>
- <container_onbeat>
- <container_simple>
- <general_blur>
- </general_blur>
- <general_blur>
- </general_blur>
- <general_blur>
- </general_blur>
- </container_simple>
- <xform_spin>
- <angle> 8.00000 </angle>
- <r_add> 1.00000 </r_add>
- <r_scale> 0.60000 </r_scale>
- </xform_spin>
- </container_onbeat>
- <container_cycle>
- <change_interval> 3 </change_interval>
- <beat> FALSE </beat>
- <cmap_bwgradient>
- <low_index> 26 </low_index>
- <high_index> 169 </high_index>
- <color> 0, 191, 255 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 94 </high_index>
- <color> 83, 127, 150 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 84 </low_index>
- <high_index> 255 </high_index>
- <color> 208, 95, 89 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 173 </high_index>
- <color> 71, 255, 51 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 114 </low_index>
- <high_index> 255 </high_index>
- <color> 242, 50, 253 </color>
- </cmap_bwgradient>
- <cmap_bwgradient>
- <low_index> 0 </low_index>
- <high_index> 157 </high_index>
- <color> 15, 239, 231 </color>
- </cmap_bwgradient>
- </container_cycle>
- <container_cycle>
- <change_interval> 0 </change_interval>
- <beat> FALSE </beat>
- <general_blur>
- </general_blur>
- <general_noop>
- </general_noop>
- <general_noop>
- </general_noop>
- <general_noop>
- </general_noop>
- </container_cycle>
- <container_cycle>
- <change_interval> 8 </change_interval>
- <beat> TRUE </beat>
- <wave_scope>
- <init_script> n=7;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> x1=value*sin(p2*index);y1=value * index / cos(z1);z1=r*cos(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- <wave_scope>
- <init_script> n=7;r=0.5;mx=0;my=0;mz=0;dst=2;rx=0;ry=0;rz=0;rdx=1;rdy=1;rdz=1;p=3.14159265;p2=2.0*p;p3=180/p; </init_script>
- <frame_script> ;rx=rx+rdx;ry=ry+rdy;rz=rz+rdz;xs=sin(rx/p3);ys=sin(ry/p3);zs=sin(rz/p3);xc=cos(rx/p3);yc=cos(ry/p3);zc=cos(rz/p3); </frame_script>
- <sample_script> x1=value*sin(p2*index);y1=value * index / cos(z1);z1=r*cos(p2*index);y2=y1*xc-z1*xs;z2=y1*xs+z1*xc;x2=z2*ys+x1*yc;z3=z2*yc-x1*ys;x3=x2*zc-y2*zs;y3=y2*zc+x2*zs;x4=mx+x3;y4=my+y3;z4=mz+z3;x=x4/(1+z4/dst);y=y4/(1+z4/dst); </sample_script>
- <lines> TRUE </lines>
- </wave_scope>
- </container_cycle>
- <general_fade>
- <amount> 4 </amount>
- </general_fade>
- </container_simple>
-</paranormal_preset> \ No newline at end of file
diff --git a/src/paranormal/wave.c b/src/paranormal/wave.c
deleted file mode 100644
index c5fbc7a..0000000
--- a/src/paranormal/wave.c
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <math.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "pn_utils.h"
-
-#include "drawing.h"
-
-#include "libcalc/calc.h"
-
-/* **************** wave_horizontal **************** */
-struct pn_actuator_option_desc wave_horizontal_opts[] =
-{
- {"channels", "Which sound channels to use: negative = channel 1, \npositive = channel 2, "
- "zero = both (two wave-forms.)", OPT_TYPE_INT, {ival: -1} },
- {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
- {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} },
- { NULL }
-};
-
-static void
-wave_horizontal_exec_dots (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i;
- int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
- guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
-
- for (i=0; i<pn_image_data->width; i++) {
-
- /*single channel, centered horz.*/
- if ( opts[0].val.ival ) {
- pn_image_data->surface[0][PN_IMG_INDEX (i, (pn_image_data->height>>1)
- - CAP (pn_sound_data->pcm_data[channel]
- [i*512/pn_image_data->width]>>8,
- (pn_image_data->height>>1)-1))]
- = value;
- }
-
- /*both channels, at 1/4 and 3/4 of the screen*/
- else {
- pn_image_data->surface[0][PN_IMG_INDEX( i, (pn_image_data->height>>2) -
- CAP( (pn_sound_data->pcm_data[0]
- [i*512/pn_image_data->width]>>9),
- (pn_image_data->height>>2)-1))]
- = value;
-
- pn_image_data->surface[0][PN_IMG_INDEX( i, 3*(pn_image_data->height>>2) -
- CAP( (pn_sound_data->pcm_data[1]
- [i*512/pn_image_data->width]>>9),
- (pn_image_data->height>>2)-1))]
- = value;
- }
- }
-}
-
-void
-wave_horizontal_exec_lines (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
- guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
- int *x_pos, *y_pos; /* dynamic tables which store the positions for the line */
- int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
- int i;
- float step;
-
- x_pos = g_new0(int, 257);
- y_pos = g_new0(int, 257);
- x2_pos = g_new0(int, 257);
- y2_pos = g_new0(int, 257);
-
- step = pn_image_data->width / 256.;
-
- /* calculate the line. */
- for (i = 0; i < 256; i++)
- {
- if (opts[0].val.ival != 0)
- {
- x_pos[i] = i * step;
- y_pos[i] = (pn_image_data->height>>1) -
- CAP (pn_sound_data->pcm_data[channel][i * 2]>>8,
- (pn_image_data->height>>1)-1);
- }
- else
- {
- x_pos[i] = i * step;
- y_pos[i] = (pn_image_data->height>>2) -
- CAP (pn_sound_data->pcm_data[0][i * 2]>>9,
- (pn_image_data->height>>2)-1);
-
- x2_pos[i] = i * step;
- y2_pos[i] = 3*(pn_image_data->height>>2) -
- CAP (pn_sound_data->pcm_data[1][i * 2]>>9,
- (pn_image_data->height>>2)-1);
-
- }
- }
-
- /* draw the line. */
- for (i = 1; i < 256; i++)
- {
- pn_draw_line(x_pos[i - 1], y_pos[i - 1], x_pos[i], y_pos[i], value);
-
- if ( opts[0].val.ival == 0 )
- pn_draw_line(x2_pos[i - 1], y2_pos[i - 1], x2_pos[i], y2_pos[i], value);
- }
-
- g_free(x_pos);
- g_free(y_pos);
- g_free(x2_pos);
- g_free(y2_pos);
-}
-
-static void
-wave_horizontal_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- if (opts[2].val.bval == TRUE)
- wave_horizontal_exec_lines(opts, data);
- else
- wave_horizontal_exec_dots(opts, data);
-}
-
-struct pn_actuator_desc builtin_wave_horizontal =
-{
- "wave_horizontal", "Horizontal Waveform",
- "Draws one or two waveforms horizontally across "
- "the drawing surface",
- 0, wave_horizontal_opts,
- NULL, NULL, wave_horizontal_exec
-};
-
-/* **************** wave_vertical **************** */
-struct pn_actuator_option_desc wave_vertical_opts[] =
-{
- {"channels", "Which sound channels to use: negative = channel 1, \npositive = channel 2, "
- "zero = both (two wave-forms.)", OPT_TYPE_INT, {ival: -1} },
- {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
- {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} },
- { NULL }
-};
-
-static void
-wave_vertical_exec_dots (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i;
- int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
- guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
-
- for (i=0; i<pn_image_data->height; i++) {
- if ( opts[0].val.ival ) {
- pn_image_data->surface[0][PN_IMG_INDEX ((pn_image_data->width>>1)
- - CAP (pn_sound_data->pcm_data[channel]
- [i*512/pn_image_data->height]>>8,
- (pn_image_data->width>>1)-1), i)]
- = value;
- }
- else {
- pn_image_data->surface[0][PN_IMG_INDEX ((pn_image_data->width>>2)
- - CAP (pn_sound_data->pcm_data[0]
- [i*512/pn_image_data->height]>>9,
- (pn_image_data->width>>2)-1), i)]
- = value;
- pn_image_data->surface[0][PN_IMG_INDEX ((3*pn_image_data->width>>2)
- -CAP (pn_sound_data->pcm_data[1]
- [i*512/pn_image_data->height]>>9,
- (pn_image_data->width>>2)-1), i)]
-
- = value;
- }
- }
-}
-
-static void
-wave_vertical_exec_lines (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int channel = ( opts[0].val.ival < 0 ) ? 0 : 1;
- guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
- int *x_pos, *y_pos; /* dynamic tables which store the positions for the line */
- int *x2_pos, *y2_pos; /* dynamic tables which store the positions for the line */
- int i;
- float step;
-
- x_pos = g_new0(int, 129);
- y_pos = g_new0(int, 129);
- x2_pos = g_new0(int, 129);
- y2_pos = g_new0(int, 129);
-
- step = pn_image_data->height / 128.;
-
- /* calculate the line. */
- for (i = 0; i < 128; i++)
- {
- if (opts[0].val.ival != 0)
- {
- x_pos[i] = (pn_image_data->width>>1) -
- CAP (pn_sound_data->pcm_data[channel]
- [i*4]>>8,
- (pn_image_data->width>>1)-1);
- y_pos[i] = i * step;
- }
- else
- {
- x_pos[i] = (pn_image_data->width>>2)
- - CAP (pn_sound_data->pcm_data[0]
- [i*4]>>9,
- (pn_image_data->width>>2)-1);
- y_pos[i] = i * step;
-
- x2_pos[i] = 3*(pn_image_data->width>>2)
- - CAP (pn_sound_data->pcm_data[1]
- [i*4]>>9,
- (pn_image_data->width>>2)-1);
- y2_pos[i] = i * step;
- }
- }
-
- /* draw the line. */
- for (i = 1; i < 128; i++)
- {
- pn_draw_line(x_pos[i - 1], y_pos[i - 1], x_pos[i], y_pos[i], value);
-
- if ( opts[0].val.ival == 0 )
- pn_draw_line(x2_pos[i - 1], y2_pos[i - 1], x2_pos[i], y2_pos[i], value);
- }
-
- g_free(x_pos);
- g_free(y_pos);
- g_free(x2_pos);
- g_free(y2_pos);
-}
-
-static void
-wave_vertical_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- if (opts[2].val.bval == TRUE)
- wave_vertical_exec_lines(opts, data);
- else
- wave_vertical_exec_dots(opts, data);
-}
-
-struct pn_actuator_desc builtin_wave_vertical =
-{
- "wave_vertical", "Vertical Waveform",
- "Draws one or two waveforms vertically across "
- "the drawing surface",
- 0, wave_vertical_opts,
- NULL, NULL, wave_vertical_exec
-};
-
-/* FIXME: allow for only 1 channel for wave_normalize & wave_smooth */
-/* **************** wave_normalize **************** */
-static struct pn_actuator_option_desc wave_normalize_opts[] =
-{
- { "height", "If positive, the height, in pixels, to which the waveform will be "
- "normalized; if negative, hfrac is used", OPT_TYPE_INT, { ival: -1 } },
- { "hfrac", "If positive, the fraction of the horizontal image size to which the "
- "waveform will be normalized; if negative, vfrac is used",
- OPT_TYPE_FLOAT, { fval: -1 } },
- { "vfrac", "If positive, the fraction of the vertical image size to which the "
- "waveform will be normalized",
- OPT_TYPE_FLOAT, { fval: .125 } },
- { "channels", "Which sound channel(s) to normalize: negative = channel 1,\n"
- "\tpositive = channel 2, 0 = both channels.",
- OPT_TYPE_INT, { ival: 0 } },
- { NULL }
-};
-
-static void
-wave_normalize_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i, j, max=0;
- float denom;
-
- for (j=0; j<2; j++)
- {
- if ( !(opts[3].val.ival) || (opts[3].val.ival < 0 && j == 0) ||
- (opts[3].val.ival > 0 && j == 1) ) {
-
- for (i=0; i<512; i++)
- if (abs(pn_sound_data->pcm_data[j][i]) > max)
- max = abs(pn_sound_data->pcm_data[j][i]);
-
- if (opts[0].val.ival > 0)
- denom = max/(opts[0].val.ival<<8);
- else if (opts[1].val.fval > 0)
- denom = max/(opts[1].val.fval * (pn_image_data->width<<8));
- else
- denom = max/(opts[2].val.fval * (pn_image_data->height<<8));
-
- if (denom > 0)
- for (i=0; i<512; i++)
- pn_sound_data->pcm_data[j][i]
- /= denom;
- }
- }
-}
-
-struct pn_actuator_desc builtin_wave_normalize =
-{
- "wave_normalize", "Normalize Waveform Data",
- "Normalizes the waveform data used by the wave_* actuators",
- 0, wave_normalize_opts,
- NULL, NULL, wave_normalize_exec
-};
-
-/* **************** wave_smooth **************** */
-struct pn_actuator_option_desc wave_smooth_opts[] =
-{
- { "channels", "Which sound channel(s) to smooth: negative = channel 1, \n"
- "\tpositive = channel 2, 0 = both channels.",
- OPT_TYPE_INT, { ival: 0 } },
- {0}
-};
-
-static void
-wave_smooth_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i, j, k;
- gint16 tmp[512];
-
- for (j=0; j<2; j++)
- {
- if ( !(opts[0].val.ival) || (opts[0].val.ival < 0 && j == 0) ||
- (opts[0].val.ival > 0 && j == 1) ) {
-
- for (i=4; i<508; i++)
- {
- k = (pn_sound_data->pcm_data[j][i]<<3)
- + (pn_sound_data->pcm_data[j][i+1]<<2)
- + (pn_sound_data->pcm_data[j][i-1]<<2)
- + (pn_sound_data->pcm_data[j][i+2]<<2)
- + (pn_sound_data->pcm_data[j][i-2]<<2)
- + (pn_sound_data->pcm_data[j][i+3]<<1)
- + (pn_sound_data->pcm_data[j][i-3]<<1)
- + (pn_sound_data->pcm_data[j][i+4]<<1)
- + (pn_sound_data->pcm_data[j][i-4]<<1);
- tmp[i] = k >> 5;
- }
- memcpy (pn_sound_data->pcm_data[j]+4, tmp, sizeof (gint16) * 504);
- }
- }
-}
-
-struct pn_actuator_desc builtin_wave_smooth =
-{
- "wave_smooth", "Smooth Waveform Data",
- "Smooth out the waveform data used by the wave_* actuators",
- 0, wave_smooth_opts,
- NULL, NULL, wave_smooth_exec
-};
-
-/* **************** wave_radial **************** */
-static struct pn_actuator_option_desc wave_radial_opts[] =
-{
- { "base_radius", " ",
- OPT_TYPE_FLOAT, { fval: 0 } },
- {"value", "The colour value to use.", OPT_TYPE_INT, {ival: 255} },
-/* {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} }, */
- { NULL }
-};
-
-static void
-wave_radial_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- int i, x, y;
- guchar value = (opts[1].val.ival < 0 || opts[1].val.ival > 255) ? 255 : opts[1].val.ival;
-
- for(i=0; i<360; i++)
- {
- x = (pn_image_data->width>>1)
- + (opts[0].val.fval + (pn_sound_data->pcm_data[0][(int)(i*(512.0/360.0))]>>8))
- * cos_val[i];
- y = (pn_image_data->height>>1)
- + (opts[0].val.fval + (pn_sound_data->pcm_data[0][(int)(i*(512.0/360.0))]>>8))
- * sin_val[i];
-
- pn_image_data->surface[0][PN_IMG_INDEX (CAPHILO(x,pn_image_data->width,0),
- CAPHILO(y,pn_image_data->height,0))]
- = value;
- }
-};
-
-struct pn_actuator_desc builtin_wave_radial =
-{
- "wave_radial", "Radial Waveform",
- "Draws a single waveform varying"
- " radially from the center of the image",
- 0, wave_radial_opts,
- NULL, NULL, wave_radial_exec
-};
-
-/* **************** wave_scope **************** */
-
-static struct pn_actuator_option_desc wave_scope_opts[] =
-{
- {"init_script", "Initialization script.", OPT_TYPE_STRING, {sval: "n = 800; t = -0.05;"} },
- {"frame_script", "Script to run at the beginning of each frame.", OPT_TYPE_STRING, {sval: "t = t + 0.05;"} },
- {"sample_script", "Script to run for each sample.", OPT_TYPE_STRING, {sval: "d = index + value; r = t + index * 3.141952924 * 4; x = cos(r) * d; y = sin(r) * d;"} },
- {"lines", "Use lines instead of dots.", OPT_TYPE_BOOLEAN, {bval: TRUE} },
- { NULL }
-};
-
-struct pn_scope_data
-{
- expression_t *expr_on_init, *expr_on_frame, *expr_on_sample;
- symbol_dict_t *dict;
- gboolean reset;
-};
-
-static void
-wave_scope_init(gpointer *data)
-{
- *data = g_new0(struct pn_scope_data, 1);
-
- /* the expressions will need to be compiled, so prepare for that */
- ((struct pn_scope_data *)*data)->reset = TRUE;
-}
-
-static void
-wave_scope_cleanup(gpointer op_data)
-{
- struct pn_scope_data *data = (struct pn_scope_data *) op_data;
-
- g_return_if_fail(data != NULL);
-
- if (data->expr_on_init)
- expr_free(data->expr_on_init);
-
- if (data->expr_on_frame)
- expr_free(data->expr_on_frame);
-
- if (data->expr_on_sample)
- expr_free(data->expr_on_sample);
-
- if (data->dict)
- dict_free(data->dict);
-
- if (data)
- g_free(data);
-}
-
-static void
-wave_scope_exec(const struct pn_actuator_option *opts,
- gpointer op_data)
-{
- struct pn_scope_data *data = (struct pn_scope_data *) op_data;
- gint i;
- gdouble *xf, *yf, *index, *value, *points;
-
- if (data->reset)
- {
- if (data->dict)
- dict_free(data->dict);
-
- data->dict = dict_new();
-
- if (opts[0].val.sval != NULL)
- data->expr_on_init = expr_compile_string(opts[0].val.sval, data->dict);
-
- if (opts[1].val.sval != NULL)
- data->expr_on_frame = expr_compile_string(opts[1].val.sval,
- data->dict);
-
- if (opts[2].val.sval != NULL)
- data->expr_on_sample = expr_compile_string(opts[2].val.sval,
- data->dict);
-
- if (data->expr_on_init != NULL)
- expr_execute(data->expr_on_init, data->dict);
-
- data->reset = FALSE;
- }
-
- xf = dict_variable(data->dict, "x");
- yf = dict_variable(data->dict, "y");
- index = dict_variable(data->dict, "index");
- value = dict_variable(data->dict, "value");
- points = dict_variable(data->dict, "points");
-
- if (data->expr_on_frame != NULL)
- expr_execute(data->expr_on_frame, data->dict);
-
- if (*points > 513 || *points == 0)
- *points = 513;
-
- if (data->expr_on_sample != NULL)
- {
- for (i = 0; i < *points; i++)
- {
- gint x, y;
- static gint oldx, oldy;
-
- *value = 1.0 * pn_sound_data->pcm_data[0][i & 511] / 32768.0;
- *index = i / (*points - 1);
-
- expr_execute(data->expr_on_sample, data->dict);
-
- x = (gint)(((*xf + 1.0) * (pn_image_data->width - 1) / 2) + 0.5);
- y = (gint)(((*yf + 1.0) * (pn_image_data->height - 1) / 2) + 0.5);
-
- if (i != 0)
- pn_draw_line(oldx, oldy, x, y, 255);
-
- oldx = x;
- oldy = y;
- }
- }
-}
-
-struct pn_actuator_desc builtin_wave_scope =
-{
- "wave_scope", "Scope",
- "A programmable scope.",
- 0, wave_scope_opts,
- wave_scope_init, wave_scope_cleanup, wave_scope_exec
-};
diff --git a/src/paranormal/xform.c b/src/paranormal/xform.c
deleted file mode 100644
index 0bda07e..0000000
--- a/src/paranormal/xform.c
+++ /dev/null
@@ -1,774 +0,0 @@
-/*
- * paranormal: iterated pipeline-driven visualization plugin
- * Copyright (c) 2006, 2007 William Pitcock <nenolod@dereferenced.org>
- * Portions copyright (c) 2001 Jamie Gennis <jgennis@mindspring.com>
- *
- * 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; under version 2 of the License.
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: allow for only using an xform on part of the img? */
-/* FIXME: perhaps combine these into a single vector field
- so that only 1 apply_xform needs to be done for as many
- of these as someone wants to use */
-
-#include <config.h>
-
-#include <math.h>
-
-#include <glib.h>
-
-#include "paranormal.h"
-#include "actuators.h"
-#include "pn_utils.h"
-
-#include "libcalc/calc.h"
-
-struct xform_vector
-{
- gint32 offset; /* the offset of the top left pixel */
- guint16 w; /* 4:4:4:4 NE, NW, SE, SW pixel weights
- The total should be 16 */
-
- /* if offset < 0 then w is the color index to
- which the pixel will be set */
-};
-
-static void
-xfvec (float x, float y, struct xform_vector *v)
-{
- float xd, yd;
- int weight[4];
-
- if (x >= pn_image_data->width-1 || y >= pn_image_data->height-1
- || x < 0 || y < 0)
- {
- v->offset = -1;
- v->w = 0;
- return;
- }
-
- v->offset = PN_IMG_INDEX (floor(x), floor(y));
-
- xd = x - floor (x);
- yd = y - floor (y);
-
- weight[3] = xd * yd * 16;
- weight[2] = (1-xd) * yd * 16;
- weight[1] = xd * (1-yd) * 16;
- weight[0] = 16 - weight[3] - weight[2] - weight[1]; /* just in case */
-
- v->w = (weight[0]<<12) | (weight[1]<<8) | (weight[2]<<4) | weight[3];
-}
-
-static void
-apply_xform (struct xform_vector *vfield)
-{
- int i;
- struct xform_vector *v;
- register guchar *srcptr;
- register guchar *destptr;
- register int color;
-
- if (vfield == NULL)
- return;
-
- for (i=0, v=vfield, destptr=pn_image_data->surface[1];
- i<pn_image_data->width*pn_image_data->height;
- i++, v++, destptr++)
- {
- /* off the screen */
- if (v->offset < 0)
- {
- *destptr = (guchar)v->w;
- continue;
- }
-
- srcptr = pn_image_data->surface[0] + v->offset;
-
- /* exactly on the pixel */
- if (v->w == 0)
- *destptr = *srcptr;
-
- /* gotta blend the points */
- else
- {
- color = *srcptr * (v->w>>12);
- color += *++srcptr * ((v->w>>8) & 0x0f);
- color += *(srcptr+=pn_image_data->width) * (v->w & 0x0f);
- color += *(--srcptr) * ((v->w>>4) & 0x0f);
- color >>= 4;
- *destptr = (guchar)color;
- }
- }
-}
-
-/* **************** xform_spin **************** */
-/* FIXME: Describe these better, how they are backwards */
-/* FIXME: better name? */
-struct pn_actuator_option_desc xform_spin_opts[] =
-{
- { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: -8.0 } },
- { "r_add", "The number of pixels by which the r coordinate will be "
- "increased (before scaling)", OPT_TYPE_FLOAT, { fval: 0.0 } },
- { "r_scale", "The amount by which the r coordinate of each pixel will "
- "be scaled", OPT_TYPE_FLOAT, { fval: 1.0 } },
- { NULL }
-};
-
-struct xform_spin_data
-{
- int width, height;
- struct xform_vector *vfield;
-};
-
-static void
-xform_spin_init (gpointer *data)
-{
- *data = g_new0 (struct xform_spin_data, 1);
-}
-
-static void
-xform_spin_cleanup (gpointer data)
-{
- struct xform_spin_data *d = (struct xform_spin_data *) data;
-
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_spin_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- struct xform_spin_data *d = (struct xform_spin_data*)data;
- float i, j;
-
- if (d->width != pn_image_data->width
- || d->height != pn_image_data->height)
- {
- d->width = pn_image_data->width;
- d->height = pn_image_data->height;
-
- if (d->vfield)
- g_free (d->vfield);
-
- d->vfield = g_malloc0 (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j=-(pn_image_data->height>>1)+1; j<=pn_image_data->height>>1; j++)
- for (i=-(pn_image_data->width>>1); i<pn_image_data->width>>1; i++)
- {
- float r, t = 0;
- float x, y;
-
- r = sqrt (i*i + j*j);
- if (r)
- t = asin (j/r);
- if (i < 0)
- t = M_PI - t;
-
- t += opts[0].val.fval * M_PI/180.0;
- r += opts[1].val.fval;
- r *= opts[2].val.fval;
-
- x = (r * cos (t)) + (pn_image_data->width>>1);
- y = (pn_image_data->height>>1) - (r * sin (t));
-
- xfvec (x, y, &d->vfield
- [PN_IMG_INDEX ((pn_image_data->width>>1)+(int)rint(i),
- ((pn_image_data->height>>1)-(int)rint(j)))]);
- }
- }
-
- apply_xform (d->vfield);
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_xform_spin =
-{
- "xform_spin", "Spin Transform",
- "Rotates and radially scales the image",
- 0, xform_spin_opts,
- xform_spin_init, xform_spin_cleanup, xform_spin_exec
-};
-
-/* **************** xform_ripple **************** */
-struct pn_actuator_option_desc xform_ripple_opts[] =
-{
- { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: 0 } },
- { "ripples", "The number of ripples that fit on the screen "
- "(horizontally)", OPT_TYPE_FLOAT, { fval: 8 } },
- { "base_speed", "The minimum number of pixels to move each pixel",
- OPT_TYPE_FLOAT, { fval: 1 } },
- { "mod_speed", "The maximum number of pixels by which base_speed"
- " will be modified", OPT_TYPE_FLOAT, { fval: 1 } },
- { NULL }
-};
-
-struct xform_ripple_data
-{
- int width, height;
- struct xform_vector *vfield;
-};
-
-static void
-xform_ripple_init (gpointer *data)
-{
- *data = g_new0 (struct xform_ripple_data, 1);
-}
-
-static void
-xform_ripple_cleanup (gpointer data)
-{
- struct xform_ripple_data *d = (struct xform_ripple_data*) data;
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_ripple_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- struct xform_ripple_data *d = (struct xform_ripple_data*)data;
- float i, j;
-
- if (d->width != pn_image_data->width
- || d->height != pn_image_data->height)
- {
- d->width = pn_image_data->width;
- d->height = pn_image_data->height;
-
- if (d->vfield)
- g_free (d->vfield);
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j=-(pn_image_data->height>>1)+1; j<=pn_image_data->height>>1; j++)
- for (i=-(pn_image_data->width>>1); i<pn_image_data->width>>1; i++)
- {
- float r, t = 0;
- float x, y;
-
- r = sqrt (i*i + j*j);
- if (r)
- t = asin (j/r);
- if (i < 0)
- t = M_PI - t;
-
- t += opts[0].val.fval * M_PI/180.0;
-
- if (r > 4)//(pn_image_data->width/(2*opts[1].val.fval)))
- r -= opts[2].val.fval + (opts[3].val.fval/2) *
- (1 + sin ((r/(pn_image_data->width/(2*opts[1].val.fval)))*M_PI));
-/* else if (r > 4) */
-/* r *= r/(pn_image_data->width/opts[1].val.fval); */
- else /* don't let it explode */
- r = 1000000;
-
-
- x = (r * cos (t)) + (pn_image_data->width>>1);
- y = (pn_image_data->height>>1) - (r * sin (t));
-
- xfvec (x, y, &d->vfield
- [PN_IMG_INDEX ((pn_image_data->width>>1)+(int)rint(i),
- ((pn_image_data->height>>1)-(int)rint(j)))]);
- }
- }
-
- apply_xform (d->vfield);
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_xform_ripple =
-{
- "xform_ripple", "Ripple Transform", "Creates an ripple effect",
- 0, xform_ripple_opts,
- xform_ripple_init, xform_ripple_cleanup, xform_ripple_exec
-};
-
-/* **************** xform_bump_spin **************** */
-struct pn_actuator_option_desc xform_bump_spin_opts[] =
-{
- { "angle", "The angle of rotation", OPT_TYPE_FLOAT, { fval: 0 } },
- { "bumps", "The number of bumps that on the image",
- OPT_TYPE_FLOAT, { fval: 8 } },
- { "base_scale", "The base radial scale",
- OPT_TYPE_FLOAT, { fval: 0.95 } },
- { "mod_scale", "The maximum amount that should be "
- "added to the base_scale to create the 'bump' effect",
- OPT_TYPE_FLOAT, { fval: .1 } },
- { NULL }
-};
-
-struct xform_bump_spin_data
-{
- int width, height;
- struct xform_vector *vfield;
-};
-
-static void
-xform_bump_spin_init (gpointer *data)
-{
- *data = g_new0 (struct xform_bump_spin_data, 1);
-}
-
-static void
-xform_bump_spin_cleanup (gpointer data)
-{
- struct xform_bump_spin_data *d = (struct xform_bump_spin_data*) data;
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_bump_spin_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- struct xform_bump_spin_data *d = (struct xform_bump_spin_data*)data;
- float i, j;
-
- if (d->width != pn_image_data->width
- || d->height != pn_image_data->height)
- {
- d->width = pn_image_data->width;
- d->height = pn_image_data->height;
-
- if (d->vfield)
- g_free (d->vfield);
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j=-(pn_image_data->height>>1)+1; j<=pn_image_data->height>>1; j++)
- for (i=-(pn_image_data->width>>1); i<pn_image_data->width>>1; i++)
- {
- float r, t = 0;
- float x, y;
-
- r = sqrt (i*i + j*j);
- if (r)
- t = asin (j/r);
- if (i < 0)
- t = M_PI - t;
-
- t += opts[0].val.fval * M_PI/180.0;
-
- r *= opts[2].val.fval + opts[3].val.fval
- * (1 + sin (t*opts[1].val.fval));
-
- x = (r * cos (t)) + (pn_image_data->width>>1);
- y = (pn_image_data->height>>1) - (r * sin (t));
-
- xfvec (x, y, &d->vfield
- [PN_IMG_INDEX ((pn_image_data->width>>1)+(int)rint(i),
- ((pn_image_data->height>>1)-(int)rint(j)))]);
- }
- }
-
- apply_xform (d->vfield);
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_xform_bump_spin =
-{
- "xform_bump_spin", "Bump Transform",
- "Rotate the image at a varying speed to create "
- "the illusion of bumps",
- 0, xform_bump_spin_opts,
- xform_bump_spin_init, xform_bump_spin_cleanup, xform_bump_spin_exec
-};
-
-/* **************** xform_halfrender **************** */
-struct pn_actuator_option_desc xform_halfrender_opts[] =
-{
- { "direction", "Negative is horizontal, positive is vertical.",
- OPT_TYPE_INT, { ival: 1 } },
- { "render_twice", "Render the second image.",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-static void
-xform_halfrender_exec (const struct pn_actuator_option *opts,
- gpointer data)
-{
- gint x, y;
-
- if (opts[0].val.ival < 0)
- {
- for (y = 0; y < pn_image_data->height; y += 2)
- {
- for (x = 0; x < pn_image_data->width; x++)
- {
- pn_image_data->surface[1][PN_IMG_INDEX(x, y / 2)] =
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)];
- if (opts[1].val.bval)
- {
- pn_image_data->surface[1][PN_IMG_INDEX(x, (y / 2) + (pn_image_data->height / 2))] =
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
- }
- }
- else
- {
- for (y = 0; y < pn_image_data->height; y++)
- {
- for (x = 0; x < pn_image_data->width; x += 2)
- {
- pn_image_data->surface[1][PN_IMG_INDEX(x / 2, y)] =
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)];
- if (opts[1].val.bval)
- {
- pn_image_data->surface[1][PN_IMG_INDEX((x / 2) + (pn_image_data->width / 2), y)] =
- pn_image_data->surface[0][PN_IMG_INDEX(x, y)];
- }
- }
- }
- }
-
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_xform_halfrender =
-{
- "xform_halfrender", "Halfrender Transform",
- "Divides the surface in half and renders it twice.",
- 0, xform_halfrender_opts,
- NULL, NULL, xform_halfrender_exec
-};
-
-/* **************** xform_movement **************** */
-struct pn_actuator_option_desc xform_movement_opts[] =
-{
- { "formula", "The formula to evaluate.",
- OPT_TYPE_STRING, { sval: "r = r * cos(r); d = sin(d);" } },
- { "polar", "Whether the coordinates are polar or not.",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-typedef struct {
- int width, height; /* Previous width and height. */
- struct xform_vector *vfield;
-} PnMovementData;
-
-static void
-xform_movement_init (gpointer *data)
-{
- *data = g_new0(PnMovementData, 1);
-}
-
-static void
-xform_movement_cleanup (gpointer data)
-{
- PnMovementData *d = (PnMovementData *) data;
-
- if (d)
- {
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-inline void
-xform_trans_polar (struct xform_vector *vfield, gint x, gint y,
- expression_t *expr, symbol_dict_t *dict)
-{
- gdouble *rf, *df;
- gdouble xf, yf;
- gint xn, yn;
-
- rf = dict_variable(dict, "r");
- df = dict_variable(dict, "d");
-
- /* Points (xf, yf) must be in a (-1..1) square. */
- xf = 2.0 * x / (pn_image_data->width - 1) - 1.0;
- yf = 2.0 * y / (pn_image_data->height - 1) - 1.0;
-
- /* Now, convert to polar coordinates r and d. */
- *rf = hypot(xf, yf);
- *df = atan2(yf, xf);
-
- /* Run the script. */
- expr_execute(expr, dict);
-
- /* Back to (-1..1) square. */
- xf = (*rf) * cos ((*df));
- yf = (*rf) * sin ((*df));
-
- /* Convert back to physical coordinates. */
- xn = (int)(((xf + 1.0) * (pn_image_data->width - 1) / 2) + 0.5);
- yn = (int)(((yf + 1.0) * (pn_image_data->height - 1) / 2) + 0.5);
-
- if (xn < 0 || xn >= pn_image_data->width || yn < 0 || yn >= pn_image_data->height)
- {
- xn = x; yn = y;
- }
-
- xfvec (xn, yn, &vfield[PN_IMG_INDEX (x, y)]);
-}
-
-inline void
-xform_trans_literal (struct xform_vector *vfield, gint x, gint y,
- expression_t *expr, symbol_dict_t *dict)
-{
- gint xn, yn;
- gdouble *xf = dict_variable(dict, "x");
- gdouble *yf = dict_variable(dict, "y");
-
- /* Points (xf, yf) must be in a (-1..1) square. */
- *xf = 2.0 * x / (pn_image_data->width - 1) - 1.0;
- *yf = 2.0 * y / (pn_image_data->height - 1) - 1.0;
-
- /* Run the script. */
- expr_execute(expr, dict);
-
- /* Convert back to physical coordinates. */
- xn = (int)(((*xf + 1.0) * (pn_image_data->width - 1) / 2) + 0.5);
- yn = (int)(((*yf + 1.0) * (pn_image_data->height - 1) / 2) + 0.5);
-
- if (xn < 0 || xn >= pn_image_data->width || yn < 0 || yn >= pn_image_data->height)
- {
- xn = x; yn = y;
- }
-
- xfvec (xn, yn, &vfield[PN_IMG_INDEX (x, y)]);
-}
-
-static void
-xform_movement_exec (const struct pn_actuator_option *opts,
- gpointer odata)
-{
- PnMovementData *d = (PnMovementData *) odata;
- void (*transform_func)(struct xform_vector *, gint, gint, expression_t *, symbol_dict_t *) =
- opts[1].val.bval == TRUE ? xform_trans_polar : xform_trans_literal;
-
- if (d->width != pn_image_data->width
- || d->height != pn_image_data->height)
- {
- gint i, j;
- gdouble *rf, *df;
- expression_t *expr;
- symbol_dict_t *dict;
-
- d->width = pn_image_data->width;
- d->height = pn_image_data->height;
-
- if (d->vfield)
- {
- g_free (d->vfield);
- d->vfield = NULL;
- }
-
- if (opts[0].val.sval == NULL)
- return;
-
- dict = dict_new();
- expr = expr_compile_string(opts[0].val.sval, dict);
- if (!expr)
- {
- dict_free(dict);
- return;
- }
-
- rf = dict_variable(dict, "r");
- df = dict_variable(dict, "d");
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- for (j = 0; j < pn_image_data->height; j++)
- for (i = 0; i < pn_image_data->width; i++)
- {
- transform_func(d->vfield, i, j, expr, dict);
- }
- }
-
- apply_xform (d->vfield);
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_xform_movement =
-{
- "xform_movement", "Movement Transform",
- "A customizable blitter.",
- 0, xform_movement_opts,
- xform_movement_init, xform_movement_cleanup, xform_movement_exec
-};
-
-/* **************** xform_dynmovement **************** */
-/* FIXME: really slow */
-struct pn_actuator_option_desc xform_dynmovement_opts[] =
-{
- { "init_script", "The formula to evaluate on init.",
- OPT_TYPE_STRING, { sval: "" } },
- { "beat_script", "The formula to evaluate on each beat.",
- OPT_TYPE_STRING, { sval: "" } },
- { "frame_script", "The formula to evaluate on each frame.",
- OPT_TYPE_STRING, { sval: "" } },
- { "point_script", "The formula to evaluate.",
- OPT_TYPE_STRING, { sval: "d = 0.15;" } },
- { "polar", "Whether or not the coordinates to use are polar.",
- OPT_TYPE_BOOLEAN, { bval: TRUE } },
- { NULL }
-};
-
-typedef struct {
- int width, height; /* Previous width and height. */
- expression_t *expr_init;
- expression_t *expr_frame;
- expression_t *expr_beat;
- expression_t *expr_point;
- symbol_dict_t *dict;
- struct xform_vector *vfield;
-} PnDynMovementData;
-
-static void
-xform_dynmovement_init (gpointer *data)
-{
- *data = g_new0(PnDynMovementData, 1);
-}
-
-static void
-xform_dynmovement_cleanup (gpointer data)
-{
- PnDynMovementData *d = (PnDynMovementData *) data;
-
- if (d)
- {
- if (d->expr_init)
- expr_free (d->expr_init);
- if (d->expr_beat)
- expr_free (d->expr_beat);
- if (d->expr_frame)
- expr_free (d->expr_frame);
- if (d->expr_point)
- expr_free (d->expr_point);
- if (d->dict)
- dict_free (d->dict);
- if (d->vfield)
- g_free (d->vfield);
- g_free (d);
- }
-}
-
-static void
-xform_dynmovement_exec (const struct pn_actuator_option *opts,
- gpointer odata)
-{
- PnDynMovementData *d = (PnDynMovementData *) odata;
- gint i, j;
- gdouble *rf, *df;
- void (*transform_func)(struct xform_vector *, gint, gint, expression_t *, symbol_dict_t *) =
- opts[4].val.bval == TRUE ? xform_trans_polar : xform_trans_literal;
- gboolean make_table = FALSE;
-
- if (d->width != pn_image_data->width
- || d->height != pn_image_data->height)
- {
- d->width = pn_image_data->width;
- d->height = pn_image_data->height;
-
- if (d->vfield)
- {
- g_free (d->vfield);
- d->vfield = NULL;
- }
-
- if (opts[3].val.sval == NULL)
- return;
-
- if (!d->dict)
- d->dict = dict_new();
- else
- {
- dict_free(d->dict);
- d->dict = dict_new();
- }
-
- if (d->expr_init)
- {
- expr_free(d->expr_init);
- d->expr_init = NULL;
- }
-
- /* initialize */
- d->expr_init = expr_compile_string(opts[0].val.sval, d->dict);
-
- if (d->expr_init != NULL)
- {
- expr_execute(d->expr_init, d->dict);
- }
-
- d->expr_beat = expr_compile_string(opts[1].val.sval, d->dict);
- d->expr_frame = expr_compile_string(opts[2].val.sval, d->dict);
- d->expr_point = expr_compile_string(opts[3].val.sval, d->dict);
-
- d->vfield = g_malloc (sizeof(struct xform_vector)
- * d->width * d->height);
-
- make_table = TRUE;
- }
-
- rf = dict_variable(d->dict, "r");
- df = dict_variable(d->dict, "d");
-
- if (*opts[2].val.sval != '\0' || pn_new_beat)
- make_table = TRUE;
-
- /* run the on-frame script. */
- if (make_table == TRUE)
- {
- if (d->expr_beat != NULL)
- expr_execute(d->expr_beat, d->dict);
-
- if (d->expr_frame != NULL)
- expr_execute(d->expr_frame, d->dict);
-
- for (j = 0; j < pn_image_data->height; j++)
- for (i = 0; i < pn_image_data->width; i++)
- {
- transform_func(d->vfield, i, j, d->expr_point, d->dict);
- }
- }
-
- apply_xform (d->vfield);
- pn_swap_surfaces ();
-}
-
-struct pn_actuator_desc builtin_xform_dynmovement =
-{
- "xform_dynmovement", "Dynamic Movement Transform",
- "A customizable blitter.",
- 0, xform_dynmovement_opts,
- xform_dynmovement_init, xform_dynmovement_cleanup, xform_dynmovement_exec
-};
diff --git a/src/pls/Makefile b/src/pls/Makefile
index d484a40..dfe4591 100644
--- a/src/pls/Makefile
+++ b/src/pls/Makefile
@@ -7,5 +7,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${CONTAINER_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/pls/pls.c b/src/pls/pls.c
index c8d15ba..2c27b8b 100644
--- a/src/pls/pls.c
+++ b/src/pls/pls.c
@@ -2,6 +2,7 @@
* Audacious: A cross-platform multimedia player
* Copyright (c) 2006 William Pitcock, Tony Vroon, George Averill,
* Giacomo Lozito, Derek Pomery and Yoshiki Yazawa.
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -31,7 +32,6 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
-#include <sys/errno.h>
#include <audacious/debug.h>
#include <audacious/misc.h>
@@ -41,36 +41,26 @@
#include "util.h"
-static void
-playlist_load_pls(const gchar * filename, gint pos)
+static gboolean playlist_load_pls (const gchar * filename, VFSFile * file,
+ gchar * * title, Index * filenames, Index * tuples)
{
gint i, count;
gchar line_key[16];
gchar * line;
- gchar *uri = NULL;
- struct index * add;
- g_return_if_fail(filename != NULL);
+ INIFile * inifile = open_ini_file (file);
- if (!str_has_suffix_nocase(filename, ".pls"))
- return;
-
- uri = g_filename_to_uri(filename, NULL, NULL);
-
- INIFile *inifile = open_ini_file(uri ? uri : filename);
- g_free(uri); uri = NULL;
+ * title = NULL;
if (!(line = read_ini_string(inifile, "playlist", "NumberOfEntries")))
{
close_ini_file(inifile);
- return;
+ return FALSE;
}
count = atoi(line);
g_free(line);
- add = index_new ();
-
for (i = 1; i <= count; i++) {
g_snprintf(line_key, sizeof(line_key), "File%d", i);
if ((line = read_ini_string(inifile, "playlist", line_key)))
@@ -79,36 +69,28 @@ playlist_load_pls(const gchar * filename, gint pos)
g_free(line);
if (uri != NULL)
- index_append (add, uri);
+ index_append (filenames, str_get (uri));
+
+ g_free (uri);
}
}
close_ini_file(inifile);
-
- aud_playlist_entry_insert_batch (aud_playlist_get_active (), pos, add, NULL);
+ return TRUE;
}
-static void
-playlist_save_pls(const gchar *filename, gint pos)
+static gboolean playlist_save_pls (const gchar * filename, VFSFile * file,
+ const gchar * title, Index * filenames, Index * tuples)
{
- gint playlist = aud_playlist_get_active ();
- gint entries = aud_playlist_entry_count (playlist);
- gchar *uri = g_filename_to_uri(filename, NULL, NULL);
- VFSFile *file = vfs_fopen(uri, "wb");
+ gint entries = index_count (filenames);
gint count;
- AUDDBG("filename=%s\n", filename);
- AUDDBG("uri=%s\n", uri);
-
- g_return_if_fail(file != NULL);
-
vfs_fprintf(file, "[playlist]\n");
- vfs_fprintf(file, "NumberOfEntries=%d\n", entries - pos);
+ vfs_fprintf(file, "NumberOfEntries=%d\n", entries);
- for (count = pos; count < entries; count ++)
+ for (count = 0; count < entries; count ++)
{
- const gchar * filename = aud_playlist_entry_get_filename (playlist,
- count);
+ const gchar * filename = index_get (filenames, count);
gchar *fn;
if (vfs_is_remote (filename))
@@ -116,28 +98,19 @@ playlist_save_pls(const gchar *filename, gint pos)
else
fn = g_filename_from_uri (filename, NULL, NULL);
- vfs_fprintf (file, "File%d=%s\n", 1 + pos + count, fn);
+ vfs_fprintf (file, "File%d=%s\n", 1 + count, fn);
g_free(fn);
}
- vfs_fclose(file);
+ return TRUE;
}
-PlaylistContainer plc_pls = {
- .name = "Winamp .pls Playlist Format",
- .ext = "pls",
- .plc_read = playlist_load_pls,
- .plc_write = playlist_save_pls,
-};
-
-static void init(void)
-{
- aud_playlist_container_register(&plc_pls);
-}
-
-static void cleanup(void)
-{
- aud_playlist_container_unregister(&plc_pls);
-}
+static const gchar * const pls_exts[] = {"pls", NULL};
-DECLARE_PLUGIN (pls, init, cleanup, NULL, NULL, NULL, NULL, NULL, NULL)
+AUD_PLAYLIST_PLUGIN
+(
+ .name = "PLS Playlist Format",
+ .extensions = pls_exts,
+ .load = playlist_load_pls,
+ .save = playlist_save_pls
+)
diff --git a/src/pls/util.c b/src/pls/util.c
index 169fff2..32445d5 100644
--- a/src/pls/util.c
+++ b/src/pls/util.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2009 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
*
* Based on BMP:
* Copyright (C) 2003-2004 BMP development team.
@@ -26,7 +26,7 @@
#include <stdlib.h>
#include <string.h>
-#include <audacious/plugin.h>
+#include <libaudcore/vfs.h>
#include "util.h"
@@ -59,64 +59,20 @@ static void close_ini_file_free_section(gpointer section)
g_hash_table_destroy((GHashTable *)section);
}
-INIFile *open_ini_file(const gchar *filename)
+INIFile * open_ini_file (VFSFile * file)
{
GHashTable *ini_file = NULL;
GHashTable *section = NULL;
GString *section_name, *key_name, *value;
gpointer section_hash, key_hash;
- guchar * buffer = NULL;
gsize off = 0;
- gint64 filesize = 0;
- unsigned char x[] = { 0xff, 0xfe, 0x00 };
-
- g_return_val_if_fail(filename, NULL);
-
- void * vbuf = NULL;
- vfs_file_get_contents (filename, & vbuf, & filesize);
- if (! vbuf)
+ gint64 filesize = vfs_fsize (file);
+ if (filesize < 1)
return NULL;
- buffer = vbuf;
-
- /*
- * Convert UTF-16 into something useful. Original implementation
- * by incomp@#audacious. Cleanups \nenolod
- * FIXME: can't we use a GLib function for that? -- 01mf02
- */
- if (filesize > 2 && !memcmp(&buffer[0], &x, 2))
- {
- guchar *outbuf = g_malloc (filesize); /* it's safe to waste memory. */
- guint counter;
- for (counter = 2; counter < filesize; counter += 2)
- {
- if (!memcmp(&buffer[counter + 1], &x[2], 1))
- {
- outbuf[(counter - 2) / 2] = buffer[counter];
- }
- else
- {
- g_free(buffer);
- g_free(outbuf);
- return NULL;
- }
- }
-
- outbuf[(counter - 2) / 2] = '\0';
-
- if ((filesize - 2) / 2 == (counter - 2) / 2)
- {
- g_free(buffer);
- buffer = outbuf;
- }
- else
- {
- g_free(buffer);
- g_free(outbuf);
- return NULL; /* XXX wrong encoding */
- }
- }
+ gchar * buffer = g_malloc (filesize);
+ filesize = vfs_fread (buffer, 1, filesize, file);
section_name = g_string_new("");
key_name = g_string_new(NULL);
diff --git a/src/pls/util.h b/src/pls/util.h
index db2d141..3644c26 100644
--- a/src/pls/util.h
+++ b/src/pls/util.h
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2009 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
*
* Based on BMP:
* Copyright (C) 2003-2004 BMP development team
@@ -27,10 +27,11 @@
#define UTIL_H
#include <glib.h>
+#include <libaudcore/vfs.h>
typedef GHashTable INIFile;
-INIFile *open_ini_file(const gchar *filename);
+INIFile * open_ini_file (VFSFile * file);
void close_ini_file(INIFile *key_file);
gchar *read_ini_string(INIFile *key_file, const gchar *section,
const gchar *key);
diff --git a/src/projectm-1.0/Makefile b/src/projectm-1.0/Makefile
deleted file mode 100644
index b77553b..0000000
--- a/src/projectm-1.0/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-PLUGIN = projectm-1.0${PLUGIN_SUFFIX}
-
-SRCS = gtk_projectm_impl.cxx \
- main.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
-
-LD = ${CXX}
-CFLAGS += ${PLUGIN_CFLAGS}
-CXXFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${GTKGLEXT_CFLAGS} ${LIBPROJECTM1_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${GTKGLEXT_LIBS} ${LIBPROJECTM1_LIBS}
diff --git a/src/projectm-1.0/gtk_projectm_impl.cxx b/src/projectm-1.0/gtk_projectm_impl.cxx
deleted file mode 100755
index ab7809b..0000000
--- a/src/projectm-1.0/gtk_projectm_impl.cxx
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * gtk_projectm_impl.cxx: GTK+ ProjectM Implementation.
- * Copyright (c) 2008 William Pitcock <nenolod@sacredspiral.co.uk>
- * Portions copyright (c) 2004-2006 Peter Sperl
- *
- * This program is free software; you may distribute it under the terms
- * of the GNU General Public License; version 2.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <string>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkgl.h>
-
-#include "gtk_projectm_impl.h"
-
-#include <math.h>
-
-#include <libprojectM/projectM.hpp>
-#include <libprojectM/event.h>
-
-#include <GL/gl.h>
-#define CONFIG_FILE "/share/projectM/config.inp"
-
-// Forward declarations
-static std::string read_config();
-
-int SDLThreadWrapper(void *);
-void handle_playback_trigger(void *, void *);
-
-static void _gtk_projectm_realize_impl(GtkWidget *widget, gpointer data);
-static void unrealize_cb (GtkWidget * widget, struct _GtkProjectMPrivate * priv);
-static gboolean _gtk_projectm_redraw_impl(GtkWidget *widget);
-static gboolean _gtk_projectm_expose_impl(GtkWidget *widget, GdkEventExpose *event, gpointer data);
-static gboolean _gtk_projectm_configure_impl(GtkWidget *widget, GdkEventConfigure *event, gpointer data);
-static void _gtk_projectm_destroy_impl(GtkWidget *widget);
-
-struct _GtkProjectMPrivate {
- projectM *pm;
- GdkGLConfig *glconfig;
- GtkWidget *drawing_area;
- gint idle_id;
- GTimer *timer;
- gint frames;
-};
-
-extern "C" GtkWidget *
-gtk_projectm_new(void)
-{
- struct _GtkProjectMPrivate *priv = g_slice_new0(struct _GtkProjectMPrivate);
-
- gtk_gl_init(NULL, NULL);
-
- priv->glconfig = gdk_gl_config_new_by_mode((GdkGLConfigMode) (GDK_GL_MODE_RGBA | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE));
- if (!priv->glconfig)
- return NULL;
-
- priv->drawing_area = gtk_drawing_area_new();
- gtk_widget_set_size_request(priv->drawing_area, 512, 512);
- gtk_widget_set_gl_capability(priv->drawing_area, priv->glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
- gtk_widget_add_events(priv->drawing_area, GDK_VISIBILITY_NOTIFY_MASK);
-
- g_signal_connect_after(G_OBJECT(priv->drawing_area), "realize",
- G_CALLBACK(_gtk_projectm_realize_impl), priv);
- g_signal_connect (priv->drawing_area, "unrealize", (GCallback) unrealize_cb,
- priv);
- g_signal_connect(G_OBJECT(priv->drawing_area), "expose_event",
- G_CALLBACK(_gtk_projectm_expose_impl), priv);
- g_signal_connect(G_OBJECT(priv->drawing_area), "destroy",
- G_CALLBACK(_gtk_projectm_destroy_impl), priv);
-
- priv->timer = g_timer_new();
- priv->frames = 0;
-
- g_object_set_data(G_OBJECT(priv->drawing_area), "GtkProjectMPrivate", priv);
-
- return priv->drawing_area;
-}
-
-extern "C" void
-gtk_projectm_add_pcm_data(GtkWidget *widget, gint16 pcm_data[2][512])
-{
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) g_object_get_data(G_OBJECT(widget), "GtkProjectMPrivate");
-
- g_return_if_fail(priv != NULL);
-
- if (priv->pm != NULL)
- priv->pm->pcm()->addPCM16 (pcm_data);
-}
-
-extern "C" void
-gtk_projectm_toggle_preset_lock(GtkWidget *widget)
-{
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) g_object_get_data(G_OBJECT(widget), "GtkProjectMPrivate");
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->pm != NULL);
-
- priv->pm->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_l, PROJECTM_KMOD_LSHIFT);
-}
-
-extern "C" void
-gtk_projectm_preset_prev(GtkWidget *widget)
-{
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) g_object_get_data(G_OBJECT(widget), "GtkProjectMPrivate");
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->pm != NULL);
-
- priv->pm->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_p, PROJECTM_KMOD_LSHIFT);
-}
-
-extern "C" void
-gtk_projectm_preset_next(GtkWidget *widget)
-{
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) g_object_get_data(G_OBJECT(widget), "GtkProjectMPrivate");
-
- g_return_if_fail(priv != NULL);
- g_return_if_fail(priv->pm != NULL);
-
- priv->pm->key_handler(PROJECTM_KEYDOWN, PROJECTM_K_n, PROJECTM_KMOD_LSHIFT);
-}
-
-static void
-_gtk_projectm_realize_impl(GtkWidget *widget, gpointer data)
-{
- GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
- GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) data;
-
- if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
- return;
-
- std::string configFile = read_config();
- priv->pm = new projectM(configFile);
-
- priv->pm->projectM_resetGL(widget->allocation.width, widget->allocation.height);
-
- gdk_gl_drawable_swap_buffers(gldrawable);
- gdk_gl_drawable_gl_end(gldrawable);
-
- g_signal_connect(G_OBJECT(widget), "configure_event",
- G_CALLBACK(_gtk_projectm_configure_impl), priv);
-
- priv->idle_id = g_timeout_add (1000 / 30,
- (GSourceFunc) _gtk_projectm_redraw_impl,
- priv->drawing_area);
-}
-
-static void unrealize_cb (GtkWidget * widget, struct _GtkProjectMPrivate * priv)
-{
- if (priv->idle_id)
- {
- g_source_remove (priv->idle_id);
- priv->idle_id = 0;
- }
-
- if (priv->pm != NULL)
- {
- delete priv->pm;
- priv->pm = NULL;
- }
-}
-
-static gboolean
-_gtk_projectm_configure_impl(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
-{
- GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
- GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) data;
-
- if (priv->pm == NULL)
- return FALSE;
-
- if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
- return FALSE;
-
- priv->pm->projectM_resetGL(widget->allocation.width, widget->allocation.height);
-
- gdk_gl_drawable_swap_buffers(gldrawable);
- gdk_gl_drawable_gl_end(gldrawable);
-
- return TRUE;
-}
-
-static gboolean
-_gtk_projectm_expose_impl(GtkWidget *widget, GdkEventExpose *event, gpointer data)
-{
- GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
- GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) data;
-
- if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
- return FALSE;
-
- priv->pm->renderFrame();
- priv->frames++;
-
- gdk_gl_drawable_swap_buffers(gldrawable);
- gdk_gl_drawable_gl_end(gldrawable);
-
- gdouble seconds = g_timer_elapsed (priv->timer, NULL);
- if (seconds >= 5.0)
- {
- gdouble fps = priv->frames / seconds;
- g_print ("%d frames in %6.3f seconds = %6.3f FPS\n", priv->frames, seconds, fps);
- g_timer_reset (priv->timer);
- priv->frames = 0;
- }
-
- return TRUE;
-}
-
-static gboolean
-_gtk_projectm_redraw_impl(GtkWidget *widget)
-{
- gdk_window_invalidate_rect(widget->window, &widget->allocation, FALSE);
-
- return TRUE;
-}
-
-static void
-_gtk_projectm_destroy_impl(GtkWidget *widget)
-{
- struct _GtkProjectMPrivate *priv = (struct _GtkProjectMPrivate *) g_object_get_data(G_OBJECT(widget), "GtkProjectMPrivate");
-
- if (priv->idle_id)
- g_source_remove(priv->idle_id);
-
- delete priv->pm;
- g_free(priv->timer);
- g_slice_free(struct _GtkProjectMPrivate, priv);
-}
-
-/********************************************************************************
- * XXX: This code is from projectM and still needs to be rewritten! *
- ********************************************************************************/
-static std::string read_config()
-{
-
-// int n;
-
- char num[512];
- FILE *in;
- FILE *out;
-
- char *home;
- char projectM_home[1024];
- char projectM_config[1024];
-
- strcpy(projectM_config, PROJECTM_PREFIX);
- strcpy(projectM_config + strlen(PROJECTM_PREFIX), CONFIG_FILE);
- projectM_config[strlen(PROJECTM_PREFIX) + strlen(CONFIG_FILE)] = '\0';
- //printf("dir:%s \n",projectM_config);
- home = getenv("HOME");
- strcpy(projectM_home, home);
- strcpy(projectM_home + strlen(home), "/.projectM/config.inp");
- projectM_home[strlen(home) + strlen("/.projectM/config.inp")] = '\0';
-
-
- if ((in = fopen(projectM_home, "r")) != 0)
- {
- //printf("reading ~/.projectM/config.inp \n");
- fclose(in);
- return std::string(projectM_home);
- }
- else
- {
- printf("trying to create ~/.projectM/config.inp \n");
-
- strcpy(projectM_home, home);
- strcpy(projectM_home + strlen(home), "/.projectM");
- projectM_home[strlen(home) + strlen("/.projectM")] = '\0';
- mkdir(projectM_home, 0755);
-
- strcpy(projectM_home, home);
- strcpy(projectM_home + strlen(home), "/.projectM/config.inp");
- projectM_home[strlen(home) + strlen("/.projectM/config.inp")] = '\0';
-
- if ((out = fopen(projectM_home, "w")) != 0)
- {
-
- if ((in = fopen(projectM_config, "r")) != 0)
- {
-
- while (fgets(num, 80, in) != NULL)
- {
- fputs(num, out);
- }
- fclose(in);
- fclose(out);
-
-
- if ((in = fopen(projectM_home, "r")) != 0)
- {
- printf("created ~/.projectM/config.inp successfully\n");
- fclose(in);
- return std::string(projectM_home);
- }
- else
- {
- printf("This shouldn't happen, using implementation defualts\n");
- abort();
- }
- }
- else
- {
- printf("Cannot find projectM default config, using implementation defaults\n");
- abort();
- }
- }
- else
- {
- printf("Cannot create ~/.projectM/config.inp, using default config file\n");
- if ((in = fopen(projectM_config, "r")) != 0)
- {
- printf("Successfully opened default config file\n");
- fclose(in);
- return std::string(projectM_config);
- }
- else
- {
- printf("Using implementation defaults, your system is really messed up, I'm suprised we even got this far\n");
- abort();
- }
- }
-
- }
-
- abort();
-}
diff --git a/src/projectm-1.0/gtk_projectm_impl.h b/src/projectm-1.0/gtk_projectm_impl.h
deleted file mode 100644
index ece5d8d..0000000
--- a/src/projectm-1.0/gtk_projectm_impl.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * gtk_projectm_impl.h: GTK+ ProjectM Implementation.
- * Copyright (c) 2008 William Pitcock <nenolod@sacredspiral.co.uk>
- * Portions copyright (c) 2004-2006 Peter Sperl
- *
- * This program is free software; you may distribute it under the terms
- * of the GNU General Public License; version 2.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkgl.h>
-
-G_BEGIN_DECLS
-
-GtkWidget *gtk_projectm_new(void);
-void gtk_projectm_add_pcm_data(GtkWidget *widget, gint16 pcm_data[2][512]);
-void gtk_projectm_toggle_preset_lock(GtkWidget *widget);
-void gtk_projectm_preset_prev(GtkWidget *widget);
-void gtk_projectm_preset_next(GtkWidget *widget);
-
-G_END_DECLS
diff --git a/src/projectm-1.0/main.c b/src/projectm-1.0/main.c
deleted file mode 100644
index 1e05e5a..0000000
--- a/src/projectm-1.0/main.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * main.cxx: plugin glue to libprojectm
- * Copyright (c) 2008 William Pitcock <nenolod@sacredspiral.co.uk>
- *
- * This program is free software; you may distribute it under the terms
- * of the GNU General Public License; version 2.
- */
-
-#include "config.h"
-
-#include <audacious/plugin.h>
-#include <audacious/i18n.h>
-
-#include "gtk_projectm_impl.h"
-
-static GtkWidget *projectm = NULL;
-
-void /* GtkWidget */ *
-projectM_get_widget(void)
-{
- if (projectm == NULL)
- {
- projectm = gtk_projectm_new ();
- g_signal_connect (projectm, "destroy", (GCallback) gtk_widget_destroyed,
- & projectm);
- }
-
- return projectm;
-}
-
-void
-projectM_render_pcm(gint16 pcm_data[2][512])
-{
- g_return_if_fail(projectm != NULL);
-
- gtk_projectm_add_pcm_data(projectm, pcm_data);
-}
-
-VisPlugin projectM_vtable = {
- .description = "projectM",
- .num_pcm_chs_wanted = 2,
- .render_pcm = projectM_render_pcm,
- .get_widget = projectM_get_widget,
-};
-
-VisPlugin *projectM_vplist[] = { &projectM_vtable, NULL };
-
-DECLARE_PLUGIN(projectm, NULL, NULL, NULL, NULL, NULL, NULL,
- projectM_vplist, NULL);
diff --git a/src/projectm/Makefile b/src/projectm/Makefile
deleted file mode 100644
index 1effca2..0000000
--- a/src/projectm/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-PLUGIN = projectm${PLUGIN_SUFFIX}
-
-SRCS = main.c \
- video_init.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${SDL_CFLAGS} ${LIBPROJECTM_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${SDL_LIBS} ${LIBPROJECTM_LIBS} -lprojectM
diff --git a/src/projectm/main.c b/src/projectm/main.c
deleted file mode 100644
index b7ece38..0000000
--- a/src/projectm/main.c
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
-xmms-projectM v0.99 - xmms-projectm.sourceforge.net
---------------------------------------------------
-
-Lead Developers: Carmelo Piccione (cep@andrew.cmu.edu) &
- Peter Sperl (peter@sperl.com)
-
-We have also been advised by some professors at CMU, namely Roger B. Dannenberg.
-http://www-2.cs.cmu.edu/~rbd/
-
-The inspiration for this program was Milkdrop by Ryan Geiss. Obviously.
-
-This code is distributed under the GPL.
-
-
-THANKS FOR THE CODE!!!
--------------------------------------------------
-The base for this program was andy@nobugs.org's XMMS plugin tutorial
-http://www.xmms.org/docs/vis-plugin.html
-
-We used some FFT code by Takuya OOURA instead of XMMS' built-in fft code
-fftsg.c - http://momonga.t.u-tokyo.ac.jp/~ooura/fft.html
-
-For font rendering we used GLF by Roman Podobedov
-glf.c - http://astronomy.swin.edu.au/~pbourke/opengl/glf/
-
-and some beat detection code was inspired by Frederic Patin @
-www.gamedev.net/reference/programming/features/beatdetection/
-
-*/
-
-
-#include <stdio.h>
-#include <audacious/plugin.h>
-#include <string.h>
-#include <stdlib.h>
-#include <gtk/gtk.h>
-#include <SDL/SDL.h>
-#include <SDL/SDL_thread.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include <audacious/auddrct.h>
-#include <math.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <projectM/projectM.h>
-#include <projectM/console_interface.h>
-#include "sdltoprojectM.h"
-#include "video_init.h"
-
-#include <config.h>
-
-#define CONFIG_FILE "/config"
-#define PRESETS_DIR "/presets"
-#define FONTS_DIR "/fonts"
-
-// Forward declarations
-static void projectM_xmms_init(void);
-static void projectM_cleanup(void);
-static void projectM_about(void);
-static void projectM_configure(void);
-static void projectM_playback_start(void);
-static void projectM_playback_stop(void);
-static void projectM_render_pcm(gint16 pcm_data[2][512]);
-static void projectM_render_freq(gint16 pcm_data[2][256]);
-void read_config();
-
-
-//extern preset_t * active_preset;
-
-// Callback functions
-VisPlugin projectM_vtable = {
- .description = "projectM v0.99", // description
- .num_pcm_chs_wanted = 2, // # of PCM channels for render_pcm()
- .num_freq_chs_wanted = 0, // # of freq channels wanted for render_freq()
- .init = projectM_xmms_init, // Called when plugin is enabled
- .cleanup = projectM_cleanup, // Called when plugin is disabled
- .about = projectM_about, // Show the about box
- .configure = projectM_configure, // Show the configure box
- .playback_start = projectM_playback_start, // Called when playback starts
- .playback_stop = projectM_playback_stop, // Called when playback stops
- .render_pcm = projectM_render_pcm, // Render the PCM data, must return quickly
- .render_freq = projectM_render_freq // Render the freq data, must return quickly
-};
-
-VisPlugin *projectM_vplist[] = { &projectM_vtable, NULL };
-
-DECLARE_PLUGIN(projectm, NULL, NULL, NULL, NULL, NULL, NULL, projectM_vplist,NULL);
-
-// Our worker thread
-SDL_Thread *worker_thread;
-
-SDL_mutex *mutex;
-
-SDL_sem *sem;
-
-SDL_Event event;
-
-SDL_Surface *screen;
-//SDL_RenderTarget *RenderTarget = NULL;
-//GLuint RenderTargetTextureID;
-
-projectM_t *globalPM = NULL;
-
-int maxsamples=512;
-
-int texsize=512;
-int gx=32,gy=24;
-int wvw=640,wvh=480;
-int fvw=1280,fvh=960;
-int fps=30, fullscreen=0;
-char *disp;
-
-int disable_projectm(void) {
- projectM_vtable.disable_plugin(&projectM_vtable);
- return 0;
-}
-
-int get_xmms_title(void) {
- static char check_title = 1;
- static int last_pos;
- static char *last_title = NULL;
- int pos;
- char *title = NULL;
-
- //Nice optimization, but we want the title no matter what so I can display it when the song changes
-#if 0
- if(!(globalPM->showtitle%2)) {
- /* Repeat less often when not showing title */
- return 1000;
- }
-#endif
-
- pos = aud_drct_pl_get_pos();
- /* Only check every 1 second for title change, otherwise check pos */
- if(check_title || pos != last_pos) {
- title = aud_drct_pl_get_title(pos);
- if(title && (!last_title || strcmp(last_title,title))) {
- globalPM->title = title;
- globalPM->drawtitle = 1;
- g_free(last_title);
- last_title = title;
- } else if(title && last_title != title) {
- /* New copy of last title */
- g_free(title);
- }
- check_title = !check_title;
- }
- last_pos = pos;
- /* Repeat every 500ms */
- return 500;
-}
-
-void worker_func()
-{
- char projectM_data[PATH_MAX];
-
- SDL_TimerID title_timer = NULL;
-
-
- read_config();
-
- init_display(wvw,wvh,fullscreen);
-
- SDL_WM_SetCaption("projectM v0.99", "projectM v0.99");
-
-
- /** Initialise projectM */
-
- globalPM = (projectM_t *)malloc( sizeof( projectM_t ) );
-
- projectM_reset( globalPM );
-
- globalPM->fullscreen = fullscreen;
- globalPM->renderTarget->texsize = texsize;
- globalPM->gx=gx;
- globalPM->gy=gy;
- globalPM->fps=fps;
- globalPM->renderTarget->usePbuffers=0;
-
- strcpy(projectM_data, PROJECTM_DATADIR);
- strcpy(projectM_data+strlen(PROJECTM_DATADIR), FONTS_DIR);
- projectM_data[strlen(PROJECTM_DATADIR)+strlen(FONTS_DIR)]='\0';
-
- globalPM->fontURL = (char *)malloc( sizeof( char ) * 512 );
- strcpy( globalPM->fontURL, projectM_data );
-
- strcpy(projectM_data+strlen(PROJECTM_DATADIR), PRESETS_DIR);
- projectM_data[strlen(PROJECTM_DATADIR)+strlen(PRESETS_DIR)]='\0';
-
- globalPM->presetURL = (char *)malloc( sizeof( char ) * 512 );
- strcpy( globalPM->presetURL, projectM_data );
-
-
- projectM_init( globalPM );
-
- projectM_resetGL( globalPM, wvw, wvh );
-
- title_timer = SDL_AddTimer(500, (SDL_NewTimerCallback) get_xmms_title, NULL);
-
- /** Initialise the thread */
-
- SDL_SemTryWait(sem);
- while ( SDL_SemTryWait(sem) ) {
- projectMEvent evt;
- projectMKeycode key;
- projectMModifier mod;
-
- /** Process SDL events */
- SDL_Event event;
- while ( SDL_PollEvent( &event ) ) {
- /** Translate into projectM codes and process */
- evt = sdl2pmEvent( event );
- key = sdl2pmKeycode( event.key.keysym.sym );
- mod = sdl2pmModifier( event.key.keysym.mod );
-
- if ( evt == PROJECTM_KEYDOWN ) {
-
-
- if(key == SDLK_f)
- {
- int w, h;
- if (fullscreen == 0) {
- w = fvw;
- h = fvh;
- } else {
- w = wvw;
- h = wvh;
- }
- globalPM->fullscreen = fullscreen ^= 1;
- resize_display(w, h, fullscreen);
- projectM_resetGL( globalPM, w, h );
- }
- else key_handler(globalPM,evt,key,mod);
-
- }
- else if ( evt == PROJECTM_VIDEORESIZE )
- {
- wvw=event.resize.w;
- wvh=event.resize.h;
- resize_display(wvw, wvh, 0);
- projectM_resetGL( globalPM, wvw, wvh );
-
- }
- else if ( evt == PROJECTM_VIDEOQUIT ) {
-
- (void) g_idle_add ((GSourceFunc) disable_projectm, NULL);
- /* if(quit_timer == NULL)
- quit_timer = SDL_AddTimer(500, disable_projectm, NULL);*/
- }
-
- }
-
-
- /** Render the new frame */
-
- renderFrame( globalPM );
-
- SDL_GL_SwapBuffers();
- }
-
-
-
- printf("Worker thread: Exiting\n");
- if(title_timer) SDL_RemoveTimer(title_timer);
- g_free(globalPM->title);
- free(globalPM->presetURL);
- free(globalPM->fontURL);
- free(globalPM);
- close_display();
-}
-
-static void projectM_xmms_init(void)
-{
-
- printf("projectM plugin: Initializing\n");
-
- SDL_EnableUNICODE(1);
-
- mutex = SDL_CreateMutex();
-
- sem = SDL_CreateSemaphore(1);
-
- worker_thread = SDL_CreateThread ((void *) worker_func, NULL);
-
-}
-
-
-
-static void projectM_cleanup(void)
-{
-
- SDL_SemPost(sem);
- SDL_WaitThread(worker_thread, NULL);
-
- SDL_DestroySemaphore(sem);
- printf("Destroy Semaphore\n");
- SDL_DestroyMutex(mutex);
- printf("Destroy Mutex\n");
-
- printf("projectM plugin: Cleanup completed\n");
-}
-static void projectM_about(void)
-{
- printf("projectM plugin: About\n");
-}
-static void projectM_configure(void)
-{
- printf("projectM plugin: Configure\n");
-}
-static void projectM_playback_start(void)
-{
- printf("projectM plugin: Playback starting\n");
-}
-static void projectM_playback_stop(void)
-{
- printf("projectM plugin: Playback stopping\n");
-}
-static void projectM_render_pcm(gint16 pcm_data[2][512])
-{
-
- if (0 < SDL_SemValue(sem)) return;
- SDL_mutexP(mutex);
-
- addPCM16Data(pcm_data,512);
-
- SDL_mutexV(mutex);
-
-}
-
-static void projectM_render_freq(gint16 freq_data[2][256])
-{
- printf("NO GOOD\n");
- }
-
-
-void read_config()
-{
-
- int n;
-
- char num[80];
- FILE *in;
- FILE *out;
-
- char* home;
- char projectM_home[PATH_MAX];
- char projectM_config[PATH_MAX];
-
- strcpy(projectM_config, PROJECTM_DATADIR);
- strcpy(projectM_config+strlen(PROJECTM_DATADIR), CONFIG_FILE);
- projectM_config[strlen(PROJECTM_DATADIR)+strlen(CONFIG_FILE)]='\0';
-
- home=getenv("HOME");
- strcpy(projectM_home, home);
- strcpy(projectM_home+strlen(home), "/.projectM/config");
- projectM_home[strlen(home)+strlen("/.projectM/config")]='\0';
-
-
- if ((in = fopen(projectM_home, "r")) != 0)
- {
- printf("reading ~/.projectM/config \n");
- }
- else
- {
- printf("trying to create ~/.projectM/config \n");
-
- strcpy(projectM_home, home);
- strcpy(projectM_home+strlen(home), "/.projectM");
- projectM_home[strlen(home)+strlen("/.projectM")]='\0';
- mkdir(projectM_home,0755);
-
- strcpy(projectM_home, home);
- strcpy(projectM_home+strlen(home), "/.projectM/config");
- projectM_home[strlen(home)+strlen("/.projectM/config")]='\0';
-
- if((out = fopen(projectM_home,"w"))!=0)
- {
-
- if ((in = fopen(projectM_config, "r")) != 0)
- {
-
- while(fgets(num,80,in)!=NULL)
- {
- fputs(num,out);
- }
- fclose(in);
- fclose(out);
-
-
- if ((in = fopen(projectM_home, "r")) != 0)
- { printf("created ~/.projectM/config successfully\n"); }
- else{printf("This shouldn't happen, using implementation defualts\n");return;}
- }
- else{printf("Cannot find projectM default config, using implementation defaults\n");return;}
- }
- else
- {
- printf("Cannot create ~/.projectM/config, using default config file\n");
- if ((in = fopen(projectM_config, "r")) != 0)
- { printf("Successfully opened default config file\n");}
- else{ printf("Using implementation defaults, your system is really messed up, I'm suprised we even got this far\n"); return;}
-
- }
-
- }
-
-
-
- fgets(num, 80, in); fgets(num, 80, in); fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &texsize);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &gx);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &gy);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &wvw);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &wvh);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &fvw);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &fvh);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &fps);
-
- fgets(num, 80, in);
- if(fgets(num, 80, in) != NULL) sscanf (num, "%d", &fullscreen);
- /*
- fgets(num, 80, in);
- fgets(num, 80, in);
-
- n=0;
- while (num[n]!=' ' && num[n]!='\n' && n < 80 && num[n]!=EOF)
- {
- disp[n]=num[n];
- n++;
- }
- disp[n]=0;
-
-
- // sprintf(disp,"%s",num );
- setenv("DISPLAY",disp,1);
- printf("%s %d\n", disp,strlen(disp));
- setenv("LD_PRELOAD", "/usr/lib/tls/libGL.so.1.0.4496", 1);
- */
- fclose(in);
-
-}
diff --git a/src/projectm/sdltoprojectM.h b/src/projectm/sdltoprojectM.h
deleted file mode 100755
index d23398c..0000000
--- a/src/projectm/sdltoprojectM.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * $Id: sdltoprojectM.h,v 1.1.1.1 2005/12/23 18:42:00 psperl Exp $
- *
- * Translates SDL -> projectM variables
- *
- * $Log: sdltoprojectM.h,v $
- * Revision 1.1.1.1 2005/12/23 18:42:00 psperl
- * Initial Import
- *
- * Revision 1.1 2004/10/08 00:35:28 cvs
- * Moved and imported
- *
- * Revision 1.1.1.1 2004/10/04 12:56:00 cvs
- * Imported
- *
- */
-
-#ifndef _SDLTOPROJECTM_H
-#define _SDLTOPROJECTM_H
-
-#include "projectM/event.h"
-#ifdef WIN32
-#include <SDL.h>
-#else
-#include <SDL/SDL.h>
-#endif
-
-projectMEvent sdl2pmEvent( SDL_Event event ) { \
-
- switch ( event.type ) { \
- case SDL_VIDEORESIZE:
- return PROJECTM_VIDEORESIZE; \
- case SDL_KEYUP: \
- return PROJECTM_KEYUP; \
- case SDL_KEYDOWN: \
- return PROJECTM_KEYDOWN; \
- case SDL_QUIT: \
- return PROJECTM_VIDEOQUIT; \
- default:
- return PROJECTM_KEYUP; \
- } \
- } \
-
-projectMKeycode sdl2pmKeycode( SDLKey keysym ) { \
- switch ( keysym ) { \
- case SDLK_F1: \
- return PROJECTM_K_F1; \
- case SDLK_F2: \
- return PROJECTM_K_F2; \
- case SDLK_F3: \
- return PROJECTM_K_F3; \
- case SDLK_F4: \
- return PROJECTM_K_F4; \
- case SDLK_F5: \
- return PROJECTM_K_F5; \
- case SDLK_F6: \
- return PROJECTM_K_F6; \
- case SDLK_F7: \
- return PROJECTM_K_F7; \
- case SDLK_F8: \
- return PROJECTM_K_F8; \
- case SDLK_F9: \
- return PROJECTM_K_F9; \
- case SDLK_F10: \
- return PROJECTM_K_F10; \
- case SDLK_F11: \
- return PROJECTM_K_F11; \
- case SDLK_F12: \
- return PROJECTM_K_F12; \
- case SDLK_ESCAPE: \
- return PROJECTM_K_ESCAPE;
- case SDLK_a:
- return PROJECTM_K_a;
- case SDLK_b:
- return PROJECTM_K_b;
- case SDLK_c:
- return PROJECTM_K_c;
- case SDLK_d:
- return PROJECTM_K_d;
- case SDLK_e:
- return PROJECTM_K_e;
- case SDLK_f:
- return PROJECTM_K_f;
- case SDLK_g:
- return PROJECTM_K_g;
- case SDLK_h:
- return PROJECTM_K_h;
- case SDLK_i:
- return PROJECTM_K_i;
- case SDLK_j:
- return PROJECTM_K_j;
- case SDLK_k:
- return PROJECTM_K_k;
- case SDLK_l:
- return PROJECTM_K_l;
- case SDLK_m:
- return PROJECTM_K_m;
- case SDLK_n:
- return PROJECTM_K_n;
- case SDLK_o:
- return PROJECTM_K_o;
- case SDLK_p:
- return PROJECTM_K_p;
- case SDLK_q:
- return PROJECTM_K_q;
- case SDLK_r:
- return PROJECTM_K_r;
- case SDLK_s:
- return PROJECTM_K_s;
- case SDLK_t:
- return PROJECTM_K_t;
- case SDLK_u:
- return PROJECTM_K_u;
- case SDLK_v:
- return PROJECTM_K_v;
- case SDLK_w:
- return PROJECTM_K_w;
- case SDLK_x:
- return PROJECTM_K_x;
- case SDLK_y:
- return PROJECTM_K_y;
- case SDLK_z:
- return PROJECTM_K_z;
- case SDLK_UP:
- return PROJECTM_K_UP;
- case SDLK_RETURN:
- return PROJECTM_K_RETURN;
- case SDLK_RIGHT:
- return PROJECTM_K_RIGHT;
- case SDLK_LEFT:
- return PROJECTM_K_LEFT;
- case SDLK_DOWN:
- return PROJECTM_K_DOWN;
- case SDLK_PAGEUP:
- return PROJECTM_K_PAGEUP;
- case SDLK_PAGEDOWN:
- return PROJECTM_K_PAGEDOWN;
-
- default: \
- return PROJECTM_K_NONE; \
- } \
- } \
-
-projectMModifier sdl2pmModifier( SDLMod mod ) { \
- return PROJECTM_KMOD_LSHIFT; \
- } \
-
-#endif /** _SDLTOPROJECTM_H */
diff --git a/src/projectm/video_init.c b/src/projectm/video_init.c
deleted file mode 100644
index aafe5a9..0000000
--- a/src/projectm/video_init.c
+++ /dev/null
@@ -1,198 +0,0 @@
-//video_init.c - SDL/Opengl Windowing Creation/Resizing Functions
-//
-//by Peter Sperl
-//
-//Opens an SDL Window and creates an OpenGL session
-//also able to handle resizing and fullscreening of windows
-//just call init_display again with differant variables
-
-#include <SDL/SDL.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
-
-extern SDL_Surface *screen;
-extern int texsize;
-void setup_opengl( int w, int h );
-
-void close_display() {
- SDL_Quit();
-}
-
-void resize_display(int w, int h, int f) {
- int flags;
- if (f) flags = SDL_OPENGL|SDL_HWSURFACE|SDL_FULLSCREEN;
- else flags = SDL_OPENGL|SDL_HWSURFACE|SDL_RESIZABLE;
-// SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
- screen = SDL_SetVideoMode( w, h, 0, flags ) ;
- if(screen == 0 ) {
- fprintf( stderr, "Video mode set failed: %s\n", SDL_GetError( ) );
- return;
- }
- setup_opengl(w,h);
- SDL_ShowCursor(f ? SDL_DISABLE : SDL_ENABLE);
-}
-
-//init_display
-//
-//Sets screen to new width and height (w,h)
-//Also switches between fullscreen and windowed
-//with the boolean f (fullscreen)
-void init_display(int w, int h, int f)
-{
-
- /* Information about the current video settings. */
- const SDL_VideoInfo* info = NULL;
- int bpp = 0;
- /* Flags we will pass into SDL_SetVideoMode. */
- int flags = 0;
- /* First, initialize SDL's video subsystem. */
- if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_TIMER ) < 0 ) {
- /* Failed, exit. */
- fprintf( stderr, "Video initialization failed: %s\n",
- SDL_GetError( ) );
- //projectM_vtable.disable_plugin (&projectM_vtable);
- return;
-
- }
- /* Let's get some video information. */
- info = SDL_GetVideoInfo( );
- if( !info ) {
- /* This should probably never happen. */
- fprintf( stderr, "Video query failed: %s\n",
- SDL_GetError( ) );
- // projectM_vtable.disable_plugin (&projectM_vtable);
- return;
- }
-
- bpp = info->vfmt->BitsPerPixel;
-
- //SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
- //SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
- //SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
-
- // SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 8 );
- // SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 8 );
- // SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 8 );
- SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );
- SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
- SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
-
- if (f==0)
- flags = SDL_OPENGL|SDL_HWSURFACE|SDL_RESIZABLE;
- else flags = SDL_OPENGL|SDL_HWSURFACE|SDL_FULLSCREEN;
-
- screen= SDL_SetVideoMode( w, h, bpp, flags ) ;
-
- if(screen == 0 ) {
- /*
- * This could happen for a variety of reasons,
- * including DISPLAY not being set, the specified
- * resolution not being available, etc.
- */
- fprintf( stderr, "Video mode set failed: %s\n",
- SDL_GetError( ) );
-
- // projectM_vtable.disable_plugin (&projectM_vtable);
- return;
-
- }
-
-
- // setup_opengl(w,h);
- //gluOrtho2D(0, w, 0, h);
-}
-
-
- void setup_opengl( int w, int h )
-{
-
- /* Our shading model--Gouraud (smooth). */
- glShadeModel( GL_SMOOTH);
- /* Culling. */
- // glCullFace( GL_BACK );
- // glFrontFace( GL_CCW );
- // glEnable( GL_CULL_FACE );
- /* Set the clear color. */
- glClearColor( 0, 0, 0, 0 );
- /* Setup our viewport. */
- glViewport( 0, 0, w, h );
- /*
- * Change to the projection matrix and set
- * our viewing volume.
- */
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
-
- // gluOrtho2D(0.0, (GLfloat) width, 0.0, (GLfloat) height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- // glFrustum(0.0, height, 0.0,width,10,40);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
-glDrawBuffer(GL_BACK);
- glReadBuffer(GL_BACK);
- glEnable(GL_BLEND);
-
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- // glBlendFunc(GL_SRC_ALPHA, GL_ONE);
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_POINT_SMOOTH);
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- glClear(GL_COLOR_BUFFER_BIT);
-
- // glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGB,0,0,texsize,texsize,0);
- //glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,texsize,texsize);
- glLineStipple(2, 0xAAAA);
-
-
-}
-#if 0
-void CreateRenderTarget(int texsize,int *RenderTargetTextureID, int *RenderTarget )
-{
- /* Create the texture that will be bound to the render target */
- glGenTextures(1, RenderTargetTextureID);
- glBindTexture(GL_TEXTURE_2D, *RenderTargetTextureID);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-
- /* Create the render target */
- *RenderTarget = SDL_GL_CreateRenderTarget(texsize,texsize, NULL);
- if ( *RenderTarget ) {
-
- int value;
- //printf("Created render target:\n");
- SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_RED_SIZE, &value );
- // printf( "SDL_GL_RED_SIZE: %d\n", value);
- SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_GREEN_SIZE, &value );
- // printf( "SDL_GL_GREEN_SIZE: %d\n", value);
- SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_BLUE_SIZE, &value );
- // printf( "SDL_GL_BLUE_SIZE: %d\n", value);
- SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_ALPHA_SIZE, &value );
- // printf( "SDL_GL_ALPHA_SIZE: %d\n", value);
- SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_DEPTH_SIZE, &value );
- // printf( "SDL_GL_DEPTH_SIZE: %d\n", value );
-
- SDL_GL_BindRenderTarget(*RenderTarget, *RenderTargetTextureID);
-
- } else {
- /* We can fake a render target in this demo by rendering to the
- * screen and copying to a texture before we do normal rendering.
- */
- printf("Failed to create render target, using screen buffer\n");
-
- glBindTexture(GL_TEXTURE_2D, *RenderTargetTextureID);
- glTexImage2D(GL_TEXTURE_2D,
- 0,
- GL_RGB,
- texsize, texsize,
- 0,
- GL_RGB,
- GL_UNSIGNED_BYTE,
- NULL);
- }
-
-
-}
-#endif
diff --git a/src/projectm/video_init.h b/src/projectm/video_init.h
deleted file mode 100644
index aea8703..0000000
--- a/src/projectm/video_init.h
+++ /dev/null
@@ -1,5 +0,0 @@
- void setup_opengl( int w, int h );
- void init_display( int w, int h, int fullscreen );
-
-
-void CreateRenderTarget(int texsize,int *RenderTargetTextureID, int *RenderTarget);
diff --git a/src/pulse_audio/Makefile b/src/pulse_audio/Makefile
index da5ed2b..b6b5a11 100644
--- a/src/pulse_audio/Makefile
+++ b/src/pulse_audio/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += -lpulse ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += -lpulse ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/pulse_audio/pulse_audio.c b/src/pulse_audio/pulse_audio.c
index 31ff27f..b39cc31 100644
--- a/src/pulse_audio/pulse_audio.c
+++ b/src/pulse_audio/pulse_audio.c
@@ -47,10 +47,10 @@ static int volume_valid = 0;
static int do_trigger = 0;
static int64_t written;
+static int flush_time;
static int bytes_per_second;
static int connected = 0;
-static int cached_time = 0;
static pa_time_event *volume_time_event = NULL;
@@ -69,18 +69,6 @@ do { \
if (!connected) return retval; \
} while (0);
-static const gchar * get_song_name (void)
-{
- if (! aud_drct_get_playing ()) /* just probing? */
- return "";
-
- gchar * title = aud_drct_get_title ();
- static gchar t[512];
- snprintf (t, sizeof (t), "%s", title);
- g_free (title);
- return t;
-}
-
static void info_cb(struct pa_context *c, const struct pa_sink_input_info *i, int is_last, void *userdata) {
assert(c);
@@ -175,33 +163,27 @@ static void stream_latency_update_cb(pa_stream *s, void *userdata) {
pa_threaded_mainloop_signal(mainloop, 0);
}
-static void pulse_get_volume(int *l, int *r) {
- pa_cvolume v;
- int b = 0;
-
- *l = *r = 100;
+static void pulse_get_volume (int * l, int * r)
+{
+ * l = * r = 0;
- if (connected) {
- pa_threaded_mainloop_lock(mainloop);
- CHECK_DEAD_GOTO(fail, 1);
+ if (! connected || ! volume_valid)
+ return;
- v = volume;
- b = volume_valid;
+ pa_threaded_mainloop_lock (mainloop);
+ CHECK_DEAD_GOTO (fail, 1);
- fail:
- pa_threaded_mainloop_unlock(mainloop);
- } else {
- v = volume;
- b = volume_valid;
+ if (volume.channels == 2)
+ {
+ * l = (volume.values[0] * 100 + PA_VOLUME_NORM / 2) / PA_VOLUME_NORM;
+ * r = (volume.values[1] * 100 + PA_VOLUME_NORM / 2) / PA_VOLUME_NORM;
}
+ else
+ * l = * r = (pa_cvolume_avg (& volume) * 100 + PA_VOLUME_NORM / 2) /
+ PA_VOLUME_NORM;
- if (b) {
- if (v.channels == 2) {
- *l = (int) ((v.values[0]*100)/PA_VOLUME_NORM);
- *r = (int) ((v.values[1]*100)/PA_VOLUME_NORM);
- } else
- *l = *r = (int) ((pa_cvolume_avg(&v)*100)/PA_VOLUME_NORM);
- }
+fail:
+ pa_threaded_mainloop_unlock (mainloop);
}
static void volume_time_cb(pa_mainloop_api *api, pa_time_event *e, const struct timeval *tv, void *userdata) {
@@ -220,21 +202,22 @@ static void volume_time_cb(pa_mainloop_api *api, pa_time_event *e, const struct
static void pulse_set_volume(int l, int r) {
- if (connected) {
- pa_threaded_mainloop_lock(mainloop);
- CHECK_DEAD_GOTO(fail, 1);
- }
+ if (! connected)
+ return;
+
+ pa_threaded_mainloop_lock (mainloop);
+ CHECK_DEAD_GOTO (fail, 1);
/* sanitize output volumes. */
l = CLAMP(l, 0, 100);
r = CLAMP(r, 0, 100);
if (!volume_valid || volume.channels != 1) {
- volume.values[0] = ((pa_volume_t) l * PA_VOLUME_NORM)/100;
- volume.values[1] = ((pa_volume_t) r * PA_VOLUME_NORM)/100;
+ volume.values[0] = ((pa_volume_t) l * PA_VOLUME_NORM + 50) / 100;
+ volume.values[1] = ((pa_volume_t) r * PA_VOLUME_NORM + 50) / 100;
volume.channels = 2;
} else {
- volume.values[0] = ((pa_volume_t) l * PA_VOLUME_NORM)/100;
+ volume.values[0] = ((pa_volume_t) MAX (l, r) * PA_VOLUME_NORM + 50) / 100;
volume.channels = 1;
}
@@ -251,7 +234,8 @@ fail:
pa_threaded_mainloop_unlock(mainloop);
}
-static void pulse_pause(short b) {
+static void pulse_pause (gboolean b)
+{
pa_operation *o = NULL;
int success = 0;
@@ -346,7 +330,7 @@ static void pulse_set_written_time (int time)
pa_threaded_mainloop_lock (mainloop);
written = time * (int64_t) bytes_per_second / 1000;
- pa_stream_set_name (stream, get_song_name (), stream_success_cb, NULL);
+ flush_time = time;
pa_threaded_mainloop_unlock (mainloop);
}
@@ -354,40 +338,24 @@ static void pulse_set_written_time (int time)
static int pulse_get_output_time (void)
{
int time = 0;
- const pa_timing_info * timing;
- struct timeval now;
CHECK_CONNECTED(0);
pa_threaded_mainloop_lock(mainloop);
- if ((timing = pa_stream_get_timing_info (stream)) == NULL)
- goto fail;
-
- gettimeofday (& now, NULL);
+ time = written * (int64_t) 1000 / bytes_per_second;
- time = (int) ((written - (timing->write_index - timing->read_index)) *
- (int64_t) 1000 / bytes_per_second) - (int) (timing->transport_usec / 1000)
- - (int) (timing->sink_usec / 1000) + (int) ((now.tv_sec -
- timing->timestamp.tv_sec) * 1000) + (int) ((now.tv_usec -
- timing->timestamp.tv_usec) / 1000);
+ pa_usec_t usec;
+ int neg;
+ if (pa_stream_get_latency (stream, & usec, & neg) == PA_OK)
+ time -= usec / 1000;
-#ifdef PA_CHECK_VERSION
-#if PA_CHECK_VERSION (0, 9, 11)
- if (pa_stream_is_corked(stream))
- {
- int delta = time - cached_time;
- if (delta > 0 && delta < 2000)
- time = cached_time;
- else
- cached_time = time;
- }
- else
-#endif
-#endif
- cached_time = time;
+ /* fix for AUDPLUG-308: pa_stream_get_latency() still returns positive even
+ * immediately after a flush; fix the result so that we don't return less
+ * than the flush time */
+ if (time < flush_time)
+ time = flush_time;
-fail:
pa_threaded_mainloop_unlock(mainloop);
return time;
@@ -432,6 +400,7 @@ static void pulse_flush(int time) {
CHECK_DEAD_GOTO(fail, 1);
written = time * (int64_t) bytes_per_second / 1000;
+ flush_time = time;
if (!(o = pa_stream_flush(stream, stream_success_cb, &success))) {
AUDDBG("pa_stream_flush() failed: %s", pa_strerror(pa_context_errno(context)));
@@ -513,6 +482,7 @@ static void pulse_close(void)
}
volume_time_event = NULL;
+ volume_valid = 0;
}
static int pulse_open(gint fmt, int rate, int nch) {
@@ -600,7 +570,7 @@ static int pulse_open(gint fmt, int rate, int nch) {
goto unlock_and_fail;
}
- if (!(stream = pa_stream_new(context, get_song_name(), &ss, NULL))) {
+ if (!(stream = pa_stream_new(context, "Audacious", &ss, NULL))) {
ERROR ("Failed to create stream: %s", pa_strerror(pa_context_errno(context)));
goto unlock_and_fail;
}
@@ -661,6 +631,7 @@ static int pulse_open(gint fmt, int rate, int nch) {
do_trigger = 0;
written = 0;
+ flush_time = 0;
bytes_per_second = FMT_SIZEOF (fmt) * nch * rate;
connected = 1;
volume_time_event = NULL;
@@ -683,20 +654,20 @@ fail:
return FALSE;
}
-static OutputPluginInitStatus pulse_init (void)
+static gboolean pulse_init (void)
{
if (! pulse_open (FMT_S16_NE, 44100, 2))
- return OUTPUT_PLUGIN_INIT_FAIL;
+ return FALSE;
pulse_close ();
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
+ return TRUE;
}
static void pulse_about(void) {
static GtkWidget *dialog;
audgui_simple_message(& dialog, GTK_MESSAGE_INFO,
_("About Audacious PulseAudio Output Plugin"),
- _("Audacious PulseAudio Output Plugin\n\n "
+ "Audacious PulseAudio Output Plugin\n\n "
"This program is free software; you can redistribute it and/or modify\n"
"it under the terms of the GNU General Public License as published by\n"
"the Free Software Foundation; either version 2 of the License, or\n"
@@ -710,11 +681,12 @@ static void pulse_about(void) {
"You should have received a copy of the GNU General Public License\n"
"along with this program; if not, write to the Free Software\n"
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
- "USA."));
+ "USA.");
}
-static OutputPlugin pulse_op = {
- .description = "PulseAudio Output Plugin",
+AUD_OUTPUT_PLUGIN
+(
+ .name = "PulseAudio",
.probe_priority = 8,
.init = pulse_init,
.about = pulse_about,
@@ -730,8 +702,4 @@ static OutputPlugin pulse_op = {
.output_time = pulse_get_output_time,
.written_time = pulse_get_written_time,
.set_written_time = pulse_set_written_time,
-};
-
-OutputPlugin *pulse_oplist[] = { &pulse_op, NULL };
-
-SIMPLE_OUTPUT_PLUGIN(pulser, pulse_oplist);
+)
diff --git a/src/resample/plugin.c b/src/resample/plugin.c
index e2772b4..e662dfd 100644
--- a/src/resample/plugin.c
+++ b/src/resample/plugin.c
@@ -19,8 +19,9 @@
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -28,55 +29,66 @@
#include "config.h"
#include "resample.h"
-int common_rates[] = {8000, 16000, 22050, 44100, 48000, 96000, 192000};
-int n_common_rates = sizeof common_rates / sizeof common_rates[0];
-int converted_rates[] = {48000, 48000, 44100, 44100, 48000, 96000, 96000};
-int fallback_rate = 44100;
-int method = SRC_LINEAR;
+const int common_rates[] = {8000, 16000, 22050, 44100, 48000, 96000, 192000};
+const int n_common_rates = G_N_ELEMENTS (common_rates);
+
+int converted_rates[G_N_ELEMENTS (common_rates)];
+int fallback_rate;
+int method;
+
+static GtkWidget * about_window = NULL;
+static GtkWidget * config_window = NULL;
+
+static const gchar * const resample_defaults[] = {
+ "8000", "48000",
+ "16000", "48000",
+ "22050", "44100",
+ "44100", "44100",
+ "48000", "48000",
+ "96000", "96000",
+ "192000", "96000",
+ "fallback_rate", "44100",
+ "method", "4", /* SRC_LINEAR */
+ NULL};
void resample_config_load (void)
{
- mcs_handle_t * database = aud_cfg_db_open ();
- char scratch[16];
- int count;
+ aud_config_set_defaults ("resample", resample_defaults);
- for (count = 0; count < n_common_rates; count ++)
+ for (int count = 0; count < n_common_rates; count ++)
{
+ char scratch[16];
snprintf (scratch, sizeof scratch, "%d", common_rates[count]);
- aud_cfg_db_get_int (database, "resample", scratch,
- & converted_rates[count]);
+ converted_rates[count] = aud_get_int ("resample", scratch);
}
- aud_cfg_db_get_int (database, "resample", "method", & method);
- aud_cfg_db_get_int (database, "resample", "fallback_rate", & fallback_rate);
-
- aud_cfg_db_close (database);
+ fallback_rate = aud_get_int ("resample", "fallback_rate");
+ method = aud_get_int ("resample", "method");
}
void resample_config_save (void)
{
- mcs_handle_t * database = aud_cfg_db_open ();
- char scratch[16];
- int count;
+ if (about_window != NULL)
+ gtk_widget_destroy (about_window);
+ if (config_window != NULL)
+ gtk_widget_destroy (config_window);
- for (count = 0; count < n_common_rates; count ++)
+ for (int count = 0; count < n_common_rates; count ++)
{
+ char scratch[16];
snprintf (scratch, sizeof scratch, "%d", common_rates[count]);
- aud_cfg_db_set_int (database, "resample", scratch, converted_rates[count]);
+ aud_set_int ("resample", scratch, converted_rates[count]);
}
- aud_cfg_db_set_int (database, "resample", "method", method);
- aud_cfg_db_set_int (database, "resample", "fallback_rate", fallback_rate);
-
- aud_cfg_db_close (database);
+ aud_set_int ("resample", "fallback_rate", fallback_rate);
+ aud_set_int ("resample", "method", method);
}
static void resample_about (void)
{
- static GtkWidget * window = NULL;
-
- audgui_simple_message (& window, GTK_MESSAGE_INFO, _("About Sample Rate "
- "Converter Plugin"), "Sample Rate Converter Plugin for Audacious\n"
+ audgui_simple_message (& about_window, GTK_MESSAGE_INFO, _("About Sample "
+ "Rate Converter Plugin"),
+ "Sample Rate Converter Plugin for Audacious\n"
"Copyright 2010 John Lindgren\n\n"
"Redistribution and use in source and binary forms, with or without "
"modification, are permitted provided that the following conditions are "
@@ -106,10 +118,10 @@ static GtkWidget * make_method_list (void)
int count;
const char * name;
- GtkWidget * list = gtk_combo_box_new_text ();
+ GtkWidget * list = gtk_combo_box_text_new ();
for (count = 0; (name = src_get_name (count)) != NULL; count ++)
- gtk_combo_box_append_text ((GtkComboBox *) list, name);
+ gtk_combo_box_text_append_text ((GtkComboBoxText *) list, name);
gtk_combo_box_set_active ((GtkComboBox *) list, method);
g_signal_connect (list, "changed", (GCallback) list_changed, & method);
@@ -119,26 +131,24 @@ static GtkWidget * make_method_list (void)
static void resample_configure (void)
{
- static GtkWidget * window = NULL;
-
- if (window == NULL)
+ if (config_window == NULL)
{
GtkWidget * vbox, * hbox, * button;
char scratch[16];
int count;
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint ((GtkWindow *) window,
+ config_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint ((GtkWindow *) config_window,
GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_window_set_resizable ((GtkWindow *) window, FALSE);
- gtk_window_set_title ((GtkWindow *) window, _("Sample Rate Converter "
- "Preferences"));
- gtk_container_set_border_width ((GtkContainer *) window, 6);
- g_signal_connect (window, "destroy", (GCallback) gtk_widget_destroyed,
- & window);
+ gtk_window_set_resizable ((GtkWindow *) config_window, FALSE);
+ gtk_window_set_title ((GtkWindow *) config_window, _("Sample Rate "
+ "Converter Preferences"));
+ gtk_container_set_border_width ((GtkContainer *) config_window, 6);
+ g_signal_connect (config_window, "destroy", (GCallback)
+ gtk_widget_destroyed, & config_window);
vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_add ((GtkContainer *) window, vbox);
+ gtk_container_add ((GtkContainer *) config_window, vbox);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
@@ -188,26 +198,22 @@ static void resample_configure (void)
button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0);
-#if GTK_CHECK_VERSION (2, 18, 0)
gtk_widget_set_can_default (button, TRUE);
-#else
- GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
-#endif
gtk_widget_grab_default (button);
g_signal_connect_swapped (button, "clicked", (GCallback)
- gtk_widget_destroy, window);
+ gtk_widget_destroy, config_window);
- audgui_destroy_on_escape (window);
+ audgui_destroy_on_escape (config_window);
gtk_widget_show_all (vbox);
}
- gtk_window_present ((GtkWindow *) window);
+ gtk_window_present ((GtkWindow *) config_window);
}
-EffectPlugin resample_plugin =
-{
- .description = "Sample Rate Converter",
+AUD_EFFECT_PLUGIN
+(
+ .name = "Sample Rate Converter",
.init = resample_init,
.cleanup = resample_cleanup,
.about = resample_about,
@@ -220,8 +226,4 @@ EffectPlugin resample_plugin =
.output_to_decoder_time = resample_output_to_decoder_time,
.order = 2, /* must be before crossfade */
-};
-
-EffectPlugin * resample_list[] = {& resample_plugin, NULL};
-
-SIMPLE_EFFECT_PLUGIN (resample, resample_list)
+)
diff --git a/src/resample/resample.c b/src/resample/resample.c
index d8ad979..06d0603 100644
--- a/src/resample/resample.c
+++ b/src/resample/resample.c
@@ -27,9 +27,10 @@ static double ratio;
static float * buffer = NULL;
static int buffer_samples = 0;
-void resample_init (void)
+int resample_init (void)
{
resample_config_load ();
+ return 1;
}
void resample_cleanup (void)
@@ -65,13 +66,13 @@ void resample_start (int * channels, int * rate)
break;
}
}
-
+
if (new_rate == * rate)
return;
if ((state = src_new (method, * channels, & error)) == NULL)
{
- ERROR (error);
+ RESAMPLE_ERROR (error);
return;
}
@@ -84,7 +85,7 @@ void do_resample (float * * data, int * samples, char finish)
{
SRC_DATA d;
int error;
-
+
if (state == NULL || ! * samples)
return;
@@ -93,20 +94,20 @@ void do_resample (float * * data, int * samples, char finish)
buffer_samples = (int) (* samples * ratio) + 256;
buffer = realloc (buffer, sizeof (float) * buffer_samples);
}
-
+
d.data_in = * data;
d.input_frames = * samples / stored_channels;
d.data_out = buffer;
d.output_frames = buffer_samples / stored_channels;
d.src_ratio = ratio;
d.end_of_input = finish;
-
+
if ((error = src_process (state, & d)))
{
- ERROR (error);
+ RESAMPLE_ERROR (error);
return;
}
-
+
* data = buffer;
* samples = stored_channels * d.output_frames_gen;
}
@@ -121,7 +122,7 @@ void resample_flush (void)
int error;
if (state != NULL && (error = src_reset (state)))
- ERROR (error);
+ RESAMPLE_ERROR (error);
}
void resample_finish (float * * data, int * samples)
diff --git a/src/resample/resample.h b/src/resample/resample.h
index 644fca2..c7ca47f 100644
--- a/src/resample/resample.h
+++ b/src/resample/resample.h
@@ -21,10 +21,11 @@
#include <samplerate.h>
-#define ERROR(e) fprintf (stderr, "resample: %s\n", src_strerror (e))
+#define RESAMPLE_ERROR(e) fprintf (stderr, "resample: %s\n", src_strerror (e))
+
+extern const int common_rates[];
+extern const int n_common_rates;
-extern int common_rates[];
-extern int n_common_rates;
extern int converted_rates[];
extern int fallback_rate;
extern int method;
@@ -32,7 +33,7 @@ extern int method;
void resample_config_load (void);
void resample_config_save (void);
-void resample_init (void);
+int resample_init (void);
void resample_cleanup (void);
void resample_start (int * channels, int * rate);
void resample_process (float * * data, int * samples);
diff --git a/src/roaraudio/KNOWN-ISSUES b/src/roaraudio/KNOWN-ISSUES
deleted file mode 100644
index 5fc2322..0000000
--- a/src/roaraudio/KNOWN-ISSUES
+++ /dev/null
@@ -1,6 +0,0 @@
-- volume is not retained across restarts:
- we could save our preferred volume as a preference.
-
-- in some instances, roaraudio may suspend itself and our connection is lost:
- we can send roar_noop() every so often to keep the connection and soundserver
- alive.
diff --git a/src/roaraudio/Makefile b/src/roaraudio/Makefile
deleted file mode 100644
index 01d29ac..0000000
--- a/src/roaraudio/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-PLUGIN = roar${PLUGIN_SUFFIX}
-
-SRCS = roar.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS} -std=gnu99
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${LIBROAR_CFLAGS} -I../..
-LIBS += ${LIBROAR_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/roaraudio/all.h b/src/roaraudio/all.h
deleted file mode 100644
index e7cbba5..0000000
--- a/src/roaraudio/all.h
+++ /dev/null
@@ -1,103 +0,0 @@
-//all.h:
-
-/*
- * Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008,
- * Daniel Duntemann <dauxx@dauxx.org> - 2009
- *
- * This file is part of the XMMS RoarAudio output plugin a part of RoarAudio,
- * a cross-platform sound system for both, home and professional use.
- * See README for details.
- *
- * This file is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3
- * as published by the Free Software Foundation.
- *
- * RoarAudio 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 software; see the file COPYING. If not, write to
- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef _ALL_H_
-#define _ALL_H_
-
-#include <config.h>
-
-#include <roaraudio.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <audacious/debug.h>
-#include <audacious/configdb.h>
-#include <audacious/playlist.h>
-#include <audacious/plugin.h>
-#include <audacious/i18n.h>
-
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-
-OutputPluginInitStatus aud_roar_init(void);
-
-void aud_roar_get_volume(int *l, int *r);
-void aud_roar_set_volume(int l, int r);
-void aud_roar_mixer_init(void);
-void aud_roar_mixer_init_vol(int l, int r);
-
-void aud_roar_drain(void);
-void aud_roar_write(void *ptr, int length);
-void aud_roar_close(void);
-void aud_roar_flush(int time);
-void aud_roar_pause(short p);
-int aud_roar_open(gint fmt, int rate, int nch);
-int aud_roar_get_output_time(void);
-int aud_roar_get_written_time(void);
-gboolean aud_roar_buffer_is_playing(void);
-gint aud_roar_buffer_get_size(void);
-void aud_roar_period_wait(void);
-
-int aud_roar_update_metadata(void);
-int aud_roar_chk_metadata(void);
-
-#define STATE_CONNECTED 1
-#define STATE_PLAYING 2
-#define STATE_NORECONNECT 4
-
-struct xmms_aud_roar_out
-{
- int state;
- char *server;
- struct roar_vio_calls vio;
- struct roar_connection con;
- struct roar_stream stream;
- long unsigned int written;
- long unsigned int bps;
- int pause;
- int rate;
- int nch;
- int bits;
- int codec;
- int mixer[2];
- gsize block_size;
- gint64 sampleoff;
- struct
- {
- int server_type;
- int port;
- int *proxy_type;
- char *proxy;
- char *player_name;
- } cfg;
-} g_inst;
-
-#endif
-
-//ll
diff --git a/src/roaraudio/roar.c b/src/roaraudio/roar.c
deleted file mode 100644
index 6c43c22..0000000
--- a/src/roaraudio/roar.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2010,
- * Daniel Duntemann <dauxx@dauxx.org> - 2009,
- * William Pitcock <nenolod@atheme.org> - 2010.
- *
- * This file is part of the Audacious RoarAudio output plugin a part of RoarAudio,
- * a cross-platform sound system for both, home and professional use.
- * See README for details.
- *
- * This file is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3
- * as published by the Free Software Foundation.
- *
- * RoarAudio 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 software; see the file COPYING. If not, write to
- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * NOTE: Do not spam with requests. You WILL get kicked out on Linux.
- */
-
-#include "all.h"
-
-OutputPlugin roar_op = {
- .description = "RoarAudio Output Plugin",
- .init = aud_roar_init,
- .cleanup = NULL,
- .get_volume = aud_roar_get_volume,
- .set_volume = aud_roar_set_volume,
- .open_audio = aud_roar_open,
- .write_audio = aud_roar_write,
- .close_audio = aud_roar_close,
- .flush = aud_roar_flush,
- .pause = aud_roar_pause,
- .output_time = aud_roar_get_output_time,
- .written_time = aud_roar_get_written_time,
- .buffer_playing = aud_roar_buffer_is_playing,
- .buffer_free = aud_roar_buffer_get_size,
-// .period_wait = aud_roar_period_wait,
-};
-
-OutputPlugin *roar_oplist[] = { &roar_op, NULL };
-
-SIMPLE_OUTPUT_PLUGIN(roaraudio, roar_oplist);
-OutputPluginInitStatus aud_roar_init(void)
-{
- mcs_handle_t *cfgfile;
-
- cfgfile = aud_cfg_db_open();
-
- g_inst.state = 0;
- g_inst.server = NULL;
- g_inst.mixer[0] = g_inst.mixer[1] = 100;
-
- aud_cfg_db_close(cfgfile);
-
- if (!(g_inst.state & STATE_CONNECTED))
- {
- if (roar_simple_connect(&(g_inst.con), NULL, "Audacious") == -1)
- return OUTPUT_PLUGIN_INIT_FAIL;
-
- g_inst.state |= STATE_CONNECTED;
- }
-
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
-}
-
-void aud_roar_write(void *ptr, int length)
-{
- int r;
-
- while (length)
- {
- if ((r = roar_vio_write(&(g_inst.vio), ptr, length >= g_inst.block_size ? g_inst.block_size : length)) != -1)
- {
- g_inst.written += r;
- ptr += r;
- length -= r;
- }
- else
- {
- return;
- }
- }
-}
-
-gboolean aud_roar_initialize_stream(struct roar_vio_calls *calls, struct roar_connection *con, struct roar_stream *stream, int rate, int nch, int bits, int codec, int dir)
-{
- struct roar_stream_info info;
-
- if (roar_vio_simple_new_stream_obj(&(g_inst.vio), &(g_inst.con), &(g_inst.stream), rate, nch, bits, codec, ROAR_DIR_PLAY) == -1)
- return FALSE;
-
- g_inst.bits = bits;
- g_inst.nch = nch;
- g_inst.rate = rate;
- g_inst.codec = codec;
- g_inst.written = 0;
- g_inst.pause = 0;
- g_inst.sampleoff = 0;
- g_inst.state |= STATE_PLAYING;
- g_inst.block_size = 0;
-
- if (roar_stream_get_info(&(g_inst.con), &(g_inst.stream), &info) != -1)
- {
- /* XXX: this is wrong. */
- g_inst.block_size = info.block_size * 2;
- AUDDBG("setting block size to %d\n", g_inst.block_size);
- }
-
- roar_stream_set_role(&(g_inst.con), &(g_inst.stream), ROAR_ROLE_MUSIC);
- aud_roar_set_volume(g_inst.mixer[0], g_inst.mixer[1]);
-
- return TRUE;
-}
-
-int aud_roar_open(gint fmt, int rate, int nch)
-{
- int codec = ROAR_CODEC_DEFAULT;
- int bits;
-
- bits = 16;
- switch (fmt)
- {
- case FMT_S8:
- bits = 8;
- codec = ROAR_CODEC_DEFAULT;
- break;
- case FMT_U8:
- bits = 8;
- codec = ROAR_CODEC_PCM_U_LE; // _LE, _BE, _PDP,... all the same for 8 bit output
- break;
- case FMT_U16_LE:
- codec = ROAR_CODEC_PCM_U_LE;
- break;
- case FMT_U16_BE:
- codec = ROAR_CODEC_PCM_U_BE;
- break;
- case FMT_S16_LE:
- codec = ROAR_CODEC_PCM_S_LE;
- break;
- case FMT_S16_BE:
- codec = ROAR_CODEC_PCM_S_BE;
- break;
-#if 0
-/* RoarAudio don't use this stupid 24bit-in-lower-part-of-32bit-int format */
- case FMT_U24_LE: /* stored in lower 3 bytes of 32-bit value, highest byte must be 0 */
- codec = ROAR_CODEC_PCM_U_LE;
- bits = 24;
- break;
- case FMT_U24_BE:
- codec = ROAR_CODEC_PCM_U_BE;
- bits = 24;
- break;
- case FMT_S24_LE:
- bits = 24;
- codec = ROAR_CODEC_PCM_S_LE;
- break;
- case FMT_S24_BE:
- bits = 24;
- codec = ROAR_CODEC_PCM_S_BE;
- break;
-#endif
- case FMT_U32_LE: /* highest byte must be 0 */
- codec = ROAR_CODEC_PCM_U_LE;
- bits = 32;
- break;
- case FMT_U32_BE:
- codec = ROAR_CODEC_PCM_U_BE;
- bits = 32;
- break;
- case FMT_S32_LE:
- bits = 32;
- codec = ROAR_CODEC_PCM_S_LE;
- break;
- case FMT_S32_BE:
- bits = 32;
- codec = ROAR_CODEC_PCM_S_BE;
- break;
- case FMT_FLOAT:
- default:
- return FALSE;
- break;
- }
-
- g_inst.bps = nch * rate * bits / 8;
-
- if (!aud_roar_initialize_stream(&(g_inst.vio), &(g_inst.con), &(g_inst.stream), rate, nch, bits, codec, ROAR_DIR_PLAY))
- return FALSE;
-
- aud_roar_update_metadata();
-
- return TRUE;
-}
-
-void aud_roar_close(void)
-{
- gint id;
-
- id = roar_stream_get_id(&(g_inst.stream));
- roar_kick(&(g_inst.con), ROAR_OT_STREAM, id);
- roar_vio_close(&(g_inst.vio));
-
- g_inst.state &= ~STATE_PLAYING;
- g_inst.written = 0;
-}
-
-void aud_roar_pause(short p)
-{
- if (p)
- roar_stream_set_flags(&(g_inst.con), &(g_inst.stream), ROAR_FLAG_PAUSE, ROAR_SET_FLAG);
- else
- roar_stream_set_flags(&(g_inst.con), &(g_inst.stream), ROAR_FLAG_PAUSE, ROAR_RESET_FLAG);
-
- g_inst.pause = p;
-}
-
-void aud_roar_flush(int time)
-{
- gint64 r = time;
-
- r *= g_inst.bps;
- r /= 1000;
-
- aud_roar_close();
- if (!aud_roar_initialize_stream(&(g_inst.vio), &(g_inst.con), &(g_inst.stream),
- g_inst.rate, g_inst.nch, g_inst.bits, g_inst.codec, ROAR_DIR_PLAY))
- return;
-
- g_inst.written = r;
- g_inst.sampleoff = ((time / 1000) * g_inst.rate) * g_inst.nch;
-}
-
-gint64 aud_roar_get_adjusted_sample_count(void)
-{
- gint id;
- gint64 samples;
-
- /* first update our stream record. */
- id = roar_stream_get_id(&(g_inst.stream));
- roar_get_stream(&(g_inst.con), &(g_inst.stream), id);
-
- /* calculate the time, given our sample count. */
- samples = g_inst.stream.pos;
- samples += g_inst.sampleoff;
-
- return samples;
-}
-
-int aud_roar_get_output_time(void)
-{
- gint64 samples;
-
- samples = aud_roar_get_adjusted_sample_count();
-
- return (samples * 1000) / (g_inst.rate * g_inst.nch);
-}
-
-int aud_roar_get_written_time(void)
-{
- gint64 r;
-
- if (!g_inst.bps)
- return 0;
-
- r = g_inst.written;
- r *= 1000; // sec -> msec
- r /= g_inst.bps;
-
- return r;
-}
-
-// META DATA:
-int aud_roar_update_metadata(void)
-{
- struct roar_meta meta;
- char empty = 0;
- const gchar *info = NULL;
- gint pos, playlist;
- const Tuple *songtuple;
- gint i;
- static struct { int ac_metatype, ra_metatype; } metamap[] = {
- {FIELD_ARTIST, ROAR_META_TYPE_ARTIST},
- {FIELD_TITLE, ROAR_META_TYPE_TITLE},
- {FIELD_ALBUM, ROAR_META_TYPE_ALBUM},
- {FIELD_COMMENT, ROAR_META_TYPE_COMMENT},
- {FIELD_GENRE, ROAR_META_TYPE_GENRE},
- {FIELD_PERFORMER, ROAR_META_TYPE_PERFORMER},
- {FIELD_COPYRIGHT, ROAR_META_TYPE_COPYRIGHT},
- {FIELD_DATE, ROAR_META_TYPE_DATE},
- };
-
- playlist = aud_playlist_get_active();
- pos = aud_playlist_get_position(playlist);
-
- meta.value = &empty;
- meta.key[0] = 0;
- meta.type = ROAR_META_TYPE_NONE;
-
- roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_CLEAR, &meta);
-
- info = aud_playlist_entry_get_filename(playlist, pos);
- if (info)
- {
- if (strncmp(info, "http://", 7) == 0)
- meta.type = ROAR_META_TYPE_FILEURL;
- else
- meta.type = ROAR_META_TYPE_FILENAME;
-
- meta.value = g_strdup(info);
- roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_SET, &meta);
-
- free(meta.value);
- }
-
- songtuple = aud_playlist_entry_get_tuple(playlist, pos, TRUE);
- if (songtuple)
- {
- for (i = 0; i < sizeof(metamap)/sizeof(*metamap); i++)
- {
- if ((info = tuple_get_string(songtuple, metamap[i].ac_metatype, NULL)))
- {
- meta.type = metamap[i].ra_metatype;
- meta.value = g_strdup(info);
-
- roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_SET, &meta);
-
- free(meta.value);
- }
- }
- }
-
- meta.value = &empty;
- meta.type = ROAR_META_TYPE_NONE;
- roar_stream_meta_set(&(g_inst.con), &(g_inst.stream), ROAR_META_MODE_FINALIZE, &meta);
-
- return 0;
-}
-
-// MIXER:
-void aud_roar_get_volume(int *l, int *r)
-{
- struct roar_mixer_settings mixer;
- int channels;
- float fs;
-
- if (!(g_inst.state & STATE_CONNECTED))
- return;
-
-#ifdef NOTYET
- if (roar_get_vol(&(g_inst.con), g_inst.stream.id, &mixer, &channels) == -1)
- return;
-
- if (channels == 1)
- mixer.mixer[1] = mixer.mixer[0];
-
- fs = (float)mixer.scale/100.;
-
- *l = g_inst.mixer[0] = mixer.mixer[0] / fs;
- *r = g_inst.mixer[1] = mixer.mixer[1] / fs;
-#else
- *l = g_inst.mixer[0];
- *r = g_inst.mixer[1];
-#endif
-}
-
-void aud_roar_set_volume(int l, int r)
-{
- struct roar_mixer_settings mixer;
-
- if (!(g_inst.state & STATE_CONNECTED))
- return;
-
- mixer.mixer[0] = g_inst.mixer[0] = l;
- mixer.mixer[1] = g_inst.mixer[1] = r;
-
- mixer.scale = 100;
-
- roar_set_vol(&(g_inst.con), g_inst.stream.id, &mixer, 2);
-}
-
-gboolean aud_roar_buffer_is_playing(void)
-{
- struct roar_stream_info info;
-
- if (!(g_inst.state & STATE_CONNECTED))
- return FALSE;
-
- if (!(g_inst.state & STATE_PLAYING))
- return FALSE;
-
- if (roar_stream_get_info(&(g_inst.con), &(g_inst.stream), &info) == -1)
- return FALSE;
-
- if (info.post_underruns)
- return FALSE;
-
- return TRUE;
-}
-
-/* this really sucks. */
-gboolean aud_roar_vio_is_writable(struct roar_vio_calls *vio)
-{
- struct roar_vio_select vios[1];
-
- ROAR_VIO_SELECT_SETVIO(&vios[0], vio, ROAR_VIO_SELECT_WRITE);
-
- return roar_vio_select(vios, 1, &(struct roar_vio_selecttv){ .nsec = 1 }, NULL);
-}
-
-gint aud_roar_buffer_get_size(void)
-{
- if (!(g_inst.state & STATE_CONNECTED))
- return 0;
-
- if (!(g_inst.state & STATE_PLAYING))
- return 0;
-
- if (!aud_roar_vio_is_writable(&(g_inst.vio)))
- return 0;
-
- if (g_inst.block_size != 0)
- return g_inst.block_size;
-
- return 0;
-}
-
-void aud_roar_period_wait(void)
-{
- struct roar_vio_select vios[1];
-
- if (!(g_inst.state & STATE_PLAYING))
- return;
-
- ROAR_VIO_SELECT_SETVIO(&vios[0], &(g_inst.vio), ROAR_VIO_SELECT_WRITE);
-
- roar_vio_select(vios, 1, NULL, NULL);
-}
diff --git a/src/rocklight/Makefile b/src/rocklight/Makefile
deleted file mode 100644
index 752c4dc..0000000
--- a/src/rocklight/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-PLUGIN = rocklight${PLUGIN_SUFFIX}
-
-SRCS = rocklight.c \
- sysled.c \
- b43led.c \
- thinklight.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/rocklight/b43led.c b/src/rocklight/b43led.c
deleted file mode 100644
index 2a87e13..0000000
--- a/src/rocklight/b43led.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Tony Vroon <chainsaw@gentoo.org>
- * Copyright (C) 2007 Michael Hanselmann <audacious@hansmi.ch>
- * Copyright (C) 2009 William Pitcock <nenolod@dereferenced.org>
- *
- * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-#include <stdlib.h>
-
-#include "rocklight.h"
-
-int b43led_set(int fd, int state) {
- if (state) {
- return write(fd, "0\n", 2);
- } else {
- return write(fd, "255\n", 4);
- }
-}
-
-int b43led_get(int fd) {
- char buf[256];
- int ret = read(fd, &buf, sizeof(buf));
- if(!ret)
- return 0; //dummy
-
- return (strtol(buf, NULL, 10) == 0);
-}
diff --git a/src/rocklight/rocklight.c b/src/rocklight/rocklight.c
deleted file mode 100644
index d75e994..0000000
--- a/src/rocklight/rocklight.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2004 Benedikt 'Hunz' Heinz <rocklight@hunz.org>
- * Copyright (C) 2006 Tony Vroon <chainsaw@gentoo.org>
- *
- * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <audacious/plugin.h>
-#include "rocklight.h"
-
-enum type {
- NONE = 0,
- THINKLIGHT,
- SYSLED,
- B43LED,
-};
-
-static int fd, last, state;
-static enum type type;
-
-static void rocklight_init(void) {
- type = NONE;
-
- fd = open("/proc/acpi/ibm/light", O_RDWR);
- if (fd >= 0) {
- type = THINKLIGHT;
- return;
- }
-
- fd = open("/sys/class/leds/pmu-front-led/brightness", O_RDWR);
- if (fd >= 0) {
- type = SYSLED;
- return;
- }
-
- fd = open("/sys/class/leds/smu-front-led/brightness", O_RDWR);
- if (fd >= 0) {
- type = SYSLED;
- return;
- }
-
- fd = open("/sys/class/leds/b43-phy0::tx/brightness", O_RDWR);
- if (fd >= 0) {
- type = B43LED;
- return;
- }
-}
-
-static void rocklight_cleanup(void) {
- close(fd);
-}
-
-static void rocklight_playback_start(void) {
- /* Get original value */
- switch (type) {
- case THINKLIGHT:
- last = state = thinklight_get(fd);
- break;
-
- case SYSLED:
- last = state = sysled_get(fd);
- break;
-
- case B43LED:
- last = state = b43led_get(fd);
- break;
-
- default:
- break;
- }
-}
-
-static void rocklight_playback_stop(void) {
- if (last == state) return;
-
- /* Reset to original value */
- switch (type) {
- case THINKLIGHT:
- thinklight_set(fd, state);
- break;
-
- case SYSLED:
- sysled_set(fd, state);
- break;
-
- case B43LED:
- b43led_set(fd, state);
- break;
-
- default:
- break;
- }
-}
-
-static void rocklight_render_freq(gint16 data[2][256]) {
- int new = ((data[0][0] + data[1][0]) >> 7) >= 80? 1:0;
-
- if (new == last) return;
- last = new;
-
- switch (type) {
- case THINKLIGHT:
- thinklight_set(fd, new);
- break;
-
- case SYSLED:
- sysled_set(fd, new);
- break;
-
- case B43LED:
- b43led_set(fd, new);
- break;
-
- default:
- break;
- }
-}
-
-static VisPlugin rocklight_vp = {
- .description = "RockLight",
-
- .num_pcm_chs_wanted = 0,
- .num_freq_chs_wanted = 2,
-
- .init = rocklight_init,
- .cleanup = rocklight_cleanup,
- .playback_start = rocklight_playback_start,
- .playback_stop = rocklight_playback_stop,
- .render_freq = rocklight_render_freq
-};
-
-VisPlugin *rocklight_vplist[] = { &rocklight_vp, NULL };
-
-DECLARE_PLUGIN(rocklight, NULL, NULL, NULL, NULL, NULL, NULL, rocklight_vplist,NULL);
diff --git a/src/rocklight/rocklight.h b/src/rocklight/rocklight.h
deleted file mode 100644
index e2df422..0000000
--- a/src/rocklight/rocklight.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2004 Benedikt 'Hunz' Heinz <rocklight@hunz.org>
- *
- * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef _ROCKLIGHT_H
-#define _ROCKLIGHT_H
-
-int thinklight_set(int fd, int state);
-int thinklight_get(int fd);
-
-int sysled_set(int fd, int state);
-int sysled_get(int fd);
-
-int b43led_set(int fd, int state);
-int b43led_get(int fd);
-
-#endif
diff --git a/src/rocklight/sysled.c b/src/rocklight/sysled.c
deleted file mode 100644
index 9feaafe..0000000
--- a/src/rocklight/sysled.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Tony Vroon <chainsaw@gentoo.org>
- * Copyright (C) 2007 Michael Hanselmann <audacious@hansmi.ch>
- *
- * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-#include <stdlib.h>
-
-#include "rocklight.h"
-
-int sysled_set(int fd, int state) {
- if (state) {
- return write(fd, "255\n", 4);
- } else {
- return write(fd, "0\n", 2);
- }
-}
-
-int sysled_get(int fd) {
- char buf[256];
- int ret = read(fd, &buf, sizeof(buf));
- if(!ret)
- return 0; //dummy
-
- return (strtol(buf, NULL, 10) == 255);
-}
diff --git a/src/rocklight/thinklight.c b/src/rocklight/thinklight.c
deleted file mode 100644
index 5632379..0000000
--- a/src/rocklight/thinklight.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************
- * thinklight.c
- *
- * Sun Dec 26 17:02:38 2004
- * Copyright 2004 Benedikt 'Hunz' Heinz
- * rocklight@hunz.org
- * $Id: thinklight.c,v 1.2 2005/03/26 21:29:17 hunz Exp $
- ****************************************************************************/
-
-/*
- * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-
-#include "rocklight.h"
-
-int thinklight_set(int fd, int state) {
- if (state) {
- return write(fd, "on\n", 3);
- } else {
- return write(fd, "off\n", 4);
- }
-}
-
-int thinklight_get(int fd) {
- char buf[256];
- int ret = read(fd, &buf, sizeof(buf));
-
- if (ret < 0)
- return ret;
- else if (ret < 11)
- return -23;
- else if (buf[10] == 'f')
- return 0;
- else if (buf[10] == 'n')
- return 1;
- else
- return -42;
-}
diff --git a/src/scrobbler/Makefile b/src/scrobbler/Makefile
index eebfa3d..0a02480 100644
--- a/src/scrobbler/Makefile
+++ b/src/scrobbler/Makefile
@@ -13,5 +13,5 @@ PACKAGE = audacious
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${BEEP_DEFINES} ${CURL_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${CURL_LIBS} ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${CURL_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${CURL_LIBS}
diff --git a/src/scrobbler/configure.c b/src/scrobbler/configure.c
index 12a04cf..e248ea9 100644
--- a/src/scrobbler/configure.c
+++ b/src/scrobbler/configure.c
@@ -1,7 +1,5 @@
#include "settings.h"
-#include "config.h"
-
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -12,17 +10,12 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/preferences.h>
-#include <libaudcore/md5.h>
#include "plugin.h"
-#if ! GLIB_CHECK_VERSION (2, 14, 0)
-#define g_timeout_add_seconds(s, f, d) g_timeout_add (1000 * (s), (f), (d))
-#endif
-
GtkWidget *entry1, *entry2, *entry3, *cfgdlg;
static GdkColor disabled_color;
guint apply_timeout = 0; /* ID of timeout to save new config */
@@ -49,36 +42,32 @@ static char *pwd = NULL;
static void saveconfig(void)
{
- mcs_handle_t *cfgfile;
-
const char *uid = gtk_entry_get_text(GTK_ENTRY(entry1));
const char *url = gtk_entry_get_text(GTK_ENTRY(entry3));
- if ((cfgfile = aud_cfg_db_open())) {
- aud_md5state_t md5state;
- unsigned char md5pword[16];
-
- if (pwd != NULL && pwd[0] != '\0') {
- aud_md5_init(&md5state);
- aud_md5_append(&md5state, (guchar *)pwd, strlen(pwd));
- aud_md5_finish(&md5state, md5pword);
- aud_cfg_db_set_string(cfgfile, "audioscrobbler", "password",
- hexify((gchar*)md5pword, sizeof(md5pword)));
- }
- if (uid != NULL && uid[0] != '\0') {
- aud_cfg_db_set_string(cfgfile, "audioscrobbler", "username", (gchar *)uid);
- } else {
- aud_cfg_db_set_string(cfgfile, "audioscrobbler", "username", "");
- aud_cfg_db_set_string(cfgfile, "audioscrobbler", "password", "");
- }
+ unsigned char md5pword[16];
+ gsize md5len = 16;
- if (url != NULL && url[0] != '\0')
- aud_cfg_db_set_string(cfgfile, "audioscrobbler", "sc_url", (gchar *)url);
- else
- aud_cfg_db_set_string(cfgfile, "audioscrobbler", "sc_url", LASTFM_HS_URL);
+ if (pwd != NULL && pwd[0] != '\0') {
+ GChecksum * state = g_checksum_new (G_CHECKSUM_MD5);
+ g_checksum_update (state, (unsigned char *) pwd, strlen (pwd));
+ g_checksum_get_digest (state, md5pword, & md5len);
+ g_checksum_free (state);
- aud_cfg_db_close(cfgfile);
+ aud_set_string ("audioscrobbler", "password",
+ hexify ((gchar *) md5pword, sizeof md5pword));
}
+ if (uid != NULL && uid[0] != '\0') {
+ aud_set_string ("audioscrobbler", "username", uid);
+ } else {
+ aud_set_string ("audioscrobbler", "username", "");
+ aud_set_string ("audioscrobbler", "password", "");
+ }
+
+ if (url != NULL && url[0] != '\0')
+ aud_set_string ("audioscrobbler", "sc_url", url);
+ else
+ aud_set_string ("audioscrobbler", "sc_url", LASTFM_HS_URL);
}
static gboolean apply_config_changes(gpointer data) {
@@ -140,7 +129,6 @@ static void entry_focus_out(GtkWidget *widget, gpointer data)
static void *
create_cfgdlg(void)
{
- mcs_handle_t *db;
GtkWidget *vbox2;
GtkWidget *table1;
GtkWidget *label3;
@@ -228,29 +216,13 @@ create_cfgdlg(void)
// common
gtk_box_pack_start (GTK_BOX (vbox2), notebook1, TRUE, TRUE, 6);
- gtk_entry_set_text(GTK_ENTRY(entry1), "");
-
- if ((db = aud_cfg_db_open())) {
- gchar *username = NULL;
- gchar *sc_url = NULL;
- // last fm
- aud_cfg_db_get_string(db, "audioscrobbler", "username",
- &username);
- if (username) {
- gtk_entry_set_text(GTK_ENTRY(entry1), username);
- g_free(username);
- username = NULL;
- }
-
- aud_cfg_db_get_string(db, "audioscrobbler", "sc_url", &sc_url);
- if (sc_url) {
- gtk_entry_set_text(GTK_ENTRY(entry3), sc_url);
- g_free(sc_url);
- sc_url = NULL;
- }
-
- aud_cfg_db_close(db);
- }
+ gchar * username = aud_get_string ("audioscrobbler", "username");
+ gtk_entry_set_text ((GtkEntry *) entry1, username);
+ g_free (username);
+
+ gchar * sc_url = aud_get_string ("audioscrobbler", "sc_url");
+ gtk_entry_set_text ((GtkEntry *) entry3, sc_url);
+ g_free (sc_url);
g_signal_connect(entry1, "changed", G_CALLBACK(entry_changed), NULL);
g_signal_connect(entry3, "changed", G_CALLBACK(entry_changed), NULL);
@@ -260,10 +232,10 @@ create_cfgdlg(void)
/* TODO: don't use WIDGET_CUSTOM there */
static PreferencesWidget settings[] = {
- {WIDGET_CUSTOM, NULL, NULL, NULL, NULL, FALSE, {.populate = create_cfgdlg}},
-};
+ {WIDGET_CUSTOM, .data = {.populate = create_cfgdlg}}};
PluginPreferences preferences = {
+ .domain = PACKAGE,
.title = N_("Scrobbler"),
.prefs = settings,
.n_prefs = G_N_ELEMENTS(settings),
diff --git a/src/scrobbler/plugin.c b/src/scrobbler/plugin.c
index 252c6c3..ba31ccf 100644
--- a/src/scrobbler/plugin.c
+++ b/src/scrobbler/plugin.c
@@ -1,5 +1,4 @@
#include "settings.h"
-#include "config.h"
#include <glib.h>
#include <audacious/i18n.h>
@@ -7,8 +6,8 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
#include <audacious/debug.h>
+#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <audacious/plugin.h>
#include <audacious/preferences.h>
@@ -31,10 +30,6 @@
#include "scrobbler.h"
#include "fmt.h"
-#if ! GLIB_CHECK_VERSION (2, 14, 0)
-#define g_timeout_add_seconds(s, f, d) g_timeout_add (1000 * (s), (f), (d))
-#endif
-
typedef struct submit_t
{
int dosubmit, pos_c, len;
@@ -56,9 +51,8 @@ static gboolean ishttp(const char *a)
static void aud_hook_playback_begin(gpointer hook_data, gpointer user_data)
{
- gint playlist = aud_playlist_get_active();
+ gint playlist = aud_playlist_get_playing();
gint pos = aud_playlist_get_position(playlist);
- const Tuple *tuple;
if (aud_playlist_entry_get_length (playlist, pos, FALSE) < 30)
{
@@ -66,22 +60,23 @@ static void aud_hook_playback_begin(gpointer hook_data, gpointer user_data)
return;
}
- if (ishttp(aud_playlist_entry_get_filename(playlist, pos)))
+ gchar * filename = aud_playlist_entry_get_filename (playlist, pos);
+ if (ishttp (filename))
{
AUDDBG(" *** not submitting due to HTTP source");
+ str_unref (filename);
return;
}
+ str_unref (filename);
sc_idle(m_scrobbler);
- tuple = aud_playlist_entry_get_tuple (playlist, pos, FALSE);
- if (tuple == NULL)
+ if (submit_tuple)
+ tuple_unref (submit_tuple);
+ submit_tuple = aud_playlist_entry_get_tuple (playlist, pos, FALSE);
+ if (! submit_tuple)
return;
- if (submit_tuple != NULL)
- mowgli_object_unref(submit_tuple);
-
- submit_tuple = tuple_copy(tuple);
sc_addentry(m_scrobbler, submit_tuple, tuple_get_int(submit_tuple, FIELD_LENGTH, NULL) / 1000);
if (!track_timeout)
@@ -100,31 +95,17 @@ static void aud_hook_playback_end(gpointer aud_hook_data, gpointer user_data)
if (submit_tuple != NULL)
{
- mowgli_object_unref(submit_tuple);
+ tuple_unref (submit_tuple);
submit_tuple = NULL;
}
}
void start(void) {
- char *username = NULL, *password = NULL, *sc_url = NULL;
- char *ge_username = NULL, *ge_password = NULL;
- mcs_handle_t *cfgfile;
sc_going = 1;
- ge_going = 1;
-
- if ((cfgfile = aud_cfg_db_open()) != NULL) {
- aud_cfg_db_get_string(cfgfile, "audioscrobbler", "username",
- &username);
- aud_cfg_db_get_string(cfgfile, "audioscrobbler", "password",
- &password);
- aud_cfg_db_get_string(cfgfile, "audioscrobbler", "sc_url",
- &sc_url);
- aud_cfg_db_get_string(cfgfile, "audioscrobbler", "ge_username",
- &ge_username);
- aud_cfg_db_get_string(cfgfile, "audioscrobbler", "ge_password",
- &ge_password);
- aud_cfg_db_close(cfgfile);
- }
+
+ gchar * username = aud_get_string ("audioscrobbler", "username");
+ gchar * password = aud_get_string ("audioscrobbler", "password");
+ gchar * sc_url = aud_get_string ("audioscrobbler", "sc_url");
if ((!username || !password) || (!*username || !*password))
{
@@ -132,13 +113,11 @@ void start(void) {
sc_going = 0;
}
else
- {
sc_init(username, password, sc_url);
- g_free(username);
- g_free(password);
- g_free(sc_url);
- }
+ g_free (username);
+ g_free (password);
+ g_free (sc_url);
m_scrobbler = g_mutex_new();
@@ -166,9 +145,10 @@ void stop(void) {
hook_dissociate("playback stop", aud_hook_playback_end);
}
-static void init(void)
+static gboolean init(void)
{
start();
+ return TRUE;
}
static void cleanup(void)
@@ -178,35 +158,32 @@ static void cleanup(void)
void setup_proxy(CURL *curl)
{
- mcs_handle_t *db;
- gboolean use_proxy = FALSE;
-
- db = aud_cfg_db_open();
- aud_cfg_db_get_bool(db, NULL, "use_proxy", &use_proxy);
- if (use_proxy == FALSE)
- {
+ if (! aud_get_bool (NULL, "use_proxy"))
curl_easy_setopt(curl, CURLOPT_PROXY, "");
- }
else
{
- gchar *proxy_host = NULL, *proxy_port = NULL;
- gboolean proxy_use_auth = FALSE;
- aud_cfg_db_get_string(db, NULL, "proxy_host", &proxy_host);
- aud_cfg_db_get_string(db, NULL, "proxy_port", &proxy_port);
+ gchar * proxy_host = aud_get_string (NULL, "proxy_host");
+ gchar * proxy_port = aud_get_string (NULL, "proxy_port");
+
curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host);
curl_easy_setopt(curl, CURLOPT_PROXYPORT, atol(proxy_port));
- aud_cfg_db_get_bool(db, NULL, "proxy_use_auth", &proxy_use_auth);
- if (proxy_use_auth != FALSE)
+
+ if (! aud_get_bool (NULL, "proxy_use_auth"))
{
- gchar *userpwd = NULL, *user = NULL, *pass = NULL;
- aud_cfg_db_get_string(db, NULL, "proxy_user", &user);
- aud_cfg_db_get_string(db, NULL, "proxy_pass", &pass);
- userpwd = g_strdup_printf("%s:%s", user, pass);
+ gchar * user = aud_get_string (NULL, "proxy_user");
+ gchar * pass = aud_get_string (NULL, "proxy_pass");
+ gchar * userpwd = g_strdup_printf ("%s:%s", user, pass);
+
curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, userpwd);
- g_free(userpwd);
+
+ g_free (user);
+ g_free (pass);
+ g_free (userpwd);
}
+
+ g_free (proxy_host);
+ g_free (proxy_port);
}
- aud_cfg_db_close(db);
}
static void about_show(void)
@@ -224,15 +201,11 @@ static void about_show(void)
extern PluginPreferences preferences;
-static GeneralPlugin scrobbler_gp =
-{
- .description = "Scrobbler Plugin",
+AUD_GENERAL_PLUGIN
+(
+ .name = "Scrobbler",
.init = init,
.about = about_show,
.cleanup = cleanup,
.settings = &preferences,
-};
-
-GeneralPlugin *scrobbler_gplist[] = { &scrobbler_gp, NULL };
-
-DECLARE_PLUGIN(scrobbler, NULL, NULL, NULL, NULL, NULL, scrobbler_gplist, NULL, NULL);
+)
diff --git a/src/scrobbler/scrobbler.c b/src/scrobbler/scrobbler.c
index efdb99a..508d88d 100644
--- a/src/scrobbler/scrobbler.c
+++ b/src/scrobbler/scrobbler.c
@@ -1,5 +1,5 @@
+#include <inttypes.h>
#include <pthread.h>
-#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
@@ -7,7 +7,6 @@
#include "fmt.h"
#include "plugin.h"
#include "scrobbler.h"
-#include "config.h"
#include "settings.h"
#include <glib.h>
@@ -15,7 +14,6 @@
#include <audacious/debug.h>
#include <audacious/misc.h>
#include <audacious/plugin.h>
-#include <libaudcore/md5.h>
#define SCROBBLER_CLI_ID "aud"
#define SCROBBLER_HS_WAIT 1800
@@ -142,12 +140,17 @@ static item_t *q_additem(item_t *newitem)
static item_t *create_item(Tuple *tuple, int len)
{
item_t *item;
- const gchar *album;
+ gchar *album, *artist, *title;
item = malloc(sizeof(item_t));
- item->artist = fmt_escape(tuple_get_string(tuple, FIELD_ARTIST, NULL));
- item->title = fmt_escape(tuple_get_string(tuple, FIELD_TITLE, NULL));
+ artist = tuple_get_str(tuple, FIELD_ARTIST, NULL);
+ item->artist = fmt_escape(artist);
+ str_unref(artist);
+
+ title = tuple_get_str(tuple, FIELD_TITLE, NULL);
+ item->title = fmt_escape(title);
+ str_unref(title);
if (item->artist == NULL || item->title == NULL)
{
@@ -160,9 +163,12 @@ static item_t *create_item(Tuple *tuple, int len)
item->timeplayed = 0;
item->utctime = time(NULL);
- album = tuple_get_string(tuple, FIELD_ALBUM, NULL);
+ album = tuple_get_str(tuple, FIELD_ALBUM, NULL);
if (album)
- item->album = fmt_escape((char*) album);
+ {
+ item->album = fmt_escape(album);
+ str_unref(album);
+ }
else
item->album = fmt_escape("");
@@ -458,12 +464,13 @@ static int sc_parse_hs_res(void)
static unsigned char *md5_string(char *pass, int len)
{
- aud_md5state_t md5state;
static unsigned char md5pword[16];
+ gsize md5len = 16;
- aud_md5_init(&md5state);
- aud_md5_append(&md5state, (unsigned const char *)pass, len);
- aud_md5_finish(&md5state, md5pword);
+ GChecksum * state = g_checksum_new (G_CHECKSUM_MD5);
+ g_checksum_update (state, (unsigned char *) pass, len);
+ g_checksum_get_digest (state, md5pword, & md5len);
+ g_checksum_free (state);
return md5pword;
}
@@ -490,12 +497,11 @@ static GStaticMutex submit_mutex = G_STATIC_MUTEX_INIT;
gpointer sc_curl_perform_thread(gpointer data)
{
- int status;
CURL *curl = (CURL *) data;
g_static_mutex_lock(&submit_mutex);
- status = curl_easy_perform(curl);
+ curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (sc_parse_sb_res()) {
@@ -533,15 +539,15 @@ static int sc_handshake(void)
char *auth_tmp;
char *auth;
- auth_tmp = g_strdup_printf("%s%ld", sc_password, ts);
+ auth_tmp = g_strdup_printf("%s%"PRId64, sc_password, (gint64) ts);
auth = (char *)md5_string(auth_tmp, strlen(auth_tmp));
g_free(auth_tmp);
hexify(auth, 16);
auth_tmp = g_strdup(sc_response_hash);
- g_snprintf(buf, sizeof(buf), "%s/?hs=true&p=%s&c=%s&v=%s&u=%s&t=%ld&a=%s",
+ g_snprintf(buf, sizeof(buf), "%s/?hs=true&p=%s&c=%s&v=%s&u=%s&t=%"PRId64"&a=%s",
sc_hs_url, SCROBBLER_VERSION,
- SCROBBLER_CLI_ID, SCROBBLER_IMPLEMENTATION, sc_username, ts,
+ SCROBBLER_CLI_ID, SCROBBLER_IMPLEMENTATION, sc_username, (gint64) ts,
auth_tmp);
g_free(auth_tmp);
@@ -575,17 +581,19 @@ static int sc_handshake(void)
}
if (sc_challenge_hash != NULL) {
- aud_md5state_t md5state;
unsigned char md5pword[16];
+ gsize md5len = 16;
- aud_md5_init(&md5state);
/*AUDDBG("Pass Hash: %s", sc_password));*/
- aud_md5_append(&md5state, (unsigned const char *)sc_password,
- strlen(sc_password));
/*AUDDBG("Challenge Hash: %s", sc_challenge_hash));*/
- aud_md5_append(&md5state, (unsigned const char *)sc_challenge_hash,
- strlen(sc_challenge_hash));
- aud_md5_finish(&md5state, md5pword);
+
+ GChecksum * state = g_checksum_new (G_CHECKSUM_MD5);
+ g_checksum_update (state, (unsigned char *) sc_password, strlen (sc_password));
+ g_checksum_update (state, (unsigned char *) sc_challenge_hash,
+ strlen (sc_challenge_hash));
+ g_checksum_get_digest (state, md5pword, & md5len);
+ g_checksum_free (state);
+
hexify((char*)md5pword, sizeof(md5pword));
/*AUDDBG("Response Hash: %s", sc_response_hash));*/
}
@@ -786,9 +794,18 @@ static int sc_submit_np(Tuple *tuple)
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
/*cfa(&post, &last, "debug", "failed");*/
- char *field_artist = fmt_escape(tuple_get_string(tuple, FIELD_ARTIST, NULL));
- char *field_title = fmt_escape(tuple_get_string(tuple, FIELD_TITLE, NULL));
- char *field_album = tuple_get_string(tuple, FIELD_ALBUM, NULL) ? fmt_escape(tuple_get_string(tuple, FIELD_ALBUM, NULL)) : fmt_escape("");
+ char *artist = tuple_get_str(tuple, FIELD_ARTIST, NULL);
+ char *field_artist = fmt_escape(artist);
+ str_unref(artist);
+
+ char *title = tuple_get_str(tuple, FIELD_TITLE, NULL);
+ char *field_title = fmt_escape(title);
+ str_unref(title);
+
+ char *album = tuple_get_str(tuple, FIELD_ALBUM, NULL);
+ char *field_album = album ? fmt_escape(album) : fmt_escape("");
+ str_unref(album);
+
snprintf(entry, 16384, "s=%s&a=%s&t=%s&b=%s&l=%d&n=%d&m=", sc_session_id,
field_artist,
field_title,
@@ -916,26 +933,22 @@ static void sc_handlequeue(GMutex *mutex)
static void read_cache(void)
{
- FILE *fd;
- char buf[PATH_MAX];
int i=0;
item_t *item;
- gchar* config_datadir;
- config_datadir = aud_util_get_localdir();
- g_snprintf(buf, sizeof(buf), "%s/scrobblerqueue.txt", config_datadir);
- g_free(config_datadir);
+ gchar * path = g_strconcat (aud_get_path (AUD_PATH_USER_DIR), "/scrobblerqueue.txt", NULL);
- if (!(fd = fopen(buf, "r")))
+ if (! g_file_test (path, G_FILE_TEST_EXISTS))
return;
- AUDDBG("Opening %s\n", buf);
- fclose(fd);
+
+ AUDDBG ("Opening %s\n", path);
gchar* cache;
gchar** values;
gchar** entry;
- g_file_get_contents(buf, &cache, NULL, NULL);
+ g_file_get_contents (path, & cache, NULL, NULL);
values = g_strsplit(cache, "\n", 0);
+ g_free (path);
int x;
for (x=0; values[x] && strlen(values[x]); x++) {
@@ -959,18 +972,18 @@ static void read_cache(void)
Tuple *tuple = tuple_new();
gchar* string_value;
string_value = xmms_urldecode_plain(artist);
- tuple_associate_string(tuple, FIELD_ARTIST, NULL, string_value);
+ tuple_set_str(tuple, FIELD_ARTIST, NULL, string_value);
g_free(string_value);
string_value = xmms_urldecode_plain(title);
- tuple_associate_string(tuple, FIELD_TITLE, NULL, string_value);
+ tuple_set_str(tuple, FIELD_TITLE, NULL, string_value);
g_free(string_value);
string_value = xmms_urldecode_plain(album);
- tuple_associate_string(tuple, FIELD_ALBUM, NULL, string_value);
+ tuple_set_str(tuple, FIELD_ALBUM, NULL, string_value);
g_free(string_value);
- tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, track);
+ tuple_set_int(tuple, FIELD_TRACK_NUMBER, NULL, track);
item = q_put(tuple, t, len);
- tuple_free(tuple);
+ tuple_unref(tuple);
if (item != NULL)
AUDDBG ("a[%d]=%s t[%d]=%s l[%d]=%d i[%d]=%d b[%d]=%s\n", i,
@@ -994,28 +1007,27 @@ static void dump_queue(void)
{
FILE *fd;
item_t *item;
- char *home, buf[PATH_MAX];
- gchar* config_datadir;
/*AUDDBG("Entering dump_queue();");*/
+ gchar * home;
if (!(home = getenv("HOME")))
{
AUDDBG("No HOME directory found. Cannot dump queue.\n");
return;
}
- config_datadir = aud_util_get_localdir();
- g_snprintf(buf, sizeof(buf), "%s/scrobblerqueue.txt", config_datadir);
- g_free(config_datadir);
+ gchar * path = g_strconcat (aud_get_path (AUD_PATH_USER_DIR), "/scrobblerqueue.txt", NULL);
- if (!(fd = fopen(buf, "w")))
+ if (! (fd = fopen (path, "w")))
{
- AUDDBG("Failure opening %s\n", buf);
+ AUDDBG("Failure opening %s\n", path);
+ g_free (path);
return;
}
- AUDDBG("Opening %s\n", buf);
+ AUDDBG("Opening %s\n", path);
+ g_free (path);
q_peekall(1);
diff --git a/src/scrobbler/scrobbler.h b/src/scrobbler/scrobbler.h
index f406e30..71a0348 100644
--- a/src/scrobbler/scrobbler.h
+++ b/src/scrobbler/scrobbler.h
@@ -1,6 +1,8 @@
#ifndef NET_H
#define NET_H 1
+#include <glib.h>
+
#include <libaudcore/tuple.h>
#define SC_CURL_TIMEOUT 60
diff --git a/src/sdlout/Makefile b/src/sdlout/Makefile
new file mode 100644
index 0000000..9d92358
--- /dev/null
+++ b/src/sdlout/Makefile
@@ -0,0 +1,13 @@
+PLUGIN = sdlout${PLUGIN_SUFFIX}
+
+SRCS = sdlout.c \
+ plugin.c \
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
+
+CPPFLAGS += -I../.. ${PTHREAD_CFLAGS} ${GTK_CFLAGS} ${SDL_CFLAGS}
+CFLAGS += ${PLUGIN_CFLAGS}
+LIBS += -lm ${PTHREAD_LIBS} ${GTK_LIBS} ${SDL_LIBS}
diff --git a/src/sdlout/plugin.c b/src/sdlout/plugin.c
new file mode 100644
index 0000000..26b1d41
--- /dev/null
+++ b/src/sdlout/plugin.c
@@ -0,0 +1,94 @@
+/*
+ * SDL Output Plugin for Audacious
+ * Copyright 2010 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <stdarg.h>
+
+#include <gtk/gtk.h>
+
+#include <audacious/i18n.h>
+#include <audacious/plugin.h>
+#include <libaudgui/libaudgui.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+#include "config.h"
+#include "sdlout.h"
+
+AUD_OUTPUT_PLUGIN
+(
+ .name = "SDL",
+ .init = sdlout_init,
+ .cleanup = sdlout_cleanup,
+ .about = sdlout_about,
+ .probe_priority = 1,
+ .get_volume = sdlout_get_volume,
+ .set_volume = sdlout_set_volume,
+ .open_audio = sdlout_open_audio,
+ .close_audio = sdlout_close_audio,
+ .buffer_free = sdlout_buffer_free,
+ .period_wait = sdlout_period_wait,
+ .write_audio = sdlout_write_audio,
+ .drain = sdlout_drain,
+ .written_time = sdlout_written_time,
+ .output_time = sdlout_output_time,
+ .pause = sdlout_pause,
+ .flush = sdlout_flush,
+ .set_written_time = sdlout_set_written_time,
+)
+
+void sdlout_about (void)
+{
+ static GtkWidget * window = NULL;
+
+ audgui_simple_message (& window, GTK_MESSAGE_INFO, _("About SDL Output "
+ "Plugin"), "SDL Output Plugin for Audacious\n"
+ "Copyright 2010 John Lindgren\n\n"
+ "Redistribution and use in source and binary forms, with or without "
+ "modification, are permitted provided that the following conditions are "
+ "met:\n\n"
+ "1. Redistributions of source code must retain the above copyright "
+ "notice, this list of conditions, and the following disclaimer.\n\n"
+ "2. Redistributions in binary form must reproduce the above copyright "
+ "notice, this list of conditions, and the following disclaimer in the "
+ "documentation provided with the distribution.\n\n"
+ "This software is provided \"as is\" and without any warranty, express or "
+ "implied. In no event shall the authors be liable for any damages arising "
+ "from the use of this software.");
+}
+
+static int show_error (void * message)
+{
+ static GtkWidget * window = NULL;
+
+ audgui_simple_message (& window, GTK_MESSAGE_ERROR, _("SDL error"),
+ message);
+ g_free (message);
+ return 0;
+}
+
+void sdlout_error (const gchar * format, ...)
+{
+ va_list args;
+ char * message;
+
+ va_start (args, format);
+ message = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ g_timeout_add (0, show_error, message);
+}
diff --git a/src/sdlout/sdlout.c b/src/sdlout/sdlout.c
new file mode 100644
index 0000000..3e3eef1
--- /dev/null
+++ b/src/sdlout/sdlout.c
@@ -0,0 +1,344 @@
+/*
+ * SDL Output Plugin for Audacious
+ * Copyright 2010 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <assert.h>
+#include <math.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+#include <glib.h>
+#include <SDL.h>
+#include <SDL_audio.h>
+
+#include <audacious/debug.h>
+#include <audacious/misc.h>
+#include <audacious/plugin.h>
+
+#include "sdlout.h"
+
+#define VOLUME_RANGE 40 /* decibels */
+
+static pthread_mutex_t sdlout_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t sdlout_cond = PTHREAD_COND_INITIALIZER;
+
+static volatile int vol_left = 100, vol_right = 100;
+
+static int sdlout_chan, sdlout_rate;
+
+static unsigned char * buffer;
+static int buffer_size, buffer_data_start, buffer_data_len;
+
+static int64_t frames_written;
+static char prebuffer_flag, paused_flag;
+
+static int block_delay;
+static struct timeval block_time;
+
+int sdlout_init (void)
+{
+ if (SDL_Init (SDL_INIT_AUDIO) < 0)
+ {
+ fprintf (stderr, "Failed to init SDL: %s.\n", SDL_GetError ());
+ return 0;
+ }
+
+ return 1;
+}
+
+void sdlout_cleanup (void)
+{
+ SDL_Quit ();
+}
+
+void sdlout_get_volume (int * left, int * right)
+{
+ * left = vol_left;
+ * right = vol_right;
+}
+
+void sdlout_set_volume (int left, int right)
+{
+ vol_left = left;
+ vol_right = right;
+}
+
+static void apply_mono_volume (unsigned char * data, int len)
+{
+ int vol = MAX (vol_left, vol_right);
+ int factor = (vol == 0) ? 0 : powf (10, (float) VOLUME_RANGE * (vol - 100)
+ / 100 / 20) * 65536;
+
+ int16_t * i = (int16_t *) data;
+ int16_t * end = (int16_t *) (data + len);
+
+ while (i < end)
+ {
+ * i = ((int) * i * factor) >> 16;
+ i ++;
+ }
+}
+
+static void apply_stereo_volume (unsigned char * data, int len)
+{
+ int factor_left = (vol_left == 0) ? 0 : powf (10, (float) VOLUME_RANGE *
+ (vol_left - 100) / 100 / 20) * 65536;
+ int factor_right = (vol_right == 0) ? 0 : powf (10, (float) VOLUME_RANGE *
+ (vol_right - 100) / 100 / 20) * 65536;
+
+ int16_t * i = (int16_t *) data;
+ int16_t * end = (int16_t *) (data + len);
+
+ while (i < end)
+ {
+ * i = ((int) * i * factor_left) >> 16;
+ i ++;
+ * i = ((int) * i * factor_right) >> 16;
+ i ++;
+ }
+}
+
+static void callback (void * user, unsigned char * buf, int len)
+{
+ pthread_mutex_lock (& sdlout_mutex);
+
+ int copy = MIN (len, buffer_data_len);
+ int part = buffer_size - buffer_data_start;
+
+ if (copy <= part)
+ {
+ memcpy (buf, buffer + buffer_data_start, copy);
+ buffer_data_start += copy;
+ }
+ else
+ {
+ memcpy (buf, buffer + buffer_data_start, part);
+ memcpy (buf + part, buffer, copy - part);
+ buffer_data_start = copy - part;
+ }
+
+ buffer_data_len -= copy;
+
+ if (sdlout_chan == 2)
+ apply_stereo_volume (buf, copy);
+ else
+ apply_mono_volume (buf, copy);
+
+ if (copy < len)
+ memset (buf + copy, 0, len - copy);
+
+ /* At this moment, we know that there is a delay of (at least) the block of
+ * data just written. We save the block size and the current time for
+ * estimating the delay later on. */
+ block_delay = copy / (2 * sdlout_chan) * 1000 / sdlout_rate;
+ gettimeofday (& block_time, NULL);
+
+ pthread_cond_broadcast (& sdlout_cond);
+ pthread_mutex_unlock (& sdlout_mutex);
+}
+
+int sdlout_open_audio (int format, int rate, int chan)
+{
+ if (format != FMT_S16_NE)
+ {
+ sdlout_error ("Only signed 16-bit, native endian audio is supported.\n");
+ return 0;
+ }
+
+ AUDDBG ("Opening audio for %d channels, %d Hz.\n", chan, rate);
+
+ sdlout_chan = chan;
+ sdlout_rate = rate;
+
+ buffer_size = 2 * chan * (aud_get_int (NULL, "output_buffer_size") * rate / 1000);
+ buffer = malloc (buffer_size);
+ buffer_data_start = 0;
+ buffer_data_len = 0;
+
+ frames_written = 0;
+ prebuffer_flag = 1;
+ paused_flag = 0;
+
+ SDL_AudioSpec spec = {
+ .freq = rate,
+ .format = AUDIO_S16,
+ .channels = chan,
+ .samples = 4096,
+ .callback = callback,
+ .userdata = NULL};
+
+ if (SDL_OpenAudio (& spec, NULL) < 0)
+ {
+ sdlout_error ("Failed to open audio stream: %s.\n", SDL_GetError ());
+ free (buffer);
+ buffer = NULL;
+ return 0;
+ }
+
+ return 1;
+}
+
+void sdlout_close_audio (void)
+{
+ AUDDBG ("Closing audio.\n");
+ SDL_CloseAudio ();
+ free (buffer);
+ buffer = NULL;
+}
+
+int sdlout_buffer_free (void)
+{
+ pthread_mutex_lock (& sdlout_mutex);
+ int space = buffer_size - buffer_data_len;
+ pthread_mutex_unlock (& sdlout_mutex);
+ return space;
+}
+
+static void check_started (void)
+{
+ if (! prebuffer_flag)
+ return;
+
+ AUDDBG ("Starting playback.\n");
+ prebuffer_flag = 0;
+ block_delay = 0;
+ SDL_PauseAudio (0);
+}
+
+void sdlout_period_wait (void)
+{
+ pthread_mutex_lock (& sdlout_mutex);
+
+ while (buffer_data_len == buffer_size)
+ {
+ if (! paused_flag)
+ check_started ();
+
+ pthread_cond_wait (& sdlout_cond, & sdlout_mutex);
+ }
+
+ pthread_mutex_unlock (& sdlout_mutex);
+}
+
+void sdlout_write_audio (void * data, int len)
+{
+ pthread_mutex_lock (& sdlout_mutex);
+
+ assert (len <= buffer_size - buffer_data_len);
+
+ int start = (buffer_data_start + buffer_data_len) % buffer_size;
+
+ if (len <= buffer_size - start)
+ memcpy (buffer + start, data, len);
+ else
+ {
+ int part = buffer_size - start;
+ memcpy (buffer + start, data, part);
+ memcpy (buffer, data + part, len - part);
+ }
+
+ buffer_data_len += len;
+ frames_written += len / (2 * sdlout_chan);
+
+ pthread_mutex_unlock (& sdlout_mutex);
+}
+
+void sdlout_drain (void)
+{
+ AUDDBG ("Draining.\n");
+ pthread_mutex_lock (& sdlout_mutex);
+
+ check_started ();
+
+ while (buffer_data_len)
+ pthread_cond_wait (& sdlout_cond, & sdlout_mutex);
+
+ pthread_mutex_unlock (& sdlout_mutex);
+}
+
+void sdlout_set_written_time (int time)
+{
+ AUDDBG ("Setting time counter to %d.\n", time);
+ pthread_mutex_lock (& sdlout_mutex);
+ frames_written = (int64_t) time * sdlout_rate / 1000;
+ pthread_mutex_unlock (& sdlout_mutex);
+}
+
+int sdlout_written_time (void)
+{
+ pthread_mutex_lock (& sdlout_mutex);
+ int time = (int64_t) frames_written * 1000 / sdlout_rate;
+ pthread_mutex_unlock (& sdlout_mutex);
+ return time;
+}
+
+int sdlout_output_time (void)
+{
+ pthread_mutex_lock (& sdlout_mutex);
+
+ int out = (int64_t) (frames_written - buffer_data_len / (2 * sdlout_chan))
+ * 1000 / sdlout_rate;
+
+ /* Estimate the additional delay of the last block written. */
+ if (! prebuffer_flag && ! paused_flag && block_delay)
+ {
+ struct timeval cur;
+ gettimeofday (& cur, NULL);
+
+ int elapsed = 1000 * (cur.tv_sec - block_time.tv_sec) + (cur.tv_usec -
+ block_time.tv_usec) / 1000;
+
+ if (elapsed < block_delay)
+ out -= block_delay - elapsed;
+ }
+
+ pthread_mutex_unlock (& sdlout_mutex);
+ return out;
+}
+
+void sdlout_pause (int pause)
+{
+ AUDDBG ("%sause.\n", pause ? "P" : "Unp");
+ pthread_mutex_lock (& sdlout_mutex);
+
+ paused_flag = pause;
+
+ if (! prebuffer_flag)
+ SDL_PauseAudio (pause);
+
+ pthread_cond_broadcast (& sdlout_cond); /* wake up period wait */
+ pthread_mutex_unlock (& sdlout_mutex);
+}
+
+void sdlout_flush (int time)
+{
+ AUDDBG ("Seek requested; discarding buffer.\n");
+ pthread_mutex_lock (& sdlout_mutex);
+
+ buffer_data_start = 0;
+ buffer_data_len = 0;
+
+ frames_written = (int64_t) time * sdlout_rate / 1000;
+ prebuffer_flag = 1;
+
+ pthread_cond_broadcast (& sdlout_cond); /* wake up period wait */
+ pthread_mutex_unlock (& sdlout_mutex);
+}
diff --git a/src/sdlout/sdlout.h b/src/sdlout/sdlout.h
new file mode 100644
index 0000000..468c6f9
--- /dev/null
+++ b/src/sdlout/sdlout.h
@@ -0,0 +1,44 @@
+/*
+ * SDL Output Plugin for Audacious
+ * Copyright 2010 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#ifndef AUDACIOUS_SDLOUT_H
+#define AUDACIOUS_SDLOUT_H
+
+/* sdlout.c */
+int sdlout_init (void);
+void sdlout_cleanup (void);
+void sdlout_get_volume (int * left, int * right);
+void sdlout_set_volume (int left, int right);
+int sdlout_open_audio (int format, int rate, int chan);
+void sdlout_close_audio (void);
+int sdlout_buffer_free (void);
+void sdlout_period_wait (void);
+void sdlout_write_audio (void * data, int len);
+void sdlout_drain (void);
+int sdlout_written_time (void);
+int sdlout_output_time (void);
+void sdlout_pause (int pause);
+void sdlout_flush (int time);
+void sdlout_set_written_time (int time);
+
+/* plugin.c */
+void sdlout_about (void);
+void sdlout_error (const char * format, ...);
+
+#endif
diff --git a/src/search-tool/Makefile b/src/search-tool/Makefile
new file mode 100644
index 0000000..66cc384
--- /dev/null
+++ b/src/search-tool/Makefile
@@ -0,0 +1,12 @@
+PLUGIN = search-tool${PLUGIN_SUFFIX}
+
+SRCS = search-tool.c
+
+include ../../buildsys.mk
+include ../../extra.mk
+
+plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
+
+CPPFLAGS += -I../.. ${GTK_CFLAGS}
+CFLAGS += ${PLUGIN_CFLAGS}
+LIBS += ${GTK_LIBS}
diff --git a/src/search-tool/search-tool.c b/src/search-tool/search-tool.c
new file mode 100644
index 0000000..1ec51cf
--- /dev/null
+++ b/src/search-tool/search-tool.c
@@ -0,0 +1,706 @@
+/*
+ * search-tool.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <audacious/playlist.h>
+#include <audacious/plugin.h>
+#include <libaudcore/audstrings.h>
+#include <libaudcore/hook.h>
+#include <libaudgui/list.h>
+
+#include "config.h"
+
+#define MAX_RESULTS 12
+#define SEARCH_DELAY 300
+
+enum {GENRE, ARTIST, ALBUM, TITLE, FIELDS};
+
+static const gchar * const field_names[] = {N_("Genre"), N_("Artist"),
+ N_("Album"), N_("Title")};
+
+typedef struct {
+ gint field;
+ gchar * name, * folded;
+ GArray * matches;
+} Item;
+
+static gint playlist_id;
+static gchar * * search_terms;
+
+static GHashTable * added_table;
+static GHashTable * dicts[FIELDS];
+static Index * items;
+static GArray * selection;
+
+static gboolean adding, dicts_valid;
+static gint search_source;
+
+static GtkWidget * help_label, * wait_label, * scrolled, * results_list;
+
+/* str_unref() may be a macro */
+static void str_unref_cb (void * str)
+{
+ str_unref (str);
+}
+
+static Item * item_new (gint field, gchar * name)
+{
+ Item * item = g_slice_new (Item);
+ item->field = field;
+ item->name = name;
+ item->folded = g_utf8_casefold (name, -1);
+ item->matches = g_array_new (FALSE, FALSE, sizeof (gint));
+ return item;
+}
+
+static void item_free (Item * item)
+{
+ str_unref (item->name);
+ g_free (item->folded);
+ g_array_free (item->matches, TRUE);
+ g_slice_free (Item, item);
+}
+
+static void find_playlist (void)
+{
+ playlist_id = -1;
+
+ for (gint p = 0; playlist_id < 0 && p < aud_playlist_count (); p ++)
+ {
+ gchar * title = aud_playlist_get_title (p);
+
+ if (! strcmp (title, _("Library")))
+ playlist_id = aud_playlist_get_unique_id (p);
+
+ str_unref (title);
+ }
+}
+
+static gint create_playlist (void)
+{
+ gint list = aud_playlist_get_blank ();
+ aud_playlist_set_title (list, _("Library"));
+ aud_playlist_set_active (list);
+ playlist_id = aud_playlist_get_unique_id (list);
+ return list;
+}
+
+static gint get_playlist (gboolean require_added, gboolean require_scanned)
+{
+ if (playlist_id < 0)
+ return -1;
+
+ gint list = aud_playlist_by_unique_id (playlist_id);
+
+ if (list < 0)
+ {
+ playlist_id = -1;
+ return -1;
+ }
+
+ if (require_added && aud_playlist_add_in_progress (list))
+ return -1;
+ if (require_scanned && aud_playlist_scan_in_progress (list))
+ return -1;
+
+ return list;
+}
+
+static void set_search_phrase (const gchar * phrase)
+{
+ g_strfreev (search_terms);
+
+ gchar * folded = g_utf8_casefold (phrase, -1);
+ search_terms = g_strsplit (folded, " ", -1);
+ g_free (folded);
+}
+
+static gchar * get_path (void)
+{
+ gchar * path = aud_get_string ("search-tool", "path");
+ if (g_file_test (path, G_FILE_TEST_EXISTS))
+ return path;
+
+ g_free (path);
+ path = g_build_filename (g_get_home_dir (), "Music", NULL);
+ if (g_file_test (path, G_FILE_TEST_EXISTS))
+ return path;
+
+ g_free (path);
+ return g_strdup (g_get_home_dir ());
+}
+
+static void destroy_added_table (void)
+{
+ if (! added_table)
+ return;
+
+ g_hash_table_destroy (added_table);
+ added_table = NULL;
+}
+
+static void destroy_dicts (void)
+{
+ if (items)
+ index_delete (items, 0, index_count (items));
+
+ for (gint f = 0; f < FIELDS; f ++)
+ {
+ if (! dicts[f])
+ continue;
+
+ g_hash_table_destroy (dicts[f]);
+ dicts[f] = NULL;
+ }
+}
+
+static void create_dicts (gint list)
+{
+ destroy_dicts ();
+ for (gint f = 0; f < FIELDS; f ++)
+ dicts[f] = g_hash_table_new_full (g_str_hash, g_str_equal, str_unref_cb,
+ (GDestroyNotify) item_free);
+
+ gint entries = aud_playlist_entry_count (list);
+
+ for (gint e = 0; e < entries; e ++)
+ {
+ gchar * fields[FIELDS];
+
+ Tuple * tuple = aud_playlist_entry_get_tuple (list, e, TRUE);
+ fields[GENRE] = tuple ? tuple_get_str (tuple, FIELD_GENRE, NULL) : NULL;
+ if (tuple)
+ tuple_unref (tuple);
+
+ aud_playlist_entry_describe (list, e, & fields[TITLE], & fields[ARTIST],
+ & fields[ALBUM], TRUE);
+
+ for (gint f = 0; f < FIELDS; f ++)
+ {
+ if (! fields[f])
+ continue;
+
+ Item * item = g_hash_table_lookup (dicts[f], fields[f]);
+
+ if (item)
+ str_unref (fields[f]);
+ else
+ {
+ item = item_new (f, fields[f]);
+ g_hash_table_insert (dicts[f], str_ref (item->name), item);
+ }
+
+ g_array_append_val (item->matches, e);
+ }
+ }
+}
+
+static void search_cb (void * key, void * item, void * index)
+{
+ if (index_count (index) > MAX_RESULTS)
+ return;
+
+ for (gint t = 0; search_terms[t]; t ++)
+ {
+ if (! strstr (((Item *) item)->folded, search_terms[t]))
+ return;
+ }
+
+ index_append (index, item);
+}
+
+static gint item_compare (const void * _a, const void * _b)
+{
+ const Item * a = _a, * b = _b;
+
+ if (a->field != b->field)
+ return (a->field > b->field) ? 1 : -1;
+
+ return string_compare (a->name, b->name);
+}
+
+static void do_search (void)
+{
+ index_delete (items, 0, index_count (items));
+
+ for (gint f = 0; f < FIELDS; f ++)
+ {
+ if (! dicts[f])
+ continue;
+
+ Index * index = index_new ();
+ g_hash_table_foreach (dicts[f], search_cb, index);
+
+ if (index_count (index) <= MAX_RESULTS)
+ {
+ index_sort (index, item_compare);
+ index_merge_append (items, index);
+ }
+
+ index_free (index);
+ }
+
+ g_array_set_size (selection, index_count (items));
+ memset (selection->data, 0, selection->len);
+ if (selection->len > 0)
+ selection->data[0] = 1;
+}
+
+static gboolean filter_cb (const gchar * filename, void * unused)
+{
+ return added_table && ! g_hash_table_lookup_extended (added_table, filename, NULL, NULL);
+}
+
+static void begin_add (const gchar * path)
+{
+ gint list = get_playlist (FALSE, FALSE);
+
+ if (list < 0)
+ list = create_playlist ();
+
+ aud_set_string ("search-tool", "path", path);
+
+ gchar * uri = filename_to_uri (path);
+ g_return_if_fail (uri);
+ gchar * prefix = g_str_has_suffix (uri, "/") ? g_strdup (uri) : g_strconcat (uri, "/", NULL);
+
+ destroy_added_table ();
+ added_table = g_hash_table_new_full (g_str_hash, g_str_equal, str_unref_cb, NULL);
+
+ gint entries = aud_playlist_entry_count (list);
+
+ for (gint entry = 0; entry < entries; entry ++)
+ {
+ gchar * filename = aud_playlist_entry_get_filename (list, entry);
+
+ if (g_str_has_prefix (filename, prefix) && ! g_hash_table_lookup_extended
+ (added_table, filename, NULL, NULL))
+ {
+ aud_playlist_entry_set_selected (list, entry, FALSE);
+ g_hash_table_insert (added_table, filename, NULL);
+ }
+ else
+ {
+ aud_playlist_entry_set_selected (list, entry, TRUE);
+ str_unref (filename);
+ }
+ }
+
+ aud_playlist_delete_selected (list);
+ aud_playlist_remove_failed (list);
+
+ Index * add = index_new ();
+ index_append (add, str_get (uri));
+ aud_playlist_entry_insert_filtered (list, -1, add, NULL, filter_cb, NULL, FALSE);
+
+ g_free (uri);
+ g_free (prefix);
+ adding = TRUE;
+}
+
+static void show_hide_widgets (void)
+{
+ if (! help_label || ! wait_label || ! scrolled)
+ return;
+
+ if (playlist_id < 0)
+ {
+ gtk_widget_hide (wait_label);
+ gtk_widget_hide (scrolled);
+ gtk_widget_show (help_label);
+ }
+ else
+ {
+ gtk_widget_hide (help_label);
+
+ if (dicts_valid)
+ {
+ gtk_widget_hide (wait_label);
+ gtk_widget_show (scrolled);
+ }
+ else
+ {
+ gtk_widget_hide (scrolled);
+ gtk_widget_show (wait_label);
+ }
+ }
+}
+
+static gint search_timeout (void * unused)
+{
+ do_search ();
+
+ if (results_list)
+ {
+ audgui_list_delete_rows (results_list, 0, audgui_list_row_count (results_list));
+ audgui_list_insert_rows (results_list, 0, index_count (items));
+ }
+
+ if (search_source)
+ {
+ g_source_remove (search_source);
+ search_source = 0;
+ }
+
+ return FALSE;
+}
+
+static void schedule_search (void)
+{
+ if (search_source)
+ g_source_remove (search_source);
+
+ search_source = g_timeout_add (SEARCH_DELAY, search_timeout, NULL);
+}
+
+static void update_dicts (void)
+{
+ gint list = get_playlist (TRUE, TRUE);
+
+ if (list >= 0)
+ {
+ create_dicts (list);
+ dicts_valid = TRUE;
+ schedule_search ();
+ }
+ else
+ {
+ destroy_dicts ();
+ dicts_valid = FALSE;
+ }
+
+ if (results_list)
+ audgui_list_delete_rows (results_list, 0, audgui_list_row_count (results_list));
+
+ show_hide_widgets ();
+}
+
+static void add_complete_cb (void * unused, void * unused2)
+{
+ if (adding)
+ {
+ gint list = get_playlist (TRUE, FALSE);
+
+ if (list >= 0 && ! aud_playlist_add_in_progress (list))
+ {
+ adding = FALSE;
+ destroy_added_table ();
+ aud_playlist_sort_by_scheme (list, PLAYLIST_SORT_PATH);
+ }
+ }
+
+ if (! dicts_valid && ! aud_playlist_update_pending ())
+ update_dicts ();
+}
+
+static void scan_complete_cb (void * unused, void * unused2)
+{
+ if (! dicts_valid && ! aud_playlist_update_pending ())
+ update_dicts ();
+}
+
+static void playlist_update_cb (void * data, void * unused)
+{
+ if (! dicts_valid)
+ update_dicts ();
+ else
+ {
+ gint list = get_playlist (TRUE, TRUE);
+ gint at, count;
+
+ if (list < 0 || aud_playlist_updated_range (list, & at, & count) >=
+ PLAYLIST_UPDATE_METADATA)
+ update_dicts ();
+ }
+}
+
+static gboolean search_init (void)
+{
+ find_playlist ();
+
+ set_search_phrase ("");
+ items = index_new ();
+ selection = g_array_new (FALSE, FALSE, 1);
+
+ update_dicts ();
+
+ hook_associate ("playlist add complete", add_complete_cb, NULL);
+ hook_associate ("playlist scan complete", scan_complete_cb, NULL);
+ hook_associate ("playlist update", playlist_update_cb, NULL);
+
+ return TRUE;
+}
+
+static void search_cleanup (void)
+{
+ hook_dissociate ("playlist add complete", add_complete_cb);
+ hook_dissociate ("playlist scan complete", scan_complete_cb);
+ hook_dissociate ("playlist update", playlist_update_cb);
+
+ if (search_source)
+ {
+ g_source_remove (search_source);
+ search_source = 0;
+ }
+
+ g_strfreev (search_terms);
+ search_terms = NULL;
+
+ index_free (items);
+ items = NULL;
+ g_array_free (selection, TRUE);
+ selection = NULL;
+
+ destroy_added_table ();
+ destroy_dicts ();
+}
+
+static void do_add (gboolean play, gchar * * title)
+{
+ gint list = aud_playlist_by_unique_id (playlist_id);
+ gint n_items = index_count (items);
+ gint n_selected = 0;
+
+ Index * filenames = index_new ();
+ Index * tuples = index_new ();
+
+ for (gint i = 0; i < n_items; i ++)
+ {
+ if (! selection->data[i])
+ continue;
+
+ Item * item = index_get (items, i);
+
+ for (gint m = 0; m < item->matches->len; m ++)
+ {
+ gint entry = g_array_index (item->matches, gint, m);
+ index_append (filenames, aud_playlist_entry_get_filename (list, entry));
+ index_append (tuples, aud_playlist_entry_get_tuple (list, entry, TRUE));
+ }
+
+ n_selected ++;
+ if (title && n_selected == 1)
+ * title = item->name;
+ }
+
+ if (title && n_selected != 1)
+ * title = NULL;
+
+ aud_playlist_entry_insert_batch (aud_playlist_get_active (), -1, filenames,
+ tuples, play);
+}
+
+static void action_play (void)
+{
+ gint list = aud_playlist_get_temporary ();
+ aud_playlist_set_active (list);
+
+ if (aud_get_bool (NULL, "clear_playlist"))
+ aud_playlist_entry_delete (list, 0, aud_playlist_entry_count (list));
+ else
+ aud_playlist_queue_delete (list, 0, aud_playlist_queue_count (list));
+
+ do_add (TRUE, NULL);
+}
+
+static void action_create_playlist (void)
+{
+ gchar * title;
+
+ aud_playlist_insert (-1);
+ aud_playlist_set_active (aud_playlist_count () - 1);
+ do_add (FALSE, & title);
+
+ if (title)
+ aud_playlist_set_title (aud_playlist_count () - 1, title);
+}
+
+static void action_add_to_playlist (void)
+{
+ if (aud_playlist_by_unique_id (playlist_id) == aud_playlist_get_active ())
+ return;
+
+ do_add (FALSE, NULL);
+}
+
+static void list_get_value (void * user, gint row, gint column, GValue * value)
+{
+ g_return_if_fail (items && row >= 0 && row < index_count (items));
+
+ Item * item = index_get (items, row);
+ g_value_take_string (value, g_strdup_printf ("%s: %s",
+ _(field_names[item->field]), item->name));
+}
+
+static gboolean list_get_selected (void * user, gint row)
+{
+ g_return_val_if_fail (selection && row >= 0 && row < selection->len, FALSE);
+ return selection->data[row];
+}
+
+static void list_set_selected (void * user, gint row, gboolean selected)
+{
+ g_return_if_fail (selection && row >= 0 && row < selection->len);
+ selection->data[row] = selected;
+}
+
+static void list_select_all (void * user, gboolean selected)
+{
+ g_return_if_fail (selection);
+ memset (selection->data, selected, selection->len);
+}
+
+static void list_activate_row (void * user, gint row)
+{
+ action_play ();
+}
+
+static void list_right_click (void * user, GdkEventButton * event)
+{
+ GtkWidget * menu = gtk_menu_new ();
+
+ GtkWidget * item = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_PLAY, NULL);
+ g_signal_connect (item, "activate", (GCallback) action_play, NULL);
+ gtk_widget_show (item);
+ gtk_menu_shell_append ((GtkMenuShell *) menu, item);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Create Playlist"));
+ gtk_image_menu_item_set_image ((GtkImageMenuItem *) item,
+ gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU));
+ g_signal_connect (item, "activate", (GCallback) action_create_playlist, NULL);
+ gtk_widget_show (item);
+ gtk_menu_shell_append ((GtkMenuShell *) menu, item);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Add to Playlist"));
+ gtk_image_menu_item_set_image ((GtkImageMenuItem *) item,
+ gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU));
+ g_signal_connect (item, "activate", (GCallback) action_add_to_playlist, NULL);
+ gtk_widget_show (item);
+ gtk_menu_shell_append ((GtkMenuShell *) menu, item);
+
+ gtk_menu_popup ((GtkMenu *) menu, NULL, NULL, NULL, NULL, event->button, event->time);
+}
+
+static const AudguiListCallbacks list_callbacks = {
+ .get_value = list_get_value,
+ .get_selected = list_get_selected,
+ .set_selected = list_set_selected,
+ .select_all = list_select_all,
+ .activate_row = list_activate_row,
+ .right_click = list_right_click};
+
+static void entry_cb (GtkEntry * entry, void * unused)
+{
+ set_search_phrase (gtk_entry_get_text ((GtkEntry *) entry));
+ schedule_search ();
+}
+
+static void refresh_cb (GtkButton * button, GtkWidget * chooser)
+{
+ gchar * path = gtk_file_chooser_get_filename ((GtkFileChooser *) chooser);
+ begin_add (path);
+ g_free (path);
+
+ update_dicts ();
+}
+
+static void * search_get_widget (void)
+{
+ GtkWidget * vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width ((GtkContainer *) vbox, 3);
+
+ GtkWidget * entry = gtk_entry_new ();
+#if GTK_CHECK_VERSION (2, 16, 0)
+ gtk_entry_set_icon_from_stock ((GtkEntry *) entry, GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND);
+#endif
+#if GTK_CHECK_VERSION (3, 2, 0)
+ gtk_entry_set_placeholder_text ((GtkEntry *) entry, _("Search library"));
+#endif
+ gtk_box_pack_start ((GtkBox *) vbox, entry, FALSE, FALSE, 0);
+
+ help_label = gtk_label_new (_("To import your music library into "
+ "Audacious, choose a folder and then click the \"refresh\" icon."));
+ gtk_widget_set_size_request (help_label, 194, -1);
+ gtk_label_set_line_wrap ((GtkLabel *) help_label, TRUE);
+ g_signal_connect (help_label, "destroy", (GCallback) gtk_widget_destroyed, & help_label);
+ gtk_widget_set_no_show_all (help_label, TRUE);
+ gtk_box_pack_start ((GtkBox *) vbox, help_label, TRUE, FALSE, 0);
+
+ wait_label = gtk_label_new (_("Please wait ..."));
+ g_signal_connect (wait_label, "destroy", (GCallback) gtk_widget_destroyed, & wait_label);
+ gtk_widget_set_no_show_all (wait_label, TRUE);
+ gtk_box_pack_start ((GtkBox *) vbox, wait_label, TRUE, FALSE, 0);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ g_signal_connect (scrolled, "destroy", (GCallback) gtk_widget_destroyed, & scrolled);
+ gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scrolled, GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy ((GtkScrolledWindow *) scrolled,
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_widget_set_no_show_all (scrolled, TRUE);
+ gtk_box_pack_start ((GtkBox *) vbox, scrolled, TRUE, TRUE, 0);
+
+ results_list = audgui_list_new (& list_callbacks, NULL, items ? index_count (items) : 0);
+ g_signal_connect (results_list, "destroy", (GCallback) gtk_widget_destroyed, & results_list);
+ gtk_tree_view_set_headers_visible ((GtkTreeView *) results_list, FALSE);
+ audgui_list_add_column (results_list, NULL, 0, G_TYPE_STRING, -1);
+ gtk_container_add ((GtkContainer *) scrolled, results_list);
+
+ GtkWidget * hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_end ((GtkBox *) vbox, hbox, FALSE, FALSE, 0);
+
+ GtkWidget * chooser = gtk_file_chooser_button_new (_("Choose Folder"),
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ gtk_box_pack_start ((GtkBox *) hbox, chooser, TRUE, TRUE, 0);
+
+ gchar * path = get_path ();
+ gtk_file_chooser_set_filename ((GtkFileChooser *) chooser, path);
+ g_free (path);
+
+ GtkWidget * button = gtk_button_new ();
+ gtk_container_add ((GtkContainer *) button, gtk_image_new_from_stock
+ (GTK_STOCK_REFRESH, GTK_ICON_SIZE_BUTTON));
+ gtk_button_set_relief ((GtkButton *) button, GTK_RELIEF_NONE);
+ gtk_box_pack_start ((GtkBox *) hbox, button, FALSE, FALSE, 0);
+
+ g_signal_connect (entry, "changed", (GCallback) entry_cb, NULL);
+ g_signal_connect (entry, "activate", (GCallback) action_play, NULL);
+ g_signal_connect (button, "clicked", (GCallback) refresh_cb, chooser);
+
+ gtk_widget_show_all (vbox);
+ gtk_widget_show (results_list);
+ show_hide_widgets ();
+
+ return vbox;
+}
+
+AUD_GENERAL_PLUGIN
+(
+ .name = "Search Tool",
+ .init = search_init,
+ .cleanup = search_cleanup,
+ .get_widget = search_get_widget
+)
diff --git a/src/sid/Makefile b/src/sid/Makefile
index 920bdf3..4a8fbc4 100644
--- a/src/sid/Makefile
+++ b/src/sid/Makefile
@@ -1,19 +1,14 @@
PLUGIN = sid${PLUGIN_SUFFIX}
SRCS = xs_init.c \
- xs_about.c \
xs_support.c \
xs_config.c \
xs_length.c \
- xs_genui.c \
- xs_glade.c \
- xs_interface.c \
+ xs_md5.c \
xs_stil.c \
- xs_fileinfo.c \
xs_filter.c \
xs_sidplay1.cc \
xs_sidplay2.cc \
- xs_curve.c \
xs_slsup.c \
xs_player.c \
xmms-sid.c
@@ -25,5 +20,5 @@ plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
CXXFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} -D_REENTRANT -I../.. -DAUDACIOUS_PLUGIN ${MOWGLI_CFLAGS} ${SIDPLAY1_CFLAGS} ${SIDPLAY2_CFLAGS} ${BUILDERS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} -D_REENTRANT -I../.. -DAUDACIOUS_PLUGIN ${SIDPLAY1_CFLAGS} ${SIDPLAY2_CFLAGS} ${BUILDERS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS}
LIBS += -lm ${BUILDERS_LDFLAGS} ${SIDPLAY1_LIBS} ${SIDPLAY2_LIBS} ${BUILDERS_LIBS} ${GTK_LIBS} ${GLIB_LIBS} -lstdc++
diff --git a/src/sid/xmms-sid.c b/src/sid/xmms-sid.c
index 8aa0ea9..f749f7a 100644
--- a/src/sid/xmms-sid.c
+++ b/src/sid/xmms-sid.c
@@ -31,9 +31,6 @@
#include "xs_length.h"
#include "xs_stil.h"
#include "xs_filter.h"
-#include "xs_fileinfo.h"
-#include "xs_interface.h"
-#include "xs_glade.h"
#include "xs_player.h"
#include "xs_slsup.h"
@@ -80,9 +77,6 @@ void xs_reinit(void)
{
XSDEBUG("xs_reinit() thread = %p\n", g_thread_self());
- /* Stop playing, if we are */
- xs_stop(NULL);
-
XS_MUTEX_LOCK(xs_status);
XS_MUTEX_LOCK(xs_cfg);
@@ -137,18 +131,17 @@ void xs_reinit(void)
/*
* Initialize XMMS-SID
*/
-void xs_init(void)
+gboolean xs_init (void)
{
XSDEBUG("xs_init()\n");
/* Initialize and get configuration */
xs_init_configuration();
- xs_read_configuration();
/* Initialize subsystems */
xs_reinit();
- XSDEBUG("OK\n");
+ return TRUE;
}
@@ -161,8 +154,12 @@ void xs_close(void)
xs_tuneinfo_free(xs_status.tuneInfo);
xs_status.tuneInfo = NULL;
- xs_status.sidPlayer->plrDeleteSID(&xs_status);
- xs_status.sidPlayer->plrClose(&xs_status);
+
+ if (xs_status.sidPlayer)
+ {
+ xs_status.sidPlayer->plrDeleteSID (& xs_status);
+ xs_status.sidPlayer->plrClose (& xs_status);
+ }
xs_songlen_close();
xs_stil_close();
@@ -179,43 +176,35 @@ gboolean xs_play_file(InputPlayback *pb, const gchar *filename, VFSFile *file, g
xs_tuneinfo_t *tmpTune;
gboolean audioOpen = FALSE;
gint audioBufSize, bufRemaining, tmpLength, subTune = -1;
- gchar *tmpFilename, *audioBuffer = NULL, *oversampleBuffer = NULL;
+ gchar *audioBuffer = NULL, *oversampleBuffer = NULL;
Tuple *tmpTuple;
assert(pb);
assert(xs_status.sidPlayer != NULL);
- XSDEBUG("play '%s'\n", pb->filename);
-
- tmpFilename = filename_split_subtune(pb->filename, &subTune);
- if (tmpFilename == NULL) return TRUE;
+ uri_parse (filename, NULL, NULL, NULL, & subTune);
/* Get tune information */
XS_MUTEX_LOCK(xs_status);
- if ((xs_status.tuneInfo = xs_status.sidPlayer->plrGetSIDInfo(tmpFilename)) == NULL) {
+
+ if (! (xs_status.tuneInfo = xs_status.sidPlayer->plrGetSIDInfo (filename)))
+ {
XS_MUTEX_UNLOCK(xs_status);
- g_free(tmpFilename);
- return TRUE;
+ return FALSE;
}
/* Initialize the tune */
- if (!xs_status.sidPlayer->plrLoadSID(&xs_status, tmpFilename)) {
+ if (! xs_status.sidPlayer->plrLoadSID (& xs_status, filename))
+ {
XS_MUTEX_UNLOCK(xs_status);
- g_free(tmpFilename);
xs_tuneinfo_free(xs_status.tuneInfo);
xs_status.tuneInfo = NULL;
- return TRUE;
+ return FALSE;
}
- g_free(tmpFilename);
- tmpFilename = NULL;
-
- XSDEBUG("load ok\n");
+ gboolean error = FALSE;
/* Set general status information */
- pb->playing = TRUE;
- pb->error = FALSE;
- pb->eof = FALSE;
tmpTune = xs_status.tuneInfo;
if (subTune < 1 || subTune > xs_status.tuneInfo->nsubTunes)
@@ -277,7 +266,6 @@ gboolean xs_play_file(InputPlayback *pb, const gchar *filename, VFSFile *file, g
xs_status.audioFrequency,
channels);
- pb->error = TRUE;
XS_MUTEX_UNLOCK(xs_status);
goto xs_err_exit;
}
@@ -289,14 +277,28 @@ gboolean xs_play_file(InputPlayback *pb, const gchar *filename, VFSFile *file, g
xs_status.sidPlayer->plrUpdateSIDInfo(&xs_status);
tmpTuple = tuple_new_from_filename(tmpTune->sidFilename);
xs_get_song_tuple_info(tmpTuple, tmpTune, xs_status.currSong);
+
+ xs_status.stop_flag = FALSE;
XS_MUTEX_UNLOCK(xs_status);
+
pb->set_tuple(pb, tmpTuple);
- pb->set_params(pb, NULL, 0, -1, xs_status.audioFrequency, channels);
+ pb->set_params (pb, -1, xs_status.audioFrequency, channels);
pb->set_pb_ready(pb);
- XS_MUTEX_UNLOCK(xs_status);
XSDEBUG("playing\n");
- while (pb->playing) {
+
+ while (1)
+ {
+ XS_MUTEX_LOCK (xs_status);
+
+ if (xs_status.stop_flag)
+ {
+ XS_MUTEX_UNLOCK (xs_status);
+ break;
+ }
+
+ XS_MUTEX_UNLOCK (xs_status);
+
/* Render audio data */
if (xs_status.oversampleEnable) {
/* Perform oversampled rendering */
@@ -311,7 +313,6 @@ gboolean xs_play_file(InputPlayback *pb, const gchar *filename, VFSFile *file, g
if (xs_filter_rateconv(audioBuffer, oversampleBuffer,
xs_status.audioFormat, xs_status.oversampleFactor, bufRemaining) < 0) {
xs_error("Oversampling rate-conversion pass failed.\n");
- pb->error = TRUE;
goto xs_err_exit;
}
} else {
@@ -326,20 +327,20 @@ gboolean xs_play_file(InputPlayback *pb, const gchar *filename, VFSFile *file, g
if (xs_cfg.playMaxTimeUnknown) {
if (tmpLength < 0 &&
pb->output->written_time() >= xs_cfg.playMaxTime * 1000)
- pb->playing = FALSE;
+ break;
} else {
if (pb->output->written_time() >= xs_cfg.playMaxTime * 1000)
- pb->playing = FALSE;
+ break;
}
}
if (tmpLength >= 0) {
if (pb->output->written_time() >= tmpLength * 1000)
- pb->playing = FALSE;
+ break;
}
}
-xs_err_exit:
+DONE:
XSDEBUG("out of playing loop\n");
/* Close audio output plugin */
@@ -358,8 +359,7 @@ xs_err_exit:
* next entry in the playlist .. or whatever it wishes.
*/
XS_MUTEX_LOCK(xs_status);
- pb->playing = FALSE;
- pb->eof = TRUE;
+ xs_status.stop_flag = TRUE;
/* Free tune information */
xs_status.sidPlayer->plrDeleteSID(&xs_status);
@@ -370,7 +370,11 @@ xs_err_exit:
/* Exit the playing thread */
XSDEBUG("exiting thread, bye.\n");
- return ! pb->error;
+ return ! error;
+
+xs_err_exit:
+ error = TRUE;
+ goto DONE;
}
@@ -390,15 +394,15 @@ void xs_stop(InputPlayback *pb)
/* Lock xs_status and stop playing thread */
XS_MUTEX_LOCK(xs_status);
- if (pb != NULL && pb->playing) {
+
+ if (! xs_status.stop_flag)
+ {
XSDEBUG("stopping...\n");
- pb->playing = FALSE;
+ xs_status.stop_flag = TRUE;
pb->output->abort_write ();
- XS_MUTEX_UNLOCK(xs_status);
- } else {
- XS_MUTEX_UNLOCK(xs_status);
}
+ XS_MUTEX_UNLOCK (xs_status);
XSDEBUG("ok\n");
}
@@ -406,7 +410,7 @@ void xs_stop(InputPlayback *pb)
/*
* Pause/unpause the playing
*/
-void xs_pause(InputPlayback *pb, short pauseState)
+void xs_pause (InputPlayback * pb, gboolean pauseState)
{
XS_MUTEX_LOCK(xs_status);
pb->output->pause(pauseState);
@@ -419,21 +423,28 @@ void xs_pause(InputPlayback *pb, short pauseState)
*/
static void xs_get_song_tuple_info(Tuple *tuple, xs_tuneinfo_t *info, gint subTune)
{
- gchar *tmpStr, tmpStr2[64];
-
- tuple_associate_string_rel(tuple, FIELD_TITLE, NULL, str_to_utf8(info->sidName));
- tuple_associate_string_rel(tuple, FIELD_ARTIST, NULL, str_to_utf8(info->sidComposer));
- tuple_associate_string_rel(tuple, FIELD_COPYRIGHT, NULL, str_to_utf8(info->sidCopyright));
- tuple_associate_string(tuple, -1, "sid-format", info->sidFormat);
- tuple_associate_string(tuple, FIELD_CODEC, NULL, "Commodore 64 SID PlaySID/RSID");
-
+ gchar *tmpStr;
+
+ tmpStr = str_to_utf8(info->sidName);
+ tuple_set_str(tuple, FIELD_TITLE, NULL, tmpStr);
+ g_free(tmpStr);
+ tmpStr = str_to_utf8(info->sidComposer);
+ tuple_set_str(tuple, FIELD_ARTIST, NULL, tmpStr);
+ g_free(tmpStr);
+ tmpStr = str_to_utf8(info->sidCopyright);
+ tuple_set_str(tuple, FIELD_COPYRIGHT, NULL, tmpStr);
+ g_free(tmpStr);
+ tuple_set_str(tuple, FIELD_CODEC, NULL, info->sidFormat);
+
+#if 0
switch (info->sidModel) {
case XS_SIDMODEL_6581: tmpStr = "6581"; break;
case XS_SIDMODEL_8580: tmpStr = "8580"; break;
case XS_SIDMODEL_ANY: tmpStr = "ANY"; break;
default: tmpStr = "?"; break;
}
- tuple_associate_string(tuple, -1, "sid-model", tmpStr);
+ tuple_set_str(tuple, -1, "sid-model", tmpStr);
+#endif
/* Get sub-tune information, if available */
if (subTune < 0 || info->startTune > info->nsubTunes)
@@ -441,8 +452,9 @@ static void xs_get_song_tuple_info(Tuple *tuple, xs_tuneinfo_t *info, gint subTu
if (subTune > 0 && subTune <= info->nsubTunes) {
gint tmpInt = info->subTunes[subTune - 1].tuneLength;
- tuple_associate_int(tuple, FIELD_LENGTH, NULL, (tmpInt < 0) ? -1 : tmpInt * 1000);
+ tuple_set_int(tuple, FIELD_LENGTH, NULL, (tmpInt < 0) ? -1 : tmpInt * 1000);
+#if 0
tmpInt = info->subTunes[subTune - 1].tuneSpeed;
if (tmpInt > 0) {
switch (tmpInt) {
@@ -459,79 +471,34 @@ static void xs_get_song_tuple_info(Tuple *tuple, xs_tuneinfo_t *info, gint subTu
} else
tmpStr = "?";
- tuple_associate_string(tuple, -1, "sid-speed", tmpStr);
+ tuple_set_str(tuple, -1, "sid-speed", tmpStr);
+#endif
} else
subTune = 1;
- tuple_associate_int(tuple, FIELD_SUBSONG_NUM, NULL, info->nsubTunes);
- tuple_associate_int(tuple, FIELD_SUBSONG_ID, NULL, subTune);
- tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, subTune);
-
- if (xs_cfg.titleOverride)
- tuple_associate_string(tuple, FIELD_FORMATTER, NULL, xs_cfg.titleFormat);
+ tuple_set_int(tuple, FIELD_SUBSONG_NUM, NULL, info->nsubTunes);
+ tuple_set_int(tuple, FIELD_SUBSONG_ID, NULL, subTune);
+ tuple_set_int(tuple, FIELD_TRACK_NUMBER, NULL, subTune);
}
static void xs_fill_subtunes(Tuple *tuple, xs_tuneinfo_t *info)
{
gint count, found;
-
- tuple->subtunes = g_new(gint, info->nsubTunes);
+ gint subtunes[info->nsubTunes];
for (found = count = 0; count < info->nsubTunes; count++) {
if (count + 1 == info->startTune || !xs_cfg.subAutoMinOnly ||
info->subTunes[count].tuneLength >= xs_cfg.subAutoMinTime)
- tuple->subtunes[found++] = count + 1;
+ subtunes[found ++] = count + 1;
}
- tuple->nsubtunes = found;
+ tuple_set_subtunes (tuple, found, subtunes);
}
-
-Tuple * xs_get_song_tuple(const gchar *filename)
-{
- Tuple *tuple;
- gchar *tmpFilename;
- xs_tuneinfo_t *info;
- gint tune = -1;
-
- /* Get information from URL */
- tmpFilename = filename_split_subtune(filename, &tune);
- if (tmpFilename == NULL) return NULL;
-
- tuple = tuple_new_from_filename(tmpFilename);
- if (tuple == NULL) {
- g_free(tmpFilename);
- return NULL;
- }
-
- if (xs_status.sidPlayer == NULL)
- return tuple;
-
- /* Get tune information from emulation engine */
- XS_MUTEX_LOCK(xs_status);
- info = xs_status.sidPlayer->plrGetSIDInfo(tmpFilename);
- XS_MUTEX_UNLOCK(xs_status);
- g_free(tmpFilename);
-
- if (info == NULL)
- return tuple;
-
- xs_get_song_tuple_info(tuple, info, tune);
-
- if (xs_cfg.subAutoEnable && info->nsubTunes > 1 && tune < 0)
- xs_fill_subtunes(tuple, info);
-
- xs_tuneinfo_free(info);
-
- return tuple;
-}
-
-
Tuple * xs_probe_for_tuple(const gchar *filename, xs_file_t *fd)
{
Tuple *tuple;
- gchar *tmpFilename;
xs_tuneinfo_t *info;
gint tune = -1;
@@ -546,20 +513,13 @@ Tuple * xs_probe_for_tuple(const gchar *filename, xs_file_t *fd)
XS_MUTEX_UNLOCK(xs_status);
/* Get information from URL */
- tmpFilename = filename_split_subtune(filename, &tune);
- if (tmpFilename == NULL) return NULL;
-
- tuple = tuple_new_from_filename(tmpFilename);
- if (tuple == NULL) {
- g_free(tmpFilename);
- return NULL;
- }
+ tuple = tuple_new_from_filename (filename);
+ tune = tuple_get_int (tuple, FIELD_SUBSONG_NUM, NULL);
/* Get tune information from emulation engine */
XS_MUTEX_LOCK(xs_status);
- info = xs_status.sidPlayer->plrGetSIDInfo(tmpFilename);
+ info = xs_status.sidPlayer->plrGetSIDInfo (filename);
XS_MUTEX_UNLOCK(xs_status);
- g_free(tmpFilename);
if (info == NULL)
return tuple;
diff --git a/src/sid/xmms-sid.glade b/src/sid/xmms-sid.glade
deleted file mode 100644
index 7a3d529..0000000
--- a/src/sid/xmms-sid.glade
+++ /dev/null
@@ -1,4177 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-
-<widget class="GtkWindow" id="xs_configwin">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Audacious-SID configuration</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <signal name="delete_event" handler="xs_configwin_delete"/>
-
- <child>
- <widget class="GtkVBox" id="w_vbox1">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkNotebook" id="cfg_notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="w_hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="cfg_sndres_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox9">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_res_8bit">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">8-bit</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_res_16bit">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">16-bit</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_res_8bit</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Resolution:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_channels_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox10">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_chn_mono">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Mono</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_chn_stereo">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Stereo</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_chn_mono</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_chn_autopan">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Autopanning</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_chn_mono</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Channels:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_samplerate_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="w_hbox4">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCombo" id="cfg_samplerate_combo">
- <property name="visible">True</property>
- <property name="value_in_list">False</property>
- <property name="allow_empty">False</property>
- <property name="case_sensitive">False</property>
- <property name="enable_arrow_keys">True</property>
- <property name="enable_arrows_always">False</property>
-
- <child internal-child="entry">
- <widget class="GtkEntry" id="cfg_samplerate">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- </child>
-
- <child internal-child="list">
- <widget class="GtkList" id="convertwidget1">
- <property name="visible">True</property>
- <property name="selection_mode">GTK_SELECTION_BROWSE</property>
-
- <child>
- <widget class="GtkListItem" id="convertwidget2">
- <property name="visible">True</property>
-
- <child>
- <widget class="GtkLabel" id="convertwidget3">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Hz</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label54">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Samplerate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_oversample_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox27">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_oversample">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use oversampling</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_oversample_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_oversample_box">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">4</property>
-
- <child>
- <widget class="GtkLabel" id="cfg_oversample_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Factor:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="cfg_oversample_factor">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">2 2 8 1 1 1</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="cfg_oversample_label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Large factors require more CPU-power</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Oversampling:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="w_vbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="w_hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="cfg_clock_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox4">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_emu_clock_force">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled, this option &quot;forces&quot; the emulation engine to use the selected clock speed/frequency. Otherwise the speed is determined from played file itself.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Force speed</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_clock_pal">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">PAL is the european TV standard, which uses 50Hz vertical refresh frequency. Most of SID-tunes have been made for PAL computers.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">PAL (50 Hz)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_clock_ntsc">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">NTSC is the TV standard with 60Hz vertical refresh rate (and other features that differ from PAL). It is mainly used in United States, Japan and certain other countries.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">NTSC (60 Hz)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_clock_pal</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Clock speed:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_sid_model_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_emu_sid_force">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled, this option &quot;forces&quot; the emulation engine to use the selected SID-chip model. Otherwise the preferred SID model is determined from the file (if PSIDv2NG type) or if not available, this setting is used.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Force model</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_mos6581">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 in few ways, having much fuller filter (which, due to design error, is never same between two different SID-chips) and has the &quot;volume adjustment bug&quot;, which enables playing of digital samples.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">MOS 6581</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_mos8580">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">MOS 8580</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_mos6581</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">SID model:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_emulib_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox26">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_sidplay1">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most cases, though.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">SIDPlay 1 (frame-based)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_emu_sidplay1_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_sidplay2">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact emulation.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">SIDPlay 2 (cycle-based)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_sidplay1</property>
- <signal name="toggled" handler="xs_cfg_emu_sidplay2_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Emulation library selection:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_memmode_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox5">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_mem_real">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Real C64 (SIDPlay 2 only)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_mem_banksw">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Bank switching</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_mem_real</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_mem_transrom">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Transparent ROM</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_mem_real</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_mem_playsid">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">PlaySID environment</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_mem_real</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Memory mode:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Emu#1</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="w_vbox29">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="cfg_sidplay2_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox30">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_emu_sp2_opt">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">This setting can be used to enable libSIDPlay2's &quot;optimization mode&quot;, which in downgrades the emulation from cycle-exact to something similar to frame-exact. The result is lower CPU usage, but worse accuracy.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Optimization mode (faster, inaccurate)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_sp2_resid">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">reSID is the software SID-chip simulator based on SID reverse-engineering, created by Dag Lem. It is probably the closest thing to real SID available as software-only emulation.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">reSID-emulation</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_sp2_hardsid">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a real SID-chip. Software can be used to control the HardSID and combined with software emulation of rest of C64 via libSIDPlay2 HardSID can be used to achieve &quot;near 100%&quot; similarity to real C64. For more information, see http://www.hardsid.com/</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">HardSID</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_sp2_resid</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label9">
- <property name="visible">True</property>
- <property name="label" translatable="yes">SIDPlay 2 options:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_resid_frame">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox37">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_resid_fast">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Fast (nearest neighbour)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_resid_int">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Uses linear interpolation between samples, yielding higher audio quality with less sampling noise.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Linear interpolation</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_resid_fast</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_resid_res_fast">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Resampling</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_resid_fast</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="cfg_emu_resid_res_int">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Resampling (FIR)</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">cfg_emu_resid_fast</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="label" translatable="yes">reSID sampling options:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label48">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Emu#2</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="w_vbox25">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_emu_filters">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">This option enables emulation of SID filter. The filter is an essential part of SID's sound capacity, but accurate emulation of it may require quite much CPU power. However, if filter emulation is disabled, tunes won't sound authentic at all if they utilize the filter.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Emulate filters</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_emu_filters_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkNotebook" id="cfg_filters_notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">True</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkHBox" id="cfg_box_filter_sidplay1">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="cfg_sp1_frm_fs">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVScale" id="cfg_sp1_filter_fs">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">2</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">0 0 1000 1 100 0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label11">
- <property name="visible">True</property>
- <property name="label" translatable="yes">FS</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_sp1_frm_fm">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVScale" id="cfg_sp1_filter_fm">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">2</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">0 0 100 1 10 0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes">FM</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_sp1_frm_ft">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVScale" id="cfg_sp1_filter_ft">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_value">True</property>
- <property name="value_pos">GTK_POS_TOP</property>
- <property name="digits">2</property>
- <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
- <property name="inverted">False</property>
- <property name="adjustment">0 0 1 0.01 0.1 0</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="label" translatable="yes">FT</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="w_vbox17">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkButton" id="cfg_sp1_filter_reset">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Reset values</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sp1_filter_reset"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label55">
- <property name="visible">True</property>
- <property name="label" translatable="yes">SIDPlay1</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="cfg_box_filter_sidplay2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="cfg_sp_filter_controlbox">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCombo" id="cfg_sp2_filter_combo">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="value_in_list">False</property>
- <property name="allow_empty">False</property>
- <property name="case_sensitive">False</property>
- <property name="enable_arrow_keys">True</property>
- <property name="enable_arrows_always">False</property>
-
- <child internal-child="entry">
- <widget class="GtkEntry" id="cfg_sp2_filter_combo_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- </child>
-
- <child internal-child="list">
- <widget class="GtkList" id="convertwidget4">
- <property name="visible">True</property>
- <property name="selection_mode">GTK_SELECTION_BROWSE</property>
-
- <child>
- <widget class="GtkListItem" id="convertwidget5">
- <property name="visible">True</property>
-
- <child>
- <widget class="GtkLabel" id="convertwidget6">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table3">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">3</property>
- <property name="homogeneous">True</property>
- <property name="row_spacing">4</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkButton" id="cfg_sp2_filter_export">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Export</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sp2_filter_export"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="cfg_sp2_filter_load">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sp2_filter_load"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="cfg_sp2_filter_save">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Save</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sp2_filter_save"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="cfg_sp2_filter_import">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Import</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sp2_filter_import"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="cfg_sp2_filter_delete">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Delete</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sp2_filter_delete"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cfg_sp2_filter_frame">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label14">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Filter curve:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label56">
- <property name="visible">True</property>
- <property name="label" translatable="yes">SIDPlay2</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label24">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Filters</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="w_vbox20">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="w_frame29">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox32">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_mintime_enable">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled, the tune is played at least for the specified time, adding silence to the end if necessary.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Play at least for specified time</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_mintime_enable_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_mintime_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkLabel" id="cfg_mintime_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Playtime:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="cfg_mintime">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">15 1 32767 1 60 60</property>
- <signal name="changed" handler="xs_cfg_mintime_changed"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="cfg_mintime_label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">seconds</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">2</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label15">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Minimum playtime:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="w_frame21">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox21">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_maxtime_enable">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled, tune is played until specified duration is reached (aka maximum playtime).</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Play for specified time maximum</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_maxtime_enable_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_maxtime_unknown">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled, the maximum playtime is applied only if song/tune length is not known.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Only when song length is unknown</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_maxtime_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkLabel" id="cfg_maxtime_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Playtime:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="cfg_maxtime">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">150 1 32767 1 60 60</property>
- <signal name="changed" handler="xs_cfg_maxtime_changed"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="cfg_maxtime_label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">seconds</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">2</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label16">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Maximum playtime:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="w_frame18">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox18">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_sld_enable">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">This option enables using of XSIDPLAY compatible song length database. (Refer to Audacious-SID documentation for more information)</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use XSIDPLAY-compatible database</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_sldb_enable_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_sld_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">4</property>
-
- <child>
- <widget class="GtkLabel" id="cfg_sld_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">DB-file:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="cfg_sld_dbpath">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Database path and filename</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="cfg_sld_dbbrowse">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Browse for song length-database file</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_sldb_browse"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-open</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label30">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Browse</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Song length database:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label26">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Songlength</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame1">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_ftitle_override">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">By enabling this option you can specify a custom Tuplez formatting string for SID-files. The SID-plugin specific Tuplez tags are described shortly below.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Override generic Tuplez format string</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_ftitle_override_toggled" last_modification_time="Wed, 05 Sep 2007 21:51:50 GMT"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="cfg_ftitle_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkEntry" id="cfg_ftitle_format">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Tuplez format string for SID-files</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="cfg_ftitle_descs">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;u&gt;SID-specific Tuplez fields:&lt;/u&gt;
-
-&lt;b&gt;sid-format&lt;/b&gt; - Specific fileformat
-&lt;b&gt;sid-model&lt;/b&gt; - 6581 or 8580
-&lt;b&gt;sid-speed&lt;/b&gt; - Timing or speed: PAL/NTSC/etc.
-
-&lt;u&gt;Other &quot;special&quot; fields set:&lt;/u&gt;
-
-&lt;b&gt;subsong-num, subsong-id&lt;/b&gt;</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">8</property>
- <property name="ypad">8</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label29">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Song title format:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label27">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Title</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="w_vbox19">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="w_frame31">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox35">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_subauto_enable">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If enabled, sub-tunes of each file will be added to playlist. If disabled, only the default sub-tune will be added.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Add sub-tunes to playlist</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_subauto_enable_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_subauto_min_only">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Only add sub-tunes that have a duration of at least specified time.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Only tunes with specified minimum duration</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_subauto_min_only_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_subauto_box">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkLabel" id="w_label52">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Playtime:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="cfg_subauto_mintime">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">False</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">False</property>
- <property name="wrap">False</property>
- <property name="adjustment">15 1 32767 1 60 60</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label53">
- <property name="visible">True</property>
- <property name="label" translatable="yes">seconds</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sub-tune handling:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="w_frame7">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox8">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkCheckButton" id="cfg_stil_enable">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">If this option is enabled (and the database &amp; HVSC settings below are correctly set), Audacious-SID will use and display additional information from STIL database when HVSC SIDs are played.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Use STIL database</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="xs_cfg_stil_enable_toggled"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_stil_box1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="cfg_stil_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">STIL file:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">4</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="w_alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkEntry" id="cfg_stil_dbpath">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Path and filename of STIL database file (STIL.txt), usually found from HVSC's DOCUMENTS-subdirectory.</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="w_alignment1">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0.300000995398</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkButton" id="cfg_stil_browse">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Browse for STIL-database file</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_stil_browse"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="stock">gtk-open</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label31">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Browse</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="cfg_stil_box2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="cfg_hvsc_label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">HVSC path:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">4</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="w_alignment6">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkEntry" id="cfg_hvsc_path">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Path to base-directory of your High Voltage SID Collection (HVSC), for example /media/C64Music/</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkAlignment" id="w_alignment7">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">0.300000995398</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkButton" id="cfg_hvsc_browse">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Browse for HVSC path</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_hvsc_browse"/>
-
- <child>
- <widget class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">0</property>
- <property name="right_padding">0</property>
-
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkImage" id="image3">
- <property name="visible">True</property>
- <property name="stock">gtk-open</property>
- <property name="icon_size">4</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label32">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Browse</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes">SID Tune Information List (STIL) database:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Misc</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox1">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkButton" id="cfg_cancel">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Cancel any changes</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_cancel"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="cfg_ok">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Accept and update changes</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_cfg_ok"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkWindow" id="xs_fileinfowin">
- <property name="width_request">400</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Audacious-SID Fileinfo</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <signal name="delete_event" handler="xs_fileinfo_delete"/>
-
- <child>
- <widget class="GtkVBox" id="w_vbox14">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="w_frame14">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkTable" id="table1">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkLabel" id="w_label16">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Filename:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label17">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Songname:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label18">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Composer:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label19">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Copyright:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fileinfo_filename">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fileinfo_songname">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fileinfo_composer">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fileinfo_copyright">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label23">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Song Information:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="w_frame15">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkVBox" id="w_vbox15">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">2</property>
-
- <child>
- <widget class="GtkOptionMenu" id="fileinfo_sub_tune">
- <property name="border_width">2</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="history">-1</property>
-
- <child internal-child="menu">
- <widget class="GtkMenu" id="convertwidget7">
- <property name="visible">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="table2">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkLabel" id="w_label41">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Author:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fileinfo_sub_author">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label50">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Name:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="fileinfo_sub_name">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="w_label51">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Duration:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="entry1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â—</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTextView" id="fileinfo_sub_info">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="overwrite">False</property>
- <property name="accepts_tab">True</property>
- <property name="justification">GTK_JUSTIFY_LEFT</property>
- <property name="wrap_mode">GTK_WRAP_WORD</property>
- <property name="cursor_visible">True</property>
- <property name="pixels_above_lines">0</property>
- <property name="pixels_below_lines">0</property>
- <property name="pixels_inside_wrap">0</property>
- <property name="left_margin">0</property>
- <property name="right_margin">0</property>
- <property name="indent">0</property>
- <property name="text" translatable="yes"></property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label24">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sub-tune Information:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="button2">
- <property name="border_width">4</property>
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="label" translatable="yes">Close</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_fileinfo_ok"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkFileSelection" id="xs_sldb_fs">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select HVSC song length database</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="show_fileops">True</property>
- <signal name="delete_event" handler="xs_sldb_fs_delete"/>
-
- <child internal-child="cancel_button">
- <widget class="GtkButton" id="cancel_button2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_sldb_fs_cancel"/>
- </widget>
- </child>
-
- <child internal-child="ok_button">
- <widget class="GtkButton" id="ok_button2">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_sldb_fs_ok"/>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkFileSelection" id="xs_stil_fs">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select STIL-database</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="show_fileops">True</property>
- <signal name="delete_event" handler="xs_stil_fs_delete"/>
-
- <child internal-child="cancel_button">
- <widget class="GtkButton" id="cancel_button3">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_stil_fs_cancel"/>
- </widget>
- </child>
-
- <child internal-child="ok_button">
- <widget class="GtkButton" id="ok_button3">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_stil_fs_ok"/>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkFileSelection" id="xs_hvsc_fs">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select HVSC location prefix</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="show_fileops">True</property>
- <signal name="delete_event" handler="xs_hvsc_fs_delete"/>
-
- <child internal-child="cancel_button">
- <widget class="GtkButton" id="cancel_button4">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_hvsc_fs_cancel"/>
- </widget>
- </child>
-
- <child internal-child="ok_button">
- <widget class="GtkButton" id="ok_button4">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_hvsc_fs_ok"/>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkFileSelection" id="xs_filter_import_fs">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select SIDPlay2 filters file for importing</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="show_fileops">True</property>
- <signal name="delete_event" handler="xs_filter_import_fs_delete"/>
-
- <child internal-child="cancel_button">
- <widget class="GtkButton" id="cancel_button64">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_filter_import_fs_cancel"/>
- </widget>
- </child>
-
- <child internal-child="ok_button">
- <widget class="GtkButton" id="ok_button64">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_filter_import_fs_ok"/>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkFileSelection" id="xs_filter_export_fs">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select SIDPlay2 filters file for exporting</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="show_fileops">True</property>
- <signal name="delete_event" handler="xs_filter_export_fs_delete"/>
-
- <child internal-child="cancel_button">
- <widget class="GtkButton" id="cancel_button64">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_filter_export_fs_cancel"/>
- </widget>
- </child>
-
- <child internal-child="ok_button">
- <widget class="GtkButton" id="ok_button64">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="xs_filter_export_fs_ok"/>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="xs_confirmwin">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Confirm selected action</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
- <signal name="delete_event" handler="xs_confirmwin_delete"/>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkButton" id="xs_confirm_yes">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Yes</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="xs_confirm_no">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">No</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="xs_confirm_frame">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <placeholder/>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label25">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Confirm selected action</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/src/sid/xmms-sid.gladep b/src/sid/xmms-sid.gladep
deleted file mode 100644
index 2c963f7..0000000
--- a/src/sid/xmms-sid.gladep
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
-
-<glade-project>
- <name>audacious-sid</name>
- <program_name>audacious-sid</program_name>
- <source_directory>.</source_directory>
- <pixmaps_directory>.</pixmaps_directory>
- <gnome_support>FALSE</gnome_support>
- <use_widget_names>TRUE</use_widget_names>
- <output_main_file>FALSE</output_main_file>
- <output_build_files>FALSE</output_build_files>
- <backup_source_files>FALSE</backup_source_files>
- <main_source_file>xs_interface.c</main_source_file>
- <main_header_file>xs_interface.h</main_header_file>
- <handler_source_file>xs_genui.c</handler_source_file>
- <handler_header_file>xs_genui.h</handler_header_file>
- <support_source_file>xs_glade.c</support_source_file>
- <support_header_file>xs_glade.h</support_header_file>
-</glade-project>
diff --git a/src/sid/xmms-sid.h b/src/sid/xmms-sid.h
index 37521f5..5284383 100644
--- a/src/sid/xmms-sid.h
+++ b/src/sid/xmms-sid.h
@@ -1,4 +1,4 @@
-/*
+/*
XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
Main header file
@@ -146,14 +146,13 @@ extern InputPlugin xs_plugin_ip;
/* Plugin function prototypes
*/
-void xs_init(void);
+gboolean xs_init(void);
void xs_reinit(void);
void xs_close(void);
gboolean xs_play_file(InputPlayback *, const gchar *, VFSFile *, gint, gint, gboolean);
void xs_stop(InputPlayback *);
-void xs_pause(InputPlayback *, short);
+void xs_pause (InputPlayback * p, gboolean pause);
gint xs_get_time(InputPlayback *);
-Tuple * xs_get_song_tuple(const gchar *);
Tuple * xs_probe_for_tuple(const gchar *, xs_file_t *);
void xs_about(void);
diff --git a/src/sid/xs_about.c b/src/sid/xs_about.c
deleted file mode 100644
index efa209a..0000000
--- a/src/sid/xs_about.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- xmms-sid - SIDPlay input plugin for X MultiMedia System (XMMS)
-
- Aboutbox dialog
-
- Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
- (C) Copyright 1999-2007 Tecnic Software productions (TNSP)
-
- 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.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#include "xmms-sid.h"
-#include <gtk/gtk.h>
-#include "xmms-sid-logo.xpm"
-
-
-static GtkWidget *xs_aboutwin = NULL;
-
-
-#ifdef HAVE_THEMETUNE
-#include <xmms/xmmsctrl.h>
-
-/* (Included only if themetune support is enabled)
- * Stop playing, add XMMS-SID themetune to playlist
- * and start playing it.
- */
-gint xs_about_theme(void)
-{
- const gint iSession = 0; /* Assume session 0 */
- gint iPos;
-
- /* Stop current song, add theme to playlist, play. */
- xmms_remote_stop(iSession);
- iPos = xmms_remote_get_playlist_length(iSession);
- xmms_remote_playlist_add_url_string(iSession, THEMETUNE_FILE);
- xmms_remote_set_playlist_pos(iSession, iPos);
- xmms_remote_play(iSession);
- return 0;
-}
-#endif
-
-
-XS_DEF_WINDOW_CLOSE(about_ok, aboutwin)
-XS_DEF_WINDOW_DELETE(about, aboutwin)
-
-
-/*
- * Execute the about dialog
- */
-void xs_about(void)
-{
- GtkWidget *about_vbox1;
- GtkWidget *about_frame;
- GtkWidget *about_logo;
- GdkPixmap *about_logo_pixmap = NULL, *about_logo_mask = NULL;
- GtkWidget *about_scrwin;
- GtkWidget *about_text;
- GtkWidget *alignment6;
- GtkWidget *about_close;
- gchar tmpStr[64];
-
- /* Check if there already is an open about window */
- if (xs_aboutwin != NULL) {
- gtk_window_present(GTK_WINDOW(xs_aboutwin));
- return;
- }
-
- /* No, create one ... */
- xs_aboutwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(xs_aboutwin), GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_widget_set_name(xs_aboutwin, "xs_aboutwin");
- gtk_object_set_data(GTK_OBJECT(xs_aboutwin), "xs_aboutwin", xs_aboutwin);
- g_snprintf(tmpStr, sizeof(tmpStr), _("About %s"), XS_PACKAGE_STRING);
- gtk_window_set_title(GTK_WINDOW(xs_aboutwin), tmpStr);
- gtk_window_set_default_size(GTK_WINDOW(xs_aboutwin), 350, -1);
-
- XS_SIGNAL_CONNECT(xs_aboutwin, "delete_event", xs_about_delete, NULL);
-
- about_vbox1 = gtk_vbox_new(FALSE, 0);
- gtk_widget_set_name(about_vbox1, "about_vbox1");
- gtk_widget_ref(about_vbox1);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "about_vbox1", about_vbox1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(about_vbox1);
- gtk_container_add(GTK_CONTAINER(xs_aboutwin), about_vbox1);
-
-#ifdef HAVE_THEMETUNE
- about_frame = gtk_button_new();
-#else
- about_frame = gtk_frame_new(NULL);
-#endif
- gtk_widget_set_name(about_frame, "about_frame");
- gtk_widget_ref(about_frame);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "about_frame", about_frame,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(about_frame);
- gtk_box_pack_start(GTK_BOX(about_vbox1), about_frame, FALSE, FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(about_frame), 4);
-
-#ifdef HAVE_THEMETUNE
- gtk_signal_connect(GTK_OBJECT(about_frame), "clicked", GTK_SIGNAL_FUNC(xs_about_theme), NULL);
-#else
- gtk_frame_set_shadow_type(GTK_FRAME(about_frame), GTK_SHADOW_OUT);
-#endif
-
- /* Create the Gdk data for logo pixmap */
- gtk_widget_realize(xs_aboutwin);
- about_logo_pixmap = gdk_pixmap_create_from_xpm_d(
- xs_aboutwin->window, &about_logo_mask,
- NULL, (gchar **) xmms_sid_logo_xpm);
-
- about_logo = gtk_pixmap_new(about_logo_pixmap, about_logo_mask);
-
- /* Create logo widget */
- gtk_widget_set_name(about_logo, "about_logo");
- gtk_widget_ref(about_logo);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "about_logo", about_logo,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(about_logo);
- gtk_container_add(GTK_CONTAINER(about_frame), about_logo);
- gtk_misc_set_padding(GTK_MISC(about_logo), 0, 6);
-
- about_scrwin = gtk_scrolled_window_new(NULL, NULL);
- gtk_widget_set_name(about_scrwin, "about_scrwin");
- gtk_widget_ref(about_scrwin);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "about_scrwin", about_scrwin,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(about_scrwin);
- gtk_box_pack_start(GTK_BOX(about_vbox1), about_scrwin, TRUE, TRUE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(about_scrwin), 8);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(about_scrwin),
- GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- about_text = gtk_text_view_new();
- gtk_widget_set_name(about_text, "about_text");
- gtk_widget_ref(about_text);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "about_text", about_text,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(about_text);
- gtk_container_add(GTK_CONTAINER(about_scrwin), about_text);
- gtk_widget_set_usize(about_text, -2, 100);
- gtk_text_buffer_set_text(
- GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(about_text))),
- "\n"
- "This release of XMMS-SID is dedicated to\n"
- " Richard Joseph\n"
- " and\n"
- " Lauri Sipilä (aka Xaztur/PWP)\n"
- " - Now gone, but forever in our hearts -\n"
- "\n"
- "\n"
- "(C) Copyright 1999-2007\n"
- "\tTecnic Software productions (TNSP)\n"
- "\tLicensed under GNU GPL v2\n"
- "\n"
- "Programming and design\n"
- "\tMatti 'ccr' Hämäläinen\n"
- "\n"
-#ifdef HAVE_SIDPLAY1
- "libSIDPlay1 created by\n"
- "\tMichael Schwendt\n" "\n"
-#endif
-#ifdef HAVE_SIDPLAY2
- "libSIDPlay2 and reSID created by\n"
- "\tSimon White, Dag Lem,\n"
- "\tMichael Schwendt and rest.\n"
- "\n"
-#endif
-#ifdef HAVE_THEMETUNE
- "\"Kummatti City\", theme of XMMS-SID 0.8\n"
- "\tby Ari 'Agemixer' Yliaho\n"
- "\t(C) Copyright 1998 Scallop\n"
- "\t(Refer to README for license)\n" "\n"
-#endif
- "Original XMMS-SID (v0.4) by\n" "\tWillem Monsuwe\n" "\n"
-
- "Greetings fly out to ...\n"
- "\tEveryone at #Linux.Fi, #Fireball,\n"
- "\t#TNSP and #c-64 of IRCNet, #xmms\n"
- "\tof Freenode.net.\n"
- "\n"
- "\tDekadence, PWP, Byterapers,\n"
- "\tmfx, Unique, Fairlight, iSO,\n"
- "\tWrath Designs, Padua, Extend,\n"
- "\tPHn, Creators, Cosine, tAAt,\n"
- "\tViruz, Crest and Skalaria.\n" "\n"
-
- "Special thanks\n"
- "\tGerfried 'Alfie' Fuchs\n"
- "\tAndreas 'mrsid' Varga\n"
- "\tAll the betatesters.\n"
- "\tAll the users!\n", -1);
-
- alignment6 = gtk_alignment_new(0.5, 0.5, 0.18, 1);
- gtk_widget_set_name(alignment6, "alignment6");
- gtk_widget_ref(alignment6);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "alignment6", alignment6,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(alignment6);
- gtk_box_pack_start(GTK_BOX(about_vbox1), alignment6, FALSE, TRUE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(alignment6), 8);
-
- about_close = gtk_button_new_with_label(_("Close"));
- gtk_widget_set_name(about_close, "about_close");
- gtk_widget_ref(about_close);
- gtk_object_set_data_full(GTK_OBJECT(xs_aboutwin), "about_close", about_close,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(about_close);
- gtk_container_add(GTK_CONTAINER(alignment6), about_close);
- GTK_WIDGET_SET_FLAGS(about_close, GTK_CAN_DEFAULT);
-
- XS_SIGNAL_CONNECT(about_close, "clicked", xs_about_ok, NULL);
-
- gtk_widget_show(xs_aboutwin);
-}
diff --git a/src/sid/xs_config.c b/src/sid/xs_config.c
index c4b90d1..d457080 100644
--- a/src/sid/xs_config.c
+++ b/src/sid/xs_config.c
@@ -20,68 +20,8 @@
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "xs_config.h"
-
-#ifdef AUDACIOUS_PLUGIN
-
-#include <audacious/configdb.h>
-#include <audacious/plugin.h>
-
-#define XS_CONFIG_FILE mcs_handle_t
-#define XS_CONFIG_OPEN aud_cfg_db_open
-#define XS_CONFIG_FREE aud_cfg_db_close
-
-#define XS_CFG_SET_STRING(q,z) aud_cfg_db_set_string(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_SET_FLOAT(q,z) aud_cfg_db_set_float(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_SET_INT(q,z) aud_cfg_db_set_int(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_SET_BOOL(q,z) aud_cfg_db_set_bool(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_STRING(q,z) aud_cfg_db_get_string(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_FLOAT(q,z) aud_cfg_db_get_float(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_INT(q,z) aud_cfg_db_get_int(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_BOOL(q,z) aud_cfg_db_get_bool(cfg, XS_CONFIG_IDENT, q, z)
-#else
-#include <xmms/configfile.h>
-#define XS_CONFIG_FILE ConfigFile
-#define XS_CONFIG_OPEN xmms_cfg_open_default_file
-#define XS_CONFIG_FREE xmms_cfg_free
-
-#define XS_CFG_SET_STRING(q,z) xmms_cfg_write_string(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_SET_FLOAT(q,z) xmms_cfg_write_float(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_SET_INT(q,z) xmms_cfg_write_int(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_SET_BOOL(q,z) xmms_cfg_write_boolean(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_STRING(q,z) xmms_cfg_read_string(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_FLOAT(q,z) xmms_cfg_read_float(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_INT(q,z) xmms_cfg_read_int(cfg, XS_CONFIG_IDENT, q, z)
-#define XS_CFG_GET_BOOL(q,z) xmms_cfg_read_boolean(cfg, XS_CONFIG_IDENT, q, z)
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include "xs_glade.h"
-#include "xs_interface.h"
-#include "xs_support.h"
-
-
-/*
- * Global widgets
- */
-static GtkWidget *xs_configwin = NULL,
- *xs_sldb_fileselector = NULL,
- *xs_stil_fileselector = NULL,
- *xs_hvsc_selector = NULL,
- *xs_filt_importselector = NULL,
- *xs_filt_exportselector = NULL;
-
-#define LUW(x) lookup_widget(xs_configwin, x)
-
-/* Samplerates
- */
-static const gchar *xs_samplerates_table[] = {
- "8000", "11025", "22050",
- "44100", "48000", "64000",
- "96000"
-};
-static const gint xs_nsamplerates_table = (sizeof(xs_samplerates_table) / sizeof(xs_samplerates_table[0]));
+#include "xs_config.h"
/*
* Configuration specific stuff
@@ -89,122 +29,6 @@ static const gint xs_nsamplerates_table = (sizeof(xs_samplerates_table) / sizeof
XS_MUTEX(xs_cfg);
struct xs_cfg_t xs_cfg;
-static xs_cfg_item_t xs_cfgtable[] = {
-{ CTYPE_INT, &xs_cfg.audioBitsPerSample, "audioBitsPerSample" },
-{ CTYPE_INT, &xs_cfg.audioChannels, "audioChannels" },
-{ CTYPE_INT, &xs_cfg.audioFrequency, "audioFrequency" },
-
-{ CTYPE_BOOL, &xs_cfg.mos8580, "mos8580" },
-{ CTYPE_BOOL, &xs_cfg.forceModel, "forceModel" },
-{ CTYPE_BOOL, &xs_cfg.emulateFilters, "emulateFilters" },
-{ CTYPE_FLOAT, &xs_cfg.sid1Filter.fs, "filterFs" },
-{ CTYPE_FLOAT, &xs_cfg.sid1Filter.fm, "filterFm" },
-{ CTYPE_FLOAT, &xs_cfg.sid1Filter.ft, "filterFt" },
-{ CTYPE_INT, &xs_cfg.memoryMode, "memoryMode" },
-{ CTYPE_INT, &xs_cfg.clockSpeed, "clockSpeed" },
-{ CTYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed" },
-
-{ CTYPE_INT, &xs_cfg.playerEngine, "playerEngine" },
-
-{ CTYPE_INT, &xs_cfg.sid2Builder, "sid2Builder" },
-{ CTYPE_INT, &xs_cfg.sid2OptLevel, "sid2OptLevel" },
-{ CTYPE_INT, &xs_cfg.sid2NFilterPresets, "sid2NFilterPresets" },
-
-{ CTYPE_BOOL, &xs_cfg.oversampleEnable, "oversampleEnable" },
-{ CTYPE_INT, &xs_cfg.oversampleFactor, "oversampleFactor" },
-
-{ CTYPE_BOOL, &xs_cfg.playMaxTimeEnable, "playMaxTimeEnable" },
-{ CTYPE_BOOL, &xs_cfg.playMaxTimeUnknown, "playMaxTimeUnknown" },
-{ CTYPE_INT, &xs_cfg.playMaxTime, "playMaxTime" },
-{ CTYPE_BOOL, &xs_cfg.playMinTimeEnable, "playMinTimeEnable" },
-{ CTYPE_INT, &xs_cfg.playMinTime, "playMinTime" },
-{ CTYPE_BOOL, &xs_cfg.songlenDBEnable, "songlenDBEnable" },
-{ CTYPE_STR, &xs_cfg.songlenDBPath, "songlenDBPath" },
-
-{ CTYPE_BOOL, &xs_cfg.stilDBEnable, "stilDBEnable" },
-{ CTYPE_STR, &xs_cfg.stilDBPath, "stilDBPath" },
-{ CTYPE_STR, &xs_cfg.hvscPath, "hvscPath" },
-
-#ifndef AUDACIOUS_PLUGIN
-{ CTYPE_INT, &xs_cfg.subsongControl, "subsongControl" },
-{ CTYPE_BOOL, &xs_cfg.detectMagic, "detectMagic" },
-#endif
-
-{ CTYPE_BOOL, &xs_cfg.titleOverride, "titleOverride" },
-{ CTYPE_STR, &xs_cfg.titleFormat, "titleFormat" },
-
-{ CTYPE_BOOL, &xs_cfg.subAutoEnable, "subAutoEnable" },
-{ CTYPE_BOOL, &xs_cfg.subAutoMinOnly, "subAutoMinOnly" },
-{ CTYPE_INT, &xs_cfg.subAutoMinTime, "subAutoMinTime" },
-};
-
-static const gint xs_cfgtable_max = (sizeof(xs_cfgtable) / sizeof(xs_cfgtable[0]));
-
-
-static xs_wid_item_t xs_widtable[] = {
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_res_16bit", &xs_cfg.audioBitsPerSample, XS_RES_16BIT },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_res_8bit", &xs_cfg.audioBitsPerSample, XS_RES_8BIT },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_chn_mono", &xs_cfg.audioChannels, XS_CHN_MONO },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_chn_stereo", &xs_cfg.audioChannels, XS_CHN_STEREO },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_chn_autopan", &xs_cfg.audioChannels, XS_CHN_AUTOPAN },
-{ WTYPE_COMBO, CTYPE_INT, "cfg_samplerate", &xs_cfg.audioFrequency, XS_AUDIO_FREQ },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_oversample", &xs_cfg.oversampleEnable, 0 },
-{ WTYPE_SPIN, CTYPE_INT, "cfg_oversample_factor",&xs_cfg.oversampleFactor, 0 },
-
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay1", &xs_cfg.playerEngine, XS_ENG_SIDPLAY1 },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay2", &xs_cfg.playerEngine, XS_ENG_SIDPLAY2 },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_real", &xs_cfg.memoryMode, XS_MPU_REAL },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_banksw", &xs_cfg.memoryMode, XS_MPU_BANK_SWITCHING },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_transrom", &xs_cfg.memoryMode, XS_MPU_TRANSPARENT_ROM },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_playsid", &xs_cfg.memoryMode, XS_MPU_PLAYSID_ENVIRONMENT },
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_mos8580", &xs_cfg.mos8580, 0 },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sid_force", &xs_cfg.forceModel, 0 },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_ntsc", &xs_cfg.clockSpeed, XS_CLOCK_NTSC },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_pal", &xs_cfg.clockSpeed, XS_CLOCK_PAL },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_clock_force", &xs_cfg.forceSpeed, 0 },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sp2_opt", &xs_cfg.sid2OptLevel, 0 },
-
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sp2_resid", &xs_cfg.sid2Builder, XS_BLD_RESID },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sp2_hardsid", &xs_cfg.sid2Builder, XS_BLD_HARDSID },
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_filters", &xs_cfg.emulateFilters, 0 },
-{ WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_fs", &xs_cfg.sid1Filter.fs, 0 },
-{ WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_fm", &xs_cfg.sid1Filter.fm, 0 },
-{ WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_ft", &xs_cfg.sid1Filter.ft, 0 },
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_enable", &xs_cfg.playMaxTimeEnable, 0 },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_unknown", &xs_cfg.playMaxTimeUnknown, 0 },
-{ WTYPE_SPIN, CTYPE_INT, "cfg_maxtime", &xs_cfg.playMaxTime, 0 },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_mintime_enable", &xs_cfg.playMinTimeEnable, 0 },
-{ WTYPE_SPIN, CTYPE_INT, "cfg_mintime", &xs_cfg.playMinTime, 0 },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_sld_enable", &xs_cfg.songlenDBEnable, 0 },
-{ WTYPE_TEXT, CTYPE_STR, "cfg_sld_dbpath", &xs_cfg.songlenDBPath, 0 },
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_stil_enable", &xs_cfg.stilDBEnable, 0 },
-{ WTYPE_TEXT, CTYPE_STR, "cfg_stil_dbpath", &xs_cfg.stilDBPath, 0 },
-{ WTYPE_TEXT, CTYPE_STR, "cfg_hvsc_path", &xs_cfg.hvscPath, 0 },
-
-#ifndef AUDACIOUS_PLUGIN
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_none", &xs_cfg.subsongControl, XS_SSC_NONE },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_seek", &xs_cfg.subsongControl, XS_SSC_SEEK },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_popup", &xs_cfg.subsongControl, XS_SSC_POPUP },
-{ WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_patch", &xs_cfg.subsongControl, XS_SSC_PATCH },
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_detectmagic", &xs_cfg.detectMagic, 0 },
-#endif
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_ftitle_override", &xs_cfg.titleOverride, 0 },
-{ WTYPE_TEXT, CTYPE_STR, "cfg_ftitle_format", &xs_cfg.titleFormat, 0 },
-
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_subauto_enable", &xs_cfg.subAutoEnable, 0 },
-{ WTYPE_BUTTON, CTYPE_BOOL, "cfg_subauto_min_only", &xs_cfg.subAutoMinOnly, 0 },
-{ WTYPE_SPIN, CTYPE_INT, "cfg_subauto_mintime", &xs_cfg.subAutoMinTime, 0 },
-};
-
-static const gint xs_widtable_max = (sizeof(xs_widtable) / sizeof(xs_widtable[0]));
-
-
/* Reset/initialize the configuration
*/
void xs_init_configuration(void)
@@ -301,1252 +125,3 @@ void xs_init_configuration(void)
/* Unlock the configuration */
XS_MUTEX_UNLOCK(xs_cfg);
}
-
-
-/* Filter configuration handling
- */
-static void xs_filters_error(const gchar *fmt, ...)
-{
- va_list ap;
-
-#ifdef AUDACIOUS_PLUGIN
- va_start(ap, fmt);
- g_logv("AUD-SID", G_LOG_LEVEL_WARNING, fmt, ap);
- va_end(ap);
-#else
- gchar *msg;
-
- va_start(ap, fmt);
- msg = g_strdup_vprintf(fmt, ap);
- va_end(ap);
- xmms_show_message(_(PACKAGE_NAME " Error"), msg, _("OK"), TRUE, NULL, NULL);
- g_free(msg);
-#endif
-}
-
-
-static void xs_filter_free(xs_sid_filter_t *filter)
-{
- if (filter) {
- g_free(filter->name);
- filter->name = NULL;
- g_free(filter);
- }
-}
-
-
-#define XS_FITEM (4 * 2)
-
-static gboolean xs_filter_load_into(XS_CONFIG_FILE *cfg, gint nFilter, xs_sid_filter_t *filter)
-{
- gchar tmpKey[64], *tmpStr;
-
- /* Get fields from config */
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dType", nFilter);
- if (!XS_CFG_GET_INT(tmpKey, &(filter->type)))
- return FALSE;
-
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dName", nFilter);
- if (!XS_CFG_GET_STRING(tmpKey, &tmpStr))
- return FALSE;
-
- filter->name = g_strdup(tmpStr);
- if (filter->name == NULL)
- return FALSE;
-
- if (filter->type == 1) {
- gint i, j;
-
- /* Types 1 has points */
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dNPoints", nFilter);
- if (!XS_CFG_GET_INT(tmpKey, &(filter->npoints)))
- return FALSE;
-
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dPoints", nFilter);
- if (!XS_CFG_GET_STRING(tmpKey, &tmpStr))
- return FALSE;
-
- for (i = 0, j = 0; i < filter->npoints; i++, j += XS_FITEM) {
- if (sscanf(&tmpStr[j], "%4x%4x",
- &(filter->points[i].x),
- &(filter->points[i].y)) != 2)
- return FALSE;
- }
- } else if (filter->type == 3) {
- /* Type 3 has tunables */
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dData", nFilter);
- if (!XS_CFG_GET_STRING(tmpKey, &tmpStr))
- return FALSE;
-
- if (sscanf(tmpStr, "%f,%f,%f,%f", &filter->rate, &filter->point,
- &filter->voice_nonlinearity, &filter->cf_treshold) != 4)
- return FALSE;
-
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dData3", nFilter);
- if (!XS_CFG_GET_STRING(tmpKey, &tmpStr))
- return FALSE;
-
- if (sscanf(tmpStr, "%f,%f,%f,%f", &filter->baseresistance,
- &filter->offset, &filter->steepness,
- &filter->minimumfetresistance) != 4)
- return FALSE;
-
- } else if (filter->type == 4) {
- /* Type 4 has fewer tunables */
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dData4", nFilter);
- if (!XS_CFG_GET_STRING(tmpKey, &tmpStr))
- return FALSE;
-
- if (sscanf(tmpStr, "%f,%f", &filter->k, &filter->b) != 2)
- return FALSE;
- } else {
- xs_error("Unknown filter type %d for '%s' (#%d).\n", filter->type, filter->name, nFilter);
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-static xs_sid_filter_t * xs_filter_load(XS_CONFIG_FILE *cfg, gint nFilter)
-{
- xs_sid_filter_t *filter;
-
- /* Allocate filter struct */
- if ((filter = g_malloc0(sizeof(xs_sid_filter_t))) == NULL)
- return NULL;
-
- if (!xs_filter_load_into(cfg, nFilter, filter)) {
- xs_error("Error loading filter %d from configuration.\n", nFilter);
- xs_filter_free(filter);
- return NULL;
- } else
- return filter;
-}
-
-
-#if 0
-static gboolean xs_filter_save(XS_CONFIG_FILE *cfg, xs_sid_filter_t *pFilter, gint nFilter)
-{
- gchar *tmpValue, tmpKey[64];
- gint i, j;
-
- /* Allocate memory for value string */
- tmpValue = g_malloc(sizeof(gchar) * XS_FITEM * (pFilter->npoints + 1));
- if (tmpValue == NULL)
- return FALSE;
-
- /* Make value string */
- for (i = 0, j = 0; i < pFilter->npoints; i++, j += XS_FITEM) {
- g_snprintf(&tmpValue[j], XS_FITEM+1, "%04x%04x",
- pFilter->points[i].x,
- pFilter->points[i].y);
- }
-
- /* Write into the configuration */
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dName", nFilter);
- XS_CFG_SET_STRING(tmpKey, pFilter->name);
-
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dNPoints", nFilter);
- XS_CFG_SET_INT(tmpKey, pFilter->npoints);
-
- g_snprintf(tmpKey, sizeof(tmpKey), "filter%dPoints", nFilter);
- XS_CFG_SET_STRING(tmpKey, tmpValue);
-
- g_free(tmpValue);
- return TRUE;
-}
-#endif
-
-
-/* Filter exporting and importing. These functions export/import
- * filter settings to/from SIDPlay2 INI-type files.
- */
-static gboolean xs_fgetitem(gchar *inLine, size_t *linePos, gchar sep, gchar *tmpStr, size_t tmpMax)
-{
- size_t i;
-
- for (i = 0; i < tmpMax && inLine[*linePos] &&
- inLine[*linePos] != sep; i++, (*linePos)++)
- tmpStr[i] = inLine[*linePos];
-
- tmpStr[i] = 0;
- while (--i > 0 && isspace(tmpStr[i])) tmpStr[i] = 0;
-
- xs_findnext(inLine, linePos);
- return (inLine[*linePos] == sep);
-}
-
-
-static gboolean xs_chkf(xs_sid_filter_t *filter, const gchar *str, const gchar *name, gint type)
-{
- if (g_strncasecmp(str, name, strlen(name)))
- return FALSE;
- if (filter->type != type) {
- if (filter->type == -1) {
- filter->type = type;
- return TRUE;
- } else {
- xs_error("Unexpected key '%s' for filter type %d.\n");
- return FALSE;
- }
- } else
- return TRUE;
-}
-
-static gboolean xs_filters_import(const gchar *filename, xs_sid_filter_t **pFilters, gint *nFilters)
-{
- FILE *inFile;
- gchar inLine[XS_BUF_SIZE], tmpStr[XS_BUF_SIZE];
- gchar *sectName = NULL;
- gboolean inSection, isError = FALSE;
- size_t lineNum, i;
- xs_sid_filter_t *filter = NULL;
-
-fprintf(stderr, "xs_filters_import(%s)\n", filename);
-
- if ((inFile = fopen(filename, "ra")) == NULL) {
- xs_filters_error("");
- return FALSE;
- }
-
-fprintf(stderr, "importing...\n");
-
- inSection = FALSE;
- lineNum = 0;
- while (fgets(inLine, XS_BUF_SIZE, inFile) != NULL && !isError) {
- size_t linePos = 0;
- lineNum++;
-
- xs_findnext(inLine, &linePos);
- if (isalpha(inLine[linePos])) {
- /* A new key/value pair */
- if (!xs_fgetitem(inLine, &linePos, '=', tmpStr, XS_BUF_SIZE)) {
- xs_error("Invalid line '%s' :: expected =", inLine);
- isError = TRUE;
- } else if (inSection) {
- linePos++;
- xs_findnext(inLine, &linePos);
-
- if (xs_chkf(filter, tmpStr, "points", 1)) {
-
- } else if (xs_chkf(filter, tmpStr, "point", 1)) {
-
- } else if (!g_strncasecmp(tmpStr, "type", 4)) {
- if (filter->type != -1) {
- xs_error("Filter type %d already set for '%s'\n",
- filter->type, sectName);
- }
-
- } else {
- xs_error("Unsupported definition '%s' @ '%s'\n",
- tmpStr, sectName);
- }
- }
- } else if (inLine[linePos] == '[') {
- /* Check for existing section */
- if (inSection) {
- /* Submit definition */
- fprintf(stderr, "filter ends: %s\n", sectName);
- if ((filter = g_malloc0(sizeof(xs_sid_filter_t))) == NULL) {
- fprintf(stderr, "could not allocate ..\n");
- } else {
-
- }
- g_free(sectName);
- }
-
- /* New filter(?) section starts */
- linePos++;
- for (i = 0; i < XS_BUF_SIZE-1 && inLine[linePos] && inLine[linePos] != ']'; i++, linePos++)
- tmpStr[i] = inLine[linePos];
- tmpStr[i] = 0;
-
- if (inLine[linePos] != ']') {
- fprintf(stderr, "invalid! expected ']': %s\n", inLine);
- } else {
- if (!g_strncasecmp(tmpStr, "filter", 6)) {
- sectName = strdup(tmpStr + 6);
- fprintf(stderr, "filter: %s\n", sectName);
- inSection = TRUE;
- } else {
- fprintf(stderr, "ignoring section: %s\n", tmpStr);
- inSection = FALSE;
- }
- }
- } else if (inLine[linePos] != '#' && inLine[linePos] != ';' && inLine[linePos] != 0) {
- /* Syntax error */
- xs_error("Syntax error: '%s'\n", inLine);
- isError = TRUE;
- }
- }
-
- fclose(inFile);
- return TRUE;
-}
-
-
-static gboolean xs_filter_export(FILE *outFile, xs_sid_filter_t *filter)
-{
- fprintf(outFile,
- "[Filter%s]\n"
- "type=%d\n",
- filter->name, filter->type);
-
- if (filter->type == 1) {
- gint i;
- fprintf(outFile, "points=%d\n", filter->npoints);
-
- for (i = 0; i < filter->npoints; i++) {
- fprintf(outFile,
- "point%d=%d,%d\n",
- i + 1,
- filter->points[i].x,
- filter->points[i].y);
- }
- } else if (filter->type == 3) {
- fprintf(outFile,
- "DistortionRate = %f\n"
- "DistortionPoint = %f\n"
- "VoiceNonlinearity = %f\n"
- "DistortionCFThreshold = %f\n",
- filter->rate, filter->point,
- filter->voice_nonlinearity,
- filter->cf_treshold);
-
- fprintf(outFile,
- "Type3BaseResistance = %f\n"
- "Type3Offset = %f\n"
- "Type3Steepness = %f\n"
- "Type3MinimumFETResistance = %f\n",
- filter->baseresistance, filter->offset,
- filter->steepness, filter->minimumfetresistance);
-
- } else if (filter->type == 4) {
- fprintf(outFile,
- "Type4K=%f\n"
- "Type4B=%f\n",
- filter->k, filter->b);
- } else {
- xs_error("Filter '%s' has type %d, which is unsupported by export.\n",
- filter->name, filter->type);
- return FALSE;
- }
-
- fprintf(outFile, "\n");
- return TRUE;
-}
-
-
-static gboolean xs_filters_export(const gchar *filename, xs_sid_filter_t **filters, gint nFilters)
-{
- gboolean result = TRUE;
- FILE *outFile;
- gint n;
-
- /* Open/create the file */
- if ((outFile = fopen(filename, "wa")) == NULL) {
- xs_filters_error("Could not open '%s' for writing! Not exporting.", filename);
- return FALSE;
- }
-
- /* Header */
- fprintf(outFile,
- "; SIDPlay2 compatible filter definition file\n"
- "; Exported by " PACKAGE_STRING "\n\n");
-
- /* Write each filter spec in "INI"-style format */
- for (n = 0; n < nFilters; n++) {
- if (!xs_filter_export(outFile, filters[n])) {
- result = FALSE;
- break;
- }
- }
-
- fclose(outFile);
-
- if (!result)
- xs_filters_error("Some filters could not be exported!");
-
- return result;
-}
-
-
-/* Get the configuration (from file or default)
- */
-void xs_read_configuration(void)
-{
- XS_CONFIG_FILE *cfg;
- gint i;
- gchar *tmpStr;
-
- /* Try to open the XMMS configuration file */
- XS_MUTEX_LOCK(xs_cfg);
- XSDEBUG("loading from config-file ...\n");
-
- cfg = XS_CONFIG_OPEN();
-
- if (cfg == NULL) {
- XSDEBUG("Could not open configuration, trying to write defaults...\n");
- xs_write_configuration();
- return;
- }
-
- /* Read the new settings from XMMS configuration file */
- for (i = 0; i < xs_cfgtable_max; i++) {
- switch (xs_cfgtable[i].itemType) {
- case CTYPE_INT:
- XS_CFG_GET_INT(xs_cfgtable[i].itemName,
- (gint *) xs_cfgtable[i].itemData);
- break;
-
- case CTYPE_BOOL:
- XS_CFG_GET_BOOL(xs_cfgtable[i].itemName,
- (gboolean *) xs_cfgtable[i].itemData);
- break;
-
- case CTYPE_FLOAT:
- XS_CFG_GET_FLOAT(xs_cfgtable[i].itemName,
- (gfloat *) xs_cfgtable[i].itemData);
- break;
-
- case CTYPE_STR:
- if (XS_CFG_GET_STRING(xs_cfgtable[i].itemName,
- (gchar **) &tmpStr)) {
- xs_pstrcpy((gchar **) xs_cfgtable[i].itemData, tmpStr);
- g_free(tmpStr);
- }
- break;
- }
- }
-
- /* Filters and presets are a special case */
- xs_filter_load_into(cfg, 0, &xs_cfg.sid2Filter);
-
- if (xs_cfg.sid2NFilterPresets > 0) {
- xs_cfg.sid2FilterPresets = g_malloc0(xs_cfg.sid2NFilterPresets * sizeof(xs_sid_filter_t *));
- if (!xs_cfg.sid2FilterPresets) {
- xs_error("Allocation of sid2FilterPresets structure failed!\n");
- } else {
- for (i = 0; i < xs_cfg.sid2NFilterPresets; i++) {
- xs_cfg.sid2FilterPresets[i] = xs_filter_load(cfg, i);
- }
- }
- }
-
- XS_CONFIG_FREE(cfg);
-
- XS_MUTEX_UNLOCK(xs_cfg);
- XSDEBUG("OK\n");
-}
-
-
-/* Write the current configuration
- */
-gint xs_write_configuration(void)
-{
- XS_CONFIG_FILE *cfg;
- gint i;
-
- XSDEBUG("writing configuration ...\n");
- XS_MUTEX_LOCK(xs_cfg);
-
- /* Try to open the XMMS configuration file */
- cfg = XS_CONFIG_OPEN();
-
-#ifndef AUDACIOUS_PLUGIN
- if (!cfg) cfg = xmms_cfg_new();
- if (!cfg) return -1;
-#endif
-
- /* Write the new settings to XMMS configuration file */
- for (i = 0; i < xs_cfgtable_max; i++) {
- switch (xs_cfgtable[i].itemType) {
- case CTYPE_INT:
- XS_CFG_SET_INT(xs_cfgtable[i].itemName,
- *(gint *) xs_cfgtable[i].itemData);
- break;
-
- case CTYPE_BOOL:
- XS_CFG_SET_BOOL(xs_cfgtable[i].itemName,
- *(gboolean *) xs_cfgtable[i].itemData);
- break;
-
- case CTYPE_FLOAT:
- XS_CFG_SET_FLOAT(xs_cfgtable[i].itemName,
- *(gfloat *) xs_cfgtable[i].itemData);
- break;
-
- case CTYPE_STR:
- XS_CFG_SET_STRING(xs_cfgtable[i].itemName,
- *(gchar **) xs_cfgtable[i].itemData);
- break;
- }
- }
-
-
-#ifndef AUDACIOUS_PLUGIN
- xmms_cfg_write_default_file(cfg);
-#endif
- XS_CONFIG_FREE(cfg);
-
- XS_MUTEX_UNLOCK(xs_cfg);
-
- return 0;
-}
-
-
-/* Configuration panel was canceled
- */
-XS_DEF_WINDOW_CLOSE(cfg_cancel, configwin)
-
-
-/* Configuration was accepted, save the settings
- */
-void xs_cfg_ok(void)
-{
- gint i;
- gfloat tmpValue;
- gint tmpInt;
- const gchar *tmpStr;
-
- xs_stop(NULL);
-
- /* Get lock on configuration */
- XS_MUTEX_LOCK(xs_cfg);
-
- XSDEBUG("get data from widgets to config...\n");
-
- for (i = 0; i < xs_widtable_max; i++) {
- switch (xs_widtable[i].widType) {
- case WTYPE_BGROUP:
- /* Check if toggle-button is active */
- if (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active) {
- /* Yes, set the constant value */
- *((gint *) xs_widtable[i].itemData) = xs_widtable[i].itemSet;
- }
- break;
-
- case WTYPE_COMBO:
- /* Get text from text-widget */
- tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName)));
- if (sscanf(tmpStr, "%d", &tmpInt) != 1)
- tmpInt = xs_widtable[i].itemSet;
-
- *((gint *) xs_widtable[i].itemData) = tmpInt;
- break;
-
- case WTYPE_SPIN:
- case WTYPE_SCALE:
- /* Get the value */
- switch (xs_widtable[i].widType) {
- case WTYPE_SPIN:
- tmpValue = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName)))->value;
- break;
-
- case WTYPE_SCALE:
- tmpValue = gtk_range_get_adjustment(GTK_RANGE(LUW(xs_widtable[i].widName)))->value;
- break;
-
- default:
- tmpValue = -1;
- break;
- }
-
- /* Set the value */
- switch (xs_widtable[i].itemType) {
- case CTYPE_INT:
- *((gint *) xs_widtable[i].itemData) = (gint) tmpValue;
- break;
-
- case CTYPE_FLOAT:
- *((gfloat *) xs_widtable[i].itemData) = tmpValue;
- break;
- }
- break;
-
- case WTYPE_BUTTON:
- /* Check if toggle-button is active */
- *((gboolean *) xs_widtable[i].itemData) =
- (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active);
- break;
-
- case WTYPE_TEXT:
- /* Get text from text-widget */
- xs_pstrcpy((gchar **) xs_widtable[i].itemData,
- gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName))));
- break;
- }
- }
-
- /* Get filter settings */
- /*
- if (!xs_curve_get_points(XS_CURVE(LUW("")), &xs_cfg.sid2Filter.points, &xs_cfg.sid2Filter.npoints)) {
- xs_error("Warning: Could not get filter curve widget points!\n");
- }
- */
-
- /* Release lock */
- XS_MUTEX_UNLOCK(xs_cfg);
-
- /* Close window */
- gtk_widget_destroy(xs_configwin);
- xs_configwin = NULL;
-
- /* Write settings */
- xs_write_configuration();
-
- /* Re-initialize */
- xs_reinit();
-}
-
-
-/* Confirmation window
- */
-gboolean xs_confirmwin_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data)
-{
- (void) widget;
- (void) event;
- (void) user_data;
-
- return FALSE;
-}
-
-
-
-/* HVSC songlength-database file selector response-functions
- */
-void xs_cfg_sldb_browse(GtkButton * button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- if (xs_sldb_fileselector != NULL) {
- XS_WINDOW_PRESENT(xs_sldb_fileselector);
- return;
- }
-
- xs_sldb_fileselector = create_xs_sldb_fs();
- XS_MUTEX_LOCK(xs_cfg);
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_sldb_fileselector), xs_cfg.songlenDBPath);
- XS_MUTEX_UNLOCK(xs_cfg);
- gtk_widget_show(xs_sldb_fileselector);
-}
-
-
-void xs_sldb_fs_ok(GtkButton *button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- /* Selection was accepted! */
- gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")),
- gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector)));
-
- /* Close file selector window */
- gtk_widget_destroy(xs_sldb_fileselector);
- xs_sldb_fileselector = NULL;
-}
-
-XS_DEF_WINDOW_CLOSE(sldb_fs_cancel, sldb_fileselector)
-XS_DEF_WINDOW_DELETE(sldb_fs, sldb_fileselector)
-
-
-/* STIL-database file selector response-functions
- */
-void xs_cfg_stil_browse(GtkButton * button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- if (xs_stil_fileselector != NULL) {
- XS_WINDOW_PRESENT(xs_stil_fileselector);
- return;
- }
-
- xs_stil_fileselector = create_xs_stil_fs();
- XS_MUTEX_LOCK(xs_cfg);
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_stil_fileselector), xs_cfg.stilDBPath);
- XS_MUTEX_UNLOCK(xs_cfg);
- gtk_widget_show(xs_stil_fileselector);
-}
-
-
-void xs_stil_fs_ok(GtkButton *button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- /* Selection was accepted! */
- gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_dbpath")),
- gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector)));
-
- /* Close file selector window */
- gtk_widget_destroy(xs_stil_fileselector);
- xs_stil_fileselector = NULL;
-}
-
-
-XS_DEF_WINDOW_CLOSE(stil_fs_cancel, stil_fileselector)
-XS_DEF_WINDOW_DELETE(stil_fs, stil_fileselector)
-
-
-/* HVSC location selector response-functions
- */
-void xs_cfg_hvsc_browse(GtkButton * button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- if (xs_hvsc_selector != NULL) {
- XS_WINDOW_PRESENT(xs_hvsc_selector);
- return;
- }
-
- xs_hvsc_selector = create_xs_hvsc_fs();
- XS_MUTEX_LOCK(xs_cfg);
- gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_hvsc_selector), xs_cfg.hvscPath);
- XS_MUTEX_UNLOCK(xs_cfg);
- gtk_widget_show(xs_hvsc_selector);
-}
-
-
-void xs_hvsc_fs_ok(GtkButton *button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- /* Selection was accepted! */
- gtk_entry_set_text(GTK_ENTRY(LUW("cfg_hvsc_path")),
- gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_hvsc_selector)));
-
- /* Close file selector window */
- gtk_widget_destroy(xs_hvsc_selector);
- xs_hvsc_selector = NULL;
-}
-
-
-XS_DEF_WINDOW_CLOSE(hvsc_fs_cancel, hvsc_selector)
-XS_DEF_WINDOW_DELETE(hvsc_fs, hvsc_selector)
-
-
-/* Filter handling
- */
-void xs_cfg_sp1_filter_reset(GtkButton * button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_fs"))), XS_SIDPLAY1_FS);
- gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_fm"))), XS_SIDPLAY1_FM);
- gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_ft"))), XS_SIDPLAY1_FT);
-}
-
-
-void xs_cfg_sp2_filter_update(XSCurve *curve, xs_sid_filter_t *f)
-{
- assert(curve);
- assert(f);
-
- xs_curve_reset(curve);
- xs_curve_set_range(curve, 0,0, XS_SIDPLAY2_NFPOINTS, XS_SIDPLAY2_FMAX);
- if (!xs_curve_set_points(curve, f->points, f->npoints)) {
- // FIXME
- xs_error("Warning: Could not set filter curve widget points!\n");
- }
-}
-
-
-void xs_cfg_sp2_presets_update(void)
-{
- GList *tmpList = NULL;
- gint i;
-
- for (i = 0; i < xs_cfg.sid2NFilterPresets; i++) {
- tmpList = g_list_append(tmpList,
- (gpointer) xs_cfg.sid2FilterPresets[i]->name);
- }
-
- gtk_combo_set_popdown_strings(GTK_COMBO(LUW("cfg_sp2_filter_combo")), tmpList);
- g_list_free(tmpList);
-}
-
-
-void xs_cfg_sp2_filter_load(GtkButton *button, gpointer user_data)
-{
- const gchar *tmpStr;
- gint i, j;
-
- (void) button;
- (void) user_data;
-
- XS_MUTEX_LOCK(xs_cfg);
-
- tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry")));
- for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) {
- if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) {
- j = i;
- break;
- }
- }
-
- if (j != -1) {
- fprintf(stderr, "Updating from '%s'\n", tmpStr);
- xs_cfg_sp2_filter_update(
- XS_CURVE(LUW("cfg_sp2_filter_curve")),
- xs_cfg.sid2FilterPresets[i]);
- } else {
- /* error/warning: no such filter preset */
- fprintf(stderr, "No such filter preset '%s'!\n", tmpStr);
- }
-
- XS_MUTEX_UNLOCK(xs_cfg);
-}
-
-
-void xs_cfg_sp2_filter_save(GtkButton *button, gpointer user_data)
-{
- /*
- 1) check if textentry matches any current filter name
- yes) ask if saving over ok?
- no) ...
-
- 2) save current filter to the name
- */
- const gchar *tmpStr;
- gint i, j;
-
- (void) button;
- (void) user_data;
-
- XS_MUTEX_LOCK(xs_cfg);
-
- tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry")));
- for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) {
- if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) {
- j = i;
- break;
- }
- }
-
- if (j != -1) {
- fprintf(stderr, "Found, confirm overwrite?\n");
- }
-
- fprintf(stderr, "saving!\n");
-
- xs_cfg_sp2_presets_update();
-
- XS_MUTEX_UNLOCK(xs_cfg);
-}
-
-
-void xs_cfg_sp2_filter_delete(GtkButton *button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
- /*
- 1) confirm
- 2) delete
- */
-}
-
-
-void xs_cfg_sp2_filter_import(GtkButton *button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- if (xs_filt_importselector != NULL) {
- XS_WINDOW_PRESENT(xs_filt_importselector);
- return;
- }
-
- xs_filt_importselector = create_xs_filter_import_fs();
- gtk_widget_show(xs_filt_importselector);
-}
-
-
-void xs_filter_import_fs_ok(GtkButton *button, gpointer user_data)
-{
- const gchar *tmpStr;
- (void) button;
- (void) user_data;
-
- XS_MUTEX_LOCK(xs_cfg);
-
- /* Selection was accepted! */
- tmpStr = gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_filt_importselector));
- xs_filters_import(tmpStr, xs_cfg.sid2FilterPresets, &xs_cfg.sid2NFilterPresets);
- xs_cfg_sp2_presets_update();
-
- /* Close file selector window */
- gtk_widget_destroy(xs_filt_importselector);
- xs_filt_importselector = NULL;
- XS_MUTEX_UNLOCK(xs_cfg);
-}
-
-
-XS_DEF_WINDOW_CLOSE(filter_import_fs_cancel, filt_importselector)
-XS_DEF_WINDOW_DELETE(filter_import_fs, filt_importselector)
-
-
-void xs_cfg_sp2_filter_export(GtkButton *button, gpointer user_data)
-{
- (void) button;
- (void) user_data;
-
- if (xs_filt_exportselector != NULL) {
- XS_WINDOW_PRESENT(xs_filt_exportselector);
- return;
- }
-
- xs_filt_exportselector = create_xs_filter_export_fs();
- gtk_widget_show(xs_filt_exportselector);
-}
-
-
-void xs_filter_export_fs_ok(GtkButton *button, gpointer user_data)
-{
- const gchar *tmpStr;
- (void) button;
- (void) user_data;
-
- XS_MUTEX_LOCK(xs_cfg);
-
- /* Selection was accepted! */
- tmpStr = gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_filt_exportselector));
- xs_filters_export(tmpStr, xs_cfg.sid2FilterPresets, xs_cfg.sid2NFilterPresets);
-
- /* Close file selector window */
- gtk_widget_destroy(xs_filt_exportselector);
- xs_filt_exportselector = NULL;
- XS_MUTEX_UNLOCK(xs_cfg);
-}
-
-
-XS_DEF_WINDOW_CLOSE(filter_export_fs_cancel, filt_exportselector)
-XS_DEF_WINDOW_DELETE(filter_export_fs, filt_exportselector)
-
-
-/* Selection toggle handlers
- */
-void xs_cfg_emu_filters_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_filters_notebook"), isActive);
-}
-
-
-void xs_cfg_ftitle_override_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_ftitle_box"), isActive);
-}
-
-
-void xs_cfg_emu_sidplay1_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- (void) togglebutton;
- (void) user_data;
-}
-
-
-void xs_cfg_emu_sidplay2_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isActive);
-
- gtk_widget_set_sensitive(LUW("cfg_sidplay2_frame"), isActive);
-
-#ifdef HAVE_SIDPLAY2_DISTORTION
- /* Optimization mode removed from distortion patch */
- gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), FALSE);
-#else
- gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), isActive);
-#endif
-
- gtk_widget_set_sensitive(LUW("cfg_chn_autopan"), !isActive);
-
-#ifdef HAVE_RESID_BUILDER
- gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isActive);
-#else
- gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), FALSE);
-#endif
-
-#ifdef HAVE_HARDSID_BUILDER
- gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isActive);
-#else
- gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), FALSE);
-#endif
-}
-
-
-void xs_cfg_oversample_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_oversample_box"), isActive);
-}
-
-
-void xs_cfg_mintime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_mintime_box"), isActive);
-}
-
-
-void xs_cfg_maxtime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable"))->active;
-
- (void) togglebutton;
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_maxtime_unknown"), isActive);
- gtk_widget_set_sensitive(LUW("cfg_maxtime_box"), isActive);
-}
-
-
-void xs_cfg_sldb_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_sld_box"), isActive);
-}
-
-
-void xs_cfg_stil_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_stil_box1"), isActive);
- gtk_widget_set_sensitive(LUW("cfg_stil_box2"), isActive);
-}
-
-
-void xs_cfg_subauto_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_subauto_min_only"), isActive);
- gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive);
-}
-
-
-void xs_cfg_subauto_min_only_toggled(GtkToggleButton * togglebutton, gpointer user_data)
-{
- gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active &&
- GTK_TOGGLE_BUTTON(LUW("cfg_subauto_enable"))->active;
-
- (void) user_data;
-
- gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive);
-}
-
-
-void xs_cfg_mintime_changed(GtkEditable * editable, gpointer user_data)
-{
- gint tmpValue;
- GtkAdjustment *tmpAdj;
-
- (void) user_data;
-
- tmpAdj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW("cfg_maxtime")));
-
- tmpValue = (gint) gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(editable))->value;
-
- if (tmpValue > tmpAdj->value)
- gtk_adjustment_set_value(tmpAdj, tmpValue);
-}
-
-
-void xs_cfg_maxtime_changed(GtkEditable * editable, gpointer user_data)
-{
- gint tmpValue;
- GtkAdjustment *tmpAdj;
-
- (void) user_data;
-
- tmpAdj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW("cfg_mintime")));
-
- tmpValue = (gint) gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(editable))->value;
-
- if (tmpValue < tmpAdj->value)
- gtk_adjustment_set_value(tmpAdj, tmpValue);
-}
-
-
-XS_DEF_WINDOW_DELETE(configwin, configwin)
-
-
-/* Execute the configuration panel
- */
-void xs_configure(void)
-{
- gint i;
- gfloat tmpValue;
- gchar tmpStr[64];
- GList *tmpList = NULL;
- GtkWidget *tmpCurve;
-
- /* Check if the window already exists */
- if (xs_configwin) {
- XS_WINDOW_PRESENT(xs_configwin);
- return;
- }
-
- /* Create the window */
- xs_configwin = create_xs_configwin();
-
- /* Get lock on configuration */
- XS_MUTEX_LOCK(xs_cfg);
-
- /* Add samplerates */
- for (i = 0; i < xs_nsamplerates_table; i++) {
- tmpList = g_list_append (tmpList,
- (gpointer) xs_samplerates_table[i]);
- }
- gtk_combo_set_popdown_strings(GTK_COMBO(LUW("cfg_samplerate_combo")), tmpList);
- g_list_free(tmpList);
-
- /* Create the custom filter curve widget for libSIDPlay2 */
- xs_cfg_sp2_presets_update();
- tmpCurve = xs_curve_new();
- xs_cfg_sp2_filter_update(XS_CURVE(tmpCurve), &xs_cfg.sid2Filter);
- gtk_widget_set_name(tmpCurve, "cfg_sp2_filter_curve");
- gtk_widget_ref(tmpCurve);
- gtk_object_set_data_full(GTK_OBJECT(xs_configwin),
- "cfg_sp2_filter_curve", tmpCurve, (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show(tmpCurve);
- gtk_container_add(GTK_CONTAINER(LUW("cfg_sp2_filter_frame")), tmpCurve);
-
-
- /* Based on available optional parts, gray out options */
-#ifndef HAVE_SIDPLAY1
- gtk_widget_set_sensitive(LUW("cfg_emu_sidplay1"), FALSE);
- gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay1"), FALSE);
-#endif
-
-#ifndef HAVE_SIDPLAY2
- gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2"), FALSE);
- gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay2"), FALSE);
-#endif
-
- gtk_widget_set_sensitive(LUW("cfg_resid_frame"), FALSE);
-
-#if !defined(HAVE_XMMSEXTRA) && !defined(AUDACIOUS_PLUGIN)
- gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE);
- xs_cfg.titleOverride = TRUE;
-#endif
-
-#if !defined(HAVE_SONG_POSITION) && !defined(AUDACIOUS_PLUGIN)
- gtk_widget_set_sensitive(LUW("cfg_subctrl_patch"), FALSE);
-#endif
-
- xs_cfg_ftitle_override_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override")), NULL);
- xs_cfg_emu_filters_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters")), NULL);
- xs_cfg_emu_sidplay1_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay1")), NULL);
- xs_cfg_emu_sidplay2_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2")), NULL);
- xs_cfg_oversample_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_oversample")), NULL);
- xs_cfg_mintime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_mintime_enable")), NULL);
- xs_cfg_maxtime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable")), NULL);
- xs_cfg_sldb_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_sld_enable")), NULL);
- xs_cfg_stil_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_stil_enable")), NULL);
- xs_cfg_subauto_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_subauto_enable")), NULL);
- xs_cfg_subauto_min_only_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_subauto_min_only")), NULL);
-
-
- /* Set current data to widgets */
- for (i = 0; i < xs_widtable_max; i++) {
- switch (xs_widtable[i].widType) {
- case WTYPE_BGROUP:
- assert(xs_widtable[i].itemType == CTYPE_INT);
- /* Check if current value matches the given one */
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)),
- (*((gint *) xs_widtable[i].itemData) == xs_widtable[i].itemSet));
- break;
-
- case WTYPE_COMBO:
- assert(xs_widtable[i].itemType == CTYPE_INT);
- g_snprintf(tmpStr, sizeof(tmpStr), "%d", *(gint *) xs_widtable[i].itemData);
- gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)), tmpStr);
- break;
-
- case WTYPE_SPIN:
- case WTYPE_SCALE:
- /* Get the value */
- switch (xs_widtable[i].itemType) {
- case CTYPE_INT:
- tmpValue = (gfloat) * ((gint *) xs_widtable[i].itemData);
- break;
-
- case CTYPE_FLOAT:
- tmpValue = *((gfloat *) xs_widtable[i].itemData);
- break;
-
- default:
- tmpValue = -1;
- assert(0);
- break;
- }
-
- /* Set the value */
- switch (xs_widtable[i].widType) {
- case WTYPE_SPIN:
- gtk_adjustment_set_value(gtk_spin_button_get_adjustment
- (GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName))), tmpValue);
- break;
-
- case WTYPE_SCALE:
- gtk_adjustment_set_value(gtk_range_get_adjustment
- (GTK_RANGE(LUW(xs_widtable[i].widName))), tmpValue);
- break;
- }
- break;
-
- case WTYPE_BUTTON:
- assert(xs_widtable[i].itemType == CTYPE_BOOL);
- /* Set toggle-button */
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)),
- *((gboolean *) xs_widtable[i].itemData));
- break;
-
- case WTYPE_TEXT:
- assert(xs_widtable[i].itemType == CTYPE_STR);
- /* Set text to text-widget */
- if (*(gchar **) xs_widtable[i].itemData != NULL) {
- gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)),
- *(gchar **) xs_widtable[i].itemData);
- }
- break;
- }
- }
-
- /* Release the configuration */
- XS_MUTEX_UNLOCK(xs_cfg);
-
- /* Show the widget */
- gtk_widget_show(xs_configwin);
-}
diff --git a/src/sid/xs_config.h b/src/sid/xs_config.h
index 5a03827..0bdac96 100644
--- a/src/sid/xs_config.h
+++ b/src/sid/xs_config.h
@@ -2,7 +2,6 @@
#define XS_CONFIG_H
#include "xmms-sid.h"
-#include "xs_curve.h"
#ifdef __cplusplus
extern "C" {
@@ -68,24 +67,29 @@ enum XS_SIDMODEL {
typedef struct {
+ gint x, y;
+} xs_int_point_t;
+
+
+typedef struct {
gchar *name;
gint type;
-
+
/* Filter type 0 for SIDPlay 1 */
gfloat fs, fm, ft;
-
+
/* Filter type 1-2 points */
xs_int_point_t points[XS_SIDPLAY2_NFPOINTS];
gint npoints;
-
+
/* Distortion patch tunables */
gfloat rate, point, voice_nonlinearity,
cf_treshold;
-
+
/* Filter Type 3 tunables */
gfloat baseresistance, offset, steepness,
minimumfetresistance;
-
+
/* Filter Type 4 tunables */
gfloat k, b;
} xs_sid_filter_t;
@@ -117,8 +121,8 @@ extern struct xs_cfg_t {
xs_sid_filter_t sid2Filter; /* Current SIDPlay2 filter */
xs_sid_filter_t **sid2FilterPresets;
gint sid2NFilterPresets;
-
-
+
+
/* Playing settings */
gboolean playMaxTimeEnable,
playMaxTimeUnknown; /* Use max-time only when song-length is unknown */
@@ -188,9 +192,6 @@ typedef struct {
/* Functions
*/
void xs_init_configuration(void);
-void xs_configure(void);
-void xs_read_configuration(void);
-gint xs_write_configuration(void);
#ifdef __cplusplus
}
diff --git a/src/sid/xs_curve.c b/src/sid/xs_curve.c
deleted file mode 100644
index 041b904..0000000
--- a/src/sid/xs_curve.c
+++ /dev/null
@@ -1,712 +0,0 @@
-/*
- XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
-
- XSCurve, a custom Gtk+ spline widget for representing SIDPlay2/reSID
- filter curves in the configuration GUI. Implementation based heavily
- on GtkCurve from Gtk+ 1.2.10 (C) 1997 David Mosberger.
- Spline formula from reSID 0.16 (C) 2004 Dag Lem.
-
- Programmed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
- (C) Copyright 2006-2007 Tecnic Software productions (TNSP)
-
- 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.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <stdio.h>
-#include "xs_curve.h"
-#include <gtk/gtkdrawingarea.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkprivate.h>
-
-
-#define RADIUS 3 /* radius of the control points */
-#define RADIUS2 (RADIUS * 2)
-#define MIN_DISTANCE 7 /* min distance between control points */
-
-
-#define GRAPH_MASK (GDK_EXPOSURE_MASK | \
- GDK_POINTER_MOTION_MASK | \
- GDK_POINTER_MOTION_HINT_MASK | \
- GDK_ENTER_NOTIFY_MASK | \
- GDK_BUTTON_PRESS_MASK | \
- GDK_BUTTON_RELEASE_MASK | \
- GDK_BUTTON1_MOTION_MASK)
-
-#define GET_X(i) curve->ctlpoints[i].x
-#define GET_Y(i) curve->ctlpoints[i].y
-
-
-enum {
- PROP_0,
- PROP_MIN_X,
- PROP_MAX_X,
- PROP_MIN_Y,
- PROP_MAX_Y
-};
-
-static GtkDrawingAreaClass *parent_class = NULL;
-
-static void xs_curve_class_init(XSCurveClass * class);
-static void xs_curve_init(XSCurve * curve);
-static void xs_curve_get_property(GObject * object, guint param_id,
- GValue * value, GParamSpec * pspec);
-static void xs_curve_set_property(GObject * object, guint param_id,
- const GValue * value, GParamSpec * pspec);
-static void xs_curve_finalize(GObject * object);
-static gint xs_curve_graph_events(GtkWidget * widget, GdkEvent * event, XSCurve * c);
-static void xs_curve_size_graph(XSCurve * curve);
-
-
-GtkType xs_curve_get_type(void)
-{
- static GType curve_type = 0;
-
- if (!curve_type) {
- static const GTypeInfo curve_info = {
- sizeof(XSCurveClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) xs_curve_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(XSCurve),
- 0, /* n_preallocs */
- (GInstanceInitFunc) xs_curve_init,
- };
-
- curve_type = g_type_register_static(
- GTK_TYPE_DRAWING_AREA, "XSCurve",
- &curve_info, 0);
- }
- return curve_type;
-}
-
-
-static void xs_curve_class_init(XSCurveClass *class)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS(class);
-
- parent_class = g_type_class_peek_parent(class);
-
- gobject_class->finalize = xs_curve_finalize;
-
- gobject_class->set_property = xs_curve_set_property;
- gobject_class->get_property = xs_curve_get_property;
-
- g_object_class_install_property(gobject_class, PROP_MIN_X,
- g_param_spec_float("min-x",
- "Minimum X",
- "Minimum possible value for X",
- -G_MAXFLOAT, G_MAXFLOAT, 0.0,
- GTK_PARAM_READWRITE)
- );
-
- g_object_class_install_property(gobject_class, PROP_MAX_X,
- g_param_spec_float("max-x",
- "Maximum X",
- "Maximum possible X value",
- -G_MAXFLOAT, G_MAXFLOAT, 1.0,
- GTK_PARAM_READWRITE)
- );
-
- g_object_class_install_property(gobject_class, PROP_MIN_Y,
- g_param_spec_float("min-y",
- "Minimum Y",
- "Minimum possible value for Y",
- -G_MAXFLOAT, G_MAXFLOAT, 0.0,
- GTK_PARAM_READWRITE)
- );
-
- g_object_class_install_property(gobject_class, PROP_MAX_Y,
- g_param_spec_float("max-y",
- "Maximum Y",
- "Maximum possible value for Y",
- -G_MAXFLOAT, G_MAXFLOAT, 1.0,
- GTK_PARAM_READWRITE)
- );
-}
-
-
-static void xs_curve_init(XSCurve *curve)
-{
- gint old_mask;
-
- curve->pixmap = NULL;
- curve->grab_point = -1;
-
- curve->nctlpoints = 0;
- curve->ctlpoints = NULL;
-
- curve->min_x = 0.0;
- curve->max_x = 2047.0;
- curve->min_y = 0.0;
- curve->max_y = 24000.0;
-
- old_mask = gtk_widget_get_events(GTK_WIDGET(curve));
- gtk_widget_set_events(GTK_WIDGET(curve), old_mask | GRAPH_MASK);
- g_signal_connect(curve, "event", G_CALLBACK(xs_curve_graph_events), curve);
- xs_curve_size_graph(curve);
-}
-
-
-static void xs_curve_set_property(GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec)
-{
- XSCurve *curve = XS_CURVE(object);
-
- switch (prop_id) {
- case PROP_MIN_X:
- xs_curve_set_range(curve,
- g_value_get_float(value), curve->max_x,
- curve->min_y, curve->max_y);
- break;
- case PROP_MAX_X:
- xs_curve_set_range(curve,
- curve->min_x, g_value_get_float(value),
- curve->min_y, curve->max_y);
- break;
- case PROP_MIN_Y:
- xs_curve_set_range(curve,
- curve->min_x, curve->max_x,
- g_value_get_float(value), curve->max_y);
- break;
- case PROP_MAX_Y:
- xs_curve_set_range(curve,
- curve->min_x, curve->max_x,
- curve->min_y, g_value_get_float(value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- break;
- }
-}
-
-
-static void xs_curve_get_property(GObject * object, guint prop_id, GValue * value, GParamSpec * pspec)
-{
- XSCurve *curve = XS_CURVE(object);
-
- switch (prop_id) {
- case PROP_MIN_X:
- g_value_set_float(value, curve->min_x);
- break;
- case PROP_MAX_X:
- g_value_set_float(value, curve->max_x);
- break;
- case PROP_MIN_Y:
- g_value_set_float(value, curve->min_y);
- break;
- case PROP_MAX_Y:
- g_value_set_float(value, curve->max_y);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- break;
- }
-}
-
-
-static int xs_project(gfloat value, gfloat min, gfloat max, int norm)
-{
- return (norm - 1) * ((value - min) / (max - min)) + 0.5;
-}
-
-
-static gfloat xs_unproject(gint value, gfloat min, gfloat max, int norm)
-{
- return value / (gfloat) (norm - 1) * (max - min) + min;
-}
-
-
-static inline void xs_cubic_coeff(gfloat x1, gfloat y1,
- gfloat x2, gfloat y2,
- gfloat k1, gfloat k2,
- gfloat *a, gfloat *b,
- gfloat *c, gfloat *d)
-{
- gfloat dx = x2 - x1, dy = y2 - y1;
-
- *a = ((k1 + k2) - 2 * dy / dx) / (dx * dx);
- *b = ((k2 - k1) / dx - 3 * (x1 + x2) * (*a)) / 2;
- *c = k1 - (3 * x1 * (*a) + 2 * (*b)) * x1;
- *d = y1 - ((x1 * (*a) + (*b)) * x1 + (*c)) * x1;
-}
-
-
-static void xs_curve_draw(XSCurve *curve, gint width, gint height)
-{
- gfloat res = 5.0f;
- GtkStateType state;
- GtkStyle *style;
- gint i, ox = -1, oy = -1;
- xs_point_t *p0, *p1, *p2, *p3;
-
- if (!curve->pixmap)
- return;
-
- state = GTK_STATE_NORMAL;
- if (!GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(curve)))
- state = GTK_STATE_INSENSITIVE;
-
- style = GTK_WIDGET(curve)->style;
-
- /* Clear the pixmap */
- gtk_paint_flat_box(style, curve->pixmap,
- GTK_STATE_NORMAL, GTK_SHADOW_NONE,
- NULL, GTK_WIDGET(curve), "curve_bg",
- 0, 0,
- width + RADIUS2,
- height + RADIUS2);
-
-
- /* Draw the grid */
- for (i = 0; i < 5; i++) {
- gdk_draw_line(curve->pixmap, style->dark_gc[state],
- RADIUS, i * (height / 4.0) + RADIUS,
- width + RADIUS, i * (height / 4.0) + RADIUS);
-
- gdk_draw_line(curve->pixmap, style->dark_gc[state],
- i * (width / 4.0) + RADIUS, RADIUS,
- i * (width / 4.0) + RADIUS, height + RADIUS);
- }
-
-#if 1
- /* Draw the spline/curve itself */
- p0 = curve->ctlpoints;
- p1 = p0;
- p2 = p1; p2++;
- p3 = p2; p3++;
-
- /* Draw each curve segment */
- if (curve->nctlpoints > 5)
- for (i = 0; i < curve->nctlpoints; i++, ++p0, ++p1, ++p2, ++p3) {
- gint n;
- gfloat k1, k2, a, b, c, d, x;
-
- if (p1->x == p2->x)
- continue;
-
- if (p0->x == p1->x && p2->x == p3->x) {
- k1 = k2 = (p2->y - p1->y) / (p2->x - p1->x);
- } else if (p0->x == p1->x) {
- k2 = (p3->y - p1->y) / (p3->x - p1->x);
- k1 = (3 * (p2->y - p1->y) / (p2->x - p1->x) - k2) / 2;
- } else if (p2->x == p3->x) {
- k1 = (p2->y - p0->y) / (p2->x - p0->x);
- k2 = (3 * (p2->y - p1->y) / (p2->x - p1->x) - k1) / 2;
- } else {
- k1 = (p2->y - p0->y) / (p2->x - p0->x);
- k2 = (p3->y - p1->y) / (p3->x - p1->x);
- }
-
- xs_cubic_coeff(p1->x, p1->y, p2->x, p2->y, k1, k2, &a, &b, &c, &d);
-
- for (x = p1->x; x <= p2->x; x += res, n++) {
- gfloat y = ((a * x + b) * x + c) * x + d;
- gint qx, qy;
- qx = RADIUS + xs_project(x, curve->min_x, curve->max_x, width);
- qy = RADIUS + xs_project(y, curve->min_y, curve->max_y, height);
-
- if (ox != -1) {
- gdk_draw_line(curve->pixmap, style->fg_gc[state],
- ox, oy, qx, qy);
- }
- ox = qx; oy = qy;
- }
- }
-
-#endif
-
- /* Draw control points */
- for (i = 0; i < curve->nctlpoints; ++i) {
- gint x, y;
- GtkStateType cstate;
-
- if (GET_X(i) < curve->min_x || GET_Y(i) < curve->min_y ||
- GET_X(i) >= curve->max_x || GET_Y(i) >= curve->max_y)
- continue;
-
- x = xs_project(GET_X(i), curve->min_x, curve->max_x, width);
- y = xs_project(GET_Y(i), curve->min_y, curve->max_y, height);
-
- if (i == curve->grab_point) {
- cstate = GTK_STATE_SELECTED;
- gdk_draw_line(curve->pixmap, style->fg_gc[cstate],
- x + RADIUS, RADIUS, x + RADIUS, height + RADIUS);
- gdk_draw_line(curve->pixmap, style->fg_gc[cstate],
- RADIUS, y + RADIUS, width + RADIUS, y + RADIUS);
- } else
- cstate = state;
-
- gdk_draw_arc(curve->pixmap, style->fg_gc[cstate], TRUE,
- x, y, RADIUS2, RADIUS2, 0, 360 * 64);
- }
-
- /* Draw pixmap in the widget */
- gdk_draw_pixmap(GTK_WIDGET(curve)->window,
- style->fg_gc[state], curve->pixmap,
- 0, 0, 0, 0,
- width + RADIUS2,
- height + RADIUS2);
-}
-
-
-static gint xs_curve_graph_events(GtkWidget *widget, GdkEvent *event, XSCurve *curve)
-{
- GdkCursorType new_type = curve->cursor_type;
- GdkEventButton *bevent;
- GtkWidget *w;
- gint i, width, height, x, y, tx, ty, cx, closest_point = 0, min_x;
- guint distance;
-
- w = GTK_WIDGET(curve);
- width = w->allocation.width - RADIUS2;
- height = w->allocation.height - RADIUS2;
-
- if ((width < 0) || (height < 0))
- return FALSE;
-
- /* get the pointer position */
- gdk_window_get_pointer(w->window, &tx, &ty, NULL);
- x = CLAMP((tx - RADIUS), 0, width - 1);
- y = CLAMP((ty - RADIUS), 0, height - 1);
- min_x = curve->min_x;
-
- distance = ~0U;
- for (i = 0; i < curve->nctlpoints; ++i) {
- cx = xs_project(GET_X(i), min_x, curve->max_x, width);
- if ((guint) abs(x - cx) < distance) {
- distance = abs(x - cx);
- closest_point = i;
- }
- }
-
- /* Act based on event type */
- switch (event->type) {
- case GDK_CONFIGURE:
- if (curve->pixmap)
- gdk_pixmap_unref(curve->pixmap);
- curve->pixmap = 0;
-
- /* fall through */
-
- case GDK_EXPOSE:
- if (!curve->pixmap) {
- curve->pixmap = gdk_pixmap_new(w->window,
- w->allocation.width, w->allocation.height, -1);
- }
- xs_curve_draw(curve, width, height);
- break;
-
- case GDK_BUTTON_PRESS:
- gtk_grab_add(widget);
-
- bevent = (GdkEventButton *) event;
- new_type = GDK_TCROSS;
-
- if (distance > MIN_DISTANCE) {
- /* insert a new control point */
- if (curve->nctlpoints > 0) {
- cx = xs_project(GET_X(closest_point), min_x, curve->max_x, width);
- if (x > cx) closest_point++;
- }
-
- curve->nctlpoints++;
-
- curve->ctlpoints = g_realloc(curve->ctlpoints,
- curve->nctlpoints * sizeof(*curve->ctlpoints));
-
- for (i = curve->nctlpoints - 1; i > closest_point; --i) {
- memcpy(curve->ctlpoints + i,
- curve->ctlpoints + i - 1,
- sizeof(*curve->ctlpoints));
- }
- }
-
- curve->grab_point = closest_point;
- GET_X(curve->grab_point) = xs_unproject(x, min_x, curve->max_x, width);
- GET_Y(curve->grab_point) = xs_unproject(y, curve->min_y, curve->max_y, height);
-
- xs_curve_draw(curve, width, height);
- break;
-
- case GDK_BUTTON_RELEASE:
- {
- gint src, dst;
-
- gtk_grab_remove(widget);
-
- /* delete inactive points: */
- for (src = dst = 0; src < curve->nctlpoints; ++src) {
- if (GET_X(src) >= min_x) {
- memcpy(curve->ctlpoints + dst,
- curve->ctlpoints + src,
- sizeof(*curve->ctlpoints));
- dst++;
- }
- }
-
- if (dst < src) {
- curve->nctlpoints -= (src - dst);
- if (curve->nctlpoints <= 0) {
- curve->nctlpoints = 1;
- GET_X(0) = min_x;
- GET_Y(0) = curve->min_y;
- xs_curve_draw(curve, width, height);
- }
- curve->ctlpoints = g_realloc(curve->ctlpoints,
- curve->nctlpoints * sizeof(*curve->ctlpoints));
- }
-
- new_type = GDK_FLEUR;
- curve->grab_point = -1;
- }
- xs_curve_draw(curve, width, height);
- break;
-
- case GDK_MOTION_NOTIFY:
- if (curve->grab_point == -1) {
- /* if no point is grabbed... */
- if (distance <= MIN_DISTANCE)
- new_type = GDK_FLEUR;
- else
- new_type = GDK_TCROSS;
- } else {
- gint leftbound, rightbound;
-
- /* drag the grabbed point */
- new_type = GDK_TCROSS;
-
- leftbound = -MIN_DISTANCE;
- if (curve->grab_point > 0) {
- leftbound = xs_project(
- GET_X(curve->grab_point-1),
- min_x, curve->max_x, width);
- }
-
- rightbound = width + RADIUS2 + MIN_DISTANCE;
- if (curve->grab_point + 1 < curve->nctlpoints) {
- rightbound = xs_project(
- GET_X(curve->grab_point+1),
- min_x, curve->max_x, width);
- }
-
- if ((tx <= leftbound) || (tx >= rightbound) ||
- (ty > height + RADIUS2 + MIN_DISTANCE) || (ty < -MIN_DISTANCE)) {
- GET_X(curve->grab_point) = min_x - 1.0;
- } else {
- GET_X(curve->grab_point) =
- xs_unproject(x, min_x, curve->max_x, width);
- GET_Y(curve->grab_point) =
- xs_unproject(y, curve->min_y, curve->max_y, height);
- }
-
- xs_curve_draw(curve, width, height);
- }
-
- /* See if cursor type was changed and update accordingly */
- if (new_type != (GdkCursorType) curve->cursor_type) {
- GdkCursor *cursor;
- curve->cursor_type = new_type;
- cursor = gdk_cursor_new(curve->cursor_type);
- gdk_window_set_cursor(w->window, cursor);
- gdk_cursor_destroy(cursor);
- }
- break;
-
- default:
- break;
- }
-
- return FALSE;
-}
-
-
-static void xs_curve_size_graph(XSCurve *curve)
-{
- gint width, height;
- gfloat aspect;
- GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(curve));
-
- width = (curve->max_x - curve->min_x) + 1;
- height = (curve->max_y - curve->min_y) + 1;
- aspect = width / (gfloat) height;
-
- if (width > gdk_screen_get_width(screen) / 4)
- width = gdk_screen_get_width(screen) / 4;
-
- if (height > gdk_screen_get_height(screen) / 4)
- height = gdk_screen_get_height(screen) / 4;
-
- if (aspect < 1.0)
- width = height * aspect;
- else
- height = width / aspect;
-
- gtk_widget_set_size_request(GTK_WIDGET(curve), width + RADIUS2, height + RADIUS2);
-}
-
-
-static void xs_curve_update(XSCurve *curve)
-{
- if (curve->pixmap) {
- gint width, height;
-
- width = GTK_WIDGET(curve)->allocation.width - RADIUS2;
- height = GTK_WIDGET(curve)->allocation.height - RADIUS2;
- xs_curve_draw(curve, width, height);
- }
-}
-
-
-void xs_curve_reset(XSCurve *curve)
-{
- if (curve->ctlpoints)
- g_free(curve->ctlpoints);
-
- curve->nctlpoints = 4;
- curve->ctlpoints = g_malloc(curve->nctlpoints * sizeof(curve->ctlpoints[0]));
-
- GET_X(0) = curve->min_x;
- GET_Y(0) = curve->min_y;
- GET_X(1) = curve->min_x;
- GET_Y(1) = curve->min_y;
-
- GET_X(2) = curve->max_x;
- GET_Y(2) = curve->max_y;
- GET_X(3) = curve->max_x;
- GET_Y(3) = curve->max_y;
-
- xs_curve_update(curve);
-}
-
-
-void xs_curve_set_range(XSCurve *curve, gfloat min_x, gfloat min_y, gfloat max_x, gfloat max_y)
-{
- g_object_freeze_notify(G_OBJECT(curve));
- if (curve->min_x != min_x) {
- curve->min_x = min_x;
- g_object_notify(G_OBJECT(curve), "min-x");
- }
- if (curve->max_x != max_x) {
- curve->max_x = max_x;
- g_object_notify(G_OBJECT(curve), "max-x");
- }
- if (curve->min_y != min_y) {
- curve->min_y = min_y;
- g_object_notify(G_OBJECT(curve), "min-y");
- }
- if (curve->max_y != max_y) {
- curve->max_y = max_y;
- g_object_notify(G_OBJECT(curve), "max-y");
- }
- g_object_thaw_notify(G_OBJECT(curve));
-
- xs_curve_size_graph(curve);
- xs_curve_reset(curve);
-}
-
-
-gboolean xs_curve_realloc_data(XSCurve *curve, gint npoints)
-{
- if (npoints != curve->nctlpoints) {
- curve->nctlpoints = npoints;
- curve->ctlpoints = (xs_point_t *) g_realloc(curve->ctlpoints,
- curve->nctlpoints * sizeof(*curve->ctlpoints));
-
- if (curve->ctlpoints == NULL)
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-void xs_curve_get_data(XSCurve *curve, xs_point_t ***points, gint **npoints)
-{
- *points = &(curve->ctlpoints);
- *npoints = &(curve->nctlpoints);
-}
-
-
-gboolean xs_curve_set_points(XSCurve *curve, xs_int_point_t *points, gint npoints)
-{
- gint i;
-
- if (!xs_curve_realloc_data(curve, npoints + 4))
- return FALSE;
-
- GET_X(0) = curve->min_x;
- GET_Y(0) = curve->min_y;
- GET_X(1) = curve->min_x;
- GET_Y(1) = curve->min_y;
-
- for (i = 0; i < npoints; i++) {
- GET_X(i+2) = points[i].x;
- GET_Y(i+2) = points[i].y;
- }
-
- GET_X(npoints+2) = curve->max_x;
- GET_Y(npoints+2) = curve->max_y;
- GET_X(npoints+3) = curve->max_x;
- GET_Y(npoints+3) = curve->max_y;
-
- xs_curve_update(curve);
- return TRUE;
-}
-
-
-gboolean xs_curve_get_points(XSCurve *curve, xs_int_point_t **points, gint *npoints)
-{
- gint i, n;
-
- n = curve->nctlpoints - 4;
-
- *points = g_malloc(n * sizeof(xs_int_point_t));
- if (*points == NULL)
- return FALSE;
-
- *npoints = n;
- for (i = 2; i < curve->nctlpoints - 2; i++) {
- (*points)[i].x = GET_X(i);
- (*points)[i].y = GET_Y(i);
- }
-
- return TRUE;
-}
-
-
-GtkWidget *xs_curve_new(void)
-{
- return g_object_new(XS_TYPE_CURVE, NULL);
-}
-
-
-static void xs_curve_finalize(GObject *object)
-{
- XSCurve *curve;
-
- g_return_if_fail(object != NULL);
- g_return_if_fail(XS_IS_CURVE(object));
-
- curve = XS_CURVE(object);
- if (curve->pixmap)
- g_object_unref(curve->pixmap);
- if (curve->ctlpoints)
- g_free(curve->ctlpoints);
-
- G_OBJECT_CLASS(parent_class)->finalize(object);
-}
diff --git a/src/sid/xs_curve.h b/src/sid/xs_curve.h
index 0b6b4a4..47e37b2 100644
--- a/src/sid/xs_curve.h
+++ b/src/sid/xs_curve.h
@@ -2,7 +2,7 @@
#define XS_CURVE_H
#include <gdk/gdk.h>
-#include <gtk/gtkdrawingarea.h>
+#include <gtk/gtk.h>
G_BEGIN_DECLS
@@ -29,6 +29,7 @@ typedef struct {
gint x, y;
} xs_int_point_t;
+#if 0
struct _XSCurve {
GtkDrawingArea graph;
@@ -60,6 +61,7 @@ gboolean xs_curve_realloc_data (XSCurve *curve, gint npoints);
void xs_curve_get_data (XSCurve *curve, xs_point_t ***points, gint **npoints);
gboolean xs_curve_set_points (XSCurve *curve, xs_int_point_t *points, gint npoints);
gboolean xs_curve_get_points (XSCurve *curve, xs_int_point_t **points, gint *npoints);
+#endif
G_END_DECLS
diff --git a/src/sid/xs_fileinfo.c b/src/sid/xs_fileinfo.c
deleted file mode 100644
index 4814876..0000000
--- a/src/sid/xs_fileinfo.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
-
- File information window
-
- Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
- (C) Copyright 1999-2007 Tecnic Software productions (TNSP)
-
- 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.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include <libaudcore/audstrings.h>
-
-#include "xs_fileinfo.h"
-#include "xs_player.h"
-#include "xs_support.h"
-#include "xs_config.h"
-#include "xs_interface.h"
-#include "xs_glade.h"
-#include "xs_slsup.h"
-
-
-static GtkWidget *xs_fileinfowin = NULL;
-static stil_node_t *xs_fileinfostil = NULL;
-XS_MUTEX(xs_fileinfowin);
-
-#define LUW(x) lookup_widget(xs_fileinfowin, x)
-
-
-void xs_fileinfo_ok(void)
-{
- XS_MUTEX_LOCK(xs_fileinfowin);
- if (xs_fileinfowin) {
- gtk_widget_destroy(xs_fileinfowin);
- xs_fileinfowin = NULL;
- }
- XS_MUTEX_UNLOCK(xs_fileinfowin);
-}
-
-
-gboolean xs_fileinfo_delete(GtkWidget * widget, GdkEvent * event, gpointer user_data)
-{
- (void) widget;
- (void) event;
- (void) user_data;
-
- XSDEBUG("delete_event\n");
- xs_fileinfo_ok();
- return FALSE;
-}
-
-
-static void xs_fileinfo_subtune(GtkWidget * widget, void *data)
-{
- stil_subnode_t *tmpNode;
- GtkWidget *tmpText;
- gchar *subName, *subAuthor, *subInfo;
-
- (void) widget;
- (void) data;
-
- /* Freeze text-widget and delete the old text */
- tmpText = LUW("fileinfo_sub_info");
-
- /* Get subtune information */
- tmpNode = (stil_subnode_t *) data;
- if (!tmpNode && xs_fileinfostil)
- tmpNode = xs_fileinfostil->subTunes[0];
-
- if (tmpNode) {
- subName = tmpNode->name;
- subAuthor = tmpNode->author;
- subInfo = tmpNode->info;
- } else {
- subName = NULL;
- subAuthor = NULL;
- subInfo = NULL;
- }
-
- /* Get and set subtune information */
- gtk_entry_set_text(GTK_ENTRY(LUW("fileinfo_sub_name")), subName ? subName : "");
- gtk_entry_set_text(GTK_ENTRY(LUW("fileinfo_sub_author")), subAuthor ? subAuthor : "");
-
- gtk_text_buffer_set_text(GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmpText))),
- subInfo ? subInfo : "", -1);
-}
-
-
-void xs_fileinfo(const gchar * filename)
-{
- GtkWidget *tmpMenuItem, *tmpMenu, *tmpOptionMenu;
- xs_tuneinfo_t *tmpInfo;
- stil_subnode_t *tmpNode;
- gchar tmpStr[256], *tmpFilename;
- gint n;
-
- /* Current implementation leaves old fileinfo window untouched if
- * no information can be found for the new file. Hmm...
- */
- tmpFilename = filename_split_subtune(filename, &n);
-
- /* Get new tune information */
- XS_MUTEX_LOCK(xs_fileinfowin);
- XS_MUTEX_LOCK(xs_status);
- if ((tmpInfo = xs_status.sidPlayer->plrGetSIDInfo(tmpFilename)) == NULL) {
- XS_MUTEX_UNLOCK(xs_fileinfowin);
- XS_MUTEX_UNLOCK(xs_status);
- return;
- }
- XS_MUTEX_UNLOCK(xs_status);
-
- xs_fileinfostil = xs_stil_get(tmpFilename);
- g_free(tmpFilename);
-
- /* Check if there already is an open fileinfo window */
- if (xs_fileinfowin)
- XS_WINDOW_PRESENT(xs_fileinfowin);
- else
- xs_fileinfowin = create_xs_fileinfowin();
-
- /* Delete current items */
- tmpOptionMenu = LUW("fileinfo_sub_tune");
- tmpMenu = gtk_option_menu_get_menu(GTK_OPTION_MENU(tmpOptionMenu));
- gtk_widget_destroy(tmpMenu);
- gtk_option_menu_remove_menu(GTK_OPTION_MENU(tmpOptionMenu));
- tmpMenu = gtk_menu_new();
-
-
- /* Set the generic song information */
- gtk_entry_set_text(GTK_ENTRY(LUW("fileinfo_filename")), filename);
- gtk_entry_set_text(GTK_ENTRY(LUW("fileinfo_songname")), tmpInfo->sidName);
- gtk_entry_set_text(GTK_ENTRY(LUW("fileinfo_composer")), tmpInfo->sidComposer);
- gtk_entry_set_text(GTK_ENTRY(LUW("fileinfo_copyright")), tmpInfo->sidCopyright);
-
-
- /* Main tune - the pseudo tune */
- tmpMenuItem = gtk_menu_item_new_with_label(_("General info"));
- gtk_widget_show(tmpMenuItem);
- gtk_menu_append(GTK_MENU(tmpMenu), tmpMenuItem);
-
- tmpNode = (xs_fileinfostil != NULL) ? xs_fileinfostil->subTunes[0] : NULL;
- XS_SIGNAL_CONNECT(tmpMenuItem, "activate", xs_fileinfo_subtune, tmpNode);
-
- /* Other menu items */
- for (n = 1; n <= tmpInfo->nsubTunes; n++) {
- if (xs_fileinfostil && n <= xs_fileinfostil->nsubTunes && xs_fileinfostil->subTunes[n]) {
- gboolean isSet = FALSE;
- tmpNode = xs_fileinfostil->subTunes[n];
-
- g_snprintf(tmpStr, sizeof(tmpStr), _("Tune #%i: "), n);
-
- if (tmpNode->name) {
- xs_pnstrcat(tmpStr, sizeof(tmpStr), tmpNode->name);
- isSet = TRUE;
- }
-
- if (tmpNode->title) {
- xs_pnstrcat(tmpStr, sizeof(tmpStr),
- isSet ? " [*]" : tmpNode->title);
- isSet = TRUE;
- }
-
- if (tmpNode->info) {
- xs_pnstrcat(tmpStr, sizeof(tmpStr), " [!]");
- isSet = TRUE;
- }
-
- if (!isSet)
- xs_pnstrcat(tmpStr, sizeof(tmpStr), "---");
-
- tmpMenuItem = gtk_menu_item_new_with_label(tmpStr);
- gtk_widget_show(tmpMenuItem);
- gtk_menu_append(GTK_MENU(tmpMenu), tmpMenuItem);
- XS_SIGNAL_CONNECT(tmpMenuItem, "activate", xs_fileinfo_subtune, tmpNode);
- }
-
- }
-
- gtk_option_menu_set_menu(GTK_OPTION_MENU(tmpOptionMenu), tmpMenu);
- gtk_widget_show(tmpOptionMenu);
-
- /* Set the subtune information */
- xs_fileinfo_subtune(tmpOptionMenu, NULL);
-
- /* Free temporary tuneinfo */
- xs_tuneinfo_free(tmpInfo);
-
- /* Show the window */
- gtk_widget_show(xs_fileinfowin);
-
- XS_MUTEX_UNLOCK(xs_fileinfowin);
-}
diff --git a/src/sid/xs_fileinfo.h b/src/sid/xs_fileinfo.h
deleted file mode 100644
index 9bb7be1..0000000
--- a/src/sid/xs_fileinfo.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef XS_FILEINFO_H
-#define XS_FILEINFO_H
-
-#include "xmms-sid.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef AUDACIOUS_PLUGIN
-void xs_fileinfo_update(void);
-#endif
-void xs_fileinfo(const gchar *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* XS_FILEINFO_H */
diff --git a/src/sid/xs_genui.c b/src/sid/xs_genui.c
deleted file mode 100644
index 91234e4..0000000
--- a/src/sid/xs_genui.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-#include "xs_genui.h"
-#include "xs_interface.h"
-#include "xs_glade.h"
-
diff --git a/src/sid/xs_genui.h b/src/sid/xs_genui.h
deleted file mode 100644
index 38348e2..0000000
--- a/src/sid/xs_genui.h
+++ /dev/null
@@ -1,194 +0,0 @@
-#include <gtk/gtk.h>
-
-
-gboolean
-xs_configwin_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_cfg_oversample_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_emu_sidplay1_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_emu_sidplay2_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_emu_filters_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_sp1_filter_reset (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_sp2_filter_export (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_sp2_filter_load (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_sp2_filter_save (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_sp2_filter_import (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_sp2_filter_delete (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_mintime_enable_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_mintime_changed (GtkEditable *editable,
- gpointer user_data);
-
-void
-xs_cfg_maxtime_enable_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_maxtime_changed (GtkEditable *editable,
- gpointer user_data);
-
-void
-xs_cfg_sldb_enable_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_sldb_browse (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_stil_enable_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_stil_browse (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_hvsc_browse (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_ftitle_override_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_subauto_enable_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_subauto_min_only_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
-
-void
-xs_cfg_ok (GtkButton *button,
- gpointer user_data);
-
-void
-xs_cfg_cancel (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_fileinfo_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_subctrl_prevsong (GtkButton *button,
- gpointer user_data);
-
-void
-xs_subctrl_nextsong (GtkButton *button,
- gpointer user_data);
-
-void
-xs_fileinfo_ok (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_sldb_fs_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_sldb_fs_ok (GtkButton *button,
- gpointer user_data);
-
-void
-xs_sldb_fs_cancel (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_stil_fs_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_stil_fs_ok (GtkButton *button,
- gpointer user_data);
-
-void
-xs_stil_fs_cancel (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_hvsc_fs_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_hvsc_fs_ok (GtkButton *button,
- gpointer user_data);
-
-void
-xs_hvsc_fs_cancel (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_filter_import_fs_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_filter_import_fs_ok (GtkButton *button,
- gpointer user_data);
-
-void
-xs_filter_import_fs_cancel (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_filter_export_fs_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_filter_export_fs_ok (GtkButton *button,
- gpointer user_data);
-
-void
-xs_filter_export_fs_cancel (GtkButton *button,
- gpointer user_data);
-
-gboolean
-xs_confirmwin_delete (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data);
-
-void
-xs_cfg_ftitle_override_toggled (GtkToggleButton *togglebutton,
- gpointer user_data);
diff --git a/src/sid/xs_glade.c b/src/sid/xs_glade.c
deleted file mode 100644
index d114eb3..0000000
--- a/src/sid/xs_glade.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <gtk/gtk.h>
-
-#include "xs_glade.h"
-
-GtkWidget*
-lookup_widget (GtkWidget *widget,
- const gchar *widget_name)
-{
- GtkWidget *parent, *found_widget;
-
- for (;;)
- {
- if (GTK_IS_MENU (widget))
- parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
- else
- parent = widget->parent;
- if (!parent)
- parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
- if (parent == NULL)
- break;
- widget = parent;
- }
-
- found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
- widget_name);
- if (!found_widget)
- g_warning ("Widget not found: %s", widget_name);
- return found_widget;
-}
-
-static GList *pixmaps_directories = NULL;
-
-/* Use this function to set the directory containing installed pixmaps. */
-void
-add_pixmap_directory (const gchar *directory)
-{
- pixmaps_directories = g_list_prepend (pixmaps_directories,
- g_strdup (directory));
-}
-
-/* This is an internally used function to find pixmap files. */
-static gchar*
-find_pixmap_file (const gchar *filename)
-{
- GList *elem;
-
- /* We step through each of the pixmaps directory to find it. */
- elem = pixmaps_directories;
- while (elem)
- {
- gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
- G_DIR_SEPARATOR_S, filename);
- if (g_file_test (pathname, G_FILE_TEST_EXISTS))
- return pathname;
- g_free (pathname);
- elem = elem->next;
- }
- return NULL;
-}
-
-/* This is an internally used function to create pixmaps. */
-GtkWidget*
-create_pixmap (GtkWidget *widget,
- const gchar *filename)
-{
- gchar *pathname = NULL;
- GtkWidget *pixmap;
-
- if (!filename || !filename[0])
- return gtk_image_new ();
-
- pathname = find_pixmap_file (filename);
-
- if (!pathname)
- {
- g_warning (_("Couldn't find pixmap file: %s"), filename);
- return gtk_image_new ();
- }
-
- pixmap = gtk_image_new_from_file (pathname);
- g_free (pathname);
- return pixmap;
-}
-
-/* This is an internally used function to create pixmaps. */
-GdkPixbuf*
-create_pixbuf (const gchar *filename)
-{
- gchar *pathname = NULL;
- GdkPixbuf *pixbuf;
- GError *error = NULL;
-
- if (!filename || !filename[0])
- return NULL;
-
- pathname = find_pixmap_file (filename);
-
- if (!pathname)
- {
- g_warning (_("Couldn't find pixmap file: %s"), filename);
- return NULL;
- }
-
- pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
- if (!pixbuf)
- {
- fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
- pathname, error->message);
- g_error_free (error);
- }
- g_free (pathname);
- return pixbuf;
-}
-
-/* This is used to set ATK action descriptions. */
-void
-glade_set_atk_action_description (AtkAction *action,
- const gchar *action_name,
- const gchar *description)
-{
- gint n_actions, i;
-
- n_actions = atk_action_get_n_actions (action);
- for (i = 0; i < n_actions; i++)
- {
- if (!strcmp (atk_action_get_name (action, i), action_name))
- atk_action_set_description (action, i, description);
- }
-}
-
diff --git a/src/sid/xs_glade.h b/src/sid/xs_glade.h
deleted file mode 100644
index a32649e..0000000
--- a/src/sid/xs_glade.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-/*
- * Standard gettext macros.
- */
-#ifdef ENABLE_NLS
-# include <libintl.h>
-# undef _
-# define _(String) dgettext (PACKAGE, String)
-# define Q_(String) g_strip_context ((String), gettext (String))
-# ifdef gettext_noop
-# define N_(String) gettext_noop (String)
-# else
-# define N_(String) (String)
-# endif
-#else
-# define textdomain(String) (String)
-# define gettext(String) (String)
-# define dgettext(Domain,Message) (Message)
-# define dcgettext(Domain,Message,Type) (Message)
-# define bindtextdomain(Domain,Directory) (Domain)
-# define _(String) (String)
-# define Q_(String) g_strip_context ((String), (String))
-# define N_(String) (String)
-#endif
-
-
-/*
- * Public Functions.
- */
-
-/*
- * This function returns a widget in a component created by Glade.
- * Call it with the toplevel widget in the component (i.e. a window/dialog),
- * or alternatively any widget in the component, and the name of the widget
- * you want returned.
- */
-GtkWidget* lookup_widget (GtkWidget *widget,
- const gchar *widget_name);
-
-
-/* Use this function to set the directory containing installed pixmaps. */
-void add_pixmap_directory (const gchar *directory);
-
-
-/*
- * Private Functions.
- */
-
-/* This is used to create the pixmaps used in the interface. */
-GtkWidget* create_pixmap (GtkWidget *widget,
- const gchar *filename);
-
-/* This is used to create the pixbufs used in the interface. */
-GdkPixbuf* create_pixbuf (const gchar *filename);
-
-/* This is used to set ATK action descriptions. */
-void glade_set_atk_action_description (AtkAction *action,
- const gchar *action_name,
- const gchar *description);
-
diff --git a/src/sid/xs_init.c b/src/sid/xs_init.c
index de37689..76ca8d5 100644
--- a/src/sid/xs_init.c
+++ b/src/sid/xs_init.c
@@ -1,8 +1,8 @@
-/*
+/*
XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
Plugin initialization point
-
+
Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
(C) Copyright 1999-2007 Tecnic Software productions (TNSP)
@@ -22,30 +22,19 @@
*/
#include "xmms-sid.h"
#include "xs_config.h"
-#include "xs_fileinfo.h"
static const gchar *xs_sid_fmts[] = { "sid", "psid", NULL };
-
-InputPlugin xs_plugin_ip = {
- .description = XS_PACKAGE_STRING, /* Plugin description */
+AUD_INPUT_PLUGIN
+(
+ .name = XS_PACKAGE_STRING, /* Plugin description */
.init = xs_init, /* Initialization */
.cleanup = xs_close, /* Cleanup */
- .about = xs_about, /* Show aboutbox */
- .configure = xs_configure, /* Show/edit configuration */
-
- .play = xs_play_file, /* Play given file */
+ .play = xs_play_file, /* Play given file */
.stop = xs_stop, /* Stop playing */
.pause = xs_pause, /* Pause playing */
-
- .file_info_box = xs_fileinfo, /* Show file-information dialog */
-
- .get_song_tuple = xs_get_song_tuple,/* Get Tuple */
- .vfs_extensions = xs_sid_fmts, /* File ext assist */
.probe_for_tuple = xs_probe_for_tuple,
- .have_subtune = TRUE
-};
-static InputPlugin *sid_iplist[] = { &xs_plugin_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN(sid, sid_iplist);
+ .extensions = xs_sid_fmts, /* File ext assist */
+ .have_subtune = TRUE
+)
diff --git a/src/sid/xs_interface.c b/src/sid/xs_interface.c
deleted file mode 100644
index 1444a3d..0000000
--- a/src/sid/xs_interface.c
+++ /dev/null
@@ -1,2151 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include "xs_genui.h"
-#include "xs_interface.h"
-#include "xs_glade.h"
-
-#define GLADE_HOOKUP_OBJECT(component,widget,name) \
- g_object_set_data_full (G_OBJECT (component), name, \
- gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
-
-#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
- g_object_set_data (G_OBJECT (component), name, widget)
-
-GtkWidget*
-create_xs_configwin (void)
-{
- GtkWidget *xs_configwin;
- GtkWidget *w_vbox1;
- GtkWidget *cfg_notebook;
- GtkWidget *w_vbox6;
- GtkWidget *w_hbox2;
- GtkWidget *cfg_sndres_frame;
- GtkWidget *w_vbox9;
- GtkWidget *cfg_res_8bit;
- GSList *cfg_res_8bit_group = NULL;
- GtkWidget *cfg_res_16bit;
- GtkWidget *label1;
- GtkWidget *cfg_channels_frame;
- GtkWidget *w_vbox10;
- GtkWidget *cfg_chn_mono;
- GSList *cfg_chn_mono_group = NULL;
- GtkWidget *cfg_chn_stereo;
- GtkWidget *cfg_chn_autopan;
- GtkWidget *label2;
- GtkWidget *cfg_samplerate_frame;
- GtkWidget *w_hbox4;
- GtkWidget *cfg_samplerate_combo;
- GList *cfg_samplerate_combo_items = NULL;
- GtkWidget *cfg_samplerate;
- GtkWidget *w_label8;
- GtkWidget *w_label54;
- GtkWidget *label3;
- GtkWidget *cfg_oversample_frame;
- GtkWidget *w_vbox27;
- GtkWidget *cfg_oversample;
- GtkWidget *cfg_oversample_box;
- GtkWidget *cfg_oversample_label1;
- GtkObject *cfg_oversample_factor_adj;
- GtkWidget *cfg_oversample_factor;
- GtkWidget *cfg_oversample_label2;
- GtkWidget *label4;
- GtkWidget *w_label1;
- GtkWidget *w_vbox2;
- GtkWidget *w_hbox1;
- GtkWidget *cfg_clock_frame;
- GtkWidget *w_vbox4;
- GtkWidget *cfg_emu_clock_force;
- GtkWidget *cfg_emu_clock_pal;
- GSList *cfg_emu_clock_pal_group = NULL;
- GtkWidget *cfg_emu_clock_ntsc;
- GtkWidget *label5;
- GtkWidget *cfg_sid_model_frame;
- GtkWidget *w_vbox3;
- GtkWidget *cfg_emu_sid_force;
- GtkWidget *cfg_emu_mos6581;
- GSList *cfg_emu_mos6581_group = NULL;
- GtkWidget *cfg_emu_mos8580;
- GtkWidget *label6;
- GtkWidget *cfg_emulib_frame;
- GtkWidget *w_vbox26;
- GtkWidget *cfg_emu_sidplay1;
- GSList *cfg_emu_sidplay1_group = NULL;
- GtkWidget *cfg_emu_sidplay2;
- GtkWidget *label7;
- GtkWidget *cfg_memmode_frame;
- GtkWidget *w_vbox5;
- GtkWidget *cfg_emu_mem_real;
- GSList *cfg_emu_mem_real_group = NULL;
- GtkWidget *cfg_emu_mem_banksw;
- GtkWidget *cfg_emu_mem_transrom;
- GtkWidget *cfg_emu_mem_playsid;
- GtkWidget *label8;
- GtkWidget *w_label2;
- GtkWidget *w_vbox29;
- GtkWidget *cfg_sidplay2_frame;
- GtkWidget *w_vbox30;
- GtkWidget *cfg_emu_sp2_opt;
- GtkWidget *cfg_emu_sp2_resid;
- GSList *cfg_emu_sp2_resid_group = NULL;
- GtkWidget *cfg_emu_sp2_hardsid;
- GtkWidget *label9;
- GtkWidget *cfg_resid_frame;
- GtkWidget *w_vbox37;
- GtkWidget *cfg_emu_resid_fast;
- GSList *cfg_emu_resid_fast_group = NULL;
- GtkWidget *cfg_emu_resid_int;
- GtkWidget *cfg_emu_resid_res_fast;
- GtkWidget *cfg_emu_resid_res_int;
- GtkWidget *label10;
- GtkWidget *w_label48;
- GtkWidget *w_vbox25;
- GtkWidget *cfg_emu_filters;
- GtkWidget *cfg_filters_notebook;
- GtkWidget *cfg_box_filter_sidplay1;
- GtkWidget *cfg_sp1_frm_fs;
- GtkWidget *cfg_sp1_filter_fs;
- GtkWidget *label11;
- GtkWidget *cfg_sp1_frm_fm;
- GtkWidget *cfg_sp1_filter_fm;
- GtkWidget *label12;
- GtkWidget *cfg_sp1_frm_ft;
- GtkWidget *cfg_sp1_filter_ft;
- GtkWidget *label13;
- GtkWidget *w_vbox17;
- GtkWidget *cfg_sp1_filter_reset;
- GtkWidget *w_label55;
- GtkWidget *cfg_box_filter_sidplay2;
- GtkWidget *cfg_sp_filter_controlbox;
- GtkWidget *cfg_sp2_filter_combo;
- GList *cfg_sp2_filter_combo_items = NULL;
- GtkWidget *cfg_sp2_filter_combo_entry;
- GtkWidget *table3;
- GtkWidget *cfg_sp2_filter_export;
- GtkWidget *cfg_sp2_filter_load;
- GtkWidget *cfg_sp2_filter_save;
- GtkWidget *cfg_sp2_filter_import;
- GtkWidget *cfg_sp2_filter_delete;
- GtkWidget *cfg_sp2_filter_frame;
- GtkWidget *label14;
- GtkWidget *w_label56;
- GtkWidget *w_label24;
- GtkWidget *w_vbox20;
- GtkWidget *w_frame29;
- GtkWidget *w_vbox32;
- GtkWidget *cfg_mintime_enable;
- GtkWidget *cfg_mintime_box;
- GtkWidget *cfg_mintime_label1;
- GtkObject *cfg_mintime_adj;
- GtkWidget *cfg_mintime;
- GtkWidget *cfg_mintime_label2;
- GtkWidget *label15;
- GtkWidget *w_frame21;
- GtkWidget *w_vbox21;
- GtkWidget *cfg_maxtime_enable;
- GtkWidget *cfg_maxtime_unknown;
- GtkWidget *cfg_maxtime_box;
- GtkWidget *cfg_maxtime_label1;
- GtkObject *cfg_maxtime_adj;
- GtkWidget *cfg_maxtime;
- GtkWidget *cfg_maxtime_label2;
- GtkWidget *label16;
- GtkWidget *w_frame18;
- GtkWidget *w_vbox18;
- GtkWidget *cfg_sld_enable;
- GtkWidget *cfg_sld_box;
- GtkWidget *cfg_sld_label1;
- GtkWidget *cfg_sld_dbpath;
- GtkWidget *cfg_sld_dbbrowse;
- GtkWidget *alignment1;
- GtkWidget *hbox1;
- GtkWidget *image1;
- GtkWidget *label30;
- GtkWidget *label17;
- GtkWidget *w_label26;
- GtkWidget *frame1;
- GtkWidget *vbox1;
- GtkWidget *cfg_ftitle_override;
- GtkWidget *cfg_ftitle_box;
- GtkWidget *cfg_ftitle_format;
- GtkWidget *cfg_ftitle_descs;
- GtkWidget *label29;
- GtkWidget *w_label27;
- GtkWidget *w_vbox19;
- GtkWidget *w_frame31;
- GtkWidget *w_vbox35;
- GtkWidget *cfg_subauto_enable;
- GtkWidget *cfg_subauto_min_only;
- GtkWidget *cfg_subauto_box;
- GtkWidget *w_label52;
- GtkObject *cfg_subauto_mintime_adj;
- GtkWidget *cfg_subauto_mintime;
- GtkWidget *w_label53;
- GtkWidget *label21;
- GtkWidget *w_frame7;
- GtkWidget *w_vbox8;
- GtkWidget *cfg_stil_enable;
- GtkWidget *cfg_stil_box1;
- GtkWidget *cfg_stil_label1;
- GtkWidget *w_alignment2;
- GtkWidget *cfg_stil_dbpath;
- GtkWidget *w_alignment1;
- GtkWidget *cfg_stil_browse;
- GtkWidget *alignment2;
- GtkWidget *hbox2;
- GtkWidget *image2;
- GtkWidget *label31;
- GtkWidget *cfg_stil_box2;
- GtkWidget *cfg_hvsc_label1;
- GtkWidget *w_alignment6;
- GtkWidget *cfg_hvsc_path;
- GtkWidget *w_alignment7;
- GtkWidget *cfg_hvsc_browse;
- GtkWidget *alignment3;
- GtkWidget *hbox3;
- GtkWidget *image3;
- GtkWidget *label32;
- GtkWidget *label18;
- GtkWidget *w_label3;
- GtkWidget *hbuttonbox1;
- GtkWidget *cfg_cancel;
- GtkWidget *cfg_ok;
- GtkTooltips *tooltips;
-
- tooltips = gtk_tooltips_new ();
-
- xs_configwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(xs_configwin), GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_widget_set_name (xs_configwin, "xs_configwin");
- gtk_window_set_title (GTK_WINDOW (xs_configwin), _("Audacious-SID configuration"));
-
- w_vbox1 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox1, "w_vbox1");
- gtk_widget_show (w_vbox1);
- gtk_container_add (GTK_CONTAINER (xs_configwin), w_vbox1);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox1), 8);
-
- cfg_notebook = gtk_notebook_new ();
- gtk_widget_set_name (cfg_notebook, "cfg_notebook");
- gtk_widget_show (cfg_notebook);
- gtk_box_pack_start (GTK_BOX (w_vbox1), cfg_notebook, TRUE, TRUE, 0);
- gtk_notebook_set_show_border (GTK_NOTEBOOK (cfg_notebook), FALSE);
-
- w_vbox6 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox6, "w_vbox6");
- gtk_widget_show (w_vbox6);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), w_vbox6);
-
- w_hbox2 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (w_hbox2, "w_hbox2");
- gtk_widget_show (w_hbox2);
- gtk_box_pack_start (GTK_BOX (w_vbox6), w_hbox2, FALSE, TRUE, 0);
-
- cfg_sndres_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sndres_frame, "cfg_sndres_frame");
- gtk_widget_show (cfg_sndres_frame);
- gtk_box_pack_start (GTK_BOX (w_hbox2), cfg_sndres_frame, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sndres_frame), 4);
-
- w_vbox9 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox9, "w_vbox9");
- gtk_widget_show (w_vbox9);
- gtk_container_add (GTK_CONTAINER (cfg_sndres_frame), w_vbox9);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox9), 2);
-
- cfg_res_8bit = gtk_radio_button_new_with_mnemonic (NULL, _("8-bit"));
- gtk_widget_set_name (cfg_res_8bit, "cfg_res_8bit");
- gtk_widget_show (cfg_res_8bit);
- gtk_box_pack_start (GTK_BOX (w_vbox9), cfg_res_8bit, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_res_8bit), cfg_res_8bit_group);
- cfg_res_8bit_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_res_8bit));
-
- cfg_res_16bit = gtk_radio_button_new_with_mnemonic (NULL, _("16-bit"));
- gtk_widget_set_name (cfg_res_16bit, "cfg_res_16bit");
- gtk_widget_show (cfg_res_16bit);
- gtk_box_pack_start (GTK_BOX (w_vbox9), cfg_res_16bit, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_res_16bit), cfg_res_8bit_group);
- cfg_res_8bit_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_res_16bit));
-
- label1 = gtk_label_new (_("Resolution:"));
- gtk_widget_set_name (label1, "label1");
- gtk_widget_show (label1);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sndres_frame), label1);
-
- cfg_channels_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_channels_frame, "cfg_channels_frame");
- gtk_widget_show (cfg_channels_frame);
- gtk_box_pack_start (GTK_BOX (w_hbox2), cfg_channels_frame, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_channels_frame), 4);
-
- w_vbox10 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox10, "w_vbox10");
- gtk_widget_show (w_vbox10);
- gtk_container_add (GTK_CONTAINER (cfg_channels_frame), w_vbox10);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox10), 2);
-
- cfg_chn_mono = gtk_radio_button_new_with_mnemonic (NULL, _("Mono"));
- gtk_widget_set_name (cfg_chn_mono, "cfg_chn_mono");
- gtk_widget_show (cfg_chn_mono);
- gtk_box_pack_start (GTK_BOX (w_vbox10), cfg_chn_mono, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_chn_mono), cfg_chn_mono_group);
- cfg_chn_mono_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_chn_mono));
-
- cfg_chn_stereo = gtk_radio_button_new_with_mnemonic (NULL, _("Stereo"));
- gtk_widget_set_name (cfg_chn_stereo, "cfg_chn_stereo");
- gtk_widget_show (cfg_chn_stereo);
- gtk_box_pack_start (GTK_BOX (w_vbox10), cfg_chn_stereo, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_chn_stereo), cfg_chn_mono_group);
- cfg_chn_mono_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_chn_stereo));
-
- cfg_chn_autopan = gtk_radio_button_new_with_mnemonic (NULL, _("Autopanning"));
- gtk_widget_set_name (cfg_chn_autopan, "cfg_chn_autopan");
- gtk_widget_show (cfg_chn_autopan);
- gtk_box_pack_start (GTK_BOX (w_vbox10), cfg_chn_autopan, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_chn_autopan), cfg_chn_mono_group);
- cfg_chn_mono_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_chn_autopan));
-
- label2 = gtk_label_new (_("Channels:"));
- gtk_widget_set_name (label2, "label2");
- gtk_widget_show (label2);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_channels_frame), label2);
-
- cfg_samplerate_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_samplerate_frame, "cfg_samplerate_frame");
- gtk_widget_show (cfg_samplerate_frame);
- gtk_box_pack_start (GTK_BOX (w_vbox6), cfg_samplerate_frame, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_samplerate_frame), 4);
-
- w_hbox4 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (w_hbox4, "w_hbox4");
- gtk_widget_show (w_hbox4);
- gtk_container_add (GTK_CONTAINER (cfg_samplerate_frame), w_hbox4);
- gtk_container_set_border_width (GTK_CONTAINER (w_hbox4), 4);
-
- cfg_samplerate_combo = gtk_combo_new ();
- g_object_set_data (G_OBJECT (GTK_COMBO (cfg_samplerate_combo)->popwin),
- "GladeParentKey", cfg_samplerate_combo);
- gtk_widget_set_name (cfg_samplerate_combo, "cfg_samplerate_combo");
- gtk_widget_show (cfg_samplerate_combo);
- gtk_box_pack_start (GTK_BOX (w_hbox4), cfg_samplerate_combo, FALSE, FALSE, 0);
- cfg_samplerate_combo_items = g_list_append (cfg_samplerate_combo_items, (gpointer) "");
- gtk_combo_set_popdown_strings (GTK_COMBO (cfg_samplerate_combo), cfg_samplerate_combo_items);
- g_list_free (cfg_samplerate_combo_items);
-
- cfg_samplerate = GTK_COMBO (cfg_samplerate_combo)->entry;
- gtk_widget_set_name (cfg_samplerate, "cfg_samplerate");
- gtk_widget_show (cfg_samplerate);
- gtk_entry_set_invisible_char (GTK_ENTRY (cfg_samplerate), 9679);
-
- w_label8 = gtk_label_new (_("Hz"));
- gtk_widget_set_name (w_label8, "w_label8");
- gtk_widget_show (w_label8);
- gtk_box_pack_start (GTK_BOX (w_hbox4), w_label8, FALSE, TRUE, 4);
- gtk_label_set_justify (GTK_LABEL (w_label8), GTK_JUSTIFY_CENTER);
-
- w_label54 = gtk_label_new ("");
- gtk_widget_set_name (w_label54, "w_label54");
- gtk_widget_show (w_label54);
- gtk_box_pack_start (GTK_BOX (w_hbox4), w_label54, FALSE, TRUE, 0);
- gtk_label_set_justify (GTK_LABEL (w_label54), GTK_JUSTIFY_CENTER);
-
- label3 = gtk_label_new (_("Samplerate:"));
- gtk_widget_set_name (label3, "label3");
- gtk_widget_show (label3);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_samplerate_frame), label3);
-
- cfg_oversample_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_oversample_frame, "cfg_oversample_frame");
- gtk_widget_show (cfg_oversample_frame);
- gtk_box_pack_start (GTK_BOX (w_vbox6), cfg_oversample_frame, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_oversample_frame), 4);
-
- w_vbox27 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox27, "w_vbox27");
- gtk_widget_show (w_vbox27);
- gtk_container_add (GTK_CONTAINER (cfg_oversample_frame), w_vbox27);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox27), 2);
-
- cfg_oversample = gtk_check_button_new_with_mnemonic (_("Use oversampling"));
- gtk_widget_set_name (cfg_oversample, "cfg_oversample");
- gtk_widget_show (cfg_oversample);
- gtk_box_pack_start (GTK_BOX (w_vbox27), cfg_oversample, FALSE, FALSE, 0);
-
- cfg_oversample_box = gtk_hbox_new (FALSE, 4);
- gtk_widget_set_name (cfg_oversample_box, "cfg_oversample_box");
- gtk_widget_show (cfg_oversample_box);
- gtk_box_pack_start (GTK_BOX (w_vbox27), cfg_oversample_box, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_oversample_box), 2);
-
- cfg_oversample_label1 = gtk_label_new (_("Factor:"));
- gtk_widget_set_name (cfg_oversample_label1, "cfg_oversample_label1");
- gtk_widget_show (cfg_oversample_label1);
- gtk_box_pack_start (GTK_BOX (cfg_oversample_box), cfg_oversample_label1, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_oversample_label1), GTK_JUSTIFY_CENTER);
-
- cfg_oversample_factor_adj = gtk_adjustment_new (2, 2, 8, 1, 1, 1);
- cfg_oversample_factor = gtk_spin_button_new (GTK_ADJUSTMENT (cfg_oversample_factor_adj), 1, 0);
- gtk_widget_set_name (cfg_oversample_factor, "cfg_oversample_factor");
- gtk_widget_show (cfg_oversample_factor);
- gtk_box_pack_start (GTK_BOX (cfg_oversample_box), cfg_oversample_factor, FALSE, TRUE, 0);
-
- cfg_oversample_label2 = gtk_label_new (_("Large factors require more CPU-power"));
- gtk_widget_set_name (cfg_oversample_label2, "cfg_oversample_label2");
- gtk_widget_show (cfg_oversample_label2);
- gtk_box_pack_start (GTK_BOX (cfg_oversample_box), cfg_oversample_label2, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_oversample_label2), GTK_JUSTIFY_CENTER);
-
- label4 = gtk_label_new (_("Oversampling:"));
- gtk_widget_set_name (label4, "label4");
- gtk_widget_show (label4);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_oversample_frame), label4);
-
- w_label1 = gtk_label_new (_("Audio"));
- gtk_widget_set_name (w_label1, "w_label1");
- gtk_widget_show (w_label1);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 0), w_label1);
- gtk_label_set_justify (GTK_LABEL (w_label1), GTK_JUSTIFY_CENTER);
-
- w_vbox2 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox2, "w_vbox2");
- gtk_widget_show (w_vbox2);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), w_vbox2);
-
- w_hbox1 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (w_hbox1, "w_hbox1");
- gtk_widget_show (w_hbox1);
- gtk_box_pack_start (GTK_BOX (w_vbox2), w_hbox1, FALSE, TRUE, 0);
-
- cfg_clock_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_clock_frame, "cfg_clock_frame");
- gtk_widget_show (cfg_clock_frame);
- gtk_box_pack_start (GTK_BOX (w_hbox1), cfg_clock_frame, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_clock_frame), 4);
-
- w_vbox4 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox4, "w_vbox4");
- gtk_widget_show (w_vbox4);
- gtk_container_add (GTK_CONTAINER (cfg_clock_frame), w_vbox4);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox4), 2);
-
- cfg_emu_clock_force = gtk_check_button_new_with_mnemonic (_("Force speed"));
- gtk_widget_set_name (cfg_emu_clock_force, "cfg_emu_clock_force");
- gtk_widget_show (cfg_emu_clock_force);
- gtk_box_pack_start (GTK_BOX (w_vbox4), cfg_emu_clock_force, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_clock_force, _("If enabled, this option \"forces\" the emulation engine to use the selected clock speed/frequency. Otherwise the speed is determined from played file itself."), NULL);
-
- cfg_emu_clock_pal = gtk_radio_button_new_with_mnemonic (NULL, _("PAL (50 Hz)"));
- gtk_widget_set_name (cfg_emu_clock_pal, "cfg_emu_clock_pal");
- gtk_widget_show (cfg_emu_clock_pal);
- gtk_box_pack_start (GTK_BOX (w_vbox4), cfg_emu_clock_pal, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_clock_pal, _("PAL is the european TV standard, which uses 50Hz vertical refresh frequency. Most of SID-tunes have been made for PAL computers."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_clock_pal), cfg_emu_clock_pal_group);
- cfg_emu_clock_pal_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_clock_pal));
-
- cfg_emu_clock_ntsc = gtk_radio_button_new_with_mnemonic (NULL, _("NTSC (60 Hz)"));
- gtk_widget_set_name (cfg_emu_clock_ntsc, "cfg_emu_clock_ntsc");
- gtk_widget_show (cfg_emu_clock_ntsc);
- gtk_box_pack_start (GTK_BOX (w_vbox4), cfg_emu_clock_ntsc, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_clock_ntsc, _("NTSC is the TV standard with 60Hz vertical refresh rate (and other features that differ from PAL). It is mainly used in United States, Japan and certain other countries."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_clock_ntsc), cfg_emu_clock_pal_group);
- cfg_emu_clock_pal_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_clock_ntsc));
-
- label5 = gtk_label_new (_("Clock speed:"));
- gtk_widget_set_name (label5, "label5");
- gtk_widget_show (label5);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_clock_frame), label5);
-
- cfg_sid_model_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sid_model_frame, "cfg_sid_model_frame");
- gtk_widget_show (cfg_sid_model_frame);
- gtk_box_pack_start (GTK_BOX (w_hbox1), cfg_sid_model_frame, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sid_model_frame), 4);
-
- w_vbox3 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox3, "w_vbox3");
- gtk_widget_show (w_vbox3);
- gtk_container_add (GTK_CONTAINER (cfg_sid_model_frame), w_vbox3);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox3), 2);
-
- cfg_emu_sid_force = gtk_check_button_new_with_mnemonic (_("Force model"));
- gtk_widget_set_name (cfg_emu_sid_force, "cfg_emu_sid_force");
- gtk_widget_show (cfg_emu_sid_force);
- gtk_box_pack_start (GTK_BOX (w_vbox3), cfg_emu_sid_force, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_sid_force, _("If enabled, this option \"forces\" the emulation engine to use the selected SID-chip model. Otherwise the preferred SID model is determined from the file (if PSIDv2NG type) or if not available, this setting is used."), NULL);
-
- cfg_emu_mos6581 = gtk_radio_button_new_with_mnemonic (NULL, _("MOS 6581"));
- gtk_widget_set_name (cfg_emu_mos6581, "cfg_emu_mos6581");
- gtk_widget_show (cfg_emu_mos6581);
- gtk_box_pack_start (GTK_BOX (w_vbox3), cfg_emu_mos6581, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_mos6581, _("MOS/CSG 6581 is the earlier major version of SID chip. It differs from 8580 in few ways, having much fuller filter (which, due to design error, is never same between two different SID-chips) and has the \"volume adjustment bug\", which enables playing of digital samples."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_mos6581), cfg_emu_mos6581_group);
- cfg_emu_mos6581_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_mos6581));
-
- cfg_emu_mos8580 = gtk_radio_button_new_with_mnemonic (NULL, _("MOS 8580"));
- gtk_widget_set_name (cfg_emu_mos8580, "cfg_emu_mos8580");
- gtk_widget_show (cfg_emu_mos8580);
- gtk_box_pack_start (GTK_BOX (w_vbox3), cfg_emu_mos8580, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_mos8580), cfg_emu_mos6581_group);
- cfg_emu_mos6581_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_mos8580));
-
- label6 = gtk_label_new (_("SID model:"));
- gtk_widget_set_name (label6, "label6");
- gtk_widget_show (label6);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sid_model_frame), label6);
-
- cfg_emulib_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_emulib_frame, "cfg_emulib_frame");
- gtk_widget_show (cfg_emulib_frame);
- gtk_box_pack_start (GTK_BOX (w_vbox2), cfg_emulib_frame, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_emulib_frame), 4);
-
- w_vbox26 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox26, "w_vbox26");
- gtk_widget_show (w_vbox26);
- gtk_container_add (GTK_CONTAINER (cfg_emulib_frame), w_vbox26);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox26), 2);
-
- cfg_emu_sidplay1 = gtk_radio_button_new_with_mnemonic (NULL, _("SIDPlay 1 (frame-based)"));
- gtk_widget_set_name (cfg_emu_sidplay1, "cfg_emu_sidplay1");
- gtk_widget_show (cfg_emu_sidplay1);
- gtk_box_pack_start (GTK_BOX (w_vbox26), cfg_emu_sidplay1, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_sidplay1, _("Use libSIDPlay 1.x emulation, faster but not so accurate. Good in most cases, though."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_sidplay1), cfg_emu_sidplay1_group);
- cfg_emu_sidplay1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_sidplay1));
-
- cfg_emu_sidplay2 = gtk_radio_button_new_with_mnemonic (NULL, _("SIDPlay 2 (cycle-based)"));
- gtk_widget_set_name (cfg_emu_sidplay2, "cfg_emu_sidplay2");
- gtk_widget_show (cfg_emu_sidplay2);
- gtk_box_pack_start (GTK_BOX (w_vbox26), cfg_emu_sidplay2, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_sidplay2, _("Use libSIDPlay 2.x emulation, which requires powerful CPU due to more exact emulation."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_sidplay2), cfg_emu_sidplay1_group);
- cfg_emu_sidplay1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_sidplay2));
-
- label7 = gtk_label_new (_("Emulation library selection:"));
- gtk_widget_set_name (label7, "label7");
- gtk_widget_show (label7);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_emulib_frame), label7);
-
- cfg_memmode_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_memmode_frame, "cfg_memmode_frame");
- gtk_widget_show (cfg_memmode_frame);
- gtk_box_pack_start (GTK_BOX (w_vbox2), cfg_memmode_frame, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_memmode_frame), 4);
-
- w_vbox5 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox5, "w_vbox5");
- gtk_widget_show (w_vbox5);
- gtk_container_add (GTK_CONTAINER (cfg_memmode_frame), w_vbox5);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox5), 2);
-
- cfg_emu_mem_real = gtk_radio_button_new_with_mnemonic (NULL, _("Real C64 (SIDPlay 2 only)"));
- gtk_widget_set_name (cfg_emu_mem_real, "cfg_emu_mem_real");
- gtk_widget_show (cfg_emu_mem_real);
- gtk_box_pack_start (GTK_BOX (w_vbox5), cfg_emu_mem_real, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_mem_real), cfg_emu_mem_real_group);
- cfg_emu_mem_real_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_mem_real));
-
- cfg_emu_mem_banksw = gtk_radio_button_new_with_mnemonic (NULL, _("Bank switching"));
- gtk_widget_set_name (cfg_emu_mem_banksw, "cfg_emu_mem_banksw");
- gtk_widget_show (cfg_emu_mem_banksw);
- gtk_box_pack_start (GTK_BOX (w_vbox5), cfg_emu_mem_banksw, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_mem_banksw), cfg_emu_mem_real_group);
- cfg_emu_mem_real_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_mem_banksw));
-
- cfg_emu_mem_transrom = gtk_radio_button_new_with_mnemonic (NULL, _("Transparent ROM"));
- gtk_widget_set_name (cfg_emu_mem_transrom, "cfg_emu_mem_transrom");
- gtk_widget_show (cfg_emu_mem_transrom);
- gtk_box_pack_start (GTK_BOX (w_vbox5), cfg_emu_mem_transrom, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_mem_transrom), cfg_emu_mem_real_group);
- cfg_emu_mem_real_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_mem_transrom));
-
- cfg_emu_mem_playsid = gtk_radio_button_new_with_mnemonic (NULL, _("PlaySID environment"));
- gtk_widget_set_name (cfg_emu_mem_playsid, "cfg_emu_mem_playsid");
- gtk_widget_show (cfg_emu_mem_playsid);
- gtk_box_pack_start (GTK_BOX (w_vbox5), cfg_emu_mem_playsid, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_mem_playsid), cfg_emu_mem_real_group);
- cfg_emu_mem_real_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_mem_playsid));
-
- label8 = gtk_label_new (_("Memory mode:"));
- gtk_widget_set_name (label8, "label8");
- gtk_widget_show (label8);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_memmode_frame), label8);
-
- w_label2 = gtk_label_new (_("Emu#1"));
- gtk_widget_set_name (w_label2, "w_label2");
- gtk_widget_show (w_label2);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 1), w_label2);
- gtk_label_set_justify (GTK_LABEL (w_label2), GTK_JUSTIFY_CENTER);
-
- w_vbox29 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox29, "w_vbox29");
- gtk_widget_show (w_vbox29);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), w_vbox29);
-
- cfg_sidplay2_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sidplay2_frame, "cfg_sidplay2_frame");
- gtk_widget_show (cfg_sidplay2_frame);
- gtk_box_pack_start (GTK_BOX (w_vbox29), cfg_sidplay2_frame, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sidplay2_frame), 4);
-
- w_vbox30 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox30, "w_vbox30");
- gtk_widget_show (w_vbox30);
- gtk_container_add (GTK_CONTAINER (cfg_sidplay2_frame), w_vbox30);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox30), 2);
-
- cfg_emu_sp2_opt = gtk_check_button_new_with_mnemonic (_("Optimization mode (faster, inaccurate)"));
- gtk_widget_set_name (cfg_emu_sp2_opt, "cfg_emu_sp2_opt");
- gtk_widget_show (cfg_emu_sp2_opt);
- gtk_box_pack_start (GTK_BOX (w_vbox30), cfg_emu_sp2_opt, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_sp2_opt, _("This setting can be used to enable libSIDPlay2's \"optimization mode\", which in downgrades the emulation from cycle-exact to something similar to frame-exact. The result is lower CPU usage, but worse accuracy."), NULL);
-
- cfg_emu_sp2_resid = gtk_radio_button_new_with_mnemonic (NULL, _("reSID-emulation"));
- gtk_widget_set_name (cfg_emu_sp2_resid, "cfg_emu_sp2_resid");
- gtk_widget_show (cfg_emu_sp2_resid);
- gtk_box_pack_start (GTK_BOX (w_vbox30), cfg_emu_sp2_resid, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_sp2_resid, _("reSID is the software SID-chip simulator based on SID reverse-engineering, created by Dag Lem. It is probably the closest thing to real SID available as software-only emulation."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_sp2_resid), cfg_emu_sp2_resid_group);
- cfg_emu_sp2_resid_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_sp2_resid));
-
- cfg_emu_sp2_hardsid = gtk_radio_button_new_with_mnemonic (NULL, _("HardSID"));
- gtk_widget_set_name (cfg_emu_sp2_hardsid, "cfg_emu_sp2_hardsid");
- gtk_widget_show (cfg_emu_sp2_hardsid);
- gtk_box_pack_start (GTK_BOX (w_vbox30), cfg_emu_sp2_hardsid, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_sp2_hardsid, _("HardSID is a EISA/PCI card for PC-compatibles, which can be fitted with a real SID-chip. Software can be used to control the HardSID and combined with software emulation of rest of C64 via libSIDPlay2 HardSID can be used to achieve \"near 100%\" similarity to real C64. For more information, see http://www.hardsid.com/"), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_sp2_hardsid), cfg_emu_sp2_resid_group);
- cfg_emu_sp2_resid_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_sp2_hardsid));
-
- label9 = gtk_label_new (_("SIDPlay 2 options:"));
- gtk_widget_set_name (label9, "label9");
- gtk_widget_show (label9);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sidplay2_frame), label9);
-
- cfg_resid_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_resid_frame, "cfg_resid_frame");
- gtk_widget_show (cfg_resid_frame);
- gtk_box_pack_start (GTK_BOX (w_vbox29), cfg_resid_frame, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_resid_frame), 4);
-
- w_vbox37 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox37, "w_vbox37");
- gtk_widget_show (w_vbox37);
- gtk_container_add (GTK_CONTAINER (cfg_resid_frame), w_vbox37);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox37), 2);
-
- cfg_emu_resid_fast = gtk_radio_button_new_with_mnemonic (NULL, _("Fast (nearest neighbour)"));
- gtk_widget_set_name (cfg_emu_resid_fast, "cfg_emu_resid_fast");
- gtk_widget_show (cfg_emu_resid_fast);
- gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_fast, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_resid_fast, _("Fastest and also worst sounding sampling method, simply picks nearest neighbouring sample."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_resid_fast), cfg_emu_resid_fast_group);
- cfg_emu_resid_fast_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_resid_fast));
-
- cfg_emu_resid_int = gtk_radio_button_new_with_mnemonic (NULL, _("Linear interpolation"));
- gtk_widget_set_name (cfg_emu_resid_int, "cfg_emu_resid_int");
- gtk_widget_show (cfg_emu_resid_int);
- gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_int, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_resid_int, _("Uses linear interpolation between samples, yielding higher audio quality with less sampling noise."), NULL);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_resid_int), cfg_emu_resid_fast_group);
- cfg_emu_resid_fast_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_resid_int));
-
- cfg_emu_resid_res_fast = gtk_radio_button_new_with_mnemonic (NULL, _("Resampling"));
- gtk_widget_set_name (cfg_emu_resid_res_fast, "cfg_emu_resid_res_fast");
- gtk_widget_show (cfg_emu_resid_res_fast);
- gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_res_fast, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_resid_res_fast), cfg_emu_resid_fast_group);
- cfg_emu_resid_fast_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_resid_res_fast));
-
- cfg_emu_resid_res_int = gtk_radio_button_new_with_mnemonic (NULL, _("Resampling (FIR)"));
- gtk_widget_set_name (cfg_emu_resid_res_int, "cfg_emu_resid_res_int");
- gtk_widget_show (cfg_emu_resid_res_int);
- gtk_box_pack_start (GTK_BOX (w_vbox37), cfg_emu_resid_res_int, FALSE, FALSE, 0);
- gtk_radio_button_set_group (GTK_RADIO_BUTTON (cfg_emu_resid_res_int), cfg_emu_resid_fast_group);
- cfg_emu_resid_fast_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cfg_emu_resid_res_int));
-
- label10 = gtk_label_new (_("reSID sampling options:"));
- gtk_widget_set_name (label10, "label10");
- gtk_widget_show (label10);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_resid_frame), label10);
-
- w_label48 = gtk_label_new (_("Emu#2"));
- gtk_widget_set_name (w_label48, "w_label48");
- gtk_widget_show (w_label48);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 2), w_label48);
- gtk_label_set_justify (GTK_LABEL (w_label48), GTK_JUSTIFY_CENTER);
-
- w_vbox25 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox25, "w_vbox25");
- gtk_widget_show (w_vbox25);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), w_vbox25);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox25), 4);
-
- cfg_emu_filters = gtk_check_button_new_with_mnemonic (_("Emulate filters"));
- gtk_widget_set_name (cfg_emu_filters, "cfg_emu_filters");
- gtk_widget_show (cfg_emu_filters);
- gtk_box_pack_start (GTK_BOX (w_vbox25), cfg_emu_filters, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_emu_filters, _("This option enables emulation of SID filter. The filter is an essential part of SID's sound capacity, but accurate emulation of it may require quite much CPU power. However, if filter emulation is disabled, tunes won't sound authentic at all if they utilize the filter."), NULL);
-
- cfg_filters_notebook = gtk_notebook_new ();
- gtk_widget_set_name (cfg_filters_notebook, "cfg_filters_notebook");
- gtk_widget_show (cfg_filters_notebook);
- gtk_box_pack_start (GTK_BOX (w_vbox25), cfg_filters_notebook, TRUE, TRUE, 0);
-
- cfg_box_filter_sidplay1 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (cfg_box_filter_sidplay1, "cfg_box_filter_sidplay1");
- gtk_widget_show (cfg_box_filter_sidplay1);
- gtk_container_add (GTK_CONTAINER (cfg_filters_notebook), cfg_box_filter_sidplay1);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_box_filter_sidplay1), 4);
-
- cfg_sp1_frm_fs = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sp1_frm_fs, "cfg_sp1_frm_fs");
- gtk_widget_show (cfg_sp1_frm_fs);
- gtk_box_pack_start (GTK_BOX (cfg_box_filter_sidplay1), cfg_sp1_frm_fs, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sp1_frm_fs), 2);
-
- cfg_sp1_filter_fs = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 1000, 1, 100, 0)));
- gtk_widget_set_name (cfg_sp1_filter_fs, "cfg_sp1_filter_fs");
- gtk_widget_show (cfg_sp1_filter_fs);
- gtk_container_add (GTK_CONTAINER (cfg_sp1_frm_fs), cfg_sp1_filter_fs);
- gtk_scale_set_digits (GTK_SCALE (cfg_sp1_filter_fs), 2);
-
- label11 = gtk_label_new (_("FS"));
- gtk_widget_set_name (label11, "label11");
- gtk_widget_show (label11);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sp1_frm_fs), label11);
-
- cfg_sp1_frm_fm = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sp1_frm_fm, "cfg_sp1_frm_fm");
- gtk_widget_show (cfg_sp1_frm_fm);
- gtk_box_pack_start (GTK_BOX (cfg_box_filter_sidplay1), cfg_sp1_frm_fm, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sp1_frm_fm), 2);
-
- cfg_sp1_filter_fm = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 10, 0)));
- gtk_widget_set_name (cfg_sp1_filter_fm, "cfg_sp1_filter_fm");
- gtk_widget_show (cfg_sp1_filter_fm);
- gtk_container_add (GTK_CONTAINER (cfg_sp1_frm_fm), cfg_sp1_filter_fm);
- gtk_scale_set_digits (GTK_SCALE (cfg_sp1_filter_fm), 2);
-
- label12 = gtk_label_new (_("FM"));
- gtk_widget_set_name (label12, "label12");
- gtk_widget_show (label12);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sp1_frm_fm), label12);
-
- cfg_sp1_frm_ft = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sp1_frm_ft, "cfg_sp1_frm_ft");
- gtk_widget_show (cfg_sp1_frm_ft);
- gtk_box_pack_start (GTK_BOX (cfg_box_filter_sidplay1), cfg_sp1_frm_ft, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sp1_frm_ft), 2);
-
- cfg_sp1_filter_ft = gtk_vscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 1, 0.01, 0.1, 0)));
- gtk_widget_set_name (cfg_sp1_filter_ft, "cfg_sp1_filter_ft");
- gtk_widget_show (cfg_sp1_filter_ft);
- gtk_container_add (GTK_CONTAINER (cfg_sp1_frm_ft), cfg_sp1_filter_ft);
- gtk_scale_set_digits (GTK_SCALE (cfg_sp1_filter_ft), 2);
-
- label13 = gtk_label_new (_("FT"));
- gtk_widget_set_name (label13, "label13");
- gtk_widget_show (label13);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sp1_frm_ft), label13);
-
- w_vbox17 = gtk_vbox_new (FALSE, 8);
- gtk_widget_set_name (w_vbox17, "w_vbox17");
- gtk_widget_show (w_vbox17);
- gtk_box_pack_start (GTK_BOX (cfg_box_filter_sidplay1), w_vbox17, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox17), 4);
-
- cfg_sp1_filter_reset = gtk_button_new_with_mnemonic (_("Reset values"));
- gtk_widget_set_name (cfg_sp1_filter_reset, "cfg_sp1_filter_reset");
- gtk_widget_show (cfg_sp1_filter_reset);
- gtk_box_pack_start (GTK_BOX (w_vbox17), cfg_sp1_filter_reset, FALSE, FALSE, 0);
-
- w_label55 = gtk_label_new (_("SIDPlay1"));
- gtk_widget_set_name (w_label55, "w_label55");
- gtk_widget_show (w_label55);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_filters_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_filters_notebook), 0), w_label55);
- gtk_label_set_justify (GTK_LABEL (w_label55), GTK_JUSTIFY_CENTER);
-
- cfg_box_filter_sidplay2 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (cfg_box_filter_sidplay2, "cfg_box_filter_sidplay2");
- gtk_widget_show (cfg_box_filter_sidplay2);
- gtk_container_add (GTK_CONTAINER (cfg_filters_notebook), cfg_box_filter_sidplay2);
-
- cfg_sp_filter_controlbox = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (cfg_sp_filter_controlbox, "cfg_sp_filter_controlbox");
- gtk_widget_show (cfg_sp_filter_controlbox);
- gtk_box_pack_start (GTK_BOX (cfg_box_filter_sidplay2), cfg_sp_filter_controlbox, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sp_filter_controlbox), 2);
-
- cfg_sp2_filter_combo = gtk_combo_new ();
- g_object_set_data (G_OBJECT (GTK_COMBO (cfg_sp2_filter_combo)->popwin),
- "GladeParentKey", cfg_sp2_filter_combo);
- gtk_widget_set_name (cfg_sp2_filter_combo, "cfg_sp2_filter_combo");
- gtk_widget_show (cfg_sp2_filter_combo);
- gtk_box_pack_start (GTK_BOX (cfg_sp_filter_controlbox), cfg_sp2_filter_combo, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sp2_filter_combo), 2);
- cfg_sp2_filter_combo_items = g_list_append (cfg_sp2_filter_combo_items, (gpointer) "");
- gtk_combo_set_popdown_strings (GTK_COMBO (cfg_sp2_filter_combo), cfg_sp2_filter_combo_items);
- g_list_free (cfg_sp2_filter_combo_items);
-
- cfg_sp2_filter_combo_entry = GTK_COMBO (cfg_sp2_filter_combo)->entry;
- gtk_widget_set_name (cfg_sp2_filter_combo_entry, "cfg_sp2_filter_combo_entry");
- gtk_widget_show (cfg_sp2_filter_combo_entry);
- gtk_entry_set_invisible_char (GTK_ENTRY (cfg_sp2_filter_combo_entry), 9679);
-
- table3 = gtk_table_new (2, 3, TRUE);
- gtk_widget_set_name (table3, "table3");
- gtk_widget_show (table3);
- gtk_box_pack_start (GTK_BOX (cfg_sp_filter_controlbox), table3, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (table3), 2);
- gtk_table_set_row_spacings (GTK_TABLE (table3), 4);
- gtk_table_set_col_spacings (GTK_TABLE (table3), 4);
-
- cfg_sp2_filter_export = gtk_button_new_with_mnemonic (_("Export"));
- gtk_widget_set_name (cfg_sp2_filter_export, "cfg_sp2_filter_export");
- gtk_widget_show (cfg_sp2_filter_export);
- gtk_table_attach (GTK_TABLE (table3), cfg_sp2_filter_export, 2, 3, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- GTK_WIDGET_SET_FLAGS (cfg_sp2_filter_export, GTK_CAN_DEFAULT);
-
- cfg_sp2_filter_load = gtk_button_new_with_mnemonic (_("Use"));
- gtk_widget_set_name (cfg_sp2_filter_load, "cfg_sp2_filter_load");
- gtk_widget_show (cfg_sp2_filter_load);
- gtk_table_attach (GTK_TABLE (table3), cfg_sp2_filter_load, 0, 1, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- GTK_WIDGET_SET_FLAGS (cfg_sp2_filter_load, GTK_CAN_DEFAULT);
-
- cfg_sp2_filter_save = gtk_button_new_with_mnemonic (_("Save"));
- gtk_widget_set_name (cfg_sp2_filter_save, "cfg_sp2_filter_save");
- gtk_widget_show (cfg_sp2_filter_save);
- gtk_table_attach (GTK_TABLE (table3), cfg_sp2_filter_save, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- GTK_WIDGET_SET_FLAGS (cfg_sp2_filter_save, GTK_CAN_DEFAULT);
-
- cfg_sp2_filter_import = gtk_button_new_with_mnemonic (_("Import"));
- gtk_widget_set_name (cfg_sp2_filter_import, "cfg_sp2_filter_import");
- gtk_widget_show (cfg_sp2_filter_import);
- gtk_table_attach (GTK_TABLE (table3), cfg_sp2_filter_import, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- GTK_WIDGET_SET_FLAGS (cfg_sp2_filter_import, GTK_CAN_DEFAULT);
-
- cfg_sp2_filter_delete = gtk_button_new_with_mnemonic (_("Delete"));
- gtk_widget_set_name (cfg_sp2_filter_delete, "cfg_sp2_filter_delete");
- gtk_widget_show (cfg_sp2_filter_delete);
- gtk_table_attach (GTK_TABLE (table3), cfg_sp2_filter_delete, 2, 3, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- GTK_WIDGET_SET_FLAGS (cfg_sp2_filter_delete, GTK_CAN_DEFAULT);
-
- cfg_sp2_filter_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (cfg_sp2_filter_frame, "cfg_sp2_filter_frame");
- gtk_widget_show (cfg_sp2_filter_frame);
- gtk_box_pack_start (GTK_BOX (cfg_box_filter_sidplay2), cfg_sp2_filter_frame, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (cfg_sp2_filter_frame), 2);
-
- label14 = gtk_label_new (_("Filter curve:"));
- gtk_widget_set_name (label14, "label14");
- gtk_widget_show (label14);
- gtk_frame_set_label_widget (GTK_FRAME (cfg_sp2_filter_frame), label14);
-
- w_label56 = gtk_label_new (_("SIDPlay2"));
- gtk_widget_set_name (w_label56, "w_label56");
- gtk_widget_show (w_label56);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_filters_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_filters_notebook), 1), w_label56);
- gtk_label_set_justify (GTK_LABEL (w_label56), GTK_JUSTIFY_CENTER);
-
- w_label24 = gtk_label_new (_("Filters"));
- gtk_widget_set_name (w_label24, "w_label24");
- gtk_widget_show (w_label24);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 3), w_label24);
- gtk_label_set_justify (GTK_LABEL (w_label24), GTK_JUSTIFY_CENTER);
-
- w_vbox20 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox20, "w_vbox20");
- gtk_widget_show (w_vbox20);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), w_vbox20);
-
- w_frame29 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame29, "w_frame29");
- gtk_widget_show (w_frame29);
- gtk_box_pack_start (GTK_BOX (w_vbox20), w_frame29, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame29), 4);
-
- w_vbox32 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox32, "w_vbox32");
- gtk_widget_show (w_vbox32);
- gtk_container_add (GTK_CONTAINER (w_frame29), w_vbox32);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox32), 2);
-
- cfg_mintime_enable = gtk_check_button_new_with_mnemonic (_("Play at least for specified time"));
- gtk_widget_set_name (cfg_mintime_enable, "cfg_mintime_enable");
- gtk_widget_show (cfg_mintime_enable);
- gtk_box_pack_start (GTK_BOX (w_vbox32), cfg_mintime_enable, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_mintime_enable, _("If enabled, the tune is played at least for the specified time, adding silence to the end if necessary."), NULL);
-
- cfg_mintime_box = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (cfg_mintime_box, "cfg_mintime_box");
- gtk_widget_show (cfg_mintime_box);
- gtk_box_pack_start (GTK_BOX (w_vbox32), cfg_mintime_box, FALSE, TRUE, 2);
-
- cfg_mintime_label1 = gtk_label_new (_("Playtime:"));
- gtk_widget_set_name (cfg_mintime_label1, "cfg_mintime_label1");
- gtk_widget_show (cfg_mintime_label1);
- gtk_box_pack_start (GTK_BOX (cfg_mintime_box), cfg_mintime_label1, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_mintime_label1), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (cfg_mintime_label1), 0, 0.5);
-
- cfg_mintime_adj = gtk_adjustment_new (15, 1, 32767, 1, 60, 60);
- cfg_mintime = gtk_spin_button_new (GTK_ADJUSTMENT (cfg_mintime_adj), 1, 0);
- gtk_widget_set_name (cfg_mintime, "cfg_mintime");
- gtk_widget_show (cfg_mintime);
- gtk_box_pack_start (GTK_BOX (cfg_mintime_box), cfg_mintime, FALSE, TRUE, 0);
-
- cfg_mintime_label2 = gtk_label_new (_("seconds"));
- gtk_widget_set_name (cfg_mintime_label2, "cfg_mintime_label2");
- gtk_widget_show (cfg_mintime_label2);
- gtk_box_pack_start (GTK_BOX (cfg_mintime_box), cfg_mintime_label2, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_mintime_label2), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (cfg_mintime_label2), 0, 0.5);
-
- label15 = gtk_label_new (_("Minimum playtime:"));
- gtk_widget_set_name (label15, "label15");
- gtk_widget_show (label15);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame29), label15);
-
- w_frame21 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame21, "w_frame21");
- gtk_widget_show (w_frame21);
- gtk_box_pack_start (GTK_BOX (w_vbox20), w_frame21, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame21), 4);
-
- w_vbox21 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox21, "w_vbox21");
- gtk_widget_show (w_vbox21);
- gtk_container_add (GTK_CONTAINER (w_frame21), w_vbox21);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox21), 2);
-
- cfg_maxtime_enable = gtk_check_button_new_with_mnemonic (_("Play for specified time maximum"));
- gtk_widget_set_name (cfg_maxtime_enable, "cfg_maxtime_enable");
- gtk_widget_show (cfg_maxtime_enable);
- gtk_box_pack_start (GTK_BOX (w_vbox21), cfg_maxtime_enable, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_maxtime_enable, _("If enabled, tune is played until specified duration is reached (aka maximum playtime)."), NULL);
-
- cfg_maxtime_unknown = gtk_check_button_new_with_mnemonic (_("Only when song length is unknown"));
- gtk_widget_set_name (cfg_maxtime_unknown, "cfg_maxtime_unknown");
- gtk_widget_show (cfg_maxtime_unknown);
- gtk_box_pack_start (GTK_BOX (w_vbox21), cfg_maxtime_unknown, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_maxtime_unknown, _("If enabled, the maximum playtime is applied only if song/tune length is not known."), NULL);
-
- cfg_maxtime_box = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (cfg_maxtime_box, "cfg_maxtime_box");
- gtk_widget_show (cfg_maxtime_box);
- gtk_box_pack_start (GTK_BOX (w_vbox21), cfg_maxtime_box, FALSE, TRUE, 2);
-
- cfg_maxtime_label1 = gtk_label_new (_("Playtime:"));
- gtk_widget_set_name (cfg_maxtime_label1, "cfg_maxtime_label1");
- gtk_widget_show (cfg_maxtime_label1);
- gtk_box_pack_start (GTK_BOX (cfg_maxtime_box), cfg_maxtime_label1, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_maxtime_label1), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (cfg_maxtime_label1), 0, 0.5);
-
- cfg_maxtime_adj = gtk_adjustment_new (150, 1, 32767, 1, 60, 60);
- cfg_maxtime = gtk_spin_button_new (GTK_ADJUSTMENT (cfg_maxtime_adj), 1, 0);
- gtk_widget_set_name (cfg_maxtime, "cfg_maxtime");
- gtk_widget_show (cfg_maxtime);
- gtk_box_pack_start (GTK_BOX (cfg_maxtime_box), cfg_maxtime, FALSE, TRUE, 0);
-
- cfg_maxtime_label2 = gtk_label_new (_("seconds"));
- gtk_widget_set_name (cfg_maxtime_label2, "cfg_maxtime_label2");
- gtk_widget_show (cfg_maxtime_label2);
- gtk_box_pack_start (GTK_BOX (cfg_maxtime_box), cfg_maxtime_label2, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_maxtime_label2), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (cfg_maxtime_label2), 0, 0.5);
-
- label16 = gtk_label_new (_("Maximum playtime:"));
- gtk_widget_set_name (label16, "label16");
- gtk_widget_show (label16);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame21), label16);
-
- w_frame18 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame18, "w_frame18");
- gtk_widget_show (w_frame18);
- gtk_box_pack_start (GTK_BOX (w_vbox20), w_frame18, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame18), 4);
-
- w_vbox18 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox18, "w_vbox18");
- gtk_widget_show (w_vbox18);
- gtk_container_add (GTK_CONTAINER (w_frame18), w_vbox18);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox18), 2);
-
- cfg_sld_enable = gtk_check_button_new_with_mnemonic (_("Use XSIDPLAY-compatible database"));
- gtk_widget_set_name (cfg_sld_enable, "cfg_sld_enable");
- gtk_widget_show (cfg_sld_enable);
- gtk_box_pack_start (GTK_BOX (w_vbox18), cfg_sld_enable, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_sld_enable, _("This option enables using of XSIDPLAY compatible song length database. (Refer to Audacious-SID documentation for more information)"), NULL);
-
- cfg_sld_box = gtk_hbox_new (FALSE, 4);
- gtk_widget_set_name (cfg_sld_box, "cfg_sld_box");
- gtk_widget_show (cfg_sld_box);
- gtk_box_pack_start (GTK_BOX (w_vbox18), cfg_sld_box, FALSE, TRUE, 0);
-
- cfg_sld_label1 = gtk_label_new (_("DB-file:"));
- gtk_widget_set_name (cfg_sld_label1, "cfg_sld_label1");
- gtk_widget_show (cfg_sld_label1);
- gtk_box_pack_start (GTK_BOX (cfg_sld_box), cfg_sld_label1, FALSE, TRUE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_sld_label1), GTK_JUSTIFY_CENTER);
-
- cfg_sld_dbpath = gtk_entry_new ();
- gtk_widget_set_name (cfg_sld_dbpath, "cfg_sld_dbpath");
- gtk_widget_show (cfg_sld_dbpath);
- gtk_box_pack_start (GTK_BOX (cfg_sld_box), cfg_sld_dbpath, TRUE, TRUE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_sld_dbpath, _("Database path and filename"), NULL);
- gtk_entry_set_invisible_char (GTK_ENTRY (cfg_sld_dbpath), 9679);
-
- cfg_sld_dbbrowse = gtk_button_new ();
- gtk_widget_set_name (cfg_sld_dbbrowse, "cfg_sld_dbbrowse");
- gtk_widget_show (cfg_sld_dbbrowse);
- gtk_box_pack_start (GTK_BOX (cfg_sld_box), cfg_sld_dbbrowse, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_sld_dbbrowse, _("Browse for song length-database file"), NULL);
-
- alignment1 = gtk_alignment_new (0.5, 0.5, 0, 0);
- gtk_widget_set_name (alignment1, "alignment1");
- gtk_widget_show (alignment1);
- gtk_container_add (GTK_CONTAINER (cfg_sld_dbbrowse), alignment1);
-
- hbox1 = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (hbox1, "hbox1");
- gtk_widget_show (hbox1);
- gtk_container_add (GTK_CONTAINER (alignment1), hbox1);
-
- image1 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
- gtk_widget_set_name (image1, "image1");
- gtk_widget_show (image1);
- gtk_box_pack_start (GTK_BOX (hbox1), image1, FALSE, FALSE, 0);
-
- label30 = gtk_label_new_with_mnemonic (_("Browse"));
- gtk_widget_set_name (label30, "label30");
- gtk_widget_show (label30);
- gtk_box_pack_start (GTK_BOX (hbox1), label30, FALSE, FALSE, 0);
-
- label17 = gtk_label_new (_("Song length database:"));
- gtk_widget_set_name (label17, "label17");
- gtk_widget_show (label17);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame18), label17);
-
- w_label26 = gtk_label_new (_("Songlength"));
- gtk_widget_set_name (w_label26, "w_label26");
- gtk_widget_show (w_label26);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 4), w_label26);
- gtk_label_set_justify (GTK_LABEL (w_label26), GTK_JUSTIFY_CENTER);
-
- frame1 = gtk_frame_new (NULL);
- gtk_widget_set_name (frame1, "frame1");
- gtk_widget_show (frame1);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), frame1);
- gtk_container_set_border_width (GTK_CONTAINER (frame1), 4);
-
- vbox1 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (vbox1, "vbox1");
- gtk_widget_show (vbox1);
- gtk_container_add (GTK_CONTAINER (frame1), vbox1);
- gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
-
- cfg_ftitle_override = gtk_check_button_new_with_mnemonic (_("Override generic Tuplez format string"));
- gtk_widget_set_name (cfg_ftitle_override, "cfg_ftitle_override");
- gtk_widget_show (cfg_ftitle_override);
- gtk_box_pack_start (GTK_BOX (vbox1), cfg_ftitle_override, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_ftitle_override, _("By enabling this option you can specify a custom Tuplez formatting string for SID-files. The SID-plugin specific Tuplez tags are described shortly below."), NULL);
-
- cfg_ftitle_box = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (cfg_ftitle_box, "cfg_ftitle_box");
- gtk_widget_show (cfg_ftitle_box);
- gtk_box_pack_start (GTK_BOX (vbox1), cfg_ftitle_box, TRUE, TRUE, 0);
-
- cfg_ftitle_format = gtk_entry_new ();
- gtk_widget_set_name (cfg_ftitle_format, "cfg_ftitle_format");
- gtk_widget_show (cfg_ftitle_format);
- gtk_box_pack_start (GTK_BOX (cfg_ftitle_box), cfg_ftitle_format, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_ftitle_format, _("Tuplez format string for SID-files"), NULL);
- gtk_entry_set_invisible_char (GTK_ENTRY (cfg_ftitle_format), 9679);
-
- cfg_ftitle_descs = gtk_label_new (_("<u>SID-specific Tuplez fields:</u>\n\n<b>sid-format</b>\t\t- Specific fileformat\n<b>sid-model</b>\t\t- 6581 or 8580\n<b>sid-speed</b>\t\t- Timing or speed: PAL/NTSC/etc.\n\n<u>Other \"special\" fields set:</u>\n\n<b>subsong-num, subsong-id</b>"));
- gtk_widget_set_name (cfg_ftitle_descs, "cfg_ftitle_descs");
- gtk_widget_show (cfg_ftitle_descs);
- gtk_box_pack_start (GTK_BOX (cfg_ftitle_box), cfg_ftitle_descs, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (cfg_ftitle_descs), TRUE);
- gtk_misc_set_alignment (GTK_MISC (cfg_ftitle_descs), 0, 0);
- gtk_misc_set_padding (GTK_MISC (cfg_ftitle_descs), 8, 8);
-
- label29 = gtk_label_new (_("Song title format:"));
- gtk_widget_set_name (label29, "label29");
- gtk_widget_show (label29);
- gtk_frame_set_label_widget (GTK_FRAME (frame1), label29);
-
- w_label27 = gtk_label_new (_("Title"));
- gtk_widget_set_name (w_label27, "w_label27");
- gtk_widget_show (w_label27);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 5), w_label27);
-
- w_vbox19 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox19, "w_vbox19");
- gtk_widget_show (w_vbox19);
- gtk_container_add (GTK_CONTAINER (cfg_notebook), w_vbox19);
-
- w_frame31 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame31, "w_frame31");
- gtk_widget_show (w_frame31);
- gtk_box_pack_start (GTK_BOX (w_vbox19), w_frame31, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame31), 4);
-
- w_vbox35 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox35, "w_vbox35");
- gtk_widget_show (w_vbox35);
- gtk_container_add (GTK_CONTAINER (w_frame31), w_vbox35);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox35), 2);
-
- cfg_subauto_enable = gtk_check_button_new_with_mnemonic (_("Add sub-tunes to playlist"));
- gtk_widget_set_name (cfg_subauto_enable, "cfg_subauto_enable");
- gtk_widget_show (cfg_subauto_enable);
- gtk_box_pack_start (GTK_BOX (w_vbox35), cfg_subauto_enable, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_subauto_enable, _("If enabled, sub-tunes of each file will be added to playlist. If disabled, only the default sub-tune will be added."), NULL);
-
- cfg_subauto_min_only = gtk_check_button_new_with_mnemonic (_("Only tunes with specified minimum duration"));
- gtk_widget_set_name (cfg_subauto_min_only, "cfg_subauto_min_only");
- gtk_widget_show (cfg_subauto_min_only);
- gtk_box_pack_start (GTK_BOX (w_vbox35), cfg_subauto_min_only, FALSE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_subauto_min_only, _("Only add sub-tunes that have a duration of at least specified time."), NULL);
-
- cfg_subauto_box = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (cfg_subauto_box, "cfg_subauto_box");
- gtk_widget_show (cfg_subauto_box);
- gtk_box_pack_start (GTK_BOX (w_vbox35), cfg_subauto_box, TRUE, TRUE, 0);
-
- w_label52 = gtk_label_new (_("Playtime:"));
- gtk_widget_set_name (w_label52, "w_label52");
- gtk_widget_show (w_label52);
- gtk_box_pack_start (GTK_BOX (cfg_subauto_box), w_label52, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (w_label52), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (w_label52), 0, 0.5);
-
- cfg_subauto_mintime_adj = gtk_adjustment_new (15, 1, 32767, 1, 60, 60);
- cfg_subauto_mintime = gtk_spin_button_new (GTK_ADJUSTMENT (cfg_subauto_mintime_adj), 1, 0);
- gtk_widget_set_name (cfg_subauto_mintime, "cfg_subauto_mintime");
- gtk_widget_show (cfg_subauto_mintime);
- gtk_box_pack_start (GTK_BOX (cfg_subauto_box), cfg_subauto_mintime, FALSE, TRUE, 0);
-
- w_label53 = gtk_label_new (_("seconds"));
- gtk_widget_set_name (w_label53, "w_label53");
- gtk_widget_show (w_label53);
- gtk_box_pack_start (GTK_BOX (cfg_subauto_box), w_label53, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (w_label53), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (w_label53), 0, 0.5);
-
- label21 = gtk_label_new (_("Sub-tune handling:"));
- gtk_widget_set_name (label21, "label21");
- gtk_widget_show (label21);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame31), label21);
-
- w_frame7 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame7, "w_frame7");
- gtk_widget_show (w_frame7);
- gtk_box_pack_start (GTK_BOX (w_vbox19), w_frame7, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame7), 4);
-
- w_vbox8 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox8, "w_vbox8");
- gtk_widget_show (w_vbox8);
- gtk_container_add (GTK_CONTAINER (w_frame7), w_vbox8);
- gtk_container_set_border_width (GTK_CONTAINER (w_vbox8), 2);
-
- cfg_stil_enable = gtk_check_button_new_with_mnemonic (_("Use STIL database"));
- gtk_widget_set_name (cfg_stil_enable, "cfg_stil_enable");
- gtk_widget_show (cfg_stil_enable);
- gtk_box_pack_start (GTK_BOX (w_vbox8), cfg_stil_enable, TRUE, FALSE, 0);
- gtk_tooltips_set_tip (tooltips, cfg_stil_enable, _("If this option is enabled (and the database & HVSC settings below are correctly set), Audacious-SID will use and display additional information from STIL database when HVSC SIDs are played."), NULL);
-
- cfg_stil_box1 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (cfg_stil_box1, "cfg_stil_box1");
- gtk_widget_show (cfg_stil_box1);
- gtk_box_pack_start (GTK_BOX (w_vbox8), cfg_stil_box1, TRUE, TRUE, 0);
-
- cfg_stil_label1 = gtk_label_new (_("STIL file:"));
- gtk_widget_set_name (cfg_stil_label1, "cfg_stil_label1");
- gtk_widget_show (cfg_stil_label1);
- gtk_box_pack_start (GTK_BOX (cfg_stil_box1), cfg_stil_label1, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_stil_label1), GTK_JUSTIFY_CENTER);
- gtk_misc_set_padding (GTK_MISC (cfg_stil_label1), 4, 0);
-
- w_alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1);
- gtk_widget_set_name (w_alignment2, "w_alignment2");
- gtk_widget_show (w_alignment2);
- gtk_box_pack_start (GTK_BOX (cfg_stil_box1), w_alignment2, TRUE, TRUE, 4);
-
- cfg_stil_dbpath = gtk_entry_new ();
- gtk_widget_set_name (cfg_stil_dbpath, "cfg_stil_dbpath");
- gtk_widget_show (cfg_stil_dbpath);
- gtk_container_add (GTK_CONTAINER (w_alignment2), cfg_stil_dbpath);
- gtk_tooltips_set_tip (tooltips, cfg_stil_dbpath, _("Path and filename of STIL database file (STIL.txt), usually found from HVSC's DOCUMENTS-subdirectory."), NULL);
- gtk_entry_set_invisible_char (GTK_ENTRY (cfg_stil_dbpath), 9679);
-
- w_alignment1 = gtk_alignment_new (0.5, 0.5, 1, 0.300001);
- gtk_widget_set_name (w_alignment1, "w_alignment1");
- gtk_widget_show (w_alignment1);
- gtk_box_pack_end (GTK_BOX (cfg_stil_box1), w_alignment1, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_alignment1), 4);
-
- cfg_stil_browse = gtk_button_new ();
- gtk_widget_set_name (cfg_stil_browse, "cfg_stil_browse");
- gtk_widget_show (cfg_stil_browse);
- gtk_container_add (GTK_CONTAINER (w_alignment1), cfg_stil_browse);
- gtk_tooltips_set_tip (tooltips, cfg_stil_browse, _("Browse for STIL-database file"), NULL);
-
- alignment2 = gtk_alignment_new (0.5, 0.5, 0, 0);
- gtk_widget_set_name (alignment2, "alignment2");
- gtk_widget_show (alignment2);
- gtk_container_add (GTK_CONTAINER (cfg_stil_browse), alignment2);
-
- hbox2 = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (hbox2, "hbox2");
- gtk_widget_show (hbox2);
- gtk_container_add (GTK_CONTAINER (alignment2), hbox2);
-
- image2 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
- gtk_widget_set_name (image2, "image2");
- gtk_widget_show (image2);
- gtk_box_pack_start (GTK_BOX (hbox2), image2, FALSE, FALSE, 0);
-
- label31 = gtk_label_new_with_mnemonic (_("Browse"));
- gtk_widget_set_name (label31, "label31");
- gtk_widget_show (label31);
- gtk_box_pack_start (GTK_BOX (hbox2), label31, FALSE, FALSE, 0);
-
- cfg_stil_box2 = gtk_hbox_new (FALSE, 0);
- gtk_widget_set_name (cfg_stil_box2, "cfg_stil_box2");
- gtk_widget_show (cfg_stil_box2);
- gtk_box_pack_start (GTK_BOX (w_vbox8), cfg_stil_box2, TRUE, TRUE, 0);
-
- cfg_hvsc_label1 = gtk_label_new (_("HVSC path:"));
- gtk_widget_set_name (cfg_hvsc_label1, "cfg_hvsc_label1");
- gtk_widget_show (cfg_hvsc_label1);
- gtk_box_pack_start (GTK_BOX (cfg_stil_box2), cfg_hvsc_label1, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (cfg_hvsc_label1), GTK_JUSTIFY_CENTER);
- gtk_misc_set_padding (GTK_MISC (cfg_hvsc_label1), 4, 0);
-
- w_alignment6 = gtk_alignment_new (0.5, 0.5, 1, 1);
- gtk_widget_set_name (w_alignment6, "w_alignment6");
- gtk_widget_show (w_alignment6);
- gtk_box_pack_start (GTK_BOX (cfg_stil_box2), w_alignment6, TRUE, TRUE, 4);
-
- cfg_hvsc_path = gtk_entry_new ();
- gtk_widget_set_name (cfg_hvsc_path, "cfg_hvsc_path");
- gtk_widget_show (cfg_hvsc_path);
- gtk_container_add (GTK_CONTAINER (w_alignment6), cfg_hvsc_path);
- gtk_tooltips_set_tip (tooltips, cfg_hvsc_path, _("Path to base-directory of your High Voltage SID Collection (HVSC), for example /media/C64Music/"), NULL);
- gtk_entry_set_invisible_char (GTK_ENTRY (cfg_hvsc_path), 9679);
-
- w_alignment7 = gtk_alignment_new (0.5, 0.5, 1, 0.300001);
- gtk_widget_set_name (w_alignment7, "w_alignment7");
- gtk_widget_show (w_alignment7);
- gtk_box_pack_end (GTK_BOX (cfg_stil_box2), w_alignment7, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_alignment7), 4);
-
- cfg_hvsc_browse = gtk_button_new ();
- gtk_widget_set_name (cfg_hvsc_browse, "cfg_hvsc_browse");
- gtk_widget_show (cfg_hvsc_browse);
- gtk_container_add (GTK_CONTAINER (w_alignment7), cfg_hvsc_browse);
- gtk_tooltips_set_tip (tooltips, cfg_hvsc_browse, _("Browse for HVSC path"), NULL);
-
- alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);
- gtk_widget_set_name (alignment3, "alignment3");
- gtk_widget_show (alignment3);
- gtk_container_add (GTK_CONTAINER (cfg_hvsc_browse), alignment3);
-
- hbox3 = gtk_hbox_new (FALSE, 2);
- gtk_widget_set_name (hbox3, "hbox3");
- gtk_widget_show (hbox3);
- gtk_container_add (GTK_CONTAINER (alignment3), hbox3);
-
- image3 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
- gtk_widget_set_name (image3, "image3");
- gtk_widget_show (image3);
- gtk_box_pack_start (GTK_BOX (hbox3), image3, FALSE, FALSE, 0);
-
- label32 = gtk_label_new_with_mnemonic (_("Browse"));
- gtk_widget_set_name (label32, "label32");
- gtk_widget_show (label32);
- gtk_box_pack_start (GTK_BOX (hbox3), label32, FALSE, FALSE, 0);
-
- label18 = gtk_label_new (_("SID Tune Information List (STIL) database:"));
- gtk_widget_set_name (label18, "label18");
- gtk_widget_show (label18);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame7), label18);
-
- w_label3 = gtk_label_new (_("Misc"));
- gtk_widget_set_name (w_label3, "w_label3");
- gtk_widget_show (w_label3);
- gtk_notebook_set_tab_label (GTK_NOTEBOOK (cfg_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (cfg_notebook), 6), w_label3);
- gtk_label_set_justify (GTK_LABEL (w_label3), GTK_JUSTIFY_CENTER);
-
- hbuttonbox1 = gtk_hbutton_box_new ();
- gtk_widget_set_name (hbuttonbox1, "hbuttonbox1");
- gtk_widget_show (hbuttonbox1);
- gtk_box_pack_end (GTK_BOX (w_vbox1), hbuttonbox1, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (hbuttonbox1), 4);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END);
- gtk_box_set_spacing (GTK_BOX (hbuttonbox1), 8);
-
- cfg_cancel = gtk_button_new_from_stock ("gtk-cancel");
- gtk_widget_set_name (cfg_cancel, "cfg_cancel");
- gtk_widget_show (cfg_cancel);
- gtk_container_add (GTK_CONTAINER (hbuttonbox1), cfg_cancel);
- GTK_WIDGET_SET_FLAGS (cfg_cancel, GTK_CAN_DEFAULT);
- gtk_tooltips_set_tip (tooltips, cfg_cancel, _("Cancel any changes"), NULL);
-
- cfg_ok = gtk_button_new_from_stock ("gtk-ok");
- gtk_widget_set_name (cfg_ok, "cfg_ok");
- gtk_widget_show (cfg_ok);
- gtk_container_add (GTK_CONTAINER (hbuttonbox1), cfg_ok);
- GTK_WIDGET_SET_FLAGS (cfg_ok, GTK_CAN_DEFAULT);
- gtk_tooltips_set_tip (tooltips, cfg_ok, _("Accept and update changes"), NULL);
-
- g_signal_connect ((gpointer) xs_configwin, "delete_event",
- G_CALLBACK (xs_configwin_delete),
- NULL);
- g_signal_connect ((gpointer) cfg_oversample, "toggled",
- G_CALLBACK (xs_cfg_oversample_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_emu_sidplay1, "toggled",
- G_CALLBACK (xs_cfg_emu_sidplay1_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_emu_sidplay2, "toggled",
- G_CALLBACK (xs_cfg_emu_sidplay2_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_emu_filters, "toggled",
- G_CALLBACK (xs_cfg_emu_filters_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_sp1_filter_reset, "clicked",
- G_CALLBACK (xs_cfg_sp1_filter_reset),
- NULL);
- g_signal_connect ((gpointer) cfg_sp2_filter_export, "clicked",
- G_CALLBACK (xs_cfg_sp2_filter_export),
- NULL);
- g_signal_connect ((gpointer) cfg_sp2_filter_load, "clicked",
- G_CALLBACK (xs_cfg_sp2_filter_load),
- NULL);
- g_signal_connect ((gpointer) cfg_sp2_filter_save, "clicked",
- G_CALLBACK (xs_cfg_sp2_filter_save),
- NULL);
- g_signal_connect ((gpointer) cfg_sp2_filter_import, "clicked",
- G_CALLBACK (xs_cfg_sp2_filter_import),
- NULL);
- g_signal_connect ((gpointer) cfg_sp2_filter_delete, "clicked",
- G_CALLBACK (xs_cfg_sp2_filter_delete),
- NULL);
- g_signal_connect ((gpointer) cfg_mintime_enable, "toggled",
- G_CALLBACK (xs_cfg_mintime_enable_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_mintime, "changed",
- G_CALLBACK (xs_cfg_mintime_changed),
- NULL);
- g_signal_connect ((gpointer) cfg_maxtime_enable, "toggled",
- G_CALLBACK (xs_cfg_maxtime_enable_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_maxtime, "changed",
- G_CALLBACK (xs_cfg_maxtime_changed),
- NULL);
- g_signal_connect ((gpointer) cfg_sld_enable, "toggled",
- G_CALLBACK (xs_cfg_sldb_enable_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_sld_dbbrowse, "clicked",
- G_CALLBACK (xs_cfg_sldb_browse),
- NULL);
- g_signal_connect ((gpointer) cfg_ftitle_override, "toggled",
- G_CALLBACK (xs_cfg_ftitle_override_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_subauto_enable, "toggled",
- G_CALLBACK (xs_cfg_subauto_enable_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_subauto_min_only, "toggled",
- G_CALLBACK (xs_cfg_subauto_min_only_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_stil_enable, "toggled",
- G_CALLBACK (xs_cfg_stil_enable_toggled),
- NULL);
- g_signal_connect ((gpointer) cfg_stil_browse, "clicked",
- G_CALLBACK (xs_cfg_stil_browse),
- NULL);
- g_signal_connect ((gpointer) cfg_hvsc_browse, "clicked",
- G_CALLBACK (xs_cfg_hvsc_browse),
- NULL);
- g_signal_connect ((gpointer) cfg_cancel, "clicked",
- G_CALLBACK (xs_cfg_cancel),
- NULL);
- g_signal_connect ((gpointer) cfg_ok, "clicked",
- G_CALLBACK (xs_cfg_ok),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_configwin, xs_configwin, "xs_configwin");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox1, "w_vbox1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_notebook, "cfg_notebook");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox6, "w_vbox6");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_hbox2, "w_hbox2");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sndres_frame, "cfg_sndres_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox9, "w_vbox9");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_res_8bit, "cfg_res_8bit");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_res_16bit, "cfg_res_16bit");
- GLADE_HOOKUP_OBJECT (xs_configwin, label1, "label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_channels_frame, "cfg_channels_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox10, "w_vbox10");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_chn_mono, "cfg_chn_mono");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_chn_stereo, "cfg_chn_stereo");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_chn_autopan, "cfg_chn_autopan");
- GLADE_HOOKUP_OBJECT (xs_configwin, label2, "label2");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_samplerate_frame, "cfg_samplerate_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_hbox4, "w_hbox4");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_samplerate_combo, "cfg_samplerate_combo");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_samplerate, "cfg_samplerate");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label8, "w_label8");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label54, "w_label54");
- GLADE_HOOKUP_OBJECT (xs_configwin, label3, "label3");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_oversample_frame, "cfg_oversample_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox27, "w_vbox27");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_oversample, "cfg_oversample");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_oversample_box, "cfg_oversample_box");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_oversample_label1, "cfg_oversample_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_oversample_factor, "cfg_oversample_factor");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_oversample_label2, "cfg_oversample_label2");
- GLADE_HOOKUP_OBJECT (xs_configwin, label4, "label4");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label1, "w_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox2, "w_vbox2");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_hbox1, "w_hbox1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_clock_frame, "cfg_clock_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox4, "w_vbox4");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_clock_force, "cfg_emu_clock_force");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_clock_pal, "cfg_emu_clock_pal");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_clock_ntsc, "cfg_emu_clock_ntsc");
- GLADE_HOOKUP_OBJECT (xs_configwin, label5, "label5");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sid_model_frame, "cfg_sid_model_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox3, "w_vbox3");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_sid_force, "cfg_emu_sid_force");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_mos6581, "cfg_emu_mos6581");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_mos8580, "cfg_emu_mos8580");
- GLADE_HOOKUP_OBJECT (xs_configwin, label6, "label6");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emulib_frame, "cfg_emulib_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox26, "w_vbox26");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_sidplay1, "cfg_emu_sidplay1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_sidplay2, "cfg_emu_sidplay2");
- GLADE_HOOKUP_OBJECT (xs_configwin, label7, "label7");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_memmode_frame, "cfg_memmode_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox5, "w_vbox5");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_mem_real, "cfg_emu_mem_real");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_mem_banksw, "cfg_emu_mem_banksw");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_mem_transrom, "cfg_emu_mem_transrom");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_mem_playsid, "cfg_emu_mem_playsid");
- GLADE_HOOKUP_OBJECT (xs_configwin, label8, "label8");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label2, "w_label2");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox29, "w_vbox29");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sidplay2_frame, "cfg_sidplay2_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox30, "w_vbox30");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_sp2_opt, "cfg_emu_sp2_opt");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_sp2_resid, "cfg_emu_sp2_resid");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_sp2_hardsid, "cfg_emu_sp2_hardsid");
- GLADE_HOOKUP_OBJECT (xs_configwin, label9, "label9");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_resid_frame, "cfg_resid_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox37, "w_vbox37");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_resid_fast, "cfg_emu_resid_fast");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_resid_int, "cfg_emu_resid_int");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_resid_res_fast, "cfg_emu_resid_res_fast");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_resid_res_int, "cfg_emu_resid_res_int");
- GLADE_HOOKUP_OBJECT (xs_configwin, label10, "label10");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label48, "w_label48");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox25, "w_vbox25");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_emu_filters, "cfg_emu_filters");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_filters_notebook, "cfg_filters_notebook");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_box_filter_sidplay1, "cfg_box_filter_sidplay1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_frm_fs, "cfg_sp1_frm_fs");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_filter_fs, "cfg_sp1_filter_fs");
- GLADE_HOOKUP_OBJECT (xs_configwin, label11, "label11");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_frm_fm, "cfg_sp1_frm_fm");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_filter_fm, "cfg_sp1_filter_fm");
- GLADE_HOOKUP_OBJECT (xs_configwin, label12, "label12");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_frm_ft, "cfg_sp1_frm_ft");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_filter_ft, "cfg_sp1_filter_ft");
- GLADE_HOOKUP_OBJECT (xs_configwin, label13, "label13");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox17, "w_vbox17");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp1_filter_reset, "cfg_sp1_filter_reset");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label55, "w_label55");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_box_filter_sidplay2, "cfg_box_filter_sidplay2");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp_filter_controlbox, "cfg_sp_filter_controlbox");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_combo, "cfg_sp2_filter_combo");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_combo_entry, "cfg_sp2_filter_combo_entry");
- GLADE_HOOKUP_OBJECT (xs_configwin, table3, "table3");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_export, "cfg_sp2_filter_export");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_load, "cfg_sp2_filter_load");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_save, "cfg_sp2_filter_save");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_import, "cfg_sp2_filter_import");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_delete, "cfg_sp2_filter_delete");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sp2_filter_frame, "cfg_sp2_filter_frame");
- GLADE_HOOKUP_OBJECT (xs_configwin, label14, "label14");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label56, "w_label56");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label24, "w_label24");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox20, "w_vbox20");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_frame29, "w_frame29");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox32, "w_vbox32");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_mintime_enable, "cfg_mintime_enable");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_mintime_box, "cfg_mintime_box");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_mintime_label1, "cfg_mintime_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_mintime, "cfg_mintime");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_mintime_label2, "cfg_mintime_label2");
- GLADE_HOOKUP_OBJECT (xs_configwin, label15, "label15");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_frame21, "w_frame21");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox21, "w_vbox21");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_maxtime_enable, "cfg_maxtime_enable");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_maxtime_unknown, "cfg_maxtime_unknown");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_maxtime_box, "cfg_maxtime_box");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_maxtime_label1, "cfg_maxtime_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_maxtime, "cfg_maxtime");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_maxtime_label2, "cfg_maxtime_label2");
- GLADE_HOOKUP_OBJECT (xs_configwin, label16, "label16");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_frame18, "w_frame18");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox18, "w_vbox18");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sld_enable, "cfg_sld_enable");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sld_box, "cfg_sld_box");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sld_label1, "cfg_sld_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sld_dbpath, "cfg_sld_dbpath");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_sld_dbbrowse, "cfg_sld_dbbrowse");
- GLADE_HOOKUP_OBJECT (xs_configwin, alignment1, "alignment1");
- GLADE_HOOKUP_OBJECT (xs_configwin, hbox1, "hbox1");
- GLADE_HOOKUP_OBJECT (xs_configwin, image1, "image1");
- GLADE_HOOKUP_OBJECT (xs_configwin, label30, "label30");
- GLADE_HOOKUP_OBJECT (xs_configwin, label17, "label17");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label26, "w_label26");
- GLADE_HOOKUP_OBJECT (xs_configwin, frame1, "frame1");
- GLADE_HOOKUP_OBJECT (xs_configwin, vbox1, "vbox1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_ftitle_override, "cfg_ftitle_override");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_ftitle_box, "cfg_ftitle_box");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_ftitle_format, "cfg_ftitle_format");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_ftitle_descs, "cfg_ftitle_descs");
- GLADE_HOOKUP_OBJECT (xs_configwin, label29, "label29");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label27, "w_label27");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox19, "w_vbox19");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_frame31, "w_frame31");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox35, "w_vbox35");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_subauto_enable, "cfg_subauto_enable");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_subauto_min_only, "cfg_subauto_min_only");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_subauto_box, "cfg_subauto_box");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label52, "w_label52");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_subauto_mintime, "cfg_subauto_mintime");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label53, "w_label53");
- GLADE_HOOKUP_OBJECT (xs_configwin, label21, "label21");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_frame7, "w_frame7");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_vbox8, "w_vbox8");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_stil_enable, "cfg_stil_enable");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_stil_box1, "cfg_stil_box1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_stil_label1, "cfg_stil_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_alignment2, "w_alignment2");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_stil_dbpath, "cfg_stil_dbpath");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_alignment1, "w_alignment1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_stil_browse, "cfg_stil_browse");
- GLADE_HOOKUP_OBJECT (xs_configwin, alignment2, "alignment2");
- GLADE_HOOKUP_OBJECT (xs_configwin, hbox2, "hbox2");
- GLADE_HOOKUP_OBJECT (xs_configwin, image2, "image2");
- GLADE_HOOKUP_OBJECT (xs_configwin, label31, "label31");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_stil_box2, "cfg_stil_box2");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_hvsc_label1, "cfg_hvsc_label1");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_alignment6, "w_alignment6");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_hvsc_path, "cfg_hvsc_path");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_alignment7, "w_alignment7");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_hvsc_browse, "cfg_hvsc_browse");
- GLADE_HOOKUP_OBJECT (xs_configwin, alignment3, "alignment3");
- GLADE_HOOKUP_OBJECT (xs_configwin, hbox3, "hbox3");
- GLADE_HOOKUP_OBJECT (xs_configwin, image3, "image3");
- GLADE_HOOKUP_OBJECT (xs_configwin, label32, "label32");
- GLADE_HOOKUP_OBJECT (xs_configwin, label18, "label18");
- GLADE_HOOKUP_OBJECT (xs_configwin, w_label3, "w_label3");
- GLADE_HOOKUP_OBJECT (xs_configwin, hbuttonbox1, "hbuttonbox1");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_cancel, "cfg_cancel");
- GLADE_HOOKUP_OBJECT (xs_configwin, cfg_ok, "cfg_ok");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_configwin, tooltips, "tooltips");
-
- return xs_configwin;
-}
-
-GtkWidget*
-create_xs_fileinfowin (void)
-{
- GtkWidget *xs_fileinfowin;
- GtkWidget *w_vbox14;
- GtkWidget *w_frame14;
- GtkWidget *table1;
- GtkWidget *w_label16;
- GtkWidget *w_label17;
- GtkWidget *w_label18;
- GtkWidget *w_label19;
- GtkWidget *fileinfo_filename;
- GtkWidget *fileinfo_songname;
- GtkWidget *fileinfo_composer;
- GtkWidget *fileinfo_copyright;
- GtkWidget *label23;
- GtkWidget *w_frame15;
- GtkWidget *w_vbox15;
- GtkWidget *fileinfo_sub_tune;
- GtkWidget *convertwidget7;
- GtkWidget *table2;
- GtkWidget *w_label41;
- GtkWidget *fileinfo_sub_author;
- GtkWidget *w_label50;
- GtkWidget *fileinfo_sub_name;
- GtkWidget *w_label51;
- GtkWidget *entry1;
- GtkWidget *scrolledwindow2;
- GtkWidget *fileinfo_sub_info;
- GtkWidget *label24;
- GtkWidget *button2;
-
- xs_fileinfowin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_name (xs_fileinfowin, "xs_fileinfowin");
- gtk_widget_set_size_request (xs_fileinfowin, 400, -1);
- gtk_window_set_title (GTK_WINDOW (xs_fileinfowin), _("Audacious-SID Fileinfo"));
-
- w_vbox14 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (w_vbox14, "w_vbox14");
- gtk_widget_show (w_vbox14);
- gtk_container_add (GTK_CONTAINER (xs_fileinfowin), w_vbox14);
-
- w_frame14 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame14, "w_frame14");
- gtk_widget_show (w_frame14);
- gtk_box_pack_start (GTK_BOX (w_vbox14), w_frame14, FALSE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame14), 4);
-
- table1 = gtk_table_new (4, 2, FALSE);
- gtk_widget_set_name (table1, "table1");
- gtk_widget_show (table1);
- gtk_container_add (GTK_CONTAINER (w_frame14), table1);
- gtk_container_set_border_width (GTK_CONTAINER (table1), 4);
- gtk_table_set_row_spacings (GTK_TABLE (table1), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table1), 4);
-
- w_label16 = gtk_label_new (_("Filename:"));
- gtk_widget_set_name (w_label16, "w_label16");
- gtk_widget_show (w_label16);
- gtk_table_attach (GTK_TABLE (table1), w_label16, 0, 1, 0, 1,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label16), GTK_JUSTIFY_CENTER);
-
- w_label17 = gtk_label_new (_("Songname:"));
- gtk_widget_set_name (w_label17, "w_label17");
- gtk_widget_show (w_label17);
- gtk_table_attach (GTK_TABLE (table1), w_label17, 0, 1, 1, 2,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label17), GTK_JUSTIFY_CENTER);
-
- w_label18 = gtk_label_new (_("Composer:"));
- gtk_widget_set_name (w_label18, "w_label18");
- gtk_widget_show (w_label18);
- gtk_table_attach (GTK_TABLE (table1), w_label18, 0, 1, 2, 3,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label18), GTK_JUSTIFY_CENTER);
-
- w_label19 = gtk_label_new (_("Copyright:"));
- gtk_widget_set_name (w_label19, "w_label19");
- gtk_widget_show (w_label19);
- gtk_table_attach (GTK_TABLE (table1), w_label19, 0, 1, 3, 4,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label19), GTK_JUSTIFY_CENTER);
-
- fileinfo_filename = gtk_entry_new ();
- gtk_widget_set_name (fileinfo_filename, "fileinfo_filename");
- gtk_widget_show (fileinfo_filename);
- gtk_table_attach (GTK_TABLE (table1), fileinfo_filename, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (fileinfo_filename), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (fileinfo_filename), 9679);
-
- fileinfo_songname = gtk_entry_new ();
- gtk_widget_set_name (fileinfo_songname, "fileinfo_songname");
- gtk_widget_show (fileinfo_songname);
- gtk_table_attach (GTK_TABLE (table1), fileinfo_songname, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (fileinfo_songname), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (fileinfo_songname), 9679);
-
- fileinfo_composer = gtk_entry_new ();
- gtk_widget_set_name (fileinfo_composer, "fileinfo_composer");
- gtk_widget_show (fileinfo_composer);
- gtk_table_attach (GTK_TABLE (table1), fileinfo_composer, 1, 2, 2, 3,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (fileinfo_composer), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (fileinfo_composer), 9679);
-
- fileinfo_copyright = gtk_entry_new ();
- gtk_widget_set_name (fileinfo_copyright, "fileinfo_copyright");
- gtk_widget_show (fileinfo_copyright);
- gtk_table_attach (GTK_TABLE (table1), fileinfo_copyright, 1, 2, 3, 4,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (fileinfo_copyright), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (fileinfo_copyright), 9679);
-
- label23 = gtk_label_new (_("Song Information:"));
- gtk_widget_set_name (label23, "label23");
- gtk_widget_show (label23);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame14), label23);
-
- w_frame15 = gtk_frame_new (NULL);
- gtk_widget_set_name (w_frame15, "w_frame15");
- gtk_widget_show (w_frame15);
- gtk_box_pack_start (GTK_BOX (w_vbox14), w_frame15, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (w_frame15), 4);
-
- w_vbox15 = gtk_vbox_new (FALSE, 2);
- gtk_widget_set_name (w_vbox15, "w_vbox15");
- gtk_widget_show (w_vbox15);
- gtk_container_add (GTK_CONTAINER (w_frame15), w_vbox15);
-
- fileinfo_sub_tune = gtk_option_menu_new ();
- gtk_widget_set_name (fileinfo_sub_tune, "fileinfo_sub_tune");
- gtk_widget_show (fileinfo_sub_tune);
- gtk_box_pack_start (GTK_BOX (w_vbox15), fileinfo_sub_tune, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (fileinfo_sub_tune), 2);
-
- convertwidget7 = gtk_menu_new ();
- gtk_widget_set_name (convertwidget7, "convertwidget7");
-
- gtk_option_menu_set_menu (GTK_OPTION_MENU (fileinfo_sub_tune), convertwidget7);
-
- table2 = gtk_table_new (3, 2, FALSE);
- gtk_widget_set_name (table2, "table2");
- gtk_widget_show (table2);
- gtk_box_pack_start (GTK_BOX (w_vbox15), table2, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (table2), 4);
- gtk_table_set_row_spacings (GTK_TABLE (table2), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table2), 4);
-
- w_label41 = gtk_label_new (_("Author:"));
- gtk_widget_set_name (w_label41, "w_label41");
- gtk_widget_show (w_label41);
- gtk_table_attach (GTK_TABLE (table2), w_label41, 0, 1, 1, 2,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label41), GTK_JUSTIFY_CENTER);
-
- fileinfo_sub_author = gtk_entry_new ();
- gtk_widget_set_name (fileinfo_sub_author, "fileinfo_sub_author");
- gtk_widget_show (fileinfo_sub_author);
- gtk_table_attach (GTK_TABLE (table2), fileinfo_sub_author, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (fileinfo_sub_author), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (fileinfo_sub_author), 9679);
-
- w_label50 = gtk_label_new (_("Name:"));
- gtk_widget_set_name (w_label50, "w_label50");
- gtk_widget_show (w_label50);
- gtk_table_attach (GTK_TABLE (table2), w_label50, 0, 1, 0, 1,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label50), GTK_JUSTIFY_CENTER);
-
- fileinfo_sub_name = gtk_entry_new ();
- gtk_widget_set_name (fileinfo_sub_name, "fileinfo_sub_name");
- gtk_widget_show (fileinfo_sub_name);
- gtk_table_attach (GTK_TABLE (table2), fileinfo_sub_name, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (fileinfo_sub_name), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (fileinfo_sub_name), 9679);
-
- w_label51 = gtk_label_new (_("Duration:"));
- gtk_widget_set_name (w_label51, "w_label51");
- gtk_widget_show (w_label51);
- gtk_table_attach (GTK_TABLE (table2), w_label51, 0, 1, 2, 3,
- (GtkAttachOptions) (GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify (GTK_LABEL (w_label51), GTK_JUSTIFY_CENTER);
- gtk_misc_set_alignment (GTK_MISC (w_label51), 0, 0.5);
-
- entry1 = gtk_entry_new ();
- gtk_widget_set_name (entry1, "entry1");
- gtk_widget_show (entry1);
- gtk_table_attach (GTK_TABLE (table2), entry1, 1, 2, 2, 3,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (0), 0, 0);
- gtk_editable_set_editable (GTK_EDITABLE (entry1), FALSE);
- gtk_entry_set_invisible_char (GTK_ENTRY (entry1), 9679);
-
- scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow2, "scrolledwindow2");
- gtk_widget_show (scrolledwindow2);
- gtk_box_pack_start (GTK_BOX (w_vbox15), scrolledwindow2, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow2), 4);
- GTK_WIDGET_UNSET_FLAGS (scrolledwindow2, GTK_CAN_FOCUS);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_SHADOW_IN);
-
- fileinfo_sub_info = gtk_text_view_new ();
- gtk_widget_set_name (fileinfo_sub_info, "fileinfo_sub_info");
- gtk_widget_show (fileinfo_sub_info);
- gtk_container_add (GTK_CONTAINER (scrolledwindow2), fileinfo_sub_info);
- gtk_text_view_set_editable (GTK_TEXT_VIEW (fileinfo_sub_info), FALSE);
- gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (fileinfo_sub_info), GTK_WRAP_WORD);
-
- label24 = gtk_label_new (_("Sub-tune Information:"));
- gtk_widget_set_name (label24, "label24");
- gtk_widget_show (label24);
- gtk_frame_set_label_widget (GTK_FRAME (w_frame15), label24);
-
- button2 = gtk_button_new_with_mnemonic (_("Close"));
- gtk_widget_set_name (button2, "button2");
- gtk_widget_show (button2);
- gtk_box_pack_start (GTK_BOX (w_vbox14), button2, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (button2), 4);
- GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_fileinfowin, "delete_event",
- G_CALLBACK (xs_fileinfo_delete),
- NULL);
- g_signal_connect ((gpointer) button2, "clicked",
- G_CALLBACK (xs_fileinfo_ok),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_fileinfowin, xs_fileinfowin, "xs_fileinfowin");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_vbox14, "w_vbox14");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_frame14, "w_frame14");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, table1, "table1");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label16, "w_label16");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label17, "w_label17");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label18, "w_label18");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label19, "w_label19");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_filename, "fileinfo_filename");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_songname, "fileinfo_songname");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_composer, "fileinfo_composer");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_copyright, "fileinfo_copyright");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, label23, "label23");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_frame15, "w_frame15");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_vbox15, "w_vbox15");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_sub_tune, "fileinfo_sub_tune");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, convertwidget7, "convertwidget7");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, table2, "table2");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label41, "w_label41");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_sub_author, "fileinfo_sub_author");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label50, "w_label50");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_sub_name, "fileinfo_sub_name");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, w_label51, "w_label51");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, entry1, "entry1");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, scrolledwindow2, "scrolledwindow2");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, fileinfo_sub_info, "fileinfo_sub_info");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, label24, "label24");
- GLADE_HOOKUP_OBJECT (xs_fileinfowin, button2, "button2");
-
- gtk_widget_grab_focus (button2);
- gtk_widget_grab_default (button2);
- return xs_fileinfowin;
-}
-
-GtkWidget*
-create_xs_sldb_fs (void)
-{
- GtkWidget *xs_sldb_fs;
- GtkWidget *ok_button2;
- GtkWidget *cancel_button2;
-
- xs_sldb_fs = gtk_file_selection_new (_("Select HVSC song length database"));
- gtk_widget_set_name (xs_sldb_fs, "xs_sldb_fs");
- gtk_container_set_border_width (GTK_CONTAINER (xs_sldb_fs), 10);
- gtk_window_set_modal (GTK_WINDOW (xs_sldb_fs), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (xs_sldb_fs), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- ok_button2 = GTK_FILE_SELECTION (xs_sldb_fs)->ok_button;
- gtk_widget_set_name (ok_button2, "ok_button2");
- gtk_widget_show (ok_button2);
- GTK_WIDGET_SET_FLAGS (ok_button2, GTK_CAN_DEFAULT);
-
- cancel_button2 = GTK_FILE_SELECTION (xs_sldb_fs)->cancel_button;
- gtk_widget_set_name (cancel_button2, "cancel_button2");
- gtk_widget_show (cancel_button2);
- GTK_WIDGET_SET_FLAGS (cancel_button2, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_sldb_fs, "delete_event",
- G_CALLBACK (xs_sldb_fs_delete),
- NULL);
- g_signal_connect ((gpointer) ok_button2, "clicked",
- G_CALLBACK (xs_sldb_fs_ok),
- NULL);
- g_signal_connect ((gpointer) cancel_button2, "clicked",
- G_CALLBACK (xs_sldb_fs_cancel),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_sldb_fs, xs_sldb_fs, "xs_sldb_fs");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_sldb_fs, ok_button2, "ok_button2");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_sldb_fs, cancel_button2, "cancel_button2");
-
- return xs_sldb_fs;
-}
-
-GtkWidget*
-create_xs_stil_fs (void)
-{
- GtkWidget *xs_stil_fs;
- GtkWidget *ok_button3;
- GtkWidget *cancel_button3;
-
- xs_stil_fs = gtk_file_selection_new (_("Select STIL-database"));
- gtk_widget_set_name (xs_stil_fs, "xs_stil_fs");
- gtk_container_set_border_width (GTK_CONTAINER (xs_stil_fs), 10);
- gtk_window_set_modal (GTK_WINDOW (xs_stil_fs), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (xs_stil_fs), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- ok_button3 = GTK_FILE_SELECTION (xs_stil_fs)->ok_button;
- gtk_widget_set_name (ok_button3, "ok_button3");
- gtk_widget_show (ok_button3);
- GTK_WIDGET_SET_FLAGS (ok_button3, GTK_CAN_DEFAULT);
-
- cancel_button3 = GTK_FILE_SELECTION (xs_stil_fs)->cancel_button;
- gtk_widget_set_name (cancel_button3, "cancel_button3");
- gtk_widget_show (cancel_button3);
- GTK_WIDGET_SET_FLAGS (cancel_button3, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_stil_fs, "delete_event",
- G_CALLBACK (xs_stil_fs_delete),
- NULL);
- g_signal_connect ((gpointer) ok_button3, "clicked",
- G_CALLBACK (xs_stil_fs_ok),
- NULL);
- g_signal_connect ((gpointer) cancel_button3, "clicked",
- G_CALLBACK (xs_stil_fs_cancel),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_stil_fs, xs_stil_fs, "xs_stil_fs");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_stil_fs, ok_button3, "ok_button3");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_stil_fs, cancel_button3, "cancel_button3");
-
- return xs_stil_fs;
-}
-
-GtkWidget*
-create_xs_hvsc_fs (void)
-{
- GtkWidget *xs_hvsc_fs;
- GtkWidget *ok_button4;
- GtkWidget *cancel_button4;
-
- xs_hvsc_fs = gtk_file_selection_new (_("Select HVSC location prefix"));
- gtk_widget_set_name (xs_hvsc_fs, "xs_hvsc_fs");
- gtk_container_set_border_width (GTK_CONTAINER (xs_hvsc_fs), 10);
- gtk_window_set_modal (GTK_WINDOW (xs_hvsc_fs), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (xs_hvsc_fs), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- ok_button4 = GTK_FILE_SELECTION (xs_hvsc_fs)->ok_button;
- gtk_widget_set_name (ok_button4, "ok_button4");
- gtk_widget_show (ok_button4);
- GTK_WIDGET_SET_FLAGS (ok_button4, GTK_CAN_DEFAULT);
-
- cancel_button4 = GTK_FILE_SELECTION (xs_hvsc_fs)->cancel_button;
- gtk_widget_set_name (cancel_button4, "cancel_button4");
- gtk_widget_show (cancel_button4);
- GTK_WIDGET_SET_FLAGS (cancel_button4, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_hvsc_fs, "delete_event",
- G_CALLBACK (xs_hvsc_fs_delete),
- NULL);
- g_signal_connect ((gpointer) ok_button4, "clicked",
- G_CALLBACK (xs_hvsc_fs_ok),
- NULL);
- g_signal_connect ((gpointer) cancel_button4, "clicked",
- G_CALLBACK (xs_hvsc_fs_cancel),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_hvsc_fs, xs_hvsc_fs, "xs_hvsc_fs");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_hvsc_fs, ok_button4, "ok_button4");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_hvsc_fs, cancel_button4, "cancel_button4");
-
- return xs_hvsc_fs;
-}
-
-GtkWidget*
-create_xs_filter_import_fs (void)
-{
- GtkWidget *xs_filter_import_fs;
- GtkWidget *ok_button64;
- GtkWidget *cancel_button64;
-
- xs_filter_import_fs = gtk_file_selection_new (_("Select SIDPlay2 filters file for importing"));
- gtk_widget_set_name (xs_filter_import_fs, "xs_filter_import_fs");
- gtk_container_set_border_width (GTK_CONTAINER (xs_filter_import_fs), 10);
- gtk_window_set_modal (GTK_WINDOW (xs_filter_import_fs), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (xs_filter_import_fs), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- ok_button64 = GTK_FILE_SELECTION (xs_filter_import_fs)->ok_button;
- gtk_widget_set_name (ok_button64, "ok_button64");
- gtk_widget_show (ok_button64);
- GTK_WIDGET_SET_FLAGS (ok_button64, GTK_CAN_DEFAULT);
-
- cancel_button64 = GTK_FILE_SELECTION (xs_filter_import_fs)->cancel_button;
- gtk_widget_set_name (cancel_button64, "cancel_button64");
- gtk_widget_show (cancel_button64);
- GTK_WIDGET_SET_FLAGS (cancel_button64, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_filter_import_fs, "delete_event",
- G_CALLBACK (xs_filter_import_fs_delete),
- NULL);
- g_signal_connect ((gpointer) ok_button64, "clicked",
- G_CALLBACK (xs_filter_import_fs_ok),
- NULL);
- g_signal_connect ((gpointer) cancel_button64, "clicked",
- G_CALLBACK (xs_filter_import_fs_cancel),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_filter_import_fs, xs_filter_import_fs, "xs_filter_import_fs");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_filter_import_fs, ok_button64, "ok_button64");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_filter_import_fs, cancel_button64, "cancel_button64");
-
- return xs_filter_import_fs;
-}
-
-GtkWidget*
-create_xs_filter_export_fs (void)
-{
- GtkWidget *xs_filter_export_fs;
- GtkWidget *ok_button64;
- GtkWidget *cancel_button64;
-
- xs_filter_export_fs = gtk_file_selection_new (_("Select SIDPlay2 filters file for exporting"));
- gtk_widget_set_name (xs_filter_export_fs, "xs_filter_export_fs");
- gtk_container_set_border_width (GTK_CONTAINER (xs_filter_export_fs), 10);
- gtk_window_set_modal (GTK_WINDOW (xs_filter_export_fs), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (xs_filter_export_fs), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- ok_button64 = GTK_FILE_SELECTION (xs_filter_export_fs)->ok_button;
- gtk_widget_set_name (ok_button64, "ok_button64");
- gtk_widget_show (ok_button64);
- GTK_WIDGET_SET_FLAGS (ok_button64, GTK_CAN_DEFAULT);
-
- cancel_button64 = GTK_FILE_SELECTION (xs_filter_export_fs)->cancel_button;
- gtk_widget_set_name (cancel_button64, "cancel_button64");
- gtk_widget_show (cancel_button64);
- GTK_WIDGET_SET_FLAGS (cancel_button64, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_filter_export_fs, "delete_event",
- G_CALLBACK (xs_filter_export_fs_delete),
- NULL);
- g_signal_connect ((gpointer) ok_button64, "clicked",
- G_CALLBACK (xs_filter_export_fs_ok),
- NULL);
- g_signal_connect ((gpointer) cancel_button64, "clicked",
- G_CALLBACK (xs_filter_export_fs_cancel),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_filter_export_fs, xs_filter_export_fs, "xs_filter_export_fs");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_filter_export_fs, ok_button64, "ok_button64");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_filter_export_fs, cancel_button64, "cancel_button64");
-
- return xs_filter_export_fs;
-}
-
-GtkWidget*
-create_xs_confirmwin (void)
-{
- GtkWidget *xs_confirmwin;
- GtkWidget *dialog_vbox1;
- GtkWidget *xs_confirm_frame;
- GtkWidget *label25;
- GtkWidget *dialog_action_area1;
- GtkWidget *hbuttonbox2;
- GtkWidget *xs_confirm_yes;
- GtkWidget *xs_confirm_no;
-
- xs_confirmwin = gtk_dialog_new ();
- gtk_widget_set_name (xs_confirmwin, "xs_confirmwin");
- gtk_window_set_title (GTK_WINDOW (xs_confirmwin), _("Confirm selected action"));
- gtk_window_set_type_hint (GTK_WINDOW (xs_confirmwin), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- dialog_vbox1 = GTK_DIALOG (xs_confirmwin)->vbox;
- gtk_widget_set_name (dialog_vbox1, "dialog_vbox1");
- gtk_widget_show (dialog_vbox1);
-
- xs_confirm_frame = gtk_frame_new (NULL);
- gtk_widget_set_name (xs_confirm_frame, "xs_confirm_frame");
- gtk_widget_show (xs_confirm_frame);
- gtk_box_pack_start (GTK_BOX (dialog_vbox1), xs_confirm_frame, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (xs_confirm_frame), 6);
-
- label25 = gtk_label_new (_("Confirm selected action"));
- gtk_widget_set_name (label25, "label25");
- gtk_widget_show (label25);
- gtk_frame_set_label_widget (GTK_FRAME (xs_confirm_frame), label25);
-
- dialog_action_area1 = GTK_DIALOG (xs_confirmwin)->action_area;
- gtk_widget_set_name (dialog_action_area1, "dialog_action_area1");
- gtk_widget_show (dialog_action_area1);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
-
- hbuttonbox2 = gtk_hbutton_box_new ();
- gtk_widget_set_name (hbuttonbox2, "hbuttonbox2");
- gtk_widget_show (hbuttonbox2);
- gtk_container_add (GTK_CONTAINER (dialog_action_area1), hbuttonbox2);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END);
- gtk_box_set_spacing (GTK_BOX (hbuttonbox2), 8);
-
- xs_confirm_yes = gtk_button_new_with_mnemonic (_("Yes"));
- gtk_widget_set_name (xs_confirm_yes, "xs_confirm_yes");
- gtk_widget_show (xs_confirm_yes);
- gtk_container_add (GTK_CONTAINER (hbuttonbox2), xs_confirm_yes);
- GTK_WIDGET_SET_FLAGS (xs_confirm_yes, GTK_CAN_DEFAULT);
-
- xs_confirm_no = gtk_button_new_with_mnemonic (_("No"));
- gtk_widget_set_name (xs_confirm_no, "xs_confirm_no");
- gtk_widget_show (xs_confirm_no);
- gtk_container_add (GTK_CONTAINER (hbuttonbox2), xs_confirm_no);
- GTK_WIDGET_SET_FLAGS (xs_confirm_no, GTK_CAN_DEFAULT);
-
- g_signal_connect ((gpointer) xs_confirmwin, "delete_event",
- G_CALLBACK (xs_confirmwin_delete),
- NULL);
-
- /* Store pointers to all widgets, for use by lookup_widget(). */
- GLADE_HOOKUP_OBJECT_NO_REF (xs_confirmwin, xs_confirmwin, "xs_confirmwin");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_confirmwin, dialog_vbox1, "dialog_vbox1");
- GLADE_HOOKUP_OBJECT (xs_confirmwin, xs_confirm_frame, "xs_confirm_frame");
- GLADE_HOOKUP_OBJECT (xs_confirmwin, label25, "label25");
- GLADE_HOOKUP_OBJECT_NO_REF (xs_confirmwin, dialog_action_area1, "dialog_action_area1");
- GLADE_HOOKUP_OBJECT (xs_confirmwin, hbuttonbox2, "hbuttonbox2");
- GLADE_HOOKUP_OBJECT (xs_confirmwin, xs_confirm_yes, "xs_confirm_yes");
- GLADE_HOOKUP_OBJECT (xs_confirmwin, xs_confirm_no, "xs_confirm_no");
-
- return xs_confirmwin;
-}
-
diff --git a/src/sid/xs_interface.h b/src/sid/xs_interface.h
deleted file mode 100644
index 74400b0..0000000
--- a/src/sid/xs_interface.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-GtkWidget* create_xs_configwin (void);
-GtkWidget* create_xs_fileinfowin (void);
-GtkWidget* create_xs_sldb_fs (void);
-GtkWidget* create_xs_stil_fs (void);
-GtkWidget* create_xs_hvsc_fs (void);
-GtkWidget* create_xs_filter_import_fs (void);
-GtkWidget* create_xs_filter_export_fs (void);
-GtkWidget* create_xs_confirmwin (void);
diff --git a/src/sid/xs_length.h b/src/sid/xs_length.h
index ae3e11a..9988297 100644
--- a/src/sid/xs_length.h
+++ b/src/sid/xs_length.h
@@ -2,18 +2,7 @@
#define XS_LENGTH_H
#include "xmms-sid.h"
-#ifdef AUDACIOUS_PLUGIN
-#include <libaudcore/md5.h>
-#define XS_MD5HASH_LENGTH AUD_MD5HASH_LENGTH
-#define XS_MD5HASH_LENGTH_CH AUD_MD5HASH_LENGTH_CH
-#define xs_md5hash_t aud_md5hash_t
-#define xs_md5state_t aud_md5state_t
-#define xs_md5_init aud_md5_init
-#define xs_md5_append aud_md5_append
-#define xs_md5_finish aud_md5_finish
-#else
#include "xs_md5.h"
-#endif
#ifdef __cplusplus
extern "C" {
diff --git a/src/sid/xs_md5.c b/src/sid/xs_md5.c
new file mode 100644
index 0000000..9e0be67
--- /dev/null
+++ b/src/sid/xs_md5.c
@@ -0,0 +1,231 @@
+/*
+ * MD5 implementation, modified for XMMS-SID from
+ * Colin Plumb's implementation by Matti 'ccr' Hämäläinen.
+ *
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest. This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ */
+#include "xs_support.h"
+#include "xs_md5.h"
+
+#include <glib.h>
+#include <string.h>
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#define xs_md5_bytereverse(buf, len) /* Nothing */
+#else
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+static void xs_md5_bytereverse(guint8 *buf, guint l)
+{
+ guint32 t;
+ do {
+ t = (guint32) ((guint) buf[3] << 8 | buf[2]) << 16 | ((guint) buf[1] << 8 | buf[0]);
+ *(guint32 *) buf = t;
+ buf += sizeof(guint32);
+ } while (--l);
+}
+#else
+#error Unsupported endianess!
+#endif
+#endif
+
+
+/* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+ * initialization constants.
+ */
+void xs_md5_init(xs_md5state_t *ctx)
+{
+ ctx->buf[0] = 0x67452301;
+ ctx->buf[1] = 0xefcdab89;
+ ctx->buf[2] = 0x98badcfe;
+ ctx->buf[3] = 0x10325476;
+
+ ctx->bits[0] = 0;
+ ctx->bits[1] = 0;
+}
+
+
+/* The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data. xs_md5_update blocks
+ * the data and converts bytes into longwords for this routine.
+ */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+#define MD5STEP(f, w, x, y, z, data, s) \
+ ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
+
+static void xs_md5_transform(guint32 buf[4], guint32 const in[16])
+{
+ register guint32 a, b, c, d;
+
+ a = buf[0];
+ b = buf[1];
+ c = buf[2];
+ d = buf[3];
+
+ MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+ MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+ MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+ MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+ MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+ MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+ MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+ MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+ MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+ MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+ MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+ MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+ MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+ MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+ MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+ MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+ MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+ MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+ MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+ MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+ MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+ MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+ MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+ MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+ MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+ MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+ MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+ MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+ MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+ MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+ MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+ MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+ MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+ MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+ MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+ MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+ MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+ MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+ MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+ MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+ MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+ MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+ MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+ MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+ MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+ MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+ MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+ MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+ MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+ MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+ MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+ MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+ MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+ MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+ MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+ MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+ MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+ MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+ MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+ MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+ MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+ MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+ MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+ MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+
+ buf[0] += a;
+ buf[1] += b;
+ buf[2] += c;
+ buf[3] += d;
+}
+
+
+/* Update context to reflect the concatenation of another buffer full
+ * of bytes.
+ */
+void xs_md5_append(xs_md5state_t *ctx, const guint8 *buf, guint len)
+{
+ guint32 t;
+
+ /* Update bitcount */
+ t = ctx->bits[0];
+ if ((ctx->bits[0] = t + ((guint32) len << 3)) < t)
+ ctx->bits[1]++; /* Carry from low to high */
+ ctx->bits[1] += len >> 29;
+
+ t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+
+ /* Handle any leading odd-sized chunks */
+ if (t) {
+ guint8 *p = (guint8 *) ctx->in + t;
+
+ t = 64 - t;
+ if (len < t) {
+ memcpy(p, buf, len);
+ return;
+ }
+ memcpy(p, buf, t);
+ xs_md5_bytereverse(ctx->in, 16);
+ xs_md5_transform(ctx->buf, (guint32 *) ctx->in);
+ buf += t;
+ len -= t;
+ }
+
+ /* Process data in 64-byte chunks */
+ while (len >= 64) {
+ memcpy(ctx->in, buf, 64);
+ xs_md5_bytereverse(ctx->in, 16);
+ xs_md5_transform(ctx->buf, (guint32 *) ctx->in);
+ buf += 64;
+ len -= 64;
+ }
+
+ /* Handle any remaining bytes of data. */
+ memcpy(ctx->in, buf, len);
+}
+
+/* Final wrapup - pad to 64-byte boundary with the bit pattern
+ * 1 0* (64-bit count of bits processed, MSB-first)
+ */
+void xs_md5_finish(xs_md5state_t *ctx, xs_md5hash_t digest)
+{
+ guint count;
+ guint8 *p;
+
+ /* Compute number of bytes mod 64 */
+ count = (ctx->bits[0] >> 3) & 0x3F;
+
+ /* Set the first char of padding to 0x80. This is safe since there is
+ always at least one byte free */
+ p = ctx->in + count;
+ *p++ = 0x80;
+
+ /* Bytes of padding needed to make 64 bytes */
+ count = 64 - 1 - count;
+
+ /* Pad out to 56 mod 64 */
+ if (count < 8) {
+ /* Two lots of padding: Pad the first block to 64 bytes */
+ memset(p, 0, count);
+ xs_md5_bytereverse(ctx->in, 16);
+ xs_md5_transform(ctx->buf, (guint32 *) ctx->in);
+
+ /* Now fill the next block with 56 bytes */
+ memset(ctx->in, 0, 56);
+ } else {
+ /* Pad block to 56 bytes */
+ memset(p, 0, count - 8);
+ }
+ xs_md5_bytereverse(ctx->in, 14);
+
+ /* Append length in bits and transform */
+ ((guint32 *) ctx->in)[14] = ctx->bits[0];
+ ((guint32 *) ctx->in)[15] = ctx->bits[1];
+
+ xs_md5_transform(ctx->buf, (guint32 *) ctx->in);
+ xs_md5_bytereverse((guint8 *) ctx->buf, 4);
+ memcpy(digest, ctx->buf, 16);
+ memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
+}
diff --git a/src/sid/xs_md5.h b/src/sid/xs_md5.h
new file mode 100644
index 0000000..4f39aa9
--- /dev/null
+++ b/src/sid/xs_md5.h
@@ -0,0 +1,34 @@
+#ifndef XS_MD5_H
+#define XS_MD5_H
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Typedefs
+ */
+typedef struct md5_state_s {
+ guint32 bits[2]; /* message length in bits, lsw first */
+ guint32 buf[4]; /* digest buffer */
+ guint8 in[64]; /* accumulate block */
+} xs_md5state_t;
+
+#define XS_MD5HASH_LENGTH (16)
+#define XS_MD5HASH_LENGTH_CH (XS_MD5HASH_LENGTH * 2)
+
+typedef guint8 xs_md5hash_t[XS_MD5HASH_LENGTH];
+
+
+/* Functions
+ */
+void xs_md5_init(xs_md5state_t *ctx);
+void xs_md5_append(xs_md5state_t *ctx, const guint8 *buf, guint len);
+void xs_md5_finish(xs_md5state_t *ctx, xs_md5hash_t digest);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* XS_MD5_H */
diff --git a/src/sid/xs_player.h b/src/sid/xs_player.h
index 1da7219..380df92 100644
--- a/src/sid/xs_player.h
+++ b/src/sid/xs_player.h
@@ -17,7 +17,7 @@ typedef struct {
void (*plrClose)(struct xs_status_t *);
gboolean (*plrInitSong)(struct xs_status_t *);
guint (*plrFillBuffer)(struct xs_status_t *, gchar *, guint);
- gboolean (*plrLoadSID)(struct xs_status_t *, gchar *);
+ gboolean (*plrLoadSID)(struct xs_status_t *, const gchar *);
void (*plrDeleteSID)(struct xs_status_t *);
xs_tuneinfo_t* (*plrGetSIDInfo)(const gchar *);
gboolean (*plrUpdateSIDInfo)(struct xs_status_t *);
@@ -39,6 +39,7 @@ typedef struct xs_status_t {
xs_engine_t *sidPlayer; /* Selected player engine */
gboolean isPaused,
isInitialized;
+ gboolean stop_flag;
gint currSong, /* Current sub-tune */
lastTime;
diff --git a/src/sid/xs_sidplay1.cc b/src/sid/xs_sidplay1.cc
index 2ba8cd8..362d826 100644
--- a/src/sid/xs_sidplay1.cc
+++ b/src/sid/xs_sidplay1.cc
@@ -65,12 +65,12 @@ extern "C" {
gboolean xs_sidplay1_probe(xs_file_t *f)
{
gchar tmpBuf[4];
-
+
if (!f) return FALSE;
-
+
if (xs_fread(tmpBuf, sizeof(gchar), 4, f) != 4)
return FALSE;
-
+
if (!strncmp(tmpBuf, "PSID", 4))
return TRUE;
else
@@ -220,8 +220,8 @@ gboolean xs_sidplay1_init(xs_status_t * status)
}
engine->currConfig.forceSongSpeed = xs_cfg.forceSpeed;
-
-
+
+
/* Configure rest of the emulation */
/* if (xs_cfg.forceModel) */
engine->currConfig.mos8580 = xs_cfg.mos8580;
@@ -236,14 +236,14 @@ gboolean xs_sidplay1_init(xs_status_t * status)
xs_error("[SIDPlay1] Emulator engine configuration failed!\n");
return FALSE;
}
-
+
/* Create sidtune object */
engine->currTune = new sidTune(0);
if (!engine->currTune) {
xs_error("[SIDPlay1] Could not initialize SIDTune object.\n");
return FALSE;
}
-
+
return TRUE;
}
@@ -269,7 +269,7 @@ void xs_sidplay1_close(xs_status_t * status)
}
xs_sidplay1_delete(status);
-
+
g_free(engine);
status->sidEngine = NULL;
}
@@ -319,7 +319,7 @@ guint xs_sidplay1_fillbuffer(xs_status_t * status, gchar * audioBuffer, guint au
/* Load a given SID-tune file
*/
-gboolean xs_sidplay1_load(xs_status_t * status, gchar * filename)
+gboolean xs_sidplay1_load(xs_status_t * status, const gchar * filename)
{
xs_sidplay1_t *engine;
assert(status != NULL);
@@ -330,10 +330,10 @@ gboolean xs_sidplay1_load(xs_status_t * status, gchar * filename)
/* Try to get the tune */
if (!filename) return FALSE;
-
+
if (xs_fload_buffer(filename, &(engine->buf), &(engine->bufSize)) != 0)
return FALSE;
-
+
if (!engine->currTune->load(engine->buf, engine->bufSize))
return FALSE;
@@ -350,7 +350,7 @@ void xs_sidplay1_delete(xs_status_t * status)
engine = (xs_sidplay1_t *) status->sidEngine;
if (engine == NULL) return;
-
+
g_free(engine->buf);
engine->buf = NULL;
engine->bufSize = 0;
diff --git a/src/sid/xs_sidplay1.h b/src/sid/xs_sidplay1.h
index 089edc8..3f312df 100644
--- a/src/sid/xs_sidplay1.h
+++ b/src/sid/xs_sidplay1.h
@@ -14,7 +14,7 @@ void xs_sidplay1_close(xs_status_t *);
gboolean xs_sidplay1_init(xs_status_t *);
gboolean xs_sidplay1_initsong(xs_status_t *);
guint xs_sidplay1_fillbuffer(xs_status_t *, gchar *, guint);
-gboolean xs_sidplay1_load(xs_status_t *, gchar *);
+gboolean xs_sidplay1_load(xs_status_t *, const gchar *);
void xs_sidplay1_delete(xs_status_t *);
xs_tuneinfo_t* xs_sidplay1_getinfo(const gchar *);
gboolean xs_sidplay1_updateinfo(xs_status_t *);
diff --git a/src/sid/xs_sidplay2.cc b/src/sid/xs_sidplay2.cc
index 359a1f6..1f70ea1 100644
--- a/src/sid/xs_sidplay2.cc
+++ b/src/sid/xs_sidplay2.cc
@@ -477,7 +477,7 @@ guint xs_sidplay2_fillbuffer(xs_status_t * status, gchar * audioBuffer, guint au
/* Load a given SID-tune file
*/
-gboolean xs_sidplay2_load(xs_status_t * status, gchar * pcFilename)
+gboolean xs_sidplay2_load(xs_status_t * status, const gchar * pcFilename)
{
xs_sidplay2_t *engine;
assert(status != NULL);
diff --git a/src/sid/xs_sidplay2.h b/src/sid/xs_sidplay2.h
index 5538376..1cebf9a 100644
--- a/src/sid/xs_sidplay2.h
+++ b/src/sid/xs_sidplay2.h
@@ -14,7 +14,7 @@ void xs_sidplay2_close(xs_status_t *);
gboolean xs_sidplay2_init(xs_status_t *);
gboolean xs_sidplay2_initsong(xs_status_t *);
guint xs_sidplay2_fillbuffer(xs_status_t *, gchar *, guint);
-gboolean xs_sidplay2_load(xs_status_t *, gchar *);
+gboolean xs_sidplay2_load(xs_status_t *, const gchar *);
void xs_sidplay2_delete(xs_status_t *);
xs_tuneinfo_t* xs_sidplay2_getinfo(const gchar *);
gboolean xs_sidplay2_updateinfo(xs_status_t *);
diff --git a/src/sid/xs_support.c b/src/sid/xs_support.c
index f3f8fd5..77f9732 100644
--- a/src/sid/xs_support.c
+++ b/src/sid/xs_support.c
@@ -22,6 +22,7 @@
*/
#include "xs_support.h"
#include <ctype.h>
+#include <string.h>
#define __AUDACIOUS_NEWVFS__
diff --git a/src/skins/Makefile b/src/skins/Makefile
index dba350c..020b124 100644
--- a/src/skins/Makefile
+++ b/src/skins/Makefile
@@ -1,9 +1,9 @@
PLUGIN = skins${PLUGIN_SUFFIX}
-SRCS = plugin.c \
+SRCS = drag-handle.c \
+ plugin.c \
skins_cfg.c \
- pixbuf_effects.c \
- dnd.c \
+ surface.c \
ui_skin.c \
ui_skinned_window.c \
ui_dock.c \
@@ -25,7 +25,6 @@ SRCS = plugin.c \
ui_equalizer.c \
ui_playlist.c \
ui_main_evlisteners.c \
- ui_playlist_evlisteners.c \
ui_manager.c \
ui_hints.c \
ui_skinselector.c
@@ -87,101 +86,6 @@ DATA = Skins/Classic/balance.png \
Skins/Default/titlebar.png \
Skins/Default/viscolor.txt \
Skins/Default/volume.png \
- Skins/Default/gtk-2.0/Arrows/arrow-down.png \
- Skins/Default/gtk-2.0/Arrows/arrow-insens.png \
- Skins/Default/gtk-2.0/Arrows/arrow-left.png \
- Skins/Default/gtk-2.0/Arrows/arrow-right.png \
- Skins/Default/gtk-2.0/Arrows/arrow-up.png \
- Skins/Default/gtk-2.0/Buttons/button-insensitive.png \
- Skins/Default/gtk-2.0/Buttons/button-normal.png \
- Skins/Default/gtk-2.0/Buttons/button-prelight.png \
- Skins/Default/gtk-2.0/Check-Radio/check1.png \
- Skins/Default/gtk-2.0/Check-Radio/check2.png \
- Skins/Default/gtk-2.0/Check-Radio/check3.png \
- Skins/Default/gtk-2.0/Check-Radio/check4.png \
- Skins/Default/gtk-2.0/Check-Radio/check5.png \
- Skins/Default/gtk-2.0/Check-Radio/check6.png \
- Skins/Default/gtk-2.0/Check-Radio/option1.png \
- Skins/Default/gtk-2.0/Check-Radio/option2.png \
- Skins/Default/gtk-2.0/Check-Radio/option3.png \
- Skins/Default/gtk-2.0/Check-Radio/option4.png \
- Skins/Default/gtk-2.0/Check-Radio/option5.png \
- Skins/Default/gtk-2.0/Check-Radio/option6.png \
- Skins/Default/gtk-2.0/Frame-Gap/frame-gap-end.png \
- Skins/Default/gtk-2.0/Frame-Gap/frame-gap-start.png \
- Skins/Default/gtk-2.0/Frame-Gap/frame.png \
- Skins/Default/gtk-2.0/Handles/handle-h.png \
- Skins/Default/gtk-2.0/Handles/handle-v.png \
- Skins/Default/gtk-2.0/Lines/line-h.png \
- Skins/Default/gtk-2.0/Lines/line-v.png \
- Skins/Default/gtk-2.0/ListHeaders/list_header-insens.png \
- Skins/Default/gtk-2.0/ListHeaders/list_header-prelight.png \
- Skins/Default/gtk-2.0/ListHeaders/list_header-pressed.png \
- Skins/Default/gtk-2.0/ListHeaders/list_header.png \
- Skins/Default/gtk-2.0/Menu-Menubar/menu.png \
- Skins/Default/gtk-2.0/Menu-Menubar/menubar-item-active.png \
- Skins/Default/gtk-2.0/Menu-Menubar/menubar-item.png \
- Skins/Default/gtk-2.0/Menu-Menubar/menubar.png \
- Skins/Default/gtk-2.0/Others/null.png \
- Skins/Default/gtk-2.0/Others/ruler.png \
- Skins/Default/gtk-2.0/Panel/panel-bg.png \
- Skins/Default/gtk-2.0/ProgressBar/progressbar-horiz.png \
- Skins/Default/gtk-2.0/ProgressBar/trough-progressbar-horiz.png \
- Skins/Default/gtk-2.0/Range/slider-horiz-prelight.png \
- Skins/Default/gtk-2.0/Range/slider-horiz.png \
- Skins/Default/gtk-2.0/Range/slider-vert-prelight.png \
- Skins/Default/gtk-2.0/Range/slider-vert.png \
- Skins/Default/gtk-2.0/Range/trough-horizontal.png \
- Skins/Default/gtk-2.0/Range/trough-vertical.png \
- Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz-pre.png \
- Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz.png \
- Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert-pre.png \
- Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert.png \
- Skins/Default/gtk-2.0/Scrollbars/slider-horiz-pre.png \
- Skins/Default/gtk-2.0/Scrollbars/slider-horiz.png \
- Skins/Default/gtk-2.0/Scrollbars/slider-vert-pre.png \
- Skins/Default/gtk-2.0/Scrollbars/slider-vert.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-down-prelight.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-down.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-left-prelight.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-left.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-right-prelight.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-right.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-up-prelight.png \
- Skins/Default/gtk-2.0/Scrollbars/stepper-up.png \
- Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-horiz.png \
- Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-vert.png \
- Skins/Default/gtk-2.0/Shadows/shadow-in.png \
- Skins/Default/gtk-2.0/Shadows/shadow-out.png \
- Skins/Default/gtk-2.0/Shadows/text-.png \
- Skins/Default/gtk-2.0/Shadows/text-entry.png \
- Skins/Default/gtk-2.0/Spin/spin-down-disable.png \
- Skins/Default/gtk-2.0/Spin/spin-down-prelight.png \
- Skins/Default/gtk-2.0/Spin/spin-down.png \
- Skins/Default/gtk-2.0/Spin/spin-up-disable.png \
- Skins/Default/gtk-2.0/Spin/spin-up-prelight.png \
- Skins/Default/gtk-2.0/Spin/spin-up.png \
- Skins/Default/gtk-2.0/Tabs/gap-bottom-left.png \
- Skins/Default/gtk-2.0/Tabs/gap-bottom-right.png \
- Skins/Default/gtk-2.0/Tabs/gap-left-bottom.png \
- Skins/Default/gtk-2.0/Tabs/gap-left-top.png \
- Skins/Default/gtk-2.0/Tabs/gap-right-bottom.png \
- Skins/Default/gtk-2.0/Tabs/gap-right-top.png \
- Skins/Default/gtk-2.0/Tabs/gap-top-current.png \
- Skins/Default/gtk-2.0/Tabs/gap-top-left.png \
- Skins/Default/gtk-2.0/Tabs/gap-top-right.png \
- Skins/Default/gtk-2.0/Tabs/notebook.png \
- Skins/Default/gtk-2.0/Tabs/tab-bottom-active.png \
- Skins/Default/gtk-2.0/Tabs/tab-bottom.png \
- Skins/Default/gtk-2.0/Tabs/tab-left-active.png \
- Skins/Default/gtk-2.0/Tabs/tab-left.png \
- Skins/Default/gtk-2.0/Tabs/tab-right-active.png \
- Skins/Default/gtk-2.0/Tabs/tab-right.png \
- Skins/Default/gtk-2.0/Tabs/tab-top-active.png \
- Skins/Default/gtk-2.0/Tabs/tab-top.png \
- Skins/Default/gtk-2.0/Toolbar/toolbar.png \
- Skins/Default/gtk-2.0/gtkrc \
- Skins/Default/gtk-2.0/panel.rc \
Skins/Ivory/balance.png \
Skins/Ivory/cbuttons.png \
Skins/Ivory/eq_ex.png \
@@ -251,11 +155,10 @@ DATA = Skins/Classic/balance.png \
Skins/Refugee/volume.png \
ui/equalizer.ui \
ui/mainwin.ui \
- ui/playlist.ui \
- ui/carbon-menubar.ui
+ ui/playlist.ui
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-CPPFLAGS += -std=gnu99 ${PLUGIN_CPPFLAGS} -I../..
-CFLAGS += ${PLUGIN_CFLAGS} ${BEEP_DEFINES}
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${PANGO_LIBS} ${CAIRO_LIBS} ${PANGOCAIRO_LIBS} ${XRENDER_LIBS} ${XCOMPOSITE_LIBS} ${MOWGLI_LIBS} -laudgui -lm
+CPPFLAGS += ${PLUGIN_CPPFLAGS} -I../.. ${GTK_CFLAGS}
+CFLAGS += ${PLUGIN_CFLAGS}
+LIBS += -lm ${GTK_LIBS}
diff --git a/src/skins/Skins/Classic/skin.hints b/src/skins/Skins/Classic/skin.hints
index 7d61d19..7c5f6eb 100644
--- a/src/skins/Skins/Classic/skin.hints
+++ b/src/skins/Skins/Classic/skin.hints
@@ -1,7 +1,7 @@
[skin]
skinDescription=The default skin for Audacious.
-mainwinOthertext=1
mainwinOthertextVisible=1
mainwinTextVisible=1
mainwinVisVisible=1
mainwinMenurowVisible=1
+mainwinStreaminfoVisible=0
diff --git a/src/skins/Skins/Classic1.3/skin.hints b/src/skins/Skins/Classic1.3/skin.hints
index 59ebfd6..4b6d0ab 100644
--- a/src/skins/Skins/Classic1.3/skin.hints
+++ b/src/skins/Skins/Classic1.3/skin.hints
@@ -1,6 +1,5 @@
[skin]
skinDescription=The default skin for Audacious.
-mainwinOthertext=1
mainwinVisX=19
mainwinVisY=39
mainwinTextX=19
@@ -21,6 +20,7 @@ mainwinNumber4Y=56
mainwinPlayStatusX=19
mainwinPlayStatusY=58
mainwinMenurowVisible=1
+mainwinStreaminfoVisible=0
mainwinOthertextIsStatus=1
mainwinOthertextVisible=1
mainwinTextVisible=1
diff --git a/src/skins/Skins/Default/eq_ex.png b/src/skins/Skins/Default/eq_ex.png
index f4cbfbc..b34aaa3 100644
--- a/src/skins/Skins/Default/eq_ex.png
+++ b/src/skins/Skins/Default/eq_ex.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-down.png b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-down.png
index ca0d0f1..ca0d0f1 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-down.png
+++ b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-down.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-insens.png b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-insens.png
index d1b9d52..d1b9d52 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-insens.png
+++ b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-insens.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-left.png b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-left.png
index 17b1d0b..17b1d0b 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-left.png
+++ b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-left.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-right.png b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-right.png
index a3ecf9c..a3ecf9c 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-right.png
+++ b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-right.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-up.png b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-up.png
index a39bf95..a39bf95 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-up.png
+++ b/src/skins/Skins/Default/gtk-2.0/Arrows/arrow-up.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Buttons/button-insensitive.png b/src/skins/Skins/Default/gtk-2.0/Buttons/button-insensitive.png
index f85a530..f85a530 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Buttons/button-insensitive.png
+++ b/src/skins/Skins/Default/gtk-2.0/Buttons/button-insensitive.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Buttons/button-normal.png b/src/skins/Skins/Default/gtk-2.0/Buttons/button-normal.png
index 716b010..716b010 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Buttons/button-normal.png
+++ b/src/skins/Skins/Default/gtk-2.0/Buttons/button-normal.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Buttons/button-prelight.png b/src/skins/Skins/Default/gtk-2.0/Buttons/button-prelight.png
index 607c6dc..607c6dc 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Buttons/button-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Buttons/button-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check1.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check1.png
index bf037e8..bf037e8 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check1.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check1.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check2.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check2.png
index de087ff..de087ff 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check2.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check2.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check3.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check3.png
index 4243aba..4243aba 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check3.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check3.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check4.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check4.png
index e8e1b4a..e8e1b4a 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check4.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check4.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check5.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check5.png
index 9070f42..9070f42 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check5.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check5.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check6.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check6.png
index 46a6fc2..46a6fc2 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/check6.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/check6.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option1.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option1.png
index a2143ee..a2143ee 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option1.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option1.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option2.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option2.png
index be45e43..be45e43 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option2.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option2.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option3.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option3.png
index f013f4b..f013f4b 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option3.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option3.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option4.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option4.png
index 6199532..6199532 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option4.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option4.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option5.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option5.png
index 3f6f795..3f6f795 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option5.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option5.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option6.png b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option6.png
index 1984f79..1984f79 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Check-Radio/option6.png
+++ b/src/skins/Skins/Default/gtk-2.0/Check-Radio/option6.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-end.png b/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-end.png
index 5b9357f..5b9357f 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-end.png
+++ b/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-end.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-start.png b/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-start.png
index d44f8db..d44f8db 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-start.png
+++ b/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame-gap-start.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame.png b/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame.png
index 2f7b353..2f7b353 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame.png
+++ b/src/skins/Skins/Default/gtk-2.0/Frame-Gap/frame.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Handles/handle-h.png b/src/skins/Skins/Default/gtk-2.0/Handles/handle-h.png
index 4a987aa..4a987aa 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Handles/handle-h.png
+++ b/src/skins/Skins/Default/gtk-2.0/Handles/handle-h.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Handles/handle-v.png b/src/skins/Skins/Default/gtk-2.0/Handles/handle-v.png
index 90b6f21..90b6f21 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Handles/handle-v.png
+++ b/src/skins/Skins/Default/gtk-2.0/Handles/handle-v.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Lines/line-h.png b/src/skins/Skins/Default/gtk-2.0/Lines/line-h.png
index 5193ab0..5193ab0 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Lines/line-h.png
+++ b/src/skins/Skins/Default/gtk-2.0/Lines/line-h.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Lines/line-v.png b/src/skins/Skins/Default/gtk-2.0/Lines/line-v.png
index 244a516..244a516 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Lines/line-v.png
+++ b/src/skins/Skins/Default/gtk-2.0/Lines/line-v.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-insens.png b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-insens.png
index f3d417a..f3d417a 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-insens.png
+++ b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-insens.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-prelight.png b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-prelight.png
index 6fb735a..6fb735a 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-pressed.png b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-pressed.png
index f5358a7..f5358a7 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-pressed.png
+++ b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header-pressed.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header.png b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header.png
index da50ee3..da50ee3 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header.png
+++ b/src/skins/Skins/Default/gtk-2.0/ListHeaders/list_header.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menu.png b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menu.png
index 6a8d218..6a8d218 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menu.png
+++ b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menu.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item-active.png b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item-active.png
index 0124412..0124412 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item-active.png
+++ b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item-active.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item.png b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item.png
index 6287cca..6287cca 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item.png
+++ b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar-item.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar.png b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar.png
index eb1ff85..eb1ff85 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar.png
+++ b/src/skins/Skins/Default/gtk-2.0/Menu-Menubar/menubar.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Others/null.png b/src/skins/Skins/Default/gtk-2.0/Others/null.png
index 7e52ab7..7e52ab7 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Others/null.png
+++ b/src/skins/Skins/Default/gtk-2.0/Others/null.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Others/ruler.png b/src/skins/Skins/Default/gtk-2.0/Others/ruler.png
index 31aa7de..31aa7de 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Others/ruler.png
+++ b/src/skins/Skins/Default/gtk-2.0/Others/ruler.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Panel/panel-bg.png b/src/skins/Skins/Default/gtk-2.0/Panel/panel-bg.png
index f8b3cd6..f8b3cd6 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Panel/panel-bg.png
+++ b/src/skins/Skins/Default/gtk-2.0/Panel/panel-bg.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/ProgressBar/progressbar-horiz.png b/src/skins/Skins/Default/gtk-2.0/ProgressBar/progressbar-horiz.png
index d479747..d479747 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/ProgressBar/progressbar-horiz.png
+++ b/src/skins/Skins/Default/gtk-2.0/ProgressBar/progressbar-horiz.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/ProgressBar/trough-progressbar-horiz.png b/src/skins/Skins/Default/gtk-2.0/ProgressBar/trough-progressbar-horiz.png
index 7c92f33..7c92f33 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/ProgressBar/trough-progressbar-horiz.png
+++ b/src/skins/Skins/Default/gtk-2.0/ProgressBar/trough-progressbar-horiz.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz-prelight.png b/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz-prelight.png
index 6d29b55..6d29b55 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz.png b/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz.png
index 43e81db..43e81db 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz.png
+++ b/src/skins/Skins/Default/gtk-2.0/Range/slider-horiz.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Range/slider-vert-prelight.png b/src/skins/Skins/Default/gtk-2.0/Range/slider-vert-prelight.png
index f2c6598..f2c6598 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Range/slider-vert-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Range/slider-vert-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Range/slider-vert.png b/src/skins/Skins/Default/gtk-2.0/Range/slider-vert.png
index b5e52c6..b5e52c6 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Range/slider-vert.png
+++ b/src/skins/Skins/Default/gtk-2.0/Range/slider-vert.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Range/trough-horizontal.png b/src/skins/Skins/Default/gtk-2.0/Range/trough-horizontal.png
index df82885..df82885 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Range/trough-horizontal.png
+++ b/src/skins/Skins/Default/gtk-2.0/Range/trough-horizontal.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Range/trough-vertical.png b/src/skins/Skins/Default/gtk-2.0/Range/trough-vertical.png
index 82b95a4..82b95a4 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Range/trough-vertical.png
+++ b/src/skins/Skins/Default/gtk-2.0/Range/trough-vertical.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz-pre.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz-pre.png
index f7f003f..f7f003f 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz-pre.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz-pre.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz.png
index f32aa50..f32aa50 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-horiz.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert-pre.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert-pre.png
index 1048ea9..1048ea9 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert-pre.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert-pre.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert.png
index f56f132..f56f132 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/scroll-thumb-vert.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-horiz.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-horiz.png
index aa2e0e5..aa2e0e5 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-horiz.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-horiz.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-vert.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-vert.png
index e8f972e..e8f972e 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-vert.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/slider-vert.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down-prelight.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down-prelight.png
index a1fd7c1..a1fd7c1 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down.png
index 06934e4..06934e4 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-down.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left-prelight.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left-prelight.png
index 3878d16..3878d16 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left.png
index dd82b4b..dd82b4b 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-left.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right-prelight.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right-prelight.png
index 31689c5..31689c5 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right.png
index eecf08e..eecf08e 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-right.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up-prelight.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up-prelight.png
index bac8a4f..bac8a4f 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up.png
index 71898f0..71898f0 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/stepper-up.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-horiz.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-horiz.png
index 7de09ba..7de09ba 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-horiz.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-horiz.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-vert.png b/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-vert.png
index 884c916..884c916 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-vert.png
+++ b/src/skins/Skins/Default/gtk-2.0/Scrollbars/trough-scrollbar-vert.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-in.png b/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-in.png
index 0d1eda6..0d1eda6 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-in.png
+++ b/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-in.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-out.png b/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-out.png
index e460df8..e460df8 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-out.png
+++ b/src/skins/Skins/Default/gtk-2.0/Shadows/shadow-out.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Shadows/text-.png b/src/skins/Skins/Default/gtk-2.0/Shadows/text-.png
index e1c0ea6..e1c0ea6 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Shadows/text-.png
+++ b/src/skins/Skins/Default/gtk-2.0/Shadows/text-.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Shadows/text-entry.png b/src/skins/Skins/Default/gtk-2.0/Shadows/text-entry.png
index 1dfcc21..1dfcc21 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Shadows/text-entry.png
+++ b/src/skins/Skins/Default/gtk-2.0/Shadows/text-entry.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-disable.png b/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-disable.png
index 768d6a6..768d6a6 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-disable.png
+++ b/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-disable.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-prelight.png b/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-prelight.png
index e824c32..e824c32 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Spin/spin-down-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Spin/spin-down.png b/src/skins/Skins/Default/gtk-2.0/Spin/spin-down.png
index 17344e2..17344e2 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Spin/spin-down.png
+++ b/src/skins/Skins/Default/gtk-2.0/Spin/spin-down.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-disable.png b/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-disable.png
index 365c53b..365c53b 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-disable.png
+++ b/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-disable.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-prelight.png b/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-prelight.png
index e597e13..e597e13 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-prelight.png
+++ b/src/skins/Skins/Default/gtk-2.0/Spin/spin-up-prelight.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Spin/spin-up.png b/src/skins/Skins/Default/gtk-2.0/Spin/spin-up.png
index bc3742c..bc3742c 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Spin/spin-up.png
+++ b/src/skins/Skins/Default/gtk-2.0/Spin/spin-up.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/notebook.png b/src/skins/Skins/Default/gtk-2.0/Tabs/notebook.png
index f358cc3..f358cc3 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/notebook.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/notebook.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom-active.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom-active.png
index cd42573..cd42573 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom-active.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom-active.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom.png
index a4c6e4b..a4c6e4b 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-bottom.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left-active.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left-active.png
index 1113d28..1113d28 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left-active.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left-active.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left.png
index 32492f1..32492f1 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-left.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right-active.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right-active.png
index 0dec964..0dec964 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right-active.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right-active.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right.png
index dc00d63..dc00d63 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-right.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top-active.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top-active.png
index c050b0a..c050b0a 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top-active.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top-active.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top.png b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top.png
index ea0d190..ea0d190 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top.png
+++ b/src/skins/Skins/Default/gtk-2.0/Tabs/tab-top.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/Toolbar/toolbar.png b/src/skins/Skins/Default/gtk-2.0/Toolbar/toolbar.png
index b49df8a..b49df8a 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/Toolbar/toolbar.png
+++ b/src/skins/Skins/Default/gtk-2.0/Toolbar/toolbar.png
Binary files differ
diff --git a/src/skins/Skins/Default/gtk-2.0/gtkrc b/src/skins/Skins/Default/gtk-2.0/gtkrc
index 48652a1..48652a1 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/gtkrc
+++ b/src/skins/Skins/Default/gtk-2.0/gtkrc
diff --git a/src/skins/Skins/Default/gtk-2.0/panel.rc b/src/skins/Skins/Default/gtk-2.0/panel.rc
index f634eca..f634eca 100755..100644
--- a/src/skins/Skins/Default/gtk-2.0/panel.rc
+++ b/src/skins/Skins/Default/gtk-2.0/panel.rc
diff --git a/src/skins/Skins/Default/pledit.png b/src/skins/Skins/Default/pledit.png
index d15b7ce..4d4a51a 100644
--- a/src/skins/Skins/Default/pledit.png
+++ b/src/skins/Skins/Default/pledit.png
Binary files differ
diff --git a/src/skins/Skins/Default/skin.hints b/src/skins/Skins/Default/skin.hints
index f4523c3..ba63ee6 100644
--- a/src/skins/Skins/Default/skin.hints
+++ b/src/skins/Skins/Default/skin.hints
@@ -2,11 +2,11 @@
[skin]
skinDescription=Starsidhe, the Audacious 1.4 default skin.
-mainwinOthertext=1
mainwinOthertextVisible=1
mainwinTextVisible=1
mainwinVisVisible=1
mainwinMenurowVisible=0
+mainwinStreaminfoVisible=0
mainwinNumber0X=28
mainwinNumber0Y=26
mainwinNumber1X=40
diff --git a/src/skins/Skins/Default/titlebar.png b/src/skins/Skins/Default/titlebar.png
index 14c7bdb..f1dde49 100644
--- a/src/skins/Skins/Default/titlebar.png
+++ b/src/skins/Skins/Default/titlebar.png
Binary files differ
diff --git a/src/skins/Skins/Default/viscolor.txt b/src/skins/Skins/Default/viscolor.txt
index 159e7f7..64081aa 100644
--- a/src/skins/Skins/Default/viscolor.txt
+++ b/src/skins/Skins/Default/viscolor.txt
@@ -1,6 +1,6 @@
0,0,0 // 0 = black (background color #1)
0,0,0 // 1 = grey (background color #2)
-0,128,255 // 2
+0,128,255 // 2 = analyzer high
0,124,248 // 3
0,120,240 // 4
0,116,232 // 5
@@ -15,10 +15,10 @@
0,80,160 // 14
0,76,152 // 15
0,72,144 // 16
-0,68,136 // 17 = bottom of spec
-0,128,255 // 18 = osc 1 (brightest)
-0,104,208 // 19 = osc 2
-0,80,160 // 20 = osc 3
-0,56,112 // 21 = osc 4
-0,32,64 // 22 = osc 5 (dimmest)
-200,200,200
+0,68,136 // 17 = analyzer low
+0,96,192 // 18 = oscilloscope low
+0,104,208 // 19
+0,112,224 // 20
+0,120,240 // 21
+0,128,255 // 22 = oscilloscope high
+192,192,192 // 23 = analyzer peaks
diff --git a/src/skins/Skins/Ivory/skin.hints b/src/skins/Skins/Ivory/skin.hints
index e1253eb..37b26db 100644
--- a/src/skins/Skins/Ivory/skin.hints
+++ b/src/skins/Skins/Ivory/skin.hints
@@ -1,6 +1,5 @@
[skin]
skinDescription=Ivory
-mainwinOthertext=1
mainwinVisX=335
mainwinVisY=53
mainwinTextX=93
@@ -31,6 +30,7 @@ mainwinTextVisible=1
mainwinOthertextVisible=1
mainwinVisVisible=1
mainwinMenurowVisible=0
+mainwinStreaminfoVisible=0
mainwinWidth=425
mainwinHeight=100
mainwinPreviousX=5
diff --git a/src/skins/Skins/Osmosis/skin.hints b/src/skins/Skins/Osmosis/skin.hints
index 1574b1f..d2cb834 100644
--- a/src/skins/Skins/Osmosis/skin.hints
+++ b/src/skins/Skins/Osmosis/skin.hints
@@ -1,6 +1,5 @@
[skin]
skinDescription=Osmosis
-mainwinOthertext=1
mainwinVisX=335
mainwinVisY=53
mainwinTextX=93
@@ -31,6 +30,7 @@ mainwinTextVisible=1
mainwinOthertextVisible=1
mainwinVisVisible=1
mainwinMenurowVisible=0
+mainwinStreaminfoVisible=0
mainwinWidth=425
mainwinHeight=100
mainwinPreviousX=5
diff --git a/src/skins/Skins/Refugee/skin.hints b/src/skins/Skins/Refugee/skin.hints
index 8a1df00..88c1986 100644
--- a/src/skins/Skins/Refugee/skin.hints
+++ b/src/skins/Skins/Refugee/skin.hints
@@ -1,8 +1,7 @@
[skin]
skinDescription=XMMS skin ported :)
-mainwinOthertext=1
mainwinOthertextVisible=1
mainwinTextVisible=1
mainwinVisVisible=1
mainwinMenurowVisible=1
-
+mainwinStreaminfoVisible=0
diff --git a/src/skins/Skins/TinyPlayer/skin.hints b/src/skins/Skins/TinyPlayer/skin.hints
index a6a2053..eebb4fa 100644
--- a/src/skins/Skins/TinyPlayer/skin.hints
+++ b/src/skins/Skins/TinyPlayer/skin.hints
@@ -1,6 +1,5 @@
[skin]
skinDescription=TinyPlayer skin
-mainwinOthertext=1
mainwinVisX=189
mainwinVisY=36
mainwinTextX=1
@@ -31,6 +30,7 @@ mainwinTextVisible=1
mainwinOthertextVisible=0
mainwinVisVisible=0
mainwinMenurowVisible=0
+mainwinStreaminfoVisible=0
mainwinWidth=275
mainwinHeight=87
mainwinPreviousX=16
diff --git a/src/skins/actions-equalizer.h b/src/skins/actions-equalizer.h
index 6441030..c460947 100644
--- a/src/skins/actions-equalizer.h
+++ b/src/skins/actions-equalizer.h
@@ -17,8 +17,8 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_ACTIONS_EQUALIZER_H
-#define AUDACIOUS_ACTIONS_EQUALIZER_H
+#ifndef SKINS_ACTIONS_EQUALIZER_H
+#define SKINS_ACTIONS_EQUALIZER_H
void action_equ_load_preset(void);
void action_equ_load_auto_preset(void);
@@ -35,4 +35,7 @@ void action_equ_save_preset_eqf(void);
void action_equ_delete_preset(void);
void action_equ_delete_auto_preset(void);
-#endif /* AUDACIOUS_ACTIONS_EQUALIZER_H */
+void action_show_equalizer(GtkToggleAction*);
+void action_roll_up_equalizer(GtkToggleAction*);
+
+#endif /* SKINS_ACTIONS_EQUALIZER_H */
diff --git a/src/skins/actions-mainwin.h b/src/skins/actions-mainwin.h
index 15bbc0c..82e734a 100644
--- a/src/skins/actions-mainwin.h
+++ b/src/skins/actions-mainwin.h
@@ -17,10 +17,9 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_ACTIONS_MAINWIN_H
-#define AUDACIOUS_ACTIONS_MAINWIN_H
+#ifndef SKINS_ACTIONS_MAINWIN_H
+#define SKINS_ACTIONS_MAINWIN_H
-#include <glib.h>
#include <gtk/gtk.h>
/* actions below are handled in mainwin.c */
@@ -34,15 +33,9 @@ void action_playback_repeat(GtkToggleAction*);
void action_playback_shuffle(GtkToggleAction*);
void action_stop_after_current_song(GtkToggleAction*);
void action_view_always_on_top(GtkToggleAction*);
-void action_view_scaled(GtkToggleAction*);
-void action_view_easymove(GtkToggleAction*);
void action_view_on_all_workspaces(GtkToggleAction*);
-void action_roll_up_equalizer(GtkToggleAction*);
void action_roll_up_player(GtkToggleAction*);
-void action_roll_up_playlist_editor(GtkToggleAction*);
-void action_show_equalizer(GtkToggleAction*);
void action_show_player(GtkToggleAction*);
-void action_show_playlist_editor(GtkToggleAction*);
/* radio actions (one for each radio action group) */
void action_anafoff(GtkAction*,GtkRadioAction*);
@@ -56,20 +49,9 @@ void action_wshmode(GtkAction*,GtkRadioAction*);
void action_viewtime(GtkAction*,GtkRadioAction*);
/* normal actions */
-void action_about_audacious(void);
void action_ab_clear(void);
void action_ab_set(void);
-void action_jump_to_file(void);
-void action_jump_to_playlist_start(void);
-void action_jump_to_time(void);
void action_play_file(void);
void action_play_location(void);
-void action_playback_next(void);
-void action_playback_pause(void);
-void action_playback_play(void);
-void action_playback_previous(void);
-void action_playback_stop(void);
-void action_preferences(void);
-void action_quit(void);
-void action_current_track_info(void);
-#endif /* AUDACIOUS_ACTIONS_MAINWIN_H */
+
+#endif /* SKINS_ACTIONS_MAINWIN_H */
diff --git a/src/skins/actions-playlist.h b/src/skins/actions-playlist.h
index 8e8ce35..55cac8f 100644
--- a/src/skins/actions-playlist.h
+++ b/src/skins/actions-playlist.h
@@ -17,14 +17,10 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_ACTIONS_PLAYLIST_H
-#define AUDACIOUS_ACTIONS_PLAYLIST_H
+#ifndef SKINS_ACTIONS_PLAYLIST_H
+#define SKINS_ACTIONS_PLAYLIST_H
-void action_playlist_load_list(void);
-void action_playlist_save_list(void);
-void action_playlist_save_all_playlists (void);
void action_playlist_refresh_list(void);
-void action_open_list_manager(void);
void action_playlist_prev(void);
void action_playlist_new(void);
@@ -74,4 +70,7 @@ void action_playlist_sort_selected_by_track_number(void);
void action_playlist_track_info(void);
void action_queue_toggle(void);
-#endif /* AUDACIOUS_ACTIONS_PLAYLIST_H */
+void action_show_playlist_editor(GtkToggleAction*);
+void action_roll_up_playlist_editor(GtkToggleAction*);
+
+#endif /* SKINS_ACTIONS_PLAYLIST_H */
diff --git a/src/skins/debug.h b/src/skins/debug.h
deleted file mode 100644
index 074c58f..0000000
--- a/src/skins/debug.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef DEBUG_H
-#define DEBUG_H
-
-#include <glib.h>
-
-#ifdef NDEBUG
-
-/* void REQUIRE_LOCK(GMutex *m); */
-# define REQUIRE_LOCK(m)
-
-/* void REQUIRE_STR_UTF8(const gchar *str); */
-# define REQUIRE_STR_UTF8(str)
-
-/* void REQUIRE_STATIC_LOCK(GStaticMutex *m); */
-# define REQUIRE_STATIC_LOCK(m)
-
-#else /* !NDEBUG */
-
-/* void REQUIRE_LOCK(GMutex *m); */
-# define REQUIRE_LOCK(m) G_STMT_START { \
- if (g_mutex_trylock(m)) { \
- g_critical(G_STRLOC ": Mutex not locked!"); \
- g_mutex_unlock(m); \
- } \
- } G_STMT_END
-
-/* void REQUIRE_STATIC_LOCK(GStaticMutex *m); */
-# define REQUIRE_STATIC_LOCK(m) G_STMT_START { \
- if (G_TRYLOCK(m)) { \
- g_critical(G_STRLOC ": Mutex not locked!"); \
- G_UNLOCK(m); \
- } \
- } G_STMT_END
-
-/* void REQUIRE_STR_UTF8(const gchar *str); */
-# define REQUIRE_STR_UTF8(str) G_STMT_START { \
- if (!g_utf_validate(str, -1, NULL)) \
- g_warning(G_STRLOC ": String is not UTF-8!"); \
- } G_STMT_END
-
-#endif /* NDEBUG */
-
-
-#endif
diff --git a/src/skins/dnd.c b/src/skins/dnd.c
deleted file mode 100644
index bfecef1..0000000
--- a/src/skins/dnd.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Audacious
- * Copyright (C) 2005-2007 Audacious development team.
- *
- * Based on BMP:
- * Copyright (C) 2003-2004 BMP development team.
- *
- * Based on XMMS:
- * Copyright (C) 1998-2003 XMMS development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include "dnd.h"
-
-void
-aud_drag_dest_set(GtkWidget *widget)
-{
- gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
- aud_drop_types, 5,
- GDK_ACTION_COPY | GDK_ACTION_MOVE);
-}
diff --git a/src/skins/dnd.h b/src/skins/dnd.h
index 49194ab..32f145b 100644
--- a/src/skins/dnd.h
+++ b/src/skins/dnd.h
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
*
* Based on BMP:
* Copyright (C) 2003-2004 BMP development team
@@ -23,29 +23,33 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_DND_H
-#define AUDACIOUS_DND_H
+#ifndef SKINS_DND_H
+#define SKINS_DND_H
#include <gtk/gtk.h>
/* Designate dropped data types that we know and care about */
enum {
- BMP_DROP_STRING,
- BMP_DROP_PLAINTEXT,
- BMP_DROP_URLENCODED,
- BMP_DROP_SKIN,
- BMP_DROP_FONT
+ DROP_STRING,
+ DROP_PLAINTEXT,
+ DROP_URLENCODED,
+ DROP_SKIN,
+ DROP_FONT
};
/* Drag data format listing for gtk_drag_dest_set() */
-static const GtkTargetEntry aud_drop_types[] = {
- {"text/plain", 0, BMP_DROP_PLAINTEXT},
- {"text/uri-list", 0, BMP_DROP_URLENCODED},
- {"STRING", 0, BMP_DROP_STRING},
- {"interface/x-winamp-skin", 0, BMP_DROP_SKIN},
- {"application/x-font-ttf", 0, BMP_DROP_FONT},
+static const GtkTargetEntry drop_types[] = {
+ {"text/plain", 0, DROP_PLAINTEXT},
+ {"text/uri-list", 0, DROP_URLENCODED},
+ {"STRING", 0, DROP_STRING},
+ {"interface/x-winamp-skin", 0, DROP_SKIN},
+ {"application/x-font-ttf", 0, DROP_FONT},
};
-void aud_drag_dest_set(GtkWidget*);
+static inline void drag_dest_set (GtkWidget * widget)
+{
+ gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+ drop_types, G_N_ELEMENTS (drop_types), GDK_ACTION_COPY | GDK_ACTION_MOVE);
+}
-#endif /* AUDACIOUS_DND_H */
+#endif /* SKINS_DND_H */
diff --git a/src/skins/drag-handle.c b/src/skins/drag-handle.c
new file mode 100644
index 0000000..7dfb877
--- /dev/null
+++ b/src/skins/drag-handle.c
@@ -0,0 +1,105 @@
+/*
+ * drag-handle.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include "drag-handle.h"
+
+typedef struct {
+ gboolean held;
+ gint x_origin, y_origin;
+ void (* press) (void);
+ void (* drag) (gint x_offset, gint y_offset);
+} DHandleData;
+
+static gboolean handle_button_press (GtkWidget * handle, GdkEventButton * event)
+{
+ DHandleData * data = g_object_get_data ((GObject *) handle, "dhandledata");
+ g_return_val_if_fail (data, FALSE);
+
+ if (event->button != 1)
+ return FALSE;
+
+ data->held = TRUE;
+ data->x_origin = event->x_root;
+ data->y_origin = event->y_root;
+
+ if (data->press)
+ data->press ();
+
+ return TRUE;
+}
+
+static gboolean handle_button_release (GtkWidget * handle, GdkEventButton *
+ event)
+{
+ DHandleData * data = g_object_get_data ((GObject *) handle, "dhandledata");
+ g_return_val_if_fail (data, FALSE);
+
+ if (event->button != 1)
+ return FALSE;
+
+ data->held = FALSE;
+ return TRUE;
+}
+
+static gboolean handle_motion (GtkWidget * handle, GdkEventMotion * event)
+{
+ DHandleData * data = g_object_get_data ((GObject *) handle, "dhandledata");
+ g_return_val_if_fail (data, FALSE);
+
+ if (! data->held)
+ return TRUE;
+
+ if (data->drag)
+ data->drag (event->x_root - data->x_origin, event->y_root -
+ data->y_origin);
+
+ return TRUE;
+}
+
+static void handle_destroy (GtkWidget * handle)
+{
+ g_free (g_object_get_data ((GObject *) handle, "dhandledata"));
+}
+
+GtkWidget * drag_handle_new (gint w, gint h, void (* press) (void), void
+ (* drag) (gint x, gint y))
+{
+ GtkWidget * handle = gtk_event_box_new ();
+ gtk_event_box_set_visible_window ((GtkEventBox *) handle, FALSE);
+ gtk_widget_set_size_request (handle, w, h);
+ gtk_widget_add_events (handle, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
+
+ g_signal_connect (handle, "button-press-event", (GCallback)
+ handle_button_press, NULL);
+ g_signal_connect (handle, "button-release-event", (GCallback)
+ handle_button_release, NULL);
+ g_signal_connect (handle, "motion-notify-event", (GCallback) handle_motion,
+ NULL);
+ g_signal_connect (handle, "destroy", (GCallback) handle_destroy, NULL);
+
+ DHandleData * data = g_malloc0 (sizeof (DHandleData));
+ data->press = press;
+ data->drag = drag;
+ g_object_set_data ((GObject *) handle, "dhandledata", data);
+
+ return handle;
+}
diff --git a/src/skins/drag-handle.h b/src/skins/drag-handle.h
new file mode 100644
index 0000000..0907b78
--- /dev/null
+++ b/src/skins/drag-handle.h
@@ -0,0 +1,30 @@
+/*
+ * drag-handle.h
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef SKINS_DRAG_HANDLE_H
+#define SKINS_DRAG_HANDLE_H
+
+#include <gtk/gtk.h>
+
+GtkWidget * drag_handle_new (gint w, gint h, void (* press) (void), void
+ (* drag) (gint x, gint y));
+
+#endif
diff --git a/src/skins/draw-compat.h b/src/skins/draw-compat.h
new file mode 100644
index 0000000..5fa820a
--- /dev/null
+++ b/src/skins/draw-compat.h
@@ -0,0 +1,75 @@
+/*
+ * draw-compat.h
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef SKINS_DRAW_COMPAT_H
+#define SKINS_DRAW_COMPAT_H
+
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+#include <audacious/gtk-compat.h>
+
+static void widget_realized (GtkWidget * w)
+{
+ GdkWindow * window = gtk_widget_get_window (w);
+#if GTK_CHECK_VERSION (3, 0, 0)
+ gdk_window_set_background_pattern (window, NULL);
+#else
+ gdk_window_set_back_pixmap (window, NULL, FALSE);
+#endif
+}
+
+#if GTK_CHECK_VERSION (3, 0, 0)
+
+#define DRAW_SIGNAL "draw"
+#define DRAW_FUNC_BEGIN(n) static gboolean n (GtkWidget * wid, cairo_t * cr) { \
+ g_return_val_if_fail (wid && cr, FALSE);
+#define DRAW_FUNC_END return TRUE; }
+
+#define DRAW_CONNECT(w,f) do { \
+ g_signal_connect (w, "realize", (GCallback) widget_realized, NULL); \
+ g_signal_connect (w, DRAW_SIGNAL, (GCallback) f, NULL); \
+ } while (0);
+
+#else
+
+#define DRAW_SIGNAL "expose-event"
+#define DRAW_FUNC_BEGIN(n) static gboolean n (GtkWidget * wid, GdkEventExpose * ev) { \
+ g_return_val_if_fail (wid, FALSE); \
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (wid)); \
+ g_return_val_if_fail (cr, FALSE);
+#define DRAW_FUNC_END cairo_destroy (cr); \
+ return TRUE; }
+
+/* We set None as the background pixmap in order to avoid flickering. Setting
+ * a blank GtkStyle prevents GTK 2.x from overriding this. */
+
+#define DRAW_CONNECT(w,f) do { \
+ GtkStyle * style = gtk_style_new (); \
+ gtk_widget_set_style (w, style); \
+ g_object_unref (style); \
+ g_signal_connect (w, "realize", (GCallback) widget_realized, NULL); \
+ g_signal_connect (w, DRAW_SIGNAL, (GCallback) f, NULL); \
+ } while (0);
+
+#endif
+
+#endif
diff --git a/src/skins/pixbuf_effects.c b/src/skins/pixbuf_effects.c
deleted file mode 100644
index 29abe69..0000000
--- a/src/skins/pixbuf_effects.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Audacious
- * Copyright (c) 2006-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include <glib.h>
-
-#include "platform/smartinclude.h"
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-static GdkPixbuf *
-create_new_pixbuf (GdkPixbuf *src)
-{
- g_return_val_if_fail (gdk_pixbuf_get_colorspace (src) == GDK_COLORSPACE_RGB, NULL);
- g_return_val_if_fail ((!gdk_pixbuf_get_has_alpha (src)
- && gdk_pixbuf_get_n_channels (src) == 3)
- || (gdk_pixbuf_get_has_alpha (src)
- && gdk_pixbuf_get_n_channels (src) == 4), NULL);
-
- return gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src),
- gdk_pixbuf_get_has_alpha (src),
- gdk_pixbuf_get_bits_per_sample (src),
- gdk_pixbuf_get_width (src),
- gdk_pixbuf_get_height (src));
-}
-
-GdkPixbuf *
-audacious_create_colorized_pixbuf (GdkPixbuf *src,
- int red_value,
- int green_value,
- int blue_value)
-{
- int i, j;
- int width, height, has_alpha, src_row_stride, dst_row_stride;
- guchar *target_pixels;
- guchar *original_pixels;
- guchar *pixsrc;
- guchar *pixdest;
- GdkPixbuf *dest;
-
- g_return_val_if_fail (gdk_pixbuf_get_colorspace (src) == GDK_COLORSPACE_RGB, NULL);
- g_return_val_if_fail ((!gdk_pixbuf_get_has_alpha (src)
- && gdk_pixbuf_get_n_channels (src) == 3)
- || (gdk_pixbuf_get_has_alpha (src)
- && gdk_pixbuf_get_n_channels (src) == 4), NULL);
- g_return_val_if_fail (gdk_pixbuf_get_bits_per_sample (src) == 8, NULL);
-
- dest = create_new_pixbuf (src);
-
- has_alpha = gdk_pixbuf_get_has_alpha (src);
- width = gdk_pixbuf_get_width (src);
- height = gdk_pixbuf_get_height (src);
- src_row_stride = gdk_pixbuf_get_rowstride (src);
- dst_row_stride = gdk_pixbuf_get_rowstride (dest);
- target_pixels = gdk_pixbuf_get_pixels (dest);
- original_pixels = gdk_pixbuf_get_pixels (src);
-
- for (i = 0; i < height; i++) {
- pixdest = target_pixels + i*dst_row_stride;
- pixsrc = original_pixels + i*src_row_stride;
- for (j = 0; j < width; j++) {
- *pixdest++ = (*pixsrc++ * red_value) >> 8;
- *pixdest++ = (*pixsrc++ * green_value) >> 8;
- *pixdest++ = (*pixsrc++ * blue_value) >> 8;
- if (has_alpha) {
- *pixdest++ = *pixsrc++;
- }
- }
- }
- return dest;
-}
-
diff --git a/src/skins/plugin.c b/src/skins/plugin.c
index 239f3f3..a694b46 100644
--- a/src/skins/plugin.c
+++ b/src/skins/plugin.c
@@ -18,44 +18,52 @@
* Audacious or using our public API to be a derived work.
*/
+#include <stdlib.h>
-#include "plugin.h"
-#include "skins_cfg.h"
-#include "ui_dock.h"
-#include "ui_equalizer.h"
-#include "ui_main.h"
-#include "ui_skin.h"
-#include "ui_manager.h"
-#include "ui_main_evlisteners.h"
-#include "ui_playlist_evlisteners.h"
-
-#include <audacious/audconfig.h>
#include <audacious/drct.h>
#include <audacious/i18n.h>
+#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
-#include <libintl.h>
+#include "config.h"
+#include "plugin.h"
+#include "skins_cfg.h"
+#include "ui_equalizer.h"
+#include "ui_main.h"
+#include "ui_main_evlisteners.h"
+#include "ui_manager.h"
+#include "ui_playlist.h"
+#include "ui_skin.h"
gchar * skins_paths[SKINS_PATH_COUNT];
-Interface skins_interface =
-{
- .id = "skinned",
- .desc = "Winamp Classic Interface",
- .init = skins_init,
- .fini = skins_cleanup
-};
+static gboolean skins_init (void);
+static void skins_cleanup (void);
+static void skins_about (void);
+static gboolean ui_is_shown (void);
+static gboolean ui_is_focused (void);
+static void show_error_message (const gchar * text);
-SIMPLE_INTERFACE_PLUGIN ("skinned", & skins_interface)
-gboolean plugin_is_active = FALSE;
+AUD_IFACE_PLUGIN
+(
+ .name = "Winamp Classic Interface",
+ .init = skins_init,
+ .cleanup = skins_cleanup,
+ .about = skins_about,
+ .configure = skins_configure,
+ .show = mainwin_show,
+ .is_shown = ui_is_shown,
+ .is_focused = ui_is_focused,
+ .show_error = show_error_message,
+ .show_filebrowser = audgui_run_filebrowser,
+ .show_jump_to_track = audgui_jump_to_track,
+)
+
+static gboolean plugin_is_active = FALSE;
static gint update_source;
-
-static void toggle_visibility(void);
-static void toggle_shuffle(void);
-static void toggle_repeat(void);
-static void show_error_message(const gchar * markup);
+static GtkWidget * error_win;
static void skins_free_paths(void) {
int i;
@@ -92,7 +100,7 @@ static gboolean update_cb (void * unused)
return TRUE;
}
-gboolean skins_init (InterfaceCbs * cbs)
+static gboolean skins_init (void)
{
plugin_is_active = TRUE;
g_log_set_handler(NULL, G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
@@ -100,8 +108,6 @@ gboolean skins_init (InterfaceCbs * cbs)
skins_init_paths();
skins_cfg_load();
- ui_main_check_theme_engine();
-
audgui_set_default_icon();
audgui_register_stock_icons();
@@ -114,32 +120,13 @@ gboolean skins_init (InterfaceCbs * cbs)
if (aud_drct_get_playing ())
{
ui_main_evlistener_playback_begin (NULL, NULL);
- info_change ();
-
if (aud_drct_get_paused ())
ui_main_evlistener_playback_pause (NULL, NULL);
}
else
mainwin_update_song_info ();
- if (config.player_visible)
- mainwin_show (1);
- if (config.equalizer_visible) equalizerwin_show(TRUE);
- if (config.playlist_visible)
- playlistwin_show (1);
-
- /* Register interface callbacks */
- cbs->show_prefs_window = show_preferences_window;
- cbs->run_filebrowser = audgui_run_filebrowser;
- cbs->hide_filebrowser = audgui_hide_filebrowser;
- cbs->toggle_visibility = toggle_visibility;
- cbs->show_error = show_error_message;
- cbs->show_jump_to_track = audgui_jump_to_track;
- cbs->hide_jump_to_track = audgui_jump_to_track_hide;
- cbs->show_about_window = audgui_show_about_window;
- cbs->hide_about_window = audgui_hide_about_window;
- cbs->toggle_shuffle = toggle_shuffle;
- cbs->toggle_repeat = toggle_repeat;
+ mainwin_show (config.player_visible);
eq_init_hooks ();
update_source = g_timeout_add (250, update_cb, NULL);
@@ -147,10 +134,12 @@ gboolean skins_init (InterfaceCbs * cbs)
return TRUE;
}
-gboolean skins_cleanup (void)
+static void skins_cleanup (void)
{
if (plugin_is_active)
{
+ skins_configure_cleanup ();
+
mainwin_unhook ();
playlistwin_unhook ();
eq_end_hooks ();
@@ -158,20 +147,19 @@ gboolean skins_cleanup (void)
skins_cfg_save();
- audgui_playlist_manager_destroy();
-
cleanup_skins();
- clear_dock_window_list ();
skins_free_paths();
skins_cfg_free();
ui_manager_destroy();
+
+ if (error_win)
+ gtk_widget_destroy (error_win);
+
plugin_is_active = FALSE;
}
-
- return TRUE;
}
-void skins_about (void)
+static void skins_about (void)
{
static GtkWidget * about_window = NULL;
@@ -180,85 +168,24 @@ void skins_about (void)
_("Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n\n"));
}
-void show_preferences_window(gboolean show) {
- /* static GtkWidget * * prefswin = NULL; */
- static void * * prefswin = NULL;
-
- if (show) {
- if ((prefswin != NULL) && (*prefswin != NULL)) {
- gtk_window_present(GTK_WINDOW(*prefswin));
- return;
- }
- GtkWidget *cfgdlg;
-
- prefswin = skins_interface.ops->create_prefs_window();
- cfgdlg = skins_configure();
- skins_interface.ops->prefswin_page_new(cfgdlg, _("Skinned Interface"), DATA_DIR "/images/appearance.png");
-
- gtk_widget_show_all(*prefswin);
- } else {
- if ((prefswin != NULL) && (*prefswin != NULL)) {
- skins_interface.ops->destroy_prefs_window();
- }
- }
-}
-
-static void toggle_visibility(void)
+static gboolean ui_is_shown (void)
{
- /* use the window visibility status to toggle show/hide
- (if at least one is visible, hide) */
- if ((config.player_visible == TRUE ) ||
- (config.equalizer_visible == TRUE) ||
- (config.playlist_visible == TRUE))
- {
- /* remember the visibility status of the player windows */
- config.player_visible_prev = config.player_visible;
- config.equalizer_visible_prev = config.equalizer_visible;
- config.playlist_visible_prev = config.playlist_visible;
- /* now hide all of them */
- if (config.player_visible_prev == TRUE)
- mainwin_show(FALSE);
- if (config.equalizer_visible_prev == TRUE)
- equalizerwin_show(FALSE);
- if (config.playlist_visible_prev == TRUE)
- playlistwin_show(FALSE);
- }
- else
- {
- /* show the windows that were visible before */
- if (config.player_visible_prev == TRUE)
- mainwin_show(TRUE);
- if (config.equalizer_visible_prev == TRUE)
- equalizerwin_show(TRUE);
- if (config.playlist_visible_prev == TRUE)
- playlistwin_show(TRUE);
- }
+ return config.player_visible;
}
-static void toggle_shuffle(void)
+static gboolean ui_is_focused (void)
{
- mainwin_shuffle_pushed(aud_cfg->shuffle);
+/* gtk_window_is_active() is too unreliable, unfortunately. --jlindgren */
+#if 0
+ return gtk_window_is_active ((GtkWindow *) mainwin) || gtk_window_is_active
+ ((GtkWindow *) equalizerwin) || gtk_window_is_active ((GtkWindow *)
+ playlistwin);
+#else
+ return ui_is_shown ();
+#endif
}
-static void toggle_repeat(void)
+static void show_error_message (const gchar * text)
{
- mainwin_repeat_pushed(aud_cfg->repeat);
+ audgui_simple_message (& error_win, GTK_MESSAGE_ERROR, _("Error"), _(text));
}
-
-static void show_error_message(const gchar * markup)
-{
- GtkWidget *dialog =
- gtk_message_dialog_new_with_markup(GTK_WINDOW(mainwin),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "%s",_(markup));
-
- gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
- gtk_widget_show(GTK_WIDGET(dialog));
-
- g_signal_connect_swapped(dialog, "response",
- G_CALLBACK(gtk_widget_destroy),
- dialog);
-}
-
diff --git a/src/skins/plugin.h b/src/skins/plugin.h
index a750677..990a69f 100644
--- a/src/skins/plugin.h
+++ b/src/skins/plugin.h
@@ -23,18 +23,6 @@
#include <glib.h>
-#include <audacious/interface.h>
-#include <audacious/plugin.h>
-
-#include "skins_cfg.h"
-#include "ui_main.h"
-#include "ui_equalizer.h"
-#include "ui_playlist.h"
-#include "ui_skin.h"
-
-#define PACKAGE "audacious-plugins"
-#define PACKAGE_NAME "audacious-plugins"
-
enum {
SKINS_PATH_USER_SKIN_DIR,
SKINS_PATH_SKIN_THUMB_DIR,
@@ -42,11 +30,5 @@ enum {
};
extern gchar *skins_paths[];
-extern Interface skins_interface;
-
-gboolean skins_init(InterfaceCbs *cbs);
-gboolean skins_cleanup(void);
-void skins_about(void);
-void show_preferences_window(gboolean show);
#endif
diff --git a/src/skins/skins_cfg.c b/src/skins/skins_cfg.c
index aaaa747..f46c99f 100644
--- a/src/skins/skins_cfg.c
+++ b/src/skins/skins_cfg.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2008 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -18,267 +19,174 @@
* Audacious or using our public API to be a derived work.
*/
-#include <glib.h>
-#include <stdlib.h>
+#include <gtk/gtk.h>
-#include <audacious/configdb.h>
#include <audacious/debug.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/preferences.h>
#include <libaudcore/audstrings.h>
+#include "config.h"
+#include "dnd.h"
#include "skins_cfg.h"
-#include "ui_dock.h"
-#include "ui_skin.h"
-#include "ui_vis.h"
+#include "ui_equalizer.h"
#include "ui_main.h"
#include "ui_playlist.h"
-#include "ui_skinned_window.h"
-#include "ui_skinned_textbox.h"
+#include "ui_skin.h"
#include "ui_skinned_playlist.h"
+#include "ui_skinned_textbox.h"
#include "ui_skinselector.h"
-#include "plugin.h"
-#include "dnd.h"
+#include "ui_vis.h"
#include "util.h"
+static const gchar * const skins_defaults[] = {
+ /* general */
+ "autoscroll_songname", "TRUE",
+ "mainwin_font", "Sans Bold 9",
+ "mainwin_use_bitmapfont", "TRUE",
+ "playlist_font", "Sans Bold 8",
+ "timer_mode", "0", /* TIMER_ELAPSED */
+ "twoway_scroll", "TRUE",
+
+ /* visualizer */
+ "analyzer_falloff", "3", /* FALLOFF_FAST */
+ "analyzer_mode", "0", /* ANALYZER_NORMAL */
+ "analyzer_peaks", "TRUE",
+ "analyzer_type", "1", /* ANALYZER_BARS */
+ "peaks_falloff", "1", /* FALLOFF_SLOW */
+ "scope_mode", "0", /* SCOPE_DOT */
+ "vis_type", "0", /* VIS_ANALYZER */
+ "voiceprint_mode", "0", /* VOICEPRINT_NORMAL */
+ "vu_mode", "1", /* VU_SMOOTH */
+
+ /* windows */
+ "always_on_top", "FALSE",
+ "equalizer_shaded", "FALSE",
+ "equalizer_visible", "FALSE",
+ "equalizer_x", "20",
+ "equalizer_y", "136",
+ "player_shaded", "FALSE",
+ "player_visible", "TRUE",
+ "player_x", "20",
+ "player_y", "20",
+ "playlist_shaded", "FALSE",
+ "playlist_visible", "FALSE",
+ "playlist_x", "295",
+ "playlist_y", "20",
+ "playlist_width", "275",
+ "playlist_height", "232",
+ "sticky", "FALSE",
+ NULL};
+
skins_cfg_t config;
-GtkWidget *skin_view;
-static GtkWidget *colorize_settings = NULL;
-/* colorize settings scales */
-GtkWidget *green_scale;
-GtkWidget *red_scale;
-GtkWidget *blue_scale;
-
-
-skins_cfg_t skins_default_config = {
- .scaled = FALSE,
- .autoscroll = TRUE,
- .always_on_top = FALSE,
- .sticky = FALSE,
- .scale_factor = 2.0,
- .always_show_cb = TRUE,
- .close_dialog_open = TRUE,
- .close_dialog_add = TRUE,
- .skin = NULL,
- .filesel_path = NULL,
- .playlist_visible = FALSE,
- .playlist_visible_prev = FALSE,
- .equalizer_visible = FALSE,
- .equalizer_visible_prev = FALSE,
- .player_visible = TRUE,
- .player_visible_prev = TRUE,
- .player_shaded = FALSE,
- .equalizer_shaded = FALSE,
- .playlist_shaded = FALSE,
- .dim_titlebar = TRUE,
- .show_wm_decorations = FALSE,
- .easy_move = TRUE,
- .allow_broken_skins = FALSE,
- .warn_about_broken_gtk_engines = TRUE,
- .warn_about_win_visibility = TRUE,
- .disable_inline_gtk = FALSE,
- .timer_mode = 0,
- .vis_type = VIS_ANALYZER,
- .analyzer_mode = ANALYZER_NORMAL,
- .analyzer_type = ANALYZER_BARS,
- .scope_mode = SCOPE_DOT,
- .voiceprint_mode = VOICEPRINT_NORMAL,
- .vu_mode = VU_SMOOTH,
- .analyzer_falloff = FALLOFF_FAST,
- .peaks_falloff = FALLOFF_SLOW,
- .player_x = MAINWIN_DEFAULT_POS_X,
- .player_y = MAINWIN_DEFAULT_POS_Y,
- .equalizer_x = EQUALIZER_DEFAULT_POS_X,
- .equalizer_y = EQUALIZER_DEFAULT_POS_Y,
- .playlist_x = PLAYLISTWIN_DEFAULT_POS_X,
- .playlist_y = PLAYLISTWIN_DEFAULT_POS_Y,
- .playlist_width = PLAYLISTWIN_DEFAULT_WIDTH,
- .playlist_height = PLAYLISTWIN_DEFAULT_HEIGHT,
- .playlist_position = 0,
- .colorize_r = 255, .colorize_g = 255, .colorize_b = 255,
- .analyzer_peaks = TRUE,
- .twoway_scroll = TRUE, /* use back and forth scroll */
- .mainwin_use_bitmapfont = TRUE,
- .eq_scaled_linked = TRUE,
- .show_separator_in_pl = TRUE,
- .playlist_font = NULL,
- .mainwin_font = NULL,
- .random_skin_on_play = FALSE,
-};
+
+static GtkWidget * skin_view;
typedef struct skins_cfg_boolent_t {
- char const *be_vname;
- gboolean *be_vloc;
- gboolean be_wrt;
+ const gchar * name;
+ gboolean * ptr;
} skins_cfg_boolent;
-static skins_cfg_boolent skins_boolents[] = {
- {"always_show_cb", &config.always_show_cb, TRUE},
- {"always_on_top", &config.always_on_top, TRUE},
- {"sticky", &config.sticky, TRUE},
- {"always_show_cb", &config.always_show_cb, TRUE},
- {"scaled", &config.scaled, TRUE},
- {"autoscroll_songname", &config.autoscroll, TRUE},
- {"equalizer_visible", &config.equalizer_visible, TRUE},
- {"playlist_visible", &config.playlist_visible, TRUE},
- {"player_visible", &config.player_visible, TRUE},
- {"player_shaded", &config.player_shaded, TRUE},
- {"equalizer_shaded", &config.equalizer_shaded, TRUE},
- {"playlist_shaded", &config.playlist_shaded, TRUE},
- {"equalizer_visible_prev", &config.equalizer_visible_prev, TRUE},
- {"playlist_visible_prev", &config.playlist_visible_prev, TRUE},
- {"player_visible_prev", &config.player_visible_prev, TRUE},
- {"dim_titlebar", &config.dim_titlebar, TRUE},
- {"show_wm_decorations", &config.show_wm_decorations, TRUE},
- {"easy_move", &config.easy_move, TRUE},
- {"allow_broken_skins", &config.allow_broken_skins, TRUE},
- {"disable_inline_gtk", &config.disable_inline_gtk, TRUE},
- {"analyzer_peaks", &config.analyzer_peaks, TRUE},
- {"twoway_scroll", &config.twoway_scroll, TRUE},
- {"warn_about_win_visibility", &config.warn_about_win_visibility, TRUE},
- {"warn_about_broken_gtk_engines", &config.warn_about_broken_gtk_engines, TRUE},
- {"mainwin_use_bitmapfont", &config.mainwin_use_bitmapfont, TRUE},
- {"eq_scaled_linked", &config.eq_scaled_linked, TRUE},
- {"show_separator_in_pl", &config.show_separator_in_pl, TRUE},
- {"random_skin_on_play", &config.random_skin_on_play, TRUE},
-};
-
-static gint ncfgbent = G_N_ELEMENTS(skins_boolents);
+static const skins_cfg_boolent skins_boolents[] = {
+ /* general */
+ {"autoscroll_songname", & config.autoscroll},
+ {"mainwin_use_bitmapfont", & config.mainwin_use_bitmapfont},
+ {"twoway_scroll", & config.twoway_scroll},
+
+ /* visualizer */
+ {"analyzer_peaks", & config.analyzer_peaks},
+
+ /* windows */
+ {"always_on_top", & config.always_on_top},
+ {"equalizer_shaded", & config.equalizer_shaded},
+ {"equalizer_visible", & config.equalizer_visible},
+ {"player_visible", & config.player_visible},
+ {"player_shaded", & config.player_shaded},
+ {"playlist_shaded", & config.playlist_shaded},
+ {"playlist_visible", & config.playlist_visible},
+ {"sticky", & config.sticky}};
typedef struct skins_cfg_nument_t {
- char const *ie_vname;
- gint *ie_vloc;
- gboolean ie_wrt;
+ const gchar * name;
+ gint * ptr;
} skins_cfg_nument;
-static skins_cfg_nument skins_numents[] = {
- {"player_x", &config.player_x, TRUE},
- {"player_y", &config.player_y, TRUE},
- {"timer_mode", &config.timer_mode, TRUE},
- {"vis_type", &config.vis_type, TRUE},
- {"analyzer_mode", &config.analyzer_mode, TRUE},
- {"analyzer_type", &config.analyzer_type, TRUE},
- {"scope_mode", &config.scope_mode, TRUE},
- {"vu_mode", &config.vu_mode, TRUE},
- {"voiceprint_mode", &config.voiceprint_mode, TRUE},
- {"analyzer_falloff", &config.analyzer_falloff, TRUE},
- {"peaks_falloff", &config.peaks_falloff, TRUE},
- {"playlist_x", &config.playlist_x, TRUE},
- {"playlist_y", &config.playlist_y, TRUE},
- {"playlist_width", &config.playlist_width, TRUE},
- {"playlist_height", &config.playlist_height, TRUE},
- {"playlist_position", &config.playlist_position, TRUE},
- {"equalizer_x", &config.equalizer_x, TRUE},
- {"equalizer_y", &config.equalizer_y, TRUE},
- {"colorize_r", &config.colorize_r, TRUE},
- {"colorize_g", &config.colorize_g, TRUE},
- {"colorize_b", &config.colorize_b, TRUE},
-};
-
-static gint ncfgient = G_N_ELEMENTS(skins_numents);
+static const skins_cfg_nument skins_numents[] = {
+ /* general */
+ {"timer_mode", & config.timer_mode},
+
+ /* visualizer */
+ {"analyzer_falloff", & config.analyzer_falloff},
+ {"analyzer_mode", & config.analyzer_mode},
+ {"analyzer_type", & config.analyzer_type},
+ {"peaks_falloff", & config.peaks_falloff},
+ {"scope_mode", & config.scope_mode},
+ {"vis_type", & config.vis_type},
+ {"voiceprint_mode", & config.voiceprint_mode},
+ {"vu_mode", & config.vu_mode},
+
+ /* windows */
+ {"equalizer_x", & config.equalizer_x},
+ {"equalizer_y", & config.equalizer_y},
+ {"player_x", & config.player_x},
+ {"player_y", & config.player_y},
+ {"playlist_x", & config.playlist_x},
+ {"playlist_y", & config.playlist_y},
+ {"playlist_width", & config.playlist_width},
+ {"playlist_height", & config.playlist_height}};
typedef struct skins_cfg_strent_t {
- char const *se_vname;
- char **se_vloc;
- gboolean se_wrt;
+ const gchar * name;
+ gchar * * ptr;
} skins_cfg_strent;
-static skins_cfg_strent skins_strents[] = {
- {"playlist_font", &config.playlist_font, TRUE},
- {"mainwin_font", &config.mainwin_font, TRUE},
- {"skin", &config.skin, FALSE},
-};
+static const skins_cfg_strent skins_strents[] = {
+ {"skin", & config.skin},
+ {"mainwin_font", & config.mainwin_font},
+ {"playlist_font", & config.playlist_font}};
-static gint ncfgsent = G_N_ELEMENTS(skins_strents);
-
-static void reload_skin (void);
-
-void skins_cfg_free() {
- gint i;
- for (i = 0; i < ncfgsent; ++i) {
- if (*(skins_strents[i].se_vloc) != NULL) {
- g_free( *(skins_strents[i].se_vloc) );
- *(skins_strents[i].se_vloc) = NULL;
- }
+void skins_cfg_free (void)
+{
+ for (gint i = 0; i < G_N_ELEMENTS (skins_strents); i ++)
+ {
+ g_free (* skins_strents[i].ptr);
+ * skins_strents[i].ptr = NULL;
}
}
-void skins_cfg_load() {
- mcs_handle_t *cfgfile = aud_cfg_db_open();
-
- memcpy(&config, &skins_default_config, sizeof(skins_cfg_t));
- int i;
-
- for (i = 0; i < ncfgbent; ++i) {
- aud_cfg_db_get_bool(cfgfile, "skins",
- skins_boolents[i].be_vname,
- skins_boolents[i].be_vloc);
- }
-
- for (i = 0; i < ncfgient; ++i) {
- aud_cfg_db_get_int(cfgfile, "skins",
- skins_numents[i].ie_vname,
- skins_numents[i].ie_vloc);
- }
-
- for (i = 0; i < ncfgsent; ++i) {
- aud_cfg_db_get_string(cfgfile, "skins",
- skins_strents[i].se_vname,
- skins_strents[i].se_vloc);
- }
-
- if (!config.mainwin_font)
- config.mainwin_font = g_strdup(MAINWIN_DEFAULT_FONT);
+void skins_cfg_load (void)
+{
+ aud_config_set_defaults ("skins", skins_defaults);
- if (!config.playlist_font)
- config.playlist_font = g_strdup(PLAYLISTWIN_DEFAULT_FONT);
+ for (gint i = 0; i < G_N_ELEMENTS (skins_boolents); i ++)
+ * skins_boolents[i].ptr = aud_get_bool ("skins", skins_boolents[i].name);
- if (!aud_cfg_db_get_float(cfgfile, "skins", "scale_factor", &(config.scale_factor)))
- config.scale_factor = 2.0;
+ for (gint i = 0; i < G_N_ELEMENTS (skins_numents); i ++)
+ * skins_numents[i].ptr = aud_get_int ("skins", skins_numents[i].name);
- aud_cfg_db_close(cfgfile);
+ for (gint i = 0; i < G_N_ELEMENTS (skins_strents); i ++)
+ * skins_strents[i].ptr = aud_get_string ("skins", skins_strents[i].name);
}
+void skins_cfg_save (void)
+{
+ for (gint i = 0; i < G_N_ELEMENTS (skins_boolents); i ++)
+ aud_set_bool ("skins", skins_boolents[i].name, * skins_boolents[i].ptr);
-void skins_cfg_save() {
- mcs_handle_t *cfgfile = aud_cfg_db_open();
-
- if (aud_active_skin != NULL) {
- if (aud_active_skin->path)
- aud_cfg_db_set_string(cfgfile, "skins", "skin", aud_active_skin->path);
- else
- aud_cfg_db_unset_key(cfgfile, "skins", "skin");
- }
-
- int i;
-
- for (i = 0; i < ncfgsent; ++i) {
- if (skins_strents[i].se_wrt)
- aud_cfg_db_set_string(cfgfile, "skins",
- skins_strents[i].se_vname,
- *skins_strents[i].se_vloc);
- }
-
- for (i = 0; i < ncfgbent; ++i)
- if (skins_boolents[i].be_wrt)
- aud_cfg_db_set_bool(cfgfile, "skins",
- skins_boolents[i].be_vname,
- *skins_boolents[i].be_vloc);
-
- for (i = 0; i < ncfgient; ++i)
- if (skins_numents[i].ie_wrt)
- aud_cfg_db_set_int(cfgfile, "skins",
- skins_numents[i].ie_vname,
- *skins_numents[i].ie_vloc);
+ for (gint i = 0; i < G_N_ELEMENTS (skins_numents); i ++)
+ aud_set_int ("skins", skins_numents[i].name, * skins_numents[i].ptr);
- aud_cfg_db_close(cfgfile);
+ for (gint i = 0; i < G_N_ELEMENTS (skins_strents); i ++)
+ aud_set_string ("skins", skins_strents[i].name, * skins_strents[i].ptr);
}
static void
mainwin_font_set_cb()
{
- ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font);
+ textbox_set_font (mainwin_info, config.mainwin_use_bitmapfont ? NULL :
+ config.mainwin_font);
}
static void
@@ -286,214 +194,31 @@ playlist_font_set_cb()
{
AUDDBG("Attempt to set font \"%s\"\n", config.playlist_font);
ui_skinned_playlist_set_font (playlistwin_list, config.playlist_font);
- playlistwin_set_sinfo_font(config.playlist_font); /* propagate font setting to playlistwin_sinfo */
- playlistwin_update ();
}
static void
bitmap_fonts_cb()
{
- ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font);
- playlistwin_set_sinfo_font(config.playlist_font);
-
- if (config.playlist_shaded) {
- playlistwin_update ();
- ui_skinned_window_draw_all(playlistwin);
- }
-}
-
-static void
-show_wm_decorations_cb()
-{
- dock_window_set_decorated (mainwin);
- dock_window_set_decorated (playlistwin);
- dock_window_set_decorated (equalizerwin);
- mainwin_set_shape ();
- equalizerwin_set_shape ();
+ textbox_set_font (mainwin_info, config.mainwin_use_bitmapfont ? NULL :
+ config.mainwin_font);
}
static PreferencesWidget font_table_elements[] = {
- {WIDGET_FONT_BTN, N_("_Player:"), &config.mainwin_font, G_CALLBACK(mainwin_font_set_cb), NULL, FALSE, {.font_btn = {N_("Select main player window font:")}}},
- {WIDGET_FONT_BTN, N_("_Playlist:"), &config.playlist_font, G_CALLBACK(playlist_font_set_cb), NULL, FALSE, {.font_btn = {N_("Select playlist font:")}}},
-};
+ {WIDGET_FONT_BTN, N_("_Player:"), .cfg_type = VALUE_STRING, .cfg = & config.mainwin_font,
+ .callback = mainwin_font_set_cb, .data = {.font_btn = {N_("Select main "
+ "player window font:")}}},
+ {WIDGET_FONT_BTN, N_("_Playlist:"), .cfg_type = VALUE_STRING, .cfg = & config.playlist_font,
+ .callback = playlist_font_set_cb, .data = {.font_btn = {N_("Select playlist "
+ "font:")}}}};
static PreferencesWidget appearance_misc_widgets[] = {
{WIDGET_LABEL, N_("<b>_Fonts</b>"), NULL, NULL, NULL, FALSE},
- {WIDGET_TABLE, NULL, NULL, NULL, NULL, TRUE, {.table = {font_table_elements, G_N_ELEMENTS(font_table_elements)}}},
- {WIDGET_CHK_BTN, N_("Use Bitmap fonts if available"), &config.mainwin_use_bitmapfont, G_CALLBACK(bitmap_fonts_cb), N_("Use bitmap fonts if they are available. Bitmap fonts do not support Unicode strings."), FALSE},
- {WIDGET_LABEL, N_("<b>_Miscellaneous</b>"), NULL, NULL, NULL, FALSE},
- {WIDGET_CHK_BTN, N_("Show separators in playlist"), &config.show_separator_in_pl,
- (GCallback) playlistwin_update, 0, 0},
- {WIDGET_CHK_BTN, N_("Show window manager decoration"), &config.show_wm_decorations, G_CALLBACK(show_wm_decorations_cb),
- N_("This enables the window manager to show decorations for windows."), FALSE},
- {WIDGET_CHK_BTN, N_("Use two-way text scroller"), &config.twoway_scroll, NULL,
- N_("If selected, the file information text in the main window will scroll back and forth. If not selected, the text will only scroll in one direction."), FALSE},
- {WIDGET_CHK_BTN, N_("Disable inline gtk theme"), &config.disable_inline_gtk,
- reload_skin, NULL, FALSE},
- {WIDGET_CHK_BTN, N_("Random skin on play"), &config.random_skin_on_play, NULL, NULL, FALSE},
- {WIDGET_CHK_BTN, N_("Allow loading incomplete skins"), &config.allow_broken_skins, NULL,
- N_("If selected, audacious won't refuse loading broken skins. Use only if your favourite skin doesn't work"), FALSE},
-};
-
-static gboolean
-on_skin_view_realize(GtkTreeView * treeview,
- gpointer data)
-{
- skin_view_realize(treeview);
- skin_view_update ((GtkTreeView *) skin_view);
-
- return TRUE;
-}
-
-static void
-reload_skin()
-{
- /* reload the skin to apply the change */
- skin_reload_forced();
- ui_skinned_window_draw_all(mainwin);
- ui_skinned_window_draw_all(equalizerwin);
- ui_skinned_window_draw_all(playlistwin);
-}
-
-static void
-on_red_scale_value_changed(GtkHScale *scale, gpointer data)
-{
- config.colorize_r = gtk_range_get_value(GTK_RANGE(scale));
- reload_skin();
-}
-
-static void
-on_green_scale_value_changed(GtkHScale *scale, gpointer data)
-{
- config.colorize_g = gtk_range_get_value(GTK_RANGE(scale));
- reload_skin();
-}
-
-static void
-on_blue_scale_value_changed(GtkHScale *scale, gpointer data)
-{
- config.colorize_b = gtk_range_get_value(GTK_RANGE(scale));
- reload_skin();
-}
-
-static void
-on_colorize_close_clicked(GtkButton *button, gpointer data)
-{
- gtk_widget_destroy(colorize_settings);
- colorize_settings = NULL;
-}
-
-void
-create_colorize_settings(void)
-{
- GtkWidget *vbox;
- GtkWidget *label;
- GtkWidget *table;
- GtkWidget *hbuttonbox;
- GtkWidget *colorize_close;
-
- GtkWidget *green_label;
- GtkWidget *red_label;
- GtkWidget *blue_label;
-
- colorize_settings = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_container_set_border_width(GTK_CONTAINER(colorize_settings), 12);
- gtk_window_set_title(GTK_WINDOW(colorize_settings), _("Color Adjustment"));
- gtk_window_set_type_hint(GTK_WINDOW(colorize_settings), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- vbox = gtk_vbox_new(FALSE, 12);
- gtk_container_add(GTK_CONTAINER(colorize_settings), vbox);
-
- label = gtk_label_new(_("Audacious allows you to alter the color balance of the skinned UI. The sliders below will allow you to do this."));
- gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
- gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-
- table = gtk_table_new(3, 2, FALSE);
- gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0);
- gtk_table_set_row_spacings(GTK_TABLE(table), 6);
- gtk_table_set_col_spacings(GTK_TABLE(table), 12);
-
- blue_label = gtk_label_new(_("Blue"));
- gtk_table_attach(GTK_TABLE(table), blue_label, 0, 1, 2, 3,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify(GTK_LABEL(blue_label), GTK_JUSTIFY_RIGHT);
- gtk_misc_set_alignment(GTK_MISC(blue_label), 1, 0.5);
-
- green_label = gtk_label_new(_("Green"));
- gtk_table_attach(GTK_TABLE(table), green_label, 0, 1, 1, 2,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify(GTK_LABEL(green_label), GTK_JUSTIFY_RIGHT);
- gtk_misc_set_alignment(GTK_MISC(green_label), 1, 0.5);
-
- red_label = gtk_label_new(_("Red"));
- gtk_table_attach(GTK_TABLE(table), red_label, 0, 1, 0, 1,
- (GtkAttachOptions) (0),
- (GtkAttachOptions) (0), 0, 0);
- gtk_label_set_justify(GTK_LABEL(red_label), GTK_JUSTIFY_RIGHT);
- gtk_misc_set_alignment(GTK_MISC(red_label), 1, 0.5);
-
- red_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0)));
- gtk_table_attach(GTK_TABLE(table), red_scale, 1, 2, 0, 1,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
- gtk_scale_set_draw_value(GTK_SCALE(red_scale), FALSE);
- gtk_scale_set_digits(GTK_SCALE(red_scale), 3);
-
- green_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0)));
- gtk_table_attach(GTK_TABLE(table), green_scale, 1, 2, 1, 2,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
- gtk_scale_set_draw_value(GTK_SCALE(green_scale), FALSE);
- gtk_scale_set_digits(GTK_SCALE(green_scale), 3);
-
- blue_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0)));
- gtk_table_attach(GTK_TABLE(table), blue_scale, 1, 2, 2, 3,
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
- (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
- gtk_scale_set_draw_value(GTK_SCALE(blue_scale), FALSE);
- gtk_scale_set_digits(GTK_SCALE(blue_scale), 3);
-
- hbuttonbox = gtk_hbutton_box_new();
- gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox, FALSE, FALSE, 0);
- gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing(GTK_BOX(hbuttonbox), 6);
-
- colorize_close = gtk_button_new_from_stock("gtk-close");
- gtk_container_add(GTK_CONTAINER(hbuttonbox), colorize_close);
- GTK_WIDGET_SET_FLAGS(colorize_close, GTK_CAN_DEFAULT);
-
- g_signal_connect((gpointer) red_scale, "value_changed",
- G_CALLBACK(on_red_scale_value_changed),
- NULL);
- g_signal_connect((gpointer) green_scale, "value_changed",
- G_CALLBACK(on_green_scale_value_changed),
- NULL);
- g_signal_connect((gpointer) blue_scale, "value_changed",
- G_CALLBACK(on_blue_scale_value_changed),
- NULL);
- g_signal_connect((gpointer) colorize_close, "clicked",
- G_CALLBACK(on_colorize_close_clicked),
- NULL);
-
- gtk_range_set_value(GTK_RANGE(red_scale), config.colorize_r);
- gtk_range_set_value(GTK_RANGE(green_scale), config.colorize_g);
- gtk_range_set_value(GTK_RANGE(blue_scale), config.colorize_b);
-
- gtk_widget_grab_default(colorize_close);
- gtk_widget_show_all(colorize_settings);
-}
-
-static void
-on_colorize_button_clicked(GtkButton *button, gpointer data)
-{
- if (colorize_settings)
- gtk_window_present(GTK_WINDOW(colorize_settings));
- else
- create_colorize_settings();
-}
+ {WIDGET_TABLE, .child = TRUE, .data = {.table = {font_table_elements,
+ G_N_ELEMENTS (font_table_elements)}}},
+ {WIDGET_CHK_BTN, N_("Use bitmap fonts (supports ASCII only)"),
+ .cfg_type = VALUE_BOOLEAN, .cfg = & config.mainwin_use_bitmapfont, .callback = bitmap_fonts_cb},
+ {WIDGET_CHK_BTN, N_("Scroll song title in both directions"),
+ .cfg_type = VALUE_BOOLEAN, .cfg = & config.twoway_scroll, .callback = textbox_update_all}};
void
on_skin_view_drag_data_received(GtkWidget * widget,
@@ -503,40 +228,45 @@ on_skin_view_drag_data_received(GtkWidget * widget,
guint info, guint time,
gpointer user_data)
{
- mcs_handle_t *db;
- gchar *path;
-
- if (!selection_data->data) {
- g_warning("DND data string is NULL");
- return;
- }
-
- path = (gchar *) selection_data->data;
-
- /* FIXME: use a real URL validator/parser */
-
- if (str_has_prefix_nocase(path, "file:///")) {
- path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */
- path += 7;
- }
- else if (str_has_prefix_nocase(path, "file:")) {
- path += 5;
+ const gchar * data = (const gchar *) gtk_selection_data_get_data (selection_data);
+ g_return_if_fail (data);
+
+ const gchar * end = strchr (data, '\r');
+ if (! end) end = strchr (data, '\n');
+ if (! end) end = data + strlen (data);
+
+ gchar * path = g_strndup (data, end - data);
+
+ if (strstr (path, "://"))
+ {
+ gchar * path2 = uri_to_filename (path);
+ if (path2)
+ {
+ g_free (path);
+ path = path2;
+ }
}
if (file_is_archive(path)) {
- if (!aud_active_skin_load(path))
+ if (! active_skin_load (path))
return;
skin_install_skin(path);
- skin_view_update ((GtkTreeView *) widget);
- /* Change skin name in the config file */
- db = aud_cfg_db_open();
- aud_cfg_db_set_string(db, "skins", "skin", path);
- aud_cfg_db_close(db);
+ if (skin_view)
+ skin_view_update ((GtkTreeView *) skin_view);
}
}
-GtkWidget* skins_configure(void) {
+static GtkWidget * config_window = NULL;
+
+void skins_configure (void)
+{
+ if (config_window)
+ {
+ gtk_window_present ((GtkWindow *) config_window);
+ return;
+ }
+
GtkWidget *appearance_page_vbox;
GtkWidget *vbox37;
GtkWidget *vbox38;
@@ -544,7 +274,6 @@ GtkWidget* skins_configure(void) {
GtkWidget *alignment94;
GtkWidget *hbox13;
GtkWidget *label103;
- GtkWidget *colorspace_button;
GtkWidget *alignment95;
GtkWidget *skin_view_scrolled_window;
@@ -571,11 +300,6 @@ GtkWidget* skins_configure(void) {
gtk_label_set_use_markup (GTK_LABEL (label103), TRUE);
gtk_misc_set_alignment (GTK_MISC (label103), 0, 0);
- colorspace_button = gtk_button_new_with_label (_("Color adjustment ..."));
- gtk_button_set_image ((GtkButton *) colorspace_button,
- gtk_image_new_from_stock (GTK_STOCK_COLOR_PICKER, GTK_ICON_SIZE_BUTTON));
- gtk_box_pack_start (GTK_BOX (hbox13), colorspace_button, FALSE, FALSE, 0);
-
alignment95 = gtk_alignment_new (0.5, 0.5, 1, 1);
gtk_box_pack_start (GTK_BOX (vbox38), alignment95, TRUE, TRUE, 0);
gtk_widget_set_size_request (alignment95, -1, 172);
@@ -587,28 +311,47 @@ GtkWidget* skins_configure(void) {
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_SHADOW_IN);
skin_view = gtk_tree_view_new ();
+ skin_view_realize ((GtkTreeView *) skin_view);
+ skin_view_update ((GtkTreeView *) skin_view);
gtk_container_add (GTK_CONTAINER (skin_view_scrolled_window), skin_view);
gtk_widget_set_size_request (skin_view, -1, 100);
aud_create_widgets(GTK_BOX(vbox37), appearance_misc_widgets, G_N_ELEMENTS(appearance_misc_widgets));
- gtk_widget_show_all(appearance_page_vbox);
-
-
- g_signal_connect(G_OBJECT(colorspace_button), "clicked",
- G_CALLBACK(on_colorize_button_clicked),
- NULL);
g_signal_connect(skin_view, "drag-data-received",
G_CALLBACK(on_skin_view_drag_data_received),
NULL);
- aud_drag_dest_set(skin_view);
+ drag_dest_set(skin_view);
g_signal_connect(mainwin, "drag-data-received",
G_CALLBACK(mainwin_drag_data_received),
skin_view);
- g_signal_connect_after(G_OBJECT(skin_view), "realize",
- G_CALLBACK(on_skin_view_realize),
- NULL);
- return appearance_page_vbox;
+ GtkWidget * hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start ((GtkBox *) appearance_page_vbox, hbox, FALSE, FALSE, 0);
+
+ GtkWidget * button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+ g_signal_connect (button, "clicked", (GCallback) skins_configure_cleanup,
+ NULL);
+ gtk_widget_set_can_default (button, TRUE);
+ gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0);
+
+ config_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_signal_connect (config_window, "destroy", (GCallback)
+ gtk_widget_destroyed, & config_window);
+
+ gtk_window_set_type_hint ((GtkWindow *) config_window,
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_title ((GtkWindow *) config_window, _("Interface Preferences"));
+ gtk_window_set_resizable ((GtkWindow *) config_window, FALSE);
+ gtk_container_set_border_width ((GtkContainer *) config_window, 6);
+
+ gtk_container_add ((GtkContainer *) config_window, appearance_page_vbox);
+ gtk_widget_show_all (config_window);
+}
+
+void skins_configure_cleanup (void)
+{
+ if (config_window)
+ gtk_widget_destroy (config_window);
}
diff --git a/src/skins/skins_cfg.h b/src/skins/skins_cfg.h
index 54293a9..cb0a15e 100644
--- a/src/skins/skins_cfg.h
+++ b/src/skins/skins_cfg.h
@@ -21,40 +21,18 @@
#ifndef SKINS_CFG_H
#define SKINS_CFG_H
-#include <glib.h>
#include <gtk/gtk.h>
-#define MAINWIN_DEFAULT_POS_X 20
-#define MAINWIN_DEFAULT_POS_Y 20
-#define EQUALIZER_DEFAULT_POS_X 20
-#define EQUALIZER_DEFAULT_POS_Y 136
-#define PLAYLISTWIN_DEFAULT_WIDTH 275
-#define PLAYLISTWIN_DEFAULT_HEIGHT 232
-#define PLAYLISTWIN_DEFAULT_POS_X 295
-#define PLAYLISTWIN_DEFAULT_POS_Y 20
-
-
typedef struct {
gint player_x, player_y;
gint equalizer_x, equalizer_y;
gint playlist_x, playlist_y;
gint playlist_width, playlist_height;
- gboolean scaled, autoscroll;
+ gboolean autoscroll;
gboolean always_on_top, sticky;
- gfloat scale_factor;
- gboolean always_show_cb;
- gboolean close_dialog_open;
- gboolean close_dialog_add;
gchar *skin;
- gchar *filesel_path;
gboolean player_visible, equalizer_visible, playlist_visible;
gboolean player_shaded, equalizer_shaded, playlist_shaded;
- gboolean player_visible_prev, equalizer_visible_prev, playlist_visible_prev;
- gboolean dim_titlebar;
- gboolean show_wm_decorations;
- gboolean easy_move;
- gboolean allow_broken_skins;
- gboolean disable_inline_gtk;
gboolean analyzer_peaks;
gboolean twoway_scroll;
gint timer_mode;
@@ -64,16 +42,8 @@ typedef struct {
gint voiceprint_mode;
gint vu_mode;
gint analyzer_falloff, peaks_falloff;
- gint playlist_position;
- gint colorize_r; gint colorize_g; gint colorize_b;
- gboolean warn_about_win_visibility;
- gboolean warn_about_broken_gtk_engines;
gboolean mainwin_use_bitmapfont;
- gboolean eq_scaled_linked;
- gboolean show_separator_in_pl;
gchar *playlist_font, *mainwin_font;
- gboolean random_skin_on_play;
- gboolean no_confirm_playlist_delete;
} skins_cfg_t;
extern skins_cfg_t config;
@@ -83,7 +53,9 @@ void skins_cfg_free();
void skins_cfg_load();
void skins_cfg_save();
-GtkWidget* skins_configure(void);
+void skins_configure (void);
+void skins_configure_cleanup (void);
+
void on_skin_view_drag_data_received(GtkWidget * widget,
GdkDragContext * context,
gint x, gint y,
diff --git a/src/skins/surface.c b/src/skins/surface.c
new file mode 100644
index 0000000..5b30cf6
--- /dev/null
+++ b/src/skins/surface.c
@@ -0,0 +1,69 @@
+/*
+ * surface.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#include <gdk/gdk.h>
+
+#include "surface.h"
+
+cairo_surface_t * surface_new (int w, int h)
+{
+ return cairo_image_surface_create (CAIRO_FORMAT_RGB24, w, h);
+}
+
+cairo_surface_t * surface_new_from_file (const gchar * name)
+{
+ GError * error = NULL;
+ GdkPixbuf * p = gdk_pixbuf_new_from_file (name, & error);
+ if (error)
+ fprintf (stderr, "Error loading %s: %s.\n", name, error->message);
+ if (! p)
+ return NULL;
+
+ cairo_surface_t * surface = surface_new (gdk_pixbuf_get_width (p),
+ gdk_pixbuf_get_height (p));
+ cairo_t * cr = cairo_create (surface);
+
+ gdk_cairo_set_source_pixbuf (cr, p, 0, 0);
+ cairo_paint (cr);
+
+ cairo_destroy (cr);
+ g_object_unref (p);
+ return surface;
+}
+
+guint32 surface_get_pixel (cairo_surface_t * s, gint x, gint y)
+{
+ g_return_val_if_fail (x >= 0 && x < cairo_image_surface_get_width (s), 0);
+ g_return_val_if_fail (y >= 0 && y < cairo_image_surface_get_height (s), 0);
+
+ return * ((guint32 *) (cairo_image_surface_get_data (s) +
+ cairo_image_surface_get_stride (s) * y) + x) & 0xffffff;
+}
+
+void surface_copy_rect (cairo_surface_t * a, gint ax, gint ay, gint w, gint h,
+ cairo_surface_t * b, gint bx, gint by)
+{
+ cairo_t * cr = cairo_create (b);
+ cairo_set_source_surface (cr, a, bx - ax, by - ay);
+ cairo_rectangle (cr, bx, by, w, h);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+}
diff --git a/src/skins/surface.h b/src/skins/surface.h
new file mode 100644
index 0000000..d725c8e
--- /dev/null
+++ b/src/skins/surface.h
@@ -0,0 +1,34 @@
+/*
+ * surface.h
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
+ *
+ * Audacious 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, version 2 or version 3 of the License.
+ *
+ * Audacious 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+#ifndef SKINS_SURFACE_H
+#define SKINS_SURFACE_H
+
+#include <glib.h>
+#include <cairo.h>
+
+cairo_surface_t * surface_new (gint w, gint h);
+cairo_surface_t * surface_new_from_file (const gchar * name);
+guint32 surface_get_pixel (cairo_surface_t * s, gint x, gint y);
+void surface_copy_rect (cairo_surface_t * a, gint ax, gint ay, gint w, gint h,
+ cairo_surface_t * b, gint bx, gint by);
+
+#endif
diff --git a/src/skins/ui/carbon-menubar.ui b/src/skins/ui/carbon-menubar.ui
deleted file mode 100644
index 2d1e11b..0000000
--- a/src/skins/ui/carbon-menubar.ui
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
-
-<ui>
- <menubar name="carbon-menubar">
- <menu action="dummy" name="main-menu">
- <menu action="file">
- <menuitem action="play file" />
- <menuitem action="play location" />
- <separator />
- <menuitem action="preferences" />
- <menuitem action="quit" />
- </menu>
- <menu action="playback">
- <menuitem action="playback repeat" />
- <menuitem action="playback shuffle" />
- <menuitem action="playback no playlist advance" />
- <menuitem action="stop after current song" />
- <separator />
- <menuitem action="playback play" />
- <menuitem action="playback pause" />
- <menuitem action="playback stop" />
- <menuitem action="playback previous" />
- <menuitem action="playback next" />
- <separator />
- <menuitem action="jump to playlist start" />
- <separator />
- <menuitem action="ab set" />
- <menuitem action="ab clear" />
- <separator />
- <menuitem action="jump to file" />
- <menuitem action="jump to time" />
- <separator />
- <menuitem action="current track info" />
- </menu>
- <menu action="playlist">
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist select next" />
- <menuitem action="playlist select previous" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save default" />
- <separator />
- <menuitem action="playlist manager" />
- <separator />
- <menuitem action="playlist refresh" />
- <separator />
-<!-- <menuitem action="playlist delete" /> -->
- </menu>
- <menu action="view">
- <menuitem action="show player" />
- <menuitem action="show playlist editor" />
- <menuitem action="show equalizer" />
- <separator />
- <menuitem action="view time elapsed" />
- <menuitem action="view time remaining" />
- <separator />
- <menuitem action="view always on top" />
- <menuitem action="view put on all workspaces" />
- <menuitem action="autoscroll songname" />
- <separator />
- <menuitem action="roll up player" />
- <menuitem action="roll up playlist editor" />
- <menuitem action="roll up equalizer" />
- <separator />
- <menuitem action="view scaled" />
- <menuitem action="view easy move" />
- </menu>
- <menu action="visualization">
- <menu action="vismode">
- <menuitem action="vismode analyzer" />
- <menuitem action="vismode scope" />
- <menuitem action="vismode voiceprint" />
- <menuitem action="vismode off" />
- </menu>
- <menu action="anamode">
- <menuitem action="anamode normal" />
- <menuitem action="anamode fire" />
- <menuitem action="anamode vertical lines" />
- <separator />
- <menuitem action="anatype lines" />
- <menuitem action="anatype bars" />
- <separator />
- <menuitem action="anamode peaks" />
- </menu>
- <menu action="scomode">
- <menuitem action="scomode dot" />
- <menuitem action="scomode line" />
- <menuitem action="scomode solid" />
- </menu>
- <menu action="vprmode">
- <menuitem action="vprmode normal" />
- <menuitem action="vprmode fire" />
- <menuitem action="vprmode ice" />
- </menu>
- <menu action="wshmode">
- <menuitem action="wshmode normal" />
- <menuitem action="wshmode smooth" />
- </menu>
- <menu action="anafoff">
- <menuitem action="anafoff slowest" />
- <menuitem action="anafoff slow" />
- <menuitem action="anafoff medium" />
- <menuitem action="anafoff fast" />
- <menuitem action="anafoff fastest" />
- </menu>
- <menu action="peafoff">
- <menuitem action="peafoff slowest" />
- <menuitem action="peafoff slow" />
- <menuitem action="peafoff medium" />
- <menuitem action="peafoff fast" />
- <menuitem action="peafoff fastest" />
- </menu>
- </menu>
- <menu action="help">
- <menuitem action="about audacious" />
- </menu>
- </menu>
- </menubar>
-</ui>
diff --git a/src/skins/ui/mainwin.ui b/src/skins/ui/mainwin.ui
index e3cbc25..41182b9 100644
--- a/src/skins/ui/mainwin.ui
+++ b/src/skins/ui/mainwin.ui
@@ -73,8 +73,6 @@
<menuitem action="playback previous" />
<menuitem action="playback next" />
<separator />
- <menuitem action="jump to playlist start" />
- <separator />
<menuitem action="ab set" />
<menuitem action="ab clear" />
<separator />
@@ -92,16 +90,15 @@
<separator />
<menuitem action="playlist load" />
<menuitem action="playlist save" />
- <menuitem action="playlist save all" />
<separator />
<menuitem action="playlist manager" />
+ <menuitem action="queue manager" />
<separator />
<menuitem action="playlist refresh" />
- <separator />
-<!-- <menuitem action="playlist delete" /> -->
</menu>
<menu action="view">
<menuitem action="iface menu" />
+ <menuitem action="iface prefs" />
<separator />
<menuitem action="show player" />
<menuitem action="show playlist editor" />
@@ -117,9 +114,6 @@
<menuitem action="roll up player" />
<menuitem action="roll up playlist editor" />
<menuitem action="roll up equalizer" />
- <separator />
- <menuitem action="view scaled" />
- <menuitem action="view easy move" />
</menu>
<separator />
<menuitem action="plugins-menu" />
diff --git a/src/skins/ui/playlist.ui b/src/skins/ui/playlist.ui
index 244f922..9a1683f 100644
--- a/src/skins/ui/playlist.ui
+++ b/src/skins/ui/playlist.ui
@@ -1,100 +1,100 @@
<?xml version="1.0" standalone="yes" encoding="utf-8" ?>
<ui>
- <menubar name="playlist-menus">
- <menu action="dummy" name="playlist-rightclick-menu">
- <menuitem action="playlist track info" />
- <separator />
- <menuitem action="playlist copy"/>
- <menuitem action="playlist cut"/>
- <menuitem action="playlist paste"/>
- <separator/>
- <menuitem action="playlist remove selected" />
- <menuitem action="playlist remove unselected" />
- <menuitem action="playlist remove all" />
- <separator />
- <menuitem action="queue toggle" />
- <separator />
- <menuitem action="plugins-menu" />
- </menu>
+ <menubar name="playlist-menus">
+ <menu action="dummy" name="playlist-rightclick-menu">
+ <menuitem action="playlist track info" />
+ <separator />
+ <menuitem action="playlist copy"/>
+ <menuitem action="playlist cut"/>
+ <menuitem action="playlist paste"/>
+ <separator/>
+ <menuitem action="playlist remove selected" />
+ <menuitem action="playlist remove unselected" />
+ <menuitem action="playlist remove all" />
+ <separator />
+ <menuitem action="queue toggle" />
+ <separator />
+ <menuitem action="plugins-menu" />
+ </menu>
- <menu action="dummy" name="add-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist add url" />
- <menuitem action="playlist add files" />
- </menu>
+ <menu action="dummy" name="add-menu">
+ <menuitem action="plugins-menu" />
+ <separator />
+ <menuitem action="playlist add url" />
+ <menuitem action="playlist add files" />
+ </menu>
- <menu action="dummy" name="del-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist remove all" />
- <menuitem action="playlist clear queue" />
- <separator />
- <menuitem action="playlist remove unavailable" />
- <menu action="playlist remove dups menu">
- <menuitem action="playlist remove dups by title" />
- <menuitem action="playlist remove dups by filename" />
- <menuitem action="playlist remove dups by full path" />
- </menu>
- <separator />
- <menuitem action="playlist remove unselected" />
- <menuitem action="playlist remove selected" />
- </menu>
+ <menu action="dummy" name="del-menu">
+ <menuitem action="plugins-menu" />
+ <separator />
+ <menuitem action="playlist remove all" />
+ <menuitem action="playlist clear queue" />
+ <separator />
+ <menuitem action="playlist remove unavailable" />
+ <menu action="playlist remove dups menu">
+ <menuitem action="playlist remove dups by title" />
+ <menuitem action="playlist remove dups by filename" />
+ <menuitem action="playlist remove dups by full path" />
+ </menu>
+ <separator />
+ <menuitem action="playlist remove unselected" />
+ <menuitem action="playlist remove selected" />
+ </menu>
- <menu action="dummy" name="select-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist search and select" />
- <separator />
- <menuitem action="playlist invert selection" />
- <separator />
- <menuitem action="playlist select none" />
- <menuitem action="playlist select all" />
- </menu>
+ <menu action="dummy" name="select-menu">
+ <menuitem action="plugins-menu" />
+ <separator />
+ <menuitem action="playlist search and select" />
+ <separator />
+ <menuitem action="playlist invert selection" />
+ <separator />
+ <menuitem action="playlist select none" />
+ <menuitem action="playlist select all" />
+ </menu>
- <menu action="dummy" name="misc-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist randomize list" />
- <menuitem action="playlist reverse list" />
- <separator />
- <menu action="playlist sort menu">
- <menuitem action="playlist sort by title" />
- <menuitem action="playlist sort by album" />
- <menuitem action="playlist sort by artist" />
- <menuitem action="playlist sort by filename" />
- <menuitem action="playlist sort by full path" />
- <menuitem action="playlist sort by date" />
- <menuitem action="playlist sort by track number" />
- </menu>
- <menu action="playlist sort selected menu">
- <menuitem action="playlist sort selected by title" />
- <menuitem action="playlist sort selected by album" />
- <menuitem action="playlist sort selected by artist" />
- <menuitem action="playlist sort selected by filename" />
- <menuitem action="playlist sort selected by full path" />
- <menuitem action="playlist sort selected by date" />
- <menuitem action="playlist sort selected by track number" />
- </menu>
- </menu>
+ <menu action="dummy" name="misc-menu">
+ <menuitem action="plugins-menu" />
+ <separator />
+ <menuitem action="playlist randomize list" />
+ <menuitem action="playlist reverse list" />
+ <separator />
+ <menu action="playlist sort menu">
+ <menuitem action="playlist sort by title" />
+ <menuitem action="playlist sort by album" />
+ <menuitem action="playlist sort by artist" />
+ <menuitem action="playlist sort by filename" />
+ <menuitem action="playlist sort by full path" />
+ <menuitem action="playlist sort by date" />
+ <menuitem action="playlist sort by track number" />
+ </menu>
+ <menu action="playlist sort selected menu">
+ <menuitem action="playlist sort selected by title" />
+ <menuitem action="playlist sort selected by album" />
+ <menuitem action="playlist sort selected by artist" />
+ <menuitem action="playlist sort selected by filename" />
+ <menuitem action="playlist sort selected by full path" />
+ <menuitem action="playlist sort selected by date" />
+ <menuitem action="playlist sort selected by track number" />
+ </menu>
+ </menu>
- <menu action="dummy" name="playlist-menu">
- <menuitem action="plugins-menu" />
- <separator />
- <menuitem action="playlist new" />
- <menuitem action="playlist delete" />
- <separator />
- <menuitem action="playlist select next" />
- <menuitem action="playlist select previous" />
- <separator />
- <menuitem action="playlist load" />
- <menuitem action="playlist save" />
- <menuitem action="playlist save all" />
- <separator />
- <menuitem action="playlist manager" />
- <separator />
- <menuitem action="playlist refresh" />
- </menu>
- </menubar>
+ <menu action="dummy" name="playlist-menu">
+ <menuitem action="plugins-menu" />
+ <separator />
+ <menuitem action="playlist new" />
+ <menuitem action="playlist delete" />
+ <separator />
+ <menuitem action="playlist select next" />
+ <menuitem action="playlist select previous" />
+ <separator />
+ <menuitem action="playlist load" />
+ <menuitem action="playlist save" />
+ <separator />
+ <menuitem action="playlist manager" />
+ <menuitem action="queue manager" />
+ <separator />
+ <menuitem action="playlist refresh" />
+ </menu>
+ </menubar>
</ui>
diff --git a/src/skins/ui_dock.c b/src/skins/ui_dock.c
index cf7d85b..c3eb0a3 100644
--- a/src/skins/ui_dock.c
+++ b/src/skins/ui_dock.c
@@ -1,383 +1,384 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team
+/*
+ * ui_dock.c
+ * Copyright 2011 John Lindgren
+ *
+ * This file is part of Audacious.
*
- * Based on BMP:
- * Copyright (C) 2003-2004 BMP development team.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * Based on XMMS:
- * Copyright (C) 1998-2003 XMMS development team.
+ * Audacious 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.
*
- * 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; under version 3 of the License.
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
*
- * 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.
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
+ */
+
+/*
+ * Rough outline
+ * =============
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses>.
+ * When moving a window:
+ * 1. If this is the main window, find (recursively) the windows docked to it.
+ * 2. Adjust the offsets to snap to another window (not docked) or a screen edge.
+ * 3. Move the docked windows by the same offsets.
*
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * When resizing a window:
+ * 1. Find (recursively) the windows docked to the bottom edge of this one.
+ * If we are making the window shorter, exclude windows that are docked to
+ * the bottom of another window (not docked) to avoid overlap.
+ * 2. Move the docked windows by the difference in window height.
+ * 3. Repeat the process for windows docked to the right edge of this one.
*/
-#include "ui_dock.h"
-#include "skins_cfg.h"
-#include <gdk/gdk.h>
#include <stdlib.h>
-#include <audacious/plugin.h>
-#include "ui_skinned_window.h"
-#include "platform/smartinclude.h"
-#include "util.h"
+#include "ui_dock.h"
#define SNAP_DISTANCE 10
-static GList *dock_window_list = NULL;
-
-struct _DockedWindow {
- GtkWindow *w;
- gint offset_x, offset_y;
+enum {
+ DOCK_TYPE_LEFT = 1 << 0,
+ DOCK_TYPE_RIGHT = 1 << 1,
+ DOCK_TYPE_TOP = 1 << 2,
+ DOCK_TYPE_BOTTOM = 1 << 3
};
-typedef struct _DockedWindow DockedWindow;
+#define DOCK_TYPE_ANY (DOCK_TYPE_LEFT | DOCK_TYPE_RIGHT | DOCK_TYPE_TOP | DOCK_TYPE_BOTTOM)
+
+typedef struct {
+ GtkWidget * window;
+ gint * x, * y;
+ gint w, h;
+ gboolean main;
+ gboolean docked;
+} DockWindow;
+static GSList * windows;
+static gint last_x, last_y;
-static gint
-docked_list_compare(DockedWindow * a, DockedWindow * b)
+static inline gint least_abs (gint a, gint b)
{
- if (a->w == b->w)
- return 0;
- return 1;
+ return (abs (a) < abs (b)) ? a : b;
}
-static void
-snap_edge(gint * x, gint * y, gint w, gint h, gint bx, gint by,
- gint bw, gint bh)
+static DockWindow * find_window (GSList * list, GtkWidget * window)
{
- gint sd = SNAP_DISTANCE;
-
- if ((*x + w > bx - sd) && (*x + w < bx + sd) &&
- (*y > by - h - sd) && (*y < by + bh + sd)) {
- *x = bx - w;
- if ((*y > by - sd) && (*y < by + sd))
- *y = by;
- if ((*y + h > by + bh - sd) && (*y + h < by + bh + sd))
- *y = by + bh - h;
- }
- if ((*x > bx + bw - sd) && (*x < bx + bw + sd) &&
- (*y > by - h - sd) && (*y < by + bh + sd)) {
- *x = bx + bw;
- if ((*y > by - sd) && (*y < by + sd))
- *y = by;
- if ((*y + h > by + bh - sd) && (*y + h < by + bh + sd))
- *y = by + bh - h;
+ for (GSList * node = list; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (dw->window == window)
+ return dw;
}
+
+ return NULL;
}
-static void
-snap(gint * x, gint * y, gint w, gint h, gint bx, gint by, gint bw, gint bh)
+void dock_add_window (GtkWidget * window, gint * x, gint * y, gint w, gint h,
+ gboolean main)
{
- snap_edge(x, y, w, h, bx, by, bw, bh);
- snap_edge(y, x, h, w, by, bx, bh, bw);
+ DockWindow * dw = g_slice_new0 (DockWindow);
+ dw->window = window;
+ dw->x = x;
+ dw->y = y;
+ dw->w = w;
+ dw->h = h;
+ dw->main = main;
+
+ windows = g_slist_prepend (windows, dw);
}
-static void
-calc_snap_offset(GList * dlist, GList * wlist, gint x, gint y,
- gint * off_x, gint * off_y)
+void dock_remove_window (GtkWidget * window)
{
- gint nx, ny, nw, nh, sx, sy, sw, sh;
- GtkWindow *w;
- GList *dnode, *wnode;
- DockedWindow temp, *dw;
-
- *off_x = 0;
- *off_y = 0;
-
- /*
- * FIXME: Why not break out of the loop when we find someting
- * to snap to?
- */
- for (dnode = dlist; dnode; dnode = g_list_next(dnode)) {
- dw = dnode->data;
- gtk_window_get_size(dw->w, &nw, &nh);
-
- nx = dw->offset_x + *off_x + x;
- ny = dw->offset_y + *off_y + y;
-
- /* Snap to screen edges */
- if (abs(nx) < SNAP_DISTANCE)
- *off_x -= nx;
- if (abs(ny) < SNAP_DISTANCE)
- *off_y -= ny;
- if (abs(nx + nw - gdk_screen_width()) < SNAP_DISTANCE)
- *off_x -= nx + nw - gdk_screen_width();
- if (abs(ny + nh - gdk_screen_height()) < SNAP_DISTANCE)
- *off_y -= ny + nh - gdk_screen_height();
-
- /* Snap to other windows */
- for (wnode = wlist; wnode; wnode = g_list_next(wnode)) {
- temp.w = wnode->data;
- if (g_list_find_custom
- (dlist, &temp, (GCompareFunc) docked_list_compare))
- /* These windows are already docked */
- continue;
+ DockWindow * dw = find_window (windows, window);
+ g_return_if_fail (dw);
- w = GTK_WINDOW(wnode->data);
- gtk_window_get_position(w, &sx, &sy);
- gtk_window_get_size(w, &sw, &sh);
-
- nx = dw->offset_x + *off_x + x;
- ny = dw->offset_y + *off_y + y;
-
- snap(&nx, &ny, nw, nh, sx, sy, sw, sh);
+ windows = g_slist_remove (windows, dw);
+ g_slice_free (DockWindow, dw);
+}
- *off_x += nx - (dw->offset_x + *off_x + x);
- *off_y += ny - (dw->offset_y + *off_y + y);
- }
+static void dock_sync (void)
+{
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ gtk_window_get_position ((GtkWindow *) dw->window, dw->x, dw->y);
}
}
+static void clear_docked (void)
+{
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ dw->docked = FALSE;
+ }
+}
-static gboolean
-is_docked(gint a_x, gint a_y, gint a_w, gint a_h,
- gint b_x, gint b_y, gint b_w, gint b_h)
+static gboolean is_docked (DockWindow * dw, DockWindow * base, gint type)
{
- if (((a_x == b_x + b_w) || (a_x + a_w == b_x)) &&
- (b_y + b_h >= a_y) && (b_y <= a_y + a_h))
+ if ((type & DOCK_TYPE_LEFT) && * dw->x + dw->w == * base->x)
return TRUE;
-
- if (((a_y == b_y + b_h) || (a_y + a_h == b_y)) &&
- (b_x >= a_x - b_w) && (b_x <= a_x + a_w))
+ if ((type & DOCK_TYPE_RIGHT) && * dw->x == * base->x + base->w)
+ return TRUE;
+ if ((type & DOCK_TYPE_TOP) && * dw->y + dw->h == * base->y)
+ return TRUE;
+ if ((type & DOCK_TYPE_BOTTOM) && * dw->y == * base->y + base->h)
return TRUE;
return FALSE;
}
-/*
- * Builds a list of all windows that are docked to the window "w".
- * Recursively adds all windows that are docked to the windows that are
- * docked to "w" and so on...
- * FIXME: init_off_? ?
- */
-
-static GList *
-get_docked_list(GList * dlist, GList * wlist, GtkWindow * w,
- gint init_off_x, gint init_off_y)
+static void find_docked (DockWindow * base, gint type)
{
- GList *node;
- DockedWindow *dwin, temp;
- gint w_x, w_y, w_width, w_height;
- gint t_x, t_y, t_width, t_height;
-
-
- gtk_window_get_position(w, &w_x, &w_y);
- gtk_window_get_size(w, &w_width, &w_height);
- if (!dlist) {
- dwin = g_new0(DockedWindow, 1);
- dwin->w = w;
- dlist = g_list_append(dlist, dwin);
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (dw->docked || dw == base)
+ continue;
+
+ dw->docked = is_docked (dw, base, type);
+ if (dw->docked)
+ find_docked (dw, type);
}
+}
- for (node = wlist; node; node = g_list_next(node)) {
- temp.w = node->data;
- if (g_list_find_custom
- (dlist, &temp, (GCompareFunc) docked_list_compare))
- continue;
+static void invert_docked (void)
+{
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ dw->docked = ! dw->docked;
+ }
+}
- gtk_window_get_position(GTK_WINDOW(node->data), &t_x, &t_y);
- gtk_window_get_size(GTK_WINDOW(node->data), &t_width, &t_height);
- if (is_docked
- (w_x, w_y, w_width, w_height, t_x, t_y, t_width, t_height)) {
- dwin = g_new0(DockedWindow, 1);
- dwin->w = node->data;
+void dock_set_size (GtkWidget * window, gint w, gint h)
+{
+ DockWindow * base = find_window (windows, window);
+ g_return_if_fail (base);
+
+ dock_sync ();
+
+ if (h != base->h)
+ {
+ /* 1. Find the windows docked below this one. */
+
+ clear_docked ();
+ find_docked (base, DOCK_TYPE_BOTTOM);
+
+ if (h < base->h)
+ {
+ /* 2. This part is tricky. By flipping the docked flag on all the
+ windows, we consider the windows not docked to this one as a
+ docked group. We then add (recursively) any other windows
+ docked to these ones (i.e. the windows docked to these *and*
+ to the one being shortened). The one being shortened must be
+ excluded from the search. Since at this point it is marked as
+ docked, it is excluded automatically. Finally, flipping the
+ docked flag back again leaves us with only the windows docked
+ to the one being shortened and not to any others. */
+
+ invert_docked ();
+
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked || dw == base)
+ continue;
+
+ find_docked (dw, DOCK_TYPE_BOTTOM);
+ }
+
+ invert_docked ();
+ }
- dwin->offset_x = t_x - w_x + init_off_x;
- dwin->offset_y = t_y - w_y + init_off_y;
+ /* 3. Move the docked windows by the difference in height. */
- dlist = g_list_append(dlist, dwin);
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
- dlist =
- get_docked_list(dlist, wlist, dwin->w, dwin->offset_x,
- dwin->offset_y);
+ * dw->y += h - base->h;
+ gtk_window_move ((GtkWindow *) dw->window, * dw->x, * dw->y);
}
}
- return dlist;
-}
-static void
-free_docked_list(GList * dlist)
-{
- GList *node;
+ if (w != base->w)
+ {
+ /* 4. Repeat the process for the windows docked to the right. */
- for (node = dlist; node; node = g_list_next(node))
- g_free(node->data);
- g_list_free(dlist);
-}
+ clear_docked ();
+ find_docked (base, DOCK_TYPE_RIGHT);
-static void move_skinned_window (SkinnedWindow * window, int x, int y)
-{
- gtk_window_move (GTK_WINDOW (window), x, y);
+ if (w < base->w)
+ {
+ invert_docked ();
- *(window->x) = x;
- *(window->y) = y;
-}
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked || dw == base)
+ continue;
-static void
-docked_list_move(GList * list, gint x, gint y)
-{
- GList *node;
- DockedWindow *dw;
+ find_docked (dw, DOCK_TYPE_RIGHT);
+ }
+
+ invert_docked ();
+ }
+
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
- for (node = list; node; node = g_list_next(node)) {
- dw = node->data;
- move_skinned_window (SKINNED_WINDOW (dw->w), x + dw->offset_x,
- y + dw->offset_y);
+ * dw->x += w - base->w;
+ gtk_window_move ((GtkWindow *) dw->window, * dw->x, * dw->y);
+ }
}
-}
-static void move_attached (GtkWindow * window, GList * * others, int offset) {
- int x, y, width, height, x2, y2;
- GList * move, * scan, * next;
- gtk_window_get_position (window, & x, & y);
- gtk_window_get_size (window, & width, & height);
- move = 0;
- for (scan = * others; scan; scan = next) {
- next = g_list_next (scan);
- gtk_window_get_position (scan->data, & x2, & y2);
- if (y2 == y + height) {
- * others = g_list_remove_link (* others, scan);
- move = g_list_concat (move, scan);
- }
- }
- for (; move; move = g_list_delete_link (move, move))
- move_attached (move->data, others, offset);
- move_skinned_window (SKINNED_WINDOW (window), x, y + offset);
+ /* 5. Set the window size. (The actual resize is done by the caller.) */
+
+ base->w = w;
+ base->h = h;
}
-void dock_shade(GList *window_list, GtkWindow *window, gint new_height)
+void dock_move_start (GtkWidget * window, gint x, gint y)
{
- gint x, y, width, height, x2, y2;
- GList *move, *others, *scan, *next;
-
- gtk_window_get_size(window, &width, &height);
-
- if (! config.show_wm_decorations) {
- gtk_window_get_position (window, & x, & y);
- others = g_list_copy (window_list);
- others = g_list_remove (others, window);
- move = 0;
- for (scan = others; scan; scan = next) {
- next = g_list_next (scan);
- gtk_window_get_position (scan->data, & x2, & y2);
- if (y2 == y + height) {
- others = g_list_remove_link (others, scan);
- move = g_list_concat (move, scan);
- }
- }
- for (; move; move = g_list_delete_link (move, move))
- move_attached (move->data, & others, new_height - height);
- g_list_free (others);
- }
-
- resize_window((GtkWidget *) window, width, new_height);
+ DockWindow * dw = find_window (windows, window);
+ g_return_if_fail (dw);
+
+ dock_sync ();
+
+ last_x = x;
+ last_y = y;
+
+ /* 1. If this is the main window, find the windows docked to it. */
+
+ clear_docked ();
+ dw->docked = TRUE;
+ if (dw->main)
+ find_docked (dw, DOCK_TYPE_ANY);
}
-void
-dock_move_press(GList * window_list, GtkWindow * w,
- GdkEventButton * event, gboolean move_list)
+void dock_move (gint x, gint y)
{
- gint mx, my;
- DockedWindow *dwin;
+ gint hori, vert;
- if (config.show_wm_decorations)
+ if (x == last_x && y == last_y)
return;
- gtk_window_present(w);
- mx = event->x;
- my = event->y;
- g_object_set_data(G_OBJECT(w), "move_offset_x", GINT_TO_POINTER(mx));
- g_object_set_data(G_OBJECT(w), "move_offset_y", GINT_TO_POINTER(my));
- if (move_list)
- g_object_set_data(G_OBJECT(w), "docked_list",
- get_docked_list(NULL, window_list, w, 0, 0));
- else {
- dwin = g_new0(DockedWindow, 1);
- dwin->w = w;
- g_object_set_data(G_OBJECT(w), "docked_list",
- g_list_append(NULL, dwin));
+ /* 2. Nominally move all the windows in the group the requested distance,
+ and update the reference point. */
+
+ hori = x - last_x;
+ vert = y - last_y;
+
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
+
+ * dw->x += hori;
+ * dw->y += vert;
}
- g_object_set_data(G_OBJECT(w), "window_list", window_list);
- g_object_set_data(G_OBJECT(w), "is_moving", GINT_TO_POINTER(1));
-}
-void
-dock_move_motion(GtkWindow * w, GdkEventMotion * event)
-{
- gint offset_x, offset_y, x, y;
- GList *dlist;
- GList *window_list;
+ last_x = x;
+ last_y = y;
- if (!g_object_get_data(G_OBJECT(w), "is_moving"))
- return;
- offset_x =
- GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), "move_offset_x"));
- offset_y =
- GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), "move_offset_y"));
- dlist = g_object_get_data(G_OBJECT(w), "docked_list");
- window_list = g_object_get_data(G_OBJECT(w), "window_list");
+ /* 3. Find the least snap distance we must move so that
+ (a) a window in the group is touching a screen edge or
+ (b) a window in the group is touching a window not in the group. */
- x = event->x_root - offset_x;
- y = event->y_root - offset_y;
+ hori = SNAP_DISTANCE + 1;
+ vert = SNAP_DISTANCE + 1;
- calc_snap_offset(dlist, window_list, x, y, &offset_x, &offset_y);
- x += offset_x;
- y += offset_y;
+ GdkScreen * screen = gdk_screen_get_default ();
+ gint monitors = gdk_screen_get_n_monitors (screen);
- docked_list_move(dlist, x, y);
-}
+ for (gint m = 0; m < monitors; m ++)
+ {
+ GdkRectangle rect;
+ gdk_screen_get_monitor_geometry (screen, m, & rect);
-void
-dock_move_release(GtkWindow * w)
-{
- GList *dlist;
- g_object_set_data(G_OBJECT(w), "is_moving", NULL);
- g_object_set_data(G_OBJECT(w), "move_offset_x", NULL);
- g_object_set_data(G_OBJECT(w), "move_offset_y", NULL);
- if ((dlist = g_object_get_data(G_OBJECT(w), "docked_list")) != NULL)
- free_docked_list(dlist);
- g_object_set_data(G_OBJECT(w), "docked_list", NULL);
- g_object_set_data(G_OBJECT(w), "window_list", NULL);
-}
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
-gboolean
-dock_is_moving(GtkWindow * w)
-{
- if (g_object_get_data(G_OBJECT(w), "is_moving"))
- return TRUE;
- return FALSE;
-}
+ /* We only test half the combinations here, as it is not very
+ helpful to have e.g. the right edge of a window touching the left
+ edge of a monitor (think about it). */
-void dock_window_set_decorated (GtkWidget * widget)
-{
- if (config.show_wm_decorations)
- dock_window_list = g_list_remove (dock_window_list, widget);
- else
- dock_window_list = g_list_append (dock_window_list, widget);
+ hori = least_abs (hori, rect.x - * dw->x);
+ hori = least_abs (hori, (rect.x + rect.width) - (* dw->x + dw->w));
+ vert = least_abs (vert, rect.y - * dw->y);
+ vert = least_abs (vert, (rect.y + rect.height) - (* dw->y + dw->h));
+ }
+ }
- gtk_window_set_decorated (GTK_WINDOW (widget), config.show_wm_decorations);
-}
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
-GList *
-get_dock_window_list() {
- return dock_window_list;
-}
+ for (GSList * node2 = windows; node2; node2 = node2->next)
+ {
+ DockWindow * dw2 = node2->data;
+ if (dw2->docked)
+ continue;
-void clear_dock_window_list (void)
-{
- g_list_free (dock_window_list);
- dock_window_list = NULL;
+ hori = least_abs (hori, * dw2->x - * dw->x);
+ hori = least_abs (hori, * dw2->x - (* dw->x + dw->w));
+ hori = least_abs (hori, (* dw2->x + dw2->w) - * dw->x);
+ hori = least_abs (hori, (* dw2->x + dw2->w) - (* dw->x + dw->w));
+ vert = least_abs (vert, * dw2->y - * dw->y);
+ vert = least_abs (vert, * dw2->y - (* dw->y + dw->h));
+ vert = least_abs (vert, (* dw2->y + dw2->h) - * dw->y);
+ vert = least_abs (vert, (* dw2->y + dw2->h) - (* dw->y + dw->h));
+ }
+ }
+
+ /* 4. If the snap distances are within range, nominally move all the windows
+ in the group, and update the reference point again. */
+
+ if (abs (hori) > SNAP_DISTANCE)
+ hori = 0;
+ if (abs (vert) > SNAP_DISTANCE)
+ vert = 0;
+
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
+
+ * dw->x += hori;
+ * dw->y += vert;
+ }
+
+ last_x += hori;
+ last_y += vert;
+
+ /* 5. Really move the windows. */
+
+ for (GSList * node = windows; node; node = node->next)
+ {
+ DockWindow * dw = node->data;
+ if (! dw->docked)
+ continue;
+
+ gtk_window_move ((GtkWindow *) dw->window, * dw->x, * dw->y);
+ }
}
diff --git a/src/skins/ui_dock.h b/src/skins/ui_dock.h
index 068f9ce..2bccaf4 100644
--- a/src/skins/ui_dock.h
+++ b/src/skins/ui_dock.h
@@ -1,46 +1,36 @@
-/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team
+/*
+ * ui_dock.h
+ * Copyright 2011 John Lindgren
*
- * Based on BMP:
- * Copyright (C) 2003-2004 BMP development team.
+ * This file is part of Audacious.
*
- * Based on XMMS:
- * Copyright (C) 1998-2003 XMMS development team.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * 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; under version 3 of the License.
+ * Audacious 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.
*
- * 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
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
*/
-#ifndef DOCK_H
-#define DOCK_H
+#ifndef SKINS_UI_DOCK_H
+#define SKINS_UI_DOCK_H
-#include <glib.h>
#include <gtk/gtk.h>
-void dock_set_uposition(GtkWindow * widget, gint x, gint y);
-void dock_move_press(GList * window_list, GtkWindow * w,
- GdkEventButton * event, gboolean move_list);
-void dock_move_motion(GtkWindow * w, GdkEventMotion * event);
-void dock_move_release(GtkWindow * w);
-void dock_get_widget_pos(GtkWindow * w, gint * x, gint * y);
-gboolean dock_is_moving(GtkWindow * w);
-void dock_shade(GList *window_list, GtkWindow *widget, gint new_height);
+void dock_add_window (GtkWidget * window, gint * x, gint * y, gint w, gint h,
+ gboolean main);
+void dock_remove_window (GtkWidget * window);
-void dock_window_set_decorated (GtkWidget * widget);
+void dock_set_size (GtkWidget * window, gint w, gint h);
-GList *get_dock_window_list();
-void clear_dock_window_list (void);
+void dock_move_start (GtkWidget * window, gint x, gint y);
+void dock_move (gint x, gint y);
#endif
diff --git a/src/skins/ui_equalizer.c b/src/skins/ui_equalizer.c
index 86c8752..f52f88a 100644
--- a/src/skins/ui_equalizer.c
+++ b/src/skins/ui_equalizer.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team.
+ * Copyright (C) 2005-2011 Audacious development team.
*
* Based on BMP:
* Copyright (C) 2003-2004 BMP development team.
@@ -23,51 +23,43 @@
* Audacious or using our public API to be a derived work.
*/
-/*#define AUD_DEBUG*/
-
-#include "config.h"
-
-#include "ui_equalizer.h"
-
-#include <glib.h>
#include <gtk/gtk.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include "platform/smartinclude.h"
-#include "ui_skin.h"
-#include "ui_manager.h"
-#include "actions-equalizer.h"
-#include "util.h"
-#include "ui_main.h"
-#include "ui_playlist.h"
-
-#include <audacious/audconfig.h>
#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <libaudcore/hook.h>
#include <libaudgui/libaudgui-gtk.h>
-#include "images/audacious_eq.xpm"
-
-#include "ui_dock.h"
-#include "ui_skinned_window.h"
+#include "actions-equalizer.h"
+#include "config.h"
+#include "skins_cfg.h"
+#include "ui_equalizer.h"
+#include "ui_main.h"
+#include "ui_manager.h"
#include "ui_skinned_button.h"
-#include "ui_skinned_horizontal_slider.h"
-#include "ui_skinned_equalizer_slider.h"
#include "ui_skinned_equalizer_graph.h"
-#include "skins_cfg.h"
+#include "ui_skinned_equalizer_slider.h"
+#include "ui_skinned_horizontal_slider.h"
+#include "ui_skinned_window.h"
+#include "util.h"
+
+#include "images/audacious_eq.xpm"
enum PresetViewCols {
PRESET_VIEW_COL_NAME,
PRESET_VIEW_N_COLS
};
+static gfloat equalizerwin_get_preamp (void);
+static gfloat equalizerwin_get_band (gint band);
+static void equalizerwin_set_preamp (gfloat preamp);
+static void equalizerwin_set_band (gint band, gfloat value);
+
GtkWidget *equalizerwin;
-GtkWidget *equalizerwin_graph;
+static GtkWidget *equalizerwin_graph;
static GtkWidget *equalizerwin_load_window = NULL;
static GtkWidget *equalizerwin_load_auto_window = NULL;
@@ -86,17 +78,9 @@ static GtkWidget *equalizerwin_presets;
static GtkWidget *equalizerwin_preamp,*equalizerwin_bands[10];
static GtkWidget *equalizerwin_volume, *equalizerwin_balance;
-static GList *equalizer_presets = NULL, *equalizer_auto_presets = NULL;
+static Index * equalizer_presets = NULL, * equalizer_auto_presets = NULL;
-EqualizerPreset *
-equalizer_preset_new(const gchar * name)
-{
- EqualizerPreset *preset = g_new0(EqualizerPreset, 1);
- preset->name = g_strdup(name);
- return preset;
-}
-
-void
+static void
equalizer_preset_free(EqualizerPreset * preset)
{
if (!preset)
@@ -108,69 +92,13 @@ equalizer_preset_free(EqualizerPreset * preset)
void equalizerwin_set_shape (void)
{
- if (config.show_wm_decorations)
- gtk_widget_shape_combine_mask (equalizerwin, 0, 0, 0);
- else
- gtk_widget_shape_combine_mask (equalizerwin, skin_get_mask
- (aud_active_skin, config.equalizer_shaded ? SKIN_MASK_EQ_SHADE :
- SKIN_MASK_EQ), 0, 0);
-}
-
-void
-equalizerwin_set_scaled(gboolean ds)
-{
- gint height;
- GList * list;
- SkinnedWindow * skinned;
- GtkFixed * fixed;
- GtkFixedChild * child;
+ gint id = config.equalizer_shaded ? SKIN_MASK_EQ_SHADE : SKIN_MASK_EQ;
- if (config.equalizer_shaded)
- height = 14;
- else
- height = 116;
-
- if (config.scaled)
- resize_window(equalizerwin, 275 * config.scale_factor, height *
- config.scale_factor);
- else
- resize_window(equalizerwin, 275, height);
-
- skinned = (SkinnedWindow *) equalizerwin;
- fixed = (GtkFixed *) skinned->normal;
-
- for (list = fixed->children; list; list = list->next)
- {
- child = (GtkFixedChild *) list->data;
- g_signal_emit_by_name ((GObject *) child->widget, "toggle-scaled");
- }
-
- fixed = (GtkFixed *) skinned->shaded;
-
- for (list = fixed->children; list; list = list->next)
- {
- child = (GtkFixedChild *) list->data;
- g_signal_emit_by_name ((GObject *) child->widget, "toggle-scaled");
- }
-
- equalizerwin_set_shape ();
-}
-
-void
-equalizerwin_set_shade_menu_cb(gboolean shaded)
-{
- config.equalizer_shaded = shaded;
- ui_skinned_window_set_shade(equalizerwin, shaded);
-
- if (shaded) {
- dock_shade(get_dock_window_list(), GTK_WINDOW(equalizerwin),
- 14 * EQUALIZER_SCALE_FACTOR);
- } else {
- dock_shade(get_dock_window_list(), GTK_WINDOW(equalizerwin),
- 116 * EQUALIZER_SCALE_FACTOR);
- }
-
- equalizerwin_set_shape ();
+#ifdef MASK_IS_REGION
+ gtk_widget_shape_combine_region (equalizerwin, active_skin->masks[id]);
+#else
+ gtk_widget_shape_combine_mask (equalizerwin, active_skin->masks[id], 0, 0);
+#endif
}
static void
@@ -190,13 +118,13 @@ equalizerwin_shade_toggle(void)
void
equalizerwin_eq_changed(void)
{
- gint i;
+ aud_set_double (NULL, "equalizer_preamp", equalizerwin_get_preamp ());
- aud_cfg->equalizer_preamp = equalizerwin_get_preamp();
- for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
- aud_cfg->equalizer_bands[i] = equalizerwin_get_band(i);
+ double bands[AUD_EQUALIZER_NBANDS];
+ for (gint i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
+ bands[i] = equalizerwin_get_band (i);
- hook_call("equalizer changed", NULL);
+ aud_eq_set_bands (bands);
}
static void
@@ -212,39 +140,29 @@ equalizerwin_apply_preset(EqualizerPreset *preset)
equalizerwin_set_band(i, preset->bands[i]);
}
-static void
-equalizerwin_on_pushed(void)
-{
- equalizerwin_activate(!aud_cfg->equalizer_active);
-}
+static void eq_on_cb (GtkWidget * button, GdkEventButton * event)
+ {aud_set_bool (NULL, "equalizer_active", button_get_active (button)); }
+static void eq_auto_cb (GtkWidget * button, GdkEventButton * event)
+ {aud_set_bool (NULL, "equalizer_autoload", button_get_active (equalizerwin_auto)); }
-static void
-update_from_config(void *unused1, void *unused2)
+static void update_from_config (void * unused1, void * unused2)
{
- gint i;
+ button_set_active (equalizerwin_on, aud_get_bool (NULL, "equalizer_active"));
+ eq_slider_set_val (equalizerwin_preamp, aud_get_double (NULL, "equalizer_preamp"));
- ui_skinned_button_set_inside(equalizerwin_on, aud_cfg->equalizer_active);
- ui_skinned_equalizer_slider_set_position(equalizerwin_preamp, aud_cfg->equalizer_preamp);
- for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
- ui_skinned_equalizer_slider_set_position(equalizerwin_bands[i], aud_cfg->equalizer_bands[i]);
- ui_skinned_equalizer_graph_update(equalizerwin_graph);
-}
+ gdouble bands[AUD_EQUALIZER_NBANDS];
+ aud_eq_get_bands (bands);
-static void
-equalizerwin_presets_pushed(void)
-{
- GdkModifierType modmask;
- gint x, y;
+ for (gint i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
+ eq_slider_set_val (equalizerwin_bands[i], bands[i]);
- gdk_window_get_pointer(NULL, &x, &y, &modmask);
- ui_popup_menu_show(UI_MENU_EQUALIZER_PRESET, x, y, FALSE, FALSE, 1,
- GDK_CURRENT_TIME);
+ eq_graph_update (equalizerwin_graph);
}
-static void
-equalizerwin_auto_pushed(void)
+static void eq_presets_cb (GtkWidget * button, GdkEventButton * event)
{
- aud_cfg->equalizer_autoload = UI_SKINNED_BUTTON(equalizerwin_auto)->inside;
+ ui_popup_menu_show (UI_MENU_EQUALIZER_PRESET, event->x_root, event->y_root,
+ FALSE, FALSE, event->button, event->time);
}
static GtkWidget * get_eq_effects_menu (void)
@@ -257,15 +175,13 @@ static GtkWidget * get_eq_effects_menu (void)
return menu;
}
-gboolean
+static gboolean
equalizerwin_press(GtkWidget * widget, GdkEventButton * event,
gpointer callback_data)
{
if (event->button == 1 && event->type == GDK_2BUTTON_PRESS
&& event->y < 14) {
equalizerwin_set_shade(!config.equalizer_shaded);
- if (dock_is_moving(GTK_WINDOW(equalizerwin)))
- dock_move_release(GTK_WINDOW(equalizerwin));
return TRUE;
}
@@ -287,189 +203,180 @@ equalizerwin_close_cb(void)
static gboolean equalizerwin_delete(GtkWidget *widget, void *data)
{
- if (config.show_wm_decorations)
- equalizerwin_show(FALSE);
- else
- aud_drct_quit();
-
+ aud_drct_quit ();
return TRUE;
}
-gint
-equalizerwin_volume_frame_cb(gint pos)
+static void eqwin_volume_set_knob (void)
{
- if (equalizerwin_volume) {
- gint x;
- if (pos < 32)
- x = 1;
- else if (pos < 63)
- x = 4;
- else
- x = 7;
+ gint pos = hslider_get_pos (equalizerwin_volume);
- UI_SKINNED_HORIZONTAL_SLIDER(equalizerwin_volume)->knob_nx = x;
- UI_SKINNED_HORIZONTAL_SLIDER(equalizerwin_volume)->knob_px = x;
- }
- return 1;
+ gint x;
+ if (pos < 32)
+ x = 1;
+ else if (pos < 63)
+ x = 4;
+ else
+ x = 7;
+
+ hslider_set_knob (equalizerwin_volume, x, 30, x, 30);
}
-static void
-equalizerwin_volume_motion_cb(GtkWidget *widget, gint pos)
+void equalizerwin_set_volume_slider (gint percent)
+{
+ hslider_set_pos (equalizerwin_volume, (percent * 94 + 50) / 100);
+ eqwin_volume_set_knob ();
+}
+
+static void eqwin_volume_motion_cb (void)
{
- gint v = (gint) rint(pos * 100 / 94.0);
+ eqwin_volume_set_knob ();
+ gint pos = hslider_get_pos (equalizerwin_volume);
+ gint v = (pos * 100 + 47) / 94;
+
mainwin_adjust_volume_motion(v);
mainwin_set_volume_slider(v);
}
-static void
-equalizerwin_volume_release_cb(GtkWidget *widget, gint pos)
+static void eqwin_volume_release_cb (void)
{
+ eqwin_volume_set_knob ();
mainwin_adjust_volume_release();
}
-static gint
-equalizerwin_balance_frame_cb(gint pos)
+static void eqwin_balance_set_knob (void)
{
- if (equalizerwin_balance) {
- gint x;
- if (pos < 13)
- x = 11;
- else if (pos < 26)
- x = 14;
- else
- x = 17;
+ gint pos = hslider_get_pos (equalizerwin_balance);
- UI_SKINNED_HORIZONTAL_SLIDER(equalizerwin_balance)->knob_nx = x;
- UI_SKINNED_HORIZONTAL_SLIDER(equalizerwin_balance)->knob_px = x;
- }
+ gint x;
+ if (pos < 13)
+ x = 11;
+ else if (pos < 26)
+ x = 14;
+ else
+ x = 17;
- return 1;
+ hslider_set_knob (equalizerwin_balance, x, 30, x, 30);
}
-static void
-equalizerwin_balance_motion_cb(GtkWidget *widget, gint pos)
+void equalizerwin_set_balance_slider (gint percent)
{
- gint b;
+ if (percent > 0)
+ hslider_set_pos (equalizerwin_balance, 19 + (percent * 19 + 50) / 100);
+ else
+ hslider_set_pos (equalizerwin_balance, 19 + (percent * 19 - 50) / 100);
+
+ eqwin_balance_set_knob ();
+}
+
+static void eqwin_balance_motion_cb (void)
+{
+ eqwin_balance_set_knob ();
+ gint pos = hslider_get_pos (equalizerwin_balance);
pos = MIN(pos, 38); /* The skin uses a even number of pixels
for the balance-slider *sigh* */
- b = (gint) rint((pos - 19) * 100 / 19.0);
+ gint b;
+ if (pos > 19)
+ b = ((pos - 19) * 100 + 9) / 19;
+ else
+ b = ((pos - 19) * 100 - 9) / 19;
+
mainwin_adjust_balance_motion(b);
mainwin_set_balance_slider(b);
}
-static void
-equalizerwin_balance_release_cb(GtkWidget *widget, gint pos)
+static void eqwin_balance_release_cb (void)
{
+ eqwin_balance_set_knob ();
mainwin_adjust_balance_release();
}
-void
-equalizerwin_set_balance_slider(gint percent)
-{
- ui_skinned_horizontal_slider_set_position(equalizerwin_balance,
- (gint) rint((percent * 19 / 100.0) + 19));
-}
-
-void
-equalizerwin_set_volume_slider(gint percent)
-{
- ui_skinned_horizontal_slider_set_position(equalizerwin_volume,
- (gint) rint(percent * 94 / 100.0));
-}
-
static void
equalizerwin_create_widgets(void)
{
- gint i;
+ equalizerwin_on = button_new_toggle (25, 12, 10, 119, 128, 119, 69, 119, 187, 119, SKIN_EQMAIN, SKIN_EQMAIN);
+ window_put_widget (equalizerwin, FALSE, equalizerwin_on, 14, 18);
+ button_set_active (equalizerwin_on, aud_get_bool (NULL, "equalizer_active"));
+ button_on_release (equalizerwin_on, eq_on_cb);
- equalizerwin_on = ui_skinned_button_new();
- ui_skinned_toggle_button_setup(equalizerwin_on, SKINNED_WINDOW(equalizerwin)->normal,
- 14, 18, 25, 12, 10, 119, 128, 119, 69, 119, 187, 119, SKIN_EQMAIN);
- g_signal_connect(equalizerwin_on, "clicked", equalizerwin_on_pushed, NULL);
- ui_skinned_button_set_inside (equalizerwin_on, aud_cfg->equalizer_active);
-
- equalizerwin_auto = ui_skinned_button_new();
- ui_skinned_toggle_button_setup(equalizerwin_auto, SKINNED_WINDOW(equalizerwin)->normal,
- 39, 18, 33, 12, 35, 119, 153, 119, 94, 119, 212, 119, SKIN_EQMAIN);
- g_signal_connect(equalizerwin_auto, "clicked", equalizerwin_auto_pushed, NULL);
- ui_skinned_button_set_inside(equalizerwin_auto, aud_cfg->equalizer_autoload);
-
- equalizerwin_presets = ui_skinned_button_new();
- ui_skinned_push_button_setup(equalizerwin_presets, SKINNED_WINDOW(equalizerwin)->normal,
- 217, 18, 44, 12, 224, 164, 224, 176, SKIN_EQMAIN);
- g_signal_connect(equalizerwin_presets, "clicked", equalizerwin_presets_pushed, NULL );
-
- equalizerwin_close = ui_skinned_button_new();
- ui_skinned_push_button_setup(equalizerwin_close, SKINNED_WINDOW(equalizerwin)->normal,
- 264, 3, 9, 9, 0, 116, 0, 125, SKIN_EQMAIN);
- g_signal_connect(equalizerwin_close, "clicked", equalizerwin_close_cb, NULL );
-
- equalizerwin_shade = ui_skinned_button_new();
- ui_skinned_push_button_setup(equalizerwin_shade, SKINNED_WINDOW(equalizerwin)->normal,
- 254, 3, 9, 9, 254, 137, 1, 38, SKIN_EQMAIN);
- ui_skinned_button_set_skin_index2(equalizerwin_shade, SKIN_EQ_EX);
- g_signal_connect(equalizerwin_shade, "clicked", equalizerwin_shade_toggle, NULL );
-
- equalizerwin_shaded_close = ui_skinned_button_new();
- ui_skinned_push_button_setup(equalizerwin_shaded_close, SKINNED_WINDOW(equalizerwin)->shaded,
- 264, 3, 9, 9, 11, 38, 11, 47, SKIN_EQ_EX);
- g_signal_connect(equalizerwin_shaded_close, "clicked", equalizerwin_close_cb, NULL );
-
- equalizerwin_shaded_shade = ui_skinned_button_new();
- ui_skinned_push_button_setup(equalizerwin_shaded_shade, SKINNED_WINDOW(equalizerwin)->shaded,
- 254, 3, 9, 9, 254, 3, 1, 47, SKIN_EQ_EX);
- g_signal_connect(equalizerwin_shaded_shade, "clicked", equalizerwin_shade_toggle, NULL );
-
- equalizerwin_graph = ui_skinned_equalizer_graph_new(SKINNED_WINDOW(equalizerwin)->normal, 86, 17);
-
- equalizerwin_preamp = ui_skinned_equalizer_slider_new(SKINNED_WINDOW(equalizerwin)->normal, 21, 38);
- ui_skinned_equalizer_slider_set_position (equalizerwin_preamp,
- aud_cfg->equalizer_preamp);
-
- for (i = 0; i < AUD_EQUALIZER_NBANDS; i++) {
- equalizerwin_bands[i] =
- ui_skinned_equalizer_slider_new(SKINNED_WINDOW(equalizerwin)->normal, 78 + (i * 18), 38);
- ui_skinned_equalizer_slider_set_position (equalizerwin_bands [i],
- aud_cfg->equalizer_bands [i]);
- }
+ equalizerwin_auto = button_new_toggle (33, 12, 35, 119, 153, 119, 94, 119, 212, 119, SKIN_EQMAIN, SKIN_EQMAIN);
+ window_put_widget (equalizerwin, FALSE, equalizerwin_auto, 39, 18);
+ button_set_active (equalizerwin_auto, aud_get_bool (NULL, "equalizer_autoload"));
+ button_on_release (equalizerwin_auto, eq_auto_cb);
+
+ equalizerwin_presets = button_new (44, 12, 224, 164, 224, 176, SKIN_EQMAIN, SKIN_EQMAIN);
+ window_put_widget (equalizerwin, FALSE, equalizerwin_presets, 217, 18);
+ button_on_release (equalizerwin_presets, eq_presets_cb);
+
+ equalizerwin_close = button_new (9, 9, 0, 116, 0, 125, SKIN_EQMAIN, SKIN_EQMAIN);
+ window_put_widget (equalizerwin, FALSE, equalizerwin_close, 264, 3);
+ button_on_release (equalizerwin_close, (ButtonCB) equalizerwin_close_cb);
+
+ equalizerwin_shade = button_new (9, 9, 254, 137, 1, 38, SKIN_EQMAIN, SKIN_EQ_EX);
+ window_put_widget (equalizerwin, FALSE, equalizerwin_shade, 254, 3);
+ button_on_release (equalizerwin_shade, (ButtonCB) equalizerwin_shade_toggle);
+
+ equalizerwin_shaded_close = button_new (9, 9, 11, 38, 11, 47, SKIN_EQ_EX, SKIN_EQ_EX);
+ window_put_widget (equalizerwin, TRUE, equalizerwin_shaded_close, 264, 3);
+ button_on_release (equalizerwin_shaded_close, (ButtonCB) equalizerwin_close_cb);
+
+ equalizerwin_shaded_shade = button_new (9, 9, 254, 3, 1, 47, SKIN_EQ_EX, SKIN_EQ_EX);
+ window_put_widget (equalizerwin, TRUE, equalizerwin_shaded_shade, 254, 3);
+ button_on_release (equalizerwin_shaded_shade, (ButtonCB) equalizerwin_shade_toggle);
+
+ equalizerwin_graph = eq_graph_new ();
+ window_put_widget (equalizerwin, FALSE, equalizerwin_graph, 86, 17);
- equalizerwin_volume =
- ui_skinned_horizontal_slider_new(SKINNED_WINDOW(equalizerwin)->shaded,
- 61, 4, 97, 8, 1, 30, 1, 30, 3, 7, 4, 61, 0, 94,
- equalizerwin_volume_frame_cb, SKIN_EQ_EX);
- g_signal_connect(equalizerwin_volume, "motion", G_CALLBACK(equalizerwin_volume_motion_cb), NULL);
- g_signal_connect(equalizerwin_volume, "release", G_CALLBACK(equalizerwin_volume_release_cb), NULL);
+ equalizerwin_preamp = eq_slider_new (_("Preamp"));
+ window_put_widget (equalizerwin, FALSE, equalizerwin_preamp, 21, 38);
+ eq_slider_set_val (equalizerwin_preamp, aud_get_double (NULL, "equalizer_preamp"));
+ const gchar * const bandnames[AUD_EQUALIZER_NBANDS] = {N_("31 Hz"),
+ N_("63 Hz"), N_("125 Hz"), N_("250 Hz"), N_("500 Hz"), N_("1 kHz"),
+ N_("2 kHz"), N_("4 kHz"), N_("8 kHz"), N_("16 kHz")};
+ gdouble bands[AUD_EQUALIZER_NBANDS];
+ aud_eq_get_bands (bands);
- equalizerwin_balance =
- ui_skinned_horizontal_slider_new(SKINNED_WINDOW(equalizerwin)->shaded,
- 164, 4, 42, 8, 11, 30, 11, 30, 3, 7, 4, 164, 0, 39,
- equalizerwin_balance_frame_cb, SKIN_EQ_EX);
- g_signal_connect(equalizerwin_balance, "motion", G_CALLBACK(equalizerwin_balance_motion_cb), NULL);
- g_signal_connect(equalizerwin_balance, "release", G_CALLBACK(equalizerwin_balance_release_cb), NULL);
+ for (gint i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
+ {
+ equalizerwin_bands[i] = eq_slider_new (_(bandnames[i]));
+ window_put_widget (equalizerwin, FALSE, equalizerwin_bands[i], 78 + 18 * i, 38);
+ eq_slider_set_val (equalizerwin_bands[i], bands[i]);
+ }
+
+ equalizerwin_volume = hslider_new (0, 94, SKIN_EQ_EX, 97, 8, 61, 4, 3, 7, 1, 30, 1, 30);
+ window_put_widget (equalizerwin, TRUE, equalizerwin_volume, 61, 4);
+ hslider_on_motion (equalizerwin_volume, eqwin_volume_motion_cb);
+ hslider_on_release (equalizerwin_volume, eqwin_volume_release_cb);
+
+ equalizerwin_balance = hslider_new (0, 39, SKIN_EQ_EX, 42, 8, 164, 4, 3, 7, 11, 30, 11, 30);
+ window_put_widget (equalizerwin, TRUE, equalizerwin_balance, 164, 4);
+ hslider_on_motion (equalizerwin_balance, eqwin_balance_motion_cb);
+ hslider_on_release (equalizerwin_balance, eqwin_balance_release_cb);
}
+static void eq_win_draw (GtkWidget * window, cairo_t * cr)
+{
+ gint height = config.equalizer_shaded ? 14 : 116;
+
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 0, 0, 0, 275, height);
+
+ if (config.equalizer_shaded)
+ skin_draw_pixbuf (cr, SKIN_EQ_EX, 0, 0, 0, 0, 275, 14);
+ else
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 134, 0, 0, 275, 14);
+}
static void
equalizerwin_create_window(void)
{
GdkPixbuf *icon;
- gint width, height;
- width = 275;
- height = config.equalizer_shaded ? 14 : 116;
+ equalizerwin = window_new (& config.equalizer_x, & config.equalizer_y, 275,
+ config.equalizer_shaded ? 14 : 116, FALSE, config.equalizer_shaded,
+ eq_win_draw);
- equalizerwin = ui_skinned_window_new("equalizer", &config.equalizer_x, &config.equalizer_y);
gtk_window_set_title(GTK_WINDOW(equalizerwin), _("Audacious Equalizer"));
- gtk_window_set_role(GTK_WINDOW(equalizerwin), "equalizer");
- gtk_window_set_resizable(GTK_WINDOW(equalizerwin), FALSE);
-
- if (config.scaled && config.eq_scaled_linked) {
- width *= config.scale_factor;
- height *= config.scale_factor;
- }
-
- gtk_widget_set_size_request(equalizerwin, width, height);
/* this will hide only mainwin. it's annoying! yaz */
gtk_window_set_transient_for(GTK_WINDOW(equalizerwin),
@@ -490,6 +397,13 @@ equalizerwin_create_window(void)
mainwin_keypress, 0);
}
+static void equalizerwin_destroyed (void)
+{
+ hook_dissociate ("set equalizer_active", (HookFunction) update_from_config);
+ hook_dissociate ("set equalizer_bands", (HookFunction) update_from_config);
+ hook_dissociate ("set equalizer_preamp", (HookFunction) update_from_config);
+}
+
void
equalizerwin_create(void)
{
@@ -501,128 +415,96 @@ equalizerwin_create(void)
gtk_window_add_accel_group( GTK_WINDOW(equalizerwin) , ui_manager_get_accel_group() );
equalizerwin_create_widgets();
+ window_show_all (equalizerwin);
- hook_associate("equalizer changed", (HookFunction) update_from_config, NULL);
+ g_signal_connect (equalizerwin, "destroy", (GCallback) equalizerwin_destroyed, NULL);
- gtk_widget_show_all (((SkinnedWindow *) equalizerwin)->normal);
- gtk_widget_show_all (((SkinnedWindow *) equalizerwin)->shaded);
+ hook_associate ("set equalizer_active", (HookFunction) update_from_config, NULL);
+ hook_associate ("set equalizer_bands", (HookFunction) update_from_config, NULL);
+ hook_associate ("set equalizer_preamp", (HookFunction) update_from_config, NULL);
}
-static void equalizerwin_real_show (void)
+static void equalizerwin_real_show (gboolean show)
{
- if (config.scaled && config.eq_scaled_linked)
- gtk_widget_set_size_request(equalizerwin, 275 * config.scale_factor,
- ((config.equalizer_shaded ? 14 : 116) * config.scale_factor));
+ if (show)
+ gtk_window_present ((GtkWindow *) equalizerwin);
else
- gtk_widget_set_size_request(equalizerwin, 275,
- (config.equalizer_shaded ? 14 : 116));
- ui_skinned_button_set_inside(mainwin_eq, TRUE);
-
- gtk_window_present(GTK_WINDOW(equalizerwin));
+ gtk_widget_hide (equalizerwin);
}
-static void equalizerwin_real_hide (void)
+void equalizerwin_show (gboolean show)
{
- gtk_widget_hide(equalizerwin);
- ui_skinned_button_set_inside(mainwin_eq, FALSE);
-}
-
-void
-equalizerwin_show(gboolean show)
-{
- GtkAction * a;
-
- a = gtk_action_group_get_action (toggleaction_group_others, "show equalizer");
+ GtkAction * a = gtk_action_group_get_action (toggleaction_group_others,
+ "show equalizer");
if (a && gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (a)) != show)
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (a), show);
else
{
- if (show != config.equalizer_visible) {
- config.equalizer_visible = show;
- config.equalizer_visible_prev = !show;
- aud_cfg->equalizer_visible = show;
- }
-
- if (show)
- equalizerwin_real_show ();
- else
- equalizerwin_real_hide ();
+ config.equalizer_visible = show;
+ button_set_active (mainwin_eq, show);
+ equalizerwin_real_show (config.player_visible && show);
}
- }
+}
-static EqualizerPreset *
-equalizerwin_find_preset(GList * list, const gchar * name)
+static int equalizerwin_find_preset (Index * list, const char * name)
{
- GList *node = list;
- EqualizerPreset *preset;
-
- while (node) {
- preset = node->data;
+ for (int p = 0; p < index_count (list); p ++)
+ {
+ EqualizerPreset * preset = index_get (list, p);
if (!strcasecmp(preset->name, name))
- return preset;
- node = g_list_next(node);
+ return p;
}
- return NULL;
+
+ return -1;
}
-static gboolean
-equalizerwin_load_preset(GList * list, const gchar * name)
+static bool_t equalizerwin_load_preset (Index * list, const char * name)
{
- EqualizerPreset *preset;
- gint i;
+ int p = equalizerwin_find_preset (list, name);
+ if (p < 0)
+ return FALSE;
- if ((preset = equalizerwin_find_preset(list, name)) != NULL) {
- equalizerwin_set_preamp(preset->preamp);
- for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
- equalizerwin_set_band(i, preset->bands[i]);
+ EqualizerPreset * preset = index_get (list, p);
+ equalizerwin_set_preamp (preset->preamp);
- return TRUE;
- }
- return FALSE;
+ for (int i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
+ equalizerwin_set_band (i, preset->bands[i]);
+
+ return TRUE;
}
-static GList *
-equalizerwin_save_preset(GList * list, const gchar * name,
- const gchar * filename)
+static void equalizerwin_save_preset (Index * list, const char * name,
+ const char * filename)
{
- gint i;
- EqualizerPreset *preset;
+ int p = equalizerwin_find_preset (list, name);
+ EqualizerPreset * preset = (p >= 0) ? index_get (list, p) : NULL;
- if (!(preset = equalizerwin_find_preset(list, name))) {
+ if (! preset)
+ {
preset = g_new0(EqualizerPreset, 1);
preset->name = g_strdup(name);
- list = g_list_append(list, preset);
+ index_append (list, preset);
}
preset->preamp = equalizerwin_get_preamp();
- for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+ for (int i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
preset->bands[i] = equalizerwin_get_band(i);
aud_equalizer_write_preset_file(list, filename);
-
- return list;
}
-static GList *
-equalizerwin_delete_preset(GList * list, gchar * name, gchar * filename)
+static void equalizerwin_delete_preset (Index * list, gchar * name, gchar * filename)
{
- EqualizerPreset *preset;
- GList *node;
-
- if (!(preset = equalizerwin_find_preset(list, name)))
- return list;
-
- if (!(node = g_list_find(list, preset)))
- return list;
+ int p = equalizerwin_find_preset (list, name);
+ if (p < 0)
+ return;
- list = g_list_remove_link(list, node);
+ EqualizerPreset * preset = index_get (list, p);
equalizer_preset_free(preset);
- g_list_free_1(node);
+ index_delete (list, p, 1);
aud_equalizer_write_preset_file(list, filename);
-
- return list;
}
static void
@@ -661,40 +543,43 @@ equalizerwin_delete_selected_presets(GtkTreeView *view, gchar *filename)
gtk_tree_model_get(model, &iter, 0, &text, -1);
if (!strcmp(filename, "eq.preset"))
- equalizer_presets = equalizerwin_delete_preset(equalizer_presets, text, filename);
+ equalizerwin_delete_preset (equalizer_presets, text, filename);
else if (!strcmp(filename, "eq.auto_preset"))
- equalizer_auto_presets = equalizerwin_delete_preset(equalizer_auto_presets, text, filename);
+ equalizerwin_delete_preset (equalizer_auto_presets, text, filename);
gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
}
}
-static void
-free_cb (gpointer data, gpointer user_data)
+static void free_presets (Index * presets)
{
- equalizer_preset_free((EqualizerPreset*)data);
+ for (int p = 0; p < index_count (presets); p ++)
+ equalizer_preset_free (index_get (presets, p));
+
+ index_free (presets);
}
static void
equalizerwin_read_winamp_eqf(VFSFile * file)
{
- GList *presets;
- gint i;
-
+ Index * presets;
if ((presets = aud_import_winamp_eqf(file)) == NULL)
return;
+ if (! index_count (presets))
+ goto DONE;
+
/* just get the first preset --asphyx */
- EqualizerPreset *preset = (EqualizerPreset*)presets->data;
+ EqualizerPreset * preset = index_get (presets, 0);
equalizerwin_set_preamp(preset->preamp);
- for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+ for (int i = 0; i < AUD_EQUALIZER_NBANDS; i ++)
equalizerwin_set_band(i, preset->bands[i]);
- g_list_foreach(presets, free_cb, NULL);
- g_list_free(presets);
-
equalizerwin_eq_changed();
+
+DONE:
+ free_presets (presets);
}
static gboolean equalizerwin_read_aud_preset (const gchar * file)
@@ -715,9 +600,10 @@ equalizerwin_save_ok(GtkWidget * widget, gpointer data)
const gchar *text;
text = gtk_entry_get_text(GTK_ENTRY(equalizerwin_save_entry));
- if (strlen(text) != 0)
- equalizer_presets =
- equalizerwin_save_preset(equalizer_presets, text, "eq.preset");
+
+ if (text[0])
+ equalizerwin_save_preset (equalizer_presets, text, "eq.preset");
+
gtk_widget_destroy(equalizerwin_save_window);
}
@@ -786,10 +672,10 @@ equalizerwin_save_auto_ok(GtkWidget *widget, gpointer data)
const gchar *text;
text = gtk_entry_get_text(GTK_ENTRY(equalizerwin_save_auto_entry));
- if (strlen(text) != 0)
- equalizer_auto_presets =
- equalizerwin_save_preset(equalizer_auto_presets, text,
- "eq.auto_preset");
+
+ if (text[0])
+ equalizerwin_save_preset (equalizer_auto_presets, text, "eq.auto_preset");
+
gtk_widget_destroy(equalizerwin_save_auto_window);
}
@@ -887,16 +773,20 @@ load_winamp_file(const gchar * filename)
static void
import_winamp_file(const gchar * filename)
{
- VFSFile *file;
- GList *list;
-
- if (!(file = open_vfs_file(filename, "rb")) ||
- !(list = aud_import_winamp_eqf(file)))
+ VFSFile * file = open_vfs_file (filename, "r");
+ if (! file)
return;
- equalizer_presets = g_list_concat(equalizer_presets, list);
+ Index * list = aud_import_winamp_eqf (file);
+ if (! list)
+ goto CLOSE;
+
+ index_merge_append (equalizer_presets, list);
+ index_free (list);
+
aud_equalizer_write_preset_file(equalizer_presets, "eq.preset");
+CLOSE:
vfs_fclose(file);
}
@@ -936,8 +826,7 @@ ERR:
return FALSE;
}
-static GtkWidget *
-equalizerwin_create_list_window(GList *preset_list,
+static GtkWidget * equalizerwin_create_list_window (Index * preset_list,
const gchar *title,
GtkWidget **window,
GtkSelectionMode sel_mode,
@@ -948,7 +837,6 @@ equalizerwin_create_list_window(GList *preset_list,
{
GtkWidget *vbox, *scrolled_window, *bbox, *view;
GtkWidget *button_cancel, *button_action;
- GList *node;
GtkListStore *store;
GtkTreeIter iter;
@@ -980,12 +868,11 @@ equalizerwin_create_list_window(GList *preset_list,
/* fill the store with the names of all available presets */
store = gtk_list_store_new(1, G_TYPE_STRING);
- for (node = preset_list; node; node = g_list_next(node))
+ for (int p = 0; p < index_count (preset_list); p ++)
{
+ EqualizerPreset * preset = index_get (preset_list, p);
gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter,
- 0, ((EqualizerPreset*)node->data)->name,
- -1);
+ gtk_list_store_set (store, & iter, 0, preset->name, -1);
}
model = GTK_TREE_MODEL(store);
@@ -1023,14 +910,13 @@ equalizerwin_create_list_window(GList *preset_list,
gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
button_cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- g_signal_connect_swapped(button_cancel, "clicked",
- G_CALLBACK(gtk_widget_destroy),
- GTK_OBJECT(*window));
+ g_signal_connect_swapped (button_cancel, "clicked", (GCallback)
+ gtk_widget_destroy, * window);
gtk_box_pack_start(GTK_BOX(bbox), button_cancel, TRUE, TRUE, 0);
button_action = gtk_button_new_from_stock(action_name);
g_signal_connect(button_action, "clicked", G_CALLBACK(action_func), view);
- GTK_WIDGET_SET_FLAGS(button_action, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button_action, TRUE);
if (select_row_func)
g_signal_connect(view, "row-activated", G_CALLBACK(select_row_func), NULL);
@@ -1046,32 +932,28 @@ equalizerwin_create_list_window(GList *preset_list,
return *window;
}
-void
-equalizerwin_set_preamp(gfloat preamp)
+static void equalizerwin_set_preamp (gfloat preamp)
{
- ui_skinned_equalizer_slider_set_position(equalizerwin_preamp, preamp);
+ eq_slider_set_val (equalizerwin_preamp, preamp);
equalizerwin_eq_changed();
}
-void
-equalizerwin_set_band(gint band, gfloat value)
+static void equalizerwin_set_band (gint band, gfloat value)
{
g_return_if_fail(band >= 0 && band < AUD_EQUALIZER_NBANDS);
- ui_skinned_equalizer_slider_set_position(equalizerwin_bands[band], value);
+ eq_slider_set_val (equalizerwin_bands[band], value);
equalizerwin_eq_changed();
}
-gfloat
-equalizerwin_get_preamp(void)
+static gfloat equalizerwin_get_preamp (void)
{
- return ui_skinned_equalizer_slider_get_position(equalizerwin_preamp);
+ return eq_slider_get_val (equalizerwin_preamp);
}
-gfloat
-equalizerwin_get_band(gint band)
+static gfloat equalizerwin_get_band (gint band)
{
g_return_val_if_fail(band >= 0 && band < AUD_EQUALIZER_NBANDS, 0.0);
- return ui_skinned_equalizer_slider_get_position(equalizerwin_bands[band]);
+ return eq_slider_get_val (equalizerwin_bands[band]);
}
void
@@ -1083,7 +965,7 @@ action_equ_load_preset(void)
}
equalizerwin_create_list_window(equalizer_presets,
- Q_("Load preset"),
+ _("Load preset"),
&equalizerwin_load_window,
GTK_SELECTION_SINGLE, NULL,
GTK_STOCK_OK,
@@ -1100,7 +982,7 @@ action_equ_load_auto_preset(void)
}
equalizerwin_create_list_window(equalizer_auto_presets,
- Q_("Load auto-preset"),
+ _("Load auto-preset"),
&equalizerwin_load_auto_window,
GTK_SELECTION_SINGLE, NULL,
GTK_STOCK_OK,
@@ -1130,7 +1012,7 @@ action_equ_load_preset_file(void)
GtkWidget *dialog;
gchar *file_uri;
- dialog = make_filebrowser(Q_("Load equalizer preset"), FALSE);
+ dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
@@ -1148,7 +1030,7 @@ action_equ_load_preset_eqf(void)
GtkWidget *dialog;
gchar *file_uri;
- dialog = make_filebrowser(Q_("Load equalizer preset"), FALSE);
+ dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
@@ -1164,7 +1046,7 @@ action_equ_import_winamp_presets(void)
GtkWidget *dialog;
gchar *file_uri;
- dialog = make_filebrowser(Q_("Load equalizer preset"), FALSE);
+ dialog = make_filebrowser(_("Load equalizer preset"), FALSE);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
@@ -1183,7 +1065,7 @@ action_equ_save_preset(void)
}
equalizerwin_create_list_window(equalizer_presets,
- Q_("Save preset"),
+ _("Save preset"),
&equalizerwin_save_window,
GTK_SELECTION_SINGLE,
&equalizerwin_save_entry,
@@ -1195,13 +1077,11 @@ action_equ_save_preset(void)
void
action_equ_save_auto_preset(void)
{
- gchar *name;
-
if (equalizerwin_save_auto_window)
gtk_window_present(GTK_WINDOW(equalizerwin_save_auto_window));
else
equalizerwin_create_list_window(equalizer_auto_presets,
- Q_("Save auto-preset"),
+ _("Save auto-preset"),
&equalizerwin_save_auto_window,
GTK_SELECTION_SINGLE,
&equalizerwin_save_auto_entry,
@@ -1209,21 +1089,19 @@ action_equ_save_auto_preset(void)
G_CALLBACK(equalizerwin_save_auto_ok),
G_CALLBACK(equalizerwin_save_auto_select));
- name = aud_drct_pl_get_file (aud_drct_pl_get_pos ());
+ char * name = aud_drct_get_filename ();
if (name != NULL)
{
gtk_entry_set_text(GTK_ENTRY(equalizerwin_save_auto_entry),
g_basename(name));
- g_free(name);
+ str_unref (name);
}
}
-void
-action_equ_save_default_preset(void)
+void action_equ_save_default_preset (void)
{
- equalizer_presets =
- equalizerwin_save_preset(equalizer_presets, Q_("Default"), "eq.preset");
+ equalizerwin_save_preset (equalizer_presets, _("Default"), "eq.preset");
}
void
@@ -1231,10 +1109,9 @@ action_equ_save_preset_file(void)
{
GtkWidget *dialog;
gchar *file_uri;
- gchar *songname;
gint i;
- dialog = make_filebrowser(Q_("Save equalizer preset"), TRUE);
+ dialog = make_filebrowser(_("Save equalizer preset"), TRUE);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
@@ -1248,16 +1125,17 @@ action_equ_save_preset_file(void)
g_free(file_uri);
}
- songname = aud_drct_pl_get_file (aud_drct_pl_get_pos ());
+ char * songname = aud_drct_get_filename ();
if (songname != NULL)
{
- gchar *eqname = g_strdup_printf("%s.%s", songname,
- aud_cfg->eqpreset_extension);
- g_free(songname);
+ gchar * ext = aud_get_string (NULL, "eqpreset_extension");
+ gchar * eqname = g_strdup_printf ("%s.%s", songname, ext);
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),
eqname);
- g_free(eqname);
+ g_free (eqname);
+ g_free (ext);
+ str_unref (songname);
}
gtk_widget_destroy(dialog);
@@ -1269,7 +1147,7 @@ action_equ_save_preset_eqf(void)
GtkWidget *dialog;
gchar *file_uri;
- dialog = make_filebrowser(Q_("Save equalizer preset"), TRUE);
+ dialog = make_filebrowser(_("Save equalizer preset"), TRUE);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
{
file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
@@ -1288,9 +1166,9 @@ action_equ_delete_preset(void)
}
equalizerwin_create_list_window(equalizer_presets,
- Q_("Delete preset"),
+ _("Delete preset"),
&equalizerwin_delete_window,
- GTK_SELECTION_EXTENDED, NULL,
+ GTK_SELECTION_MULTIPLE, NULL,
GTK_STOCK_DELETE,
G_CALLBACK(equalizerwin_delete_delete),
NULL);
@@ -1305,53 +1183,49 @@ action_equ_delete_auto_preset(void)
}
equalizerwin_create_list_window(equalizer_auto_presets,
- Q_("Delete auto-preset"),
+ _("Delete auto-preset"),
&equalizerwin_delete_auto_window,
- GTK_SELECTION_EXTENDED, NULL,
+ GTK_SELECTION_MULTIPLE, NULL,
GTK_STOCK_DELETE,
G_CALLBACK(equalizerwin_delete_auto_delete),
NULL);
}
-void
-equalizerwin_activate(gboolean active)
-{
- aud_cfg->equalizer_active = active;
- ui_skinned_button_set_inside(equalizerwin_on, active);
- equalizerwin_eq_changed();
-}
-
static void load_auto_preset (const gchar * filename)
{
- gchar * base;
-
- if (aud_cfg->eqpreset_extension != NULL)
+ gchar * ext = aud_get_string (NULL, "eqpreset_extension");
+ if (ext[0])
{
- gchar * eq_file = g_strconcat (filename, ".",
- aud_cfg->eqpreset_extension, NULL);
+ gchar * eq_file = g_strconcat (filename, ".", ext, NULL);
gboolean success = equalizerwin_read_aud_preset (eq_file);
-
g_free (eq_file);
if (success)
+ {
+ g_free (ext);
return;
+ }
}
+ g_free (ext);
- if (aud_cfg->eqpreset_default_file != NULL)
+ gchar * deffile = aud_get_string (NULL, "eqpreset_default_file");
+ if (deffile[0])
{
gchar * folder = g_path_get_dirname (filename);
- gchar * eq_file = g_build_filename (folder,
- aud_cfg->eqpreset_default_file, NULL);
+ gchar * eq_file = g_build_filename (folder, deffile, NULL);
gboolean success = equalizerwin_read_aud_preset (eq_file);
-
g_free (folder);
g_free (eq_file);
if (success)
+ {
+ g_free (deffile);
return;
+ }
}
+ g_free (deffile);
- base = g_path_get_basename (filename);
+ gchar * base = g_path_get_basename (filename);
if (! equalizerwin_load_preset (equalizer_auto_presets, base))
{
@@ -1367,15 +1241,20 @@ static void position_cb (void * data, void * user_data)
gint playlist = GPOINTER_TO_INT (data);
gint position = aud_playlist_get_position (playlist);
- if (! aud_cfg->equalizer_autoload || playlist != aud_playlist_get_playing ()
- || position == -1)
+ if (! aud_get_bool (NULL, "equalizer_autoload") || playlist !=
+ aud_playlist_get_playing () || position == -1)
return;
- load_auto_preset (aud_playlist_entry_get_filename (playlist, position));
+ gchar * filename = aud_playlist_entry_get_filename (playlist, position);
+ load_auto_preset (filename);
+ str_unref (filename);
}
void eq_init_hooks (void)
{
+ equalizer_presets = index_new ();
+ equalizer_auto_presets = index_new ();
+
gint playlist = aud_playlist_get_playing ();
/* Load preset for the first song. FIXME: Doing this at interface load is
@@ -1390,4 +1269,23 @@ void eq_init_hooks (void)
void eq_end_hooks (void)
{
hook_dissociate ("playlist position", position_cb);
+
+ free_presets (equalizer_presets);
+ free_presets (equalizer_auto_presets);
+ equalizer_presets = NULL;
+ equalizer_auto_presets = NULL;
+}
+
+void action_show_equalizer (GtkToggleAction * action)
+{
+ equalizerwin_show (gtk_toggle_action_get_active (action));
+}
+
+void action_roll_up_equalizer (GtkToggleAction * action)
+{
+ config.equalizer_shaded = gtk_toggle_action_get_active (action);
+
+ window_set_shaded (equalizerwin, config.equalizer_shaded);
+ window_set_size (equalizerwin, 275, config.equalizer_shaded ? 14 : 116);
+ equalizerwin_set_shape ();
}
diff --git a/src/skins/ui_equalizer.h b/src/skins/ui_equalizer.h
index 48ff71a..1e8d3ea 100644
--- a/src/skins/ui_equalizer.h
+++ b/src/skins/ui_equalizer.h
@@ -23,48 +23,21 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_EQUALIZER_H
-#define AUDACIOUS_UI_EQUALIZER_H
+#ifndef SKINS_UI_EQUALIZER_H
+#define SKINS_UI_EQUALIZER_H
-#include <glib.h>
#include <gtk/gtk.h>
-#include "skins_cfg.h"
-
-#define EQUALIZER_SCALED (config.scaled && config.eq_scaled_linked)
-#define EQUALIZER_SCALE_FACTOR (EQUALIZER_SCALED ? config.scale_factor : 1)
-
-#define EQUALIZER_HEIGHT ((config.equalizer_shaded ? 14 : 116) * (EQUALIZER_SCALE_FACTOR))
-#define EQUALIZER_WIDTH (275 * EQUALIZER_SCALE_FACTOR)
-
-#define EQUALIZER_DEFAULT_POS_X 20
-#define EQUALIZER_DEFAULT_POS_Y 136
-
-#define EQUALIZER_DEFAULT_DIR_PRESET "dir_default.preset"
-#define EQUALIZER_DEFAULT_PRESET_EXT "preset"
void eq_init_hooks (void);
void eq_end_hooks (void);
void equalizerwin_set_shape (void);
-void equalizerwin_set_scaled(gboolean ds);
-void equalizerwin_set_shade_menu_cb(gboolean shaded);
-void draw_equalizer_window(gboolean force);
void equalizerwin_create(void);
void equalizerwin_show(gboolean show);
void equalizerwin_set_volume_slider(gint percent);
void equalizerwin_set_balance_slider(gint percent);
void equalizerwin_eq_changed(void);
-void equalizerwin_set_preamp(gfloat preamp);
-void equalizerwin_set_band(gint band, gfloat value);
-gfloat equalizerwin_get_preamp(void);
-gfloat equalizerwin_get_band(gint band);
-
-gboolean equalizerwin_has_focus(void);
extern GtkWidget *equalizerwin;
-extern GtkWidget *equalizerwin_graph;
-extern gboolean equalizerwin_focus;
-
-void equalizerwin_activate(gboolean active);
-#endif /* AUDACIOUS_UI_EQUALIZER_H */
+#endif /* SKINS_UI_EQUALIZER_H */
diff --git a/src/skins/ui_hints.c b/src/skins/ui_hints.c
index 9acfb59..51d4ab9 100644
--- a/src/skins/ui_hints.c
+++ b/src/skins/ui_hints.c
@@ -23,17 +23,13 @@
* Audacious or using our public API to be a derived work.
*/
-#include "ui_hints.h"
-
-#include <glib.h>
#include <gtk/gtk.h>
#include "ui_equalizer.h"
+#include "ui_hints.h"
#include "ui_main.h"
#include "ui_playlist.h"
-#include "platform/smartinclude.h"
-
void
hint_set_always(gboolean always)
{
@@ -56,4 +52,3 @@ hint_set_sticky(gboolean sticky)
gtk_window_unstick(GTK_WINDOW(playlistwin));
}
}
-
diff --git a/src/skins/ui_hints.h b/src/skins/ui_hints.h
index 4c0983e..32dc494 100644
--- a/src/skins/ui_hints.h
+++ b/src/skins/ui_hints.h
@@ -23,13 +23,12 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_HINTS_H
-#define AUDACIOUS_UI_HINTS_H
+#ifndef SKINS_UI_HINTS_H
+#define SKINS_UI_HINTS_H
-#include <glib.h>
#include <gtk/gtk.h>
void hint_set_always(gboolean always);
void hint_set_sticky(gboolean sticky);
-#endif /* AUDACIOUS_UI_HINTS_H */
+#endif /* SKINS_UI_HINTS_H */
diff --git a/src/skins/ui_main.c b/src/skins/ui_main.c
index af64703..aadfe78 100644
--- a/src/skins/ui_main.c
+++ b/src/skins/ui_main.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2006 Audacious development team.
+ * Copyright (C) 2005-2011 Audacious development team.
*
* BMP - Cross-platform multimedia player
* Copyright (C) 2003-2004 BMP development team.
@@ -23,59 +23,42 @@
* Audacious or using our public API to be a derived work.
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkmessagedialog.h>
#include <math.h>
#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
+#include <sys/time.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
-#include <audacious/audconfig.h>
#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
-#include <audacious/playlist.h>
+#include <audacious/misc.h>
#include <libaudcore/audstrings.h>
#include <libaudcore/hook.h>
#include <libaudgui/libaudgui.h>
-/* GDK including */
-#include "platform/smartinclude.h"
-
-#if defined(USE_REGEX_ONIGURUMA)
-#include <onigposix.h>
-#elif defined(USE_REGEX_PCRE)
-#include <pcreposix.h>
-#else
-#include <regex.h>
-#endif
-
+#include "actions-mainwin.h"
#include "actions-playlist.h"
+#include "config.h"
+#include "dnd.h"
+#include "skins_cfg.h"
+#include "ui_equalizer.h"
+#include "ui_hints.h"
#include "ui_main.h"
-#include "ui_dock.h"
-#include "actions-mainwin.h"
+#include "ui_main_evlisteners.h"
#include "ui_manager.h"
-#include "ui_equalizer.h"
#include "ui_playlist.h"
-#include "ui_hints.h"
-#include "dnd.h"
-#include "plugin.h"
-#include "ui_skinned_window.h"
#include "ui_skinned_button.h"
-#include "ui_skinned_textbox.h"
-#include "ui_skinned_number.h"
#include "ui_skinned_horizontal_slider.h"
#include "ui_skinned_menurow.h"
-#include "ui_skinned_playstatus.h"
#include "ui_skinned_monostereo.h"
+#include "ui_skinned_number.h"
#include "ui_skinned_playlist.h"
-#include "ui_main_evlisteners.h"
-#include "skins_cfg.h"
+#include "ui_skinned_playstatus.h"
+#include "ui_skinned_textbox.h"
+#include "ui_skinned_window.h"
+#include "ui_vis.h"
#include "util.h"
#define SEEK_THRESHOLD 200 /* milliseconds */
@@ -85,9 +68,7 @@
GtkWidget *mainwin = NULL;
static gint balance;
-static gint seek_source = 0, seek_start, seek_event_time, seek_time;
-
-static GtkWidget *mainwin_jtt = NULL;
+static gint seek_source = 0, seek_start, seek_time;
static GtkWidget *mainwin_menubtn, *mainwin_minimize, *mainwin_shade, *mainwin_close;
static GtkWidget *mainwin_shaded_menubtn, *mainwin_shaded_minimize, *mainwin_shaded_shade, *mainwin_shaded_close;
@@ -128,39 +109,31 @@ static guint mainwin_volume_release_timeout = 0;
static int ab_position_a = -1;
static int ab_position_b = -1;
-static void mainwin_refresh_visible(void);
-
-static void set_timer_mode_menu_cb(TimerMode mode);
-static void set_timer_mode(TimerMode mode);
static void change_timer_mode(void);
+static void mainwin_position_motion_cb (void);
+static void mainwin_position_release_cb (void);
+static void mainwin_set_volume_diff (gint diff);
-static void mainwin_position_motion_cb(GtkWidget *widget, gint pos);
-static void mainwin_position_release_cb(GtkWidget *widget, gint pos);
-
-static void set_scaled(gboolean scaled);
-static void mainwin_eq_pushed(gboolean toggled);
-static void mainwin_pl_pushed(gboolean toggled);
-
-static void
-mainwin_set_title_scroll(gboolean scroll)
+static void format_time (gchar buf[7], gint time, gint length)
{
- config.autoscroll = scroll;
- ui_skinned_textbox_set_scroll(mainwin_info, config.autoscroll);
-}
-
-void mainwin_set_sticky (gboolean sticky)
-{
- gtk_toggle_action_set_active ((GtkToggleAction *)
- gtk_action_group_get_action (toggleaction_group_others,
- "view put on all workspaces"), sticky);
-}
+ if (config.timer_mode == TIMER_REMAINING && length > 0)
+ {
+ if (length - time < 60000) /* " -0:SS" */
+ snprintf (buf, 7, " -0:%02d", (length - time) / 1000);
+ else if (length - time < 6000000) /* "-MM:SS" */
+ snprintf (buf, 7, "%3d:%02d", (time - length) / 60000, (length - time) / 1000 % 60);
+ else /* "-HH:MM" */
+ snprintf (buf, 7, "%3d:%02d", (time - length) / 3600000, (length - time) / 60000 % 60);
+ }
+ else
+ {
+ if (time < 60000000) /* MMM:SS */
+ snprintf (buf, 7, "%3d:%02d", time / 60000, time / 1000 % 60);
+ else /* HHH:MM */
+ snprintf (buf, 7, "%3d:%02d", time / 3600000, time / 60000 % 60);
+ }
-void
-mainwin_set_always_on_top(gboolean always)
-{
- GtkAction *action = gtk_action_group_get_action(toggleaction_group_others,
- "view always on top");
- gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(action) , always );
+ buf[3] = 0;
}
static void
@@ -173,60 +146,16 @@ mainwin_set_shade(gboolean shaded)
void mainwin_set_shape (void)
{
- if (config.show_wm_decorations)
- gtk_widget_shape_combine_mask (mainwin, 0, 0, 0);
- else
- gtk_widget_shape_combine_mask (mainwin, skin_get_mask (aud_active_skin,
- config.player_shaded ? SKIN_MASK_MAIN_SHADE : SKIN_MASK_MAIN), 0, 0);
-}
-
-static void
-mainwin_set_shade_menu_cb(gboolean shaded)
-{
- config.player_shaded = shaded;
- ui_skinned_window_set_shade(mainwin, shaded);
+ gint id = config.player_shaded ? SKIN_MASK_MAIN_SHADE : SKIN_MASK_MAIN;
- if (shaded) {
- dock_shade(get_dock_window_list(), GTK_WINDOW(mainwin),
- MAINWIN_SHADED_HEIGHT * MAINWIN_SCALE_FACTOR);
- } else {
- gint height = !aud_active_skin->properties.mainwin_height ? MAINWIN_HEIGHT :
- aud_active_skin->properties.mainwin_height;
-
- dock_shade(get_dock_window_list(), GTK_WINDOW(mainwin), height * MAINWIN_SCALE_FACTOR);
- }
-
- mainwin_set_shape ();
-}
-
-static void
-mainwin_vis_set_afalloff(FalloffSpeed speed)
-{
- config.analyzer_falloff = speed;
-}
-
-static void
-mainwin_vis_set_pfalloff(FalloffSpeed speed)
-{
- config.peaks_falloff = speed;
-}
-
-static void
-mainwin_vis_set_analyzer_mode(AnalyzerMode mode)
-{
- config.analyzer_mode = mode;
-}
-
-static void
-mainwin_vis_set_analyzer_type(AnalyzerType mode)
-{
- config.analyzer_type = mode;
- ui_vis_clear_data (mainwin_vis);
- ui_svis_clear_data (mainwin_svis);
+#ifdef MASK_IS_REGION
+ gtk_widget_shape_combine_region (mainwin, active_skin->masks[id]);
+#else
+ gtk_widget_shape_combine_mask (mainwin, active_skin->masks[id], 0, 0);
+#endif
}
-void
-mainwin_vis_set_type(VisType mode)
+static void mainwin_vis_set_type (VisType mode)
{
GtkAction *action;
@@ -255,27 +184,15 @@ mainwin_vis_set_type(VisType mode)
}
static void
-mainwin_vis_set_type_menu_cb(VisType mode)
-{
- config.vis_type = mode;
- ui_vis_clear_data (mainwin_vis);
- ui_svis_clear_data (mainwin_svis);
-
- start_stop_visual (FALSE);
-}
-
-static void
mainwin_menubtn_cb(void)
{
gint x, y;
gtk_window_get_position(GTK_WINDOW(mainwin), &x, &y);
- ui_popup_menu_show(UI_MENU_MAIN, x + 6 * MAINWIN_SCALE_FACTOR, y +
- MAINWIN_SHADED_HEIGHT * MAINWIN_SCALE_FACTOR, FALSE, FALSE, 1,
- GDK_CURRENT_TIME);
+ ui_popup_menu_show (UI_MENU_MAIN, x + 6, y + MAINWIN_SHADED_HEIGHT, FALSE,
+ FALSE, 1, GDK_CURRENT_TIME);
}
-void
-mainwin_minimize_cb(void)
+static void mainwin_minimize_cb (void)
{
if (!mainwin)
return;
@@ -289,8 +206,7 @@ mainwin_shade_toggle(void)
mainwin_set_shade(!config.player_shaded);
}
-gboolean
-mainwin_vis_cb(GtkWidget *widget, GdkEventButton *event)
+static gboolean mainwin_vis_cb (GtkWidget * widget, GdkEventButton * event)
{
if (event->button == 1) {
config.vis_type++;
@@ -323,31 +239,30 @@ static void show_main_menu (GdkEventButton * event, void * unused)
static gchar *mainwin_tb_old_text = NULL;
-void
-mainwin_lock_info_text(const gchar * text)
+static void mainwin_lock_info_text (const gchar * text)
{
if (mainwin_info_text_locked != TRUE)
- mainwin_tb_old_text = g_strdup(aud_active_skin->properties.mainwin_othertext_is_status ?
- UI_SKINNED_TEXTBOX(mainwin_othertext)->text : UI_SKINNED_TEXTBOX(mainwin_info)->text);
+ mainwin_tb_old_text = g_strdup
+ (active_skin->properties.mainwin_othertext_is_status ?
+ textbox_get_text (mainwin_othertext) : textbox_get_text (mainwin_info));
mainwin_info_text_locked = TRUE;
- if (aud_active_skin->properties.mainwin_othertext_is_status)
- ui_skinned_textbox_set_text(mainwin_othertext, text);
+ if (active_skin->properties.mainwin_othertext_is_status)
+ textbox_set_text (mainwin_othertext, text);
else
- ui_skinned_textbox_set_text(mainwin_info, text);
+ textbox_set_text (mainwin_info, text);
}
-void
-mainwin_release_info_text(void)
+static void mainwin_release_info_text (void)
{
mainwin_info_text_locked = FALSE;
if (mainwin_tb_old_text != NULL)
{
- if (aud_active_skin->properties.mainwin_othertext_is_status)
- ui_skinned_textbox_set_text(mainwin_othertext, mainwin_tb_old_text);
+ if (active_skin->properties.mainwin_othertext_is_status)
+ textbox_set_text (mainwin_othertext, mainwin_tb_old_text);
else
- ui_skinned_textbox_set_text(mainwin_info, mainwin_tb_old_text);
+ textbox_set_text (mainwin_info, mainwin_tb_old_text);
g_free(mainwin_tb_old_text);
mainwin_tb_old_text = NULL;
}
@@ -369,7 +284,7 @@ static gboolean clear_status_message (void * unused)
return FALSE;
}
-static void show_status_message (const gchar * message)
+void mainwin_show_status_message (const gchar * message)
{
if (! status_message_enabled)
return;
@@ -398,7 +313,7 @@ mainwin_set_song_title(const gchar * title)
g_free(mainwin_title_text);
mainwin_release_info_text ();
- ui_skinned_textbox_set_text (mainwin_info, title != NULL ? title : "");
+ textbox_set_text (mainwin_info, title != NULL ? title : "");
}
static void show_hide_widget (GtkWidget * widget, char show)
@@ -413,153 +328,89 @@ static void
mainwin_refresh_visible(void)
{
show_hide_widget (mainwin_info,
- aud_active_skin->properties.mainwin_text_visible);
+ active_skin->properties.mainwin_text_visible);
show_hide_widget (mainwin_vis,
- aud_active_skin->properties.mainwin_vis_visible);
+ active_skin->properties.mainwin_vis_visible);
show_hide_widget (mainwin_menurow,
- aud_active_skin->properties.mainwin_menurow_visible);
+ active_skin->properties.mainwin_menurow_visible);
show_hide_widget (mainwin_rate_text,
- ! aud_active_skin->properties.mainwin_othertext);
+ active_skin->properties.mainwin_streaminfo_visible);
show_hide_widget (mainwin_freq_text,
- ! aud_active_skin->properties.mainwin_othertext);
+ active_skin->properties.mainwin_streaminfo_visible);
show_hide_widget (mainwin_monostereo,
- ! aud_active_skin->properties.mainwin_othertext);
+ active_skin->properties.mainwin_streaminfo_visible);
show_hide_widget (mainwin_othertext,
- aud_active_skin->properties.mainwin_othertext &&
- aud_active_skin->properties.mainwin_othertext_visible);
+ active_skin->properties.mainwin_othertext_visible);
}
void
mainwin_refresh_hints(void)
{
- /* positioning and size attributes */
- if (aud_active_skin->properties.mainwin_vis_x && aud_active_skin->properties.mainwin_vis_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_vis), aud_active_skin->properties.mainwin_vis_x,
- aud_active_skin->properties.mainwin_vis_y);
-
- if (aud_active_skin->properties.mainwin_vis_width)
- gtk_widget_set_size_request(mainwin_vis, aud_active_skin->properties.mainwin_vis_width * MAINWIN_SCALE_FACTOR,
- UI_VIS(mainwin_vis)->height* MAINWIN_SCALE_FACTOR);
-
- if (aud_active_skin->properties.mainwin_text_x && aud_active_skin->properties.mainwin_text_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_info), aud_active_skin->properties.mainwin_text_x,
- aud_active_skin->properties.mainwin_text_y);
-
- if (aud_active_skin->properties.mainwin_text_width) {
- UI_SKINNED_TEXTBOX(mainwin_info)->width = aud_active_skin->properties.mainwin_text_width;
- gtk_widget_set_size_request (mainwin_info, aud_active_skin->properties.
- mainwin_text_width * MAINWIN_SCALE_FACTOR, -1);
- }
-
- if (aud_active_skin->properties.mainwin_infobar_x && aud_active_skin->properties.mainwin_infobar_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_othertext), aud_active_skin->properties.mainwin_infobar_x,
- aud_active_skin->properties.mainwin_infobar_y);
-
- if (aud_active_skin->properties.mainwin_number_0_x && aud_active_skin->properties.mainwin_number_0_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_minus_num), aud_active_skin->properties.mainwin_number_0_x,
- aud_active_skin->properties.mainwin_number_0_y);
-
- if (aud_active_skin->properties.mainwin_number_1_x && aud_active_skin->properties.mainwin_number_1_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_10min_num), aud_active_skin->properties.mainwin_number_1_x,
- aud_active_skin->properties.mainwin_number_1_y);
-
- if (aud_active_skin->properties.mainwin_number_2_x && aud_active_skin->properties.mainwin_number_2_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_min_num), aud_active_skin->properties.mainwin_number_2_x,
- aud_active_skin->properties.mainwin_number_2_y);
-
- if (aud_active_skin->properties.mainwin_number_3_x && aud_active_skin->properties.mainwin_number_3_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_10sec_num), aud_active_skin->properties.mainwin_number_3_x,
- aud_active_skin->properties.mainwin_number_3_y);
-
- if (aud_active_skin->properties.mainwin_number_4_x && aud_active_skin->properties.mainwin_number_4_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_sec_num), aud_active_skin->properties.mainwin_number_4_x,
- aud_active_skin->properties.mainwin_number_4_y);
-
- if (aud_active_skin->properties.mainwin_playstatus_x && aud_active_skin->properties.mainwin_playstatus_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), mainwin_playstatus, aud_active_skin->properties.mainwin_playstatus_x,
- aud_active_skin->properties.mainwin_playstatus_y);
-
- if (aud_active_skin->properties.mainwin_volume_x && aud_active_skin->properties.mainwin_volume_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_volume), aud_active_skin->properties.mainwin_volume_x,
- aud_active_skin->properties.mainwin_volume_y);
-
- if (aud_active_skin->properties.mainwin_balance_x && aud_active_skin->properties.mainwin_balance_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_balance), aud_active_skin->properties.mainwin_balance_x,
- aud_active_skin->properties.mainwin_balance_y);
-
- if (aud_active_skin->properties.mainwin_position_x && aud_active_skin->properties.mainwin_position_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_position), aud_active_skin->properties.mainwin_position_x,
- aud_active_skin->properties.mainwin_position_y);
-
- if (aud_active_skin->properties.mainwin_previous_x && aud_active_skin->properties.mainwin_previous_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), mainwin_rew, aud_active_skin->properties.mainwin_previous_x,
- aud_active_skin->properties.mainwin_previous_y);
-
- if (aud_active_skin->properties.mainwin_play_x && aud_active_skin->properties.mainwin_play_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_play), aud_active_skin->properties.mainwin_play_x,
- aud_active_skin->properties.mainwin_play_y);
-
- if (aud_active_skin->properties.mainwin_pause_x && aud_active_skin->properties.mainwin_pause_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_pause), aud_active_skin->properties.mainwin_pause_x,
- aud_active_skin->properties.mainwin_pause_y);
-
- if (aud_active_skin->properties.mainwin_stop_x && aud_active_skin->properties.mainwin_stop_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_stop), aud_active_skin->properties.mainwin_stop_x,
- aud_active_skin->properties.mainwin_stop_y);
-
- if (aud_active_skin->properties.mainwin_next_x && aud_active_skin->properties.mainwin_next_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_fwd), aud_active_skin->properties.mainwin_next_x,
- aud_active_skin->properties.mainwin_next_y);
-
- if (aud_active_skin->properties.mainwin_eject_x && aud_active_skin->properties.mainwin_eject_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_eject), aud_active_skin->properties.mainwin_eject_x,
- aud_active_skin->properties.mainwin_eject_y);
-
- if (aud_active_skin->properties.mainwin_eqbutton_x && aud_active_skin->properties.mainwin_eqbutton_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_eq), aud_active_skin->properties.mainwin_eqbutton_x,
- aud_active_skin->properties.mainwin_eqbutton_y);
-
- if (aud_active_skin->properties.mainwin_plbutton_x && aud_active_skin->properties.mainwin_plbutton_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_pl), aud_active_skin->properties.mainwin_plbutton_x,
- aud_active_skin->properties.mainwin_plbutton_y);
-
- if (aud_active_skin->properties.mainwin_shuffle_x && aud_active_skin->properties.mainwin_shuffle_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_shuffle), aud_active_skin->properties.mainwin_shuffle_x,
- aud_active_skin->properties.mainwin_shuffle_y);
-
- if (aud_active_skin->properties.mainwin_repeat_x && aud_active_skin->properties.mainwin_repeat_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_repeat), aud_active_skin->properties.mainwin_repeat_x,
- aud_active_skin->properties.mainwin_repeat_y);
-
- if (aud_active_skin->properties.mainwin_about_x && aud_active_skin->properties.mainwin_about_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_about), aud_active_skin->properties.mainwin_about_x,
- aud_active_skin->properties.mainwin_about_y);
-
- if (aud_active_skin->properties.mainwin_minimize_x && aud_active_skin->properties.mainwin_minimize_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_minimize), config.player_shaded ? 244 : aud_active_skin->properties.mainwin_minimize_x,
- config.player_shaded ? 3 : aud_active_skin->properties.mainwin_minimize_y);
-
- if (aud_active_skin->properties.mainwin_shade_x && aud_active_skin->properties.mainwin_shade_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_shade), aud_active_skin->properties.mainwin_shade_x,
- aud_active_skin->properties.mainwin_shade_y);
-
- if (aud_active_skin->properties.mainwin_close_x && aud_active_skin->properties.mainwin_close_y)
- gtk_fixed_move(GTK_FIXED(SKINNED_WINDOW(mainwin)->normal), GTK_WIDGET(mainwin_close), aud_active_skin->properties.mainwin_close_x,
- aud_active_skin->properties.mainwin_close_y);
+ SkinProperties * p = & active_skin->properties;
+
+ if (p->mainwin_vis_x && p->mainwin_vis_y)
+ window_move_widget (mainwin, FALSE, mainwin_vis, p->mainwin_vis_x, p->mainwin_vis_y);
+ if (p->mainwin_text_x && p->mainwin_text_y)
+ window_move_widget (mainwin, FALSE, mainwin_info, p->mainwin_text_x, p->mainwin_text_y);
+ if (p->mainwin_text_width)
+ textbox_set_width (mainwin_info, p->mainwin_text_width);
+ if (p->mainwin_infobar_x && p->mainwin_infobar_y)
+ window_move_widget (mainwin, FALSE, mainwin_othertext, p->mainwin_infobar_x, p->mainwin_infobar_y);
+ if (p->mainwin_number_0_x && p->mainwin_number_0_y)
+ window_move_widget (mainwin, FALSE, mainwin_minus_num, p->mainwin_number_0_x, p->mainwin_number_0_y);
+ if (p->mainwin_number_1_x && p->mainwin_number_1_y)
+ window_move_widget (mainwin, FALSE, mainwin_10min_num, p->mainwin_number_1_x, p->mainwin_number_1_y);
+ if (p->mainwin_number_2_x && p->mainwin_number_2_y)
+ window_move_widget (mainwin, FALSE, mainwin_min_num, p->mainwin_number_2_x, p->mainwin_number_2_y);
+ if (p->mainwin_number_3_x && p->mainwin_number_3_y)
+ window_move_widget (mainwin, FALSE, mainwin_10sec_num, p->mainwin_number_3_x, p->mainwin_number_3_y);
+ if (p->mainwin_number_4_x && p->mainwin_number_4_y)
+ window_move_widget (mainwin, FALSE, mainwin_sec_num, p->mainwin_number_4_x, p->mainwin_number_4_y);
+ if (p->mainwin_playstatus_x && p->mainwin_playstatus_y)
+ window_move_widget (mainwin, FALSE, mainwin_playstatus, p->mainwin_playstatus_x, p->mainwin_playstatus_y);
+ if (p->mainwin_volume_x && p->mainwin_volume_y)
+ window_move_widget (mainwin, FALSE, mainwin_volume, p->mainwin_volume_x, p->mainwin_volume_y);
+ if (p->mainwin_balance_x && p->mainwin_balance_y)
+ window_move_widget (mainwin, FALSE, mainwin_balance, p->mainwin_balance_x, p->mainwin_balance_y);
+ if (p->mainwin_position_x && p->mainwin_position_y)
+ window_move_widget (mainwin, FALSE, mainwin_position, p->mainwin_position_x, p->mainwin_position_y);
+ if (p->mainwin_previous_x && p->mainwin_previous_y)
+ window_move_widget (mainwin, FALSE, mainwin_rew, p->mainwin_previous_x, p->mainwin_previous_y);
+ if (p->mainwin_play_x && p->mainwin_play_y)
+ window_move_widget (mainwin, FALSE, mainwin_play, p->mainwin_play_x, p->mainwin_play_y);
+ if (p->mainwin_pause_x && p->mainwin_pause_y)
+ window_move_widget (mainwin, FALSE, mainwin_pause, p->mainwin_pause_x, p->mainwin_pause_y);
+ if (p->mainwin_stop_x && p->mainwin_stop_y)
+ window_move_widget (mainwin, FALSE, mainwin_stop, p->mainwin_stop_x, p->mainwin_stop_y);
+ if (p->mainwin_next_x && p->mainwin_next_y)
+ window_move_widget (mainwin, FALSE, mainwin_fwd, p->mainwin_next_x, p->mainwin_next_y);
+ if (p->mainwin_eject_x && p->mainwin_eject_y)
+ window_move_widget (mainwin, FALSE, mainwin_eject, p->mainwin_eject_x, p->mainwin_eject_y);
+ if (p->mainwin_eqbutton_x && p->mainwin_eqbutton_y)
+ window_move_widget (mainwin, FALSE, mainwin_eq, p->mainwin_eqbutton_x, p->mainwin_eqbutton_y);
+ if (p->mainwin_plbutton_x && p->mainwin_plbutton_y)
+ window_move_widget (mainwin, FALSE, mainwin_pl, p->mainwin_plbutton_x, p->mainwin_plbutton_y);
+ if (p->mainwin_shuffle_x && p->mainwin_shuffle_y)
+ window_move_widget (mainwin, FALSE, mainwin_shuffle, p->mainwin_shuffle_x, p->mainwin_shuffle_y);
+ if (p->mainwin_repeat_x && p->mainwin_repeat_y)
+ window_move_widget (mainwin, FALSE, mainwin_repeat, p->mainwin_repeat_x, p->mainwin_repeat_y);
+ if (p->mainwin_about_x && p->mainwin_about_y)
+ window_move_widget (mainwin, FALSE, mainwin_about, p->mainwin_about_x, p->mainwin_about_y);
+ if (p->mainwin_minimize_x && p->mainwin_minimize_y)
+ window_move_widget (mainwin, FALSE, mainwin_minimize, p->mainwin_minimize_x, p->mainwin_minimize_y);
+ if (p->mainwin_shade_x && p->mainwin_shade_y)
+ window_move_widget (mainwin, FALSE, mainwin_shade, p->mainwin_shade_x, p->mainwin_shade_y);
+ if (p->mainwin_close_x && p->mainwin_close_y)
+ window_move_widget (mainwin, FALSE, mainwin_close, p->mainwin_close_x, p->mainwin_close_y);
mainwin_refresh_visible();
if (config.player_shaded)
- resize_window(mainwin, MAINWIN_SHADED_WIDTH * MAINWIN_SCALE_FACTOR,
- MAINWIN_SHADED_HEIGHT * MAINWIN_SCALE_FACTOR);
- else if (aud_active_skin->properties.mainwin_height > 0 &&
- aud_active_skin->properties.mainwin_width > 0)
- resize_window(mainwin, aud_active_skin->properties.mainwin_width *
- MAINWIN_SCALE_FACTOR, aud_active_skin->properties.mainwin_height *
- MAINWIN_SCALE_FACTOR);
+ window_set_size (mainwin, MAINWIN_SHADED_WIDTH, MAINWIN_SHADED_HEIGHT);
+ else if (p->mainwin_height && p->mainwin_width)
+ window_set_size (mainwin, p->mainwin_width, p->mainwin_height);
else
- resize_window(mainwin, MAINWIN_WIDTH * MAINWIN_SCALE_FACTOR,
- MAINWIN_HEIGHT * MAINWIN_SCALE_FACTOR);
+ window_set_size (mainwin, MAINWIN_WIDTH, MAINWIN_HEIGHT);
}
void mainwin_set_song_info (gint bitrate, gint samplerate, gint channels)
@@ -574,18 +425,18 @@ void mainwin_set_song_info (gint bitrate, gint samplerate, gint channels)
else
snprintf (scratch, sizeof scratch, "%2dH", bitrate / 100000);
- ui_skinned_textbox_set_text (mainwin_rate_text, scratch);
+ textbox_set_text (mainwin_rate_text, scratch);
}
else
- ui_skinned_textbox_set_text (mainwin_rate_text, "");
+ textbox_set_text (mainwin_rate_text, "");
if (samplerate > 0)
{
snprintf (scratch, sizeof scratch, "%2d", samplerate / 1000);
- ui_skinned_textbox_set_text (mainwin_freq_text, scratch);
+ textbox_set_text (mainwin_freq_text, scratch);
}
else
- ui_skinned_textbox_set_text (mainwin_freq_text, "");
+ textbox_set_text (mainwin_freq_text, "");
ui_skinned_monostereo_set_num_channels (mainwin_monostereo, channels);
@@ -609,7 +460,7 @@ void mainwin_set_song_info (gint bitrate, gint samplerate, gint channels)
_("mono"));
}
- ui_skinned_textbox_set_text (mainwin_othertext, scratch);
+ textbox_set_text (mainwin_othertext, scratch);
}
void
@@ -630,14 +481,14 @@ mainwin_clear_song_info(void)
gtk_widget_hide (mainwin_position);
gtk_widget_hide (mainwin_sposition);
- UI_SKINNED_HORIZONTAL_SLIDER(mainwin_position)->pressed = FALSE;
- UI_SKINNED_HORIZONTAL_SLIDER(mainwin_sposition)->pressed = FALSE;
+ hslider_set_pressed (mainwin_position, FALSE);
+ hslider_set_pressed (mainwin_sposition, FALSE);
/* clear sampling parameter displays */
- ui_skinned_textbox_set_text(mainwin_rate_text, " ");
- ui_skinned_textbox_set_text(mainwin_freq_text, " ");
+ textbox_set_text (mainwin_rate_text, " ");
+ textbox_set_text (mainwin_freq_text, " ");
ui_skinned_monostereo_set_num_channels(mainwin_monostereo, 0);
- ui_skinned_textbox_set_text (mainwin_othertext, "");
+ textbox_set_text (mainwin_othertext, "");
if (mainwin_playstatus != NULL)
ui_skinned_playstatus_set_status(mainwin_playstatus, STATUS_STOP);
@@ -655,9 +506,8 @@ mainwin_disable_seekbar(void)
gtk_widget_hide(mainwin_sposition);
}
-void
-mainwin_scrolled(GtkWidget *widget, GdkEventScroll *event,
- gpointer callback_data)
+static void mainwin_scrolled (GtkWidget * widget, GdkEventScroll * event, void *
+ unused)
{
switch (event->direction) {
case GDK_SCROLL_UP:
@@ -676,56 +526,32 @@ mainwin_scrolled(GtkWidget *widget, GdkEventScroll *event,
}
static gboolean
-mainwin_widget_contained(GdkEventButton *event, int x, int y, int w, int h)
-{
- gint ex = event->x / MAINWIN_SCALE_FACTOR;
- gint ey = event->y / MAINWIN_SCALE_FACTOR;
-
- return (ex > x && ey > y && ex < x + w && ey < y + h);
-}
-
-static gboolean
mainwin_mouse_button_press(GtkWidget * widget,
GdkEventButton * event,
gpointer callback_data)
{
- if (event->button == 1 && event->type == GDK_2BUTTON_PRESS && event->y /
- MAINWIN_SCALE_FACTOR < 14)
+ if (event->button == 1 && event->type == GDK_2BUTTON_PRESS && event->y < 14)
{
mainwin_set_shade(!config.player_shaded);
- if (dock_is_moving(GTK_WINDOW(mainwin)))
- dock_move_release(GTK_WINDOW(mainwin));
return TRUE;
}
- if (event->button == 3) {
- /* Pop up playback menu if right clicked over playback-control widgets,
- * otherwise popup general menu
- */
- if (mainwin_widget_contained(event, aud_active_skin->properties.mainwin_position_x,
- aud_active_skin->properties.mainwin_position_y, 248, 10) ||
- mainwin_widget_contained(event, aud_active_skin->properties.mainwin_previous_x,
- aud_active_skin->properties.mainwin_previous_y, 23, 18) ||
- mainwin_widget_contained(event, aud_active_skin->properties.mainwin_play_x,
- aud_active_skin->properties.mainwin_play_y, 23, 18) ||
- mainwin_widget_contained(event, aud_active_skin->properties.mainwin_pause_x,
- aud_active_skin->properties.mainwin_pause_y, 23, 18) ||
- mainwin_widget_contained(event, aud_active_skin->properties.mainwin_stop_x,
- aud_active_skin->properties.mainwin_stop_y, 23, 18) ||
- mainwin_widget_contained(event, aud_active_skin->properties.mainwin_next_x,
- aud_active_skin->properties.mainwin_next_y, 23, 18))
- ui_popup_menu_show(UI_MENU_PLAYBACK, event->x_root, event->y_root,
- FALSE, FALSE, 3, event->time);
- else
- ui_popup_menu_show(UI_MENU_MAIN, event->x_root, event->y_root,
- FALSE, FALSE, 3, event->time);
-
+ if (event->button == 3)
+ {
+ ui_popup_menu_show (UI_MENU_MAIN, event->x_root, event->y_root, FALSE,
+ FALSE, event->button, event->time);
return TRUE;
}
return FALSE;
}
+static void mainwin_playback_rpress (GtkWidget * button, GdkEventButton * event)
+{
+ ui_popup_menu_show (UI_MENU_PLAYBACK, event->x_root, event->y_root,
+ FALSE, FALSE, event->button, event->time);
+}
+
gboolean mainwin_keypress (GtkWidget * widget, GdkEventKey * event,
void * unused)
{
@@ -757,7 +583,7 @@ gboolean mainwin_keypress (GtkWidget * widget, GdkEventKey * event,
aud_drct_pl_next ();
break;
case GDK_KP_Insert:
- action_jump_to_file();
+ audgui_jump_to_track ();
break;
case GDK_space:
aud_drct_pause();
@@ -779,127 +605,6 @@ gboolean mainwin_keypress (GtkWidget * widget, GdkEventKey * event,
return TRUE;
}
-static void
-mainwin_jump_to_time_cb(GtkWidget * widget,
- GtkWidget * entry)
-{
- guint min = 0, sec = 0, params;
- gint time;
-
- params = sscanf(gtk_entry_get_text(GTK_ENTRY(entry)), "%u:%u",
- &min, &sec);
- if (params == 2)
- time = (min * 60) + sec;
- else if (params == 1)
- time = min;
- else
- return;
-
- aud_drct_seek (time*1000);
- gtk_widget_destroy (mainwin_jtt);
-}
-
-
-void
-mainwin_jump_to_time(void)
-{
- GtkWidget *vbox, *hbox_new, *hbox_total;
- GtkWidget *time_entry, *label, *bbox, *jump, *cancel;
- GtkWidget *dialog;
- guint tindex;
- gchar time_str[10];
-
- if (!aud_drct_get_playing()) {
- dialog =
- gtk_message_dialog_new (GTK_WINDOW (mainwin),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- _("Can't jump to time when no track is being played.\n"));
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- return;
- }
-
- if (mainwin_jtt) {
- gtk_window_present(GTK_WINDOW(mainwin_jtt));
- return;
- }
-
- mainwin_jtt = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_type_hint(GTK_WINDOW(mainwin_jtt),
- GDK_WINDOW_TYPE_HINT_DIALOG);
-
- gtk_window_set_title(GTK_WINDOW(mainwin_jtt), _("Jump to Time"));
- gtk_window_set_position(GTK_WINDOW(mainwin_jtt), GTK_WIN_POS_CENTER);
- gtk_window_set_transient_for(GTK_WINDOW(mainwin_jtt),
- GTK_WINDOW(mainwin));
-
- g_signal_connect(mainwin_jtt, "destroy",
- G_CALLBACK(gtk_widget_destroyed), &mainwin_jtt);
- gtk_container_set_border_width(GTK_CONTAINER(mainwin_jtt), 10);
-
- vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_add(GTK_CONTAINER(mainwin_jtt), vbox);
-
- hbox_new = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), hbox_new, TRUE, TRUE, 5);
-
- time_entry = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(hbox_new), time_entry, FALSE, FALSE, 5);
- g_signal_connect(time_entry, "activate",
- G_CALLBACK(mainwin_jump_to_time_cb), time_entry);
-
- gtk_widget_set_size_request(time_entry, 70, -1);
- label = gtk_label_new(_("minutes:seconds"));
- gtk_box_pack_start(GTK_BOX(hbox_new), label, FALSE, FALSE, 5);
-
- hbox_total = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox), hbox_total, TRUE, TRUE, 5);
- gtk_widget_show(hbox_total);
-
- /* FIXME: Disable display of current track length. It's not
- updated when track changes */
-
- label = gtk_label_new(_("Track length:"));
- gtk_box_pack_start(GTK_BOX(hbox_total), label, FALSE, FALSE, 5);
-
- gint len = aud_drct_get_length () / 1000;
- g_snprintf(time_str, sizeof(time_str), "%u:%2.2u", len / 60, len % 60);
- label = gtk_label_new(time_str);
-
- gtk_box_pack_start(GTK_BOX(hbox_total), label, FALSE, FALSE, 10);
-
- bbox = gtk_hbutton_box_new();
- gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 0);
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing(GTK_BOX(bbox), 5);
-
- cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
- gtk_container_add(GTK_CONTAINER(bbox), cancel);
- g_signal_connect_swapped(cancel, "clicked",
- G_CALLBACK(gtk_widget_destroy), mainwin_jtt);
-
- jump = gtk_button_new_from_stock(GTK_STOCK_JUMP_TO);
- GTK_WIDGET_SET_FLAGS(jump, GTK_CAN_DEFAULT);
- gtk_container_add(GTK_CONTAINER(bbox), jump);
- g_signal_connect(jump, "clicked",
- G_CALLBACK(mainwin_jump_to_time_cb), time_entry);
-
- tindex = aud_drct_get_time() / 1000;
- g_snprintf(time_str, sizeof(time_str), "%u:%2.2u", tindex / 60,
- tindex % 60);
- gtk_entry_set_text(GTK_ENTRY(time_entry), time_str);
-
- gtk_editable_select_region(GTK_EDITABLE(time_entry), 0, strlen(time_str));
-
- gtk_widget_show_all(mainwin_jtt);
-
- gtk_widget_grab_focus(time_entry);
- gtk_widget_grab_default(jump);
-}
-
/*
* Rewritten 09/13/06:
*
@@ -920,11 +625,14 @@ mainwin_drag_data_received(GtkWidget * widget,
gpointer user_data)
{
g_return_if_fail(selection_data != NULL);
- g_return_if_fail(selection_data->data != NULL);
- if (str_has_prefix_nocase((gchar *) selection_data->data, "fonts:///"))
+ const gchar * data = (const gchar *) gtk_selection_data_get_data
+ (selection_data);
+ g_return_if_fail (data);
+
+ if (str_has_prefix_nocase (data, "fonts:///"))
{
- gchar *path = (gchar *) selection_data->data;
+ const gchar * path = data;
gchar *decoded = g_filename_from_uri(path, NULL, NULL);
if (decoded == NULL)
@@ -938,218 +646,102 @@ mainwin_drag_data_received(GtkWidget * widget,
return;
}
- /* perhaps make suffix check case-insensitive -- desowin */
- if (str_has_prefix_nocase((char*)selection_data->data, "file:///")) {
- if (str_has_suffix_nocase((char*)selection_data->data, ".wsz\r\n") ||
- str_has_suffix_nocase((char*)selection_data->data, ".zip\r\n")) {
- on_skin_view_drag_data_received(GTK_WIDGET(user_data), context, x, y, selection_data, info, time, NULL);
+ if (str_has_prefix_nocase (data, "file:///"))
+ {
+ if (str_has_suffix_nocase (data, ".wsz\r\n") || str_has_suffix_nocase
+ (data, ".zip\r\n"))
+ {
+ on_skin_view_drag_data_received (0, context, x, y, selection_data, info, time, 0);
return;
}
}
- audgui_urilist_open ((const gchar *) selection_data->data);
+ audgui_urilist_open (data);
}
-static void
-on_visibility_warning_toggle(GtkToggleButton *tbt, gpointer unused)
+static gint time_now (void)
{
- config.warn_about_win_visibility = !gtk_toggle_button_get_active(tbt);
-}
-
-static void
-on_visibility_warning_response(GtkDialog *dlg, gint r_id, gpointer unused)
-{
- switch (r_id)
- {
- case GTK_RESPONSE_OK:
- mainwin_show(TRUE);
- break;
- case GTK_RESPONSE_CANCEL:
- default:
- break;
- }
- gtk_widget_destroy(GTK_WIDGET(dlg));
-}
-
-void
-mainwin_show_visibility_warning(void)
-{
- if (config.warn_about_win_visibility)
- {
- GtkWidget *label, *checkbt, *vbox;
- GtkWidget *warning_dlg =
- gtk_dialog_new_with_buttons( _("Audacious - visibility warning") ,
- GTK_WINDOW(mainwin) ,
- GTK_DIALOG_DESTROY_WITH_PARENT ,
- _("Show main player window") ,
- GTK_RESPONSE_OK , _("Ignore") ,
- GTK_RESPONSE_CANCEL , NULL );
-
- vbox = gtk_vbox_new( FALSE , 4 );
- gtk_container_set_border_width( GTK_CONTAINER(vbox) , 4 );
- gtk_box_pack_start( GTK_BOX(GTK_DIALOG(warning_dlg)->vbox) , vbox , TRUE , TRUE , 0 );
- label = gtk_label_new( _("Audacious has been started with all of its windows hidden.\n"
- "You may want to show the player window again to control Audacious; "
- "otherwise, you'll have to control it remotely via audtool or "
- "enabled plugins (such as the statusicon plugin).") );
- gtk_label_set_line_wrap( GTK_LABEL(label) , TRUE );
- gtk_misc_set_alignment( GTK_MISC(label) , 0.0 , 0.0 );
- checkbt = gtk_check_button_new_with_label( _("Always ignore, show/hide is controlled remotely") );
- gtk_box_pack_start( GTK_BOX(vbox) , label , TRUE , TRUE , 0 );
- gtk_box_pack_start( GTK_BOX(vbox) , checkbt , TRUE , TRUE , 0 );
- g_signal_connect( G_OBJECT(checkbt) , "toggled" ,
- G_CALLBACK(on_visibility_warning_toggle) , NULL );
- g_signal_connect( G_OBJECT(warning_dlg) , "response" ,
- G_CALLBACK(on_visibility_warning_response) , NULL );
- gtk_widget_show_all(warning_dlg);
- }
+ struct timeval tv;
+ gettimeofday (& tv, NULL);
+ return (tv.tv_sec % (24 * 3600) * 1000 + tv.tv_usec / 1000);
}
-static void
-on_broken_gtk_engine_warning_toggle(GtkToggleButton *tbt, gpointer unused)
+static gint time_diff (gint a, gint b)
{
- config.warn_about_broken_gtk_engines = !gtk_toggle_button_get_active(tbt);
+ if (a > 18 * 3600 * 1000 && b < 6 * 3600 * 1000) /* detect midnight */
+ b += 24 * 3600 * 1000;
+ return (b > a) ? b - a : 0;
}
-void
-ui_main_check_theme_engine(void)
+static gboolean seek_timeout (void * rewind)
{
- GtkSettings *settings;
- GtkWidget *widget;
- gchar *theme = NULL;
-
- widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_ensure_style(widget);
-
- settings = gtk_settings_get_default();
- g_object_get(G_OBJECT(settings), "gtk-theme-name", &theme, NULL);
- gtk_widget_destroy(widget);
-
- if (theme == NULL)
- return;
-
- if (g_ascii_strcasecmp(theme, "Qt"))
- {
- g_free(theme);
- return;
- }
-
- if (config.warn_about_broken_gtk_engines)
+ if (! aud_drct_get_playing ())
{
- gchar *msg;
- GtkWidget *label, *checkbt, *vbox;
- GtkWidget *warning_dlg =
- gtk_dialog_new_with_buttons( _("Audacious - broken GTK engine usage warning") ,
- GTK_WINDOW(mainwin) , GTK_DIALOG_DESTROY_WITH_PARENT ,
- GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL );
- vbox = gtk_vbox_new( FALSE , 4 );
- gtk_container_set_border_width( GTK_CONTAINER(vbox) , 4 );
- gtk_box_pack_start( GTK_BOX(GTK_DIALOG(warning_dlg)->vbox) , vbox ,
- TRUE , TRUE , 0 );
-
- msg = g_strdup_printf(_("<big><b>Broken GTK engine in use</b></big>\n\n"
- "Audacious has detected that you are using a broken GTK engine.\n\n"
- "The theme engine you are using, <i>%s</i>, is incompatible with some of the features "
- "used by modern skins. The incompatible features have been disabled for this session.\n\n"
- "To use these features, please consider using a different GTK theme engine."), theme);
- label = gtk_label_new(msg);
- gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
- g_free(msg);
-
- gtk_label_set_line_wrap( GTK_LABEL(label) , TRUE );
- gtk_misc_set_alignment( GTK_MISC(label) , 0.0 , 0.0 );
- checkbt = gtk_check_button_new_with_label( _("Do not display this warning again") );
- gtk_box_pack_start( GTK_BOX(vbox) , label , TRUE , TRUE , 0 );
- gtk_box_pack_start( GTK_BOX(vbox) , checkbt , TRUE , TRUE , 0 );
- g_signal_connect( G_OBJECT(checkbt) , "toggled" ,
- G_CALLBACK(on_broken_gtk_engine_warning_toggle) , NULL );
- g_signal_connect( G_OBJECT(warning_dlg) , "response" ,
- G_CALLBACK(gtk_widget_destroy) , NULL );
- gtk_widget_show_all(warning_dlg);
- gtk_window_stick(GTK_WINDOW(warning_dlg));
+ seek_source = 0;
+ return FALSE;
}
- config.disable_inline_gtk = TRUE;
-
- g_free(theme);
-}
-
-void
-mainwin_eject_pushed(void)
-{
- action_play_file();
-}
-
-static gboolean seek_timeout (void * rewind)
-{
- struct timeval tv;
- gint now, held, position;
-
- gettimeofday (& tv, NULL);
- now = tv.tv_sec % 86400 * 1000 + tv.tv_usec / 1000;
- held = (now >= seek_time) ? now - seek_time : 86400000 + now - seek_time;
-
+ gint held = time_diff (seek_time, time_now ());
if (held < SEEK_THRESHOLD)
return TRUE;
+ gint position;
if (GPOINTER_TO_INT (rewind))
position = seek_start - held / SEEK_SPEED;
else
position = seek_start + held / SEEK_SPEED;
position = CLAMP (position, 0, 219);
- ui_skinned_horizontal_slider_set_position (mainwin_position, position);
- mainwin_position_motion_cb (mainwin_position, position);
+ hslider_set_pos (mainwin_position, position);
+ mainwin_position_motion_cb ();
return TRUE;
}
static gboolean seek_press (GtkWidget * widget, GdkEventButton * event,
- void * rewind)
+ gboolean rewind)
{
- struct timeval tv;
-
- if (event->button != 1 || seek_source != 0)
+ if (event->button != 1 || seek_source)
return FALSE;
- seek_start = ui_skinned_horizontal_slider_get_position (mainwin_position);
- seek_event_time = event->time;
- gettimeofday (& tv, NULL);
- seek_time = tv.tv_sec % 86400 * 1000 + tv.tv_usec / 1000;
-
- seek_source = g_timeout_add (SEEK_TIMEOUT, seek_timeout, rewind);
-
+ seek_start = hslider_get_pos (mainwin_position);
+ seek_time = time_now ();
+ seek_source = g_timeout_add (SEEK_TIMEOUT, seek_timeout, GINT_TO_POINTER
+ (rewind));
return FALSE;
}
static gboolean seek_release (GtkWidget * widget, GdkEventButton * event,
- void * rewind)
+ gboolean rewind)
{
- gint held;
-
- if (event->button != 1)
+ if (event->button != 1 || ! seek_source)
return FALSE;
- held = (event->time >= seek_event_time) ? event->time - seek_event_time :
- 86400000 + event->time - seek_event_time;
-
- if (held < SEEK_THRESHOLD)
+ if (! aud_drct_get_playing () || time_diff (seek_time, time_now ()) <
+ SEEK_THRESHOLD)
{
- if (GPOINTER_TO_INT (rewind))
+ if (rewind)
aud_drct_pl_prev ();
else
aud_drct_pl_next ();
}
else
- mainwin_position_release_cb (mainwin_position,
- ui_skinned_horizontal_slider_get_position (mainwin_position));
+ mainwin_position_release_cb ();
g_source_remove (seek_source);
seek_source = 0;
-
return FALSE;
}
+static void mainwin_rew_press (GtkWidget * button, GdkEventButton * event)
+ {seek_press (button, event, TRUE); }
+static void mainwin_rew_release (GtkWidget * button, GdkEventButton * event)
+ {seek_release (button, event, TRUE); }
+static void mainwin_fwd_press (GtkWidget * button, GdkEventButton * event)
+ {seek_press (button, event, FALSE); }
+static void mainwin_fwd_release (GtkWidget * button, GdkEventButton * event)
+ {seek_release (button, event, FALSE); }
+
void
mainwin_play_pushed(void)
{
@@ -1159,138 +751,75 @@ mainwin_play_pushed(void)
aud_drct_play ();
}
-void
-mainwin_stop_pushed(void)
-{
- aud_drct_stop();
- mainwin_clear_song_info();
- ab_position_a = ab_position_b = -1;
-}
+static void mainwin_shuffle_cb (GtkWidget * button, GdkEventButton * event)
+ {check_set (toggleaction_group_others, "playback shuffle", button_get_active (button)); }
+static void mainwin_repeat_cb (GtkWidget * button, GdkEventButton * event)
+ {check_set (toggleaction_group_others, "playback repeat", button_get_active (button)); }
+static void mainwin_eq_cb (GtkWidget * button, GdkEventButton * event)
+ {equalizerwin_show (button_get_active (button)); }
+static void mainwin_pl_cb (GtkWidget * button, GdkEventButton * event)
+ {playlistwin_show (button_get_active (button)); }
-void
-mainwin_shuffle_pushed(gboolean toggled)
+static void mainwin_spos_set_knob (void)
{
- check_set( toggleaction_group_others , "playback shuffle" , toggled );
-}
-
-void mainwin_shuffle_pushed_cb(void) {
- mainwin_shuffle_pushed(UI_SKINNED_BUTTON(mainwin_shuffle)->inside);
-}
-
-void
-mainwin_repeat_pushed(gboolean toggled)
-{
- check_set( toggleaction_group_others , "playback repeat" , toggled );
-}
-
-void mainwin_repeat_pushed_cb(void) {
- mainwin_repeat_pushed(UI_SKINNED_BUTTON(mainwin_repeat)->inside);
-}
+ gint pos = hslider_get_pos (mainwin_sposition);
-void mainwin_equalizer_pushed_cb(void) {
- mainwin_eq_pushed(UI_SKINNED_BUTTON(mainwin_eq)->inside);
-}
+ gint x;
+ if (pos < 6)
+ x = 17;
+ else if (pos < 9)
+ x = 20;
+ else
+ x = 23;
-void mainwin_playlist_pushed_cb(void) {
- mainwin_pl_pushed(UI_SKINNED_BUTTON(mainwin_pl)->inside);
+ hslider_set_knob (mainwin_sposition, x, 36, x, 36);
}
-void
-mainwin_eq_pushed(gboolean toggled)
+static void mainwin_spos_motion_cb (void)
{
- equalizerwin_show(toggled);
-}
+ mainwin_spos_set_knob ();
-void
-mainwin_pl_pushed(gboolean toggled)
-{
- playlistwin_show (toggled);
-}
+ gint pos = hslider_get_pos (mainwin_sposition);
+ gint length = aud_drct_get_length ();
+ gint time = (pos - 1) * length / 12;
-gint
-mainwin_spos_frame_cb(gint pos)
-{
- if (mainwin_sposition) {
- gint x = 0;
- if (pos < 6)
- x = 17;
- else if (pos < 9)
- x = 20;
- else
- x = 23;
+ gchar buf[7];
+ format_time (buf, time, length);
- UI_SKINNED_HORIZONTAL_SLIDER(mainwin_sposition)->knob_nx = x;
- UI_SKINNED_HORIZONTAL_SLIDER(mainwin_sposition)->knob_px = x;
- }
- return 1;
+ textbox_set_text (mainwin_stime_min, buf);
+ textbox_set_text (mainwin_stime_sec, buf + 4);
}
-void
-mainwin_spos_motion_cb(GtkWidget *widget, gint pos)
+static void mainwin_spos_release_cb (void)
{
- gint time;
- gchar *time_msg;
-
- pos--;
-
- time = aud_drct_get_length () / 1000 * pos / 12;
-
- if (config.timer_mode == TIMER_REMAINING) {
- time = aud_drct_get_length () / 1000 - time;
- time_msg = g_strdup_printf("-%2.2d", time / 60);
- ui_skinned_textbox_set_text(mainwin_stime_min, time_msg);
- g_free(time_msg);
- }
- else {
- time_msg = g_strdup_printf(" %2.2d", time / 60);
- ui_skinned_textbox_set_text(mainwin_stime_min, time_msg);
- g_free(time_msg);
- }
-
- time_msg = g_strdup_printf("%2.2d", time % 60);
- ui_skinned_textbox_set_text(mainwin_stime_sec, time_msg);
- g_free(time_msg);
-}
+ mainwin_spos_set_knob ();
-void
-mainwin_spos_release_cb(GtkWidget *widget, gint pos)
-{
+ gint pos = hslider_get_pos (mainwin_sposition);
aud_drct_seek (aud_drct_get_length () * (pos - 1) / 12);
}
-void
-mainwin_position_motion_cb(GtkWidget *widget, gint pos)
+static void mainwin_position_motion_cb (void)
{
- gint length, time;
- gchar *seek_msg;
+ gint length = aud_drct_get_length () / 1000;
+ gint pos = hslider_get_pos (mainwin_position);
+ gint time = pos * length / 219;
- length = aud_drct_get_length () / 1000;
- time = (length * pos) / 219;
- seek_msg = g_strdup_printf(_("Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"),
- time / 60, time % 60,
- length / 60, length % 60,
- (length != 0) ? (time * 100) / length : 0);
+ gchar * seek_msg = g_strdup_printf (_("Seek to %d:%-2.2d / %d:%-2.2d"), time
+ / 60, time % 60, length / 60, length % 60);
mainwin_lock_info_text(seek_msg);
g_free(seek_msg);
}
-void
-mainwin_position_release_cb(GtkWidget *widget, gint pos)
+static void mainwin_position_release_cb (void)
{
- gint length, time;
+ gint length = aud_drct_get_length ();
+ gint pos = hslider_get_pos (mainwin_position);
+ gint time = (gint64) pos * length / 219;
- length = aud_drct_get_length();
- time = (gint64) length * pos / 219;
aud_drct_seek(time);
mainwin_release_info_text();
}
-gint
-mainwin_volume_frame_cb(gint pos)
-{
- return (gint) rint((pos / 52.0) * 28);
-}
-
void
mainwin_adjust_volume_motion(gint v)
{
@@ -1335,56 +864,74 @@ mainwin_adjust_balance_release(void)
mainwin_release_info_text();
}
-void
-mainwin_set_volume_slider(gint percent)
+static void mainwin_volume_set_frame (void)
{
- ui_skinned_horizontal_slider_set_position(mainwin_volume, (gint) rint((percent * 51) / 100.0));
+ gint pos = hslider_get_pos (mainwin_volume);
+ gint frame = (pos * 27 + 25) / 51;
+ hslider_set_frame (mainwin_volume, 0, 15 * frame);
}
-void
-mainwin_set_balance_slider(gint percent)
+void mainwin_set_volume_slider (gint percent)
{
- ui_skinned_horizontal_slider_set_position(mainwin_balance, (gint) rint(((percent * 12) / 100.0) + 12));
+ hslider_set_pos (mainwin_volume, (percent * 51 + 50) / 100);
+ mainwin_volume_set_frame ();
}
-void
-mainwin_volume_motion_cb(GtkWidget *widget, gint pos)
+static void mainwin_volume_motion_cb (void)
{
+ mainwin_volume_set_frame ();
+ gint pos = hslider_get_pos (mainwin_volume);
+ gint vol = (pos * 100 + 25) / 51;
- gint vol = (pos * 100) / 51;
mainwin_adjust_volume_motion(vol);
equalizerwin_set_volume_slider(vol);
}
-gboolean
-mainwin_volume_release_cb(GtkWidget *widget, gint pos)
+static void mainwin_volume_release_cb (void)
{
+ mainwin_volume_set_frame ();
mainwin_adjust_volume_release();
- return FALSE;
}
-gint
-mainwin_balance_frame_cb(gint pos)
+static void mainwin_balance_set_frame (void)
{
- return ((abs(pos - 12) * 28) / 13);
+ gint pos = hslider_get_pos (mainwin_balance);
+ gint frame = (abs (pos - 12) * 27 + 6) / 12;
+ hslider_set_frame (mainwin_balance, 9, 15 * frame);
}
-void
-mainwin_balance_motion_cb(GtkWidget *widget, gint pos)
+void mainwin_set_balance_slider (gint percent)
+{
+ if (percent > 0)
+ hslider_set_pos (mainwin_balance, 12 + (percent * 12 + 50) / 100);
+ else
+ hslider_set_pos (mainwin_balance, 12 + (percent * 12 - 50) / 100);
+
+ mainwin_balance_set_frame ();
+}
+
+static void mainwin_balance_motion_cb (void)
{
- gint bal = ((pos - 12) * 100) / 12;
+ mainwin_balance_set_frame ();
+ gint pos = hslider_get_pos (mainwin_balance);
+
+ gint bal;
+ if (pos > 12)
+ bal = ((pos - 12) * 100 + 6) / 12;
+ else
+ bal = ((pos - 12) * 100 - 6) / 12;
+
mainwin_adjust_balance_motion(bal);
equalizerwin_set_balance_slider(bal);
}
-void
-mainwin_balance_release_cb(GtkWidget *widget, gint pos)
+static void mainwin_balance_release_cb (void)
{
+ mainwin_balance_set_frame ();
mainwin_adjust_volume_release();
}
-void
-mainwin_set_volume_diff(gint diff)
+static void mainwin_set_volume_diff (gint diff)
{
gint vol;
@@ -1400,26 +947,14 @@ mainwin_set_volume_diff(gint diff)
g_timeout_add(700, (GSourceFunc)(mainwin_volume_release_cb), NULL);
}
-void
-mainwin_set_balance_diff(gint diff)
-{
- gint b;
- b = CLAMP(balance + diff, -100, 100);
- mainwin_adjust_balance_motion(b);
- mainwin_set_balance_slider(b);
- equalizerwin_set_balance_slider(b);
-}
-
-static void mainwin_real_show (void)
+static void mainwin_real_show (gboolean show)
{
start_stop_visual (FALSE);
- gtk_window_present(GTK_WINDOW(mainwin));
-}
-static void mainwin_real_hide (void)
-{
- gtk_widget_hide(mainwin);
- start_stop_visual (FALSE);
+ if (show)
+ gtk_window_present ((GtkWindow *) mainwin);
+ else
+ gtk_widget_hide (mainwin);
}
void mainwin_show (gboolean show)
@@ -1432,193 +967,21 @@ void mainwin_show (gboolean show)
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (a), show);
else
{
- if (show != config.player_visible) {
- config.player_visible = show;
- config.player_visible_prev = !show;
- aud_cfg->player_visible = show;
- }
-
- if (show)
- mainwin_real_show ();
- else
- mainwin_real_hide ();
+ config.player_visible = show;
+ playlistwin_show (config.playlist_visible);
+ equalizerwin_show (config.equalizer_visible);
+ mainwin_real_show (show);
}
}
-void
-mainwin_set_noplaylistadvance(gboolean no_advance)
-{
- aud_cfg->no_playlist_advance = no_advance;
- check_set(toggleaction_group_others, "playback no playlist advance", aud_cfg->no_playlist_advance);
-}
-
-static void
-mainwin_set_scaled(gboolean scaled)
-{
- GList * list;
- SkinnedWindow * skinned;
- GtkFixed * fixed;
- GtkFixedChild * child;
-
- skinned = (SkinnedWindow *) mainwin;
- fixed = (GtkFixed *) skinned->normal;
-
- for (list = fixed->children; list; list = list->next)
- {
- child = (GtkFixedChild *) list->data;
- g_signal_emit_by_name ((GObject *) child->widget, "toggle-scaled");
- }
-
- fixed = (GtkFixed *) skinned->shaded;
-
- for (list = fixed->children; list; list = list->next)
- {
- child = (GtkFixedChild *) list->data;
- g_signal_emit_by_name ((GObject *) child->widget, "toggle-scaled");
- }
-
- mainwin_refresh_hints();
- mainwin_set_shape ();
-}
-
-void
-set_scaled(gboolean scaled)
-{
- config.scaled = scaled;
-
- mainwin_set_scaled(scaled);
-
- if (config.eq_scaled_linked)
- equalizerwin_set_scaled(scaled);
-}
-
-
-
-void
-mainwin_general_menu_callback(gpointer data,
- guint action,
- GtkWidget * item)
-{
- switch (action) {
- case MAINWIN_GENERAL_PREFS:
- action_preferences();
- break;
- case MAINWIN_GENERAL_ABOUT:
- action_about_audacious();
- break;
- case MAINWIN_GENERAL_PLAYFILE: {
- audgui_run_filebrowser(FALSE); /* FALSE = NO_PLAY_BUTTON */
- break;
- }
- case MAINWIN_GENERAL_PLAYLOCATION:
- action_play_location();
- break;
- case MAINWIN_GENERAL_FILEINFO:
- audgui_infowin_show_current ();
- break;
- case MAINWIN_GENERAL_FOCUSPLWIN:
- gtk_window_present(GTK_WINDOW(playlistwin));
- break;
- case MAINWIN_GENERAL_SHOWMWIN:
- mainwin_show(GTK_CHECK_MENU_ITEM(item)->active);
- break;
- case MAINWIN_GENERAL_SHOWPLWIN:
- playlistwin_show (GTK_CHECK_MENU_ITEM(item) ->active);
- break;
- case MAINWIN_GENERAL_SHOWEQWIN:
- equalizerwin_show (GTK_CHECK_MENU_ITEM (item)->active);
- break;
- case MAINWIN_GENERAL_PREV:
- aud_drct_pl_prev ();
- break;
- case MAINWIN_GENERAL_PLAY:
- mainwin_play_pushed();
- break;
- case MAINWIN_GENERAL_PAUSE:
- aud_drct_pause();
- break;
- case MAINWIN_GENERAL_STOP:
- mainwin_stop_pushed();
- break;
- case MAINWIN_GENERAL_NEXT:
- aud_drct_pl_next ();
- break;
-#if 0
- case MAINWIN_GENERAL_BACK5SEC:
- if (aud_drct_get_playing()
- && aud_playlist_get_current_length(playlist) != -1)
- playback_seek_relative(-5);
- break;
- case MAINWIN_GENERAL_FWD5SEC:
- if (aud_drct_get_playing()
- && aud_playlist_get_current_length(playlist) != -1)
- playback_seek_relative(5);
- break;
-#endif
- case MAINWIN_GENERAL_START:
- aud_drct_pl_set_pos (0);
- break;
- case MAINWIN_GENERAL_JTT:
- mainwin_jump_to_time();
- break;
- case MAINWIN_GENERAL_JTF:
- action_jump_to_file();
- break;
- case MAINWIN_GENERAL_EXIT:
- aud_drct_quit ();
- break;
- case MAINWIN_GENERAL_SETAB:
- if (aud_drct_get_length () > 0)
- {
- if (ab_position_a == -1) {
- ab_position_a = aud_drct_get_time();
- ab_position_b = -1;
- mainwin_lock_info_text("'Loop-Point A Position' set.");
- } else if (ab_position_b == -1) {
- int time = aud_drct_get_time();
- if (time > ab_position_a)
- ab_position_b = time;
- mainwin_release_info_text();
- } else {
- ab_position_a = aud_drct_get_time();
- ab_position_b = -1;
- mainwin_lock_info_text("'Loop-Point A Position' reset.");
- }
- }
- break;
- case MAINWIN_GENERAL_CLEARAB:
- if (aud_drct_get_length () > 0)
- {
- ab_position_a = ab_position_b = -1;
- mainwin_release_info_text();
- }
- break;
- case MAINWIN_GENERAL_NEW_PL:
- {
- gint playlist = aud_playlist_count ();
-
- aud_playlist_insert (playlist);
- aud_playlist_set_active (playlist);
- }
- break;
- case MAINWIN_GENERAL_PREV_PL:
- aud_playlist_set_active (aud_playlist_get_active () - 1);
- break;
- case MAINWIN_GENERAL_NEXT_PL:
- aud_playlist_set_active (aud_playlist_get_active () + 1);
- break;
- }
-}
-
-static void
-mainwin_mr_change(GtkWidget *widget, MenuRowItem i)
+void mainwin_mr_change (MenuRowItem i)
{
switch (i) {
case MENUROW_OPTIONS:
mainwin_lock_info_text(_("Options Menu"));
break;
case MENUROW_ALWAYS:
- if (UI_SKINNED_MENUROW(mainwin_menurow)->always_selected)
+ if (config.always_on_top)
mainwin_lock_info_text(_("Disable 'Always On Top'"));
else
mainwin_lock_info_text(_("Enable 'Always On Top'"));
@@ -1627,10 +990,6 @@ mainwin_mr_change(GtkWidget *widget, MenuRowItem i)
mainwin_lock_info_text(_("File Info Box"));
break;
case MENUROW_SCALE:
- if (UI_SKINNED_MENUROW(mainwin_menurow)->scale_selected)
- mainwin_lock_info_text(_("Disable 'GUI Scaling'"));
- else
- mainwin_lock_info_text(_("Enable 'GUI Scaling'"));
break;
case MENUROW_VISUALIZATION:
mainwin_lock_info_text(_("Visualization Menu"));
@@ -1640,8 +999,7 @@ mainwin_mr_change(GtkWidget *widget, MenuRowItem i)
}
}
-static void
-mainwin_mr_release(GtkWidget *widget, MenuRowItem i, GdkEventButton *event)
+void mainwin_mr_release (MenuRowItem i, GdkEventButton * event)
{
switch (i) {
case MENUROW_OPTIONS:
@@ -1649,19 +1007,14 @@ mainwin_mr_release(GtkWidget *widget, MenuRowItem i, GdkEventButton *event)
FALSE, FALSE, 1, event->time);
break;
case MENUROW_ALWAYS:
- gtk_toggle_action_set_active(
- GTK_TOGGLE_ACTION(gtk_action_group_get_action(
- toggleaction_group_others , "view always on top" )) ,
- UI_SKINNED_MENUROW(mainwin_menurow)->always_selected );
+ gtk_toggle_action_set_active ((GtkToggleAction *)
+ gtk_action_group_get_action (toggleaction_group_others,
+ "view always on top"), config.always_on_top);
break;
case MENUROW_FILEINFOBOX:
audgui_infowin_show_current ();
break;
case MENUROW_SCALE:
- gtk_toggle_action_set_active(
- GTK_TOGGLE_ACTION(gtk_action_group_get_action(
- toggleaction_group_others , "view scaled" )) ,
- UI_SKINNED_MENUROW(mainwin_menurow)->scale_selected );
break;
case MENUROW_VISUALIZATION:
ui_popup_menu_show(UI_MENU_VISUALIZATION, event->x_root,
@@ -1674,20 +1027,6 @@ mainwin_mr_release(GtkWidget *widget, MenuRowItem i, GdkEventButton *event)
mainwin_release_info_text();
}
-void
-ui_main_set_initial_volume(void)
-{
- gint b, v;
-
- aud_drct_get_volume_main (& v);
- aud_drct_get_volume_balance (& b);
-
- mainwin_set_volume_slider(v);
- equalizerwin_set_volume_slider(v);
- mainwin_set_balance_slider(b);
- equalizerwin_set_balance_slider(b);
-}
-
static void
set_timer_mode(TimerMode mode)
{
@@ -1697,12 +1036,6 @@ set_timer_mode(TimerMode mode)
check_set(radioaction_group_viewtime, "view time remaining", TRUE);
}
-static void
-set_timer_mode_menu_cb(TimerMode mode)
-{
- config.timer_mode = mode;
-}
-
gboolean
change_timer_mode_cb(GtkWidget *widget, GdkEventButton *event)
{
@@ -1723,18 +1056,6 @@ static void change_timer_mode(void) {
mainwin_update_song_info();
}
-static void
-mainwin_aud_playlist_prev(void)
-{
- aud_drct_pl_prev ();
-}
-
-static void
-mainwin_aud_playlist_next(void)
-{
- aud_drct_pl_next ();
-}
-
void
mainwin_setup_menus(void)
{
@@ -1747,21 +1068,21 @@ mainwin_setup_menus(void)
check_set(toggleaction_group_others, "roll up player", config.player_shaded);
check_set(toggleaction_group_others, "roll up playlist editor", config.playlist_shaded);
check_set(toggleaction_group_others, "roll up equalizer", config.equalizer_shaded);
- check_set(toggleaction_group_others, "view easy move", config.easy_move);
- check_set(toggleaction_group_others, "view scaled", config.scaled);
mainwin_enable_status_message (FALSE);
/* Songname menu */
check_set(toggleaction_group_others, "autoscroll songname", config.autoscroll);
- check_set(toggleaction_group_others, "stop after current song", aud_cfg->stopaftersong);
+ check_set (toggleaction_group_others, "stop after current song",
+ aud_get_bool (NULL, "stop_after_current_song"));
/* Playback menu */
- check_set(toggleaction_group_others, "playback repeat", aud_cfg->repeat);
- check_set(toggleaction_group_others, "playback shuffle", aud_cfg->shuffle);
- check_set(toggleaction_group_others, "playback no playlist advance", aud_cfg->no_playlist_advance);
+ check_set (toggleaction_group_others, "playback repeat", aud_get_bool (NULL, "repeat"));
+ check_set (toggleaction_group_others, "playback shuffle", aud_get_bool (NULL, "shuffle"));
+ check_set (toggleaction_group_others, "playback no playlist advance",
+ aud_get_bool (NULL, "no_playlist_advance"));
mainwin_enable_status_message (TRUE);
@@ -1891,220 +1212,216 @@ mainwin_setup_menus(void)
}
}
-static void mainwin_info_double_clicked_cb (void)
+static gboolean mainwin_info_button_press (GtkWidget * widget, GdkEventButton *
+ event)
{
- audgui_infowin_show_current ();
-}
+ if (event->type == GDK_BUTTON_PRESS && event->button == 3)
+ {
+ ui_popup_menu_show (UI_MENU_SONGNAME, event->x_root, event->y_root,
+ FALSE, FALSE, event->button, event->time);
+ return TRUE;
+ }
-static void mainwin_info_right_clicked_cb(GtkWidget *widget, GdkEventButton
- *event)
-{
- ui_popup_menu_show(UI_MENU_SONGNAME, event->x_root, event->y_root, FALSE,
- FALSE, 3, event->time);
+ if (event->type == GDK_2BUTTON_PRESS && event->button == 1)
+ {
+ audgui_infowin_show_current ();
+ return TRUE;
+ }
+
+ return FALSE;
}
static void
mainwin_create_widgets(void)
{
- mainwin_menubtn = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_menubtn, SKINNED_WINDOW(mainwin)->normal,
- 6, 3, 9, 9, 0, 0, 0, 9, SKIN_TITLEBAR);
- g_signal_connect(mainwin_menubtn, "clicked", mainwin_menubtn_cb, NULL );
-
- mainwin_minimize = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_minimize, SKINNED_WINDOW(mainwin)->normal,
- 244, 3, 9, 9, 9, 0, 9, 9, SKIN_TITLEBAR);
- g_signal_connect(mainwin_minimize, "clicked", mainwin_minimize_cb, NULL );
-
- mainwin_shade = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_shade, SKINNED_WINDOW(mainwin)->normal,
- 254, 3, 9, 9, 0, 18, 9, 18, SKIN_TITLEBAR);
- g_signal_connect(mainwin_shade, "clicked", mainwin_shade_toggle, NULL );
-
- mainwin_close = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_close, SKINNED_WINDOW(mainwin)->normal,
- 264, 3, 9, 9, 18, 0, 18, 9, SKIN_TITLEBAR);
- g_signal_connect ((GObject *) mainwin_close, "clicked", aud_drct_quit,
- 0);
-
- mainwin_rew = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_rew, SKINNED_WINDOW(mainwin)->normal,
- 16, 88, 23, 18, 0, 0, 0, 18, SKIN_CBUTTONS);
- g_signal_connect (mainwin_rew, "button-press-event", (GCallback)
- seek_press, GINT_TO_POINTER (TRUE));
- g_signal_connect (mainwin_rew, "button-release-event", (GCallback)
- seek_release, GINT_TO_POINTER (TRUE));
-
- mainwin_fwd = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_fwd, SKINNED_WINDOW(mainwin)->normal,
- 108, 88, 22, 18, 92, 0, 92, 18, SKIN_CBUTTONS);
- g_signal_connect (mainwin_fwd, "button-press-event", (GCallback)
- seek_press, GINT_TO_POINTER (FALSE));
- g_signal_connect (mainwin_fwd, "button-release-event", (GCallback)
- seek_release, GINT_TO_POINTER (FALSE));
-
- mainwin_play = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_play, SKINNED_WINDOW(mainwin)->normal,
- 39, 88, 23, 18, 23, 0, 23, 18, SKIN_CBUTTONS);
- g_signal_connect(mainwin_play, "clicked", mainwin_play_pushed, NULL );
-
- mainwin_pause = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_pause, SKINNED_WINDOW(mainwin)->normal,
- 62, 88, 23, 18, 46, 0, 46, 18, SKIN_CBUTTONS);
- g_signal_connect(mainwin_pause, "clicked", aud_drct_pause, NULL );
-
- mainwin_stop = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_stop, SKINNED_WINDOW(mainwin)->normal,
- 85, 88, 23, 18, 69, 0, 69, 18, SKIN_CBUTTONS);
- g_signal_connect(mainwin_stop, "clicked", mainwin_stop_pushed, NULL );
-
- mainwin_eject = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_eject, SKINNED_WINDOW(mainwin)->normal,
- 136, 89, 22, 16, 114, 0, 114, 16, SKIN_CBUTTONS);
- g_signal_connect(mainwin_eject, "clicked", mainwin_eject_pushed, NULL);
-
- mainwin_shuffle = ui_skinned_button_new();
- ui_skinned_toggle_button_setup(mainwin_shuffle, SKINNED_WINDOW(mainwin)->normal,
- 164, 89, 46, 15, 28, 0, 28, 15, 28, 30, 28, 45, SKIN_SHUFREP);
- g_signal_connect(mainwin_shuffle, "clicked", mainwin_shuffle_pushed_cb, NULL);
-
- mainwin_repeat = ui_skinned_button_new();
- ui_skinned_toggle_button_setup(mainwin_repeat, SKINNED_WINDOW(mainwin)->normal,
- 210, 89, 28, 15, 0, 0, 0, 15, 0, 30, 0, 45, SKIN_SHUFREP);
- g_signal_connect(mainwin_repeat, "clicked", mainwin_repeat_pushed_cb, NULL);
-
- mainwin_eq = ui_skinned_button_new();
- ui_skinned_toggle_button_setup(mainwin_eq, SKINNED_WINDOW(mainwin)->normal,
- 219, 58, 23, 12, 0, 61, 46, 61, 0, 73, 46, 73, SKIN_SHUFREP);
- g_signal_connect(mainwin_eq, "clicked", mainwin_equalizer_pushed_cb, NULL);
- ui_skinned_button_set_inside(mainwin_eq, config.equalizer_visible);
-
- mainwin_pl = ui_skinned_button_new();
- ui_skinned_toggle_button_setup(mainwin_pl, SKINNED_WINDOW(mainwin)->normal,
- 242, 58, 23, 12, 23, 61, 69, 61, 23, 73, 69, 73, SKIN_SHUFREP);
- g_signal_connect(mainwin_pl, "clicked", mainwin_playlist_pushed_cb, NULL);
- ui_skinned_button_set_inside(mainwin_pl, config.playlist_visible);
-
- mainwin_info = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->normal, 112, 27, 153, 1, SKIN_TEXT);
- ui_skinned_textbox_set_scroll(mainwin_info, config.autoscroll);
- ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font);
- g_signal_connect(mainwin_info, "double-clicked", mainwin_info_double_clicked_cb, NULL);
- g_signal_connect(mainwin_info, "right-clicked", G_CALLBACK(mainwin_info_right_clicked_cb), NULL);
-
- mainwin_othertext = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->normal, 112, 43, 153, 1, SKIN_TEXT);
-
- mainwin_rate_text = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->normal, 111, 43, 15, 0, SKIN_TEXT);
-
- mainwin_freq_text = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->normal, 156, 43, 10, 0, SKIN_TEXT);
-
- mainwin_menurow = ui_skinned_menurow_new(SKINNED_WINDOW(mainwin)->normal, 10, 22, 304, 0, 304, 44, SKIN_TITLEBAR);
- g_signal_connect(mainwin_menurow, "change", G_CALLBACK(mainwin_mr_change), NULL);
- g_signal_connect(mainwin_menurow, "release", G_CALLBACK(mainwin_mr_release), NULL);
-
- mainwin_volume = ui_skinned_horizontal_slider_new(SKINNED_WINDOW(mainwin)->normal, 107, 57, 68,
- 13, 15, 422, 0, 422, 14, 11, 15, 0, 0, 51,
- mainwin_volume_frame_cb, SKIN_VOLUME);
- g_signal_connect(mainwin_volume, "motion", G_CALLBACK(mainwin_volume_motion_cb), NULL);
- g_signal_connect(mainwin_volume, "release", G_CALLBACK(mainwin_volume_release_cb), NULL);
-
- mainwin_balance = ui_skinned_horizontal_slider_new(SKINNED_WINDOW(mainwin)->normal, 177, 57, 38,
- 13, 15, 422, 0, 422, 14, 11, 15, 9, 0, 24,
- mainwin_balance_frame_cb, SKIN_BALANCE);
- g_signal_connect(mainwin_balance, "motion", G_CALLBACK(mainwin_balance_motion_cb), NULL);
- g_signal_connect(mainwin_balance, "release", G_CALLBACK(mainwin_balance_release_cb), NULL);
-
- mainwin_monostereo = ui_skinned_monostereo_new(SKINNED_WINDOW(mainwin)->normal, 212, 41, SKIN_MONOSTEREO);
-
- mainwin_playstatus = ui_skinned_playstatus_new(SKINNED_WINDOW(mainwin)->normal, 24, 28);
-
- mainwin_minus_num = ui_skinned_number_new(SKINNED_WINDOW(mainwin)->normal, 36, 26, SKIN_NUMBERS);
+ mainwin_menubtn = button_new (9, 9, 0, 0, 0, 9, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, FALSE, mainwin_menubtn, 6, 3);
+ button_on_release (mainwin_menubtn, (ButtonCB) mainwin_menubtn_cb);
+
+ mainwin_minimize = button_new (9, 9, 9, 0, 9, 9, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, FALSE, mainwin_minimize, 244, 3);
+ button_on_release (mainwin_minimize, (ButtonCB) mainwin_minimize_cb);
+
+ mainwin_shade = button_new (9, 9, 0, 18, 9, 18, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, FALSE, mainwin_shade, 254, 3);
+ button_on_release (mainwin_shade, (ButtonCB) mainwin_shade_toggle);
+
+ mainwin_close = button_new (9, 9, 18, 0, 18, 9, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, FALSE, mainwin_close, 264, 3);
+ button_on_release (mainwin_close, (ButtonCB) aud_drct_quit);
+
+ mainwin_rew = button_new (23, 18, 0, 0, 0, 18, SKIN_CBUTTONS, SKIN_CBUTTONS);
+ window_put_widget (mainwin, FALSE, mainwin_rew, 16, 88);
+ button_on_press (mainwin_rew, mainwin_rew_press);
+ button_on_release (mainwin_rew, mainwin_rew_release);
+ button_on_rpress (mainwin_rew, mainwin_playback_rpress);
+
+ mainwin_fwd = button_new (22, 18, 92, 0, 92, 18, SKIN_CBUTTONS, SKIN_CBUTTONS);
+ window_put_widget (mainwin, FALSE, mainwin_fwd, 108, 88);
+ button_on_press (mainwin_fwd, mainwin_fwd_press);
+ button_on_release (mainwin_fwd, mainwin_fwd_release);
+ button_on_rpress (mainwin_fwd, mainwin_playback_rpress);
+
+ mainwin_play = button_new (23, 18, 23, 0, 23, 18, SKIN_CBUTTONS, SKIN_CBUTTONS);
+ window_put_widget (mainwin, FALSE, mainwin_play, 39, 88);
+ button_on_release (mainwin_play, (ButtonCB) mainwin_play_pushed);
+ button_on_rpress (mainwin_play, mainwin_playback_rpress);
+
+ mainwin_pause = button_new (23, 18, 46, 0, 46, 18, SKIN_CBUTTONS, SKIN_CBUTTONS);
+ window_put_widget (mainwin, FALSE, mainwin_pause, 62, 88);
+ button_on_release (mainwin_pause, (ButtonCB) aud_drct_pause);
+ button_on_rpress (mainwin_pause, mainwin_playback_rpress);
+
+ mainwin_stop = button_new (23, 18, 69, 0, 69, 18, SKIN_CBUTTONS, SKIN_CBUTTONS);
+ window_put_widget (mainwin, FALSE, mainwin_stop, 85, 88);
+ button_on_release (mainwin_stop, (ButtonCB) aud_drct_stop);
+ button_on_rpress (mainwin_stop, mainwin_playback_rpress);
+
+ mainwin_eject = button_new (22, 16, 114, 0, 114, 16, SKIN_CBUTTONS, SKIN_CBUTTONS);
+ window_put_widget (mainwin, FALSE, mainwin_eject, 136, 89);
+ button_on_release (mainwin_eject, (ButtonCB) action_play_file);
+
+ mainwin_shuffle = button_new_toggle (46, 15, 28, 0, 28, 15, 28, 30, 28, 45, SKIN_SHUFREP, SKIN_SHUFREP);
+ window_put_widget (mainwin, FALSE, mainwin_shuffle, 164, 89);
+ button_on_release (mainwin_shuffle, mainwin_shuffle_cb);
+
+ mainwin_repeat = button_new_toggle (28, 15, 0, 0, 0, 15, 0, 30, 0, 45, SKIN_SHUFREP, SKIN_SHUFREP);
+ window_put_widget (mainwin, FALSE, mainwin_repeat, 210, 89);
+ button_on_release (mainwin_repeat, mainwin_repeat_cb);
+
+ mainwin_eq = button_new_toggle (23, 12, 0, 61, 46, 61, 0, 73, 46, 73, SKIN_SHUFREP, SKIN_SHUFREP);
+ window_put_widget (mainwin, FALSE, mainwin_eq, 219, 58);
+ button_on_release (mainwin_eq, mainwin_eq_cb);
+
+ mainwin_pl = button_new_toggle (23, 12, 23, 61, 69, 61, 23, 73, 69, 73, SKIN_SHUFREP, SKIN_SHUFREP);
+ window_put_widget (mainwin, FALSE, mainwin_pl, 242, 58);
+ button_on_release (mainwin_pl, mainwin_pl_cb);
+
+ mainwin_info = textbox_new (153, "", config.mainwin_use_bitmapfont ? NULL :
+ config.mainwin_font, config.autoscroll);
+ window_put_widget (mainwin, FALSE, mainwin_info, 112, 27);
+ g_signal_connect (mainwin_info, "button-press-event", (GCallback)
+ mainwin_info_button_press, NULL);
+
+ mainwin_othertext = textbox_new (153, "", NULL, FALSE);
+ window_put_widget (mainwin, FALSE, mainwin_othertext, 112, 43);
+
+ mainwin_rate_text = textbox_new (15, "", NULL, FALSE);
+ window_put_widget (mainwin, FALSE, mainwin_rate_text, 111, 43);
+
+ mainwin_freq_text = textbox_new (10, "", NULL, FALSE);
+ window_put_widget (mainwin, FALSE, mainwin_freq_text, 156, 43);
+
+ mainwin_menurow = ui_skinned_menurow_new ();
+ window_put_widget (mainwin, FALSE, mainwin_menurow, 10, 22);
+
+ mainwin_volume = hslider_new (0, 51, SKIN_VOLUME, 68, 13, 0, 0, 14, 11, 15, 422, 0, 422);
+ window_put_widget (mainwin, FALSE, mainwin_volume, 107, 57);
+ hslider_on_motion (mainwin_volume, mainwin_volume_motion_cb);
+ hslider_on_release (mainwin_volume, mainwin_volume_release_cb);
+
+ mainwin_balance = hslider_new (0, 24, SKIN_BALANCE, 38, 13, 9, 0, 14, 11, 15, 422, 0, 422);
+ window_put_widget (mainwin, FALSE, mainwin_balance, 177, 57);
+ hslider_on_motion (mainwin_balance, mainwin_balance_motion_cb);
+ hslider_on_release (mainwin_balance, mainwin_balance_release_cb);
+
+ mainwin_monostereo = ui_skinned_monostereo_new ();
+ window_put_widget (mainwin, FALSE, mainwin_monostereo, 212, 41);
+
+ mainwin_playstatus = ui_skinned_playstatus_new ();
+ window_put_widget (mainwin, FALSE, mainwin_playstatus, 24, 28);
+
+ mainwin_minus_num = ui_skinned_number_new ();
+ window_put_widget (mainwin, FALSE, mainwin_minus_num, 36, 26);
g_signal_connect(mainwin_minus_num, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
- mainwin_10min_num = ui_skinned_number_new(SKINNED_WINDOW(mainwin)->normal, 48, 26, SKIN_NUMBERS);
+ mainwin_10min_num = ui_skinned_number_new ();
+ window_put_widget (mainwin, FALSE, mainwin_10min_num, 48, 26);
g_signal_connect(mainwin_10min_num, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
- mainwin_min_num = ui_skinned_number_new(SKINNED_WINDOW(mainwin)->normal, 60, 26, SKIN_NUMBERS);
+ mainwin_min_num = ui_skinned_number_new ();
+ window_put_widget (mainwin, FALSE, mainwin_min_num, 60, 26);
g_signal_connect(mainwin_min_num, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
- mainwin_10sec_num = ui_skinned_number_new(SKINNED_WINDOW(mainwin)->normal, 78, 26, SKIN_NUMBERS);
+ mainwin_10sec_num = ui_skinned_number_new ();
+ window_put_widget (mainwin, FALSE, mainwin_10sec_num, 78, 26);
g_signal_connect(mainwin_10sec_num, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
- mainwin_sec_num = ui_skinned_number_new(SKINNED_WINDOW(mainwin)->normal, 90, 26, SKIN_NUMBERS);
+ mainwin_sec_num = ui_skinned_number_new ();
+ window_put_widget (mainwin, FALSE, mainwin_sec_num, 90, 26);
g_signal_connect(mainwin_sec_num, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
- mainwin_about = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_about, SKINNED_WINDOW(mainwin)->normal, 247, 83, 20, 25);
- g_signal_connect(mainwin_about, "clicked", G_CALLBACK(action_about_audacious), NULL);
+ mainwin_about = button_new_small (20, 25);
+ window_put_widget (mainwin, FALSE, mainwin_about, 247, 83);
+ button_on_release (mainwin_about, (ButtonCB) audgui_show_about_window);
- mainwin_vis = ui_vis_new(SKINNED_WINDOW(mainwin)->normal, 24, 43, 76);
+ mainwin_vis = ui_vis_new ();
+ window_put_widget (mainwin, FALSE, mainwin_vis, 24, 43);
g_signal_connect(mainwin_vis, "button-press-event", G_CALLBACK(mainwin_vis_cb), NULL);
- mainwin_position = ui_skinned_horizontal_slider_new(SKINNED_WINDOW(mainwin)->normal, 16, 72, 248,
- 10, 248, 0, 278, 0, 29, 10, 10, 0, 0, 219,
- NULL, SKIN_POSBAR);
- g_signal_connect(mainwin_position, "motion", G_CALLBACK(mainwin_position_motion_cb), NULL);
- g_signal_connect(mainwin_position, "release", G_CALLBACK(mainwin_position_release_cb), NULL);
+ mainwin_position = hslider_new (0, 219, SKIN_POSBAR, 248, 10, 0, 0, 29, 10, 248, 0, 278, 0);
+ window_put_widget (mainwin, FALSE, mainwin_position, 16, 72);
+ hslider_on_motion (mainwin_position, mainwin_position_motion_cb);
+ hslider_on_release (mainwin_position, mainwin_position_release_cb);
/* shaded */
- mainwin_shaded_menubtn = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_shaded_menubtn, SKINNED_WINDOW(mainwin)->shaded,
- 6, 3, 9, 9, 0, 0, 0, 9, SKIN_TITLEBAR);
- g_signal_connect(mainwin_shaded_menubtn, "clicked", mainwin_menubtn_cb, NULL );
+ mainwin_shaded_menubtn = button_new (9, 9, 0, 0, 0, 9, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, TRUE, mainwin_shaded_menubtn, 6, 3);
+ button_on_release (mainwin_shaded_menubtn, (ButtonCB) mainwin_menubtn_cb);
- mainwin_shaded_minimize = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_shaded_minimize, SKINNED_WINDOW(mainwin)->shaded,
- 244, 3, 9, 9, 9, 0, 9, 9, SKIN_TITLEBAR);
- g_signal_connect(mainwin_shaded_minimize, "clicked", mainwin_minimize_cb, NULL );
+ mainwin_shaded_minimize = button_new (9, 9, 9, 0, 9, 9, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, TRUE, mainwin_shaded_minimize, 244, 3);
+ button_on_release (mainwin_shaded_minimize, (ButtonCB) mainwin_minimize_cb);
- mainwin_shaded_shade = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_shaded_shade, SKINNED_WINDOW(mainwin)->shaded,
- 254, 3, 9, 9, 0, 27, 9, 27, SKIN_TITLEBAR);
- g_signal_connect(mainwin_shaded_shade, "clicked", mainwin_shade_toggle, NULL );
+ mainwin_shaded_shade = button_new (9, 9, 0, 27, 9, 27, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, TRUE, mainwin_shaded_shade, 254, 3);
+ button_on_release (mainwin_shaded_shade, (ButtonCB) mainwin_shade_toggle);
- mainwin_shaded_close = ui_skinned_button_new();
- ui_skinned_push_button_setup(mainwin_shaded_close, SKINNED_WINDOW(mainwin)->shaded,
- 264, 3, 9, 9, 18, 0, 18, 9, SKIN_TITLEBAR);
- g_signal_connect ((GObject *) mainwin_shaded_close, "clicked",
- aud_drct_quit, 0);
+ mainwin_shaded_close = button_new (9, 9, 18, 0, 18, 9, SKIN_TITLEBAR, SKIN_TITLEBAR);
+ window_put_widget (mainwin, TRUE, mainwin_shaded_close, 264, 3);
+ button_on_release (mainwin_shaded_close, (ButtonCB) aud_drct_quit);
- mainwin_srew = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_srew, SKINNED_WINDOW(mainwin)->shaded, 169, 4, 8, 7);
- g_signal_connect(mainwin_srew, "clicked", mainwin_aud_playlist_prev, NULL);
+ mainwin_srew = button_new_small (8, 7);
+ window_put_widget (mainwin, TRUE, mainwin_srew, 169, 4);
+ button_on_release (mainwin_srew, (ButtonCB) aud_drct_pl_prev);
- mainwin_splay = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_splay, SKINNED_WINDOW(mainwin)->shaded, 177, 4, 10, 7);
- g_signal_connect(mainwin_splay, "clicked", mainwin_play_pushed, NULL);
+ mainwin_splay = button_new_small (10, 7);
+ window_put_widget (mainwin, TRUE, mainwin_splay, 177, 4);
+ button_on_release (mainwin_splay, (ButtonCB) mainwin_play_pushed);
- mainwin_spause = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_spause, SKINNED_WINDOW(mainwin)->shaded, 187, 4, 10, 7);
- g_signal_connect(mainwin_spause, "clicked", aud_drct_pause, NULL);
+ mainwin_spause = button_new_small (10, 7);
+ window_put_widget (mainwin, TRUE, mainwin_spause, 187, 4);
+ button_on_release (mainwin_spause, (ButtonCB) aud_drct_pause);
- mainwin_sstop = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_sstop, SKINNED_WINDOW(mainwin)->shaded, 197, 4, 9, 7);
- g_signal_connect(mainwin_sstop, "clicked", mainwin_stop_pushed, NULL);
+ mainwin_sstop = button_new_small (9, 7);
+ window_put_widget (mainwin, TRUE, mainwin_sstop, 197, 4);
+ button_on_release (mainwin_sstop, (ButtonCB) aud_drct_stop);
- mainwin_sfwd = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_sfwd, SKINNED_WINDOW(mainwin)->shaded, 206, 4, 8, 7);
- g_signal_connect(mainwin_sfwd, "clicked", mainwin_aud_playlist_next, NULL);
+ mainwin_sfwd = button_new_small (8, 7);
+ window_put_widget (mainwin, TRUE, mainwin_sfwd, 206, 4);
+ button_on_release (mainwin_sfwd, (ButtonCB) aud_drct_pl_next);
- mainwin_seject = ui_skinned_button_new();
- ui_skinned_small_button_setup(mainwin_seject, SKINNED_WINDOW(mainwin)->shaded, 216, 4, 9, 7);
- g_signal_connect(mainwin_seject, "clicked", mainwin_eject_pushed, NULL);
+ mainwin_seject = button_new_small (9, 7);
+ window_put_widget (mainwin, TRUE, mainwin_seject, 216, 4);
+ button_on_release (mainwin_seject, (ButtonCB) action_play_file);
- mainwin_svis = ui_svis_new(SKINNED_WINDOW(mainwin)->shaded, 79, 5);
+ mainwin_svis = ui_svis_new ();
+ window_put_widget (mainwin, TRUE, mainwin_svis, 79, 5);
g_signal_connect(mainwin_svis, "button-press-event", G_CALLBACK(mainwin_vis_cb), NULL);
- mainwin_sposition = ui_skinned_horizontal_slider_new(SKINNED_WINDOW(mainwin)->shaded, 226, 4, 17,
- 7, 17, 36, 17, 36, 3, 7, 36, 0, 1, 13,
- mainwin_spos_frame_cb, SKIN_TITLEBAR);
- g_signal_connect(mainwin_sposition, "motion", G_CALLBACK(mainwin_spos_motion_cb), NULL);
- g_signal_connect(mainwin_sposition, "release", G_CALLBACK(mainwin_spos_release_cb), NULL);
+ mainwin_sposition = hslider_new (1, 13, SKIN_TITLEBAR, 17, 7, 0, 36, 3, 7, 17, 36, 17, 36);
+ window_put_widget (mainwin, TRUE, mainwin_sposition, 226, 4);
+ hslider_on_motion (mainwin_sposition, mainwin_spos_motion_cb);
+ hslider_on_release (mainwin_sposition, mainwin_spos_release_cb);
- mainwin_stime_min = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->shaded, 130, 4, 15, FALSE, SKIN_TEXT);
- g_signal_connect(mainwin_stime_min, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
+ mainwin_stime_min = textbox_new (15, "", NULL, FALSE);
+ window_put_widget (mainwin, TRUE, mainwin_stime_min, 130, 4);
- mainwin_stime_sec = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->shaded, 147, 4, 10, FALSE, SKIN_TEXT);
+ mainwin_stime_sec = textbox_new (10, "", NULL, FALSE);
+ window_put_widget (mainwin, TRUE, mainwin_stime_sec, 147, 4);
+
+ g_signal_connect(mainwin_stime_min, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
g_signal_connect(mainwin_stime_sec, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
}
@@ -2128,28 +1445,37 @@ static void show_widgets (void)
gtk_widget_set_no_show_all (mainwin_monostereo, TRUE);
gtk_widget_set_no_show_all (mainwin_othertext, TRUE);
- gtk_widget_show_all (((SkinnedWindow *) mainwin)->normal);
- gtk_widget_show_all (((SkinnedWindow *) mainwin)->shaded);
-
- ui_skinned_window_set_shade (mainwin, config.player_shaded);
+ window_set_shaded (mainwin, config.player_shaded);
+ window_show_all (mainwin);
}
-#if 0 /* This can be enabled when at least two window managers send the event
- correctly. Currently, I don't know of any that do (see Debian #567607,
- #567608, and #567609. -jlindgren */
static gboolean state_cb (GtkWidget * widget, GdkEventWindowState * event,
void * unused)
{
if (event->changed_mask & GDK_WINDOW_STATE_STICKY)
- mainwin_set_sticky (event->new_window_state & GDK_WINDOW_STATE_STICKY);
+ {
+ config.sticky = (event->new_window_state & GDK_WINDOW_STATE_STICKY) ?
+ TRUE : FALSE;
+
+ GtkToggleAction * action = (GtkToggleAction *)
+ gtk_action_group_get_action (toggleaction_group_others,
+ "view put on all workspaces");
+ gtk_toggle_action_set_active (action, config.sticky);
+ }
if (event->changed_mask & GDK_WINDOW_STATE_ABOVE)
- mainwin_set_always_on_top (event->new_window_state &
- GDK_WINDOW_STATE_ABOVE);
+ {
+ config.always_on_top = (event->new_window_state &
+ GDK_WINDOW_STATE_ABOVE) ? TRUE : FALSE;
+
+ GtkToggleAction * action = (GtkToggleAction *)
+ gtk_action_group_get_action (toggleaction_group_others,
+ "view always on top");
+ gtk_toggle_action_set_active (action, config.always_on_top);
+ }
return TRUE;
}
-#endif
static gboolean delete_cb (GtkWidget * widget, GdkEvent * event, void * unused)
{
@@ -2157,32 +1483,32 @@ static gboolean delete_cb (GtkWidget * widget, GdkEvent * event, void * unused)
return TRUE;
}
-static void
-mainwin_create_window(void)
+static void mainwin_draw (GtkWidget * window, cairo_t * cr)
{
- gint width, height;
+ gint width = config.player_shaded ? MAINWIN_SHADED_WIDTH : active_skin->properties.mainwin_width;
+ gint height = config.player_shaded ? MAINWIN_SHADED_HEIGHT : active_skin->properties.mainwin_height;
- mainwin = ui_skinned_window_new("player", &config.player_x, &config.player_y);
- gtk_window_set_title(GTK_WINDOW(mainwin), _("Audacious"));
- gtk_window_set_role(GTK_WINDOW(mainwin), "player");
- gtk_window_set_resizable(GTK_WINDOW(mainwin), FALSE);
+ skin_draw_pixbuf (cr, SKIN_MAIN, 0, 0, 0, 0, width, height);
+ skin_draw_mainwin_titlebar (cr, config.player_shaded, TRUE);
+}
- width = config.player_shaded ? MAINWIN_SHADED_WIDTH : aud_active_skin->properties.mainwin_width;
- height = config.player_shaded ? MAINWIN_SHADED_HEIGHT : aud_active_skin->properties.mainwin_height;
+static void
+mainwin_create_window(void)
+{
+ gint width = config.player_shaded ? MAINWIN_SHADED_WIDTH : active_skin->properties.mainwin_width;
+ gint height = config.player_shaded ? MAINWIN_SHADED_HEIGHT : active_skin->properties.mainwin_height;
- if (config.scaled) {
- width *= config.scale_factor;
- height *= config.scale_factor;
- }
+ mainwin = window_new (& config.player_x, & config.player_y, width, height,
+ TRUE, config.player_shaded, mainwin_draw);
- gtk_widget_set_size_request(mainwin, width, height);
+ gtk_window_set_title(GTK_WINDOW(mainwin), _("Audacious"));
g_signal_connect(mainwin, "button_press_event",
G_CALLBACK(mainwin_mouse_button_press), NULL);
g_signal_connect(mainwin, "scroll_event",
G_CALLBACK(mainwin_scrolled), NULL);
- aud_drag_dest_set(mainwin);
+ drag_dest_set(mainwin);
g_signal_connect ((GObject *) mainwin, "drag-data-received", (GCallback)
mainwin_drag_data_received, 0);
@@ -2191,10 +1517,8 @@ mainwin_create_window(void)
ui_main_evlistener_init();
-#if 0
g_signal_connect ((GObject *) mainwin, "window-state-event", (GCallback)
state_cb, NULL);
-#endif
g_signal_connect ((GObject *) mainwin, "delete-event", (GCallback)
delete_cb, NULL);
}
@@ -2234,35 +1558,14 @@ static void mainwin_update_volume (void)
aud_drct_get_volume_balance (& balance);
mainwin_set_volume_slider (volume);
mainwin_set_balance_slider (balance);
+ equalizerwin_set_volume_slider (volume);
+ equalizerwin_set_balance_slider (balance);
}
static void mainwin_update_time_display (gint time, gint length)
{
gchar scratch[7];
-
- if (config.timer_mode == TIMER_REMAINING && length > 0)
- {
- if (length - time < 60000) /* " -0:SS" */
- snprintf (scratch, sizeof scratch, " -0:%02d", (length - time) /
- 1000);
- else if (length - time < 6000000) /* "-MM:SS" */
- snprintf (scratch, sizeof scratch, "%3d:%02d", (time - length) /
- 60000, (length - time) / 1000 % 60);
- else /* "-HH:MM" */
- snprintf (scratch, sizeof scratch, "%3d:%02d", (time - length) /
- 3600000, (length - time) / 60000 % 60);
- }
- else
- {
- if (time < 60000000) /* MMM:SS */
- snprintf (scratch, sizeof scratch, "%3d:%02d", time / 60000, time /
- 1000 % 60);
- else /* HHH:MM */
- snprintf (scratch, sizeof scratch, "%3d:%02d", time / 3600000, time
- / 60000 % 60);
- }
-
- scratch[3] = 0;
+ format_time (scratch, time, length);
ui_skinned_number_set (mainwin_minus_num, scratch[0]);
ui_skinned_number_set (mainwin_10min_num, scratch[1]);
@@ -2270,10 +1573,10 @@ static void mainwin_update_time_display (gint time, gint length)
ui_skinned_number_set (mainwin_10sec_num, scratch[4]);
ui_skinned_number_set (mainwin_sec_num, scratch[5]);
- if (! ((UiSkinnedHorizontalSlider *) mainwin_sposition)->pressed)
+ if (! hslider_get_pressed (mainwin_sposition))
{
- ui_skinned_textbox_set_text (mainwin_stime_min, scratch);
- ui_skinned_textbox_set_text (mainwin_stime_sec, scratch + 4);
+ textbox_set_text (mainwin_stime_min, scratch);
+ textbox_set_text (mainwin_stime_sec, scratch + 4);
}
playlistwin_set_time (scratch, scratch + 4);
@@ -2288,30 +1591,35 @@ static void mainwin_update_time_slider (gint time, gint length)
{
if (time < length)
{
- ui_skinned_horizontal_slider_set_position (mainwin_position, time *
- (gint64) 219 / length);
- ui_skinned_horizontal_slider_set_position (mainwin_sposition, 1 +
- time * (gint64) 12 / length);
+ hslider_set_pos (mainwin_position, time * (gint64) 219 / length);
+ hslider_set_pos (mainwin_sposition, 1 + time * (gint64) 12 / length);
}
else
{
- ui_skinned_horizontal_slider_set_position (mainwin_position, 219);
- ui_skinned_horizontal_slider_set_position (mainwin_sposition, 13);
+ hslider_set_pos (mainwin_position, 219);
+ hslider_set_pos (mainwin_sposition, 13);
}
+
+ mainwin_spos_set_knob ();
}
}
void mainwin_update_song_info (void)
{
- gint time, length;
-
mainwin_update_volume ();
if (! aud_drct_get_playing ())
return;
- time = aud_drct_get_time ();
- length = aud_drct_get_length ();
+ gint time = 0, length = 0;
+ if (aud_drct_get_ready ())
+ {
+ time = aud_drct_get_time ();
+ length = aud_drct_get_length ();
+ }
+
+ mainwin_update_time_display (time, length);
+ mainwin_update_time_slider (time, length);
/* Ugh, this does NOT belong here. -jlindgren */
if (ab_position_a > -1 && ab_position_b > -1 && time >= ab_position_b)
@@ -2319,130 +1627,96 @@ void mainwin_update_song_info (void)
aud_drct_seek (ab_position_a);
return;
}
-
- mainwin_update_time_display (time, length);
- mainwin_update_time_slider (time, length);
}
/* toggleactionentries actions */
-void
-action_anamode_peaks( GtkToggleAction * action )
+void action_anamode_peaks (GtkToggleAction * action)
{
- config.analyzer_peaks = gtk_toggle_action_get_active( action );
+ config.analyzer_peaks = gtk_toggle_action_get_active (action);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_autoscroll_songname( GtkToggleAction * action )
+void action_autoscroll_songname (GtkToggleAction * action)
{
- mainwin_set_title_scroll(gtk_toggle_action_get_active(action));
- playlistwin_set_sinfo_scroll(config.autoscroll); /* propagate scroll setting to playlistwin_sinfo */
+ config.autoscroll = gtk_toggle_action_get_active (action);
+ textbox_set_scroll (mainwin_info, config.autoscroll);
+ textbox_set_scroll (playlistwin_sinfo, config.autoscroll);
}
-void
-action_playback_noplaylistadvance( GtkToggleAction * action )
+void action_playback_noplaylistadvance (GtkToggleAction * action)
{
- aud_cfg->no_playlist_advance = gtk_toggle_action_get_active( action );
+ aud_set_bool (NULL, "no_playlist_advance", gtk_toggle_action_get_active (action));
- if (aud_cfg->no_playlist_advance)
- show_status_message (_("Single mode."));
+ if (gtk_toggle_action_get_active (action))
+ mainwin_show_status_message (_("Single mode."));
else
- show_status_message (_("Playlist mode."));
+ mainwin_show_status_message (_("Playlist mode."));
}
-void
-action_playback_repeat( GtkToggleAction * action )
+void action_playback_repeat (GtkToggleAction * action)
{
- aud_cfg->repeat = gtk_toggle_action_get_active( action );
- ui_skinned_button_set_inside(mainwin_repeat, aud_cfg->repeat);
+ aud_set_bool (NULL, "repeat", gtk_toggle_action_get_active (action));
+ button_set_active (mainwin_repeat, gtk_toggle_action_get_active (action));
}
-void
-action_playback_shuffle( GtkToggleAction * action )
+void action_playback_shuffle (GtkToggleAction * action)
{
- aud_cfg->shuffle = gtk_toggle_action_get_active( action );
- ui_skinned_button_set_inside(mainwin_shuffle, aud_cfg->shuffle);
+ aud_set_bool (NULL, "shuffle", gtk_toggle_action_get_active (action));
+ button_set_active (mainwin_shuffle, gtk_toggle_action_get_active (action));
}
void action_stop_after_current_song (GtkToggleAction * action)
{
gboolean active = gtk_toggle_action_get_active (action);
- if (active != aud_cfg->stopaftersong)
+ if (active != aud_get_bool (NULL, "stop_after_current_song"))
{
if (active)
- show_status_message (_("Stopping after song."));
+ mainwin_show_status_message (_("Stopping after song."));
else
- show_status_message (_("Not stopping after song."));
+ mainwin_show_status_message (_("Not stopping after song."));
- aud_cfg->stopaftersong = active;
- hook_call ("toggle stop after song", NULL);
+ aud_set_bool (NULL, "stop_after_current_song", active);
}
}
-void
-action_view_always_on_top( GtkToggleAction * action )
-{
- UI_SKINNED_MENUROW(mainwin_menurow)->always_selected = gtk_toggle_action_get_active( action );
- ui_skinned_menurow_update (mainwin_menurow);
- config.always_on_top = UI_SKINNED_MENUROW(mainwin_menurow)->always_selected;
- hint_set_always(config.always_on_top);
-}
-
-void
-action_view_scaled( GtkToggleAction * action )
+void action_view_always_on_top (GtkToggleAction * action)
{
- UI_SKINNED_MENUROW(mainwin_menurow)->scale_selected = gtk_toggle_action_get_active( action );
- ui_skinned_menurow_update (mainwin_menurow);
- set_scaled(UI_SKINNED_MENUROW(mainwin_menurow)->scale_selected);
- gdk_flush();
-}
+ gboolean on_top = gtk_toggle_action_get_active (action);
-void
-action_view_easymove( GtkToggleAction * action )
-{
- config.easy_move = gtk_toggle_action_get_active( action );
-}
-
-void
-action_view_on_all_workspaces( GtkToggleAction * action )
-{
- config.sticky = gtk_toggle_action_get_active( action );
- hint_set_sticky(config.sticky);
-}
-
-void
-action_roll_up_equalizer( GtkToggleAction * action )
-{
- equalizerwin_set_shade_menu_cb(gtk_toggle_action_get_active(action));
+ if (config.always_on_top != on_top)
+ {
+ config.always_on_top = on_top;
+ ui_skinned_menurow_update (mainwin_menurow);
+ hint_set_always (config.always_on_top);
+ }
}
-void
-action_roll_up_player( GtkToggleAction * action )
+void action_view_on_all_workspaces (GtkToggleAction * action)
{
- mainwin_set_shade_menu_cb(gtk_toggle_action_get_active(action));
-}
+ gboolean sticky = gtk_toggle_action_get_active (action);
-void
-action_roll_up_playlist_editor( GtkToggleAction * action )
-{
- playlistwin_set_shade(gtk_toggle_action_get_active(action));
+ if (config.sticky != sticky)
+ {
+ config.sticky = sticky;
+ hint_set_sticky (sticky);
+ }
}
-void
-action_show_equalizer( GtkToggleAction * action )
+void action_roll_up_player (GtkToggleAction * action)
{
- equalizerwin_show (gtk_toggle_action_get_active (action));
-}
+ config.player_shaded = gtk_toggle_action_get_active (action);
+ window_set_shaded (mainwin, config.player_shaded);
-void
-action_show_playlist_editor( GtkToggleAction * action )
-{
- playlistwin_show (gtk_toggle_action_get_active (action));
+ gint width = config.player_shaded ? MAINWIN_SHADED_WIDTH : active_skin->properties.mainwin_width;
+ gint height = config.player_shaded ? MAINWIN_SHADED_HEIGHT : active_skin->properties.mainwin_height;
+ window_set_size (mainwin, width, height);
+ mainwin_set_shape ();
}
-void
-action_show_player( GtkToggleAction * action )
+void action_show_player (GtkToggleAction * action)
{
mainwin_show(gtk_toggle_action_get_active(action));
}
@@ -2450,83 +1724,83 @@ action_show_player( GtkToggleAction * action )
/* radioactionentries actions (one callback for each radio group) */
-void
-action_anafoff( GtkAction *action, GtkRadioAction *current )
+void action_anafoff (GtkAction * action, GtkRadioAction * current)
{
- mainwin_vis_set_afalloff(gtk_radio_action_get_current_value(current));
+ config.analyzer_falloff = gtk_radio_action_get_current_value (current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_anamode( GtkAction *action, GtkRadioAction *current )
+void action_anamode (GtkAction * action, GtkRadioAction * current)
{
- mainwin_vis_set_analyzer_mode(gtk_radio_action_get_current_value(current));
+ config.analyzer_mode = gtk_radio_action_get_current_value (current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_anatype( GtkAction *action, GtkRadioAction *current )
+void action_anatype (GtkAction * action, GtkRadioAction * current)
{
- mainwin_vis_set_analyzer_type(gtk_radio_action_get_current_value(current));
+ config.analyzer_type = gtk_radio_action_get_current_value (current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_peafoff( GtkAction *action, GtkRadioAction *current )
+void action_peafoff (GtkAction * action, GtkRadioAction * current)
{
- mainwin_vis_set_pfalloff(gtk_radio_action_get_current_value(current));
+ config.peaks_falloff = gtk_radio_action_get_current_value (current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_scomode( GtkAction *action, GtkRadioAction *current )
+void action_scomode (GtkAction * action, GtkRadioAction * current)
{
- config.scope_mode = gtk_radio_action_get_current_value(current);
+ config.scope_mode = gtk_radio_action_get_current_value (current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_vismode( GtkAction *action, GtkRadioAction *current )
+void action_vismode (GtkAction * action, GtkRadioAction * current)
{
- mainwin_vis_set_type_menu_cb(gtk_radio_action_get_current_value(current));
+ config.vis_type = gtk_radio_action_get_current_value (current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
+
+ start_stop_visual (FALSE);
}
-void
-action_vprmode( GtkAction *action, GtkRadioAction *current )
+void action_vprmode (GtkAction * action, GtkRadioAction * current)
{
config.voiceprint_mode = gtk_radio_action_get_current_value(current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_wshmode( GtkAction *action, GtkRadioAction *current )
+void action_wshmode (GtkAction * action, GtkRadioAction * current)
{
config.vu_mode = gtk_radio_action_get_current_value(current);
+ ui_vis_clear_data (mainwin_vis);
+ ui_svis_clear_data (mainwin_svis);
}
-void
-action_viewtime( GtkAction *action, GtkRadioAction *current )
+void action_viewtime (GtkAction * action, GtkRadioAction * current)
{
- set_timer_mode_menu_cb(gtk_radio_action_get_current_value(current));
+ config.timer_mode = gtk_radio_action_get_current_value (current);
}
/* actionentries actions */
-void
-action_about_audacious( void )
-{
- audgui_show_about_window();
-}
-
-void
-action_play_file( void )
+void action_play_file (void)
{
audgui_run_filebrowser(TRUE); /* TRUE = PLAY_BUTTON */
}
-void
-action_play_location( void )
+void action_play_location (void)
{
audgui_show_add_url_window (TRUE);
}
-void
-action_ab_set( void )
+void action_ab_set (void)
{
if (aud_drct_get_length () > 0)
{
@@ -2552,8 +1826,7 @@ action_ab_set( void )
}
}
-void
-action_ab_clear( void )
+void action_ab_clear (void)
{
if (aud_drct_get_length () > 0)
{
@@ -2561,69 +1834,3 @@ action_ab_clear( void )
mainwin_release_info_text();
}
}
-
-void
-action_current_track_info( void )
-{
- audgui_infowin_show_current ();
-}
-
-void
-action_jump_to_file( void )
-{
- audgui_jump_to_track();
-}
-
-void
-action_jump_to_playlist_start( void )
-{
- aud_drct_pl_set_pos (0);
-}
-
-void
-action_jump_to_time( void )
-{
- mainwin_jump_to_time();
-}
-
-void
-action_playback_next( void )
-{
- aud_drct_pl_next ();
-}
-
-void
-action_playback_previous( void )
-{
- aud_drct_pl_prev ();
-}
-
-void
-action_playback_play( void )
-{
- mainwin_play_pushed();
-}
-
-void
-action_playback_pause( void )
-{
- aud_drct_pause();
-}
-
-void
-action_playback_stop( void )
-{
- mainwin_stop_pushed();
-}
-
-void
-action_preferences( void )
-{
- show_preferences_window(TRUE);
-}
-
-void
-action_quit( void )
-{
- aud_drct_quit ();
-}
diff --git a/src/skins/ui_main.h b/src/skins/ui_main.h
index 091fb84..da92500 100644
--- a/src/skins/ui_main.h
+++ b/src/skins/ui_main.h
@@ -20,81 +20,24 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_MAIN_H
-#define AUDACIOUS_UI_MAIN_H
+#ifndef SKINS_UI_MAIN_H
+#define SKINS_UI_MAIN_H
#include <gtk/gtk.h>
-#include "ui_vis.h"
-#include "ui_svis.h"
-
/* yes, main window size is fixed */
#define MAINWIN_WIDTH (gint)275
#define MAINWIN_HEIGHT (gint)116
#define MAINWIN_TITLEBAR_HEIGHT (gint)14
#define MAINWIN_SHADED_WIDTH MAINWIN_WIDTH
#define MAINWIN_SHADED_HEIGHT MAINWIN_TITLEBAR_HEIGHT
-#define MAINWIN_SCALE_FACTOR (config.scaled ? config.scale_factor : 1)
-
-#define MAINWIN_DEFAULT_POS_X 20
-#define MAINWIN_DEFAULT_POS_Y 20
-
-#define MAINWIN_DEFAULT_FONT "Sans Bold 9"
-
typedef enum {
TIMER_ELAPSED,
TIMER_REMAINING
} TimerMode;
-enum {
- MAINWIN_GENERAL_ABOUT,
-
- MAINWIN_GENERAL_PLAYFILE,
- MAINWIN_GENERAL_PLAYLOCATION,
-
- MAINWIN_GENERAL_FILEINFO,
- MAINWIN_GENERAL_PREFS,
-
- MAINWIN_GENERAL_SHOWMWIN,
- MAINWIN_GENERAL_SHOWPLWIN,
-
- MAINWIN_GENERAL_FOCUSMWIN,
- MAINWIN_GENERAL_FOCUSPLWIN,
-
- MAINWIN_GENERAL_SHOWEQWIN,
- MAINWIN_GENERAL_EXIT,
-
- MAINWIN_GENERAL_PREV,
- MAINWIN_GENERAL_PLAY,
- MAINWIN_GENERAL_PAUSE,
- MAINWIN_GENERAL_STOP,
- MAINWIN_GENERAL_NEXT,
- MAINWIN_GENERAL_STOPFADE,
- MAINWIN_GENERAL_BACK5SEC,
- MAINWIN_GENERAL_FWD5SEC,
- MAINWIN_GENERAL_START,
- MAINWIN_GENERAL_BACK10,
- MAINWIN_GENERAL_FWD10,
- MAINWIN_GENERAL_JTT,
- MAINWIN_GENERAL_JTF,
- MAINWIN_GENERAL_QUEUE,
- MAINWIN_GENERAL_CQUEUE,
- MAINWIN_GENERAL_VOLUP,
- MAINWIN_GENERAL_VOLDOWN,
- MAINWIN_GENERAL_SETAB,
- MAINWIN_GENERAL_CLEARAB,
-
- MAINWIN_GENERAL_NEXT_PL,
- MAINWIN_GENERAL_PREV_PL,
- MAINWIN_GENERAL_NEW_PL
-};
-
extern GtkWidget *mainwin;
-extern GtkWidget *err;
-
-extern gboolean mainwin_moving;
-extern gboolean mainwin_focus;
extern GtkWidget *mainwin_eq, *mainwin_pl;
extern GtkWidget *mainwin_info;
@@ -113,18 +56,8 @@ extern GtkWidget *mainwin_position, *mainwin_sposition;
void mainwin_create(void);
void mainwin_unhook (void);
-void ui_main_set_initial_volume(void);
-void mainwin_lock_info_text(const gchar * text);
-void mainwin_release_info_text(void);
void mainwin_play_pushed(void);
-void mainwin_stop_pushed(void);
-void mainwin_eject_pushed(void);
-
-void mainwin_rev_pushed(void);
-void mainwin_rev_release(void);
-void mainwin_fwd_pushed(void);
-void mainwin_fwd_release(void);
void mainwin_adjust_volume_motion(gint v);
void mainwin_adjust_volume_release(void);
@@ -133,32 +66,18 @@ void mainwin_adjust_balance_release(void);
void mainwin_set_volume_slider(gint percent);
void mainwin_set_balance_slider(gint percent);
-void mainwin_vis_set_type(VisType mode);
-
void mainwin_refresh_hints(void);
void mainwin_set_song_title (const gchar * title);
void mainwin_set_song_info(gint rate, gint freq, gint nch);
void mainwin_clear_song_info(void);
-void mainwin_set_noplaylistadvance(gboolean no_advance);
-void mainwin_set_sticky (gboolean sticky);
-void mainwin_set_always_on_top(gboolean always);
void mainwin_set_shape (void);
-void mainwin_set_volume_diff(gint diff);
-void mainwin_set_balance_diff(gint diff);
void mainwin_show(gboolean);
-void mainwin_move(gint x, gint y);
-void mainwin_shuffle_pushed(gboolean toggled);
-void mainwin_repeat_pushed(gboolean toggled);
void mainwin_disable_seekbar(void);
-void mainwin_set_title(const gchar * text);
-void mainwin_minimize_cb(void);
-void mainwin_general_menu_callback(gpointer cb_data,
- guint action,
- GtkWidget * widget);
void mainwin_update_song_info (void);
+void mainwin_show_status_message (const gchar * message);
void mainwin_enable_status_message (gboolean enable);
void mainwin_drag_data_received(GtkWidget * widget,
@@ -173,17 +92,8 @@ void mainwin_drag_data_received(GtkWidget * widget,
void mainwin_setup_menus(void);
gboolean change_timer_mode_cb(GtkWidget *widget, GdkEventButton *event);
-void mainwin_jump_to_file(void);
-void mainwin_jump_to_time(void);
-
-void mainwin_ewmh_activate(void);
-
-void mainwin_show_visibility_warning(void);
-
/* widget should be null if called manually. */
gboolean mainwin_keypress (GtkWidget * widget, GdkEventKey * event,
void * unused);
-void ui_main_check_theme_engine(void);
-
-#endif /* AUDACIOUS_UI_MAIN_H */
+#endif /* SKINS_UI_MAIN_H */
diff --git a/src/skins/ui_main_evlisteners.c b/src/skins/ui_main_evlisteners.c
index 4a2b0df..ff2ab50 100644
--- a/src/skins/ui_main_evlisteners.c
+++ b/src/skins/ui_main_evlisteners.c
@@ -18,35 +18,41 @@
* Audacious or using our public API to be a derived work.
*/
-#include <glib.h>
#include <math.h>
-#include <audacious/audconfig.h>
#include <audacious/drct.h>
#include <audacious/misc.h>
#include <libaudcore/hook.h>
#include "skins_cfg.h"
-#include "ui_equalizer.h"
#include "ui_main.h"
+#include "ui_main_evlisteners.h"
#include "ui_manager.h"
-#include "ui_playlist.h"
+#include "ui_skin.h"
#include "ui_skinned_playstatus.h"
-#include "ui_skinned_textbox.h"
-#include "ui_skinned_window.h"
+#include "ui_vis.h"
#include "util.h"
-static void ui_main_evlistener_title_change (void * data, void * user_data)
+static void title_change (void)
{
- gchar * title;
+ if (aud_drct_get_ready ())
+ {
+ gchar * title = aud_drct_get_title ();
+ mainwin_set_song_title (title);
+ str_unref (title);
+ }
+ else
+ mainwin_set_song_title ("Buffering ...");
+}
- /* may be called asynchronously */
- if (! aud_drct_get_playing ())
- return;
+static void info_change (void)
+{
+ gint bitrate = 0, samplerate = 0, channels = 0;
+
+ if (aud_drct_get_ready ())
+ aud_drct_get_info (& bitrate, & samplerate, & channels);
- title = aud_drct_get_title ();
- mainwin_set_song_title (title);
- g_free (title);
+ mainwin_set_song_info (bitrate, samplerate, channels);
}
static void
@@ -68,14 +74,16 @@ void ui_main_evlistener_playback_begin (void * hook_data, void * user_data)
gtk_widget_show (mainwin_10sec_num);
gtk_widget_show (mainwin_sec_num);
- if (aud_drct_get_length () > 0)
+ if (aud_drct_get_ready () && aud_drct_get_length () > 0)
{
gtk_widget_show (mainwin_position);
gtk_widget_show (mainwin_sposition);
}
ui_skinned_playstatus_set_status(mainwin_playstatus, STATUS_PLAY);
- ui_main_evlistener_title_change (NULL, NULL);
+
+ title_change ();
+ info_change ();
}
static void
@@ -84,11 +92,23 @@ ui_main_evlistener_playback_stop(gpointer hook_data, gpointer user_data)
mainwin_clear_song_info ();
}
+static void repeat_toggled (void * data, void * user)
+{
+ bool_t repeat = aud_get_bool (NULL, "repeat");
+ check_set (toggleaction_group_others, "playback repeat", repeat);
+}
+
+static void shuffle_toggled (void * data, void * user)
+{
+ bool_t shuffle = aud_get_bool (NULL, "shuffle");
+ check_set (toggleaction_group_others, "playback shuffle", shuffle);
+}
+
static void stop_after_song_toggled (void * hook_data, void * user_data)
{
mainwin_enable_status_message (FALSE);
check_set (toggleaction_group_others, "stop after current song",
- aud_cfg->stopaftersong);
+ aud_get_bool (NULL, "stop_after_current_song"));
mainwin_enable_status_message (TRUE);
}
@@ -103,257 +123,188 @@ ui_main_evlistener_playback_unpause(gpointer hook_data, gpointer user_data)
ui_skinned_playstatus_set_status(mainwin_playstatus, STATUS_PLAY);
}
-static void
-ui_main_evlistener_playback_play_file(gpointer hook_data, gpointer user_data)
-{
- if (config.random_skin_on_play)
- skin_set_random_skin();
-}
-
-static void vis_clear_cb (void * unused, void * another)
+static void vis_clear_cb (void)
{
ui_vis_clear_data (mainwin_vis);
ui_svis_clear_data (mainwin_svis);
}
-void info_change (void)
+static void render_mono_pcm (const gfloat * pcm)
{
- gint bitrate, samplerate, channels;
+ guchar data[512];
- /* may be called asynchronously */
- if (! aud_drct_get_playing ())
+ if (config.vis_type != VIS_SCOPE)
return;
- aud_drct_get_info (& bitrate, & samplerate, & channels);
- mainwin_set_song_info (bitrate, samplerate, channels);
+ for (gint i = 0; i < 75; i ++)
+ {
+ /* the signal is amplified by 2x */
+ /* output values are in the range 0 to 16 */
+ gint val = 8 + roundf (16 * pcm[i * 512 / 75]);
+ data[i] = CLAMP (val, 0, 16);
+ }
+
+ if (config.player_shaded)
+ ui_svis_timeout_func (mainwin_svis, data);
+ else
+ ui_vis_timeout_func (mainwin_vis, data);
}
-static void
-ui_main_evlistener_mainwin_set_always_on_top(gpointer hook_data, gpointer user_data)
+/* calculate peak dB level, where 1 is 0 dB */
+static gfloat calc_peak_level (const gfloat * pcm, gint step)
{
- gboolean *ontop = (gboolean*)hook_data;
- mainwin_set_always_on_top(*ontop);
+ gfloat peak = 0.0001; /* must be > 0, or level = -inf */
+
+ for (gint i = 0; i < 512; i ++)
+ {
+ peak = MAX (peak, * pcm);
+ pcm += step;
+ }
+
+ return 20 * log10 (peak);
}
-static void
-ui_main_evlistener_mainwin_show(gpointer hook_data, gpointer user_data)
+static void render_multi_pcm (const gfloat * pcm, gint channels)
{
- gboolean show = GPOINTER_TO_INT(hook_data);
- mainwin_show(show);
+ /* "VU meter" */
+ if (config.vis_type != VIS_VOICEPRINT || ! config.player_shaded)
+ return;
+
+ guchar data[512];
+
+ gint level = 38 + calc_peak_level (pcm, channels);
+ data[0] = CLAMP (level, 0, 38);
+
+ if (channels >= 2)
+ {
+ level = 38 + calc_peak_level (pcm + 1, channels);
+ data[1] = CLAMP (level, 0, 38);
+ }
+ else
+ data[1] = data[0];
+
+ ui_svis_timeout_func (mainwin_svis, data);
}
-static void
-ui_main_evlistener_equalizerwin_show(gpointer hook_data, gpointer user_data)
+/* convert linear frequency graph to logarithmic one */
+static void make_log_graph (const gfloat * freq, gint bands, gint db_range, gint
+ int_range, guchar * graph)
{
- gboolean *show = (gboolean*)hook_data;
- equalizerwin_show(*show);
+ static gint last_bands = 0;
+ static gfloat * xscale = NULL;
+
+ /* conversion table for the x-axis */
+ if (bands != last_bands)
+ {
+ xscale = g_realloc (xscale, sizeof (gfloat) * (bands + 1));
+ for (gint i = 0; i <= bands; i ++)
+ xscale[i] = powf (257, (gfloat) i / bands) - 1;
+
+ last_bands = bands;
+ }
+
+ for (gint i = 0; i < bands; i ++)
+ {
+ /* sum up values in freq array between xscale[i] and xscale[i + 1],
+ including fractional parts */
+ gint a = ceilf (xscale[i]);
+ gint b = floorf (xscale[i + 1]);
+ gfloat sum = 0;
+
+ if (b < a)
+ sum += freq[b] * (xscale[i + 1] - xscale[i]);
+ else
+ {
+ if (a > 0)
+ sum += freq[a - 1] * (a - xscale[i]);
+ for (; a < b; a ++)
+ sum += freq[a];
+ if (b < 256)
+ sum += freq[b] * (xscale[i + 1] - b);
+ }
+
+ /* fudge factor to make the graph have the same overall height as a
+ 12-band one no matter how many bands there are */
+ sum = sum * bands / 12;
+
+ /* convert to dB */
+ gfloat val = 20 * log10f (sum);
+
+ /* scale (-db_range, 0.0) to (0.0, int_range) */
+ val = (1.0 + val / db_range) * int_range;
+
+ graph[i] = CLAMP (val, 0, int_range);
+ }
}
-static void ui_main_evlistener_visualization_timeout (const VisNode * vis,
- void * user)
+static void render_freq (const gfloat * freq)
{
- guint8 intern_vis_data[512];
- gint16 mono_freq[2][256];
- gboolean mono_freq_calced = FALSE;
- gint16 mono_pcm[2][512], stereo_pcm[2][512];
- gboolean mono_pcm_calced = FALSE, stereo_pcm_calced = FALSE;
- gint i;
-
- if (! vis || config.vis_type == VIS_OFF)
- return;
+ guchar data[512];
if (config.vis_type == VIS_ANALYZER)
{
- /* logarithmic scale - 1 */
- const gfloat xscale13[14] = {0.00, 0.53, 1.35, 2.60, 4.51, 7.45, 12.0,
- 18.8, 29.4, 45.6, 70.4, 108, 167, 256};
- const gfloat xscale19[20] = {0.00, 0.34, 0.79, 1.40, 2.22, 3.31, 4.77,
- 6.72, 9.34, 12.9, 17.6, 23.8, 32.3, 43.6, 58.7, 78.9, 106, 142, 191,
- 256};
- const gfloat xscale37[38] = {0.00, 0.16, 0.35, 0.57, 0.82, 1.12, 1.46,
- 1.86, 2.32, 2.86, 3.48, 4.21, 5.05, 6.03, 7.16, 8.48, 10.0, 11.8, 13.9,
- 16.3, 19.1, 22.3, 26.1, 30.5, 35.6, 41.5, 48.4, 56.4, 65.6, 76.4, 88.9,
- 104, 120, 140, 163, 189, 220, 256};
- const gfloat xscale75[76] = {0.00, 0.08, 0.16, 0.25, 0.34, 0.45, 0.56,
- 0.68, 0.81, 0.95, 1.10, 1.26, 1.43, 1.62, 1.82, 2.03, 2.27, 2.52, 2.79,
- 3.08, 3.39, 3.73, 4.09, 4.48, 4.90, 5.36, 5.85, 6.37, 6.94, 7.55, 8.20,
- 8.91, 9.67, 10.5, 11.4, 12.3, 13.3, 14.4, 15.6, 16.9, 18.3, 19.8, 21.4,
- 23.1, 24.9, 26.9, 29.1, 31.4, 33.9, 36.5, 39.4, 42.5, 45.9, 49.5, 53.3,
- 57.5, 62.0, 66.9, 72.0, 77.7, 83.7, 90.2, 97.2, 105, 113, 122, 131,
- 141, 152, 164, 177, 190, 205, 221, 238, 256};
-
- const gfloat * xscale;
- gint bands, i;
-
if (config.analyzer_type == ANALYZER_BARS)
{
if (config.player_shaded)
- {
- bands = 13;
- xscale = xscale13;
- }
+ make_log_graph (freq, 13, 40, 8, data);
else
- {
- bands = 19;
- xscale = xscale19;
- }
+ make_log_graph (freq, 19, 40, 16, data);
}
else
{
if (config.player_shaded)
- {
- bands = 37;
- xscale = xscale37;
- }
- else
- {
- bands = 75;
- xscale = xscale75;
- }
- }
-
- aud_calc_mono_freq (mono_freq, vis->data, vis->nch);
-
- for (i = 0; i < bands; i ++)
- {
- gint a = ceil (xscale[i]);
- gint b = floor (xscale[i + 1]);
- gint n = 0;
-
- if (b < a)
- n += mono_freq[0][b] * (xscale[i + 1] - xscale[i]);
- else
- {
- if (a > 0)
- n += mono_freq[0][a - 1] * (a - xscale[i]);
- for (; a < b; a ++)
- n += mono_freq[0][a];
- if (b < 256)
- n += mono_freq[0][b] * (xscale[i + 1] - b);
- }
-
- /* 30 dB range, amplified 10 dB + extra for narrower bands */
- /* 0.000235 == 1 / 13 / 32767 * 10^(40/20) */
- n = 10 * log10 (n * bands * 0.000235);
- intern_vis_data[i] = CLAMP (n, 0, 15);
- }
- }
- else if(config.vis_type == VIS_VOICEPRINT){
- if (config.player_shaded) {
- /* VU */
- gint vu, val;
-
- if (!stereo_pcm_calced)
- aud_calc_stereo_pcm(stereo_pcm, vis->data, vis->nch);
- vu = 0;
- for (i = 0; i < 512; i++) {
- val = abs(stereo_pcm[0][i]);
- if (val > vu)
- vu = val;
- }
- intern_vis_data[0] = (vu * 37) >> 15;
- if (intern_vis_data[0] > 37)
- intern_vis_data[0] = 37;
- if (vis->nch == 2) {
- vu = 0;
- for (i = 0; i < 512; i++) {
- val = abs(stereo_pcm[1][i]);
- if (val > vu)
- vu = val;
- }
- intern_vis_data[1] = (vu * 37) >> 15;
- if (intern_vis_data[1] > 37)
- intern_vis_data[1] = 37;
- }
+ make_log_graph (freq, 37, 40, 8, data);
else
- intern_vis_data[1] = intern_vis_data[0];
- }
- else { /*Voiceprint*/
- if (!mono_freq_calced)
- aud_calc_mono_freq(mono_freq, vis->data, vis->nch);
- memset(intern_vis_data, 0, 256);
-
- /* For the values [0-16] we use the frequency that's 3/2 as much.
- If we assume the 512 values calculated by calc_mono_freq to
- cover 0-22kHz linearly we get a range of
- [0-16] * 3/2 * 22000/512 = [0-1,031] Hz.
- Most stuff above that is harmonics and we want to utilize the
- 16 samples we have to the max[tm]
- */
- for (i = 0; i < 50 ; i+=3){
- intern_vis_data[i/3] += (mono_freq[0][i/2] >> 5);
-
- /*Boost frequencies above 257Hz a little*/
- //if(i > 4 * 3)
- // intern_vis_data[i/3] += 8;
- }
- }
- }
- else { /* (config.vis_type == VIS_SCOPE) */
-
- /* Oscilloscope */
- gint pos, step;
-
- if (!mono_pcm_calced)
- aud_calc_mono_pcm(mono_pcm, vis->data, vis->nch);
-
- step = (vis->length << 8) / 74;
- for (i = 0, pos = 0; i < 75; i++, pos += step) {
- intern_vis_data[i] = ((mono_pcm[0][pos >> 8]) >> 12) + 7;
- if (intern_vis_data[i] == 255)
- intern_vis_data[i] = 0;
- else if (intern_vis_data[i] > 12)
- intern_vis_data[i] = 12;
- /* Do not see the point of that? (comparison always false) -larne.
- if (intern_vis_data[i] < 0)
- intern_vis_data[i] = 0; */
+ make_log_graph (freq, 75, 40, 16, data);
}
}
+ else if (config.vis_type == VIS_VOICEPRINT && ! config.player_shaded)
+ make_log_graph (freq, 17, 40, 255, data);
+ else
+ return;
if (config.player_shaded)
- ui_svis_timeout_func(mainwin_svis, intern_vis_data);
+ ui_svis_timeout_func (mainwin_svis, data);
else
- ui_vis_timeout_func(mainwin_vis, intern_vis_data);
+ ui_vis_timeout_func (mainwin_vis, data);
}
void
ui_main_evlistener_init(void)
{
- hook_associate("title change", ui_main_evlistener_title_change, NULL);
hook_associate("hide seekbar", ui_main_evlistener_hide_seekbar, NULL);
hook_associate("playback begin", ui_main_evlistener_playback_begin, NULL);
+ hook_associate("playback ready", ui_main_evlistener_playback_begin, NULL);
hook_associate("playback stop", ui_main_evlistener_playback_stop, NULL);
hook_associate("playback pause", ui_main_evlistener_playback_pause, NULL);
hook_associate("playback unpause", ui_main_evlistener_playback_unpause, NULL);
- hook_associate("playback play file", ui_main_evlistener_playback_play_file, NULL);
- hook_associate ("visualization clear", vis_clear_cb, NULL);
+ hook_associate ("title change", (HookFunction) title_change, NULL);
hook_associate ("info change", (HookFunction) info_change, NULL);
- hook_associate("mainwin set always on top", ui_main_evlistener_mainwin_set_always_on_top, NULL);
- hook_associate("mainwin show", ui_main_evlistener_mainwin_show, NULL);
- hook_associate("equalizerwin show", ui_main_evlistener_equalizerwin_show, NULL);
hook_associate("playback seek", (HookFunction) mainwin_update_song_info, NULL);
- hook_associate ("toggle stop after song", stop_after_song_toggled, NULL);
+
+ hook_associate ("set repeat", repeat_toggled, NULL);
+ hook_associate ("set shuffle", shuffle_toggled, NULL);
+ hook_associate ("set stop_after_current_song", stop_after_song_toggled, NULL);
}
void
ui_main_evlistener_dissociate(void)
{
- hook_dissociate("title change", ui_main_evlistener_title_change);
hook_dissociate("hide seekbar", ui_main_evlistener_hide_seekbar);
hook_dissociate("playback begin", ui_main_evlistener_playback_begin);
+ hook_dissociate("playback ready", ui_main_evlistener_playback_begin);
hook_dissociate("playback stop", ui_main_evlistener_playback_stop);
hook_dissociate("playback pause", ui_main_evlistener_playback_pause);
hook_dissociate("playback unpause", ui_main_evlistener_playback_unpause);
- hook_dissociate("playback play file", ui_main_evlistener_playback_play_file);
- hook_dissociate ("visualization clear", vis_clear_cb);
+ hook_dissociate ("title change", (HookFunction) title_change);
hook_dissociate ("info change", (HookFunction) info_change);
- hook_dissociate("mainwin set always on top", ui_main_evlistener_mainwin_set_always_on_top);
- hook_dissociate("mainwin show", ui_main_evlistener_mainwin_show);
- hook_dissociate("equalizerwin show", ui_main_evlistener_equalizerwin_show);
hook_dissociate("playback seek", (HookFunction) mainwin_update_song_info);
- hook_dissociate ("toggle stop after song", stop_after_song_toggled);
+
+ hook_dissociate ("set repeat", repeat_toggled);
+ hook_dissociate ("set shuffle", shuffle_toggled);
+ hook_dissociate ("set stop_after_current_song", stop_after_song_toggled);
}
void start_stop_visual (gboolean exiting)
@@ -364,7 +315,10 @@ void start_stop_visual (gboolean exiting)
{
if (! started)
{
- aud_vis_runner_add_hook(ui_main_evlistener_visualization_timeout, NULL);
+ aud_vis_func_add (AUD_VIS_TYPE_CLEAR, (VisFunc) vis_clear_cb);
+ aud_vis_func_add (AUD_VIS_TYPE_MONO_PCM, (VisFunc) render_mono_pcm);
+ aud_vis_func_add (AUD_VIS_TYPE_MULTI_PCM, (VisFunc) render_multi_pcm);
+ aud_vis_func_add (AUD_VIS_TYPE_FREQ, (VisFunc) render_freq);
started = 1;
}
}
@@ -372,7 +326,10 @@ void start_stop_visual (gboolean exiting)
{
if (started)
{
- aud_vis_runner_remove_hook(ui_main_evlistener_visualization_timeout);
+ aud_vis_func_remove ((VisFunc) vis_clear_cb);
+ aud_vis_func_remove ((VisFunc) render_mono_pcm);
+ aud_vis_func_remove ((VisFunc) render_multi_pcm);
+ aud_vis_func_remove ((VisFunc) render_freq);
started = 0;
}
}
diff --git a/src/skins/ui_main_evlisteners.h b/src/skins/ui_main_evlisteners.h
index 8337fbd..04c49dc 100644
--- a/src/skins/ui_main_evlisteners.h
+++ b/src/skins/ui_main_evlisteners.h
@@ -20,16 +20,15 @@
#include <glib.h>
-#ifndef AUDACIOUS_UI_MAIN_EVLISTENERS_H
-#define AUDACIOUS_UI_MAIN_EVLISTENERS_H
+#ifndef SKINS_UI_MAIN_EVLISTENERS_H
+#define SKINS_UI_MAIN_EVLISTENERS_H
void ui_main_evlistener_init(void);
void ui_main_evlistener_dissociate(void);
void ui_main_evlistener_playback_begin (void * hook_data, void * user_data);
void ui_main_evlistener_playback_pause (void * hook_data, void * user_data);
-void info_change (void);
void start_stop_visual (gboolean exiting);
-#endif /* AUDACIOUS_UI_MAIN_EVLISTENERS_H */
+#endif /* SKINS_UI_MAIN_EVLISTENERS_H */
diff --git a/src/skins/ui_manager.c b/src/skins/ui_manager.c
index 6656b4c..3496c40 100644
--- a/src/skins/ui_manager.c
+++ b/src/skins/ui_manager.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2007 Audacious development team.
+ * Copyright (C) 2005-2011 Audacious development team.
*
* 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
@@ -17,29 +17,46 @@
* Audacious or using our public API to be a derived work.
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "ui_manager.h"
-#include "actions-mainwin.h"
-#include "actions-playlist.h"
-#include "actions-equalizer.h"
-
-/* TODO ui_main.h is only included because ui_manager.c needs the values of
- TimerMode enum; move that enum elsewhere so we can get rid of this include */
-#include "ui_main.h"
-
-#if 0
-#include "sync-menu.h"
-#endif
-#include "plugin.h"
-
+#include <audacious/drct.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
+#include "actions-equalizer.h"
+#include "actions-mainwin.h"
+#include "actions-playlist.h"
+#include "config.h"
+#include "skins_cfg.h"
+#include "ui_main.h"
+#include "ui_manager.h"
+#include "ui_vis.h"
+
+static GtkWidget * ui_manager_get_popup_menu (GtkUIManager * self, const gchar *
+ path);
+
+GtkActionGroup *toggleaction_group_others;
+GtkActionGroup *radioaction_group_anamode; /* Analyzer mode */
+GtkActionGroup *radioaction_group_anatype; /* Analyzer type */
+GtkActionGroup *radioaction_group_scomode; /* Scope mode */
+GtkActionGroup *radioaction_group_vprmode; /* Voiceprint mode */
+GtkActionGroup *radioaction_group_wshmode; /* WindowShade VU mode */
+GtkActionGroup *radioaction_group_anafoff; /* Analyzer Falloff */
+GtkActionGroup *radioaction_group_peafoff; /* Peak Falloff */
+GtkActionGroup *radioaction_group_vismode; /* Visualization mode */
+GtkActionGroup *radioaction_group_viewtime; /* View time (remaining/elapsed) */
+
+static GtkActionGroup *action_group_playback;
+static GtkActionGroup *action_group_visualization;
+static GtkActionGroup *action_group_view;
+static GtkActionGroup *action_group_others;
+static GtkActionGroup *action_group_playlist;
+static GtkActionGroup *action_group_playlist_add;
+static GtkActionGroup *action_group_playlist_select;
+static GtkActionGroup *action_group_playlist_delete;
+static GtkActionGroup *action_group_playlist_sort;
+static GtkActionGroup *action_group_equalizer;
+
static GtkUIManager *ui_manager = NULL;
static GList * attached_menus = NULL;
@@ -88,12 +105,6 @@ static GtkToggleActionEntry toggleaction_entries_others[] = {
{ "roll up equalizer", NULL , N_("Roll up Equalizer"), "<Ctrl><Alt>W",
N_("Roll up Equalizer"), G_CALLBACK(action_roll_up_equalizer) , FALSE },
-
- { "view scaled", NULL , N_("Scale"), "<Ctrl>D",
- N_("DoubleSize"), G_CALLBACK(action_view_scaled) , FALSE },
-
- { "view easy move", NULL , N_("Easy Move"), "<Ctrl>E",
- N_("Easy Move"), G_CALLBACK(action_view_easymove) , FALSE }
};
@@ -165,19 +176,19 @@ static GtkActionEntry action_entries_playback[] = {
{ "playback", NULL, N_("Playback") },
{ "playback play", GTK_STOCK_MEDIA_PLAY , N_("Play"), "X",
- N_("Play"), G_CALLBACK(action_playback_play) },
+ N_("Play"), G_CALLBACK(aud_drct_play) },
{ "playback pause", GTK_STOCK_MEDIA_PAUSE , N_("Pause"), "C",
- N_("Pause"), G_CALLBACK(action_playback_pause) },
+ N_("Pause"), G_CALLBACK(aud_drct_pause) },
{ "playback stop", GTK_STOCK_MEDIA_STOP , N_("Stop"), "V",
- N_("Stop"), G_CALLBACK(action_playback_stop) },
+ N_("Stop"), G_CALLBACK(aud_drct_stop) },
{ "playback previous", GTK_STOCK_MEDIA_PREVIOUS , N_("Previous"), "Z",
- N_("Previous"), G_CALLBACK(action_playback_previous) },
+ N_("Previous"), G_CALLBACK(aud_drct_pl_prev) },
{ "playback next", GTK_STOCK_MEDIA_NEXT , N_("Next"), "B",
- N_("Next"), G_CALLBACK(action_playback_next) }
+ N_("Next"), G_CALLBACK(aud_drct_pl_next) }
};
@@ -209,28 +220,24 @@ static GtkActionEntry action_entries_playlist[] = {
N_("Delete Playlist"), G_CALLBACK(action_playlist_delete) },
{"playlist load", GTK_STOCK_OPEN, N_("Import Playlist"), "O",
- N_("Loads a playlist file into the selected playlist."), G_CALLBACK(action_playlist_load_list) },
+ N_("Loads a playlist file into the selected playlist."), (GCallback)
+ audgui_import_playlist},
{"playlist save", GTK_STOCK_SAVE, N_("Export Playlist"), "<Shift>S",
- N_("Saves the selected playlist."), G_CALLBACK(action_playlist_save_list) },
-
- { "playlist save all", GTK_STOCK_SAVE, N_("Save All Playlists"),
- "<Alt>S", N_("Saves all the playlists that are open. Note that this "
- "is done automatically when Audacious quits."),
- action_playlist_save_all_playlists},
+ N_("Saves the selected playlist."), (GCallback) audgui_export_playlist},
{ "playlist refresh", GTK_STOCK_REFRESH, N_("Refresh List"), "F5",
N_("Refreshes metadata associated with a playlist entry."),
G_CALLBACK(action_playlist_refresh_list) },
- { "playlist manager", AUD_STOCK_PLAYLIST , N_("List Manager"), "P",
- N_("Opens the playlist manager."),
- G_CALLBACK(action_open_list_manager) }
-};
+ {"playlist manager", AUD_STOCK_PLAYLIST, N_("Playlist Manager"), "P", NULL, (GCallback) audgui_playlist_manager},
+ {"queue manager", AUD_STOCK_QUEUETOGGLE, N_("Queue Manager"), "<Ctrl>U", NULL, (GCallback) audgui_queue_manager_show}};
static GtkActionEntry action_entries_view[] = {
{"view", NULL, N_("View")},
- {"iface menu", NULL, N_("Interface")}};
+ {"iface menu", NULL, N_("Interface")},
+ {"iface prefs", GTK_STOCK_PREFERENCES, N_("Interface Preferences ..."), NULL,
+ NULL, (GCallback) skins_configure}};
static GtkActionEntry action_entries_playlist_add[] = {
{ "playlist add url", GTK_STOCK_NETWORK, N_("Add Internet Address..."), "<Ctrl>H",
@@ -377,13 +384,13 @@ static GtkActionEntry action_entries_others[] = {
{ "plugins-menu", AUD_STOCK_PLUGIN, N_("Plugin Services") },
{ "current track info", GTK_STOCK_INFO , N_("View Track Details"), "I",
- N_("View track details"), G_CALLBACK(action_current_track_info) },
+ N_("View track details"), G_CALLBACK(audgui_infowin_show_current) },
{ "playlist track info", GTK_STOCK_INFO , N_("View Track Details"), "<Alt>I",
N_("View track details"), G_CALLBACK(action_playlist_track_info) },
{ "about audacious", GTK_STOCK_DIALOG_INFO , N_("About Audacious"), NULL,
- N_("About Audacious"), G_CALLBACK(action_about_audacious) },
+ N_("About Audacious"), G_CALLBACK(audgui_show_about_window) },
{ "play file", GTK_STOCK_OPEN , N_("Play File"), "L",
N_("Load and play a file"), G_CALLBACK(action_play_file) },
@@ -394,10 +401,10 @@ static GtkActionEntry action_entries_others[] = {
{ "plugins", NULL , N_("Plugin services") },
{ "preferences", GTK_STOCK_PREFERENCES , N_("Preferences"), "<Ctrl>P",
- N_("Open preferences window"), G_CALLBACK(action_preferences) },
+ N_("Open preferences window"), G_CALLBACK(aud_show_prefs_window) },
{ "quit", GTK_STOCK_QUIT , N_("_Quit"), NULL,
- N_("Quit Audacious"), G_CALLBACK(action_quit) },
+ N_("Quit Audacious"), G_CALLBACK(aud_drct_quit) },
{ "ab set", NULL , N_("Set A-B"), "A",
N_("Set A-B"), G_CALLBACK(action_ab_set) },
@@ -405,14 +412,11 @@ static GtkActionEntry action_entries_others[] = {
{ "ab clear", NULL , N_("Clear A-B"), "<Shift>A",
N_("Clear A-B"), G_CALLBACK(action_ab_clear) },
- { "jump to playlist start", GTK_STOCK_GOTO_TOP , N_("Jump to Playlist Start"), "<Ctrl>Z",
- N_("Jump to Playlist Start"), G_CALLBACK(action_jump_to_playlist_start) },
-
{ "jump to file", GTK_STOCK_JUMP_TO , N_("Jump to File"), "J",
- N_("Jump to File"), G_CALLBACK(action_jump_to_file) },
+ N_("Jump to File"), G_CALLBACK(audgui_jump_to_track) },
{ "jump to time", GTK_STOCK_JUMP_TO , N_("Jump to Time"), "<Ctrl>J",
- N_("Jump to Time"), G_CALLBACK(action_jump_to_time) },
+ N_("Jump to Time"), (GCallback) audgui_jump_to_time},
{ "queue toggle", AUD_STOCK_QUEUETOGGLE , N_("Queue Toggle"), "Q",
N_("Enables/disables the entry in the playlist's queue."),
@@ -486,7 +490,7 @@ static GtkActionGroup *
ui_manager_new_action_group( const gchar * group_name )
{
GtkActionGroup *group = gtk_action_group_new( group_name );
- gtk_action_group_set_translation_domain( group , PACKAGE_NAME );
+ gtk_action_group_set_translation_domain (group, PACKAGE);
return group;
}
@@ -622,17 +626,17 @@ ui_manager_init ( void )
return;
}
-#ifdef GDK_WINDOWING_QUARTZ
-static GtkWidget *carbon_menubar;
-#endif
-
void
ui_manager_create_menus ( void )
{
+ const gchar * data = aud_get_path (AUD_PATH_DATA_DIR);
+ gchar * path;
GError *gerr = NULL;
/* attach xml menu definitions */
- gtk_ui_manager_add_ui_from_file( ui_manager , DATA_DIR "/ui/mainwin.ui" , &gerr );
+ path = g_strdup_printf ("%s/ui/mainwin.ui", data);
+ gtk_ui_manager_add_ui_from_file (ui_manager, path, & gerr);
+ g_free (path);
if ( gerr != NULL )
{
@@ -641,21 +645,9 @@ ui_manager_create_menus ( void )
return;
}
-#ifdef GDK_WINDOWING_QUARTZ
- gtk_ui_manager_add_ui_from_file( ui_manager , DATA_DIR "/ui/carbon-menubar.ui" , &gerr );
-
- if ( gerr != NULL )
- {
- g_critical( "Error creating UI<ui/carbon-menubar.ui>: %s" , gerr->message );
- g_error_free( gerr );
- return;
- }
-
- carbon_menubar = ui_manager_get_popup_menu( ui_manager , "/carbon-menubar/main-menu" );
- sync_menu_takeover_menu(GTK_MENU_SHELL(carbon_menubar));
-#endif
-
- gtk_ui_manager_add_ui_from_file( ui_manager , DATA_DIR "/ui/playlist.ui" , &gerr );
+ path = g_strdup_printf ("%s/ui/playlist.ui", data);
+ gtk_ui_manager_add_ui_from_file (ui_manager, path, & gerr);
+ g_free (path);
if ( gerr != NULL )
{
@@ -664,7 +656,9 @@ ui_manager_create_menus ( void )
return;
}
- gtk_ui_manager_add_ui_from_file( ui_manager , DATA_DIR "/ui/equalizer.ui" , &gerr );
+ path = g_strdup_printf ("%s/ui/equalizer.ui", data);
+ gtk_ui_manager_add_ui_from_file (ui_manager, path, & gerr);
+ g_free (path);
if ( gerr != NULL )
{
@@ -688,30 +682,32 @@ static GtkWidget * create_menu (gint id)
templates[UI_MENUS] =
{
{"/mainwin-menus/main-menu", "/mainwin-menus/main-menu/plugins-menu",
- AUDACIOUS_MENU_MAIN},
+ AUD_MENU_MAIN},
{"/mainwin-menus/main-menu/playback", NULL, 0},
{"/mainwin-menus/main-menu/playlist", NULL, 0},
{"/mainwin-menus/songname-menu", NULL, 0},
{"/mainwin-menus/main-menu/view", NULL, 0},
{"/mainwin-menus/main-menu/visualization", NULL, 0},
{"/playlist-menus/add-menu", "/playlist-menus/add-menu/plugins-menu",
- AUDACIOUS_MENU_PLAYLIST_ADD},
+ AUD_MENU_PLAYLIST_ADD},
{"/playlist-menus/del-menu", "/playlist-menus/del-menu/plugins-menu",
- AUDACIOUS_MENU_PLAYLIST_REMOVE},
+ AUD_MENU_PLAYLIST_REMOVE},
{"/playlist-menus/select-menu", "/playlist-menus/select-menu/"
- "plugins-menu", AUDACIOUS_MENU_PLAYLIST_SELECT},
+ "plugins-menu", AUD_MENU_PLAYLIST_SELECT},
{"/playlist-menus/misc-menu", "/playlist-menus/misc-menu/plugins-menu",
- AUDACIOUS_MENU_PLAYLIST_MISC},
+ AUD_MENU_PLAYLIST_MISC},
{"/playlist-menus/playlist-menu", "/playlist-menus/playlist-menu/"
- "plugins-menu", AUDACIOUS_MENU_PLAYLIST},
+ "plugins-menu", AUD_MENU_PLAYLIST},
{"/playlist-menus/playlist-rightclick-menu", "/playlist-menus/"
- "playlist-rightclick-menu/plugins-menu", AUDACIOUS_MENU_PLAYLIST_RCLICK},
+ "playlist-rightclick-menu/plugins-menu", AUD_MENU_PLAYLIST_RCLICK},
{"/equalizer-menus/preset-menu", NULL, 0},
};
if (menus[id] == NULL)
{
menus[id] = ui_manager_get_popup_menu(ui_manager, templates[id].name);
+ g_signal_connect (menus[id], "destroy", (GCallback)
+ gtk_widget_destroyed, & menus[id]);
if (templates[id].plug_name != NULL)
{
@@ -750,9 +746,8 @@ ui_manager_get_accel_group ( void )
return gtk_ui_manager_get_accel_group( ui_manager );
}
-
-GtkWidget *
-ui_manager_get_popup_menu ( GtkUIManager * self , const gchar * path )
+static GtkWidget * ui_manager_get_popup_menu (GtkUIManager * self, const gchar *
+ path)
{
GtkWidget *menu_item = gtk_ui_manager_get_widget( self , path );
@@ -850,4 +845,3 @@ ui_manager_destroy( void )
g_object_unref(G_OBJECT(action_group_equalizer));
g_object_unref(G_OBJECT(ui_manager));
}
-
diff --git a/src/skins/ui_manager.h b/src/skins/ui_manager.h
index 2101247..71dd291 100644
--- a/src/skins/ui_manager.h
+++ b/src/skins/ui_manager.h
@@ -17,14 +17,11 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_MANAGER_H
-#define AUDACIOUS_UI_MANAGER_H
+#ifndef SKINS_UI_MANAGER_H
+#define SKINS_UI_MANAGER_H
-#include <glib.h>
#include <gtk/gtk.h>
-G_BEGIN_DECLS
-
enum
{
UI_MENU_MAIN,
@@ -43,36 +40,22 @@ enum
UI_MENUS
};
-GtkActionGroup *toggleaction_group_others;
-GtkActionGroup *radioaction_group_anamode; /* Analyzer mode */
-GtkActionGroup *radioaction_group_anatype; /* Analyzer type */
-GtkActionGroup *radioaction_group_scomode; /* Scope mode */
-GtkActionGroup *radioaction_group_vprmode; /* Voiceprint mode */
-GtkActionGroup *radioaction_group_wshmode; /* WindowShade VU mode */
-GtkActionGroup *radioaction_group_anafoff; /* Analyzer Falloff */
-GtkActionGroup *radioaction_group_peafoff; /* Peak Falloff */
-GtkActionGroup *radioaction_group_vismode; /* Visualization mode */
-GtkActionGroup *radioaction_group_viewtime; /* View time (remaining/elapsed) */
-GtkActionGroup *action_group_playback;
-GtkActionGroup *action_group_visualization;
-GtkActionGroup *action_group_view;
-GtkActionGroup *action_group_others;
-GtkActionGroup *action_group_playlist;
-GtkActionGroup *action_group_playlist_add;
-GtkActionGroup *action_group_playlist_select;
-GtkActionGroup *action_group_playlist_delete;
-GtkActionGroup *action_group_playlist_sort;
-GtkActionGroup *action_group_equalizer;
-
+extern GtkActionGroup *toggleaction_group_others;
+extern GtkActionGroup *radioaction_group_anamode; /* Analyzer mode */
+extern GtkActionGroup *radioaction_group_anatype; /* Analyzer type */
+extern GtkActionGroup *radioaction_group_scomode; /* Scope mode */
+extern GtkActionGroup *radioaction_group_vprmode; /* Voiceprint mode */
+extern GtkActionGroup *radioaction_group_wshmode; /* WindowShade VU mode */
+extern GtkActionGroup *radioaction_group_anafoff; /* Analyzer Falloff */
+extern GtkActionGroup *radioaction_group_peafoff; /* Peak Falloff */
+extern GtkActionGroup *radioaction_group_vismode; /* Visualization mode */
+extern GtkActionGroup *radioaction_group_viewtime; /* View time (remaining/elapsed) */
void ui_manager_init ( void );
void ui_manager_create_menus ( void );
GtkAccelGroup * ui_manager_get_accel_group ( void );
-GtkWidget * ui_manager_get_popup_menu ( GtkUIManager * , const gchar * );
void ui_popup_menu_show(gint id, gint x, gint y, gboolean leftward, gboolean
upward, gint button, gint time);
void ui_manager_destroy( void );
-G_END_DECLS
-
-#endif /* AUDACIOUS_UI_MANAGER_H */
+#endif /* SKINS_UI_MANAGER_H */
diff --git a/src/skins/ui_playlist.c b/src/skins/ui_playlist.c
index 1bffdd5..57fcc57 100644
--- a/src/skins/ui_playlist.c
+++ b/src/skins/ui_playlist.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2009 Audacious development team.
+ * Copyright (C) 2005-2011 Audacious development team.
*
* BMP - Cross-platform multimedia player
* Copyright (C) 2003-2004 BMP development team.
@@ -23,54 +23,46 @@
* Audacious or using our public API to be a derived work.
*/
-/* #define AUD_DEBUG 1 */
-
-#include "ui_playlist.h"
+#include <inttypes.h>
-#include <glib.h>
-#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
-#include <string.h>
-
-#include "platform/smartinclude.h"
-#include <inttypes.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <audacious/audconfig.h>
#include <audacious/debug.h>
#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/playlist.h>
-#include <libaudcore/audstrings.h>
#include <libaudcore/hook.h>
#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-#include "actions-playlist.h"
+#include "actions-mainwin.h"
+#include "config.h"
#include "dnd.h"
-#include "plugin.h"
-#include "ui_dock.h"
-#include "ui_equalizer.h"
+#include "drag-handle.h"
+#include "skins_cfg.h"
#include "ui_main.h"
#include "ui_manager.h"
-#include "ui_playlist_evlisteners.h"
-#include "util.h"
-#include "ui_skinned_window.h"
+#include "ui_playlist.h"
#include "ui_skinned_button.h"
-#include "ui_skinned_textbox.h"
-#include "ui_skinned_playlist_slider.h"
#include "ui_skinned_playlist.h"
+#include "ui_skinned_playlist_slider.h"
+#include "ui_skinned_textbox.h"
+#include "ui_skinned_window.h"
#include "images/audacious_playlist.xpm"
+#define PLAYLISTWIN_MIN_WIDTH MAINWIN_WIDTH
+#define PLAYLISTWIN_MIN_HEIGHT MAINWIN_HEIGHT
+#define PLAYLISTWIN_WIDTH_SNAP 25
+#define PLAYLISTWIN_HEIGHT_SNAP 29
+#define PLAYLISTWIN_SHADED_HEIGHT MAINWIN_SHADED_HEIGHT
+
gint active_playlist;
gchar * active_title;
glong active_length;
-GtkWidget * playlistwin, * playlistwin_list;
+GtkWidget * playlistwin, * playlistwin_list, * playlistwin_sinfo;
static GMutex *resize_mutex = NULL;
@@ -79,11 +71,14 @@ static GtkWidget *playlistwin_shaded_shade, *playlistwin_shaded_close;
static GtkWidget *playlistwin_slider;
static GtkWidget *playlistwin_time_min, *playlistwin_time_sec;
-static GtkWidget *playlistwin_info, *playlistwin_sinfo;
+static GtkWidget *playlistwin_info;
static GtkWidget *playlistwin_srew, *playlistwin_splay;
static GtkWidget *playlistwin_spause, *playlistwin_sstop;
static GtkWidget *playlistwin_sfwd, *playlistwin_seject;
static GtkWidget *playlistwin_sscroll_up, *playlistwin_sscroll_down;
+static GtkWidget * resize_handle, * sresize_handle;
+static GtkWidget * button_add, * button_sub, * button_sel, * button_misc,
+ * button_list;
static void playlistwin_select_search_cbt_cb(GtkWidget *called_cbt,
gpointer other_cbt);
@@ -91,55 +86,17 @@ static gboolean playlistwin_select_search_kp_cb(GtkWidget *entry,
GdkEventKey *event,
gpointer searchdlg_win);
-static gboolean playlistwin_resizing = FALSE;
-static gint playlistwin_resize_x, playlistwin_resize_y;
+static gint resize_base_width, resize_base_height;
static int drop_position;
static gboolean song_changed;
-gboolean
-playlistwin_is_shaded(void)
-{
- return config.playlist_shaded;
-}
-
-gint
-playlistwin_get_width(void)
-{
- config.playlist_width /= PLAYLISTWIN_WIDTH_SNAP;
- config.playlist_width *= PLAYLISTWIN_WIDTH_SNAP;
- return config.playlist_width;
-}
-
-gint
-playlistwin_get_height_unshaded(void)
-{
- config.playlist_height /= PLAYLISTWIN_HEIGHT_SNAP;
- config.playlist_height *= PLAYLISTWIN_HEIGHT_SNAP;
- return config.playlist_height;
-}
-
-gint
-playlistwin_get_height_shaded(void)
-{
- return PLAYLISTWIN_SHADED_HEIGHT;
-}
-
-gint
-playlistwin_get_height(void)
-{
- if (playlistwin_is_shaded())
- return playlistwin_get_height_shaded();
- else
- return playlistwin_get_height_unshaded();
-}
-
static void playlistwin_update_info (void)
{
gchar *text, *sel_text, *tot_text;
gint64 selection, total;
- total = aud_playlist_get_total_length (active_playlist, TRUE) / 1000;
- selection = aud_playlist_get_selected_length (active_playlist, TRUE) / 1000;
+ total = aud_playlist_get_total_length (active_playlist) / 1000;
+ selection = aud_playlist_get_selected_length (active_playlist) / 1000;
if (selection >= 3600)
sel_text = g_strdup_printf ("%" PRId64 ":%02" PRId64 ":%02" PRId64,
@@ -156,7 +113,7 @@ static void playlistwin_update_info (void)
total / 60, total % 60);
text = g_strconcat(sel_text, "/", tot_text, NULL);
- ui_skinned_textbox_set_text (playlistwin_info, text);
+ textbox_set_text (playlistwin_info, text);
g_free(text);
g_free(tot_text);
g_free(sel_text);
@@ -172,20 +129,22 @@ static void update_rollup_text (void)
if (entry > -1)
{
- gint length = aud_playlist_entry_get_length (playlist, entry, FALSE);
+ gint length = aud_playlist_entry_get_length (playlist, entry, TRUE);
- if (aud_cfg->show_numbers_in_pl)
+ if (aud_get_bool (NULL, "show_numbers_in_pl"))
snprintf (scratch, sizeof scratch, "%d. ", 1 + entry);
+ gchar * title = aud_playlist_entry_get_title (playlist, entry, TRUE);
snprintf (scratch + strlen (scratch), sizeof scratch - strlen (scratch),
- "%s", aud_playlist_entry_get_title (playlist, entry, FALSE));
+ "%s", title);
+ str_unref (title);
if (length > 0)
snprintf (scratch + strlen (scratch), sizeof scratch - strlen
(scratch), " (%d:%02d)", length / 60000, length / 1000 % 60);
}
- ui_skinned_textbox_set_text (playlistwin_sinfo, scratch);
+ textbox_set_text (playlistwin_sinfo, scratch);
}
static void real_update (void)
@@ -202,85 +161,6 @@ void playlistwin_update (void)
}
static void
-playlistwin_set_geometry_hints(gboolean shaded)
-{
- GdkGeometry geometry;
-
- geometry.min_width = PLAYLISTWIN_MIN_WIDTH;
- geometry.width_inc = PLAYLISTWIN_WIDTH_SNAP;
- geometry.max_width = 65535;
-
- if (shaded)
- {
- geometry.min_height = PLAYLISTWIN_SHADED_HEIGHT;
- geometry.height_inc = 0;
- geometry.max_height = PLAYLISTWIN_SHADED_HEIGHT;
- }
- else
- {
- geometry.min_height = PLAYLISTWIN_MIN_HEIGHT;
- geometry.height_inc = PLAYLISTWIN_HEIGHT_SNAP;
- geometry.max_height = 65535;
- }
-
- gtk_window_set_geometry_hints ((GtkWindow *) playlistwin, NULL, & geometry,
- GDK_HINT_MIN_SIZE | GDK_HINT_RESIZE_INC | GDK_HINT_MAX_SIZE);
-}
-
-void
-playlistwin_set_sinfo_font(gchar *font)
-{
- gchar *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL;
-
- g_return_if_fail(font);
- AUDDBG("Attempt to set font \"%s\"\n", font);
-
- tmp = g_strdup(font);
- g_return_if_fail(tmp);
-
- tmp3 = strrchr(tmp, ' ');
- if (tmp3 != NULL)
- tmp3 = '\0';
-
- tmp2 = g_strdup_printf("%s 8", tmp);
- g_return_if_fail(tmp2);
-
- ui_skinned_textbox_set_xfont(playlistwin_sinfo, !config.mainwin_use_bitmapfont, tmp2);
-
- g_free(tmp);
- g_free(tmp2);
-}
-
-void
-playlistwin_set_sinfo_scroll(gboolean scroll)
-{
- if(playlistwin_is_shaded())
- ui_skinned_textbox_set_scroll(playlistwin_sinfo, config.autoscroll);
- else
- ui_skinned_textbox_set_scroll(playlistwin_sinfo, FALSE);
-}
-
-void
-playlistwin_set_shade(gboolean shaded)
-{
- config.playlist_shaded = shaded;
- ui_skinned_window_set_shade(playlistwin, shaded);
-
- if (shaded) {
- playlistwin_set_sinfo_font(config.playlist_font);
- playlistwin_set_sinfo_scroll(config.autoscroll);
- }
- else {
- playlistwin_set_sinfo_scroll(FALSE);
- }
-
- playlistwin_set_geometry_hints(config.playlist_shaded);
-
- dock_shade(get_dock_window_list(), GTK_WINDOW(playlistwin),
- playlistwin_get_height());
-}
-
-static void
playlistwin_set_shade_menu(gboolean shaded)
{
GtkAction *action = gtk_action_group_get_action(
@@ -289,21 +169,12 @@ playlistwin_set_shade_menu(gboolean shaded)
playlistwin_update ();
}
-void
+static void
playlistwin_shade_toggle(void)
{
playlistwin_set_shade_menu(!config.playlist_shaded);
}
-static gboolean
-playlistwin_release(GtkWidget * widget,
- GdkEventButton * event,
- gpointer callback_data)
-{
- playlistwin_resizing = FALSE;
- return FALSE;
-}
-
static void playlistwin_scroll (gboolean up)
{
gint rows, first, focused;
@@ -339,7 +210,8 @@ static void copy_selected_to_new (gint playlist)
{
gint entries = aud_playlist_entry_count (playlist);
gint new = aud_playlist_count ();
- struct index * copy = index_new ();
+ Index * filenames = index_new ();
+ Index * tuples = index_new ();
gint entry;
aud_playlist_insert (new);
@@ -347,11 +219,13 @@ static void copy_selected_to_new (gint playlist)
for (entry = 0; entry < entries; entry ++)
{
if (aud_playlist_entry_get_selected (playlist, entry))
- index_append (copy, g_strdup (aud_playlist_entry_get_filename
- (playlist, entry)));
+ {
+ index_append (filenames, aud_playlist_entry_get_filename (playlist, entry));
+ index_append (tuples, aud_playlist_entry_get_tuple (playlist, entry, TRUE));
+ }
}
- aud_playlist_entry_insert_batch (new, 0, copy, NULL);
+ aud_playlist_entry_insert_batch (new, 0, filenames, tuples, FALSE);
aud_playlist_set_active (new);
}
@@ -459,7 +333,8 @@ playlistwin_select_search(void)
0 , 2 , 7 , 8 , GTK_FILL | GTK_EXPAND , GTK_FILL | GTK_EXPAND , 0 , 1 );
gtk_container_set_border_width( GTK_CONTAINER(searchdlg_table) , 5 );
- gtk_container_add( GTK_CONTAINER(GTK_DIALOG(searchdlg_win)->vbox) , searchdlg_table );
+ gtk_container_add ((GtkContainer *) gtk_dialog_get_content_area
+ ((GtkDialog *) searchdlg_win), searchdlg_table);
gtk_widget_show_all( searchdlg_win );
result = gtk_dialog_run( GTK_DIALOG(searchdlg_win) );
@@ -473,28 +348,27 @@ playlistwin_select_search(void)
searchdata = (gchar*)gtk_entry_get_text( GTK_ENTRY(searchdlg_entry_title) );
AUDDBG("title=\"%s\"\n", searchdata);
- tuple_associate_string(tuple, FIELD_TITLE, NULL, searchdata);
+ tuple_set_str(tuple, FIELD_TITLE, NULL, searchdata);
searchdata = (gchar*)gtk_entry_get_text( GTK_ENTRY(searchdlg_entry_album) );
AUDDBG("album=\"%s\"\n", searchdata);
- tuple_associate_string(tuple, FIELD_ALBUM, NULL, searchdata);
+ tuple_set_str(tuple, FIELD_ALBUM, NULL, searchdata);
searchdata = (gchar*)gtk_entry_get_text( GTK_ENTRY(searchdlg_entry_performer) );
AUDDBG("performer=\"%s\"\n", searchdata);
- tuple_associate_string(tuple, FIELD_ARTIST, NULL, searchdata);
+ tuple_set_str(tuple, FIELD_ARTIST, NULL, searchdata);
searchdata = (gchar*)gtk_entry_get_text( GTK_ENTRY(searchdlg_entry_file_name) );
AUDDBG("filename=\"%s\"\n", searchdata);
- tuple_associate_string(tuple, FIELD_FILE_NAME, NULL, searchdata);
+ tuple_set_str(tuple, FIELD_FILE_NAME, NULL, searchdata);
/* check if previous selection should be cleared before searching */
if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(searchdlg_checkbt_clearprevsel)) == TRUE )
playlistwin_select_none();
- /* now send this tuple to the real search function */
+
aud_playlist_select_by_patterns (active_playlist, tuple);
+ tuple_unref (tuple);
- /* we do not need the tuple and its data anymore */
- mowgli_object_unref(tuple);
/* check if a new playlist should be created after searching */
if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(searchdlg_checkbt_newplaylist)) == TRUE )
copy_selected_to_new (active_playlist);
@@ -539,22 +413,21 @@ static void playlistwin_inverse_selection (void)
! aud_playlist_entry_get_selected (active_playlist, entry));
}
-static void
-playlistwin_resize(gint width, gint height)
+/* note: height is ignored if the window is shaded */
+static void playlistwin_resize (gint w, gint h)
{
gint tx, ty;
- gint dx, dy;
- g_return_if_fail(width > 0 && height > 0);
+ g_return_if_fail(w > 0 && h > 0);
- tx = (width - PLAYLISTWIN_MIN_WIDTH) / PLAYLISTWIN_WIDTH_SNAP;
+ tx = (w - PLAYLISTWIN_MIN_WIDTH) / PLAYLISTWIN_WIDTH_SNAP;
tx = (tx * PLAYLISTWIN_WIDTH_SNAP) + PLAYLISTWIN_MIN_WIDTH;
if (tx < PLAYLISTWIN_MIN_WIDTH)
tx = PLAYLISTWIN_MIN_WIDTH;
if (!config.playlist_shaded)
{
- ty = (height - PLAYLISTWIN_MIN_HEIGHT) / PLAYLISTWIN_HEIGHT_SNAP;
+ ty = (h - PLAYLISTWIN_MIN_HEIGHT) / PLAYLISTWIN_HEIGHT_SNAP;
ty = (ty * PLAYLISTWIN_HEIGHT_SNAP) + PLAYLISTWIN_MIN_HEIGHT;
if (ty < PLAYLISTWIN_MIN_HEIGHT)
ty = PLAYLISTWIN_MIN_HEIGHT;
@@ -565,286 +438,56 @@ playlistwin_resize(gint width, gint height)
if (tx == config.playlist_width && ty == config.playlist_height)
return;
- /* difference between previous size and new size */
- dx = tx - config.playlist_width;
- dy = ty - config.playlist_height;
-
- config.playlist_width = width = tx;
- config.playlist_height = height = ty;
+ config.playlist_width = w = tx;
+ config.playlist_height = h = ty;
g_mutex_lock(resize_mutex);
- ui_skinned_playlist_resize_relative(playlistwin_list, dx, dy);
-
- ui_skinned_playlist_slider_move_relative(playlistwin_slider, dx);
- ui_skinned_playlist_slider_resize_relative(playlistwin_slider, dy);
-
- ui_skinned_button_move_relative(playlistwin_shade, dx, 0);
- ui_skinned_button_move_relative(playlistwin_close, dx, 0);
- ui_skinned_button_move_relative(playlistwin_shaded_shade, dx, 0);
- ui_skinned_button_move_relative(playlistwin_shaded_close, dx, 0);
- ui_skinned_textbox_move_relative(playlistwin_time_min, dx, dy);
- ui_skinned_textbox_move_relative(playlistwin_time_sec, dx, dy);
- ui_skinned_textbox_move_relative(playlistwin_info, dx, dy);
- ui_skinned_button_move_relative(playlistwin_srew, dx, dy);
- ui_skinned_button_move_relative(playlistwin_splay, dx, dy);
- ui_skinned_button_move_relative(playlistwin_spause, dx, dy);
- ui_skinned_button_move_relative(playlistwin_sstop, dx, dy);
- ui_skinned_button_move_relative(playlistwin_sfwd, dx, dy);
- ui_skinned_button_move_relative(playlistwin_seject, dx, dy);
- ui_skinned_button_move_relative(playlistwin_sscroll_up, dx, dy);
- ui_skinned_button_move_relative(playlistwin_sscroll_down, dx, dy);
-
- gtk_widget_set_size_request(playlistwin_sinfo, playlistwin_get_width() - 35,
- aud_active_skin->properties.textbox_bitmap_font_height);
- g_mutex_unlock(resize_mutex);
-}
-
-static void
-playlistwin_motion(GtkWidget * widget,
- GdkEventMotion * event,
- gpointer callback_data)
-{
- /*
- * GDK2's resize is broken and doesn't really play nice, so we have
- * to do all of this stuff by hand.
- */
- if (playlistwin_resizing == TRUE)
- {
- if (event->x + playlistwin_resize_x != playlistwin_get_width() ||
- event->y + playlistwin_resize_y != playlistwin_get_height())
- {
- playlistwin_resize(event->x + playlistwin_resize_x,
- event->y + playlistwin_resize_y);
- resize_window(playlistwin, config.playlist_width,
- playlistwin_get_height());
- }
- }
- else if (dock_is_moving(GTK_WINDOW(playlistwin)))
- dock_move_motion(GTK_WINDOW(playlistwin), event);
-}
-
-static void
-playlistwin_fileinfo(void)
-{
- gint rows, first, focused;
-
- ui_skinned_playlist_row_info (playlistwin_list, & rows, & first, & focused);
- audgui_infowin_show (active_playlist, focused);
-}
-
-static void
-show_playlist_save_error(GtkWindow *parent,
- const gchar *filename)
-{
- GtkWidget *dialog;
-
- g_return_if_fail(GTK_IS_WINDOW(parent));
- g_return_if_fail(filename);
-
- dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Error writing playlist \"%s\": %s"),
- filename, strerror(errno));
-
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
-}
-
-static gboolean
-show_playlist_overwrite_prompt(GtkWindow * parent,
- const gchar * filename)
-{
- GtkWidget *dialog;
- gint result;
-
- g_return_val_if_fail(GTK_IS_WINDOW(parent), FALSE);
- g_return_val_if_fail(filename != NULL, FALSE);
- dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO,
- _("%s already exist. Continue?"),
- filename);
+ ui_skinned_playlist_resize (playlistwin_list, w - 31, h - 58);
+ window_move_widget (playlistwin, FALSE, playlistwin_slider, w - 15, 20);
+ ui_skinned_playlist_slider_resize (playlistwin_slider, h - 58);
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
- result = gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
-
- return (result == GTK_RESPONSE_YES);
-}
+ window_move_widget (playlistwin, TRUE, playlistwin_shaded_shade, w - 21, 3);
+ window_move_widget (playlistwin, TRUE, playlistwin_shaded_close, w - 11, 3);
+ window_move_widget (playlistwin, FALSE, playlistwin_shade, w - 21, 3);
+ window_move_widget (playlistwin, FALSE, playlistwin_close, w - 11, 3);
-static void
-playlistwin_save_playlist(const gchar * filename)
-{
- str_replace_in(&aud_cfg->playlist_path, g_path_get_dirname(filename));
-
- if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
- if (!show_playlist_overwrite_prompt(GTK_WINDOW(playlistwin), filename))
- return;
-
- if (! aud_playlist_save (active_playlist, filename))
- show_playlist_save_error(GTK_WINDOW(playlistwin), filename);
-}
-
-static void
-playlistwin_load_playlist(const gchar * filename)
-{
- str_replace_in(&aud_cfg->playlist_path, g_path_get_dirname(filename));
-
- aud_playlist_entry_delete (active_playlist, 0, aud_playlist_entry_count
- (active_playlist));
- aud_playlist_insert_playlist (active_playlist, 0, filename);
- aud_playlist_set_filename (active_playlist, filename);
-
- if (aud_playlist_get_title (active_playlist) == NULL)
- aud_playlist_set_title (active_playlist, filename);
-}
-
-static gchar *
-playlist_file_selection_load(const gchar * title,
- const gchar * default_filename)
-{
- GtkWidget *dialog;
- gchar *filename;
+ window_move_widget (playlistwin, FALSE, playlistwin_time_min, w - 82, h - 15);
+ window_move_widget (playlistwin, FALSE, playlistwin_time_sec, w - 64, h - 15);
+ window_move_widget (playlistwin, FALSE, playlistwin_info, w - 143, h - 28);
- g_return_val_if_fail(title != NULL, NULL);
+ window_move_widget (playlistwin, FALSE, playlistwin_srew, w - 144, h - 16);
+ window_move_widget (playlistwin, FALSE, playlistwin_splay, w - 138, h - 16);
+ window_move_widget (playlistwin, FALSE, playlistwin_spause, w - 128, h - 16);
+ window_move_widget (playlistwin, FALSE, playlistwin_sstop, w - 118, h - 16);
+ window_move_widget (playlistwin, FALSE, playlistwin_sfwd, w - 109, h - 16);
+ window_move_widget (playlistwin, FALSE, playlistwin_seject, w - 100, h - 16);
+ window_move_widget (playlistwin, FALSE, playlistwin_sscroll_up, w - 14, h - 35);
+ window_move_widget (playlistwin, FALSE, playlistwin_sscroll_down, w - 14, h - 30);
- dialog = make_filebrowser(title, FALSE);
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), aud_cfg->playlist_path);
- if (default_filename)
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER(dialog), default_filename);
- gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); /* centering */
+ window_move_widget (playlistwin, FALSE, resize_handle, w - 20, h - 20);
+ window_move_widget (playlistwin, TRUE, sresize_handle, w - 31, 0);
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
- filename = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER(dialog));
- else
- filename = NULL;
+ textbox_set_width (playlistwin_sinfo, w - 35);
- gtk_widget_destroy(dialog);
- return filename;
-}
+ window_move_widget (playlistwin, FALSE, button_add, 12, h - 29);
+ window_move_widget (playlistwin, FALSE, button_sub, 40, h - 29);
+ window_move_widget (playlistwin, FALSE, button_sel, 68, h - 29);
+ window_move_widget (playlistwin, FALSE, button_misc, 100, h - 29);
+ window_move_widget (playlistwin, FALSE, button_list, w - 46, h - 29);
-#if 0
-static void
-on_static_toggle(GtkToggleButton *button, gpointer data)
-{
- active_playlist->attribute =
- gtk_toggle_button_get_active(button) ?
- active_playlist->attribute | PLAYLIST_STATIC : active_playlist->attribute &
- ~PLAYLIST_STATIC;
+ g_mutex_unlock(resize_mutex);
}
static void
-on_relative_toggle(GtkToggleButton *button, gpointer data)
-{
- active_playlist->attribute =
- gtk_toggle_button_get_active(button) ?
- active_playlist->attribute | PLAYLIST_USE_RELATIVE :
- active_playlist->attribute & ~PLAYLIST_USE_RELATIVE;
-}
-#endif
-
-static gchar *
-playlist_file_selection_save(const gchar * title,
- const gchar * default_filename)
-{
- GtkWidget *dialog;
- gchar *filename;
-#if 0
- GtkWidget *hbox;
- GtkWidget *toggle, *toggle2;
-#endif
-
- g_return_val_if_fail(title != NULL, NULL);
-
- dialog = make_filebrowser(title, TRUE);
- gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), aud_cfg->playlist_path);
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER(dialog), default_filename);
-
-#if 0
- hbox = gtk_hbox_new(FALSE, 5);
-
- /* static playlist */
- toggle = gtk_check_button_new_with_label(_("Save as Static Playlist"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle),
- (active_playlist->attribute & PLAYLIST_STATIC) ? 1 : 0);
- g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(on_static_toggle), dialog);
- gtk_box_pack_start(GTK_BOX(hbox), toggle, FALSE, FALSE, 0);
-
- /* use relative path */
- toggle2 = gtk_check_button_new_with_label(_("Use Relative Path"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle2),
- (active_playlist->attribute & PLAYLIST_USE_RELATIVE) ? 1 : 0);
- g_signal_connect(G_OBJECT(toggle2), "toggled", G_CALLBACK(on_relative_toggle), dialog);
- gtk_box_pack_start(GTK_BOX(hbox), toggle2, FALSE, FALSE, 0);
-
- gtk_widget_show_all(hbox);
- gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), hbox);
-#endif
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
- filename = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER(dialog));
- else
- filename = NULL;
-
- gtk_widget_destroy(dialog);
- return filename;
-}
-
-void
-playlistwin_select_playlist_to_load(const gchar * default_filename)
+playlistwin_fileinfo(void)
{
- gchar *filename =
- playlist_file_selection_load(_("Load Playlist"), default_filename);
-
- if (filename) {
- playlistwin_load_playlist(filename);
- g_free(filename);
- }
-}
-
-static void
-playlistwin_select_playlist_to_save(const gchar * default_filename)
-{
- gchar *dot = NULL, *basename = NULL;
- gchar *filename =
- playlist_file_selection_save(_("Save Playlist"), default_filename);
-
- if (filename) {
- /* Default extension */
- basename = g_path_get_basename(filename);
- dot = strrchr(basename, '.');
- if( dot == NULL || dot == basename) {
- gchar *oldname = filename;
-#ifdef HAVE_XSPF_PLAYLIST
- filename = g_strconcat(oldname, ".xspf", NULL);
-#else
- filename = g_strconcat(oldname, ".m3u", NULL);
-#endif
- g_free(oldname);
- }
- g_free(basename);
+ gint rows, first, focused;
- playlistwin_save_playlist(filename);
- g_free(filename);
- }
+ ui_skinned_playlist_row_info (playlistwin_list, & rows, & first, & focused);
+ audgui_infowin_show (active_playlist, focused);
}
-#define REGION_L(x1,x2,y1,y2) \
- (event->x >= (x1) && event->x < (x2) && \
- event->y >= config.playlist_height - (y1) && \
- event->y < config.playlist_height - (y2))
-
-#define REGION_R(x1,x2,y1,y2) \
- (event->x >= playlistwin_get_width() - (x1) && \
- event->x < playlistwin_get_width() - (x2) && \
- event->y >= config.playlist_height - (y1) && \
- event->y < config.playlist_height - (y2))
-
static void
playlistwin_scrolled(GtkWidget * widget,
GdkEventScroll * event,
@@ -868,59 +511,8 @@ playlistwin_press(GtkWidget * widget,
GdkEventButton * event,
gpointer callback_data)
{
- gint xpos, ypos;
-
- gtk_window_get_position(GTK_WINDOW(playlistwin), &xpos, &ypos);
-
- if (event->button == 1 && !config.show_wm_decorations &&
- ((!config.playlist_shaded &&
- event->x > playlistwin_get_width() - 20 &&
- event->y > config.playlist_height - 20) ||
- (config.playlist_shaded &&
- event->x >= playlistwin_get_width() - 31 &&
- event->x < playlistwin_get_width() - 22))) {
-
- if (event->type != GDK_2BUTTON_PRESS &&
- event->type != GDK_3BUTTON_PRESS) {
- playlistwin_resizing = TRUE;
- playlistwin_resize_x = config.playlist_width - event->x;
- playlistwin_resize_y = config.playlist_height - event->y;
- }
- }
- else if (event->button == 1 && REGION_L(12, 37, 29, 11))
- /* ADD button menu */
- ui_popup_menu_show(UI_MENU_PLAYLIST_ADD, xpos + 12, ypos +
- playlistwin_get_height() - 8, FALSE, TRUE, event->button, event->time);
- else if (event->button == 1 && REGION_L(41, 66, 29, 11))
- /* SUB button menu */
- ui_popup_menu_show(UI_MENU_PLAYLIST_REMOVE, xpos + 40, ypos +
- playlistwin_get_height() - 8, FALSE, TRUE, event->button, event->time);
- else if (event->button == 1 && REGION_L(70, 95, 29, 11))
- /* SEL button menu */
- ui_popup_menu_show(UI_MENU_PLAYLIST_SELECT, xpos + 68, ypos +
- playlistwin_get_height() - 8, FALSE, TRUE, event->button, event->time);
- else if (event->button == 1 && REGION_L(99, 124, 29, 11))
- /* MISC button menu */
- ui_popup_menu_show(UI_MENU_PLAYLIST_SORT, xpos + 100, ypos +
- playlistwin_get_height() - 8, FALSE, TRUE, event->button, event->time);
- else if (event->button == 1 && REGION_R(46, 23, 29, 11))
- /* LIST button menu */
- ui_popup_menu_show(UI_MENU_PLAYLIST_GENERAL, xpos +
- playlistwin_get_width() - 12, ypos + playlistwin_get_height() - 8,
- TRUE, TRUE, event->button, event->time);
- else if (event->button == 1 && event->type == GDK_BUTTON_PRESS &&
- (config.easy_move || event->y < 14))
- {
- return FALSE;
- }
- else if (event->button == 1 && event->type == GDK_2BUTTON_PRESS
- && event->y < 14) {
- /* double click on title bar */
+ if (event->button == 1 && event->type == GDK_2BUTTON_PRESS && event->y < 14)
playlistwin_shade_toggle();
- if (dock_is_moving(GTK_WINDOW(playlistwin)))
- dock_move_release(GTK_WINDOW(playlistwin));
- return TRUE;
- }
else if (event->button == 3)
ui_popup_menu_show(UI_MENU_PLAYLIST, event->x_root, event->y_root,
FALSE, FALSE, 3, event->time);
@@ -930,25 +522,21 @@ playlistwin_press(GtkWidget * widget,
static gboolean playlistwin_delete(GtkWidget *widget, void *data)
{
- if (config.show_wm_decorations)
- playlistwin_show(FALSE);
- else
- aud_drct_quit();
-
+ aud_drct_quit ();
return TRUE;
}
void
playlistwin_hide_timer(void)
{
- ui_skinned_textbox_set_text(playlistwin_time_min, " ");
- ui_skinned_textbox_set_text(playlistwin_time_sec, " ");
+ textbox_set_text (playlistwin_time_min, " ");
+ textbox_set_text (playlistwin_time_sec, " ");
}
void playlistwin_set_time (const gchar * minutes, const gchar * seconds)
{
- ui_skinned_textbox_set_text (playlistwin_time_min, minutes);
- ui_skinned_textbox_set_text (playlistwin_time_sec, seconds);
+ textbox_set_text (playlistwin_time_min, minutes);
+ textbox_set_text (playlistwin_time_sec, seconds);
}
static void drag_motion (GtkWidget * widget, GdkDragContext * context, gint x,
@@ -981,160 +569,188 @@ static void drag_data_received (GtkWidget * widget, GdkDragContext * context,
gint x, gint y, GtkSelectionData * data, guint info, guint time, void * unused)
{
audgui_urilist_insert (active_playlist, drop_position, (const gchar *)
- data->data);
+ gtk_selection_data_get_data (data));
drop_position = -1;
}
-static void
-local_playlist_prev(void)
+static void playlistwin_hide (void)
{
- aud_drct_pl_prev ();
+ playlistwin_show (0);
}
-static void
-local_playlist_next(void)
+static void resize_press (void)
{
- aud_drct_pl_next ();
+ resize_base_width = config.playlist_width;
+ resize_base_height = config.playlist_height;
}
-static void playlistwin_hide (void)
+static void resize_drag (gint x_offset, gint y_offset)
{
- playlistwin_show (0);
+ /* compromise between rounding and truncating; this has no real
+ * justification at all other than it "looks about right". */
+ playlistwin_resize (resize_base_width + x_offset + PLAYLISTWIN_WIDTH_SNAP /
+ 3, resize_base_height + y_offset + PLAYLISTWIN_HEIGHT_SNAP / 3);
+ window_set_size (playlistwin, config.playlist_width, config.playlist_shaded
+ ? PLAYLISTWIN_SHADED_HEIGHT : config.playlist_height);
}
-static void
-playlistwin_create_widgets(void)
+static void button_add_cb (GtkWidget * button, GdkEventButton * event)
{
- /* This function creates the custom widgets used by the playlist editor */
+ gint xpos, ypos;
+ gtk_window_get_position ((GtkWindow *) playlistwin, & xpos, & ypos);
+ ui_popup_menu_show (UI_MENU_PLAYLIST_ADD, xpos + 12, ypos +
+ config.playlist_height - 8, FALSE, TRUE, event->button, event->time);
+}
- /* text box for displaying song title in shaded mode */
- playlistwin_sinfo = ui_skinned_textbox_new(SKINNED_WINDOW(playlistwin)->shaded,
- 4, 4, playlistwin_get_width() - 35, TRUE, SKIN_TEXT);
+static void button_sub_cb (GtkWidget * button, GdkEventButton * event)
+{
+ gint xpos, ypos;
+ gtk_window_get_position ((GtkWindow *) playlistwin, & xpos, & ypos);
+ ui_popup_menu_show (UI_MENU_PLAYLIST_REMOVE, xpos + 40, ypos +
+ config.playlist_height - 8, FALSE, TRUE, event->button, event->time);
+}
- playlistwin_set_sinfo_font(config.playlist_font);
+static void button_sel_cb (GtkWidget * button, GdkEventButton * event)
+{
+ gint xpos, ypos;
+ gtk_window_get_position ((GtkWindow *) playlistwin, & xpos, & ypos);
+ ui_popup_menu_show (UI_MENU_PLAYLIST_SELECT, xpos + 68, ypos +
+ config.playlist_height - 8, FALSE, TRUE, event->button, event->time);
+}
+static void button_misc_cb (GtkWidget * button, GdkEventButton * event)
+{
+ gint xpos, ypos;
+ gtk_window_get_position ((GtkWindow *) playlistwin, & xpos, & ypos);
+ ui_popup_menu_show (UI_MENU_PLAYLIST_SORT, xpos + 100, ypos +
+ config.playlist_height - 8, FALSE, TRUE, event->button, event->time);
+}
- playlistwin_shaded_shade = ui_skinned_button_new();
- ui_skinned_push_button_setup(playlistwin_shaded_shade, SKINNED_WINDOW(playlistwin)->shaded,
- playlistwin_get_width() - 21, 3,
- 9, 9, 128, 45, 150, 42, SKIN_PLEDIT);
- g_signal_connect(playlistwin_shaded_shade, "clicked", playlistwin_shade_toggle, NULL );
+static void button_list_cb (GtkWidget * button, GdkEventButton * event)
+{
+ gint xpos, ypos;
+ gtk_window_get_position ((GtkWindow *) playlistwin, & xpos, & ypos);
+ ui_popup_menu_show (UI_MENU_PLAYLIST_GENERAL, xpos + config.playlist_width -
+ 12, ypos + config.playlist_height - 8, TRUE, TRUE, event->button,
+ event->time);
+}
- playlistwin_shaded_close = ui_skinned_button_new();
- ui_skinned_push_button_setup(playlistwin_shaded_close, SKINNED_WINDOW(playlistwin)->shaded,
- playlistwin_get_width() - 11, 3, 9, 9, 138, 45, 52, 42, SKIN_PLEDIT);
- g_signal_connect(playlistwin_shaded_close, "clicked", playlistwin_hide, NULL );
+static void
+playlistwin_create_widgets(void)
+{
+ gint w = config.playlist_width, h = config.playlist_height;
+
+ playlistwin_sinfo = textbox_new (w - 35, "", NULL, config.autoscroll);
+ window_put_widget (playlistwin, TRUE, playlistwin_sinfo, 4, 4);
+
+ playlistwin_shaded_shade = button_new (9, 9, 128, 45, 150, 42, SKIN_PLEDIT, SKIN_PLEDIT);
+ window_put_widget (playlistwin, TRUE, playlistwin_shaded_shade, w - 21, 3);
+ button_on_release (playlistwin_shaded_shade, (ButtonCB) playlistwin_shade_toggle);
- playlistwin_shade = ui_skinned_button_new();
- ui_skinned_push_button_setup(playlistwin_shade, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 21, 3,
- 9, 9, 157, 3, 62, 42, SKIN_PLEDIT);
- g_signal_connect(playlistwin_shade, "clicked", playlistwin_shade_toggle, NULL );
+ playlistwin_shaded_close = button_new (9, 9, 138, 45, 52, 42, SKIN_PLEDIT, SKIN_PLEDIT);
+ window_put_widget (playlistwin, TRUE, playlistwin_shaded_close, w - 11, 3);
+ button_on_release (playlistwin_shaded_close, (ButtonCB) playlistwin_hide);
- playlistwin_close = ui_skinned_button_new();
- ui_skinned_push_button_setup(playlistwin_close, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 11, 3, 9, 9, 167, 3, 52, 42, SKIN_PLEDIT);
- g_signal_connect(playlistwin_close, "clicked", playlistwin_hide, NULL );
+ playlistwin_shade = button_new (9, 9, 157, 3, 62, 42, SKIN_PLEDIT, SKIN_PLEDIT);
+ window_put_widget (playlistwin, FALSE, playlistwin_shade, w - 21, 3);
+ button_on_release (playlistwin_shade, (ButtonCB) playlistwin_shade_toggle);
- /* playlist list box */
- playlistwin_list = ui_skinned_playlist_new(SKINNED_WINDOW(playlistwin)->normal, 12, 20,
- playlistwin_get_width() - 31,
- config.playlist_height - 58, config.playlist_font);
+ playlistwin_close = button_new (9, 9, 167, 3, 52, 42, SKIN_PLEDIT, SKIN_PLEDIT);
+ window_put_widget (playlistwin, FALSE, playlistwin_close, w - 11, 3);
+ button_on_release (playlistwin_close, (ButtonCB) playlistwin_hide);
+
+ playlistwin_list = ui_skinned_playlist_new (w - 31, h - 58, config.playlist_font);
+ window_put_widget (playlistwin, FALSE, playlistwin_list, 12, 20);
/* playlist list box slider */
- playlistwin_slider = ui_skinned_playlist_slider_new(SKINNED_WINDOW(playlistwin)->normal, playlistwin_get_width() - 15,
- 20, config.playlist_height - 58, playlistwin_list);
+ playlistwin_slider = ui_skinned_playlist_slider_new (playlistwin_list, h - 58);
+ window_put_widget (playlistwin, FALSE, playlistwin_slider, w - 15, 20);
ui_skinned_playlist_set_slider (playlistwin_list, playlistwin_slider);
- /* track time (minute) */
- playlistwin_time_min = ui_skinned_textbox_new(SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 82,
- config.playlist_height - 15, 15, FALSE, SKIN_TEXT);
- g_signal_connect(playlistwin_time_min, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
+ playlistwin_time_min = textbox_new (15, "", NULL, FALSE);
+ window_put_widget (playlistwin, FALSE, playlistwin_time_min, w - 82, h - 15);
+
+ playlistwin_time_sec = textbox_new (10, "", NULL, FALSE);
+ window_put_widget (playlistwin, FALSE, playlistwin_time_sec, w - 64, h - 15);
- /* track time (second) */
- playlistwin_time_sec = ui_skinned_textbox_new(SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 64,
- config.playlist_height - 15, 10, FALSE, SKIN_TEXT);
+ g_signal_connect(playlistwin_time_min, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
g_signal_connect(playlistwin_time_sec, "button-press-event", G_CALLBACK(change_timer_mode_cb), NULL);
- /* playlist information (current track length / total track length) */
- playlistwin_info = ui_skinned_textbox_new(SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 143,
- config.playlist_height - 28, 90, FALSE, SKIN_TEXT);
+ playlistwin_info = textbox_new (90, "", NULL, FALSE);
+ window_put_widget (playlistwin, FALSE, playlistwin_info, w - 143, h - 28);
/* mini play control buttons at right bottom corner */
- /* rewind button */
- playlistwin_srew = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_srew, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 144,
- config.playlist_height - 16, 8, 7);
- g_signal_connect(playlistwin_srew, "clicked", local_playlist_prev, NULL);
-
- /* play button */
- playlistwin_splay = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_splay, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 138,
- config.playlist_height - 16, 10, 7);
- g_signal_connect(playlistwin_splay, "clicked", mainwin_play_pushed, NULL);
-
- /* pause button */
- playlistwin_spause = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_spause, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 128,
- config.playlist_height - 16, 10, 7);
- g_signal_connect(playlistwin_spause, "clicked", aud_drct_pause, NULL);
-
- /* stop button */
- playlistwin_sstop = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_sstop, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 118,
- config.playlist_height - 16, 9, 7);
- g_signal_connect(playlistwin_sstop, "clicked", mainwin_stop_pushed, NULL);
-
- /* forward button */
- playlistwin_sfwd = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_sfwd, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 109,
- config.playlist_height - 16, 8, 7);
- g_signal_connect(playlistwin_sfwd, "clicked", local_playlist_next, NULL);
-
- /* eject button */
- playlistwin_seject = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_seject, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 100,
- config.playlist_height - 16, 9, 7);
- g_signal_connect(playlistwin_seject, "clicked", mainwin_eject_pushed, NULL);
-
- playlistwin_sscroll_up = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_sscroll_up, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 14,
- config.playlist_height - 35, 8, 5);
- g_signal_connect(playlistwin_sscroll_up, "clicked", playlistwin_scroll_up_pushed, NULL);
-
- playlistwin_sscroll_down = ui_skinned_button_new();
- ui_skinned_small_button_setup(playlistwin_sscroll_down, SKINNED_WINDOW(playlistwin)->normal,
- playlistwin_get_width() - 14,
- config.playlist_height - 30, 8, 5);
- g_signal_connect(playlistwin_sscroll_down, "clicked", playlistwin_scroll_down_pushed, NULL);
-
- ui_playlist_evlistener_init();
-}
+ playlistwin_srew = button_new_small (8, 7);
+ window_put_widget (playlistwin, FALSE, playlistwin_srew, w - 144, h - 16);
+ button_on_release (playlistwin_srew, (ButtonCB) aud_drct_pl_prev);
-static void
-selection_received(GtkWidget * widget,
- GtkSelectionData * selection_data, gpointer data)
-{
- if (selection_data->type == GDK_SELECTION_TYPE_STRING &&
- selection_data->length > 0)
- aud_playlist_entry_insert (active_playlist, -1, g_strdup ((gchar *)
- selection_data->data), NULL);
+ playlistwin_splay = button_new_small (10, 7);
+ window_put_widget (playlistwin, FALSE, playlistwin_splay, w - 138, h - 16);
+ button_on_release (playlistwin_splay, (ButtonCB) mainwin_play_pushed);
+
+ playlistwin_spause = button_new_small (10, 7);
+ window_put_widget (playlistwin, FALSE, playlistwin_spause, w - 128, h - 16);
+ button_on_release (playlistwin_spause, (ButtonCB) aud_drct_pause);
+
+ playlistwin_sstop = button_new_small (9, 7);
+ window_put_widget (playlistwin, FALSE, playlistwin_sstop, w - 118, h - 16);
+ button_on_release (playlistwin_sstop, (ButtonCB) aud_drct_stop);
+
+ playlistwin_sfwd = button_new_small (8, 7);
+ window_put_widget (playlistwin, FALSE, playlistwin_sfwd, w - 109, h - 16);
+ button_on_release (playlistwin_sfwd, (ButtonCB) aud_drct_pl_next);
+
+ playlistwin_seject = button_new_small (9, 7);
+ window_put_widget (playlistwin, FALSE, playlistwin_seject, w - 100, h - 16);
+ button_on_release (playlistwin_seject, (ButtonCB) action_play_file);
+
+ playlistwin_sscroll_up = button_new_small (8, 5);
+ window_put_widget (playlistwin, FALSE, playlistwin_sscroll_up, w - 14, h - 35);
+ button_on_release (playlistwin_sscroll_up, (ButtonCB) playlistwin_scroll_up_pushed);
+
+ playlistwin_sscroll_down = button_new_small (8, 5);
+ window_put_widget (playlistwin, FALSE, playlistwin_sscroll_down, w - 14, h - 30);
+ button_on_release (playlistwin_sscroll_down, (ButtonCB) playlistwin_scroll_down_pushed);
+
+ /* resize handles */
+
+ resize_handle = drag_handle_new (20, 20, resize_press, resize_drag);
+ window_put_widget (playlistwin, FALSE, resize_handle, w - 20, h - 20);
+
+ sresize_handle = drag_handle_new (9, PLAYLISTWIN_SHADED_HEIGHT, resize_press, resize_drag);
+ window_put_widget (playlistwin, TRUE, sresize_handle, w - 31, 0);
+
+ /* lower button row */
+
+ button_add = button_new_small (25, 18);
+ window_put_widget (playlistwin, FALSE, button_add, 12, h - 29);
+ button_on_press (button_add, button_add_cb);
+
+ button_sub = button_new_small (25, 18);
+ window_put_widget (playlistwin, FALSE, button_sub, 40, h - 29);
+ button_on_press (button_sub, button_sub_cb);
+
+ button_sel = button_new_small (25, 18);
+ window_put_widget (playlistwin, FALSE, button_sel, 68, h - 29);
+ button_on_press (button_sel, button_sel_cb);
+
+ button_misc = button_new_small (25, 18);
+ window_put_widget (playlistwin, FALSE, button_misc, 100, h - 29);
+ button_on_press (button_misc, button_misc_cb);
+
+ button_list = button_new_small (23, 18);
+ window_put_widget (playlistwin, FALSE, button_list, w - 46, h - 29);
+ button_on_press (button_list, button_list_cb);
}
-static void size_allocate (GtkWidget * widget, GtkAllocation * allocation)
+static void pl_win_draw (GtkWidget * window, cairo_t * cr)
{
- playlistwin_resize (allocation->width, allocation->height);
+ if (config.playlist_shaded)
+ skin_draw_playlistwin_shaded (cr, config.playlist_width, TRUE);
+ else
+ skin_draw_playlistwin_frame (cr, config.playlist_width,
+ config.playlist_height, TRUE);
}
static void
@@ -1142,14 +758,11 @@ playlistwin_create_window(void)
{
GdkPixbuf *icon;
- playlistwin = ui_skinned_window_new("playlist", &config.playlist_x, &config.playlist_y);
+ playlistwin = window_new (& config.playlist_x, & config.playlist_y,
+ config.playlist_width, config.playlist_shaded ? PLAYLISTWIN_SHADED_HEIGHT :
+ config.playlist_height, FALSE, config.playlist_shaded, pl_win_draw);
+
gtk_window_set_title(GTK_WINDOW(playlistwin), _("Audacious Playlist Editor"));
- gtk_window_set_role(GTK_WINDOW(playlistwin), "playlist");
- gtk_window_set_default_size(GTK_WINDOW(playlistwin),
- playlistwin_get_width(),
- playlistwin_get_height());
- gtk_window_set_resizable(GTK_WINDOW(playlistwin), TRUE);
- playlistwin_set_geometry_hints(config.playlist_shaded);
gtk_window_set_transient_for(GTK_WINDOW(playlistwin),
GTK_WINDOW(mainwin));
@@ -1168,14 +781,10 @@ playlistwin_create_window(void)
G_CALLBACK(playlistwin_delete), NULL);
g_signal_connect(playlistwin, "button_press_event",
G_CALLBACK(playlistwin_press), NULL);
- g_signal_connect(playlistwin, "button_release_event",
- G_CALLBACK(playlistwin_release), NULL);
g_signal_connect(playlistwin, "scroll_event",
G_CALLBACK(playlistwin_scrolled), NULL);
- g_signal_connect(playlistwin, "motion_notify_event",
- G_CALLBACK(playlistwin_motion), NULL);
- aud_drag_dest_set(playlistwin);
+ drag_dest_set(playlistwin);
drop_position = -1;
g_signal_connect ((GObject *) playlistwin, "drag-motion", (GCallback)
@@ -1189,11 +798,6 @@ playlistwin_create_window(void)
g_signal_connect ((GObject *) playlistwin, "key-press-event", (GCallback)
mainwin_keypress, 0);
- g_signal_connect(playlistwin, "selection_received",
- G_CALLBACK(selection_received), NULL);
-
- g_signal_connect (playlistwin, "size-allocate", G_CALLBACK (size_allocate),
- 0);
}
static void get_title (void)
@@ -1203,9 +807,12 @@ static void get_title (void)
g_free (active_title);
if (playlists > 1)
- active_title = g_strdup_printf (_("%s (%d of %d)"),
- aud_playlist_get_title (active_playlist), 1 + active_playlist,
- playlists);
+ {
+ gchar * title = aud_playlist_get_title (active_playlist);
+ active_title = g_strdup_printf (_("%s (%d of %d)"), title, 1 +
+ active_playlist, playlists);
+ str_unref (title);
+ }
else
active_title = NULL;
}
@@ -1226,7 +833,8 @@ static void update_cb (void * unused, void * another)
if (song_changed)
{
- ui_skinned_playlist_follow (playlistwin_list);
+ ui_skinned_playlist_set_focused (playlistwin_list,
+ aud_playlist_get_position (active_playlist));
song_changed = FALSE;
}
@@ -1235,8 +843,14 @@ static void update_cb (void * unused, void * another)
static void follow_cb (void * data, void * another)
{
- /* active_playlist may be out of date at this point */
- if (GPOINTER_TO_INT (data) == aud_playlist_get_active ())
+ gint list = GPOINTER_TO_INT (data);
+ aud_playlist_select_all (list, FALSE);
+
+ gint row = aud_playlist_get_position (list);
+ if (row >= 0)
+ aud_playlist_entry_set_selected (list, row, TRUE);
+
+ if (list == active_playlist)
song_changed = TRUE;
}
@@ -1252,47 +866,42 @@ playlistwin_create(void)
playlistwin_create_window();
playlistwin_create_widgets();
-
- gtk_widget_show_all (((SkinnedWindow *) playlistwin)->normal);
- gtk_widget_show_all (((SkinnedWindow *) playlistwin)->shaded);
+ window_show_all (playlistwin);
gtk_window_add_accel_group(GTK_WINDOW(playlistwin), ui_manager_get_accel_group());
- /* calls playlistwin_update */
- ui_skinned_playlist_follow (playlistwin_list);
+ aud_playlist_select_all (active_playlist, FALSE);
+
+ gint row = aud_playlist_get_position (active_playlist);
+ if (row >= 0)
+ aud_playlist_entry_set_selected (active_playlist, row, TRUE);
+
+ ui_skinned_playlist_set_focused (playlistwin_list, row);
+
song_changed = FALSE;
- hook_associate ("playlist position", follow_cb, 0);
- hook_associate ("playlist update", update_cb, 0);
+ hook_associate ("playlist position", follow_cb, NULL);
+ hook_associate ("playlist activate", update_cb, NULL);
+ hook_associate ("playlist update", update_cb, NULL);
}
void playlistwin_unhook (void)
{
hook_dissociate ("playlist position", follow_cb);
+ hook_dissociate ("playlist activate", update_cb);
hook_dissociate ("playlist update", update_cb);
- ui_playlist_evlistener_dissociate ();
g_free (active_title);
active_title = NULL;
g_mutex_free (resize_mutex);
resize_mutex = NULL;
}
-static void playlistwin_real_show (void)
+static void playlistwin_real_show (gboolean show)
{
- ui_skinned_button_set_inside(mainwin_pl, TRUE);
- gtk_window_present(GTK_WINDOW(playlistwin));
-}
-
-static void playlistwin_real_hide (void)
-{
- gtk_widget_hide(playlistwin);
- ui_skinned_button_set_inside(mainwin_pl, FALSE);
-
- if ( config.player_visible )
- {
- gtk_window_present(GTK_WINDOW(mainwin));
- gtk_widget_grab_focus(mainwin);
- }
+ if (show)
+ gtk_window_present ((GtkWindow *) playlistwin);
+ else
+ gtk_widget_hide (playlistwin);
}
void playlistwin_show (char show)
@@ -1305,17 +914,10 @@ void playlistwin_show (char show)
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (a), show);
else
{
- if (show != config.playlist_visible) {
- config.playlist_visible = show;
- config.playlist_visible_prev = !show;
- aud_cfg->playlist_visible = show;
- }
-
- if (show)
- playlistwin_real_show ();
- else
- playlistwin_real_hide ();
- }
+ config.playlist_visible = show;
+ button_set_active (mainwin_pl, show);
+ playlistwin_real_show (config.player_visible && show);
+ }
}
void action_playlist_track_info(void)
@@ -1518,12 +1120,14 @@ void action_playlist_new (void)
void action_playlist_prev (void)
{
- aud_playlist_set_active (active_playlist - 1);
+ if (active_playlist > 0)
+ aud_playlist_set_active (active_playlist - 1);
}
void action_playlist_next (void)
{
- aud_playlist_set_active (active_playlist + 1);
+ if (active_playlist + 1 < aud_playlist_count ())
+ aud_playlist_set_active (active_playlist + 1);
}
void action_playlist_delete (void)
@@ -1531,23 +1135,6 @@ void action_playlist_delete (void)
audgui_confirm_playlist_delete (active_playlist);
}
-void action_playlist_save_list (void)
-{
- playlistwin_select_playlist_to_save (aud_playlist_get_filename
- (active_playlist));
-}
-
-void action_playlist_save_all_playlists (void)
-{
- aud_save_playlists ();
-}
-
-void action_playlist_load_list (void)
-{
- playlistwin_select_playlist_to_load (aud_playlist_get_filename
- (active_playlist));
-}
-
void
action_playlist_refresh_list(void)
{
@@ -1555,12 +1142,6 @@ action_playlist_refresh_list(void)
}
void
-action_open_list_manager(void)
-{
- audgui_playlist_manager_ui_show(mainwin);
-}
-
-void
action_playlist_search_and_select(void)
{
playlistwin_select_search();
@@ -1600,14 +1181,22 @@ playlistwin_select_search_kp_cb(GtkWidget *entry, GdkEventKey *event,
switch (event->keyval)
{
case GDK_Return:
- if (gtk_im_context_filter_keypress (GTK_ENTRY (entry)->im_context, event)) {
- GTK_ENTRY (entry)->need_im_reset = TRUE;
- return TRUE;
- } else {
- gtk_dialog_response(GTK_DIALOG(searchdlg_win), GTK_RESPONSE_ACCEPT);
- return TRUE;
- }
+ gtk_dialog_response(GTK_DIALOG(searchdlg_win), GTK_RESPONSE_ACCEPT);
+ return TRUE;
default:
return FALSE;
}
}
+
+void action_show_playlist_editor (GtkToggleAction * action)
+{
+ playlistwin_show (gtk_toggle_action_get_active (action));
+}
+
+void action_roll_up_playlist_editor (GtkToggleAction * action)
+{
+ config.playlist_shaded = gtk_toggle_action_get_active (action);
+ window_set_shaded (playlistwin, config.playlist_shaded);
+ window_set_size (playlistwin, config.playlist_width, config.playlist_shaded
+ ? PLAYLISTWIN_SHADED_HEIGHT : config.playlist_height);
+}
diff --git a/src/skins/ui_playlist.h b/src/skins/ui_playlist.h
index 4c75787..6556c77 100644
--- a/src/skins/ui_playlist.h
+++ b/src/skins/ui_playlist.h
@@ -20,58 +20,21 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_PLAYLIST_H
-#define AUDACIOUS_UI_PLAYLIST_H
+#ifndef SKINS_UI_PLAYLIST_H
+#define SKINS_UI_PLAYLIST_H
-#include <glib.h>
+#include <gtk/gtk.h>
-#include "ui_main.h"
-#include <audacious/plugin.h>
-#include "skins_cfg.h"
-
-#define PLAYLISTWIN_FRAME_TOP_HEIGHT 20
-#define PLAYLISTWIN_FRAME_BOTTOM_HEIGHT 38
-#define PLAYLISTWIN_FRAME_LEFT_WIDTH 12
-#define PLAYLISTWIN_FRAME_RIGHT_WIDTH 19
-
-#define PLAYLISTWIN_MIN_WIDTH MAINWIN_WIDTH
-#define PLAYLISTWIN_MIN_HEIGHT MAINWIN_HEIGHT
-#define PLAYLISTWIN_WIDTH_SNAP 25
-#define PLAYLISTWIN_HEIGHT_SNAP 29
-#define PLAYLISTWIN_SHADED_HEIGHT MAINWIN_SHADED_HEIGHT
-#define PLAYLISTWIN_WIDTH config.playlist_width
-#define PLAYLISTWIN_HEIGHT \
- (config.playlist_shaded ? PLAYLISTWIN_SHADED_HEIGHT : config.playlist_height)
-
-#define PLAYLISTWIN_DEFAULT_WIDTH 275
-#define PLAYLISTWIN_DEFAULT_HEIGHT 232
-#define PLAYLISTWIN_DEFAULT_POS_X 295
-#define PLAYLISTWIN_DEFAULT_POS_Y 20
-
-#define PLAYLISTWIN_DEFAULT_FONT "Sans Bold 8"
-
-gboolean playlistwin_is_shaded(void);
-gint playlistwin_get_width(void);
-gint playlistwin_get_height(void);
void playlistwin_update (void);
-void playlistwin_set_toprow(gint top);
-void playlistwin_set_shade_menu_cb(gboolean shaded);
-void playlistwin_set_shade(gboolean shaded);
-void playlistwin_shade_toggle(void);
void playlistwin_create(void);
void playlistwin_unhook (void);
void playlistwin_hide_timer(void);
void playlistwin_set_time (const gchar * minutes, const gchar * seconds);
void playlistwin_show (char show);
-void playlistwin_select_playlist_to_load(const gchar * default_filename);
-void playlistwin_set_sinfo_font(gchar *font);
-void playlistwin_set_sinfo_scroll(gboolean scroll);
-gint playlistwin_list_get_visible_count(void);
-gint playlistwin_list_get_first(void);
extern gint active_playlist;
extern gchar * active_title;
extern glong active_length;
-extern GtkWidget * playlistwin, * playlistwin_list;
+extern GtkWidget * playlistwin, * playlistwin_list, * playlistwin_sinfo;
-#endif /* AUDACIOUS_UI_PLAYLIST_H */
+#endif /* SKINS_UI_PLAYLIST_H */
diff --git a/src/skins/ui_playlist_evlisteners.c b/src/skins/ui_playlist_evlisteners.c
deleted file mode 100644
index 6d0cb08..0000000
--- a/src/skins/ui_playlist_evlisteners.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Audacious
- * Copyright (c) 2006-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#include <glib.h>
-#include <libaudcore/hook.h>
-
-#include "ui_playlist.h"
-#include "ui_playlist_evlisteners.h"
-
-static void
-ui_playlist_evlistener_playlistwin_show(gpointer hook_data, gpointer user_data)
-{
- gboolean *show = (gboolean*)hook_data;
- playlistwin_show (* show);
-}
-
-void ui_playlist_evlistener_init(void)
-{
- hook_associate("playlistwin show", ui_playlist_evlistener_playlistwin_show, NULL);
-}
-
-void ui_playlist_evlistener_dissociate(void)
-{
- hook_dissociate("playlistwin show", ui_playlist_evlistener_playlistwin_show);
-}
diff --git a/src/skins/ui_playlist_evlisteners.h b/src/skins/ui_playlist_evlisteners.h
deleted file mode 100644
index 903d0fd..0000000
--- a/src/skins/ui_playlist_evlisteners.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Audacious
- * Copyright (c) 2006-2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef AUDACIOUS_UI_PLAYLIST_EVLISTENERS_H
-#define AUDACIOUS_UI_PLAYLIST_EVLISTENERS_H
-
-void ui_playlist_evlistener_init(void);
-void ui_playlist_evlistener_dissociate(void);
-
-#endif /* AUDACIOUS_UI_PLAYLIST_EVLISTENERS_H */
diff --git a/src/skins/ui_skin.c b/src/skins/ui_skin.c
index bdc8480..beda0d5 100644
--- a/src/skins/ui_skin.c
+++ b/src/skins/ui_skin.c
@@ -1,5 +1,5 @@
/* Audacious
- * Copyright (C) 2005-2007 Audacious development team.
+ * Copyright (C) 2005-2011 Audacious development team.
*
* BMP - Cross-platform multimedia player
* Copyright (C) 2003-2004 BMP development team.
@@ -23,39 +23,32 @@
* Audacious or using our public API to be a derived work.
*/
-/*#define AUD_DEBUG*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* TODO: enforce default sizes! */
-
-#include <glib.h>
-#include <limits.h>
-#include <stdio.h>
+#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <ctype.h>
+#include <sys/stat.h>
+
+#include <gtk/gtk.h>
#include <audacious/debug.h>
-#include <audacious/plugin.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
#include "plugin.h"
-#include "ui_skin.h"
-#include "util.h"
-#include "ui_main.h"
+#include "skins_cfg.h"
+#include "surface.h"
#include "ui_equalizer.h"
+#include "ui_hints.h"
+#include "ui_main.h"
#include "ui_playlist.h"
-#include "ui_skinselector.h"
-#include "debug.h"
-
-#include "platform/smartinclude.h"
-
-#include "ui_skinned_window.h"
-#include "ui_skinned_button.h"
+#include "ui_skin.h"
#include "ui_skinned_number.h"
-#include "ui_skinned_horizontal_slider.h"
#include "ui_skinned_playstatus.h"
+#include "ui_skinned_textbox.h"
+#include "ui_skinned_window.h"
+#include "ui_skinselector.h"
+#include "ui_vis.h"
+#include "util.h"
#define EXTENSION_TARGETS 7
@@ -73,20 +66,14 @@ struct _SkinMaskInfo {
gint width, height;
gchar *inistr;
};
-/* I know, it's not nice to copy'n'paste stuff, but I wanted it to
- be atleast parially working, before dealing with such things */
-
-typedef struct {
- const gchar *to_match;
- gchar *match;
- gboolean found;
-} FindFileContext;
typedef struct _SkinPixmapIdMapping SkinPixmapIdMapping;
typedef struct _SkinMaskInfo SkinMaskInfo;
+static gboolean skin_load (Skin * skin, const gchar * path);
+static void skin_parse_hints (Skin * skin, const gchar * path_p);
-Skin *aud_active_skin = NULL;
+Skin *active_skin = NULL;
static gint skin_current_num;
@@ -116,102 +103,75 @@ static SkinPixmapIdMapping skin_pixmap_id_map[] = {
static guint skin_pixmap_id_map_size = G_N_ELEMENTS(skin_pixmap_id_map);
-static const guchar skin_default_viscolor[24][3] = {
- {9, 34, 53},
- {10, 18, 26},
- {0, 54, 108},
- {0, 58, 116},
- {0, 62, 124},
- {0, 66, 132},
- {0, 70, 140},
- {0, 74, 148},
- {0, 78, 156},
- {0, 82, 164},
- {0, 86, 172},
- {0, 92, 184},
- {0, 98, 196},
- {0, 104, 208},
- {0, 110, 220},
- {0, 116, 232},
- {0, 122, 244},
- {0, 128, 255},
- {0, 128, 255},
- {0, 104, 208},
- {0, 80, 160},
- {0, 56, 112},
- {0, 32, 64},
- {200, 200, 200}
+static const guint32 default_vis_colors[24] = {
+ COLOR (9, 34, 53),
+ COLOR (10, 18, 26),
+ COLOR (0, 54, 108),
+ COLOR (0, 58, 116),
+ COLOR (0, 62, 124),
+ COLOR (0, 66, 132),
+ COLOR (0, 70, 140),
+ COLOR (0, 74, 148),
+ COLOR (0, 78, 156),
+ COLOR (0, 82, 164),
+ COLOR (0, 86, 172),
+ COLOR (0, 92, 184),
+ COLOR (0, 98, 196),
+ COLOR (0, 104, 208),
+ COLOR (0, 110, 220),
+ COLOR (0, 116, 232),
+ COLOR (0, 122, 244),
+ COLOR (0, 128, 255),
+ COLOR (0, 128, 255),
+ COLOR (0, 104, 208),
+ COLOR (0, 80, 160),
+ COLOR (0, 56, 112),
+ COLOR (0, 32, 64),
+ COLOR (200, 200, 200)
};
-static gchar *original_gtk_theme = NULL;
-
-static GdkBitmap *skin_create_transparent_mask(const gchar *,
- const gchar *,
- const gchar *,
- GdkWindow *,
- gint, gint, gboolean);
-
-static void skin_set_default_vis_color(Skin * skin);
-
-void
-skin_lock(Skin * skin)
-{
- g_mutex_lock(skin->lock);
-}
-
-void
-skin_unlock(Skin * skin)
-{
- g_mutex_unlock(skin->lock);
-}
-
-gboolean
-aud_active_skin_reload(void)
-{
- AUDDBG("\n");
- return aud_active_skin_load(aud_active_skin->path);
-}
+#ifdef MASK_IS_REGION
+static cairo_region_t * skin_create_transparent_mask (const gchar * path, const
+ gchar * file, const gchar * section, GdkWindow * window, gint width, gint
+ height);
+#else
+static GdkBitmap * skin_create_transparent_mask (const gchar * path, const
+ gchar * file, const gchar * section, GdkWindow * window, gint width, gint
+ height);
+#endif
-gboolean
-aud_active_skin_load(const gchar * path)
+gboolean active_skin_load (const gchar * path)
{
AUDDBG("%s\n", path);
- g_return_val_if_fail(aud_active_skin != NULL, FALSE);
+ g_return_val_if_fail(active_skin != NULL, FALSE);
- if (!skin_load(aud_active_skin, path)) {
+ if (!skin_load(active_skin, path)) {
AUDDBG("loading failed\n");
return FALSE;
}
mainwin_refresh_hints ();
+ textbox_update_all ();
ui_vis_set_colors ();
- ui_skinned_window_draw_all(mainwin);
- ui_skinned_window_draw_all(equalizerwin);
- ui_skinned_window_draw_all(playlistwin);
-
- SkinPixmap *pixmap;
- pixmap = &aud_active_skin->pixmaps[SKIN_POSBAR];
- /* last 59 pixels of SKIN_POSBAR are knobs (normal and selected) */
- gtk_widget_set_size_request(mainwin_position, pixmap->width - 59, pixmap->height);
+ gtk_widget_queue_draw (mainwin);
+ gtk_widget_queue_draw (equalizerwin);
+ gtk_widget_queue_draw (playlistwin);
- return TRUE;
-}
-
-static void skin_pixmap_free (SkinPixmap * pixmap)
-{
- if (pixmap->pixbuf != NULL)
+ /* path may in fact be the same string as config.skin */
+ if (! config.skin || strcmp (path, config.skin))
{
- g_object_unref (pixmap->pixbuf);
- pixmap->pixbuf = NULL;
+ g_free (config.skin);
+ config.skin = g_strdup (path);
}
+
+ return TRUE;
}
-Skin *
+static Skin *
skin_new(void)
{
Skin *skin;
skin = g_new0(Skin, 1);
- skin->lock = g_mutex_new();
return skin;
}
@@ -221,7 +181,7 @@ skin_new(void)
* Does not free skin itself or lock variable so that the skin can immediately
* populated with new skin data if needed.
*/
-void
+static void
skin_free(Skin * skin)
{
gint i;
@@ -229,49 +189,38 @@ skin_free(Skin * skin)
g_return_if_fail(skin != NULL);
for (i = 0; i < SKIN_PIXMAP_COUNT; i++)
- skin_pixmap_free(&skin->pixmaps[i]);
+ {
+ if (skin->pixmaps[i])
+ {
+ cairo_surface_destroy (skin->pixmaps[i]);
+ skin->pixmaps[i] = NULL;
+ }
+ }
for (i = 0; i < SKIN_MASK_COUNT; i++) {
if (skin->masks[i])
- g_object_unref(skin->masks[i]);
- if (skin->scaled_masks[i])
- g_object_unref(skin->scaled_masks[i]);
+#ifdef MASK_IS_REGION
+ cairo_region_destroy (skin->masks[i]);
+#else
+ g_object_unref (skin->masks[i]);
+#endif
skin->masks[i] = NULL;
- skin->scaled_masks[i] = NULL;
- }
-
- for (i = 0; i < SKIN_COLOR_COUNT; i++) {
- if (skin->colors[i])
- g_free(skin->colors[i]);
-
- skin->colors[i] = NULL;
}
g_free(skin->path);
skin->path = NULL;
-
- skin_set_default_vis_color(skin);
-
- if (original_gtk_theme != NULL)
- {
- gtk_settings_set_string_property (gtk_settings_get_default (),
- "gtk-theme-name", original_gtk_theme, "audacious");
- g_free (original_gtk_theme);
- original_gtk_theme = NULL;
- }
}
-void
+static void
skin_destroy(Skin * skin)
{
g_return_if_fail(skin != NULL);
skin_free(skin);
- g_mutex_free(skin->lock);
g_free(skin);
}
-const SkinPixmapIdMapping *
+static const SkinPixmapIdMapping *
skin_pixmap_id_lookup(guint id)
{
guint i;
@@ -285,26 +234,7 @@ skin_pixmap_id_lookup(guint id)
return NULL;
}
-const gchar *
-skin_pixmap_id_to_name(SkinPixmapId id)
-{
- guint i;
-
- for (i = 0; i < skin_pixmap_id_map_size; i++) {
- if (id == skin_pixmap_id_map[i].id)
- return skin_pixmap_id_map[i].name;
- }
- return NULL;
-}
-
-static void
-skin_set_default_vis_color(Skin * skin)
-{
- memcpy(skin->vis_color, skin_default_viscolor,
- sizeof(skin_default_viscolor));
-}
-
-gchar * skin_pixmap_locate (const gchar * dirname, gchar * * basenames)
+static gchar * skin_pixmap_locate (const gchar * dirname, gchar * * basenames)
{
gchar * filename = NULL;
gint i;
@@ -386,10 +316,10 @@ skin_load_pixmap_id(Skin * skin, SkinPixmapId id, const gchar * path_p)
{
const SkinPixmapIdMapping *pixmap_id_mapping;
gchar *filename;
- SkinPixmap *pm = NULL;
g_return_val_if_fail(skin != NULL, FALSE);
g_return_val_if_fail(id < SKIN_PIXMAP_COUNT, FALSE);
+ g_return_val_if_fail(! skin->pixmaps[id], FALSE);
pixmap_id_mapping = skin_pixmap_id_lookup(id);
g_return_val_if_fail(pixmap_id_mapping != NULL, FALSE);
@@ -399,55 +329,28 @@ skin_load_pixmap_id(Skin * skin, SkinPixmapId id, const gchar * path_p)
if (filename == NULL)
return FALSE;
- AUDDBG("loaded %s\n", filename);
+ skin->pixmaps[id] = surface_new_from_file (filename);
- pm = &skin->pixmaps[id];
- GdkPixbuf *pix = gdk_pixbuf_new_from_file(filename, NULL);
-
- if (pix == NULL)
- return FALSE;
-
- if (config.colorize_r == 255 && config.colorize_g == 255 &&
- config.colorize_b == 255)
- pm->pixbuf = pix;
- else
- {
- pm->pixbuf = audacious_create_colorized_pixbuf(pix, config.colorize_r,
- config.colorize_g, config.colorize_b);
- g_object_unref(pix);
- }
-
- pm->width = gdk_pixbuf_get_width(pm->pixbuf);
- pm->height = gdk_pixbuf_get_height(pm->pixbuf);
- pm->current_width = pm->width;
- pm->current_height = pm->height;
-
- g_free(filename);
-
- return TRUE;
+ g_free (filename);
+ return skin->pixmaps[id] ? TRUE : FALSE;
}
-void
-skin_mask_create(Skin * skin,
- const gchar * path,
- gint id,
- GdkWindow * window)
+static void skin_mask_create (Skin * skin, const gchar * path, gint id,
+ GdkWindow * window)
{
- skin->masks[id] =
- skin_create_transparent_mask(path, "region.txt",
- skin_mask_info[id].inistr, window,
- skin_mask_info[id].width,
- skin_mask_info[id].height, FALSE);
-
- skin->scaled_masks[id] =
- skin_create_transparent_mask(path, "region.txt",
- skin_mask_info[id].inistr, window,
- skin_mask_info[id].width * 2,
- skin_mask_info[id].height * 2, TRUE);
+ skin->masks[id] = skin_create_transparent_mask (path, "region.txt",
+ skin_mask_info[id].inistr, window, skin_mask_info[id].width,
+ skin_mask_info[id].height);
}
-static GdkBitmap *
-create_default_mask(GdkWindow * parent, gint w, gint h)
+#ifdef MASK_IS_REGION
+static cairo_region_t * create_default_mask (GdkWindow * parent, gint w, gint h)
+{
+ cairo_rectangle_int_t rect = {0, 0, w, h};
+ return cairo_region_create_rectangle (& rect);
+}
+#else
+static GdkBitmap * create_default_mask (GdkWindow * parent, gint w, gint h)
{
GdkBitmap *ret;
GdkGC *gc;
@@ -462,81 +365,46 @@ create_default_mask(GdkWindow * parent, gint w, gint h)
return ret;
}
-
-static void
-skin_query_color(GdkColormap * cm, GdkColor * c)
-{
-#ifdef GDK_WINDOWING_X11
- XColor xc = { 0,0,0,0,0,0 };
-
- xc.pixel = c->pixel;
- XQueryColor(GDK_COLORMAP_XDISPLAY(cm), GDK_COLORMAP_XCOLORMAP(cm), &xc);
- c->red = xc.red;
- c->green = xc.green;
- c->blue = xc.blue;
-#else
- /* do nothing. see what breaks? */
#endif
-}
-static glong
-skin_calc_luminance(GdkColor * c)
+static gint color_diff (guint32 a, guint32 b)
{
- return (0.212671 * c->red + 0.715160 * c->green + 0.072169 * c->blue);
+ return abs (COLOR_R (a) - COLOR_R (b)) + abs (COLOR_G (a) - COLOR_G (b)) +
+ abs (COLOR_B (a) - COLOR_B (b));
}
-static void
-skin_get_textcolors(GdkPixbuf * pix, GdkColor * bgc, GdkColor * fgc)
+static void skin_get_textcolors (Skin * skin, cairo_surface_t * s)
{
/*
* Try to extract reasonable background and foreground colors
* from the font pixmap
*/
- GdkImage *gi;
- GdkColormap *cm;
- gint i;
-
- g_return_if_fail(pix != NULL);
-
- GdkPixmap *text = gdk_pixmap_new(NULL, gdk_pixbuf_get_width(pix), gdk_pixbuf_get_height(pix), gdk_rgb_get_visual()->depth);
- gdk_draw_pixbuf(text, NULL, pix, 0, 0, 0, 0, gdk_pixbuf_get_width(pix), gdk_pixbuf_get_height(pix),
- GDK_RGB_DITHER_NONE, 0, 0);
- /* Get the first line of text */
- gi = gdk_drawable_get_image(text, 0, 0, 152, 6);
- cm = gdk_colormap_get_system();
-
- for (i = 0; i < 6; i++) {
- GdkColor c;
- gint x;
- glong d, max_d;
+ /* Get a pixel from the middle of the space character */
+ skin->colors[SKIN_TEXTBG] = surface_get_pixel (s, 152, 3);
- /* Get a pixel from the middle of the space character */
- bgc[i].pixel = gdk_image_get_pixel(gi, 151, i);
- skin_query_color(cm, &bgc[i]);
-
- max_d = 0;
- for (x = 1; x < 150; x++) {
- c.pixel = gdk_image_get_pixel(gi, x, i);
- skin_query_color(cm, &c);
-
- d = labs(skin_calc_luminance(&c) - skin_calc_luminance(&bgc[i]));
- if (d > max_d) {
- memcpy(&fgc[i], &c, sizeof(GdkColor));
+ gint max_d = -1;
+ for (gint y = 0; y < 6; y ++)
+ {
+ for (gint x = 1; x < 150; x ++)
+ {
+ gint c = surface_get_pixel (s, x, y);
+ gint d = color_diff (skin->colors[SKIN_TEXTBG], c);
+ if (d > max_d)
+ {
+ skin->colors[SKIN_TEXTFG] = c;
max_d = d;
}
}
}
- g_object_unref(gi);
- g_object_unref(text);
}
gboolean
init_skins(const gchar * path)
{
- aud_active_skin = skin_new();
+ active_skin = skin_new();
- skin_parse_hints(aud_active_skin, NULL);
+ skin_parse_hints(active_skin, NULL);
/* create the windows if they haven't been created yet, needed for bootstrapping */
if (mainwin == NULL)
@@ -544,32 +412,39 @@ init_skins(const gchar * path)
mainwin_create();
equalizerwin_create();
playlistwin_create();
+
+ hint_set_sticky (config.sticky);
+ hint_set_always (config.always_on_top);
}
- if (!aud_active_skin_load(path)) {
+ if (! path || ! active_skin_load (path))
+ {
if (path != NULL)
AUDDBG("Unable to load skin (%s), trying default...\n", path);
else
AUDDBG("Skin not defined: trying default...\n");
/* can't load configured skin, retry with default */
- if (!aud_active_skin_load(BMP_DEFAULT_SKIN_PATH)) {
- AUDDBG("Unable to load default skin (%s)! Giving up.\n",
- BMP_DEFAULT_SKIN_PATH);
+ gchar * def = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "Skins"
+ G_DIR_SEPARATOR_S "Default", aud_get_path (AUD_PATH_DATA_DIR));
+
+ if (! active_skin_load (def))
+ {
+ AUDDBG ("Unable to load default skin (%s)! Giving up.\n", def);
+ g_free (def);
return FALSE;
}
- }
- if (config.random_skin_on_play)
- skinlist_update();
+ g_free (def);
+ }
return TRUE;
}
void cleanup_skins()
{
- skin_destroy(aud_active_skin);
- aud_active_skin = NULL;
+ skin_destroy(active_skin);
+ active_skin = NULL;
gtk_widget_destroy (mainwin);
mainwin = NULL;
@@ -585,18 +460,15 @@ void cleanup_skins()
* Hints files are somewhat like "scripts" in Winamp3/5.
* We'll probably add scripts to it next.
*/
-void
-skin_parse_hints(Skin * skin, gchar *path_p)
+static void skin_parse_hints (Skin * skin, const gchar * path_p)
{
- gchar *filename, *tmp;
+ gchar *filename;
INIFile *inifile;
path_p = path_p ? path_p : skin->path;
- skin->properties.mainwin_othertext = FALSE;
skin->properties.mainwin_vis_x = 24;
skin->properties.mainwin_vis_y = 43;
- skin->properties.mainwin_vis_width = 76;
skin->properties.mainwin_text_x = 112;
skin->properties.mainwin_text_y = 27;
skin->properties.mainwin_text_width = 153;
@@ -615,6 +487,7 @@ skin_parse_hints(Skin * skin, gchar *path_p)
skin->properties.mainwin_playstatus_x = 24;
skin->properties.mainwin_playstatus_y = 28;
skin->properties.mainwin_menurow_visible = TRUE;
+ skin->properties.mainwin_streaminfo_visible = TRUE;
skin->properties.mainwin_volume_x = 107;
skin->properties.mainwin_volume_y = 57;
skin->properties.mainwin_balance_x = 177;
@@ -622,7 +495,7 @@ skin_parse_hints(Skin * skin, gchar *path_p)
skin->properties.mainwin_position_x = 16;
skin->properties.mainwin_position_y = 72;
skin->properties.mainwin_othertext_is_status = FALSE;
- skin->properties.mainwin_othertext_visible = skin->properties.mainwin_othertext;
+ skin->properties.mainwin_othertext_visible = FALSE;
skin->properties.mainwin_text_visible = TRUE;
skin->properties.mainwin_vis_visible = TRUE;
skin->properties.mainwin_previous_x = 16;
@@ -672,521 +545,86 @@ skin_parse_hints(Skin * skin, gchar *path_p)
if (!inifile)
return;
- tmp = read_ini_string(inifile, "skin", "mainwinOthertext");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_othertext = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinVisX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_vis_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinVisY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_vis_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinVisWidth");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_vis_width = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinTextX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_text_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinTextY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_text_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinTextWidth");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_text_width = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinInfoBarX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_infobar_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinInfoBarY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_infobar_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber0X");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_0_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber0Y");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_0_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber1X");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_1_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber1Y");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_1_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber2X");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_2_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber2Y");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_2_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber3X");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_3_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber3Y");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_3_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber4X");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_4_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNumber4Y");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_number_4_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPlayStatusX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_playstatus_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPlayStatusY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_playstatus_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinMenurowVisible");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_menurow_visible = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinVolumeX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_volume_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinVolumeY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_volume_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinBalanceX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_balance_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinBalanceY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_balance_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPositionX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_position_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPositionY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_position_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinOthertextIsStatus");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_othertext_is_status = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinOthertextVisible");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_othertext_visible = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinTextVisible");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_text_visible = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinVisVisible");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_vis_visible = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPreviousX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_previous_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPreviousY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_previous_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPlayX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_play_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPlayY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_play_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPauseX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_pause_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPauseY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_pause_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinStopX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_stop_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinStopY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_stop_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNextX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_next_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinNextY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_next_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinEjectX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_eject_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinEjectY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_eject_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinWidth");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_width = atoi(tmp);
- g_free(tmp);
- }
-
- skin_mask_info[0].width = skin->properties.mainwin_width;
-
- tmp = read_ini_string(inifile, "skin", "mainwinHeight");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_height = atoi(tmp);
- g_free(tmp);
+ struct {
+ const gchar * name;
+ gint * value;
+ } pairs[] = {
+ {"mainwinVisX", & skin->properties.mainwin_vis_x},
+ {"mainwinVisY", & skin->properties.mainwin_vis_y},
+ {"mainwinTextX", & skin->properties.mainwin_text_x},
+ {"mainwinTextY", & skin->properties.mainwin_text_y},
+ {"mainwinTextWidth", & skin->properties.mainwin_text_width},
+ {"mainwinInfoBarX", & skin->properties.mainwin_infobar_x},
+ {"mainwinInfoBarY", & skin->properties.mainwin_infobar_y},
+ {"mainwinNumber0X", & skin->properties.mainwin_number_0_x},
+ {"mainwinNumber0Y", & skin->properties.mainwin_number_0_y},
+ {"mainwinNumber1X", & skin->properties.mainwin_number_1_x},
+ {"mainwinNumber1Y", & skin->properties.mainwin_number_1_y},
+ {"mainwinNumber2X", & skin->properties.mainwin_number_2_x},
+ {"mainwinNumber2Y", & skin->properties.mainwin_number_2_y},
+ {"mainwinNumber3X", & skin->properties.mainwin_number_3_x},
+ {"mainwinNumber3Y", & skin->properties.mainwin_number_3_y},
+ {"mainwinNumber4X", & skin->properties.mainwin_number_4_x},
+ {"mainwinNumber4Y", & skin->properties.mainwin_number_4_y},
+ {"mainwinPlayStatusX", & skin->properties.mainwin_playstatus_x},
+ {"mainwinPlayStatusY", & skin->properties.mainwin_playstatus_y},
+ {"mainwinMenurowVisible", & skin->properties.mainwin_menurow_visible},
+ {"mainwinStreaminfoVisible", & skin->properties.mainwin_streaminfo_visible},
+ {"mainwinVolumeX", & skin->properties.mainwin_volume_x},
+ {"mainwinVolumeY", & skin->properties.mainwin_volume_y},
+ {"mainwinBalanceX", & skin->properties.mainwin_balance_x},
+ {"mainwinBalanceY", & skin->properties.mainwin_balance_y},
+ {"mainwinPositionX", & skin->properties.mainwin_position_x},
+ {"mainwinPositionY", & skin->properties.mainwin_position_y},
+ {"mainwinOthertextIsStatus", & skin->properties.mainwin_othertext_is_status},
+ {"mainwinOthertextVisible", & skin->properties.mainwin_othertext_visible},
+ {"mainwinTextVisible", & skin->properties.mainwin_text_visible},
+ {"mainwinVisVisible", & skin->properties.mainwin_vis_visible},
+ {"mainwinPreviousX", & skin->properties.mainwin_previous_x},
+ {"mainwinPreviousY", & skin->properties.mainwin_previous_y},
+ {"mainwinPlayX", & skin->properties.mainwin_play_x},
+ {"mainwinPlayY", & skin->properties.mainwin_play_y},
+ {"mainwinPauseX", & skin->properties.mainwin_pause_x},
+ {"mainwinPauseY", & skin->properties.mainwin_pause_y},
+ {"mainwinStopX", & skin->properties.mainwin_stop_x},
+ {"mainwinStopY", & skin->properties.mainwin_stop_y},
+ {"mainwinNextX", & skin->properties.mainwin_next_x},
+ {"mainwinNextY", & skin->properties.mainwin_next_y},
+ {"mainwinEjectX", & skin->properties.mainwin_eject_x},
+ {"mainwinEjectY", & skin->properties.mainwin_eject_y},
+ {"mainwinWidth", & skin->properties.mainwin_width},
+ {"mainwinHeight", & skin->properties.mainwin_height},
+ {"mainwinAboutX", & skin->properties.mainwin_about_x},
+ {"mainwinAboutY", & skin->properties.mainwin_about_y},
+ {"mainwinShuffleX", & skin->properties.mainwin_shuffle_x},
+ {"mainwinShuffleY", & skin->properties.mainwin_shuffle_y},
+ {"mainwinRepeatX", & skin->properties.mainwin_repeat_x},
+ {"mainwinRepeatY", & skin->properties.mainwin_repeat_y},
+ {"mainwinEQButtonX", & skin->properties.mainwin_eqbutton_x},
+ {"mainwinEQButtonY", & skin->properties.mainwin_eqbutton_y},
+ {"mainwinPLButtonX", & skin->properties.mainwin_plbutton_x},
+ {"mainwinPLButtonY", & skin->properties.mainwin_plbutton_y},
+ {"textboxBitmapFontWidth", & skin->properties.textbox_bitmap_font_width},
+ {"textboxBitmapFontHeight", & skin->properties.textbox_bitmap_font_height},
+ {"mainwinMinimizeX", & skin->properties.mainwin_minimize_x},
+ {"mainwinMinimizeY", & skin->properties.mainwin_minimize_y},
+ {"mainwinShadeX", & skin->properties.mainwin_shade_x},
+ {"mainwinShadeY", & skin->properties.mainwin_shade_y},
+ {"mainwinCloseX", & skin->properties.mainwin_close_x},
+ {"mainwinCloseY", & skin->properties.mainwin_close_y}};
+
+ for (gint i = 0; i < G_N_ELEMENTS (pairs); i ++)
+ {
+ gchar * s = read_ini_string (inifile, "skin", pairs[i].name);
+ if (s)
+ {
+ * pairs[i].value = atoi (s);
+ g_free (s);
+ }
}
skin_mask_info[0].height = skin->properties.mainwin_height;
-
- tmp = read_ini_string(inifile, "skin", "mainwinAboutX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_about_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinAboutY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_about_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinShuffleX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_shuffle_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinShuffleY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_shuffle_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinRepeatX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_repeat_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinRepeatY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_repeat_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinEQButtonX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_eqbutton_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinEQButtonY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_eqbutton_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPLButtonX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_plbutton_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinPLButtonY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_plbutton_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "textboxBitmapFontWidth");
-
- if (tmp != NULL)
- {
- skin->properties.textbox_bitmap_font_width = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "textboxBitmapFontHeight");
-
- if (tmp != NULL)
- {
- skin->properties.textbox_bitmap_font_height = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinMinimizeX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_minimize_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinMinimizeY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_minimize_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinShadeX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_shade_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinShadeY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_shade_y = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinCloseX");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_close_x = atoi(tmp);
- g_free(tmp);
- }
-
- tmp = read_ini_string(inifile, "skin", "mainwinCloseY");
-
- if (tmp != NULL)
- {
- skin->properties.mainwin_close_y = atoi(tmp);
- g_free(tmp);
- }
+ skin_mask_info[0].width = skin->properties.mainwin_width;
if (filename != NULL)
g_free(filename);
@@ -1194,85 +632,69 @@ skin_parse_hints(Skin * skin, gchar *path_p)
close_ini_file(inifile);
}
-static guint
-hex_chars_to_int(gchar hi, gchar lo)
+static gint hex_chars_to_int (gchar hi, gchar lo)
{
/*
* Converts a value in the range 0x00-0xFF
- * to a integer in the range 0-65535
+ * to a integer in the range 0-255
*/
- gchar str[3];
-
- str[0] = hi;
- str[1] = lo;
- str[2] = 0;
-
- return (CLAMP(strtol(str, NULL, 16), 0, 0xFF) << 8);
+ gchar str[3] = {hi, lo, 0};
+ return strtol (str, NULL, 16);
}
-static GdkColor *
-skin_load_color(INIFile *inifile,
- const gchar * section, const gchar * key,
- gchar * default_hex)
+static guint32 skin_load_color (INIFile * inifile, const gchar * section,
+ const gchar * key, const gchar * default_hex)
{
- gchar *value;
- GdkColor *color = NULL;
-
- if (inifile || default_hex) {
- if (inifile) {
- value = read_ini_string(inifile, section, key);
- if (value == NULL) {
- value = g_strdup(default_hex);
- }
- } else {
- value = g_strdup(default_hex);
- }
- if (value) {
- gchar *ptr = value;
- gint len;
-
- color = g_new0(GdkColor, 1);
- g_strstrip(value);
-
- if (value[0] == '#')
- ptr++;
- len = strlen(ptr);
- /*
- * The handling of incomplete values is done this way
- * to maximize winamp compatibility
- */
- if (len >= 6) {
- color->red = hex_chars_to_int(*ptr, *(ptr + 1));
- ptr += 2;
- }
- if (len >= 4) {
- color->green = hex_chars_to_int(*ptr, *(ptr + 1));
- ptr += 2;
- }
- if (len >= 2)
- color->blue = hex_chars_to_int(*ptr, *(ptr + 1));
+ gchar * value = NULL;
- g_free(value);
- }
- }
- return color;
-}
+ if (inifile)
+ value = read_ini_string (inifile, section, key);
+ if (! value && default_hex)
+ value = g_strdup (default_hex);
+ if (! value)
+ return 0;
-GdkBitmap *
-skin_create_transparent_mask(const gchar * path,
- const gchar * file,
- const gchar * section,
- GdkWindow * window,
- gint width,
- gint height, gboolean scale)
-{
- GdkBitmap *mask = NULL;
- GdkGC *gc = NULL;
- GdkColor pattern;
- GdkPoint *gpoints;
+ g_strstrip (value);
+ gchar * ptr = value;
+ if (* ptr == '#')
+ ptr ++;
+
+ gint red = 0, green = 0, blue = 0;
+
+ /*
+ * The handling of incomplete values is done this way
+ * to maximize winamp compatibility
+ */
+ gint len = strlen (ptr);
+ if (len >= 6)
+ {
+ red = hex_chars_to_int (ptr[0], ptr[1]);
+ ptr += 2;
+ }
+ if (len >= 4)
+ {
+ green = hex_chars_to_int (ptr[0], ptr[1]);
+ ptr += 2;
+ }
+ if (len >= 2)
+ blue = hex_chars_to_int (ptr[0], ptr[1]);
+
+ g_free (value);
+ return COLOR (red, green, blue);
+}
+#ifdef MASK_IS_REGION
+static cairo_region_t * skin_create_transparent_mask (const gchar * path, const
+ gchar * file, const gchar * section, GdkWindow * window, gint width, gint
+ height)
+#else
+static GdkBitmap * skin_create_transparent_mask (const gchar * path, const
+ gchar * file, const gchar * section, GdkWindow * window, gint width, gint
+ height)
+#endif
+{
gchar *filename = NULL;
INIFile *inifile = NULL;
gboolean created_mask = FALSE;
@@ -1304,41 +726,74 @@ skin_create_transparent_mask(const gchar * path,
close_ini_file(inifile);
- mask = gdk_pixmap_new(window, width, height, 1);
- gc = gdk_gc_new(mask);
+#ifdef MASK_IS_REGION
+ cairo_region_t * mask = cairo_region_create ();
+#else
+ GdkBitmap * mask = gdk_pixmap_new (window, width, height, 1);
+ GdkGC * gc = gdk_gc_new (mask);
+ GdkColor pattern;
pattern.pixel = 0;
gdk_gc_set_foreground(gc, &pattern);
gdk_draw_rectangle(mask, gc, TRUE, 0, 0, width, height);
pattern.pixel = 1;
gdk_gc_set_foreground(gc, &pattern);
+#endif
j = 0;
- for (i = 0; i < num->len; i++) {
- if ((int)(point->len - j) >= (g_array_index(num, gint, i) * 2)) {
- created_mask = TRUE;
- gpoints = g_new(GdkPoint, g_array_index(num, gint, i));
- for (k = 0; k < g_array_index(num, gint, i); k++) {
- gpoints[k].x =
- g_array_index(point, gint, j + k * 2) * (scale ? config.scale_factor : 1 );
- gpoints[k].y =
- g_array_index(point, gint,
- j + k * 2 + 1) * (scale ? config.scale_factor : 1);
- }
- j += k * 2;
- gdk_draw_polygon(mask, gc, TRUE, gpoints,
- g_array_index(num, gint, i));
- g_free(gpoints);
+ for (i = 0; i < num->len; i ++)
+ {
+ gint n_points = g_array_index (num, gint, i);
+ if (n_points <= 0 || j + 2 * n_points > point->len)
+ break;
+
+ GdkPoint gpoints[n_points];
+ for (k = 0; k < n_points; k ++)
+ {
+ gpoints[k].x = g_array_index (point, gint, j + k * 2);
+ gpoints[k].y = g_array_index (point, gint, j + k * 2 + 1);
}
+
+#ifdef MASK_IS_REGION
+ gint xmin = width, ymin = height, xmax = 0, ymax = 0;
+ for (k = 0; k < n_points; k ++)
+ {
+ xmin = MIN (xmin, gpoints[k].x);
+ ymin = MIN (ymin, gpoints[k].y);
+ xmax = MAX (xmax, gpoints[k].x);
+ ymax = MAX (ymax, gpoints[k].y);
+ }
+
+ if (xmax > xmin && ymax > ymin)
+ {
+ cairo_rectangle_int_t rect = {xmin, ymin, xmax - xmin, ymax - ymin};
+ cairo_region_union_rectangle (mask, & rect);
+ }
+#else
+ gdk_draw_polygon (mask, gc, TRUE, gpoints, n_points);
+#endif
+
+ created_mask = TRUE;
+ j += n_points * 2;
}
+
g_array_free(num, TRUE);
g_array_free(point, TRUE);
g_free(filename);
if (!created_mask)
+ {
+#ifdef MASK_IS_REGION
+ cairo_rectangle_int_t rect = {0, 0, width, height};
+ cairo_region_union_rectangle (mask, & rect);
+#else
gdk_draw_rectangle(mask, gc, TRUE, 0, 0, width, height);
+#endif
+ }
+#ifndef MASK_IS_REGION
g_object_unref(gc);
+#endif
return mask;
}
@@ -1349,7 +804,7 @@ static void skin_load_viscolor (Skin * skin, const gchar * path, const gchar *
gchar * filename, * buffer, * string, * next;
gint line;
- skin_set_default_vis_color (skin);
+ memcpy (skin->vis_colors, default_vis_colors, sizeof skin->vis_colors);
filename = find_file_case_uri (path, basename);
if (filename == NULL)
@@ -1362,17 +817,13 @@ static void skin_load_viscolor (Skin * skin, const gchar * path, const gchar *
for (line = 0; string != NULL && line < 24; line ++)
{
GArray * array;
- gint column;
next = text_parse_line (string);
array = string_to_garray (string);
if (array->len >= 3)
- {
- for (column = 0; column < 3; column ++)
- skin->vis_color[line][column] = g_array_index (array, gint,
- column);
- }
+ skin->vis_colors[line] = COLOR (g_array_index (array, gint, 0),
+ g_array_index (array, gint, 1), g_array_index (array, gint, 2));
g_array_free (array, TRUE);
string = next;
@@ -1384,33 +835,26 @@ static void skin_load_viscolor (Skin * skin, const gchar * path, const gchar *
static void
skin_numbers_generate_dash(Skin * skin)
{
- GdkPixbuf *pixbuf;
- SkinPixmap *numbers;
-
g_return_if_fail(skin != NULL);
- numbers = &skin->pixmaps[SKIN_NUMBERS];
- if (!numbers->pixbuf || numbers->current_width < 99)
+ cairo_surface_t * old = skin->pixmaps[SKIN_NUMBERS];
+ if (! old || cairo_image_surface_get_width (old) < 99)
return;
- pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8,
- 108, numbers->current_height);
-
- skin_draw_pixbuf(NULL, skin, pixbuf, SKIN_NUMBERS, 0, 0, 0, 0, 99, numbers->current_height);
- skin_draw_pixbuf(NULL, skin, pixbuf, SKIN_NUMBERS, 90, 0, 99, 0, 9, numbers->current_height);
- skin_draw_pixbuf(NULL, skin, pixbuf, SKIN_NUMBERS, 20, 6, 101, 6, 5, 1);
+ gint h = cairo_image_surface_get_height (old);
+ cairo_surface_t * new = surface_new (108, h);
- g_object_unref(numbers->pixbuf);
+ surface_copy_rect (old, 0, 0, 99, h, new, 0, 0);
+ surface_copy_rect (old, 90, 0, 9, h, new, 99, 0);
+ surface_copy_rect (old, 20, 6, 5, 1, new, 101, 6);
- numbers->pixbuf = pixbuf;
- numbers->current_width = 108;
- numbers->width = 108;
+ cairo_surface_destroy (old);
+ skin->pixmaps[SKIN_NUMBERS] = new;
}
static gboolean
skin_load_pixmaps(Skin * skin, const gchar * path)
{
- GdkPixbuf *text_pb;
guint i;
gchar *filename;
INIFile *inifile;
@@ -1421,17 +865,15 @@ skin_load_pixmaps(Skin * skin, const gchar * path)
AUDDBG("Loading pixmaps in %s\n", path);
for (i = 0; i < SKIN_PIXMAP_COUNT; i++)
- if (!skin_load_pixmap_id(skin, i, path) && !config.allow_broken_skins)
+ if (! skin_load_pixmap_id (skin, i, path))
return FALSE;
- text_pb = skin->pixmaps[SKIN_TEXT].pixbuf;
+ if (skin->pixmaps[SKIN_TEXT])
+ skin_get_textcolors (skin, skin->pixmaps[SKIN_TEXT]);
- if (text_pb)
- skin_get_textcolors(text_pb, skin->textbg, skin->textfg);
-
- if (skin->pixmaps[SKIN_NUMBERS].pixbuf &&
- skin->pixmaps[SKIN_NUMBERS].width < 108 )
- skin_numbers_generate_dash(skin);
+ if (skin->pixmaps[SKIN_NUMBERS] && cairo_image_surface_get_width
+ (skin->pixmaps[SKIN_NUMBERS]) < 108)
+ skin_numbers_generate_dash (skin);
filename = find_file_case_uri (path, "pledit.txt");
inifile = (filename != NULL) ? open_ini_file (filename) : NULL;
@@ -1451,39 +893,16 @@ skin_load_pixmaps(Skin * skin, const gchar * path)
if (filename)
g_free(filename);
- skin_mask_create(skin, path, SKIN_MASK_MAIN, mainwin->window);
- skin_mask_create(skin, path, SKIN_MASK_MAIN_SHADE, mainwin->window);
-
- skin_mask_create(skin, path, SKIN_MASK_EQ, equalizerwin->window);
- skin_mask_create(skin, path, SKIN_MASK_EQ_SHADE, equalizerwin->window);
+ skin_mask_create (skin, path, SKIN_MASK_MAIN, gtk_widget_get_window (mainwin));
+ skin_mask_create (skin, path, SKIN_MASK_MAIN_SHADE, gtk_widget_get_window (mainwin));
+ skin_mask_create (skin, path, SKIN_MASK_EQ, gtk_widget_get_window (equalizerwin));
+ skin_mask_create (skin, path, SKIN_MASK_EQ_SHADE, gtk_widget_get_window (equalizerwin));
skin_load_viscolor(skin, path, "viscolor.txt");
return TRUE;
}
-static void
-skin_set_gtk_theme(GtkSettings * settings, Skin * skin)
-{
- if (original_gtk_theme == NULL)
- g_object_get(settings, "gtk-theme-name", &original_gtk_theme, NULL);
-
- /* the way GTK does things can be very broken. --nenolod */
-
- gchar path[PATH_MAX];
-
- snprintf (path, sizeof path, "%s/.themes", g_get_home_dir ());
- g_mkdir_with_parents (path, 0755);
-
- snprintf (path, sizeof path, "%s/.themes/aud-%s", g_get_home_dir (), basename
- (skin->path));
- if (! g_file_test (path, G_FILE_TEST_EXISTS) && symlink (skin->path, path))
- fprintf (stderr, "Failed to create symlink %s.\n", path);
-
- gtk_settings_set_string_property (settings, "gtk-theme-name", basename
- (path), "audacious");
-}
-
/**
* Checks if all pixmap files exist that skin needs.
*/
@@ -1506,7 +925,6 @@ skin_check_pixmaps(const Skin * skin, const gchar * skin_path)
static gboolean
skin_load_nolock(Skin * skin, const gchar * path, gboolean force)
{
- gchar *gtkrcpath;
gchar *newpath, *skin_path;
int archive = 0;
@@ -1514,9 +932,8 @@ skin_load_nolock(Skin * skin, const gchar * path, gboolean force)
g_return_val_if_fail(skin != NULL, FALSE);
g_return_val_if_fail(path != NULL, FALSE);
- REQUIRE_LOCK(skin->lock);
- if (!g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_DIR))
+ if (! g_file_test (path, G_FILE_TEST_EXISTS))
return FALSE;
if(force) AUDDBG("reloading forced!\n");
@@ -1537,7 +954,7 @@ skin_load_nolock(Skin * skin, const gchar * path, gboolean force)
}
// Check if skin path has all necessary files.
- if (!config.allow_broken_skins && !skin_check_pixmaps(skin, skin_path)) {
+ if (!skin_check_pixmaps(skin, skin_path)) {
if(archive) del_directory(skin_path);
g_free(skin_path);
AUDDBG("Skin path (%s) doesn't have all wanted pixmaps\n", skin_path);
@@ -1564,18 +981,6 @@ skin_load_nolock(Skin * skin, const gchar * path, gboolean force)
return FALSE;
}
-#ifndef _WIN32
- if (! config.disable_inline_gtk && ! archive)
- {
- gtkrcpath = g_strdup_printf ("%s/gtk-2.0/gtkrc", skin->path);
-
- if (g_file_test (gtkrcpath, G_FILE_TEST_IS_REGULAR))
- skin_set_gtk_theme (gtk_settings_get_default (), skin);
-
- g_free (gtkrcpath);
- }
-#endif
-
if(archive) del_directory(skin_path);
g_free(skin_path);
@@ -1585,33 +990,51 @@ skin_load_nolock(Skin * skin, const gchar * path, gboolean force)
return TRUE;
}
-void
-skin_install_skin(const gchar * path)
+void skin_install_skin (const gchar * path)
{
- gchar *command;
+#ifdef S_IRGRP
+ const mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+#else
+ const mode_t mode = S_IRWXU;
+#endif
+
+ if (g_mkdir_with_parents (skins_paths[SKINS_PATH_USER_SKIN_DIR], mode) < 0)
+ {
+ fprintf (stderr, "Failed to create %s: %s\n",
+ skins_paths[SKINS_PATH_USER_SKIN_DIR], strerror (errno));
+ return;
+ }
- g_return_if_fail(path != NULL);
+ GError * err = 0;
+ gchar * data;
+ gsize len;
- command = g_strdup_printf("cp %s %s",
- path, skins_paths[SKINS_PATH_USER_SKIN_DIR]);
- if (system(command)) {
- AUDDBG("Unable to install skin (%s) into user directory (%s)\n",
- path, skins_paths[SKINS_PATH_USER_SKIN_DIR]);
+ if (! g_file_get_contents (path, & data, & len, & err))
+ {
+ fprintf (stderr, "Failed to read %s: %s\n", path, err->message);
+ g_error_free (err);
+ return;
}
- g_free(command);
-}
-static SkinPixmap *
-skin_get_pixmap(Skin * skin, SkinPixmapId map_id)
-{
- g_return_val_if_fail(skin != NULL, NULL);
- g_return_val_if_fail(map_id < SKIN_PIXMAP_COUNT, NULL);
+ gchar * base = g_path_get_basename (path);
+ gchar * target = g_build_filename (skins_paths[SKINS_PATH_USER_SKIN_DIR], base, NULL);
+
+ if (! g_file_set_contents (target, data, len, & err))
+ {
+ fprintf (stderr, "Failed to write %s: %s\n", path, err->message);
+ g_error_free (err);
+ g_free (data);
+ g_free (base);
+ g_free (target);
+ return;
+ }
- return &skin->pixmaps[map_id];
+ g_free (data);
+ g_free (base);
+ g_free (target);
}
-gboolean
-skin_load(Skin * skin, const gchar * path)
+static gboolean skin_load (Skin * skin, const gchar * path)
{
gboolean ret;
@@ -1620,210 +1043,56 @@ skin_load(Skin * skin, const gchar * path)
if (!path)
return FALSE;
- skin_lock(skin);
ret = skin_load_nolock(skin, path, FALSE);
- skin_unlock(skin);
if(!ret) {
AUDDBG("loading failed\n");
return FALSE; /* don't try to update anything if loading failed --asphyx */
}
- SkinPixmap *pixmap = NULL;
- pixmap = skin_get_pixmap(skin, SKIN_NUMBERS);
- if (pixmap) {
- ui_skinned_number_set_size(mainwin_minus_num, 9, pixmap->height);
- ui_skinned_number_set_size(mainwin_10min_num, 9, pixmap->height);
- ui_skinned_number_set_size(mainwin_min_num, 9, pixmap->height);
- ui_skinned_number_set_size(mainwin_10sec_num, 9, pixmap->height);
- ui_skinned_number_set_size(mainwin_sec_num, 9, pixmap->height);
+ if (skin->pixmaps[SKIN_NUMBERS])
+ {
+ gint h = cairo_image_surface_get_height (skin->pixmaps[SKIN_NUMBERS]);
+ ui_skinned_number_set_size (mainwin_minus_num, 9, h);
+ ui_skinned_number_set_size (mainwin_10min_num, 9, h);
+ ui_skinned_number_set_size (mainwin_min_num, 9, h);
+ ui_skinned_number_set_size (mainwin_10sec_num, 9, h);
+ ui_skinned_number_set_size (mainwin_sec_num, 9, h);
}
- pixmap = skin_get_pixmap(skin, SKIN_MAIN);
- if (pixmap && skin->properties.mainwin_height > pixmap->height)
- skin->properties.mainwin_height = pixmap->height;
-
- pixmap = skin_get_pixmap(skin, SKIN_PLAYPAUSE);
- if (pixmap)
- ui_skinned_playstatus_set_size(mainwin_playstatus, 11, pixmap->height);
-
- pixmap = skin_get_pixmap(skin, SKIN_EQMAIN);
- if (pixmap->height >= 313)
- gtk_widget_show(equalizerwin_graph);
+ if (skin->pixmaps[SKIN_PLAYPAUSE])
+ ui_skinned_playstatus_set_size (mainwin_playstatus, 11,
+ cairo_image_surface_get_height (skin->pixmaps[SKIN_PLAYPAUSE]));
return TRUE;
}
-gboolean
-skin_reload_forced(void)
-{
- gboolean error;
- AUDDBG("\n");
-
- skin_lock(aud_active_skin);
- error = skin_load_nolock(aud_active_skin, aud_active_skin->path, TRUE);
- skin_unlock(aud_active_skin);
-
- return error;
-}
-
-void
-skin_reload(Skin * skin)
-{
- AUDDBG("\n");
- g_return_if_fail(skin != NULL);
- skin_load_nolock(skin, skin->path, TRUE);
-}
-
-GdkBitmap *
-skin_get_mask(Skin * skin, SkinMaskId mi)
+void skin_draw_pixbuf (cairo_t * cr, SkinPixmapId id, gint xsrc, gint ysrc, gint
+ xdest, gint ydest, gint width, gint height)
{
- GdkBitmap **masks;
-
- g_return_val_if_fail(skin != NULL, NULL);
- g_return_val_if_fail(mi < SKIN_PIXMAP_COUNT, NULL);
-
- masks = config.scaled ? skin->scaled_masks : skin->masks;
- return masks[mi];
-}
-
-GdkColor *
-skin_get_color(Skin * skin, SkinColorId color_id)
-{
- GdkColor *ret = NULL;
-
- g_return_val_if_fail(skin != NULL, NULL);
-
- switch (color_id) {
- case SKIN_TEXTBG:
- if (skin->pixmaps[SKIN_TEXT].pixbuf)
- ret = skin->textbg;
- else
- ret = skin->def_textbg;
- break;
- case SKIN_TEXTFG:
- if (skin->pixmaps[SKIN_TEXT].pixbuf)
- ret = skin->textfg;
- else
- ret = skin->def_textfg;
- break;
- default:
- if (color_id < SKIN_COLOR_COUNT)
- ret = skin->colors[color_id];
- break;
- }
- return ret;
-}
-
-void
-skin_get_viscolor(Skin * skin, guchar vis_color[24][3])
-{
- gint i;
-
- g_return_if_fail(skin != NULL);
-
- for (i = 0; i < 24; i++) {
- vis_color[i][0] = skin->vis_color[i][0];
- vis_color[i][1] = skin->vis_color[i][1];
- vis_color[i][2] = skin->vis_color[i][2];
- }
-}
-
-gint
-skin_get_id(void)
-{
- return skin_current_num;
-}
-
-void
-skin_draw_pixbuf(GtkWidget *widget, Skin * skin, GdkPixbuf * pix,
- SkinPixmapId pixmap_id,
- gint xsrc, gint ysrc, gint xdest, gint ydest,
- gint width, gint height)
-{
- SkinPixmap *pixmap;
-
- g_return_if_fail(skin != NULL);
-
- pixmap = skin_get_pixmap(skin, pixmap_id);
- g_return_if_fail(pixmap != NULL);
- g_return_if_fail(pixmap->pixbuf != NULL);
-
- /* perhaps we should use transparency or resize widget? */
- if (xsrc+width > pixmap->width || ysrc+height > pixmap->height) {
- if (widget) {
- /* it's better to hide widget using SKIN_PLAYPAUSE/SKIN_POSBAR than display mess */
- if ((pixmap_id == SKIN_PLAYPAUSE && pixmap->width != 42) || pixmap_id == SKIN_POSBAR) {
- gtk_widget_hide(widget);
- return;
- }
-
- /* Some skins include SKIN_VOLUME and/or SKIN_BALANCE without knobs */
- if (pixmap_id == SKIN_VOLUME || pixmap_id == SKIN_BALANCE) {
- if (ysrc+height > 421 && xsrc+width <= pixmap->width)
- return;
- }
-
- /* XMMS skins seems to have SKIN_MONOSTEREO with size 58x20 instead of 58x24 */
- if (pixmap_id == SKIN_MONOSTEREO)
- height = pixmap->height/2;
-
- if (gtk_widget_get_parent(widget) == SKINNED_WINDOW(equalizerwin)->normal) {
- if (!(pixmap_id == SKIN_EQMAIN && ysrc == 314)) /* equalizer preamp on equalizer graph */
- gtk_widget_hide(widget);
- }
-
- if (gtk_widget_get_parent(widget) == SKINNED_WINDOW(playlistwin)->normal) {
- /* I haven't seen any skin with substandard playlist */
- gtk_widget_hide(widget);
- }
- } else
- return;
- }
+ if (! active_skin->pixmaps[id])
+ return;
- width = MIN(width, pixmap->width - xsrc);
- height = MIN(height, pixmap->height - ysrc);
- gdk_pixbuf_copy_area(pixmap->pixbuf, xsrc, ysrc, width, height,
- pix, xdest, ydest);
+ cairo_set_source_surface (cr, active_skin->pixmaps[id], xdest - xsrc,
+ ydest - ysrc);
+ cairo_rectangle (cr, xdest, ydest, width, height);
+ cairo_fill (cr);
}
-void
-skin_get_eq_spline_colors(Skin * skin, guint32 colors[19])
+void skin_get_eq_spline_colors (Skin * skin, guint32 colors[19])
{
- gint i;
- GdkPixbuf *pixbuf;
- SkinPixmap *eqmainpm;
- guchar* pixels,*p;
- guint rowstride, n_channels;
- g_return_if_fail(skin != NULL);
-
- eqmainpm = &skin->pixmaps[SKIN_EQMAIN];
- if (eqmainpm->pixbuf &&
- eqmainpm->current_width >= 116 && eqmainpm->current_height >= 313)
- pixbuf = eqmainpm->pixbuf;
- else
- return;
-
- if (!GDK_IS_PIXBUF(pixbuf))
- return;
-
- pixels = gdk_pixbuf_get_pixels (pixbuf);
- rowstride = gdk_pixbuf_get_rowstride (pixbuf);
- n_channels = gdk_pixbuf_get_n_channels (pixbuf);
- for (i = 0; i < 19; i++)
+ if (! skin->pixmaps[SKIN_EQMAIN])
{
- p = pixels + rowstride * (i + 294) + 115 * n_channels;
- colors[i] = (p[0] << 16) | (p[1] << 8) | p[2];
- /* should we really treat the Alpha channel? */
- /*if (n_channels == 4)
- colors[i] = (colors[i] << 8) | p[3];*/
+ memset (colors, 0, sizeof (guint32) * 19);
+ return;
}
-}
+ for (gint i = 0; i < 19; i ++)
+ colors[i] = surface_get_pixel (skin->pixmaps[SKIN_EQMAIN], 115, i + 294);
+}
-static void
-skin_draw_playlistwin_frame_top(Skin * skin, GdkPixbuf * pix,
- gint width, gint height, gboolean focus)
+static void skin_draw_playlistwin_frame_top (cairo_t * cr, gint width, gint
+ height, gboolean focus)
{
/* The title bar skin consists of 2 sets of 4 images, 1 set
* for focused state and the other for unfocused. The 4 images
@@ -1846,15 +1115,13 @@ skin_draw_playlistwin_frame_top(Skin * skin, GdkPixbuf * pix,
y = 21;
/* left corner */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 0, y, 0, 0, 25, 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 0, y, 0, 0, 25, 20);
/* titlebar title */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 26, y,
- (width - 100) / 2, 0, 100, 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 26, y, (width - 100) / 2, 0, 100, 20);
/* titlebar right corner */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 153, y,
- width - 25, 0, 25, 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 153, y, width - 25, 0, 25, 20);
/* tile draw the remaining frame */
@@ -1863,27 +1130,25 @@ skin_draw_playlistwin_frame_top(Skin * skin, GdkPixbuf * pix,
for (i = 0; i < c / 2; i++) {
/* left of title */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 127, y,
- 25 + i * 25, 0, 25, 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 127, y, 25 + i * 25, 0, 25, 20);
/* right of title */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 127, y,
- (width + 100) / 2 + i * 25, 0, 25, 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 127, y, (width + 100) / 2 + i * 25,
+ 0, 25, 20);
}
if (c & 1) {
/* Odd tile count, so one remaining to draw. Here we split
* it into two and draw half on either side of the title */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 127, y,
- ((c / 2) * 25) + 25, 0, 12, 20);
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 127, y,
- (width / 2) + ((c / 2) * 25) + 50, 0, 13, 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 127, y, ((c / 2) * 25) + 25, 0, 12,
+ 20);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 127, y, (width / 2) + ((c / 2) * 25)
+ + 50, 0, 13, 20);
}
}
-static void
-skin_draw_playlistwin_frame_bottom(Skin * skin, GdkPixbuf * pix,
- gint width, gint height, gboolean focus)
+static void skin_draw_playlistwin_frame_bottom (cairo_t * cr, gint width, gint
+ height, gboolean focus)
{
/* The bottom frame skin consists of 1 set of 4 images. The 4
* images are:
@@ -1899,31 +1164,29 @@ skin_draw_playlistwin_frame_bottom(Skin * skin, GdkPixbuf * pix,
gint i, c;
/* bottom left corner (menu buttons) */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 0, 72,
- 0, height - 38, 125, 38);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 0, 72, 0, height - 38, 125, 38);
c = (width - 275) / 25;
/* draw visualization window, if width allows */
if (c >= 3) {
c -= 3;
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 205, 0,
- width - (150 + 75), height - 38, 75, 38);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 205, 0, width - (150 + 75), height -
+ 38, 75, 38);
}
/* Bottom right corner (playbuttons etc) */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT,
- 126, 72, width - 150, height - 38, 150, 38);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 126, 72, width - 150, height - 38, 150,
+ 38);
/* Tile draw the remaining undrawn portions */
for (i = 0; i < c; i++)
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 179, 0,
- 125 + i * 25, height - 38, 25, 38);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 179, 0, 125 + i * 25, height - 38,
+ 25, 38);
}
-static void
-skin_draw_playlistwin_frame_sides(Skin * skin, GdkPixbuf * pix,
- gint width, gint height, gboolean focus)
+static void skin_draw_playlistwin_frame_sides (cairo_t * cr, gint width, gint
+ height, gboolean focus)
{
/* The side frames consist of 2 tile images. 1 for the left, 1 for
* the right.
@@ -1936,29 +1199,23 @@ skin_draw_playlistwin_frame_sides(Skin * skin, GdkPixbuf * pix,
/* frame sides */
for (i = 0; i < (height - (20 + 38)) / 29; i++) {
/* left */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 0, 42,
- 0, 20 + i * 29, 12, 29);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 0, 42, 0, 20 + i * 29, 12, 29);
/* right */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 32, 42,
- width - 19, 20 + i * 29, 19, 29);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 32, 42, width - 19, 20 + i * 29, 19,
+ 29);
}
}
-
-void
-skin_draw_playlistwin_frame(Skin * skin, GdkPixbuf * pix,
- gint width, gint height, gboolean focus)
+void skin_draw_playlistwin_frame (cairo_t * cr, gint width, gint height,
+ gboolean focus)
{
- skin_draw_playlistwin_frame_top(skin, pix, width, height, focus);
- skin_draw_playlistwin_frame_bottom(skin, pix, width, height, focus);
- skin_draw_playlistwin_frame_sides(skin, pix, width, height, focus);
+ skin_draw_playlistwin_frame_top (cr, width, height, focus);
+ skin_draw_playlistwin_frame_bottom (cr, width, height, focus);
+ skin_draw_playlistwin_frame_sides (cr, width, height, focus);
}
-
-void
-skin_draw_playlistwin_shaded(Skin * skin, GdkPixbuf * pix,
- gint width, gboolean focus)
+void skin_draw_playlistwin_shaded (cairo_t * cr, gint width, gboolean focus)
{
/* The shade mode titlebar skin consists of 4 images:
* a) left corner offset (72,42) size (25,14)
@@ -1970,22 +1227,18 @@ skin_draw_playlistwin_shaded(Skin * skin, GdkPixbuf * pix,
gint i;
/* left corner */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 72, 42, 0, 0, 25, 14);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 72, 42, 0, 0, 25, 14);
/* bar tile */
for (i = 0; i < (width - 75) / 25; i++)
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 72, 57,
- (i * 25) + 25, 0, 25, 14);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 72, 57, (i * 25) + 25, 0, 25, 14);
/* right corner */
- skin_draw_pixbuf(NULL, skin, pix, SKIN_PLEDIT, 99, focus ? 42 : 57,
- width - 50, 0, 50, 14);
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 99, focus ? 42 : 57, width - 50, 0, 50,
+ 14);
}
-
-void
-skin_draw_mainwin_titlebar(Skin * skin, GdkPixbuf * pix,
- gboolean shaded, gboolean focus)
+void skin_draw_mainwin_titlebar (cairo_t * cr, gboolean shaded, gboolean focus)
{
/* The titlebar skin consists of 2 sets of 2 images, one for for
* shaded and the other for unshaded mode, giving a total of 4.
@@ -2013,36 +1266,6 @@ skin_draw_mainwin_titlebar(Skin * skin, GdkPixbuf * pix,
y_offset = 15;
}
- skin_draw_pixbuf(NULL, skin, pix, SKIN_TITLEBAR, 27, y_offset,
- 0, 0, aud_active_skin->properties.mainwin_width, MAINWIN_TITLEBAR_HEIGHT);
-}
-
-
-void
-skin_set_random_skin(void)
-{
- SkinNode *node;
- guint32 randval;
-
- /* Get a random value to select the skin to use */
- randval = g_random_int_range(0, g_list_length(skinlist));
- node = g_list_nth(skinlist, randval)->data;
- aud_active_skin_load(node->path);
-}
-
-void ui_skinned_widget_draw_with_coordinates(GtkWidget *widget, GdkPixbuf *obj, gint width, gint height, gint destx, gint desty, gboolean scale) {
- g_return_if_fail(widget != NULL);
- g_return_if_fail(obj != NULL);
-
- if (scale) {
- GdkPixbuf *image = gdk_pixbuf_scale_simple(obj, width * config.scale_factor, height* config.scale_factor, GDK_INTERP_NEAREST);
- gdk_draw_pixbuf(widget->window, NULL, image, 0, 0, destx, desty, width * config.scale_factor , height * config.scale_factor, GDK_RGB_DITHER_NONE, 0, 0);
- g_object_unref(image);
- } else {
- gdk_draw_pixbuf(widget->window, NULL, obj, 0, 0, destx, desty, width, height, GDK_RGB_DITHER_NONE, 0, 0);
- }
-}
-
-void ui_skinned_widget_draw(GtkWidget *widget, GdkPixbuf *obj, gint width, gint height, gboolean scale) {
- ui_skinned_widget_draw_with_coordinates(widget, obj, width, height, 0, 0, scale);
+ skin_draw_pixbuf (cr, SKIN_TITLEBAR, 27, y_offset, 0, 0,
+ active_skin->properties.mainwin_width, MAINWIN_TITLEBAR_HEIGHT);
}
diff --git a/src/skins/ui_skin.h b/src/skins/ui_skin.h
index de78131..9d8f82a 100644
--- a/src/skins/ui_skin.h
+++ b/src/skins/ui_skin.h
@@ -1,5 +1,5 @@
/* Audacious
- * Copyright (C) 2005-2007 Audacious development team.
+ * Copyright (C) 2005-2011 Audacious development team.
*
* BMP - Cross-platform multimedia player
* Copyright (C) 2003-2004 BMP development team.
@@ -26,12 +26,16 @@
#ifndef SKIN_H
#define SKIN_H
-#include <glib.h>
-#include <gdk/gdk.h>
#include <gtk/gtk.h>
-#define BMP_DEFAULT_SKIN_PATH \
- DATA_DIR G_DIR_SEPARATOR_S "Skins" G_DIR_SEPARATOR_S "Default"
+#if GTK_CHECK_VERSION (3, 0, 0)
+#define MASK_IS_REGION
+#endif
+
+#define COLOR(r,g,b) (((guint32) (r) << 16) | ((guint32) (g) << 8) | (guint32) (b))
+#define COLOR_R(c) ((gint) (((c) & 0xff0000) >> 16))
+#define COLOR_G(c) ((gint) (((c) & 0xff00) >> 8))
+#define COLOR_B(c) ((gint) ((c) & 0xff))
typedef enum {
SKIN_MAIN = 0,
@@ -69,177 +73,138 @@ typedef enum {
SKIN_COLOR_COUNT
} SkinColorId;
-typedef struct _SkinProperties {
- /* this enables the othertext engine, not it's visibility -nenolod */
- gboolean mainwin_othertext;
+typedef struct {
+ /* Vis properties */
+ gint mainwin_vis_x;
+ gint mainwin_vis_y;
+ gboolean mainwin_vis_visible;
- /* Vis properties */
- gint mainwin_vis_x;
- gint mainwin_vis_y;
- gint mainwin_vis_width;
- gboolean mainwin_vis_visible;
+ /* Text properties */
+ gint mainwin_text_x;
+ gint mainwin_text_y;
+ gint mainwin_text_width;
+ gboolean mainwin_text_visible;
- /* Text properties */
- gint mainwin_text_x;
- gint mainwin_text_y;
- gint mainwin_text_width;
- gboolean mainwin_text_visible;
+ /* Infobar properties */
+ gint mainwin_infobar_x;
+ gint mainwin_infobar_y;
+ gboolean mainwin_othertext_visible;
- /* Infobar properties */
- gint mainwin_infobar_x;
- gint mainwin_infobar_y;
- gboolean mainwin_othertext_visible;
+ gint mainwin_number_0_x;
+ gint mainwin_number_0_y;
- gint mainwin_number_0_x;
- gint mainwin_number_0_y;
+ gint mainwin_number_1_x;
+ gint mainwin_number_1_y;
- gint mainwin_number_1_x;
- gint mainwin_number_1_y;
+ gint mainwin_number_2_x;
+ gint mainwin_number_2_y;
- gint mainwin_number_2_x;
- gint mainwin_number_2_y;
+ gint mainwin_number_3_x;
+ gint mainwin_number_3_y;
- gint mainwin_number_3_x;
- gint mainwin_number_3_y;
+ gint mainwin_number_4_x;
+ gint mainwin_number_4_y;
- gint mainwin_number_4_x;
- gint mainwin_number_4_y;
+ gint mainwin_playstatus_x;
+ gint mainwin_playstatus_y;
- gint mainwin_playstatus_x;
- gint mainwin_playstatus_y;
+ gint mainwin_volume_x;
+ gint mainwin_volume_y;
- gint mainwin_volume_x;
- gint mainwin_volume_y;
+ gint mainwin_balance_x;
+ gint mainwin_balance_y;
- gint mainwin_balance_x;
- gint mainwin_balance_y;
+ gint mainwin_position_x;
+ gint mainwin_position_y;
- gint mainwin_position_x;
- gint mainwin_position_y;
+ gint mainwin_previous_x;
+ gint mainwin_previous_y;
- gint mainwin_previous_x;
- gint mainwin_previous_y;
+ gint mainwin_play_x;
+ gint mainwin_play_y;
- gint mainwin_play_x;
- gint mainwin_play_y;
+ gint mainwin_pause_x;
+ gint mainwin_pause_y;
- gint mainwin_pause_x;
- gint mainwin_pause_y;
+ gint mainwin_stop_x;
+ gint mainwin_stop_y;
- gint mainwin_stop_x;
- gint mainwin_stop_y;
+ gint mainwin_next_x;
+ gint mainwin_next_y;
- gint mainwin_next_x;
- gint mainwin_next_y;
+ gint mainwin_eject_x;
+ gint mainwin_eject_y;
- gint mainwin_eject_x;
- gint mainwin_eject_y;
+ gint mainwin_eqbutton_x;
+ gint mainwin_eqbutton_y;
- gint mainwin_eqbutton_x;
- gint mainwin_eqbutton_y;
+ gint mainwin_plbutton_x;
+ gint mainwin_plbutton_y;
- gint mainwin_plbutton_x;
- gint mainwin_plbutton_y;
+ gint mainwin_shuffle_x;
+ gint mainwin_shuffle_y;
- gint mainwin_shuffle_x;
- gint mainwin_shuffle_y;
+ gint mainwin_repeat_x;
+ gint mainwin_repeat_y;
- gint mainwin_repeat_x;
- gint mainwin_repeat_y;
+ gint mainwin_about_x;
+ gint mainwin_about_y;
- gint mainwin_about_x;
- gint mainwin_about_y;
+ gint mainwin_minimize_x;
+ gint mainwin_minimize_y;
- gint mainwin_minimize_x;
- gint mainwin_minimize_y;
+ gint mainwin_shade_x;
+ gint mainwin_shade_y;
- gint mainwin_shade_x;
- gint mainwin_shade_y;
+ gint mainwin_close_x;
+ gint mainwin_close_y;
- gint mainwin_close_x;
- gint mainwin_close_y;
+ gint mainwin_width;
+ gint mainwin_height;
- gint mainwin_width;
- gint mainwin_height;
+ gboolean mainwin_menurow_visible;
+ gboolean mainwin_streaminfo_visible;
+ gboolean mainwin_othertext_is_status;
- gboolean mainwin_menurow_visible;
- gboolean mainwin_othertext_is_status;
-
- gint textbox_bitmap_font_width;
- gint textbox_bitmap_font_height;
+ gint textbox_bitmap_font_width;
+ gint textbox_bitmap_font_height;
} SkinProperties;
-#define SKIN_PIXMAP(x) ((SkinPixmap *)(x))
-typedef struct _SkinPixmap {
- GdkPixbuf *pixbuf;
-
- /* The real size of the pixmap */
- gint width, height;
-
- /* The size of the pixmap from the current skin,
- which might be smaller */
- gint current_width, current_height;
-} SkinPixmap;
-
-
-#define SKIN(x) ((Skin *)(x))
-typedef struct _Skin {
- GMutex *lock;
+typedef struct {
gchar *path;
- gchar *def_path;
- SkinPixmap pixmaps[SKIN_PIXMAP_COUNT];
- GdkColor textbg[6], def_textbg[6];
- GdkColor textfg[6], def_textfg[6];
- GdkColor *colors[SKIN_COLOR_COUNT];
- guchar vis_color[24][3];
- GdkBitmap *masks[SKIN_MASK_COUNT];
- GdkBitmap *scaled_masks[SKIN_MASK_COUNT];
+ cairo_surface_t * pixmaps[SKIN_PIXMAP_COUNT];
+ guint32 colors[SKIN_COLOR_COUNT];
+ guint32 vis_colors[24];
+#ifdef MASK_IS_REGION
+ cairo_region_t * masks[SKIN_MASK_COUNT];
+#else
+ GdkBitmap * masks[SKIN_MASK_COUNT];
+#endif
SkinProperties properties;
} Skin;
-extern Skin *aud_active_skin;
+extern Skin * active_skin;
gboolean init_skins(const gchar * path);
void cleanup_skins(void);
-gboolean aud_active_skin_load(const gchar * path);
-gboolean aud_active_skin_reload(void);
+gboolean active_skin_load(const gchar * path);
-Skin *skin_new(void);
-gboolean skin_load(Skin * skin, const gchar * path);
-gboolean skin_reload_forced(void);
-void skin_reload(Skin * skin);
-void skin_free(Skin * skin);
-void skin_destroy(Skin * skin);
-
-GdkBitmap *skin_get_mask(Skin * skin, SkinMaskId mi);
-GdkColor *skin_get_color(Skin * skin, SkinColorId color_id);
-
-void skin_get_viscolor(Skin * skin, guchar vis_color[24][3]);
-gint skin_get_id(void);
-void skin_draw_pixbuf(GtkWidget *widget, Skin * skin, GdkPixbuf * pix,
- SkinPixmapId pixmap_id,
- gint xsrc, gint ysrc, gint xdest, gint ydest,
- gint width, gint height);
+void skin_draw_pixbuf (cairo_t * cr, SkinPixmapId id, gint xsrc, gint ysrc,
+ gint xdest, gint ydest, gint width, gint height);
void skin_get_eq_spline_colors(Skin * skin, guint32 colors[19]);
void skin_install_skin(const gchar * path);
-void skin_draw_playlistwin_shaded(Skin * skin, GdkPixbuf * pix,
- gint width, gboolean focus);
-void skin_draw_playlistwin_frame(Skin * skin, GdkPixbuf * pix,
- gint width, gint height, gboolean focus);
-
-void skin_draw_mainwin_titlebar(Skin * skin, GdkPixbuf * pix,
- gboolean shaded, gboolean focus);
-
-
-void skin_parse_hints(Skin * skin, gchar *path_p);
-
-
-void skin_set_random_skin(void);
+void skin_draw_playlistwin_shaded (cairo_t * cr, gint width, gboolean focus);
+void skin_draw_playlistwin_frame (cairo_t * cr, gint width, gint height,
+ gboolean focus);
+void skin_draw_mainwin_titlebar (cairo_t * cr, gboolean shaded, gboolean focus);
-void ui_skinned_widget_draw_with_coordinates(GtkWidget *widget, GdkPixbuf *obj, gint width, gint height, gint destx, gint desty, gboolean scale);
-void ui_skinned_widget_draw(GtkWidget *widget, GdkPixbuf *obj, gint width, gint height, gboolean scale);
+static inline void set_cairo_color (cairo_t * cr, guint32 c)
+{
+ cairo_set_source_rgb (cr, COLOR_R(c) / 255.0, COLOR_G(c) / 255.0, COLOR_B(c)
+ / 255.0);
+}
#endif
diff --git a/src/skins/ui_skinned_button.c b/src/skins/ui_skinned_button.c
index 107e9ff..da43a24 100644
--- a/src/skins/ui_skinned_button.c
+++ b/src/skins/ui_skinned_button.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -18,489 +19,264 @@
* Audacious or using our public API to be a derived work.
*/
+#include "draw-compat.h"
#include "ui_skinned_button.h"
-#include "skins_cfg.h"
-#include "util.h"
-
-#include <math.h>
-
-#define UI_SKINNED_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ui_skinned_button_get_type(), UiSkinnedButtonPrivate))
-typedef struct _UiSkinnedButtonPrivate UiSkinnedButtonPrivate;
-
-enum {
- PRESSED,
- RELEASED,
- CLICKED,
- DOUBLED,
- LAST_SIGNAL
-};
-
-struct _UiSkinnedButtonPrivate {
- //Skinned part
- GdkGC *gc;
- gint w;
- gint h;
- SkinPixmapId skin_index1;
- SkinPixmapId skin_index2;
- gboolean scaled;
- gint move_x, move_y;
-
- gint nx, ny, px, py;
- //Toogle button needs also those
- gint pnx, pny, ppx, ppy;
-};
-
-
-static GtkWidgetClass *parent_class = NULL;
-static void ui_skinned_button_class_init(UiSkinnedButtonClass *klass);
-static void ui_skinned_button_init(UiSkinnedButton *button);
-static void ui_skinned_button_destroy(GtkObject *object);
-static void ui_skinned_button_realize(GtkWidget *widget);
-static void ui_skinned_button_unrealize(GtkWidget *widget);
-static void ui_skinned_button_map(GtkWidget *widget);
-static void ui_skinned_button_unmap(GtkWidget *widget);
-static void ui_skinned_button_size_request(GtkWidget *widget, GtkRequisition *requisition);
-static gint ui_skinned_button_expose(GtkWidget *widget,GdkEventExpose *event);
-
-static void ui_skinned_button_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
-static void ui_skinned_button_update_state(UiSkinnedButton *button);
-
-static guint button_signals[LAST_SIGNAL] = { 0 };
-static gint ui_skinned_button_button_press(GtkWidget *widget, GdkEventButton *event);
-static gint ui_skinned_button_button_release(GtkWidget *widget, GdkEventButton *event);
-static void button_pressed(UiSkinnedButton *button);
-static void button_released(UiSkinnedButton *button);
-static void ui_skinned_button_pressed(UiSkinnedButton *button);
-static void ui_skinned_button_released(UiSkinnedButton *button);
-static void ui_skinned_button_clicked(UiSkinnedButton *button);
-static void ui_skinned_button_set_pressed (UiSkinnedButton *button, gboolean pressed);
-
-static void ui_skinned_button_toggle_scaled(UiSkinnedButton *button);
-
-static gint ui_skinned_button_enter_notify(GtkWidget *widget, GdkEventCrossing *event);
-static gint ui_skinned_button_leave_notify(GtkWidget *widget, GdkEventCrossing *event);
-
-GType ui_skinned_button_get_type() {
- static GType button_type = 0;
- if (!button_type) {
- static const GTypeInfo button_info = {
- sizeof (UiSkinnedButtonClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_button_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedButton),
- 0,
- (GInstanceInitFunc) ui_skinned_button_init,
- };
- button_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedButton", &button_info, 0);
- }
-
- return button_type;
-}
-
-static void ui_skinned_button_class_init (UiSkinnedButtonClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_button_destroy;
-
- widget_class->realize = ui_skinned_button_realize;
- widget_class->unrealize = ui_skinned_button_unrealize;
- widget_class->map = ui_skinned_button_map;
- widget_class->unmap = ui_skinned_button_unmap;
- widget_class->expose_event = ui_skinned_button_expose;
- widget_class->size_request = ui_skinned_button_size_request;
- widget_class->size_allocate = ui_skinned_button_size_allocate;
- widget_class->button_press_event = ui_skinned_button_button_press;
- widget_class->button_release_event = ui_skinned_button_button_release;
- widget_class->enter_notify_event = ui_skinned_button_enter_notify;
- widget_class->leave_notify_event = ui_skinned_button_leave_notify;
-
- klass->pressed = button_pressed;
- klass->released = button_released;
- klass->clicked = NULL;
- klass->scaled = ui_skinned_button_toggle_scaled;
-
- button_signals[PRESSED] =
- g_signal_new ("pressed", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (UiSkinnedButtonClass, pressed), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- button_signals[RELEASED] =
- g_signal_new ("released", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (UiSkinnedButtonClass, released), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- button_signals[CLICKED] =
- g_signal_new ("clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedButtonClass, clicked), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- button_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedButtonClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- g_type_class_add_private (gobject_class, sizeof (UiSkinnedButtonPrivate));
-}
-
-static void ui_skinned_button_init (UiSkinnedButton *button) {
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
- button->inside = FALSE;
- button->type = TYPE_NOT_SET;
- priv->move_x = 0;
- priv->move_y = 0;
- button->event_window = NULL;
- GTK_WIDGET_SET_FLAGS (button, GTK_NO_WINDOW);
-}
-
-static void ui_skinned_button_destroy (GtkObject *object) {
- UiSkinnedButton *button;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_BUTTON (object));
-
- button = UI_SKINNED_BUTTON(object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
+enum {BUTTON_TYPE_NORMAL, BUTTON_TYPE_TOGGLE, BUTTON_TYPE_SMALL};
-static void ui_skinned_button_realize (GtkWidget *widget) {
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_BUTTON(widget));
+typedef struct {
+ gint type;
+ gint w, h;
+ gint nx, ny, px, py;
+ gint pnx, pny, ppx, ppy;
+ SkinPixmapId si1, si2;
+ gboolean pressed, rpressed, active;
+ ButtonCB on_press, on_release, on_rpress, on_rrelease;
+} ButtonData;
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
+DRAW_FUNC_BEGIN (button_draw)
+ ButtonData * data = g_object_get_data ((GObject *) wid, "buttondata");
+ g_return_val_if_fail (data, FALSE);
- UiSkinnedButton *button = UI_SKINNED_BUTTON (widget);
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK;
-
- attributes.wclass = GDK_INPUT_ONLY;
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- button->event_window = gdk_window_new (widget->window, &attributes, attributes_mask);
-
- gdk_window_set_user_data(button->event_window, widget);
-}
-
-static void ui_skinned_button_unrealize (GtkWidget *widget) {
- UiSkinnedButton *button = UI_SKINNED_BUTTON (widget);
-
- if ( button->event_window != NULL )
+ switch (data->type)
{
- gdk_window_set_user_data( button->event_window , NULL );
- gdk_window_destroy( button->event_window );
- button->event_window = NULL;
+ case BUTTON_TYPE_NORMAL:
+ if (data->pressed)
+ skin_draw_pixbuf (cr, data->si2, data->px, data->py, 0, 0, data->w, data->h);
+ else
+ skin_draw_pixbuf (cr, data->si1, data->nx, data->ny, 0, 0, data->w, data->h);
+ break;
+ case BUTTON_TYPE_TOGGLE:
+ if (data->active)
+ {
+ if (data->pressed)
+ skin_draw_pixbuf (cr, data->si2, data->ppx, data->ppy, 0, 0, data->w, data->h);
+ else
+ skin_draw_pixbuf (cr, data->si1, data->pnx, data->pny, 0, 0, data->w, data->h);
+ }
+ else
+ {
+ if (data->pressed)
+ skin_draw_pixbuf (cr, data->si2, data->px, data->py, 0, 0, data->w, data->h);
+ else
+ skin_draw_pixbuf (cr, data->si1, data->nx, data->ny, 0, 0, data->w, data->h);
+ }
+ break;
}
+DRAW_FUNC_END
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void ui_skinned_button_map (GtkWidget *widget)
-{
- UiSkinnedButton *button = UI_SKINNED_BUTTON (widget);
-
- if (button->event_window != NULL)
- gdk_window_show (button->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
-}
-
-static void ui_skinned_button_unmap (GtkWidget *widget)
+static gboolean button_press (GtkWidget * button, GdkEventButton * event)
{
- UiSkinnedButton *button = UI_SKINNED_BUTTON (widget);
-
- if (button->event_window != NULL)
- gdk_window_hide (button->event_window);
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_val_if_fail (data, FALSE);
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
-
-static void ui_skinned_button_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE(widget);
- requisition->width = priv->w*(priv->scaled ? config.scale_factor : 1);
- requisition->height = priv->h*(priv->scaled ? config.scale_factor : 1);
-}
-
-static void ui_skinned_button_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedButton *button = UI_SKINNED_BUTTON (widget);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
- widget->allocation = *allocation;
- widget->allocation.x = ceil(widget->allocation.x*(priv->scaled ? config.scale_factor : 1));
- widget->allocation.y = ceil(widget->allocation.y*(priv->scaled ? config.scale_factor : 1));
-
- if (GTK_WIDGET_REALIZED (widget))
+ /* pass events through to the parent widget only if neither the press nor
+ * release signals are connected; sending one and not the other causes
+ * problems (in particular with dragging windows around) */
+ if (event->button == 1 && (data->on_press || data->on_release))
{
- if ( button->event_window != NULL )
- gdk_window_move_resize(button->event_window, ceil(allocation->x*(priv->scaled ? config.scale_factor : 1)), ceil(allocation->y*(priv->scaled ? config.scale_factor : 1)), allocation->width, allocation->height);
- else
- gdk_window_move_resize(widget->window, ceil(allocation->x*(priv->scaled ? config.scale_factor : 1)), ceil(allocation->y*(priv->scaled ? config.scale_factor : 1)), allocation->width, allocation->height);
+ data->pressed = TRUE;
+ if (data->on_press)
+ data->on_press (button, event);
}
+ else if (event->button == 3 && (data->on_rpress || data->on_rrelease))
+ {
+ data->rpressed = TRUE;
+ if (data->on_rpress)
+ data->on_rpress (button, event);
+ }
+ else
+ return FALSE;
- if (button->x + priv->move_x == ceil(widget->allocation.x/(priv->scaled ? config.scale_factor : 1)))
- priv->move_x = 0;
- if (button->y + priv->move_y == ceil(widget->allocation.y/(priv->scaled ? config.scale_factor : 1)))
- priv->move_y = 0;
+ if (data->type != BUTTON_TYPE_SMALL)
+ gtk_widget_queue_draw (button);
- button->x = ceil(widget->allocation.x/(priv->scaled ? config.scale_factor : 1));
- button->y = ceil(widget->allocation.y/(priv->scaled ? config.scale_factor : 1));
+ return TRUE;
}
-static gboolean ui_skinned_button_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedButton *button = UI_SKINNED_BUTTON (widget);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
- g_return_val_if_fail (priv->w > 0 && priv->h > 0, FALSE);
-
- //TYPE_SMALL doesn't have its own face
- if (button->type == TYPE_SMALL || button->type == TYPE_NOT_SET)
- return FALSE;
+static gboolean button_release (GtkWidget * button, GdkEventButton * event)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_val_if_fail (data, FALSE);
- GdkPixbuf *obj;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, priv->w, priv->h);
- gdk_pixbuf_fill(obj, 0x00000000); /* fill with alpha */
-
- switch (button->type) {
- case TYPE_PUSH:
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- button->pressed ? priv->skin_index2 : priv->skin_index1,
- button->pressed ? priv->px : priv->nx,
- button->pressed ? priv->py : priv->ny,
- 0, 0, priv->w, priv->h);
- break;
- case TYPE_TOGGLE:
- if (button->inside)
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- button->pressed ? priv->skin_index2 : priv->skin_index1,
- button->pressed ? priv->ppx : priv->pnx,
- button->pressed ? priv->ppy : priv->pny,
- 0, 0, priv->w, priv->h);
- else
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- button->pressed ? priv->skin_index2 : priv->skin_index1,
- button->pressed ? priv->px : priv->nx,
- button->pressed ? priv->py : priv->ny,
- 0, 0, priv->w, priv->h);
- break;
- default:
- break;
+ if (event->button == 1 && (data->on_press || data->on_release))
+ {
+ if (! data->pressed)
+ return TRUE;
+
+ data->pressed = FALSE;
+ if (data->type == BUTTON_TYPE_TOGGLE)
+ data->active = ! data->active;
+ if (data->on_release)
+ data->on_release (button, event);
}
+ else if (event->button == 3 && (data->on_rpress || data->on_rrelease))
+ {
+ if (! data->rpressed)
+ return TRUE;
- ui_skinned_widget_draw_with_coordinates(widget, obj, priv->w, priv->h,
- widget->allocation.x,
- widget->allocation.y,
- priv->scaled);
- g_object_unref(obj);
-
- return FALSE;
-}
-
-GtkWidget* ui_skinned_button_new () {
- UiSkinnedButton *button = g_object_new (ui_skinned_button_get_type (), NULL);
-
- return GTK_WIDGET(button);
-}
+ data->rpressed = FALSE;
+ if (data->on_rrelease)
+ data->on_rrelease (button, event);
+ }
+ else
+ return FALSE;
-void ui_skinned_push_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h, gint nx, gint ny, gint px, gint py, SkinPixmapId si) {
-
- UiSkinnedButton *sbutton = UI_SKINNED_BUTTON(button);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE(sbutton);
- priv->w = w;
- priv->h = h;
- sbutton->x = x;
- sbutton->y = y;
- priv->nx = nx;
- priv->ny = ny;
- priv->px = px;
- priv->py = py;
- sbutton->type = TYPE_PUSH;
- priv->skin_index1 = si;
- priv->skin_index2 = si;
- priv->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(button), sbutton->x, sbutton->y);
-}
+ if (data->type != BUTTON_TYPE_SMALL)
+ gtk_widget_queue_draw (button);
-void ui_skinned_toggle_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h, gint nx, gint ny, gint px, gint py, gint pnx, gint pny, gint ppx, gint ppy, SkinPixmapId si) {
-
- UiSkinnedButton *sbutton = UI_SKINNED_BUTTON(button);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE(sbutton);
- priv->w = w;
- priv->h = h;
- sbutton->x = x;
- sbutton->y = y;
- priv->nx = nx;
- priv->ny = ny;
- priv->px = px;
- priv->py = py;
- priv->pnx = pnx;
- priv->pny = pny;
- priv->ppx = ppx;
- priv->ppy = ppy;
- sbutton->type = TYPE_TOGGLE;
- priv->skin_index1 = si;
- priv->skin_index2 = si;
- priv->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(button), sbutton->x, sbutton->y);
+ return TRUE;
}
-void ui_skinned_small_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h) {
-
- UiSkinnedButton *sbutton = UI_SKINNED_BUTTON(button);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE(sbutton);
- priv->w = w;
- priv->h = h;
- sbutton->x = x;
- sbutton->y = y;
- sbutton->type = TYPE_SMALL;
- priv->scaled = FALSE;
+static gboolean leave_notify (GtkWidget * button, GdkEventCrossing * event)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_val_if_fail (data, FALSE);
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(button), sbutton->x, sbutton->y);
-}
+ if (data->pressed || data->rpressed)
+ {
+ data->pressed = FALSE;
+ data->rpressed = FALSE;
-static void button_pressed(UiSkinnedButton *button) {
- button->button_down = TRUE;
- ui_skinned_button_update_state(button);
-}
+ if (data->type != BUTTON_TYPE_SMALL)
+ gtk_widget_queue_draw (button);
+ }
-static void button_released(UiSkinnedButton *button) {
- if(button->hover && button->button_down) ui_skinned_button_clicked(button);
- button->button_down = FALSE;
- ui_skinned_button_update_state(button);
+ return TRUE;
}
-static void ui_skinned_button_update_state(UiSkinnedButton *button) {
- ui_skinned_button_set_pressed(button, button->button_down);
+static void button_destroy (GtkWidget * button)
+{
+ g_free (g_object_get_data ((GObject *) button, "buttondata"));
}
-static void ui_skinned_button_set_pressed (UiSkinnedButton *button, gboolean pressed) {
- if (pressed == button->pressed)
- return;
-
- button->pressed = pressed;
-
- if (widget_really_drawable ((GtkWidget *) button))
- ui_skinned_button_expose ((GtkWidget *) button, 0);
-}
+static GtkWidget * button_new_base (gint type, gint w, gint h)
+{
+ GtkWidget * button;
-static gboolean ui_skinned_button_button_press(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedButton * button = (UiSkinnedButton *) widget;
- UiSkinnedButtonPrivate * priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
- gint scale = priv->scaled ? config.scale_factor : 1;
-
- if (event->type == GDK_BUTTON_PRESS) {
- if (event->button == 1)
- ui_skinned_button_pressed (button);
- else if (event->button == 3) {
- event->x = event->x + button->x * scale;
- event->y = event->y + button->y * scale;
- return FALSE;
- }
+ if (type == BUTTON_TYPE_SMALL)
+ {
+ button = gtk_event_box_new ();
+ gtk_event_box_set_visible_window ((GtkEventBox *) button, FALSE);
}
-
- return TRUE;
+ else
+ button = gtk_drawing_area_new ();
+
+ gtk_widget_set_size_request (button, w, h);
+ gtk_widget_add_events (button, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK);
+
+ if (type != BUTTON_TYPE_SMALL)
+ DRAW_CONNECT (button, button_draw);
+
+ g_signal_connect (button, "button-press-event", (GCallback) button_press,
+ NULL);
+ g_signal_connect (button, "button-release-event", (GCallback)
+ button_release, NULL);
+ g_signal_connect (button, "leave-notify-event", (GCallback) leave_notify,
+ NULL);
+ g_signal_connect (button, "destroy", (GCallback) button_destroy, NULL);
+
+ ButtonData * data = g_malloc0 (sizeof (ButtonData));
+ data->type = type;
+ data->w = w;
+ data->h = h;
+ g_object_set_data ((GObject *) button, "buttondata", data);
+
+ return button;
}
-static gboolean ui_skinned_button_button_release(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedButton *button;
- if (event->button == 1) {
- button = UI_SKINNED_BUTTON(widget);
- ui_skinned_button_released(button);
- }
- return TRUE;
+GtkWidget * button_new (gint w, gint h, gint nx, gint ny, gint px, gint py,
+ SkinPixmapId si1, SkinPixmapId si2)
+{
+ GtkWidget * button = button_new_base (BUTTON_TYPE_NORMAL, w, h);
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_val_if_fail (data, NULL);
+
+ data->nx = nx;
+ data->ny = ny;
+ data->px = px;
+ data->py = py;
+ data->si1 = si1;
+ data->si2 = si2;
+
+ return button;
}
-static void ui_skinned_button_pressed(UiSkinnedButton *button) {
- g_return_if_fail(UI_SKINNED_IS_BUTTON(button));
- g_signal_emit(button, button_signals[PRESSED], 0);
+GtkWidget * button_new_toggle (gint w, gint h, gint nx, gint ny, gint px, gint
+ py, gint pnx, gint pny, gint ppx, gint ppy, SkinPixmapId si1, SkinPixmapId si2)
+{
+ GtkWidget * button = button_new_base (BUTTON_TYPE_TOGGLE, w, h);
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_val_if_fail (data, NULL);
+
+ data->nx = nx;
+ data->ny = ny;
+ data->px = px;
+ data->py = py;
+ data->pnx = pnx;
+ data->pny = pny;
+ data->ppx = ppx;
+ data->ppy = ppy;
+ data->si1 = si1;
+ data->si2 = si2;
+
+ return button;
}
-static void ui_skinned_button_released(UiSkinnedButton *button) {
- g_return_if_fail(UI_SKINNED_IS_BUTTON(button));
- g_signal_emit(button, button_signals[RELEASED], 0);
+GtkWidget * button_new_small (gint w, gint h)
+{
+ return button_new_base (BUTTON_TYPE_SMALL, w, h);
}
-static void ui_skinned_button_clicked(UiSkinnedButton *button) {
- g_return_if_fail(UI_SKINNED_IS_BUTTON(button));
- button->inside = !button->inside;
- g_signal_emit(button, button_signals[CLICKED], 0);
-}
+void button_on_press (GtkWidget * button, ButtonCB callback)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_if_fail (data);
-static gboolean ui_skinned_button_enter_notify(GtkWidget *widget, GdkEventCrossing *event) {
- UiSkinnedButton *button;
+ data->on_press = callback;
+}
- button = UI_SKINNED_BUTTON(widget);
- button->hover = TRUE;
- if(button->button_down) ui_skinned_button_set_pressed(button, TRUE);
+void button_on_release (GtkWidget * button, ButtonCB callback)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_if_fail (data);
- return FALSE;
+ data->on_release = callback;
}
-static gboolean ui_skinned_button_leave_notify(GtkWidget *widget, GdkEventCrossing *event) {
- UiSkinnedButton *button;
-
- button = UI_SKINNED_BUTTON (widget);
- button->hover = FALSE;
- if(button->button_down) ui_skinned_button_set_pressed(button, FALSE);
+void button_on_rpress (GtkWidget * button, ButtonCB callback)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_if_fail (data);
- return FALSE;
+ data->on_rpress = callback;
}
-static void ui_skinned_button_toggle_scaled(UiSkinnedButton *button) {
- GtkWidget *widget = GTK_WIDGET (button);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
- priv->scaled = !priv->scaled;
-
- gtk_widget_set_size_request(widget, priv->w*(priv->scaled ? config.scale_factor : 1), priv->h*(priv->scaled ? config.scale_factor : 1));
+void button_on_rrelease (GtkWidget * button, ButtonCB callback)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_if_fail (data);
- if (widget_really_drawable (widget))
- ui_skinned_button_expose (widget, 0);
+ data->on_rrelease = callback;
}
-void ui_skinned_button_set_skin_index2(GtkWidget *button, SkinPixmapId si) {
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
- priv->skin_index2 = si;
-}
+gboolean button_get_active (GtkWidget * button)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_val_if_fail (data && data->type == BUTTON_TYPE_TOGGLE, FALSE);
-void ui_skinned_button_move_relative(GtkWidget *widget, gint x, gint y) {
- UiSkinnedButton *button = UI_SKINNED_BUTTON(widget);
- UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE(widget);
- priv->move_x += x;
- priv->move_y += y;
- gtk_fixed_move(GTK_FIXED(gtk_widget_get_parent(widget)), widget,
- button->x+priv->move_x, button->y+priv->move_y);
+ return data->active;
}
-void ui_skinned_button_set_inside(GtkWidget *widget, gboolean inside) {
- UiSkinnedButton * button = (UiSkinnedButton *) widget;
+void button_set_active (GtkWidget * button, gboolean active)
+{
+ ButtonData * data = g_object_get_data ((GObject *) button, "buttondata");
+ g_return_if_fail (data && data->type == BUTTON_TYPE_TOGGLE);
- if (inside == button->inside)
+ if (data->active == active)
return;
- button->inside = inside;
-
- if (widget_really_drawable ((GtkWidget *) button))
- ui_skinned_button_expose ((GtkWidget *) button, 0);
+ data->active = active;
+ gtk_widget_queue_draw (button);
}
diff --git a/src/skins/ui_skinned_button.h b/src/skins/ui_skinned_button.h
index 9980980..8b992a5 100644
--- a/src/skins/ui_skinned_button.h
+++ b/src/skins/ui_skinned_button.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -18,54 +19,28 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_BUTTON_H
-#define AUDACIOUS_UI_SKINNED_BUTTON_H
+#ifndef SKINS_UI_SKINNED_BUTTON_H
+#define SKINS_UI_SKINNED_BUTTON_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-
-#define UI_SKINNED_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ui_skinned_button_get_type(), UiSkinnedButton))
-#define UI_SKINNED_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ui_skinned_button_get_type(), UiSkinnedButtonClass))
-#define UI_SKINNED_IS_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ui_skinned_button_get_type()))
-typedef struct _UiSkinnedButton UiSkinnedButton;
-typedef struct _UiSkinnedButtonClass UiSkinnedButtonClass;
-
-enum {
- TYPE_NOT_SET,
- TYPE_PUSH,
- TYPE_TOGGLE,
- TYPE_SMALL
-};
+#include "ui_skin.h"
-struct _UiSkinnedButton {
- GtkWidget widget;
+typedef void (* ButtonCB) (GtkWidget * button, GdkEventButton * event);
- GdkWindow *event_window;
- gboolean button_down;
- gboolean pressed;
- gboolean hover;
- gboolean inside;
- gint type;
- gint x, y;
-};
+GtkWidget * button_new (gint w, gint h, gint nx, gint ny, gint px,
+ gint py, SkinPixmapId si1, SkinPixmapId si2);
+GtkWidget * button_new_toggle (gint w, gint h, gint nx, gint ny,
+ gint px, gint py, gint pnx, gint pny, gint ppx, gint ppy, SkinPixmapId si1,
+ SkinPixmapId si2);
+GtkWidget * button_new_small (gint w, gint h);
-struct _UiSkinnedButtonClass {
- GtkWidgetClass parent_class;
- void (* pressed) (UiSkinnedButton *button);
- void (* released) (UiSkinnedButton *button);
- void (* clicked) (UiSkinnedButton *button);
- void (* right_clicked) (UiSkinnedButton *button);
- void (* scaled) (UiSkinnedButton *button);
-};
+void button_on_press (GtkWidget * button, ButtonCB callback);
+void button_on_release (GtkWidget * button, ButtonCB callback);
+void button_on_rpress (GtkWidget * button, ButtonCB callback);
+void button_on_rrelease (GtkWidget * button, ButtonCB callback);
-GType ui_skinned_button_get_type(void) G_GNUC_CONST;
-GtkWidget* ui_skinned_button_new();
-void ui_skinned_push_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h, gint nx, gint ny, gint px, gint py, SkinPixmapId si);
-void ui_skinned_toggle_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h, gint nx, gint ny, gint px, gint py, gint pnx, gint pny, gint ppx, gint ppy, SkinPixmapId si);
-void ui_skinned_small_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h);
-void ui_skinned_button_set_skin_index2(GtkWidget *button, SkinPixmapId si);
-void ui_skinned_button_move_relative(GtkWidget *button, gint x, gint y);
-void ui_skinned_button_set_inside(GtkWidget *widget, gboolean inside);
+gboolean button_get_active (GtkWidget * button);
+void button_set_active (GtkWidget * button, gboolean active);
-#endif /* AUDACIOUS_UI_SKINNED_BUTTON_H */
+#endif
diff --git a/src/skins/ui_skinned_equalizer_graph.c b/src/skins/ui_skinned_equalizer_graph.c
index 2ab99a7..3b338ad 100644
--- a/src/skins/ui_skinned_equalizer_graph.c
+++ b/src/skins/ui_skinned_equalizer_graph.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -21,149 +22,28 @@
* along with this program; If not, see <http://www.gnu.org/licenses>.
*/
+#include <audacious/misc.h>
+
+#include "draw-compat.h"
#include "ui_skin.h"
#include "ui_skinned_equalizer_graph.h"
-#include "skins_cfg.h"
-#include "util.h"
-
-#include <audacious/audconfig.h>
-
-#define UI_TYPE_SKINNED_EQUALIZER_GRAPH (ui_skinned_equalizer_graph_get_type())
-
-enum {
- DOUBLED,
- LAST_SIGNAL
-};
-
-static void ui_skinned_equalizer_graph_class_init (UiSkinnedEqualizerGraphClass *klass);
-static void ui_skinned_equalizer_graph_init (UiSkinnedEqualizerGraph *equalizer_graph);
-static void ui_skinned_equalizer_graph_destroy (GtkObject *object);
-static void ui_skinned_equalizer_graph_realize (GtkWidget *widget);
-static void ui_skinned_equalizer_graph_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_equalizer_graph_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_equalizer_graph_expose (GtkWidget *widget, GdkEventExpose *event);
-static void ui_skinned_equalizer_graph_toggle_scaled (UiSkinnedEqualizerGraph *equalizer_graph);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint equalizer_graph_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_equalizer_graph_get_type() {
- static GType equalizer_graph_type = 0;
- if (!equalizer_graph_type) {
- static const GTypeInfo equalizer_graph_info = {
- sizeof (UiSkinnedEqualizerGraphClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_equalizer_graph_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedEqualizerGraph),
- 0,
- (GInstanceInitFunc) ui_skinned_equalizer_graph_init,
- };
- equalizer_graph_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedEqualizerGraph", &equalizer_graph_info, 0);
- }
-
- return equalizer_graph_type;
-}
-
-static void ui_skinned_equalizer_graph_class_init(UiSkinnedEqualizerGraphClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_equalizer_graph_destroy;
-
- widget_class->realize = ui_skinned_equalizer_graph_realize;
- widget_class->expose_event = ui_skinned_equalizer_graph_expose;
- widget_class->size_request = ui_skinned_equalizer_graph_size_request;
- widget_class->size_allocate = ui_skinned_equalizer_graph_size_allocate;
-
- klass->scaled = ui_skinned_equalizer_graph_toggle_scaled;
- equalizer_graph_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedEqualizerGraphClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void ui_skinned_equalizer_graph_init(UiSkinnedEqualizerGraph *equalizer_graph) {
- equalizer_graph->width = 113;
- equalizer_graph->height = 19;
-
- GTK_WIDGET_SET_FLAGS(equalizer_graph, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_equalizer_graph_new(GtkWidget *fixed, gint x, gint y) {
- UiSkinnedEqualizerGraph *equalizer_graph = g_object_new (ui_skinned_equalizer_graph_get_type (), NULL);
-
- equalizer_graph->x = x;
- equalizer_graph->y = y;
- equalizer_graph->skin_index = SKIN_EQMAIN;
- equalizer_graph->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(equalizer_graph), equalizer_graph->x, equalizer_graph->y);
-
- return GTK_WIDGET(equalizer_graph);
-}
-
-static void ui_skinned_equalizer_graph_destroy(GtkObject *object) {
- UiSkinnedEqualizerGraph *equalizer_graph;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_EQUALIZER_GRAPH (object));
-
- equalizer_graph = UI_SKINNED_EQUALIZER_GRAPH (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_skinned_equalizer_graph_realize(GtkWidget *widget) {
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-}
-
-static void ui_skinned_equalizer_graph_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedEqualizerGraph *equalizer_graph = UI_SKINNED_EQUALIZER_GRAPH(widget);
-
- requisition->width = equalizer_graph->width*(equalizer_graph->scaled ? config.scale_factor : 1);
- requisition->height = equalizer_graph->height*(equalizer_graph->scaled ? config.scale_factor : 1);
-}
-
-static void ui_skinned_equalizer_graph_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedEqualizerGraph *equalizer_graph = UI_SKINNED_EQUALIZER_GRAPH (widget);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (equalizer_graph->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (equalizer_graph->scaled ? config.scale_factor : 1);
-
- equalizer_graph->x = widget->allocation.x/(equalizer_graph->scaled ? config.scale_factor : 1);
- equalizer_graph->y = widget->allocation.y/(equalizer_graph->scaled ? config.scale_factor : 1);
-}
-
-void
-init_spline(gfloat * x, gfloat * y, gint n, gfloat * y2)
+static void init_spline (const gdouble * x, const gdouble * y, gint n, gdouble * y2)
{
gint i, k;
- gfloat p, qn, sig, un, *u;
+ gdouble p, qn, sig, un, *u;
- u = (gfloat *) g_malloc(n * sizeof(gfloat));
+ u = (gdouble *) g_malloc(n * sizeof(gdouble));
y2[0] = u[0] = 0.0;
for (i = 1; i < n - 1; i++) {
- sig = ((gfloat) x[i] - x[i - 1]) / ((gfloat) x[i + 1] - x[i - 1]);
+ sig = ((gdouble) x[i] - x[i - 1]) / ((gdouble) x[i + 1] - x[i - 1]);
p = sig * y2[i - 1] + 2.0;
y2[i] = (sig - 1.0) / p;
u[i] =
- (((gfloat) y[i + 1] - y[i]) / (x[i + 1] - x[i])) -
- (((gfloat) y[i] - y[i - 1]) / (x[i] - x[i - 1]));
+ (((gdouble) y[i + 1] - y[i]) / (x[i + 1] - x[i])) -
+ (((gdouble) y[i] - y[i - 1]) / (x[i] - x[i - 1]));
u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
}
qn = un = 0.0;
@@ -174,11 +54,11 @@ init_spline(gfloat * x, gfloat * y, gint n, gfloat * y2)
g_free(u);
}
-gfloat
-eval_spline(gfloat xa[], gfloat ya[], gfloat y2a[], gint n, gfloat x)
+gdouble eval_spline (const gdouble * xa, const gdouble * ya, const gdouble * y2a,
+ gint n, gdouble x)
{
gint klo, khi, k;
- gfloat h, b, a;
+ gdouble h, b, a;
klo = 0;
khi = n - 1;
@@ -197,94 +77,67 @@ eval_spline(gfloat xa[], gfloat ya[], gfloat y2a[], gint n, gfloat x)
(b * b * b - b) * y2a[khi]) * (h * h) / 6.0);
}
-static gboolean ui_skinned_equalizer_graph_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedEqualizerGraph *equalizer_graph = UI_SKINNED_EQUALIZER_GRAPH (widget);
- g_return_val_if_fail (equalizer_graph->width > 0 && equalizer_graph->height > 0, FALSE);
+DRAW_FUNC_BEGIN (eq_graph_draw)
+ static const gdouble x[10] = {0, 11, 23, 35, 47, 59, 71, 83, 97, 109};
- GdkPixbuf *obj = NULL;
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 294, 0, 0, 113, 19);
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 314, 0, 9 + (aud_get_double (NULL,
+ "equalizer_preamp") * 9 + EQUALIZER_MAX_GAIN / 2) / EQUALIZER_MAX_GAIN, 113, 1);
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, equalizer_graph->width, equalizer_graph->height);
+ guint32 cols[19];
+ skin_get_eq_spline_colors(active_skin, cols);
- guint32 cols[19], rowstride;
- gint i, y, ymin, ymax, py = 0;
- gfloat x[] = { 0, 11, 23, 35, 47, 59, 71, 83, 97, 109 }, yf[10];
- guchar* pixels, *p;
- gint n_channels;
- /*
- * This avoids the init_spline() function to be inlined.
- * Inlining the function caused troubles when compiling with
- * `-O' (at least on FreeBSD).
- */
- void (*__init_spline) (gfloat *, gfloat *, gint, gfloat *) = init_spline;
+ gdouble bands[AUD_EQUALIZER_NBANDS];
+ aud_eq_get_bands (bands);
- skin_draw_pixbuf(widget, aud_active_skin, obj, equalizer_graph->skin_index, 0, 294, 0, 0,
- equalizer_graph->width, equalizer_graph->height);
- skin_draw_pixbuf(widget, aud_active_skin, obj, equalizer_graph->skin_index, 0, 314,
- 0, 9 + ((aud_cfg->equalizer_preamp * 9) / 20),
- equalizer_graph->width, 1);
+ gdouble yf[10];
+ init_spline (x, bands, 10, yf);
- skin_get_eq_spline_colors(aud_active_skin, cols);
+ /* now draw a pixelated line with vector graphics ... -- jlindgren */
+ gint py = 0;
+ for (gint i = 0; i < 109; i ++)
+ {
+ gint y = 9.5 - eval_spline (x, bands, yf, 10, i) * 9 / EQUALIZER_MAX_GAIN;
+ y = CLAMP (y, 0, 18);
- __init_spline(x, aud_cfg->equalizer_bands, 10, yf);
- for (i = 0; i < 109; i++) {
- y = 9 -
- (gint) ((eval_spline(x, aud_cfg->equalizer_bands, yf, 10, i) *
- 9.0) / EQUALIZER_MAX_GAIN);
- if (y < 0)
- y = 0;
- if (y > 18)
- y = 18;
if (!i)
py = y;
- if (y < py) {
- ymin = y;
- ymax = py;
- }
- else {
- ymin = py;
+
+ gint ymin, ymax;
+
+ if (y > py)
+ {
+ ymin = py + 1;
ymax = y;
}
- py = y;
+ else if (y < py)
+ {
+ ymin = y;
+ ymax = py - 1;
+ }
+ else
+ ymin = ymax = y;
- pixels = gdk_pixbuf_get_pixels(obj);
- rowstride = gdk_pixbuf_get_rowstride(obj);
- n_channels = gdk_pixbuf_get_n_channels(obj);
+ py = y;
for (y = ymin; y <= ymax; y++)
{
- p = pixels + (y * rowstride) + (( i + 2) * n_channels);
- p[0] = (cols[y] & 0xff0000) >> 16;
- p[1] = (cols[y] & 0x00ff00) >> 8;
- p[2] = (cols[y] & 0x0000ff);
- /* do we really need to treat the alpha channel? */
- /*if (n_channels == 4)
- p[3] = cols[y] >> 24;*/
+ cairo_rectangle (cr, i + 2, y, 1, 1);
+ set_cairo_color (cr, cols[y]);
+ cairo_fill (cr);
}
}
+DRAW_FUNC_END
- ui_skinned_widget_draw_with_coordinates(widget, obj, equalizer_graph->width, equalizer_graph->height,
- widget->allocation.x,
- widget->allocation.y,
- equalizer_graph->scaled);
-
- g_object_unref(obj);
-
- return FALSE;
-}
-
-static void ui_skinned_equalizer_graph_toggle_scaled(UiSkinnedEqualizerGraph *equalizer_graph) {
- GtkWidget *widget = GTK_WIDGET (equalizer_graph);
-
- equalizer_graph->scaled = !equalizer_graph->scaled;
- gtk_widget_set_size_request(widget, equalizer_graph->width*(equalizer_graph->scaled ? config.scale_factor : 1),
- equalizer_graph->height*(equalizer_graph->scaled ? config.scale_factor : 1));
-
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_graph_expose (widget, NULL);
+GtkWidget * eq_graph_new (void)
+{
+ GtkWidget * graph = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (graph, 113, 19);
+ DRAW_CONNECT (graph, eq_graph_draw);
+ return graph;
}
-void ui_skinned_equalizer_graph_update (GtkWidget * graph)
+void eq_graph_update (GtkWidget * graph)
{
- if (widget_really_drawable (graph))
- ui_skinned_equalizer_graph_expose (graph, NULL);
+ gtk_widget_queue_draw (graph);
}
diff --git a/src/skins/ui_skinned_equalizer_graph.h b/src/skins/ui_skinned_equalizer_graph.h
index c9bcacb..f26f1f0 100644
--- a/src/skins/ui_skinned_equalizer_graph.h
+++ b/src/skins/ui_skinned_equalizer_graph.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,41 +25,12 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_EQUALIZER_GRAPH_H
-#define AUDACIOUS_UI_SKINNED_EQUALIZER_GRAPH_H
+#ifndef SKINS_UI_SKINNED_EQUALIZER_GRAPH_H
+#define SKINS_UI_SKINNED_EQUALIZER_GRAPH_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_EQUALIZER_GRAPH(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_equalizer_graph_get_type (), UiSkinnedEqualizerGraph)
-#define UI_SKINNED_EQUALIZER_GRAPH_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_equalizer_graph_get_type (), UiSkinnedEqualizerGraphClass)
-#define UI_SKINNED_IS_EQUALIZER_GRAPH(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_equalizer_graph_get_type ())
-
-typedef struct _UiSkinnedEqualizerGraph UiSkinnedEqualizerGraph;
-typedef struct _UiSkinnedEqualizerGraphClass UiSkinnedEqualizerGraphClass;
-
-struct _UiSkinnedEqualizerGraph {
- GtkWidget widget;
+GtkWidget * eq_graph_new ();
+void eq_graph_update (GtkWidget * graph);
- gint x, y, width, height;
- SkinPixmapId skin_index;
- gboolean scaled;
-};
-
-struct _UiSkinnedEqualizerGraphClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSkinnedEqualizerGraph *eq_graph);
-};
-
-GtkWidget* ui_skinned_equalizer_graph_new(GtkWidget *fixed, gint x, gint y);
-void ui_skinned_equalizer_graph_update (GtkWidget * graph);
-
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_EQUALIZER_GRAPH_H */
diff --git a/src/skins/ui_skinned_equalizer_slider.c b/src/skins/ui_skinned_equalizer_slider.c
index d254eff..5522287 100644
--- a/src/skins/ui_skinned_equalizer_slider.c
+++ b/src/skins/ui_skinned_equalizer_slider.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -21,428 +22,171 @@
* along with this program; If not, see <http://www.gnu.org/licenses>.
*/
-#include "config.h"
-
#include <audacious/i18n.h>
+#include <audacious/types.h>
-#include "ui_skin.h"
+#include "config.h"
+#include "draw-compat.h"
#include "ui_equalizer.h"
#include "ui_main.h"
-#include "skins_cfg.h"
+#include "ui_skin.h"
#include "ui_skinned_equalizer_slider.h"
-#include "util.h"
-
-#define UI_TYPE_SKINNED_EQUALIZER_SLIDER (ui_skinned_equalizer_slider_get_type())
-#define UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), UI_TYPE_SKINNED_EQUALIZER_SLIDER, UiSkinnedEqualizerSliderPrivate))
-typedef struct _UiSkinnedEqualizerSliderPrivate UiSkinnedEqualizerSliderPrivate;
-
-enum {
- DOUBLED,
- LAST_SIGNAL
-};
-
-struct _UiSkinnedEqualizerSliderPrivate {
- SkinPixmapId skin_index;
- gboolean scaled;
- gint position;
- gint width, height;
- gboolean pressed;
- gint drag_y;
- gfloat value; /* store gain as is to prevent truncation --asphyx */
-};
-
-static void ui_skinned_equalizer_slider_class_init (UiSkinnedEqualizerSliderClass *klass);
-static void ui_skinned_equalizer_slider_init (UiSkinnedEqualizerSlider *equalizer_slider);
-static void ui_skinned_equalizer_slider_destroy (GtkObject *object);
-static void ui_skinned_equalizer_slider_realize (GtkWidget *widget);
-static void ui_skinned_equalizer_slider_unrealize (GtkWidget *widget);
-static void ui_skinned_equalizer_slider_map (GtkWidget *widget);
-static void ui_skinned_equalizer_slider_unmap (GtkWidget *widget);
-static void ui_skinned_equalizer_slider_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_equalizer_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_equalizer_slider_expose (GtkWidget *widget, GdkEventExpose *event);
-static gboolean ui_skinned_equalizer_slider_button_press (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_equalizer_slider_button_release (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_equalizer_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-static gboolean ui_skinned_equalizer_slider_scroll (GtkWidget *widget, GdkEventScroll *event);
-static void ui_skinned_equalizer_slider_toggle_scaled (UiSkinnedEqualizerSlider *equalizer_slider);
-void ui_skinned_equalizer_slider_set_mainwin_text (UiSkinnedEqualizerSlider * es);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint equalizer_slider_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_equalizer_slider_get_type() {
- static GType equalizer_slider_type = 0;
- if (!equalizer_slider_type) {
- static const GTypeInfo equalizer_slider_info = {
- sizeof (UiSkinnedEqualizerSliderClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_equalizer_slider_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedEqualizerSlider),
- 0,
- (GInstanceInitFunc) ui_skinned_equalizer_slider_init,
- };
- equalizer_slider_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedEqualizerSlider", &equalizer_slider_info, 0);
- }
-
- return equalizer_slider_type;
-}
-
-static void ui_skinned_equalizer_slider_class_init(UiSkinnedEqualizerSliderClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_equalizer_slider_destroy;
-
- widget_class->realize = ui_skinned_equalizer_slider_realize;
- widget_class->unrealize = ui_skinned_equalizer_slider_unrealize;
- widget_class->map = ui_skinned_equalizer_slider_map;
- widget_class->unmap = ui_skinned_equalizer_slider_unmap;
- widget_class->expose_event = ui_skinned_equalizer_slider_expose;
- widget_class->size_request = ui_skinned_equalizer_slider_size_request;
- widget_class->size_allocate = ui_skinned_equalizer_slider_size_allocate;
- widget_class->button_press_event = ui_skinned_equalizer_slider_button_press;
- widget_class->button_release_event = ui_skinned_equalizer_slider_button_release;
- widget_class->motion_notify_event = ui_skinned_equalizer_slider_motion_notify;
- widget_class->scroll_event = ui_skinned_equalizer_slider_scroll;
-
- klass->scaled = ui_skinned_equalizer_slider_toggle_scaled;
-
- equalizer_slider_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedEqualizerSliderClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- g_type_class_add_private (gobject_class, sizeof (UiSkinnedEqualizerSliderPrivate));
-}
-
-static void ui_skinned_equalizer_slider_init(UiSkinnedEqualizerSlider *equalizer_slider) {
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(equalizer_slider);
- priv->pressed = FALSE;
-
- equalizer_slider->event_window = NULL;
- GTK_WIDGET_SET_FLAGS(equalizer_slider, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_equalizer_slider_new(GtkWidget *fixed, gint x, gint y) {
- UiSkinnedEqualizerSlider *es = g_object_new (ui_skinned_equalizer_slider_get_type (), NULL);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(es);
-
- es->x = x;
- es->y = y;
- priv->width = 14;
- priv->height = 63;
- priv->skin_index = SKIN_EQMAIN;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(es), es->x, es->y);
-
- return GTK_WIDGET(es);
-}
-
-static void ui_skinned_equalizer_slider_destroy(GtkObject *object) {
- UiSkinnedEqualizerSlider *equalizer_slider;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER (object));
-
- equalizer_slider = UI_SKINNED_EQUALIZER_SLIDER (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-static void ui_skinned_equalizer_slider_realize(GtkWidget *widget) {
- UiSkinnedEqualizerSlider *equalizer_slider;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER(widget));
-
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
- equalizer_slider = UI_SKINNED_EQUALIZER_SLIDER(widget);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK;
-
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- equalizer_slider->event_window = gdk_window_new(widget->parent->window, &attributes, attributes_mask);
-
- gdk_window_set_user_data(equalizer_slider->event_window, widget);
-}
-
-static void ui_skinned_equalizer_slider_unrealize(GtkWidget *widget) {
- UiSkinnedEqualizerSlider *equalizer_slider = UI_SKINNED_EQUALIZER_SLIDER(widget);
-
- if ( equalizer_slider->event_window != NULL )
- {
- gdk_window_set_user_data( equalizer_slider->event_window , NULL );
- gdk_window_destroy( equalizer_slider->event_window );
- equalizer_slider->event_window = NULL;
- }
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void ui_skinned_equalizer_slider_map (GtkWidget *widget)
-{
- UiSkinnedEqualizerSlider *equalizer_slider = UI_SKINNED_EQUALIZER_SLIDER(widget);
-
- if (equalizer_slider->event_window != NULL)
- gdk_window_show (equalizer_slider->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
-}
-
-static void ui_skinned_equalizer_slider_unmap (GtkWidget *widget)
-{
- UiSkinnedEqualizerSlider *equalizer_slider = UI_SKINNED_EQUALIZER_SLIDER(widget);
-
- if (equalizer_slider->event_window != NULL)
- gdk_window_hide (equalizer_slider->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
+typedef struct {
+ gchar * name;
+ gint pos;
+ gfloat val;
+ gboolean pressed;
+} EqSliderData;
-static void ui_skinned_equalizer_slider_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(widget);
+DRAW_FUNC_BEGIN (eq_slider_draw)
+ EqSliderData * data = g_object_get_data ((GObject *) wid, "eqsliderdata");
+ g_return_val_if_fail (data, FALSE);
- requisition->width = priv->width*(priv->scaled ? config.scale_factor : 1);
- requisition->height = priv->height*(priv->scaled ? config.scale_factor : 1);
-}
-
-static void ui_skinned_equalizer_slider_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedEqualizerSlider *equalizer_slider = UI_SKINNED_EQUALIZER_SLIDER (widget);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(equalizer_slider);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (priv->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (priv->scaled ? config.scale_factor : 1);
- if (GTK_WIDGET_REALIZED (widget))
- if (equalizer_slider->event_window)
- gdk_window_move_resize(equalizer_slider->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
-
- equalizer_slider->x = widget->allocation.x/(priv->scaled ? config.scale_factor : 1);
- equalizer_slider->y = widget->allocation.y/(priv->scaled ? config.scale_factor : 1);
-}
-
-static gboolean ui_skinned_equalizer_slider_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedEqualizerSlider *es = UI_SKINNED_EQUALIZER_SLIDER (widget);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(es);
- g_return_val_if_fail (priv->width > 0 && priv->height > 0, FALSE);
-
- GdkPixbuf *obj = NULL;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, priv->width, priv->height);
-
- gint frame;
- frame = 27 - ((priv->position * 27) / 50);
+ gint frame = 27 - data->pos * 27 / 50;
if (frame < 14)
- skin_draw_pixbuf(widget, aud_active_skin, obj, priv->skin_index, (frame * 15) + 13, 164, 0, 0, priv->width, priv->height);
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 13 + 15 * frame, 164, 0, 0, 14, 63);
else
- skin_draw_pixbuf(widget, aud_active_skin, obj, priv->skin_index, ((frame - 14) * 15) + 13, 229, 0, 0, priv->width, priv->height);
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 13 + 15 * (frame - 14), 229, 0, 0,
+ 14, 63);
- if (priv->pressed)
- skin_draw_pixbuf(widget, aud_active_skin, obj, priv->skin_index, 0, 176, 1, priv->position, 11, 11);
+ if (data->pressed)
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 176, 1, data->pos, 11, 11);
else
- skin_draw_pixbuf(widget, aud_active_skin, obj, priv->skin_index, 0, 164, 1, priv->position, 11, 11);
-
- ui_skinned_widget_draw_with_coordinates(widget, obj, priv->width, priv->height,
- widget->allocation.x,
- widget->allocation.y,
- priv->scaled);
-
- g_object_unref(obj);
+ skin_draw_pixbuf (cr, SKIN_EQMAIN, 0, 164, 1, data->pos, 11, 11);
+DRAW_FUNC_END
- return FALSE;
-}
-
-static gboolean ui_skinned_equalizer_slider_button_press(GtkWidget *widget, GdkEventButton *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- UiSkinnedEqualizerSlider *es = UI_SKINNED_EQUALIZER_SLIDER (widget);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(es);
-
- gint y;
-
- if (event->type == GDK_BUTTON_PRESS) {
- if (event->button == 1) {
- priv->pressed = TRUE;
- y = event->y/(priv->scaled ? config.scale_factor : 1);
-
- if (y >= priv->position && y < priv->position + 11)
- priv->drag_y = y - priv->position;
- else {
- priv->position = y - 5;
- priv->drag_y = 5;
- if (priv->position < 0)
- priv->position = 0;
- if (priv->position > 50)
- priv->position = 50;
- if (priv->position >= 24 && priv->position <= 26)
- priv->position = 25;
-
- priv->value = ((gfloat) (25 - priv->position) * EQUALIZER_MAX_GAIN / 25.0 );
- equalizerwin_eq_changed();
- }
+static void eq_slider_moved (EqSliderData * data, gint pos)
+{
+ data->pos = CLAMP (pos, 0, 50);
+ if (data->pos == 24 || data->pos == 26)
+ data->pos = 25;
- ui_skinned_equalizer_slider_set_mainwin_text(es);
+ data->val = (gfloat) (25 - data->pos) * EQUALIZER_MAX_GAIN / 25;
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_slider_expose (widget, 0);
- }
- }
+ equalizerwin_eq_changed ();
- return TRUE;
+ gchar buf[100];
+ snprintf (buf, sizeof buf, "%s: %+.1f dB", data->name, data->val);
+ mainwin_show_status_message (buf);
}
-static gboolean ui_skinned_equalizer_slider_button_release(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(widget);
+static gboolean eq_slider_button_press (GtkWidget * slider, GdkEventButton *
+ event)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_val_if_fail (data, FALSE);
+
+ if (event->button != 1)
+ return FALSE;
- if (event->button == 1) {
- priv->pressed = FALSE;
- mainwin_release_info_text();
+ data->pressed = TRUE;
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_slider_expose (widget, 0);
- }
+ eq_slider_moved (data, event->y - 5);
+ gtk_widget_queue_draw (slider);
return TRUE;
}
-static gboolean ui_skinned_equalizer_slider_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
- UiSkinnedEqualizerSlider *es = UI_SKINNED_EQUALIZER_SLIDER(widget);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(widget);
-
- if (priv->pressed) {
- gint y;
-
- y = event->y/(priv->scaled ? config.scale_factor : 1);
- priv->position = y - priv->drag_y;
+static gboolean eq_slider_button_release (GtkWidget * slider, GdkEventButton *
+ event)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_val_if_fail (data, FALSE);
- if (priv->position < 0)
- priv->position = 0;
- if (priv->position > 50)
- priv->position = 50;
- if (priv->position >= 24 && priv->position <= 26)
- priv->position = 25;
+ if (event->button != 1)
+ return FALSE;
- priv->value = ((gfloat) (25 - priv->position) * EQUALIZER_MAX_GAIN / 25.0 );
- ui_skinned_equalizer_slider_set_mainwin_text(es);
- equalizerwin_eq_changed();
+ if (! data->pressed)
+ return TRUE;
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_slider_expose (widget, 0);
- }
+ data->pressed = FALSE;
+ eq_slider_moved (data, event->y - 5);
+ gtk_widget_queue_draw (slider);
return TRUE;
}
-static gboolean ui_skinned_equalizer_slider_scroll(GtkWidget *widget, GdkEventScroll *event) {
- g_return_val_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(widget);
-
- if (event->direction == GDK_SCROLL_UP) {
- priv->position -= 2;
-
- if (priv->position < 0)
- priv->position = 0;
- }
- else {
- priv->position += 2;
-
- if (priv->position > 50)
- priv->position = 50;
- }
-
- priv->value = ((gfloat) (25 - priv->position) * EQUALIZER_MAX_GAIN / 25.0 );
- equalizerwin_eq_changed();
+static gboolean eq_slider_motion (GtkWidget * slider, GdkEventMotion * event)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_val_if_fail (data, FALSE);
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_slider_expose (widget, 0);
+ if (! data->pressed)
+ return TRUE;
+ eq_slider_moved (data, event->y - 5);
+ gtk_widget_queue_draw (slider);
return TRUE;
}
-static void ui_skinned_equalizer_slider_toggle_scaled(UiSkinnedEqualizerSlider *equalizer_slider) {
- GtkWidget *widget = GTK_WIDGET (equalizer_slider);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(equalizer_slider);
-
- priv->scaled = !priv->scaled;
+static gboolean eq_slider_scroll (GtkWidget * slider, GdkEventScroll * event)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_val_if_fail (data, FALSE);
- gtk_widget_set_size_request(widget, priv->width*(priv->scaled ? config.scale_factor : 1),
- priv->height*(priv->scaled ? config.scale_factor : 1));
+ if (event->direction == GDK_SCROLL_UP)
+ eq_slider_moved (data, data->pos - 2);
+ else
+ eq_slider_moved (data, data->pos + 2);
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_slider_expose (widget, 0);
+ gtk_widget_queue_draw (slider);
+ return TRUE;
}
-void ui_skinned_equalizer_slider_set_position(GtkWidget *widget, gfloat pos) {
- g_return_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER (widget));
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(widget);
+void eq_slider_set_val (GtkWidget * slider, gfloat val)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_if_fail (data);
- if (priv->pressed)
+ if (data->pressed)
return;
- priv->value = (pos > EQUALIZER_MAX_GAIN) ? EQUALIZER_MAX_GAIN : ((pos < -EQUALIZER_MAX_GAIN) ? -EQUALIZER_MAX_GAIN : pos);
- priv->position = 25 - (gint) ((pos * 25.0) / EQUALIZER_MAX_GAIN);
-
- if (priv->position < 0)
- priv->position = 0;
+ data->val = val;
+ data->pos = 25 - (gint) (val * 25 / EQUALIZER_MAX_GAIN);
+ data->pos = CLAMP (data->pos, 0, 50);
- if (priv->position > 50)
- priv->position = 50;
+ gtk_widget_queue_draw (slider);
+}
- if (priv->position >= 24 && priv->position <= 26)
- priv->position = 25;
+gfloat eq_slider_get_val (GtkWidget * slider)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_val_if_fail (data, 0);
- if (widget_really_drawable (widget))
- ui_skinned_equalizer_slider_expose (widget, 0);
+ return data->val;
}
-gfloat ui_skinned_equalizer_slider_get_position(GtkWidget *widget) {
- g_return_val_if_fail (UI_SKINNED_IS_EQUALIZER_SLIDER (widget), -1);
- UiSkinnedEqualizerSliderPrivate *priv = UI_SKINNED_EQUALIZER_SLIDER_GET_PRIVATE(widget);
- return priv->value;
+static void eq_slider_destroy (GtkWidget * slider)
+{
+ EqSliderData * data = g_object_get_data ((GObject *) slider, "eqsliderdata");
+ g_return_if_fail (data);
+
+ g_free (data->name);
+ g_free (data);
}
-void ui_skinned_equalizer_slider_set_mainwin_text(UiSkinnedEqualizerSlider * es) {
- gint band = 0;
- const gchar * const bandname[11] = {N_("Preamp"), N_("31 Hz"), N_("63 Hz"),
- N_("125 Hz"), N_("250 Hz"), N_("500 Hz"), N_("1 kHz"), N_("2 kHz"),
- N_("4 kHz"), N_("8 kHz"), N_("16 kHz")};
- gchar *tmp;
-
- if (es->x > 21)
- band = ((es->x - 78) / 18) + 1;
-
- tmp =
- g_strdup_printf("EQ: %s: %+.1f DB", _(bandname[band]),
- ui_skinned_equalizer_slider_get_position(GTK_WIDGET(es)));
- mainwin_lock_info_text(tmp);
- g_free(tmp);
+GtkWidget * eq_slider_new (const gchar * name)
+{
+ GtkWidget * slider = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (slider, 14, 63);
+ gtk_widget_add_events (slider, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
+
+ DRAW_CONNECT (slider, eq_slider_draw);
+
+ g_signal_connect (slider, "button-press-event", (GCallback)
+ eq_slider_button_press, NULL);
+ g_signal_connect (slider, "button-release-event", (GCallback)
+ eq_slider_button_release, NULL);
+ g_signal_connect (slider, "motion-notify-event", (GCallback)
+ eq_slider_motion, NULL);
+ g_signal_connect (slider, "scroll-event", (GCallback) eq_slider_scroll,
+ NULL);
+ g_signal_connect (slider, "destroy", (GCallback) eq_slider_destroy, NULL);
+
+ EqSliderData * data = g_malloc0 (sizeof (EqSliderData));
+ data->name = g_strdup (name);
+ g_object_set_data ((GObject *) slider, "eqsliderdata", data);
+
+ return slider;
}
diff --git a/src/skins/ui_skinned_equalizer_slider.h b/src/skins/ui_skinned_equalizer_slider.h
index 3e62b2f..0a12071 100644
--- a/src/skins/ui_skinned_equalizer_slider.h
+++ b/src/skins/ui_skinned_equalizer_slider.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -21,41 +22,13 @@
* along with this program; If not, see <http://www.gnu.org/licenses>.
*/
-#ifndef AUDACIOUS_UI_SKINNED_EQUALIZER_SLIDER_H
-#define AUDACIOUS_UI_SKINNED_EQUALIZER_SLIDER_H
+#ifndef SKINS_UI_SKINNED_EQUALIZER_SLIDER_H
+#define SKINS_UI_SKINNED_EQUALIZER_SLIDER_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_EQUALIZER_SLIDER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_equalizer_slider_get_type (), UiSkinnedEqualizerSlider)
-#define UI_SKINNED_EQUALIZER_SLIDER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_equalizer_slider_get_type (), UiSkinnedEqualizerSliderClass)
-#define UI_SKINNED_IS_EQUALIZER_SLIDER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_equalizer_slider_get_type ())
-
-typedef struct _UiSkinnedEqualizerSlider UiSkinnedEqualizerSlider;
-typedef struct _UiSkinnedEqualizerSliderClass UiSkinnedEqualizerSliderClass;
-
-struct _UiSkinnedEqualizerSlider {
- GtkWidget widget;
- GdkWindow *event_window;
- gint x, y;
-};
+GtkWidget * eq_slider_new (const gchar * name);
+void eq_slider_set_val (GtkWidget * widget, gfloat val);
+gfloat eq_slider_get_val (GtkWidget * widget);
-struct _UiSkinnedEqualizerSliderClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSkinnedEqualizerSlider *equalizer_slider);
-};
-
-GtkWidget* ui_skinned_equalizer_slider_new(GtkWidget *fixed, gint x, gint y);
-GType ui_skinned_equalizer_slider_get_type(void);
-void ui_skinned_equalizer_slider_set_position(GtkWidget *widget, gfloat pos);
-gfloat ui_skinned_equalizer_slider_get_position(GtkWidget *widget);
-
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_EQUALIZER_SLIDER_H */
diff --git a/src/skins/ui_skinned_horizontal_slider.c b/src/skins/ui_skinned_horizontal_slider.c
index 66b0671..d806f15 100644
--- a/src/skins/ui_skinned_horizontal_slider.c
+++ b/src/skins/ui_skinned_horizontal_slider.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,415 +25,214 @@
* Audacious or using our public API to be a derived work.
*/
+#include "draw-compat.h"
+#include "ui_skin.h"
#include "ui_skinned_horizontal_slider.h"
-#include "skins_cfg.h"
-#include "util.h"
-
-#include <math.h>
-
-#define UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ui_skinned_horizontal_slider_get_type(), UiSkinnedHorizontalSliderPrivate))
-typedef struct _UiSkinnedHorizontalSliderPrivate UiSkinnedHorizontalSliderPrivate;
-
-enum {
- MOTION,
- RELEASE,
- DOUBLED,
- LAST_SIGNAL
-};
-
-struct _UiSkinnedHorizontalSliderPrivate {
- SkinPixmapId skin_index;
- gboolean scaled;
- gint frame, frame_offset, frame_height, min, max;
- gint knob_width, knob_height;
- gint position;
- gint width, height;
- gint (*frame_cb) (gint);
-};
-
-static void ui_skinned_horizontal_slider_class_init (UiSkinnedHorizontalSliderClass *klass);
-static void ui_skinned_horizontal_slider_init (UiSkinnedHorizontalSlider *horizontal_slider);
-static void ui_skinned_horizontal_slider_destroy (GtkObject *object);
-static void ui_skinned_horizontal_slider_realize (GtkWidget *widget);
-static void ui_skinned_horizontal_slider_unrealize (GtkWidget *widget);
-static void ui_skinned_horizontal_slider_map (GtkWidget *widget);
-static void ui_skinned_horizontal_slider_unmap (GtkWidget *widget);
-static void ui_skinned_horizontal_slider_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_horizontal_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_horizontal_slider_expose (GtkWidget *widget, GdkEventExpose *event);
-static gboolean ui_skinned_horizontal_slider_button_press (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_horizontal_slider_button_release (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_horizontal_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-static void ui_skinned_horizontal_slider_toggle_scaled (UiSkinnedHorizontalSlider *horizontal_slider);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint horizontal_slider_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_horizontal_slider_get_type() {
- static GType horizontal_slider_type = 0;
- if (!horizontal_slider_type) {
- static const GTypeInfo horizontal_slider_info = {
- sizeof (UiSkinnedHorizontalSliderClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_horizontal_slider_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedHorizontalSlider),
- 0,
- (GInstanceInitFunc) ui_skinned_horizontal_slider_init,
- };
- horizontal_slider_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedHorizontalSlider", &horizontal_slider_info, 0);
- }
-
- return horizontal_slider_type;
-}
-
-static void ui_skinned_horizontal_slider_class_init(UiSkinnedHorizontalSliderClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_horizontal_slider_destroy;
-
- widget_class->realize = ui_skinned_horizontal_slider_realize;
- widget_class->unrealize = ui_skinned_horizontal_slider_unrealize;
- widget_class->map = ui_skinned_horizontal_slider_map;
- widget_class->unmap = ui_skinned_horizontal_slider_unmap;
- widget_class->expose_event = ui_skinned_horizontal_slider_expose;
- widget_class->size_request = ui_skinned_horizontal_slider_size_request;
- widget_class->size_allocate = ui_skinned_horizontal_slider_size_allocate;
- widget_class->button_press_event = ui_skinned_horizontal_slider_button_press;
- widget_class->button_release_event = ui_skinned_horizontal_slider_button_release;
- widget_class->motion_notify_event = ui_skinned_horizontal_slider_motion_notify;
-
- klass->motion = NULL;
- klass->release = NULL;
- klass->scaled = ui_skinned_horizontal_slider_toggle_scaled;
-
- horizontal_slider_signals[MOTION] =
- g_signal_new ("motion", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedHorizontalSliderClass, motion), NULL, NULL,
- g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
- horizontal_slider_signals[RELEASE] =
- g_signal_new ("release", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedHorizontalSliderClass, release), NULL, NULL,
- g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
- horizontal_slider_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedHorizontalSliderClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- g_type_class_add_private (gobject_class, sizeof (UiSkinnedHorizontalSliderPrivate));
-}
-
-static void ui_skinned_horizontal_slider_init(UiSkinnedHorizontalSlider *horizontal_slider) {
- horizontal_slider->pressed = FALSE;
- horizontal_slider->event_window = NULL;
- GTK_WIDGET_SET_FLAGS(horizontal_slider, GTK_NO_WINDOW);
-}
+typedef struct {
+ gint min, max, pos;
+ gboolean pressed;
+ SkinPixmapId si;
+ gint w, h;
+ gint fx, fy;
+ gint kw, kh;
+ gint knx, kny, kpx, kpy;
+ void (* on_motion) (void);
+ void (* on_release) (void);
+} HSliderData;
+
+DRAW_FUNC_BEGIN (hslider_draw)
+ HSliderData * data = g_object_get_data ((GObject *) wid, "hsliderdata");
+ g_return_val_if_fail (data, FALSE);
+
+ skin_draw_pixbuf (cr, data->si, data->fx, data->fy, 0, 0, data->w, data->h);
+
+ if (data->pressed)
+ skin_draw_pixbuf (cr, data->si, data->kpx, data->kpy, data->pos,
+ (data->h - data->kh) / 2, data->kw, data->kh);
+ else
+ skin_draw_pixbuf (cr, data->si, data->knx, data->kny, data->pos,
+ (data->h - data->kh) / 2, data->kw, data->kh);
+DRAW_FUNC_END
-GtkWidget* ui_skinned_horizontal_slider_new(GtkWidget *fixed, gint x, gint y, gint w, gint h, gint knx, gint kny,
- gint kpx, gint kpy, gint kw, gint kh, gint fh,
- gint fo, gint min, gint max, gint(*fcb) (gint), SkinPixmapId si) {
-
- UiSkinnedHorizontalSlider *hs = g_object_new (ui_skinned_horizontal_slider_get_type (), NULL);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(hs);
-
- hs->x = x;
- hs->y = y;
- priv->width = w;
- priv->height = h;
- hs->knob_nx = knx;
- hs->knob_ny = kny;
- hs->knob_px = kpx;
- hs->knob_py = kpy;
- priv->knob_width = kw;
- priv->knob_height = kh;
- priv->frame_height = fh;
- priv->frame_offset = fo;
- priv->min = min;
- priv->position = min;
- priv->max = max;
- priv->frame_cb = fcb;
- if (priv->frame_cb)
- priv->frame = priv->frame_cb(0);
- priv->skin_index = si;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(hs), hs->x, hs->y);
-
- return GTK_WIDGET(hs);
-}
+static gboolean hslider_button_press (GtkWidget * hslider, GdkEventButton *
+ event)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_val_if_fail (data, FALSE);
-static void ui_skinned_horizontal_slider_destroy(GtkObject *object) {
- UiSkinnedHorizontalSlider *horizontal_slider;
+ if (event->button != 1)
+ return FALSE;
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER (object));
+ data->pressed = TRUE;
+ data->pos = event->x - data->kw / 2;
+ data->pos = CLAMP (data->pos, data->min, data->max);
- horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER (object);
+ if (data->on_motion)
+ data->on_motion ();
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+ gtk_widget_queue_draw (hslider);
+ return TRUE;
}
-static void ui_skinned_horizontal_slider_realize(GtkWidget *widget) {
- UiSkinnedHorizontalSlider *horizontal_slider;
- GdkWindowAttr attributes;
- gint attributes_mask;
+static gboolean hslider_button_release (GtkWidget * hslider, GdkEventButton *
+ event)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_val_if_fail (data, FALSE);
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER(widget));
+ if (event->button != 1)
+ return FALSE;
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
- horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget);
+ if (! data->pressed)
+ return TRUE;
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK;
+ data->pressed = FALSE;
+ data->pos = event->x - data->kw / 2;
+ data->pos = CLAMP (data->pos, data->min, data->max);
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- horizontal_slider->event_window = gdk_window_new(widget->window, &attributes, attributes_mask);
+ if (data->on_release)
+ data->on_release ();
- gdk_window_set_user_data(horizontal_slider->event_window, widget);
+ gtk_widget_queue_draw (hslider);
+ return TRUE;
}
-static void ui_skinned_horizontal_slider_unrealize(GtkWidget *widget) {
- UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget);
-
- if ( horizontal_slider->event_window != NULL )
- {
- gdk_window_set_user_data( horizontal_slider->event_window , NULL );
- gdk_window_destroy( horizontal_slider->event_window );
- horizontal_slider->event_window = NULL;
- }
+static gboolean hslider_motion_notify (GtkWidget * hslider, GdkEventMotion *
+ event)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_val_if_fail (data, FALSE);
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
+ if (! data->pressed)
+ return TRUE;
-static void ui_skinned_horizontal_slider_map (GtkWidget *widget)
-{
- UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget);
+ data->pressed = TRUE;
+ data->pos = event->x - data->kw / 2;
+ data->pos = CLAMP (data->pos, data->min, data->max);
- if (horizontal_slider->event_window != NULL)
- gdk_window_show (horizontal_slider->event_window);
+ if (data->on_motion)
+ data->on_motion ();
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
+ gtk_widget_queue_draw (hslider);
+ return TRUE;
}
-static void ui_skinned_horizontal_slider_unmap (GtkWidget *widget)
+static void hslider_destroy (GtkWidget * hslider)
{
- UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER(widget);
-
- if (horizontal_slider->event_window != NULL)
- gdk_window_hide (horizontal_slider->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
+ g_free (g_object_get_data ((GObject *) hslider, "hsliderdata"));
}
-static void ui_skinned_horizontal_slider_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget);
+GtkWidget * hslider_new (gint min, gint max, SkinPixmapId si, gint w, gint h,
+ gint fx, gint fy, gint kw, gint kh, gint knx, gint kny, gint kpx, gint kpy)
+{
+ GtkWidget * hslider = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (hslider, w, h);
+ gtk_widget_add_events (hslider, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
+
+ DRAW_CONNECT (hslider, hslider_draw);
+
+ g_signal_connect (hslider, "button-press-event", (GCallback)
+ hslider_button_press, NULL);
+ g_signal_connect (hslider, "button-release-event", (GCallback)
+ hslider_button_release, NULL);
+ g_signal_connect (hslider, "motion-notify-event", (GCallback)
+ hslider_motion_notify, NULL);
+ g_signal_connect (hslider, "destroy", (GCallback) hslider_destroy, NULL);
+
+ HSliderData * data = g_malloc0 (sizeof (HSliderData));
+ data->min = min;
+ data->max = max;
+ data->pos = min;
+ data->si = si;
+ data->w = w;
+ data->h = h;
+ data->fx = fx;
+ data->fy = fy;
+ data->kw = kw;
+ data->kh = kh;
+ data->knx = knx;
+ data->kny = kny;
+ data->kpx = kpx;
+ data->kpy = kpy;
+ g_object_set_data ((GObject *) hslider, "hsliderdata", data);
+
+ return hslider;
+}
+
+void hslider_set_frame (GtkWidget * hslider, gint fx, gint fy)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_if_fail (data);
- requisition->width = priv->width*(priv->scaled ? config.scale_factor : 1);
- requisition->height = priv->height*(priv->scaled ? config.scale_factor : 1);
+ data->fx = fx;
+ data->fy = fy;
+ gtk_widget_queue_draw (hslider);
}
-static void ui_skinned_horizontal_slider_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedHorizontalSlider *horizontal_slider = UI_SKINNED_HORIZONTAL_SLIDER (widget);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(horizontal_slider);
-
- widget->allocation = *allocation;
- widget->allocation.x = ceil(widget->allocation.x*(priv->scaled ? config.scale_factor : 1));
- widget->allocation.y = ceil(widget->allocation.y*(priv->scaled ? config.scale_factor : 1));
-
- if (priv->knob_height == priv->height)
- priv->knob_height = ceil(allocation->height/(priv->scaled ? config.scale_factor : 1));
- priv->width = ceil(allocation->width/(priv->scaled ? config.scale_factor : 1));
- priv->height = ceil(allocation->height/(priv->scaled ? config.scale_factor : 1));
-
- if (GTK_WIDGET_REALIZED (widget))
- if (horizontal_slider->event_window)
- gdk_window_move_resize(horizontal_slider->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
+void hslider_set_knob (GtkWidget * hslider, gint knx, gint kny, gint kpx, gint
+ kpy)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_if_fail (data);
- horizontal_slider->x = ceil(widget->allocation.x/(priv->scaled ? config.scale_factor : 1));
- horizontal_slider->y = ceil(widget->allocation.y/(priv->scaled ? config.scale_factor : 1));
+ data->knx = knx;
+ data->kny = kny;
+ data->kpx = kpx;
+ data->kpy = kpy;
+ gtk_widget_queue_draw (hslider);
}
-static gboolean ui_skinned_horizontal_slider_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedHorizontalSlider *hs = UI_SKINNED_HORIZONTAL_SLIDER (widget);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(hs);
- g_return_val_if_fail (priv->width > 0 && priv->height > 0, FALSE);
-
- GdkPixbuf *obj = NULL;
-
- if (priv->position > priv->max) priv->position = priv->max;
- else if (priv->position < priv->min) priv->position = priv->min;
-
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, priv->width, priv->height);
-
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- priv->skin_index, priv->frame_offset,
- priv->frame * priv->frame_height,
- 0, 0, priv->width, priv->height);
- if (hs->pressed)
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- priv->skin_index, hs->knob_px,
- hs->knob_py, priv->position,
- ((priv->height - priv->knob_height) / 2),
- priv->knob_width, priv->knob_height);
- else
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- priv->skin_index, hs->knob_nx,
- hs->knob_ny, priv->position,
- ((priv->height - priv->knob_height) / 2),
- priv->knob_width, priv->knob_height);
-
- ui_skinned_widget_draw_with_coordinates(widget, obj, priv->width, priv->height,
- widget->allocation.x,
- widget->allocation.y,
- priv->scaled);
-
- g_object_unref(obj);
-
- return FALSE;
-}
+gint hslider_get_pos (GtkWidget * hslider)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_val_if_fail (data, 0);
-static gboolean ui_skinned_horizontal_slider_button_press(GtkWidget *widget, GdkEventButton *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- UiSkinnedHorizontalSlider *hs = UI_SKINNED_HORIZONTAL_SLIDER (widget);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(hs);
- gint scale = priv->scaled ? config.scale_factor : 1;
-
- if (event->type == GDK_BUTTON_PRESS) {
- if (event->button == 1) {
- hs->pressed = TRUE;
-
- priv->position = event->x / scale - priv->knob_width / 2;
- if (priv->position < priv->min)
- priv->position = priv->min;
- if (priv->position > priv->max)
- priv->position = priv->max;
- if (priv->frame_cb)
- priv->frame = priv->frame_cb(priv->position);
-
- g_signal_emit_by_name(widget, "motion", priv->position);
-
- if (widget_really_drawable (widget))
- ui_skinned_horizontal_slider_expose (widget, 0);
- } else if (event->button == 3) {
- if (hs->pressed) {
- hs->pressed = FALSE;
- g_signal_emit_by_name(widget, "release", priv->position);
-
- if (widget_really_drawable (widget))
- ui_skinned_horizontal_slider_expose (widget, 0);
- }
- event->x = event->x + hs->x * scale;
- event->y = event->y + hs->y * scale;
- return FALSE;
- }
- }
- return TRUE;
+ return data->pos;
}
-static gboolean ui_skinned_horizontal_slider_button_release(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedHorizontalSlider *hs = UI_SKINNED_HORIZONTAL_SLIDER(widget);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget);
+void hslider_set_pos (GtkWidget * hslider, gint pos)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_if_fail (data);
- if (hs->pressed) {
- hs->pressed = FALSE;
- g_signal_emit_by_name(widget, "release", priv->position);
+ if (data->pressed)
+ return;
- if (widget_really_drawable (widget))
- ui_skinned_horizontal_slider_expose (widget, 0);
- }
- return TRUE;
+ data->pos = CLAMP (pos, data->min, data->max);
+ gtk_widget_queue_draw (hslider);
}
-static gboolean ui_skinned_horizontal_slider_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
- UiSkinnedHorizontalSlider *hs = UI_SKINNED_HORIZONTAL_SLIDER(widget);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget);
-
- if (hs->pressed) {
- gint x = event->x - priv->knob_width * (priv->scaled ? config.scale_factor : 1) / 2;
-
- priv->position = x/(priv->scaled ? config.scale_factor : 1);
-
- if (priv->position < priv->min)
- priv->position = priv->min;
-
- if (priv->position > priv->max)
- priv->position = priv->max;
-
- if (priv->frame_cb)
- priv->frame = priv->frame_cb(priv->position);
-
- g_signal_emit_by_name(widget, "motion", priv->position);
-
- if (widget_really_drawable (widget))
- ui_skinned_horizontal_slider_expose (widget, 0);
- }
+gboolean hslider_get_pressed (GtkWidget * hslider)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_val_if_fail (data, FALSE);
- return TRUE;
+ return data->pressed;
}
-static void ui_skinned_horizontal_slider_toggle_scaled(UiSkinnedHorizontalSlider *horizontal_slider) {
- GtkWidget *widget = GTK_WIDGET (horizontal_slider);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(horizontal_slider);
-
- priv->scaled = !priv->scaled;
-
- gtk_widget_set_size_request(widget,
- priv->width*(priv->scaled ? config.scale_factor : 1),
- priv->height*(priv->scaled ? config.scale_factor : 1));
+void hslider_set_pressed (GtkWidget * hslider, gboolean pressed)
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_if_fail (data);
- if (widget_really_drawable (widget))
- ui_skinned_horizontal_slider_expose (widget, 0);
+ data->pressed = pressed;
+ gtk_widget_queue_draw (hslider);
}
-void ui_skinned_horizontal_slider_set_position(GtkWidget *widget, gint pos) {
- g_return_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER (widget));
- UiSkinnedHorizontalSlider *hs = UI_SKINNED_HORIZONTAL_SLIDER(widget);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget);
-
- if (pos == priv->position || hs->pressed)
- return;
-
- priv->position = pos;
-
- if (priv->frame_cb)
- priv->frame = priv->frame_cb(priv->position);
+void hslider_on_motion (GtkWidget * hslider, void (* callback) (void))
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_if_fail (data);
- if (widget_really_drawable (widget))
- ui_skinned_horizontal_slider_expose (widget, 0);
+ data->on_motion = callback;
}
-gint ui_skinned_horizontal_slider_get_position(GtkWidget *widget) {
- g_return_val_if_fail (UI_SKINNED_IS_HORIZONTAL_SLIDER (widget), -1);
- UiSkinnedHorizontalSliderPrivate *priv = UI_SKINNED_HORIZONTAL_SLIDER_GET_PRIVATE(widget);
- return priv->position;
+void hslider_on_release (GtkWidget * hslider, void (* callback) (void))
+{
+ HSliderData * data = g_object_get_data ((GObject *) hslider, "hsliderdata");
+ g_return_if_fail (data);
+
+ data->on_release = callback;
}
diff --git a/src/skins/ui_skinned_horizontal_slider.h b/src/skins/ui_skinned_horizontal_slider.h
index 4e73927..9be0236 100644
--- a/src/skins/ui_skinned_horizontal_slider.h
+++ b/src/skins/ui_skinned_horizontal_slider.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,46 +25,21 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_HORIZONTAL_SLIDER_H
-#define AUDACIOUS_UI_SKINNED_HORIZONTAL_SLIDER_H
+#ifndef SKINS_UI_SKINNED_HORIZONTAL_SLIDER_H
+#define SKINS_UI_SKINNED_HORIZONTAL_SLIDER_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_HORIZONTAL_SLIDER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_horizontal_slider_get_type (), UiSkinnedHorizontalSlider)
-#define UI_SKINNED_HORIZONTAL_SLIDER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_horizontal_slider_get_type (), UiSkinnedHorizontalSliderClass)
-#define UI_SKINNED_IS_HORIZONTAL_SLIDER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_horizontal_slider_get_type ())
-
-typedef struct _UiSkinnedHorizontalSlider UiSkinnedHorizontalSlider;
-typedef struct _UiSkinnedHorizontalSliderClass UiSkinnedHorizontalSliderClass;
+GtkWidget * hslider_new (gint min, gint max, SkinPixmapId si, gint w, gint h,
+ gint fx, gint fy, gint kw, gint kh, gint knx, gint kny, gint kpx, gint kpy);
+void hslider_set_frame (GtkWidget * hslider, gint fx, gint fy);
+void hslider_set_knob (GtkWidget * hslider, gint knx, gint kny, gint kpx, gint
+ kpy);
+gint hslider_get_pos (GtkWidget * hslider);
+void hslider_set_pos (GtkWidget * hslider, gint pos);
+gboolean hslider_get_pressed (GtkWidget * hslider);
+void hslider_set_pressed (GtkWidget * hslider, gboolean pressed);
+void hslider_on_motion (GtkWidget * hslider, void (* callback) (void));
+void hslider_on_release (GtkWidget * hslider, void (* callback) (void));
-struct _UiSkinnedHorizontalSlider {
- GtkWidget widget;
- GdkWindow *event_window;
- gboolean pressed;
- gint x, y;
- gint knob_nx, knob_ny, knob_px, knob_py;
-};
-
-struct _UiSkinnedHorizontalSliderClass {
- GtkWidgetClass parent_class;
- void (* motion) (UiSkinnedHorizontalSlider *horizontal_slider);
- void (* release) (UiSkinnedHorizontalSlider *horizontal_slider);
- void (* scaled) (UiSkinnedHorizontalSlider *horizontal_slider);
-};
-GtkWidget* ui_skinned_horizontal_slider_new(GtkWidget *fixed, gint x, gint y, gint w, gint h, gint knx, gint kny,
- gint kpx, gint kpy, gint kw, gint kh, gint fh,
- gint fo, gint min, gint max, gint(*fcb) (gint), SkinPixmapId si);
-GType ui_skinned_horizontal_slider_get_type(void);
-void ui_skinned_horizontal_slider_set_position(GtkWidget *widget, gint pos);
-gint ui_skinned_horizontal_slider_get_position(GtkWidget *widget);
-
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_HORIZONTAL_SLIDER_H */
diff --git a/src/skins/ui_skinned_menurow.c b/src/skins/ui_skinned_menurow.c
index e3e1b25..12f1058 100644
--- a/src/skins/ui_skinned_menurow.c
+++ b/src/skins/ui_skinned_menurow.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,358 +25,130 @@
* Audacious or using our public API to be a derived work.
*/
-#include <audacious/plugin.h>
-#include "plugin.h"
+#include "draw-compat.h"
+#include "skins_cfg.h"
+#include "ui_skin.h"
#include "ui_skinned_menurow.h"
-#include "util.h"
-enum {
- DOUBLED,
- CHANGE,
- RELEASE,
- LAST_SIGNAL
-};
+static struct {
+ MenuRowItem selected;
+ gboolean pushed;
+} mr;
-static void ui_skinned_menurow_class_init (UiSkinnedMenurowClass *klass);
-static void ui_skinned_menurow_init (UiSkinnedMenurow *menurow);
-static void ui_skinned_menurow_destroy (GtkObject *object);
-static void ui_skinned_menurow_realize (GtkWidget *widget);
-static void ui_skinned_menurow_unrealize (GtkWidget *widget);
-static void ui_skinned_menurow_map (GtkWidget *widget);
-static void ui_skinned_menurow_unmap (GtkWidget *widget);
-static void ui_skinned_menurow_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_menurow_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_menurow_expose (GtkWidget *widget, GdkEventExpose *event);
-static MenuRowItem menurow_find_selected (UiSkinnedMenurow * mr, gint x, gint y);
-static gboolean ui_skinned_menurow_button_press (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_menurow_button_release (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_menurow_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-static void ui_skinned_menurow_toggle_scaled (UiSkinnedMenurow *menurow);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint menurow_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_menurow_get_type() {
- static GType menurow_type = 0;
- if (!menurow_type) {
- static const GTypeInfo menurow_info = {
- sizeof (UiSkinnedMenurowClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_menurow_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedMenurow),
- 0,
- (GInstanceInitFunc) ui_skinned_menurow_init,
- };
- menurow_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedMenurow", &menurow_info, 0);
+DRAW_FUNC_BEGIN (menurow_draw)
+ if (mr.selected == MENUROW_NONE)
+ {
+ if (mr.pushed)
+ skin_draw_pixbuf (cr, SKIN_TITLEBAR, 304, 0, 0, 0, 8, 43);
+ else
+ skin_draw_pixbuf (cr, SKIN_TITLEBAR, 312, 0, 0, 0, 8, 43);
}
+ else
+ skin_draw_pixbuf (cr, SKIN_TITLEBAR, 304 + 8 * (mr.selected - 1), 44, 0,
+ 0, 8, 43);
- return menurow_type;
-}
-
-static void ui_skinned_menurow_class_init(UiSkinnedMenurowClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_menurow_destroy;
-
- widget_class->realize = ui_skinned_menurow_realize;
- widget_class->unrealize = ui_skinned_menurow_unrealize;
- widget_class->map = ui_skinned_menurow_map;
- widget_class->unmap = ui_skinned_menurow_unmap;
- widget_class->expose_event = ui_skinned_menurow_expose;
- widget_class->size_request = ui_skinned_menurow_size_request;
- widget_class->size_allocate = ui_skinned_menurow_size_allocate;
- widget_class->button_press_event = ui_skinned_menurow_button_press;
- widget_class->button_release_event = ui_skinned_menurow_button_release;
- widget_class->motion_notify_event = ui_skinned_menurow_motion_notify;
-
- klass->scaled = ui_skinned_menurow_toggle_scaled;
- klass->change = NULL;
- klass->release = NULL;
-
- menurow_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedMenurowClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
-
- menurow_signals[CHANGE] =
- g_signal_new ("change", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedMenurowClass, change), NULL, NULL,
- g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
- menurow_signals[RELEASE] =
- g_signal_new ("release", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedMenurowClass, release), NULL, NULL,
- g_cclosure_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_POINTER);
-
-}
-
-static void ui_skinned_menurow_init(UiSkinnedMenurow *menurow) {
- menurow->scale_selected = config.scaled;
- menurow->always_selected = config.always_on_top;
-
- menurow->event_window = NULL;
- GTK_WIDGET_SET_FLAGS(menurow, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_menurow_new(GtkWidget *fixed, gint x, gint y, gint nx, gint ny, gint sx, gint sy, SkinPixmapId si) {
- UiSkinnedMenurow *menurow = g_object_new (ui_skinned_menurow_get_type (), NULL);
-
- menurow->x = x;
- menurow->y = y;
- menurow->width = 8;
- menurow->height = 43;
- menurow->nx = nx;
- menurow->ny = ny;
- menurow->sx = sx;
- menurow->sy = sy;
- menurow->selected = MENUROW_NONE;
-
- menurow->skin_index = si;
-
- menurow->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(menurow), menurow->x, menurow->y);
-
- return GTK_WIDGET(menurow);
-}
-
-static void ui_skinned_menurow_destroy(GtkObject *object) {
- UiSkinnedMenurow *menurow;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_MENUROW (object));
-
- menurow = UI_SKINNED_MENUROW (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_skinned_menurow_realize(GtkWidget *widget) {
- UiSkinnedMenurow *menurow;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_MENUROW(widget));
-
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
- menurow = UI_SKINNED_MENUROW(widget);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK;
-
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- menurow->event_window = gdk_window_new(widget->window, &attributes, attributes_mask);
-
- gdk_window_set_user_data(menurow->event_window, widget);
-}
-
-static void ui_skinned_menurow_unrealize(GtkWidget *widget) {
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
-
- if ( menurow->event_window != NULL )
+ if (mr.pushed)
{
- gdk_window_set_user_data( menurow->event_window , NULL );
- gdk_window_destroy( menurow->event_window );
- menurow->event_window = NULL;
+ if (config.always_on_top)
+ skin_draw_pixbuf (cr, SKIN_TITLEBAR, 312, 54, 0, 10, 8, 8);
+#if 0
+ if (config.scaled)
+ skin_draw_pixbuf (cr, SKIN_TITLEBAR, 328, 70, 0, 26, 8, 8);
+#endif
}
+DRAW_FUNC_END
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void ui_skinned_menurow_map (GtkWidget *widget)
+static MenuRowItem menurow_find_selected (gint x, gint y)
{
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
-
- if (menurow->event_window != NULL)
- gdk_window_show (menurow->event_window);
+ if (x >= 0 && x < 8)
+ {
+ if (y >= 0 && y < 10)
+ return MENUROW_OPTIONS;
+ if (y >= 10 && y < 18)
+ return MENUROW_ALWAYS;
+ if (y >= 18 && y < 26)
+ return MENUROW_FILEINFOBOX;
+ if (y >= 26 && y < 34)
+ return MENUROW_SCALE;
+ if (y >= 34 && y < 43)
+ return MENUROW_VISUALIZATION;
+ }
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
+ return MENUROW_NONE;
}
-static void ui_skinned_menurow_unmap (GtkWidget *widget)
+static gboolean menurow_button_press (GtkWidget * widget, GdkEventButton * event)
{
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
-
- if (menurow->event_window != NULL)
- gdk_window_hide (menurow->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
-
-static void ui_skinned_menurow_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
-
- requisition->width = menurow->width*(menurow->scaled ? config.scale_factor : 1);
- requisition->height = menurow->height*(menurow->scaled ? config.scale_factor : 1);
-}
-
-static void ui_skinned_menurow_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW (widget);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (menurow->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (menurow->scaled ? config.scale_factor : 1);
- if (GTK_WIDGET_REALIZED (widget))
- if (menurow->event_window)
- gdk_window_move_resize(menurow->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
-
- menurow->x = widget->allocation.x/(menurow->scaled ? config.scale_factor : 1);
- menurow->y = widget->allocation.y/(menurow->scaled ? config.scale_factor : 1);
-}
-
-static gboolean ui_skinned_menurow_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW (widget);
- g_return_val_if_fail (menurow->width > 0 && menurow->height > 0, FALSE);
-
- GdkPixbuf *obj = NULL;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, menurow->width, menurow->height);
-
- if (menurow->selected == MENUROW_NONE) {
- if (config.always_show_cb || menurow->pushed)
- skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index,
- menurow->nx, menurow->ny, 0, 0, 8, 43);
- else
- skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index,
- menurow->nx + 8, menurow->ny, 0, 0, 8, 43);
- }
- else {
- skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index,
- menurow->sx + ((menurow->selected - 1) * 8),
- menurow->sy, 0, 0, 8, 43);
- }
- if (config.always_show_cb || menurow->pushed) {
- if (menurow->always_selected)
- skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index,
- menurow->sx + 8, menurow->sy + 10, 0, 10, 8, 8);
- if (menurow->scale_selected)
- skin_draw_pixbuf(widget, aud_active_skin, obj, menurow->skin_index,
- menurow->sx + 24, menurow->sy + 26, 0, 26, 8, 8);
- }
+ if (event->button != 1)
+ return FALSE;
- ui_skinned_widget_draw_with_coordinates(widget, obj, menurow->width, menurow->height,
- widget->allocation.x,
- widget->allocation.y,
- menurow->scaled);
+ mr.pushed = TRUE;
+ mr.selected = menurow_find_selected (event->x, event->y);
- g_object_unref(obj);
+ mainwin_mr_change (mr.selected);
- return FALSE;
+ gtk_widget_queue_draw (widget);
+ return TRUE;
}
-void ui_skinned_menurow_update (GtkWidget * row)
+static gboolean menurow_button_release (GtkWidget * widget, GdkEventButton *
+ event)
{
- if (widget_really_drawable (row))
- ui_skinned_menurow_expose (row, 0);
-}
-
-static MenuRowItem menurow_find_selected(UiSkinnedMenurow * mr, gint x, gint y) {
- MenuRowItem ret = MENUROW_NONE;
-
- x = x/(mr->scaled ? config.scale_factor : 1);
- y = y/(mr->scaled ? config.scale_factor : 1);
- if (x > 0 && x < 8) {
- if (y >= 0 && y <= 10)
- ret = MENUROW_OPTIONS;
- if (y >= 10 && y <= 17)
- ret = MENUROW_ALWAYS;
- if (y >= 18 && y <= 25)
- ret = MENUROW_FILEINFOBOX;
- if (y >= 26 && y <= 33)
- ret = MENUROW_SCALE;
- if (y >= 34 && y <= 42)
- ret = MENUROW_VISUALIZATION;
- }
- return ret;
-}
+ if (event->button != 1)
+ return FALSE;
-static gboolean ui_skinned_menurow_button_press(GtkWidget *widget, GdkEventButton *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_MENUROW (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
+ if (! mr.pushed)
+ return TRUE;
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW (widget);
+ if (mr.selected == MENUROW_ALWAYS)
+ config.always_on_top = ! config.always_on_top;
+#if 0
+ else if (mr.selected == MENUROW_SCALE)
+ config.scaled = ! config.scaled;
+#endif
- if (event->type == GDK_BUTTON_PRESS) {
- if (event->button == 1) {
+ mainwin_mr_release (mr.selected, event);
- menurow->pushed = TRUE;
- menurow->selected = menurow_find_selected(menurow, event->x, event->y);
-
- ui_skinned_menurow_update (widget);
- g_signal_emit_by_name(widget, "change", menurow->selected);
- }
- }
+ mr.pushed = FALSE;
+ mr.selected = MENUROW_NONE;
+ gtk_widget_queue_draw (widget);
return TRUE;
}
-static gboolean ui_skinned_menurow_button_release(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
- if (menurow->pushed) {
- menurow->pushed = FALSE;
-
- if (menurow->selected == MENUROW_ALWAYS)
- menurow->always_selected = !menurow->always_selected;
-
- if (menurow->selected == MENUROW_SCALE)
- menurow->scale_selected = !menurow->scale_selected;
+static gboolean menurow_motion_notify (GtkWidget * widget, GdkEventMotion *
+ event)
+{
+ if (! mr.pushed)
+ return TRUE;
- if ((int)(menurow->selected) != -1)
- g_signal_emit_by_name(widget, "release", menurow->selected, event);
+ mr.selected = menurow_find_selected (event->x, event->y);
- menurow->selected = MENUROW_NONE;
- ui_skinned_menurow_update (widget);
- }
+ mainwin_mr_change (mr.selected);
+ gtk_widget_queue_draw (widget);
return TRUE;
}
-static gboolean ui_skinned_menurow_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_MENUROW (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
- UiSkinnedMenurow *menurow = UI_SKINNED_MENUROW(widget);
-
- if (menurow->pushed) {
- menurow->selected = menurow_find_selected(menurow, event->x, event->y);
+GtkWidget * ui_skinned_menurow_new (void)
+{
+ GtkWidget * wid = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (wid, 8, 43);
+ gtk_widget_add_events (wid, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ | GDK_POINTER_MOTION_MASK);
- ui_skinned_menurow_update (widget);
- g_signal_emit_by_name(widget, "change", menurow->selected);
- }
+ DRAW_CONNECT (wid, menurow_draw);
+ g_signal_connect (wid, "button-press-event", (GCallback)
+ menurow_button_press, NULL);
+ g_signal_connect (wid, "button-release-event", (GCallback)
+ menurow_button_release, NULL);
+ g_signal_connect (wid, "motion-notify-event", (GCallback)
+ menurow_motion_notify, NULL);
- return TRUE;
+ return wid;
}
-static void ui_skinned_menurow_toggle_scaled(UiSkinnedMenurow *menurow) {
- GtkWidget *widget = GTK_WIDGET (menurow);
-
- menurow->scaled = !menurow->scaled;
- gtk_widget_set_size_request(widget, menurow->width* (menurow->scaled ? config.scale_factor : 1),
- menurow->height * (menurow->scaled ? config.scale_factor : 1));
-
- ui_skinned_menurow_update (widget);
+void ui_skinned_menurow_update (GtkWidget * menurow)
+{
+ gtk_widget_queue_draw (menurow);
}
diff --git a/src/skins/ui_skinned_menurow.h b/src/skins/ui_skinned_menurow.h
index ed9e29a..b3d2682 100644
--- a/src/skins/ui_skinned_menurow.h
+++ b/src/skins/ui_skinned_menurow.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,56 +25,21 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_MENUROW_H
-#define AUDACIOUS_UI_SKINNED_MENUROW_H
+#ifndef SKINS_UI_SKINNED_MENUROW_H
+#define SKINS_UI_SKINNED_MENUROW_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_MENUROW(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_menurow_get_type (), UiSkinnedMenurow)
-#define UI_SKINNED_MENUROW_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_menurow_get_type (), UiSkinnedMenurowClass)
-#define UI_SKINNED_IS_MENUROW(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_menurow_get_type ())
-
-typedef struct _UiSkinnedMenurow UiSkinnedMenurow;
-typedef struct _UiSkinnedMenurowClass UiSkinnedMenurowClass;
typedef enum {
MENUROW_NONE, MENUROW_OPTIONS, MENUROW_ALWAYS, MENUROW_FILEINFOBOX,
MENUROW_SCALE, MENUROW_VISUALIZATION
} MenuRowItem;
-struct _UiSkinnedMenurow {
- GtkWidget widget;
+GtkWidget * ui_skinned_menurow_new (void);
+void ui_skinned_menurow_update (GtkWidget * menurow);
- GdkWindow *event_window;
- gint x, y, width, height;
- gboolean scaled;
- gint nx, ny;
- gint sx, sy;
- MenuRowItem selected;
- gboolean always_selected;
- gboolean scale_selected;
- gboolean pushed;
- SkinPixmapId skin_index;
-};
+/* callbacks in ui_main.c */
+void mainwin_mr_change (MenuRowItem i);
+void mainwin_mr_release (MenuRowItem i, GdkEventButton * event);
-struct _UiSkinnedMenurowClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSkinnedMenurow *menurow);
- void (* change) (UiSkinnedMenurow *menurow);
- void (* release) (UiSkinnedMenurow *menurow);
-};
-
-GtkWidget* ui_skinned_menurow_new (GtkWidget *fixed, gint x, gint y, gint nx, gint ny, gint sx, gint sy, SkinPixmapId si);
-GType ui_skinned_menurow_get_type(void);
-void ui_skinned_menurow_update (GtkWidget * row);
-
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_MENUROW_H */
diff --git a/src/skins/ui_skinned_monostereo.c b/src/skins/ui_skinned_monostereo.c
index 0231df7..9410358 100644
--- a/src/skins/ui_skinned_monostereo.c
+++ b/src/skins/ui_skinned_monostereo.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,177 +25,41 @@
* Audacious or using our public API to be a derived work.
*/
+#include "draw-compat.h"
#include "ui_skin.h"
#include "ui_skinned_monostereo.h"
-#include "skins_cfg.h"
-#include "util.h"
-enum {
- DOUBLED,
- LAST_SIGNAL
-};
+static gint monostereo_num_channels;
-static void ui_skinned_monostereo_class_init (UiSkinnedMonoStereoClass *klass);
-static void ui_skinned_monostereo_init (UiSkinnedMonoStereo *monostereo);
-static void ui_skinned_monostereo_destroy (GtkObject *object);
-static void ui_skinned_monostereo_realize (GtkWidget *widget);
-static void ui_skinned_monostereo_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_monostereo_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_monostereo_expose (GtkWidget *widget, GdkEventExpose *event);
-static void ui_skinned_monostereo_toggle_scaled (UiSkinnedMonoStereo *monostereo);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint monostereo_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_monostereo_get_type() {
- static GType monostereo_type = 0;
- if (!monostereo_type) {
- static const GTypeInfo monostereo_info = {
- sizeof (UiSkinnedMonoStereoClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_monostereo_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedMonoStereo),
- 0,
- (GInstanceInitFunc) ui_skinned_monostereo_init,
- };
- monostereo_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedMonoStereo", &monostereo_info, 0);
- }
-
- return monostereo_type;
-}
-
-static void ui_skinned_monostereo_class_init(UiSkinnedMonoStereoClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_monostereo_destroy;
-
- widget_class->realize = ui_skinned_monostereo_realize;
- widget_class->expose_event = ui_skinned_monostereo_expose;
- widget_class->size_request = ui_skinned_monostereo_size_request;
- widget_class->size_allocate = ui_skinned_monostereo_size_allocate;
-
- klass->scaled = ui_skinned_monostereo_toggle_scaled;
-
- monostereo_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedMonoStereoClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void ui_skinned_monostereo_init(UiSkinnedMonoStereo *monostereo) {
- monostereo->width = 56;
- monostereo->height = 12;
-
- GTK_WIDGET_SET_FLAGS(monostereo, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_monostereo_new(GtkWidget *fixed, gint x, gint y, SkinPixmapId si) {
- UiSkinnedMonoStereo *monostereo = g_object_new (ui_skinned_monostereo_get_type (), NULL);
-
- monostereo->x = x;
- monostereo->y = y;
- monostereo->skin_index = si;
- monostereo->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(monostereo), monostereo->x, monostereo->y);
-
- return GTK_WIDGET(monostereo);
-}
-
-static void ui_skinned_monostereo_destroy(GtkObject *object) {
- UiSkinnedMonoStereo *monostereo;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_MONOSTEREO (object));
-
- monostereo = UI_SKINNED_MONOSTEREO (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_skinned_monostereo_realize(GtkWidget *widget) {
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-}
-
-static void ui_skinned_monostereo_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedMonoStereo *monostereo = UI_SKINNED_MONOSTEREO(widget);
-
- requisition->width = monostereo->width*(monostereo->scaled ? config.scale_factor : 1);
- requisition->height = monostereo->height*(monostereo->scaled ? config.scale_factor : 1);
-}
-
-static void ui_skinned_monostereo_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedMonoStereo *monostereo = UI_SKINNED_MONOSTEREO (widget);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (monostereo->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (monostereo->scaled ? config.scale_factor : 1);
-
- monostereo->x = widget->allocation.x/(monostereo->scaled ? config.scale_factor : 1);
- monostereo->y = widget->allocation.y/(monostereo->scaled ? config.scale_factor : 1);
-}
-
-static gboolean ui_skinned_monostereo_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedMonoStereo *monostereo = UI_SKINNED_MONOSTEREO (widget);
- g_return_val_if_fail (monostereo->width > 0 && monostereo->height > 0, FALSE);
-
- GdkPixbuf *obj = NULL;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, monostereo->width, monostereo->height);
-
- switch (monostereo->num_channels) {
+DRAW_FUNC_BEGIN (monostereo_draw)
+ switch (monostereo_num_channels)
+ {
case -1:
case 0:
- skin_draw_pixbuf(widget, aud_active_skin, obj, monostereo->skin_index, 29, 12, 0, 0, 27, 12);
- skin_draw_pixbuf(widget, aud_active_skin, obj, monostereo->skin_index, 0, 12, 27, 0, 29, 12);
+ skin_draw_pixbuf (cr, SKIN_MONOSTEREO, 29, 12, 0, 0, 27, 12);
+ skin_draw_pixbuf (cr, SKIN_MONOSTEREO, 0, 12, 27, 0, 29, 12);
break;
case 1:
- skin_draw_pixbuf(widget, aud_active_skin, obj, monostereo->skin_index, 29, 0, 0, 0, 27, 12);
- skin_draw_pixbuf(widget, aud_active_skin, obj, monostereo->skin_index, 0, 12, 27, 0, 29, 12);
+ skin_draw_pixbuf (cr, SKIN_MONOSTEREO, 29, 0, 0, 0, 27, 12);
+ skin_draw_pixbuf (cr, SKIN_MONOSTEREO, 0, 12, 27, 0, 29, 12);
break;
default:
- skin_draw_pixbuf(widget, aud_active_skin, obj, monostereo->skin_index, 29, 12, 0, 0, 27, 12);
- skin_draw_pixbuf(widget, aud_active_skin, obj, monostereo->skin_index, 0, 0, 27, 0, 29, 12);
+ skin_draw_pixbuf (cr, SKIN_MONOSTEREO, 29, 12, 0, 0, 27, 12);
+ skin_draw_pixbuf (cr, SKIN_MONOSTEREO, 0, 0, 27, 0, 29, 12);
break;
}
-
- ui_skinned_widget_draw_with_coordinates(widget, obj, monostereo->width, monostereo->height,
- widget->allocation.x,
- widget->allocation.y,
- monostereo->scaled);
-
- g_object_unref(obj);
-
- return FALSE;
+DRAW_FUNC_END
+
+GtkWidget * ui_skinned_monostereo_new (void)
+{
+ GtkWidget * monostereo = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (monostereo, 56, 12);
+ DRAW_CONNECT (monostereo, monostereo_draw);
+ return monostereo;
}
-static void ui_skinned_monostereo_toggle_scaled(UiSkinnedMonoStereo *monostereo) {
- GtkWidget *widget = GTK_WIDGET (monostereo);
-
- monostereo->scaled = !monostereo->scaled;
- gtk_widget_set_size_request(widget, monostereo->width*(monostereo->scaled ? config.scale_factor : 1), monostereo->height*(monostereo->scaled ? config.scale_factor : 1));
-
- if (widget_really_drawable (widget))
- ui_skinned_monostereo_expose (widget, 0);
-}
-
-void ui_skinned_monostereo_set_num_channels(GtkWidget *widget, gint nch) {
- g_return_if_fail (UI_SKINNED_IS_MONOSTEREO (widget));
- UiSkinnedMonoStereo *monostereo = UI_SKINNED_MONOSTEREO (widget);
-
- monostereo->num_channels = nch;
-
- if (widget_really_drawable (widget))
- ui_skinned_monostereo_expose (widget, 0);
+void ui_skinned_monostereo_set_num_channels (GtkWidget * monostereo, gint nch)
+{
+ monostereo_num_channels = nch;
+ gtk_widget_queue_draw (monostereo);
}
diff --git a/src/skins/ui_skinned_monostereo.h b/src/skins/ui_skinned_monostereo.h
index db763b0..5867126 100644
--- a/src/skins/ui_skinned_monostereo.h
+++ b/src/skins/ui_skinned_monostereo.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,43 +25,12 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_MONOSTEREO_H
-#define AUDACIOUS_UI_SKINNED_MONOSTEREO_H
+#ifndef SKINS_UI_SKINNED_MONOSTEREO_H
+#define SKINS_UI_SKINNED_MONOSTEREO_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_MONOSTEREO(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_monostereo_get_type (), UiSkinnedMonoStereo)
-#define UI_SKINNED_MONOSTEREO_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_monostereo_get_type (), UiSkinnedMonoStereoClass)
-#define UI_SKINNED_IS_MONOSTEREO(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_monostereo_get_type ())
-
-typedef struct _UiSkinnedMonoStereo UiSkinnedMonoStereo;
-typedef struct _UiSkinnedMonoStereoClass UiSkinnedMonoStereoClass;
-
-struct _UiSkinnedMonoStereo {
- GtkWidget widget;
-
- gint x, y, width, height;
- gint num_channels;
- SkinPixmapId skin_index;
- gboolean scaled;
-};
-
-struct _UiSkinnedMonoStereoClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSkinnedMonoStereo *menurow);
-};
-
-GtkWidget* ui_skinned_monostereo_new (GtkWidget *fixed, gint x, gint y, SkinPixmapId si);
-GType ui_skinned_monostereo_get_type(void);
+GtkWidget * ui_skinned_monostereo_new (void);
void ui_skinned_monostereo_set_num_channels(GtkWidget *widget, gint nch);
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_MONOSTEREO_H */
diff --git a/src/skins/ui_skinned_number.c b/src/skins/ui_skinned_number.c
index a0de1e7..10157f2 100644
--- a/src/skins/ui_skinned_number.c
+++ b/src/skins/ui_skinned_number.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,258 +25,68 @@
* Audacious or using our public API to be a derived work.
*/
+#include "draw-compat.h"
+#include "ui_skin.h"
#include "ui_skinned_number.h"
-#include "skins_cfg.h"
-#include "util.h"
-#include <string.h>
-#include <ctype.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmarshal.h>
+typedef struct {
+ gint w, h;
+ gint num;
+} NumberData;
-#define UI_TYPE_SKINNED_NUMBER (ui_skinned_number_get_type())
+DRAW_FUNC_BEGIN (number_draw)
+ NumberData * data = g_object_get_data ((GObject *) wid, "numberdata");
+ g_return_val_if_fail (data, FALSE);
-enum {
- DOUBLED,
- LAST_SIGNAL
-};
+ skin_draw_pixbuf (cr, SKIN_NUMBERS, data->num * 9, 0, 0, 0, data->w, data->h);
+DRAW_FUNC_END
-static void ui_skinned_number_class_init (UiSkinnedNumberClass *klass);
-static void ui_skinned_number_init (UiSkinnedNumber *number);
-static void ui_skinned_number_destroy (GtkObject *object);
-static void ui_skinned_number_realize (GtkWidget *widget);
-static void ui_skinned_number_unrealize (GtkWidget *widget);
-static void ui_skinned_number_map (GtkWidget *widget);
-static void ui_skinned_number_unmap (GtkWidget *widget);
-static void ui_skinned_number_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_number_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_number_expose (GtkWidget *widget, GdkEventExpose *event);
-static void ui_skinned_number_toggle_scaled (UiSkinnedNumber *number);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint number_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_number_get_type() {
- static GType number_type = 0;
- if (!number_type) {
- static const GTypeInfo number_info = {
- sizeof (UiSkinnedNumberClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_number_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedNumber),
- 0,
- (GInstanceInitFunc) ui_skinned_number_init,
- };
- number_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedNumber", &number_info, 0);
- }
-
- return number_type;
-}
-
-static void ui_skinned_number_class_init(UiSkinnedNumberClass *klass) {
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_number_destroy;
-
- widget_class->realize = ui_skinned_number_realize;
- widget_class->unrealize = ui_skinned_number_unrealize;
- widget_class->map = ui_skinned_number_map;
- widget_class->unmap = ui_skinned_number_unmap;
- widget_class->expose_event = ui_skinned_number_expose;
- widget_class->size_request = ui_skinned_number_size_request;
- widget_class->size_allocate = ui_skinned_number_size_allocate;
-
- klass->scaled = ui_skinned_number_toggle_scaled;
-
- number_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedNumberClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void ui_skinned_number_init(UiSkinnedNumber *number) {
- number->width = 9;
- number->height = 13;
-
- number->event_window = NULL;
- GTK_WIDGET_SET_FLAGS(number, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_number_new(GtkWidget *fixed, gint x, gint y, SkinPixmapId si) {
- UiSkinnedNumber *number = g_object_new (ui_skinned_number_get_type (), NULL);
-
- number->x = x;
- number->y = y;
- number->num = 0;
- number->skin_index = si;
-
- number->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(number), number->x, number->y);
-
- return GTK_WIDGET(number);
-}
-
-static void ui_skinned_number_destroy(GtkObject *object) {
- UiSkinnedNumber *number;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_NUMBER (object));
-
- number = UI_SKINNED_NUMBER (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_skinned_number_realize(GtkWidget *widget) {
- UiSkinnedNumber *number;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_NUMBER(widget));
-
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
- number = UI_SKINNED_NUMBER(widget);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_BUTTON_PRESS_MASK;
-
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- number->event_window = gdk_window_new (widget->window, &attributes, attributes_mask);
-
- gdk_window_set_user_data(number->event_window, widget);
-}
-
-static void ui_skinned_number_unrealize(GtkWidget *widget) {
- UiSkinnedNumber *number = UI_SKINNED_NUMBER(widget);
-
- if ( number->event_window != NULL )
- {
- gdk_window_set_user_data( number->event_window , NULL );
- gdk_window_destroy( number->event_window );
- number->event_window = NULL;
- }
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void ui_skinned_number_map (GtkWidget *widget)
+static void number_destroy (GtkWidget * number)
{
- UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
-
- if (number->event_window != NULL)
- gdk_window_show (number->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
+ g_free (g_object_get_data ((GObject *) number, "numberdata"));
}
-static void ui_skinned_number_unmap (GtkWidget *widget)
+GtkWidget * ui_skinned_number_new (void)
{
- UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
+ GtkWidget * number = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (number, 9, 13);
- if (number->event_window != NULL)
- gdk_window_hide (number->event_window);
+ gtk_widget_add_events (number, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK);
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
+ DRAW_CONNECT (number, number_draw);
+ g_signal_connect (number, "destroy", (GCallback) number_destroy, NULL);
-static void ui_skinned_number_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedNumber *number = UI_SKINNED_NUMBER(widget);
+ NumberData * data = g_malloc0 (sizeof (NumberData));
+ data->w = 9;
+ data->h = 13;
+ g_object_set_data ((GObject *) number, "numberdata", data);
- requisition->width = number->width * ( number->scaled ? config.scale_factor : 1 );
- requisition->height = number->height*( number->scaled ? config.scale_factor : 1);
+ return number;
}
-static void ui_skinned_number_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (number->scaled ? config.scale_factor: 1 );
- widget->allocation.y *= (number->scaled ? config.scale_factor: 1 );
- if (GTK_WIDGET_REALIZED (widget))
- if (number->event_window)
- gdk_window_move_resize(number->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
-
- number->x = widget->allocation.x/(number->scaled ? config.scale_factor : 1);
- number->y = widget->allocation.y/(number->scaled ? config.scale_factor : 1);
-}
-
-static gboolean ui_skinned_number_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
- g_return_val_if_fail (number->width > 0 && number->height > 0, FALSE);
-
- GdkPixbuf *obj;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, number->width, number->height);
-
- if (number->num > 11 || number->num < 0)
- number->num = 10;
-
- skin_draw_pixbuf(widget, aud_active_skin, obj,
- number->skin_index, number->num * 9, 0,
- 0, 0, number->width, number->height);
-
- ui_skinned_widget_draw_with_coordinates(widget, obj, number->width, number->height,
- widget->allocation.x,
- widget->allocation.y,
- number->scaled);
-
- g_object_unref(obj);
-
- return FALSE;
-}
-
-static void ui_skinned_number_toggle_scaled(UiSkinnedNumber *number) {
- GtkWidget *widget = GTK_WIDGET (number);
- number->scaled = !number->scaled;
-
- gtk_widget_set_size_request(widget, number->width * ( number->scaled ? config.scale_factor : 1),
- number->height * ( number->scaled ? config.scale_factor : 1) );
-
- if (widget_really_drawable (widget))
- ui_skinned_number_expose (widget, 0);
-}
-
-void ui_skinned_number_set (GtkWidget * widget, gchar c)
+void ui_skinned_number_set (GtkWidget * number, gchar c)
{
- UiSkinnedNumber * number = (UiSkinnedNumber *) widget;
+ NumberData * data = g_object_get_data ((GObject *) number, "numberdata");
+ g_return_if_fail (data);
+
gint value = (c >= '0' && c <= '9') ? c - '0' : (c == '-') ? 11 : 10;
- if (number->num == value)
+ if (data->num == value)
return;
- number->num = value;
-
- if (widget_really_drawable (widget))
- ui_skinned_number_expose (widget, 0);
+ data->num = value;
+ gtk_widget_queue_draw (number);
}
-void ui_skinned_number_set_size(GtkWidget *widget, gint width, gint height) {
- g_return_if_fail(UI_SKINNED_IS_NUMBER(widget));
- UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
+void ui_skinned_number_set_size (GtkWidget * number, gint width, gint height)
+{
+ NumberData * data = g_object_get_data ((GObject *) number, "numberdata");
+ g_return_if_fail (data);
- number->width = width;
- number->height = height;
+ data->w = width;
+ data->h = height;
- gtk_widget_set_size_request(widget, width*(number->scaled ? config.scale_factor : 1 ),
- height*(number->scaled ? config.scale_factor : 1 ));
+ gtk_widget_set_size_request (number, width, height);
+ gtk_widget_queue_draw (number);
}
diff --git a/src/skins/ui_skinned_number.h b/src/skins/ui_skinned_number.h
index 1dea9b7..4c82630 100644
--- a/src/skins/ui_skinned_number.h
+++ b/src/skins/ui_skinned_number.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -18,45 +19,13 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_NUMBER_H
-#define AUDACIOUS_UI_SKINNED_NUMBER_H
+#ifndef SKINS_UI_SKINNED_NUMBER_H
+#define SKINS_UI_SKINNED_NUMBER_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_NUMBER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_number_get_type (), UiSkinnedNumber)
-#define UI_SKINNED_NUMBER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_number_get_type (), UiSkinnedNumberClass)
-#define UI_SKINNED_IS_NUMBER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_number_get_type ())
-
-typedef struct _UiSkinnedNumber UiSkinnedNumber;
-typedef struct _UiSkinnedNumberClass UiSkinnedNumberClass;
-
-struct _UiSkinnedNumber {
- GtkWidget widget;
-
- GdkWindow *event_window;
- gint x, y, width, height;
- gint num;
- gboolean scaled;
- SkinPixmapId skin_index;
-};
-
-struct _UiSkinnedNumberClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSkinnedNumber *textbox);
-};
-
-GtkWidget* ui_skinned_number_new (GtkWidget *fixed, gint x, gint y, SkinPixmapId si);
-GType ui_skinned_number_get_type(void);
+GtkWidget * ui_skinned_number_new ();
void ui_skinned_number_set (GtkWidget * widget, gchar c);
void ui_skinned_number_set_size(GtkWidget *widget, gint width, gint height);
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_NUMBER_H */
diff --git a/src/skins/ui_skinned_playlist.c b/src/skins/ui_skinned_playlist.c
index c351091..82e3343 100644
--- a/src/skins/ui_skinned_playlist.c
+++ b/src/skins/ui_skinned_playlist.c
@@ -2,7 +2,7 @@
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
* Copyright (c) 2008 William Pitcock
- * Copyright 2009 John Lindgren
+ * Copyright (c) 2009-2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -27,668 +27,451 @@
* Audacious or using our public API to be a derived work.
*/
-/*
- * A note about Pango and some funky spacey fonts: Weirdly baselined
- * fonts, or fonts with weird ascents or descents _will_ display a
- * little bit weird in the playlist widget, but the display engine
- * won't make it look too bad, just a little deranged. I honestly
- * don't think it's worth fixing (around...), it doesn't have to be
- * perfectly fitting, just the general look has to be ok, which it
- * IMHO is.
- *
- * A second note: The numbers aren't perfectly aligned, but in the
- * end it looks better when using a single Pango layout for each
- * number.
- */
-
#include <gdk/gdkkeysyms.h>
-#include "ui_skinned_playlist.h"
-#include "ui_skinned_playlist_slider.h"
-
-#include "debug.h"
+#include "draw-compat.h"
+#include "skins_cfg.h"
#include "ui_playlist.h"
#include "ui_manager.h"
#include "ui_skin.h"
-#include "util.h"
-#include "skins_cfg.h"
+#include "ui_skinned_playlist.h"
+#include "ui_skinned_playlist_slider.h"
-#include <audacious/audconfig.h>
#include <audacious/drct.h>
+#include <audacious/gtk-compat.h>
+#include <audacious/misc.h>
#include <audacious/playlist.h>
#include <libaudgui/libaudgui.h>
-#define UI_SKINNED_PLAYLIST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ui_skinned_playlist_get_type(), UiSkinnedPlaylistPrivate))
-typedef struct _UiSkinnedPlaylistPrivate UiSkinnedPlaylistPrivate;
-
enum {DRAG_SELECT = 1, DRAG_MOVE};
-struct _UiSkinnedPlaylistPrivate {
+typedef struct {
GtkWidget * slider;
PangoFontDescription * font;
- gint width, height, resize_width, resize_height, ascent, descent,
- letter_width, digit_width, row_height, offset, rows, first, focused,
- scroll, scroll_source, hover;
- gboolean slanted, drag;
-};
-
-static void ui_skinned_playlist_class_init (UiSkinnedPlaylistClass *klass);
-static void ui_skinned_playlist_init (UiSkinnedPlaylist *playlist);
-static void ui_skinned_playlist_destroy (GtkObject *object);
-static void ui_skinned_playlist_realize (GtkWidget *widget);
-static void ui_skinned_playlist_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_playlist_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_playlist_expose (GtkWidget *widget, GdkEventExpose *event);
-static gboolean ui_skinned_playlist_button_press (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_playlist_button_release (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_playlist_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-static gboolean ui_skinned_playlist_leave_notify (GtkWidget *widget, GdkEventCrossing *event);
-static gboolean ui_skinned_playlist_popup_show (gpointer data);
-static void ui_skinned_playlist_popup_hide (GtkWidget *widget);
-static void ui_skinned_playlist_popup_timer_start (GtkWidget *widget);
-static void ui_skinned_playlist_popup_timer_stop (GtkWidget *widget);
-
-static GtkWidgetClass *parent_class = NULL;
-
-GType ui_skinned_playlist_get_type() {
- static GType playlist_type = 0;
- if (!playlist_type) {
- static const GTypeInfo playlist_info = {
- sizeof (UiSkinnedPlaylistClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_playlist_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedPlaylist),
- 0,
- (GInstanceInitFunc) ui_skinned_playlist_init,
- };
- playlist_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedPlaylist", &playlist_info, 0);
- }
-
- return playlist_type;
-}
-
-static void ui_skinned_playlist_class_init(UiSkinnedPlaylistClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_playlist_destroy;
-
- widget_class->realize = ui_skinned_playlist_realize;
- widget_class->expose_event = ui_skinned_playlist_expose;
- widget_class->size_request = ui_skinned_playlist_size_request;
- widget_class->size_allocate = ui_skinned_playlist_size_allocate;
- widget_class->button_press_event = ui_skinned_playlist_button_press;
- widget_class->button_release_event = ui_skinned_playlist_button_release;
- widget_class->motion_notify_event = ui_skinned_playlist_motion_notify;
- widget_class->leave_notify_event = ui_skinned_playlist_leave_notify;
-
- g_type_class_add_private (gobject_class, sizeof (UiSkinnedPlaylistPrivate));
-}
-
-static void ui_skinned_playlist_init(UiSkinnedPlaylist *playlist) {
- UiSkinnedPlaylistPrivate *priv = UI_SKINNED_PLAYLIST_GET_PRIVATE(playlist);
- priv->resize_width = 0;
- priv->resize_height = 0;
- priv->rows = 0;
- priv->first = 0;
- priv->focused = -1;
- priv->drag = FALSE;
- priv->scroll = 0;
- priv->hover = -1;
-
- g_object_set_data(G_OBJECT(playlist), "timer_id", GINT_TO_POINTER(0));
- g_object_set_data(G_OBJECT(playlist), "timer_active", GINT_TO_POINTER(0));
-
- g_object_set_data(G_OBJECT(playlist), "popup_active", GINT_TO_POINTER(0));
- g_object_set_data(G_OBJECT(playlist), "popup_position", GINT_TO_POINTER(-1));
-}
-
-GtkWidget * ui_skinned_playlist_new (GtkWidget * fixed, gint x, gint y, gint
- width, gint height, const gchar * font)
+ gint width, height, row_height, offset, rows, first, focused, scroll,
+ scroll_source, hover, drag;
+ gint popup_pos, popup_source;
+ gboolean popup_shown;
+} PlaylistData;
+
+static gboolean playlist_button_press (GtkWidget * list, GdkEventButton * event);
+static gboolean playlist_button_release (GtkWidget * list, GdkEventButton *
+ event);
+static gboolean playlist_motion (GtkWidget * list, GdkEventMotion * event);
+static gboolean playlist_leave (GtkWidget * list, GdkEventCrossing * event);
+
+static void popup_trigger (GtkWidget * list, PlaylistData * data, gint pos);
+static void popup_hide (GtkWidget * list, PlaylistData * data);
+
+static void calc_layout (PlaylistData * data)
{
- UiSkinnedPlaylist *hs = g_object_new (ui_skinned_playlist_get_type (), NULL);
- UiSkinnedPlaylistPrivate *priv = UI_SKINNED_PLAYLIST_GET_PRIVATE(hs);
-
- priv->width = width;
- priv->height = height;
- priv->slider = NULL;
-
- ui_skinned_playlist_set_font ((GtkWidget *) hs, font);
+ data->rows = data->height / data->row_height;
- gtk_fixed_put ((GtkFixed *) fixed, (GtkWidget *) hs, x, y);
- gtk_widget_set_double_buffered(GTK_WIDGET(hs), TRUE);
-
- return GTK_WIDGET(hs);
-}
-
-void ui_skinned_playlist_set_slider (GtkWidget * list, GtkWidget * slider)
-{
- UI_SKINNED_PLAYLIST_GET_PRIVATE ((UiSkinnedPlaylist *) list)->slider =
- slider;
-}
-
-static void cancel_all (GtkWidget * widget, UiSkinnedPlaylistPrivate * private)
-{
- private->drag = FALSE;
-
- if (private->scroll)
- {
- private->scroll = 0;
- g_source_remove (private->scroll_source);
- }
-
- if (private->hover != -1)
+ if (data->rows && active_title)
{
- private->hover = -1;
- gtk_widget_queue_draw (widget);
+ data->offset = data->row_height;
+ data->rows --;
}
+ else
+ data->offset = 0;
- ui_skinned_playlist_popup_hide (widget);
- ui_skinned_playlist_popup_timer_stop (widget);
+ if (data->first + data->rows > active_length)
+ data->first = active_length - data->rows;
+ if (data->first < 0)
+ data->first = 0;
}
-static void ui_skinned_playlist_destroy(GtkObject *object) {
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_PLAYLIST (object));
-
- cancel_all ((GtkWidget *) object, UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) object));
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
+static gint calc_position (PlaylistData * data, gint y)
+{
+ if (y < data->offset)
+ return -1;
-static void ui_skinned_playlist_realize(GtkWidget *widget) {
- UiSkinnedPlaylist *playlist;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_PLAYLIST(widget));
-
- GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
- playlist = UI_SKINNED_PLAYLIST(widget);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK |
- GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK;
- attributes.visual = gtk_widget_get_visual(widget);
- attributes.colormap = gtk_widget_get_colormap(widget);
-
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask);
-
- widget->style = gtk_style_attach(widget->style, widget->window);
- gdk_window_set_user_data(widget->window, widget);
-}
+ gint position = data->first + (y - data->offset) / data->row_height;
-static void ui_skinned_playlist_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedPlaylistPrivate *priv = UI_SKINNED_PLAYLIST_GET_PRIVATE(widget);
+ if (position >= data->first + data->rows || position >= active_length)
+ return active_length;
- requisition->width = priv->width;
- requisition->height = priv->height;
+ return position;
}
-static void calc_layout (UiSkinnedPlaylistPrivate * private)
+static gint adjust_position (PlaylistData * data, gboolean relative, gint
+ position)
{
- private->row_height = private->ascent - private->descent;
- private->rows = private->height / private->row_height;
+ if (active_length == 0)
+ return -1;
- if (private->rows && active_title != NULL)
+ if (relative)
{
- private->offset = private->row_height;
- private->rows --;
- }
- else
- private->offset = 0;
-
- if (private->first + private->rows > active_length)
- private->first = active_length - private->rows;
- if (private->first < 0)
- private->first = 0;
-}
-
-static void scroll_to (UiSkinnedPlaylistPrivate * private, int position)
-{
- if (position < private->first || position >= private->first + private->rows)
- private->first = position - private->rows / 2;
-
- calc_layout (private);
-}
-
-static void ui_skinned_playlist_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedPlaylist *playlist = UI_SKINNED_PLAYLIST (widget);
- UiSkinnedPlaylistPrivate *priv = UI_SKINNED_PLAYLIST_GET_PRIVATE(playlist);
-
- widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED (widget))
- gdk_window_move_resize(widget->window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
+ if (data->focused == -1)
+ return 0;
- if (priv->height != widget->allocation.height || priv->width != widget->allocation.width) {
- priv->width = priv->width + priv->resize_width;
- priv->height = priv->height + priv->resize_height;
- priv->resize_width = 0;
- priv->resize_height = 0;
+ position += data->focused;
}
- calc_layout (priv);
- gtk_widget_queue_draw (widget);
+ if (position < 0)
+ return 0;
+ if (position >= active_length)
+ return active_length - 1;
- if (priv->slider != NULL)
- ui_skinned_playlist_slider_update (priv->slider);
+ return position;
}
-static void
-playlist_list_draw_string(cairo_t *cr, UiSkinnedPlaylist *pl,
- PangoFontDescription * font,
- gint line,
- gint width,
- const gchar * text,
- guint ppos)
+static void cancel_all (GtkWidget * list, PlaylistData * data)
{
- UiSkinnedPlaylistPrivate * private;
- gint plist_length_int, padding;
- PangoLayout *layout;
-
- private = UI_SKINNED_PLAYLIST_GET_PRIVATE (pl);
+ data->drag = FALSE;
- cairo_new_path(cr);
-
- if (aud_cfg->show_numbers_in_pl)
+ if (data->scroll)
{
- gchar *pos_string = g_strdup_printf(config.show_separator_in_pl == TRUE ? "%d" : "%d.", ppos);
- plist_length_int =
- gint_count_digits (active_length) + ! config.show_separator_in_pl + 1;
-
- padding = private->digit_width * (plist_length_int + 1);
-
- layout = gtk_widget_create_pango_layout(playlistwin, pos_string);
- pango_layout_set_font_description (layout, private->font);
- pango_layout_set_width(layout, plist_length_int * 100);
-
- pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
-
- cairo_move_to (cr, (private->digit_width *
- (-1 + plist_length_int - strlen(pos_string))) +
- private->digit_width / 4, private->offset + private->row_height * line);
- pango_cairo_show_layout(cr, layout);
-
- g_free(pos_string);
- g_object_unref(layout);
-
- if (!config.show_separator_in_pl)
- padding -= private->digit_width * 1.5;
- } else {
- padding = 3;
+ data->scroll = 0;
+ g_source_remove (data->scroll_source);
}
- width -= padding;
-
- layout = gtk_widget_create_pango_layout(playlistwin, text);
-
- pango_layout_set_font_description (layout, private->font);
- pango_layout_set_width(layout, width * PANGO_SCALE);
- pango_layout_set_single_paragraph_mode(layout, TRUE);
- pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
-
- cairo_move_to (cr, padding + private->letter_width / 4, private->offset +
- private->row_height * line);
- pango_cairo_show_layout(cr, layout);
+ if (data->hover != -1)
+ {
+ data->hover = -1;
+ gtk_widget_queue_draw (list);
+ }
- g_object_unref(layout);
+ popup_hide (list, data);
}
-static gboolean ui_skinned_playlist_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedPlaylist *pl = UI_SKINNED_PLAYLIST (widget);
- UiSkinnedPlaylistPrivate *priv = UI_SKINNED_PLAYLIST_GET_PRIVATE(pl);
- gint active_entry = aud_playlist_get_position (active_playlist);
- PangoLayout *layout;
- gint width, height;
- gint i;
- guint padding, padding_dwidth;
- guint max_time_len = 0;
- gfloat queue_tailpadding = 0;
- gint tpadding;
- gsize tpadding_dwidth = 0;
- gint x, y;
- guint tail_width;
- guint tail_len;
-
- gchar tail[100];
- gchar queuepos[255];
- gchar length[40];
-
- gchar **frags;
- gchar *frag0;
-
- gint plw_w, plw_h;
+DRAW_FUNC_BEGIN (playlist_draw)
+ PlaylistData * data = g_object_get_data ((GObject *) wid, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
- cairo_t *cr;
-
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_PLAYLIST (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- cr = gdk_cairo_create(widget->window);
-
- width = priv->width;
- height = priv->height;
+ gint active_entry = aud_playlist_get_position (active_playlist);
+ gint left = 3, right = 3;
+ PangoLayout * layout;
+ gint width;
- plw_w = playlistwin_get_width();
- plw_h = playlistwin_get_height();
+ /* background */
- gdk_cairo_set_source_color(cr, skin_get_color(aud_active_skin, SKIN_PLEDIT_NORMALBG));
+ set_cairo_color (cr, active_skin->colors[SKIN_PLEDIT_NORMALBG]);
+ cairo_paint (cr);
- cairo_rectangle(cr, 0, 0, width, height);
- cairo_paint(cr);
+ /* playlist title */
- if (priv->offset)
+ if (data->offset)
{
- layout = gtk_widget_create_pango_layout (widget, active_title);
- pango_layout_set_font_description (layout, priv->font);
- pango_layout_set_width (layout, PANGO_SCALE * width);
+ layout = gtk_widget_create_pango_layout (wid, active_title);
+ pango_layout_set_font_description (layout, data->font);
+ pango_layout_set_width (layout, PANGO_SCALE * (data->width - left -
+ right));
pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_MIDDLE);
- cairo_move_to (cr, 0, 0);
- gdk_cairo_set_source_color (cr, skin_get_color (aud_active_skin,
- SKIN_PLEDIT_NORMAL));
+
+ cairo_move_to (cr, left, 0);
+ set_cairo_color (cr, active_skin->colors[SKIN_PLEDIT_NORMAL]);
pango_cairo_show_layout (cr, layout);
- g_object_unref(layout);
+ g_object_unref (layout);
}
- for (i = priv->first; i < priv->first + priv->rows && i < active_length; i ++)
+ /* selection highlight */
+
+ for (gint i = data->first; i < data->first + data->rows && i <
+ active_length; i ++)
{
- gint i_length = aud_playlist_entry_get_length (active_playlist, i, TRUE);
+ if (! aud_playlist_entry_get_selected (active_playlist, i))
+ continue;
- if (i_length > 0)
- g_snprintf (length, sizeof (length), "%d:%02d", i_length / 60000,
- i_length / 1000 % 60);
- else
- length[0] = 0;
+ cairo_rectangle (cr, 0, data->offset + data->row_height * (i -
+ data->first), data->width, data->row_height);
+ set_cairo_color (cr, active_skin->colors[SKIN_PLEDIT_SELECTEDBG]);
+ cairo_fill (cr);
+ }
+
+ /* entry numbers */
- tpadding_dwidth = MAX (tpadding_dwidth, strlen (length));
+ if (aud_get_bool (NULL, "show_numbers_in_pl"))
+ {
+ width = 0;
- if (aud_playlist_entry_get_selected (active_playlist, i))
+ for (gint i = data->first; i < data->first + data->rows && i <
+ active_length; i ++)
{
- gdk_cairo_set_source_color (cr, skin_get_color (aud_active_skin,
- SKIN_PLEDIT_SELECTEDBG));
- cairo_new_path (cr);
- cairo_rectangle (cr, 0, priv->offset + priv->row_height * (i -
- priv->first), width, priv->row_height);
- cairo_fill (cr);
+ gchar buf[16];
+ snprintf (buf, sizeof buf, "%d.", 1 + i);
+
+ layout = gtk_widget_create_pango_layout (wid, buf);
+ pango_layout_set_font_description (layout, data->font);
+
+ PangoRectangle rect;
+ pango_layout_get_pixel_extents (layout, NULL, & rect);
+ width = MAX (width, rect.width);
+
+ cairo_move_to (cr, left, data->offset + data->row_height * (i -
+ data->first));
+ set_cairo_color (cr, active_skin->colors[(i == active_entry) ?
+ SKIN_PLEDIT_CURRENT : SKIN_PLEDIT_NORMAL]);
+ pango_cairo_show_layout (cr, layout);
+ g_object_unref (layout);
}
+
+ left += width + 4;
}
- for (i = priv->first; i < priv->first + priv->rows && i < active_length; i ++)
- {
- const gchar * title = aud_playlist_entry_get_title (active_playlist, i,
- TRUE);
- gint i_length = aud_playlist_entry_get_length (active_playlist, i, TRUE);
- gint pos = aud_playlist_queue_find_entry (active_playlist, i);
+ /* entry lengths */
- tail[0] = 0;
- queuepos[0] = 0;
- length[0] = 0;
+ width = 0;
- if (pos != -1)
- g_snprintf(queuepos, sizeof(queuepos), "%d", pos + 1);
+ for (gint i = data->first; i < data->first + data->rows && i <
+ active_length; i ++)
+ {
+ gint len = aud_playlist_entry_get_length (active_playlist, i, TRUE);
+ gchar buf[16];
- if (i_length > 0)
- g_snprintf (length, sizeof (length), "%d:%02d", i_length / 60000,
- i_length / 1000 % 60);
+ if (len > 0)
+ snprintf (buf, sizeof buf, "%d:%02d", len / 60000, len / 1000 % 60);
else
- length[0] = 0;
-
- strncat(tail, length, sizeof(tail) - 1);
- tail_len = strlen(tail);
-
- max_time_len = MAX(max_time_len, tail_len);
+ buf[0] = 0;
- if (pos != -1 && tpadding_dwidth <= 0)
- tail_width = width - priv->digit_width * (strlen (queuepos) + 2.25);
- else if (pos != -1)
- tail_width = width - priv->digit_width * (tpadding_dwidth + strlen
- (queuepos) + 4);
- else if (tpadding_dwidth > 0)
- tail_width = width - priv->digit_width * (tpadding_dwidth + 2.5);
- else
- tail_width = width;
+ layout = gtk_widget_create_pango_layout (wid, buf);
+ pango_layout_set_font_description (layout, data->font);
- if (i == active_entry)
- gdk_cairo_set_source_color(cr, skin_get_color(aud_active_skin, SKIN_PLEDIT_CURRENT));
- else
- gdk_cairo_set_source_color(cr, skin_get_color(aud_active_skin, SKIN_PLEDIT_NORMAL));
+ PangoRectangle rect;
+ pango_layout_get_pixel_extents (layout, NULL, & rect);
+ width = MAX (width, rect.width);
- playlist_list_draw_string (cr, pl, priv->font,
- i - priv->first, tail_width, title,
- i + 1);
+ cairo_move_to (cr, data->width - right - rect.width, data->offset +
+ data->row_height * (i - data->first));
+ set_cairo_color (cr, active_skin->colors[(i == active_entry) ?
+ SKIN_PLEDIT_CURRENT : SKIN_PLEDIT_NORMAL]);
+ pango_cairo_show_layout (cr, layout);
+ g_object_unref (layout);
+ }
- x = width - priv->digit_width * 2;
- y = priv->offset + (i - priv->first - 1) * priv->row_height +
- priv->ascent;
+ right += width + 6;
- frags = NULL;
- frag0 = NULL;
+ /* queue positions */
- if ((strlen(tail) > 0) && (tail != NULL)) {
- frags = g_strsplit(tail, ":", 0);
- frag0 = g_strconcat(frags[0], ":", NULL);
+ if (aud_playlist_queue_count (active_playlist))
+ {
+ width = 0;
- layout = gtk_widget_create_pango_layout(playlistwin, frags[1]);
- pango_layout_set_font_description (layout, priv->font);
- pango_layout_set_width(layout, tail_len * 100);
- pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
+ for (gint i = data->first; i < data->first + data->rows && i <
+ active_length; i ++)
+ {
+ gint pos = aud_playlist_queue_find_entry (active_playlist, i);
+ if (pos < 0)
+ continue;
+
+ gchar buf[16];
+ snprintf (buf, sizeof buf, "(#%d)", 1 + pos);
+
+ layout = gtk_widget_create_pango_layout (wid, buf);
+ pango_layout_set_font_description (layout, data->font);
+
+ PangoRectangle rect;
+ pango_layout_get_pixel_extents (layout, NULL, & rect);
+ width = MAX (width, rect.width);
+
+ cairo_move_to (cr, data->width - right - rect.width, data->offset +
+ data->row_height * (i - data->first));
+ set_cairo_color (cr, active_skin->colors[(i == active_entry) ?
+ SKIN_PLEDIT_CURRENT : SKIN_PLEDIT_NORMAL]);
+ pango_cairo_show_layout (cr, layout);
+ g_object_unref (layout);
+ }
- cairo_new_path(cr);
- cairo_move_to (cr, x - priv->digit_width * 0.5, y - priv->descent);
- pango_cairo_show_layout(cr, layout);
- g_object_unref(layout);
+ right += width + 6;
+ }
- layout = gtk_widget_create_pango_layout(playlistwin, frag0);
- pango_layout_set_font_description (layout, priv->font);
- pango_layout_set_width(layout, tail_len * 100);
- pango_layout_set_alignment(layout, PANGO_ALIGN_RIGHT);
+ /* titles */
- cairo_move_to (cr, x - priv->digit_width * 0.75, y - priv->descent);
- pango_cairo_show_layout(cr, layout);
- g_object_unref(layout);
+ for (gint i = data->first; i < data->first + data->rows && i <
+ active_length; i ++)
+ {
+ gchar * title = aud_playlist_entry_get_title (active_playlist, i, TRUE);
- g_free(frag0);
- g_strfreev(frags);
- }
+ layout = gtk_widget_create_pango_layout (wid, title);
+ pango_layout_set_font_description (layout, data->font);
+ pango_layout_set_width (layout, PANGO_SCALE * (data->width - left -
+ right));
+ pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END);
- if (pos != -1) {
- if (tpadding_dwidth > 0)
- queue_tailpadding = tpadding_dwidth + 1;
- else
- queue_tailpadding = -0.75;
-
- cairo_rectangle(cr,
- x -
- (((queue_tailpadding +
- strlen(queuepos)) *
- priv->digit_width) + priv->digit_width / 4), y - priv->descent,
- (strlen(queuepos)) *
- priv->digit_width + priv->digit_width / 2, priv->row_height - 2);
-
- layout =
- gtk_widget_create_pango_layout(playlistwin, queuepos);
- pango_layout_set_font_description (layout, priv->font);
- pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER);
-
- cairo_move_to(cr,
- x -
- ((queue_tailpadding +
- strlen (queuepos)) * priv->digit_width) + priv->digit_width / 4, y
- - priv->descent);
- pango_cairo_show_layout(cr, layout);
-
- g_object_unref(layout);
- }
+ str_unref (title);
- cairo_stroke(cr);
+ cairo_move_to (cr, left, data->offset + data->row_height * (i -
+ data->first));
+ set_cairo_color (cr, active_skin->colors[(i == active_entry) ?
+ SKIN_PLEDIT_CURRENT : SKIN_PLEDIT_NORMAL]);
+ pango_cairo_show_layout (cr, layout);
+ g_object_unref (layout);
}
- if (priv->focused >= priv->first && priv->focused <= priv->first +
- priv->rows - 1)
+ /* focus rectangle */
+
+ if (data->focused >= data->first && data->focused <= data->first +
+ data->rows - 1)
{
- cairo_set_line_width (cr, 1);
- gdk_cairo_set_source_color (cr, skin_get_color (aud_active_skin,
- SKIN_PLEDIT_NORMAL));
cairo_new_path (cr);
- cairo_rectangle (cr, 0.5, priv->offset + priv->row_height *
- (priv->focused - priv->first) + 0.5, width - 1, priv->row_height - 1);
+ cairo_set_line_width (cr, 1);
+ cairo_rectangle (cr, 0.5, data->offset + data->row_height *
+ (data->focused - data->first) + 0.5, data->width - 1, data->row_height
+ - 1);
+ set_cairo_color (cr, active_skin->colors[SKIN_PLEDIT_NORMAL]);
cairo_stroke (cr);
}
- if (priv->hover >= priv->first && priv->hover <= priv->first + priv->rows)
- {
- cairo_set_line_width (cr, 2);
- gdk_cairo_set_source_color (cr, skin_get_color (aud_active_skin,
- SKIN_PLEDIT_NORMAL));
+ /* hover line */
+ if (data->hover >= data->first && data->hover <= data->first + data->rows)
+ {
cairo_new_path (cr);
- cairo_move_to (cr, 0, priv->offset + priv->row_height * (priv->hover -
- priv->first));
- cairo_rel_line_to (cr, width, 0);
+ cairo_set_line_width (cr, 2);
+ cairo_move_to (cr, 0, data->offset + data->row_height * (data->hover -
+ data->first));
+ cairo_rel_line_to (cr, data->width, 0);
+ set_cairo_color (cr, active_skin->colors[SKIN_PLEDIT_NORMAL]);
cairo_stroke (cr);
}
+DRAW_FUNC_END
- gdk_cairo_set_source_color(cr, skin_get_color(aud_active_skin, SKIN_PLEDIT_NORMAL));
- cairo_set_line_width(cr, 1);
- cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
+static void playlist_destroy (GtkWidget * list)
+{
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- if (aud_cfg->show_numbers_in_pl)
- {
- if (active_length == 0)
- padding_dwidth = 0;
- else
- padding_dwidth = gint_count_digits (active_length);
+ cancel_all (list, data);
- padding = (padding_dwidth + 1) * priv->digit_width;
+ pango_font_description_free (data->font);
+ g_free (data);
+}
- /* For italic or oblique fonts we add another half of the
- * approximate width */
- if (priv->slanted)
- padding += priv->digit_width / 2;
+GtkWidget * ui_skinned_playlist_new (gint width, gint height, const gchar * font)
+{
+ GtkWidget * list = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (list, width, height);
+ gtk_widget_add_events (list, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK);
+
+ DRAW_CONNECT (list, playlist_draw);
+ g_signal_connect (list, "button-press-event", (GCallback)
+ playlist_button_press, NULL);
+ g_signal_connect (list, "button-release-event", (GCallback)
+ playlist_button_release, NULL);
+ g_signal_connect (list, "leave-notify-event", (GCallback) playlist_leave,
+ NULL);
+ g_signal_connect (list, "motion-notify-event", (GCallback) playlist_motion,
+ NULL);
+ g_signal_connect (list, "destroy", (GCallback) playlist_destroy, NULL);
+
+ PlaylistData * data = g_malloc0 (sizeof (PlaylistData));
+ data->width = width;
+ data->height = height;
+ data->focused = -1;
+ data->hover = -1;
+ data->popup_pos = -1;
+ g_object_set_data ((GObject *) list, "playlistdata", data);
+
+ ui_skinned_playlist_set_font (list, font);
+
+ return list;
+}
- if (config.show_separator_in_pl) {
- cairo_new_path(cr);
+void ui_skinned_playlist_set_slider (GtkWidget * list, GtkWidget * slider)
+{
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- cairo_move_to(cr, padding, 0);
- cairo_rel_line_to(cr, 0, priv->height - 1);
+ data->slider = slider;
+}
- cairo_stroke(cr);
- }
- }
+void ui_skinned_playlist_resize (GtkWidget * list, gint width, gint height)
+{
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- if (tpadding_dwidth != 0)
- {
- tpadding = priv->digit_width * (tpadding_dwidth + 1.5);
+ gtk_widget_set_size_request (list, width, height);
- if (priv->slanted)
- tpadding += priv->digit_width / 2;
+ data->width = width;
+ data->height = height;
- if (config.show_separator_in_pl) {
- cairo_new_path(cr);
+ calc_layout (data);
+ gtk_widget_queue_draw (list);
- cairo_move_to(cr, priv->width - tpadding, 0);
- cairo_rel_line_to(cr, 0, priv->height - 1);
+ if (data->slider)
+ ui_skinned_playlist_slider_update (data->slider);
+}
- cairo_stroke(cr);
- }
- }
+void ui_skinned_playlist_set_font (GtkWidget * list, const gchar * font)
+{
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- cairo_destroy(cr);
+ pango_font_description_free (data->font);
+ data->font = pango_font_description_from_string (font);
- return FALSE;
-}
+ PangoLayout * layout = gtk_widget_create_pango_layout (list, "A");
+ pango_layout_set_font_description (layout, data->font);
-static gint calc_position (UiSkinnedPlaylistPrivate * private, gint y)
-{
- gint position;
+ PangoRectangle rect;
+ pango_layout_get_pixel_extents (layout, NULL, & rect);
- if (y < private->offset)
- return -1;
+ /* make sure row_height is non-zero; we divide by it */
+ data->row_height = MAX (rect.height, 1);
- position = private->first + (y - private->offset) / private->row_height;
+ g_object_unref (layout);
- if (position >= private->first + private->rows || position >= active_length)
- return active_length;
+ calc_layout (data);
+ gtk_widget_queue_draw (list);
- return position;
+ if (data->slider)
+ ui_skinned_playlist_slider_update (data->slider);
}
-static gint adjust_position (UiSkinnedPlaylistPrivate * private, gboolean
- relative, gint position)
+void ui_skinned_playlist_update (GtkWidget * list)
{
- if (active_length == 0)
- return -1;
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- if (relative)
- {
- if (private->focused == -1)
- return 0;
+ calc_layout (data);
- position += private->focused;
- }
+ if (data->focused != -1)
+ data->focused = adjust_position (data, TRUE, 0);
- if (position < 0)
- return 0;
- if (position >= active_length)
- return active_length - 1;
+ gtk_widget_queue_draw (list);
- return position;
+ if (data->slider != NULL)
+ ui_skinned_playlist_slider_update (data->slider);
+}
+
+static void scroll_to (PlaylistData * data, gint position)
+{
+ if (position < data->first || position >= data->first + data->rows)
+ data->first = position - data->rows / 2;
+
+ calc_layout (data);
}
-static void select_single (UiSkinnedPlaylistPrivate * private, gboolean
- relative, gint position)
+static void select_single (PlaylistData * data, gboolean relative, gint position)
{
- position = adjust_position (private, relative, position);
+ position = adjust_position (data, relative, position);
if (position == -1)
return;
- if (private->focused != -1)
- aud_playlist_entry_set_selected (active_playlist, private->focused,
- FALSE);
+ if (data->focused != -1)
+ aud_playlist_entry_set_selected (active_playlist, data->focused, FALSE);
if (aud_playlist_selected_count (active_playlist) > 0)
aud_playlist_select_all (active_playlist, FALSE);
aud_playlist_entry_set_selected (active_playlist, position, TRUE);
- private->focused = position;
- scroll_to (private, position);
+ data->focused = position;
+ scroll_to (data, position);
}
-static void select_extend (UiSkinnedPlaylistPrivate * private, gboolean
- relative, gint position)
+static void select_extend (PlaylistData * data, gboolean relative, gint position)
{
- gint count, sign;
+ position = adjust_position (data, relative, position);
- position = adjust_position (private, relative, position);
-
- if (position == -1 || position == private->focused)
+ if (position == -1 || position == data->focused)
return;
- count = adjust_position (private, TRUE, 0);
- sign = (position > count) ? 1 : -1;
+ gint count = adjust_position (data, TRUE, 0);
+ gint sign = (position > count) ? 1 : -1;
for (; count != position; count += sign)
aud_playlist_entry_set_selected (active_playlist, count,
@@ -696,26 +479,24 @@ static void select_extend (UiSkinnedPlaylistPrivate * private, gboolean
aud_playlist_entry_set_selected (active_playlist, position, TRUE);
- private->focused = position;
- scroll_to (private, position);
+ data->focused = position;
+ scroll_to (data, position);
}
-static void select_slide (UiSkinnedPlaylistPrivate * private, gboolean relative,
- gint position)
+static void select_slide (PlaylistData * data, gboolean relative, gint position)
{
- position = adjust_position (private, relative, position);
+ position = adjust_position (data, relative, position);
if (position == -1)
return;
- private->focused = position;
- scroll_to (private, position);
+ data->focused = position;
+ scroll_to (data, position);
}
-static void select_toggle (UiSkinnedPlaylistPrivate * private, gboolean
- relative, gint position)
+static void select_toggle (PlaylistData * data, gboolean relative, gint position)
{
- position = adjust_position (private, relative, position);
+ position = adjust_position (data, relative, position);
if (position == -1)
return;
@@ -723,29 +504,28 @@ static void select_toggle (UiSkinnedPlaylistPrivate * private, gboolean
aud_playlist_entry_set_selected (active_playlist, position,
! aud_playlist_entry_get_selected (active_playlist, position));
- private->focused = position;
- scroll_to (private, position);
+ data->focused = position;
+ scroll_to (data, position);
}
-static void select_move (UiSkinnedPlaylistPrivate * private, gboolean relative,
- gint position)
+static void select_move (PlaylistData * data, gboolean relative, gint position)
{
- position = adjust_position (private, relative, position);
+ position = adjust_position (data, relative, position);
- if (private->focused == -1 || position == -1 || position == private->focused)
+ if (data->focused == -1 || position == -1 || position == data->focused)
return;
- private->focused += aud_playlist_shift (active_playlist, private->focused,
- position - private->focused);
+ data->focused += aud_playlist_shift (active_playlist, data->focused,
+ position - data->focused);
- scroll_to (private, private->focused);
+ scroll_to (data, data->focused);
}
-static void delete_selected (UiSkinnedPlaylistPrivate * private)
+static void delete_selected (PlaylistData * data)
{
gint shift = 0, count;
- for (count = 0; count < private->focused; count ++)
+ for (count = 0; count < data->focused; count ++)
{
if (aud_playlist_entry_get_selected (active_playlist, count))
shift --;
@@ -753,45 +533,18 @@ static void delete_selected (UiSkinnedPlaylistPrivate * private)
aud_playlist_delete_selected (active_playlist);
active_length = aud_playlist_entry_count (active_playlist);
- calc_layout (private);
+ calc_layout (data);
- private->focused = adjust_position (private, TRUE, shift);
- select_single (private, TRUE, 0);
+ data->focused = adjust_position (data, TRUE, shift);
+ select_single (data, TRUE, 0);
}
-void ui_skinned_playlist_update (GtkWidget * widget)
+gboolean ui_skinned_playlist_key (GtkWidget * list, GdkEventKey * event)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
-
- calc_layout (private);
-
- if (private->focused != -1)
- private->focused = adjust_position (private, TRUE, 0);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
- gtk_widget_queue_draw (widget);
-
- if (private->slider != NULL)
- ui_skinned_playlist_slider_update (private->slider);
-}
-
-void ui_skinned_playlist_follow (GtkWidget * widget)
-{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
-
- cancel_all (widget, private);
- select_single (private, FALSE, aud_playlist_get_position (active_playlist));
-
- playlistwin_update ();
-}
-
-gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event)
-{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
-
- cancel_all (widget, private);
+ cancel_all (list, data);
switch (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK))
{
@@ -799,35 +552,35 @@ gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event)
switch (event->keyval)
{
case GDK_Up:
- select_single (private, TRUE, -1);
+ select_single (data, TRUE, -1);
break;
case GDK_Down:
- select_single (private, TRUE, 1);
+ select_single (data, TRUE, 1);
break;
case GDK_Page_Up:
- select_single (private, TRUE, - private->rows);
+ select_single (data, TRUE, - data->rows);
break;
case GDK_Page_Down:
- select_single (private, TRUE, private->rows);
+ select_single (data, TRUE, data->rows);
break;
case GDK_Home:
- select_single (private, FALSE, 0);
+ select_single (data, FALSE, 0);
break;
case GDK_End:
- select_single (private, FALSE, active_length - 1);
+ select_single (data, FALSE, active_length - 1);
break;
case GDK_Return:
- select_single (private, TRUE, 0);
+ select_single (data, TRUE, 0);
aud_playlist_set_playing (active_playlist);
- aud_playlist_set_position (active_playlist, private->focused);
+ aud_playlist_set_position (active_playlist, data->focused);
aud_drct_play ();
break;
case GDK_Escape:
- select_single (private, FALSE, aud_playlist_get_position
+ select_single (data, FALSE, aud_playlist_get_position
(active_playlist));
break;
case GDK_Delete:
- delete_selected (private);
+ delete_selected (data);
break;
default:
return FALSE;
@@ -837,22 +590,22 @@ gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event)
switch (event->keyval)
{
case GDK_Up:
- select_extend (private, TRUE, -1);
+ select_extend (data, TRUE, -1);
break;
case GDK_Down:
- select_extend (private, TRUE, 1);
+ select_extend (data, TRUE, 1);
break;
case GDK_Page_Up:
- select_extend (private, TRUE, -private->rows);
+ select_extend (data, TRUE, -data->rows);
break;
case GDK_Page_Down:
- select_extend (private, TRUE, private->rows);
+ select_extend (data, TRUE, data->rows);
break;
case GDK_Home:
- select_extend (private, FALSE, 0);
+ select_extend (data, FALSE, 0);
break;
case GDK_End:
- select_extend (private, FALSE, active_length - 1);
+ select_extend (data, FALSE, active_length - 1);
break;
default:
return FALSE;
@@ -862,25 +615,25 @@ gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event)
switch (event->keyval)
{
case GDK_space:
- select_toggle (private, TRUE, 0);
+ select_toggle (data, TRUE, 0);
break;
case GDK_Up:
- select_slide (private, TRUE, -1);
+ select_slide (data, TRUE, -1);
break;
case GDK_Down:
- select_slide (private, TRUE, 1);
+ select_slide (data, TRUE, 1);
break;
case GDK_Page_Up:
- select_slide (private, TRUE, -private->rows);
+ select_slide (data, TRUE, -data->rows);
break;
case GDK_Page_Down:
- select_slide (private, TRUE, private->rows);
+ select_slide (data, TRUE, data->rows);
break;
case GDK_Home:
- select_slide (private, FALSE, 0);
+ select_slide (data, FALSE, 0);
break;
case GDK_End:
- select_slide (private, FALSE, active_length - 1);
+ select_slide (data, FALSE, active_length - 1);
break;
default:
return FALSE;
@@ -890,22 +643,22 @@ gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event)
switch (event->keyval)
{
case GDK_Up:
- select_move (private, TRUE, -1);
+ select_move (data, TRUE, -1);
break;
case GDK_Down:
- select_move (private, TRUE, 1);
+ select_move (data, TRUE, 1);
break;
case GDK_Page_Up:
- select_move (private, TRUE, -private->rows);
+ select_move (data, TRUE, -data->rows);
break;
case GDK_Page_Down:
- select_move (private, TRUE, private->rows);
+ select_move (data, TRUE, data->rows);
break;
case GDK_Home:
- select_move (private, FALSE, 0);
+ select_move (data, FALSE, 0);
break;
case GDK_End:
- select_move (private, FALSE, active_length - 1);
+ select_move (data, FALSE, active_length - 1);
break;
default:
return FALSE;
@@ -919,90 +672,91 @@ gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event)
return TRUE;
}
-void ui_skinned_playlist_row_info (GtkWidget * widget, gint * rows, gint *
- first, gint * focused)
+void ui_skinned_playlist_row_info (GtkWidget * list, gint * rows, gint * first,
+ gint * focused)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- * rows = private->rows;
- * first = private->first;
- * focused = private->focused;
+ * rows = data->rows;
+ * first = data->first;
+ * focused = data->focused;
}
-void ui_skinned_playlist_scroll_to (GtkWidget * widget, gint row)
+void ui_skinned_playlist_scroll_to (GtkWidget * list, gint row)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- cancel_all (widget, private);
- private->first = row;
- calc_layout (private);
+ cancel_all (list, data);
+ data->first = row;
+ calc_layout (data);
- gtk_widget_queue_draw (widget);
+ gtk_widget_queue_draw (list);
- if (private->slider != NULL)
- ui_skinned_playlist_slider_update (private->slider);
+ if (data->slider)
+ ui_skinned_playlist_slider_update (data->slider);
}
-void ui_skinned_playlist_set_focused (GtkWidget * widget, gint row)
+void ui_skinned_playlist_set_focused (GtkWidget * list, gint row)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
- cancel_all (widget, private);
- private->focused = row;
- scroll_to (private, row);
+ cancel_all (list, data);
+ data->focused = row;
+ scroll_to (data, row);
- gtk_widget_queue_draw (widget);
+ gtk_widget_queue_draw (list);
}
-void ui_skinned_playlist_hover (GtkWidget * widget, gint x, gint y)
+void ui_skinned_playlist_hover (GtkWidget * list, gint x, gint y)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_if_fail (data);
+
gint new;
- if (y < private->offset)
- new = private->first;
- else if (y > private->offset + private->row_height * private->rows)
- new = private->first + private->rows;
+ if (y < data->offset)
+ new = data->first;
+ else if (y > data->offset + data->row_height * data->rows)
+ new = data->first + data->rows;
else
- new = private->first + (y - private->offset + private->row_height / 2) /
- private->row_height;
+ new = data->first + (y - data->offset + data->row_height / 2) /
+ data->row_height;
if (new > active_length)
new = active_length;
- if (new != private->hover)
+ if (new != data->hover)
{
- private->hover = new;
- gtk_widget_queue_draw (widget);
+ data->hover = new;
+ gtk_widget_queue_draw (list);
}
}
-gint ui_skinned_playlist_hover_end (GtkWidget * widget)
+gint ui_skinned_playlist_hover_end (GtkWidget * list)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
- gint temp = private->hover;
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, -1);
- private->hover = -1;
+ gint temp = data->hover;
+ data->hover = -1;
- gtk_widget_queue_draw (widget);
+ gtk_widget_queue_draw (list);
return temp;
}
-static gboolean ui_skinned_playlist_button_press (GtkWidget * widget,
- GdkEventButton * event)
+static gboolean playlist_button_press (GtkWidget * list, GdkEventButton * event)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
- gint position = calc_position (private, event->y);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
+
+ gint position = calc_position (data, event->y);
gint state = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK |
GDK_MOD1_MASK);
- cancel_all (widget, private);
+ cancel_all (list, data);
switch (event->type)
{
@@ -1017,19 +771,19 @@ static gboolean ui_skinned_playlist_button_press (GtkWidget * widget,
{
case 0:
if (aud_playlist_entry_get_selected (active_playlist, position))
- select_slide (private, FALSE, position);
+ select_slide (data, FALSE, position);
else
- select_single (private, FALSE, position);
+ select_single (data, FALSE, position);
- private->drag = DRAG_MOVE;
+ data->drag = DRAG_MOVE;
break;
case GDK_SHIFT_MASK:
- select_extend (private, FALSE, position);
- private->drag = DRAG_SELECT;
+ select_extend (data, FALSE, position);
+ data->drag = DRAG_SELECT;
break;
case GDK_CONTROL_MASK:
- select_toggle (private, FALSE, position);
- private->drag = DRAG_SELECT;
+ select_toggle (data, FALSE, position);
+ data->drag = DRAG_SELECT;
break;
default:
return TRUE;
@@ -1043,9 +797,9 @@ static gboolean ui_skinned_playlist_button_press (GtkWidget * widget,
if (position != -1 && position != active_length)
{
if (aud_playlist_entry_get_selected (active_playlist, position))
- select_slide (private, FALSE, position);
+ select_slide (data, FALSE, position);
else
- select_single (private, FALSE, position);
+ select_single (data, FALSE, position);
}
ui_popup_menu_show ((position == -1) ? UI_MENU_PLAYLIST :
@@ -1074,29 +828,30 @@ static gboolean ui_skinned_playlist_button_press (GtkWidget * widget,
return TRUE;
}
-static gboolean ui_skinned_playlist_button_release (GtkWidget * widget,
- GdkEventButton * event)
+static gboolean playlist_button_release (GtkWidget * list, GdkEventButton *
+ event)
{
- cancel_all (widget, UI_SKINNED_PLAYLIST_GET_PRIVATE ((UiSkinnedPlaylist *)
- widget));
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
+
+ cancel_all (list, data);
return TRUE;
}
-static gboolean scroll_cb (void * data)
+static gboolean scroll_cb (PlaylistData * data)
{
- UiSkinnedPlaylistPrivate * private = data;
- gint position = adjust_position (private, TRUE, private->scroll);
+ gint position = adjust_position (data, TRUE, data->scroll);
if (position == -1)
return TRUE;
- switch (private->drag)
+ switch (data->drag)
{
case DRAG_SELECT:
- select_extend (private, FALSE, position);
+ select_extend (data, FALSE, position);
break;
case DRAG_MOVE:
- select_move (private, FALSE, position);
+ select_move (data, FALSE, position);
break;
}
@@ -1104,44 +859,45 @@ static gboolean scroll_cb (void * data)
return TRUE;
}
-static gboolean ui_skinned_playlist_motion_notify (GtkWidget * widget,
- GdkEventMotion * event)
+static gboolean playlist_motion (GtkWidget * list, GdkEventMotion * event)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
- gint position = calc_position (private, event->y);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
+
+ gint position = calc_position (data, event->y);
gint new_scroll;
- if (private->drag)
+ if (data->drag)
{
if (position == -1 || position == active_length)
{
new_scroll = (position == -1 ? -1 : 1);
- if (private->scroll != new_scroll)
+ if (data->scroll != new_scroll)
{
- if (private->scroll)
- g_source_remove (private->scroll_source);
+ if (data->scroll)
+ g_source_remove (data->scroll_source);
- private->scroll = new_scroll;
- private->scroll_source = g_timeout_add (100, scroll_cb, private);
+ data->scroll = new_scroll;
+ data->scroll_source = g_timeout_add (100, (GSourceFunc)
+ scroll_cb, data);
}
}
else
{
- if (private->scroll)
+ if (data->scroll)
{
- private->scroll = 0;
- g_source_remove (private->scroll_source);
+ data->scroll = 0;
+ g_source_remove (data->scroll_source);
}
- switch (private->drag)
+ switch (data->drag)
{
case DRAG_SELECT:
- select_extend (private, FALSE, position);
+ select_extend (data, FALSE, position);
break;
case DRAG_MOVE:
- select_move (private, FALSE, position);
+ select_move (data, FALSE, position);
break;
}
@@ -1151,106 +907,63 @@ static gboolean ui_skinned_playlist_motion_notify (GtkWidget * widget,
else
{
if (position == -1 || position == active_length)
- cancel_all (widget, private);
- else if (aud_cfg->show_filepopup_for_tuple && (! GPOINTER_TO_INT
- (g_object_get_data ((GObject *) widget, "popup_active")) || position
- != GPOINTER_TO_INT (g_object_get_data ((GObject *) widget,
- "popup_position"))))
+ cancel_all (list, data);
+ else if (aud_get_bool (NULL, "show_filepopup_for_tuple") && data->popup_pos != position)
{
- cancel_all (widget, private);
- g_object_set_data ((GObject *) widget, "popup_position",
- GINT_TO_POINTER (position));
- ui_skinned_playlist_popup_timer_start (widget);
+ cancel_all (list, data);
+ popup_trigger (list, data, position);
}
}
return TRUE;
}
-static gboolean ui_skinned_playlist_leave_notify (GtkWidget * widget,
- GdkEventCrossing * event)
+static gboolean playlist_leave (GtkWidget * list, GdkEventCrossing * event)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) widget);
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
- if (! private->drag)
- cancel_all (widget, private);
+ if (! data->drag)
+ cancel_all (list, data);
return TRUE;
}
-void ui_skinned_playlist_set_font (GtkWidget * list, const gchar * font)
+static gboolean popup_show (GtkWidget * list)
{
- UiSkinnedPlaylistPrivate * private = UI_SKINNED_PLAYLIST_GET_PRIVATE
- ((UiSkinnedPlaylist *) list);
- gchar *font_lower;
-
- private->font = pango_font_description_from_string (font);
-
- text_get_extents(font,
- "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz ",
- & private->letter_width, 0, & private->ascent, & private->descent);
- private->letter_width /= 53;
-
- text_get_extents (font, "0123456789", & private->digit_width, 0, 0, 0);
- private->digit_width /= 10;
+ PlaylistData * data = g_object_get_data ((GObject *) list, "playlistdata");
+ g_return_val_if_fail (data, FALSE);
- font_lower = g_utf8_strdown(font, strlen(font));
- /* This doesn't take any i18n into account, but i think there is none with TTF fonts
- * FIXME: This can probably be retrieved trough Pango too
- */
- private->slanted = strstr (font_lower, "oblique") != NULL || strstr
- (font_lower, "italic") != NULL;
+ audgui_infopopup_show (active_playlist, data->popup_pos);
+ data->popup_shown = TRUE;
- g_free(font_lower);
-
- calc_layout (private);
- gtk_widget_queue_draw (list);
-
- if (private->slider != NULL)
- ui_skinned_playlist_slider_update (private->slider);
+ g_source_remove (data->popup_source);
+ data->popup_source = 0;
+ return FALSE;
}
-void ui_skinned_playlist_resize_relative(GtkWidget *widget, gint w, gint h) {
- UiSkinnedPlaylistPrivate *priv = UI_SKINNED_PLAYLIST_GET_PRIVATE(widget);
- priv->resize_width += w;
- priv->resize_height += h;
- gtk_widget_set_size_request(widget, priv->width+priv->resize_width, priv->height+priv->resize_height);
-}
+static void popup_trigger (GtkWidget * list, PlaylistData * data, gint pos)
+{
+ popup_hide (list, data);
-static gboolean ui_skinned_playlist_popup_show(gpointer data) {
- GtkWidget *widget = data;
- gint pos = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "popup_position"));
+ data->popup_pos = pos;
+ data->popup_source = g_timeout_add (aud_get_int (NULL, "filepopup_delay") *
+ 100, (GSourceFunc) popup_show, list);
+}
- if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "timer_active")) == 1 && pos != -1) {
- audgui_infopopup_show (active_playlist, pos);
- g_object_set_data(G_OBJECT(widget), "popup_active" , GINT_TO_POINTER(1));
+static void popup_hide (GtkWidget * list, PlaylistData * data)
+{
+ if (data->popup_source)
+ {
+ g_source_remove (data->popup_source);
+ data->popup_source = 0;
}
- ui_skinned_playlist_popup_timer_stop(widget);
- return FALSE;
-}
-
-static void ui_skinned_playlist_popup_hide(GtkWidget *widget) {
- if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "popup_active")) == 1) {
- g_object_set_data(G_OBJECT(widget), "popup_active", GINT_TO_POINTER(0));
+ if (data->popup_shown)
+ {
audgui_infopopup_hide ();
+ data->popup_shown = FALSE;
}
-}
-
-static void ui_skinned_playlist_popup_timer_start(GtkWidget *widget) {
- int timer_id;
-
- timer_id = g_timeout_add (aud_cfg->filepopup_delay * 100,
- ui_skinned_playlist_popup_show, widget);
- g_object_set_data(G_OBJECT(widget), "timer_id", GINT_TO_POINTER(timer_id));
- g_object_set_data(G_OBJECT(widget), "timer_active", GINT_TO_POINTER(1));
-}
-
-static void ui_skinned_playlist_popup_timer_stop(GtkWidget *widget) {
- if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "timer_active")) == 1)
- g_source_remove(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "timer_id")));
- g_object_set_data(G_OBJECT(widget), "timer_id", GINT_TO_POINTER(0));
- g_object_set_data(G_OBJECT(widget), "timer_active", GINT_TO_POINTER(0));
+ data->popup_pos = -1;
}
diff --git a/src/skins/ui_skinned_playlist.h b/src/skins/ui_skinned_playlist.h
index 8990484..004bec5 100644
--- a/src/skins/ui_skinned_playlist.h
+++ b/src/skins/ui_skinned_playlist.h
@@ -1,7 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
- * Copyright (c) 2009 John Lindgren
+ * Copyright (c) 2009-2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -25,53 +25,22 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_PLAYLIST_H
-#define AUDACIOUS_UI_SKINNED_PLAYLIST_H
+#ifndef SKINS_UI_SKINNED_PLAYLIST_H
+#define SKINS_UI_SKINNED_PLAYLIST_H
#include <gtk/gtk.h>
-#include <cairo.h>
-#include <pango/pangocairo.h>
-
-#include "ui_skin.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_PLAYLIST(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_playlist_get_type (), UiSkinnedPlaylist)
-#define UI_SKINNED_PLAYLIST_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_playlist_get_type (), UiSkinnedPlaylistClass)
-#define UI_SKINNED_IS_PLAYLIST(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_playlist_get_type ())
-
-typedef struct _UiSkinnedPlaylist UiSkinnedPlaylist;
-typedef struct _UiSkinnedPlaylistClass UiSkinnedPlaylistClass;
-
-struct _UiSkinnedPlaylist {
- GtkWidget widget;
-};
-
-struct _UiSkinnedPlaylistClass {
- GtkWidgetClass parent_class;
-};
-
-GtkWidget * ui_skinned_playlist_new (GtkWidget * fixed, gint x, gint y, gint
- width, gint height, const gchar * font);
+GtkWidget * ui_skinned_playlist_new (gint width, gint height, const gchar * font);
void ui_skinned_playlist_set_slider (GtkWidget * list, GtkWidget * slider);
-GType ui_skinned_playlist_get_type(void);
-void ui_skinned_playlist_resize_relative(GtkWidget *widget, gint w, gint h);
+void ui_skinned_playlist_resize (GtkWidget * list, gint w, gint h);
void ui_skinned_playlist_set_font (GtkWidget * list, const gchar * font);
-void ui_skinned_playlist_update (GtkWidget * widget);
-void ui_skinned_playlist_follow (GtkWidget * widget);
-gboolean ui_skinned_playlist_key (GtkWidget * widget, GdkEventKey * event);
-void ui_skinned_playlist_row_info (GtkWidget * widget, gint * rows, gint *
- first, gint * focused);
-void ui_skinned_playlist_scroll_to (GtkWidget * widget, gint row);
-void ui_skinned_playlist_set_focused (GtkWidget * widget, gint row);
-void ui_skinned_playlist_hover (GtkWidget * widget, gint x, gint y);
-int ui_skinned_playlist_hover_end (GtkWidget * widget);
+void ui_skinned_playlist_update (GtkWidget * list);
+gboolean ui_skinned_playlist_key (GtkWidget * list, GdkEventKey * event);
+void ui_skinned_playlist_row_info (GtkWidget * list, gint * rows, gint * first,
+ gint * focused);
+void ui_skinned_playlist_scroll_to (GtkWidget * list, gint row);
+void ui_skinned_playlist_set_focused (GtkWidget * list, gint row);
+void ui_skinned_playlist_hover (GtkWidget * list, gint x, gint y);
+gint ui_skinned_playlist_hover_end (GtkWidget * list);
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_PLAYLIST_H */
diff --git a/src/skins/ui_skinned_playlist_slider.c b/src/skins/ui_skinned_playlist_slider.c
index 5c2a504..da288ca 100644
--- a/src/skins/ui_skinned_playlist_slider.c
+++ b/src/skins/ui_skinned_playlist_slider.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,301 +25,117 @@
* Audacious or using our public API to be a derived work.
*/
+#include "draw-compat.h"
+#include "ui_playlist.h"
#include "ui_skin.h"
#include "ui_skinned_playlist.h"
#include "ui_skinned_playlist_slider.h"
-#include "ui_playlist.h"
-#include "util.h"
-
-#define UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ui_skinned_playlist_slider_get_type(), UiSkinnedPlaylistSliderPrivate))
-typedef struct _UiSkinnedPlaylistSliderPrivate UiSkinnedPlaylistSliderPrivate;
-
-struct _UiSkinnedPlaylistSliderPrivate {
- GtkWidget * list;
- SkinPixmapId skin_index;
- gint width, height;
-
- gint resize_height;
- gint move_x;
- gint prev_y;
- gint drag_y;
-};
-
-static void ui_skinned_playlist_slider_class_init (UiSkinnedPlaylistSliderClass *klass);
-static void ui_skinned_playlist_slider_init (UiSkinnedPlaylistSlider *playlist_slider);
-static void ui_skinned_playlist_slider_destroy (GtkObject *object);
-static void ui_skinned_playlist_slider_realize (GtkWidget *widget);
-static void ui_skinned_playlist_slider_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_playlist_slider_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_playlist_slider_expose (GtkWidget *widget, GdkEventExpose *event);
-static void ui_skinned_playlist_slider_set_position (GtkWidget *widget, gint y);
-static gboolean ui_skinned_playlist_slider_button_press (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_playlist_slider_button_release (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_playlist_slider_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-
-static GtkWidgetClass *parent_class = NULL;
-
-GType ui_skinned_playlist_slider_get_type() {
- static GType playlist_slider_type = 0;
- if (!playlist_slider_type) {
- static const GTypeInfo playlist_slider_info = {
- sizeof (UiSkinnedPlaylistSliderClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_playlist_slider_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedPlaylistSlider),
- 0,
- (GInstanceInitFunc) ui_skinned_playlist_slider_init,
- };
- playlist_slider_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedPlaylistSlider", &playlist_slider_info, 0);
- }
-
- return playlist_slider_type;
-}
-
-static void ui_skinned_playlist_slider_class_init(UiSkinnedPlaylistSliderClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_playlist_slider_destroy;
-
- widget_class->realize = ui_skinned_playlist_slider_realize;
- widget_class->expose_event = ui_skinned_playlist_slider_expose;
- widget_class->size_request = ui_skinned_playlist_slider_size_request;
- widget_class->size_allocate = ui_skinned_playlist_slider_size_allocate;
- widget_class->button_press_event = ui_skinned_playlist_slider_button_press;
- widget_class->button_release_event = ui_skinned_playlist_slider_button_release;
- widget_class->motion_notify_event = ui_skinned_playlist_slider_motion_notify;
-
- g_type_class_add_private (gobject_class, sizeof (UiSkinnedPlaylistSliderPrivate));
-}
-
-static void ui_skinned_playlist_slider_init(UiSkinnedPlaylistSlider *playlist_slider) {
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(playlist_slider);
- playlist_slider->pressed = FALSE;
- priv->resize_height = 0;
- priv->move_x = 0;
- priv->drag_y = 0;
- priv->prev_y = 0;
-}
-
-GtkWidget * ui_skinned_playlist_slider_new (GtkWidget * fixed, gint x, gint y,
- gint h, GtkWidget * list)
-{
-
- UiSkinnedPlaylistSlider *hs = g_object_new (ui_skinned_playlist_slider_get_type (), NULL);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(hs);
-
- hs->x = x;
- hs->y = y;
- priv->width = 8;
- priv->height = h;
- priv->list = list;
- priv->skin_index = SKIN_PLEDIT;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(hs), hs->x, hs->y);
-
- return GTK_WIDGET(hs);
-}
-
-static void ui_skinned_playlist_slider_destroy(GtkObject *object) {
- UiSkinnedPlaylistSlider *playlist_slider;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_PLAYLIST_SLIDER (object));
-
- playlist_slider = UI_SKINNED_PLAYLIST_SLIDER (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_skinned_playlist_slider_realize(GtkWidget *widget) {
- UiSkinnedPlaylistSlider *playlist_slider;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_PLAYLIST_SLIDER(widget));
-
- GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
- playlist_slider = UI_SKINNED_PLAYLIST_SLIDER(widget);
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK;
- attributes.visual = gtk_widget_get_visual(widget);
- attributes.colormap = gtk_widget_get_colormap(widget);
+static GtkWidget * pl_slider_list;
+static gint pl_slider_height;
+static gboolean pl_slider_pressed;
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask);
-
- widget->style = gtk_style_attach(widget->style, widget->window);
- gdk_window_set_user_data(widget->window, widget);
-}
-
-static void ui_skinned_playlist_slider_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget);
-
- requisition->width = priv->width;
- requisition->height = priv->height;
-}
-
-static void ui_skinned_playlist_slider_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedPlaylistSlider *playlist_slider = UI_SKINNED_PLAYLIST_SLIDER (widget);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(playlist_slider);
-
- widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED (widget))
- gdk_window_move_resize(widget->window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
-
- if (playlist_slider->x + priv->move_x == widget->allocation.x)
- priv->move_x = 0;
- playlist_slider->x = widget->allocation.x;
- playlist_slider->y = widget->allocation.y;
-
- if (priv->height != widget->allocation.height) {
- priv->height = priv->height + priv->resize_height;
- priv->resize_height = 0;
- ui_skinned_playlist_slider_update (widget);
- }
-}
-
-static gboolean ui_skinned_playlist_slider_expose(GtkWidget *widget, GdkEventExpose *event) {
- gint rows, first, focused, y;
-
- UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER (widget);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(ps);
- g_return_val_if_fail (priv->width > 0 && priv->height > 0, FALSE);
-
- GdkPixbuf *obj = NULL;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, priv->width, priv->height);
+DRAW_FUNC_BEGIN (pl_slider_draw)
+ gint rows, first, focused;
+ ui_skinned_playlist_row_info (pl_slider_list, & rows, & first, & focused);
- ui_skinned_playlist_row_info (priv->list, & rows, & first, & focused);
+ gint range = active_length - rows;
+ gint y;
if (active_length > rows)
- y = first * (priv->height - 19) / (active_length - rows);
+ y = (first * (pl_slider_height - 19) + range / 2) / range;
else
y = 0;
- if (y < 0) y=0;
- if (y > priv->height - 19) y = priv->height - 19;
+ for (gint i = 0; i < pl_slider_height / 29; i ++)
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, 36, 42, 0, 29 * i, 8, 29);
- priv->prev_y = y;
+ skin_draw_pixbuf (cr, SKIN_PLEDIT, pl_slider_pressed ? 61 : 52, 53, 0, y, 8,
+ 18);
+DRAW_FUNC_END
- /* FIXME: uses aud_active_skin->pixmaps directly and may need calibration */
- /* drawing background */
- gint c;
- for (c = 0; c < priv->height / 29; c++) {
- gdk_pixbuf_copy_area(aud_active_skin->pixmaps[SKIN_PLEDIT].pixbuf,
- 36, 42, priv->width, 29, obj, 0, c*29);
- }
-
- /* drawing knob */
- skin_draw_pixbuf(widget, aud_active_skin, obj, priv->skin_index, ps->pressed ? 61 : 52, 53, 0, y, priv->width, 18);
+static void pl_slider_set_pos (gint y)
+{
+ y = CLAMP (y, 0, pl_slider_height - 19);
- ui_skinned_widget_draw(widget, obj, priv->width, priv->height, FALSE);
+ gint rows, first, focused;
+ ui_skinned_playlist_row_info (pl_slider_list, & rows, & first, & focused);
- g_object_unref(obj);
+ gint range = pl_slider_height - 19;
- return FALSE;
+ ui_skinned_playlist_scroll_to (pl_slider_list, (y * (active_length - rows) +
+ range / 2) / range);
}
-void ui_skinned_playlist_slider_update (GtkWidget * widget)
+static gboolean pl_slider_button_press (GtkWidget * slider, GdkEventButton *
+ event)
{
- if (widget_really_drawable (widget))
- ui_skinned_playlist_slider_expose (widget, 0);
-}
-
-static void ui_skinned_playlist_slider_set_position(GtkWidget *widget, gint y) {
- gint rows, first, focused;
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget);
+ if (event->button != 1)
+ return FALSE;
- y = CLAMP(y, 0, priv->height - 19);
+ pl_slider_pressed = TRUE;
+ pl_slider_set_pos (event->y - 9);
- ui_skinned_playlist_row_info (priv->list, & rows, & first, & focused);
- ui_skinned_playlist_scroll_to (priv->list, y * (active_length - rows)
- / (priv->height - 19));
+ gtk_widget_queue_draw (slider);
+ return TRUE;
}
-static gboolean ui_skinned_playlist_slider_button_press(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER (widget);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget);
- gint rows, first, focused, n;
+static gboolean pl_slider_button_release (GtkWidget * slider, GdkEventButton *
+ event)
+{
+ if (event->button != 1)
+ return FALSE;
- if (event->button != 1 && event->button != 2)
+ if (! pl_slider_pressed)
return TRUE;
- ui_skinned_playlist_row_info (priv->list, & rows, & first, & focused);
+ pl_slider_pressed = FALSE;
+ pl_slider_set_pos (event->y - 9);
- gint y = event->y;
- if (event->type == GDK_BUTTON_PRESS) {
- ps->pressed = TRUE;
- if ((y >= priv->prev_y && y < priv->prev_y + 18)) {
- priv->drag_y = y - priv->prev_y;
- } else if (event->button == 2) {
- ui_skinned_playlist_slider_set_position(widget, y);
- priv->drag_y = 0;
- } else {
- n = rows / 2;
+ gtk_widget_queue_draw (slider);
+ return TRUE;
+}
- if (y < priv->prev_y)
- n *= -1;
+static gboolean pl_slider_motion (GtkWidget * slider, GdkEventMotion * event)
+{
+ if (! pl_slider_pressed)
+ return TRUE;
- ui_skinned_playlist_scroll_to (priv->list, first + n);
- }
+ pl_slider_set_pos (event->y - 9);
- ui_skinned_playlist_slider_update (widget);
- }
+ gtk_widget_queue_draw (slider);
return TRUE;
}
-static gboolean ui_skinned_playlist_slider_button_release(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER(widget);
+GtkWidget * ui_skinned_playlist_slider_new (GtkWidget * list, gint height)
+{
+ GtkWidget * slider = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (slider, 8, height);
+ gtk_widget_add_events (slider, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
- if (event->button == 1 || event->button == 2) {
- ps->pressed = FALSE;
- ui_skinned_playlist_slider_update (widget);
- }
- return TRUE;
-}
+ pl_slider_list = list;
+ pl_slider_height = height;
-static gboolean ui_skinned_playlist_slider_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
- UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER(widget);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget);
+ DRAW_CONNECT (slider, pl_slider_draw);
+ g_signal_connect (slider, "button-press-event", (GCallback)
+ pl_slider_button_press, NULL);
+ g_signal_connect (slider, "button-release-event", (GCallback)
+ pl_slider_button_release, NULL);
+ g_signal_connect (slider, "motion-notify-event", (GCallback)
+ pl_slider_motion, NULL);
- if (ps->pressed) {
- gint y = event->y - priv->drag_y;
- ui_skinned_playlist_slider_set_position(widget, y);
- }
- return TRUE;
+ return slider;
}
-void ui_skinned_playlist_slider_move_relative(GtkWidget *widget, gint x) {
- UiSkinnedPlaylistSlider *playlist_slider = UI_SKINNED_PLAYLIST_SLIDER(widget);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget);
- priv->move_x += x;
- gtk_fixed_move(GTK_FIXED(gtk_widget_get_parent(widget)), widget,
- playlist_slider->x+priv->move_x, playlist_slider->y);
+void ui_skinned_playlist_slider_resize (GtkWidget * slider, gint height)
+{
+ pl_slider_height = height;
+ gtk_widget_set_size_request (slider, 8, height);
+ gtk_widget_queue_draw (slider);
}
-void ui_skinned_playlist_slider_resize_relative(GtkWidget *widget, gint h) {
- UiSkinnedPlaylistSlider *playlist_slider = UI_SKINNED_PLAYLIST_SLIDER(widget);
- UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget);
- priv->resize_height += h;
- gtk_widget_set_size_request(GTK_WIDGET(playlist_slider), priv->width, priv->height+priv->resize_height);
+void ui_skinned_playlist_slider_update (GtkWidget * slider)
+{
+ gtk_widget_queue_draw (slider);
}
diff --git a/src/skins/ui_skinned_playlist_slider.h b/src/skins/ui_skinned_playlist_slider.h
index 415e057..2bdb374 100644
--- a/src/skins/ui_skinned_playlist_slider.h
+++ b/src/skins/ui_skinned_playlist_slider.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,41 +25,13 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_PLAYLIST_SLIDER_H
-#define AUDACIOUS_UI_SKINNED_PLAYLIST_SLIDER_H
+#ifndef SKINS_UI_SKINNED_PLAYLIST_SLIDER_H
+#define SKINS_UI_SKINNED_PLAYLIST_SLIDER_H
#include <gtk/gtk.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_PLAYLIST_SLIDER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_playlist_slider_get_type (), UiSkinnedPlaylistSlider)
-#define UI_SKINNED_PLAYLIST_SLIDER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_playlist_slider_get_type (), UiSkinnedPlaylistSliderClass)
-#define UI_SKINNED_IS_PLAYLIST_SLIDER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_playlist_slider_get_type ())
-
-typedef struct _UiSkinnedPlaylistSlider UiSkinnedPlaylistSlider;
-typedef struct _UiSkinnedPlaylistSliderClass UiSkinnedPlaylistSliderClass;
-
-struct _UiSkinnedPlaylistSlider {
- GtkWidget widget;
- gboolean pressed;
- gint x, y;
-};
+GtkWidget * ui_skinned_playlist_slider_new (GtkWidget * list, gint height);
+void ui_skinned_playlist_slider_resize (GtkWidget * slider, gint height);
+void ui_skinned_playlist_slider_update (GtkWidget * slider);
-struct _UiSkinnedPlaylistSliderClass {
- GtkWidgetClass parent_class;
-};
-
-GtkWidget * ui_skinned_playlist_slider_new (GtkWidget * fixed, gint x, gint y,
- gint h, GtkWidget * list);
-GType ui_skinned_playlist_slider_get_type(void);
-void ui_skinned_playlist_slider_move_relative(GtkWidget *widget, gint x);
-void ui_skinned_playlist_slider_resize_relative(GtkWidget *widget, gint h);
-void ui_skinned_playlist_slider_update (GtkWidget * widget);
-
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_PLAYLIST_SLIDER_H */
diff --git a/src/skins/ui_skinned_playstatus.c b/src/skins/ui_skinned_playstatus.c
index b76fa67..44d6f57 100644
--- a/src/skins/ui_skinned_playstatus.c
+++ b/src/skins/ui_skinned_playstatus.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,203 +25,57 @@
* Audacious or using our public API to be a derived work.
*/
+#include "draw-compat.h"
#include "ui_skin.h"
#include "ui_skinned_playstatus.h"
-#include "skins_cfg.h"
-#include "util.h"
-#define UI_TYPE_SKINNED_PLAYSTATUS (ui_skinned_playstatus_get_type())
+static gint playstatus_width, playstatus_height;
+static PStatus playstatus_status;
-enum {
- DOUBLED,
- LAST_SIGNAL
-};
+DRAW_FUNC_BEGIN (playstatus_draw)
+ if (! playstatus_width || ! playstatus_height)
+ goto DONE;
-static void ui_skinned_playstatus_class_init (UiSkinnedPlaystatusClass *klass);
-static void ui_skinned_playstatus_init (UiSkinnedPlaystatus *playstatus);
-static void ui_skinned_playstatus_destroy (GtkObject *object);
-static void ui_skinned_playstatus_realize (GtkWidget *widget);
-static void ui_skinned_playstatus_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_playstatus_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_playstatus_expose (GtkWidget *widget, GdkEventExpose *event);
-static void ui_skinned_playstatus_toggle_scaled (UiSkinnedPlaystatus *playstatus);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint playstatus_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_playstatus_get_type() {
- static GType playstatus_type = 0;
- if (!playstatus_type) {
- static const GTypeInfo playstatus_info = {
- sizeof (UiSkinnedPlaystatusClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_playstatus_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedPlaystatus),
- 0,
- (GInstanceInitFunc) ui_skinned_playstatus_init,
- };
- playstatus_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedPlaystatus", &playstatus_info, 0);
- }
-
- return playstatus_type;
-}
-
-static void ui_skinned_playstatus_class_init(UiSkinnedPlaystatusClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_playstatus_destroy;
-
- widget_class->realize = ui_skinned_playstatus_realize;
- widget_class->expose_event = ui_skinned_playstatus_expose;
- widget_class->size_request = ui_skinned_playstatus_size_request;
- widget_class->size_allocate = ui_skinned_playstatus_size_allocate;
-
- klass->scaled = ui_skinned_playstatus_toggle_scaled;
-
- playstatus_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedPlaystatusClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void ui_skinned_playstatus_init(UiSkinnedPlaystatus *playstatus) {
- playstatus->width = 11;
- playstatus->height = 9;
-
- GTK_WIDGET_SET_FLAGS(playstatus, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_playstatus_new(GtkWidget *fixed, gint x, gint y) {
- UiSkinnedPlaystatus *playstatus = g_object_new (ui_skinned_playstatus_get_type (), NULL);
-
- playstatus->x = x;
- playstatus->y = y;
-
- playstatus->scaled = FALSE;
-
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(playstatus), playstatus->x, playstatus->y);
-
- return GTK_WIDGET(playstatus);
-}
-
-static void ui_skinned_playstatus_destroy(GtkObject *object) {
- UiSkinnedPlaystatus *playstatus;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_PLAYSTATUS (object));
-
- playstatus = UI_SKINNED_PLAYSTATUS (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_skinned_playstatus_realize(GtkWidget *widget) {
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-}
-
-static void ui_skinned_playstatus_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS(widget);
-
- requisition->width = playstatus->width*(playstatus->scaled ? config.scale_factor : 1);
- requisition->height = playstatus->height*(playstatus->scaled ? config.scale_factor : 1);
-}
-
-static void ui_skinned_playstatus_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS (widget);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (playstatus->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (playstatus->scaled ? config.scale_factor : 1);
-
- playstatus->x = widget->allocation.x/(playstatus->scaled ? config.scale_factor : 1);
- playstatus->y = widget->allocation.y/(playstatus->scaled ? config.scale_factor : 1);
-}
-
-static gboolean ui_skinned_playstatus_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS (widget);
- g_return_val_if_fail (playstatus->width > 0 && playstatus->height > 0, FALSE);
-
- GdkPixbuf *obj = NULL;
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, playstatus->width, playstatus->height);
-
- if (playstatus->status == STATUS_STOP && playstatus->buffering == TRUE)
- playstatus->buffering = FALSE;
- if (playstatus->status == STATUS_PLAY && playstatus->buffering == TRUE)
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_PLAYPAUSE, 39, 0, 0, 0, 3, playstatus->height);
- else if (playstatus->status == STATUS_PLAY)
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_PLAYPAUSE, 36, 0, 0, 0, 3, playstatus->height);
+ if (playstatus_status == STATUS_PLAY)
+ skin_draw_pixbuf (cr, SKIN_PLAYPAUSE, 36, 0, 0, 0, 3, playstatus_height);
else
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_PLAYPAUSE, 27, 0, 0, 0, 2, playstatus->height);
- switch (playstatus->status) {
+ skin_draw_pixbuf (cr, SKIN_PLAYPAUSE, 27, 0, 0, 0, 2, playstatus_height);
+
+ switch (playstatus_status)
+ {
case STATUS_STOP:
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_PLAYPAUSE, 18, 0, 2, 0, 9, playstatus->height);
+ skin_draw_pixbuf (cr, SKIN_PLAYPAUSE, 18, 0, 2, 0, 9, playstatus_height);
break;
case STATUS_PAUSE:
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_PLAYPAUSE, 9, 0, 2, 0, 9, playstatus->height);
+ skin_draw_pixbuf (cr, SKIN_PLAYPAUSE, 9, 0, 2, 0, 9, playstatus_height);
break;
case STATUS_PLAY:
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_PLAYPAUSE, 1, 0, 3, 0, 8, playstatus->height);
+ skin_draw_pixbuf (cr, SKIN_PLAYPAUSE, 1, 0, 3, 0, 8, playstatus_height);
break;
}
- ui_skinned_widget_draw_with_coordinates(widget, obj, playstatus->width, playstatus->height,
- widget->allocation.x,
- widget->allocation.y,
- playstatus->scaled);
+DONE:
+DRAW_FUNC_END
- g_object_unref(obj);
-
- return FALSE;
-}
-
-static void ui_skinned_playstatus_toggle_scaled(UiSkinnedPlaystatus *playstatus) {
- GtkWidget *widget = GTK_WIDGET (playstatus);
-
- playstatus->scaled = !playstatus->scaled;
- gtk_widget_set_size_request(widget, playstatus->width*(playstatus->scaled ? config.scale_factor : 1), playstatus->height*(playstatus->scaled ? config.scale_factor : 1));
-
- if (widget_really_drawable (widget))
- ui_skinned_playstatus_expose (widget, 0);
-}
-
-void ui_skinned_playstatus_set_status(GtkWidget *widget, PStatus status) {
- g_return_if_fail (UI_SKINNED_IS_PLAYSTATUS (widget));
- UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS (widget);
-
- playstatus->status = status;
-
- if (widget_really_drawable (widget))
- ui_skinned_playstatus_expose (widget, 0);
+GtkWidget * ui_skinned_playstatus_new (void)
+{
+ GtkWidget * playstatus = gtk_drawing_area_new ();
+ DRAW_CONNECT (playstatus, playstatus_draw);
+ return playstatus;
}
-void ui_skinned_playstatus_set_buffering(GtkWidget *widget, gboolean status) {
- g_return_if_fail (UI_SKINNED_IS_PLAYSTATUS (widget));
- UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS (widget);
-
- playstatus->buffering = status;
-
- if (widget_really_drawable (widget))
- ui_skinned_playstatus_expose (widget, 0);
+void ui_skinned_playstatus_set_status (GtkWidget * playstatus, PStatus status)
+{
+ playstatus_status = status;
+ gtk_widget_queue_draw (playstatus);
}
-void ui_skinned_playstatus_set_size(GtkWidget *widget, gint width, gint height) {
- g_return_if_fail (UI_SKINNED_IS_PLAYSTATUS (widget));
- UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS (widget);
-
- playstatus->width = width;
- playstatus->height = height;
+void ui_skinned_playstatus_set_size (GtkWidget * playstatus, gint width, gint
+ height)
+{
+ playstatus_width = width;
+ playstatus_height = height;
- gtk_widget_set_size_request(widget, width*(playstatus->scaled ? config.scale_factor : 1), height*(playstatus->scaled ? config.scale_factor : 1));
+ gtk_widget_set_size_request (playstatus, width, height);
+ gtk_widget_queue_draw (playstatus);
}
diff --git a/src/skins/ui_skinned_playstatus.h b/src/skins/ui_skinned_playstatus.h
index 6a40891..efbddd6 100644
--- a/src/skins/ui_skinned_playstatus.h
+++ b/src/skins/ui_skinned_playstatus.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,48 +25,17 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_PLAYSTATUS_H
-#define AUDACIOUS_UI_SKINNED_PLAYSTATUS_H
+#ifndef SKINS_UI_SKINNED_PLAYSTATUS_H
+#define SKINS_UI_SKINNED_PLAYSTATUS_H
#include <gtk/gtk.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_PLAYSTATUS(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_playstatus_get_type (), UiSkinnedPlaystatus)
-#define UI_SKINNED_PLAYSTATUS_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_playstatus_get_type (), UiSkinnedPlaystatusClass)
-#define UI_SKINNED_IS_PLAYSTATUS(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_playstatus_get_type ())
-
-typedef struct _UiSkinnedPlaystatus UiSkinnedPlaystatus;
-typedef struct _UiSkinnedPlaystatusClass UiSkinnedPlaystatusClass;
-
typedef enum {
STATUS_STOP, STATUS_PAUSE, STATUS_PLAY
} PStatus;
-struct _UiSkinnedPlaystatus {
- GtkWidget widget;
-
- gint x, y, width, height;
- gboolean scaled;
- PStatus status;
- gboolean buffering;
-};
-
-struct _UiSkinnedPlaystatusClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSkinnedPlaystatus *menurow);
-};
-
-GtkWidget* ui_skinned_playstatus_new (GtkWidget *fixed, gint x, gint y);
-GType ui_skinned_playstatus_get_type(void);
+GtkWidget * ui_skinned_playstatus_new (void);
void ui_skinned_playstatus_set_status(GtkWidget *widget, PStatus status);
-void ui_skinned_playstatus_set_buffering(GtkWidget *widget, gboolean status);
void ui_skinned_playstatus_set_size(GtkWidget *widget, gint width, gint height);
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_PLAYSTATUS_H */
diff --git a/src/skins/ui_skinned_textbox.c b/src/skins/ui_skinned_textbox.c
index 83ac3c8..f69d3aa 100644
--- a/src/skins/ui_skinned_textbox.c
+++ b/src/skins/ui_skinned_textbox.c
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -26,899 +27,380 @@
#include <string.h>
-#include <libaudcore/audstrings.h>
-
-#include "ui_skinned_textbox.h"
+#include "draw-compat.h"
#include "skins_cfg.h"
-#include "plugin.h"
-#include "util.h"
-
-#define UI_SKINNED_TEXTBOX_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), ui_skinned_textbox_get_type(), UiSkinnedTextboxPrivate))
-typedef struct _UiSkinnedTextboxPrivate UiSkinnedTextboxPrivate;
-
-#define TEXTBOX_SCROLL_SMOOTH_TIMEOUT 30
-#define TEXTBOX_SCROLL_WAIT 80
-
-enum {
- CLICKED,
- DOUBLE_CLICKED,
- RIGHT_CLICKED,
- DOUBLED,
- LAST_SIGNAL
-};
-
-struct _UiSkinnedTextboxPrivate {
- SkinPixmapId skin_index;
- gboolean scaled;
- gboolean scroll_back;
- gint nominal_y, nominal_height;
- gint scroll_timeout;
- gint crop;
- PangoFontDescription *font;
- gchar *fontname;
- gchar *pixbuf_text;
- gint skin_id;
- gint drag_x, drag_off, offset;
- gboolean is_scrollable, is_dragging;
- gint pixbuf_width;
- GdkPixbuf *pixbuf;
- gboolean scroll_allowed, scroll_enabled;
- gint scroll_dummy;
- gint move_x, move_y;
-};
-
-static void ui_skinned_textbox_class_init (UiSkinnedTextboxClass *klass);
-static void ui_skinned_textbox_init (UiSkinnedTextbox *textbox);
-static void ui_skinned_textbox_destroy (GtkObject *object);
-static void ui_skinned_textbox_realize (GtkWidget *widget);
-static void ui_skinned_textbox_unrealize (GtkWidget *widget);
-static void ui_skinned_textbox_map (GtkWidget *widget);
-static void ui_skinned_textbox_unmap (GtkWidget *widget);
-static void ui_skinned_textbox_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void ui_skinned_textbox_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-static gboolean ui_skinned_textbox_expose (GtkWidget *widget, GdkEventExpose *event);
-static gboolean ui_skinned_textbox_button_press (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_textbox_button_release (GtkWidget *widget, GdkEventButton *event);
-static gboolean ui_skinned_textbox_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-static void ui_skinned_textbox_toggle_scaled (UiSkinnedTextbox *textbox);
-static gboolean ui_skinned_textbox_should_scroll (UiSkinnedTextbox *textbox);
-static void textbox_generate_xfont_pixmap (UiSkinnedTextbox *textbox, const gchar *pixmaptext);
-static gboolean textbox_scroll (gpointer data);
-static void textbox_generate_pixmap (UiSkinnedTextbox *textbox);
-static void textbox_handle_special_char (gchar *c, gint * x, gint * y);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint textbox_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_skinned_textbox_get_type() {
- static GType textbox_type = 0;
- if (!textbox_type) {
- static const GTypeInfo textbox_info = {
- sizeof (UiSkinnedTextboxClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_skinned_textbox_class_init,
- NULL,
- NULL,
- sizeof (UiSkinnedTextbox),
- 0,
- (GInstanceInitFunc) ui_skinned_textbox_init,
- };
- textbox_type = g_type_register_static (GTK_TYPE_WIDGET, "UiSkinnedTextbox", &textbox_info, 0);
- }
-
- return textbox_type;
-}
-
-static void ui_skinned_textbox_class_init(UiSkinnedTextboxClass *klass) {
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- gobject_class = G_OBJECT_CLASS(klass);
- object_class = (GtkObjectClass*) klass;
- widget_class = (GtkWidgetClass*) klass;
- parent_class = g_type_class_peek_parent(klass);
-
- object_class->destroy = ui_skinned_textbox_destroy;
-
- widget_class->realize = ui_skinned_textbox_realize;
- widget_class->unrealize = ui_skinned_textbox_unrealize;
- widget_class->map = ui_skinned_textbox_map;
- widget_class->unmap = ui_skinned_textbox_unmap;
- widget_class->expose_event = ui_skinned_textbox_expose;
- widget_class->size_request = ui_skinned_textbox_size_request;
- widget_class->size_allocate = ui_skinned_textbox_size_allocate;
- widget_class->button_press_event = ui_skinned_textbox_button_press;
- widget_class->button_release_event = ui_skinned_textbox_button_release;
- widget_class->motion_notify_event = ui_skinned_textbox_motion_notify;
-
- klass->clicked = NULL;
- klass->double_clicked = NULL;
- klass->right_clicked = NULL;
- klass->scaled = ui_skinned_textbox_toggle_scaled;
-
- textbox_signals[CLICKED] =
- g_signal_new ("clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedTextboxClass, clicked), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- textbox_signals[DOUBLE_CLICKED] =
- g_signal_new ("double-clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedTextboxClass, double_clicked), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- textbox_signals[RIGHT_CLICKED] =
- g_signal_new ("right-clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedTextboxClass, right_clicked), NULL, NULL,
- g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- textbox_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSkinnedTextboxClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
- g_type_class_add_private (gobject_class, sizeof (UiSkinnedTextboxPrivate));
-}
-
-static void ui_skinned_textbox_init(UiSkinnedTextbox *textbox) {
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
- priv->move_x = 0;
- priv->move_y = 0;
-
- textbox->event_window = NULL;
- GTK_WIDGET_SET_FLAGS (textbox, GTK_NO_WINDOW);
-}
-
-GtkWidget* ui_skinned_textbox_new(GtkWidget *fixed, gint x, gint y, gint w, gboolean allow_scroll, SkinPixmapId si) {
- UiSkinnedTextbox *textbox = g_object_new (ui_skinned_textbox_get_type (), NULL);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- textbox->height = aud_active_skin->properties.textbox_bitmap_font_height;
- textbox->x = x;
- textbox->y = y;
- textbox->text = g_strdup("");
- textbox->width = w;
- priv->scroll_allowed = allow_scroll;
- priv->scroll_enabled = TRUE;
- priv->skin_index = si;
- priv->nominal_y = y;
- priv->nominal_height = textbox->height;
- priv->scroll_timeout = 0;
- priv->scroll_dummy = 0;
-
- priv->scaled = FALSE;
+#include "ui_skin.h"
+#include "ui_skinned_textbox.h"
- gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(textbox), textbox->x, textbox->y);
+#define TIMEOUT 30
+#define DELAY 50
- return GTK_WIDGET(textbox);
-}
+typedef struct {
+ gint width;
+ gchar * text;
+ PangoFontDescription * font;
+ cairo_surface_t * buf;
+ gint buf_width;
+ gboolean may_scroll, scrolling, backward;
+ gint scroll_source;
+ gint offset, delay;
+} TextboxData;
+
+static GList * textboxes;
+
+DRAW_FUNC_BEGIN (textbox_draw)
+ TextboxData * data = g_object_get_data ((GObject *) wid, "textboxdata");
+ g_return_val_if_fail (data && data->buf, FALSE);
+
+ if (data->scrolling)
+ {
+ cairo_set_source_surface (cr, data->buf, -data->offset, 0);
+ cairo_paint (cr);
+
+ if (-data->offset + data->buf_width < data->width)
+ {
+ cairo_set_source_surface (cr, data->buf, -data->offset +
+ data->buf_width, 0);
+ cairo_paint (cr);
+ }
+ }
+ else
+ {
+ cairo_set_source_surface (cr, data->buf, 0, 0);
+ cairo_paint (cr);
+ }
+DRAW_FUNC_END
-static void ui_skinned_textbox_destroy(GtkObject *object) {
- UiSkinnedTextbox *textbox;
- UiSkinnedTextboxPrivate *priv;
+static gboolean textbox_scroll (GtkWidget * textbox)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_val_if_fail (data, FALSE);
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_SKINNED_IS_TEXTBOX (object));
+ if (data->delay < DELAY)
+ {
+ data->delay ++;
+ return TRUE;
+ }
- textbox = UI_SKINNED_TEXTBOX (object);
- priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(object);
+ if (config.twoway_scroll && data->backward)
+ data->offset --;
+ else
+ data->offset ++;
- if (priv->scroll_timeout) {
- g_source_remove(priv->scroll_timeout);
- priv->scroll_timeout = 0;
+ if (config.twoway_scroll && (data->backward ? (data->offset <= 0) :
+ (data->offset + data->width >= data->buf_width)))
+ {
+ data->backward = ! data->backward;
+ data->delay = 0;
}
- g_free (textbox->text);
- textbox->text = NULL;
- g_free (priv->pixbuf_text);
- priv->pixbuf_text = NULL;
- g_free (priv->fontname);
- priv->fontname = NULL;
+ if (! config.twoway_scroll && data->offset >= data->buf_width)
+ data->offset = 0;
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+ gtk_widget_queue_draw (textbox);
+ return TRUE;
}
-static void ui_skinned_textbox_realize(GtkWidget *widget) {
- UiSkinnedTextbox *textbox;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_SKINNED_IS_TEXTBOX(widget));
+static void textbox_render_vector (GtkWidget * textbox, TextboxData * data,
+ const gchar * text)
+{
+ g_return_if_fail (data->font && ! data->buf && text);
- if (GTK_WIDGET_CLASS (parent_class)->realize)
- (* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
+ PangoLayout * layout = gtk_widget_create_pango_layout (textbox, text);
+ pango_layout_set_font_description (layout, data->font);
- textbox = UI_SKINNED_TEXTBOX(widget);
+ PangoRectangle rect;
+ pango_layout_get_pixel_extents (layout, NULL, & rect);
+ gint crop = (rect.height + 2) / 5;
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget);
- attributes.event_mask |= GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
- GDK_POINTER_MOTION_HINT_MASK;
+ gtk_widget_set_size_request (textbox, data->width, rect.height - crop);
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- textbox->event_window = gdk_window_new (widget->window, &attributes, attributes_mask);
+ data->buf_width = MAX (rect.width, data->width);
+ data->buf = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+ data->buf_width, rect.height - crop);
- widget->style = gtk_style_attach(widget->style, widget->window);
+ cairo_t * cr = cairo_create (data->buf);
- gdk_window_set_user_data(textbox->event_window, widget);
-}
+ set_cairo_color (cr, active_skin->colors[SKIN_TEXTBG]);
+ cairo_paint (cr);
-static void ui_skinned_textbox_unrealize(GtkWidget *widget) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX(widget);
+ cairo_move_to (cr, 0, -crop);
+ set_cairo_color (cr, active_skin->colors[SKIN_TEXTFG]);
+ pango_cairo_show_layout (cr, layout);
- if ( textbox->event_window != NULL )
- {
- gdk_window_set_user_data( textbox->event_window , NULL );
- gdk_window_destroy( textbox->event_window );
- textbox->event_window = NULL;
- }
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
+ cairo_destroy (cr);
+ g_object_unref (layout);
}
-static void ui_skinned_textbox_map (GtkWidget *widget)
+static void lookup_char (const gchar c, gint * x, gint * y)
{
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
+ gint tx, ty;
- if (textbox->event_window != NULL)
- gdk_window_show (textbox->event_window);
+ switch (c)
+ {
+ case '"': tx = 26; ty = 0; break;
+ case '@': tx = 27; ty = 0; break;
+ case ' ': tx = 29; ty = 0; break;
+ case ':':
+ case ';':
+ case '|': tx = 12; ty = 1; break;
+ case '(':
+ case '{': tx = 13; ty = 1; break;
+ case ')':
+ case '}': tx = 14; ty = 1; break;
+ case '-':
+ case '~': tx = 15; ty = 1; break;
+ case '`':
+ case '\'': tx = 16; ty = 1; break;
+ case '!': tx = 17; ty = 1; break;
+ case '_': tx = 18; ty = 1; break;
+ case '+': tx = 19; ty = 1; break;
+ case '\\': tx = 20; ty = 1; break;
+ case '/': tx = 21; ty = 1; break;
+ case '[': tx = 22; ty = 1; break;
+ case ']': tx = 23; ty = 1; break;
+ case '^': tx = 24; ty = 1; break;
+ case '&': tx = 25; ty = 1; break;
+ case '%': tx = 26; ty = 1; break;
+ case '.':
+ case ',': tx = 27; ty = 1; break;
+ case '=': tx = 28; ty = 1; break;
+ case '$': tx = 29; ty = 1; break;
+ case '#': tx = 30; ty = 1; break;
+ case '?': tx = 3; ty = 2; break;
+ case '*': tx = 4; ty = 2; break;
+ default: tx = 3; ty = 2; break; /* '?' */
+ }
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (* GTK_WIDGET_CLASS (parent_class)->map) (widget);
+ * x = tx * active_skin->properties.textbox_bitmap_font_width;
+ * y = ty * active_skin->properties.textbox_bitmap_font_height;
}
-static void ui_skinned_textbox_unmap (GtkWidget *widget)
+static void textbox_render_bitmap (GtkWidget * textbox, TextboxData * data,
+ const gchar * text)
{
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
-
- if (textbox->event_window != NULL)
- gdk_window_hide (textbox->event_window);
+ g_return_if_fail (! data->font && ! data->buf && text);
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (* GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
-
-static void ui_skinned_textbox_size_request(GtkWidget *widget, GtkRequisition *requisition) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX(widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
+ gint cw = active_skin->properties.textbox_bitmap_font_width;
+ gint ch = active_skin->properties.textbox_bitmap_font_height;
- requisition->width = textbox->width*(priv->scaled ? config.scale_factor : 1);
- requisition->height = textbox->height*(priv->scaled ? config.scale_factor : 1 );
-}
-
-static void ui_skinned_textbox_size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (priv->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (priv->scaled ? config.scale_factor : 1);
- if (GTK_WIDGET_REALIZED (widget))
- if (textbox->event_window)
- gdk_window_move_resize(textbox->event_window, widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
-
- if (textbox->x + priv->move_x - widget->allocation.x/(priv->scaled ? config.scale_factor : 1) <3);
- priv->move_x = 0;
- if (textbox->y + priv->move_y - widget->allocation.y/(priv->scaled ? config.scale_factor : 1) <3);
- priv->move_y = 0;
- textbox->x = widget->allocation.x/(priv->scaled ? config.scale_factor : 1);
- textbox->y = widget->allocation.y/(priv->scaled ? config.scale_factor : 1);
-
- if (textbox->width - (guint) (widget->allocation.width / (priv->scaled ? config.scale_factor : 1)) > 2) {
- textbox->width = (guint) (widget->allocation.width / (priv->scaled ? config.scale_factor : 1));
- if (priv->pixbuf_text) g_free(priv->pixbuf_text);
- priv->pixbuf_text = NULL;
- priv->offset = 0;
- gtk_widget_set_size_request(widget, textbox->width, textbox->height);
-
- if (widget_really_drawable (widget))
- ui_skinned_textbox_expose (widget, 0);
- }
-}
+ gtk_widget_set_size_request (textbox, data->width, ch);
-static gboolean ui_skinned_textbox_expose(GtkWidget *widget, GdkEventExpose *event) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
- g_return_val_if_fail (textbox->width > 0 && textbox->height > 0, FALSE);
+ glong len;
+ gunichar * utf32 = g_utf8_to_ucs4 (text, -1, NULL, & len, NULL);
+ g_return_if_fail (utf32);
- GdkPixbuf *obj = NULL;
- gint cw;
+ data->buf_width = MAX (cw * len, data->width);
+ data->buf = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+ data->buf_width, ch);
- if (textbox->text && (!priv->pixbuf_text || strcmp(textbox->text, priv->pixbuf_text)))
- textbox_generate_pixmap(textbox);
+ cairo_t * cr = cairo_create (data->buf);
- if (priv->pixbuf) {
- if (skin_get_id() != priv->skin_id) {
- priv->skin_id = skin_get_id();
- textbox_generate_pixmap(textbox);
- }
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, textbox->width, textbox->height);
-
- if (config.twoway_scroll) { // twoway scroll
- cw = priv->pixbuf_width - priv->offset;
- if (cw > textbox->width)
- cw = textbox->width;
- gdk_pixbuf_copy_area(priv->pixbuf, priv->offset, 0, cw, textbox->height, obj, 0, 0);
- if (cw < textbox->width)
- gdk_pixbuf_copy_area(priv->pixbuf, 0, 0, textbox->width - cw, textbox->height,
- obj, textbox->width - cw, textbox->height);
- } else { // oneway scroll
- int cw1, cw2;
-
- if (priv->offset >= priv->pixbuf_width)
- priv->offset = 0;
-
- if (priv->pixbuf_width - priv->offset > textbox->width) { // case1
- cw1 = textbox->width;
- gdk_pixbuf_copy_area(priv->pixbuf, priv->offset, 0, cw1, textbox->height,
- obj, 0, 0);
- } else { // case 2
- cw1 = priv->pixbuf_width - priv->offset;
- gdk_pixbuf_copy_area(priv->pixbuf, priv->offset, 0, cw1, textbox->height, obj, 0, 0);
- cw2 = textbox->width - cw1;
- gdk_pixbuf_copy_area(priv->pixbuf, 0, 0, cw2, textbox->height, obj, cw1, 0);
- }
+ gunichar * s = utf32;
+ for (gint x = 0; x < data->buf_width; x += cw)
+ {
+ gunichar c = * s ? * s ++ : ' ';
+ gint cx = 0, cy = 0;
+
+ if (c >= 'A' && c <= 'Z')
+ cx = cw * (c - 'A');
+ else if (c >= 'a' && c <= 'z')
+ cx = cw * (c - 'a');
+ else if (c >= '0' && c <= '9')
+ {
+ cx = cw * (c - '0');
+ cy = ch;
}
+ else
+ lookup_char (c, & cx, & cy);
- ui_skinned_widget_draw_with_coordinates(widget, obj, textbox->width, textbox->height,
- widget->allocation.x,
- widget->allocation.y,
- priv->scaled);
-
- g_object_unref(obj);
+ skin_draw_pixbuf (cr, SKIN_TEXT, cx, cy, x, 0, cw, ch);
}
- return FALSE;
+ cairo_destroy (cr);
+ g_free (utf32);
}
-static gboolean ui_skinned_textbox_button_press(GtkWidget *widget, GdkEventButton *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_TEXTBOX (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
-
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- if (event->type == GDK_BUTTON_PRESS) {
- textbox = UI_SKINNED_TEXTBOX(widget);
- if (event->button == 3 && !g_signal_has_handler_pending(widget, textbox_signals[RIGHT_CLICKED], 0, TRUE))
- return FALSE;
- else if (event->button == 1) {
- if (priv->scroll_allowed) {
- if ((priv->pixbuf_width > textbox->width) && priv->is_scrollable) {
- priv->is_dragging = TRUE;
- priv->drag_off = priv->offset;
- priv->drag_x = event->x;
- }
- } else
- g_signal_emit(widget, textbox_signals[CLICKED], 0);
-
- } else if (event->button == 3) {
- g_signal_emit(widget, textbox_signals[RIGHT_CLICKED], 0, event);
- } else
- priv->is_dragging = FALSE;
- } else if (event->type == GDK_2BUTTON_PRESS) {
- if (event->button == 1) {
- if (g_signal_has_handler_pending(widget, textbox_signals[DOUBLE_CLICKED], 0, TRUE))
- g_signal_emit(widget, textbox_signals[DOUBLE_CLICKED], 0);
- else
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static gboolean ui_skinned_textbox_button_release(GtkWidget *widget, GdkEventButton *event) {
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(widget);
+static void textbox_render (GtkWidget * textbox, TextboxData * data)
+{
+ g_return_if_fail (data->text);
- if (event->button == 1) {
- priv->is_dragging = FALSE;
+ if (data->buf)
+ {
+ cairo_surface_destroy (data->buf);
+ data->buf = NULL;
}
- return TRUE;
-}
+ data->scrolling = FALSE;
+ data->backward = FALSE;
+ data->offset = 0;
+ data->delay = 0;
-static gboolean ui_skinned_textbox_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
- g_return_val_if_fail (widget != NULL, FALSE);
- g_return_val_if_fail (UI_SKINNED_IS_TEXTBOX (widget), FALSE);
- g_return_val_if_fail (event != NULL, FALSE);
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX(widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(widget);
+ if (data->font)
+ textbox_render_vector (textbox, data, data->text);
+ else
+ textbox_render_bitmap (textbox, data, data->text);
- if (priv->is_dragging) {
- if (priv->scroll_allowed &&
- priv->pixbuf_width > textbox->width) {
- priv->offset = priv->drag_off - (event->x - priv->drag_x);
+ if (data->may_scroll && data->buf_width > data->width)
+ {
+ data->scrolling = TRUE;
+
+ if (! config.twoway_scroll)
+ {
+ if (data->buf)
+ {
+ cairo_surface_destroy (data->buf);
+ data->buf = NULL;
+ }
- while (priv->offset < 0)
- priv->offset = 0;
+ gchar * temp = g_strdup_printf ("%s --- ", data->text);
- while (priv->offset > (priv->pixbuf_width - textbox->width))
- priv->offset = (priv->pixbuf_width - textbox->width);
+ if (data->font)
+ textbox_render_vector (textbox, data, temp);
+ else
+ textbox_render_bitmap (textbox, data, temp);
- if (widget_really_drawable (widget))
- ui_skinned_textbox_expose (widget, 0);
+ g_free (temp);
}
}
- return TRUE;
-}
-
-static void ui_skinned_textbox_toggle_scaled(UiSkinnedTextbox *textbox) {
- GtkWidget *widget = GTK_WIDGET (textbox);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
+ gtk_widget_queue_draw (textbox);
- priv->scaled = !priv->scaled;
-
- gtk_widget_set_size_request(widget, textbox->width*(priv->scaled ? config.scale_factor : 1 ),
- textbox->height*(priv->scaled ? config.scale_factor : 1 ));
-
- if (widget_really_drawable (widget))
- ui_skinned_textbox_expose (widget, 0);
-}
-
-static gboolean ui_skinned_textbox_should_scroll(UiSkinnedTextbox *textbox) {
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- if (!priv->scroll_allowed)
- return FALSE;
-
- if (priv->font) {
- gint width;
- text_get_extents(priv->fontname, textbox->text, &width, NULL, NULL, NULL);
-
- if (width <= textbox->width)
- return FALSE;
- else
- return TRUE;
- }
-
- if (g_utf8_strlen(textbox->text, -1) * aud_active_skin->properties.textbox_bitmap_font_width > textbox->width)
- return TRUE;
-
- return FALSE;
-}
-
-void ui_skinned_textbox_set_xfont(GtkWidget *widget, gboolean use_xfont, const gchar * fontname) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- gint ascent, descent;
-
- g_return_if_fail(textbox != NULL);
- gtk_widget_queue_resize (widget);
-
- if (priv->font) {
- pango_font_description_free(priv->font);
- priv->font = NULL;
+ if (data->scrolling)
+ {
+ if (! data->scroll_source)
+ data->scroll_source = g_timeout_add (TIMEOUT, (GSourceFunc)
+ textbox_scroll, textbox);
}
-
- textbox->y = priv->nominal_y;
- textbox->height = priv->nominal_height;
-
- /* Make sure the pixmap is regenerated */
- if (priv->pixbuf_text) {
- g_free(priv->pixbuf_text);
- priv->pixbuf_text = NULL;
+ else
+ {
+ if (data->scroll_source)
+ {
+ g_source_remove (data->scroll_source);
+ data->scroll_source = 0;
+ }
}
+}
- if (!use_xfont || strlen(fontname) == 0)
- return;
-
- priv->font = pango_font_description_from_string(fontname);
- g_free (priv->fontname);
- priv->fontname = g_strdup(fontname);
-
- text_get_extents(fontname,
- "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz ",
- NULL, NULL, &ascent, &descent);
+void textbox_set_width (GtkWidget * textbox, gint width)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_if_fail (data);
- if (priv->font == NULL)
+ if (data->width == width)
return;
- textbox->height = ascent - descent;
- priv->crop = textbox->height / 5;
- textbox->height -= priv->crop;
+ data->width = width;
+ textbox_render (textbox, data);
}
-void ui_skinned_textbox_set_text(GtkWidget *widget, const gchar *text) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- if (!strcmp(textbox->text, text))
- return;
- if (textbox->text)
- g_free(textbox->text);
-
- textbox->text = str_to_utf8(text);
- priv->scroll_back = FALSE;
+const gchar * textbox_get_text (GtkWidget * textbox)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_val_if_fail (data, NULL);
- if (widget_really_drawable (widget))
- ui_skinned_textbox_expose (widget, 0);
+ return data->text;
}
-static void textbox_generate_xfont_pixmap(UiSkinnedTextbox *textbox, const gchar *pixmaptext) {
- /* FIXME: should operate directly on priv->pixbuf, it shouldn't use pixmap */
- gint length, i;
- GdkGC *gc, *maskgc;
- GdkColor *c, pattern;
- GdkBitmap *mask;
- PangoLayout *layout;
- gint width;
- GdkPixmap *pixmap;
+void textbox_set_text (GtkWidget * textbox, const gchar * text)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_if_fail (data);
- g_return_if_fail(textbox != NULL);
- g_return_if_fail(pixmaptext != NULL);
- g_return_if_fail(textbox->height > 0);
+ if (! text)
+ text = "";
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
+ if (data->text && ! strcmp (data->text, text))
+ return;
- length = g_utf8_strlen(pixmaptext, -1);
+ g_free (data->text);
+ data->text = g_strdup (text);
+ textbox_render (textbox, data);
+}
- text_get_extents(priv->fontname, pixmaptext, &width, NULL, NULL, NULL);
+void textbox_set_font (GtkWidget * textbox, const gchar * font)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_if_fail (data);
- priv->pixbuf_width = MAX(width, textbox->width);
- pixmap = gdk_pixmap_new(mainwin->window, priv->pixbuf_width,
- textbox->height,
- gdk_rgb_get_visual()->depth);
- gc = gdk_gc_new(pixmap);
- c = skin_get_color(aud_active_skin, SKIN_TEXTBG);
- for (i = 0; i < textbox->height; i++) {
- gdk_gc_set_foreground(gc, &c[6 * i / textbox->height]);
- gdk_draw_line(pixmap, gc, 0, i, priv->pixbuf_width, i);
+ if (data->font)
+ {
+ pango_font_description_free (data->font);
+ data->font = NULL;
}
- mask = gdk_pixmap_new(mainwin->window, priv->pixbuf_width, textbox->height, 1);
- maskgc = gdk_gc_new(mask);
- pattern.pixel = 0;
- gdk_gc_set_foreground(maskgc, &pattern);
-
- gdk_draw_rectangle(mask, maskgc, TRUE, 0, 0, priv->pixbuf_width, textbox->height);
- pattern.pixel = 1;
- gdk_gc_set_foreground(maskgc, &pattern);
-
- gdk_gc_set_foreground(gc, skin_get_color(aud_active_skin, SKIN_TEXTFG));
-
- layout = gtk_widget_create_pango_layout(mainwin, pixmaptext);
- pango_layout_set_font_description(layout, priv->font);
+ if (font)
+ data->font = pango_font_description_from_string (font);
- gdk_draw_layout (pixmap, gc, 0, - priv->crop, layout);
- g_object_unref(layout);
-
- g_object_unref(maskgc);
-
- gdk_gc_set_clip_mask(gc, mask);
- c = skin_get_color(aud_active_skin, SKIN_TEXTFG);
- for (i = 0; i < textbox->height; i++) {
- gdk_gc_set_foreground(gc, &c[6 * i / textbox->height]);
- gdk_draw_line(pixmap, gc, 0, i, priv->pixbuf_width, i);
- }
- priv->pixbuf = gdk_pixbuf_get_from_drawable(NULL, pixmap, gdk_colormap_get_system(), 0, 0, 0, 0, priv->pixbuf_width, textbox->height);
- g_object_unref(mask);
- g_object_unref(gc);
+ textbox_render (textbox, data);
}
-static gboolean textbox_scroll(gpointer data) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX(data);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
-
- if (!priv->is_dragging) {
- if (priv->scroll_dummy < TEXTBOX_SCROLL_WAIT)
- priv->scroll_dummy++;
- else {
- if(config.twoway_scroll) {
- if (priv->scroll_back)
- priv->offset -= 1;
- else
- priv->offset += 1;
-
- if (priv->offset >= (priv->pixbuf_width - textbox->width)) {
- priv->scroll_back = TRUE;
- priv->scroll_dummy = 0;
- priv->offset = priv->pixbuf_width - textbox->width;
- }
- if (priv->offset <= 0) {
- priv->scroll_back = FALSE;
- priv->scroll_dummy = 0;
- priv->offset = 0;
- }
- }
- else { // oneway scroll
- priv->scroll_back = FALSE;
- priv->offset += 1;
- }
-
- if (widget_really_drawable (data))
- ui_skinned_textbox_expose (data, 0);
- }
- }
- return TRUE;
-}
+void textbox_set_scroll (GtkWidget * textbox, gboolean scroll)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_if_fail (data);
-static void textbox_generate_pixmap(UiSkinnedTextbox *textbox) {
- gint length, i, x, y, wl;
- gchar *pixmaptext;
- gchar *tmp, *stxt;
+ if (data->may_scroll == scroll)
+ return;
- g_return_if_fail(textbox != NULL);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
+ data->may_scroll = scroll;
+ textbox_render (textbox, data);
+}
- if (priv->pixbuf) {
- g_object_unref(priv->pixbuf);
- priv->pixbuf = NULL;
- }
+static void textbox_destroy (GtkWidget * textbox)
+{
+ TextboxData * data = g_object_get_data ((GObject *) textbox, "textboxdata");
+ g_return_if_fail (data);
- /*
- * Don't reset the offset if only text after the last '(' has
- * changed. This is a hack to avoid visual noice on vbr files
- * where we guess the length.
- */
- if (!(priv->pixbuf_text && strrchr(textbox->text, '(') &&
- !strncmp(priv->pixbuf_text, textbox->text,
- strrchr(textbox->text, '(') - textbox->text)))
- priv->offset = 0;
-
- g_free(priv->pixbuf_text);
- priv->pixbuf_text = g_strdup(textbox->text);
-
- /*
- * wl is the number of (partial) letters visible. Only makes
- * sense when using skinned font.
- */
- wl = textbox->width / 5;
- if (wl * 5 != textbox->width)
- wl++;
-
- length = g_utf8_strlen(textbox->text, -1);
-
- priv->is_scrollable = FALSE;
-
- priv->is_scrollable = ui_skinned_textbox_should_scroll(textbox);
-
- if (priv->is_scrollable) {
- if(!config.twoway_scroll) {
- pixmaptext = g_strdup_printf("%s *** ", priv->pixbuf_text);
- length += 5;
- } else
- pixmaptext = g_strdup(priv->pixbuf_text);
- } else
- if (!priv->font && length <= wl) {
- gint pad = wl - length;
- gchar *padchars = g_strnfill(pad, ' ');
-
- pixmaptext = g_strconcat(priv->pixbuf_text, padchars, NULL);
- g_free(padchars);
- length += pad;
- } else
- pixmaptext = g_strdup(priv->pixbuf_text);
-
- if (priv->is_scrollable) {
- if (priv->scroll_enabled && !priv->scroll_timeout) {
- gint tag;
- tag = TEXTBOX_SCROLL_SMOOTH_TIMEOUT;
- priv->scroll_timeout = g_timeout_add(tag, textbox_scroll, textbox);
- }
- } else {
- if (priv->scroll_timeout) {
- g_source_remove(priv->scroll_timeout);
- priv->scroll_timeout = 0;
- }
- priv->offset = 0;
- }
+ if (data->font)
+ pango_font_description_free (data->font);
+ if (data->buf)
+ cairo_surface_destroy (data->buf);
+ if (data->scroll_source)
+ g_source_remove (data->scroll_source);
- if (priv->font) {
- textbox_generate_xfont_pixmap(textbox, pixmaptext);
- g_free(pixmaptext);
- return;
- }
-
- priv->pixbuf_width = length * aud_active_skin->properties.textbox_bitmap_font_width;
- priv->pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8,
- priv->pixbuf_width, aud_active_skin->properties.textbox_bitmap_font_height);
-
- for (tmp = stxt = g_utf8_strup(pixmaptext, -1), i = 0;
- tmp != NULL && i < length; i++, tmp = g_utf8_next_char(tmp)) {
- gchar c = *tmp;
- x = y = -1;
- if (c >= 'A' && c <= 'Z') {
- x = aud_active_skin->properties.textbox_bitmap_font_width * (c - 'A');
- y = 0;
- }
- else if (c >= '0' && c <= '9') {
- x = aud_active_skin->properties.textbox_bitmap_font_width * (c - '0');
- y = aud_active_skin->properties.textbox_bitmap_font_height;
- }
- else
- textbox_handle_special_char(tmp, &x, &y);
+ g_free (data->text);
+ g_free (data);
- skin_draw_pixbuf(GTK_WIDGET(textbox), aud_active_skin,
- priv->pixbuf, priv->skin_index,
- x, y, i * aud_active_skin->properties.textbox_bitmap_font_width, 0,
- aud_active_skin->properties.textbox_bitmap_font_width,
- aud_active_skin->properties.textbox_bitmap_font_height);
- }
- g_free(stxt);
- g_free(pixmaptext);
+ textboxes = g_list_remove (textboxes, textbox);
}
-void ui_skinned_textbox_set_scroll(GtkWidget *widget, gboolean scroll) {
- g_return_if_fail(widget != NULL);
- g_return_if_fail(UI_SKINNED_IS_TEXTBOX(widget));
-
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX(widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
+GtkWidget * textbox_new (gint width, const gchar * text, const gchar * font,
+ gboolean scroll)
+{
+ GtkWidget * textbox = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (textbox, width, 0);
+ gtk_widget_add_events (textbox, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK);
- priv->scroll_enabled = scroll;
- if (priv->scroll_enabled && priv->is_scrollable && priv->scroll_allowed) {
- gint tag;
- tag = TEXTBOX_SCROLL_SMOOTH_TIMEOUT;
- if (priv->scroll_timeout) {
- g_source_remove(priv->scroll_timeout);
- priv->scroll_timeout = 0;
- }
- priv->scroll_timeout = g_timeout_add(tag, textbox_scroll, textbox);
+ DRAW_CONNECT (textbox, textbox_draw);
+ g_signal_connect (textbox, "destroy", (GCallback) textbox_destroy, NULL);
- } else {
+ TextboxData * data = g_malloc0 (sizeof (TextboxData));
+ data->width = width;
+ data->text = g_strdup (text);
+ data->may_scroll = scroll;
+ g_object_set_data ((GObject *) textbox, "textboxdata", data);
- if (priv->scroll_timeout) {
- g_source_remove(priv->scroll_timeout);
- priv->scroll_timeout = 0;
- }
+ if (font)
+ data->font = pango_font_description_from_string (font);
- priv->offset = 0;
+ textboxes = g_list_prepend (textboxes, textbox);
- if (widget_really_drawable (widget))
- ui_skinned_textbox_expose (widget, 0);
- }
+ textbox_render (textbox, data);
+ return textbox;
}
-static void textbox_handle_special_char(gchar *c, gint * x, gint * y) {
- gint tx, ty;
-
- switch (*c) {
- case '"':
- tx = 26;
- ty = 0;
- break;
- case '\r':
- tx = 10;
- ty = 1;
- break;
- case ':':
- case ';':
- tx = 12;
- ty = 1;
- break;
- case '(':
- tx = 13;
- ty = 1;
- break;
- case ')':
- tx = 14;
- ty = 1;
- break;
- case '-':
- tx = 15;
- ty = 1;
- break;
- case '`':
- case '\'':
- tx = 16;
- ty = 1;
- break;
- case '!':
- tx = 17;
- ty = 1;
- break;
- case '_':
- tx = 18;
- ty = 1;
- break;
- case '+':
- tx = 19;
- ty = 1;
- break;
- case '\\':
- tx = 20;
- ty = 1;
- break;
- case '/':
- tx = 21;
- ty = 1;
- break;
- case '[':
- tx = 22;
- ty = 1;
- break;
- case ']':
- tx = 23;
- ty = 1;
- break;
- case '^':
- tx = 24;
- ty = 1;
- break;
- case '&':
- tx = 25;
- ty = 1;
- break;
- case '%':
- tx = 26;
- ty = 1;
- break;
- case '.':
- case ',':
- tx = 27;
- ty = 1;
- break;
- case '=':
- tx = 28;
- ty = 1;
- break;
- case '$':
- tx = 29;
- ty = 1;
- break;
- case '#':
- tx = 30;
- ty = 1;
- break;
- case '?':
- tx = 3;
- ty = 2;
- break;
- case '*':
- tx = 4;
- ty = 2;
- break;
- default:
- tx = 29;
- ty = 0;
- break;
- }
-
- const gchar *change[] = {"Ä„", "A", "Ę", "E", "Ć", "C", "Å", "L", "Ó", "O", "Åš", "S", "Å»", "Z", "Ź", "Z",
- "Ń", "N", "Ü", "U", NULL};
- int i;
- for (i = 0; change[i]; i+=2) {
- if (!strncmp(c, change[i], strlen(change[i]))) {
- tx = (*change[i+1] - 'A');
- break;
- }
- }
+void textbox_update_all (void)
+{
+ for (GList * node = textboxes; node; node = node->next)
+ {
+ GtkWidget * textbox = node->data;
+ g_return_if_fail (textbox);
+ TextboxData * data = g_object_get_data ((GObject *) textbox,
+ "textboxdata");
+ g_return_if_fail (data);
- /* those are commonly included into skins */
- if (!strncmp(c, "Ã…", strlen("Ã…"))) {
- tx = 0;
- ty = 2;
- } else if (!strncmp(c, "Ö", strlen("Ö"))) {
- tx = 1;
- ty = 2;
- } else if (!strncmp(c, "Ä", strlen("Ä"))) {
- tx = 2;
- ty = 2;
+ textbox_render (textbox, data);
}
-
- *x = tx * aud_active_skin->properties.textbox_bitmap_font_width;
- *y = ty * aud_active_skin->properties.textbox_bitmap_font_height;
-}
-
-void ui_skinned_textbox_move_relative(GtkWidget *widget, gint x, gint y) {
- UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX(widget);
- UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(widget);
- priv->move_x += x;
- priv->move_y += y;
- gtk_fixed_move(GTK_FIXED(gtk_widget_get_parent(widget)), widget,
- textbox->x+priv->move_x, textbox->y+priv->move_y);
}
diff --git a/src/skins/ui_skinned_textbox.h b/src/skins/ui_skinned_textbox.h
index 4b7ca39..4dfb9a0 100644
--- a/src/skins/ui_skinned_textbox.h
+++ b/src/skins/ui_skinned_textbox.h
@@ -1,6 +1,7 @@
/*
* Audacious - a cross-platform multimedia player
* Copyright (c) 2007 Tomasz Moń
+ * Copyright (c) 2011 John Lindgren
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,48 +25,19 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINNED_TEXTBOX_H
-#define AUDACIOUS_UI_SKINNED_TEXTBOX_H
+#ifndef SKINS_UI_SKINNED_TEXTBOX_H
+#define SKINS_UI_SKINNED_TEXTBOX_H
#include <gtk/gtk.h>
-#include "ui_skin.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SKINNED_TEXTBOX(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_textbox_get_type (), UiSkinnedTextbox)
-#define UI_SKINNED_TEXTBOX_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_textbox_get_type (), UiSkinnedTextboxClass)
-#define UI_SKINNED_IS_TEXTBOX(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_textbox_get_type ())
-
-typedef struct _UiSkinnedTextbox UiSkinnedTextbox;
-typedef struct _UiSkinnedTextboxClass UiSkinnedTextboxClass;
-
-struct _UiSkinnedTextbox {
- GtkWidget widget;
+GtkWidget * textbox_new (gint width, const gchar * text, const gchar * font,
+ gboolean scroll);
+void textbox_set_width (GtkWidget * textbox, gint width);
+const gchar * textbox_get_text (GtkWidget * textbox);
+void textbox_set_text (GtkWidget * textbox, const gchar * text);
+void textbox_set_font (GtkWidget * textbox, const gchar * font);
+void textbox_set_scroll (GtkWidget * textbox, gboolean scroll);
- GdkWindow *event_window;
- gint x, y, width, height;
- gchar *text;
-};
+void textbox_update_all (void);
-struct _UiSkinnedTextboxClass {
- GtkWidgetClass parent_class;
- void (* clicked) (UiSkinnedTextbox *textbox);
- void (* double_clicked) (UiSkinnedTextbox *textbox);
- void (* right_clicked) (UiSkinnedTextbox *textbox);
- void (* scaled) (UiSkinnedTextbox *textbox);
-};
-
-GtkWidget* ui_skinned_textbox_new (GtkWidget *fixed, gint x, gint y, gint w, gboolean allow_scroll, SkinPixmapId si);
-GType ui_skinned_textbox_get_type(void);
-void ui_skinned_textbox_set_xfont(GtkWidget *widget, gboolean use_xfont, const gchar * fontname);
-void ui_skinned_textbox_set_text(GtkWidget *widget, const gchar *text);
-void ui_skinned_textbox_set_scroll(GtkWidget *widget, gboolean scroll);
-void ui_skinned_textbox_move_relative(GtkWidget *widget, gint x, gint y);
-
-#ifdef __cplusplus
-}
#endif
-
-#endif /* AUDACIOUS_UI_SKINNED_TEXTBOX_H */
diff --git a/src/skins/ui_skinned_window.c b/src/skins/ui_skinned_window.c
index 9b178a2..28b81ce 100644
--- a/src/skins/ui_skinned_window.c
+++ b/src/skins/ui_skinned_window.c
@@ -1,304 +1,195 @@
/*
- * Audacious: A cross-platform multimedia player
- * Copyright (c) 2007 William Pitcock <nenolod -at- sacredspiral.co.uk>
+ * ui_skinned_window.c
+ * Copyright 2011 John Lindgren
*
- * 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; under version 3 of the License.
+ * This file is part of Audacious.
*
- * 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.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses>.
+ * Audacious 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.
*
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
*/
-#include <gtk/gtkmain.h>
-#include <glib-object.h>
-#include <glib/gmacros.h>
-#include <gtk/gtkmarshal.h>
-#include <gtk/gtkwindow.h>
-#include <string.h>
-#include <audacious/plugin.h>
-#include "platform/smartinclude.h"
-#include "ui_skin.h"
-#include "skins_cfg.h"
+#include "draw-compat.h"
#include "ui_dock.h"
#include "ui_skinned_window.h"
-#include "ui_main.h"
-#include "ui_playlist.h"
-static void ui_skinned_window_class_init(SkinnedWindowClass *klass);
-static void ui_skinned_window_init(GtkWidget *widget);
-static void ui_skinned_window_show(GtkWidget *widget);
-static void ui_skinned_window_hide(GtkWidget *widget);
-static GtkWindowClass *parent = NULL;
+typedef struct {
+ void (* draw) (GtkWidget * window, cairo_t * cr);
+ GtkWidget * normal, * shaded;
+ gboolean is_shaded, is_moving;
+} WindowData;
-GType
-ui_skinned_window_get_type(void)
-{
- static GType window_type = 0;
+DRAW_FUNC_BEGIN (window_draw)
+ WindowData * data = g_object_get_data ((GObject *) wid, "windowdata");
+ g_return_val_if_fail (data, FALSE);
- if (!window_type)
- {
- static const GTypeInfo window_info =
- {
- sizeof (SkinnedWindowClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) ui_skinned_window_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (SkinnedWindow),
- 0, /* n_preallocs */
- (GInstanceInitFunc) ui_skinned_window_init
- };
-
- window_type =
- g_type_register_static (GTK_TYPE_WINDOW, "SkinnedWindow",
- &window_info, 0);
- }
+ if (data->draw)
+ data->draw (wid, cr);
+DRAW_FUNC_END
- return window_type;
-}
-
-static void
-ui_skinned_window_map(GtkWidget *widget)
+static gboolean window_button_press (GtkWidget * window, GdkEventButton * event)
{
- gdk_window_set_back_pixmap (widget->window, 0, 0);
- (* GTK_WIDGET_CLASS (parent)->map) (widget);
- gtk_window_set_keep_above(GTK_WINDOW(widget), config.always_on_top);
-}
-
-static gboolean
-ui_skinned_window_motion_notify_event(GtkWidget *widget,
- GdkEventMotion *event)
-{
- if (dock_is_moving(GTK_WINDOW(widget)))
- dock_move_motion(GTK_WINDOW(widget), event);
-
- return FALSE;
-}
-
-static gboolean ui_skinned_window_focus_in(GtkWidget *widget, GdkEventFocus *focus) {
- gboolean val = GTK_WIDGET_CLASS (parent)->focus_in_event (widget, focus);
- gtk_widget_queue_draw(widget);
- return val;
-}
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_val_if_fail (data, FALSE);
-static gboolean ui_skinned_window_focus_out(GtkWidget *widget, GdkEventFocus *focus) {
- gboolean val = GTK_WIDGET_CLASS (parent)->focus_out_event (widget, focus);
- gtk_widget_queue_draw(widget);
- return val;
-}
+ /* pass double clicks through; they are handled elsewhere */
+ if (event->button != 1 || event->type == GDK_2BUTTON_PRESS)
+ return FALSE;
-static gboolean ui_skinned_window_button_press(GtkWidget *widget, GdkEventButton *event) {
- if (event->button == 1 && event->type == GDK_BUTTON_PRESS &&
- (config.easy_move || config.equalizer_shaded || (event->y / config.scale_factor) < 14)) {
- dock_move_press(get_dock_window_list(), GTK_WINDOW(widget),
- event, SKINNED_WINDOW(widget)->type == WINDOW_MAIN ? TRUE : FALSE);
- }
+ if (data->is_moving)
+ return TRUE;
+ dock_move_start (window, event->x_root, event->y_root);
+ data->is_moving = TRUE;
return TRUE;
}
-static gboolean ui_skinned_window_button_release(GtkWidget *widget, GdkEventButton *event) {
- if (dock_is_moving(GTK_WINDOW(widget)))
- dock_move_release(GTK_WINDOW(widget));
-
- return TRUE;
-}
-
-static gboolean ui_skinned_window_expose(GtkWidget *widget, GdkEventExpose *event) {
- SkinnedWindow *window = SKINNED_WINDOW(gtk_widget_get_parent(widget));
-
- GdkPixbuf *obj = NULL;
-
- gint width = 0, height = 0;
-
- switch (window->type) {
- case WINDOW_MAIN:
- width = aud_active_skin->properties.mainwin_width;
- height = aud_active_skin->properties.mainwin_height;
- break;
- case WINDOW_EQ:
- width = 275 * (config.scaled ? config.scale_factor : 1);
- height = 116 * (config.scaled ? config.scale_factor : 1) ;
- break;
- case WINDOW_PLAYLIST:
- width = playlistwin_get_width();
- height = config.playlist_height;
- break;
- default:
- return FALSE;
- }
- obj = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, width, height);
-
- gboolean focus = gtk_window_has_toplevel_focus(GTK_WINDOW(window));
-
- switch (window->type) {
- case WINDOW_MAIN:
- skin_draw_pixbuf(widget, aud_active_skin, obj,SKIN_MAIN, 0, 0, 0, 0, width, height);
- skin_draw_mainwin_titlebar(aud_active_skin, obj, config.player_shaded, focus || !config.dim_titlebar);
- break;
- case WINDOW_EQ:
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_EQMAIN, 0, 0, 0, 0, width, height);
- if (focus || !config.dim_titlebar) {
- if (!config.equalizer_shaded)
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_EQMAIN, 0, 134, 0, 0, width, 14);
- else
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_EQ_EX, 0, 0, 0, 0, width, 14);
- } else {
- if (!config.equalizer_shaded)
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_EQMAIN, 0, 149, 0, 0, width, 14);
- else
- skin_draw_pixbuf(widget, aud_active_skin, obj, SKIN_EQ_EX, 0, 15, 0, 0, width, 14);
- }
- break;
- case WINDOW_PLAYLIST:
- focus |= !config.dim_titlebar;
- if (config.playlist_shaded) {
- skin_draw_playlistwin_shaded(aud_active_skin, obj, width, focus);
- } else {
- skin_draw_playlistwin_frame(aud_active_skin, obj, width, config.playlist_height, focus);
- }
- break;
- }
-
- ui_skinned_widget_draw(widget, obj, width, height,
- window->type != WINDOW_PLAYLIST && config.scaled);
-
- g_object_unref(obj);
-
- return FALSE;
-}
-
-static void
-ui_skinned_window_class_init(SkinnedWindowClass *klass)
+static gboolean window_button_release (GtkWidget * window, GdkEventButton *
+ event)
{
- GtkWidgetClass *widget_class;
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_val_if_fail (data, FALSE);
- widget_class = (GtkWidgetClass*) klass;
+ if (event->button != 1)
+ return FALSE;
- parent = g_type_class_peek_parent(klass);
-
- widget_class->show = ui_skinned_window_show;
- widget_class->hide = ui_skinned_window_hide;
- widget_class->motion_notify_event = ui_skinned_window_motion_notify_event;
- widget_class->focus_in_event = ui_skinned_window_focus_in;
- widget_class->focus_out_event = ui_skinned_window_focus_out;
- widget_class->button_press_event = ui_skinned_window_button_press;
- widget_class->button_release_event = ui_skinned_window_button_release;
- widget_class->map = ui_skinned_window_map;
+ data->is_moving = FALSE;
+ return TRUE;
}
-static void
-ui_skinned_window_hide(GtkWidget *widget)
+static gboolean window_motion (GtkWidget * window, GdkEventMotion * event)
{
- SkinnedWindow *window;
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_val_if_fail (data, FALSE);
- g_return_if_fail(SKINNED_CHECK_WINDOW(widget));
+ if (! data->is_moving)
+ return TRUE;
- window = SKINNED_WINDOW(widget);
-
- if (window->x != NULL && window->y != NULL)
- gtk_window_get_position(GTK_WINDOW(window), window->x, window->y);
- GTK_WIDGET_CLASS(parent)->hide(widget);
+ dock_move (event->x_root, event->y_root);
+ return TRUE;
}
-static void
-ui_skinned_window_show(GtkWidget *widget)
+static void window_destroy (GtkWidget * window)
{
- SkinnedWindow *window;
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_if_fail (data);
- g_return_if_fail(SKINNED_CHECK_WINDOW(widget));
+ dock_remove_window (window);
- window = SKINNED_WINDOW(widget);
+ if (data->is_shaded)
+ gtk_container_remove ((GtkContainer *) window, data->shaded);
+ else
+ gtk_container_remove ((GtkContainer *) window, data->normal);
- if (window->x != NULL && window->y != NULL)
- gtk_window_move(GTK_WINDOW(window), *(window->x), *(window->y));
- GTK_WIDGET_CLASS(parent)->show(widget);
+ g_object_unref (data->normal);
+ g_object_unref (data->shaded);
+ g_free (data);
}
-static void
-ui_skinned_window_init(GtkWidget *widget)
+GtkWidget * window_new (gint * x, gint * y, gint w, gint h, gboolean main,
+ gboolean shaded, void (* draw) (GtkWidget * window, cairo_t * cr))
{
- SkinnedWindow *window;
- window = SKINNED_WINDOW(widget);
- window->x = NULL;
- window->y = NULL;
-}
+ GtkWidget * window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_decorated ((GtkWindow *) window, FALSE);
+ gtk_window_set_resizable ((GtkWindow *) window, FALSE);
+ gtk_window_move ((GtkWindow *) window, * x, * y);
+ gtk_widget_set_size_request (window, w, h);
+ gtk_window_resize ((GtkWindow *) window, w, h);
-GtkWidget *
-ui_skinned_window_new(const gchar *wmclass_name, gint *x, gint *y)
-{
- GtkWidget *widget = g_object_new(ui_skinned_window_get_type(), NULL);
- GtkWindow *window = GTK_WINDOW(widget);
+ gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
- window->type = SKINNED_WINDOW_TYPE;
+ DRAW_CONNECT (window, window_draw);
+ g_signal_connect (window, "button-press-event", (GCallback) window_button_press, NULL);
+ g_signal_connect (window, "button-release-event", (GCallback) window_button_release, NULL);
+ g_signal_connect (window, "motion-notify-event", (GCallback) window_motion, NULL);
+ g_signal_connect (window, "destroy", (GCallback) window_destroy, NULL);
- if (wmclass_name)
- gtk_window_set_wmclass(GTK_WINDOW(widget), wmclass_name, "Audacious");
+ WindowData * data = g_malloc0 (sizeof (WindowData));
+ g_object_set_data ((GObject *) window, "windowdata", data);
- gtk_widget_add_events(GTK_WIDGET(widget),
- GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK |
- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
- GDK_SCROLL_MASK | GDK_KEY_PRESS_MASK |
- GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK);
+ data->normal = gtk_fixed_new ();
+ g_object_ref (data->normal);
- dock_window_set_decorated (widget);
- gtk_widget_set_app_paintable(GTK_WIDGET(widget), TRUE);
+ data->shaded = gtk_fixed_new ();
+ g_object_ref (data->shaded);
- if (!strcmp(wmclass_name, "player"))
- SKINNED_WINDOW(widget)->type = WINDOW_MAIN;
- if (!strcmp(wmclass_name, "equalizer"))
- SKINNED_WINDOW(widget)->type = WINDOW_EQ;
- if (!strcmp(wmclass_name, "playlist"))
- SKINNED_WINDOW(widget)->type = WINDOW_PLAYLIST;
-
- SKINNED_WINDOW(widget)->x = x;
- SKINNED_WINDOW(widget)->y = y;
- SKINNED_WINDOW(widget)->normal = gtk_fixed_new();
- SKINNED_WINDOW(widget)->shaded = gtk_fixed_new();
- g_object_ref(SKINNED_WINDOW(widget)->normal);
- g_object_ref(SKINNED_WINDOW(widget)->shaded);
-
- gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(SKINNED_WINDOW(widget)->normal));
+ if (shaded)
+ gtk_container_add ((GtkContainer *) window, data->shaded);
+ else
+ gtk_container_add ((GtkContainer *) window, data->normal);
- g_signal_connect(SKINNED_WINDOW(widget)->normal, "expose-event", G_CALLBACK(ui_skinned_window_expose), NULL);
- g_signal_connect(SKINNED_WINDOW(widget)->shaded, "expose-event", G_CALLBACK(ui_skinned_window_expose), NULL);
+ data->is_shaded = shaded;
+ data->draw = draw;
- return widget;
+ dock_add_window (window, x, y, w, h, main);
+ return window;
}
-void ui_skinned_window_draw_all(GtkWidget *widget) {
- gtk_widget_queue_draw (widget);
+void window_set_size (GtkWidget * window, gint w, gint h)
+{
+ gtk_widget_set_size_request (window, w, h);
+ gtk_window_resize ((GtkWindow *) window, w, h);
+ dock_set_size (window, w, h);
}
-void ui_skinned_window_set_shade (GtkWidget * widget, gboolean shaded)
+void window_set_shaded (GtkWidget * window, gboolean shaded)
{
- SkinnedWindow * skinned = (SkinnedWindow *) widget;
- GtkWidget * old, * new;
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_if_fail (data);
+
+ if (data->is_shaded == shaded)
+ return;
if (shaded)
{
- old = skinned->normal;
- new = skinned->shaded;
+ gtk_container_remove ((GtkContainer *) window, data->normal);
+ gtk_container_add ((GtkContainer *) window, data->shaded);
}
else
{
- old = skinned->shaded;
- new = skinned->normal;
+ gtk_container_remove ((GtkContainer *) window, data->shaded);
+ gtk_container_add ((GtkContainer *) window, data->normal);
}
- if (gtk_widget_get_parent (old) == NULL)
- return;
+ data->is_shaded = shaded;
+}
+
+void window_put_widget (GtkWidget * window, gboolean shaded, GtkWidget * widget,
+ gint x, gint y)
+{
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_if_fail (data);
+
+ GtkWidget * fixed = shaded ? data->shaded : data->normal;
+ gtk_fixed_put ((GtkFixed *) fixed, widget, x, y);
+}
+
+void window_move_widget (GtkWidget * window, gboolean shaded, GtkWidget *
+ widget, gint x, gint y)
+{
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_if_fail (data);
+
+ GtkWidget * fixed = shaded ? data->shaded : data->normal;
+ gtk_fixed_move ((GtkFixed *) fixed, widget, x, y);
+}
+
+void window_show_all (GtkWidget * window)
+{
+ WindowData * data = g_object_get_data ((GObject *) window, "windowdata");
+ g_return_if_fail (data);
- gtk_container_remove ((GtkContainer *) skinned, old);
- gtk_container_add ((GtkContainer *) skinned, new);
+ gtk_widget_show_all (data->normal);
+ gtk_widget_show_all (data->shaded);
}
diff --git a/src/skins/ui_skinned_window.h b/src/skins/ui_skinned_window.h
index 13dc500..a6abf9b 100644
--- a/src/skins/ui_skinned_window.h
+++ b/src/skins/ui_skinned_window.h
@@ -1,64 +1,37 @@
/*
- * Audacious: A cross-platform multimedia player
- * Copyright (c) 2007 William Pitcock <nenolod -at- sacredspiral.co.uk>
+ * ui_skinned_window.h
+ * Copyright 2011 John Lindgren
*
- * 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; under version 3 of the License.
+ * This file is part of Audacious.
*
- * 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.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses>.
+ * Audacious 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.
*
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
*/
-#ifndef UI_SKINNED_WINDOW_H
-#define UI_SKINNED_WINDOW_H
-
-#define SKINNED_WINDOW(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_skinned_window_get_type (), SkinnedWindow)
-#define SKINNED_WINDOW_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_skinned_window_get_type (), SkinnedWindowClass)
-#define SKINNED_CHECK_WINDOW(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_skinned_window_get_type ())
-#define SKINNED_TYPE_WINDOW (ui_skinned_window_get_type())
-
-#ifdef GDK_WINDOWING_QUARTZ
-# define SKINNED_WINDOW_TYPE GTK_WINDOW_POPUP
-#else
-# define SKINNED_WINDOW_TYPE GTK_WINDOW_TOPLEVEL
-#endif
-
-enum {
- WINDOW_MAIN,
- WINDOW_EQ,
- WINDOW_PLAYLIST
-};
-
-typedef struct _SkinnedWindow SkinnedWindow;
-typedef struct _SkinnedWindowClass SkinnedWindowClass;
-
-struct _SkinnedWindow
-{
- GtkWindow window;
-
- gint *x, *y;
- gint type;
- GtkWidget *normal;
- GtkWidget *shaded;
-};
+#ifndef SKINS_UI_SKINNED_WINDOW_H
+#define SKINS_UI_SKINNED_WINDOW_H
-struct _SkinnedWindowClass
-{
- GtkWindowClass parent_class;
-};
+#include <gtk/gtk.h>
-GType ui_skinned_window_get_type(void);
-GtkWidget *ui_skinned_window_new(const gchar *wmclass_name, gint *x, gint *y);
-void ui_skinned_window_draw_all(GtkWidget *widget);
-void ui_skinned_window_set_shade(GtkWidget *widget, gboolean shaded);
+GtkWidget * window_new (gint * x, gint * y, gint w, gint h, gboolean main,
+ gboolean shaded, void (* draw) (GtkWidget * window, cairo_t * cr));
+void window_set_size (GtkWidget * window, gint w, gint h);
+void window_set_shaded (GtkWidget * window, gboolean shaded);
+void window_put_widget (GtkWidget * window, gboolean shaded, GtkWidget * widget,
+ gint x, gint y);
+void window_move_widget (GtkWidget * window, gboolean shaded, GtkWidget *
+ widget, gint x, gint y);
+void window_show_all (GtkWidget * window);
#endif
diff --git a/src/skins/ui_skinselector.c b/src/skins/ui_skinselector.c
index c5727d9..6964327 100644
--- a/src/skins/ui_skinselector.c
+++ b/src/skins/ui_skinselector.c
@@ -1,43 +1,37 @@
-/* BMP - Cross-platform multimedia player
- * Copyright (C) 2003-2004 BMP development team.
+/*
+ * ui_skinselector.c
+ * Copyright 1998-2003 XMMS Development Team
+ * Copyright 2003-2004 BMP Development Team
+ * Copyright 2011 John Lindgren
*
- * Based on XMMS:
- * Copyright (C) 1998-2003 XMMS development team.
+ * This file is part of Audacious.
*
- * 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; under version 3 of the License.
+ * Audacious 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, version 2 or version 3 of the License.
*
- * 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.
+ * Audacious 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, see <http://www.gnu.org/licenses>.
+ * You should have received a copy of the GNU General Public License along with
+ * Audacious. If not, see <http://www.gnu.org/licenses/>.
*
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
+ * The Audacious team does not consider modular code linking to Audacious or
+ * using our public API to be a derived work.
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "ui_skinselector.h"
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "platform/smartinclude.h"
-
#include <stdlib.h>
#include <string.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <libaudgui/libaudgui-gtk.h>
+#include "config.h"
#include "plugin.h"
#include "ui_skin.h"
+#include "ui_skinselector.h"
#include "util.h"
#define EXTENSION_TARGETS 7
@@ -45,10 +39,6 @@
static gchar *ext_targets[EXTENSION_TARGETS] = { "bmp", "xpm", "png", "svg",
"gif", "jpg", "jpeg" };
-#define THUMBNAIL_WIDTH 90
-#define THUMBNAIL_HEIGHT 40
-
-
enum SkinViewCols {
SKIN_VIEW_COL_PREVIEW,
SKIN_VIEW_COL_FORMATTEDNAME,
@@ -56,10 +46,14 @@ enum SkinViewCols {
SKIN_VIEW_N_COLS
};
+typedef struct {
+ gchar *name;
+ gchar *desc;
+ gchar *path;
+ GTime *time;
+} SkinNode;
-GList *skinlist = NULL;
-
-
+static GList *skinlist = NULL;
static gchar *
get_thumbnail_filename(const gchar * path)
@@ -124,41 +118,30 @@ skin_get_preview(const gchar * path)
return preview;
}
-
-static GdkPixbuf *
-skin_get_thumbnail(const gchar * path)
+static GdkPixbuf * skin_get_thumbnail (const gchar * path)
{
- GdkPixbuf *scaled = NULL;
- GdkPixbuf *preview;
- gchar *thumbname;
-
- g_return_val_if_fail(path != NULL, NULL);
+ gchar * thumbname = get_thumbnail_filename (path);
+ GdkPixbuf * thumb = NULL;
- if (g_str_has_suffix(path, "thumbs"))
- return NULL;
-
- thumbname = get_thumbnail_filename(path);
-
- if (g_file_test(thumbname, G_FILE_TEST_EXISTS)) {
- scaled = gdk_pixbuf_new_from_file(thumbname, NULL);
- g_free(thumbname);
- return scaled;
+ if (g_file_test (thumbname, G_FILE_TEST_EXISTS))
+ {
+ thumb = gdk_pixbuf_new_from_file (thumbname, NULL);
+ if (thumb)
+ goto DONE;
}
- if (!(preview = skin_get_preview(path))) {
- g_free(thumbname);
- return NULL;
- }
+ thumb = skin_get_preview (path);
+ if (! thumb)
+ goto DONE;
- scaled = gdk_pixbuf_scale_simple(preview,
- THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT,
- GDK_INTERP_BILINEAR);
- g_object_unref(preview);
+ audgui_pixbuf_scale_within (& thumb, 128);
- gdk_pixbuf_save(scaled, thumbname, "png", NULL, NULL);
- g_free(thumbname);
+ if (thumb)
+ gdk_pixbuf_save (thumb, thumbname, "png", NULL, NULL);
- return scaled;
+DONE:
+ g_free (thumbname);
+ return thumb;
}
static void
@@ -219,20 +202,20 @@ scan_skindir(const gchar * path)
}
}
-static gint
-skinlist_compare_func(gconstpointer a, gconstpointer b)
+static gint skinlist_compare_func (const void * _a, const void * _b)
{
- g_return_val_if_fail(a != NULL && SKIN_NODE(a)->name != NULL, 1);
- g_return_val_if_fail(b != NULL && SKIN_NODE(b)->name != NULL, 1);
- return strcasecmp(SKIN_NODE(a)->name, SKIN_NODE(b)->name);
+ const SkinNode * a = _a, * b = _b;
+ g_return_val_if_fail (a && a->name, 1);
+ g_return_val_if_fail (b && b->name, 1);
+ return strcasecmp (a->name, b->name);
}
-static void
-skin_free_func(gpointer data)
+static void skin_free_func (void * _data)
{
+ SkinNode * data = _data;
g_return_if_fail(data != NULL);
- g_free(SKIN_NODE(data)->name);
- g_free(SKIN_NODE(data)->path);
+ g_free (data->name);
+ g_free (data->path);
g_slice_free(SkinNode, data);
}
@@ -248,15 +231,19 @@ skinlist_clear(void)
skinlist = NULL;
}
-void
+static void
skinlist_update(void)
{
gchar *skinsdir;
skinlist_clear();
- scan_skindir(skins_paths[SKINS_PATH_USER_SKIN_DIR]);
- scan_skindir(DATA_DIR G_DIR_SEPARATOR_S "Skins");
+ if (g_file_test (skins_paths[SKINS_PATH_USER_SKIN_DIR], G_FILE_TEST_EXISTS))
+ scan_skindir (skins_paths[SKINS_PATH_USER_SKIN_DIR]);
+
+ gchar * path = g_strdup_printf ("%s/Skins", aud_get_path (AUD_PATH_DATA_DIR));
+ scan_skindir (path);
+ g_free (path);
skinsdir = getenv("SKINSDIR");
if (skinsdir) {
@@ -294,12 +281,14 @@ void skin_view_update (GtkTreeView * treeview)
skinlist_update();
- for (entry = skinlist; entry; entry = g_list_next(entry)) {
- thumbnail = skin_get_thumbnail(SKIN_NODE(entry->data)->path);
+ for (entry = skinlist; entry; entry = entry->next)
+ {
+ SkinNode * node = entry->data;
- formattedname = g_strdup_printf("<big><b>%s</b></big>\n<i>%s</i>",
- SKIN_NODE(entry->data)->name, SKIN_NODE(entry->data)->desc);
- name = SKIN_NODE(entry->data)->name;
+ thumbnail = skin_get_thumbnail (node->path);
+ formattedname = g_strdup_printf ("<big><b>%s</b></big>\n<i>%s</i>",
+ node->name, node->desc);
+ name = node->name;
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
@@ -310,8 +299,8 @@ void skin_view_update (GtkTreeView * treeview)
g_object_unref(thumbnail);
g_free(formattedname);
- if (g_strstr_len(aud_active_skin->path,
- strlen(aud_active_skin->path), name) ) {
+ if (g_strstr_len(active_skin->path,
+ strlen(active_skin->path), name) ) {
iter_current_skin = iter;
have_current_skin = TRUE;
}
@@ -350,14 +339,14 @@ skin_view_on_cursor_changed(GtkTreeView * treeview,
gtk_tree_model_get(model, &iter, SKIN_VIEW_COL_NAME, &name, -1);
for (node = skinlist; node; node = g_list_next(node)) {
- comp = SKIN_NODE(node->data)->path;
+ comp = ((SkinNode *) node->data)->path;
if (g_strrstr(comp, name))
break;
}
g_free(name);
- aud_active_skin_load(comp);
+ active_skin_load (comp);
}
@@ -377,6 +366,7 @@ skin_view_realize(GtkTreeView * treeview)
store = gtk_list_store_new(SKIN_VIEW_N_COLS, GDK_TYPE_PIXBUF,
G_TYPE_STRING , G_TYPE_STRING);
gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store));
+ g_object_unref (store);
column = gtk_tree_view_column_new();
gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
diff --git a/src/skins/ui_skinselector.h b/src/skins/ui_skinselector.h
index 21fac99..cb85e6b 100644
--- a/src/skins/ui_skinselector.h
+++ b/src/skins/ui_skinselector.h
@@ -20,26 +20,12 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef AUDACIOUS_UI_SKINSELECTOR_H
-#define AUDACIOUS_UI_SKINSELECTOR_H
+#ifndef SKINS_UI_SKINSELECTOR_H
+#define SKINS_UI_SKINSELECTOR_H
-#include <glib.h>
#include <gtk/gtk.h>
-#define SKIN_NODE(x) ((SkinNode *)(x))
-struct _SkinNode {
- gchar *name;
- gchar *desc;
- gchar *path;
- GTime *time;
-};
-
-typedef struct _SkinNode SkinNode;
-
-extern GList *skinlist;
-
-void skinlist_update();
void skin_view_realize(GtkTreeView * treeview);
void skin_view_update (GtkTreeView * treeview);
-#endif /* AUDACIOUS_UI_SKINSELECTOR_H */
+#endif /* SKINS_UI_SKINSELECTOR_H */
diff --git a/src/skins/ui_svis.c b/src/skins/ui_svis.c
index 2b7f8ff..faad700 100644
--- a/src/skins/ui_svis.c
+++ b/src/skins/ui_svis.c
@@ -1,6 +1,6 @@
/*
* Audacious - a cross-platform multimedia player
- * Copyright (c) 2007 Audacious development team.
+ * Copyright (c) 2007-2011 Audacious development team.
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,548 +24,182 @@
* Audacious or using our public API to be a derived work.
*/
-#include "ui_skin.h"
-#include "ui_svis.h"
-#include "ui_vis.h"
-#include "util.h"
-#include "skins_cfg.h"
-
#include <string.h>
-#include <ctype.h>
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmarshal.h>
-#include <gtk/gtkimage.h>
-
-#include <audacious/drct.h>
-#include <audacious/plugin.h>
-
-#define UI_TYPE_SVIS (ui_svis_get_type())
-
-/* FIXME: Are the svis_scope_colors correct? */
-static guint8 svis_scope_colors[] = { 20, 19, 18, 19, 20 };
-static guint8 svis_vu_normal_colors[] = { 17, 17, 17, 12, 12, 12, 2, 2 };
-
-#define SVIS_HEIGHT 5
-#define SVIS_WIDTH 38
-
-enum
-{
- DOUBLED,
- LAST_SIGNAL
-};
-
-static void ui_svis_class_init (UiSVisClass * klass);
-static void ui_svis_init (UiSVis * svis);
-static void ui_svis_destroy (GtkObject * object);
-static void ui_svis_realize (GtkWidget * widget);
-static void ui_svis_unrealize (GtkWidget * widget);
-static void ui_svis_map (GtkWidget * widget);
-static void ui_svis_unmap (GtkWidget * widget);
-static void ui_svis_size_request (GtkWidget * widget,
- GtkRequisition * requisition);
-static void ui_svis_size_allocate (GtkWidget * widget,
- GtkAllocation * allocation);
-static gboolean ui_svis_expose (GtkWidget * widget, GdkEventExpose * event);
-static void ui_svis_toggle_scaled (UiSVis * svis);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint vis_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_svis_get_type ()
-{
- static GType vis_type = 0;
- if (!vis_type)
- {
- static const GTypeInfo vis_info = {
- sizeof (UiSVisClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_svis_class_init,
- NULL,
- NULL,
- sizeof (UiSVis),
- 0,
- (GInstanceInitFunc) ui_svis_init,
- };
- vis_type =
- g_type_register_static (GTK_TYPE_WIDGET, "UiSVis", &vis_info, 0);
- }
-
- return vis_type;
-}
-
-static void ui_svis_class_init (UiSVisClass * klass)
-{
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GtkObjectClass *) klass;
- widget_class = (GtkWidgetClass *) klass;
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->destroy = ui_svis_destroy;
-
- widget_class->realize = ui_svis_realize;
- widget_class->unrealize = ui_svis_unrealize;
- widget_class->map = ui_svis_map;
- widget_class->unmap = ui_svis_unmap;
- widget_class->expose_event = ui_svis_expose;
- widget_class->size_request = ui_svis_size_request;
- widget_class->size_allocate = ui_svis_size_allocate;
-
- klass->scaled = ui_svis_toggle_scaled;
-
- vis_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiSVisClass, scaled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void ui_svis_init (UiSVis * svis)
-{
-
-}
-
-GtkWidget *ui_svis_new (GtkWidget * fixed, gint x, gint y)
-{
- UiSVis *svis = g_object_new (ui_svis_get_type (), NULL);
-
- svis->x = x;
- svis->y = y;
-
- svis->width = SVIS_WIDTH;
- svis->height = SVIS_HEIGHT;
-
- svis->fixed = fixed;
- svis->scaled = FALSE;
-
- svis->visible_window = TRUE;
- svis->event_window = NULL;
-
- gtk_fixed_put (GTK_FIXED (svis->fixed), GTK_WIDGET (svis), svis->x,
- svis->y);
-
- return GTK_WIDGET (svis);
-}
-
-static void ui_svis_destroy (GtkObject * object)
-{
- UiSVis *svis;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_IS_SVIS (object));
-
- svis = UI_SVIS (object);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (*GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_svis_realize (GtkWidget * widget)
-{
- UiSVis *svis;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_IS_SVIS (widget));
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
- svis = UI_SVIS (widget);
+#include "draw-compat.h"
+#include "skins_cfg.h"
+#include "surface.h"
+#include "ui_skin.h"
+#include "ui_vis.h"
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events (widget);
- attributes.event_mask |=
- GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK;
+static gint svis_analyzer_colors[] = {14, 11, 8, 5, 2};
+static gint svis_scope_colors[] = {20, 19, 18, 19, 20};
+static gint svis_vu_normal_colors[] = {16, 14, 12, 10, 8, 6, 4, 2};
- if (svis->visible_window)
- {
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window =
- gdk_window_new (widget->parent->window, &attributes,
- attributes_mask);
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_NO_WINDOW);
- gdk_window_set_user_data (widget->window, widget);
- }
- else
- {
- widget->window = gtk_widget_get_parent_window (widget);
- g_object_ref (widget->window);
+static struct {
+ gboolean active;
+ gint data[75];
+} svis;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- svis->event_window =
- gdk_window_new (widget->window, &attributes, attributes_mask);
- GTK_WIDGET_SET_FLAGS (widget, GTK_NO_WINDOW);
- gdk_window_set_user_data (svis->event_window, widget);
- }
+#define RGB_SEEK(x,y) (set = rgb + 38 * (y) + (x))
+#define RGB_SET(c) (* set ++ = (c))
+#define RGB_SET_Y(c) do {* set = (c); set += 38;} while (0)
+#define RGB_SET_INDEX(c) RGB_SET (active_skin->vis_colors[c])
+#define RGB_SET_INDEX_Y(c) RGB_SET_Y (active_skin->vis_colors[c])
- widget->style = gtk_style_attach (widget->style, widget->window);
-}
+DRAW_FUNC_BEGIN (ui_svis_draw)
+ guint32 rgb[38 * 5];
+ guint32 * set;
-static void ui_svis_unrealize (GtkWidget * widget)
-{
- UiSVis *svis;
- svis = UI_SVIS (widget);
+ RGB_SEEK (0, 0);
+ for (gint x = 0; x < 38 * 5; x ++)
+ RGB_SET_INDEX (0);
- if (svis->event_window != NULL)
+ switch (config.vis_type)
{
- gdk_window_set_user_data (svis->event_window, NULL);
- gdk_window_destroy (svis->event_window);
- svis->event_window = NULL;
- }
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (*GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void ui_svis_map (GtkWidget * widget)
-{
- UiSVis *svis;
- svis = UI_SVIS (widget);
-
- if (svis->event_window != NULL)
- gdk_window_show (svis->event_window);
+ case VIS_ANALYZER:;
+ gboolean bars = (config.analyzer_type == ANALYZER_BARS);
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (*GTK_WIDGET_CLASS (parent_class)->map) (widget);
-}
-
-static void ui_svis_unmap (GtkWidget * widget)
-{
- UiSVis *svis;
- svis = UI_SVIS (widget);
-
- if (svis->event_window != NULL)
- gdk_window_hide (svis->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (*GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
-
-static void ui_svis_size_request (GtkWidget * widget,
- GtkRequisition * requisition)
-{
- UiSVis *svis = UI_SVIS (widget);
-
- requisition->width = svis->width * (svis->scaled ? config.scale_factor : 1);
- requisition->height =
- svis->height * (svis->scaled ? config.scale_factor : 1);
-}
-
-static void ui_svis_size_allocate (GtkWidget * widget,
- GtkAllocation * allocation)
-{
- UiSVis *svis = UI_SVIS (widget);
-
- widget->allocation = *allocation;
- widget->allocation.x *= (svis->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (svis->scaled ? config.scale_factor : 1);
- if (GTK_WIDGET_REALIZED (widget))
- {
- if (svis->event_window != NULL)
- gdk_window_move_resize (svis->event_window, widget->allocation.x,
- widget->allocation.y, allocation->width,
- allocation->height);
- else
- gdk_window_move_resize (widget->window, widget->allocation.x,
- widget->allocation.y, allocation->width,
- allocation->height);
- }
-
- svis->x = widget->allocation.x / (svis->scaled ? config.scale_factor : 1);
- svis->y = widget->allocation.y / (svis->scaled ? config.scale_factor : 1);
-}
-
-#define OFFSET_NORMAL(p, x, y) ((p) + SVIS_WIDTH * (y) + (x))
-#define OFFSET_SCALED(p, x, y) ((p) + 4 * SVIS_WIDTH * (y) + 2 * (x))
-
-static inline void DRAW_SCALED (guchar * p, guchar value)
-{
- p[0] = value;
- p[1] = value;
- p[2 * SVIS_WIDTH] = value;
- p[2 * SVIS_WIDTH + 1] = value;
-}
-
-#define DRAW_DS_PIXEL DRAW_SCALED
-
-static gboolean ui_svis_expose (GtkWidget * widget, GdkEventExpose * event)
-{
- UiSVis *svis = UI_SVIS (widget);
-
- gint x, y, h;
- guchar svis_color[24][3];
- guchar rgb_data[SVIS_WIDTH * 2 * SVIS_HEIGHT * 2], *ptr, c;
- guint32 colors[24];
- GdkRgbCmap *cmap;
-
- if (!GTK_WIDGET_VISIBLE (widget))
- return FALSE;
+ for (gint x = 0; x < 38; x ++)
+ {
+ if (bars && (x % 3) == 2)
+ continue;
- if (!svis->visible_window)
- return FALSE;
+ gint h = svis.data[bars ? (x / 3) : x];
+ h = CLAMP (h, 0, 5);
+ RGB_SEEK (x, 5 - h);
- skin_get_viscolor (aud_active_skin, svis_color);
- for (y = 0; y < 24; y++)
- {
- colors[y] =
- svis_color[y][0] << 16 | svis_color[y][1] << 8 | svis_color[y][2];
- }
- cmap = gdk_rgb_cmap_new (colors, 24);
+ for (gint y = 0; y < h; y ++)
+ RGB_SET_INDEX_Y (svis_analyzer_colors[h - 1 - y]);
+ }
- if (!config.scaled)
- {
- memset (rgb_data, 0, SVIS_WIDTH * SVIS_HEIGHT);
- if (config.vis_type == VIS_ANALYZER && !aud_drct_get_paused ()
- && aud_drct_get_playing ())
+ break;
+ case VIS_VOICEPRINT:
+ switch (config.vu_mode)
{
- for (y = 0; y < SVIS_HEIGHT; y++)
+ case VU_NORMAL:
+ for (gint y = 0; y < 5; y ++)
{
- ptr = OFFSET_NORMAL (rgb_data, 0, SVIS_HEIGHT - 1 - y);
+ if (y == 2)
+ continue;
- if (config.analyzer_type == ANALYZER_BARS)
- {
- for (x = 0; x < (SVIS_WIDTH + 1) / 3; x ++)
- {
- if (svis->data[x] > y << 1)
- {
- ptr[3 * x] = 23;
- ptr[3 * x + 1] = 23;
- }
- }
- }
- else
- {
- for (x = 0; x < SVIS_WIDTH; x++)
- {
- if (svis->data[x] > y << 1)
- ptr[x] = 23;
- }
- }
- }
- }
- else if (config.vis_type == VIS_VOICEPRINT)
- {
- switch (config.vu_mode)
- {
- case VU_NORMAL:
- for (y = 0; y < 2; y++)
- {
- ptr = rgb_data + ((y * 3) * 38);
- h = (svis->data[y] * 7) / 37;
- for (x = 0; x < h; x++, ptr += 5)
- {
- c = svis_vu_normal_colors[x];
- *(ptr) = c;
- *(ptr + 1) = c;
- *(ptr + 2) = c;
- *(ptr + 38) = c;
- *(ptr + 39) = c;
- *(ptr + 40) = c;
- }
- }
- break;
- case VU_SMOOTH:
- for (y = 0; y < 2; y++)
+ gint h = (svis.data[y / 3] * 8 + 19) / 38;
+ h = CLAMP (h, 0, 8);
+ RGB_SEEK (0, y);
+
+ for (gint x = 0; x < h; x ++)
{
- ptr = rgb_data + ((y * 3) * SVIS_WIDTH);
- for (x = 0; x < svis->data[y]; x++, ptr++)
- {
- c = 17 - ((x * 15) / 37);
- *(ptr) = c;
- *(ptr + 38) = c;
- }
+ RGB_SET_INDEX (svis_vu_normal_colors[x]);
+ RGB_SET_INDEX (svis_vu_normal_colors[x]);
+ RGB_SET_INDEX (svis_vu_normal_colors[x]);
+ set += 2;
}
- break;
}
- }
- else if (config.vis_type == VIS_SCOPE)
- {
- for (x = 0; x < 38; x++)
+ break;
+ default: /* VU_SMOOTH */
+ for (gint y = 0; y < 5; y ++)
{
- h = svis->data[x << 1] / 3;
- ptr = rgb_data + ((4 - h) * 38) + x;
- *ptr = svis_scope_colors[h];
- }
- }
+ if (y == 2)
+ continue;
- }
- else
- { /*svis scaling, this needs some work, since a lot of stuff is hardcoded --majeru */
+ gint h = svis.data[y / 3];
+ h = CLAMP (h, 0, 38);
+ RGB_SEEK (0, y);
- memset (rgb_data, 0,
- SVIS_WIDTH * config.scale_factor * SVIS_HEIGHT *
- config.scale_factor);
- if (config.vis_type == VIS_ANALYZER && !aud_drct_get_paused ()
- && aud_drct_get_playing ())
- {
- for (y = 0; y < SVIS_HEIGHT; y++)
- {
- ptr = OFFSET_SCALED (rgb_data, 0, SVIS_HEIGHT - 1 - y);
-
- if (config.analyzer_type == ANALYZER_BARS)
- {
- for (x = 0; x < (SVIS_WIDTH + 1) / 3; x ++)
- {
- if (svis->data[x] > y << 1)
- {
- DRAW_SCALED (OFFSET_SCALED (ptr, x * 3, 0), 23);
- DRAW_SCALED (OFFSET_SCALED (ptr, x * 3 + 1, 0), 23);
- }
- }
- }
- else
- {
- for (x = 0; x < SVIS_WIDTH; x++)
- {
- if (svis->data[x] > y << 1)
- DRAW_SCALED (OFFSET_SCALED (ptr, x, 0), 23);
- }
- }
+ for (gint x = 0; x < h; x ++)
+ RGB_SET_INDEX (17 - (x * 16) / 38);
}
+ break;
}
- else if (config.vis_type == VIS_VOICEPRINT)
+ break;
+ case VIS_SCOPE:;
+ static const gint scale[17] = {0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 4,
+ 4, 4, 4, 4, 4};
+
+ if (! svis.active)
+ goto DRAW;
+
+ switch (config.scope_mode)
{
- switch (config.vu_mode)
+ case SCOPE_DOT:
+ for (gint x = 0; x < 38; x ++)
{
- case VU_NORMAL:
- for (y = 0; y < 2; y++)
- {
- ptr = rgb_data + ((y * 3) * 152);
- h = (svis->data[y] * 8) / 37;
- for (x = 0; x < h; x++, ptr += 10)
- {
- c = svis_vu_normal_colors[x];
- DRAW_DS_PIXEL (ptr, c);
- DRAW_DS_PIXEL (ptr + 2, c);
- DRAW_DS_PIXEL (ptr + 4, c);
- DRAW_DS_PIXEL (ptr + 152, c);
- DRAW_DS_PIXEL (ptr + 154, c);
- DRAW_DS_PIXEL (ptr + 156, c);
- }
- }
- break;
- case VU_SMOOTH:
- for (y = 0; y < 2; y++)
- {
- ptr = rgb_data + ((y * 3) * 152);
- for (x = 0; x < svis->data[y]; x++, ptr += 2)
- {
- c = 17 - ((x * 15) / 37);
- DRAW_DS_PIXEL (ptr, c);
- DRAW_DS_PIXEL (ptr + 152, c);
- }
- }
- break;
+ gint h = scale[CLAMP (svis.data[2 * x], 0, 16)];
+ RGB_SEEK (x, h);
+ RGB_SET_INDEX (svis_scope_colors[h]);
}
- }
- else if (config.vis_type == VIS_SCOPE)
- {
- for (x = 0; x < 38; x++)
+ case SCOPE_LINE:
+ for (gint x = 0; x < 37; x++)
{
- h = svis->data[x << 1] / 3;
- ptr = rgb_data + ((4 - h) * 152) + (x << 1);
- *ptr = svis_scope_colors[h];
- *(ptr + 1) = svis_scope_colors[h];
- *(ptr + 76) = svis_scope_colors[h];
- *(ptr + 77) = svis_scope_colors[h];
- }
- }
+ gint h = scale[CLAMP (svis.data[2 * x], 0, 16)];
+ gint h2 = scale[CLAMP (svis.data[2 * (x + 1)], 0, 16)];
+ if (h < h2) h2 --;
+ else if (h > h2) {gint temp = h; h = h2 + 1; h2 = temp;}
- }
+ RGB_SEEK (x, h);
+ for (gint y = h; y <= h2; y ++)
+ RGB_SET_INDEX_Y (svis_scope_colors[y]);
+ }
- GdkPixmap *obj = NULL;
- GdkGC *gc;
- obj =
- gdk_pixmap_new (NULL,
- svis->width * (svis->scaled ? config.scale_factor : 1),
- svis->height * (svis->scaled ? config.scale_factor : 1),
- gdk_rgb_get_visual ()->depth);
- gc = gdk_gc_new (obj);
+ gint h = scale[CLAMP (svis.data[74], 0, 16)];
+ RGB_SEEK (37, h);
+ RGB_SET_INDEX (svis_scope_colors[h]);
+ break;
+ default: /* SCOPE_SOLID */
+ for (gint x = 0; x < 38; x++)
+ {
+ gint h = scale[CLAMP (svis.data[2 * x], 0, 16)];
+ gint h2;
- if (!svis->scaled)
- {
- gdk_draw_indexed_image (obj, gc, 0, 0, svis->width, svis->height,
- GDK_RGB_DITHER_NORMAL, (guchar *) rgb_data,
- 38, cmap);
- }
- else
- {
- gdk_draw_indexed_image (obj, gc,
- 0 << 1, 0 << 1,
- svis->width << 1, svis->height << 1,
- GDK_RGB_DITHER_NONE, (guchar *) rgb_data,
- 76, cmap);
- }
+ if (h < 2) h2 = 2;
+ else {h2 = h; h = 2;}
- gdk_rgb_cmap_free (cmap);
- gdk_draw_drawable (widget->window, gc, obj, 0, 0, 0, 0,
- svis->width * (svis->scaled ? config.scale_factor : 1),
- svis->height * (svis->scaled ? config.scale_factor : 1));
- g_object_unref (obj);
- g_object_unref (gc);
+ RGB_SEEK (x, h);
+ for (gint y = h; y <= h2; y ++)
+ RGB_SET_INDEX_Y (svis_scope_colors[y]);
+ }
+ break;
+ }
+ break;
+ }
- return FALSE;
-}
+DRAW:;
+ cairo_surface_t * surf = cairo_image_surface_create_for_data ((void *) rgb,
+ CAIRO_FORMAT_RGB24, 38, 5, 4 * 38);
+ cairo_set_source_surface (cr, surf, 0, 0);
+ cairo_paint (cr);
+ cairo_surface_destroy (surf);
+DRAW_FUNC_END
-static void ui_svis_toggle_scaled (UiSVis * svis)
+GtkWidget * ui_svis_new (void)
{
- GtkWidget *widget = GTK_WIDGET (svis);
- svis->scaled = !svis->scaled;
-
- gtk_widget_set_size_request (widget, svis->width * config.scale_factor,
- svis->height * config.scale_factor);
-
- if (widget_really_drawable (widget))
- ui_svis_expose (widget, 0);
+ GtkWidget * wid = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (wid, 38, 5);
+ gtk_widget_add_events (wid, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
+ DRAW_CONNECT (wid, ui_svis_draw);
+ return wid;
}
void ui_svis_clear_data (GtkWidget * widget)
{
- g_return_if_fail (UI_IS_SVIS (widget));
-
- gint i;
- UiSVis *svis = UI_SVIS (widget);
-
- for (i = 0; i < 75; i++)
- {
- svis->data[i] = (config.vis_type == VIS_SCOPE) ? 6 : 0;
- }
-
- svis->refresh_delay = 0;
-
- if (widget_really_drawable (widget))
- ui_svis_expose (widget, 0);
+ memset (& svis, 0, sizeof svis);
+ gtk_widget_queue_draw (widget);
}
void ui_svis_timeout_func (GtkWidget * widget, guchar * data)
{
- g_return_if_fail (UI_IS_SVIS (widget));
-
- UiSVis *svis = UI_SVIS (widget);
- gint i;
-
if (config.vis_type == VIS_VOICEPRINT)
{
- for (i = 0; i < 2; i++)
- svis->data[i] = data[i];
+ for (gint i = 0; i < 2; i ++)
+ svis.data[i] = data[i];
}
else
{
- for (i = 0; i < 75; i++)
- svis->data[i] = data[i];
+ for (gint i = 0; i < 75; i ++)
+ svis.data[i] = data[i];
}
- if (widget_really_drawable (widget))
- ui_svis_expose (widget, 0);
+ svis.active = TRUE;
+ gtk_widget_queue_draw (widget);
}
diff --git a/src/skins/ui_svis.h b/src/skins/ui_svis.h
deleted file mode 100644
index 2749416..0000000
--- a/src/skins/ui_svis.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Audacious - a cross-platform multimedia player
- * Copyright (c) 2007 Audacious development team.
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- *
- * The Audacious team does not consider modular code linking to
- * Audacious or using our public API to be a derived work.
- */
-
-#ifndef UISVIS_H
-#define UISVIS_H
-
-#include <gtk/gtk.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_SVIS(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_svis_get_type (), UiSVis)
-#define UI_SVIS_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_svis_get_type (), UiSVisClass)
-#define UI_IS_SVIS(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_svis_get_type ())
-
-typedef struct _UiSVis UiSVis;
-typedef struct _UiSVisClass UiSVisClass;
-
-struct _UiSVis {
- GtkWidget widget;
-
- gint x, y, width, height;
- gint data[75];
- gint refresh_delay;
- gboolean scaled;
- GtkWidget *fixed;
- gboolean visible_window;
- GdkWindow *event_window;
-};
-
-struct _UiSVisClass {
- GtkWidgetClass parent_class;
- void (* scaled) (UiSVis *vis);
-};
-
-GtkWidget* ui_svis_new (GtkWidget *fixed, gint x, gint y);
-GType ui_svis_get_type(void);
-void ui_svis_clear_data(GtkWidget *widget);
-void ui_svis_timeout_func(GtkWidget *widget, guchar * data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/src/skins/ui_vis.c b/src/skins/ui_vis.c
index e523786..d2138ac 100644
--- a/src/skins/ui_vis.c
+++ b/src/skins/ui_vis.c
@@ -1,6 +1,6 @@
/*
* Audacious - a cross-platform multimedia player
- * Copyright (c) 2007-2010 Audacious development team.
+ * Copyright (c) 2007-2011 Audacious development team.
*
* Based on:
* BMP - Cross-platform multimedia player
@@ -24,378 +24,124 @@
* Audacious or using our public API to be a derived work.
*/
+#include <string.h>
+
+#include "draw-compat.h"
+#include "skins_cfg.h"
+#include "surface.h"
#include "ui_skin.h"
#include "ui_vis.h"
-#include "util.h"
-#include "skins_cfg.h"
-#include <audacious/plugin.h>
-static const gfloat vis_afalloff_speeds[] = { 0.34, 0.5, 1.0, 1.3, 1.6 };
-static const gfloat vis_pfalloff_speeds[] = { 1.2, 1.3, 1.4, 1.5, 1.6 };
-static const gint vis_scope_colors[16] = {22, 21, 21, 20, 20, 19, 19, 18, 18,
+static const gfloat vis_afalloff_speeds[] = {0.34, 0.5, 1.0, 1.3, 1.6};
+static const gfloat vis_pfalloff_speeds[] = {1.2, 1.3, 1.4, 1.5, 1.6};
+static const gint vis_scope_colors[16] = {22, 22, 21, 21, 20, 10, 19, 19, 18,
19, 19, 20, 20, 21, 21, 22};
-static guchar voiceprint_data[76 * 16];
-
-enum
-{
- DOUBLED,
- LAST_SIGNAL
-};
-
-static void ui_vis_class_init (UiVisClass * klass);
-static void ui_vis_init (UiVis * vis);
-static void ui_vis_destroy (GtkObject * object);
-static void ui_vis_realize (GtkWidget * widget);
-static void ui_vis_unrealize (GtkWidget * widget);
-static void ui_vis_map (GtkWidget * widget);
-static void ui_vis_unmap (GtkWidget * widget);
-static void ui_vis_size_request (GtkWidget * widget,
- GtkRequisition * requisition);
-static void ui_vis_size_allocate (GtkWidget * widget,
- GtkAllocation * allocation);
-static gboolean ui_vis_expose (GtkWidget * widget, GdkEventExpose * event);
-static void ui_vis_toggle_scaled (UiVis * vis);
-
-static GtkWidgetClass *parent_class = NULL;
-static guint vis_signals[LAST_SIGNAL] = { 0 };
-
-GType ui_vis_get_type ()
-{
- static GType vis_type = 0;
- if (!vis_type)
- {
- static const GTypeInfo vis_info = {
- sizeof (UiVisClass),
- NULL,
- NULL,
- (GClassInitFunc) ui_vis_class_init,
- NULL,
- NULL,
- sizeof (UiVis),
- 0,
- (GInstanceInitFunc) ui_vis_init,
- };
- vis_type =
- g_type_register_static (GTK_TYPE_WIDGET, "UiVis", &vis_info, 0);
- }
-
- return vis_type;
-}
-
-static void ui_vis_class_init (UiVisClass * klass)
-{
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GtkObjectClass *) klass;
- widget_class = (GtkWidgetClass *) klass;
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->destroy = ui_vis_destroy;
-
- widget_class->realize = ui_vis_realize;
- widget_class->unrealize = ui_vis_unrealize;
- widget_class->map = ui_vis_map;
- widget_class->unmap = ui_vis_unmap;
- widget_class->expose_event = ui_vis_expose;
- widget_class->size_request = ui_vis_size_request;
- widget_class->size_allocate = ui_vis_size_allocate;
-
- klass->doubled = ui_vis_toggle_scaled;
-
- vis_signals[DOUBLED] =
- g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (UiVisClass, doubled), NULL, NULL,
- g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-}
-
-static void ui_vis_init (UiVis * vis)
-{
- memset (voiceprint_data, 0, 16 * 76);
-}
-
-GtkWidget *ui_vis_new (GtkWidget * fixed, gint x, gint y, gint width)
-{
- UiVis *vis = g_object_new (ui_vis_get_type (), NULL);
-
- vis->x = x;
- vis->y = y;
-
- vis->width = width;
- vis->height = 16;
-
- vis->fixed = fixed;
- vis->scaled = FALSE;
-
- vis->visible_window = TRUE;
- vis->event_window = NULL;
-
- vis->gc = NULL;
-
- gtk_fixed_put (GTK_FIXED (vis->fixed), GTK_WIDGET (vis), vis->x, vis->y);
-
- return GTK_WIDGET (vis);
-}
-
-static void ui_vis_destroy (GtkObject * object)
-{
- UiVis *vis;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (UI_IS_VIS (object));
-
- vis = UI_VIS (object);
-
- if (vis->gc != NULL)
- g_object_unref (vis->gc), vis->gc = NULL;
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (*GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void ui_vis_realize (GtkWidget * widget)
-{
- UiVis *vis;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (UI_IS_VIS (widget));
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
- vis = UI_VIS (widget);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events (widget);
- attributes.event_mask |=
- GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK;
-
- if (vis->visible_window)
- {
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window =
- gdk_window_new (widget->parent->window, &attributes,
- attributes_mask);
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_NO_WINDOW);
- gdk_window_set_user_data (widget->window, widget);
- }
- else
- {
- widget->window = gtk_widget_get_parent_window (widget);
- g_object_ref (widget->window);
-
- attributes.wclass = GDK_INPUT_ONLY;
- attributes_mask = GDK_WA_X | GDK_WA_Y;
- vis->event_window =
- gdk_window_new (widget->window, &attributes, attributes_mask);
- GTK_WIDGET_SET_FLAGS (widget, GTK_NO_WINDOW);
- gdk_window_set_user_data (vis->event_window, widget);
- }
-
- widget->style = gtk_style_attach (widget->style, widget->window);
-}
-
-static void ui_vis_unrealize (GtkWidget * widget)
-{
- UiVis *vis;
- vis = UI_VIS (widget);
-
- if (vis->event_window != NULL)
- {
- gdk_window_set_user_data (vis->event_window, NULL);
- gdk_window_destroy (vis->event_window);
- vis->event_window = NULL;
- }
-
- if (GTK_WIDGET_CLASS (parent_class)->unrealize)
- (*GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void ui_vis_map (GtkWidget * widget)
-{
- UiVis *vis;
- vis = UI_VIS (widget);
-
- if (vis->event_window != NULL)
- gdk_window_show (vis->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->map)
- (*GTK_WIDGET_CLASS (parent_class)->map) (widget);
-}
-
-static void ui_vis_unmap (GtkWidget * widget)
-{
- UiVis *vis;
- vis = UI_VIS (widget);
-
- if (vis->event_window != NULL)
- gdk_window_hide (vis->event_window);
-
- if (GTK_WIDGET_CLASS (parent_class)->unmap)
- (*GTK_WIDGET_CLASS (parent_class)->unmap) (widget);
-}
-
-static void ui_vis_size_request (GtkWidget * widget,
- GtkRequisition * requisition)
-{
- UiVis *vis = UI_VIS (widget);
-
- requisition->width = vis->width * (vis->scaled ? config.scale_factor : 1);
- requisition->height = vis->height * (vis->scaled ? config.scale_factor : 1);
-}
-
-static void ui_vis_size_allocate (GtkWidget * widget,
- GtkAllocation * allocation)
-{
- UiVis *vis = UI_VIS (widget);
- widget->allocation = *allocation;
- widget->allocation.x *= (vis->scaled ? config.scale_factor : 1);
- widget->allocation.y *= (vis->scaled ? config.scale_factor : 1);
- if (GTK_WIDGET_REALIZED (widget))
- {
- if (vis->event_window != NULL)
- gdk_window_move_resize (vis->event_window, widget->allocation.x,
- widget->allocation.y, allocation->width,
- allocation->height);
- else
- gdk_window_move_resize (widget->window, widget->allocation.x,
- widget->allocation.y, allocation->width,
- allocation->height);
- }
+static guint32 vis_voice_color[256];
+static guint32 vis_voice_color_fire[256];
+static guint32 vis_voice_color_ice[256];
+static guint32 pattern_fill[76 * 2];
- vis->x = widget->allocation.x / (vis->scaled ? config.scale_factor : 1);
- vis->y = widget->allocation.y / (vis->scaled ? config.scale_factor : 1);
-}
+static struct {
+ gboolean active;
+ gfloat data[75], peak[75], peak_speed[75];
+ guchar voiceprint_data[76 * 16];
+ gboolean voiceprint_advance;
+} vis;
-#define RGB_SEEK(x,y) {set = rgb + 3 * 76 * (y) + 3 * (x);}
-#define RGB_SET(c) {guchar * p = (c); * set ++ = * p ++; * set ++ = * p ++; \
- * set ++ = * p ++;}
-#define RGB_SET_Y(c) {RGB_SET (c) set += 3 * 75;}
-#define RGB_SET_INDEX(c) {RGB_SET (vis_color[c])}
-#define RGB_SET_INDEX_Y(c) {RGB_SET_Y (vis_color[c])}
-
-static guchar vis_color[24][3];
-static guchar vis_voice_color[256][3];
-static guchar vis_voice_color_fire[256][3];
-static guchar vis_voice_color_ice[256][3];
-static guchar pattern_fill[3 * 76 * 2];
+#define RGB_SEEK(x,y) (set = rgb + 76 * (y) + (x))
+#define RGB_SET(c) (* set ++ = (c))
+#define RGB_SET_Y(c) do {* set = (c); set += 76;} while (0)
+#define RGB_SET_INDEX(c) RGB_SET (active_skin->vis_colors[c])
+#define RGB_SET_INDEX_Y(c) RGB_SET_Y (active_skin->vis_colors[c])
void ui_vis_set_colors (void)
{
- guchar * set, * end;
- gint x, n;
+ g_return_if_fail (active_skin != NULL);
- skin_get_viscolor (aud_active_skin, vis_color);
+ guint32 fgc = active_skin->colors[SKIN_TEXTFG];
+ guint32 bgc = active_skin->colors[SKIN_TEXTBG];
+ gint fg[3] = {COLOR_R (fgc), COLOR_G (fgc), COLOR_B (fgc)};
+ gint bg[3] = {COLOR_R (bgc), COLOR_G (bgc), COLOR_B (bgc)};
+ for (gint x = 0; x < 256; x ++)
{
- GdkColor * fgc = skin_get_color (aud_active_skin, SKIN_TEXTFG);
- GdkColor * bgc = skin_get_color (aud_active_skin, SKIN_TEXTBG);
- gint fg[3] = {fgc->red >> 8, fgc->green >> 8, fgc->blue >> 8};
- gint bg[3] = {bgc->red >> 8, bgc->green >> 8, bgc->blue >> 8};
-
- for (x = 0; x < 256; x ++)
- for (n = 0; n < 3; n ++)
- vis_voice_color[x][n] = bg[n] + (fg[n] - bg[n]) * x / 256;
+ guchar c[3];
+ for (gint n = 0; n < 3; n ++)
+ c[n] = bg[n] + (fg[n] - bg[n]) * x / 255;
+ vis_voice_color[x] = COLOR (c[0], c[1], c[2]);
}
- for (x = 0; x < 256; x ++)
+ for (gint x = 0; x < 256; x ++)
{
- vis_voice_color_fire[x][0] = (x < 64) ? x << 1 : 255;
- vis_voice_color_fire[x][1] = (x < 64) ? 0 : (x < 128) ? (x - 64) << 1 :
- 255;
- vis_voice_color_fire[x][2] = (x < 128) ? 0 : (x - 128) << 1;
+ guchar r = MIN (x, 127) * 2;
+ guchar g = CLAMP (x - 64, 0, 127) * 2;
+ guchar b = MAX (x - 128, 0) * 2;
+ vis_voice_color_fire[x] = COLOR (r, g, b);
}
- for (x = 0; x < 256; x ++)
- {
- vis_voice_color_ice[x][0] = x;
- vis_voice_color_ice[x][1] = (x < 128) ? x << 1 : 255;
- vis_voice_color_ice[x][2] = (x < 64) ? x << 2 : 255;
- }
+ for (gint x = 0; x < 256; x ++)
+ vis_voice_color_ice[x] = COLOR (x / 2, x, MIN (x * 2, 255));
- set = pattern_fill;
- end = set + 3 * 76;
+ guint32 * set = pattern_fill;
+ guint32 * end = set + 76;
while (set < end)
- RGB_SET_INDEX (0)
+ RGB_SET_INDEX (0);
- end = set + 3 * 76;
+ end = set + 76;
while (set < end)
{
- RGB_SET_INDEX (1)
- RGB_SET_INDEX (0)
+ RGB_SET_INDEX (1);
+ RGB_SET_INDEX (0);
}
}
-static gboolean ui_vis_expose (GtkWidget * widget, GdkEventExpose * event)
-{
- UiVis * vis = (UiVis *) widget;
- gint x, y, h, h2;
- guchar rgb[3 * 76 * 16];
- guchar * get, * set, * end;
- guchar (* voice_color)[3];
+DRAW_FUNC_BEGIN (ui_vis_draw)
+ guint32 rgb[76 * 16];
+ guint32 * set;
if (config.vis_type != VIS_VOICEPRINT)
{
- for (set = rgb; set < rgb + sizeof rgb; set += sizeof pattern_fill)
+ for (set = rgb; set < rgb + 76 * 16; set += 76 * 2)
memcpy (set, pattern_fill, sizeof pattern_fill);
}
switch (config.vis_type)
{
- case VIS_ANALYZER:
- for (x = 0; x < 75; x ++)
+ case VIS_ANALYZER:;
+ gboolean bars = (config.analyzer_type == ANALYZER_BARS);
+
+ for (gint x = 0; x < 75; x ++)
{
- if (config.analyzer_type == ANALYZER_BARS && (x & 3) == 3)
+ if (bars && (x & 3) == 3)
continue;
- if (config.analyzer_type == ANALYZER_BARS)
- h = vis->data[x >> 2];
- else
- h = vis->data[x];
-
- h = CLAMP (h, 0, 16); /* sanity check */
-
- RGB_SEEK (x, 16 - h)
+ gint h = vis.data[bars ? (x >> 2) : x];
+ h = CLAMP (h, 0, 16);
+ RGB_SEEK (x, 16 - h);
switch (config.analyzer_mode)
{
case ANALYZER_NORMAL:
- for (y = 0; y < h; y ++)
+ for (gint y = 0; y < h; y ++)
RGB_SET_INDEX_Y (18 - h + y);
-
break;
case ANALYZER_FIRE:
- for (y = 0; y < h; y ++)
+ for (gint y = 0; y < h; y ++)
RGB_SET_INDEX_Y (2 + y);
-
break;
- /* case ANALYZER_VLINES: */
- default:
- for (y = 0; y < h; y ++)
+ default: /* ANALYZER_VLINES */
+ for (gint y = 0; y < h; y ++)
RGB_SET_INDEX_Y (18 - h);
-
break;
}
if (config.analyzer_peaks)
{
- if (config.analyzer_type == ANALYZER_BARS)
- h = vis->peak[x >> 2];
- else
- h = vis->peak[x];
-
- h = CLAMP (h, 0, 16); /* sanity check */
+ gint h = vis.peak[bars ? (x >> 2) : x];
+ h = CLAMP (h, 0, 16);
if (h)
{
@@ -407,242 +153,164 @@ static gboolean ui_vis_expose (GtkWidget * widget, GdkEventExpose * event)
break;
case VIS_VOICEPRINT:
- /* Move the ribbon only if we are called directly, not on an actual
- * expose. */
- if (event == NULL)
+ if (vis.voiceprint_advance)
{
- memmove (voiceprint_data, voiceprint_data + 1, sizeof voiceprint_data -
- 1);
+ vis.voiceprint_advance = FALSE;
+ memmove (vis.voiceprint_data, vis.voiceprint_data + 1, sizeof
+ vis.voiceprint_data - 1);
- for (y = 0; y < 16; y ++)
- voiceprint_data[76 * y + 75] = vis->data[y];
+ for (gint y = 0; y < 16; y ++)
+ vis.voiceprint_data[76 * y + 75] = vis.data[y];
}
- switch (config.voiceprint_mode)
- {
- case VOICEPRINT_NORMAL:
- voice_color = vis_voice_color;
- break;
- case VOICEPRINT_FIRE:
- voice_color = vis_voice_color_fire;
- break;
- /* case VOICEPRINT_ICE: */
- default:
- voice_color = vis_voice_color_ice;
- break;
- }
-
- get = voiceprint_data;
+ guchar * get = vis.voiceprint_data;
+ guint32 * colors = (config.voiceprint_mode == VOICEPRINT_NORMAL) ?
+ vis_voice_color : (config.voiceprint_mode == VOICEPRINT_FIRE) ?
+ vis_voice_color_fire : /* VOICEPRINT_ICE */ vis_voice_color_ice;
set = rgb;
- for (y = 0; y < 16; y ++)
- for (x = 0; x < 76; x ++)
- RGB_SET (voice_color[* get ++])
-
+ for (gint y = 0; y < 16; y ++)
+ for (gint x = 0; x < 76; x ++)
+ RGB_SET (colors[* get ++]);
break;
case VIS_SCOPE:
+ if (! vis.active)
+ goto DRAW;
+
switch (config.scope_mode)
{
case SCOPE_DOT:
- for (x = 0; x < 75; x ++)
+ for (gint x = 0; x < 75; x ++)
{
- h = 1 + vis->data[x];
- h = CLAMP (h, 0, 15); /* sanity check */
- RGB_SEEK (x, h)
- RGB_SET_INDEX (vis_scope_colors[h])
+ gint h = CLAMP (vis.data[x], 0, 15);
+ RGB_SEEK (x, h);
+ RGB_SET_INDEX (vis_scope_colors[h]);
}
-
break;
case SCOPE_LINE:
- for (x = 0; x < 74; x++)
+ for (gint x = 0; x < 74; x++)
{
- h = 1 + vis->data[x];
- h = CLAMP (h, 0, 15); /* sanity check */
- h2 = 1 + vis->data[x + 1];
- h2 = CLAMP (h2, 0, 15); /* sanity check */
-
- if (h < h2)
- h2 --;
- else if (h > h2)
- {
- y = h;
- h = h2 + 1;
- h2 = y;
- }
+ gint h = CLAMP (vis.data[x], 0, 15);
+ gint h2 = CLAMP (vis.data[x + 1], 0, 15);
+
+ if (h < h2) h2 --;
+ else if (h > h2) {gint temp = h; h = h2 + 1; h2 = temp;}
- RGB_SEEK (x, h)
+ RGB_SEEK (x, h);
- for (y = h; y <= h2; y ++)
- RGB_SET_INDEX_Y (vis_scope_colors[y])
+ for (gint y = h; y <= h2; y ++)
+ RGB_SET_INDEX_Y (vis_scope_colors[y]);
}
- h = 1 + vis->data[74];
- h = CLAMP (h, 0, 15); /* sanity check */
- RGB_SEEK (74, h)
- RGB_SET_INDEX (vis_scope_colors[h])
+ gint h = CLAMP (vis.data[74], 0, 15);
+ RGB_SEEK (74, h);
+ RGB_SET_INDEX (vis_scope_colors[h]);
break;
- /* case SCOPE_SOLID: */
- default:
- for (x = 0; x < 75; x++)
+ default: /* SCOPE_SOLID */
+ for (gint x = 0; x < 75; x++)
{
- h = 1 + vis->data[x];
- h = CLAMP (h, 0, 15); /* sanity check */
+ gint h = CLAMP (vis.data[x], 0, 15);
+ gint h2;
- if (h < 8)
- h2 = 7;
- else
- {
- h2 = h;
- h = 8;
- }
+ if (h < 8) h2 = 8;
+ else {h2 = h; h = 8;}
- RGB_SEEK (x, h)
+ RGB_SEEK (x, h);
- for (y = h; y <= h2; y ++)
- RGB_SET_INDEX_Y (vis_scope_colors[y])
+ for (gint y = h; y <= h2; y ++)
+ RGB_SET_INDEX_Y (vis_scope_colors[y]);
}
-
break;
}
-
break;
}
- if (vis->gc == NULL)
- vis->gc = gdk_gc_new (widget->window);
-
- if (vis->scaled)
- {
- guchar rgb2[3 * 76 * 2 * 16 * 2];
-
- set = rgb2;
-
- for (y = 0; y < 16 * 2; y ++)
- {
- get = rgb + 3 * 76 * (y >> 1);
- end = get + 3 * 76;
-
- while (get < end)
- {
- * set ++ = * get ++;
- * set ++ = * get ++;
- * set ++ = * get;
- get -= 2;
- * set ++ = * get ++;
- * set ++ = * get ++;
- * set ++ = * get ++;
- }
- }
-
- gdk_draw_rgb_image (widget->window, vis->gc, 0, 0, 76 * 2, 16 * 2,
- GDK_RGB_DITHER_NONE, rgb2, 3 * 76 * 2);
- }
- else
- gdk_draw_rgb_image (widget->window, vis->gc, 0, 0, 76, 16,
- GDK_RGB_DITHER_NONE, rgb, 3 * 76);
-
- return FALSE;
-}
+DRAW:;
+ cairo_surface_t * surf = cairo_image_surface_create_for_data ((void *) rgb,
+ CAIRO_FORMAT_RGB24, 76, 16, 4 * 76);
+ cairo_set_source_surface (cr, surf, 0, 0);
+ cairo_paint (cr);
+ cairo_surface_destroy (surf);
+DRAW_FUNC_END
-static void ui_vis_toggle_scaled (UiVis * vis)
+GtkWidget * ui_vis_new (void)
{
- GtkWidget *widget = GTK_WIDGET (vis);
- vis->scaled = !vis->scaled;
-
- gtk_widget_set_size_request (widget,
- vis->width *
- (vis->scaled ? config.scale_factor : 1),
- vis->height *
- (vis->scaled ? config.scale_factor : 1));
-
- if (widget_really_drawable (widget))
- ui_vis_expose (widget, 0);
+ GtkWidget * wid = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (wid, 76, 16);
+ gtk_widget_add_events (wid, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
+ DRAW_CONNECT (wid, ui_vis_draw);
+ return wid;
}
-void ui_vis_clear_data (GtkWidget * widget)
+void ui_vis_clear_data (GtkWidget * wid)
{
- g_return_if_fail (UI_IS_VIS (widget));
-
- gint i;
- UiVis *vis = UI_VIS (widget);
-
- memset (voiceprint_data, 0, 16 * 76);
- for (i = 0; i < 75; i++)
- {
- vis->data[i] = (config.vis_type == VIS_SCOPE) ? 6 : 0;
- vis->peak[i] = 0;
- }
-
- if (widget_really_drawable (widget))
- ui_vis_expose (widget, 0);
+ memset (& vis, 0, sizeof vis);
+ gtk_widget_queue_draw (wid);
}
void ui_vis_timeout_func (GtkWidget * widget, guchar * data)
{
- g_return_if_fail (UI_IS_VIS (widget));
-
- UiVis *vis = UI_VIS (widget);
- gint i;
-
if (config.vis_type == VIS_ANALYZER)
{
const gint n = (config.analyzer_type == ANALYZER_BARS) ? 19 : 75;
- for (i = 0; i < n; i++)
+ for (gint i = 0; i < n; i++)
{
- if (data[i] > vis->data[i])
+ if (data[i] > vis.data[i])
{
- vis->data[i] = data[i];
- if (vis->data[i] > vis->peak[i])
+ vis.data[i] = data[i];
+ if (vis.data[i] > vis.peak[i])
{
- vis->peak[i] = vis->data[i];
- vis->peak_speed[i] = 0.01;
+ vis.peak[i] = vis.data[i];
+ vis.peak_speed[i] = 0.01;
}
- else if (vis->peak[i] > 0.0)
+ else if (vis.peak[i] > 0.0)
{
- vis->peak[i] -= vis->peak_speed[i];
- vis->peak_speed[i] *=
+ vis.peak[i] -= vis.peak_speed[i];
+ vis.peak_speed[i] *=
vis_pfalloff_speeds[config.peaks_falloff];
- if (vis->peak[i] < vis->data[i])
- vis->peak[i] = vis->data[i];
- if (vis->peak[i] < 0.0)
- vis->peak[i] = 0.0;
+ if (vis.peak[i] < vis.data[i])
+ vis.peak[i] = vis.data[i];
+ if (vis.peak[i] < 0.0)
+ vis.peak[i] = 0.0;
}
}
else
{
- if (vis->data[i] > 0.0)
+ if (vis.data[i] > 0.0)
{
- vis->data[i] -=
+ vis.data[i] -=
vis_afalloff_speeds[config.analyzer_falloff];
- if (vis->data[i] < 0.0)
- vis->data[i] = 0.0;
+ if (vis.data[i] < 0.0)
+ vis.data[i] = 0.0;
}
- if (vis->peak[i] > 0.0)
+ if (vis.peak[i] > 0.0)
{
- vis->peak[i] -= vis->peak_speed[i];
- vis->peak_speed[i] *=
+ vis.peak[i] -= vis.peak_speed[i];
+ vis.peak_speed[i] *=
vis_pfalloff_speeds[config.peaks_falloff];
- if (vis->peak[i] < vis->data[i])
- vis->peak[i] = vis->data[i];
- if (vis->peak[i] < 0.0)
- vis->peak[i] = 0.0;
+ if (vis.peak[i] < vis.data[i])
+ vis.peak[i] = vis.data[i];
+ if (vis.peak[i] < 0.0)
+ vis.peak[i] = 0.0;
}
}
}
}
else if (config.vis_type == VIS_VOICEPRINT)
{
- for (i = 0; i < 16; i++)
- vis->data[i] = data[15 - i];
+ for (gint i = 0; i < 16; i++)
+ vis.data[i] = data[15 - i];
+
+ vis.voiceprint_advance = TRUE;
}
else
{
- for (i = 0; i < 75; i++)
- vis->data[i] = data[i];
+ for (gint i = 0; i < 75; i++)
+ vis.data[i] = data[i];
}
- if (widget_really_drawable (widget))
- ui_vis_expose (widget, NULL);
+ vis.active = TRUE;
+ gtk_widget_queue_draw (widget);
}
diff --git a/src/skins/ui_vis.h b/src/skins/ui_vis.h
index 6736584..6850071 100644
--- a/src/skins/ui_vis.h
+++ b/src/skins/ui_vis.h
@@ -1,6 +1,6 @@
/*
* Audacious - a cross-platform multimedia player
- * Copyright (c) 2007 Audacious development team.
+ * Copyright (c) 2007-2011 Audacious development team.
*
* 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
@@ -18,19 +18,11 @@
* Audacious or using our public API to be a derived work.
*/
-#ifndef UIVIS_H
-#define UIVIS_H
+#ifndef SKINS_UI_VIS_H
+#define SKINS_UI_VIS_H
#include <gtk/gtk.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define UI_VIS(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, ui_vis_get_type (), UiVis)
-#define UI_VIS_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, ui_vis_get_type (), UiVisClass)
-#define UI_IS_VIS(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, ui_vis_get_type ())
-
typedef enum {
VIS_ANALYZER, VIS_SCOPE, VIS_VOICEPRINT, VIS_OFF
} VisType;
@@ -46,52 +38,26 @@ typedef enum {
typedef enum {
SCOPE_DOT, SCOPE_LINE, SCOPE_SOLID
} ScopeMode;
+
typedef enum {
- VOICEPRINT_NORMAL, VOICEPRINT_FIRE, VOICEPRINT_ICE
+ VOICEPRINT_NORMAL, VOICEPRINT_FIRE, VOICEPRINT_ICE
} VoiceprintMode;
-
typedef enum {
VU_NORMAL, VU_SMOOTH
} VUMode;
typedef enum {
- REFRESH_FULL, REFRESH_HALF, REFRESH_QUARTER, REFRESH_EIGTH
-} RefreshRate;
-
-typedef enum {
- FALLOFF_SLOWEST, FALLOFF_SLOW, FALLOFF_MEDIUM, FALLOFF_FAST,
- FALLOFF_FASTEST
+ FALLOFF_SLOWEST, FALLOFF_SLOW, FALLOFF_MEDIUM, FALLOFF_FAST, FALLOFF_FASTEST
} FalloffSpeed;
-typedef struct _UiVis UiVis;
-typedef struct _UiVisClass UiVisClass;
-
-struct _UiVis {
- GtkWidget widget;
-
- gint x, y, width, height;
- gfloat data[75], peak[75], peak_speed[75];
- gboolean scaled;
- GtkWidget *fixed;
- gboolean visible_window;
- GdkWindow *event_window;
- GdkGC * gc;
-};
-
-struct _UiVisClass {
- GtkWidgetClass parent_class;
- void (* doubled) (UiVis *vis);
-};
-
-GtkWidget* ui_vis_new (GtkWidget *fixed, gint x, gint y, gint width);
-GType ui_vis_get_type(void);
+GtkWidget * ui_vis_new (void);
void ui_vis_set_colors (void);
-void ui_vis_clear_data(GtkWidget *widget);
-void ui_vis_timeout_func(GtkWidget *widget, guchar * data);
+void ui_vis_clear_data (GtkWidget * widget);
+void ui_vis_timeout_func (GtkWidget * widget, guchar * data);
-#ifdef __cplusplus
-}
-#endif
+GtkWidget * ui_svis_new (void);
+void ui_svis_clear_data (GtkWidget * widget);
+void ui_svis_timeout_func (GtkWidget * widget, guchar * data);
#endif
diff --git a/src/skins/util.c b/src/skins/util.c
index 78b389f..5c6fb94 100644
--- a/src/skins/util.c
+++ b/src/skins/util.c
@@ -23,31 +23,26 @@
* Audacious or using our public API to be a derived work.
*/
-/*#define AUD_DEBUG*/
-
-#include "config.h"
-
-#include "util.h"
-
+#include <ctype.h>
+#include <errno.h>
#include <dirent.h>
-#include <gdk/gdkkeysyms.h>
-#include <glib.h>
-#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
-#ifdef HAVE_FTS_H
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fts.h>
-#endif
+#include <gtk/gtk.h>
#include <audacious/debug.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
#include <libaudcore/audstrings.h>
#include <libaudcore/hook.h>
+#include <libaudcore/vfs.h>
-#include "plugin.h"
+#include "config.h"
+#include "ui_main.h"
+#include "util.h"
typedef struct
{
@@ -62,15 +57,16 @@ static void make_directory(const gchar *path, mode_t mode);
gchar * find_file_case (const gchar * folder, const gchar * basename)
{
- static mowgli_dictionary_t * cache = NULL;
- GList * list;
+ static GHashTable * cache = NULL;
+ GList * list = NULL;
+ void * vlist;
if (cache == NULL)
- cache = mowgli_dictionary_create (strcmp);
+ cache = g_hash_table_new (g_str_hash, g_str_equal);
- list = mowgli_dictionary_retrieve (cache, folder);
-
- if (list == NULL)
+ if (g_hash_table_lookup_extended (cache, folder, NULL, & vlist))
+ list = vlist;
+ else
{
DIR * handle;
struct dirent * entry;
@@ -81,7 +77,7 @@ gchar * find_file_case (const gchar * folder, const gchar * basename)
while ((entry = readdir (handle)) != NULL)
list = g_list_prepend (list, g_strdup (entry->d_name));
- mowgli_dictionary_add (cache, folder, list);
+ g_hash_table_insert (cache, g_strdup (folder), list);
closedir (handle);
}
@@ -297,6 +293,39 @@ gchar *archive_basename(const gchar *str)
return NULL;
}
+/**
+ * Escapes characters that are special to the shell inside double quotes.
+ *
+ * @param string String to be escaped.
+ * @return Given string with special characters escaped. Must be freed with g_free().
+ */
+static gchar *
+escape_shell_chars(const gchar * string)
+{
+ const gchar *special = "$`\"\\"; /* Characters to escape */
+ const gchar *in = string;
+ gchar *out, *escaped;
+ gint num = 0;
+
+ while (*in != '\0')
+ if (strchr(special, *in++))
+ num++;
+
+ escaped = g_malloc(strlen(string) + num + 1);
+
+ in = string;
+ out = escaped;
+
+ while (*in != '\0') {
+ if (strchr(special, *in))
+ *out++ = '\\';
+ *out++ = *in++;
+ }
+ *out = '\0';
+
+ return escaped;
+}
+
/*
decompress_archive
@@ -310,7 +339,11 @@ gchar *archive_decompress(const gchar *filename)
gchar *tmpdir, *cmd, *escaped_filename;
ArchiveType type;
#ifndef HAVE_MKDTEMP
+#ifdef S_IRGRP
mode_t mode755 = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+#else
+ mode_t mode755 = S_IRWXU;
+#endif
#endif
if ((type = archive_get_type(filename)) <= ARCHIVE_DIR)
@@ -354,38 +387,6 @@ gchar *archive_decompress(const gchar *filename)
return tmpdir;
}
-
-#ifdef HAVE_FTS_H
-
-void del_directory(const gchar *dirname)
-{
- gchar *const argv[2] = { (gchar *)dirname, NULL };
- FTS *fts;
- FTSENT *p;
-
- fts = fts_open(argv, FTS_PHYSICAL, (gint (*)())NULL);
- while ((p = fts_read(fts)))
- {
- switch (p->fts_info)
- {
- case FTS_D:
- break;
- case FTS_DNR:
- case FTS_ERR:
- break;
- case FTS_DP:
- rmdir(p->fts_accpath);
- break;
- default:
- unlink(p->fts_accpath);
- break;
- }
- }
- fts_close(fts);
-}
-
-#else /* !HAVE_FTS */
-
static gboolean del_directory_func(const gchar *path, const gchar *basename,
void *params)
{
@@ -410,8 +411,6 @@ void del_directory(const gchar *path)
rmdir(path);
}
-#endif /* ifdef HAVE_FTS */
-
static void strip_string(GString *string)
{
while (string->len > 0 && string->str[0] == ' ')
@@ -672,7 +671,8 @@ GArray *read_ini_array(INIFile *inifile, const gchar *section, const gchar *key)
gchar *temp;
GArray *a;
- g_return_val_if_fail((temp = read_ini_string(inifile, section, key)), NULL);
+ if (! (temp = read_ini_string (inifile, section, key)))
+ return NULL;
a = string_to_garray(temp);
g_free(temp);
@@ -702,69 +702,6 @@ GArray *string_to_garray(const gchar *str)
return (array);
}
-/* text_get_extents() taken from The GIMP (C) Spencer Kimball, Peter
- * Mattis et al */
-gboolean text_get_extents(const gchar *fontname, const gchar *text, gint *width,
- gint *height, gint *ascent, gint *descent)
-{
- PangoFontDescription *font_desc;
- PangoLayout *layout;
- PangoRectangle rect;
-
- g_return_val_if_fail(fontname != NULL, FALSE);
- g_return_val_if_fail(text != NULL, FALSE);
-
- /* FIXME: resolution */
- layout = gtk_widget_create_pango_layout(GTK_WIDGET(mainwin), text);
-
- font_desc = pango_font_description_from_string(fontname);
- pango_layout_set_font_description(layout, font_desc);
- pango_font_description_free(font_desc);
- pango_layout_get_pixel_extents(layout, NULL, &rect);
-
- if (width)
- *width = rect.width;
- if (height)
- *height = rect.height;
-
- if (ascent || descent)
- {
- PangoLayoutIter *iter;
- PangoLayoutLine *line;
-
- iter = pango_layout_get_iter(layout);
- line = pango_layout_iter_get_line(iter);
- pango_layout_iter_free(iter);
-
- pango_layout_line_get_pixel_extents(line, NULL, &rect);
-
- if (ascent)
- *ascent = PANGO_ASCENT(rect);
- if (descent)
- *descent = -PANGO_DESCENT(rect);
- }
-
- g_object_unref(layout);
-
- return TRUE;
-}
-
-/* counts number of digits in a gint */
-guint gint_count_digits(gint n)
-{
- guint count = 0;
-
- n = ABS(n);
- do
- {
- count++;
- n /= 10;
- }
- while (n > 0);
-
- return count;
-}
-
gboolean dir_foreach(const gchar *path, DirForeachFunc function,
gpointer user_data, GError **error)
{
@@ -814,7 +751,7 @@ GtkWidget *make_filebrowser(const gchar *title, gboolean save)
GTK_RESPONSE_REJECT);
gtk_button_set_use_stock(GTK_BUTTON(button), TRUE);
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
button =
gtk_dialog_add_button(GTK_DIALOG(dialog),
@@ -839,31 +776,6 @@ static void make_directory(const gchar *path, mode_t mode)
}
#endif
-void resize_window(GtkWidget *window, gint width, gint height)
-{
- /* As of GTK+ 2.16, gtk_window_resize is broken on fixed size windows and
- * needs this workaround. */
- if (!gtk_window_get_resizable((GtkWindow *)window))
- {
- GdkGeometry hints;
-
- hints.min_width = width;
- hints.min_height = height;
- hints.max_width = width;
- hints.max_height = height;
- gtk_window_set_geometry_hints((GtkWindow *)window, NULL, &hints,
- GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE);
- }
-
- gtk_window_resize((GtkWindow *)window, width, height);
-}
-
-gboolean widget_really_drawable (GtkWidget * widget)
-{
- return GTK_WIDGET_DRAWABLE (widget) && widget->allocation.x >= 0 &&
- widget->allocation.y >= 0;
-}
-
void check_set (GtkActionGroup * action_group, const gchar * action_name,
gboolean is_on)
{
@@ -872,5 +784,4 @@ void check_set (GtkActionGroup * action_group, const gchar * action_name,
g_return_if_fail (action != NULL);
gtk_toggle_action_set_active ((GtkToggleAction *) action, is_on);
- hook_call (action_name, GINT_TO_POINTER (is_on));
}
diff --git a/src/skins/util.h b/src/skins/util.h
index a0cfacc..06dee85 100644
--- a/src/skins/util.h
+++ b/src/skins/util.h
@@ -26,11 +26,8 @@
#ifndef UTIL_H
#define UTIL_H
-#include <glib.h>
#include <gtk/gtk.h>
-G_BEGIN_DECLS
-#include "audacious/plugin.h"
typedef gboolean(*DirForeachFunc) (const gchar *path, const gchar *basename,
gpointer user_data);
@@ -56,28 +53,13 @@ GArray *read_ini_array(INIFile *key_file, const gchar *section,
GArray *string_to_garray(const gchar *str);
-gboolean text_get_extents(const gchar *fontname, const gchar *text, gint *width,
- gint *height, gint *ascent, gint *descent);
-
gboolean file_is_archive(const gchar *filename);
gchar *archive_decompress(const gchar *path);
gchar *archive_basename(const gchar *path);
-guint gint_count_digits(gint n);
-
-
GtkWidget *make_filebrowser(const gchar *title, gboolean save);
-GdkPixbuf *audacious_create_colorized_pixbuf(GdkPixbuf *src, gint red,
- gint green, gint blue);
-
-void resize_window(GtkWidget *window, gint width, gint height);
-gboolean widget_really_drawable (GtkWidget * widget);
-void widget_destroy_on_escape (GtkWidget * widget);
-
void check_set (GtkActionGroup * action_group, const gchar * action_name,
gboolean is_on);
-void check_button_toggled (GtkToggleButton * button, void * data);
-G_END_DECLS
#endif
diff --git a/src/smb/Makefile b/src/smb/Makefile
index 9f351e3..1f69e24 100644
--- a/src/smb/Makefile
+++ b/src/smb/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${TRANSPORT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lsmbclient
diff --git a/src/smb/smb.c b/src/smb/smb.c
index c9a23a9..8c034f6 100644
--- a/src/smb/smb.c
+++ b/src/smb/smb.c
@@ -1,5 +1,6 @@
/* Audacious
* Copyright (c) 2007 Daniel Bradshaw
+ * Copyright (c) 2011 John Lindgren
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -37,87 +38,71 @@ static void smb_auth_fn(const char *srv,
typedef struct _SMBFile {
int fd;
- long length;
+ gint64 length;
} SMBFile;
/* TODO: make writing work. */
-VFSFile *smb_vfs_fopen_impl(const gchar * path, const gchar * mode)
+void * smb_vfs_fopen_impl (const gchar * path, const gchar * mode)
{
- VFSFile *file;
SMBFile *handle;
struct stat st;
if (!path || !mode)
return NULL;
- file = g_new0(VFSFile, 1);
handle = g_new0(SMBFile, 1);
handle->fd = smbc_open(path, O_RDONLY, 0);
-
- if (handle->fd < 0) {
- g_free(file);
- file = NULL;
- } else {
- smbc_stat(path,&st);
- handle->length = st.st_size;
- file->handle = (void *)handle;
+
+ if (handle->fd < 0)
+ {
+ g_free (handle);
+ return NULL;
}
-
- return file;
+
+ smbc_stat (path, & st);
+ handle->length = st.st_size;
+
+ return handle;
}
gint smb_vfs_fclose_impl(VFSFile * file)
{
gint ret = 0;
- SMBFile *handle;
+ SMBFile * handle = vfs_get_handle (file);
- if (file == NULL)
- return -1;
-
- if (file->handle)
- {
- handle = (SMBFile *)file->handle;
- if (smbc_close(handle->fd) != 0)
- ret = -1;
- g_free(file->handle);
- }
+ if (smbc_close (handle->fd))
+ ret = -1;
+ g_free (handle);
return ret;
}
-size_t smb_vfs_fread_impl(gpointer ptr, size_t size, size_t nmemb, VFSFile * file)
+static gint64 smb_vfs_fread_impl (void * ptr, gint64 size, gint64 nmemb, VFSFile * file)
{
- SMBFile *handle;
- if (file == NULL)
- return 0;
- handle = (SMBFile *)file->handle;
+ SMBFile * handle = vfs_get_handle (file);
return smbc_read(handle->fd, ptr, size * nmemb);
}
-size_t smb_vfs_fwrite_impl(gconstpointer ptr, size_t size, size_t nmemb, VFSFile * file)
+static gint64 smb_vfs_fwrite_impl (const void * ptr, gint64 size, gint64 nmemb, VFSFile * file)
{
return 0;
}
gint smb_vfs_getc_impl(VFSFile *file)
{
- SMBFile *handle;
+ SMBFile * handle = vfs_get_handle (file);
char temp;
- handle = (SMBFile *)file->handle;
+
smbc_read(handle->fd, &temp, 1);
return (gint) temp;
}
-gint smb_vfs_fseek_impl(VFSFile * file, glong offset, gint whence)
+static gint smb_vfs_fseek_impl(VFSFile * file, gint64 offset, gint whence)
{
- SMBFile *handle;
- glong roffset = offset;
+ SMBFile * handle = vfs_get_handle (file);
+ gint64 roffset = offset;
gint ret = 0;
- if (file == NULL)
- return 0;
-
- handle = (SMBFile *)file->handle;
-
+
if (whence == SEEK_END)
{
roffset = handle->length + offset;
@@ -134,7 +119,7 @@ gint smb_vfs_fseek_impl(VFSFile * file, glong offset, gint whence)
ret = smbc_lseek(handle->fd, roffset, whence);
//printf("%ld %d = %d\n",roffset, whence, ret);
}
-
+
return ret;
}
@@ -149,42 +134,35 @@ void smb_vfs_rewind_impl(VFSFile * file)
smb_vfs_fseek_impl(file, 0, SEEK_SET);
}
-glong
-smb_vfs_ftell_impl(VFSFile * file)
+static gint64 smb_vfs_ftell_impl(VFSFile * file)
{
- SMBFile *handle;
- handle = (SMBFile *)file->handle;
+ SMBFile * handle = vfs_get_handle (file);
return smbc_lseek(handle->fd, 0, SEEK_CUR);
}
gboolean
smb_vfs_feof_impl(VFSFile * file)
{
- SMBFile *handle;
- off_t at;
+ SMBFile * handle = vfs_get_handle (file);
+ gint64 at;
at = smb_vfs_ftell_impl(file);
- //printf("%d %d %ld %ld\n",sizeof(int), sizeof(off_t), at, handle->length);
return (gboolean) (at == handle->length) ? TRUE : FALSE;
}
-gint
-smb_vfs_truncate_impl(VFSFile * file, glong size)
+static gint smb_vfs_truncate_impl (VFSFile * file, gint64 size)
{
return -1;
}
-off_t
-smb_vfs_fsize_impl(VFSFile * file)
+static gint64 smb_vfs_fsize_impl (VFSFile * file)
{
- SMBFile *handle = (SMBFile *)file->handle;
-
+ SMBFile * handle = vfs_get_handle (file);
return handle->length;
}
VFSConstructor smb_const = {
- "smb://",
smb_vfs_fopen_impl,
smb_vfs_fclose_impl,
smb_vfs_fread_impl,
@@ -199,7 +177,7 @@ VFSConstructor smb_const = {
smb_vfs_fsize_impl
};
-static void init(void)
+static gboolean init (void)
{
int err;
@@ -207,29 +185,18 @@ static void init(void)
if (err < 0)
{
g_message("[smb] not starting samba support due to error code %d", err);
- return;
+ return FALSE;
}
- vfs_register_transport(&smb_const);
-}
-
-static void cleanup(void)
-{
-#if 0
- vfs_unregister_transport(&smb_const);
-#endif
+ return TRUE;
}
-LowlevelPlugin llp_smb = {
- NULL,
- NULL,
- "smb:// URI Transport",
- init,
- cleanup,
-};
-
-LowlevelPlugin *get_lplugin_info(void)
-{
- return &llp_smb;
-}
+static const gchar * const smb_schemes[] = {"smb", NULL};
+AUD_TRANSPORT_PLUGIN
+(
+ .name = "SMB transport",
+ .init = init,
+ .schemes = smb_schemes,
+ .vtable = & smb_const
+)
diff --git a/src/sndfile/Makefile b/src/sndfile/Makefile
index 235158f..f827b91 100644
--- a/src/sndfile/Makefile
+++ b/src/sndfile/Makefile
@@ -9,5 +9,5 @@ include ../../buildsys.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${MOWGLI_LIBS} ${SNDFILE_LIBS} ${GTK_LIBS} ${GLIB_LIBS} -lm
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${SNDFILE_LIBS} ${GTK_LIBS} ${GLIB_LIBS} -lm
diff --git a/src/sndfile/plugin.c b/src/sndfile/plugin.c
index bd36dd7..f6d1948 100644
--- a/src/sndfile/plugin.c
+++ b/src/sndfile/plugin.c
@@ -1,5 +1,5 @@
/* Audacious - Cross-platform multimedia player
- * Copyright (C) 2005-2010 Audacious development team
+ * Copyright (C) 2005-2011 Audacious development team
*
* Based on the xmms_sndfile input plugin:
* Copyright (C) 2000, 2002 Erik de Castro Lopo
@@ -42,6 +42,8 @@
#include <glib.h>
#include <math.h>
+#include <stdlib.h>
+
#include <audacious/plugin.h>
#include <audacious/i18n.h>
#include <libaudgui/libaudgui.h>
@@ -51,8 +53,8 @@
static GMutex * control_mutex;
static GCond * control_cond;
-static gboolean pause_flag;
-static glong seek_value;
+static gint seek_value;
+static gboolean stop_flag;
/* Virtual file access wrappers for libsndfile
@@ -96,39 +98,13 @@ static SF_VIRTUAL_IO sf_virtual_io =
sf_tell
};
-
-static SNDFILE *
-open_sndfile_from_uri(const gchar *filename, VFSFile **vfsfile, SF_INFO *sfinfo)
-{
- SNDFILE *snd_file = NULL;
- *vfsfile = vfs_fopen(filename, "rb");
-
- if (*vfsfile == NULL)
- return NULL;
-
- snd_file = sf_open_virtual (&sf_virtual_io, SFM_READ, sfinfo, *vfsfile);
- if (snd_file == NULL)
- vfs_fclose(*vfsfile);
-
- return snd_file;
-}
-
-static void
-close_sndfile(SNDFILE *snd_file, VFSFile *vfsfile)
-{
- if (snd_file != NULL)
- sf_close(snd_file);
- if (vfsfile != NULL)
- vfs_fclose(vfsfile);
-}
-
-
/* Plugin initialization
*/
-static void plugin_init (void)
+static gboolean plugin_init (void)
{
control_mutex = g_mutex_new ();
control_cond = g_cond_new ();
+ return TRUE;
}
static void plugin_cleanup (void)
@@ -137,35 +113,49 @@ static void plugin_cleanup (void)
g_mutex_free (control_mutex);
}
-static Tuple * get_song_tuple (const gchar * filename)
+static void copy_string (SNDFILE * sf, gint sf_id, Tuple * tup, gint tup_id)
+{
+ const gchar * str = sf_get_string (sf, sf_id);
+ if (str)
+ tuple_set_str (tup, tup_id, NULL, str);
+}
+
+static void copy_int (SNDFILE * sf, gint sf_id, Tuple * tup, gint tup_id)
+{
+ const gchar * str = sf_get_string (sf, sf_id);
+ if (str && atoi (str))
+ tuple_set_int (tup, tup_id, NULL, atoi (str));
+}
+
+static Tuple * get_song_tuple (const gchar * filename, VFSFile * file)
{
- VFSFile *vfsfile = NULL;
SNDFILE *sndfile;
SF_INFO sfinfo;
- gboolean lossy = FALSE;
gchar *codec, *format, *subformat;
Tuple * ti;
- sndfile = open_sndfile_from_uri(filename, &vfsfile, &sfinfo);
+ sndfile = sf_open_virtual (& sf_virtual_io, SFM_READ, & sfinfo, file);
if (sndfile == NULL)
return NULL;
ti = tuple_new_from_filename (filename);
- if (sf_get_string(sndfile, SF_STR_TITLE) != NULL)
- tuple_associate_string(ti, FIELD_TITLE, NULL, sf_get_string(sndfile, SF_STR_TITLE));
-
- tuple_associate_string(ti, FIELD_ARTIST, NULL, sf_get_string(sndfile, SF_STR_ARTIST));
- tuple_associate_string(ti, FIELD_COMMENT, NULL, sf_get_string(sndfile, SF_STR_COMMENT));
- tuple_associate_string(ti, FIELD_DATE, NULL, sf_get_string(sndfile, SF_STR_DATE));
- tuple_associate_string(ti, -1, "software", sf_get_string(sndfile, SF_STR_SOFTWARE));
+ /* I have no idea version of sndfile ALBUM, GENRE, and TRACKNUMBER were
+ * added in. -jlindgren */
+ copy_string (sndfile, SF_STR_TITLE, ti, FIELD_TITLE);
+ copy_string (sndfile, SF_STR_ARTIST, ti, FIELD_ARTIST);
+/* copy_string (sndfile, SF_STR_ALBUM, ti, FIELD_ALBUM); */
+ copy_string (sndfile, SF_STR_COMMENT, ti, FIELD_COMMENT);
+/* copy_string (sndfile, SF_STR_GENRE, ti, FIELD_GENRE); */
+ copy_int (sndfile, SF_STR_DATE, ti, FIELD_YEAR);
+/* copy_int (sndfile, SF_STR_TRACKNUMBER, ti, FIELD_TRACK_NUMBER); */
- close_sndfile (sndfile, vfsfile);
+ sf_close (sndfile);
if (sfinfo.samplerate > 0)
{
- tuple_associate_int(ti, FIELD_LENGTH, NULL,
+ tuple_set_int(ti, FIELD_LENGTH, NULL,
(gint) ceil (1000.0 * sfinfo.frames / sfinfo.samplerate));
}
@@ -261,55 +251,42 @@ static Tuple * get_song_tuple (const gchar * filename)
break;
case SF_FORMAT_ULAW:
subformat = "U-Law";
- lossy = TRUE;
break;
case SF_FORMAT_ALAW:
subformat = "A-Law";
- lossy = TRUE;
break;
case SF_FORMAT_IMA_ADPCM:
subformat = "IMA ADPCM";
- lossy = TRUE;
break;
case SF_FORMAT_MS_ADPCM:
subformat = "MS ADPCM";
- lossy = TRUE;
break;
case SF_FORMAT_GSM610:
subformat = "GSM 6.10";
- lossy = TRUE;
break;
case SF_FORMAT_VOX_ADPCM:
subformat = "Oki Dialogic ADPCM";
- lossy = TRUE;
break;
case SF_FORMAT_G721_32:
subformat = "32kbs G721 ADPCM";
- lossy = TRUE;
break;
case SF_FORMAT_G723_24:
subformat = "24kbs G723 ADPCM";
- lossy = TRUE;
break;
case SF_FORMAT_G723_40:
subformat = "40kbs G723 ADPCM";
- lossy = TRUE;
break;
case SF_FORMAT_DWVW_12:
subformat = "12 bit Delta Width Variable Word";
- lossy = TRUE;
break;
case SF_FORMAT_DWVW_16:
subformat = "16 bit Delta Width Variable Word";
- lossy = TRUE;
break;
case SF_FORMAT_DWVW_24:
subformat = "24 bit Delta Width Variable Word";
- lossy = TRUE;
break;
case SF_FORMAT_DWVW_N:
subformat = "N bit Delta Width Variable Word";
- lossy = TRUE;
break;
case SF_FORMAT_DPCM_8:
subformat = "8 bit differential PCM";
@@ -326,34 +303,12 @@ static Tuple * get_song_tuple (const gchar * filename)
else
codec = g_strdup_printf("%s", format);
- tuple_associate_string(ti, FIELD_CODEC, NULL, codec);
- g_free(codec);
-
- tuple_associate_string(ti, FIELD_QUALITY, NULL, lossy ? "lossy" : "lossless");
+ tuple_set_format (ti, codec, sfinfo.channels, sfinfo.samplerate, 0);
+ g_free (codec);
return ti;
}
-static gint
-is_our_file (const gchar *filename)
-{
- VFSFile *vfsfile = NULL;
- SNDFILE *tmp_sndfile;
- SF_INFO tmp_sfinfo;
-
- /* Have to open the file to see if libsndfile can handle it. */
- tmp_sndfile = open_sndfile_from_uri(filename, &vfsfile, &tmp_sfinfo);
-
- if (!tmp_sndfile)
- return FALSE;
-
- /* It can so close file and return TRUE. */
- close_sndfile (tmp_sndfile, vfsfile);
- tmp_sndfile = NULL;
-
- return TRUE;
-}
-
static gboolean play_start (InputPlayback * playback, const gchar * filename,
VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
@@ -376,25 +331,21 @@ static gboolean play_start (InputPlayback * playback, const gchar * filename,
/* Fix me! Find out bitrate from libsndfile. The old calculation was based
* on the decoded data and therefore wrong for anything but floating-point
* files. */
- playback->set_params (playback, NULL, 0, 0, sfinfo.samplerate,
- sfinfo.channels);
+ playback->set_params (playback, 0, sfinfo.samplerate, sfinfo.channels);
- playback->playing = TRUE;
- pause_flag = pause;
seek_value = (start_time > 0) ? start_time : -1;
+ stop_flag = FALSE;
playback->set_pb_ready(playback);
gint size = sfinfo.channels * (sfinfo.samplerate / 50);
gfloat * buffer = g_malloc (sizeof (gfloat) * size);
- gboolean paused = FALSE, stopped = FALSE;
while (stop_time < 0 || playback->output->written_time () < stop_time)
{
g_mutex_lock (control_mutex);
- if (! playback->playing)
+ if (stop_flag)
{
- stopped = TRUE;
g_mutex_unlock (control_mutex);
break;
}
@@ -408,27 +359,6 @@ static gboolean play_start (InputPlayback * playback, const gchar * filename,
g_cond_signal (control_cond);
}
- if (pause_flag)
- {
- if (! paused)
- {
- playback->output->pause (TRUE);
- paused = TRUE;
- g_cond_signal (control_cond);
- }
-
- g_cond_wait (control_cond, control_mutex);
- g_mutex_unlock (control_mutex);
- continue;
- }
-
- if (paused)
- {
- playback->output->pause (FALSE);
- paused = FALSE;
- g_cond_signal (control_cond);
- }
-
g_mutex_unlock (control_mutex);
gint samples = sf_read_float (sndfile, buffer, size);
@@ -442,7 +372,7 @@ static gboolean play_start (InputPlayback * playback, const gchar * filename,
sf_close (sndfile);
g_free (buffer);
- if (! stopped)
+ if (! stop_flag)
{
while (playback->output->buffer_playing ())
g_usleep (20000);
@@ -451,58 +381,50 @@ static gboolean play_start (InputPlayback * playback, const gchar * filename,
playback->output->close_audio();
g_mutex_lock (control_mutex);
- playback->playing = FALSE;
+ stop_flag = TRUE;
g_cond_signal (control_cond); /* wake up any waiting request */
g_mutex_unlock (control_mutex);
return TRUE;
}
-static void play_pause (InputPlayback * playback, gshort pause)
+static void play_pause (InputPlayback * p, gboolean pause)
{
g_mutex_lock (control_mutex);
- if (! playback->playing)
- {
- g_mutex_unlock (control_mutex);
- return;
- }
+ if (! stop_flag)
+ p->output->pause (pause);
- pause_flag = pause;
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, control_mutex);
g_mutex_unlock (control_mutex);
}
-static void play_stop (InputPlayback * playback)
+static void play_stop (InputPlayback * p)
{
g_mutex_lock (control_mutex);
- if (! playback->playing)
+ if (! stop_flag)
{
- g_mutex_unlock (control_mutex);
- return;
+ stop_flag = TRUE;
+ p->output->abort_write ();
+ g_cond_signal (control_cond);
+ g_cond_wait (control_cond, control_mutex);
}
- playback->playing = FALSE;
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, control_mutex);
g_mutex_unlock (control_mutex);
}
-static void file_mseek (InputPlayback * playback, gulong time)
+static void file_mseek (InputPlayback * p, gint time)
{
g_mutex_lock (control_mutex);
- if (! playback->playing)
+ if (! stop_flag)
{
- g_mutex_unlock (control_mutex);
- return;
+ seek_value = time;
+ p->output->abort_write();
+ g_cond_signal (control_cond);
+ g_cond_wait (control_cond, control_mutex);
}
- seek_value = time;
- g_cond_signal (control_cond);
- g_cond_wait (control_cond, control_mutex);
g_mutex_unlock (control_mutex);
}
@@ -532,7 +454,7 @@ static void plugin_about (void)
audgui_simple_message (& aboutbox, GTK_MESSAGE_INFO,
_("About sndfile plugin"),
- _("Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
+ "Adapted for Audacious usage by Tony Vroon <chainsaw@gentoo.org>\n"
"from the xmms_sndfile plugin which is:\n"
"Copyright (C) 2000, 2002 Erik de Castro Lopo\n\n"
"This program is free software ; you can redistribute it and/or modify \n"
@@ -547,27 +469,22 @@ static void plugin_about (void)
"License along with this program ; if not, write to \n"
"the Free Software Foundation, Inc., \n"
"51 Franklin Street, Fifth Floor, \n"
- "Boston, MA 02110-1301 USA"));
+ "Boston, MA 02110-1301 USA");
}
-
static const gchar *sndfile_fmts[] = { "aiff", "au", "raw", "wav", NULL };
-static InputPlugin sndfile_ip = {
- .description = "sndfile plugin",
+AUD_INPUT_PLUGIN
+(
+ .name = "libsndfile Support",
.init = plugin_init,
.about = plugin_about,
- .is_our_file = is_our_file,
.play = play_start,
.stop = play_stop,
.pause = play_pause,
.cleanup = plugin_cleanup,
- .get_song_tuple = get_song_tuple,
+ .probe_for_tuple = get_song_tuple,
.is_our_file_from_vfs = is_our_file_from_vfs,
- .vfs_extensions = sndfile_fmts,
+ .extensions = sndfile_fmts,
.mseek = file_mseek,
-};
-
-static InputPlugin *sndfile_iplist[] = { &sndfile_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN(sndfile, sndfile_iplist)
+)
diff --git a/src/sndstretch/Makefile b/src/sndstretch/Makefile
index 2ab46e6..274cf28 100644
--- a/src/sndstretch/Makefile
+++ b/src/sndstretch/Makefile
@@ -9,5 +9,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${MOWGLI_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS} -lm
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lm
diff --git a/src/sndstretch/sndstretch.c b/src/sndstretch/sndstretch.c
index f574456..7bf20dc 100644
--- a/src/sndstretch/sndstretch.c
+++ b/src/sndstretch/sndstretch.c
@@ -178,7 +178,7 @@ void ringload_IIR_1_div_e_echo_i_vc( s16 * ringbuff, int ring_size, int pos, s16
/*void ringget ( s16 * ringbuff, int ring_size, int pos, s16 *buffer, int size )
{
int i;
-
+
if( pos+size > ring_size ){
for( i=pos; i<ring_size; i++ ) buffer[i]=ringbuff[i];
for( i=0; i<size-ring_size+pos; i++ ) buffer[i]=ringbuff[i];
@@ -215,7 +215,7 @@ int sndstretch_not_optimized(
int snr;
double snr_d;
-
+
int i,p1,p2;
double fade_in, fade_out;
double outd;
@@ -225,25 +225,25 @@ int sndstretch_not_optimized(
/* reset */
if( !is_initialized || initialize ||
snr_i!=snr_i_act || snr_o!=snr_o_act ){
-
+
snr_rest = 0.0;
snr_o_prod = 0;
snr_i_act = snr_i;
snr_o_act = snr_o;
dsnr = snr_o_act-snr_i_act;
pos_act = pos_init;
-
+
is_initialized = 1;
}
-
+
/* fprintf(stderr,"pos_act=%d\n",pos_act);
*/
snr_d = (double)snr_proc*(double)snr_o_act/(double)snr_i_act
+ snr_rest;
snr = (int) (snr_d) / 2 * 2;
snr_rest = snr_d - (double)snr;
-
+
/* fprintf(stderr,"snr=%d\n",snr);
*/
/* outbuff=malloc(snr*sizeof(s16));
@@ -329,23 +329,23 @@ int sndstretch( // optimized
/* reset */
if( !is_initialized || initialize ||
snr_i!=snr_i_act || snr_o!=snr_o_act ){
-
+
snr_rest = 0.0;
snr_o_prod = 0;
snr_i_act = snr_i;
snr_o_act = snr_o;
dsnr = snr_o_act-snr_i_act;
pos_act = pos_init;
-
+
is_initialized = 1;
}
-
+
snr_d = (double)snr_proc*(double)snr_o_act/(double)snr_i_act
+ snr_rest;
snr = (int) (snr_d) / 2 * 2;
snr_rest = snr_d - (double)snr;
-
+
/* produce snr samples */
i=0;
do {
@@ -431,23 +431,23 @@ int sndstretch_job( // optimized
/* reset */
if( !is_initialized || initialize ||
snr_i!=snr_i_act || snr_o!=snr_o_act ){
-
+
snr_rest = 0.0;
snr_o_prod = 0;
snr_i_act = snr_i;
snr_o_act = snr_o;
dsnr = snr_o_act-snr_i_act;
pos_act = pos_init;
-
+
is_initialized = 1;
}
-
+
snr_d = (double)snr_proc*(double)snr_o_act/(double)snr_i_act
+ snr_rest;
snr = (int) (snr_d) / 2 * 2;
snr_rest = snr_d - (double)snr;
-
+
/* produce snr samples */
i=0;
do {
@@ -514,7 +514,7 @@ int sndscale_not_optimized(
{
static s16 last_samp[10]; /* 10 channels maximum ;) */
static double pos_d = 0.0;
-
+
int snr;
int pos1, pos2;
s16 samp1, samp2;
@@ -523,7 +523,7 @@ int sndscale_not_optimized(
double ds;
double ratio1, ratio2, outd;
-
+
if ( initialize ){
for( ch=0; ch<chnr; ch++ ){
last_samp[ch] = 0;
@@ -535,15 +535,15 @@ int sndscale_not_optimized(
/* fprintf(stderr,"ds=%f\n",ds); */
/* fprintf(stderr,"pos_d =%f\n",pos_d);*/
-
+
/* produce proper amount of samples */
for( snr=0 ; pos_d < snr_proc/chnr-1 ; pos_d+=ds ){
-
+
pos1 = (int)floor(pos_d);
pos2 = pos1+1;
ratio1 = 1-pos_d+floor(pos_d);
ratio2 = pos_d-floor(pos_d);
-
+
for( ch=0; ch<chnr; ch++ ){
index1 = pos1*chnr+ch;
@@ -562,19 +562,19 @@ int sndscale_not_optimized(
snr+=chnr;
}
-
+
pos_d -= (double)(snr_proc/chnr);
-
+
for( ch=0; ch<chnr; ch++ ){
last_samp[ch] = buffer[snr_proc-chnr+ch];
}
-
+
*out_prod = snr;
-
+
/* fprintf(stderr,"snr = %d\n",snr);*/
-
+
/* last_samp = buffer[snr_proc-1]; */
-
+
return( snr );
}
@@ -596,7 +596,7 @@ int sndscale( //optimized
{
static s16 last_samp[10]; /* 10 channels maximum ;) */
static int pos_rest;
-
+
static int snr;
static int pos1, pos2;
static int ch;
@@ -604,7 +604,7 @@ int sndscale( //optimized
static int ds_li, ds_li_c, ds_rest;
static int snr_proc_m_chnr;
-
+
if ( initialize ){
for( ch=0; ch<chnr; ch++ ){
last_samp[ch] = 0;
@@ -615,13 +615,13 @@ int sndscale( //optimized
ds_li = snr_i/snr_o;
ds_li_c = ds_li*chnr;
ds_rest = snr_i%snr_o;
-
+
snr_proc_m_chnr = snr_proc-chnr;
for( snr=0 ; pos1 < snr_proc_m_chnr ; pos1+=ds_li_c ){
-
+
pos2 = pos1+chnr;
ratio1_i = snr_o-pos_rest;
-
+
if (pos1<0){
for( ch=0; ch<chnr; ch++ ){
outbuff[snr+ch] = (s16)
@@ -643,11 +643,11 @@ int sndscale( //optimized
}
pos1 -= snr_proc;
-
+
for( ch=0; ch<chnr; ch++ ){
last_samp[ch] = buffer[snr_proc-chnr+ch];
}
-
+
*out_prod = snr;
return( snr );
@@ -672,7 +672,7 @@ int sndscale_job( //optimized
{
/* static s16 * last_samp;
static int pos_rest;
-
+
static int snr;
static int pos1, pos2;
static int ch;
@@ -702,13 +702,13 @@ int sndscale_job( //optimized
ds_li = snr_i/snr_o;
ds_li_c = ds_li*chnr;
ds_rest = snr_i%snr_o;
-
+
snr_proc_m_chnr = snr_proc-chnr;
for( snr=0 ; pos1 < snr_proc_m_chnr ; pos1+=ds_li_c ){
-
+
pos2 = pos1+chnr;
ratio1_i = snr_o-pos_rest;
-
+
if (pos1<0){
for( ch=0; ch<chnr; ch++ ){
outbuff[snr+ch] = (s16)
@@ -730,25 +730,25 @@ int sndscale_job( //optimized
}
pos1 -= snr_proc;
-
+
for( ch=0; ch<chnr; ch++ ){
last_samp[ch] = buffer[snr_proc-chnr+ch];
}
-
+
*out_prod = snr;
return( snr );
-#undef last_samp
-#undef pos_rest
-#undef snr
-#undef pos1
-#undef pos2
-#undef ch
-#undef ratio1_i
-#undef ds_li
-#undef ds_li_c
-#undef ds_rest
+#undef last_samp
+#undef pos_rest
+#undef snr
+#undef pos1
+#undef pos2
+#undef ch
+#undef ratio1_i
+#undef ds_li
+#undef ds_li_c
+#undef ds_rest
#undef snr_proc_m_chnr
}
@@ -781,7 +781,7 @@ int snd_pitch_speed(
static double speed_act = 0;
static double pitch_act = 0;
static double fade_shift_act = 0;
-
+
int snr_prod;
double speed_eff;
double pitch_eff;
@@ -797,16 +797,16 @@ int snd_pitch_speed(
scaling_first=0;
// if( pitch > 1.0 ) scaling_first=0; else scaling_first=1;
-
+
if ( !is_init || initialize || speed!=speed_act || pitch!=pitch_act ||
fade_shift!=fade_shift_act ){
if( !is_init || initialize ) init_me=1; else init_me=0;
-
+
#ifdef DEBUG
fprintf(stderr,"snd_stretch_scale - init - pitch:%f, speed:%f\n",pitch,speed);
#endif
-
+
speed_act = speed;
pitch_act = pitch;
fade_shift_act = fade_shift;
@@ -815,7 +815,7 @@ int snd_pitch_speed(
// if (buff_help!=0) free(buff_help);
if (initialize != -1){
-
+
dsnr = fade_shift;
// dsnr = 1764; // 25Hz
// dsnr = 1536; // 30Hz
@@ -877,7 +877,7 @@ int snd_pitch_speed(
ring_pos_w = (ring_pos_w+(channels-1))/channels*channels;
ring_size_old = ring_size;
-
+
is_init = 1;
} else { /* initialize == -1 */
@@ -886,9 +886,9 @@ int snd_pitch_speed(
/* buffers are released -> leave the function */
return 0; /* !!! sloppy */
}
-
+
}
-
+
if ( fabs(speed_eff-1.0)>0.001 ){ /*
0.001 ?!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -925,20 +925,20 @@ int snd_pitch_speed(
}
if( 0/*scaling_first*/ ){
-
+
snr_proc_scale = snr_proc;
sndscale ( buff_i,
snr_scale_i, snr_scale_o, channels,
buff_help, &snr_prod, snr_proc_scale, init_me );
/* buff_o, &snr_prod, snr_proc_scale, 0 ); */
-
+
if( speed_eff!=1.0 ){ /* add echo only when really stretching */
ringload_IIR_1_div_e_echo_i( ring_buff, ring_size, ring_pos_w, buff_help, snr_prod, dsnr*channels );
} else {
ringload( ring_buff, ring_size, ring_pos_w, buff_help, snr_prod );
}
ring_pos_w = ringpos( ring_pos_w+snr_prod, ring_size );
-
+
snr_proc_stretch = snr_prod;
sndstretch ( ring_buff, ring_size, ring_pos_r,
snr_stretch_i*channels, snr_stretch_o*channels, channels,
@@ -957,12 +957,12 @@ int snd_pitch_speed(
ringload( ring_buff, ring_size, ring_pos_w, buff_i, snr_proc );
}
ring_pos_w = ringpos( ring_pos_w+snr_proc, ring_size );
-
+
snr_proc_stretch = snr_proc;
sndstretch ( ring_buff, ring_size, ring_pos_r,
snr_stretch_i*channels, snr_stretch_o*channels, channels,
buff_help, &snr_prod, snr_proc_stretch, init_me );
-
+
ring_pos_r = ringpos( ring_pos_r+snr_prod, ring_size );
snr_proc_scale = snr_prod;
@@ -972,9 +972,9 @@ int snd_pitch_speed(
buff_o, &snr_prod, snr_proc_scale, init_me );
}
-
+
*snr_produced = snr_prod;
-
+
return snr_prod;
}
@@ -1035,34 +1035,36 @@ int snd_pitch_speed_job(
#define speed_act job->speed_act
#define pitch_act job->pitch_act
#define fade_shift_act job->fade_shift_act
-
+
speed_eff = speed/pitch;
pitch_eff = pitch;
scaling_first=0;
// if( pitch > 1.0 ) scaling_first=0; else scaling_first=1;
-
+
if ( !is_init || initialize || speed!=speed_act || pitch!=pitch_act ||
fade_shift != fade_shift_act ){
if( !is_init || initialize ) init_me=1; else init_me=0;
-
+
#ifdef DEBUG
fprintf(stderr,"snd_stretch_scale - init - pitch:%f, speed:%f\n",pitch,speed);
#endif
-
+
speed_act = speed;
pitch_act = pitch;
+#ifdef DEBUG
if ( fade_shift != fade_shift_act ){
fprintf(stderr,"changed fade_shift_act\n");
}
+#endif
fade_shift_act = fade_shift;
// if (ring_buff!=0) free(ring_buff);
// if (buff_help!=0) free(buff_help);
if (initialize != -1){
-
+
dsnr = fade_shift;
// dsnr = 1764; // 25Hz
// dsnr = 1536; // 30Hz
@@ -1124,7 +1126,7 @@ int snd_pitch_speed_job(
ring_pos_w = (ring_pos_w+(channels-1))/channels*channels;
ring_size_old = ring_size;
-
+
is_init = 1;
} else { /* initialize == -1 */
@@ -1133,9 +1135,9 @@ int snd_pitch_speed_job(
/* buffers are released -> leave the function */
return 0; /* !!! sloppy */
}
-
+
}
-
+
if ( fabs(speed_eff-1.0)>0.001 ){ /*
0.001 ?!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -1172,14 +1174,14 @@ int snd_pitch_speed_job(
}
if( 0/*scaling_first*/ ){
-
+
snr_proc_scale = snr_proc;
sndscale_job ( buff_i,
snr_scale_i, snr_scale_o, channels,
buff_help, &snr_prod, snr_proc_scale, init_me,
&(job->scale_job) );
/* buff_o, &snr_prod, snr_proc_scale, 0 ); */
-
+
if( speed_eff!=1.0 ){ /* add echo only when really stretching */
if( !vol_corr ){
ringload_IIR_1_div_e_echo_i( ring_buff, ring_size, ring_pos_w, buff_help, snr_prod, dsnr*channels );
@@ -1190,7 +1192,7 @@ int snd_pitch_speed_job(
ringload( ring_buff, ring_size, ring_pos_w, buff_help, snr_prod );
}
ring_pos_w = ringpos( ring_pos_w+snr_prod, ring_size );
-
+
snr_proc_stretch = snr_prod;
sndstretch_job ( ring_buff, ring_size, ring_pos_r,
snr_stretch_i*channels, snr_stretch_o*channels, channels,
@@ -1215,14 +1217,14 @@ int snd_pitch_speed_job(
ringload( ring_buff, ring_size, ring_pos_w, buff_i, snr_proc );
}
ring_pos_w = ringpos( ring_pos_w+snr_proc, ring_size );
-
+
snr_proc_stretch = snr_proc;
sndstretch_job ( ring_buff, ring_size, ring_pos_r,
snr_stretch_i*channels, snr_stretch_o*channels, channels,
buff_help, &snr_prod, snr_proc_stretch, init_me,
&(job->stretch_job)
);
-
+
ring_pos_r = ringpos( ring_pos_r+snr_prod, ring_size );
snr_proc_scale = snr_prod;
@@ -1234,9 +1236,9 @@ int snd_pitch_speed_job(
);
}
-
+
*snr_produced = snr_prod;
-
+
return snr_prod;
#undef ring_buff
#undef ring_buff_old
diff --git a/src/sndstretch/sndstretch_xmms.c b/src/sndstretch/sndstretch_xmms.c
index 1aa5181..63d22d2 100644
--- a/src/sndstretch/sndstretch_xmms.c
+++ b/src/sndstretch/sndstretch_xmms.c
@@ -5,7 +5,7 @@
// Copyright (C) 2001 Florian Berger
// Email: florian.berger@jk.uni-linz.ac.at
//
-// Ported to new Audacious effect API by John Lindgren, 2009
+// Copyright (C) 2009-2011 John Lindgren
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License Version 2 as
@@ -33,14 +33,15 @@
#include <stdio.h>
#include <string.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudcore/audio.h>
#define SNDSTRETCH_VERSION_STRING "0.7"
-void sndstretch_init (void);
+gboolean sndstretch_init (void);
void sndstretch_about (void);
void sndstretch_config (void);
@@ -51,8 +52,9 @@ static void sndstretch_finish (gfloat * * data, gint * samples);
static gint sndstretch_decoder_to_output_time (gint time);
static gint sndstretch_output_to_decoder_time (gint time);
-EffectPlugin sndstretch_ep = {
- .description = "SndStretch",
+AUD_EFFECT_PLUGIN
+(
+ .name = "SndStretch",
.init = sndstretch_init,
.about = sndstretch_about,
.configure = sndstretch_config,
@@ -63,11 +65,7 @@ EffectPlugin sndstretch_ep = {
.decoder_to_output_time = sndstretch_decoder_to_output_time,
.output_to_decoder_time = sndstretch_output_to_decoder_time,
.preserves_format = TRUE,
-};
-
-EffectPlugin *sndstretch_eplist[] = { &sndstretch_ep, NULL };
-
-DECLARE_PLUGIN(sndstretch, NULL, NULL, NULL, NULL, sndstretch_eplist, NULL, NULL, NULL);
+)
struct sndstretch_settings
{
@@ -88,9 +86,7 @@ struct sndstretch_settings
double scale;
int short_overlap;
int volume_corr;
- GtkObject * pitch_adj;
- GtkObject * speed_adj;
- GtkObject * scale_adj;
+ GtkAdjustment * pitch_adj, * speed_adj, * scale_adj;
};
static struct sndstretch_settings SS;
@@ -140,14 +136,6 @@ void sndstretch_about(void)
GtkWidget * text;
GtkTextBuffer * textbuffer;
GtkTextIter iter;
-
- GdkPixmap * logopix;
- GdkBitmap * logomask;
- GtkWidget * logo;
-
- GdkPixmap * FBlogopix;
- GdkBitmap * FBlogomask;
- GtkWidget * FBlogo;
GtkWidget * copyhbox, * copy_rbox, * copy_lbox;
@@ -157,21 +145,13 @@ void sndstretch_about(void)
sndstretch_about_dialog = gtk_dialog_new();
gtk_widget_show(sndstretch_about_dialog);
- /* title logo */
- logopix = gdk_pixmap_create_from_xpm_d(sndstretch_about_dialog->window, &logomask,
- NULL,
- (gchar **) sndstretch_xmms_logo_xpm);
- logo = gtk_pixmap_new(logopix,logomask);
-
- /* FB-logo */
- FBlogopix = gdk_pixmap_create_from_xpm_d(sndstretch_about_dialog->window, &FBlogomask,
- NULL,
- (gchar **) FB_logo_xpm);
- FBlogo = gtk_pixmap_new(FBlogopix,FBlogomask);
+ GtkWidget * logo = gtk_image_new_from_pixbuf (gdk_pixbuf_new_from_xpm_data
+ ((const gchar * *) sndstretch_xmms_logo_xpm));
+ GtkWidget * FBlogo = gtk_image_new_from_pixbuf (gdk_pixbuf_new_from_xpm_data
+ ((const gchar * *) FB_logo_xpm));
-
- gtk_signal_connect(GTK_OBJECT(sndstretch_about_dialog), "destroy",
- GTK_SIGNAL_FUNC(sndstretch_about_destroy_cb), NULL);
+ g_signal_connect (sndstretch_about_dialog, "destroy", (GCallback)
+ sndstretch_about_destroy_cb, NULL);
gtk_window_set_title(GTK_WINDOW(sndstretch_about_dialog), _("About SndStretch"));
@@ -189,8 +169,8 @@ void sndstretch_about(void)
gtk_box_pack_start(GTK_BOX(copyhbox), copy_rbox, TRUE, TRUE, 5);
vbox = gtk_vbox_new(FALSE, 5);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(sndstretch_about_dialog)->vbox), vbox,
- TRUE, TRUE, 5);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area ((GtkDialog *)
+ sndstretch_about_dialog), vbox, TRUE, TRUE, 5);
scrolltext = gtk_scrolled_window_new(NULL,NULL);
text = gtk_text_view_new();
@@ -213,14 +193,13 @@ void sndstretch_about(void)
gtk_box_pack_start(GTK_BOX(vbox), copyhbox, FALSE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), scrolltext, TRUE, TRUE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
- gtk_widget_set_usize(scrolltext, -1, 110);
button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(sndstretch_about_dialog)->action_area),
- button, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(sndstretch_about_ok_cb), NULL);
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_action_area ((GtkDialog *)
+ sndstretch_about_dialog), button, FALSE, FALSE, 0);
+ g_signal_connect (button, "clicked", (GCallback) sndstretch_about_ok_cb,
+ NULL);
+ gtk_widget_set_can_default (button, TRUE);
gtk_widget_grab_default(button);
gtk_widget_show(button);
gtk_widget_show_all(sndstretch_about_dialog);
@@ -230,30 +209,34 @@ void sndstretch_about(void)
static void speed_change_cb(GtkAdjustment * adj, gpointer data)
{
- SS.speed = pow(2.0, GTK_ADJUSTMENT(adj)->value / (GTK_ADJUSTMENT(adj)->upper-10));
+ SS.speed = pow (2, gtk_adjustment_get_value (adj) /
+ (gtk_adjustment_get_upper (adj) - 10));
}
static void pitch_change_cb(GtkAdjustment * adj, gpointer data)
{
- SS.pitch = pow(2.0, GTK_ADJUSTMENT(adj)->value / (GTK_ADJUSTMENT(adj)->upper-10));
- gtk_adjustment_set_value(GTK_ADJUSTMENT(SS.scale_adj),
- (GTK_ADJUSTMENT(SS.scale_adj)->upper-10.0)*log(SS.pitch)/log(2.0));
+ SS.pitch = pow (2, gtk_adjustment_get_value (adj) /
+ (gtk_adjustment_get_upper (adj) - 10));
+ gtk_adjustment_set_value (SS.scale_adj, (gtk_adjustment_get_upper
+ (SS.scale_adj) - 10) * log (SS.pitch) / log (2));
}
static void scale_change_cb(GtkAdjustment * adj, gpointer data)
{
double speed_eff;
- SS.scale = pow(2.0, GTK_ADJUSTMENT(adj)->value / (GTK_ADJUSTMENT(adj)->upper-10));
+ SS.scale = pow (2, gtk_adjustment_get_value (adj) /
+ (gtk_adjustment_get_upper (adj) - 10));
speed_eff= SS.speed/SS.pitch;
SS.pitch = SS.scale;
SS.speed = speed_eff*SS.scale;
if (SS.speed>2.0) SS.speed=2.0;
if (SS.speed<0.5) SS.speed=0.5;
- gtk_adjustment_set_value(GTK_ADJUSTMENT(SS.speed_adj),
- (GTK_ADJUSTMENT(SS.speed_adj)->upper-10.0)*log(SS.speed)/log(2.0));
- gtk_adjustment_set_value(GTK_ADJUSTMENT(SS.pitch_adj),
- (GTK_ADJUSTMENT(SS.pitch_adj)->upper-10.0)*log(SS.pitch)/log(2.0));
+
+ gtk_adjustment_set_value (SS.speed_adj, (gtk_adjustment_get_upper
+ (SS.speed_adj) - 10) * log (SS.speed) / log (2));
+ gtk_adjustment_set_value (SS.pitch_adj, (gtk_adjustment_get_upper
+ (SS.pitch_adj) - 10) * log (SS.pitch) / log (2));
}
static void overlap_toggle_cb(GtkToggleButton *butt, gpointer user_data)
@@ -273,15 +256,10 @@ static void sndstretch_config_logobutton_cb(GtkButton * button, gpointer data)
static gint sndstretch_config_destroy_cb(GtkWidget * w, GdkEventAny * e, gpointer data)
{
- mcs_handle_t *db = aud_cfg_db_open();
-
- aud_cfg_db_set_double(db, "sndstretch", "pitch", SS.pitch);
- aud_cfg_db_set_double(db, "sndstretch", "speed", SS.speed);
-
- aud_cfg_db_set_bool(db, "sndstretch", "short_overlap", SS.short_overlap);
- aud_cfg_db_set_bool(db, "sndstretch", "volume_corr", SS.volume_corr);
-
- aud_cfg_db_close(db);
+ aud_set_double ("sndstretch", "pitch", SS.pitch);
+ aud_set_double ("sndstretch", "speed", SS.speed);
+ aud_set_bool ("sndstretch", "short_overlap", SS.short_overlap);
+ aud_set_bool ("sndstretch", "volume_corr", SS.volume_corr);
gtk_widget_destroy(sndstretch_config_dialog);
sndstretch_config_dialog = NULL;
@@ -295,9 +273,6 @@ void sndstretch_config(void)
GtkWidget * speed_spin, * pitch_spin, * scale_spin;
GtkWidget * speed_hbox, * pitch_hbox, * scale_hbox, * opt_hbox;
GtkWidget * speed_frame, * pitch_frame, * scale_frame, * opt_frame;
- GdkPixmap * logopix;
- GdkBitmap * logomask;
- GtkWidget * logo;
GtkWidget * logohbox;
GtkWidget * logobutton;
GtkWidget * volume_toggle;
@@ -310,49 +285,41 @@ void sndstretch_config(void)
gtk_window_set_type_hint(GTK_WINDOW(sndstretch_config_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_widget_show(sndstretch_config_dialog);
- logopix = gdk_pixmap_create_from_xpm_d(sndstretch_config_dialog->window, &logomask,
- NULL, (gchar **)sndstretch_xmms_logo_xpm);
-
- logo = gtk_pixmap_new(logopix,logomask);
+ GtkWidget * logo = gtk_image_new_from_pixbuf (gdk_pixbuf_new_from_xpm_data
+ ((const gchar * *) sndstretch_xmms_logo_xpm));
logobutton = gtk_button_new();
gtk_button_set_relief(GTK_BUTTON(logobutton), GTK_RELIEF_NONE);
gtk_container_add(GTK_CONTAINER(logobutton), logo);
- gtk_signal_connect(GTK_OBJECT(logobutton), "clicked",
- GTK_SIGNAL_FUNC(sndstretch_config_logobutton_cb), NULL);
- GTK_WIDGET_SET_FLAGS(logobutton, GTK_CAN_DEFAULT);
- gtk_widget_grab_default(logobutton);
+ g_signal_connect (logobutton, "clicked", (GCallback)
+ sndstretch_config_logobutton_cb, NULL);
+ gtk_widget_set_can_default (logobutton, TRUE);
logohbox = gtk_hbox_new(FALSE,0); // to make it rightbound
gtk_box_pack_end(GTK_BOX(logohbox), logobutton, FALSE, TRUE, 4);
- SS.speed_adj = gtk_adjustment_new( 100.0*log(SS.speed)/log(2.0),
- -100, 100+10, 2, 10, 10);
- SS.pitch_adj = gtk_adjustment_new( 120.0*log(SS.pitch)/log(2.0),
- -120, 120+10, 2, 10, 10);
- SS.scale_adj = gtk_adjustment_new( 100.0*log(SS.scale)/log(2.0),
- -100, 100+10, 2, 10, 10);
+ SS.speed_adj = (GtkAdjustment *) gtk_adjustment_new (100 * log (SS.speed) /
+ log (2), -100, 100 + 10, 2, 10, 0);
+ SS.pitch_adj = (GtkAdjustment *) gtk_adjustment_new (120 * log (SS.pitch) /
+ log (2), -120, 120 + 10, 2, 10, 0);
+ SS.scale_adj = (GtkAdjustment *) gtk_adjustment_new (100 * log (SS.scale) /
+ log (2), -100, 100 + 10, 2, 10, 0);
volume_toggle = gtk_check_button_new_with_label(_("Volume corr."));
overlap_toggle = gtk_check_button_new_with_label(_("Short Overlap"));
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(volume_toggle), SS.volume_corr );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(overlap_toggle), SS.short_overlap );
-
- gtk_signal_connect(GTK_OBJECT(SS.speed_adj), "value-changed",
- GTK_SIGNAL_FUNC(speed_change_cb), NULL);
-
- gtk_signal_connect(GTK_OBJECT(SS.pitch_adj), "value-changed",
- GTK_SIGNAL_FUNC(pitch_change_cb), NULL);
-
- gtk_signal_connect(GTK_OBJECT(SS.scale_adj), "value-changed",
- GTK_SIGNAL_FUNC(scale_change_cb), NULL);
-
- gtk_signal_connect(GTK_OBJECT(volume_toggle), "toggled",
- GTK_SIGNAL_FUNC(volume_toggle_cb), NULL);
-
- gtk_signal_connect(GTK_OBJECT(overlap_toggle), "toggled",
- GTK_SIGNAL_FUNC(overlap_toggle_cb), NULL);
+ g_signal_connect (SS.speed_adj, "value-changed", (GCallback)
+ speed_change_cb, NULL);
+ g_signal_connect (SS.pitch_adj, "value-changed", (GCallback)
+ pitch_change_cb, NULL);
+ g_signal_connect (SS.scale_adj, "value-changed", (GCallback)
+ scale_change_cb, NULL);
+ g_signal_connect (volume_toggle, "toggled", (GCallback) volume_toggle_cb,
+ NULL);
+ g_signal_connect (overlap_toggle, "toggled", (GCallback) overlap_toggle_cb,
+ NULL);
speed_scale = gtk_hscale_new(GTK_ADJUSTMENT(SS.speed_adj));
pitch_scale = gtk_hscale_new(GTK_ADJUSTMENT(SS.pitch_adj));
@@ -364,9 +331,6 @@ void sndstretch_config(void)
speed_spin = gtk_spin_button_new(GTK_ADJUSTMENT(SS.speed_adj),1.0,2);
pitch_spin = gtk_spin_button_new(GTK_ADJUSTMENT(SS.pitch_adj),1.0,2);
scale_spin = gtk_spin_button_new(GTK_ADJUSTMENT(SS.scale_adj),1.0,2);
- gtk_widget_set_usize (speed_spin,70,20);
- gtk_widget_set_usize (pitch_spin,70,20);
- gtk_widget_set_usize (scale_spin,70,20);
gtk_entry_set_max_length (GTK_ENTRY(pitch_spin),7);
gtk_entry_set_max_length (GTK_ENTRY(speed_spin),7);
gtk_entry_set_max_length (GTK_ENTRY(scale_spin),7);
@@ -408,22 +372,24 @@ void sndstretch_config(void)
gtk_box_pack_start(GTK_BOX(vbox), opt_frame, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), logohbox, FALSE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(sndstretch_config_dialog), "destroy",
- GTK_SIGNAL_FUNC(sndstretch_config_destroy_cb), NULL);
+ g_signal_connect (sndstretch_config_dialog, "destroy", (GCallback)
+ sndstretch_config_destroy_cb, NULL);
gtk_window_set_title(GTK_WINDOW(sndstretch_config_dialog), _("SndStretch - Configuration"));
gtk_container_add(GTK_CONTAINER(sndstretch_config_dialog), vbox);
- gtk_widget_set_usize(sndstretch_config_dialog, -1, -1);
+ gtk_widget_grab_default(logobutton);
gtk_widget_show_all(sndstretch_config_dialog);
}
+static const gchar * const sndstretch_defaults[] = {
+ "pitch", "1",
+ "speed", "1",
+ "short_overlap", "FALSE",
+ "volume_corr", "FALSE",
+ NULL};
-void sndstretch_init(void)
+gboolean sndstretch_init (void)
{
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
-
SS.fragsize=0;
SS.chnr=2;
SS.paused=0;
@@ -435,18 +401,16 @@ void sndstretch_init(void)
SS.bpsec=176400;
SS.vol_r=50;
SS.vol_l=50;
- SS.pitch=1.0;
- SS.speed=1.0;
SS.scale=1.0;
- gboolean b;
- aud_cfg_db_get_double(db, "sndstretch", "pitch", &SS.pitch);
- aud_cfg_db_get_double(db, "sndstretch", "speed", &SS.speed);
- if (aud_cfg_db_get_bool(db, "sndstretch", "short_overlap", &b))
- SS.short_overlap = b;
- if (aud_cfg_db_get_bool(db, "sndstretch", "volume_corr", &b))
- SS.volume_corr = b;
- aud_cfg_db_close(db);
+ aud_config_set_defaults ("sndstretch", sndstretch_defaults);
+
+ SS.pitch = aud_get_double ("sndstretch", "pitch");
+ SS.speed = aud_get_double ("sndstretch", "speed");
+ SS.short_overlap = aud_get_bool ("sndstretch", "short_overlap");
+ SS.volume_corr = aud_get_bool ("sndstretch", "volume_corr");
+
+ return TRUE;
}
static gboolean initted = FALSE;
diff --git a/src/song_change/Makefile b/src/song_change/Makefile
index 039a629..b151bdf 100644
--- a/src/song_change/Makefile
+++ b/src/song_change/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/song_change/formatter.c b/src/song_change/formatter.c
index 001757d..c55d159 100644
--- a/src/song_change/formatter.c
+++ b/src/song_change/formatter.c
@@ -22,8 +22,6 @@
* Audacious or using our public API to be a derived work.
*/
-#include "config.h"
-
#include <glib.h>
#include <string.h>
#include "formatter.h"
diff --git a/src/song_change/song_change.c b/src/song_change/song_change.c
index a568cf4..d60efc7 100644
--- a/src/song_change/song_change.c
+++ b/src/song_change/song_change.c
@@ -15,19 +15,21 @@
#include <string.h>
-#include <audacious/configdb.h>
+#include <audacious/misc.h>
#include <audacious/drct.h>
#include <audacious/i18n.h>
#include <audacious/plugin.h>
#include <audacious/preferences.h>
+#include <audacious/playlist.h>
#include <libaudcore/hook.h>
#include <libaudcore/audstrings.h>
+#include <libaudcore/tuple.h>
#include "formatter.h"
static PluginPreferences preferences;
-static void init(void);
+static gboolean init (void);
static void cleanup(void);
static void songchange_playback_begin(gpointer unused, gpointer unused2);
static void songchange_playback_end(gpointer unused, gpointer unused2);
@@ -36,8 +38,8 @@ static void songchange_playlist_eof(gpointer unused, gpointer unused2);
typedef struct
{
- gchar *title;
- gchar *filename;
+ gchar *title;
+ gchar *filename;
}
songchange_playback_ttc_prevs_t;
static songchange_playback_ttc_prevs_t *ttc_prevs = NULL;
@@ -49,35 +51,64 @@ static char *cmd_line_ttc = NULL;
static GtkWidget *cmd_warn_label, *cmd_warn_img;
-GeneralPlugin sc_gp =
+AUD_GENERAL_PLUGIN
+(
+ .name = "Song Change",
+ .init = init,
+ .cleanup = cleanup,
+ .settings = &preferences,
+)
+
+/**
+ * Escapes characters that are special to the shell inside double quotes.
+ *
+ * @param string String to be escaped.
+ * @return Given string with special characters escaped. Must be freed with g_free().
+ */
+static gchar *escape_shell_chars(const gchar * string)
{
- .description = "Song Change " PACKAGE_VERSION,
- .init = init,
- .cleanup = cleanup,
- .settings = &preferences,
-};
+ const gchar *special = "$`\"\\"; /* Characters to escape */
+ const gchar *in = string;
+ gchar *out, *escaped;
+ gint num = 0;
+
+ while (*in != '\0')
+ if (strchr(special, *in++))
+ num++;
+
+ escaped = g_malloc(strlen(string) + num + 1);
-GeneralPlugin *songchange_gplist[] = { &sc_gp, NULL };
-SIMPLE_GENERAL_PLUGIN(songchange, songchange_gplist);
+ in = string;
+ out = escaped;
+
+ while (*in != '\0') {
+ if (strchr(special, *in))
+ *out++ = '\\';
+ *out++ = *in++;
+ }
+ *out = '\0';
+
+ return escaped;
+}
static void bury_child(int signal)
{
- waitpid(-1, NULL, WNOHANG);
+ waitpid(-1, NULL, WNOHANG);
}
static void execute_command(char *cmd)
{
- char *argv[4] = {"/bin/sh", "-c", NULL, NULL};
- int i;
- argv[2] = cmd;
- signal(SIGCHLD, bury_child);
- if (fork() == 0)
- {
- /* We don't want this process to hog the audio device etc */
- for (i = 3; i < 255; i++)
- close(i);
- execv("/bin/sh", argv);
- }
+ char *argv[4] = {"/bin/sh", "-c", NULL, NULL};
+ int i;
+ argv[2] = cmd;
+ signal(SIGCHLD, bury_child);
+ if (fork() == 0)
+ {
+ /* We don't want this process to hog the audio device etc */
+ for (i = 3; i < 255; i++)
+ close(i);
+ execv("/bin/sh", argv);
+ }
}
/* Format codes:
@@ -91,276 +122,279 @@ static void execute_command(char *cmd)
* s - name (since everyone's used to it)
* t - playlist position (%02d)
* p - currently playing (1 or 0)
+ * a - artist
+ * b - album
+ * r - track title
*/
/* do_command(): do @cmd after replacing the format codes
- @cmd: command to run
- @current_file: file name of current song
- @pos: playlist_pos */
-static void
-do_command(char *cmd, const char *current_file, int pos)
+ @cmd: command to run */
+static void do_command (char * cmd)
{
- int length;
- char *str, *shstring = NULL, *temp, numbuf[32];
- gboolean playing;
- Formatter *formatter;
-
- if (cmd && strlen(cmd) > 0)
- {
- formatter = formatter_new();
- str = aud_drct_pl_get_title(pos);
- if (str)
- {
- temp = escape_shell_chars(str);
- formatter_associate(formatter, 's', temp);
- formatter_associate(formatter, 'n', temp);
- g_free(str);
- g_free(temp);
- }
- else
- {
- formatter_associate(formatter, 's', "");
- formatter_associate(formatter, 'n', "");
- }
-
- if (current_file)
- {
- temp = escape_shell_chars(current_file);
- formatter_associate(formatter, 'f', temp);
- g_free(temp);
- }
- else
- formatter_associate(formatter, 'f', "");
- g_snprintf(numbuf, sizeof(numbuf), "%02d", pos + 1);
- formatter_associate(formatter, 't', numbuf);
- length = aud_drct_pl_get_time(pos);
- if (length != -1)
- {
- g_snprintf(numbuf, sizeof(numbuf), "%d", length);
- formatter_associate(formatter, 'l', numbuf);
- }
- else
- formatter_associate(formatter, 'l', "0");
-
- playing = aud_drct_get_playing();
- g_snprintf(numbuf, sizeof(numbuf), "%d", playing);
- formatter_associate(formatter, 'p', numbuf);
-
- if (playing)
- {
- int brate, srate, chans;
- aud_drct_get_info (& brate, & srate, & chans);
- snprintf (numbuf, sizeof numbuf, "%d", brate);
- formatter_associate (formatter, 'r', numbuf);
- snprintf (numbuf, sizeof numbuf, "%d", srate);
- formatter_associate (formatter, 'F', numbuf);
- snprintf (numbuf, sizeof numbuf, "%d", chans);
- formatter_associate (formatter, 'c', numbuf);
- }
-
- shstring = formatter_format(formatter, cmd);
- formatter_destroy(formatter);
-
- if (shstring)
- {
- execute_command(shstring);
- /* FIXME: This can possibly be freed too early */
- g_free(shstring);
- }
- }
+ int playlist = aud_playlist_get_playing ();
+ int pos = aud_playlist_get_position (playlist);
+
+ char *shstring = NULL, *temp, numbuf[32];
+ gboolean playing;
+ Formatter *formatter;
+
+ if (cmd && strlen(cmd) > 0)
+ {
+ formatter = formatter_new();
+
+ char * ctitle = aud_playlist_entry_get_title (playlist, pos, FALSE);
+ if (ctitle)
+ {
+ temp = escape_shell_chars (ctitle);
+ formatter_associate(formatter, 's', temp);
+ formatter_associate(formatter, 'n', temp);
+ g_free(temp);
+ str_unref (ctitle);
+ }
+ else
+ {
+ formatter_associate(formatter, 's', "");
+ formatter_associate(formatter, 'n', "");
+ }
+
+ char * filename = aud_playlist_entry_get_filename (playlist, pos);
+ if (filename)
+ {
+ temp = escape_shell_chars (filename);
+ formatter_associate(formatter, 'f', temp);
+ g_free(temp);
+ str_unref (filename);
+ }
+ else
+ formatter_associate(formatter, 'f', "");
+
+ g_snprintf(numbuf, sizeof(numbuf), "%02d", pos + 1);
+ formatter_associate(formatter, 't', numbuf);
+
+ int length = aud_playlist_entry_get_length (playlist, pos, FALSE);
+ if (length > 0)
+ {
+ g_snprintf(numbuf, sizeof(numbuf), "%d", length);
+ formatter_associate(formatter, 'l', numbuf);
+ }
+ else
+ formatter_associate(formatter, 'l', "0");
+
+ playing = aud_drct_get_playing();
+ g_snprintf(numbuf, sizeof(numbuf), "%d", playing);
+ formatter_associate(formatter, 'p', numbuf);
+
+ if (playing)
+ {
+ int brate, srate, chans;
+ aud_drct_get_info (& brate, & srate, & chans);
+ snprintf (numbuf, sizeof numbuf, "%d", brate);
+ formatter_associate (formatter, 'r', numbuf);
+ snprintf (numbuf, sizeof numbuf, "%d", srate);
+ formatter_associate (formatter, 'F', numbuf);
+ snprintf (numbuf, sizeof numbuf, "%d", chans);
+ formatter_associate (formatter, 'c', numbuf);
+ }
+
+ Tuple * tuple = aud_playlist_entry_get_tuple
+ (aud_playlist_get_active (), pos, 0);
+
+ char * artist = tuple ? tuple_get_str (tuple, FIELD_ARTIST, NULL) : NULL;
+ if (artist)
+ {
+ formatter_associate(formatter, 'a', artist);
+ str_unref(artist);
+ }
+ else
+ formatter_associate(formatter, 'a', "");
+
+ char * album = tuple ? tuple_get_str (tuple, FIELD_ALBUM, NULL) : NULL;
+ if (album)
+ {
+ formatter_associate(formatter, 'b', album);
+ str_unref(album);
+ }
+ else
+ formatter_associate(formatter, 'b', "");
+
+ char * title = tuple ? tuple_get_str (tuple, FIELD_TITLE, NULL) : NULL;
+ if (title)
+ {
+ formatter_associate(formatter, 'T', title);
+ str_unref(title);
+ }
+ else
+ formatter_associate(formatter, 'T', "");
+
+ if (tuple)
+ tuple_unref (tuple);
+
+ shstring = formatter_format(formatter, cmd);
+ formatter_destroy(formatter);
+
+ if (shstring)
+ {
+ execute_command(shstring);
+ /* FIXME: This can possibly be freed too early */
+ g_free(shstring);
+ }
+ }
}
static void read_config(void)
{
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
- if ( !aud_cfg_db_get_string(db, "song_change", "cmd_line", &cmd_line) )
- cmd_line = g_strdup("");
- if ( !aud_cfg_db_get_string(db, "song_change", "cmd_line_after", &cmd_line_after) )
- cmd_line_after = g_strdup("");
- if ( !aud_cfg_db_get_string(db, "song_change", "cmd_line_end", &cmd_line_end) )
- cmd_line_end = g_strdup("");
- if ( !aud_cfg_db_get_string(db, "song_change", "cmd_line_ttc", &cmd_line_ttc) )
- cmd_line_ttc = g_strdup("");
- aud_cfg_db_close(db);
+ cmd_line = aud_get_string("song_change", "cmd_line");
+ cmd_line_after = aud_get_string("song_change", "cmd_line_after");
+ cmd_line_end = aud_get_string("song_change", "cmd_line_end");
+ cmd_line_ttc = aud_get_string("song_change", "cmd_line_ttc");
}
static void cleanup(void)
{
- hook_dissociate("playback begin", songchange_playback_begin);
- hook_dissociate("playback end", songchange_playback_end);
- hook_dissociate("playlist end reached", songchange_playlist_eof);
-// hook_dissociate( "playlist set info" , songchange_playback_ttc);
-
- if ( ttc_prevs != NULL )
- {
- if ( ttc_prevs->title != NULL ) g_free( ttc_prevs->title );
- if ( ttc_prevs->filename != NULL ) g_free( ttc_prevs->filename );
- g_free( ttc_prevs );
- ttc_prevs = NULL;
- }
-
- g_free(cmd_line);
- g_free(cmd_line_after);
- g_free(cmd_line_end);
- g_free(cmd_line_ttc);
- cmd_line = NULL;
- cmd_line_after = NULL;
- cmd_line_end = NULL;
- cmd_line_ttc = NULL;
- signal(SIGCHLD, SIG_DFL);
+ hook_dissociate("playback begin", songchange_playback_begin);
+ hook_dissociate("playback end", songchange_playback_end);
+ hook_dissociate("playlist end reached", songchange_playlist_eof);
+ // hook_dissociate( "playlist set info" , songchange_playback_ttc);
+
+ if ( ttc_prevs != NULL )
+ {
+ if ( ttc_prevs->title != NULL ) g_free( ttc_prevs->title );
+ if ( ttc_prevs->filename != NULL ) g_free( ttc_prevs->filename );
+ g_free( ttc_prevs );
+ ttc_prevs = NULL;
+ }
+
+ g_free(cmd_line);
+ g_free(cmd_line_after);
+ g_free(cmd_line_end);
+ g_free(cmd_line_ttc);
+ cmd_line = NULL;
+ cmd_line_after = NULL;
+ cmd_line_end = NULL;
+ cmd_line_ttc = NULL;
+ signal(SIGCHLD, SIG_DFL);
}
static void save_and_close(gchar * cmd, gchar * cmd_after, gchar * cmd_end, gchar * cmd_ttc)
{
- mcs_handle_t *db;
+ aud_set_string("song_change", "cmd_line", cmd);
+ aud_set_string("song_change", "cmd_line_after", cmd_after);
+ aud_set_string("song_change", "cmd_line_end", cmd_end);
+ aud_set_string("song_change", "cmd_line_ttc", cmd_ttc);
- db = aud_cfg_db_open();
- aud_cfg_db_set_string(db, "song_change", "cmd_line", cmd);
- aud_cfg_db_set_string(db, "song_change", "cmd_line_after", cmd_after);
- aud_cfg_db_set_string(db, "song_change", "cmd_line_end", cmd_end);
- aud_cfg_db_set_string(db, "song_change", "cmd_line_ttc", cmd_ttc);
- aud_cfg_db_close(db);
+ if (cmd_line != NULL)
+ g_free(cmd_line);
- if (cmd_line != NULL)
- g_free(cmd_line);
+ cmd_line = g_strdup(cmd);
- cmd_line = g_strdup(cmd);
+ if (cmd_line_after != NULL)
+ g_free(cmd_line_after);
- if (cmd_line_after != NULL)
- g_free(cmd_line_after);
+ cmd_line_after = g_strdup(cmd_after);
- cmd_line_after = g_strdup(cmd_after);
+ if (cmd_line_end != NULL)
+ g_free(cmd_line_end);
- if (cmd_line_end != NULL)
- g_free(cmd_line_end);
+ cmd_line_end = g_strdup(cmd_end);
- cmd_line_end = g_strdup(cmd_end);
+ if (cmd_line_ttc != NULL)
+ g_free(cmd_line_ttc);
- if (cmd_line_ttc != NULL)
- g_free(cmd_line_ttc);
-
- cmd_line_ttc = g_strdup(cmd_ttc);
+ cmd_line_ttc = g_strdup(cmd_ttc);
}
static int check_command(char *command)
{
- const char *dangerous = "fns";
- char *c;
- int qu = 0;
-
- for (c = command; *c != '\0'; c++)
- {
- if (*c == '"' && (c == command || *(c - 1) != '\\'))
- qu = !qu;
- else if (*c == '%' && !qu && strchr(dangerous, *(c + 1)))
- return -1;
- }
- return 0;
-}
+ const char *dangerous = "fns";
+ char *c;
+ int qu = 0;
-static void init(void)
-{
- read_config();
-
- hook_associate("playback begin", songchange_playback_begin, NULL);
- hook_associate("playback end", songchange_playback_end, NULL);
- hook_associate("playlist end reached", songchange_playlist_eof, NULL);
-
- ttc_prevs = g_malloc0(sizeof(songchange_playback_ttc_prevs_t));
- ttc_prevs->title = NULL;
- ttc_prevs->filename = NULL;
-// hook_associate( "playlist set info" , songchange_playback_ttc , ttc_prevs );
+ for (c = command; *c != '\0'; c++)
+ {
+ if (*c == '"' && (c == command || *(c - 1) != '\\'))
+ qu = !qu;
+ else if (*c == '%' && !qu && strchr(dangerous, *(c + 1)))
+ return -1;
+ }
+ return 0;
}
-static void
-songchange_playback_begin(gpointer unused, gpointer unused2)
+static gboolean init (void)
{
- int pos;
- char *current_file;
+ read_config();
- pos = aud_drct_pl_get_pos();
- current_file = aud_drct_pl_get_file(pos);
+ hook_associate("playback begin", songchange_playback_begin, NULL);
+ hook_associate("playback end", songchange_playback_end, NULL);
+ hook_associate("playlist end reached", songchange_playlist_eof, NULL);
- do_command(cmd_line, current_file, pos);
+ ttc_prevs = g_malloc0(sizeof(songchange_playback_ttc_prevs_t));
+ ttc_prevs->title = NULL;
+ ttc_prevs->filename = NULL;
+ // hook_associate( "playlist set info" , songchange_playback_ttc , ttc_prevs );
- g_free(current_file);
+ return TRUE;
}
-static void
-songchange_playback_end(gpointer unused, gpointer unused2)
+static void songchange_playback_begin(gpointer unused, gpointer unused2)
{
- int pos;
- char *current_file;
-
- pos = aud_drct_pl_get_pos();
- current_file = aud_drct_pl_get_file(pos);
-
- do_command(cmd_line_after, current_file, pos);
+ do_command (cmd_line);
+}
- g_free(current_file);
+static void songchange_playback_end(gpointer unused, gpointer unused2)
+{
+ do_command (cmd_line_after);
}
#if 0
-static void
+ static void
songchange_playback_ttc(gpointer plentry_gp, gpointer prevs_gp)
{
- if ( ( aud_ip_state->playing ) && ( strcmp(cmd_line_ttc,"") ) )
- {
- songchange_playback_ttc_prevs_t *prevs = prevs_gp;
- PlaylistEntry *pl_entry = plentry_gp;
+ if ( ( aud_ip_state->playing ) && ( strcmp(cmd_line_ttc,"") ) )
+ {
+ songchange_playback_ttc_prevs_t *prevs = prevs_gp;
+ PlaylistEntry *pl_entry = plentry_gp;
- /* same filename but title changed, useful to detect http stream song changes */
+ /* same filename but title changed, useful to detect http stream song changes */
- if ( ( prevs->title != NULL ) && ( prevs->filename != NULL ) )
- {
- if ( ( pl_entry->filename != NULL ) && ( !strcmp(pl_entry->filename,prevs->filename) ) )
- {
- if ( ( pl_entry->title != NULL ) && ( strcmp(pl_entry->title,prevs->title) ) )
+ if ( ( prevs->title != NULL ) && ( prevs->filename != NULL ) )
{
- int pos = aud_drct_pl_get_pos();
- char *current_file = aud_drct_pl_get_file(pos);
- do_command(cmd_line_ttc, current_file, pos);
- g_free(current_file);
- g_free(prevs->title);
- prevs->title = g_strdup(pl_entry->title);
+ if ( ( pl_entry->filename != NULL ) && ( !strcmp(pl_entry->filename,prevs->filename) ) )
+ {
+ if ( ( pl_entry->title != NULL ) && ( strcmp(pl_entry->title,prevs->title) ) )
+ {
+ int pos = aud_drct_pl_get_pos();
+ char *current_file = aud_drct_pl_get_file(pos);
+ do_command(cmd_line_ttc, current_file, pos);
+ g_free(current_file);
+ g_free(prevs->title);
+ prevs->title = g_strdup(pl_entry->title);
+ }
+ }
+ else
+ {
+ g_free(prevs->filename);
+ prevs->filename = g_strdup(pl_entry->filename);
+ /* if filename changes, reset title as well */
+ if ( prevs->title != NULL )
+ g_free(prevs->title);
+ prevs->title = g_strdup(pl_entry->title);
+ }
+ }
+ else
+ {
+ if ( prevs->title != NULL )
+ g_free(prevs->title);
+ prevs->title = g_strdup(pl_entry->title);
+ if ( prevs->filename != NULL )
+ g_free(prevs->filename);
+ prevs->filename = g_strdup(pl_entry->filename);
}
- }
- else
- {
- g_free(prevs->filename);
- prevs->filename = g_strdup(pl_entry->filename);
- /* if filename changes, reset title as well */
- if ( prevs->title != NULL )
- g_free(prevs->title);
- prevs->title = g_strdup(pl_entry->title);
- }
- }
- else
- {
- if ( prevs->title != NULL )
- g_free(prevs->title);
- prevs->title = g_strdup(pl_entry->title);
- if ( prevs->filename != NULL )
- g_free(prevs->filename);
- prevs->filename = g_strdup(pl_entry->filename);
}
- }
}
#endif
-static void
-songchange_playlist_eof(gpointer unused, gpointer unused2)
+static void songchange_playlist_eof(gpointer unused, gpointer unused2)
{
- gint pos;
- gchar *current_file;
-
- pos = aud_drct_pl_get_pos();
- current_file = aud_drct_pl_get_file(pos);
-
- do_command(cmd_line_end, current_file, pos);
-
- g_free(current_file);
+ do_command (cmd_line_end);
}
typedef struct {
@@ -374,59 +408,70 @@ static SongChangeConfig config = {NULL};
static void configure_ok_cb()
{
- char *cmd, *cmd_after, *cmd_end, *cmd_ttc;
- cmd = g_strdup(config.cmd);
- cmd_after = g_strdup(config.cmd_after);
- cmd_end = g_strdup(config.cmd_end);
- cmd_ttc = g_strdup(config.cmd_ttc);
-
- if (check_command(cmd) < 0 || check_command(cmd_after) < 0 ||
- check_command(cmd_end) < 0 || check_command(cmd_ttc) < 0)
- {
- gtk_widget_show(cmd_warn_img);
- gtk_widget_show(cmd_warn_label);
- }
- else
- {
- gtk_widget_hide(cmd_warn_img);
- gtk_widget_hide(cmd_warn_label);
- save_and_close(cmd, cmd_after, cmd_end, cmd_ttc);
- }
-
- g_free(cmd);
- g_free(cmd_after);
- g_free(cmd_end);
- g_free(cmd_ttc);
+ char *cmd, *cmd_after, *cmd_end, *cmd_ttc;
+ cmd = g_strdup(config.cmd);
+ cmd_after = g_strdup(config.cmd_after);
+ cmd_end = g_strdup(config.cmd_end);
+ cmd_ttc = g_strdup(config.cmd_ttc);
+
+ if (check_command(cmd) < 0 || check_command(cmd_after) < 0 ||
+ check_command(cmd_end) < 0 || check_command(cmd_ttc) < 0)
+ {
+ gtk_widget_show(cmd_warn_img);
+ gtk_widget_show(cmd_warn_label);
+ }
+ else
+ {
+ gtk_widget_hide(cmd_warn_img);
+ gtk_widget_hide(cmd_warn_label);
+ save_and_close(cmd, cmd_after, cmd_end, cmd_ttc);
+ }
+
+ g_free(cmd);
+ g_free(cmd_after);
+ g_free(cmd_end);
+ g_free(cmd_ttc);
}
static PreferencesWidget elements[] = {
- {WIDGET_LABEL, N_("Command to run when Audacious starts a new song."), NULL, NULL, NULL, FALSE, {.label = {.single_line = TRUE}}},
- {WIDGET_ENTRY, N_("Command:"), &config.cmd, configure_ok_cb, NULL, FALSE, {.entry = {FALSE}}, VALUE_STRING},
- {WIDGET_SEPARATOR, NULL, NULL, NULL, NULL, FALSE, {.separator = {TRUE}}},
-
- {WIDGET_LABEL, N_("Command to run toward the end of a song."), NULL, NULL, NULL, FALSE, {.label = {.single_line = TRUE}}},
- {WIDGET_ENTRY, N_("Command:"), &config.cmd_after, configure_ok_cb, NULL, FALSE, {.entry = {FALSE}}, VALUE_STRING},
- {WIDGET_SEPARATOR, NULL, NULL, NULL, NULL, FALSE, {.separator = {TRUE}}},
-
- {WIDGET_LABEL, N_("Command to run when Audacious reaches the end of the playlist."), NULL, NULL, NULL, FALSE, {.label = {.single_line = TRUE}}},
- {WIDGET_ENTRY, N_("Command:"), &config.cmd_end, configure_ok_cb, NULL, FALSE, {.entry = {FALSE}}, VALUE_STRING},
- {WIDGET_SEPARATOR, NULL, NULL, NULL, NULL, FALSE, {.separator = {TRUE}}},
-
- {WIDGET_LABEL, N_("Command to run when title changes for a song (i.e. network streams titles)."), NULL, NULL, NULL, FALSE, {.label = {.single_line = TRUE}}},
- {WIDGET_ENTRY, N_("Command:"), &config.cmd_ttc, configure_ok_cb, NULL, FALSE, {.entry = {FALSE}}, VALUE_STRING},
- {WIDGET_SEPARATOR, NULL, NULL, NULL, NULL, FALSE, {.separator = {TRUE}}},
+ {WIDGET_LABEL, N_("Command to run when Audacious starts a new song."),
+ .data = {.label = {.single_line = TRUE}}},
+ {WIDGET_ENTRY, N_("Command:"), .cfg_type = VALUE_STRING,
+ .cfg = & config.cmd, .callback = configure_ok_cb},
+ {WIDGET_SEPARATOR, .data = {.separator = {TRUE}}},
+
+ {WIDGET_LABEL, N_("Command to run toward the end of a song."),
+ .data = {.label = {.single_line = TRUE}}},
+ {WIDGET_ENTRY, N_("Command:"), .cfg_type = VALUE_STRING,
+ .cfg = & config.cmd_after, .callback = configure_ok_cb},
+ {WIDGET_SEPARATOR, .data = {.separator = {TRUE}}},
+
+ {WIDGET_LABEL, N_("Command to run when Audacious reaches the end of the "
+ "playlist."), .data = {.label = {.single_line = TRUE}}},
+ {WIDGET_ENTRY, N_("Command:"), .cfg_type = VALUE_STRING,
+ .cfg = & config.cmd_end, .callback = configure_ok_cb},
+ {WIDGET_SEPARATOR, .data = {.separator = {TRUE}}},
+
+ {WIDGET_LABEL, N_("Command to run when title changes for a song (i.e. "
+ "network streams titles)."), .data = {.label = {.single_line = TRUE}}},
+ {WIDGET_ENTRY, N_("Command:"), .cfg_type = VALUE_STRING,
+ .cfg = & config.cmd_ttc, .callback = configure_ok_cb},
+ {WIDGET_SEPARATOR, .data = {.separator = {TRUE}}},
{WIDGET_LABEL, N_("You can use the following format strings which\n"
- "will be substituted before calling the command\n"
- "(not all are useful for the end-of-playlist command).\n\n"
- "%F: Frequency (in hertz)\n"
- "%c: Number of channels\n"
- "%f: filename (full path)\n"
- "%l: length (in milliseconds)\n"
- "%n or %s: Song name\n"
- "%r: Rate (in bits per second)\n"
- "%t: Playlist position (%02d)\n"
- "%p: Currently playing (1 or 0)"), NULL, NULL, NULL, FALSE},
+ "will be substituted before calling the command\n"
+ "(not all are useful for the end-of-playlist command).\n\n"
+ "%F: Frequency (in hertz)\n"
+ "%c: Number of channels\n"
+ "%f: filename (full path)\n"
+ "%l: length (in milliseconds)\n"
+ "%n or %s: Song name\n"
+ "%r: Rate (in bits per second)\n"
+ "%t: Playlist position (%02d)\n"
+ "%p: Currently playing (1 or 0)\n"
+ "%a: Artist\n"
+ "%b: Album\n"
+ "%T: Track title")},
};
/* static GtkWidget * custom_warning (void) */
@@ -451,16 +496,10 @@ static void * custom_warning (void)
}
static PreferencesWidget settings[] = {
- {WIDGET_BOX, N_("Commands"), NULL, NULL, NULL, FALSE,
- {.box = {elements, G_N_ELEMENTS(elements),
- FALSE, TRUE}}},
- {WIDGET_CUSTOM, NULL, NULL, NULL, NULL, FALSE, {.populate = custom_warning}},
-/* {WIDGET_LABEL, N_("<span size='small'>Parameters passed to the shell should be encapsulated in quotes. Doing otherwise is a security risk.</span>"),
- NULL, NULL, NULL, FALSE, {.label = {"gtk-dialog-warning"}}},*/
-};
+ {WIDGET_BOX, N_("Commands"), .data = {.box = {elements, G_N_ELEMENTS (elements), .frame = TRUE}}},
+ {WIDGET_CUSTOM, .data = {.populate = custom_warning}}};
-static void
-configure_init(void)
+static void configure_init(void)
{
read_config();
@@ -470,8 +509,7 @@ configure_init(void)
config.cmd_ttc = g_strdup(cmd_line_ttc);
}
-static void
-configure_cleanup(void)
+static void configure_cleanup(void)
{
g_free(config.cmd);
config.cmd = NULL;
@@ -487,8 +525,9 @@ configure_cleanup(void)
}
static PluginPreferences preferences = {
+ .domain = PACKAGE,
.title = N_("Song Change"),
- .imgurl = DATA_DIR "/images/plugins.png",
+ /* .imgurl = DATA_DIR "/images/plugins.png", */
.prefs = settings,
.n_prefs = G_N_ELEMENTS(settings),
.init = configure_init,
diff --git a/src/spectrum/Makefile b/src/spectrum/Makefile
deleted file mode 100644
index c647015..0000000
--- a/src/spectrum/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-PLUGIN = spectrum${PLUGIN_SUFFIX}
-
-SRCS = spectrum.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${VISUALIZATION_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lm
diff --git a/src/spectrum/logo.xpm b/src/spectrum/logo.xpm
deleted file mode 100644
index 220dabe..0000000
--- a/src/spectrum/logo.xpm
+++ /dev/null
@@ -1,123 +0,0 @@
-/* XPM */
-static char * logo_xpm[] = {
-"275 116 4 1",
-" c #F9E0D7",
-". c #F0B19B",
-"+ c #EA9172",
-"@ c #E16236",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
-" ........................++++++++++++++++++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"};
diff --git a/src/spectrum/spectrum.c b/src/spectrum/spectrum.c
deleted file mode 100644
index c7d5ffe..0000000
--- a/src/spectrum/spectrum.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Spectrum Analyzer Visualization Plugin for Audacious
- *
- * Copyright (C) 2006 William Pitcock
- * Copyright (C) 1998-2001 V�gv�lgyi Attila, Peter Alm, Mikael Alm,
- * Olle Hallnas, Thomas Nilsson and 4Front Technologies
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-#include <math.h>
-#include <audacious/plugin.h>
-#include <audacious/i18n.h>
-
-#include "logo.xpm"
-
-/* WIDTH should be kept 256, this is the hardwired resolution of the
- spectrum given by XMMS */
-#define WIDTH 256
-
-/* HEIGHT can be modified at your pleasure */
-#define HEIGHT 128
-
-/* Linearity of the amplitude scale (0.5 for linear, keep in [0.1, 0.9]) */
-#define d 0.33
-
-/* Time factor of the band dinamics. 3 means that the coefficient of the
- last value is half of the current one's. (see source) */
-#define tau 3
-
-/* Factor used for the diffusion. 4 means that half of the height is
- added to the neighbouring bars */
-#define dif 4
-
-static GtkWidget *window = NULL,*area;
-static GdkPixmap *bg_pixmap = NULL, *draw_pixmap = NULL, *bar = NULL;
-static GdkGC *gc = NULL;
-static gint16 bar_heights[WIDTH];
-/*static gint timeout_tag;*/
-static gdouble scale, x00, y00;
-
-static void fsanalyzer_init(void);
-static void fsanalyzer_cleanup(void);
-static void fsanalyzer_playback_start(void);
-static void fsanalyzer_playback_stop(void);
-static void fsanalyzer_render_freq(gint16 data[2][256]);
-
-VisPlugin fsanalyzer_vp = {
- .description = "Spectrum Analyzer",
- .num_pcm_chs_wanted = 0,
- .num_freq_chs_wanted = 1,
- .init = fsanalyzer_init, /* init */
- .cleanup = fsanalyzer_cleanup, /* cleanup */
- .playback_start = fsanalyzer_playback_start, /* playback_start */
- .playback_stop = fsanalyzer_playback_stop, /* playback_stop */
- .render_freq = fsanalyzer_render_freq /* render_freq */
-};
-
-VisPlugin *spectrum_vplist[] = { &fsanalyzer_vp, NULL };
-
-DECLARE_PLUGIN(spectrum, NULL, NULL, NULL, NULL, NULL, NULL, spectrum_vplist,NULL);
-
-static void fsanalyzer_destroy_cb(GtkWidget *w,gpointer data) {
- fsanalyzer_vp.disable_plugin(&fsanalyzer_vp);
-}
-
-static void fsanalyzer_init(void) {
- GdkColor color;
- int i;
-
- if(window)
- return;
-
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), _("Spectrum Analyzer"));
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE);
- gtk_widget_realize(window);
- bg_pixmap = gdk_pixmap_create_from_xpm_d(window->window,NULL,NULL,logo_xpm);
- gdk_window_set_back_pixmap(window->window,bg_pixmap,0);
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(fsanalyzer_destroy_cb),NULL);
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_widget_destroyed), &window);
- gtk_widget_set_size_request(GTK_WIDGET(window), WIDTH, HEIGHT);
- gc = gdk_gc_new(window->window);
- draw_pixmap = gdk_pixmap_new(window->window,WIDTH,HEIGHT,gdk_rgb_get_visual()->depth);
-
- bar = gdk_pixmap_new(window->window,25, HEIGHT, gdk_rgb_get_visual()->depth);
- for(i = 0; i < HEIGHT / 2; i++) {
- color.red = 0xFFFF;
- color.green = ((i * 255) / (HEIGHT / 2)) << 8;
- color.blue = 0;
-
- gdk_color_alloc(gdk_colormap_get_system(),&color);
- gdk_gc_set_foreground(gc,&color);
- gdk_draw_line(bar,gc,0,i,24,i);
- }
- for(i = 0; i < HEIGHT / 2; i++) {
- color.red = (255 - ((i * 255) / (HEIGHT / 2))) <<8;
- color.green = 0xFFFF;
- color.blue = 0;
-
- gdk_color_alloc(gdk_colormap_get_system(),&color);
- gdk_gc_set_foreground(gc,&color);
- gdk_draw_line(bar,gc,0,i + (HEIGHT / 2),24,i + (HEIGHT / 2));
- }
-
- scale = HEIGHT / ( log((1 - d) / d) * 2 );
- x00 = d*d*32768.0/(2 * d - 1);
- y00 = -log(-x00) * scale;
-
-/* d=0.2, HEIGHT=128
- scale = 46.1662413084;
- x00 = -2184.53333333;
- y00 = -354.979500941;
-*/
-
- gdk_color_black(gdk_colormap_get_system(),&color);
- gdk_gc_set_foreground(gc,&color);
-
- area = gtk_drawing_area_new();
- gtk_container_add(GTK_CONTAINER(window),area);
- gtk_widget_realize(area);
- gdk_window_set_back_pixmap(area->window,bg_pixmap,0);
-
- gtk_widget_show(area);
- gtk_widget_show(window);
- gdk_window_clear(window->window);
- gdk_window_clear(area->window);
-}
-
-static void fsanalyzer_cleanup(void) {
- if(window) {
- gtk_widget_destroy(window);
- }
- if(gc) {
- gdk_gc_unref(gc);
- gc = NULL;
- }
- if(bg_pixmap) {
- gdk_pixmap_unref(bg_pixmap);
- bg_pixmap = NULL;
- }
- if(draw_pixmap) {
- gdk_pixmap_unref(draw_pixmap);
- draw_pixmap = NULL;
- }
- if(bar) {
- gdk_pixmap_unref(bar);
- bar = NULL;
- }
-}
-
-static gint draw_func(gpointer data) {
- gint i;
-
- /* FIXME: should allow spare redrawing like the vis. in the main window */
- if(!window) {
-/* timeout_tag = 0;*/
- return FALSE;
- }
-
- GDK_THREADS_ENTER();
- gdk_draw_rectangle(draw_pixmap, gc, TRUE, 0, 0, WIDTH, HEIGHT);
-
- for(i = 0; i < WIDTH; i++)
- gdk_draw_pixmap(draw_pixmap, gc, bar, 0, HEIGHT-1-bar_heights[i], i, HEIGHT-1-bar_heights[i], 1, bar_heights[i]);
-
- gdk_window_clear(area->window);
- GDK_THREADS_LEAVE();
-
- return TRUE;
-}
-
-static void fsanalyzer_playback_start(void) {
- if(window) {
- gdk_window_set_back_pixmap(area->window,draw_pixmap,0);
- gdk_window_clear(area->window);
- }
-}
-
-
-static void fsanalyzer_playback_stop(void) {
- if(GTK_WIDGET_REALIZED(area)) {
- gdk_window_set_back_pixmap(area->window,bg_pixmap,0);
- gdk_window_clear(area->window);
- }
-}
-
-static void fsanalyzer_render_freq(gint16 data[2][256]) {
- gint i;
- gdouble y;
-
- if(!window)
- return;
-
- /* FIXME: can anything taken out of the main thread? */
- for (i = 0; i < WIDTH; i++) {
- y = (gdouble)data[0][i] * (i + 1); /* Compensating the energy */
- y = ( log(y - x00) * scale + y00 ); /* Logarithmic amplitude */
-
- y = ( (dif-2)*y + /* FIXME: conditionals should be rolled out of the loop */
- (i==0 ? y : bar_heights[i-1]) +
- (i==WIDTH-1 ? y : bar_heights[i+1])) / dif; /* Add some diffusion */
- y = ((tau-1)*bar_heights[i] + y) / tau; /* Add some dynamics */
- bar_heights[i] = (gint16)y;
- }
- draw_func(NULL);
- return;
-}
diff --git a/src/statusicon/Makefile b/src/statusicon/Makefile
index f470501..5c017ed 100644
--- a/src/statusicon/Makefile
+++ b/src/statusicon/Makefile
@@ -10,5 +10,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${BEEP_DEFINES} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} -laudgui
diff --git a/src/statusicon/config.c b/src/statusicon/config.c
index fe8ab29..815132f 100644
--- a/src/statusicon/config.c
+++ b/src/statusicon/config.c
@@ -20,34 +20,38 @@
*
*/
-#include <audacious/configdb.h>
+#include <audacious/misc.h>
#include "statusicon.h"
+static const gchar * const si_defaults[] = {
+ "rclick_menu", "0", /* SI_CFG_RCLICK_MENU_SMALL1 */
+ "scroll_action", "0", /* SI_CFG_SCROLL_ACTION_VOLUME */
+ "volume_delta", "5",
+ "disable_popup", "FALSE",
+ "close_to_tray", "FALSE",
+ "reverse_scroll", "FALSE",
+ NULL};
+
si_cfg_t si_cfg;
-void si_cfg_load(void)
+void si_cfg_load (void)
{
- mcs_handle_t *cfgfile = aud_cfg_db_open();
-
- if (!aud_cfg_db_get_int(cfgfile, "statusicon", "rclick_menu", &(si_cfg.rclick_menu)))
- si_cfg.rclick_menu = SI_CFG_RCLICK_MENU_SMALL1;
-
- if (!aud_cfg_db_get_int(cfgfile, "statusicon", "scroll_action", &(si_cfg.scroll_action)))
- si_cfg.scroll_action = SI_CFG_SCROLL_ACTION_VOLUME;
+ aud_config_set_defaults ("statusicon", si_defaults);
- if (!aud_cfg_db_get_int(cfgfile, "audacious", "mouse_wheel_change", &(si_cfg.volume_delta)))
- si_cfg.volume_delta = 5;
-
- aud_cfg_db_close(cfgfile);
+ si_cfg.rclick_menu = aud_get_int ("statusicon", "rclick_menu");
+ si_cfg.scroll_action = aud_get_int ("statusicon", "scroll_action");
+ si_cfg.volume_delta = aud_get_int ("statusicon", "volume_delta");
+ si_cfg.disable_popup = aud_get_bool ("statusicon", "disable_popup");
+ si_cfg.close_to_tray = aud_get_bool ("statusicon", "close_to_tray");
}
-void si_cfg_save(void)
+void si_cfg_save (void)
{
- mcs_handle_t *cfgfile = aud_cfg_db_open();
-
- aud_cfg_db_set_int(cfgfile, "statusicon", "rclick_menu", si_cfg.rclick_menu);
- aud_cfg_db_set_int(cfgfile, "statusicon", "scroll_action", si_cfg.scroll_action);
- aud_cfg_db_close(cfgfile);
+ aud_set_int ("statusicon", "rclick_menu", si_cfg.rclick_menu);
+ aud_set_int ("statusicon", "scroll_action", si_cfg.scroll_action);
+ aud_set_int ("statusicon", "volume_delta", si_cfg.volume_delta);
+ aud_set_bool ("statusicon", "disable_popup", si_cfg.disable_popup);
+ aud_set_bool ("statusicon", "close_to_tray", si_cfg.close_to_tray);
}
diff --git a/src/statusicon/statusicon.c b/src/statusicon/statusicon.c
index 122bf3f..0f08577 100644
--- a/src/statusicon/statusicon.c
+++ b/src/statusicon/statusicon.c
@@ -24,6 +24,7 @@
#include <audacious/drct.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <libaudcore/hook.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
@@ -56,7 +57,12 @@ static GtkStatusIcon *si_create(void)
else if (gtk_icon_theme_has_icon(theme, "audacious"))
icon = gtk_status_icon_new_from_icon_name("audacious");
else
- icon = gtk_status_icon_new_from_file(DATA_DIR "/images/audacious_player.xpm");
+ {
+ gchar * path = g_strdup_printf ("%s/images/audacious_player.xpm",
+ aud_get_path (AUD_PATH_DATA_DIR));
+ icon = gtk_status_icon_new_from_file (path);
+ g_free (path);
+ }
return icon;
}
@@ -73,7 +79,8 @@ static gboolean si_cb_btpress(GtkStatusIcon * icon, GdkEventButton * event, gpoi
if (event->state & GDK_SHIFT_MASK)
aud_drct_pl_next();
else
- hook_call ("interface toggle visibility", NULL);
+ aud_interface_show (! (aud_interface_is_shown () &&
+ aud_interface_is_focused ()));
break;
}
@@ -110,7 +117,7 @@ static gboolean si_cb_btscroll(GtkStatusIcon * icon, GdkEventScroll * event, gpo
si_volume_change(si_cfg.volume_delta);
break;
case SI_CFG_SCROLL_ACTION_SKIP:
- si_playback_skip(-1);
+ si_playback_skip (aud_get_bool ("statusicon", "reverse_scroll") ? 1 : -1);
break;
}
break;
@@ -124,7 +131,7 @@ static gboolean si_cb_btscroll(GtkStatusIcon * icon, GdkEventScroll * event, gpo
si_volume_change(-si_cfg.volume_delta);
break;
case SI_CFG_SCROLL_ACTION_SKIP:
- si_playback_skip(1);
+ si_playback_skip (aud_get_bool ("statusicon", "reverse_scroll") ? -1 : 1);
break;
}
break;
@@ -209,6 +216,9 @@ static void si_popup_timer_stop(GtkStatusIcon * icon)
static gboolean si_cb_tooltip(GtkStatusIcon * icon, gint x, gint y, gboolean keyboard_mode, GtkTooltip * tooltip, gpointer user_data)
{
+ if (si_cfg.disable_popup)
+ return FALSE;
+
if (!POPUP_IS_ACTIVE && !TIMER_IS_ACTIVE)
si_popup_timer_start(icon);
@@ -279,11 +289,22 @@ static void si_smallmenu_recreate(GtkStatusIcon * icon)
recreate_smallmenu = FALSE;
}
+static void si_window_close(gpointer data, gpointer user_data)
+{
+ gboolean *handle = (gboolean*) data;
+
+ if (si_cfg.close_to_tray)
+ {
+ *handle = TRUE;
+ aud_interface_show (FALSE);
+ }
+}
+
static void si_enable(gboolean enable)
{
static GtkStatusIcon *si_applet = NULL;
- if (enable == TRUE && si_applet == NULL)
+ if (enable && ! si_applet)
{
GtkWidget *si_smenu;
@@ -311,25 +332,28 @@ static void si_enable(gboolean enable)
g_object_set_data(G_OBJECT(si_applet), "smenu", si_smenu);
hook_associate("title change", si_popup_reshow, si_applet);
+ hook_associate("window close", si_window_close, NULL);
}
- else if (si_applet != NULL)
+
+ if (! enable && si_applet)
{
GtkWidget *si_smenu = g_object_get_data(G_OBJECT(si_applet), "smenu");
si_popup_timer_stop(si_applet); /* just in case the timer is active */
- si_smenu = NULL;
+ gtk_widget_destroy(si_smenu);
g_object_unref(si_applet);
si_applet = NULL;
hook_dissociate("title change", si_popup_reshow);
+ hook_dissociate("window close", si_window_close);
}
}
-void si_init(void)
+static gboolean si_init (void)
{
plugin_active = TRUE;
si_cfg_load();
si_enable(TRUE);
- return;
+ return TRUE;
}
void si_cleanup(void)
@@ -360,6 +384,9 @@ void si_about(void)
"the system tray area of the window manager.\n"));
}
+static GtkWidget *prefs_disable_popup_chkbtn;
+static GtkWidget *prefs_close_to_tray_chkbtn;
+static GtkWidget * reverse_scroll_toggle;
void si_prefs_cb_commit(gpointer prefs_win)
{
@@ -385,6 +412,11 @@ void si_prefs_cb_commit(gpointer prefs_win)
list = g_slist_next(list);
}
+ si_cfg.disable_popup = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_disable_popup_chkbtn));
+ si_cfg.close_to_tray = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_close_to_tray_chkbtn));
+ aud_set_bool ("statusicon", "reverse_scroll", gtk_toggle_button_get_active
+ ((GtkToggleButton *) reverse_scroll_toggle));
+
si_cfg_save();
/* request the recreation of status icon small-menu if necessary */
@@ -401,6 +433,7 @@ void si_config(void)
GtkWidget *prefs_rclick_frame, *prefs_rclick_vbox;
GtkWidget *prefs_rclick_smallmenu1_rbt, *prefs_rclick_smallmenu2_rbt;
GtkWidget *prefs_scroll_frame, *prefs_scroll_vbox;
+ GtkWidget *prefs_other_frame, *prefs_other_vbox;
GtkWidget *prefs_scroll_vol_rbt, *prefs_scroll_skip_rbt;
GtkWidget *prefs_bbar_bbox;
GtkWidget *prefs_bbar_bt_ok, *prefs_bbar_bt_cancel;
@@ -458,14 +491,43 @@ void si_config(void)
prefs_scroll_skip_rbt = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(prefs_scroll_vol_rbt), _("Change playing song"));
g_object_set_data(G_OBJECT(prefs_scroll_skip_rbt), "val", GINT_TO_POINTER(SI_CFG_SCROLL_ACTION_SKIP));
g_object_set_data(G_OBJECT(prefs_win), "msa_grp", gtk_radio_button_get_group(GTK_RADIO_BUTTON(prefs_scroll_skip_rbt)));
+
if (si_cfg.scroll_action == SI_CFG_SCROLL_ACTION_VOLUME)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_scroll_vol_rbt), TRUE);
else
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_scroll_skip_rbt), TRUE);
+
gtk_box_pack_start(GTK_BOX(prefs_scroll_vbox), prefs_scroll_vol_rbt, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(prefs_scroll_vbox), prefs_scroll_skip_rbt, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(prefs_vbox), prefs_scroll_frame, TRUE, TRUE, 0);
+ prefs_other_frame = gtk_frame_new(_("Other settings"));
+ prefs_other_vbox = gtk_vbox_new(TRUE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(prefs_other_vbox), 6);
+ gtk_container_add(GTK_CONTAINER(prefs_other_frame), prefs_other_vbox);
+
+ prefs_disable_popup_chkbtn = gtk_check_button_new_with_label(_("Disable the popup window"));
+
+ if (si_cfg.disable_popup)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_disable_popup_chkbtn), TRUE);
+
+ gtk_box_pack_start(GTK_BOX(prefs_other_vbox), prefs_disable_popup_chkbtn, TRUE, TRUE, 0);
+
+ prefs_close_to_tray_chkbtn = gtk_check_button_new_with_label(_("Close to the notification area (system tray)"));
+
+ if (si_cfg.close_to_tray)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_close_to_tray_chkbtn), TRUE);
+
+ gtk_box_pack_start(GTK_BOX(prefs_other_vbox), prefs_close_to_tray_chkbtn, TRUE, TRUE, 0);
+
+ reverse_scroll_toggle = gtk_check_button_new_with_label
+ (_("Advance in playlist when scrolling upward"));
+ gtk_toggle_button_set_active ((GtkToggleButton *) reverse_scroll_toggle,
+ aud_get_bool ("statusicon", "reverse_scroll"));
+ gtk_box_pack_start ((GtkBox *) prefs_other_vbox, reverse_scroll_toggle, TRUE, TRUE, 0);
+
+ gtk_box_pack_start(GTK_BOX(prefs_vbox), prefs_other_frame, TRUE, TRUE, 0);
+
/* horizontal separator and buttons */
gtk_box_pack_start(GTK_BOX(prefs_vbox), gtk_hseparator_new(), FALSE, FALSE, 4);
prefs_bbar_bbox = gtk_hbutton_box_new();
@@ -481,14 +543,11 @@ void si_config(void)
gtk_widget_show_all(prefs_win);
}
-static GeneralPlugin si_gp = {
- .description = "Status Icon",
+AUD_GENERAL_PLUGIN
+(
+ .name = "Status Icon",
.init = si_init,
.cleanup = si_cleanup,
.about = si_about,
.configure = si_config
-};
-
-static GeneralPlugin *statusicon_gplist[] = { &si_gp, NULL };
-
-SIMPLE_GENERAL_PLUGIN(statusicon, statusicon_gplist);
+)
diff --git a/src/statusicon/statusicon.h b/src/statusicon/statusicon.h
index 8ad09a6..c6c8730 100644
--- a/src/statusicon/statusicon.h
+++ b/src/statusicon/statusicon.h
@@ -51,16 +51,12 @@ typedef struct
gint rclick_menu;
gint scroll_action;
gint volume_delta;
+ gboolean disable_popup;
+ gboolean close_to_tray;
} si_cfg_t;
extern si_cfg_t si_cfg;
-/* statusicon.c */
-void si_init(void);
-void si_cleanup(void);
-void si_config(void);
-void si_about(void);
-
/* util.c */
void si_volume_change(gint);
void si_playback_skip(gint);
diff --git a/src/stereo_plugin/Makefile b/src/stereo_plugin/Makefile
index 0a8495d..239a03d 100644
--- a/src/stereo_plugin/Makefile
+++ b/src/stereo_plugin/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/stereo_plugin/stereo.c b/src/stereo_plugin/stereo.c
index 38861ef..b9f26fa 100644
--- a/src/stereo_plugin/stereo.c
+++ b/src/stereo_plugin/stereo.c
@@ -1,17 +1,18 @@
/* Extra Stereo Plugin for Audacious
* Written by Johan Levin, 1999
- * Ported to new effect API by John Lindgren, 2009 */
+ * Modified by John Lindgren, 2009-2011 */
#include "config.h"
#include <gtk/gtk.h>
-#include <audacious/configdb.h>
+#include <audacious/gtk-compat.h>
#include <audacious/i18n.h>
+#include <audacious/misc.h>
#include <audacious/plugin.h>
#include <libaudgui/libaudgui.h>
#include <libaudgui/libaudgui-gtk.h>
-static void init(void);
+static gboolean init (void);
static void about(void);
static void configure(void);
@@ -22,12 +23,12 @@ static void stereo_finish (gfloat * * data, gint * samples);
static gint stereo_decoder_to_output_time (gint time);
static gint stereo_output_to_decoder_time (gint time);
-EffectPlugin stereo_ep =
-{
- .description = "Extra Stereo Plugin", /* Description */
- .init = init,
- .about = about,
- .configure = configure,
+AUD_EFFECT_PLUGIN
+(
+ .name = "Extra Stereo",
+ .init = init,
+ .about = about,
+ .configure = configure,
.start = stereo_start,
.process = stereo_process,
.flush = stereo_flush,
@@ -35,7 +36,11 @@ EffectPlugin stereo_ep =
.decoder_to_output_time = stereo_decoder_to_output_time,
.output_to_decoder_time = stereo_output_to_decoder_time,
.preserves_format = TRUE,
-};
+)
+
+static const gchar * const stereo_defaults[] = {
+ "intensity", "2.5",
+ NULL};
static const char *about_text = N_("Extra Stereo Plugin\n\n"
"By Johan Levin 1999.");
@@ -43,17 +48,12 @@ static const char *about_text = N_("Extra Stereo Plugin\n\n"
static GtkWidget *conf_dialog = NULL;
static gdouble value;
-EffectPlugin *stereo_eplist[] = { &stereo_ep, NULL };
-
-DECLARE_PLUGIN(stereo, NULL, NULL, NULL, NULL, stereo_eplist, NULL, NULL, NULL);
-
-static void init(void)
+static gboolean init (void)
{
- mcs_handle_t *db;
- db = aud_cfg_db_open();
- if (!aud_cfg_db_get_double(db, "extra_stereo", "intensity", &value))
- value = 2.5;
- aud_cfg_db_close(db);
+ aud_config_set_defaults ("extra_stereo", stereo_defaults);
+ value = aud_get_double ("extra_stereo", "intensity");
+
+ return TRUE;
}
static void about (void)
@@ -64,15 +64,11 @@ static void about (void)
_("About Extra Stereo Plugin"), _(about_text));
}
-static void conf_ok_cb(GtkButton * button, gpointer data)
+static void conf_ok_cb (GtkButton * button, GtkAdjustment * adj)
{
- mcs_handle_t *db;
-
- value = *(gdouble *) data;
+ value = gtk_adjustment_get_value (adj);
+ aud_set_double ("extra_stereo", "intensity", value);
- db = aud_cfg_db_open();
- aud_cfg_db_set_double(db, "extra_stereo", "intensity", value);
- aud_cfg_db_close(db);
gtk_widget_destroy(conf_dialog);
}
@@ -81,67 +77,62 @@ static void conf_cancel_cb(GtkButton * button, gpointer data)
gtk_widget_destroy(conf_dialog);
}
-static void conf_apply_cb(GtkButton *button, gpointer data)
+static void conf_apply_cb (GtkButton * button, GtkAdjustment * adj)
{
- value = *(gdouble *) data;
+ value = gtk_adjustment_get_value (adj);
}
static void configure(void)
{
GtkWidget *hbox, *label, *scale, *button, *bbox;
- GtkObject *adjustment;
if (conf_dialog != NULL)
return;
conf_dialog = gtk_dialog_new();
- gtk_signal_connect(GTK_OBJECT(conf_dialog), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed), &conf_dialog);
+ g_signal_connect (conf_dialog, "destroy", (GCallback)
+ gtk_widget_destroyed, & conf_dialog);
gtk_window_set_title(GTK_WINDOW(conf_dialog), _("Configure Extra Stereo"));
label = gtk_label_new(_("Effect intensity:"));
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(conf_dialog)->vbox), label,
- TRUE, TRUE, 0);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area
+ ((GtkDialog *) conf_dialog), label, TRUE, TRUE, 0);
gtk_widget_show(label);
hbox = gtk_hbox_new(FALSE, 10);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(conf_dialog)->vbox), hbox,
- TRUE, TRUE, 10);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_content_area
+ ((GtkDialog *) conf_dialog), hbox, TRUE, TRUE, 10);
gtk_widget_show(hbox);
- adjustment = gtk_adjustment_new(value, 0.0, 15.0 + 1.0, 0.1, 1.0, 1.0);
+ GtkAdjustment * adjustment = (GtkAdjustment *) gtk_adjustment_new
+ (value, 0, 15 + 1, 0.1, 1.0, 1.0);
scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
gtk_box_pack_start(GTK_BOX(hbox), scale, TRUE, TRUE, 10);
gtk_widget_show(scale);
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX((GTK_DIALOG(conf_dialog)->action_area)),
- bbox, TRUE, TRUE, 0);
+ gtk_box_pack_start ((GtkBox *) gtk_dialog_get_action_area ((GtkDialog *)
+ conf_dialog), bbox, TRUE, TRUE, 0);
button = gtk_button_new_with_label(_("Ok"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_ok_cb),
- &GTK_ADJUSTMENT(adjustment)->value);
+ g_signal_connect (button, "clicked", (GCallback) conf_ok_cb, adjustment);
gtk_widget_grab_default(button);
gtk_widget_show(button);
button = gtk_button_new_with_label(_("Cancel"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_cancel_cb), NULL);
+ g_signal_connect (button, "clicked", (GCallback) conf_cancel_cb, NULL);
gtk_widget_show(button);
button = gtk_button_new_with_label(_("Apply"));
- GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_widget_set_can_default (button, TRUE);
gtk_box_pack_start(GTK_BOX(bbox), button, TRUE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(conf_apply_cb),
- &GTK_ADJUSTMENT(adjustment)->value);
+ g_signal_connect (button, "clicked", (GCallback) conf_apply_cb,
+ adjustment);
gtk_widget_show(button);
gtk_widget_show(bbox);
diff --git a/src/streambrowser/Makefile b/src/streambrowser/Makefile
deleted file mode 100644
index 56c524f..0000000
--- a/src/streambrowser/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-PLUGIN = streambrowser${PLUGIN_SUFFIX}
-
-SRCS = streambrowser.c \
- streamdir.c \
- shoutcast.c \
- xiph.c \
- bookmarks.c \
- gui/streambrowser_win.c
-
-DATA = images/shoutcast.png \
- images/xiph.png \
- images/bookmarks.png \
- images/streambrowser-16x16.png \
- images/streambrowser-64x64.png
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-PACKAGE = audacious
-
-plugindir := ${plugindir}/${GENERAL_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS} ${BEEP_DEFINES}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${XML_CFLAGS} ${ARCH_DEFINES} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS} ${XML_LIBS}
-
diff --git a/src/streambrowser/bookmarks.c b/src/streambrowser/bookmarks.c
deleted file mode 100644
index b5592c7..0000000
--- a/src/streambrowser/bookmarks.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#include <string.h>
-#include <glib.h>
-
-#include <audacious/debug.h>
-#include <audacious/plugin.h>
-
-#include "streambrowser.h"
-#include "bookmarks.h"
-
-
-static bookmark_t **bookmarks;
-static int *bookmarks_count;
-
-gboolean bookmarks_streaminfo_fetch (category_t * category,
- streaminfo_t * streaminfo)
-{
- // todo: implement and make use of this
-
- return FALSE;
-}
-
-gboolean bookmarks_category_fetch (streamdir_t * streamdir,
- category_t * category)
-{
- AUDDBG("bookmarks: filling category '%s'\n", category->name);
-
- /* free/remove any existing streaminfos in this category */
- while (streaminfo_get_count (category) > 0)
- streaminfo_remove (category, streaminfo_get_by_index (category, 0));
-
- int i;
- /* find bookmarks that match this category */
- for (i = 0; i < *bookmarks_count; i++)
- if (strcmp ((*bookmarks)[i].streamdir_name, category->name) == 0)
- {
- AUDDBG("bookmarks: adding stream info for '%s/%s'\n",
- streamdir->name, category->name);
-
- streaminfo_t *streaminfo = streaminfo_new ((*bookmarks)[i].name,
- (*bookmarks)[i].
- playlist_url,
- (*bookmarks)[i].url, "");
- streaminfo_add (category, streaminfo);
-
- AUDDBG("bookmarks: stream info added\n");
- }
-
- return TRUE;
-}
-
-streamdir_t *bookmarks_streamdir_fetch (bookmark_t ** p_bookmarks,
- int *p_bookmarks_count)
-{
- bookmarks = p_bookmarks;
- bookmarks_count = p_bookmarks_count;
-
- streamdir_t *streamdir = streamdir_new (BOOKMARKS_NAME);
-
- AUDDBG("bookmarks: creating streaming directory for bookmarks\n");
-
- category_t *category = category_new ("Shoutcast");
- category_add (streamdir, category);
-
- category = category_new ("Xiph");
- category_add (streamdir, category);
-
- AUDDBG("bookmarks: streaming directory successfuly created\n");
-
- return streamdir;
-}
-
-void bookmark_add (bookmark_t * bookmark)
-{
- AUDDBG
- ("bookmarks: adding bookmark with streamdir = '%s', name = '%s', playlist_url = '%s', url = '%s'\n",
- bookmark->streamdir_name, bookmark->name, bookmark->playlist_url,
- bookmark->url);
-
- int i;
- for (i = 0; i < *bookmarks_count; i++)
- if (strcmp ((*bookmarks)[i].name, bookmark->name) == 0)
- {
- AUDDBG
- ("bookmarks: bookmark with name = '%s' already exists, skipping\n",
- bookmark->name);
- return;
- }
-
- *bookmarks =
- realloc (*bookmarks, sizeof (bookmark_t) * ((*bookmarks_count) + 1));
-
- strncpy ((*bookmarks)[*bookmarks_count].streamdir_name,
- bookmark->streamdir_name, DEF_STRING_LEN);
- strncpy ((*bookmarks)[*bookmarks_count].name, bookmark->name,
- DEF_STRING_LEN);
- strncpy ((*bookmarks)[*bookmarks_count].playlist_url,
- bookmark->playlist_url, DEF_STRING_LEN);
- strncpy ((*bookmarks)[*bookmarks_count].url, bookmark->url, DEF_STRING_LEN);
-
- (*bookmarks_count)++;
-
- AUDDBG("bookmarks: bookmark added, there are now %d bookmarks\n",
- *bookmarks_count);
-
- /* issue a configuration save for immediately saving the new added bookmark */
- config_save ();
-}
-
-void bookmark_remove (gchar * name)
-{
- AUDDBG("bookmarks: searching for bookmark with name = '%s'\n", name);
-
- int pos = -1, i;
-
- for (i = 0; i < *bookmarks_count; i++)
- if (strcmp ((*bookmarks)[i].name, name) == 0)
- {
- pos = i;
- break;
- }
-
- if (pos != -1)
- {
- AUDDBG
- ("bookmarks: removing bookmark with streamdir = '%s', name = '%s', playlist_url = '%s', url = '%s'\n",
- (*bookmarks)[i].streamdir_name, (*bookmarks)[i].name,
- (*bookmarks)[i].playlist_url, (*bookmarks)[i].url);
-
- for (i = pos; i < (*bookmarks_count) - 1; i++)
- {
- /* bookmarks[i] = bookmarks[i + 1] */
-
- strncpy ((*bookmarks)[i].streamdir_name,
- (*bookmarks)[i + 1].streamdir_name, DEF_STRING_LEN);
- strncpy ((*bookmarks)[i].name, (*bookmarks)[i + 1].name,
- DEF_STRING_LEN);
- strncpy ((*bookmarks)[i].playlist_url,
- (*bookmarks)[i + 1].playlist_url, DEF_STRING_LEN);
- strncpy ((*bookmarks)[i].url, (*bookmarks)[i + 1].url,
- DEF_STRING_LEN);
- }
-
- (*bookmarks_count)--;
- if (*bookmarks_count > 0)
- *bookmarks =
- realloc (*bookmarks, sizeof (bookmark_t) * (*bookmarks_count));
- else
- *bookmarks = NULL;
-
- AUDDBG("bookmarks: bookmark removed, there are now %d bookmarks\n",
- *bookmarks_count);
- }
- else
- failure ("bookmarks: cannot find a bookmark with name = '%s'\n", name);
-
- /* issue a configuration save for immediately saving the remaining bookmarks */
- config_save ();
-}
diff --git a/src/streambrowser/bookmarks.h b/src/streambrowser/bookmarks.h
deleted file mode 100644
index 4dcf9cc..0000000
--- a/src/streambrowser/bookmarks.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#ifndef BOOKMARKS_H
-#define BOOKMARKS_H
-
-#include "streambrowser.h"
-#include "streamdir.h"
-
-#define BOOKMARKS_NAME "Bookmarks"
-#define BOOKMARKS_ICON DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "bookmarks.png"
-
-
-typedef struct
-{
- gchar streamdir_name[DEF_STRING_LEN];
-
- gchar name[DEF_STRING_LEN];
- gchar playlist_url[DEF_STRING_LEN];
- gchar url[DEF_STRING_LEN];
-}
-bookmark_t;
-
-
-gboolean bookmarks_streaminfo_fetch (category_t * category,
- streaminfo_t * streaminfo);
-gboolean bookmarks_category_fetch (streamdir_t * streamdir,
- category_t * category);
-streamdir_t *bookmarks_streamdir_fetch (bookmark_t ** p_bookmarks,
- int *p_bookmarks_count);
-
-void bookmark_add (bookmark_t * bookmark);
-void bookmark_remove (gchar * name);
-
-
-#endif // BOOKMARKS_H
diff --git a/src/streambrowser/gui/streambrowser_win.c b/src/streambrowser/gui/streambrowser_win.c
deleted file mode 100644
index ef1bc3b..0000000
--- a/src/streambrowser/gui/streambrowser_win.c
+++ /dev/null
@@ -1,649 +0,0 @@
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "../streambrowser.h"
-#include "streambrowser_win.h"
-#include "../bookmarks.h"
-
-
-typedef struct {
-
- streamdir_t* streamdir;
- GtkWidget* table;
- GtkWidget* tree_view;
-
-} streamdir_gui_t;
-
-
-void (* update_function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean add_to_playlist);
-
-static GtkWidget* gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text);
-static GtkWidget* gtk_streamdir_tree_view_new();
-static GtkWidget* gtk_streamdir_table_new(GtkWidget *tree_view);
-
-static gboolean on_notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data);
-static gboolean on_tree_view_cursor_changed(GtkTreeView *tree_view, gpointer data);
-static gboolean on_add_button_clicked(GtkButton *button, gpointer data);
-static gboolean on_bookmark_button_clicked(GtkButton *button, gpointer data);
-static gboolean on_search_entry_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
-static gboolean on_tree_view_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
-static gboolean on_tree_view_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data);
-
-static streamdir_gui_t* find_streamdir_gui_by_name(gchar *name);
-static streamdir_gui_t* find_streamdir_gui_by_table(GtkTable *table);
-static streamdir_gui_t* find_streamdir_gui_by_streamdir(streamdir_t *streamdir);
-static gboolean tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data);
-
-static GtkWidget* notebook;
-static GtkWidget* search_entry;
-static GtkWidget* add_button;
-static GtkWidget* bookmark_button;
-static GtkWidget* streambrowser_window;
-static GList* streamdir_gui_list = NULL;
-static GtkCellRenderer* cell_renderer_pixbuf;
-static GtkCellRenderer* cell_renderer_text;
-
-static gboolean tree_view_button_pressed = FALSE;
-
-
-
-void streambrowser_win_init()
-{
- /* notebook */
- notebook = gtk_notebook_new();
- g_signal_connect(G_OBJECT(notebook), "switch-page", G_CALLBACK(on_notebook_switch_page), NULL);
- gtk_widget_show(notebook);
-
- GtkWidget *search_label = gtk_label_new(_("Search:"));
- gtk_widget_show(search_label);
-
- /* search entry */
- search_entry = gtk_entry_new();
- g_signal_connect(G_OBJECT(search_entry), "key-press-event", G_CALLBACK(on_search_entry_key_pressed), NULL);
- gtk_widget_show(search_entry);
-
- GtkWidget *hbox1 = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox1), search_label, FALSE, TRUE, 3);
- gtk_box_pack_start(GTK_BOX(hbox1), search_entry, TRUE, TRUE, 3);
- gtk_widget_show(hbox1);
-
- /* add button */
- add_button = gtk_button_new_from_stock(GTK_STOCK_ADD);
- g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(on_add_button_clicked), NULL);
- gtk_widget_show(add_button);
-
- /* bookmark button */
- bookmark_button = gtk_button_new_with_label(_("Add Bookmark"));
- gtk_button_set_image(GTK_BUTTON(bookmark_button), gtk_image_new_from_file(BOOKMARKS_ICON));
- g_signal_connect(G_OBJECT(bookmark_button), "clicked", G_CALLBACK(on_bookmark_button_clicked), NULL);
- gtk_widget_show(bookmark_button);
-
- GtkWidget *vbox1 = gtk_vbox_new(FALSE, 4);
- gtk_box_pack_start(GTK_BOX(vbox1), notebook, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(vbox1), add_button, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(vbox1), bookmark_button, FALSE, TRUE, 0);
- gtk_widget_show(vbox1);
-
- /* streambrowser window */
- streambrowser_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(streambrowser_window), _("Stream browser"));
- gtk_window_set_position(GTK_WINDOW(streambrowser_window), GTK_WIN_POS_CENTER);
- gtk_window_set_default_size(GTK_WINDOW(streambrowser_window), 1000, 700);
- gtk_window_set_icon_from_file(GTK_WINDOW(streambrowser_window), STREAMBROWSER_ICON, NULL);
- g_signal_connect(G_OBJECT(streambrowser_window), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), streambrowser_window);
- gtk_container_add(GTK_CONTAINER(streambrowser_window), vbox1);
-
- /* others */
- cell_renderer_pixbuf = gtk_cell_renderer_pixbuf_new();
- cell_renderer_text = gtk_cell_renderer_text_new();
-}
-
-void streambrowser_win_done()
-{
-}
-
-void streambrowser_win_show()
-{
- gtk_widget_show(streambrowser_window);
-}
-
-void streambrowser_win_hide()
-{
- gtk_widget_hide(streambrowser_window);
-}
-
-void streambrowser_win_set_streamdir(streamdir_t *streamdir, gchar *icon_filename)
-{
- GtkWidget *tree_view = NULL;
-
- /* search for an old instance of this streamdir and replace it */
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_name(streamdir->name);
- if (streamdir_gui != NULL) {
- streamdir_delete(streamdir_gui->streamdir);
- streamdir_gui->streamdir = streamdir;
- tree_view = streamdir_gui->tree_view;
- }
- /* if no older instance of this streamdir has been found, we add a brand new one */
- else {
- streamdir_gui = g_malloc(sizeof(streamdir_gui_t));
-
- tree_view = gtk_streamdir_tree_view_new();
-
- GtkWidget *table = gtk_streamdir_table_new(tree_view);
- gtk_widget_show_all(table);
-
- GtkWidget *label = gtk_label_new_with_icon(icon_filename, streamdir->name);
- gtk_widget_show_all(label);
-
- streamdir_gui->streamdir = streamdir;
- streamdir_gui->tree_view = tree_view;
- streamdir_gui->table = table;
-
- streamdir_gui_list = g_list_append(streamdir_gui_list, streamdir_gui);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, label);
- }
-
- /* fill the tree with categories */
- GtkTreeIter iter;
- GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view)));
-
- gtk_tree_store_clear(store);
-
- int i, count = category_get_count(streamdir);
- category_t *category;
- for (i = 0; i < count; i++) {
- category = category_get_by_index(streamdir, i);
-
- gtk_tree_store_append(store, &iter, NULL);
- gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", 3, PANGO_WEIGHT_NORMAL, -1);
- }
-}
-
-void streambrowser_win_set_category(streamdir_t *streamdir, category_t *category)
-{
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_name(streamdir->name);
- if (streamdir_gui == NULL) {
- failure("gui: streambrowser_win_set_category() called with non-existent streamdir\n");
- return;
- }
-
- GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
- GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view)));
- GtkTreePath *path;
- GtkTreeIter iter, new_iter;
-
- /* clear all the previously added streaminfo in this category */
- path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), 0, -1);
- if (gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)) {
- while (gtk_tree_store_remove(store, &iter))
- ;
- }
-
- /* find the corresponding category tree iter */
- path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), -1);
- if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
- return;
-
- /* append the new streaminfos to the current category / iter */
- int i, count = streaminfo_get_count(category);
- streaminfo_t *streaminfo;
- for (i = 0; i < count; i++) {
- streaminfo = streaminfo_get_by_index(category, i);
-
- gtk_tree_store_append(store, &new_iter, &iter);
- gtk_tree_store_set(store, &new_iter, 0, "gtk-media-play", 1, streaminfo->name, 2, streaminfo->current_track, 3, PANGO_WEIGHT_NORMAL, -1);
- }
-
- gtk_tree_path_free(path);
-}
-
-void streambrowser_win_set_streaminfo(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo)
-{
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_name(streamdir->name);
- if (streamdir_gui == NULL) {
- failure("gui: streambrowser_win_set_category() called with non-existent streamdir\n");
- return;
- }
-
- GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
- GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view)));
- GtkTreePath *path;
- GtkTreeIter iter, new_iter;
-
- /* find the corresponding streaminfo tree iter */
- path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), streaminfo_get_index(category, streaminfo), -1);
- if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
- return;
-
- /* update the streaminfo*/
- gtk_tree_store_set(store, &new_iter, 0, "gtk-media-play", 1, streaminfo->name, 2, streaminfo->current_track, 3, PANGO_WEIGHT_NORMAL -1);
-
- gtk_tree_path_free(path);
-}
-
-void streambrowser_win_set_update_function(void (*function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean add_to_playlist))
-{
- update_function = function;
-}
-
-void streambrowser_win_set_category_state(streamdir_t *streamdir, category_t *category, gboolean fetching)
-{
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir);
- GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
- GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view));
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* find the corresponding category tree iter */
- path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), -1);
- if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
- return;
-
- if (fetching) {
- gtk_tree_store_set(store, &iter, 0, "gtk-refresh", 1, category->name, 2, "", 3, PANGO_WEIGHT_BOLD, -1);
- }
- else {
- gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", 3, PANGO_WEIGHT_NORMAL, -1);
-
- /* we also expand the corresponding category tree element in the treeview */
- gtk_tree_view_expand_row(tree_view, path, FALSE);
- }
-}
-
-void streambrowser_win_set_streaminfo_state(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean fetching)
-{
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir);
- GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
- GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view));
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* find the corresponding category tree iter */
- path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), streaminfo_get_index(category, streaminfo), -1);
- if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
- return;
-
- if (fetching) {
- gtk_tree_store_set(store, &iter, 0, "gtk-media-play", 1, streaminfo->name, 2, streaminfo->current_track, 3, PANGO_WEIGHT_BOLD, -1);
- }
- else {
- gtk_tree_store_set(store, &iter, 0, "gtk-media-play", 1, streaminfo->name, 2, streaminfo->current_track, 3, PANGO_WEIGHT_NORMAL, -1);
- }
-}
-
-static GtkWidget* gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text)
-{
- GtkWidget *hbox = gtk_hbox_new(FALSE, 1);
- GtkWidget *label = gtk_label_new(label_text);
- GtkWidget *icon = gtk_image_new_from_file(icon_filename);
-
- gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
-
- return hbox;
-}
-
-static GtkWidget *gtk_streamdir_tree_view_new()
-{
- GtkWidget *tree_view = gtk_tree_view_new();
-
- GtkTreeStore *store = gtk_tree_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
- gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(store));
-
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), TRUE);
-#if GTK_CHECK_VERSION (2, 10, 0)
- gtk_tree_view_set_search_entry(GTK_TREE_VIEW(tree_view), GTK_ENTRY(search_entry));
-#endif
- gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(tree_view), tree_view_search_equal_func, NULL, NULL);
- gtk_tree_view_set_search_column(GTK_TREE_VIEW(tree_view), 1);
- g_signal_connect(G_OBJECT(tree_view), "key-press-event", G_CALLBACK(on_tree_view_key_pressed), NULL);
- g_signal_connect(G_OBJECT(tree_view), "cursor-changed", G_CALLBACK(on_tree_view_cursor_changed), NULL);
- g_signal_connect(G_OBJECT(tree_view), "button-press-event", G_CALLBACK(on_tree_view_button_pressed), NULL);
-
- GtkTreeViewColumn *column = gtk_tree_view_column_new();
- gtk_tree_view_column_pack_start(column, cell_renderer_pixbuf, TRUE);
- gtk_tree_view_column_add_attribute(column, cell_renderer_pixbuf, "stock-id", 0);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
-
- column = gtk_tree_view_column_new();
- gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE);
- gtk_tree_view_column_add_attribute(column, cell_renderer_text, "text", 1);
- gtk_tree_view_column_add_attribute(column, cell_renderer_text, "weight", 3);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_title(column, _("Stream name"));
- gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
-
- column = gtk_tree_view_column_new();
- gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE);
- gtk_tree_view_column_add_attribute(column, cell_renderer_text, "text", 2);
- gtk_tree_view_column_set_resizable(column, TRUE);
- gtk_tree_view_column_set_title(column, _("Now playing"));
- gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
-
- return tree_view;
-}
-
-static GtkWidget* gtk_streamdir_table_new(GtkWidget *tree_view)
-{
- GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
- gtk_container_add(GTK_CONTAINER(scrolled_window), tree_view);
-
- GtkWidget *table = gtk_table_new(1, 1, FALSE);
- gtk_table_attach(GTK_TABLE(table), scrolled_window, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
- return table;
-}
-
-static gboolean on_notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data)
-{
- if (page_num < 0)
- return FALSE;
-
- /* only enable searching in the current tree (tab) */
-
- streamdir_gui_t *streamdir_gui;
- int i;
-
- for (i = 0; i < g_list_length(streamdir_gui_list); i++) {
- streamdir_gui = g_list_nth_data(streamdir_gui_list, i);
-
- if (i == page_num)
- gtk_tree_view_set_search_column(GTK_TREE_VIEW(streamdir_gui->tree_view), 1);
- else
- gtk_tree_view_set_search_column(GTK_TREE_VIEW(streamdir_gui->tree_view), -1);
- }
-
- /* clear the search box */
- gtk_entry_set_text(GTK_ENTRY(search_entry), "");
-
- /* if this is the last page, aka the bookmarks page, bookmark button has to say "Remove bookmark", instead of "Add bookmark"0 */
- if (page_num == gtk_notebook_get_n_pages(notebook) - 1) {
- gtk_button_set_label(GTK_BUTTON(bookmark_button), _("Remove Bookmark"));
- }
- else {
- gtk_button_set_label(GTK_BUTTON(bookmark_button), _("Add Bookmark"));
- }
-
- return TRUE;
-}
-
-
-static gboolean on_tree_view_cursor_changed(GtkTreeView *tree_view, gpointer data)
-{
- /* only do the refresh if this cursor change occured due to a mouse click */
- if (!tree_view_button_pressed)
- return FALSE;
-
- tree_view_button_pressed = FALSE;
-
- GtkTreePath *path;
- GtkTreeViewColumn *focus_column;
-
- /* get the currently selected tree view */
- GtkWidget *table = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_table(GTK_TABLE(table));
- if (streamdir_gui == NULL)
- return FALSE;
-
- /* get the currently selected path in the tree */
- gtk_tree_view_get_cursor(tree_view, &path, &focus_column);
-
- if (path == NULL || gtk_tree_path_get_depth(path) == 0)
- return FALSE;
-
- gint *indices = gtk_tree_path_get_indices(path);
- int category_index = indices[0];
- streamdir_t *streamdir = streamdir_gui->streamdir;
- category_t *category = category_get_by_index(streamdir_gui->streamdir, category_index);
-
- /* if the selected item is a category */
- if (gtk_tree_path_get_depth(path) == 1) {
- if (!gtk_tree_view_row_expanded(tree_view, path)) {
- gtk_entry_set_text(GTK_ENTRY(search_entry), "");
- update_function(streamdir, category, NULL, FALSE);
- }
-
- gtk_tree_path_free(path);
- }
- /* if the selected item is a streaminfo */
- else {
- int streaminfo_index = indices[1];
-
- gtk_tree_path_free(path);
-
- /* get the currently selected stream (info) */
- streaminfo_t *streaminfo = streaminfo_get_by_index(category, streaminfo_index);
-
- gtk_entry_set_text(GTK_ENTRY(search_entry), "");
- update_function(streamdir, category, streaminfo, FALSE);
- }
-
- return FALSE;
-}
-
-static gboolean on_tree_view_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data)
-{
- /* double click adds the currently selected stream to the playlist */
- if (event->type == GDK_2BUTTON_PRESS) {
- tree_view_button_pressed = FALSE;
- on_add_button_clicked(NULL, NULL);
- }
- /* single click triggers a refresh of the selected item */
- else {
- tree_view_button_pressed = TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean on_add_button_clicked(GtkButton *button, gpointer data)
-{
- GtkTreePath *path;
- GtkTreeViewColumn *focus_column;
-
- /* get the currently selected tree view */
- GtkWidget *table = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_table(GTK_TABLE(table));
- if (streamdir_gui == NULL)
- return TRUE;
-
- GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
-
- /* get the currently selected path in the tree */
- gtk_tree_view_get_cursor(tree_view, &path, &focus_column);
-
- if (path == NULL)
- return TRUE;
-
- gint *indices = gtk_tree_path_get_indices(path);
- if (gtk_tree_path_get_depth(path) == 1) {
- if (gtk_tree_view_row_expanded(tree_view, path))
- gtk_tree_view_collapse_row(tree_view, path);
- else
- gtk_tree_view_expand_row(tree_view, path, FALSE);
-
- gtk_tree_path_free(path);
- return TRUE;
- }
-
- int category_index = indices[0];
- int streaminfo_index = indices[1];
-
- gtk_tree_path_free(path);
-
- /* get the currently selected stream (info) */
- streamdir_t *streamdir = streamdir_gui->streamdir;
- category_t *category = category_get_by_index(streamdir_gui->streamdir, category_index);
- streaminfo_t *streaminfo = streaminfo_get_by_index(category, streaminfo_index);
-
- gtk_entry_set_text(GTK_ENTRY(search_entry), "");
- update_function(streamdir, category, streaminfo, TRUE);
-
- return TRUE;
-}
-
-static gboolean on_bookmark_button_clicked(GtkButton *button, gpointer data)
-{
- GtkTreePath *path;
- GtkTreeViewColumn *focus_column;
-
- /* get the currently selected tree view */
- GtkWidget *table = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
- streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_table(GTK_TABLE(table));
- if (streamdir_gui == NULL)
- return TRUE;
-
- GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
-
- /* get the currently selected path in the tree */
- gtk_tree_view_get_cursor(tree_view, &path, &focus_column);
-
- if (path == NULL)
- return TRUE;
-
- gint *indices = gtk_tree_path_get_indices(path);
- if (gtk_tree_path_get_depth(path) == 1) {
- gtk_tree_path_free(path);
- return TRUE;
- }
-
- int category_index = indices[0];
- int streaminfo_index = indices[1];
-
- gtk_tree_path_free(path);
-
- /* get the currently selected stream (info) */
- streamdir_t *streamdir = streamdir_gui->streamdir;
- category_t *category = category_get_by_index(streamdir_gui->streamdir, category_index);
- streaminfo_t *streaminfo = streaminfo_get_by_index(category, streaminfo_index);
-
- /* if we have the bookmarks tab focused, we remove the stream, rather than add it. otherwise we simply add it */
- if (strcmp(streamdir->name, BOOKMARKS_NAME) == 0) {
- bookmark_remove(streaminfo->name);
-
- update_function(streamdir, category, NULL, FALSE);
- }
- else {
- bookmark_t bookmark;
- strncpy(bookmark.streamdir_name, streamdir->name, DEF_STRING_LEN);
- strncpy(bookmark.name, streaminfo->name, DEF_STRING_LEN);
- strncpy(bookmark.playlist_url, streaminfo->playlist_url, DEF_STRING_LEN);
- strncpy(bookmark.url, streaminfo->url, DEF_STRING_LEN);
-
- bookmark_add(&bookmark);
-
- /* find the corresponding category (having the current streamdir name) in the bookmarks */
- streamdir_t *bookmarks_streamdir = find_streamdir_gui_by_name(BOOKMARKS_NAME)->streamdir;
- category_t *bookmarks_category = category_get_by_name(bookmarks_streamdir, streamdir->name);
-
- update_function(bookmarks_streamdir, bookmarks_category, NULL, FALSE);
- }
-
- return TRUE;
-}
-
-static gboolean on_search_entry_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
-{
- if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
- on_add_button_clicked(GTK_BUTTON(add_button), NULL);
- return TRUE;
- }
-
- if (event->keyval == GDK_Escape) {
- gtk_entry_set_text(GTK_ENTRY(search_entry), "");
- return FALSE;
- }
-
- return FALSE;
-}
-
-static gboolean on_tree_view_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
-{
- if (event->keyval == GDK_Down || event->keyval == GDK_Up)
- return FALSE;
- else
- if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
- on_add_button_clicked(GTK_BUTTON(add_button), NULL);
- return FALSE;
- }
-
- gtk_widget_grab_focus(search_entry);
- on_search_entry_key_pressed(widget, event, data);
-
- return TRUE;
-}
-
-static streamdir_gui_t *find_streamdir_gui_by_name(gchar *name)
-{
- GList *iterator;
- streamdir_gui_t *streamdir_gui;
-
- for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) {
- streamdir_gui = iterator->data;
-
- if (strcmp(streamdir_gui->streamdir->name, name) == 0)
- return streamdir_gui;
- }
-
- return NULL;
-}
-
-static streamdir_gui_t *find_streamdir_gui_by_table(GtkTable *table)
-{
- GList *iterator;
- streamdir_gui_t *streamdir_gui;
-
- for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) {
- streamdir_gui = iterator->data;
-
- if ((void *) streamdir_gui->table == (void *) table)
- return streamdir_gui;
- }
-
- return NULL;
-}
-
-static streamdir_gui_t* find_streamdir_gui_by_streamdir(streamdir_t *streamdir)
-{
- GList *iterator;
- streamdir_gui_t *streamdir_gui;
-
- for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) {
- streamdir_gui = iterator->data;
-
- if ((void *) streamdir_gui->streamdir == (void *) streamdir)
- return streamdir_gui;
- }
-
- return NULL;
-}
-
-static gboolean tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data)
-{
- if (column == -1)
- return TRUE;
-
- GValue value = {0, };
- gboolean ret;
-
- gtk_tree_model_get_value(model, iter, column, &value);
- const gchar *string = g_value_get_string(&value);
-
- if (string == NULL || string[0] == '\0' || key == NULL || key[0] == '\0')
- ret = TRUE;
-
- ret = !mystrcasestr(string, key);
-
- g_value_unset(&value);
-
- return ret;
-}
-
diff --git a/src/streambrowser/gui/streambrowser_win.h b/src/streambrowser/gui/streambrowser_win.h
deleted file mode 100644
index d993e2e..0000000
--- a/src/streambrowser/gui/streambrowser_win.h
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#ifndef STREAMBROWSER_WIN_H
-#define STREAMBROWSER_WIN_H
-
-#include "../streamdir.h"
-
-
-void streambrowser_win_init();
-void streambrowser_win_done();
-void streambrowser_win_show();
-void streambrowser_win_hide();
-
-void streambrowser_win_set_streamdir(streamdir_t *streamdir, gchar *icon_filename);
-void streambrowser_win_set_category(streamdir_t *streamdir, category_t *category);
-void streambrowser_win_set_streaminfo(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo);
-
-void streambrowser_win_set_update_function(void (* update_function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean add_to_playlist));
-void streambrowser_win_set_category_state(streamdir_t *streamdir, category_t *category, gboolean fetching);
-void streambrowser_win_set_streaminfo_state(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean fetching);
-
-
-#endif // STREAMBROWSER_WIN_H
-
diff --git a/src/streambrowser/images/bookmarks.png b/src/streambrowser/images/bookmarks.png
deleted file mode 100644
index f619287..0000000
--- a/src/streambrowser/images/bookmarks.png
+++ /dev/null
Binary files differ
diff --git a/src/streambrowser/images/shoutcast.png b/src/streambrowser/images/shoutcast.png
deleted file mode 100644
index 2a7c026..0000000
--- a/src/streambrowser/images/shoutcast.png
+++ /dev/null
Binary files differ
diff --git a/src/streambrowser/images/streambrowser-16x16.png b/src/streambrowser/images/streambrowser-16x16.png
deleted file mode 100644
index 9f7005b..0000000
--- a/src/streambrowser/images/streambrowser-16x16.png
+++ /dev/null
Binary files differ
diff --git a/src/streambrowser/images/streambrowser-64x64.png b/src/streambrowser/images/streambrowser-64x64.png
deleted file mode 100644
index f48959d..0000000
--- a/src/streambrowser/images/streambrowser-64x64.png
+++ /dev/null
Binary files differ
diff --git a/src/streambrowser/images/streambrowser.svg b/src/streambrowser/images/streambrowser.svg
deleted file mode 100644
index 22e8b65..0000000
--- a/src/streambrowser/images/streambrowser.svg
+++ /dev/null
@@ -1,251 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- width="128px"
- height="128px"
- id="RSSicon"
- viewBox="0 0 256 256"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docname="Feed-icon.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <metadata
- id="metadata33">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <sodipodi:namedview
- inkscape:window-height="967"
- inkscape:window-width="1225"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- guidetolerance="10.0"
- gridtolerance="10.0"
- objecttolerance="10.0"
- borderopacity="1.0"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- showgrid="false"
- inkscape:zoom="1.9296875"
- inkscape:cx="153.86031"
- inkscape:cy="-44.300212"
- inkscape:window-x="455"
- inkscape:window-y="57"
- inkscape:current-layer="RSSicon" />
- <defs
- id="defs3">
- <linearGradient
- id="linearGradient3744">
- <stop
- style="stop-color:#3c5aa0;stop-opacity:1;"
- offset="0"
- id="stop3746" />
- <stop
- id="stop3752"
- offset="0.2962963"
- style="stop-color:#5979c1;stop-opacity:1;" />
- <stop
- style="stop-color:#243660;stop-opacity:1;"
- offset="1"
- id="stop3748" />
- </linearGradient>
- <linearGradient
- id="linearGradient3210">
- <stop
- style="stop-color:#ff7326;stop-opacity:1;"
- offset="0"
- id="stop3212" />
- <stop
- id="stop3218"
- offset="1"
- style="stop-color:#ff7426;stop-opacity:1;" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 64 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="128 : 64 : 1"
- inkscape:persp3d-origin="64 : 42.666667 : 1"
- id="perspective35" />
- <linearGradient
- x1="0.085000001"
- y1="0.085000001"
- x2="0.91500002"
- y2="0.91500002"
- id="RSSg"
- xlink:href="#linearGradient3210">
- <stop
- offset="0"
- stop-color="#DE642B"
- id="stop16"
- style="stop-color:#768bc7;stop-opacity:1;" />
- <stop
- offset="1"
- stop-color="#D95B29"
- id="stop18"
- style="stop-color:#3c5aa0;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3210"
- id="linearGradient3216"
- x1="44"
- y1="125.5"
- x2="219"
- y2="125.5"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3210"
- id="linearGradient3226"
- x1="44"
- y1="155"
- x2="160"
- y2="155"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3210"
- id="linearGradient3234"
- x1="44"
- y1="189"
- x2="92"
- y2="189"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3210"
- id="linearGradient3275"
- gradientUnits="userSpaceOnUse"
- x1="44"
- y1="189"
- x2="92"
- y2="189" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3210"
- id="linearGradient3277"
- gradientUnits="userSpaceOnUse"
- x1="44"
- y1="155"
- x2="160"
- y2="155" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3210"
- id="linearGradient3279"
- gradientUnits="userSpaceOnUse"
- x1="44"
- y1="125.5"
- x2="219"
- y2="125.5" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3744"
- id="linearGradient3750"
- x1="23.191692"
- y1="29.795177"
- x2="234.27405"
- y2="226.20482"
- gradientUnits="userSpaceOnUse" />
- <filter
- inkscape:collect="always"
- id="filter3758">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="4.1217132"
- id="feGaussianBlur3760" />
- </filter>
- </defs>
- <rect
- width="256"
- height="256"
- rx="55"
- ry="55"
- x="0"
- y="0"
- id="rect20"
- style="fill:#2f477d;fill-opacity:1"
- fill="#CC5D15" />
- <rect
- width="246"
- height="246"
- rx="50"
- ry="50"
- x="5"
- y="5"
- id="rect22"
- style="fill:#6180c6;fill-opacity:1"
- fill="#F49C52" />
- <rect
- width="236"
- height="236"
- rx="47"
- ry="47"
- x="10"
- y="10"
- id="rect24"
- style="fill-opacity:1.0;fill:url(#linearGradient3750)"
- fill="url(#RSSg)" />
- <g
- id="g3289"
- style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;filter:url(#filter3758)"
- transform="matrix(-0.5614008,-0.5989944,-0.5948616,0.565301,279.23409,118.24669)">
- <circle
- style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
- id="circle3291"
- r="24"
- cy="189"
- cx="68"
- sodipodi:cx="68"
- sodipodi:cy="189"
- sodipodi:rx="24"
- sodipodi:ry="24" />
- <path
- style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
- id="path3293"
- d="M 160,213 L 126,213 C 126,167.71265 89.287349,131 44,131 L 44,97 C 108.06503,97 160,148.93497 160,213 z" />
- <path
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
- id="path3295"
- d="M 184,213 C 184,135.68014 121.31986,73 44,73 L 44,38 C 140.64983,38 219,116.35017 219,213 L 184,213 z" />
- </g>
- <g
- id="g3236"
- style="stroke:#000000;stroke-opacity:1"
- transform="matrix(-0.5614008,-0.5989945,-0.5948617,0.565301,277.11073,108.90355)">
- <circle
- style="fill:url(#linearGradient3275);fill-opacity:1;stroke:#000000;stroke-opacity:1"
- id="circle26"
- r="24"
- cy="189"
- cx="68"
- sodipodi:cx="68"
- sodipodi:cy="189"
- sodipodi:rx="24"
- sodipodi:ry="24" />
- <path
- style="fill:url(#linearGradient3277);fill-opacity:1;stroke:#000000;stroke-opacity:1"
- id="path28"
- d="M 160,213 L 126,213 C 126,167.71265 89.287349,131 44,131 L 44,97 C 108.06503,97 160,148.93497 160,213 z" />
- <path
- style="opacity:1;fill:url(#linearGradient3279);fill-opacity:1.0;stroke:#000000;stroke-opacity:1"
- id="path30"
- d="M 184,213 C 184,135.68014 121.31986,73 44,73 L 44,38 C 140.64983,38 219,116.35017 219,213 L 184,213 z" />
- </g>
-</svg>
diff --git a/src/streambrowser/images/xiph.png b/src/streambrowser/images/xiph.png
deleted file mode 100644
index 6e30b1a..0000000
--- a/src/streambrowser/images/xiph.png
+++ /dev/null
Binary files differ
diff --git a/src/streambrowser/shoutcast.c b/src/streambrowser/shoutcast.c
deleted file mode 100644
index c9f435d..0000000
--- a/src/streambrowser/shoutcast.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#include <string.h>
-#include <glib.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include <audacious/debug.h>
-#include <audacious/plugin.h>
-
-#include "streambrowser.h"
-#include "shoutcast.h"
-
-
-gboolean shoutcast_streaminfo_fetch (category_t * category,
- streaminfo_t * streaminfo)
-{
- gchar url[DEF_STRING_LEN];
- g_snprintf (url, DEF_STRING_LEN, SHOUTCAST_CATEGORY_URL, category->name);
-
- /* generate a valid, temporary filename */
- char *temp_filename = tempnam (NULL, "aud_sb");
- if (temp_filename == NULL)
- {
- failure ("shoutcast: failed to create a temporary file\n");
- return FALSE;
- }
-
- char temp_pathname[DEF_STRING_LEN];
- sprintf (temp_pathname, "file://%s", temp_filename);
-
- AUDDBG("shoutcast: fetching category file '%s'\n", url);
- if (!fetch_remote_to_local_file (url, temp_pathname))
- {
- failure
- ("shoutcast: category file '%s' could not be downloaded to '%s'\n",
- url, temp_pathname);
- free (temp_filename);
- return FALSE;
- }
- AUDDBG("shoutcast: category file '%s' successfuly downloaded to '%s'\n",
- url, temp_pathname);
-
- xmlDoc *doc = xmlReadFile (temp_pathname, NULL, 0);
- if (doc == NULL)
- {
- failure ("shoutcast: failed to read '%s' category file\n",
- category->name);
- free (temp_filename);
- return FALSE;
- }
-
- xmlNode *root_node = xmlDocGetRootElement (doc);
- xmlNode *node;
-
- root_node = root_node->children;
-
- for (node = root_node; node != NULL; node = node->next)
- {
- if (node->type == XML_ELEMENT_NODE
- && !strcmp ((char *) node->name, "station"))
- {
- gchar *streaminfo_name =
- (gchar *) xmlGetProp (node, (xmlChar *) "name");
- gchar *streaminfo_id =
- (gchar *) xmlGetProp (node, (xmlChar *) "id");
- gchar streaminfo_playlist_url[DEF_STRING_LEN];
- gchar *streaminfo_current_track =
- (gchar *) xmlGetProp (node, (xmlChar *) "ct");
-
- g_snprintf (streaminfo_playlist_url, DEF_STRING_LEN,
- SHOUTCAST_STREAMINFO_URL, streaminfo_id);
-
- if (strncmp
- (streaminfo_playlist_url, streaminfo->playlist_url,
- DEF_STRING_LEN) == 0)
- {
- AUDDBG
- ("shoutcast: updating stream info for '%s' with id %s from '%s'\n",
- streaminfo_name, streaminfo_id, url);
-
- strcpy (streaminfo->name, streaminfo_name);
- strcpy (streaminfo->playlist_url, streaminfo_playlist_url);
- strcpy (streaminfo->current_track, streaminfo_current_track);
-
- xmlFree (streaminfo_name);
- xmlFree (streaminfo_id);
- xmlFree (streaminfo_current_track);
-
- AUDDBG("shoutcast: stream info added\n");
-
- break;
- }
- }
- }
-
- xmlFreeDoc (doc);
-
- if (remove (temp_filename) != 0)
- {
- failure ("shoutcast: cannot remove the temporary file: %s\n",
- strerror (errno));
- }
- free (temp_filename);
-
- return TRUE;
-}
-
-gboolean shoutcast_category_fetch (streamdir_t * streamdir,
- category_t * category)
-{
- gchar url[DEF_STRING_LEN];
- g_snprintf (url, DEF_STRING_LEN, SHOUTCAST_CATEGORY_URL, category->name);
-
- /* generate a valid, temporary filename */
- char *temp_filename = tempnam (NULL, "aud_sb");
- if (temp_filename == NULL)
- {
- failure ("shoutcast: failed to create a temporary file\n");
- return FALSE;
- }
-
- char temp_pathname[DEF_STRING_LEN];
- sprintf (temp_pathname, "file://%s", temp_filename);
-
- AUDDBG("shoutcast: fetching category file '%s'\n", url);
- if (!fetch_remote_to_local_file (url, temp_pathname))
- {
- failure
- ("shoutcast: category file '%s' could not be downloaded to '%s'\n",
- url, temp_pathname);
- free (temp_filename);
- return FALSE;
- }
- AUDDBG("shoutcast: category file '%s' successfuly downloaded to '%s'\n",
- url, temp_pathname);
-
- xmlDoc *doc = xmlReadFile (temp_pathname, NULL, 0);
- if (doc == NULL)
- {
- failure ("shoutcast: failed to read '%s' category file\n",
- category->name);
- free (temp_filename);
- return FALSE;
- }
-
- /* free/remove any existing streaminfos in this category */
- while (streaminfo_get_count (category) > 0)
- streaminfo_remove (category, streaminfo_get_by_index (category, 0));
-
- xmlNode *root_node = xmlDocGetRootElement (doc);
- xmlNode *node;
-
- root_node = root_node->children;
-
- for (node = root_node; node != NULL; node = node->next)
- {
- if (node->type == XML_ELEMENT_NODE
- && !strcmp ((char *) node->name, "station"))
- {
- gchar *streaminfo_name =
- (gchar *) xmlGetProp (node, (xmlChar *) "name");
- gchar *streaminfo_id =
- (gchar *) xmlGetProp (node, (xmlChar *) "id");
- gchar streaminfo_playlist_url[DEF_STRING_LEN];
- gchar *streaminfo_current_track =
- (gchar *) xmlGetProp (node, (xmlChar *) "ct");
-
- g_snprintf (streaminfo_playlist_url, DEF_STRING_LEN,
- SHOUTCAST_STREAMINFO_URL, streaminfo_id);
-
- AUDDBG("shoutcast: adding stream info for '%s/%s' from '%s'\n",
- streaminfo_name, streaminfo_id, url);
-
- streaminfo_t *streaminfo =
- streaminfo_new (streaminfo_name, streaminfo_playlist_url, "",
- streaminfo_current_track);
- streaminfo_add (category, streaminfo);
-
- xmlFree (streaminfo_name);
- xmlFree (streaminfo_id);
- xmlFree (streaminfo_current_track);
-
- AUDDBG("shoutcast: stream info added\n");
- }
- }
-
- xmlFreeDoc (doc);
-
- if (remove (temp_filename) != 0)
- {
- failure ("shoutcast: cannot remove the temporary file: %s\n",
- strerror (errno));
- }
- free (temp_filename);
-
- return TRUE;
-}
-
-
-streamdir_t *shoutcast_streamdir_fetch ()
-{
- streamdir_t *streamdir = streamdir_new (SHOUTCAST_NAME);
-
- /* generate a valid, temporary filename */
- char *temp_filename = tempnam (NULL, "aud_sb");
- if (temp_filename == NULL)
- {
- failure ("shoutcast: failed to create a temporary file\n");
- return NULL;
- }
-
- char temp_pathname[DEF_STRING_LEN];
- sprintf (temp_pathname, "file://%s", temp_filename);
-
- AUDDBG("shoutcast: fetching streaming directory file '%s'\n",
- SHOUTCAST_STREAMDIR_URL);
- if (!fetch_remote_to_local_file (SHOUTCAST_STREAMDIR_URL, temp_pathname))
- {
- failure
- ("shoutcast: stream directory file '%s' could not be downloaded to '%s'\n",
- SHOUTCAST_STREAMDIR_URL, temp_pathname);
- free (temp_filename);
- return NULL;
- }
- AUDDBG
- ("shoutcast: stream directory file '%s' successfuly downloaded to '%s'\n",
- SHOUTCAST_STREAMDIR_URL, temp_pathname);
-
- xmlDoc *doc = xmlReadFile (temp_pathname, NULL, 0);
- if (doc == NULL)
- {
- failure ("shoutcast: failed to read stream directory file\n");
- free (temp_filename);
- return NULL;
- }
-
- xmlNode *root_node = xmlDocGetRootElement (doc);
- xmlNode *node;
-
- root_node = root_node->children;
-
- for (node = root_node; node != NULL; node = node->next)
- {
- if (node->type == XML_ELEMENT_NODE)
- {
- gchar *category_name =
- (gchar *) xmlGetProp (node, (xmlChar *) "name");
-
- AUDDBG("shoutcast: fetching category '%s'\n", category_name);
-
- category_t *category = category_new (category_name);
- category_add (streamdir, category);
-
- xmlFree (category_name);
-
- AUDDBG("shoutcast: category added: %s.\n", category_name);
- }
- }
-
- xmlFreeDoc (doc);
-
- if (remove (temp_filename) != 0)
- {
- failure ("shoutcast: cannot remove the temporary file: %s\n",
- strerror (errno));
- }
- free (temp_filename);
-
- AUDDBG("shoutcast: streaming directory successfuly loaded\n");
-
- return streamdir;
-}
diff --git a/src/streambrowser/shoutcast.h b/src/streambrowser/shoutcast.h
deleted file mode 100644
index 1e2a9ad..0000000
--- a/src/streambrowser/shoutcast.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#ifndef SHOUTCAST_H
-#define SHOUTCAST_H
-
-#include "streambrowser.h"
-#include "streamdir.h"
-
-#define SHOUTCAST_NAME "Shoutcast"
-#define SHOUTCAST_ICON DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "shoutcast.png"
-#define SHOUTCAST_STREAMDIR_URL "http://classic.shoutcast.com/sbin/newxml.phtml"
-#define SHOUTCAST_CATEGORY_URL "http://classic.shoutcast.com/sbin/newxml.phtml?genre=%s"
-#define SHOUTCAST_STREAMINFO_URL "http://classic.shoutcast.com/sbin/shoutcast-playlist.pls?rn=%s&file=filename.pls"
-
-
-gboolean shoutcast_streaminfo_fetch (category_t * category,
- streaminfo_t * streaminfo);
-gboolean shoutcast_category_fetch (streamdir_t * streamdir,
- category_t * category);
-streamdir_t *shoutcast_streamdir_fetch ();
-
-
-#endif // SHOUTCAST_H
diff --git a/src/streambrowser/streambrowser.c b/src/streambrowser/streambrowser.c
deleted file mode 100644
index 5ff167a..0000000
--- a/src/streambrowser/streambrowser.c
+++ /dev/null
@@ -1,758 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#include <stdlib.h>
-#include <gtk/gtk.h>
-#include <glib.h>
-
-#include <audacious/configdb.h>
-#include <audacious/debug.h>
-#include <audacious/misc.h>
-#include <audacious/playlist.h>
-#include <audacious/plugin.h>
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-
-#include "streambrowser.h"
-#include "streamdir.h"
-#include "shoutcast.h"
-#include "xiph.h"
-#include "bookmarks.h"
-#include "gui/streambrowser_win.h"
-
-
-typedef struct
-{
- bookmark_t *bookmarks;
- int bookmarks_count;
-}
-streambrowser_cfg_t;
-
-typedef struct
-{
- streamdir_t *streamdir;
- category_t *category;
- streaminfo_t *streaminfo;
- gboolean add_to_playlist;
-}
-update_thread_data_t;
-
-
-static void sb_init ();
-static void sb_about ();
-static void sb_configure ();
-static void sb_cleanup ();
-
-static void gui_init ();
-static void gui_done ();
-
-static void streamdir_update (streamdir_t * streamdir, category_t * category,
- streaminfo_t * streaminfo,
- gboolean add_to_playlist);
-static gpointer update_thread_core (gpointer user_data);
-static void streaminfo_add_to_playlist (streaminfo_t * streaminfo);
-static void on_plugin_services_menu_item_click ();
-
-static GtkWidget *playlist_menu_item;
-static GtkWidget *main_menu_item;
-static GQueue *update_thread_data_queue = NULL;
-static GMutex *update_thread_mutex = NULL;
-
-streambrowser_cfg_t streambrowser_cfg;
-
-static GeneralPlugin sb_plugin =
-{
- .description = "Stream Browser",
- .init = sb_init,
- .about = sb_about,
- .configure = sb_configure,
- .cleanup = sb_cleanup
-};
-
-GeneralPlugin *sb_gplist[] =
-{
- &sb_plugin,
- NULL
-};
-
-SIMPLE_GENERAL_PLUGIN (streambrowser, sb_gplist);
-
-void failure (const char *fmt, ...)
-{
- va_list ap;
- fprintf (stderr, "! streambrowser: ");
- va_start (ap, fmt);
- vfprintf (stderr, fmt, ap);
- va_end (ap);
-}
-
-gboolean fetch_remote_to_local_file (gchar * remote_url, gchar * local_url)
-{
- VFSFile *remote_file = vfs_fopen (remote_url, "r");
- if (remote_file == NULL)
- {
- failure ("failed to fetch file '%s'\n", remote_url);
- return FALSE;
- }
-
- VFSFile *local_file = vfs_fopen (local_url, "w");
- if (local_file == NULL)
- {
- vfs_fclose (remote_file);
-
- failure ("failed to create local file '%s'\n", local_file);
- return FALSE;
- }
-
- unsigned char buff[DEF_BUFFER_SIZE];
- int size;
- while (!vfs_feof (remote_file))
- {
- size = vfs_fread (buff, 1, DEF_BUFFER_SIZE, remote_file);
-
- // i don't know why vfs_feof() doesn't ever return TRUE
- // so this is a workaround to properly end the loop
- if (size == 0)
- break;
-
- size = vfs_fwrite (buff, 1, size, local_file);
- if (size == 0)
- {
- vfs_fclose (local_file);
- vfs_fclose (remote_file);
-
- failure ("failed to write to local file '%s'\n", local_file);
- return FALSE;
- }
- }
-
- vfs_fclose (local_file);
- vfs_fclose (remote_file);
-
- return TRUE;
-}
-
-void config_load ()
-{
- streambrowser_cfg.bookmarks = NULL;
- streambrowser_cfg.bookmarks_count = 0;
-
- mcs_handle_t *db;
- if ((db = aud_cfg_db_open ()) == NULL)
- {
- failure ("failed to load configuration\n");
- return;
- }
-
- aud_cfg_db_get_int (db, "streambrowser", "bookmarks_count",
- &streambrowser_cfg.bookmarks_count);
-
- if (streambrowser_cfg.bookmarks_count == 0)
- streambrowser_cfg.bookmarks = NULL;
- else
- streambrowser_cfg.bookmarks =
- g_malloc (sizeof (bookmark_t) * streambrowser_cfg.bookmarks_count);
-
- int i;
- gchar item[DEF_STRING_LEN];
- gchar *value;
- for (i = 0; i < streambrowser_cfg.bookmarks_count; i++)
- {
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i);
- if (aud_cfg_db_get_string (db, "streambrowser", item, &value))
- {
- strncpy (streambrowser_cfg.bookmarks[i].streamdir_name, value,
- DEF_STRING_LEN);
- g_free (value);
- }
- else
- streambrowser_cfg.bookmarks[i].streamdir_name[0] = '\0';
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_name", i);
- if (aud_cfg_db_get_string (db, "streambrowser", item, &value))
- {
- strncpy (streambrowser_cfg.bookmarks[i].name, value,
- DEF_STRING_LEN);
- g_free (value);
- }
- else
- streambrowser_cfg.bookmarks[i].name[0] = '\0';
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_playlist_url", i);
- if (aud_cfg_db_get_string (db, "streambrowser", item, &value))
- {
- strncpy (streambrowser_cfg.bookmarks[i].playlist_url, value,
- DEF_STRING_LEN);
- g_free (value);
- }
- else
- streambrowser_cfg.bookmarks[i].playlist_url[0] = '\0';
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_url", i);
- if (aud_cfg_db_get_string (db, "streambrowser", item, &value))
- {
- strncpy (streambrowser_cfg.bookmarks[i].url, value, DEF_STRING_LEN);
- g_free (value);
- }
- else
- streambrowser_cfg.bookmarks[i].url[0] = '\0';
-
- AUDDBG
- ("loaded a bookmark with streamdir_name = '%s', name = '%s', playlist_url = '%s', url = '%s'\n",
- streambrowser_cfg.bookmarks[i].streamdir_name,
- streambrowser_cfg.bookmarks[i].name,
- streambrowser_cfg.bookmarks[i].playlist_url,
- streambrowser_cfg.bookmarks[i].url);
- }
-
- AUDDBG("loaded %d bookmarks\n", streambrowser_cfg.bookmarks_count);
-
- aud_cfg_db_close (db);
-
- AUDDBG("configuration loaded\n");
-}
-
-void config_save ()
-{
- mcs_handle_t *db;
- if ((db = aud_cfg_db_open ()) == NULL)
- {
- failure ("failed to save configuration\n");
- return;
- }
-
- int old_bookmarks_count = 0, i;
- gchar item[DEF_STRING_LEN];
- aud_cfg_db_get_int (db, "streambrowser", "bookmarks_count",
- &old_bookmarks_count);
- aud_cfg_db_set_int (db, "streambrowser", "bookmarks_count",
- streambrowser_cfg.bookmarks_count);
-
- for (i = 0; i < streambrowser_cfg.bookmarks_count; i++)
- {
- AUDDBG
- ("saving bookmark with streamdir_name = '%s', name = '%s', playlist_url = '%s', url = '%s'\n",
- streambrowser_cfg.bookmarks[i].streamdir_name,
- streambrowser_cfg.bookmarks[i].name,
- streambrowser_cfg.bookmarks[i].playlist_url,
- streambrowser_cfg.bookmarks[i].url);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i);
- aud_cfg_db_set_string (db, "streambrowser", item,
- streambrowser_cfg.bookmarks[i].streamdir_name);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_name", i);
- aud_cfg_db_set_string (db, "streambrowser", item,
- streambrowser_cfg.bookmarks[i].name);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_playlist_url", i);
- aud_cfg_db_set_string (db, "streambrowser", item,
- streambrowser_cfg.bookmarks[i].playlist_url);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_url", i);
- aud_cfg_db_set_string (db, "streambrowser", item,
- streambrowser_cfg.bookmarks[i].url);
- }
-
- for (i = streambrowser_cfg.bookmarks_count; i < old_bookmarks_count; i++)
- {
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_streamdir_name", i);
- aud_cfg_db_unset_key (db, "streambrowser", item);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_name", i);
- aud_cfg_db_unset_key (db, "streambrowser", item);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_playlist_url", i);
- aud_cfg_db_unset_key (db, "streambrowser", item);
-
- g_snprintf (item, DEF_STRING_LEN, "bookmark%d_url", i);
- aud_cfg_db_unset_key (db, "streambrowser", item);
- }
-
- aud_cfg_db_close (db);
-
- AUDDBG("configuration saved\n");
-}
-
-gboolean mystrcasestr (const char *haystack, const char *needle)
-{
- int len_h = strlen (haystack) + 1;
- int len_n = strlen (needle) + 1;
- int i;
-
- char *upper_h = malloc (len_h);
- char *upper_n = malloc (len_n);
-
- for (i = 0; i < len_h; i++)
- upper_h[i] = toupper (haystack[i]);
- for (i = 0; i < len_n; i++)
- upper_n[i] = toupper (needle[i]);
-
- char *p = strstr (upper_h, upper_n);
-
- free (upper_h);
- free (upper_n);
-
- if (p != NULL)
- return TRUE;
- else
- return FALSE;
-}
-
-
-static void sb_init ()
-{
- AUDDBG("sb_init()\n");
- config_load ();
- gui_init ();
-}
-
-static void sb_about (void)
-{
- static GtkWidget * about_window = NULL;
-
- audgui_simple_message (& about_window, GTK_MESSAGE_INFO,
- _("About Stream Browser"),
- _("Copyright (c) 2008, by Calin Crisan <ccrisan@gmail.com> and The Audacious Team.\n\n"
- "This is a simple stream browser that includes the most popular streaming directories.\n"
- "Many thanks to the Streamtuner developers <http://www.nongnu.org/streamtuner>,\n"
- "\tand of course to the whole Audacious community.\n\n"
- "Also thank you Tony Vroon for mentoring & guiding me, again.\n\n"
- "This was a Google Summer of Code 2008 project."));
-}
-
-static void sb_configure ()
-{
- AUDDBG("sb_configure()\n");
-}
-
-static void sb_cleanup ()
-{
- AUDDBG("sb_cleanup()\n");
-
- gui_done ();
- config_save ();
-}
-
-static void gui_init ()
-{
- /* the plugin services menu */
- playlist_menu_item =
- gtk_image_menu_item_new_with_label (_("Streambrowser"));
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (playlist_menu_item),
- gtk_image_new_from_file
- (STREAMBROWSER_ICON_SMALL));
- gtk_widget_show (playlist_menu_item);
- g_signal_connect (G_OBJECT (playlist_menu_item), "activate",
- G_CALLBACK (on_plugin_services_menu_item_click), NULL);
- aud_menu_plugin_item_add (AUDACIOUS_MENU_PLAYLIST_RCLICK,
- playlist_menu_item);
-
- main_menu_item = gtk_image_menu_item_new_with_label (_("Streambrowser"));
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (main_menu_item),
- gtk_image_new_from_file
- (STREAMBROWSER_ICON_SMALL));
- gtk_widget_show (main_menu_item);
- g_signal_connect (G_OBJECT (main_menu_item), "activate",
- G_CALLBACK (on_plugin_services_menu_item_click), NULL);
- aud_menu_plugin_item_add (AUDACIOUS_MENU_MAIN, main_menu_item);
-
- /* main streambrowser window */
- streambrowser_win_init ();
- streambrowser_win_set_update_function (streamdir_update);
-
- /* others */
- update_thread_mutex = g_mutex_new ();
- update_thread_data_queue = g_queue_new ();
-
- AUDDBG("gui initialized\n");
-}
-
-static void gui_done ()
-{
- /* the plugin services menu */
- aud_menu_plugin_item_remove (AUDACIOUS_MENU_PLAYLIST_RCLICK,
- playlist_menu_item);
- aud_menu_plugin_item_remove (AUDACIOUS_MENU_MAIN, main_menu_item);
-
- /* main streambrowser window */
- streambrowser_win_hide ();
- streambrowser_win_done ();
-
- /* others */
- if (update_thread_mutex)
- g_mutex_free (update_thread_mutex);
- update_thread_mutex = NULL;
- if (update_thread_data_queue)
- g_queue_free (update_thread_data_queue);
- update_thread_data_queue = NULL;
-
- AUDDBG("gui destroyed\n");
-}
-
-static void streamdir_update (streamdir_t * streamdir, category_t * category,
- streaminfo_t * streaminfo,
- gboolean add_to_playlist)
-{
- AUDDBG
- ("requested streamdir update (streamdir = '%s', category = '%s', streaminfo = '%s', add_to_playlist = %d)\n",
- streamdir == NULL ? "" : streamdir->name,
- category == NULL ? "" : category->name,
- streaminfo == NULL ? "" : streaminfo->name, add_to_playlist);
-
- if (g_queue_get_length (update_thread_data_queue) >= MAX_UPDATE_THREADS)
- {
- AUDDBG
- ("another %d streamdir updates are pending, this request will be dropped\n",
- g_queue_get_length (update_thread_data_queue));
- }
- else
- {
- g_mutex_lock (update_thread_mutex);
-
- /* do we have a running thread? */
- if (g_queue_get_length (update_thread_data_queue) > 0)
- {
- int i;
- gboolean exists = FALSE;
- update_thread_data_t *update_thread_data;
-
- /* search for another identic update request */
- for (i = 0; i < g_queue_get_length (update_thread_data_queue); i++)
- {
- update_thread_data =
- g_queue_peek_nth (update_thread_data_queue, i);
- if (update_thread_data->streamdir == streamdir
- && update_thread_data->category == category
- && update_thread_data->streaminfo == streaminfo
- && update_thread_data->add_to_playlist == add_to_playlist)
- {
- exists = TRUE;
- break;
- }
- }
-
- /* if no other similar request exists, we enqueue it */
- if (!exists)
- {
- AUDDBG
- ("another %d streamdir updates are pending, this request will be queued\n",
- g_queue_get_length (update_thread_data_queue));
-
- update_thread_data = g_malloc (sizeof (update_thread_data_t));
-
- update_thread_data->streamdir = streamdir;
- update_thread_data->category = category;
- update_thread_data->streaminfo = streaminfo;
- update_thread_data->add_to_playlist = add_to_playlist;
-
- g_queue_push_tail (update_thread_data_queue,
- update_thread_data);
- }
- else
- {
- AUDDBG
- ("this request is already present in the queue, dropping\n");
- }
- }
- /* no thread is currently running, we start one */
- else
- {
- AUDDBG
- ("no other streamdir updates are pending, starting to process this request immediately\n");
-
- update_thread_data_t *data =
- g_malloc (sizeof (update_thread_data_t));
-
- data->streamdir = streamdir;
- data->category = category;
- data->streaminfo = streaminfo;
- data->add_to_playlist = add_to_playlist;
-
- g_queue_push_tail (update_thread_data_queue, data);
-
- g_thread_create ((GThreadFunc) update_thread_core, NULL, FALSE,
- NULL);
- }
-
- g_mutex_unlock (update_thread_mutex);
- }
-}
-
-static gpointer update_thread_core (gpointer user_data)
-{
- AUDDBG("entering update thread core\n");
-
- /* try to get the last item in the queue, but don't remove it */
- g_mutex_lock (update_thread_mutex);
- update_thread_data_t *data = NULL;
- if (g_queue_get_length (update_thread_data_queue) > 0)
- {
- data = g_queue_peek_head (update_thread_data_queue);
- }
- g_mutex_unlock (update_thread_mutex);
-
- /* repetitively process the queue elements, until queue is empty */
- while (data != NULL && g_queue_get_length (update_thread_data_queue) > 0)
- {
- if (data->streamdir && !streamdir_is_valid(data->streamdir)) {
- g_free(data);
- g_mutex_lock(update_thread_mutex);
- /* remove the just processed data from the queue */
- g_queue_pop_head(update_thread_data_queue);
- /* try to get the last item in the queue */
- if (g_queue_get_length(update_thread_data_queue) > 0)
- data = g_queue_peek_head(update_thread_data_queue);
- else
- data = NULL;
- g_mutex_unlock(update_thread_mutex);
- continue;
- }
- /* update a streaminfo */
- if (data->streaminfo != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streaminfo_state (data->streamdir,
- data->category,
- data->streaminfo, TRUE);
- gdk_threads_leave ();
-
- if (data->add_to_playlist)
- streaminfo_add_to_playlist (data->streaminfo);
- else
- {
- /* shoutcast */
- if (strncmp
- (data->streamdir->name, SHOUTCAST_NAME,
- strlen (SHOUTCAST_NAME)) == 0)
- {
- shoutcast_streaminfo_fetch (data->category,
- data->streaminfo);
- }
- /* xiph */
- else if (strncmp
- (data->streamdir->name, XIPH_NAME,
- strlen (XIPH_NAME)) == 0)
- {
- xiph_streaminfo_fetch (data->category, data->streaminfo);
- }
- /* bookmarks */
- else if (strncmp
- (data->streamdir->name, BOOKMARKS_NAME,
- strlen (BOOKMARKS_NAME)) == 0)
- {
- bookmarks_streaminfo_fetch (data->category,
- data->streaminfo);
- }
- }
-
- gdk_threads_enter ();
- if (!data->add_to_playlist)
- streambrowser_win_set_streaminfo (data->streamdir,
- data->category,
- data->streaminfo);
- streambrowser_win_set_streaminfo_state (data->streamdir,
- data->category,
- data->streaminfo, FALSE);
- gdk_threads_leave ();
- }
- /* update a category */
- else if (data->category != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_category_state (data->streamdir,
- data->category, TRUE);
- gdk_threads_leave ();
-
- /* shoutcast */
- if (strncmp
- (data->streamdir->name, SHOUTCAST_NAME,
- strlen (SHOUTCAST_NAME)) == 0)
- {
- shoutcast_category_fetch (data->streamdir, data->category);
- }
- /* xiph */
- else if (strncmp
- (data->streamdir->name, XIPH_NAME,
- strlen (XIPH_NAME)) == 0)
- {
- xiph_category_fetch (data->streamdir, data->category);
- }
- /* bookmarks */
- else if (strncmp
- (data->streamdir->name, BOOKMARKS_NAME,
- strlen (BOOKMARKS_NAME)) == 0)
- {
- bookmarks_category_fetch (data->streamdir, data->category);
- }
-
- gdk_threads_enter ();
- streambrowser_win_set_category (data->streamdir, data->category);
- streambrowser_win_set_category_state (data->streamdir,
- data->category, FALSE);
- gdk_threads_leave ();
- }
- /* update a streamdir */
- else if (data->streamdir != NULL)
- {
- /* shoutcast */
- if (strncmp
- (data->streamdir->name, SHOUTCAST_NAME,
- strlen (SHOUTCAST_NAME)) == 0)
- {
- streamdir_t *streamdir = shoutcast_streamdir_fetch ();
- if (streamdir != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streamdir (streamdir, SHOUTCAST_ICON);
- gdk_threads_leave ();
- }
- }
- /* xiph */
- else if (strncmp
- (data->streamdir->name, XIPH_NAME,
- strlen (XIPH_NAME)) == 0)
- {
- streamdir_t *streamdir = xiph_streamdir_fetch ();
- if (streamdir != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streamdir (streamdir, XIPH_ICON);
- gdk_threads_leave ();
- }
- }
- /* bookmarks */
- else if (strncmp
- (data->streamdir->name, BOOKMARKS_NAME,
- strlen (BOOKMARKS_NAME)) == 0)
- {
- streamdir_t *streamdir =
- bookmarks_streamdir_fetch (&streambrowser_cfg.bookmarks,
- &streambrowser_cfg.bookmarks_count);
- if (streamdir != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streamdir (streamdir, BOOKMARKS_ICON);
- gdk_threads_leave ();
- }
- }
- }
- /* update all streamdirs */
- else
- {
- /* shoutcast */
- streamdir_t *streamdir = shoutcast_streamdir_fetch ();
- if (streamdir != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streamdir (streamdir, SHOUTCAST_ICON);
- gdk_threads_leave ();
- }
- /* xiph */
- streamdir = xiph_streamdir_fetch ();
- if (streamdir != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streamdir (streamdir, XIPH_ICON);
- gdk_threads_leave ();
- }
- /* bookmarks */
- streamdir =
- bookmarks_streamdir_fetch (&streambrowser_cfg.bookmarks,
- &streambrowser_cfg.bookmarks_count);
- if (streamdir != NULL)
- {
- gdk_threads_enter ();
- streambrowser_win_set_streamdir (streamdir, BOOKMARKS_ICON);
- gdk_threads_leave ();
-
- int i;
- for (i = 0; i < category_get_count (streamdir); i++)
- streamdir_update (streamdir,
- category_get_by_index (streamdir, i),
- NULL, FALSE);
- }
- }
-
- g_free (data);
-
- g_mutex_lock (update_thread_mutex);
-
- /* remove the just processed data from the queue */
- g_queue_pop_head (update_thread_data_queue);
-
- /* try to get the last item in the queue */
- if (g_queue_get_length (update_thread_data_queue) > 0)
- data = g_queue_peek_head (update_thread_data_queue);
- else
- data = NULL;
-
- g_mutex_unlock (update_thread_mutex);
- }
-
- AUDDBG("leaving update thread core\n");
-
- return NULL;
-}
-
-static void streaminfo_add_to_playlist (streaminfo_t * streaminfo)
-{
- gint playlist = aud_playlist_get_active ();
- gchar * unix_name = g_build_filename (aud_util_get_localdir (),
- PLAYLIST_TEMP_FILE, NULL);
- gchar * uri_name = g_filename_to_uri (unix_name, NULL, NULL);
-
- if (strlen (streaminfo->playlist_url) > 0)
- {
- AUDDBG("fetching stream playlist for station '%s' from '%s'\n",
- streaminfo->name, streaminfo->playlist_url);
-
- if (! fetch_remote_to_local_file (streaminfo->playlist_url, uri_name))
- {
- failure ("shoutcast: stream playlist '%s' could not be downloaded "
- "to '%s'\n", streaminfo->playlist_url, uri_name);
- goto DONE;
- }
-
- AUDDBG("stream playlist '%s' successfuly downloaded to '%s'\n",
- streaminfo->playlist_url, uri_name);
-
- aud_playlist_insert_playlist (playlist, -1, uri_name);
- AUDDBG("stream playlist '%s' added\n", streaminfo->playlist_url);
- }
-
- if (strlen (streaminfo->url) > 0)
- {
- aud_playlist_entry_insert (playlist, -1, g_strdup (streaminfo->url),
- NULL);
- AUDDBG("stream '%s' added\n", streaminfo->url);
- }
-
-DONE:
- g_free (unix_name);
- g_free (uri_name);
-}
-
-static void on_plugin_services_menu_item_click ()
-{
- AUDDBG("on_plugin_services_menu_item_click()\n");
-
- streambrowser_win_show ();
- streamdir_update (NULL, NULL, NULL, FALSE);
-}
diff --git a/src/streambrowser/streambrowser.h b/src/streambrowser/streambrowser.h
deleted file mode 100644
index 6950ca6..0000000
--- a/src/streambrowser/streambrowser.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#ifndef STREAMBROWSER_H
-#define STREAMBROWSER_H
-
-#define DEF_STRING_LEN 1024
-#define DEF_BUFFER_SIZE 512
-#define MAX_UPDATE_THREADS 4
-#define PLAYLIST_TEMP_FILE "streambrowser-playlist-temp.pls"
-#define STREAMBROWSER_ICON_SMALL DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "streambrowser-16x16.png"
-#define STREAMBROWSER_ICON DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "streambrowser-64x64.png"
-
-
-#include <glib.h>
-
-#include <config.h>
-#include <audacious/i18n.h>
-
-
-void failure (const char *fmt, ...);
-gboolean fetch_remote_to_local_file (gchar * remote_url, gchar * local_url);
-
-void config_load ();
-void config_save ();
-
- /* returns true if the substring has been found, false otherwise */
-gboolean mystrcasestr (const char *haystack, const char *needle);
-
-
-#endif // STREAMBROWSER_H
diff --git a/src/streambrowser/streamdir.c b/src/streambrowser/streamdir.c
deleted file mode 100644
index bb99499..0000000
--- a/src/streambrowser/streamdir.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#include <string.h>
-#include <glib.h>
-
-#include "streambrowser.h"
-#include "streamdir.h"
-
-static GList *all_streamdirs = NULL;
-
-gboolean streamdir_is_valid(streamdir_t *streamdir) {
- return (NULL != g_list_find(all_streamdirs,streamdir));
-}
-
-streamdir_t *streamdir_new (gchar * name)
-{
- streamdir_t *streamdir = (streamdir_t *) g_malloc (sizeof (streamdir_t));
- strncpy (streamdir->name, name, DEF_STRING_LEN);
- streamdir->category_list = NULL;
-
- all_streamdirs = g_list_append(all_streamdirs,streamdir);
- return streamdir;
-}
-
-void streamdir_delete (streamdir_t * streamdir)
-{
- GList *iterator;
- category_t *category;
-
- for (iterator = g_list_first (streamdir->category_list); iterator != NULL;
- iterator = g_list_next (iterator))
- {
- category = iterator->data;
- category_delete (category);
- }
-
- g_list_free (streamdir->category_list);
- g_free (streamdir);
- all_streamdirs = g_list_remove(all_streamdirs,streamdir);
-}
-
-category_t *category_new (gchar * name)
-{
- category_t *category = (category_t *) g_malloc (sizeof (category_t));
- strncpy (category->name, name, DEF_STRING_LEN);
- category->streaminfo_list = NULL;
-
- return category;
-}
-
-void category_delete (category_t * category)
-{
- GList *iterator;
- streaminfo_t *streaminfo;
-
- for (iterator = g_list_first (category->streaminfo_list); iterator != NULL;
- iterator = g_list_next (iterator))
- {
- streaminfo = iterator->data;
- streaminfo_delete (streaminfo);
- }
-
- g_list_free (category->streaminfo_list);
- g_free (category);
-}
-
-void category_add (streamdir_t * streamdir, category_t * category)
-{
- streamdir->category_list =
- g_list_append (streamdir->category_list, category);
-}
-
-void category_remove (streamdir_t * streamdir, category_t * category)
-{
- streamdir->category_list =
- g_list_remove (streamdir->category_list, category);
-}
-
-category_t *category_get_by_index (streamdir_t * streamdir, gint index)
-{
- return (category_t *) g_list_nth_data (streamdir->category_list, index);
-}
-
-category_t *category_get_by_name (streamdir_t * streamdir, gchar * name)
-{
- GList *iterator;
- category_t *category;
-
- for (iterator = g_list_first (streamdir->category_list); iterator != NULL;
- iterator = g_list_next (iterator))
- {
- category = iterator->data;
- if (strncasecmp (category->name, name, DEF_STRING_LEN) == 0)
- return category;
- }
-
- return NULL;
-}
-
-gint category_get_count (streamdir_t * streamdir)
-{
- return g_list_length (streamdir->category_list);
-}
-
-gint category_get_index (streamdir_t * streamdir, category_t * category)
-{
- return g_list_index (streamdir->category_list, category);
-}
-
-
-streaminfo_t *streaminfo_new (gchar * name, gchar * playlist_url, gchar * url,
- gchar * current_track)
-{
- streaminfo_t *streaminfo =
- (streaminfo_t *) g_malloc (sizeof (streaminfo_t));
- strncpy (streaminfo->name, name, DEF_STRING_LEN);
- strncpy (streaminfo->playlist_url, playlist_url, DEF_STRING_LEN);
- strncpy (streaminfo->url, url, DEF_STRING_LEN);
- strncpy (streaminfo->current_track, current_track, DEF_STRING_LEN);
-
- return streaminfo;
-}
-
-void streaminfo_delete (streaminfo_t * streaminfo)
-{
- g_free (streaminfo);
-}
-
-void streaminfo_add (category_t * category, streaminfo_t * streaminfo)
-{
- category->streaminfo_list =
- g_list_append (category->streaminfo_list, streaminfo);
-}
-
-void streaminfo_remove (category_t * category, streaminfo_t * streaminfo)
-{
- category->streaminfo_list =
- g_list_remove (category->streaminfo_list, streaminfo);
-}
-
-streaminfo_t *streaminfo_get_by_index (category_t * category, gint index)
-{
- return (streaminfo_t *) g_list_nth_data (category->streaminfo_list, index);
-}
-
-streaminfo_t *streaminfo_get_by_name (category_t * category, gchar * name)
-{
- GList *iterator;
- streaminfo_t *streaminfo;
-
- for (iterator = g_list_first (category->streaminfo_list); iterator != NULL;
- iterator = g_list_next (iterator))
- {
- streaminfo = iterator->data;
- if (strncasecmp (streaminfo->name, name, DEF_STRING_LEN) == 0)
- return streaminfo;
- }
-
- return NULL;
-}
-
-gint streaminfo_get_count (category_t * category)
-{
- return g_list_length (category->streaminfo_list);
-}
-
-gint streaminfo_get_index (category_t * category, streaminfo_t * streaminfo)
-{
- return g_list_index (category->streaminfo_list, streaminfo);
-}
diff --git a/src/streambrowser/streamdir.h b/src/streambrowser/streamdir.h
deleted file mode 100644
index 10597cf..0000000
--- a/src/streambrowser/streamdir.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#ifndef STREAMDIR_H
-#define STREAMDIR_H
-
-#include <glib.h>
-
-#include "streambrowser.h"
-
-
-typedef struct
-{
- gchar name[DEF_STRING_LEN];
- gchar playlist_url[DEF_STRING_LEN];
- gchar url[DEF_STRING_LEN];
- gchar current_track[DEF_STRING_LEN];
-}
-streaminfo_t;
-
-typedef struct
-{
- gchar name[DEF_STRING_LEN];
- GList *streaminfo_list;
-}
-category_t;
-
-typedef struct
-{
- gchar name[DEF_STRING_LEN];
- GList *category_list;
-}
-streamdir_t;
-
-gboolean streamdir_is_valid(streamdir_t *streamdir);
-
-streamdir_t *streamdir_new (gchar * name);
-void streamdir_delete (streamdir_t * streamdir);
-
-category_t *category_new (gchar * name);
-void category_delete (category_t * category);
-void category_add (streamdir_t * streamdir, category_t * category);
-void category_remove (streamdir_t * streamdir, category_t * category);
-category_t *category_get_by_index (streamdir_t * streamdir, gint index);
-category_t *category_get_by_name (streamdir_t * streamdir, gchar * name);
-gint category_get_count (streamdir_t * streamdir);
-gint category_get_index (streamdir_t * streamdir, category_t * category);
-
-streaminfo_t *streaminfo_new (gchar * name, gchar * playlist_url, gchar * url,
- gchar * current_track);
-void streaminfo_delete (streaminfo_t * streaminfo);
-void streaminfo_free (streaminfo_t * streaminfo);
-void streaminfo_add (category_t * category, streaminfo_t * streaminfo);
-void streaminfo_remove (category_t * category, streaminfo_t * streaminfo);
-streaminfo_t *streaminfo_get_by_index (category_t * category, gint index);
-streaminfo_t *streaminfo_get_by_name (category_t * category, gchar * name);
-gint streaminfo_get_count (category_t * category);
-gint streaminfo_get_index (category_t * category, streaminfo_t * streaminfo);
-
-
-#endif // STREAMDIR_H
diff --git a/src/streambrowser/xiph.c b/src/streambrowser/xiph.c
deleted file mode 100644
index 198f5dc..0000000
--- a/src/streambrowser/xiph.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#include <string.h>
-#include <glib.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-#include <audacious/debug.h>
-#include <audacious/misc.h>
-
-#include "streambrowser.h"
-#include "xiph.h"
-
-
-typedef struct
-{
- gchar name[DEF_STRING_LEN];
- gchar url[DEF_STRING_LEN];
- gchar current_song[DEF_STRING_LEN];
- gchar genre[DEF_STRING_LEN];
-}
-xiph_entry_t;
-
-
-static xiph_entry_t *xiph_entries = NULL;
-static int xiph_entry_count = 0;
-
-typedef struct
-{
- gchar *name;
- gchar *match_string;
-}
-xiph_category_t;
-
-/* inspired from streamtuner's xiph plugin */
-static xiph_category_t xiph_categories[] =
-{
- {"Alternative",
- "alternative indie goth college industrial punk hardcore ska"},
- {"Electronic",
- "electronic ambient drum trance techno house downtempo breakbeat jungle garage"},
- {"Classical", "classical opera symphonic"},
- {"Country", "country swing"},
- {"Hip-Hop/Rap", "hip hop rap turntable"},
- {"Jazz", "jazz swing"},
- {"Oldies", "oldies disco 50s 60s 70s 80s 90s"},
- {"Rop", "top pop"},
- {"Rock", "rock metal"},
- {"R&amp;B/Soul", "r&b funk soul urban"},
- {"Spiritual", "spiritual gospel christian muslim jewish religio"},
- {"Spoken", "spoken talk comedy"},
- {"World", "world reggae island african european east asia"},
- {"Other", "various mixed misc eclectic film show instrumental"}
-};
-
-
-static void refresh_streamdir (void);
- /* returns true if any of the words in string1 is present in string2 */
-static gboolean genre_match (gchar * string1, gchar * string2);
-
-gboolean xiph_streaminfo_fetch (category_t * category,
- streaminfo_t * streaminfo)
-{
- gint entryno;
-
- refresh_streamdir ();
-
- /* find the corresponding xiph entry */
- for (entryno = 0; entryno < xiph_entry_count; entryno++)
- {
- if (strcmp (xiph_entries[entryno].name, streaminfo->name) == 0)
- {
- strcpy (streaminfo->name, xiph_entries[entryno].name);
- strcpy (streaminfo->url, xiph_entries[entryno].url);
- strcpy (streaminfo->current_track,
- xiph_entries[entryno].current_song);
-
- break;
- }
- }
-
- return TRUE;
-}
-
-gboolean xiph_category_fetch (streamdir_t * streamdir, category_t * category)
-{
- refresh_streamdir ();
-
- gint entryno, categoryno;
- gint xiph_category_count =
- sizeof (xiph_categories) / sizeof (xiph_category_t);
- xiph_category_t *xiph_category = NULL;
-
- for (categoryno = 0; categoryno < xiph_category_count; categoryno++)
- if (strcmp (xiph_categories[categoryno].name, category->name) == 0)
- {
- xiph_category = xiph_categories + categoryno;
- break;
- }
-
- /* somehow we've got an invalid/unrecognized category */
- if (xiph_category == NULL)
- {
- failure ("xiph: got an unrecognized category: '%s'\n", category->name);
- return FALSE;
- }
-
- /* free/remove any existing streaminfos in this category */
- while (streaminfo_get_count (category) > 0)
- streaminfo_remove (category, streaminfo_get_by_index (category, 0));
-
- /* see what entries match this category */
- for (entryno = 0; entryno < xiph_entry_count; entryno++)
- {
- if (genre_match
- (xiph_category->match_string, xiph_entries[entryno].genre))
- {
- streaminfo_t *streaminfo =
- streaminfo_new (xiph_entries[entryno].name, "",
- xiph_entries[entryno].url,
- xiph_entries[entryno].current_song);
- streaminfo_add (category, streaminfo);
- }
- }
-
- /* if the requested category is the last one in the list ("other"),
- we fill it with all the entries that don't match the rest of categories */
- if (xiph_category == &xiph_categories[xiph_category_count - 1])
- {
- for (entryno = 0; entryno < xiph_entry_count; entryno++)
- {
- gboolean matched = FALSE;
-
- for (categoryno = 0; categoryno < xiph_category_count; categoryno++)
- if (genre_match
- (xiph_entries[entryno].genre,
- xiph_categories[categoryno].match_string))
- {
- matched = TRUE;
- break;
- }
-
- if (!matched)
- {
- streaminfo_t *streaminfo =
- streaminfo_new (xiph_entries[entryno].name, "",
- xiph_entries[entryno].url,
- xiph_entries[entryno].current_song);
- streaminfo_add (category, streaminfo);
- }
- }
- }
-
- return TRUE;
-}
-
-
-streamdir_t *xiph_streamdir_fetch (void)
-{
- streamdir_t *streamdir = streamdir_new (XIPH_NAME);
- gint categno;
-
- refresh_streamdir ();
-
- for (categno = 0;
- categno < sizeof (xiph_categories) / sizeof (xiph_category_t);
- categno++)
- {
- category_t *category = category_new (xiph_categories[categno].name);
- category_add (streamdir, category);
- }
-
- return streamdir;
-}
-
-static void refresh_streamdir (void)
-{
- gchar * unix_name = g_build_filename (aud_util_get_localdir (),
- XIPH_TEMP_FILENAME, NULL);
- gchar * uri_name = g_filename_to_uri (unix_name, NULL, NULL);
-
- /* free any previously fetched streamdir data */
- if (xiph_entries != NULL)
- {
- free (xiph_entries);
- xiph_entries = NULL;
- }
- xiph_entry_count = 0;
-
- AUDDBG("xiph: fetching streaming directory file '%s'\n",
- XIPH_STREAMDIR_URL);
-
- if (! fetch_remote_to_local_file (XIPH_STREAMDIR_URL, uri_name))
- {
- failure ("xiph: stream directory file '%s' could not be downloaded to "
- "'%s'\n", XIPH_STREAMDIR_URL, uri_name);
- goto DONE;
- }
-
- AUDDBG("xiph: stream directory file '%s' successfuly downloaded to '%s'\n",
- XIPH_STREAMDIR_URL, uri_name);
-
- xmlDoc * doc = xmlReadFile (uri_name, NULL, 0);
-
- if (doc == NULL)
- {
- failure ("xiph: failed to read stream directory file\n");
- goto DONE;
- }
-
- xmlNode *root_node = xmlDocGetRootElement (doc);
- xmlNode *node, *child;
- gchar *content;
-
- root_node = root_node->children;
-
- for (node = root_node; node != NULL; node = node->next)
- {
- if (node->type == XML_ELEMENT_NODE)
- {
- xiph_entries =
- realloc (xiph_entries,
- sizeof (xiph_entry_t) * (xiph_entry_count + 1));
-
- for (child = node->children; child != NULL; child = child->next)
- {
- if (strcmp ((gchar *) child->name, "server_name") == 0)
- {
- content = (gchar *) xmlNodeGetContent (child);
- strcpy (xiph_entries[xiph_entry_count].name, content);
- xmlFree (content);
- }
- else if (strcmp ((gchar *) child->name, "listen_url") == 0)
- {
- content = (gchar *) xmlNodeGetContent (child);
- strcpy (xiph_entries[xiph_entry_count].url, content);
- xmlFree (content);
- }
- else if (strcmp ((gchar *) child->name, "current_song") == 0)
- {
- content = (gchar *) xmlNodeGetContent (child);
- strcpy (xiph_entries[xiph_entry_count].current_song,
- content);
- xmlFree (content);
- }
- else if (strcmp ((gchar *) child->name, "genre") == 0)
- {
- content = (gchar *) xmlNodeGetContent (child);
- strcpy (xiph_entries[xiph_entry_count].genre, content);
- xmlFree (content);
- }
- }
-
- xiph_entry_count++;
- }
- }
-
- xmlFreeDoc (doc);
-
- AUDDBG("xiph: streaming directory successfuly loaded\n");
-
-DONE:
- g_free (unix_name);
- g_free (uri_name);
-}
-
-static gboolean genre_match (gchar * string1, gchar * string2)
-{
- gchar **genres = g_strsplit (string1, " ", -1);
- gboolean matched = FALSE;
- gint n;
-
- if (genres != NULL)
- {
- for (n = 0; genres[n] != NULL; n++)
- {
- if (mystrcasestr (string2, genres[n]))
- {
- matched = TRUE;
- break;
- }
- }
- g_strfreev (genres);
- }
-
- return matched;
-}
diff --git a/src/streambrowser/xiph.h b/src/streambrowser/xiph.h
deleted file mode 100644
index fc3bceb..0000000
--- a/src/streambrowser/xiph.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Audacious Streambrowser Plugin
- *
- * Copyright (c) 2008 Calin Crisan <ccrisan@gmail.com>
- *
- * 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; under version 3 of the License.
- *
- * 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, see <http://www.gnu.org/licenses>.
- */
-
-
-#ifndef XIPH_H
-#define XIPH_H
-
-#include "streambrowser.h"
-#include "streamdir.h"
-
-#define XIPH_NAME "Xiph"
-#define XIPH_ICON DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "xiph.png"
-#define XIPH_STREAMDIR_URL "http://dir.xiph.org/yp.xml"
-#define XIPH_TEMP_FILENAME "streambrowser-xiph-temp.xml"
-
-
-gboolean xiph_streaminfo_fetch (category_t * category,
- streaminfo_t * streaminfo);
-gboolean xiph_category_fetch (streamdir_t * streamdir, category_t * category);
-streamdir_t *xiph_streamdir_fetch ();
-
-
-#endif // SHOUTCAST_H
diff --git a/src/sun/Makefile b/src/sun/Makefile
deleted file mode 100644
index 7134c64..0000000
--- a/src/sun/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-PLUGIN = sun${PLUGIN_SUFFIX}
-
-SRCS = sun.c \
- audio.c \
- convert.c \
- mixer.c \
- configure.c \
- about.c
-
-include ../../buildsys.mk
-include ../../extra.mk
-
-plugindir := ${plugindir}/${OUTPUT_PLUGIN_DIR}
-
-CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/sun/about.c b/src/sun/about.c
deleted file mode 100644
index 2bf3bf0..0000000
--- a/src/sun/about.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-
-#include "sun.h"
-#include <audacious/i18n.h>
-
-void sun_about(void)
-{
- static GtkWidget *dialog = NULL;
-
- audgui_simple_message(&dialog, GTK_MESSAGE_INFO,
- _("About the Sun Driver"),
- _("XMMS BSD Sun Driver\n\n"
- "Copyright (c) 2001 CubeSoft Communications, Inc.\n"
- "Maintainer: <vedge at csoft.org>.\n"));
-}
-
diff --git a/src/sun/audio.c b/src/sun/audio.c
deleted file mode 100644
index 397aded..0000000
--- a/src/sun/audio.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/* FIXME: g_error() is used several places, it will exit xmms */
-
-#include <errno.h>
-#include "sun.h"
-#include "resample.h"
-
-static int sun_bps(int, int, int);
-static int sun_format(gint);
-
-static void sun_setformat(gint, int, int);
-static void sun_setparams(void);
-static void *sun_loop(void *);
-static int sun_downsample(gpointer, guint, guint, guint);
-
-static gboolean prebuffer, remove_prebuffer;
-static pthread_t buffer_thread;
-static int (*sun_convert)(void **, int);
-static int rd_index, wr_index;
-static int buffer_size;
-static int prebuffer_size;
-static int output_time_offset;
-static int device_buffer_used;
-static int blocksize;
-static char *buffer;
-static guint64 output_bytes;
-static guint64 written;
-
-/*
- * The format of the data from the input plugin
- * This will never change during a song.
- */
-struct sun_format input;
-
-/*
- * The format we get from the effect plugin.
- * This will be different from input if the effect plugin does
- * some kind of format conversion.
- */
-struct sun_format effect;
-
-/*
- * The format of the data we actually send to the soundcard.
- * This might be different from effect if we need to resample or do
- * some other format conversion.
- */
-struct sun_format output;
-
-static int sun_bps(int sunfmt, int rate, int nch)
-{
- int bitrate;
-
- bitrate = rate * nch;
-
- switch (sunfmt)
- {
- case AUDIO_ENCODING_ULINEAR_BE:
- case AUDIO_ENCODING_ULINEAR_LE:
- case AUDIO_ENCODING_SLINEAR_BE:
- case AUDIO_ENCODING_SLINEAR_LE:
- bitrate *= 2;
- break;
- }
-
- return (bitrate);
-}
-
-static int sun_format(gint fmt)
-{
- switch (fmt)
- {
- case FMT_U8:
- return (AUDIO_ENCODING_PCM8);
- case FMT_S8:
- return (AUDIO_ENCODING_SLINEAR);
- case FMT_U16_LE:
- return (AUDIO_ENCODING_ULINEAR_LE);
- case FMT_U16_BE:
- return (AUDIO_ENCODING_ULINEAR_BE);
- case FMT_S16_LE:
- return (AUDIO_ENCODING_SLINEAR_LE);
- case FMT_S16_BE:
- return (AUDIO_ENCODING_SLINEAR_BE);
- }
- return -1;
-}
-
-static void sun_setformat(gint fmt, int rate, int nch)
-{
- int sun;
-
- sun = sun_format(fmt);
-
- effect.format.sun = sun;
- effect.format.xmms = fmt;
- effect.frequency = rate;
- effect.channels = nch;
- effect.bps = sun_bps(sun, rate, nch);
-
- output.format.sun = sun;
- output.format.xmms = fmt;
- output.frequency = rate;
- output.channels = nch;
- sun_setparams();
-
- output.bps = sun_bps(output.format.sun, output.frequency,
- output.channels);
-
- audio.input = &input;
- audio.output = &output;
- audio.effect = &effect;
-}
-
-void sun_setparams(void)
-{
- audio_info_t info;
- audio_encoding_t enc;
-
- AUDIO_INITINFO(&info);
-
- info.mode = AUMODE_PLAY;
- if (ioctl(audio.fd, AUDIO_SETINFO, &info) != 0)
- {
- g_error("%s: cannot play (%s)", audio.devaudio,
- strerror(errno));
- return;
- }
-
- /*
- * Pass 1: try the preferred encoding, if it is supported.
- */
- enc.index = 0;
- while (ioctl(audio.fd, AUDIO_GETENC, &enc) == 0 &&
- enc.encoding != output.format.sun)
- enc.index++;
-
- info.play.encoding = enc.encoding;
- info.play.precision = enc.precision;
- strcpy(output.name, enc.name);
- if (ioctl(audio.fd, AUDIO_SETINFO, &info) != 0)
- {
- g_error("%s: unsupported encoding: %s (%s)", audio.devaudio,
- output.name, strerror(errno));
- return;
- }
-
- info.play.channels = output.channels;
- ioctl(audio.fd, AUDIO_SETINFO, &info);
-
- info.play.sample_rate = output.frequency;
- if (ioctl(audio.fd, AUDIO_SETINFO, &info) < 0)
- {
- g_error("%s: cannot handle %i Hz (%s)", audio.devaudio,
- output.frequency, strerror(errno));
- return;
- }
-
- if (ioctl(audio.fd, AUDIO_GETINFO, &info) != 0)
- {
- blocksize = SUN_DEFAULT_BLOCKSIZE;
- output.channels = info.play.channels;
- }
- else
- {
- blocksize = blocksize;
- }
-
- sun_convert = sun_get_convert_func(output.format.sun,
- sun_format(effect.format.xmms));
-#if 0
- if (sun_convert != NULL)
- {
- g_warning("audio conversion (output=0x%x effect=0x%x)",
- output.format.sun, sun_format(effect.format.xmms));
- }
-#endif
-}
-
-static inline void sun_bufused(void)
-{
- audio_offset_t ooffs;
-
- if (audio.paused)
- device_buffer_used = 0;
- else if (ioctl(audio.fd, AUDIO_GETOOFFS, &ooffs) == 0)
- device_buffer_used = ooffs.offset;
-}
-
-int sun_written_time(void)
-{
- if (!audio.going)
- return 0;
-
- return ((written * 1000) / effect.bps);
-}
-
-int sun_output_time(void)
-{
- guint64 bytes;
-
- if (!audio.fd || !audio.going)
- return 0;
-
- bytes = output_bytes < device_buffer_used ?
- 0 : output_bytes - device_buffer_used;
- return (output_time_offset + ((bytes * 1000) / output.bps));
-}
-
-static inline int sun_used(void)
-{
- if (wr_index >= rd_index)
- return (wr_index - rd_index);
-
- return (buffer_size - (rd_index - wr_index));
-}
-
-int sun_playing(void)
-{
- if (!audio.going)
- return 0;
-
- if (!sun_used() && (device_buffer_used - (3 * blocksize)) <= 0)
- return (FALSE);
-
- return (TRUE);
-}
-
-int sun_free(void)
-{
- if (remove_prebuffer && prebuffer)
- {
- prebuffer = FALSE;
- remove_prebuffer = FALSE;
- }
- if (prebuffer)
- remove_prebuffer = TRUE;
-
- if (rd_index > wr_index)
- return ((rd_index - wr_index) - blocksize - 1);
-
- return ((buffer_size - (wr_index - rd_index)) - blocksize - 1);
-}
-
-static inline ssize_t write_all(int fd, const void *buf, size_t count)
-{
- static ssize_t done;
-
- for (done = 0; count > done; )
- {
- static ssize_t n;
-
- n = write(fd, buf, count - done);
- if (n == -1)
- {
- if (errno == EINTR)
- continue;
- else
- break;
- }
- done += n;
- }
-
- return (done);
-}
-
-static inline void sun_write_audio(gpointer data, int length)
-{
- if (sun_convert != NULL)
- length = sun_convert(&data, length);
-
- if (effect.frequency == output.frequency)
- {
- output_bytes += write_all(audio.fd, data, length);
- }
- else
- {
- output_bytes += sun_downsample(data, length,
- effect.frequency, output.frequency);
- }
-}
-
-static void sun_bswap16(guint16 *data, int len)
-{
- int i;
-
- for (i = 0; i < len; i += 2, data++)
- *data = GUINT16_SWAP_LE_BE(*data);
-}
-
-static int sun_downsample(gpointer ob, guint length, guint speed, guint espeed)
-{
- guint w = 0;
- static gpointer nbuffer = NULL;
- static int nbuffer_size = 0;
-
- switch (output.format.sun) {
- case AUDIO_ENCODING_SLINEAR_BE:
- case AUDIO_ENCODING_SLINEAR_LE:
- if (output.channels == 2)
- RESAMPLE_STEREO(gint16);
- else
- RESAMPLE_MONO(gint16);
- break;
- case AUDIO_ENCODING_ULINEAR_BE:
- case AUDIO_ENCODING_ULINEAR_LE:
- if (output.channels == 2)
- RESAMPLE_STEREO(guint16);
- else
- RESAMPLE_MONO(guint16);
- break;
- case AUDIO_ENCODING_SLINEAR:
- if (output.channels == 2)
- RESAMPLE_STEREO(gint8);
- else
- RESAMPLE_MONO(gint8);
- break;
- case AUDIO_ENCODING_ULINEAR:
- if (output.channels == 2)
- RESAMPLE_STEREO(guint8);
- else
- RESAMPLE_MONO(guint8);
- break;
- }
- return (w);
-}
-
-void sun_write(gpointer ptr, int length)
-{
- int cnt, off = 0;
-
- remove_prebuffer = FALSE;
- written += length;
- while (length > 0)
- {
- cnt = MIN(length, buffer_size - wr_index);
- memcpy(buffer + wr_index, (char *) ptr + off, cnt);
- wr_index = (wr_index + cnt) % buffer_size;
- length -= cnt;
- off += cnt;
- }
-}
-
-void sun_close(void)
-{
- if (!audio.going)
- return;
-
- audio.going = 0;
-
- pthread_join(buffer_thread, NULL);
-
- sun_get_convert_buffer(0);
- wr_index = 0;
- rd_index = 0;
-}
-
-void sun_flush(int time)
-{
- ioctl(audio.fd, AUDIO_FLUSH, NULL);
-
- output_time_offset = time;
- written = (guint16)(time / 10) * (guint64)(input.bps / 100);
- output_bytes = 0;
-}
-
-void sun_pause(short p)
-{
- if (p == TRUE)
- audio.do_pause = TRUE;
- else
- audio.unpause = TRUE;
-}
-
-static void* sun_loop(void *arg)
-{
- struct timeval tv;
- int length, cnt;
- fd_set set;
-
- while (audio.going)
- {
- if (sun_used() > prebuffer_size)
- prebuffer = FALSE;
-
- if (sun_used() > 0 && !audio.paused && !prebuffer)
- {
- tv.tv_sec = 0;
- tv.tv_usec = 10000;
- FD_ZERO(&set);
- FD_SET(audio.fd, &set);
-
- if (select(audio.fd + 1, NULL, &set, NULL, &tv) > 0)
- {
- length = MIN(blocksize, sun_used());
- while (length > 0)
- {
- cnt = MIN(length,
- buffer_size - rd_index);
- sun_write_audio(
- buffer + rd_index, cnt);
- rd_index = (rd_index + cnt) %
- buffer_size;
- length -= cnt;
- }
- }
- }
- else
- g_usleep(10000);
-
- sun_bufused();
-
- if (audio.do_pause && !audio.paused)
- {
- audio.do_pause = FALSE;
- audio.paused = TRUE;
-
- rd_index -= device_buffer_used;
- output_bytes -= device_buffer_used;
- if (rd_index < 0)
- rd_index += buffer_size;
- ioctl(audio.fd, AUDIO_FLUSH, NULL);
- }
- else if (audio.unpause && audio.paused)
- {
- audio.unpause = FALSE;
- close(audio.fd);
- audio.fd = open(audio.devaudio, O_RDWR);
- sun_setparams();
- audio.paused = FALSE;
- }
- }
-
- close(audio.fd);
- g_free(buffer);
- pthread_exit(NULL);
-}
-
-int sun_open(gint fmt, int rate, int nch)
-{
- audio_info_t info;
-
- AUDIO_INITINFO(&info);
-
- if ((audio.fd = open(audio.devaudio, O_RDWR)) < 0)
- {
- g_error("%s: %s", audio.devaudio, strerror(errno));
- return 0;
- }
-
- input.format.xmms = fmt;
- input.frequency = rate;
- input.channels = nch;
- input.bps = sun_bps(sun_format(fmt), rate, nch);
- sun_setformat(fmt, rate, nch);
-
- if (ioctl(audio.fd, AUDIO_GETINFO, &info) != 0)
- blocksize = SUN_DEFAULT_BLOCKSIZE;
- else
- blocksize = info.blocksize;
-
- buffer_size = audio.req_buffer_size;
-
- if (buffer_size < SUN_MIN_BUFFER_SIZE)
- buffer_size = SUN_MIN_BUFFER_SIZE;
-
- prebuffer_size = (buffer_size * audio.req_prebuffer_size) / 100;
-
- buffer_size += blocksize;
- buffer = g_malloc0(buffer_size);
-
- prebuffer = TRUE;
- wr_index = 0;
- rd_index = 0;
- output_time_offset = 0;
- written = 0;
- output_bytes = 0;
-
- audio.paused = FALSE;
- audio.do_pause = FALSE;
- audio.unpause = FALSE;
- remove_prebuffer = FALSE;
-
- audio.going++;
-
- pthread_create(&buffer_thread, NULL, sun_loop, NULL);
-
- return 1;
-}
diff --git a/src/sun/audioio.h b/src/sun/audioio.h
deleted file mode 100644
index 4fdf01a..0000000
--- a/src/sun/audioio.h
+++ /dev/null
@@ -1,326 +0,0 @@
-/* $NetBSD: audioio.h,v 1.29 2005/12/11 12:25:20 christos Exp $ */
-
-/*
- * Copyright (c) 1991-1993 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the Computer Systems
- * Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- * to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#ifndef _SYS_AUDIOIO_H_
-#define _SYS_AUDIOIO_H_
-
-/*
- * Audio device
- */
-struct audio_prinfo {
- u_int sample_rate; /* sample rate in bit/s */
- u_int channels; /* number of channels, usually 1 or 2 */
- u_int precision; /* number of bits/sample */
- u_int encoding; /* data encoding (AUDIO_ENCODING_* below) */
- u_int gain; /* volume level */
- u_int port; /* selected I/O port */
- u_int seek; /* BSD extension */
- u_int avail_ports; /* available I/O ports */
- u_int buffer_size; /* total size audio buffer */
- u_int _ispare[1];
- /* Current state of device: */
- u_int samples; /* number of samples */
- u_int eof; /* End Of File (zero-size writes) counter */
- u_char pause; /* non-zero if paused, zero to resume */
- u_char error; /* non-zero if underflow/overflow ocurred */
- u_char waiting; /* non-zero if another process hangs in open */
- u_char balance; /* stereo channel balance */
- u_char cspare[2];
- u_char open; /* non-zero if currently open */
- u_char active; /* non-zero if I/O is currently active */
-};
-typedef struct audio_prinfo audio_prinfo_t;
-
-struct audio_info {
- struct audio_prinfo play; /* Info for play (output) side */
- struct audio_prinfo record; /* Info for record (input) side */
-
- u_int monitor_gain; /* input to output mix */
- /* BSD extensions */
- u_int blocksize; /* H/W read/write block size */
- u_int hiwat; /* output high water mark */
- u_int lowat; /* output low water mark */
- u_int _ispare1;
- u_int mode; /* current device mode */
-#define AUMODE_PLAY 0x01
-#define AUMODE_RECORD 0x02
-#define AUMODE_PLAY_ALL 0x04 /* don't do real-time correction */
-};
-typedef struct audio_info audio_info_t;
-
-#define AUDIO_INITINFO(p) \
- (void)memset((void *)(p), 0xff, sizeof(struct audio_info))
-
-/*
- * Parameter for the AUDIO_GETDEV ioctl to determine current
- * audio devices.
- */
-#define MAX_AUDIO_DEV_LEN 16
-typedef struct audio_device {
- char name[MAX_AUDIO_DEV_LEN];
- char version[MAX_AUDIO_DEV_LEN];
- char config[MAX_AUDIO_DEV_LEN];
-} audio_device_t;
-
-typedef struct audio_offset {
- u_int samples; /* Total number of bytes transferred */
- u_int deltablks; /* Blocks transferred since last checked */
- u_int offset; /* Physical transfer offset in buffer */
-} audio_offset_t;
-
-/*
- * Supported audio encodings
- */
-/* Encoding ID's */
-#define AUDIO_ENCODING_NONE 0 /* no encoding assigned */
-#define AUDIO_ENCODING_ULAW 1 /* ITU G.711 mu-law */
-#define AUDIO_ENCODING_ALAW 2 /* ITU G.711 A-law */
-#define AUDIO_ENCODING_PCM16 3 /* signed linear PCM, obsolete */
-#define AUDIO_ENCODING_LINEAR AUDIO_ENCODING_PCM16 /* SunOS compat */
-#define AUDIO_ENCODING_PCM8 4 /* unsigned linear PCM, obsolete */
-#define AUDIO_ENCODING_LINEAR8 AUDIO_ENCODING_PCM8 /* SunOS compat */
-#define AUDIO_ENCODING_ADPCM 5 /* adaptive differential PCM */
-#define AUDIO_ENCODING_SLINEAR_LE 6
-#define AUDIO_ENCODING_SLINEAR_BE 7
-#define AUDIO_ENCODING_ULINEAR_LE 8
-#define AUDIO_ENCODING_ULINEAR_BE 9
-#define AUDIO_ENCODING_SLINEAR 10
-#define AUDIO_ENCODING_ULINEAR 11
-#define AUDIO_ENCODING_MPEG_L1_STREAM 12
-#define AUDIO_ENCODING_MPEG_L1_PACKETS 13
-#define AUDIO_ENCODING_MPEG_L1_SYSTEM 14
-#define AUDIO_ENCODING_MPEG_L2_STREAM 15
-#define AUDIO_ENCODING_MPEG_L2_PACKETS 16
-#define AUDIO_ENCODING_MPEG_L2_SYSTEM 17
-
-typedef struct audio_encoding {
- int index;
- char name[MAX_AUDIO_DEV_LEN];
- int encoding;
- int precision;
- int flags;
-#define AUDIO_ENCODINGFLAG_EMULATED 1 /* software emulation mode */
-} audio_encoding_t;
-
-/*
- * Balance settings.
- */
-#define AUDIO_LEFT_BALANCE 0 /* left channel only */
-#define AUDIO_MID_BALANCE 32 /* equal left/right channel */
-#define AUDIO_RIGHT_BALANCE 64 /* right channel only */
-#define AUDIO_BALANCE_SHIFT 3
-
-/*
- * Output ports
- */
-#define AUDIO_SPEAKER 0x01 /* built-in speaker */
-#define AUDIO_HEADPHONE 0x02 /* headphone jack */
-#define AUDIO_LINE_OUT 0x04 /* line out */
-
-/*
- * Input ports
- */
-#define AUDIO_MICROPHONE 0x01 /* microphone */
-#define AUDIO_LINE_IN 0x02 /* line in */
-#define AUDIO_CD 0x04 /* on-board CD inputs */
-#define AUDIO_INTERNAL_CD_IN AUDIO_CD /* internal CDROM */
-
-/*
- * Audio device operations
- */
-#define AUDIO_GETINFO _IOR('A', 21, struct audio_info)
-#define AUDIO_SETINFO _IOWR('A', 22, struct audio_info)
-#define AUDIO_DRAIN _IO('A', 23)
-#define AUDIO_FLUSH _IO('A', 24)
-#define AUDIO_WSEEK _IOR('A', 25, u_long)
-#define AUDIO_RERROR _IOR('A', 26, int)
-#define AUDIO_GETDEV _IOR('A', 27, struct audio_device)
-#define AUDIO_GETENC _IOWR('A', 28, struct audio_encoding)
-#define AUDIO_GETFD _IOR('A', 29, int)
-#define AUDIO_SETFD _IOWR('A', 30, int)
-#define AUDIO_PERROR _IOR('A', 31, int)
-#define AUDIO_GETIOFFS _IOR('A', 32, struct audio_offset)
-#define AUDIO_GETOOFFS _IOR('A', 33, struct audio_offset)
-#define AUDIO_GETPROPS _IOR('A', 34, int)
-#define AUDIO_PROP_FULLDUPLEX 0x01
-#define AUDIO_PROP_MMAP 0x02
-#define AUDIO_PROP_INDEPENDENT 0x04
-
-/*
- * Mixer device
- */
-#define AUDIO_MIN_GAIN 0
-#define AUDIO_MAX_GAIN 255
-
-typedef struct mixer_level {
- int num_channels;
- u_char level[8]; /* [num_channels] */
-} mixer_level_t;
-#define AUDIO_MIXER_LEVEL_MONO 0
-#define AUDIO_MIXER_LEVEL_LEFT 0
-#define AUDIO_MIXER_LEVEL_RIGHT 1
-
-/*
- * Device operations
- */
-
-typedef struct audio_mixer_name {
- char name[MAX_AUDIO_DEV_LEN];
- int msg_id;
-} audio_mixer_name_t;
-
-typedef struct mixer_devinfo {
- int index;
- audio_mixer_name_t label;
- int type;
-#define AUDIO_MIXER_CLASS 0
-#define AUDIO_MIXER_ENUM 1
-#define AUDIO_MIXER_SET 2
-#define AUDIO_MIXER_VALUE 3
- int mixer_class;
- int next, prev;
-#define AUDIO_MIXER_LAST -1
- union {
- struct audio_mixer_enum {
- int num_mem;
- struct {
- audio_mixer_name_t label;
- int ord;
- } member[32];
- } e;
- struct audio_mixer_set {
- int num_mem;
- struct {
- audio_mixer_name_t label;
- int mask;
- } member[32];
- } s;
- struct audio_mixer_value {
- audio_mixer_name_t units;
- int num_channels;
- int delta;
- } v;
- } un;
-} mixer_devinfo_t;
-
-
-typedef struct mixer_ctrl {
- int dev;
- int type;
- union {
- int ord; /* enum */
- int mask; /* set */
- mixer_level_t value; /* value */
- } un;
-} mixer_ctrl_t;
-
-/*
- * Mixer operations
- */
-#define AUDIO_MIXER_READ _IOWR('M', 0, mixer_ctrl_t)
-#define AUDIO_MIXER_WRITE _IOWR('M', 1, mixer_ctrl_t)
-#define AUDIO_MIXER_DEVINFO _IOWR('M', 2, mixer_devinfo_t)
-
-/*
- * Well known device names
- */
-#define AudioNmicrophone "mic"
-#define AudioNline "line"
-#define AudioNcd "cd"
-#define AudioNdac "dac"
-#define AudioNaux "aux"
-#define AudioNrecord "record"
-#define AudioNvolume "volume"
-#define AudioNmonitor "monitor"
-#define AudioNtreble "treble"
-#define AudioNmid "mid"
-#define AudioNbass "bass"
-#define AudioNbassboost "bassboost"
-#define AudioNspeaker "speaker"
-#define AudioNheadphone "headphones"
-#define AudioNoutput "output"
-#define AudioNinput "input"
-#define AudioNmaster "master"
-#define AudioNstereo "stereo"
-#define AudioNmono "mono"
-#define AudioNloudness "loudness"
-#define AudioNspatial "spatial"
-#define AudioNsurround "surround"
-#define AudioNpseudo "pseudo"
-#define AudioNmute "mute"
-#define AudioNenhanced "enhanced"
-#define AudioNpreamp "preamp"
-#define AudioNon "on"
-#define AudioNoff "off"
-#define AudioNmode "mode"
-#define AudioNsource "source"
-#define AudioNfmsynth "fmsynth"
-#define AudioNwave "wave"
-#define AudioNmidi "midi"
-#define AudioNmixerout "mixerout"
-#define AudioNswap "swap" /* swap left and right channels */
-#define AudioNagc "agc"
-#define AudioNdelay "delay"
-#define AudioNselect "select" /* select destination */
-#define AudioNvideo "video"
-#define AudioNcenter "center"
-#define AudioNdepth "depth"
-#define AudioNlfe "lfe"
-
-#define AudioEmulaw "mulaw"
-#define AudioEalaw "alaw"
-#define AudioEadpcm "adpcm"
-#define AudioEslinear "slinear"
-#define AudioEslinear_le "slinear_le"
-#define AudioEslinear_be "slinear_be"
-#define AudioEulinear "ulinear"
-#define AudioEulinear_le "ulinear_le"
-#define AudioEulinear_be "ulinear_be"
-#define AudioEmpeg_l1_stream "mpeg_l1_stream"
-#define AudioEmpeg_l1_packets "mpeg_l1_packets"
-#define AudioEmpeg_l1_system "mpeg_l1_system"
-#define AudioEmpeg_l2_stream "mpeg_l2_stream"
-#define AudioEmpeg_l2_packets "mpeg_l2_packets"
-#define AudioEmpeg_l2_system "mpeg_l2_system"
-
-#define AudioCinputs "inputs"
-#define AudioCoutputs "outputs"
-#define AudioCrecord "record"
-#define AudioCmonitor "monitor"
-#define AudioCequalization "equalization"
-#define AudioCmodem "modem"
-
-#endif /* !_SYS_AUDIOIO_H_ */
diff --git a/src/sun/configure.c b/src/sun/configure.c
deleted file mode 100644
index 758fc6b..0000000
--- a/src/sun/configure.c
+++ /dev/null
@@ -1,575 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-
-#include <errno.h>
-
-#include "sun.h"
-#include <audacious/i18n.h>
-
-#include "mixer.h"
-
-struct sun_statsframe stats_frame;
-
-static GtkWidget *configure_win;
-static GtkWidget *buffer_size_spin, *buffer_pre_spin;
-static GtkWidget *adevice_entry, *actldevice_entry, *mdevice_entry;
-static GtkWidget *keepopen_cbutton;
-static char devaudio[64], devaudioctl[64], devmixer[64], mixer_toggle[64];
-
-static void configure_win_destroy();
-
-static void configure_win_ok_cb(GtkWidget *w, gpointer data)
-{
- mcs_handle_t *cfgfile;
-
- strcpy(audio.devaudio, gtk_entry_get_text(GTK_ENTRY(adevice_entry)));
- strcpy(audio.devmixer, gtk_entry_get_text(GTK_ENTRY(mdevice_entry)));
-
- audio.req_buffer_size = gtk_spin_button_get_value_as_int(
- GTK_SPIN_BUTTON(buffer_size_spin));
- audio.req_prebuffer_size = gtk_spin_button_get_value_as_int(
- GTK_SPIN_BUTTON(buffer_pre_spin));
-
- if (sun_mixer_open() == 0)
- {
- audio.mixer_keepopen = gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(keepopen_cbutton));
- sun_mixer_close();
- }
-
- cfgfile = aud_cfg_db_open();
-
- aud_cfg_db_set_string(cfgfile, "sun",
- "audio_devaudio", audio.devaudio);
- aud_cfg_db_set_string(cfgfile, "sun",
- "audio_devaudioctl", audio.devaudioctl);
- aud_cfg_db_set_string(cfgfile, "sun",
- "audio_devmixer", audio.devmixer);
-
- aud_cfg_db_set_string(cfgfile, "sun",
- "mixer_voldev", audio.mixer_voldev);
- aud_cfg_db_set_bool(cfgfile, "sun",
- "mixer_keepopen", audio.mixer_keepopen);
-
- aud_cfg_db_set_int(cfgfile, "sun",
- "buffer_size", audio.req_buffer_size);
- aud_cfg_db_set_int(cfgfile, "sun",
- "prebuffer_size", audio.req_prebuffer_size);
-
- aud_cfg_db_close(cfgfile);
-
- configure_win_destroy();
-}
-
-static void configure_win_cancel_cb(GtkWidget *w, gpointer data)
-{
- configure_win_destroy();
-}
-
-static void mixer_cbutton_toggled_cb(GtkWidget *w, int id)
-{
- mixer_ctrl_t mixer;
-
- if (sun_mixer_open() == 0)
- {
- mixer.type = AUDIO_MIXER_ENUM;
- mixer.dev = id;
- mixer_toggle[id] = !mixer_toggle[id];
- mixer.un.ord = mixer_toggle[id];
-
- if (ioctl(audio.mixerfd, AUDIO_MIXER_WRITE, &mixer) != 0)
- g_warning("Could not toggle mixer setting %i", id);
- sun_mixer_close();
- }
-}
-
-static void configure_win_mixer_volume_dev_cb(GtkWidget *w, gint voldev_index)
-{
- mixer_devinfo_t info;
-
- if (sun_mixer_open() == 0)
- {
- info.index = voldev_index;
- if (!ioctl(audio.mixerfd, AUDIO_MIXER_DEVINFO, &info))
- strcpy(audio.mixer_voldev, info.label.name);
- sun_mixer_close();
- }
-}
-
-static void configure_win_destroy(void)
-{
- stats_frame.active = 0;
-
- if (!pthread_mutex_lock(&stats_frame.active_mutex))
- {
- if (!pthread_mutex_lock(&stats_frame.audioctl_mutex))
- {
- if (stats_frame.fd)
- {
- close(stats_frame.fd);
- stats_frame.fd = 0;
- }
- pthread_mutex_unlock(&stats_frame.audioctl_mutex);
- pthread_mutex_destroy(&stats_frame.audioctl_mutex);
- }
- pthread_mutex_unlock(&stats_frame.active_mutex);
- pthread_mutex_destroy(&stats_frame.active_mutex);
- }
- gtk_widget_destroy(configure_win);
- configure_win = NULL;
-}
-
-static void configure_mixer_volumedev_scan(gchar *type, GtkWidget *option_menu)
-{
- mixer_devinfo_t info;
- GtkWidget *menu;
-
- if (sun_mixer_open() < 0)
- return;
-
- menu = gtk_menu_new();
-
- /* FIXME: info is used while undefined here */
- for (info.index = 0;
- ioctl(audio.mixerfd, AUDIO_MIXER_DEVINFO, &info) == 0;
- info.index++)
- {
- GtkWidget *item;
-
- if (info.type == AUDIO_MIXER_VALUE)
- {
- item = gtk_menu_item_new_with_label(info.label.name);
- g_signal_connect(G_OBJECT(item), "activate",
- (GCallback) configure_win_mixer_volume_dev_cb,
- GINT_TO_POINTER(info.index));
-
- gtk_widget_show(item);
- gtk_menu_append(GTK_MENU(menu), item);
-
- if (!strcmp(info.label.name, audio.mixer_voldev))
- gtk_menu_reorder_child(GTK_MENU(menu), item, 0);
- }
- }
-
- gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu);
-
- sun_mixer_close();
-}
-
-static void configure_adevice_box(GtkWidget *dev_vbox)
-{
- GtkWidget *adevice_frame, *adevice_vbox;
-
- adevice_frame = gtk_frame_new(_("Audio device:"));
- gtk_box_pack_start(GTK_BOX(dev_vbox), adevice_frame, FALSE, FALSE, 0);
-
- adevice_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(adevice_vbox), 5);
- gtk_container_add(GTK_CONTAINER(adevice_frame), adevice_vbox);
-
- strcpy(devaudio, audio.devaudio);
-
- adevice_entry = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(adevice_entry), devaudio);
- gtk_box_pack_start_defaults(GTK_BOX(adevice_vbox), adevice_entry);
-}
-
-static void configure_actldevice_box(GtkWidget *dev_vbox)
-{
- GtkWidget *actldevice_frame, *actldevice_vbox;
-
- actldevice_frame = gtk_frame_new(_("Audio control device:"));
- gtk_box_pack_start(GTK_BOX(dev_vbox), actldevice_frame,
- FALSE, FALSE, 0);
-
- actldevice_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(actldevice_vbox), 5);
- gtk_container_add(GTK_CONTAINER(actldevice_frame), actldevice_vbox);
-
- strcpy(devaudioctl, audio.devaudioctl);
-
- actldevice_entry = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(actldevice_entry), devaudioctl);
- gtk_box_pack_start_defaults(GTK_BOX(actldevice_vbox), actldevice_entry);
-}
-
-static void configure_mdevice_box(GtkWidget *dev_vbox)
-{
- GtkWidget *mdevice_frame, *mdevice_vbox;
-
- mdevice_frame = gtk_frame_new(_("Mixer device:"));
- gtk_box_pack_start(GTK_BOX(dev_vbox), mdevice_frame, FALSE, FALSE, 0);
-
- mdevice_vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(mdevice_vbox), 5);
- gtk_container_add(GTK_CONTAINER(mdevice_frame), mdevice_vbox);
-
- strcpy(devmixer, audio.devmixer);
-
- mdevice_entry = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(mdevice_entry), devmixer);
- gtk_box_pack_start_defaults(GTK_BOX(mdevice_vbox), mdevice_entry);
-
-}
-
-
-static void configure_devices_frame(GtkWidget *vbox, GtkWidget * notebook)
-{
- GtkWidget *dev_vbox;
-
- dev_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(dev_vbox), 5);
-
- configure_adevice_box(dev_vbox);
- configure_actldevice_box(dev_vbox);
- configure_mdevice_box(dev_vbox);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dev_vbox,
- gtk_label_new(_("Devices")));
-}
-
-
-static void configure_buffering_frame(GtkWidget *vbox, GtkWidget * notebook)
-{
- GtkWidget *buffer_frame, *buffer_vbox, *buffer_table;
- GtkWidget *buffer_size_box, *buffer_size_label;
- GtkObject *buffer_size_adj, *buffer_pre_adj;
- GtkWidget *buffer_pre_box, *buffer_pre_label;
-
- buffer_frame = gtk_frame_new(_("Buffering:"));
- gtk_container_set_border_width(GTK_CONTAINER(buffer_frame), 5);
-
- buffer_vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(buffer_frame), buffer_vbox);
-
- buffer_table = gtk_table_new(2, 1, TRUE);
- gtk_container_set_border_width(GTK_CONTAINER(buffer_table), 5);
- gtk_box_pack_start(GTK_BOX(buffer_vbox), buffer_table, FALSE, FALSE, 0);
-
- buffer_size_box = gtk_hbox_new(FALSE, 5);
- gtk_table_attach_defaults( GTK_TABLE(buffer_table),
- buffer_size_box, 0, 1, 0, 1);
- buffer_size_label = gtk_label_new(_("Buffer size (ms):"));
-
- gtk_box_pack_start(GTK_BOX(buffer_size_box), buffer_size_label,
- FALSE, FALSE, 0);
-
- buffer_size_adj = gtk_adjustment_new(audio.req_buffer_size,
- 200, 131072, 100, 100, 100);
-
- buffer_size_spin = gtk_spin_button_new(GTK_ADJUSTMENT(buffer_size_adj),
- 8, 0);
-
- gtk_widget_set_usize(buffer_size_spin, 60, -1);
- gtk_box_pack_start(GTK_BOX(buffer_size_box),
- buffer_size_spin, FALSE, FALSE, 0);
-
- buffer_pre_box = gtk_hbox_new(FALSE, 5);
- gtk_table_attach_defaults(GTK_TABLE(buffer_table),
- buffer_pre_box, 1, 2, 0, 1);
- buffer_pre_label = gtk_label_new(_("Pre-buffer (percent):"));
- gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_label,
- FALSE, FALSE, 0);
-
- buffer_pre_adj = gtk_adjustment_new(audio.req_prebuffer_size,
- 0, 90, 1, 1, 1);
- buffer_pre_spin = gtk_spin_button_new(GTK_ADJUSTMENT(buffer_pre_adj),
- 1, 0);
-
- gtk_widget_set_usize(buffer_pre_spin, 60, -1);
- gtk_box_pack_start(GTK_BOX(buffer_pre_box), buffer_pre_spin,
- FALSE, FALSE, 0);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buffer_frame,
- gtk_label_new(_("Buffering")));
-}
-
-static void configure_mixer_toggle_button(GtkWidget *vbox, gchar *devname, gchar *label)
-{
- GtkWidget *toggle_cbutton;
- gint devid;
- mixer_ctrl_t mixer;
-
- if (!sun_mixer_get_dev(audio.mixerfd, &devid, devname))
- {
- mixer.type = AUDIO_MIXER_ENUM;
- mixer.dev = devid;
-
- if (!ioctl(audio.mixerfd, AUDIO_MIXER_READ, &mixer))
- {
- toggle_cbutton =
- gtk_check_button_new_with_label(_(label));
- gtk_box_pack_start_defaults(GTK_BOX(vbox),
- toggle_cbutton);
-
- if (mixer.un.ord)
- {
- gtk_toggle_button_set_active(
- GTK_TOGGLE_BUTTON(toggle_cbutton), TRUE);
- mixer_toggle[mixer.dev]++;
- }
- else
- {
- mixer_toggle[mixer.dev] = 0;
- }
-
- gtk_signal_connect(GTK_OBJECT(toggle_cbutton),
- "toggled",
- GTK_SIGNAL_FUNC(mixer_cbutton_toggled_cb),
- GINT_TO_POINTER(mixer.dev));
- }
- }
-}
-
-
-static void configure_mixer_box(GtkWidget *vbox, GtkWidget *notebook)
-{
- GtkWidget *mixervol_frame, *mixervol_box;
- GtkWidget *mixervol_menu;
-
- mixervol_frame = gtk_frame_new(_("Volume controls device:"));
- gtk_box_pack_start(GTK_BOX(vbox), mixervol_frame, FALSE, FALSE, 0);
-
- mixervol_box = gtk_vbox_new(FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(mixervol_box), 5);
- gtk_container_add(GTK_CONTAINER(mixervol_frame), mixervol_box);
-
- mixervol_menu = gtk_option_menu_new();
- gtk_box_pack_start(GTK_BOX(mixervol_box), mixervol_menu, TRUE, TRUE, 0);
-
- configure_mixer_volumedev_scan("Volume devices:", mixervol_menu);
-
- keepopen_cbutton = gtk_check_button_new_with_label(
- _("XMMS uses mixer exclusively."));
- if (audio.mixer_keepopen)
- gtk_toggle_button_set_active(
- GTK_TOGGLE_BUTTON(keepopen_cbutton), TRUE);
-
- gtk_box_pack_start_defaults(GTK_BOX(vbox), keepopen_cbutton);
-
- if (sun_mixer_open() == 0)
- {
- configure_mixer_toggle_button(vbox, "bassboost", "Bass boost");
- configure_mixer_toggle_button(vbox, "loudness", "Loudness");
- configure_mixer_toggle_button(vbox, "spatial", "Spatial");
- configure_mixer_toggle_button(vbox, "surround", "Surround");
- configure_mixer_toggle_button(vbox, "enhanced", "Enhanced");
- configure_mixer_toggle_button(vbox, "preamp", "Preamp");
- configure_mixer_toggle_button(vbox, "swap", "Swap channels");
- sun_mixer_close();
- }
-}
-
-
-static void configure_mixer_frame(GtkWidget *vbox, GtkWidget *notebook)
-{
- GtkWidget *mixervol_vbox;
-
- mixervol_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(mixervol_vbox), 5);
-
- configure_mixer_box(mixervol_vbox, notebook);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- mixervol_vbox, gtk_label_new(_("Mixer")));
-}
-
-
-static void configure_stats_loop(void)
-{
- if (pthread_mutex_lock(&stats_frame.active_mutex) != 0)
- {
- perror("active_mutex");
- return;
- }
-
- while (stats_frame.active && stats_frame.fd)
- {
- audio_info_t info;
- char sl[32];
-
- pthread_mutex_lock(&stats_frame.audioctl_mutex);
-
- sl[0] = '\0';
-
- if (!ioctl(stats_frame.fd, AUDIO_GETINFO, &info))
- {
- char s[128];
-
- sprintf(s, "Currently %s",
- (info.mode == AUMODE_PLAY) ? "playing" :
- (info.mode == AUMODE_RECORD) ? "recording" :
- (info.mode == AUMODE_PLAY_ALL) ? "playing" :
- "not playing");
-
- if (info.mode == AUMODE_PLAY)
- {
- sprintf(s, "%s at %i Hz (%i-bit %s)", s,
- info.play.sample_rate, info.play.precision,
- audio.output->name);
- sprintf(sl,"%i samples, %i error(s). %s",
- info.play.samples, info.play.error,
- info.play.active ?
- "I/O in progress." : "");
- }
- gtk_label_set_text(GTK_LABEL(stats_frame.mode_label),
- s);
-
- sprintf(s, "H/W block: %i bytes. Buffer: %i bytes",
- info.blocksize, info.play.buffer_size);
- gtk_label_set_text(
- GTK_LABEL(stats_frame.blocksize_label), s);
- }
- gtk_label_set_text(GTK_LABEL(stats_frame.ooffs_label), sl);
-
- pthread_mutex_unlock(&stats_frame.audioctl_mutex);
- g_usleep(400000);
- }
- pthread_mutex_unlock(&stats_frame.active_mutex);
-
- pthread_exit(NULL);
-}
-
-static void configure_status_frame(GtkWidget *vbox, GtkWidget *notebook)
-{
- GtkWidget *status_vbox;
- GtkWidget *name_label, *props_label;
- pthread_t loop_thread;
-
- memset(&stats_frame, 0, sizeof(struct sun_statsframe));
-
- if (pthread_mutex_init(&stats_frame.audioctl_mutex, NULL) != 0)
- {
- perror("audioctl_mutex");
- return;
- }
- if (pthread_mutex_init(&stats_frame.active_mutex, NULL) != 0)
- {
- perror("active_mutex");
- return;
- }
- status_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(status_vbox), 5);
-
- name_label = gtk_label_new(NULL);
- gtk_container_add(GTK_CONTAINER(status_vbox), name_label);
- props_label = gtk_label_new(NULL);
- gtk_container_add(GTK_CONTAINER(status_vbox), props_label);
-
- stats_frame.mode_label = gtk_label_new(NULL);
- gtk_container_add(GTK_CONTAINER(status_vbox), stats_frame.mode_label);
- stats_frame.blocksize_label = gtk_label_new(NULL);
- gtk_container_add(GTK_CONTAINER(status_vbox),
- stats_frame.blocksize_label);
- stats_frame.ooffs_label = gtk_label_new(NULL);
- gtk_container_add(GTK_CONTAINER(status_vbox), stats_frame.ooffs_label);
-
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), status_vbox,
- gtk_label_new(_("Status")));
-
- if ((stats_frame.fd = open(audio.devaudioctl, O_RDWR)) >= 0)
- {
- audio_device_t device;
- int props;
-
- if (ioctl(stats_frame.fd, AUDIO_GETDEV, &device) >= 0)
- {
- char *s = g_strdup_printf("%s - %s(4) %s",
- device.name, device.config, device.version);
- gtk_label_set_text(GTK_LABEL(name_label), s);
- g_free(s);
- }
- if (ioctl(stats_frame.fd, AUDIO_GETPROPS, &props) >= 0)
- {
- char s[32];
- s[0] = '\0';
-
- if ((props & AUDIO_PROP_FULLDUPLEX) ==
- AUDIO_PROP_FULLDUPLEX)
- sprintf(s, "FULLDUPLEX ");
- if ((props & AUDIO_PROP_MMAP) == AUDIO_PROP_MMAP)
- sprintf(s, "%s MMAP ", s);
- if ((props & AUDIO_PROP_INDEPENDENT) ==
- AUDIO_PROP_INDEPENDENT)
- sprintf(s, "%s INDEPENDENT ", s);
-
- gtk_label_set_text(GTK_LABEL(props_label), s);
- }
- }
- stats_frame.active++;
- pthread_create(&loop_thread, NULL, (void *) configure_stats_loop, NULL);
-}
-
-void sun_configure(void)
-{
- GtkWidget *vbox, *notebook;
- GtkWidget *bbox, *ok, *cancel;
-
- if (configure_win)
- {
- gtk_window_present(GTK_WINDOW(configure_win));
- return;
- }
- configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_signal_connect(GTK_OBJECT(configure_win), "destroy",
- GTK_SIGNAL_FUNC(configure_win_destroy), NULL);
-
- gtk_window_set_title(GTK_WINDOW(configure_win),
- _("Sun driver configuration"));
- gtk_window_set_policy(GTK_WINDOW(configure_win), FALSE, FALSE, FALSE);
- gtk_window_set_position(GTK_WINDOW(configure_win), GTK_WIN_POS_MOUSE);
- gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
-
- vbox = gtk_vbox_new(FALSE, 10);
- gtk_container_add(GTK_CONTAINER(configure_win), vbox);
-
- notebook = gtk_notebook_new();
- gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
-
- configure_devices_frame(vbox, notebook);
- configure_buffering_frame(vbox, notebook);
- configure_mixer_frame(vbox, notebook);
- configure_status_frame(vbox, notebook);
-
- bbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
- gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
- gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
-
- ok = gtk_button_new_with_label(_("Ok"));
- gtk_signal_connect(GTK_OBJECT(ok), "clicked",
- GTK_SIGNAL_FUNC(configure_win_ok_cb), NULL);
-
- GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(bbox), ok, TRUE, TRUE, 0);
- gtk_widget_grab_default(ok);
-
- cancel = gtk_button_new_with_label(_("Cancel"));
- gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked",
- GTK_SIGNAL_FUNC(configure_win_cancel_cb),
- GTK_OBJECT(configure_win));
-
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 0);
-
- gtk_widget_show_all(configure_win);
-}
-
diff --git a/src/sun/convert.c b/src/sun/convert.c
deleted file mode 100644
index a330f73..0000000
--- a/src/sun/convert.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2001 Haavard Kvaalen
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "sun.h"
-
-void * sun_get_convert_buffer(size_t size)
-{
- static size_t length;
- static void *buffer;
-
- if (size > 0 && size <= length)
- return buffer;
-
- length = size;
- buffer = g_realloc(buffer, size);
- return buffer;
-}
-
-static int convert_swap_endian(void **data, int length)
-{
- int i;
- guint16 *ptr = *data;
-
- for (i = 0; i < length; i += 2, ptr++)
- *ptr = GUINT16_SWAP_LE_BE(*ptr);
-
- return i;
-}
-
-static int convert_swap_sign_and_endian_to_native(void **data, int length)
-{
- int i;
- guint16 *ptr = *data;
-
- for (i = 0; i < length; i += 2, ptr++)
- *ptr = GUINT16_SWAP_LE_BE(*ptr) ^ 1 << 15;
-
- return (i);
-}
-
-static int convert_swap_sign_and_endian_to_alien(void **data, int length)
-{
- int i;
- guint16 *ptr = *data;
-
- for (i = 0; i < length; i += 2, ptr++)
- *ptr = GUINT16_SWAP_LE_BE(*ptr ^ 1 << 15);
-
- return i;
-}
-
-static int convert_swap_sign16(void **data, int length)
-{
- int i;
- gint16 *ptr = *data;
-
- for (i = 0; i < length; i += 2, ptr++)
- *ptr ^= 1 << 15;
-
- return i;
-}
-
-static int convert_swap_sign8(void **data, int length)
-{
- int i;
- gint8 *ptr = *data;
-
- for (i = 0; i < length; i++)
- *ptr++ ^= 1 << 7;
-
- return i;
-}
-
-static int convert_to_8_native_endian(void **data, int length)
-{
- int i;
- gint16 *input = *data;
- gint8 *output = *data;
-
- for (i = 0; i < length / 2; i++)
- *output++ = *input++ >> 8;
-
- return i;
-}
-
-static int convert_to_8_native_endian_swap_sign(void **data, int length)
-{
- int i;
- gint16 *input = *data;
- gint8 *output = *data;
-
- for (i = 0; i < length / 2; i++)
- *output++ = (*input++ >> 8) ^ (1 << 7);
-
- return i;
-}
-
-
-static int convert_to_8_alien_endian(void **data, int length)
-{
- int i;
- gint16 *input = *data;
- gint8 *output = *data;
-
- for (i = 0; i < length / 2; i++)
- *output++ = *input++ & 0xff;
-
- return i;
-}
-
-static int convert_to_8_alien_endian_swap_sign(void **data, int length)
-{
- int i;
- gint16 *input = *data;
- gint8 *output = *data;
-
- for (i = 0; i < length / 2; i++)
- *output++ = (*input++ & 0xff) ^ (1 << 7);
-
- return i;
-}
-
-static int convert_to_16_native_endian(void **data, int length)
-{
- int i;
- guint16 *output;
- guint8 *input = *data;
-
- *data = sun_get_convert_buffer(length * 2);
- output = *data;
-
- for (i = 0; i < length; i++)
- *output++ = *input++ << 8;
-
- return (i * 2);
-}
-
-static int convert_to_16_native_endian_swap_sign(void **data, int length)
-{
- int i;
- guint16 *output;
- guint8 *input = *data;
-
- *data = sun_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = (*input++ << 8) ^ (1 << 15);
-
- return (i * 2);
-}
-
-
-static int convert_to_16_alien_endian(void **data, int length)
-{
- int i;
- guint16 *output;
- guint8 *input = *data;
-
- *data = sun_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = *input++;
-
- return (i * 2);
-}
-
-static int convert_to_16_alien_endian_swap_sign(void **data, int length)
-{
- int i;
- guint16 *output;
- guint8 *input = *data;
-
- *data = sun_get_convert_buffer(length * 2);
- output = *data;
- for (i = 0; i < length; i++)
- *output++ = *input++ ^ (1 << 7);
-
- return (i * 2);
-}
-
-int (*sun_get_convert_func(int output, int input))(void **, int)
-{
- if (output == input)
- return NULL;
-
- if ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_ULINEAR_LE) ||
- (output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_ULINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR_BE))
- return convert_swap_endian;
-
- if ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR_BE) ||
- (output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_ULINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_ULINEAR_LE))
- return convert_swap_sign16;
-
- if ((IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_ULINEAR_LE))) ||
- (!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_ULINEAR_BE))))
- return convert_swap_sign_and_endian_to_native;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_ULINEAR_LE))) ||
- (IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_ULINEAR_BE))))
- return convert_swap_sign_and_endian_to_alien;
-
- if ((IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_ULINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_SLINEAR_BE))) ||
- (!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_ULINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_SLINEAR_LE))))
- return convert_to_8_native_endian;
-
- if ((IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_SLINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_ULINEAR_BE))) ||
- (!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_SLINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_ULINEAR_LE))))
- return convert_to_8_native_endian_swap_sign;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_ULINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_SLINEAR_BE))) ||
- (IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_ULINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_SLINEAR_LE))))
- return convert_to_8_alien_endian;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_SLINEAR_BE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_ULINEAR_BE))) ||
- (IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_SLINEAR_LE) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_ULINEAR_LE))))
- return convert_to_8_alien_endian_swap_sign;
-
- if ((output == AUDIO_ENCODING_PCM8 &&
- input == AUDIO_ENCODING_SLINEAR) ||
- (output == AUDIO_ENCODING_SLINEAR &&
- input == AUDIO_ENCODING_PCM8))
- return convert_swap_sign8;
-
- if ((IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_PCM8) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR))) ||
- (!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_PCM8) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR))))
- return convert_to_16_native_endian;
-
- if ((IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_PCM8))) ||
- (!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_PCM8))))
- return convert_to_16_native_endian_swap_sign;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_PCM8) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR))) ||
- (IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_PCM8) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR))))
- return convert_to_16_alien_endian;
-
- if ((!IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_BE &&
- input == AUDIO_ENCODING_SLINEAR) ||
- (output == AUDIO_ENCODING_SLINEAR_BE &&
- input == AUDIO_ENCODING_PCM8))) ||
- (IS_BIG_ENDIAN &&
- ((output == AUDIO_ENCODING_ULINEAR_LE &&
- input == AUDIO_ENCODING_SLINEAR) ||
- (output == AUDIO_ENCODING_SLINEAR_LE &&
- input == AUDIO_ENCODING_PCM8))))
- return convert_to_16_alien_endian_swap_sign;
-
- return NULL;
-}
diff --git a/src/sun/mixer.c b/src/sun/mixer.c
deleted file mode 100644
index 5d6af71..0000000
--- a/src/sun/mixer.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "sun.h"
-#include "mixer.h"
-
-int sun_mixer_open(void)
-{
- if (pthread_mutex_lock(&audio.mixer_mutex) != 0)
- return -1;
-
- if (!audio.mixer_keepopen || audio.mixerfd < 1)
- {
- audio.mixerfd = open(audio.devmixer, O_RDWR);
- if (audio.mixerfd < 0)
- perror(audio.devmixer);
- }
- return 0;
-}
-
-void sun_mixer_close(void)
-{
- if (!audio.mixer_keepopen)
- {
- close(audio.mixerfd);
- audio.mixerfd = 0;
- }
- pthread_mutex_unlock(&audio.mixer_mutex);
-}
-
-int sun_mixer_get_dev(int fd, int *dev, char *id)
-{
- mixer_devinfo_t info;
-
- for (info.index = 0; ioctl(fd, AUDIO_MIXER_DEVINFO, &info) >= 0;
- info.index++)
- {
- if (!strcmp(id, info.label.name))
- {
- *dev = info.index;
- return 0;
- }
- }
- return -1;
-}
-
-void sun_get_volume(int *l, int *r)
-{
- mixer_ctrl_t mixer;
-
- if (sun_mixer_open() < 0)
- {
- *l = 0;
- *r = 0;
- return;
- }
-
- if ((sun_mixer_get_dev(audio.mixerfd, &mixer.dev,
- audio.mixer_voldev) < 0))
- goto closemixer;
-
- mixer.type = AUDIO_MIXER_VALUE;
- if (audio.output != NULL)
- mixer.un.value.num_channels = audio.output->channels;
- else
- mixer.un.value.num_channels = 2;
-
- if (ioctl(audio.mixerfd, AUDIO_MIXER_READ, &mixer) < 0)
- goto closemixer;
- *l = (mixer.un.value.level[AUDIO_MIXER_LEVEL_LEFT] * 100) / 255;
- if (mixer.un.value.num_channels > 1)
- *r = (mixer.un.value.level[AUDIO_MIXER_LEVEL_RIGHT] * 100) / 255;
- else
- *r = *l;
-
- closemixer:
- sun_mixer_close();
-}
-
-void sun_set_volume(int l, int r)
-{
- mixer_ctrl_t mixer;
-
- if (sun_mixer_open() < 0)
- return;
-
- if ((sun_mixer_get_dev(audio.mixerfd, &mixer.dev,
- audio.mixer_voldev) < 0))
- {
- if (!audio.mixer_keepopen)
- close(audio.mixerfd);
- return;
- }
- mixer.type = AUDIO_MIXER_VALUE;
- if (audio.output != NULL)
- mixer.un.value.num_channels = audio.output->channels;
- else
- mixer.un.value.num_channels = 2;
- mixer.un.value.level[AUDIO_MIXER_LEVEL_LEFT] = (l * 255) / 100;
- if (mixer.un.value.num_channels > 1)
- mixer.un.value.level[AUDIO_MIXER_LEVEL_RIGHT] = (r * 255) / 100;
-
- if (ioctl(audio.mixerfd, AUDIO_MIXER_WRITE, &mixer) < 0)
- {
- if (!audio.mixer_keepopen)
- close(audio.mixerfd);
- return;
- }
- sun_mixer_close();
-}
diff --git a/src/sun/mixer.h b/src/sun/mixer.h
deleted file mode 100644
index 722054a..0000000
--- a/src/sun/mixer.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-int sun_mixer_open(void);
-void sun_mixer_close(void);
-int sun_mixer_get_dev(int, int *, char *);
-void sun_get_volume(int *, int *);
-void sun_set_volume(int, int);
-
diff --git a/src/sun/resample.h b/src/sun/resample.h
deleted file mode 100644
index 24fdcec..0000000
--- a/src/sun/resample.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* XMMS - Cross-platform multimedia player
- * Copyright (C) 1998-2001 Peter Alm, Mikael Alm, Olle Hallnas,
- * Thomas Nilsson and 4Front Technologies
- * Copyright (C) 1999-2001 Haavard Kvaalen
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#define NOT_NATIVE_ENDIAN \
- ((IS_BIG_ENDIAN && \
- (output.format.sun == AUDIO_ENCODING_SLINEAR_LE || \
- output.format.sun == AUDIO_ENCODING_ULINEAR_LE))|| \
- (!IS_BIG_ENDIAN && \
- (output.format.sun == AUDIO_ENCODING_SLINEAR_BE || \
- output.format.sun == AUDIO_ENCODING_ULINEAR_BE)))
-
-#define RESAMPLE_STEREO(sample_type) \
-do { \
- const int shift = sizeof (sample_type); \
- int i, in_samples, out_samples, x, delta; \
- sample_type *inptr = (sample_type *)ob, *outptr; \
- guint nlen = (((length >> shift) * espeed) / speed); \
- \
- if (nlen == 0) \
- break; \
- nlen <<= shift; \
- if (NOT_NATIVE_ENDIAN) \
- sun_bswap16(ob, length); \
- if (nlen > nbuffer_size) \
- { \
- nbuffer = g_realloc(nbuffer, nlen); \
- nbuffer_size = nlen; \
- } \
- outptr = (sample_type *)nbuffer; \
- in_samples = length >> shift; \
- out_samples = nlen >> shift; \
- delta = (in_samples << 12) / out_samples; \
- for (x = 0, i = 0; i < out_samples; i++) \
- { \
- int x1, frac; \
- x1 = (x >> 12) << 12; \
- frac = x - x1; \
- *outptr++ = \
- (sample_type) \
- ((inptr[(x1 >> 12) << 1] * \
- ((1<<12) - frac) + \
- inptr[((x1 >> 12) + 1) << 1] * \
- frac) >> 12); \
- *outptr++ = \
- (sample_type) \
- ((inptr[((x1 >> 12) << 1) + 1] * \
- ((1<<12) - frac) + \
- inptr[(((x1 >> 12) + 1) << 1) + 1] * \
- frac) >> 12); \
- x += delta; \
- } \
- if (NOT_NATIVE_ENDIAN) \
- sun_bswap16(nbuffer, nlen); \
- w = write_all(audio.fd, nbuffer, nlen); \
-} while (0)
-
-#define RESAMPLE_MONO(sample_type) \
-do { \
- const int shift = sizeof (sample_type) - 1; \
- int i, x, delta, in_samples, out_samples; \
- sample_type *inptr = (sample_type *)ob, *outptr; \
- guint nlen = (((length >> shift) * espeed) / speed); \
- \
- if (nlen == 0) \
- break; \
- nlen <<= shift; \
- if (NOT_NATIVE_ENDIAN) \
- sun_bswap16(ob, length); \
- if (nlen > nbuffer_size) \
- { \
- nbuffer = g_realloc(nbuffer, nlen); \
- nbuffer_size = nlen; \
- } \
- outptr = (sample_type *)nbuffer; \
- in_samples = length >> shift; \
- out_samples = nlen >> shift; \
- delta = ((length >> shift) << 12) / out_samples; \
- for (x = 0, i = 0; i < out_samples; i++) \
- { \
- int x1, frac; \
- x1 = (x >> 12) << 12; \
- frac = x - x1; \
- *outptr++ = \
- (sample_type) \
- ((inptr[x1 >> 12] * ((1<<12) - frac) + \
- inptr[(x1 >> 12) + 1] * frac) >> 12); \
- x += delta; \
- } \
- if (NOT_NATIVE_ENDIAN) \
- sun_bswap16(nbuffer, nlen); \
- w = write_all(audio.fd, nbuffer, nlen); \
-} while (0)
-
diff --git a/src/sun/sun.c b/src/sun/sun.c
deleted file mode 100644
index 519731b..0000000
--- a/src/sun/sun.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-
-#include "sun.h"
-#include <audacious/i18n.h>
-
-#include <errno.h>
-
-struct sun_audio audio;
-
-OutputPlugin sun_op =
-{
- .description = "BSD/Sun Output Plugin", /* Description */
- .probe_priority = 5,
- .init = sun_init,
- .cleanup = sun_cleanup,
- .about = sun_about,
- .configure = sun_configure,
- .get_volume = sun_get_volume,
- .set_volume = sun_set_volume,
- .open_audio = sun_open,
- .write_audio = sun_write,
- .close_audio = sun_close,
- .flush = sun_flush,
- .pause = sun_pause,
- .buffer_free = sun_free,
- .buffer_playing = sun_playing,
- .output_time = sun_output_time,
- .written_time = sun_written_time,
-};
-
-OutputPlugin *sun_oplist[] = { &sun_op, NULL };
-
-SIMPLE_OUTPUT_PLUGIN(sun, sun_oplist);
-
-OutputPluginInitStatus sun_init(void)
-{
- mcs_handle_t *cfgfile;
- char *s;
-
- memset(&audio, 0, sizeof(struct sun_audio));
-
- cfgfile = aud_cfg_db_open();
- /* Devices */
- aud_cfg_db_get_string(cfgfile, "sun", "audio_devaudio", &audio.devaudio);
- aud_cfg_db_get_string(cfgfile, "sun",
- "audio_devaudioctl", &audio.devaudioctl);
- aud_cfg_db_get_string(cfgfile, "sun", "audio_devmixer", &audio.devmixer);
-
- /* Buffering */
- aud_cfg_db_get_int(cfgfile, "sun",
- "buffer_size", &audio.req_buffer_size);
- aud_cfg_db_get_int(cfgfile, "sun",
- "prebuffer_size", &audio.req_prebuffer_size);
-
- /* Mixer */
- aud_cfg_db_get_string(cfgfile, "sun", "mixer_voldev", &audio.mixer_voldev);
- aud_cfg_db_get_bool(cfgfile, "sun",
- "mixer_keepopen", &audio.mixer_keepopen);
-
- aud_cfg_db_close(cfgfile);
-
- /* Audio device path */
- if ((s = getenv("AUDIODEVICE")))
- audio.devaudio = g_strdup(s);
- else if (!audio.devaudio || !strcmp("", audio.devaudio))
- audio.devaudio = g_strdup(SUN_DEV_AUDIO);
-
- /* Audio control device path */
- if (!audio.devaudioctl || !strcmp("", audio.devaudioctl))
- audio.devaudioctl = g_strdup(SUN_DEV_AUDIOCTL);
-
- /* Mixer device path */
- if ((s = getenv("MIXERDEVICE")))
- audio.devmixer = g_strdup(s);
- else if (!audio.devmixer || !strcmp("", audio.devmixer))
- audio.devmixer = g_strdup(SUN_DEV_MIXER);
-
- if (!audio.mixer_voldev || !strcmp("", audio.mixer_voldev))
- audio.mixer_voldev = g_strdup(SUN_DEFAULT_VOLUME_DEV);
-
- /* Default buffering settings */
- if (!audio.req_buffer_size)
- audio.req_buffer_size = SUN_DEFAULT_BUFFER_SIZE;
- if (!audio.req_prebuffer_size)
- audio.req_prebuffer_size = SUN_DEFAULT_PREBUFFER_SIZE;
-
- audio.input = NULL;
- audio.output = NULL;
- audio.effect = NULL;
-
- if (pthread_mutex_init(&audio.mixer_mutex, NULL) != 0)
- perror("mixer_mutex");
-
- return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
-}
-
-void sun_cleanup(void)
-{
- g_free(audio.devaudio);
- g_free(audio.devaudioctl);
- g_free(audio.devmixer);
- g_free(audio.mixer_voldev);
-
- if (!pthread_mutex_lock(&audio.mixer_mutex))
- {
- if (audio.mixerfd)
- close(audio.mixerfd);
- pthread_mutex_unlock(&audio.mixer_mutex);
- pthread_mutex_destroy(&audio.mixer_mutex);
- }
-}
-
diff --git a/src/sun/sun.h b/src/sun/sun.h
deleted file mode 100644
index 96df464..0000000
--- a/src/sun/sun.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2001 CubeSoft Communications, Inc.
- * <http://www.csoft.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <pthread.h>
-
-#include "audioio.h"
-
-#include <audacious/configdb.h>
-#include <audacious/plugin.h>
-#include <libaudgui/libaudgui.h>
-#include <libaudgui/libaudgui-gtk.h>
-
-/* Default path to audio device. */
-#ifndef SUN_DEV_AUDIO
-#define SUN_DEV_AUDIO "/dev/audio"
-#endif
-
-/* Default path to audioctl device */
-#ifndef SUN_DEV_AUDIOCTL
-#define SUN_DEV_AUDIOCTL "/dev/audioctl"
-#endif
-
-/* Default path to mixer device */
-#ifndef SUN_DEV_MIXER
-#define SUN_DEV_MIXER "/dev/mixer"
-#endif
-
-/* Default mixer device to control */
-#ifndef SUN_DEFAULT_VOLUME_DEV
-#define SUN_DEFAULT_VOLUME_DEV "dac"
-#endif
-
-/* Default hardware block size */
-#ifndef SUN_DEFAULT_BLOCKSIZE
-#define SUN_DEFAULT_BLOCKSIZE 8800
-#endif
-
-/* Default `requested' buffer size */
-#ifndef SUN_DEFAULT_BUFFER_SIZE
-#define SUN_DEFAULT_BUFFER_SIZE 8800
-#endif
-
-/* Minimum total buffer size */
-#ifndef SUN_MIN_BUFFER_SIZE
-#define SUN_MIN_BUFFER_SIZE 14336
-#endif
-
-/* Default prebuffering (%) */
-#ifndef SUN_DEFAULT_PREBUFFER_SIZE
-#define SUN_DEFAULT_PREBUFFER_SIZE 25
-#endif
-
-#define SUN_VERSION "0.6"
-
-struct sun_format {
- char name[16];
- union {
- gint xmms;
- gint sun;
- } format;
- int frequency;
- int channels;
- int bps;
-};
-
-struct sun_audio {
- struct sun_format *input;
- struct sun_format *output;
- struct sun_format *effect;
-
- gchar *devaudio;
- gchar *devaudioctl;
- gchar *devmixer;
- gchar *mixer_voldev;
-
- gint fd;
- gint mixerfd;
-
- gboolean mixer_keepopen;
-
- gboolean going;
- gboolean paused;
- gboolean unpause, do_pause;
-
- gint req_prebuffer_size;
- gint req_buffer_size;
-
- pthread_mutex_t mixer_mutex;
-};
-
-struct sun_statsframe {
- int fd;
- int active;
-
- GtkWidget *mode_label;
- GtkWidget *blocksize_label;
- GtkWidget *ooffs_label;
- pthread_mutex_t audioctl_mutex;
- pthread_mutex_t active_mutex;
-};
-
-extern OutputPlugin op;
-
-extern struct sun_audio audio;
-extern struct sun_statsframe stats_frame;
-
-OutputPluginInitStatus sun_init(void);
-void sun_about(void);
-void sun_configure(void);
-void sun_cleanup(void);
-
-gint sun_open(gint, int, int);
-void sun_write(void *, int);
-void sun_close(void);
-void sun_flush(int);
-void sun_pause(short);
-gint sun_free(void);
-gint sun_playing(void);
-gint sun_output_time(void);
-gint sun_written_time(void);
-void sun_get_volume(int *, int *);
-void sun_set_volume(int, int);
-void *sun_get_convert_buffer(size_t);
-int (*sun_get_convert_func(int, int))(void **, int);
-
-#ifdef WORDS_BIGENDIAN
-#define IS_BIG_ENDIAN TRUE
-#else
-#define IS_BIG_ENDIAN FALSE
-#endif
-
diff --git a/src/tonegen/Makefile b/src/tonegen/Makefile
index ba29879..f689e07 100644
--- a/src/tonegen/Makefile
+++ b/src/tonegen/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lm
diff --git a/src/tonegen/tonegen.c b/src/tonegen/tonegen.c
index 86d25f3..fe35523 100644
--- a/src/tonegen/tonegen.c
+++ b/src/tonegen/tonegen.c
@@ -26,6 +26,7 @@
#include <glib.h>
#include <stdlib.h>
+#include <string.h>
#include <math.h>
#define MIN_FREQ 10
@@ -38,12 +39,7 @@
#define PI 3.14159265358979323846
#endif
-static InputPlugin tone_ip;
-
-static void tone_init(void)
-{
- aud_uri_set_plugin("tone://", &tone_ip);
-}
+static gboolean stop_flag = FALSE;
static void tone_about (void)
{
@@ -58,7 +54,7 @@ static void tone_about (void)
"e.g. tone://2000;2005 to play a 2000Hz tone and a 2005Hz tone"));
}
-static gint tone_is_our_file(const gchar * filename)
+static gboolean tone_is_our_fd(const gchar *filename, VFSFile *fd)
{
if (!strncmp(filename, "tone://", 7))
return TRUE;
@@ -114,12 +110,13 @@ static gchar *tone_title(const gchar * filename)
return title;
}
-static void tone_play(InputPlayback * playback)
+static gboolean tone_play(InputPlayback *playback, const gchar *filename,
+ VFSFile *file, gint start_time, gint stop_time, gboolean pause)
{
GArray *frequencies;
- gchar *name, *filename = playback->filename;
gfloat data[BUF_SAMPLES];
gsize i;
+ gboolean error = FALSE;
struct
{
gdouble wd;
@@ -128,17 +125,18 @@ static void tone_play(InputPlayback * playback)
frequencies = tone_filename_parse(filename);
if (frequencies == NULL)
- return;
+ return FALSE;
if (playback->output->open_audio(FMT_FLOAT, OUTPUT_FREQ, 1) == 0)
{
- playback->error = TRUE;
+ error = TRUE;
goto error_exit;
}
- name = tone_title(filename);
- playback->set_params(playback, name, -1, 16 * OUTPUT_FREQ, OUTPUT_FREQ, 1);
- g_free(name);
+ if (pause)
+ playback->output->pause(TRUE);
+
+ playback->set_params(playback, 16 * OUTPUT_FREQ, OUTPUT_FREQ, 1);
tone = g_malloc(frequencies->len * sizeof(*tone));
for (i = 0; i < frequencies->len; i++)
@@ -149,11 +147,10 @@ static void tone_play(InputPlayback * playback)
tone[i].t = 0;
}
- playback->playing = TRUE;
- playback->error = FALSE;
+ stop_flag = FALSE;
playback->set_pb_ready(playback);
- while (playback->playing)
+ while (!stop_flag)
{
for (i = 0; i < BUF_SAMPLES; i++)
{
@@ -171,7 +168,8 @@ static void tone_play(InputPlayback * playback)
data[i] = (sum_sines * 0.999 / (gdouble) frequencies->len);
}
- playback->pass_audio(playback, FMT_FLOAT, 1, BUF_BYTES, data, &playback->playing);
+ if (!stop_flag)
+ playback->output->write_audio(data, BUF_BYTES);
}
error_exit:
@@ -179,20 +177,24 @@ error_exit:
g_free(tone);
playback->output->close_audio();
- playback->playing = FALSE;
+ stop_flag = TRUE;
+
+ return !error;
}
static void tone_stop(InputPlayback * playback)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
+ playback->output->abort_write();
}
-static void tone_pause(InputPlayback * playback, gshort paused)
+static void tone_pause(InputPlayback * playback, gboolean pause)
{
- playback->output->pause(paused);
+ if (!stop_flag)
+ playback->output->pause(pause);
}
-static Tuple *tone_get_song_tuple(const gchar * filename)
+static Tuple *tone_probe_for_tuple(const gchar *filename, VFSFile *fd)
{
Tuple *tuple = tuple_new_from_filename(filename);
gchar *tmp;
@@ -202,24 +204,23 @@ static Tuple *tone_get_song_tuple(const gchar * filename)
if ((tmp = tone_title(filename)) != NULL)
{
- tuple_associate_string(tuple, FIELD_TITLE, NULL, tmp);
+ tuple_set_str(tuple, FIELD_TITLE, NULL, tmp);
g_free(tmp);
}
return tuple;
}
-static InputPlugin tone_ip = {
- .description = "Tone Generator",
- .init = tone_init,
+static const gchar * const schemes[] = {"tone", NULL};
+
+AUD_INPUT_PLUGIN
+(
+ .name = "Tone Generator",
+ .schemes = schemes,
.about = tone_about,
- .is_our_file = tone_is_our_file,
- .play_file = tone_play,
+ .is_our_file_from_vfs = tone_is_our_fd,
+ .play = tone_play,
.stop = tone_stop,
.pause = tone_pause,
- .get_song_tuple = tone_get_song_tuple
-};
-
-static InputPlugin *tonegen_iplist[] = { &tone_ip, NULL };
-
-DECLARE_PLUGIN(tonegen, NULL, NULL, tonegen_iplist, NULL, NULL, NULL, NULL, NULL);
+ .probe_for_tuple = tone_probe_for_tuple
+)
diff --git a/src/unix-io/Makefile b/src/unix-io/Makefile
index c738d83..955f338 100644
--- a/src/unix-io/Makefile
+++ b/src/unix-io/Makefile
@@ -1,10 +1,12 @@
PLUGIN = unix-io${PLUGIN_SUFFIX}
-SRCS = unix-io.c
+SRCS = gtk.c unix-io.c
include ../../buildsys.mk
include ../../extra.mk
plugindir := ${plugindir}/${TRANSPORT_PLUGIN_DIR}
+CPPFLAGS += -I../.. ${GTK_CFLAGS}
CFLAGS += ${PLUGIN_CFLAGS}
+LIBS += ${GTK_LIBS} \ No newline at end of file
diff --git a/src/unix-io/gtk.c b/src/unix-io/gtk.c
new file mode 100644
index 0000000..5b5745c
--- /dev/null
+++ b/src/unix-io/gtk.c
@@ -0,0 +1,61 @@
+/*
+ * UNIX Transport Plugin for Audacious
+ * Copyright 2009-2011 John Lindgren
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions, and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions, and the following disclaimer in the documentation
+ * provided with the distribution.
+ *
+ * This software is provided "as is" and without any warranty, express or
+ * implied. In no event shall the authors be liable for any damages arising from
+ * the use of this software.
+ */
+
+#include <stdarg.h>
+
+#include <gtk/gtk.h>
+
+#include <audacious/i18n.h>
+#include <audacious/misc.h>
+#include <libaudgui/libaudgui-gtk.h>
+
+#include "config.h"
+
+void unix_about (void)
+{
+ static GtkWidget * window = NULL;
+
+ audgui_simple_message (& window, GTK_MESSAGE_INFO, _("About File I/O "
+ "Plugin"), "File I/O Plugin for Audacious\n"
+ "Copyright 2009-2011 John Lindgren\n\n"
+ "THIS PLUGIN IS REQUIRED. DO NOT DISABLE IT.\n\n"
+ "Redistribution and use in source and binary forms, with or without "
+ "modification, are permitted provided that the following conditions are "
+ "met:\n\n"
+ "1. Redistributions of source code must retain the above copyright "
+ "notice, this list of conditions, and the following disclaimer.\n\n"
+ "2. Redistributions in binary form must reproduce the above copyright "
+ "notice, this list of conditions, and the following disclaimer in the "
+ "documentation provided with the distribution.\n\n"
+ "This software is provided \"as is\" and without any warranty, express or "
+ "implied. In no event shall the authors be liable for any damages arising "
+ "from the use of this software.");
+}
+
+void unix_error (const gchar * format, ...)
+{
+ va_list args;
+ va_start (args, format);
+
+ char * error = g_strdup_vprintf (format, args);
+ aud_interface_show_error (error);
+ g_free (error);
+
+ va_end (args);
+}
diff --git a/src/unix-io/unix-io.c b/src/unix-io/unix-io.c
index 168340f..3d3b838 100644
--- a/src/unix-io/unix-io.c
+++ b/src/unix-io/unix-io.c
@@ -1,6 +1,6 @@
/*
* UNIX Transport Plugin for Audacious
- * Copyright 2009 John Lindgren
+ * Copyright 2009-2011 John Lindgren
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -28,21 +28,19 @@
#include <glib.h>
-#include <audacious/debug.h>
#include <audacious/plugin.h>
#include <libaudcore/audstrings.h>
-#define error(...) fprintf (stderr, "unix-io: " __VA_ARGS__)
+/* in gtk.c */
+void unix_error (const gchar * format, ...);
+void unix_about (void);
-static VFSFile * unix_fopen (const gchar * uri, const gchar * mode)
+static void * unix_fopen (const gchar * uri, const gchar * mode)
{
- VFSFile * file = NULL;
gboolean update;
mode_t mode_flag;
gint handle;
- AUDDBG ("fopen %s, mode = %s\n", uri, mode);
-
update = (strchr (mode, '+') != NULL);
switch (mode[0])
@@ -60,50 +58,55 @@ static VFSFile * unix_fopen (const gchar * uri, const gchar * mode)
return NULL;
}
+#ifdef _WIN32
+ mode_flag |= O_BINARY;
+#endif
+
gchar * filename = uri_to_filename (uri);
if (! filename)
return NULL;
if (mode_flag & O_CREAT)
+#ifdef S_IRGRP
handle = open (filename, mode_flag, S_IRUSR | S_IWUSR | S_IRGRP |
S_IROTH);
+#else
+ handle = open (filename, mode_flag, S_IRUSR | S_IWUSR);
+#endif
else
handle = open (filename, mode_flag);
- AUDDBG (" = %d.\n", handle);
-
if (handle < 0)
{
- error ("Cannot open %s: %s.\n", filename, strerror (errno));
- goto DONE;
+ unix_error ("Cannot open %s: %s.", filename, strerror (errno));
+ g_free (filename);
+ return NULL;
}
+#ifdef HAVE_FCNTL
fcntl (handle, F_SETFD, FD_CLOEXEC);
+#endif
- file = g_malloc (sizeof * file);
- file->handle = GINT_TO_POINTER (handle);
-
-DONE:
g_free (filename);
- return file;
+ return GINT_TO_POINTER (handle);
}
static gint unix_fclose (VFSFile * file)
{
- gint handle = GPOINTER_TO_INT (file->handle);
+ gint handle = GPOINTER_TO_INT (vfs_get_handle (file));
gint result = 0;
- AUDDBG ("[%d] fclose\n", handle);
-
+#ifdef HAVE_FSYNC
if (fsync (handle) < 0)
{
- error ("fsync failed: %s.\n", strerror (errno));
+ unix_error ("fsync failed: %s.", strerror (errno));
result = -1;
}
+#endif
if (close (handle) < 0)
{
- error ("close failed: %s.\n", strerror (errno));
+ unix_error ("close failed: %s.", strerror (errno));
result = -1;
}
@@ -112,19 +115,17 @@ static gint unix_fclose (VFSFile * file)
static gint64 unix_fread (void * ptr, gint64 size, gint64 nitems, VFSFile * file)
{
- gint handle = GPOINTER_TO_INT (file->handle);
+ gint handle = GPOINTER_TO_INT (vfs_get_handle (file));
gint64 goal = size * nitems;
gint64 total = 0;
-/* AUDDBG ("[%d] fread %d x %d\n", handle, (gint) size, (gint) nitems); */
-
while (total < goal)
{
gint64 readed = read (handle, (gchar *) ptr + total, goal - total);
if (readed < 0)
{
- error ("read failed: %s.\n", strerror (errno));
+ unix_error ("read failed: %s.", strerror (errno));
break;
}
@@ -134,47 +135,39 @@ static gint64 unix_fread (void * ptr, gint64 size, gint64 nitems, VFSFile * file
total += readed;
}
-/* AUDDBG (" = %d\n", (gint) total); */
-
return (size > 0) ? total / size : 0;
}
static gint64 unix_fwrite (const void * ptr, gint64 size, gint64 nitems,
VFSFile * file)
{
- gint handle = GPOINTER_TO_INT (file->handle);
+ gint handle = GPOINTER_TO_INT (vfs_get_handle (file));
gint64 goal = size * nitems;
gint64 total = 0;
- AUDDBG ("[%d] fwrite %d x %d\n", handle, (gint) size, (gint) nitems);
-
while (total < goal)
{
gint64 written = write (handle, (gchar *) ptr + total, goal - total);
if (written < 0)
{
- error ("write failed: %s.\n", strerror (errno));
+ unix_error ("write failed: %s.", strerror (errno));
break;
}
total += written;
}
- AUDDBG (" = %d\n", (gint) total);
-
return (size > 0) ? total / size : 0;
}
static gint unix_fseek (VFSFile * file, gint64 offset, gint whence)
{
- gint handle = GPOINTER_TO_INT (file->handle);
-
- AUDDBG ("[%d] fseek %d, whence = %d\n", handle, (gint) offset, whence);
+ gint handle = GPOINTER_TO_INT (vfs_get_handle (file));
if (lseek (handle, offset, whence) < 0)
{
- error ("lseek failed: %s.\n", strerror (errno));
+ unix_error ("lseek failed: %s.", strerror (errno));
return -1;
}
@@ -183,11 +176,11 @@ static gint unix_fseek (VFSFile * file, gint64 offset, gint whence)
static gint64 unix_ftell (VFSFile * file)
{
- gint handle = GPOINTER_TO_INT (file->handle);
+ gint handle = GPOINTER_TO_INT (vfs_get_handle (file));
gint64 result = lseek (handle, 0, SEEK_CUR);
if (result < 0)
- error ("lseek failed: %s.\n", strerror (errno));
+ unix_error ("lseek failed: %s.", strerror (errno));
return result;
}
@@ -222,14 +215,12 @@ static gboolean unix_feof (VFSFile * file)
static gint unix_ftruncate (VFSFile * file, gint64 length)
{
- gint handle = GPOINTER_TO_INT (file->handle);
-
- AUDDBG ("[%d] ftruncate %d\n", handle, (gint) length);
+ gint handle = GPOINTER_TO_INT (vfs_get_handle (file));
gint result = ftruncate (handle, length);
if (result < 0)
- error ("ftruncate failed: %s.\n", strerror (errno));
+ unix_error ("ftruncate failed: %s.", strerror (errno));
return result;
}
@@ -254,27 +245,27 @@ static gint64 unix_fsize (VFSFile * file)
return length;
}
-static VFSConstructor constructor =
-{
- .uri_id = "file://",
- .vfs_fopen_impl = unix_fopen,
- .vfs_fclose_impl = unix_fclose,
- .vfs_fread_impl = unix_fread,
- .vfs_fwrite_impl = unix_fwrite,
- .vfs_getc_impl = unix_getc,
- .vfs_ungetc_impl = unix_ungetc,
- .vfs_fseek_impl = unix_fseek,
- .vfs_rewind_impl = unix_rewind,
- .vfs_ftell_impl = unix_ftell,
- .vfs_feof_impl = unix_feof,
- .vfs_ftruncate_impl = unix_ftruncate,
- .vfs_fsize_impl = unix_fsize,
- .vfs_get_metadata_impl = NULL,
+static const gchar * const unix_schemes[] = {"file", NULL};
+
+static VFSConstructor constructor = {
+ .vfs_fopen_impl = unix_fopen,
+ .vfs_fclose_impl = unix_fclose,
+ .vfs_fread_impl = unix_fread,
+ .vfs_fwrite_impl = unix_fwrite,
+ .vfs_getc_impl = unix_getc,
+ .vfs_ungetc_impl = unix_ungetc,
+ .vfs_fseek_impl = unix_fseek,
+ .vfs_rewind_impl = unix_rewind,
+ .vfs_ftell_impl = unix_ftell,
+ .vfs_feof_impl = unix_feof,
+ .vfs_ftruncate_impl = unix_ftruncate,
+ .vfs_fsize_impl = unix_fsize
};
-static void unix_init (void)
-{
- vfs_register_transport (& constructor);
-}
-
-DECLARE_PLUGIN (unix_io, unix_init, NULL)
+AUD_TRANSPORT_PLUGIN
+(
+ .name = "File I/O",
+ .about = unix_about,
+ .schemes = unix_schemes,
+ .vtable = & constructor
+)
diff --git a/src/voice_removal/Makefile b/src/voice_removal/Makefile
index 2ded5bc..067c8d8 100644
--- a/src/voice_removal/Makefile
+++ b/src/voice_removal/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${EFFECT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${GTK_LIBS} ${GLIB_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/voice_removal/voice_removal.c b/src/voice_removal/voice_removal.c
index 99e2c9f..9156f4c 100644
--- a/src/voice_removal/voice_removal.c
+++ b/src/voice_removal/voice_removal.c
@@ -18,6 +18,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <glib.h>
+
#include "config.h"
#include <audacious/plugin.h>
@@ -69,16 +71,13 @@ static gint voice_output_to_decoder_time(gint time)
return time;
}
-static EffectPlugin voice = {
- .description = "Voice Removal Plugin",
+AUD_EFFECT_PLUGIN
+(
+ .name = "Voice Removal",
.start = voice_start,
.process = voice_process,
.finish = voice_finish,
.flush = voice_flush,
.decoder_to_output_time = voice_decoder_to_output_time,
.output_to_decoder_time = voice_output_to_decoder_time
-};
-
-EffectPlugin *voice_eplist[] = { &voice, NULL };
-
-SIMPLE_EFFECT_PLUGIN(voice_removal, voice_eplist);
+)
diff --git a/src/vorbis/Makefile b/src/vorbis/Makefile
index 7ad6125..6860b57 100644
--- a/src/vorbis/Makefile
+++ b/src/vorbis/Makefile
@@ -1,7 +1,6 @@
PLUGIN = vorbis${PLUGIN_SUFFIX}
-SRCS = configure.c \
- vcupdate.c \
+SRCS = vcupdate.c \
vcedit.c \
vorbis.c
@@ -11,5 +10,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${OGG_VORBIS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
-LIBS += ${OGG_VORBIS_LIBS} ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${OGG_VORBIS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../..
+LIBS += ${OGG_VORBIS_LIBS} ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/vorbis/configure.c b/src/vorbis/configure.c
deleted file mode 100644
index 2efb21d..0000000
--- a/src/vorbis/configure.c
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "config.h"
-
-#include "vorbis.h"
-
-#include <glib.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <audacious/configdb.h>
-#include <audacious/plugin.h>
-#include <audacious/preferences.h>
-#include <audacious/i18n.h>
-
-vorbis_config_t vorbis_cfg;
-
-static void
-vorbis_save_config()
-{
- mcs_handle_t *db;
-
- db = aud_cfg_db_open();
- aud_cfg_db_set_bool(db, "vorbis", "tag_override",
- vorbis_cfg.tag_override);
- aud_cfg_db_set_string(db, "vorbis", "tag_format", vorbis_cfg.tag_format);
- aud_cfg_db_close(db);
-}
-
-vorbis_config_t config; /* temporary config */
-
-static PreferencesWidget settings_elements[] = {
- {WIDGET_CHK_BTN, N_("Override generic titles"), &config.tag_override, NULL, NULL, FALSE},
- {WIDGET_ENTRY, N_("Title format:"), &config.tag_format, NULL, NULL, TRUE, {.entry = {FALSE}}, VALUE_STRING},
-};
-
-static PreferencesWidget prefs[] = {
- {WIDGET_BOX, N_("Ogg Vorbis Tags"), NULL, NULL, NULL, FALSE,
- {.box = {settings_elements,
- G_N_ELEMENTS(settings_elements),
- FALSE /* vertical */, TRUE /* frame */}}},
-};
-
-static void
-configure_apply()
-{
- vorbis_cfg.tag_override = config.tag_override;
-
- g_free(vorbis_cfg.tag_format);
- vorbis_cfg.tag_format = g_strdup(config.tag_format);
-
- vorbis_save_config();
-}
-
-static void
-configure_init(void)
-{
- memcpy(&config, &vorbis_cfg, sizeof(config));
- config.tag_format = g_strdup(vorbis_cfg.tag_format);
-}
-
-static void
-configure_cleanup(void)
-{
- g_free(config.tag_format);
- config.tag_format = NULL;
-}
-
-PluginPreferences preferences = {
- .title = N_("Ogg Vorbis Audio Plugin Configuration"),
- .prefs = prefs,
- .n_prefs = G_N_ELEMENTS(prefs),
- .type = PREFERENCES_WINDOW,
- .init = configure_init,
- .apply = configure_apply,
- .cleanup = configure_cleanup,
-};
diff --git a/src/vorbis/vcedit.c b/src/vorbis/vcedit.c
index 9dd6c01..dc14d2f 100644
--- a/src/vorbis/vcedit.c
+++ b/src/vorbis/vcedit.c
@@ -145,7 +145,7 @@ _fetch_next_packet(vcedit_state * s, ogg_packet * p, ogg_page * page)
{
int result;
char *buffer;
- int bytes;
+ gint64 bytes;
result = ogg_stream_packetout(s->os, p);
@@ -189,7 +189,7 @@ vcedit_open_callbacks(vcedit_state * state, void *in,
vcedit_write_func write_func)
{
char *buffer;
- int bytes, i;
+ gint64 bytes, i;
ogg_packet *header;
ogg_packet header_main;
ogg_packet header_comments;
@@ -317,7 +317,7 @@ vcedit_write(vcedit_state * state, void *out)
ogg_int64_t granpos = 0;
int result;
char *buffer;
- int bytes;
+ gint64 bytes;
int needflush = 0, needout = 0;
state->eosin = 0;
diff --git a/src/vorbis/vcedit.h b/src/vorbis/vcedit.h
index 983a2ee..ea4432f 100644
--- a/src/vorbis/vcedit.h
+++ b/src/vorbis/vcedit.h
@@ -19,8 +19,8 @@ extern "C" {
#include <vorbis/codec.h>
#include <audacious/plugin.h>
-typedef size_t (*vcedit_read_func)(void *, size_t, size_t, void *);
-typedef size_t (*vcedit_write_func)(const void *, size_t, size_t, void *);
+typedef gint64 (*vcedit_read_func)(void *, gint64, gint64, void *);
+typedef gint64 (*vcedit_write_func)(const void *, gint64, gint64, void *);
typedef struct {
ogg_sync_state *oy;
diff --git a/src/vorbis/vcupdate.c b/src/vorbis/vcupdate.c
index eab6ea6..eb1cddc 100644
--- a/src/vorbis/vcupdate.c
+++ b/src/vorbis/vcupdate.c
@@ -37,21 +37,23 @@
#include <audacious/i18n.h>
#include <libaudcore/audstrings.h>
-#include <mowgli.h>
-
#include "vorbis.h"
#include "vcedit.h"
static gboolean write_and_pivot_files(vcedit_state * state);
-static mowgli_dictionary_t *
-dictionary_from_vorbis_comment(vorbis_comment * vc)
+/* str_unref() may be a macro */
+static void str_unref_cb (void * str)
+{
+ str_unref (str);
+}
+
+static GHashTable * dictionary_from_vorbis_comment (vorbis_comment * vc)
{
- mowgli_dictionary_t *dict;
gint i;
- gchar *val;
- dict = mowgli_dictionary_create(g_ascii_strcasecmp);
+ GHashTable * dict = g_hash_table_new_full (g_str_hash, g_str_equal,
+ str_unref_cb, str_unref_cb);
for (i = 0; i < vc->comments; i++) {
gchar **frags;
@@ -59,13 +61,8 @@ dictionary_from_vorbis_comment(vorbis_comment * vc)
AUDDBG("%s\n", vc->user_comments[i]);
frags = g_strsplit(vc->user_comments[i], "=", 2);
- /* FIXME: need more rigorous checks to guard against
- borqued comments */
-
- /* No RHS? */
- val = frags[1] ? frags[1] : "";
-
- mowgli_dictionary_add(dict, frags[0], g_strdup(val));
+ if (frags[0] && frags[1])
+ g_hash_table_insert (dict, str_get (frags[0]), str_get (frags[1]));
g_strfreev(frags); /* Don't use g_free() for string lists! --eugene */
}
@@ -73,54 +70,43 @@ dictionary_from_vorbis_comment(vorbis_comment * vc)
return dict;
}
-static void
-dictionary_to_vorbis_comment(vorbis_comment * vc, mowgli_dictionary_t * dict)
+static void add_tag_cb (void * key, void * field, void * vc)
{
- mowgli_dictionary_iteration_state_t state;
- gchar *field;
+ vorbis_comment_add_tag (vc, key, field);
+}
+static void dictionary_to_vorbis_comment (vorbis_comment * vc, GHashTable * dict)
+{
vorbis_comment_clear(vc);
-
- MOWGLI_DICTIONARY_FOREACH(field, &state, dict) {
- vorbis_comment_add_tag(vc, state.cur->key, field);
- }
+ g_hash_table_foreach (dict, add_tag_cb, vc);
}
static void insert_str_tuple_field_to_dictionary (const Tuple * tuple, int
- fieldn, mowgli_dictionary_t * dict, char * key)
+ fieldn, GHashTable * dict, const char * key)
{
-
- if(mowgli_dictionary_find(dict, key) != NULL) g_free(mowgli_dictionary_delete(dict, key));
-
- gchar *tmp = (gchar*)tuple_get_string(tuple, fieldn, NULL);
- if(tmp != NULL && strlen(tmp) != 0) mowgli_dictionary_add(dict, key, g_strdup(tmp));
+ gchar *tmp = (gchar*)tuple_get_str(tuple, fieldn, NULL);
+ if (tmp && tmp[0])
+ g_hash_table_insert (dict, str_get (key), str_get (tmp));
+ str_unref(tmp);
}
static void insert_int_tuple_field_to_dictionary (const Tuple * tuple, int
- fieldn, mowgli_dictionary_t * dict, char * key)
+ fieldn, GHashTable * dict, const char * key)
{
int val;
- if(mowgli_dictionary_find(dict, key) != NULL) g_free(mowgli_dictionary_delete(dict, key));
-
if(tuple_get_value_type(tuple, fieldn, NULL) == TUPLE_INT && (val = tuple_get_int(tuple, fieldn, NULL)) >= 0) {
- gchar *tmp = g_strdup_printf("%d", val);
- mowgli_dictionary_add(dict, key, tmp);
+ char tmp[16];
+ snprintf (tmp, sizeof tmp, "%d", val);
+ g_hash_table_insert (dict, str_get (key), str_get (tmp));
}
}
-static void
-destroy_cb(mowgli_dictionary_elem_t *delem, void *privdata)
-{
- g_free(delem->data);
-}
-
gboolean vorbis_update_song_tuple (const Tuple * tuple, VFSFile * fd)
{
vcedit_state *state;
vorbis_comment *comment;
- mowgli_dictionary_t *dict;
gboolean ret;
if(!tuple || !fd) return FALSE;
@@ -133,7 +119,7 @@ gboolean vorbis_update_song_tuple (const Tuple * tuple, VFSFile * fd)
}
comment = vcedit_comments(state);
- dict = dictionary_from_vorbis_comment(comment);
+ GHashTable * dict = dictionary_from_vorbis_comment (comment);
insert_str_tuple_field_to_dictionary(tuple, FIELD_TITLE, dict, "title");
insert_str_tuple_field_to_dictionary(tuple, FIELD_ARTIST, dict, "artist");
@@ -145,7 +131,7 @@ gboolean vorbis_update_song_tuple (const Tuple * tuple, VFSFile * fd)
insert_int_tuple_field_to_dictionary(tuple, FIELD_TRACK_NUMBER, dict, "tracknumber");
dictionary_to_vorbis_comment(comment, dict);
- mowgli_dictionary_destroy(dict, destroy_cb, NULL);
+ g_hash_table_destroy (dict);
ret = write_and_pivot_files(state);
diff --git a/src/vorbis/vorbis.c b/src/vorbis/vorbis.c
index 8a1ec73..06649de 100644
--- a/src/vorbis/vorbis.c
+++ b/src/vorbis/vorbis.c
@@ -4,7 +4,7 @@
* Copyright (C) 2007 William Pitcock <nenolod@sacredspiral.co.uk>
* Copyright (C) 2008 Cristi Măgherușan <majeru@gentoo.ro>
* Copyright (C) 2008 Eugene Zagidullin <e.asphyx@gmail.com>
- * Copyright (C) 2009 Audacious Developers
+ * Copyright (C) 2009-2011 Audacious Developers
*
* ReplayGain processing Copyright (C) 2002 Gian-Carlo Pascutto <gcp@sjeng.org>
*
@@ -32,13 +32,13 @@
#include <glib.h>
#include <stdlib.h>
+#include <string.h>
#include <math.h>
#include <ogg/ogg.h>
#include <vorbis/codec.h>
#include <vorbis/vorbisfile.h>
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/plugin.h>
@@ -82,13 +82,11 @@ ov_callbacks vorbis_callbacks_stream = {
NULL
};
-static volatile gint seek_value = -1;
+static gint seek_value;
+static gboolean stop_flag = FALSE;
static GMutex * seek_mutex = NULL;
static GCond * seek_cond = NULL;
-gchar **vorbis_tag_encoding_list = NULL;
-
-
static gint
vorbis_check_fd(const gchar *filename, VFSFile *stream)
{
@@ -156,7 +154,7 @@ set_tuple_str(Tuple *tuple, const gint nfield, const gchar *field,
gchar *str = vorbis_comment_query(comment, key, 0);
if (str != NULL) {
gchar *tmp = str_to_utf8(str);
- tuple_associate_string(tuple, nfield, field, tmp);
+ tuple_set_str(tuple, nfield, field, tmp);
g_free(tmp);
}
}
@@ -174,9 +172,7 @@ get_tuple_for_vorbisfile(OggVorbis_File * vorbisfile, const gchar *filename)
(vorbisfile, -1) * 1000;
/* associate with tuple */
- tuple_associate_int(tuple, FIELD_LENGTH, NULL, length);
- /* maybe, it would be better to display nominal bitrate (like in main win), not average? --eugene */
- tuple_associate_int(tuple, FIELD_BITRATE, NULL, ov_bitrate(vorbisfile, -1) / 1000);
+ tuple_set_int(tuple, FIELD_LENGTH, NULL, length);
if ((comment = ov_comment(vorbisfile, -1)) != NULL) {
gchar *tmps;
@@ -187,24 +183,17 @@ get_tuple_for_vorbisfile(OggVorbis_File * vorbisfile, const gchar *filename)
set_tuple_str(tuple, FIELD_COMMENT, NULL, comment, "comment");
if ((tmps = vorbis_comment_query(comment, "tracknumber", 0)) != NULL)
- tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(tmps));
+ tuple_set_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(tmps));
if ((tmps = vorbis_comment_query (comment, "date", 0)) != NULL)
- tuple_associate_int (tuple, FIELD_YEAR, NULL, atoi (tmps));
+ tuple_set_int (tuple, FIELD_YEAR, NULL, atoi (tmps));
}
- tuple_associate_string(tuple, FIELD_QUALITY, NULL, "lossy");
-
- if (comment != NULL && comment->vendor != NULL)
- {
- gchar *codec = g_strdup_printf("Ogg Vorbis [%s]", comment->vendor);
- tuple_associate_string(tuple, FIELD_CODEC, NULL, codec);
- g_free(codec);
- }
- else
- tuple_associate_string(tuple, FIELD_CODEC, NULL, "Ogg Vorbis");
+ vorbis_info * info = ov_info (vorbisfile, -1);
+ tuple_set_format (tuple, "Ogg Vorbis", info->channels, info->rate,
+ info->bitrate_nominal / 1000);
- tuple_associate_string(tuple, FIELD_MIMETYPE, NULL, "application/ogg");
+ tuple_set_str(tuple, FIELD_MIMETYPE, NULL, "application/ogg");
return tuple;
}
@@ -314,33 +303,33 @@ static gboolean vorbis_play (InputPlayback * playback, const gchar * filename,
gint bytes, channels, samplerate, br;
gchar * title = NULL;
- playback->error = FALSE;
seek_value = (start_time > 0) ? start_time : -1;
+ stop_flag = FALSE;
+
memset(&vf, 0, sizeof(vf));
+ gboolean error = FALSE;
+
if (ov_open_callbacks (file, & vf, NULL, 0, vfs_is_streaming (file) ?
vorbis_callbacks_stream : vorbis_callbacks) < 0)
{
- playback->error = TRUE;
+ error = TRUE;
goto play_cleanup;
}
vi = ov_info(&vf, -1);
if (vi->channels > 2)
- {
- playback->eof = TRUE;
goto play_cleanup;
- }
br = vi->bitrate_nominal;
channels = vi->channels;
samplerate = vi->rate;
- playback->set_params (playback, NULL, 0, br, samplerate, channels);
+ playback->set_params (playback, br, samplerate, channels);
if (!playback->output->open_audio(FMT_FLOAT, samplerate, channels)) {
- playback->error = TRUE;
+ error = TRUE;
goto play_cleanup;
}
@@ -350,14 +339,8 @@ static gboolean vorbis_play (InputPlayback * playback, const gchar * filename,
vorbis_update_replaygain(&vf, &rg_info);
playback->output->set_replaygain_info (& rg_info);
- g_mutex_lock (seek_mutex);
-
- playback->playing = TRUE;
- playback->eof = FALSE;
playback->set_pb_ready(playback);
- g_mutex_unlock (seek_mutex);
-
/*
* Note that chaining changes things here; A vorbis file may
* be a mix of different channels, bitrates and sample rates.
@@ -372,7 +355,7 @@ static gboolean vorbis_play (InputPlayback * playback, const gchar * filename,
g_mutex_lock (seek_mutex);
- if (! playback->playing)
+ if (stop_flag)
{
g_mutex_unlock (seek_mutex);
break;
@@ -399,7 +382,6 @@ DRAIN:
while (playback->output->buffer_playing ())
g_usleep (10000);
- playback->eof = 1;
break;
}
@@ -415,8 +397,8 @@ DRAIN:
g_free (title);
title = g_strdup (new_title);
- playback->set_tuple (playback, get_tuple_for_vorbisfile
- (& vf, playback->filename));
+ playback->set_tuple (playback, get_tuple_for_vorbisfile (& vf,
+ filename));
}
}
@@ -428,10 +410,8 @@ DRAIN:
*/
vi = ov_info(&vf, -1);
- if (vi->channels > 2) {
- playback->eof = TRUE;
+ if (vi->channels > 2)
goto stop_processing;
- }
if (vi->rate != samplerate || vi->channels != channels) {
samplerate = vi->rate;
@@ -442,8 +422,7 @@ DRAIN:
playback->output->close_audio();
if (!playback->output->open_audio(FMT_FLOAT, vi->rate, vi->channels)) {
- playback->error = TRUE;
- playback->eof = TRUE;
+ error = TRUE;
goto stop_processing;
}
@@ -457,20 +436,15 @@ DRAIN:
stop_processing:
- if (current_section <= last_section) {
- /*
- * set total play time, bitrate, rate, and channels of
- * current section
- */
- playback->set_params (playback, NULL, 0, br, samplerate, channels);
-
+ if (current_section <= last_section)
+ {
+ playback->set_params (playback, br, samplerate, channels);
last_section = current_section;
-
}
} /* main loop */
g_mutex_lock (seek_mutex);
- playback->playing = FALSE;
+ stop_flag = TRUE;
g_cond_signal (seek_cond); /* wake up any waiting request */
g_mutex_unlock (seek_mutex);
@@ -480,16 +454,16 @@ play_cleanup:
ov_clear(&vf);
g_free (title);
- return ! playback->error;
+ return ! error;
}
static void vorbis_stop (InputPlayback * playback)
{
g_mutex_lock (seek_mutex);
- if (playback->playing)
+ if (! stop_flag)
{
- playback->playing = FALSE;
+ stop_flag = TRUE;
playback->output->abort_write ();
g_cond_signal (seek_cond);
}
@@ -497,21 +471,21 @@ static void vorbis_stop (InputPlayback * playback)
g_mutex_unlock (seek_mutex);
}
-static void vorbis_pause (InputPlayback * playback, gshort pause)
+static void vorbis_pause (InputPlayback * playback, gboolean pause)
{
g_mutex_lock (seek_mutex);
- if (playback->playing)
+ if (! stop_flag)
playback->output->pause (pause);
g_mutex_unlock (seek_mutex);
}
-static void vorbis_mseek (InputPlayback * playback, gulong time)
+static void vorbis_mseek (InputPlayback * playback, gint time)
{
g_mutex_lock (seek_mutex);
- if (playback->playing)
+ if (! stop_flag)
{
seek_value = time;
playback->output->abort_write ();
@@ -541,6 +515,56 @@ static Tuple * get_song_tuple (const gchar * filename, VFSFile * file)
return tuple;
}
+static gboolean get_song_image (const gchar * filename, VFSFile * file,
+ void * * data, gint64 * size)
+{
+ OggVorbis_File vfile;
+
+ if (ov_open_callbacks (file, & vfile, NULL, 0, vfs_is_streaming (file) ?
+ vorbis_callbacks_stream : vorbis_callbacks) < 0)
+ return FALSE;
+
+ vorbis_comment * comment = ov_comment (& vfile, -1);
+ if (! comment)
+ goto ERR;
+
+ const gchar * s = vorbis_comment_query (comment, "METADATA_BLOCK_PICTURE", 0);
+ if (! s)
+ goto ERR;
+
+ gsize length2;
+ void * data2 = g_base64_decode (s, & length2);
+ if (! data2 || length2 < 8)
+ goto PARSE_ERR;
+
+ gint mime_length = GUINT32_FROM_BE (* (guint32 *) (data2 + 4));
+ if (length2 < 8 + mime_length + 4)
+ goto PARSE_ERR;
+
+ gint desc_length = GUINT32_FROM_BE (* (guint32 *) (data2 + 8 + mime_length));
+ if (length2 < 8 + mime_length + 4 + desc_length + 20)
+ goto PARSE_ERR;
+
+ * size = GUINT32_FROM_BE (* (guint32 *) (data2 + 8 + mime_length + 4 + desc_length + 16));
+ if (length2 < 8 + mime_length + 4 + desc_length + 20 + * size)
+ goto PARSE_ERR;
+
+ * data = g_malloc (* size);
+ memcpy (* data, data2 + 8 + mime_length + 4 + desc_length + 20, * size);
+
+ g_free (data2);
+ ov_clear (& vfile);
+ return TRUE;
+
+PARSE_ERR:
+ fprintf (stderr, "vorbis: Error parsing METADATA_BLOCK_PICTURE in %s.\n", filename);
+ g_free (data2);
+
+ERR:
+ ov_clear (& vfile);
+ return FALSE;
+}
+
static void vorbis_aboutbox (void)
{
static GtkWidget * about_window = NULL;
@@ -566,121 +590,40 @@ static void vorbis_aboutbox (void)
"Visit the Xiph.org Foundation at http://www.xiph.org/\n"));
}
-static InputPlugin vorbis_ip;
-
-static void
-vorbis_init(void)
+static gboolean vorbis_init (void)
{
- mcs_handle_t *db;
- gchar *tmp = NULL;
-
- memset(&vorbis_cfg, 0, sizeof(vorbis_config_t));
- vorbis_cfg.http_buffer_size = 128;
- vorbis_cfg.http_prebuffer = 25;
- vorbis_cfg.proxy_port = 8080;
- vorbis_cfg.proxy_use_auth = FALSE;
- vorbis_cfg.proxy_user = NULL;
- vorbis_cfg.proxy_pass = NULL;
- vorbis_cfg.tag_override = FALSE;
- vorbis_cfg.tag_format = NULL;
-
- db = aud_cfg_db_open();
- aud_cfg_db_get_int(db, "vorbis", "http_buffer_size",
- &vorbis_cfg.http_buffer_size);
- aud_cfg_db_get_int(db, "vorbis", "http_prebuffer",
- &vorbis_cfg.http_prebuffer);
- aud_cfg_db_get_bool(db, "vorbis", "save_http_stream",
- &vorbis_cfg.save_http_stream);
- if (!aud_cfg_db_get_string(db, "vorbis", "save_http_path",
- &vorbis_cfg.save_http_path))
- vorbis_cfg.save_http_path = g_strdup(g_get_home_dir());
-
- aud_cfg_db_get_bool(db, "vorbis", "tag_override",
- &vorbis_cfg.tag_override);
- if (!aud_cfg_db_get_string(db, "vorbis", "tag_format",
- &vorbis_cfg.tag_format))
- vorbis_cfg.tag_format = g_strdup("%p - %t");
-
- aud_cfg_db_get_bool(db, NULL, "use_proxy", &vorbis_cfg.use_proxy);
- aud_cfg_db_get_string(db, NULL, "proxy_host", &vorbis_cfg.proxy_host);
- aud_cfg_db_get_string(db, NULL, "proxy_port", &tmp);
-
- if (tmp != NULL)
- vorbis_cfg.proxy_port = atoi(tmp);
-
- aud_cfg_db_get_bool(db, NULL, "proxy_use_auth", &vorbis_cfg.proxy_use_auth);
- aud_cfg_db_get_string(db, NULL, "proxy_user", &vorbis_cfg.proxy_user);
- aud_cfg_db_get_string(db, NULL, "proxy_pass", &vorbis_cfg.proxy_pass);
-
- aud_cfg_db_close(db);
-
seek_mutex = g_mutex_new();
seek_cond = g_cond_new();
-
- aud_mime_set_plugin("application/ogg", &vorbis_ip);
+ return TRUE;
}
static void
vorbis_cleanup(void)
{
- if (vorbis_cfg.save_http_path) {
- g_free(vorbis_cfg.save_http_path);
- vorbis_cfg.save_http_path = NULL;
- }
-
- if (vorbis_cfg.proxy_host) {
- g_free(vorbis_cfg.proxy_host);
- vorbis_cfg.proxy_host = NULL;
- }
-
- if (vorbis_cfg.proxy_user) {
- g_free(vorbis_cfg.proxy_user);
- vorbis_cfg.proxy_user = NULL;
- }
-
- if (vorbis_cfg.proxy_pass) {
- g_free(vorbis_cfg.proxy_pass);
- vorbis_cfg.proxy_pass = NULL;
- }
-
- if (vorbis_cfg.tag_format) {
- g_free(vorbis_cfg.tag_format);
- vorbis_cfg.tag_format = NULL;
- }
-
- if (vorbis_cfg.title_encoding) {
- g_free(vorbis_cfg.title_encoding);
- vorbis_cfg.title_encoding = NULL;
- }
-
- g_strfreev(vorbis_tag_encoding_list);
g_mutex_free(seek_mutex);
g_cond_free(seek_cond);
}
-extern PluginPreferences preferences;
-
static const gchar *vorbis_fmts[] = { "ogg", "ogm", "oga", NULL };
+static const gchar * const mimes[] = {"application/ogg", NULL};
-static InputPlugin vorbis_ip = {
- .description = "Ogg Vorbis Audio Plugin",
+AUD_INPUT_PLUGIN
+(
+ .name = "Ogg Vorbis",
.init = vorbis_init,
.about = vorbis_aboutbox,
- .settings = &preferences,
.play = vorbis_play,
.stop = vorbis_stop,
.pause = vorbis_pause,
.mseek = vorbis_mseek,
.cleanup = vorbis_cleanup,
.probe_for_tuple = get_song_tuple,
- .is_our_file_from_vfs = vorbis_check_fd,
- .vfs_extensions = vorbis_fmts,
+ .get_song_image = get_song_image,
.update_song_tuple = vorbis_update_song_tuple,
+ .is_our_file_from_vfs = vorbis_check_fd,
+ .extensions = vorbis_fmts,
+ .mimes = mimes,
/* Vorbis probing is a bit slow; check for MP3 and AAC first. -jlindgren */
.priority = 2,
-};
-
-static InputPlugin *vorbis_iplist[] = { &vorbis_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN (vorbis, vorbis_iplist)
+)
diff --git a/src/vorbis/vorbis.h b/src/vorbis/vorbis.h
index 6fd5855..1dd3442 100644
--- a/src/vorbis/vorbis.h
+++ b/src/vorbis/vorbis.h
@@ -9,22 +9,4 @@ extern ov_callbacks vorbis_callbacks;
gboolean vorbis_update_song_tuple (const Tuple * tuple, VFSFile * fd);
-typedef struct {
- gint http_buffer_size;
- gint http_prebuffer;
- gboolean use_proxy;
- gchar *proxy_host;
- gint proxy_port;
- gboolean proxy_use_auth;
- gchar *proxy_user, *proxy_pass;
- gboolean save_http_stream;
- gchar *save_http_path;
- gboolean tag_override;
- gchar *tag_format;
- gboolean title_encoding_enabled;
- gchar *title_encoding;
-} vorbis_config_t;
-
-extern vorbis_config_t vorbis_cfg;
-
#endif /* __VORBIS_H__ */
diff --git a/src/vtx/Makefile b/src/vtx/Makefile
index 419a702..921a2cf 100644
--- a/src/vtx/Makefile
+++ b/src/vtx/Makefile
@@ -13,5 +13,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} -I../.. -I.
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS}
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -I.
+LIBS += ${GTK_LIBS} ${GLIB_LIBS}
diff --git a/src/vtx/ay8912.c b/src/vtx/ay8912.c
index e7ebd82..003b379 100644
--- a/src/vtx/ay8912.c
+++ b/src/vtx/ay8912.c
@@ -1,5 +1,6 @@
/* AY/YM emulator implementation. */
+#include <stdio.h>
#include <inttypes.h>
#include "ayemu.h"
@@ -412,7 +413,7 @@ void *ayemu_gen_sound(ayemu_ay_t *ay, void *buff, size_t sound_bufsize)
snd_numcount = sound_bufsize / (ay->sndfmt.channels * (ay->sndfmt.bpc >> 3));
while (snd_numcount-- > 0) {
mix_l = mix_r = 0;
-
+
for (m = 0 ; m < ay->ChipTacts_per_outcount ; m++) {
if (++ay->cnt_a >= ay->regs.tone_a) {
ay->cnt_a = 0;
@@ -426,15 +427,15 @@ void *ayemu_gen_sound(ayemu_ay_t *ay, void *buff, size_t sound_bufsize)
ay->cnt_c = 0;
ay->bit_c = ! ay->bit_c;
}
-
+
/* GenNoise (c) Hacker KAY & Sergey Bulba */
if (++ay->cnt_n >= (ay->regs.noise * 2)) {
ay->cnt_n = 0;
ay->Cur_Seed = (ay->Cur_Seed * 2 + 1) ^ \
- (((ay->Cur_Seed >> 16) ^ (ay->Cur_Seed >> 13)) & 1);
+ (((ay->Cur_Seed >> 16) ^ (ay->Cur_Seed >> 13)) & 1);
ay->bit_n = ((ay->Cur_Seed >> 16) & 1);
}
-
+
if (++ay->cnt_e >= ay->regs.env_freq) {
ay->cnt_e = 0;
if (++ay->env_pos > 127)
@@ -448,23 +449,23 @@ void *ayemu_gen_sound(ayemu_ay_t *ay, void *buff, size_t sound_bufsize)
mix_l += ay->vols[0][tmpvol];
mix_r += ay->vols[1][tmpvol];
}
-
+
if ((ay->bit_b | !ay->regs.R7_tone_b) & (ay->bit_n | !ay->regs.R7_noise_b)) {
tmpvol =(ay->regs.env_b)? ENVVOL : ay->regs.vol_b * 2 + 1;
mix_l += ay->vols[2][tmpvol];
mix_r += ay->vols[3][tmpvol];
}
-
+
if ((ay->bit_c | !ay->regs.R7_tone_c) & (ay->bit_n | !ay->regs.R7_noise_c)) {
tmpvol = (ay->regs.env_c)? ENVVOL : ay->regs.vol_c * 2 + 1;
mix_l += ay->vols[4][tmpvol];
mix_r += ay->vols[5][tmpvol];
- }
+ }
} /* end for (m=0; ...) */
-
+
mix_l /= ay->Amp_Global;
mix_r /= ay->Amp_Global;
-
+
if (ay->sndfmt.bpc == 8) {
mix_l = (mix_l >> 8) | 128; /* 8 bit sound */
mix_r = (mix_r >> 8) | 128;
diff --git a/src/vtx/vtx.c b/src/vtx/vtx.c
index 26c2d50..f284a38 100644
--- a/src/vtx/vtx.c
+++ b/src/vtx/vtx.c
@@ -1,6 +1,7 @@
-/* VTXplugin - VTX player for XMMS
+/* VTX Input Plugin for Audacious
*
* Copyright (C) 2002-2004 Sashnov Alexander
+ * Copyright (C) 2010 Michał Lipski <tallica@o2.pl>
*
* 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
@@ -17,280 +18,258 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <audacious/configdb.h>
#include <audacious/i18n.h>
#include <audacious/misc.h>
#include <audacious/plugin.h>
-#include <libaudcore/tuple_formatter.h>
+#include <audacious/debug.h>
#include "vtx.h"
#include "ayemu.h"
-extern InputPlugin vtx_ip;
-
#define SNDBUFSIZE 1024
-char sndbuf[SNDBUFSIZE];
-
-static GThread *play_thread = NULL;
-
-int seek_to;
-
-int freq = 44100;
-int chans = 2;
+static gchar sndbuf[SNDBUFSIZE];
+static gint freq = 44100;
+static gint chans = 2;
+static gint bits = 16;
-/* NOTE: if you change 'bits' you also need change constant FMT_S16_NE
- * to more appropriate in line
- *
- * (vtx_ip.output->open_audio (FMT_S16_NE, * freq, chans) == 0)
- * in function vtx_play_file()
- *
- * and in produce_audio() function call.
- */
-const int bits = 16;
+static GMutex *seek_mutex;
+static GCond *seek_cond;
+static gint seek_value;
+static gboolean stop_flag = FALSE;
ayemu_ay_t ay;
ayemu_vtx_t vtx;
static const gchar *vtx_fmts[] = { "vtx", NULL };
-void
-vtx_init(void)
+static gboolean vtx_init(void)
{
- mcs_handle_t *db;
- db = aud_cfg_db_open();
-
- aud_cfg_db_get_int(db, NULL, "src_rate", &freq);
- if (freq < 4000 || freq > 192000)
- freq = 44100;
+ seek_mutex = g_mutex_new();
+ seek_cond = g_cond_new();
- aud_cfg_db_close(db);
+ return TRUE;
}
-gint
-vtx_is_our_fd (const gchar *filename, VFSFile *fp)
+static void vtx_cleanup(void)
{
- char buf[2];
- if (vfs_fread(buf, 1, 2, fp) < 2)
- return FALSE;
- return (!strncasecmp (buf, "ay", 2) || !strncasecmp (buf, "ym", 2));
+ g_mutex_free(seek_mutex);
+ g_cond_free(seek_cond);
}
-gint
-vtx_is_our_file (const gchar *filename)
+gint vtx_is_our_fd(const gchar * filename, VFSFile * fp)
{
- gboolean ret;
- VFSFile *fp;
-
- fp = vfs_fopen(filename, "rb");
- ret = vtx_is_our_fd(filename, fp);
- vfs_fclose(fp);
-
- return ret;
+ gchar buf[2];
+ if (vfs_fread(buf, 1, 2, fp) < 2)
+ return FALSE;
+ return (!strncasecmp(buf, "ay", 2) || !strncasecmp(buf, "ym", 2));
}
-Tuple *
-vtx_get_song_tuple_from_vtx(const gchar *filename, ayemu_vtx_t *in)
+Tuple *vtx_get_song_tuple_from_vtx(const gchar * filename, ayemu_vtx_t * in)
{
- Tuple *out = tuple_new_from_filename(filename);
+ Tuple *out = tuple_new_from_filename(filename);
- tuple_associate_string(out, FIELD_ARTIST, NULL, in->hdr.author);
- tuple_associate_string(out, FIELD_TITLE, NULL, in->hdr.title);
+ tuple_set_str(out, FIELD_ARTIST, NULL, in->hdr.author);
+ tuple_set_str(out, FIELD_TITLE, NULL, in->hdr.title);
- tuple_associate_int(out, FIELD_LENGTH, NULL, in->hdr.regdata_size / 14 * 1000 / 50);
+ tuple_set_int(out, FIELD_LENGTH, NULL, in->hdr.regdata_size / 14 * 1000 / 50);
- tuple_associate_string(out, FIELD_GENRE, NULL, (in->hdr.chiptype == AYEMU_AY)? "AY chiptunes" : "YM chiptunes");
- tuple_associate_string(out, FIELD_ALBUM, NULL, in->hdr.from);
- tuple_associate_string(out, -1, "game", in->hdr.from);
+ tuple_set_str(out, FIELD_GENRE, NULL, (in->hdr.chiptype == AYEMU_AY) ? "AY chiptunes" : "YM chiptunes");
+ tuple_set_str(out, FIELD_ALBUM, NULL, in->hdr.from);
+ tuple_set_str(out, -1, "game", in->hdr.from);
- tuple_associate_string(out, FIELD_QUALITY, NULL, "sequenced");
- tuple_associate_string(out, FIELD_CODEC, NULL, in->hdr.tracker);
- tuple_associate_string(out, -1, "tracker", in->hdr.tracker);
+ tuple_set_str(out, FIELD_QUALITY, NULL, "sequenced");
+ tuple_set_str(out, FIELD_CODEC, NULL, in->hdr.tracker);
+ tuple_set_str(out, -1, "tracker", in->hdr.tracker);
- tuple_associate_int(out, FIELD_YEAR, NULL, in->hdr.year);
+ tuple_set_int(out, FIELD_YEAR, NULL, in->hdr.year);
- return out;
+ return out;
}
-Tuple *
-vtx_get_song_tuple(const gchar *filename)
+Tuple *vtx_probe_for_tuple(const gchar *filename, VFSFile *fd)
{
- ayemu_vtx_t tmp;
+ ayemu_vtx_t tmp;
- if (ayemu_vtx_open (&tmp, filename))
+ if (ayemu_vtx_open(&tmp, filename))
{
- Tuple *ti = vtx_get_song_tuple_from_vtx(filename, &tmp);
- ayemu_vtx_free(&tmp);
- return ti;
+ Tuple *ti = vtx_get_song_tuple_from_vtx(filename, &tmp);
+ ayemu_vtx_free(&tmp);
+ return ti;
}
- return NULL;
+ return NULL;
}
-/* sound playing thread, runing by vtx_play_file() */
-static gpointer
-play_loop (gpointer args)
+static gboolean vtx_play(InputPlayback * playback, const gchar * filename,
+ VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
- InputPlayback *playback = (InputPlayback *) args;
- void *stream; /* pointer to current position in sound buffer */
- unsigned char regs[14];
- int need;
- int left; /* how many sound frames can play with current AY register frame */
- int donow;
- int rate;
-
- left = 0;
- rate = chans * (bits / 8);
-
- while (playback->playing && !playback->eof)
+ gboolean error = FALSE;
+ gboolean eof = FALSE;
+ void *stream; /* pointer to current position in sound buffer */
+ guchar regs[14];
+ gint need;
+ gint left; /* how many sound frames can play with current AY register frame */
+ gint donow;
+ gint rate;
+
+ left = 0;
+ rate = chans * (bits / 8);
+
+ memset(&ay, 0, sizeof(ay));
+
+ if (!ayemu_vtx_open(&vtx, filename))
{
- /* fill sound buffer */
- stream = sndbuf;
- for (need = SNDBUFSIZE / rate ; need > 0 ; need -= donow)
- if (left > 0)
- { /* use current AY register frame */
- donow = (need > left) ? left : need;
- left -= donow;
- stream = ayemu_gen_sound (&ay, (char *)stream, donow * rate);
- }
- else
- { /* get next AY register frame */
- if (ayemu_vtx_get_next_frame (&vtx, (char *)regs) == 0)
- {
- playback->eof = TRUE;
- donow = need;
- memset (stream, 0, donow * rate);
- }
- else
- {
- left = freq / vtx.hdr.playerFreq;
- ayemu_set_regs (&ay, regs);
- donow = 0;
- }
- }
-
- if (playback->playing && seek_to == -1)
- playback->pass_audio(playback, FMT_S16_NE,
- chans , SNDBUFSIZE, sndbuf, &playback->playing);
-
- if (playback->eof)
- {
- while (playback->output->buffer_playing())
- g_usleep(10000);
- playback->playing = 0;
- }
-
- /* jump to time in seek_to (in seconds) */
- if (seek_to != -1)
- {
- vtx.pos = seek_to * 50; /* (time in sec) * 50 = offset in AY register data frames */
- playback->output->flush (seek_to * 1000);
- seek_to = -1;
- }
+ g_print("libvtx: Error read vtx header from %s\n", filename);
+ error = TRUE;
+ goto ERR_NO_CLOSE;
+ }
+ else if (!ayemu_vtx_load_data(&vtx))
+ {
+ g_print("libvtx: Error read vtx data from %s\n", filename);
+ error = TRUE;
+ goto ERR_NO_CLOSE;
}
- ayemu_vtx_free (&vtx);
- return NULL;
-}
-
-void vtx_play_file (InputPlayback *playback)
-{
- gchar *filename = playback->filename;
- gchar *buf;
- Tuple *ti;
- memset (&ay, 0, sizeof(ay));
+ ayemu_init(&ay);
+ ayemu_set_chip_type(&ay, vtx.hdr.chiptype, NULL);
+ ayemu_set_chip_freq(&ay, vtx.hdr.chipFreq);
+ ayemu_set_stereo(&ay, vtx.hdr.stereo, NULL);
- if (!ayemu_vtx_open (&vtx, filename))
- g_print ("libvtx: Error read vtx header from %s\n", filename);
- else if (!ayemu_vtx_load_data (&vtx))
- g_print ("libvtx: Error read vtx data from %s\n", filename);
- else
+ if (playback->output->open_audio(FMT_S16_NE, freq, chans) == 0)
{
- ayemu_init(&ay);
- ayemu_set_chip_type(&ay, vtx.hdr.chiptype, NULL);
- ayemu_set_chip_freq(&ay, vtx.hdr.chipFreq);
- ayemu_set_stereo(&ay, vtx.hdr.stereo, NULL);
+ g_print("libvtx: output audio error!\n");
+ error = TRUE;
+ goto ERR_NO_CLOSE;
+ }
+
+ if (pause)
+ playback->output->pause (TRUE);
- playback->error = FALSE;
- if (playback->output->open_audio (FMT_S16_NE, freq, chans) == 0)
- {
- g_print ("libvtx: output audio error!\n");
- playback->error = TRUE;
- playback->playing = FALSE;
- return;
- }
+ stop_flag = FALSE;
- playback->eof = FALSE;
- seek_to = -1;
+ playback->set_params(playback, 14 * 50 * 8, freq, bits / 8);
+ playback->set_pb_ready(playback);
- ti = vtx_get_song_tuple_from_vtx(playback->filename, &vtx);
- buf = tuple_formatter_make_title_string(ti, aud_get_gentitle_format());
+ while (!stop_flag)
+ {
+ g_mutex_lock(seek_mutex);
+
+ if (seek_value >= 0)
+ {
+ vtx.pos = seek_value * 50 / 1000; /* (time in sec) * 50 = offset in AY register data frames */
+ playback->output->flush(seek_value);
+ seek_value = -1;
+ g_cond_signal(seek_cond);
+ }
+
+ g_mutex_unlock(seek_mutex);
+
+ /* fill sound buffer */
+ stream = sndbuf;
+
+ for (need = SNDBUFSIZE / rate; need > 0; need -= donow)
+ if (left > 0)
+ { /* use current AY register frame */
+ donow = (need > left) ? left : need;
+ left -= donow;
+ stream = ayemu_gen_sound(&ay, (char *)stream, donow * rate);
+ }
+ else
+ { /* get next AY register frame */
+ if (ayemu_vtx_get_next_frame(&vtx, (char *)regs) == 0)
+ {
+ donow = need;
+ memset(stream, 0, donow * rate);
+ eof = TRUE;
+ }
+ else
+ {
+ left = freq / vtx.hdr.playerFreq;
+ ayemu_set_regs(&ay, regs);
+ donow = 0;
+ }
+ }
+
+ if (!stop_flag)
+ playback->output->write_audio(sndbuf, SNDBUFSIZE);
+
+ if (eof)
+ {
+ AUDDBG("EOF.\n");
+
+ while (!stop_flag && playback->output->buffer_playing())
+ g_usleep(10000);
+
+ goto CLEANUP;
+ }
+ }
- playback->set_params (playback, buf, vtx.hdr.regdata_size / 14 * 1000 / 50,
- 14 * 50 * 8, freq, bits / 8);
+CLEANUP:
+ ayemu_vtx_free(&vtx);
- g_free (buf);
+ g_mutex_lock(seek_mutex);
+ stop_flag = TRUE;
+ g_cond_signal(seek_cond); /* wake up any waiting request */
+ g_mutex_unlock(seek_mutex);
- tuple_free(ti);
+ playback->output->close_audio();
- playback->playing = TRUE;
- play_thread = g_thread_self();
- playback->set_pb_ready(playback);
- play_loop(playback);
- }
+ERR_NO_CLOSE:
+
+ return !error;
}
-void
-vtx_stop (InputPlayback *playback)
+void vtx_stop(InputPlayback * playback)
{
- if (playback->playing && play_thread != NULL)
- {
- playback->playing = FALSE;
+ g_mutex_lock(seek_mutex);
- g_thread_join (play_thread);
- play_thread = NULL;
- playback->output->close_audio ();
- ayemu_vtx_free (&vtx);
+ if (!stop_flag)
+ {
+ stop_flag = TRUE;
+ playback->output->abort_write();
+ g_cond_signal(seek_cond);
}
+
+ g_mutex_unlock (seek_mutex);
}
-/* seek to specified number of seconds */
-void
-vtx_seek (InputPlayback *playback, gint time)
+void vtx_seek(InputPlayback * playback, gint time)
{
- if (time * 50 < vtx.hdr.regdata_size / 14)
- {
- playback->eof = FALSE;
- seek_to = time;
+ g_mutex_lock(seek_mutex);
- /* wait for affect changes in parallel thread */
- while (seek_to != -1)
- g_usleep (10000);
+ if (!stop_flag)
+ {
+ seek_value = time;
+ playback->output->abort_write();
+ g_cond_signal(seek_cond);
+ g_cond_wait(seek_cond, seek_mutex);
}
+
+ g_mutex_unlock(seek_mutex);
}
-/* Pause or unpause */
-void
-vtx_pause (InputPlayback *playback, gshort p)
+void vtx_pause(InputPlayback * playback, gboolean pause)
{
- playback->output->pause (p);
+ g_mutex_lock(seek_mutex);
+
+ if (!stop_flag)
+ playback->output->pause(pause);
+
+ g_mutex_unlock(seek_mutex);
}
-InputPlugin vtx_ip = {
- .description = "VTX Audio Plugin", /* Plugin description */
- .init = vtx_init, /* Initialization */
- .about = vtx_about, /* Show aboutbox */
- .configure = NULL,
- .is_our_file = vtx_is_our_file, /* Check file, return 1 if the plugin can handle this file */
- .play_file = vtx_play_file, /* Play given file */
- .stop = vtx_stop, /* Stop playing */
- .pause = vtx_pause, /* Pause playing */
- .seek = vtx_seek, /* Seek time */
- .file_info_box = vtx_file_info, /* Show file-information dialog */
- .get_song_tuple = vtx_get_song_tuple, /* Tuple */
- .is_our_file_from_vfs = vtx_is_our_fd, /* VFS */
- .vfs_extensions = vtx_fmts /* ext assist */
-};
-
-InputPlugin *vtx_iplist[] = { &vtx_ip, NULL };
-
-SIMPLE_INPUT_PLUGIN(vtx, vtx_iplist);
+AUD_INPUT_PLUGIN
+(
+ .name = "VTX Audio",
+ .init = vtx_init,
+ .cleanup = vtx_cleanup,
+ .about = vtx_about,
+ .play = vtx_play,
+ .stop = vtx_stop,
+ .pause = vtx_pause,
+ .mseek = vtx_seek,
+ .file_info_box = vtx_file_info,
+ .probe_for_tuple = vtx_probe_for_tuple,
+ .is_our_file_from_vfs = vtx_is_our_fd,
+ .extensions = vtx_fmts
+)
diff --git a/src/vtx/vtx.h b/src/vtx/vtx.h
index 5445eff..22cdc9e 100644
--- a/src/vtx/vtx.h
+++ b/src/vtx/vtx.h
@@ -10,6 +10,6 @@
#include <audacious/plugin.h>
void vtx_about(void);
-void vtx_file_info(const gchar *filename);
+void vtx_file_info(const char *filename);
#endif
diff --git a/src/vtx/vtxfile.c b/src/vtx/vtxfile.c
index 590e7bc..479dc0d 100644
--- a/src/vtx/vtxfile.c
+++ b/src/vtx/vtxfile.c
@@ -1,3 +1,4 @@
+#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
@@ -49,7 +50,7 @@ static int read_word16(VFSFile *fp, int *p)
}
/* read 32-bit integer from file.
- * Returns 1 if error occurs
+ * Returns 1 if error occurs
*/
static int read_word32(VFSFile *fp, int32_t *p)
{
@@ -173,12 +174,12 @@ char *ayemu_vtx_load_data (ayemu_vtx_t *vtx)
fprintf(stderr, "ayemu_vtx_load_data: tune file not open yet (do you call ayemu_vtx_open first?)\n");
return NULL;
}
- packed_size = 0;
+ packed_size = 0;
buf_alloc = 4096;
packed_data = (char *) malloc (buf_alloc);
/* read packed AY register data to end of file. */
while ((c = vfs_getc (vtx->fp)) != EOF) {
- if (buf_alloc < packed_size) {
+ if (buf_alloc < packed_size) {
buf_alloc *= 2;
packed_data = (char *) realloc (packed_data, buf_alloc);
if (packed_data == NULL) {
@@ -188,7 +189,7 @@ char *ayemu_vtx_load_data (ayemu_vtx_t *vtx)
}
}
packed_data[packed_size++] = c;
- }
+ }
vfs_fclose (vtx->fp);
vtx->fp = NULL;
if ((vtx->regdata = (char *) malloc (vtx->hdr.regdata_size)) == NULL) {
diff --git a/src/wavpack/Makefile b/src/wavpack/Makefile
index ae8895c..d4afe12 100644
--- a/src/wavpack/Makefile
+++ b/src/wavpack/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${WAVPACK_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${WAVPACK_CFLAGS} -I../..
LIBS += ${WAVPACK_LIBS} ${GTK_LIBS} ${GLIB_LIBS} -laudtag
diff --git a/src/wavpack/wavpack.c b/src/wavpack/wavpack.c
index 12d664c..0dc875f 100644
--- a/src/wavpack/wavpack.c
+++ b/src/wavpack/wavpack.c
@@ -1,5 +1,3 @@
-//#define AUD_DEBUG
-
#include "config.h"
#include <wavpack/wavpack.h>
@@ -23,8 +21,7 @@
static GMutex *ctrl_mutex = NULL;
static GCond *ctrl_cond = NULL;
static gint64 seek_value = -1;
-static gboolean pause_flag;
-
+static gboolean stop_flag = FALSE;
/* Audacious VFS wrappers for Wavpack stream reading
*/
@@ -125,20 +122,19 @@ static gboolean wv_play (InputPlayback * playback, const gchar * filename,
if (file == NULL)
return FALSE;
- gshort paused = 0;
gint32 *input = NULL;
void *output = NULL;
gint sample_rate, num_channels, bits_per_sample;
- guint num_samples, length;
- gchar error[1024]; // fixme?! FIX ME halb apua hilfe scheisse --ccr
+ guint num_samples;
WavpackContext *ctx = NULL;
VFSFile *wvc_input = NULL;
+ gboolean error = FALSE;
- if (! wv_attach (filename, file, & wvc_input, & ctx, error, OPEN_TAGS |
+ if (! wv_attach (filename, file, & wvc_input, & ctx, NULL, OPEN_TAGS |
OPEN_WVC))
{
- g_warning("Error opening Wavpack file '%s'.", playback->filename);
- playback->error = 2;
+ g_warning("Error opening Wavpack file '%s'.", filename);
+ error = TRUE;
goto error_exit;
}
@@ -146,15 +142,17 @@ static gboolean wv_play (InputPlayback * playback, const gchar * filename,
num_channels = WavpackGetNumChannels(ctx);
bits_per_sample = WavpackGetBitsPerSample(ctx);
num_samples = WavpackGetNumSamples(ctx);
- length = num_samples / sample_rate;
if (!playback->output->open_audio(SAMPLE_FMT(bits_per_sample), sample_rate, num_channels))
{
g_warning("Error opening audio output.");
- playback->error = 1;
+ error = TRUE;
goto error_exit;
}
+ if (pause)
+ playback->output->pause(TRUE);
+
input = g_malloc(BUFFER_SIZE * num_channels * sizeof(guint32));
output = g_malloc(BUFFER_SIZE * num_channels * SAMPLE_SIZE(bits_per_sample));
if (input == NULL || output == NULL)
@@ -164,20 +162,17 @@ static gboolean wv_play (InputPlayback * playback, const gchar * filename,
g_mutex_lock(ctrl_mutex);
- playback->set_params(playback, NULL, 0,
- (gint) WavpackGetAverageBitrate(ctx, num_channels),
+ playback->set_params(playback, (gint) WavpackGetAverageBitrate(ctx, num_channels),
sample_rate, num_channels);
- pause_flag = pause;
seek_value = (start_time > 0) ? start_time : -1;
+ stop_flag = FALSE;
- playback->playing = TRUE;
- playback->eof = FALSE;
playback->set_pb_ready(playback);
g_mutex_unlock(ctrl_mutex);
- while (playback->playing && ! playback->eof && (stop_time < 0 ||
+ while (!stop_flag && (stop_time < 0 ||
playback->output->written_time () < stop_time))
{
gint ret;
@@ -194,20 +189,6 @@ static gboolean wv_play (InputPlayback * playback, const gchar * filename,
g_cond_signal(ctrl_cond);
}
- if (pause_flag != paused)
- {
- playback->output->pause(pause_flag);
- paused = pause_flag;
- g_cond_signal(ctrl_cond);
- }
-
- if (paused)
- {
- g_cond_wait(ctrl_cond, ctrl_mutex);
- g_mutex_unlock(ctrl_mutex);
- continue;
- }
-
g_mutex_unlock(ctrl_mutex);
/* Decode audio data */
@@ -215,7 +196,7 @@ static gboolean wv_play (InputPlayback * playback, const gchar * filename,
ret = WavpackUnpackSamples(ctx, input, BUFFER_SIZE);
if (samples_left == 0)
- playback->eof = TRUE;
+ stop_flag = TRUE;
else if (ret < 0)
{
g_warning("Error decoding file.\n");
@@ -253,7 +234,7 @@ static gboolean wv_play (InputPlayback * playback, const gchar * filename,
/* Flush buffer */
g_mutex_lock(ctrl_mutex);
- while (playback->playing && playback->output->buffer_playing())
+ while (!stop_flag && playback->output->buffer_playing())
g_usleep(20000);
g_cond_signal(ctrl_cond);
@@ -265,44 +246,45 @@ error_exit:
g_free(output);
wv_deattach (wvc_input, ctx);
- playback->playing = FALSE;
+ stop_flag = TRUE;
playback->output->close_audio();
- return ! playback->error;
+ return ! error;
}
static void
wv_stop(InputPlayback * playback)
{
g_mutex_lock(ctrl_mutex);
- playback->playing = FALSE;
- g_cond_signal(ctrl_cond);
- g_mutex_unlock(ctrl_mutex);
- g_thread_join(playback->thread);
- playback->thread = NULL;
+
+ if (!stop_flag)
+ {
+ stop_flag = TRUE;
+ playback->output->abort_write();
+ g_cond_signal(ctrl_cond);
+ }
+
+ g_mutex_unlock (ctrl_mutex);
}
static void
-wv_pause(InputPlayback * playback, gshort p)
+wv_pause(InputPlayback * playback, gboolean pause)
{
g_mutex_lock(ctrl_mutex);
- if (playback->playing)
- {
- pause_flag = p;
- g_cond_signal(ctrl_cond);
- g_cond_wait(ctrl_cond, ctrl_mutex);
- }
+ if (!stop_flag)
+ playback->output->pause(pause);
g_mutex_unlock(ctrl_mutex);
}
-static void wv_seek (InputPlayback * playback, gulong time)
+static void wv_seek (InputPlayback * playback, gint time)
{
g_mutex_lock(ctrl_mutex);
- if (playback->playing)
+ if (!stop_flag)
{
seek_value = time;
+ playback->output->abort_write();
g_cond_signal(ctrl_cond);
g_cond_wait(ctrl_cond, ctrl_mutex);
}
@@ -345,16 +327,16 @@ wv_probe_for_tuple(const gchar * filename, VFSFile * fd)
AUDDBG("starting probe of %p\n", fd);
- if (vfs_fseek (fd, 0, SEEK_SET))
- return NULL;
-
+ vfs_rewind(fd);
tu = tuple_new_from_filename(filename);
+
+ vfs_rewind(fd);
tag_tuple_read(tu, fd);
- tuple_associate_int(tu, FIELD_LENGTH, NULL,
+ tuple_set_int(tu, FIELD_LENGTH, NULL,
((guint64) WavpackGetNumSamples(ctx) * 1000) / (guint64) WavpackGetSampleRate(ctx));
- tuple_associate_string(tu, FIELD_CODEC, NULL, "WavPack");
- tuple_associate_string(tu, FIELD_QUALITY, NULL, wv_get_quality(ctx));
+ tuple_set_str(tu, FIELD_CODEC, NULL, "WavPack");
+ tuple_set_str(tu, FIELD_QUALITY, NULL, wv_get_quality(ctx));
WavpackCloseFile(ctx);
@@ -374,11 +356,11 @@ wv_about_box()
"Visit the Wavpack site at http://www.wavpack.com/\n"));
}
-static void
-wv_init(void)
+static gboolean wv_init (void)
{
ctrl_mutex = g_mutex_new();
ctrl_cond = g_cond_new();
+ return TRUE;
}
static void
@@ -395,10 +377,9 @@ static gboolean wv_write_tag (const Tuple * tuple, VFSFile * handle)
static const gchar *wv_fmts[] = { "wv", NULL };
-extern PluginPreferences preferences;
-
-static InputPlugin wvpack = {
- .description = "WavPack decoder",
+AUD_INPUT_PLUGIN
+(
+ .name = "WavPack decoder",
.init = wv_init,
.cleanup = wv_cleanup,
.about = wv_about_box,
@@ -406,11 +387,7 @@ static InputPlugin wvpack = {
.stop = wv_stop,
.pause = wv_pause,
.mseek = wv_seek,
- .vfs_extensions = wv_fmts,
+ .extensions = wv_fmts,
.probe_for_tuple = wv_probe_for_tuple,
.update_song_tuple = wv_write_tag,
-};
-
-InputPlugin *wv_iplist[] = { &wvpack, NULL };
-
-SIMPLE_INPUT_PLUGIN(wavpack, wv_iplist);
+)
diff --git a/src/xsf/Makefile b/src/xsf/Makefile
index 04d99dc..885fc4b 100644
--- a/src/xsf/Makefile
+++ b/src/xsf/Makefile
@@ -12,5 +12,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${INPUT_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS} -O0
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -Ispu/ -I.
-LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${MOWGLI_LIBS} -lm -lz
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} -I../.. -Ispu/ -I.
+LIBS += ${GTK_LIBS} ${GLIB_LIBS} -lm -lz
diff --git a/src/xsf/ao.h b/src/xsf/ao.h
index fc6adea..fdbbdfc 100755..100644
--- a/src/xsf/ao.h
+++ b/src/xsf/ao.h
@@ -79,10 +79,6 @@ typedef unsigned char ao_bool;
#endif
-#ifndef PATH_MAX
-#define PATH_MAX 2048
-#endif
-
typedef unsigned char uint8;
typedef unsigned char UINT8;
typedef signed char int8;
diff --git a/src/xsf/corlett.c b/src/xsf/corlett.c
index 4623081..acf3f07 100644
--- a/src/xsf/corlett.c
+++ b/src/xsf/corlett.c
@@ -170,13 +170,12 @@ int corlett_decode(uint8 *input, uint32 input_len, uint8 **output, uint64 *size,
tag_dec = input + (comp_length + res_area + 16);
if ((tag_dec[0] == '[') && (tag_dec[1] == 'T') && (tag_dec[2] == 'A') && (tag_dec[3] == 'G') && (tag_dec[4] == ']'))
{
- int tag, l, num_tags, data;
+ int l, num_tags, data;
// Tags found!
tag_dec += 5;
input_len -= 5;
- tag = 0;
data = false;
num_tags = 0;
l = 0;
diff --git a/src/xsf/desmume/SPU.c b/src/xsf/desmume/SPU.c
index ba9b392..4386315 100644
--- a/src/xsf/desmume/SPU.c
+++ b/src/xsf/desmume/SPU.c
@@ -794,8 +794,8 @@ static void decode_psg(SChannel *ch, s32 *out, int length)
if(ch->id < 14)
{
// NOTE: square wave.
- double pos, inc, len;
- pos = ch->pos; inc = ch->inc; len = ch->length;
+ double pos, inc;
+ pos = ch->pos; inc = ch->inc;
for(oi = 0; oi < length; oi++)
{
ch->output = (s16)g_psg_duty[ch->psg_duty][(int)pos & 0x00000007];
diff --git a/src/xsf/desmume/cp15.h b/src/xsf/desmume/cp15.h
index 49496f3..8312251 100644
--- a/src/xsf/desmume/cp15.h
+++ b/src/xsf/desmume/cp15.h
@@ -78,8 +78,7 @@ BOOL armcp15_load(armcp15_t *armcp15, u8 CRd, u8 adr);
BOOL armcp15_store(armcp15_t *armcp15, u8 CRd, u8 adr);
BOOL armcp15_moveCP2ARM(armcp15_t *armcp15, u32 * R, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2);
BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, u8 opcode2);
-INLINE BOOL armcp15_isAccessAllowed(armcp15_t *armcp15,u32 address,u32 access) ;
-
+BOOL armcp15_isAccessAllowed(armcp15_t *armcp15, u32 address, u32 access);
#define CP15_ACCESS_WRITE 0
#define CP15_ACCESS_READ 2
diff --git a/src/xsf/plugin.c b/src/xsf/plugin.c
index 79d29d0..03daa9d 100644
--- a/src/xsf/plugin.c
+++ b/src/xsf/plugin.c
@@ -24,29 +24,48 @@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <glib.h>
+#include <libgen.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <audacious/misc.h>
#include <audacious/plugin.h>
-#include <libaudcore/tuple_formatter.h>
#include "ao.h"
#include "corlett.h"
#include "vio2sf.h"
+static GMutex *seek_mutex;
+static GCond *seek_cond;
+static gint seek_value = -1;
+static gboolean stop_flag = FALSE;
+
+static gboolean xsf_init(void)
+{
+ seek_mutex = g_mutex_new();
+ seek_cond = g_cond_new();
+
+ return TRUE;
+}
+
+static void xsf_cleanup(void)
+{
+ g_mutex_free(seek_mutex);
+ g_cond_free(seek_cond);
+}
+
/* xsf_get_lib: called to load secondary files */
static gchar *path;
int xsf_get_lib(char *filename, void **buffer, unsigned int *length)
{
void *filebuf;
gint64 size;
- char buf[PATH_MAX];
-
- snprintf(buf, PATH_MAX, "%s/%s", dirname(path), filename);
- vfs_file_get_contents (buf, & filebuf, & size);
+ gchar * path2 = g_strdup_printf ("%s/%s", dirname (path), filename);
+ vfs_file_get_contents (path2, & filebuf, & size);
+ g_free (path2);
*buffer = filebuf;
*length = (uint64)size;
@@ -54,8 +73,7 @@ int xsf_get_lib(char *filename, void **buffer, unsigned int *length)
return AO_SUCCESS;
}
-static gint seek = 0;
-Tuple *xsf_tuple(const gchar *filename)
+Tuple *xsf_tuple(const gchar *filename, VFSFile *fd)
{
Tuple *t;
corlett_t *c;
@@ -72,15 +90,15 @@ Tuple *xsf_tuple(const gchar *filename)
t = tuple_new_from_filename(filename);
- tuple_associate_int(t, FIELD_LENGTH, NULL, c->inf_length ? psfTimeToMS(c->inf_length) + psfTimeToMS(c->inf_fade) : -1);
- tuple_associate_string(t, FIELD_ARTIST, NULL, c->inf_artist);
- tuple_associate_string(t, FIELD_ALBUM, NULL, c->inf_game);
- tuple_associate_string(t, -1, "game", c->inf_game);
- tuple_associate_string(t, FIELD_TITLE, NULL, c->inf_title);
- tuple_associate_string(t, FIELD_COPYRIGHT, NULL, c->inf_copy);
- tuple_associate_string(t, FIELD_QUALITY, NULL, "sequenced");
- tuple_associate_string(t, FIELD_CODEC, NULL, "GBA/Nintendo DS Audio");
- tuple_associate_string(t, -1, "console", "GBA/Nintendo DS");
+ tuple_set_int(t, FIELD_LENGTH, NULL, c->inf_length ? psfTimeToMS(c->inf_length) + psfTimeToMS(c->inf_fade) : -1);
+ tuple_set_str(t, FIELD_ARTIST, NULL, c->inf_artist);
+ tuple_set_str(t, FIELD_ALBUM, NULL, c->inf_game);
+ tuple_set_str(t, -1, "game", c->inf_game);
+ tuple_set_str(t, FIELD_TITLE, NULL, c->inf_title);
+ tuple_set_str(t, FIELD_COPYRIGHT, NULL, c->inf_copy);
+ tuple_set_str(t, FIELD_QUALITY, NULL, "sequenced");
+ tuple_set_str(t, FIELD_CODEC, NULL, "GBA/Nintendo DS Audio");
+ tuple_set_str(t, -1, "console", "GBA/Nintendo DS");
free(c);
g_free(buf);
@@ -88,161 +106,165 @@ Tuple *xsf_tuple(const gchar *filename)
return t;
}
-gchar *xsf_title(gchar *filename, gint *length)
+static gint xsf_get_length(const gchar *filename)
{
- gchar *title = NULL;
- Tuple *tuple = xsf_tuple(filename);
+ corlett_t *c;
+ void *buf;
+ gint64 size;
- if (tuple != NULL)
- {
- title = tuple_formatter_make_title_string(tuple, aud_get_gentitle_format());
- *length = tuple_get_int(tuple, FIELD_LENGTH, NULL);
- tuple_free(tuple);
- }
- else
+ vfs_file_get_contents(filename, &buf, &size);
+
+ if (!buf)
+ return -1;
+
+ if (corlett_decode(buf, size, NULL, NULL, &c) != AO_SUCCESS)
{
- title = g_path_get_basename(filename);
- *length = -1;
+ g_free(buf);
+ return -1;
}
- return title;
-}
-
-void xsf_update(unsigned char *buffer, long count, InputPlayback *playback);
+ free(c);
+ g_free(buf);
+ return c->inf_length ? psfTimeToMS(c->inf_length) + psfTimeToMS(c->inf_fade) : -1;
+}
-static gboolean xsf_play(InputPlayback * data, const gchar * filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause)
+static gboolean xsf_play(InputPlayback * playback, const gchar * filename, VFSFile * file, gint start_time, gint stop_time, gboolean pause)
{
void *buffer;
gint64 size;
- gint length;
- gchar *title = xsf_title(data->filename, &length);
+ gint length = xsf_get_length(filename);
gint16 samples[44100*2];
gint seglen = 44100 / 60;
gfloat pos;
+ gboolean error = FALSE;
- path = g_strdup(data->filename);
- vfs_file_get_contents (data->filename, & buffer, & size);
+ path = g_strdup(filename);
+ vfs_file_get_contents (filename, & buffer, & size);
if (xsf_start(buffer, size) != AO_SUCCESS)
{
- free(buffer);
- return TRUE;
+ error = TRUE;
+ goto ERR_NO_CLOSE;
}
- data->output->open_audio(FMT_S16_NE, 44100, 2);
+ if (!playback->output->open_audio(FMT_S16_NE, 44100, 2))
+ {
+ error = TRUE;
+ goto ERR_NO_CLOSE;
+ }
- data->set_params(data, title, length, 44100*2*2*8, 44100, 2);
+ playback->set_params(playback, 44100*2*2*8, 44100, 2);
- data->playing = TRUE;
- data->set_pb_ready(data);
+ if (pause)
+ playback->output->pause (TRUE);
- for (;;)
- {
- while (data->playing && !seek && !data->eof)
- {
- xsf_gen(samples, seglen);
- xsf_update((guint8 *)samples, seglen * 4, data);
+ stop_flag = FALSE;
+ playback->set_pb_ready(playback);
- if (data->output->written_time () > length)
- data->eof = TRUE;
- }
+ while (!stop_flag)
+ {
+ g_mutex_lock(seek_mutex);
- if (seek)
+ if (seek_value >= 0)
{
- if (seek > data->output->written_time ())
+ if (seek_value > playback->output->written_time ())
{
- pos = data->output->written_time ();
- while (pos < seek)
+ pos = playback->output->written_time ();
+
+ while (pos < seek_value)
{
xsf_gen(samples, seglen);
pos += 16.666;
}
- data->output->flush(seek);
- seek = 0;
+ playback->output->flush(seek_value);
+ seek_value = -1;
- continue;
+ g_cond_signal(seek_cond);
}
- else if (seek < data->output->written_time ())
+ else if (seek_value < playback->output->written_time ())
{
- data->eof = FALSE;
-
- g_print("xsf_term\n");
xsf_term();
- g_print("xsf_start... ");
+ g_free(path);
+ path = g_strdup(filename);
+
if (xsf_start(buffer, size) == AO_SUCCESS)
{
- g_print("ok!\n");
pos = 0;
- while (pos < seek)
+ while (pos < seek_value)
{
xsf_gen(samples, seglen);
pos += 16.666; /* each segment is 16.666ms */
}
- data->output->flush(seek);
- seek = 0;
+ playback->output->flush(seek_value);
+ seek_value = -1;
- continue;
+ g_cond_signal(seek_cond);
}
- else
+ else
{
- g_print("fail :(\n");
-
- data->output->close_audio();
-
- g_free(buffer);
- g_free(path);
- g_free(title);
-
- data->playing = FALSE;
-
- return TRUE;
+ error = TRUE;
+ goto CLEANUP;
}
}
}
- xsf_term();
+ g_mutex_unlock(seek_mutex);
- while (data->eof && data->output->buffer_playing())
- g_usleep(10000);
+ xsf_gen(samples, seglen);
+ playback->output->write_audio((guint8 *)samples, seglen * 4);
- data->output->close_audio();
+ if (playback->output->written_time() >= length)
+ {
+ while (!stop_flag && playback->output->buffer_playing())
+ g_usleep(10000);
- break;
+ goto CLEANUP;
+ }
}
+CLEANUP:
+ xsf_term();
+
+ g_mutex_lock(seek_mutex);
+ stop_flag = TRUE;
+ g_cond_signal(seek_cond); /* wake up any waiting request */
+ g_mutex_unlock(seek_mutex);
+
+ playback->output->close_audio();
+
+ERR_NO_CLOSE:
g_free(buffer);
g_free(path);
- g_free(title);
- data->playing = FALSE;
- return FALSE;
+ return !error;
}
-void xsf_update(guint8 *buffer, long count, InputPlayback *playback)
+void xsf_stop(InputPlayback *playback)
{
- if (buffer == NULL)
- {
- playback->playing = FALSE;
- playback->eof = TRUE;
+ g_mutex_lock(seek_mutex);
- return;
+ if (!stop_flag)
+ {
+ stop_flag = TRUE;
+ playback->output->abort_write();
+ g_cond_signal(seek_cond);
}
- playback->output->write_audio (buffer, count);
+ g_mutex_unlock (seek_mutex);
}
-void xsf_Stop(InputPlayback *playback)
+void xsf_pause(InputPlayback *playback, gboolean pause)
{
- playback->playing = FALSE;
-}
+ g_mutex_lock(seek_mutex);
-void xsf_pause(InputPlayback *playback, short p)
-{
- playback->output->pause(p);
+ if (!stop_flag)
+ playback->output->pause(pause);
+
+ g_mutex_unlock(seek_mutex);
}
gint xsf_is_our_fd(const gchar *filename, VFSFile *file)
@@ -254,32 +276,36 @@ gint xsf_is_our_fd(const gchar *filename, VFSFile *file)
if (!memcmp(magic, "PSF$", 4))
return 1;
- if (!memcmp(magic, "PSF\"", 4))
- return 1;
-
return 0;
}
-void xsf_Seek(InputPlayback *playback, gulong time)
+void xsf_seek(InputPlayback *playback, gint time)
{
- seek = time;
+ g_mutex_lock(seek_mutex);
+
+ if (!stop_flag)
+ {
+ seek_value = time;
+ playback->output->abort_write();
+ g_cond_signal(seek_cond);
+ g_cond_wait(seek_cond, seek_mutex);
+ }
+
+ g_mutex_unlock(seek_mutex);
}
-static const gchar *xsf_fmts[] = { "2sf", "mini2sf", "gsf", "minigsf", NULL };
+static const gchar *xsf_fmts[] = { "2sf", "mini2sf", NULL };
-static InputPlugin xsf_ip =
-{
- .description = "GSF/2SF Audio Plugin",
+AUD_INPUT_PLUGIN
+(
+ .name = "2SF Audio",
+ .init = xsf_init,
+ .cleanup = xsf_cleanup,
.play = xsf_play,
- .stop = xsf_Stop,
+ .stop = xsf_stop,
.pause = xsf_pause,
- .mseek = xsf_Seek,
- .get_song_tuple = xsf_tuple,
+ .mseek = xsf_seek,
+ .probe_for_tuple = xsf_tuple,
.is_our_file_from_vfs = xsf_is_our_fd,
- .vfs_extensions = xsf_fmts,
-};
-
-static InputPlugin *xsf_iplist[] = { &xsf_ip, NULL };
-
-DECLARE_PLUGIN(psf2, NULL, NULL, xsf_iplist, NULL, NULL, NULL, NULL, NULL);
-
+ .extensions = xsf_fmts,
+)
diff --git a/src/xsf/tagget.h b/src/xsf/tagget.h
index dbc08e0..8e1b1f2 100644
--- a/src/xsf/tagget.h
+++ b/src/xsf/tagget.h
@@ -8,14 +8,14 @@ static int xsf_tagsearchraw(const unsigned char *pData, int dwSize)
int dwPos;
int dwReservedAreaSize;
int dwProgramLength;
- int dwProgramCRC;
+/* int dwProgramCRC; */
if (dwSize < 16 + 5 + 1) return 0;
if (pData[0] != 'P') return 0;
if (pData[1] != 'S') return 0;
if (pData[2] != 'F') return 0;
dwReservedAreaSize = getdwordle(pData + 4);
dwProgramLength = getdwordle(pData + 8);
- dwProgramCRC = getdwordle(pData + 12);
+/* dwProgramCRC = getdwordle(pData + 12); */
dwPos = 16 + dwReservedAreaSize + dwProgramLength;
if (dwPos >= dwSize) return 0;
return dwPos;
diff --git a/src/xspf/Makefile b/src/xspf/Makefile
index c17e6e5..672ef4c 100644
--- a/src/xspf/Makefile
+++ b/src/xspf/Makefile
@@ -8,5 +8,5 @@ include ../../extra.mk
plugindir := ${plugindir}/${CONTAINER_PLUGIN_DIR}
CFLAGS += ${PLUGIN_CFLAGS}
-CPPFLAGS += ${PLUGIN_CPPFLAGS} ${MOWGLI_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${ARCH_DEFINES} ${XML_CFLAGS} -I../..
+CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS} ${XML_CFLAGS} -I../..
LIBS += ${GTK_LIBS} ${GLIB_LIBS} ${XML_LIBS}
diff --git a/src/xspf/xspf.c b/src/xspf/xspf.c
index db27e6a..3884267 100644
--- a/src/xspf/xspf.c
+++ b/src/xspf/xspf.c
@@ -2,7 +2,8 @@
* Audacious: A cross-platform multimedia player
* Copyright (c) 2006 William Pitcock, Tony Vroon, George Averill,
* Giacomo Lozito, Derek Pomery, Yoshiki Yazawa
- * and Matti Hämäläinen.
+ * and Matti Hämäläinen.
+ * Copyright (c) 2011 John Lindgren
*
* 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
@@ -19,30 +20,17 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-/* #define AUD_DEBUG 1 */
-
-#include <config.h>
-
#include <glib.h>
#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/xmlreader.h>
+#include <libxml/xmlsave.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
#include <libxml/uri.h>
-#include <audacious/debug.h>
-#include <audacious/misc.h>
-#include <audacious/playlist.h>
#include <audacious/plugin.h>
#define XSPF_ROOT_NODE_NAME "playlist"
@@ -69,10 +57,9 @@ static const xspf_entry_t xspf_entries[] = {
{ FIELD_QUALITY, "quality", TUPLE_STRING, TRUE},
{ FIELD_CODEC, "codec", TUPLE_STRING, TRUE},
- { FIELD_SONG_ARTIST, "song-artist", TUPLE_STRING, TRUE},
- { FIELD_MTIME, "mtime", TUPLE_INT, TRUE},
- { FIELD_FORMATTER, "formatter", TUPLE_STRING, TRUE},
+ { FIELD_SONG_ARTIST, "song-artist", TUPLE_STRING, TRUE},
+ { FIELD_COMPOSER, "composer", TUPLE_STRING, TRUE},
{ FIELD_PERFORMER, "performer", TUPLE_STRING, TRUE},
{ FIELD_COPYRIGHT, "copyright", TUPLE_STRING, TRUE},
{ FIELD_DATE, "date", TUPLE_STRING, TRUE},
@@ -95,13 +82,11 @@ static const xspf_entry_t xspf_entries[] = {
static const gint xspf_nentries = (sizeof(xspf_entries) / sizeof(xspf_entries[0]));
static void xspf_add_file (xmlNode * track, const gchar * filename, const gchar
- * base, struct index * filenames, struct index * tuples)
+ * base, Index * filenames, Index * tuples)
{
xmlNode *nptr;
- Tuple *tuple;
gchar *location = NULL;
-
- tuple = tuple_new();
+ Tuple * tuple = NULL;
for (nptr = track->children; nptr != NULL; nptr = nptr->next) {
if (nptr->type == XML_ELEMENT_NODE) {
@@ -110,22 +95,22 @@ static void xspf_add_file (xmlNode * track, const gchar * filename, const gchar
gchar *str = (gchar *)xmlNodeGetContent(nptr);
if (strstr (str, "://") != NULL)
- location = g_strdup (str);
+ location = str_get (str);
else if (str[0] == '/' && base != NULL)
{
const gchar * colon = strstr (base, "://");
if (colon != NULL)
- location = g_strdup_printf ("%.*s%s", (gint) (colon + 3
- - base), base, str);
+ location = str_printf ("%.*s%s", (gint) (colon + 3 -
+ base), base, str);
}
else if (base != NULL)
{
const gchar * slash = strrchr (base, '/');
if (slash != NULL)
- location = g_strdup_printf ("%.*s%s", (gint) (slash + 1
- - base), base, str);
+ location = str_printf ("%.*s%s", (gint) (slash + 1 -
+ base), base, str);
}
xmlFree(str);
@@ -149,11 +134,15 @@ static void xspf_add_file (xmlNode * track, const gchar * filename, const gchar
xmlChar *str = xmlNodeGetContent(nptr);
switch (xspf_entries[i].type) {
case TUPLE_STRING:
- tuple_associate_string(tuple, xspf_entries[i].tupleField, NULL, (gchar *)str);
+ if (! tuple)
+ tuple = tuple_new ();
+ tuple_set_str(tuple, xspf_entries[i].tupleField, NULL, (gchar *)str);
break;
case TUPLE_INT:
- tuple_associate_int(tuple, xspf_entries[i].tupleField, NULL, atol((char *)str));
+ if (! tuple)
+ tuple = tuple_new ();
+ tuple_set_int(tuple, xspf_entries[i].tupleField, NULL, atol((char *)str));
break;
default:
@@ -170,16 +159,19 @@ static void xspf_add_file (xmlNode * track, const gchar * filename, const gchar
if (location != NULL)
{
- tuple_set_filename(tuple, location);
+ if (tuple)
+ tuple_set_filename (tuple, location);
index_append(filenames, location);
index_append(tuples, tuple);
}
+ else if (tuple)
+ tuple_unref (tuple);
}
static void xspf_find_track (xmlNode * tracklist, const gchar * filename, const
- gchar * base, struct index * filenames, struct index * tuples)
+ gchar * base, Index * filenames, Index * tuples)
{
xmlNode *nptr;
@@ -190,41 +182,32 @@ static void xspf_find_track (xmlNode * tracklist, const gchar * filename, const
}
}
-#if 0
-static void xspf_find_audoptions(xmlNode *tracklist, const gchar *filename, gint pos)
+static gint read_cb (void * file, gchar * buf, gint len)
{
- xmlNode *nptr;
- Playlist *playlist = aud_playlist_get_active();
-
- for (nptr = tracklist->children; nptr != NULL; nptr = nptr->next) {
- if (nptr->type == XML_ELEMENT_NODE &&
- !xmlStrcmp(nptr->name, (xmlChar *)"options")) {
- xmlChar *opt = NULL;
+ return vfs_fread (buf, 1, len, file);
+}
- opt = xmlGetProp(nptr, (xmlChar *)"staticlist");
- if (!g_strcasecmp((char *)opt, "true"))
- playlist->attribute |= PLAYLIST_STATIC;
- else
- playlist->attribute ^= PLAYLIST_STATIC;
+static gint write_cb (void * file, const gchar * buf, gint len)
+{
+ return vfs_fwrite (buf, 1, len, file);
+}
- xmlFree(opt);
- }
- }
+static gint close_cb (void * file)
+{
+ return 0;
}
-#endif
-static void xspf_playlist_load(const gchar *filename, gint pos)
+static gboolean xspf_playlist_load (const gchar * filename, VFSFile * file,
+ gchar * * title, Index * filenames, Index * tuples)
{
- xmlDocPtr doc;
- xmlNode *nptr, *nptr2;
- struct index * filenames, * tuples;
+ xmlDoc * doc = xmlReadIO (read_cb, close_cb, file, filename, NULL,
+ XML_PARSE_RECOVER);
+ if (! doc)
+ return FALSE;
- doc = xmlRecoverFile(filename);
- if (doc == NULL)
- return;
+ * title = NULL;
- filenames = index_new ();
- tuples = index_new ();
+ xmlNode *nptr, *nptr2;
// find trackList
for (nptr = doc->children; nptr != NULL; nptr = nptr->next) {
@@ -234,41 +217,96 @@ static void xspf_playlist_load(const gchar *filename, gint pos)
base = (gchar *)xmlNodeGetBase(doc, nptr);
- for (nptr2 = nptr->children; nptr2 != NULL; nptr2 = nptr2->next) {
-#if 0
- if (nptr2->type == XML_ELEMENT_NODE &&
- !xmlStrcmp(nptr2->name, (xmlChar *)"extension")) {
- //check if application is audacious
- xmlChar *app = NULL;
- app = xmlGetProp(nptr2, (xmlChar *)"application");
- if (!xmlStrcmp(app, (xmlChar *)"audacious"))
- xspf_find_audoptions(nptr2, filename, pos);
- xmlFree(app);
- } else
-#endif
- if (nptr2->type == XML_ELEMENT_NODE &&
- !xmlStrcmp(nptr2->name, (xmlChar *)"title")) {
- xmlChar *title = xmlNodeGetContent(nptr2);
-
- if (title && *title) {
- aud_playlist_set_title (aud_playlist_get_active (),
- (const gchar *) title);
+ for (nptr2 = nptr->children; nptr2; nptr2 = nptr2->next)
+ {
+ if (nptr2->type != XML_ELEMENT_NODE)
+ continue;
+
+ if (! xmlStrcmp (nptr2->name, (xmlChar *) "title"))
+ {
+ xmlChar * xml_title = xmlNodeGetContent (nptr2);
+ if (xml_title && xml_title[0])
+ {
+ str_unref (* title);
+ * title = str_get ((gchar *) xml_title);
}
- xmlFree(title);
- } else
- if (nptr2->type == XML_ELEMENT_NODE &&
- !xmlStrcmp(nptr2->name, (xmlChar *)"trackList")) {
- xspf_find_track (nptr2, filename, base, filenames, tuples);
+ xmlFree (xml_title);
}
+ else if (! xmlStrcmp (nptr2->name, (xmlChar *) "trackList"))
+ xspf_find_track (nptr2, filename, base, filenames, tuples);
}
xmlFree (base);
}
}
+
xmlFreeDoc(doc);
+ return TRUE;
+}
+
+
+#define IS_VALID_CHAR(c) (((c) >= 0x20 && (c) <= 0xd7ff) || \
+ ((c) == 0x9) || \
+ ((c) == 0xa) || \
+ ((c) == 0xd) || \
+ ((c) >= 0xe000 && (c) <= 0xfffd) || \
+ ((c) >= 0x10000 && (c) <= 0x10ffff))
+
+/* check for characters that are invalid in XML */
+static gboolean is_valid_string (const gchar * s, gchar * * subst)
+{
+ if (! g_utf8_validate (s, -1, NULL))
+ goto NOT_VALID;
+
+ const gchar * p = s;
+ while (* p)
+ {
+ gunichar c = g_utf8_get_char (p);
+
+ if (IS_VALID_CHAR (c))
+ p = g_utf8_next_char (p);
+ else
+ goto NOT_VALID;
+ }
+
+ return TRUE;
+
+NOT_VALID:;
+ gint len = 0;
+
+ p = s;
+ while (* p)
+ {
+ gunichar c = g_utf8_get_char_validated (p, -1);
+
+ if (IS_VALID_CHAR (c))
+ {
+ len += g_unichar_to_utf8 (c, NULL);
+ p = g_utf8_next_char (p);
+ }
+ else
+ p ++;
+ }
+
+ * subst = g_malloc (len + 1);
+ gchar * w = * subst;
+
+ p = s;
+ while (* p)
+ {
+ gunichar c = g_utf8_get_char_validated (p, -1);
- aud_playlist_entry_insert_batch (aud_playlist_get_active (), pos, filenames,
- tuples);
+ if (IS_VALID_CHAR (c))
+ {
+ w += g_unichar_to_utf8 (c, w);
+ p = g_utf8_next_char (p);
+ }
+ else
+ p ++;
+ }
+
+ * w = 0;
+ return FALSE;
}
@@ -286,8 +324,15 @@ static void xspf_add_node(xmlNodePtr node, TupleValueType type,
tmp = xmlNewNode(NULL, (xmlChar *) xspfName);
switch (type) {
- case TUPLE_STRING:
- xmlAddChild(tmp, xmlNewText((xmlChar *) strVal));
+ case TUPLE_STRING:;
+ gchar * subst;
+ if (is_valid_string (strVal, & subst))
+ xmlAddChild (tmp, xmlNewText ((xmlChar *) strVal));
+ else
+ {
+ xmlAddChild (tmp, xmlNewText ((xmlChar *) subst));
+ g_free (subst);
+ }
break;
case TUPLE_INT:
@@ -303,21 +348,14 @@ static void xspf_add_node(xmlNodePtr node, TupleValueType type,
}
-static void xspf_playlist_save(const gchar *filename, gint pos)
+static gboolean xspf_playlist_save (const gchar * filename, VFSFile * file,
+ const gchar * title, Index * filenames, Index * tuples)
{
- gint playlist = aud_playlist_get_active ();
- const gchar * title = aud_playlist_get_title (playlist);
- gint entries = aud_playlist_entry_count (playlist);
+ gint entries = index_count (filenames);
xmlDocPtr doc;
xmlNodePtr rootnode, tracklist;
-#if 0
- gint baselen = 0;
- gchar *base = NULL;
-#endif
gint count;
- AUDDBG("filename='%s', pos=%d\n", filename, pos);
-
doc = xmlNewDoc((xmlChar *)"1.0");
doc->charset = XML_CHAR_ENCODING_UTF8;
doc->encoding = xmlStrdup((xmlChar *)"UTF-8");
@@ -326,107 +364,21 @@ static void xspf_playlist_save(const gchar *filename, gint pos)
xmlSetProp(rootnode, (xmlChar *)"version", (xmlChar *)"1");
xmlSetProp(rootnode, (xmlChar *)"xmlns", (xmlChar *)XSPF_XMLNS);
-#if 0
- /* relative */
- if (playlist->attribute & PLAYLIST_USE_RELATIVE) {
- /* prescan to determine base uri */
- for (node = playlist->entries; node != NULL; node = g_list_next(node)) {
- gchar *ptr1, *ptr2, *ptrslash;
- PlaylistEntry *entry = PLAYLIST_ENTRY(node->data);
- gchar *tmp;
- gint tmplen = 0;
-
- if (!is_uri(entry->filename)) { //obsolete
- gchar *tmp2 = g_path_get_dirname(entry->filename);
- tmp = g_strdup_printf("%s/", tmp2);
- g_free(tmp2);
- } else
- tmp = g_strdup(entry->filename);
-
- if (!base) {
- base = strdup(tmp);
- baselen = strlen(base);
- }
-
- ptr1 = base;
- ptrslash = ptr2 = tmp;
-
- while(ptr1 && ptr2 && *ptr1 && *ptr2 && *ptr1 == *ptr2) {
- if (*ptr2 == '/') ptrslash = ptr2 + 1;
-
- ptr1++;
- ptr2++;
- }
-
- if (!(*ptrslash)) ptrslash--;
- *ptrslash = '\0'; //terminate
- tmplen = ptrslash - tmp;
-
- if (tmplen <= baselen) {
- g_free(base);
- base = tmp;
- baselen = tmplen;
- AUDDBG("base='%s', baselen=%d\n", base, baselen);
- } else
- g_free(tmp);
- }
-
- /* set base URI */
- if (base) {
- gchar *tmp;
- if (!is_uri(base)) {
- tmp = (gchar *) xspf_path_to_uri((xmlChar *)base);
- if (tmp) {
- g_free(base);
- base = tmp;
- }
- }
-
- if (!is_uri(base)) {
- AUDDBG("base is not uri. something is wrong.\n");
- tmp = g_strdup_printf("file://%s", base);
- xmlSetProp(rootnode, (xmlChar *)"xml:base", (xmlChar *)tmp);
- g_free(tmp);
- } else
- xmlSetProp(rootnode, (xmlChar *)"xml:base", (xmlChar *)base);
- }
- } /* USE_RELATIVE */
-#endif
-
/* common */
xmlDocSetRootElement(doc, rootnode);
- xspf_add_node(rootnode, TUPLE_STRING, FALSE, "creator", PACKAGE "-" VERSION, 0);
-
-#if 0
- /* add staticlist marker */
- if (playlist->attribute & PLAYLIST_STATIC) {
- xmlNodePtr extension, options;
-
- extension = xmlNewNode(NULL, (xmlChar *)"extension");
- xmlSetProp(extension, (xmlChar *)"application", (xmlChar *)"audacious");
-
- options = xmlNewNode(NULL, (xmlChar *)"options");
- xmlSetProp(options, (xmlChar *)"staticlist", (xmlChar *)"true");
-
- xmlAddChild(extension, options);
- xmlAddChild(rootnode, extension);
- }
-#endif
- if (title != NULL)
+ if (title)
xspf_add_node (rootnode, TUPLE_STRING, FALSE, "title", title, 0);
tracklist = xmlNewNode(NULL, (xmlChar *)"trackList");
xmlAddChild(rootnode, tracklist);
- for (count = pos; count < entries; count ++)
+ for (count = 0; count < entries; count ++)
{
- const gchar * filename = aud_playlist_entry_get_filename (playlist,
- count);
- const Tuple * tuple = aud_playlist_entry_get_tuple (playlist, count,
- FALSE);
+ const gchar * filename = index_get (filenames, count);
+ const Tuple * tuple = index_get (tuples, count);
xmlNodePtr track, location;
- const gchar *scratch = NULL;
+ gchar *scratch = NULL;
gint scratchi = 0;
track = xmlNewNode(NULL, (xmlChar *)"track");
@@ -446,7 +398,10 @@ static void xspf_playlist_save(const gchar *filename, gint pos)
switch (xs->type) {
case TUPLE_STRING:
- scratch = tuple_get_string (tuple, xs->tupleField, NULL);
+ scratch = tuple_get_str (tuple, xs->tupleField, NULL);
+ if (! scratch)
+ isOK = FALSE;
+ str_unref(scratch);
break;
case TUPLE_INT:
scratchi = tuple_get_int (tuple, xs->tupleField, NULL);
@@ -461,33 +416,28 @@ static void xspf_playlist_save(const gchar *filename, gint pos)
}
}
- xmlSaveFormatFile(filename, doc, 1);
- xmlFreeDoc(doc);
-#if 0
- xmlFree(base);
-#endif
-}
-
-
-PlaylistContainer plc_xspf = {
- .name = "XSPF Playlist Format",
- .ext = "xspf",
- .plc_read = xspf_playlist_load,
- .plc_write = xspf_playlist_save,
-};
+ xmlSaveCtxt * save = xmlSaveToIO (write_cb, close_cb, file, NULL,
+ XML_SAVE_FORMAT);
+ if (! save)
+ goto ERR;
+ if (xmlSaveDoc (save, doc) < 0 || xmlSaveClose (save) < 0)
+ goto ERR;
-static void xspf_init(void)
-{
- aud_playlist_container_register(&plc_xspf);
-}
-
+ xmlFreeDoc(doc);
+ return TRUE;
-static void xspf_cleanup(void)
-{
- aud_playlist_container_unregister(&plc_xspf);
+ERR:
+ xmlFreeDoc (doc);
+ return FALSE;
}
+static const gchar * const xspf_exts[] = {"xspf", NULL};
-DECLARE_PLUGIN (xspf, xspf_init, xspf_cleanup, NULL, NULL, NULL, NULL, NULL,
- NULL)
+AUD_PLAYLIST_PLUGIN
+(
+ .name = "XML Shareable Playlist Format",
+ .extensions = xspf_exts,
+ .load = xspf_playlist_load,
+ .save = xspf_playlist_save
+)